Index: /mods/mod_rechnungen/lib/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/composer.json	(revision 8435)
@@ -0,0 +1,12 @@
+{
+    "name": "m1/wpsg_mod_rechnungen",
+    "authors": [
+        {
+            "name": "Daniel Schmitzer",
+            "email": "daniel@maennchen1.de"
+        }
+    ],
+    "require": {
+        "horstoeko/zugferd": "^1.0"
+    }
+}
Index: /mods/mod_rechnungen/lib/composer.lock
===================================================================
--- /mods/mod_rechnungen/lib/composer.lock	(revision 8435)
+++ /mods/mod_rechnungen/lib/composer.lock	(revision 8435)
@@ -0,0 +1,1393 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "d74754c5c24a1dc20dc07e4caa0ed342",
+    "packages": [
+        {
+            "name": "doctrine/instantiator",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
+                "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^11",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpbench/phpbench": "^1.2",
+                "phpstan/phpstan": "^1.9.4",
+                "phpstan/phpstan-phpunit": "^1.3",
+                "phpunit/phpunit": "^9.5.27",
+                "vimeo/psalm": "^5.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "https://ocramius.github.io/"
+                }
+            ],
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "support": {
+                "issues": "https://github.com/doctrine/instantiator/issues",
+                "source": "https://github.com/doctrine/instantiator/tree/2.0.0"
+            },
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2022-12-30T00:23:10+00:00"
+        },
+        {
+            "name": "doctrine/lexer",
+            "version": "3.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/lexer.git",
+                "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+                "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^12",
+                "phpstan/phpstan": "^1.10",
+                "phpunit/phpunit": "^10.5",
+                "psalm/plugin-phpunit": "^0.18.3",
+                "vimeo/psalm": "^5.21"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\Lexer\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+            "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+            "keywords": [
+                "annotations",
+                "docblock",
+                "lexer",
+                "parser",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/doctrine/lexer/issues",
+                "source": "https://github.com/doctrine/lexer/tree/3.0.1"
+            },
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-02-05T11:56:58+00:00"
+        },
+        {
+            "name": "goetas-webservices/xsd2php-runtime",
+            "version": "v0.2.17",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/goetas-webservices/xsd2php-runtime.git",
+                "reference": "be15c48cda6adfab82e180a69dfa1937e208cfe1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/goetas-webservices/xsd2php-runtime/zipball/be15c48cda6adfab82e180a69dfa1937e208cfe1",
+                "reference": "be15c48cda6adfab82e180a69dfa1937e208cfe1",
+                "shasum": ""
+            },
+            "require": {
+                "jms/serializer": "^1.2|^2.0|^3.0",
+                "php": ">=7.1",
+                "symfony/yaml": "^2.2|^3.0|^4.0|^5.0|^6.0|^7.0"
+            },
+            "conflict": {
+                "jms/serializer": "1.4.1|1.6.1|1.6.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^7.0|^8.0|^9.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.2-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GoetasWebservices\\Xsd\\XsdToPhpRuntime\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Asmir Mustafic"
+                }
+            ],
+            "description": "Convert XSD  (XML Schema) definitions into PHP classes",
+            "keywords": [
+                "converter",
+                "jms",
+                "php",
+                "serializer",
+                "xml",
+                "xsd"
+            ],
+            "support": {
+                "issues": "https://github.com/goetas-webservices/xsd2php-runtime/issues",
+                "source": "https://github.com/goetas-webservices/xsd2php-runtime/tree/v0.2.17"
+            },
+            "time": "2024-04-12T22:55:31+00:00"
+        },
+        {
+            "name": "horstoeko/mimedb",
+            "version": "v1.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/horstoeko/mimedb.git",
+                "reference": "2790b61cbff7f94ae8f40565761b15beb7792fcb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/horstoeko/mimedb/zipball/2790b61cbff7f94ae8f40565761b15beb7792fcb",
+                "reference": "2790b61cbff7f94ae8f40565761b15beb7792fcb",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.3|^7.4|^8.0|^8.1|^8.2|^8.3"
+            },
+            "require-dev": {
+                "pdepend/pdepend": "^2",
+                "phploc/phploc": "^7",
+                "phpmd/phpmd": "^2",
+                "phpstan/phpstan": "^1.8",
+                "phpunit/phpunit": "^9",
+                "sebastian/phpcpd": "^6",
+                "squizlabs/php_codesniffer": "^3"
+            },
+            "type": "package",
+            "autoload": {
+                "psr-4": {
+                    "horstoeko\\mimedb\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Daniel Erling",
+                    "email": "daniel@erling.com.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Get mimetypes by fileextensions and visa versa",
+            "homepage": "https://github.com/horstoeko/mimedb",
+            "keywords": [
+                "file extension",
+                "mimetype"
+            ],
+            "support": {
+                "issues": "https://github.com/horstoeko/mimedb/issues",
+                "source": "https://github.com/horstoeko/mimedb/tree/v1.0.5"
+            },
+            "time": "2023-09-22T20:17:48+00:00"
+        },
+        {
+            "name": "horstoeko/stringmanagement",
+            "version": "v1.0.11",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/horstoeko/stringmanagement.git",
+                "reference": "57f0c2bae4cba941902a02d8166d1f03fb52d08a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/horstoeko/stringmanagement/zipball/57f0c2bae4cba941902a02d8166d1f03fb52d08a",
+                "reference": "57f0c2bae4cba941902a02d8166d1f03fb52d08a",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.3|^7.4|^8.0|^8.1|^8.2|^8.3"
+            },
+            "require-dev": {
+                "pdepend/pdepend": "^2",
+                "phploc/phploc": "^7",
+                "phpmd/phpmd": "^2",
+                "phpstan/phpstan": "^1.8",
+                "phpunit/phpunit": "^9",
+                "sebastian/phpcpd": "^6",
+                "squizlabs/php_codesniffer": "^3"
+            },
+            "type": "package",
+            "autoload": {
+                "psr-4": {
+                    "horstoeko\\stringmanagement\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Daniel Erling",
+                    "email": "daniel@erling.com.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "A library for string manipulation utilities",
+            "homepage": "https://github.com/horstoeko/stringmanagement",
+            "keywords": [
+                "stringmanagement"
+            ],
+            "support": {
+                "issues": "https://github.com/horstoeko/stringmanagement/issues",
+                "source": "https://github.com/horstoeko/stringmanagement/tree/v1.0.11"
+            },
+            "time": "2023-02-12T14:16:40+00:00"
+        },
+        {
+            "name": "horstoeko/zugferd",
+            "version": "v1.0.57",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/horstoeko/zugferd.git",
+                "reference": "272e9baf94156496e0d7119616a9449b71f329d6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/272e9baf94156496e0d7119616a9449b71f329d6",
+                "reference": "272e9baf94156496e0d7119616a9449b71f329d6",
+                "shasum": ""
+            },
+            "require": {
+                "ext-simplexml": "*",
+                "goetas-webservices/xsd2php-runtime": "^0.2.13",
+                "horstoeko/mimedb": "^1",
+                "horstoeko/stringmanagement": "^1",
+                "jms/serializer": "^3",
+                "php": "^7.3|^7.4|^8",
+                "setasign/fpdf": "^1",
+                "setasign/fpdi": "^2",
+                "smalot/pdfparser": "^0|^2",
+                "symfony/process": "^5|^6|^7",
+                "symfony/validator": "^5|^6|^7",
+                "symfony/yaml": "^5|^6|^7"
+            },
+            "require-dev": {
+                "goetas-webservices/xsd2php": "^0",
+                "nette/php-generator": "*",
+                "pdepend/pdepend": "^2",
+                "phploc/phploc": "^7",
+                "phpmd/phpmd": "^2",
+                "phpstan/phpstan": "^1.8",
+                "phpunit/phpunit": "^9",
+                "sebastian/phpcpd": "^6",
+                "squizlabs/php_codesniffer": "^3"
+            },
+            "type": "package",
+            "autoload": {
+                "psr-4": {
+                    "horstoeko\\zugferd\\": "src",
+                    "horstoeko\\zugferd\\qdt\\": "src/entities/qdt",
+                    "horstoeko\\zugferd\\ram\\": "src/entities/ram",
+                    "horstoeko\\zugferd\\rsm\\": "src/entities/rsm",
+                    "horstoeko\\zugferd\\udt\\": "src/entities/udt"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Daniel Erling",
+                    "email": "daniel@erling.com.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "A library for creating and reading european electronic invoices",
+            "homepage": "https://github.com/horstoeko/zugferd",
+            "keywords": [
+                "ZUGFeRD",
+                "electronic",
+                "factur-x",
+                "invoice",
+                "xrechnung"
+            ],
+            "support": {
+                "issues": "https://github.com/horstoeko/zugferd/issues",
+                "source": "https://github.com/horstoeko/zugferd/tree/v1.0.57"
+            },
+            "time": "2024-07-10T03:39:20+00:00"
+        },
+        {
+            "name": "jms/metadata",
+            "version": "2.8.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/schmittjoh/metadata.git",
+                "reference": "7ca240dcac0c655eb15933ee55736ccd2ea0d7a6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/7ca240dcac0c655eb15933ee55736ccd2ea0d7a6",
+                "reference": "7ca240dcac0c655eb15933ee55736ccd2ea0d7a6",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2|^8.0"
+            },
+            "require-dev": {
+                "doctrine/cache": "^1.0",
+                "doctrine/coding-standard": "^8.0",
+                "mikey179/vfsstream": "^1.6.7",
+                "phpunit/phpunit": "^8.5|^9.0",
+                "psr/container": "^1.0|^2.0",
+                "symfony/cache": "^3.1|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.1|^4.0|^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Metadata\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Johannes M. Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                },
+                {
+                    "name": "Asmir Mustafic",
+                    "email": "goetas@gmail.com"
+                }
+            ],
+            "description": "Class/method/property metadata management in PHP",
+            "keywords": [
+                "annotations",
+                "metadata",
+                "xml",
+                "yaml"
+            ],
+            "support": {
+                "issues": "https://github.com/schmittjoh/metadata/issues",
+                "source": "https://github.com/schmittjoh/metadata/tree/2.8.0"
+            },
+            "time": "2023-02-15T13:44:18+00:00"
+        },
+        {
+            "name": "jms/serializer",
+            "version": "3.30.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/schmittjoh/serializer.git",
+                "reference": "bf1105358123d7c02ee6cad08ea33ab535a09d5e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/bf1105358123d7c02ee6cad08ea33ab535a09d5e",
+                "reference": "bf1105358123d7c02ee6cad08ea33ab535a09d5e",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.3.1 || ^2.0",
+                "doctrine/lexer": "^2.0 || ^3.0",
+                "jms/metadata": "^2.6",
+                "php": "^7.4 || ^8.0",
+                "phpstan/phpdoc-parser": "^1.20"
+            },
+            "require-dev": {
+                "doctrine/annotations": "^1.14 || ^2.0",
+                "doctrine/coding-standard": "^12.0",
+                "doctrine/orm": "^2.14 || ^3.0",
+                "doctrine/persistence": "^2.5.2 || ^3.0",
+                "doctrine/phpcr-odm": "^1.5.2 || ^2.0",
+                "ext-pdo_sqlite": "*",
+                "jackalope/jackalope-doctrine-dbal": "^1.3",
+                "ocramius/proxy-manager": "^1.0 || ^2.0",
+                "phpbench/phpbench": "^1.0",
+                "phpstan/phpstan": "^1.0.2",
+                "phpunit/phpunit": "^9.0 || ^10.0",
+                "psr/container": "^1.0 || ^2.0",
+                "rector/rector": "^0.19.0",
+                "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0",
+                "symfony/expression-language": "^5.4 || ^6.0 || ^7.0",
+                "symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
+                "symfony/form": "^5.4 || ^6.0 || ^7.0",
+                "symfony/translation": "^5.4 || ^6.0 || ^7.0",
+                "symfony/uid": "^5.4 || ^6.0 || ^7.0",
+                "symfony/validator": "^5.4 || ^6.0 || ^7.0",
+                "symfony/yaml": "^5.4 || ^6.0 || ^7.0",
+                "twig/twig": "^1.34 || ^2.4 || ^3.0"
+            },
+            "suggest": {
+                "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.",
+                "symfony/cache": "Required if you like to use cache functionality.",
+                "symfony/uid": "Required if you'd like to serialize UID objects.",
+                "symfony/yaml": "Required if you'd like to use the YAML metadata format."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "JMS\\Serializer\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Johannes M. Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                },
+                {
+                    "name": "Asmir Mustafic",
+                    "email": "goetas@gmail.com"
+                }
+            ],
+            "description": "Library for (de-)serializing data of any complexity; supports XML, and JSON.",
+            "homepage": "http://jmsyst.com/libs/serializer",
+            "keywords": [
+                "deserialization",
+                "jaxb",
+                "json",
+                "serialization",
+                "xml"
+            ],
+            "support": {
+                "issues": "https://github.com/schmittjoh/serializer/issues",
+                "source": "https://github.com/schmittjoh/serializer/tree/3.30.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/goetas",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-02-24T14:12:14+00:00"
+        },
+        {
+            "name": "phpstan/phpdoc-parser",
+            "version": "1.29.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpstan/phpdoc-parser.git",
+                "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4",
+                "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/annotations": "^2.0",
+                "nikic/php-parser": "^4.15",
+                "php-parallel-lint/php-parallel-lint": "^1.2",
+                "phpstan/extension-installer": "^1.0",
+                "phpstan/phpstan": "^1.5",
+                "phpstan/phpstan-phpunit": "^1.1",
+                "phpstan/phpstan-strict-rules": "^1.0",
+                "phpunit/phpunit": "^9.5",
+                "symfony/process": "^5.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "PHPStan\\PhpDocParser\\": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "PHPDoc parser with support for nullable, intersection and generic types",
+            "support": {
+                "issues": "https://github.com/phpstan/phpdoc-parser/issues",
+                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.1"
+            },
+            "time": "2024-05-31T08:52:43+00:00"
+        },
+        {
+            "name": "setasign/fpdf",
+            "version": "1.8.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Setasign/FPDF.git",
+                "reference": "d77904018090c17dc9f3ab6e944679a7a47e710a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Setasign/FPDF/zipball/d77904018090c17dc9f3ab6e944679a7a47e710a",
+                "reference": "d77904018090c17dc9f3ab6e944679a7a47e710a",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "fpdf.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Olivier Plathey",
+                    "email": "oliver@fpdf.org",
+                    "homepage": "http://fpdf.org/"
+                }
+            ],
+            "description": "FPDF is a PHP class which allows to generate PDF files with pure PHP. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.",
+            "homepage": "http://www.fpdf.org",
+            "keywords": [
+                "fpdf",
+                "pdf"
+            ],
+            "support": {
+                "source": "https://github.com/Setasign/FPDF/tree/1.8.2"
+            },
+            "time": "2019-12-08T10:32:10+00:00"
+        },
+        {
+            "name": "setasign/fpdi",
+            "version": "v2.6.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Setasign/FPDI.git",
+                "reference": "a6db878129ec6c7e141316ee71872923e7f1b7ad"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Setasign/FPDI/zipball/a6db878129ec6c7e141316ee71872923e7f1b7ad",
+                "reference": "a6db878129ec6c7e141316ee71872923e7f1b7ad",
+                "shasum": ""
+            },
+            "require": {
+                "ext-zlib": "*",
+                "php": "^5.6 || ^7.0 || ^8.0"
+            },
+            "conflict": {
+                "setasign/tfpdf": "<1.31"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "setasign/fpdf": "~1.8.6",
+                "setasign/tfpdf": "~1.33",
+                "squizlabs/php_codesniffer": "^3.5",
+                "tecnickcom/tcpdf": "~6.2"
+            },
+            "suggest": {
+                "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured."
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "setasign\\Fpdi\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jan Slabon",
+                    "email": "jan.slabon@setasign.com",
+                    "homepage": "https://www.setasign.com"
+                },
+                {
+                    "name": "Maximilian Kresse",
+                    "email": "maximilian.kresse@setasign.com",
+                    "homepage": "https://www.setasign.com"
+                }
+            ],
+            "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
+            "homepage": "https://www.setasign.com/fpdi",
+            "keywords": [
+                "fpdf",
+                "fpdi",
+                "pdf"
+            ],
+            "support": {
+                "issues": "https://github.com/Setasign/FPDI/issues",
+                "source": "https://github.com/Setasign/FPDI/tree/v2.6.0"
+            },
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2023-12-11T16:03:32+00:00"
+        },
+        {
+            "name": "smalot/pdfparser",
+            "version": "v2.11.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/smalot/pdfparser.git",
+                "reference": "ac8e6678b0940e4b2ccd5caadd3fb18e68093be6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/smalot/pdfparser/zipball/ac8e6678b0940e4b2ccd5caadd3fb18e68093be6",
+                "reference": "ac8e6678b0940e4b2ccd5caadd3fb18e68093be6",
+                "shasum": ""
+            },
+            "require": {
+                "ext-iconv": "*",
+                "ext-zlib": "*",
+                "php": ">=7.1",
+                "symfony/polyfill-mbstring": "^1.18"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Smalot\\PdfParser\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastien MALOT",
+                    "email": "sebastien@malot.fr"
+                }
+            ],
+            "description": "Pdf parser library. Can read and extract information from pdf file.",
+            "homepage": "https://www.pdfparser.org",
+            "keywords": [
+                "extract",
+                "parse",
+                "parser",
+                "pdf",
+                "text"
+            ],
+            "support": {
+                "issues": "https://github.com/smalot/pdfparser/issues",
+                "source": "https://github.com/smalot/pdfparser/tree/v2.11.0"
+            },
+            "time": "2024-08-16T06:48:03+00:00"
+        },
+        {
+            "name": "symfony/deprecation-contracts",
+            "version": "v3.5.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/deprecation-contracts.git",
+                "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
+                "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "function.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "A generic function and convention to trigger deprecation notices",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-04-18T09:32:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.30.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "0424dff1c58f028c451efff2045f5d92410bd540"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540",
+                "reference": "0424dff1c58f028c451efff2045f5d92410bd540",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "provide": {
+                "ext-ctype": "*"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-05-31T15:07:36+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.30.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c",
+                "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "provide": {
+                "ext-mbstring": "*"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-06-19T12:30:46+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php83",
+            "version": "v1.30.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php83.git",
+                "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9",
+                "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php83\\": ""
+                },
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-06-19T12:35:24+00:00"
+        },
+        {
+            "name": "symfony/process",
+            "version": "v6.4.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/process.git",
+                "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5",
+                "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Executes commands in sub-processes",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/process/tree/v6.4.8"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-05-31T14:49:08+00:00"
+        },
+        {
+            "name": "symfony/translation-contracts",
+            "version": "v3.5.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/translation-contracts.git",
+                "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a",
+                "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Translation\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Test/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to translation",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-04-18T09:32:20+00:00"
+        },
+        {
+            "name": "symfony/validator",
+            "version": "v6.4.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/validator.git",
+                "reference": "bcf939a9d1acd7d2912e9474c0c3d7840a03cbcd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/validator/zipball/bcf939a9d1acd7d2912e9474c0c3d7840a03cbcd",
+                "reference": "bcf939a9d1acd7d2912e9474c0c3d7840a03cbcd",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php83": "^1.27",
+                "symfony/translation-contracts": "^2.5|^3"
+            },
+            "conflict": {
+                "doctrine/annotations": "<1.13",
+                "doctrine/lexer": "<1.1",
+                "symfony/dependency-injection": "<5.4",
+                "symfony/expression-language": "<5.4",
+                "symfony/http-kernel": "<5.4",
+                "symfony/intl": "<5.4",
+                "symfony/property-info": "<5.4",
+                "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3",
+                "symfony/yaml": "<5.4"
+            },
+            "require-dev": {
+                "doctrine/annotations": "^1.13|^2",
+                "egulias/email-validator": "^2.1.10|^3|^4",
+                "symfony/cache": "^5.4|^6.0|^7.0",
+                "symfony/config": "^5.4|^6.0|^7.0",
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/expression-language": "^5.4|^6.0|^7.0",
+                "symfony/finder": "^5.4|^6.0|^7.0",
+                "symfony/http-client": "^5.4|^6.0|^7.0",
+                "symfony/http-foundation": "^5.4|^6.0|^7.0",
+                "symfony/http-kernel": "^5.4|^6.0|^7.0",
+                "symfony/intl": "^5.4|^6.0|^7.0",
+                "symfony/mime": "^5.4|^6.0|^7.0",
+                "symfony/property-access": "^5.4|^6.0|^7.0",
+                "symfony/property-info": "^5.4|^6.0|^7.0",
+                "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3",
+                "symfony/yaml": "^5.4|^6.0|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Validator\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/",
+                    "/Resources/bin/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides tools to validate values",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/validator/tree/v6.4.10"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-07-26T12:30:32+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v6.4.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "52903de178d542850f6f341ba92995d3d63e60c9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/52903de178d542850f6f341ba92995d3d63e60c9",
+                "reference": "52903de178d542850f6f341ba92995d3d63e60c9",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "symfony/console": "<5.4"
+            },
+            "require-dev": {
+                "symfony/console": "^5.4|^6.0|^7.0"
+            },
+            "bin": [
+                "Resources/bin/yaml-lint"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Loads and dumps YAML files",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/yaml/tree/v6.4.8"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-05-31T14:49:08+00:00"
+        }
+    ],
+    "packages-dev": [],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": [],
+    "platform-dev": [],
+    "plugin-api-version": "2.2.0"
+}
Index: /mods/mod_rechnungen/lib/vendor/autoload.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/autoload.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/autoload.php	(revision 8435)
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInit77946237feb5ddde22f404621e8201a7::getLoader();
Index: /mods/mod_rechnungen/lib/vendor/bin/yaml-lint
===================================================================
--- /mods/mod_rechnungen/lib/vendor/bin/yaml-lint	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/bin/yaml-lint	(revision 8435)
@@ -0,0 +1,117 @@
+#!/usr/bin/env php
+<?php
+
+/**
+ * Proxy PHP file generated by Composer
+ *
+ * This file includes the referenced bin path (../symfony/yaml/Resources/bin/yaml-lint)
+ * using a stream wrapper to prevent the shebang from being output on PHP<8
+ *
+ * @generated
+ */
+
+namespace Composer;
+
+$GLOBALS['_composer_bin_dir'] = __DIR__;
+$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
+
+if (PHP_VERSION_ID < 80000) {
+    if (!class_exists('Composer\BinProxyWrapper')) {
+        /**
+         * @internal
+         */
+        final class BinProxyWrapper
+        {
+            private $handle;
+            private $position;
+            private $realpath;
+
+            public function stream_open($path, $mode, $options, &$opened_path)
+            {
+                // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
+                $opened_path = substr($path, 17);
+                $this->realpath = realpath($opened_path) ?: $opened_path;
+                $opened_path = $this->realpath;
+                $this->handle = fopen($this->realpath, $mode);
+                $this->position = 0;
+
+                return (bool) $this->handle;
+            }
+
+            public function stream_read($count)
+            {
+                $data = fread($this->handle, $count);
+
+                if ($this->position === 0) {
+                    $data = preg_replace('{^#!.*\r?\n}', '', $data);
+                }
+
+                $this->position += strlen($data);
+
+                return $data;
+            }
+
+            public function stream_cast($castAs)
+            {
+                return $this->handle;
+            }
+
+            public function stream_close()
+            {
+                fclose($this->handle);
+            }
+
+            public function stream_lock($operation)
+            {
+                return $operation ? flock($this->handle, $operation) : true;
+            }
+
+            public function stream_seek($offset, $whence)
+            {
+                if (0 === fseek($this->handle, $offset, $whence)) {
+                    $this->position = ftell($this->handle);
+                    return true;
+                }
+
+                return false;
+            }
+
+            public function stream_tell()
+            {
+                return $this->position;
+            }
+
+            public function stream_eof()
+            {
+                return feof($this->handle);
+            }
+
+            public function stream_stat()
+            {
+                return array();
+            }
+
+            public function stream_set_option($option, $arg1, $arg2)
+            {
+                return true;
+            }
+
+            public function url_stat($path, $flags)
+            {
+                $path = substr($path, 17);
+                if (file_exists($path)) {
+                    return stat($path);
+                }
+
+                return false;
+            }
+        }
+    }
+
+    if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) {
+        include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint');
+        exit(0);
+    }
+}
+
+include __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint';
Index: /mods/mod_rechnungen/lib/vendor/composer/ClassLoader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/composer/ClassLoader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/composer/ClassLoader.php	(revision 8435)
@@ -0,0 +1,572 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ *     $loader = new \Composer\Autoload\ClassLoader();
+ *
+ *     // register classes with namespaces
+ *     $loader->add('Symfony\Component', __DIR__.'/component');
+ *     $loader->add('Symfony',           __DIR__.'/framework');
+ *
+ *     // activate the autoloader
+ *     $loader->register();
+ *
+ *     // to enable searching the include path (eg. for PEAR packages)
+ *     $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see    https://www.php-fig.org/psr/psr-0/
+ * @see    https://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+    /** @var ?string */
+    private $vendorDir;
+
+    // PSR-4
+    /**
+     * @var array[]
+     * @psalm-var array<string, array<string, int>>
+     */
+    private $prefixLengthsPsr4 = array();
+    /**
+     * @var array[]
+     * @psalm-var array<string, array<int, string>>
+     */
+    private $prefixDirsPsr4 = array();
+    /**
+     * @var array[]
+     * @psalm-var array<string, string>
+     */
+    private $fallbackDirsPsr4 = array();
+
+    // PSR-0
+    /**
+     * @var array[]
+     * @psalm-var array<string, array<string, string[]>>
+     */
+    private $prefixesPsr0 = array();
+    /**
+     * @var array[]
+     * @psalm-var array<string, string>
+     */
+    private $fallbackDirsPsr0 = array();
+
+    /** @var bool */
+    private $useIncludePath = false;
+
+    /**
+     * @var string[]
+     * @psalm-var array<string, string>
+     */
+    private $classMap = array();
+
+    /** @var bool */
+    private $classMapAuthoritative = false;
+
+    /**
+     * @var bool[]
+     * @psalm-var array<string, bool>
+     */
+    private $missingClasses = array();
+
+    /** @var ?string */
+    private $apcuPrefix;
+
+    /**
+     * @var self[]
+     */
+    private static $registeredLoaders = array();
+
+    /**
+     * @param ?string $vendorDir
+     */
+    public function __construct($vendorDir = null)
+    {
+        $this->vendorDir = $vendorDir;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getPrefixes()
+    {
+        if (!empty($this->prefixesPsr0)) {
+            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
+        }
+
+        return array();
+    }
+
+    /**
+     * @return array[]
+     * @psalm-return array<string, array<int, string>>
+     */
+    public function getPrefixesPsr4()
+    {
+        return $this->prefixDirsPsr4;
+    }
+
+    /**
+     * @return array[]
+     * @psalm-return array<string, string>
+     */
+    public function getFallbackDirs()
+    {
+        return $this->fallbackDirsPsr0;
+    }
+
+    /**
+     * @return array[]
+     * @psalm-return array<string, string>
+     */
+    public function getFallbackDirsPsr4()
+    {
+        return $this->fallbackDirsPsr4;
+    }
+
+    /**
+     * @return string[] Array of classname => path
+     * @psalm-return array<string, string>
+     */
+    public function getClassMap()
+    {
+        return $this->classMap;
+    }
+
+    /**
+     * @param string[] $classMap Class to filename map
+     * @psalm-param array<string, string> $classMap
+     *
+     * @return void
+     */
+    public function addClassMap(array $classMap)
+    {
+        if ($this->classMap) {
+            $this->classMap = array_merge($this->classMap, $classMap);
+        } else {
+            $this->classMap = $classMap;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix, either
+     * appending or prepending to the ones previously set for this prefix.
+     *
+     * @param string          $prefix  The prefix
+     * @param string[]|string $paths   The PSR-0 root directories
+     * @param bool            $prepend Whether to prepend the directories
+     *
+     * @return void
+     */
+    public function add($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            if ($prepend) {
+                $this->fallbackDirsPsr0 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr0
+                );
+            } else {
+                $this->fallbackDirsPsr0 = array_merge(
+                    $this->fallbackDirsPsr0,
+                    (array) $paths
+                );
+            }
+
+            return;
+        }
+
+        $first = $prefix[0];
+        if (!isset($this->prefixesPsr0[$first][$prefix])) {
+            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+            return;
+        }
+        if ($prepend) {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixesPsr0[$first][$prefix]
+            );
+        } else {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                $this->prefixesPsr0[$first][$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace, either
+     * appending or prepending to the ones previously set for this namespace.
+     *
+     * @param string          $prefix  The prefix/namespace, with trailing '\\'
+     * @param string[]|string $paths   The PSR-4 base directories
+     * @param bool            $prepend Whether to prepend the directories
+     *
+     * @throws \InvalidArgumentException
+     *
+     * @return void
+     */
+    public function addPsr4($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            // Register directories for the root namespace.
+            if ($prepend) {
+                $this->fallbackDirsPsr4 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr4
+                );
+            } else {
+                $this->fallbackDirsPsr4 = array_merge(
+                    $this->fallbackDirsPsr4,
+                    (array) $paths
+                );
+            }
+        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+            // Register directories for a new namespace.
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        } elseif ($prepend) {
+            // Prepend directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixDirsPsr4[$prefix]
+            );
+        } else {
+            // Append directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                $this->prefixDirsPsr4[$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix,
+     * replacing any others previously set for this prefix.
+     *
+     * @param string          $prefix The prefix
+     * @param string[]|string $paths  The PSR-0 base directories
+     *
+     * @return void
+     */
+    public function set($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr0 = (array) $paths;
+        } else {
+            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace,
+     * replacing any others previously set for this namespace.
+     *
+     * @param string          $prefix The prefix/namespace, with trailing '\\'
+     * @param string[]|string $paths  The PSR-4 base directories
+     *
+     * @throws \InvalidArgumentException
+     *
+     * @return void
+     */
+    public function setPsr4($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr4 = (array) $paths;
+        } else {
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Turns on searching the include path for class files.
+     *
+     * @param bool $useIncludePath
+     *
+     * @return void
+     */
+    public function setUseIncludePath($useIncludePath)
+    {
+        $this->useIncludePath = $useIncludePath;
+    }
+
+    /**
+     * Can be used to check if the autoloader uses the include path to check
+     * for classes.
+     *
+     * @return bool
+     */
+    public function getUseIncludePath()
+    {
+        return $this->useIncludePath;
+    }
+
+    /**
+     * Turns off searching the prefix and fallback directories for classes
+     * that have not been registered with the class map.
+     *
+     * @param bool $classMapAuthoritative
+     *
+     * @return void
+     */
+    public function setClassMapAuthoritative($classMapAuthoritative)
+    {
+        $this->classMapAuthoritative = $classMapAuthoritative;
+    }
+
+    /**
+     * Should class lookup fail if not found in the current class map?
+     *
+     * @return bool
+     */
+    public function isClassMapAuthoritative()
+    {
+        return $this->classMapAuthoritative;
+    }
+
+    /**
+     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+     *
+     * @param string|null $apcuPrefix
+     *
+     * @return void
+     */
+    public function setApcuPrefix($apcuPrefix)
+    {
+        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
+    }
+
+    /**
+     * The APCu prefix in use, or null if APCu caching is not enabled.
+     *
+     * @return string|null
+     */
+    public function getApcuPrefix()
+    {
+        return $this->apcuPrefix;
+    }
+
+    /**
+     * Registers this instance as an autoloader.
+     *
+     * @param bool $prepend Whether to prepend the autoloader or not
+     *
+     * @return void
+     */
+    public function register($prepend = false)
+    {
+        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+
+        if (null === $this->vendorDir) {
+            return;
+        }
+
+        if ($prepend) {
+            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
+        } else {
+            unset(self::$registeredLoaders[$this->vendorDir]);
+            self::$registeredLoaders[$this->vendorDir] = $this;
+        }
+    }
+
+    /**
+     * Unregisters this instance as an autoloader.
+     *
+     * @return void
+     */
+    public function unregister()
+    {
+        spl_autoload_unregister(array($this, 'loadClass'));
+
+        if (null !== $this->vendorDir) {
+            unset(self::$registeredLoaders[$this->vendorDir]);
+        }
+    }
+
+    /**
+     * Loads the given class or interface.
+     *
+     * @param  string    $class The name of the class
+     * @return true|null True if loaded, null otherwise
+     */
+    public function loadClass($class)
+    {
+        if ($file = $this->findFile($class)) {
+            includeFile($file);
+
+            return true;
+        }
+
+        return null;
+    }
+
+    /**
+     * Finds the path to the file where the class is defined.
+     *
+     * @param string $class The name of the class
+     *
+     * @return string|false The path if found, false otherwise
+     */
+    public function findFile($class)
+    {
+        // class map lookup
+        if (isset($this->classMap[$class])) {
+            return $this->classMap[$class];
+        }
+        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+            return false;
+        }
+        if (null !== $this->apcuPrefix) {
+            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+            if ($hit) {
+                return $file;
+            }
+        }
+
+        $file = $this->findFileWithExtension($class, '.php');
+
+        // Search for Hack files if we are running on HHVM
+        if (false === $file && defined('HHVM_VERSION')) {
+            $file = $this->findFileWithExtension($class, '.hh');
+        }
+
+        if (null !== $this->apcuPrefix) {
+            apcu_add($this->apcuPrefix.$class, $file);
+        }
+
+        if (false === $file) {
+            // Remember that this class does not exist.
+            $this->missingClasses[$class] = true;
+        }
+
+        return $file;
+    }
+
+    /**
+     * Returns the currently registered loaders indexed by their corresponding vendor directories.
+     *
+     * @return self[]
+     */
+    public static function getRegisteredLoaders()
+    {
+        return self::$registeredLoaders;
+    }
+
+    /**
+     * @param  string       $class
+     * @param  string       $ext
+     * @return string|false
+     */
+    private function findFileWithExtension($class, $ext)
+    {
+        // PSR-4 lookup
+        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+        $first = $class[0];
+        if (isset($this->prefixLengthsPsr4[$first])) {
+            $subPath = $class;
+            while (false !== $lastPos = strrpos($subPath, '\\')) {
+                $subPath = substr($subPath, 0, $lastPos);
+                $search = $subPath . '\\';
+                if (isset($this->prefixDirsPsr4[$search])) {
+                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
+                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
+                        if (file_exists($file = $dir . $pathEnd)) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-4 fallback dirs
+        foreach ($this->fallbackDirsPsr4 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 lookup
+        if (false !== $pos = strrpos($class, '\\')) {
+            // namespaced class name
+            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+        } else {
+            // PEAR-like class name
+            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+        }
+
+        if (isset($this->prefixesPsr0[$first])) {
+            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($dirs as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-0 fallback dirs
+        foreach ($this->fallbackDirsPsr0 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 include paths.
+        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+            return $file;
+        }
+
+        return false;
+    }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ *
+ * @param  string $file
+ * @return void
+ * @private
+ */
+function includeFile($file)
+{
+    include $file;
+}
Index: /mods/mod_rechnungen/lib/vendor/composer/InstalledVersions.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/composer/InstalledVersions.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/composer/InstalledVersions.php	(revision 8435)
@@ -0,0 +1,350 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer;
+
+use Composer\Autoload\ClassLoader;
+use Composer\Semver\VersionParser;
+
+/**
+ * This class is copied in every Composer installed project and available to all
+ *
+ * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
+ *
+ * To require its presence, you can require `composer-runtime-api ^2.0`
+ */
+class InstalledVersions
+{
+    /**
+     * @var mixed[]|null
+     * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
+     */
+    private static $installed;
+
+    /**
+     * @var bool|null
+     */
+    private static $canGetVendors;
+
+    /**
+     * @var array[]
+     * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
+     */
+    private static $installedByVendor = array();
+
+    /**
+     * Returns a list of all package names which are present, either by being installed, replaced or provided
+     *
+     * @return string[]
+     * @psalm-return list<string>
+     */
+    public static function getInstalledPackages()
+    {
+        $packages = array();
+        foreach (self::getInstalled() as $installed) {
+            $packages[] = array_keys($installed['versions']);
+        }
+
+        if (1 === \count($packages)) {
+            return $packages[0];
+        }
+
+        return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
+    }
+
+    /**
+     * Returns a list of all package names with a specific type e.g. 'library'
+     *
+     * @param  string   $type
+     * @return string[]
+     * @psalm-return list<string>
+     */
+    public static function getInstalledPackagesByType($type)
+    {
+        $packagesByType = array();
+
+        foreach (self::getInstalled() as $installed) {
+            foreach ($installed['versions'] as $name => $package) {
+                if (isset($package['type']) && $package['type'] === $type) {
+                    $packagesByType[] = $name;
+                }
+            }
+        }
+
+        return $packagesByType;
+    }
+
+    /**
+     * Checks whether the given package is installed
+     *
+     * This also returns true if the package name is provided or replaced by another package
+     *
+     * @param  string $packageName
+     * @param  bool   $includeDevRequirements
+     * @return bool
+     */
+    public static function isInstalled($packageName, $includeDevRequirements = true)
+    {
+        foreach (self::getInstalled() as $installed) {
+            if (isset($installed['versions'][$packageName])) {
+                return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Checks whether the given package satisfies a version constraint
+     *
+     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
+     *
+     *   Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
+     *
+     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality
+     * @param  string        $packageName
+     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
+     * @return bool
+     */
+    public static function satisfies(VersionParser $parser, $packageName, $constraint)
+    {
+        $constraint = $parser->parseConstraints($constraint);
+        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
+
+        return $provided->matches($constraint);
+    }
+
+    /**
+     * Returns a version constraint representing all the range(s) which are installed for a given package
+     *
+     * It is easier to use this via isInstalled() with the $constraint argument if you need to check
+     * whether a given version of a package is installed, and not just whether it exists
+     *
+     * @param  string $packageName
+     * @return string Version constraint usable with composer/semver
+     */
+    public static function getVersionRanges($packageName)
+    {
+        foreach (self::getInstalled() as $installed) {
+            if (!isset($installed['versions'][$packageName])) {
+                continue;
+            }
+
+            $ranges = array();
+            if (isset($installed['versions'][$packageName]['pretty_version'])) {
+                $ranges[] = $installed['versions'][$packageName]['pretty_version'];
+            }
+            if (array_key_exists('aliases', $installed['versions'][$packageName])) {
+                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
+            }
+            if (array_key_exists('replaced', $installed['versions'][$packageName])) {
+                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
+            }
+            if (array_key_exists('provided', $installed['versions'][$packageName])) {
+                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
+            }
+
+            return implode(' || ', $ranges);
+        }
+
+        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+    }
+
+    /**
+     * @param  string      $packageName
+     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
+     */
+    public static function getVersion($packageName)
+    {
+        foreach (self::getInstalled() as $installed) {
+            if (!isset($installed['versions'][$packageName])) {
+                continue;
+            }
+
+            if (!isset($installed['versions'][$packageName]['version'])) {
+                return null;
+            }
+
+            return $installed['versions'][$packageName]['version'];
+        }
+
+        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+    }
+
+    /**
+     * @param  string      $packageName
+     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
+     */
+    public static function getPrettyVersion($packageName)
+    {
+        foreach (self::getInstalled() as $installed) {
+            if (!isset($installed['versions'][$packageName])) {
+                continue;
+            }
+
+            if (!isset($installed['versions'][$packageName]['pretty_version'])) {
+                return null;
+            }
+
+            return $installed['versions'][$packageName]['pretty_version'];
+        }
+
+        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+    }
+
+    /**
+     * @param  string      $packageName
+     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
+     */
+    public static function getReference($packageName)
+    {
+        foreach (self::getInstalled() as $installed) {
+            if (!isset($installed['versions'][$packageName])) {
+                continue;
+            }
+
+            if (!isset($installed['versions'][$packageName]['reference'])) {
+                return null;
+            }
+
+            return $installed['versions'][$packageName]['reference'];
+        }
+
+        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+    }
+
+    /**
+     * @param  string      $packageName
+     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
+     */
+    public static function getInstallPath($packageName)
+    {
+        foreach (self::getInstalled() as $installed) {
+            if (!isset($installed['versions'][$packageName])) {
+                continue;
+            }
+
+            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
+        }
+
+        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+    }
+
+    /**
+     * @return array
+     * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
+     */
+    public static function getRootPackage()
+    {
+        $installed = self::getInstalled();
+
+        return $installed[0]['root'];
+    }
+
+    /**
+     * Returns the raw installed.php data for custom implementations
+     *
+     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
+     * @return array[]
+     * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
+     */
+    public static function getRawData()
+    {
+        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
+
+        if (null === self::$installed) {
+            // only require the installed.php file if this file is loaded from its dumped location,
+            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
+            if (substr(__DIR__, -8, 1) !== 'C') {
+                self::$installed = include __DIR__ . '/installed.php';
+            } else {
+                self::$installed = array();
+            }
+        }
+
+        return self::$installed;
+    }
+
+    /**
+     * Returns the raw data of all installed.php which are currently loaded for custom implementations
+     *
+     * @return array[]
+     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
+     */
+    public static function getAllRawData()
+    {
+        return self::getInstalled();
+    }
+
+    /**
+     * Lets you reload the static array from another file
+     *
+     * This is only useful for complex integrations in which a project needs to use
+     * this class but then also needs to execute another project's autoloader in process,
+     * and wants to ensure both projects have access to their version of installed.php.
+     *
+     * A typical case would be PHPUnit, where it would need to make sure it reads all
+     * the data it needs from this class, then call reload() with
+     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
+     * the project in which it runs can then also use this class safely, without
+     * interference between PHPUnit's dependencies and the project's dependencies.
+     *
+     * @param  array[] $data A vendor/composer/installed.php data set
+     * @return void
+     *
+     * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
+     */
+    public static function reload($data)
+    {
+        self::$installed = $data;
+        self::$installedByVendor = array();
+    }
+
+    /**
+     * @return array[]
+     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
+     */
+    private static function getInstalled()
+    {
+        if (null === self::$canGetVendors) {
+            self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
+        }
+
+        $installed = array();
+
+        if (self::$canGetVendors) {
+            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
+                if (isset(self::$installedByVendor[$vendorDir])) {
+                    $installed[] = self::$installedByVendor[$vendorDir];
+                } elseif (is_file($vendorDir.'/composer/installed.php')) {
+                    $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
+                    if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
+                        self::$installed = $installed[count($installed) - 1];
+                    }
+                }
+            }
+        }
+
+        if (null === self::$installed) {
+            // only require the installed.php file if this file is loaded from its dumped location,
+            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
+            if (substr(__DIR__, -8, 1) !== 'C') {
+                self::$installed = require __DIR__ . '/installed.php';
+            } else {
+                self::$installed = array();
+            }
+        }
+        $installed[] = self::$installed;
+
+        return $installed;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/composer/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/composer/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/composer/LICENSE	(revision 8435)
@@ -0,0 +1,19 @@
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/composer/autoload_classmap.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/composer/autoload_classmap.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/composer/autoload_classmap.php	(revision 8435)
@@ -0,0 +1,22 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
+    'DateError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateError.php',
+    'DateException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateException.php',
+    'DateInvalidOperationException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php',
+    'DateInvalidTimeZoneException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php',
+    'DateMalformedIntervalStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php',
+    'DateMalformedPeriodStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php',
+    'DateMalformedStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php',
+    'DateObjectError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateObjectError.php',
+    'DateRangeError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateRangeError.php',
+    'FPDF' => $vendorDir . '/setasign/fpdf/fpdf.php',
+    'Override' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/Override.php',
+    'SQLite3Exception' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/SQLite3Exception.php',
+);
Index: /mods/mod_rechnungen/lib/vendor/composer/autoload_files.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/composer/autoload_files.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/composer/autoload_files.php	(revision 8435)
@@ -0,0 +1,13 @@
+<?php
+
+// autoload_files.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
+    '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
+    '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
+    '662a729f963d39afe703c9d9b7ab4a8c' => $vendorDir . '/symfony/polyfill-php83/bootstrap.php',
+);
Index: /mods/mod_rechnungen/lib/vendor/composer/autoload_namespaces.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/composer/autoload_namespaces.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/composer/autoload_namespaces.php	(revision 8435)
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'Smalot\\PdfParser\\' => array($vendorDir . '/smalot/pdfparser/src'),
+);
Index: /mods/mod_rechnungen/lib/vendor/composer/autoload_psr4.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/composer/autoload_psr4.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/composer/autoload_psr4.php	(revision 8435)
@@ -0,0 +1,30 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'setasign\\Fpdi\\' => array($vendorDir . '/setasign/fpdi/src'),
+    'horstoeko\\zugferd\\udt\\' => array($vendorDir . '/horstoeko/zugferd/src/entities/udt'),
+    'horstoeko\\zugferd\\rsm\\' => array($vendorDir . '/horstoeko/zugferd/src/entities/rsm'),
+    'horstoeko\\zugferd\\ram\\' => array($vendorDir . '/horstoeko/zugferd/src/entities/ram'),
+    'horstoeko\\zugferd\\qdt\\' => array($vendorDir . '/horstoeko/zugferd/src/entities/qdt'),
+    'horstoeko\\zugferd\\' => array($vendorDir . '/horstoeko/zugferd/src'),
+    'horstoeko\\stringmanagement\\' => array($vendorDir . '/horstoeko/stringmanagement/src'),
+    'horstoeko\\mimedb\\' => array($vendorDir . '/horstoeko/mimedb/src'),
+    'Symfony\\Polyfill\\Php83\\' => array($vendorDir . '/symfony/polyfill-php83'),
+    'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
+    'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
+    'Symfony\\Contracts\\Translation\\' => array($vendorDir . '/symfony/translation-contracts'),
+    'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
+    'Symfony\\Component\\Validator\\' => array($vendorDir . '/symfony/validator'),
+    'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'),
+    'PHPStan\\PhpDocParser\\' => array($vendorDir . '/phpstan/phpdoc-parser/src'),
+    'Metadata\\' => array($vendorDir . '/jms/metadata/src'),
+    'JMS\\Serializer\\' => array($vendorDir . '/jms/serializer/src'),
+    'GoetasWebservices\\Xsd\\XsdToPhpRuntime\\' => array($vendorDir . '/goetas-webservices/xsd2php-runtime/src'),
+    'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'),
+    'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/src'),
+);
Index: /mods/mod_rechnungen/lib/vendor/composer/autoload_real.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/composer/autoload_real.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/composer/autoload_real.php	(revision 8435)
@@ -0,0 +1,80 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInit77946237feb5ddde22f404621e8201a7
+{
+    private static $loader;
+
+    public static function loadClassLoader($class)
+    {
+        if ('Composer\Autoload\ClassLoader' === $class) {
+            require __DIR__ . '/ClassLoader.php';
+        }
+    }
+
+    /**
+     * @return \Composer\Autoload\ClassLoader
+     */
+    public static function getLoader()
+    {
+        if (null !== self::$loader) {
+            return self::$loader;
+        }
+
+        require __DIR__ . '/platform_check.php';
+
+        spl_autoload_register(array('ComposerAutoloaderInit77946237feb5ddde22f404621e8201a7', 'loadClassLoader'), true, true);
+        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
+        spl_autoload_unregister(array('ComposerAutoloaderInit77946237feb5ddde22f404621e8201a7', 'loadClassLoader'));
+
+        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+        if ($useStaticLoader) {
+            require __DIR__ . '/autoload_static.php';
+
+            call_user_func(\Composer\Autoload\ComposerStaticInit77946237feb5ddde22f404621e8201a7::getInitializer($loader));
+        } else {
+            $map = require __DIR__ . '/autoload_namespaces.php';
+            foreach ($map as $namespace => $path) {
+                $loader->set($namespace, $path);
+            }
+
+            $map = require __DIR__ . '/autoload_psr4.php';
+            foreach ($map as $namespace => $path) {
+                $loader->setPsr4($namespace, $path);
+            }
+
+            $classMap = require __DIR__ . '/autoload_classmap.php';
+            if ($classMap) {
+                $loader->addClassMap($classMap);
+            }
+        }
+
+        $loader->register(true);
+
+        if ($useStaticLoader) {
+            $includeFiles = Composer\Autoload\ComposerStaticInit77946237feb5ddde22f404621e8201a7::$files;
+        } else {
+            $includeFiles = require __DIR__ . '/autoload_files.php';
+        }
+        foreach ($includeFiles as $fileIdentifier => $file) {
+            composerRequire77946237feb5ddde22f404621e8201a7($fileIdentifier, $file);
+        }
+
+        return $loader;
+    }
+}
+
+/**
+ * @param string $fileIdentifier
+ * @param string $file
+ * @return void
+ */
+function composerRequire77946237feb5ddde22f404621e8201a7($fileIdentifier, $file)
+{
+    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+
+        require $file;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/composer/autoload_static.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/composer/autoload_static.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/composer/autoload_static.php	(revision 8435)
@@ -0,0 +1,187 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInit77946237feb5ddde22f404621e8201a7
+{
+    public static $files = array (
+        '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
+        '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
+        '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
+        '662a729f963d39afe703c9d9b7ab4a8c' => __DIR__ . '/..' . '/symfony/polyfill-php83/bootstrap.php',
+    );
+
+    public static $prefixLengthsPsr4 = array (
+        's' => 
+        array (
+            'setasign\\Fpdi\\' => 14,
+        ),
+        'h' => 
+        array (
+            'horstoeko\\zugferd\\udt\\' => 22,
+            'horstoeko\\zugferd\\rsm\\' => 22,
+            'horstoeko\\zugferd\\ram\\' => 22,
+            'horstoeko\\zugferd\\qdt\\' => 22,
+            'horstoeko\\zugferd\\' => 18,
+            'horstoeko\\stringmanagement\\' => 27,
+            'horstoeko\\mimedb\\' => 17,
+        ),
+        'S' => 
+        array (
+            'Symfony\\Polyfill\\Php83\\' => 23,
+            'Symfony\\Polyfill\\Mbstring\\' => 26,
+            'Symfony\\Polyfill\\Ctype\\' => 23,
+            'Symfony\\Contracts\\Translation\\' => 30,
+            'Symfony\\Component\\Yaml\\' => 23,
+            'Symfony\\Component\\Validator\\' => 28,
+            'Symfony\\Component\\Process\\' => 26,
+        ),
+        'P' => 
+        array (
+            'PHPStan\\PhpDocParser\\' => 21,
+        ),
+        'M' => 
+        array (
+            'Metadata\\' => 9,
+        ),
+        'J' => 
+        array (
+            'JMS\\Serializer\\' => 15,
+        ),
+        'G' => 
+        array (
+            'GoetasWebservices\\Xsd\\XsdToPhpRuntime\\' => 38,
+        ),
+        'D' => 
+        array (
+            'Doctrine\\Instantiator\\' => 22,
+            'Doctrine\\Common\\Lexer\\' => 22,
+        ),
+    );
+
+    public static $prefixDirsPsr4 = array (
+        'setasign\\Fpdi\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/setasign/fpdi/src',
+        ),
+        'horstoeko\\zugferd\\udt\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/horstoeko/zugferd/src/entities/udt',
+        ),
+        'horstoeko\\zugferd\\rsm\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/horstoeko/zugferd/src/entities/rsm',
+        ),
+        'horstoeko\\zugferd\\ram\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/horstoeko/zugferd/src/entities/ram',
+        ),
+        'horstoeko\\zugferd\\qdt\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/horstoeko/zugferd/src/entities/qdt',
+        ),
+        'horstoeko\\zugferd\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/horstoeko/zugferd/src',
+        ),
+        'horstoeko\\stringmanagement\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/horstoeko/stringmanagement/src',
+        ),
+        'horstoeko\\mimedb\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/horstoeko/mimedb/src',
+        ),
+        'Symfony\\Polyfill\\Php83\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-php83',
+        ),
+        'Symfony\\Polyfill\\Mbstring\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
+        ),
+        'Symfony\\Polyfill\\Ctype\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
+        ),
+        'Symfony\\Contracts\\Translation\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/translation-contracts',
+        ),
+        'Symfony\\Component\\Yaml\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/yaml',
+        ),
+        'Symfony\\Component\\Validator\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/validator',
+        ),
+        'Symfony\\Component\\Process\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/process',
+        ),
+        'PHPStan\\PhpDocParser\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src',
+        ),
+        'Metadata\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/jms/metadata/src',
+        ),
+        'JMS\\Serializer\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/jms/serializer/src',
+        ),
+        'GoetasWebservices\\Xsd\\XsdToPhpRuntime\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/goetas-webservices/xsd2php-runtime/src',
+        ),
+        'Doctrine\\Instantiator\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator',
+        ),
+        'Doctrine\\Common\\Lexer\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/doctrine/lexer/src',
+        ),
+    );
+
+    public static $prefixesPsr0 = array (
+        'S' => 
+        array (
+            'Smalot\\PdfParser\\' => 
+            array (
+                0 => __DIR__ . '/..' . '/smalot/pdfparser/src',
+            ),
+        ),
+    );
+
+    public static $classMap = array (
+        'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
+        'DateError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateError.php',
+        'DateException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateException.php',
+        'DateInvalidOperationException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php',
+        'DateInvalidTimeZoneException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php',
+        'DateMalformedIntervalStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php',
+        'DateMalformedPeriodStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php',
+        'DateMalformedStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php',
+        'DateObjectError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateObjectError.php',
+        'DateRangeError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateRangeError.php',
+        'FPDF' => __DIR__ . '/..' . '/setasign/fpdf/fpdf.php',
+        'Override' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/Override.php',
+        'SQLite3Exception' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/SQLite3Exception.php',
+    );
+
+    public static function getInitializer(ClassLoader $loader)
+    {
+        return \Closure::bind(function () use ($loader) {
+            $loader->prefixLengthsPsr4 = ComposerStaticInit77946237feb5ddde22f404621e8201a7::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticInit77946237feb5ddde22f404621e8201a7::$prefixDirsPsr4;
+            $loader->prefixesPsr0 = ComposerStaticInit77946237feb5ddde22f404621e8201a7::$prefixesPsr0;
+            $loader->classMap = ComposerStaticInit77946237feb5ddde22f404621e8201a7::$classMap;
+
+        }, null, ClassLoader::class);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/composer/installed.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/composer/installed.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/composer/installed.json	(revision 8435)
@@ -0,0 +1,1440 @@
+{
+    "packages": [
+        {
+            "name": "doctrine/instantiator",
+            "version": "2.0.0",
+            "version_normalized": "2.0.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
+                "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^11",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpbench/phpbench": "^1.2",
+                "phpstan/phpstan": "^1.9.4",
+                "phpstan/phpstan-phpunit": "^1.3",
+                "phpunit/phpunit": "^9.5.27",
+                "vimeo/psalm": "^5.4"
+            },
+            "time": "2022-12-30T00:23:10+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "https://ocramius.github.io/"
+                }
+            ],
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "support": {
+                "issues": "https://github.com/doctrine/instantiator/issues",
+                "source": "https://github.com/doctrine/instantiator/tree/2.0.0"
+            },
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../doctrine/instantiator"
+        },
+        {
+            "name": "doctrine/lexer",
+            "version": "3.0.1",
+            "version_normalized": "3.0.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/lexer.git",
+                "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+                "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^12",
+                "phpstan/phpstan": "^1.10",
+                "phpunit/phpunit": "^10.5",
+                "psalm/plugin-phpunit": "^0.18.3",
+                "vimeo/psalm": "^5.21"
+            },
+            "time": "2024-02-05T11:56:58+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\Lexer\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+            "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+            "keywords": [
+                "annotations",
+                "docblock",
+                "lexer",
+                "parser",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/doctrine/lexer/issues",
+                "source": "https://github.com/doctrine/lexer/tree/3.0.1"
+            },
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../doctrine/lexer"
+        },
+        {
+            "name": "goetas-webservices/xsd2php-runtime",
+            "version": "v0.2.17",
+            "version_normalized": "0.2.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/goetas-webservices/xsd2php-runtime.git",
+                "reference": "be15c48cda6adfab82e180a69dfa1937e208cfe1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/goetas-webservices/xsd2php-runtime/zipball/be15c48cda6adfab82e180a69dfa1937e208cfe1",
+                "reference": "be15c48cda6adfab82e180a69dfa1937e208cfe1",
+                "shasum": ""
+            },
+            "require": {
+                "jms/serializer": "^1.2|^2.0|^3.0",
+                "php": ">=7.1",
+                "symfony/yaml": "^2.2|^3.0|^4.0|^5.0|^6.0|^7.0"
+            },
+            "conflict": {
+                "jms/serializer": "1.4.1|1.6.1|1.6.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^7.0|^8.0|^9.0"
+            },
+            "time": "2024-04-12T22:55:31+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.2-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "GoetasWebservices\\Xsd\\XsdToPhpRuntime\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Asmir Mustafic"
+                }
+            ],
+            "description": "Convert XSD  (XML Schema) definitions into PHP classes",
+            "keywords": [
+                "converter",
+                "jms",
+                "php",
+                "serializer",
+                "xml",
+                "xsd"
+            ],
+            "support": {
+                "issues": "https://github.com/goetas-webservices/xsd2php-runtime/issues",
+                "source": "https://github.com/goetas-webservices/xsd2php-runtime/tree/v0.2.17"
+            },
+            "install-path": "../goetas-webservices/xsd2php-runtime"
+        },
+        {
+            "name": "horstoeko/mimedb",
+            "version": "v1.0.5",
+            "version_normalized": "1.0.5.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/horstoeko/mimedb.git",
+                "reference": "2790b61cbff7f94ae8f40565761b15beb7792fcb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/horstoeko/mimedb/zipball/2790b61cbff7f94ae8f40565761b15beb7792fcb",
+                "reference": "2790b61cbff7f94ae8f40565761b15beb7792fcb",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.3|^7.4|^8.0|^8.1|^8.2|^8.3"
+            },
+            "require-dev": {
+                "pdepend/pdepend": "^2",
+                "phploc/phploc": "^7",
+                "phpmd/phpmd": "^2",
+                "phpstan/phpstan": "^1.8",
+                "phpunit/phpunit": "^9",
+                "sebastian/phpcpd": "^6",
+                "squizlabs/php_codesniffer": "^3"
+            },
+            "time": "2023-09-22T20:17:48+00:00",
+            "type": "package",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "horstoeko\\mimedb\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Daniel Erling",
+                    "email": "daniel@erling.com.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Get mimetypes by fileextensions and visa versa",
+            "homepage": "https://github.com/horstoeko/mimedb",
+            "keywords": [
+                "file extension",
+                "mimetype"
+            ],
+            "support": {
+                "issues": "https://github.com/horstoeko/mimedb/issues",
+                "source": "https://github.com/horstoeko/mimedb/tree/v1.0.5"
+            },
+            "install-path": "../horstoeko/mimedb"
+        },
+        {
+            "name": "horstoeko/stringmanagement",
+            "version": "v1.0.11",
+            "version_normalized": "1.0.11.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/horstoeko/stringmanagement.git",
+                "reference": "57f0c2bae4cba941902a02d8166d1f03fb52d08a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/horstoeko/stringmanagement/zipball/57f0c2bae4cba941902a02d8166d1f03fb52d08a",
+                "reference": "57f0c2bae4cba941902a02d8166d1f03fb52d08a",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.3|^7.4|^8.0|^8.1|^8.2|^8.3"
+            },
+            "require-dev": {
+                "pdepend/pdepend": "^2",
+                "phploc/phploc": "^7",
+                "phpmd/phpmd": "^2",
+                "phpstan/phpstan": "^1.8",
+                "phpunit/phpunit": "^9",
+                "sebastian/phpcpd": "^6",
+                "squizlabs/php_codesniffer": "^3"
+            },
+            "time": "2023-02-12T14:16:40+00:00",
+            "type": "package",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "horstoeko\\stringmanagement\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Daniel Erling",
+                    "email": "daniel@erling.com.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "A library for string manipulation utilities",
+            "homepage": "https://github.com/horstoeko/stringmanagement",
+            "keywords": [
+                "stringmanagement"
+            ],
+            "support": {
+                "issues": "https://github.com/horstoeko/stringmanagement/issues",
+                "source": "https://github.com/horstoeko/stringmanagement/tree/v1.0.11"
+            },
+            "install-path": "../horstoeko/stringmanagement"
+        },
+        {
+            "name": "horstoeko/zugferd",
+            "version": "v1.0.57",
+            "version_normalized": "1.0.57.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/horstoeko/zugferd.git",
+                "reference": "272e9baf94156496e0d7119616a9449b71f329d6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/272e9baf94156496e0d7119616a9449b71f329d6",
+                "reference": "272e9baf94156496e0d7119616a9449b71f329d6",
+                "shasum": ""
+            },
+            "require": {
+                "ext-simplexml": "*",
+                "goetas-webservices/xsd2php-runtime": "^0.2.13",
+                "horstoeko/mimedb": "^1",
+                "horstoeko/stringmanagement": "^1",
+                "jms/serializer": "^3",
+                "php": "^7.3|^7.4|^8",
+                "setasign/fpdf": "^1",
+                "setasign/fpdi": "^2",
+                "smalot/pdfparser": "^0|^2",
+                "symfony/process": "^5|^6|^7",
+                "symfony/validator": "^5|^6|^7",
+                "symfony/yaml": "^5|^6|^7"
+            },
+            "require-dev": {
+                "goetas-webservices/xsd2php": "^0",
+                "nette/php-generator": "*",
+                "pdepend/pdepend": "^2",
+                "phploc/phploc": "^7",
+                "phpmd/phpmd": "^2",
+                "phpstan/phpstan": "^1.8",
+                "phpunit/phpunit": "^9",
+                "sebastian/phpcpd": "^6",
+                "squizlabs/php_codesniffer": "^3"
+            },
+            "time": "2024-07-10T03:39:20+00:00",
+            "type": "package",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "horstoeko\\zugferd\\": "src",
+                    "horstoeko\\zugferd\\qdt\\": "src/entities/qdt",
+                    "horstoeko\\zugferd\\ram\\": "src/entities/ram",
+                    "horstoeko\\zugferd\\rsm\\": "src/entities/rsm",
+                    "horstoeko\\zugferd\\udt\\": "src/entities/udt"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Daniel Erling",
+                    "email": "daniel@erling.com.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "A library for creating and reading european electronic invoices",
+            "homepage": "https://github.com/horstoeko/zugferd",
+            "keywords": [
+                "ZUGFeRD",
+                "electronic",
+                "factur-x",
+                "invoice",
+                "xrechnung"
+            ],
+            "support": {
+                "issues": "https://github.com/horstoeko/zugferd/issues",
+                "source": "https://github.com/horstoeko/zugferd/tree/v1.0.57"
+            },
+            "install-path": "../horstoeko/zugferd"
+        },
+        {
+            "name": "jms/metadata",
+            "version": "2.8.0",
+            "version_normalized": "2.8.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/schmittjoh/metadata.git",
+                "reference": "7ca240dcac0c655eb15933ee55736ccd2ea0d7a6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/7ca240dcac0c655eb15933ee55736ccd2ea0d7a6",
+                "reference": "7ca240dcac0c655eb15933ee55736ccd2ea0d7a6",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2|^8.0"
+            },
+            "require-dev": {
+                "doctrine/cache": "^1.0",
+                "doctrine/coding-standard": "^8.0",
+                "mikey179/vfsstream": "^1.6.7",
+                "phpunit/phpunit": "^8.5|^9.0",
+                "psr/container": "^1.0|^2.0",
+                "symfony/cache": "^3.1|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.1|^4.0|^5.0"
+            },
+            "time": "2023-02-15T13:44:18+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Metadata\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Johannes M. Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                },
+                {
+                    "name": "Asmir Mustafic",
+                    "email": "goetas@gmail.com"
+                }
+            ],
+            "description": "Class/method/property metadata management in PHP",
+            "keywords": [
+                "annotations",
+                "metadata",
+                "xml",
+                "yaml"
+            ],
+            "support": {
+                "issues": "https://github.com/schmittjoh/metadata/issues",
+                "source": "https://github.com/schmittjoh/metadata/tree/2.8.0"
+            },
+            "install-path": "../jms/metadata"
+        },
+        {
+            "name": "jms/serializer",
+            "version": "3.30.0",
+            "version_normalized": "3.30.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/schmittjoh/serializer.git",
+                "reference": "bf1105358123d7c02ee6cad08ea33ab535a09d5e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/bf1105358123d7c02ee6cad08ea33ab535a09d5e",
+                "reference": "bf1105358123d7c02ee6cad08ea33ab535a09d5e",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.3.1 || ^2.0",
+                "doctrine/lexer": "^2.0 || ^3.0",
+                "jms/metadata": "^2.6",
+                "php": "^7.4 || ^8.0",
+                "phpstan/phpdoc-parser": "^1.20"
+            },
+            "require-dev": {
+                "doctrine/annotations": "^1.14 || ^2.0",
+                "doctrine/coding-standard": "^12.0",
+                "doctrine/orm": "^2.14 || ^3.0",
+                "doctrine/persistence": "^2.5.2 || ^3.0",
+                "doctrine/phpcr-odm": "^1.5.2 || ^2.0",
+                "ext-pdo_sqlite": "*",
+                "jackalope/jackalope-doctrine-dbal": "^1.3",
+                "ocramius/proxy-manager": "^1.0 || ^2.0",
+                "phpbench/phpbench": "^1.0",
+                "phpstan/phpstan": "^1.0.2",
+                "phpunit/phpunit": "^9.0 || ^10.0",
+                "psr/container": "^1.0 || ^2.0",
+                "rector/rector": "^0.19.0",
+                "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0",
+                "symfony/expression-language": "^5.4 || ^6.0 || ^7.0",
+                "symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
+                "symfony/form": "^5.4 || ^6.0 || ^7.0",
+                "symfony/translation": "^5.4 || ^6.0 || ^7.0",
+                "symfony/uid": "^5.4 || ^6.0 || ^7.0",
+                "symfony/validator": "^5.4 || ^6.0 || ^7.0",
+                "symfony/yaml": "^5.4 || ^6.0 || ^7.0",
+                "twig/twig": "^1.34 || ^2.4 || ^3.0"
+            },
+            "suggest": {
+                "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.",
+                "symfony/cache": "Required if you like to use cache functionality.",
+                "symfony/uid": "Required if you'd like to serialize UID objects.",
+                "symfony/yaml": "Required if you'd like to use the YAML metadata format."
+            },
+            "time": "2024-02-24T14:12:14+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "JMS\\Serializer\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Johannes M. Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                },
+                {
+                    "name": "Asmir Mustafic",
+                    "email": "goetas@gmail.com"
+                }
+            ],
+            "description": "Library for (de-)serializing data of any complexity; supports XML, and JSON.",
+            "homepage": "http://jmsyst.com/libs/serializer",
+            "keywords": [
+                "deserialization",
+                "jaxb",
+                "json",
+                "serialization",
+                "xml"
+            ],
+            "support": {
+                "issues": "https://github.com/schmittjoh/serializer/issues",
+                "source": "https://github.com/schmittjoh/serializer/tree/3.30.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/goetas",
+                    "type": "github"
+                }
+            ],
+            "install-path": "../jms/serializer"
+        },
+        {
+            "name": "phpstan/phpdoc-parser",
+            "version": "1.29.1",
+            "version_normalized": "1.29.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpstan/phpdoc-parser.git",
+                "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4",
+                "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/annotations": "^2.0",
+                "nikic/php-parser": "^4.15",
+                "php-parallel-lint/php-parallel-lint": "^1.2",
+                "phpstan/extension-installer": "^1.0",
+                "phpstan/phpstan": "^1.5",
+                "phpstan/phpstan-phpunit": "^1.1",
+                "phpstan/phpstan-strict-rules": "^1.0",
+                "phpunit/phpunit": "^9.5",
+                "symfony/process": "^5.2"
+            },
+            "time": "2024-05-31T08:52:43+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "PHPStan\\PhpDocParser\\": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "PHPDoc parser with support for nullable, intersection and generic types",
+            "support": {
+                "issues": "https://github.com/phpstan/phpdoc-parser/issues",
+                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.1"
+            },
+            "install-path": "../phpstan/phpdoc-parser"
+        },
+        {
+            "name": "setasign/fpdf",
+            "version": "1.8.2",
+            "version_normalized": "1.8.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Setasign/FPDF.git",
+                "reference": "d77904018090c17dc9f3ab6e944679a7a47e710a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Setasign/FPDF/zipball/d77904018090c17dc9f3ab6e944679a7a47e710a",
+                "reference": "d77904018090c17dc9f3ab6e944679a7a47e710a",
+                "shasum": ""
+            },
+            "time": "2019-12-08T10:32:10+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "classmap": [
+                    "fpdf.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Olivier Plathey",
+                    "email": "oliver@fpdf.org",
+                    "homepage": "http://fpdf.org/"
+                }
+            ],
+            "description": "FPDF is a PHP class which allows to generate PDF files with pure PHP. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.",
+            "homepage": "http://www.fpdf.org",
+            "keywords": [
+                "fpdf",
+                "pdf"
+            ],
+            "support": {
+                "source": "https://github.com/Setasign/FPDF/tree/1.8.2"
+            },
+            "install-path": "../setasign/fpdf"
+        },
+        {
+            "name": "setasign/fpdi",
+            "version": "v2.6.0",
+            "version_normalized": "2.6.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Setasign/FPDI.git",
+                "reference": "a6db878129ec6c7e141316ee71872923e7f1b7ad"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Setasign/FPDI/zipball/a6db878129ec6c7e141316ee71872923e7f1b7ad",
+                "reference": "a6db878129ec6c7e141316ee71872923e7f1b7ad",
+                "shasum": ""
+            },
+            "require": {
+                "ext-zlib": "*",
+                "php": "^5.6 || ^7.0 || ^8.0"
+            },
+            "conflict": {
+                "setasign/tfpdf": "<1.31"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "setasign/fpdf": "~1.8.6",
+                "setasign/tfpdf": "~1.33",
+                "squizlabs/php_codesniffer": "^3.5",
+                "tecnickcom/tcpdf": "~6.2"
+            },
+            "suggest": {
+                "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured."
+            },
+            "time": "2023-12-11T16:03:32+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "setasign\\Fpdi\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jan Slabon",
+                    "email": "jan.slabon@setasign.com",
+                    "homepage": "https://www.setasign.com"
+                },
+                {
+                    "name": "Maximilian Kresse",
+                    "email": "maximilian.kresse@setasign.com",
+                    "homepage": "https://www.setasign.com"
+                }
+            ],
+            "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
+            "homepage": "https://www.setasign.com/fpdi",
+            "keywords": [
+                "fpdf",
+                "fpdi",
+                "pdf"
+            ],
+            "support": {
+                "issues": "https://github.com/Setasign/FPDI/issues",
+                "source": "https://github.com/Setasign/FPDI/tree/v2.6.0"
+            },
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../setasign/fpdi"
+        },
+        {
+            "name": "smalot/pdfparser",
+            "version": "v2.11.0",
+            "version_normalized": "2.11.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/smalot/pdfparser.git",
+                "reference": "ac8e6678b0940e4b2ccd5caadd3fb18e68093be6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/smalot/pdfparser/zipball/ac8e6678b0940e4b2ccd5caadd3fb18e68093be6",
+                "reference": "ac8e6678b0940e4b2ccd5caadd3fb18e68093be6",
+                "shasum": ""
+            },
+            "require": {
+                "ext-iconv": "*",
+                "ext-zlib": "*",
+                "php": ">=7.1",
+                "symfony/polyfill-mbstring": "^1.18"
+            },
+            "time": "2024-08-16T06:48:03+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-0": {
+                    "Smalot\\PdfParser\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastien MALOT",
+                    "email": "sebastien@malot.fr"
+                }
+            ],
+            "description": "Pdf parser library. Can read and extract information from pdf file.",
+            "homepage": "https://www.pdfparser.org",
+            "keywords": [
+                "extract",
+                "parse",
+                "parser",
+                "pdf",
+                "text"
+            ],
+            "support": {
+                "issues": "https://github.com/smalot/pdfparser/issues",
+                "source": "https://github.com/smalot/pdfparser/tree/v2.11.0"
+            },
+            "install-path": "../smalot/pdfparser"
+        },
+        {
+            "name": "symfony/deprecation-contracts",
+            "version": "v3.5.0",
+            "version_normalized": "3.5.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/deprecation-contracts.git",
+                "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
+                "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "time": "2024-04-18T09:32:20+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "files": [
+                    "function.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "A generic function and convention to trigger deprecation notices",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../symfony/deprecation-contracts"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.30.0",
+            "version_normalized": "1.30.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "0424dff1c58f028c451efff2045f5d92410bd540"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540",
+                "reference": "0424dff1c58f028c451efff2045f5d92410bd540",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "provide": {
+                "ext-ctype": "*"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "time": "2024-05-31T15:07:36+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../symfony/polyfill-ctype"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.30.0",
+            "version_normalized": "1.30.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c",
+                "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "provide": {
+                "ext-mbstring": "*"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "time": "2024-06-19T12:30:46+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../symfony/polyfill-mbstring"
+        },
+        {
+            "name": "symfony/polyfill-php83",
+            "version": "v1.30.0",
+            "version_normalized": "1.30.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php83.git",
+                "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9",
+                "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "time": "2024-06-19T12:35:24+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php83\\": ""
+                },
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../symfony/polyfill-php83"
+        },
+        {
+            "name": "symfony/process",
+            "version": "v6.4.8",
+            "version_normalized": "6.4.8.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/process.git",
+                "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5",
+                "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "time": "2024-05-31T14:49:08+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Executes commands in sub-processes",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/process/tree/v6.4.8"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../symfony/process"
+        },
+        {
+            "name": "symfony/translation-contracts",
+            "version": "v3.5.0",
+            "version_normalized": "3.5.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/translation-contracts.git",
+                "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a",
+                "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "time": "2024-04-18T09:32:20+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Translation\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Test/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to translation",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../symfony/translation-contracts"
+        },
+        {
+            "name": "symfony/validator",
+            "version": "v6.4.10",
+            "version_normalized": "6.4.10.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/validator.git",
+                "reference": "bcf939a9d1acd7d2912e9474c0c3d7840a03cbcd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/validator/zipball/bcf939a9d1acd7d2912e9474c0c3d7840a03cbcd",
+                "reference": "bcf939a9d1acd7d2912e9474c0c3d7840a03cbcd",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php83": "^1.27",
+                "symfony/translation-contracts": "^2.5|^3"
+            },
+            "conflict": {
+                "doctrine/annotations": "<1.13",
+                "doctrine/lexer": "<1.1",
+                "symfony/dependency-injection": "<5.4",
+                "symfony/expression-language": "<5.4",
+                "symfony/http-kernel": "<5.4",
+                "symfony/intl": "<5.4",
+                "symfony/property-info": "<5.4",
+                "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3",
+                "symfony/yaml": "<5.4"
+            },
+            "require-dev": {
+                "doctrine/annotations": "^1.13|^2",
+                "egulias/email-validator": "^2.1.10|^3|^4",
+                "symfony/cache": "^5.4|^6.0|^7.0",
+                "symfony/config": "^5.4|^6.0|^7.0",
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/expression-language": "^5.4|^6.0|^7.0",
+                "symfony/finder": "^5.4|^6.0|^7.0",
+                "symfony/http-client": "^5.4|^6.0|^7.0",
+                "symfony/http-foundation": "^5.4|^6.0|^7.0",
+                "symfony/http-kernel": "^5.4|^6.0|^7.0",
+                "symfony/intl": "^5.4|^6.0|^7.0",
+                "symfony/mime": "^5.4|^6.0|^7.0",
+                "symfony/property-access": "^5.4|^6.0|^7.0",
+                "symfony/property-info": "^5.4|^6.0|^7.0",
+                "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3",
+                "symfony/yaml": "^5.4|^6.0|^7.0"
+            },
+            "time": "2024-07-26T12:30:32+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Validator\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/",
+                    "/Resources/bin/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides tools to validate values",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/validator/tree/v6.4.10"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../symfony/validator"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v6.4.8",
+            "version_normalized": "6.4.8.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "52903de178d542850f6f341ba92995d3d63e60c9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/52903de178d542850f6f341ba92995d3d63e60c9",
+                "reference": "52903de178d542850f6f341ba92995d3d63e60c9",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "symfony/console": "<5.4"
+            },
+            "require-dev": {
+                "symfony/console": "^5.4|^6.0|^7.0"
+            },
+            "time": "2024-05-31T14:49:08+00:00",
+            "bin": [
+                "Resources/bin/yaml-lint"
+            ],
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Loads and dumps YAML files",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/yaml/tree/v6.4.8"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../symfony/yaml"
+        }
+    ],
+    "dev": true,
+    "dev-package-names": []
+}
Index: /mods/mod_rechnungen/lib/vendor/composer/installed.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/composer/installed.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/composer/installed.php	(revision 8435)
@@ -0,0 +1,203 @@
+<?php return array(
+    'root' => array(
+        'pretty_version' => '1.0.0+no-version-set',
+        'version' => '1.0.0.0',
+        'type' => 'library',
+        'install_path' => __DIR__ . '/../../',
+        'aliases' => array(),
+        'reference' => NULL,
+        'name' => 'm1/wpsg_mod_rechnungen',
+        'dev' => true,
+    ),
+    'versions' => array(
+        'doctrine/instantiator' => array(
+            'pretty_version' => '2.0.0',
+            'version' => '2.0.0.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../doctrine/instantiator',
+            'aliases' => array(),
+            'reference' => 'c6222283fa3f4ac679f8b9ced9a4e23f163e80d0',
+            'dev_requirement' => false,
+        ),
+        'doctrine/lexer' => array(
+            'pretty_version' => '3.0.1',
+            'version' => '3.0.1.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../doctrine/lexer',
+            'aliases' => array(),
+            'reference' => '31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd',
+            'dev_requirement' => false,
+        ),
+        'goetas-webservices/xsd2php-runtime' => array(
+            'pretty_version' => 'v0.2.17',
+            'version' => '0.2.17.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../goetas-webservices/xsd2php-runtime',
+            'aliases' => array(),
+            'reference' => 'be15c48cda6adfab82e180a69dfa1937e208cfe1',
+            'dev_requirement' => false,
+        ),
+        'horstoeko/mimedb' => array(
+            'pretty_version' => 'v1.0.5',
+            'version' => '1.0.5.0',
+            'type' => 'package',
+            'install_path' => __DIR__ . '/../horstoeko/mimedb',
+            'aliases' => array(),
+            'reference' => '2790b61cbff7f94ae8f40565761b15beb7792fcb',
+            'dev_requirement' => false,
+        ),
+        'horstoeko/stringmanagement' => array(
+            'pretty_version' => 'v1.0.11',
+            'version' => '1.0.11.0',
+            'type' => 'package',
+            'install_path' => __DIR__ . '/../horstoeko/stringmanagement',
+            'aliases' => array(),
+            'reference' => '57f0c2bae4cba941902a02d8166d1f03fb52d08a',
+            'dev_requirement' => false,
+        ),
+        'horstoeko/zugferd' => array(
+            'pretty_version' => 'v1.0.57',
+            'version' => '1.0.57.0',
+            'type' => 'package',
+            'install_path' => __DIR__ . '/../horstoeko/zugferd',
+            'aliases' => array(),
+            'reference' => '272e9baf94156496e0d7119616a9449b71f329d6',
+            'dev_requirement' => false,
+        ),
+        'jms/metadata' => array(
+            'pretty_version' => '2.8.0',
+            'version' => '2.8.0.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../jms/metadata',
+            'aliases' => array(),
+            'reference' => '7ca240dcac0c655eb15933ee55736ccd2ea0d7a6',
+            'dev_requirement' => false,
+        ),
+        'jms/serializer' => array(
+            'pretty_version' => '3.30.0',
+            'version' => '3.30.0.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../jms/serializer',
+            'aliases' => array(),
+            'reference' => 'bf1105358123d7c02ee6cad08ea33ab535a09d5e',
+            'dev_requirement' => false,
+        ),
+        'm1/wpsg_mod_rechnungen' => array(
+            'pretty_version' => '1.0.0+no-version-set',
+            'version' => '1.0.0.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../../',
+            'aliases' => array(),
+            'reference' => NULL,
+            'dev_requirement' => false,
+        ),
+        'phpstan/phpdoc-parser' => array(
+            'pretty_version' => '1.29.1',
+            'version' => '1.29.1.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../phpstan/phpdoc-parser',
+            'aliases' => array(),
+            'reference' => 'fcaefacf2d5c417e928405b71b400d4ce10daaf4',
+            'dev_requirement' => false,
+        ),
+        'setasign/fpdf' => array(
+            'pretty_version' => '1.8.2',
+            'version' => '1.8.2.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../setasign/fpdf',
+            'aliases' => array(),
+            'reference' => 'd77904018090c17dc9f3ab6e944679a7a47e710a',
+            'dev_requirement' => false,
+        ),
+        'setasign/fpdi' => array(
+            'pretty_version' => 'v2.6.0',
+            'version' => '2.6.0.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../setasign/fpdi',
+            'aliases' => array(),
+            'reference' => 'a6db878129ec6c7e141316ee71872923e7f1b7ad',
+            'dev_requirement' => false,
+        ),
+        'smalot/pdfparser' => array(
+            'pretty_version' => 'v2.11.0',
+            'version' => '2.11.0.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../smalot/pdfparser',
+            'aliases' => array(),
+            'reference' => 'ac8e6678b0940e4b2ccd5caadd3fb18e68093be6',
+            'dev_requirement' => false,
+        ),
+        'symfony/deprecation-contracts' => array(
+            'pretty_version' => 'v3.5.0',
+            'version' => '3.5.0.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
+            'aliases' => array(),
+            'reference' => '0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1',
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-ctype' => array(
+            'pretty_version' => 'v1.30.0',
+            'version' => '1.30.0.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-ctype',
+            'aliases' => array(),
+            'reference' => '0424dff1c58f028c451efff2045f5d92410bd540',
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-mbstring' => array(
+            'pretty_version' => 'v1.30.0',
+            'version' => '1.30.0.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
+            'aliases' => array(),
+            'reference' => 'fd22ab50000ef01661e2a31d850ebaa297f8e03c',
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-php83' => array(
+            'pretty_version' => 'v1.30.0',
+            'version' => '1.30.0.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-php83',
+            'aliases' => array(),
+            'reference' => 'dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9',
+            'dev_requirement' => false,
+        ),
+        'symfony/process' => array(
+            'pretty_version' => 'v6.4.8',
+            'version' => '6.4.8.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/process',
+            'aliases' => array(),
+            'reference' => '8d92dd79149f29e89ee0f480254db595f6a6a2c5',
+            'dev_requirement' => false,
+        ),
+        'symfony/translation-contracts' => array(
+            'pretty_version' => 'v3.5.0',
+            'version' => '3.5.0.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/translation-contracts',
+            'aliases' => array(),
+            'reference' => 'b9d2189887bb6b2e0367a9fc7136c5239ab9b05a',
+            'dev_requirement' => false,
+        ),
+        'symfony/validator' => array(
+            'pretty_version' => 'v6.4.10',
+            'version' => '6.4.10.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/validator',
+            'aliases' => array(),
+            'reference' => 'bcf939a9d1acd7d2912e9474c0c3d7840a03cbcd',
+            'dev_requirement' => false,
+        ),
+        'symfony/yaml' => array(
+            'pretty_version' => 'v6.4.8',
+            'version' => '6.4.8.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/yaml',
+            'aliases' => array(),
+            'reference' => '52903de178d542850f6f341ba92995d3d63e60c9',
+            'dev_requirement' => false,
+        ),
+    ),
+);
Index: /mods/mod_rechnungen/lib/vendor/composer/platform_check.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/composer/platform_check.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/composer/platform_check.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php
+
+// platform_check.php @generated by Composer
+
+$issues = array();
+
+if (!(PHP_VERSION_ID >= 80100)) {
+    $issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.';
+}
+
+if ($issues) {
+    if (!headers_sent()) {
+        header('HTTP/1.1 500 Internal Server Error');
+    }
+    if (!ini_get('display_errors')) {
+        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
+            fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
+        } elseif (!headers_sent()) {
+            echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
+        }
+    }
+    trigger_error(
+        'Composer detected issues in your platform: ' . implode(' ', $issues),
+        E_USER_ERROR
+    );
+}
Index: /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/.doctrine-project.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/.doctrine-project.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/.doctrine-project.json	(revision 8435)
@@ -0,0 +1,47 @@
+{
+    "active": true,
+    "name": "Instantiator",
+    "slug": "instantiator",
+    "docsSlug": "doctrine-instantiator",
+    "codePath": "/src",
+    "versions": [
+        {
+            "name": "1.5",
+            "branchName": "1.5.x",
+            "slug": "latest",
+            "upcoming": true
+        },
+        {
+            "name": "1.4",
+            "branchName": "1.4.x",
+            "slug": "1.4",
+            "aliases": [
+                "current",
+                "stable"
+            ],
+            "maintained": true,
+            "current": true
+        },
+        {
+            "name": "1.3",
+            "branchName": "1.3.x",
+            "slug": "1.3",
+            "maintained": false
+        },
+        {
+            "name": "1.2",
+            "branchName": "1.2.x",
+            "slug": "1.2"
+        },
+        {
+            "name": "1.1",
+            "branchName": "1.1.x",
+            "slug": "1.1"
+        },
+        {
+            "name": "1.0",
+            "branchName": "1.0.x",
+            "slug": "1.0"
+        }
+    ]
+}
Index: /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/CONTRIBUTING.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/CONTRIBUTING.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/CONTRIBUTING.md	(revision 8435)
@@ -0,0 +1,35 @@
+# Contributing
+
+ * Follow the [Doctrine Coding Standard](https://github.com/doctrine/coding-standard)
+ * The project will follow strict [object calisthenics](http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php)
+ * Any contribution must provide tests for additional introduced conditions
+ * Any un-confirmed issue needs a failing test case before being accepted
+ * Pull requests must be sent from a new hotfix/feature branch, not from `master`.
+
+## Installation
+
+To install the project and run the tests, you need to clone it first:
+
+```sh
+$ git clone git://github.com/doctrine/instantiator.git
+```
+
+You will then need to run a composer installation:
+
+```sh
+$ cd Instantiator
+$ curl -s https://getcomposer.org/installer | php
+$ php composer.phar update
+```
+
+## Testing
+
+The PHPUnit version to be used is the one installed as a dev- dependency via composer:
+
+```sh
+$ ./vendor/bin/phpunit
+```
+
+Accepted coverage for new contributions is 80%. Any contribution not satisfying this requirement 
+won't be merged.
+
Index: /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/LICENSE	(revision 8435)
@@ -0,0 +1,19 @@
+Copyright (c) 2014 Doctrine Project
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/README.md	(revision 8435)
@@ -0,0 +1,38 @@
+# Instantiator
+
+This library provides a way of avoiding usage of constructors when instantiating PHP classes.
+
+[![Build Status](https://travis-ci.org/doctrine/instantiator.svg?branch=master)](https://travis-ci.org/doctrine/instantiator)
+[![Code Coverage](https://codecov.io/gh/doctrine/instantiator/branch/master/graph/badge.svg)](https://codecov.io/gh/doctrine/instantiator/branch/master)
+[![Dependency Status](https://www.versioneye.com/package/php--doctrine--instantiator/badge.svg)](https://www.versioneye.com/package/php--doctrine--instantiator)
+
+[![Latest Stable Version](https://poser.pugx.org/doctrine/instantiator/v/stable.png)](https://packagist.org/packages/doctrine/instantiator)
+[![Latest Unstable Version](https://poser.pugx.org/doctrine/instantiator/v/unstable.png)](https://packagist.org/packages/doctrine/instantiator)
+
+## Installation
+
+The suggested installation method is via [composer](https://getcomposer.org/):
+
+```sh
+composer require doctrine/instantiator
+```
+
+## Usage
+
+The instantiator is able to create new instances of any class without using the constructor or any API of the class
+itself:
+
+```php
+$instantiator = new \Doctrine\Instantiator\Instantiator();
+
+$instance = $instantiator->instantiate(\My\ClassName\Here::class);
+```
+
+## Contributing
+
+Please read the [CONTRIBUTING.md](CONTRIBUTING.md) contents if you wish to help out!
+
+## Credits
+
+This library was migrated from [ocramius/instantiator](https://github.com/Ocramius/Instantiator), which
+has been donated to the doctrine organization, and which is now deprecated in favour of this package.
Index: /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/composer.json	(revision 8435)
@@ -0,0 +1,48 @@
+{
+    "name":              "doctrine/instantiator",
+    "description":       "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+    "type":              "library",
+    "license":           "MIT",
+    "homepage":          "https://www.doctrine-project.org/projects/instantiator.html",
+    "keywords":          [
+        "instantiate",
+        "constructor"
+    ],
+    "authors": [
+        {
+            "name":     "Marco Pivetta",
+            "email":    "ocramius@gmail.com",
+            "homepage": "https://ocramius.github.io/"
+        }
+    ],
+    "require": {
+        "php": "^8.1"
+    },
+    "require-dev": {
+        "ext-phar":                  "*",
+        "ext-pdo":                   "*",
+        "doctrine/coding-standard":  "^11",
+        "phpbench/phpbench":         "^1.2",
+        "phpstan/phpstan":           "^1.9.4",
+        "phpstan/phpstan-phpunit":   "^1.3",
+        "phpunit/phpunit":           "^9.5.27",
+        "vimeo/psalm":               "^5.4"
+    },
+    "autoload": {
+        "psr-4": {
+            "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+        }
+    },
+    "autoload-dev": {
+        "psr-0": {
+            "DoctrineTest\\InstantiatorPerformance\\": "tests",
+            "DoctrineTest\\InstantiatorTest\\": "tests",
+            "DoctrineTest\\InstantiatorTestAsset\\": "tests"
+        }
+    },
+    "config": {
+        "allow-plugins": {
+            "dealerdirect/phpcodesniffer-composer-installer": true
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/docs/en/index.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/docs/en/index.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/docs/en/index.rst	(revision 8435)
@@ -0,0 +1,68 @@
+Introduction
+============
+
+This library provides a way of avoiding usage of constructors when instantiating PHP classes.
+
+Installation
+============
+
+The suggested installation method is via `composer`_:
+
+.. code-block:: console
+
+   $ composer require doctrine/instantiator
+
+Usage
+=====
+
+The instantiator is able to create new instances of any class without
+using the constructor or any API of the class itself:
+
+.. code-block:: php
+
+    <?php
+
+    use Doctrine\Instantiator\Instantiator;
+    use App\Entities\User;
+
+    $instantiator = new Instantiator();
+
+    $user = $instantiator->instantiate(User::class);
+
+Contributing
+============
+
+-  Follow the `Doctrine Coding Standard`_
+-  The project will follow strict `object calisthenics`_
+-  Any contribution must provide tests for additional introduced
+   conditions
+-  Any un-confirmed issue needs a failing test case before being
+   accepted
+-  Pull requests must be sent from a new hotfix/feature branch, not from
+   ``master``.
+
+Testing
+=======
+
+The PHPUnit version to be used is the one installed as a dev- dependency
+via composer:
+
+.. code-block:: console
+
+   $ ./vendor/bin/phpunit
+
+Accepted coverage for new contributions is 80%. Any contribution not
+satisfying this requirement wonât be merged.
+
+Credits
+=======
+
+This library was migrated from `ocramius/instantiator`_, which has been
+donated to the doctrine organization, and which is now deprecated in
+favour of this package.
+
+.. _composer: https://getcomposer.org/
+.. _CONTRIBUTING.md: CONTRIBUTING.md
+.. _ocramius/instantiator: https://github.com/Ocramius/Instantiator
+.. _Doctrine Coding Standard: https://github.com/doctrine/coding-standard
+.. _object calisthenics: http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php
Index: /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/docs/en/sidebar.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/docs/en/sidebar.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/docs/en/sidebar.rst	(revision 8435)
@@ -0,0 +1,4 @@
+.. toctree::
+    :depth: 3
+
+    index
Index: /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/psalm.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/psalm.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/psalm.xml	(revision 8435)
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<psalm
+    errorLevel="7"
+    phpVersion="8.2"
+    resolveFromConfigFile="true"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns="https://getpsalm.org/schema/config"
+    xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
+>
+    <projectFiles>
+        <directory name="src" />
+        <ignoreFiles>
+            <directory name="vendor" />
+        </ignoreFiles>
+    </projectFiles>
+</psalm>
Index: /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Doctrine\Instantiator\Exception;
+
+use Throwable;
+
+/**
+ * Base exception marker interface for the instantiator component
+ */
+interface ExceptionInterface extends Throwable
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php	(revision 8435)
@@ -0,0 +1,52 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Doctrine\Instantiator\Exception;
+
+use InvalidArgumentException as BaseInvalidArgumentException;
+use ReflectionClass;
+
+use function interface_exists;
+use function sprintf;
+use function trait_exists;
+
+/**
+ * Exception for invalid arguments provided to the instantiator
+ */
+class InvalidArgumentException extends BaseInvalidArgumentException implements ExceptionInterface
+{
+    public static function fromNonExistingClass(string $className): self
+    {
+        if (interface_exists($className)) {
+            return new self(sprintf('The provided type "%s" is an interface, and cannot be instantiated', $className));
+        }
+
+        if (trait_exists($className)) {
+            return new self(sprintf('The provided type "%s" is a trait, and cannot be instantiated', $className));
+        }
+
+        return new self(sprintf('The provided class "%s" does not exist', $className));
+    }
+
+    /**
+     * @phpstan-param ReflectionClass<T> $reflectionClass
+     *
+     * @template T of object
+     */
+    public static function fromAbstractClass(ReflectionClass $reflectionClass): self
+    {
+        return new self(sprintf(
+            'The provided class "%s" is abstract, and cannot be instantiated',
+            $reflectionClass->getName(),
+        ));
+    }
+
+    public static function fromEnum(string $className): self
+    {
+        return new self(sprintf(
+            'The provided class "%s" is an enum, and cannot be instantiated',
+            $className,
+        ));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php	(revision 8435)
@@ -0,0 +1,61 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Doctrine\Instantiator\Exception;
+
+use Exception;
+use ReflectionClass;
+use UnexpectedValueException as BaseUnexpectedValueException;
+
+use function sprintf;
+
+/**
+ * Exception for given parameters causing invalid/unexpected state on instantiation
+ */
+class UnexpectedValueException extends BaseUnexpectedValueException implements ExceptionInterface
+{
+    /**
+     * @phpstan-param ReflectionClass<T> $reflectionClass
+     *
+     * @template T of object
+     */
+    public static function fromSerializationTriggeredException(
+        ReflectionClass $reflectionClass,
+        Exception $exception,
+    ): self {
+        return new self(
+            sprintf(
+                'An exception was raised while trying to instantiate an instance of "%s" via un-serialization',
+                $reflectionClass->getName(),
+            ),
+            0,
+            $exception,
+        );
+    }
+
+    /**
+     * @phpstan-param ReflectionClass<T> $reflectionClass
+     *
+     * @template T of object
+     */
+    public static function fromUncleanUnSerialization(
+        ReflectionClass $reflectionClass,
+        string $errorString,
+        int $errorCode,
+        string $errorFile,
+        int $errorLine,
+    ): self {
+        return new self(
+            sprintf(
+                'Could not produce an instance of "%s" via un-serialization, since an error was triggered '
+                . 'in file "%s" at line "%d"',
+                $reflectionClass->getName(),
+                $errorFile,
+                $errorLine,
+            ),
+            0,
+            new Exception($errorString, $errorCode),
+        );
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php	(revision 8435)
@@ -0,0 +1,255 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Doctrine\Instantiator;
+
+use ArrayIterator;
+use Doctrine\Instantiator\Exception\ExceptionInterface;
+use Doctrine\Instantiator\Exception\InvalidArgumentException;
+use Doctrine\Instantiator\Exception\UnexpectedValueException;
+use Exception;
+use ReflectionClass;
+use ReflectionException;
+use Serializable;
+
+use function class_exists;
+use function enum_exists;
+use function is_subclass_of;
+use function restore_error_handler;
+use function set_error_handler;
+use function sprintf;
+use function strlen;
+use function unserialize;
+
+final class Instantiator implements InstantiatorInterface
+{
+    /**
+     * Markers used internally by PHP to define whether {@see \unserialize} should invoke
+     * the method {@see \Serializable::unserialize()} when dealing with classes implementing
+     * the {@see \Serializable} interface.
+     *
+     * @deprecated This constant will be private in 2.0
+     */
+    private const SERIALIZATION_FORMAT_USE_UNSERIALIZER   = 'C';
+    private const SERIALIZATION_FORMAT_AVOID_UNSERIALIZER = 'O';
+
+    /**
+     * Used to instantiate specific classes, indexed by class name.
+     *
+     * @var callable[]
+     */
+    private static array $cachedInstantiators = [];
+
+    /**
+     * Array of objects that can directly be cloned, indexed by class name.
+     *
+     * @var object[]
+     */
+    private static array $cachedCloneables = [];
+
+    /**
+     * @phpstan-param class-string<T> $className
+     *
+     * @phpstan-return T
+     *
+     * @throws ExceptionInterface
+     *
+     * @template T of object
+     */
+    public function instantiate(string $className): object
+    {
+        if (isset(self::$cachedCloneables[$className])) {
+            /** @phpstan-var T */
+            $cachedCloneable = self::$cachedCloneables[$className];
+
+            return clone $cachedCloneable;
+        }
+
+        if (isset(self::$cachedInstantiators[$className])) {
+            $factory = self::$cachedInstantiators[$className];
+
+            return $factory();
+        }
+
+        return $this->buildAndCacheFromFactory($className);
+    }
+
+    /**
+     * Builds the requested object and caches it in static properties for performance
+     *
+     * @phpstan-param class-string<T> $className
+     *
+     * @phpstan-return T
+     *
+     * @template T of object
+     */
+    private function buildAndCacheFromFactory(string $className): object
+    {
+        $factory  = self::$cachedInstantiators[$className] = $this->buildFactory($className);
+        $instance = $factory();
+
+        if ($this->isSafeToClone(new ReflectionClass($instance))) {
+            self::$cachedCloneables[$className] = clone $instance;
+        }
+
+        return $instance;
+    }
+
+    /**
+     * Builds a callable capable of instantiating the given $className without
+     * invoking its constructor.
+     *
+     * @phpstan-param class-string<T> $className
+     *
+     * @phpstan-return callable(): T
+     *
+     * @throws InvalidArgumentException
+     * @throws UnexpectedValueException
+     * @throws ReflectionException
+     *
+     * @template T of object
+     */
+    private function buildFactory(string $className): callable
+    {
+        $reflectionClass = $this->getReflectionClass($className);
+
+        if ($this->isInstantiableViaReflection($reflectionClass)) {
+            return [$reflectionClass, 'newInstanceWithoutConstructor'];
+        }
+
+        $serializedString = sprintf(
+            '%s:%d:"%s":0:{}',
+            is_subclass_of($className, Serializable::class) ? self::SERIALIZATION_FORMAT_USE_UNSERIALIZER : self::SERIALIZATION_FORMAT_AVOID_UNSERIALIZER,
+            strlen($className),
+            $className,
+        );
+
+        $this->checkIfUnSerializationIsSupported($reflectionClass, $serializedString);
+
+        return static fn () => unserialize($serializedString);
+    }
+
+    /**
+     * @phpstan-param class-string<T> $className
+     *
+     * @phpstan-return ReflectionClass<T>
+     *
+     * @throws InvalidArgumentException
+     * @throws ReflectionException
+     *
+     * @template T of object
+     */
+    private function getReflectionClass(string $className): ReflectionClass
+    {
+        if (! class_exists($className)) {
+            throw InvalidArgumentException::fromNonExistingClass($className);
+        }
+
+        if (enum_exists($className, false)) {
+            throw InvalidArgumentException::fromEnum($className);
+        }
+
+        $reflection = new ReflectionClass($className);
+
+        if ($reflection->isAbstract()) {
+            throw InvalidArgumentException::fromAbstractClass($reflection);
+        }
+
+        return $reflection;
+    }
+
+    /**
+     * @phpstan-param ReflectionClass<T> $reflectionClass
+     *
+     * @throws UnexpectedValueException
+     *
+     * @template T of object
+     */
+    private function checkIfUnSerializationIsSupported(ReflectionClass $reflectionClass, string $serializedString): void
+    {
+        set_error_handler(static function (int $code, string $message, string $file, int $line) use ($reflectionClass, &$error): bool {
+            $error = UnexpectedValueException::fromUncleanUnSerialization(
+                $reflectionClass,
+                $message,
+                $code,
+                $file,
+                $line,
+            );
+
+            return true;
+        });
+
+        try {
+            $this->attemptInstantiationViaUnSerialization($reflectionClass, $serializedString);
+        } finally {
+            restore_error_handler();
+        }
+
+        if ($error) {
+            throw $error;
+        }
+    }
+
+    /**
+     * @phpstan-param ReflectionClass<T> $reflectionClass
+     *
+     * @throws UnexpectedValueException
+     *
+     * @template T of object
+     */
+    private function attemptInstantiationViaUnSerialization(ReflectionClass $reflectionClass, string $serializedString): void
+    {
+        try {
+            unserialize($serializedString);
+        } catch (Exception $exception) {
+            throw UnexpectedValueException::fromSerializationTriggeredException($reflectionClass, $exception);
+        }
+    }
+
+    /**
+     * @phpstan-param ReflectionClass<T> $reflectionClass
+     *
+     * @template T of object
+     */
+    private function isInstantiableViaReflection(ReflectionClass $reflectionClass): bool
+    {
+        return ! ($this->hasInternalAncestors($reflectionClass) && $reflectionClass->isFinal());
+    }
+
+    /**
+     * Verifies whether the given class is to be considered internal
+     *
+     * @phpstan-param ReflectionClass<T> $reflectionClass
+     *
+     * @template T of object
+     */
+    private function hasInternalAncestors(ReflectionClass $reflectionClass): bool
+    {
+        do {
+            if ($reflectionClass->isInternal()) {
+                return true;
+            }
+
+            $reflectionClass = $reflectionClass->getParentClass();
+        } while ($reflectionClass);
+
+        return false;
+    }
+
+    /**
+     * Checks if a class is cloneable
+     *
+     * Classes implementing `__clone` cannot be safely cloned, as that may cause side-effects.
+     *
+     * @phpstan-param ReflectionClass<T> $reflectionClass
+     *
+     * @template T of object
+     */
+    private function isSafeToClone(ReflectionClass $reflectionClass): bool
+    {
+        return $reflectionClass->isCloneable()
+            && ! $reflectionClass->hasMethod('__clone')
+            && ! $reflectionClass->isSubclassOf(ArrayIterator::class);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php	(revision 8435)
@@ -0,0 +1,24 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Doctrine\Instantiator;
+
+use Doctrine\Instantiator\Exception\ExceptionInterface;
+
+/**
+ * Instantiator provides utility methods to build objects without invoking their constructors
+ */
+interface InstantiatorInterface
+{
+    /**
+     * @phpstan-param class-string<T> $className
+     *
+     * @phpstan-return T
+     *
+     * @throws ExceptionInterface
+     *
+     * @template T of object
+     */
+    public function instantiate(string $className): object;
+}
Index: /mods/mod_rechnungen/lib/vendor/doctrine/lexer/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/lexer/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/lexer/LICENSE	(revision 8435)
@@ -0,0 +1,19 @@
+Copyright (c) 2006-2018 Doctrine Project
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/doctrine/lexer/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/lexer/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/lexer/README.md	(revision 8435)
@@ -0,0 +1,9 @@
+# Doctrine Lexer
+
+[![Build Status](https://github.com/doctrine/lexer/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/lexer/actions)
+
+Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.
+
+This lexer is used in Doctrine Annotations and in Doctrine ORM (DQL).
+
+https://www.doctrine-project.org/projects/lexer.html
Index: /mods/mod_rechnungen/lib/vendor/doctrine/lexer/UPGRADE.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/lexer/UPGRADE.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/lexer/UPGRADE.md	(revision 8435)
@@ -0,0 +1,22 @@
+Note about upgrading: Doctrine uses static and runtime mechanisms to raise
+awareness about deprecated code.
+
+- Use of `@deprecated` docblock that is detected by IDEs (like PHPStorm) or
+  Static Analysis tools (like Psalm, phpstan)
+- Use of our low-overhead runtime deprecation API, details:
+  https://github.com/doctrine/deprecations/
+
+# Upgrade to 3.0.0
+
+`Doctrine\Common\Lexer\Token` no longer implements `ArrayAccess`.
+Parameter type declarations have been added to
+`Doctrine\Common\Lexer\AbstractLexer` and `Doctrine\Common\Lexer\Token`.
+You should add both parameter type declarations and return type declarations to
+your lexers, based on the `@return` phpdoc.
+
+# Upgrade to 2.0.0
+
+`AbstractLexer::glimpse()` and `AbstractLexer::peek()` now return
+instances of `Doctrine\Common\Lexer\Token`, which is an array-like class
+Using it as an array is deprecated in favor of using properties of that class.
+Using `count()` on it is deprecated with no replacement.
Index: /mods/mod_rechnungen/lib/vendor/doctrine/lexer/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/lexer/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/lexer/composer.json	(revision 8435)
@@ -0,0 +1,55 @@
+{
+    "name": "doctrine/lexer",
+    "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+    "license": "MIT",
+    "type": "library",
+    "keywords": [
+        "php",
+        "parser",
+        "lexer",
+        "annotations",
+        "docblock"
+    ],
+    "authors": [
+        {
+            "name": "Guilherme Blanco",
+            "email": "guilhermeblanco@gmail.com"
+        },
+        {
+            "name": "Roman Borschel",
+            "email": "roman@code-factory.org"
+        },
+        {
+            "name": "Johannes Schmitt",
+            "email": "schmittjoh@gmail.com"
+        }
+    ],
+    "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+    "require": {
+        "php": "^8.1"
+    },
+    "require-dev": {
+        "doctrine/coding-standard": "^12",
+        "phpstan/phpstan": "^1.10",
+        "phpunit/phpunit": "^10.5",
+        "psalm/plugin-phpunit": "^0.18.3",
+        "vimeo/psalm": "^5.21"
+    },
+    "autoload": {
+        "psr-4": {
+            "Doctrine\\Common\\Lexer\\": "src"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "Doctrine\\Tests\\Common\\Lexer\\": "tests"
+        }
+    },
+    "config": {
+        "allow-plugins": {
+            "composer/package-versions-deprecated": true,
+            "dealerdirect/phpcodesniffer-composer-installer": true
+        },
+        "sort-packages": true
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/doctrine/lexer/src/AbstractLexer.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/lexer/src/AbstractLexer.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/lexer/src/AbstractLexer.php	(revision 8435)
@@ -0,0 +1,328 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Doctrine\Common\Lexer;
+
+use ReflectionClass;
+use UnitEnum;
+
+use function implode;
+use function preg_split;
+use function sprintf;
+use function substr;
+
+use const PREG_SPLIT_DELIM_CAPTURE;
+use const PREG_SPLIT_NO_EMPTY;
+use const PREG_SPLIT_OFFSET_CAPTURE;
+
+/**
+ * Base class for writing simple lexers, i.e. for creating small DSLs.
+ *
+ * @template T of UnitEnum|string|int
+ * @template V of string|int
+ */
+abstract class AbstractLexer
+{
+    /**
+     * Lexer original input string.
+     */
+    private string $input;
+
+    /**
+     * Array of scanned tokens.
+     *
+     * @var list<Token<T, V>>
+     */
+    private array $tokens = [];
+
+    /**
+     * Current lexer position in input string.
+     */
+    private int $position = 0;
+
+    /**
+     * Current peek of current lexer position.
+     */
+    private int $peek = 0;
+
+    /**
+     * The next token in the input.
+     *
+     * @var Token<T, V>|null
+     */
+    public Token|null $lookahead;
+
+    /**
+     * The last matched/seen token.
+     *
+     * @var Token<T, V>|null
+     */
+    public Token|null $token;
+
+    /**
+     * Composed regex for input parsing.
+     *
+     * @var non-empty-string|null
+     */
+    private string|null $regex = null;
+
+    /**
+     * Sets the input data to be tokenized.
+     *
+     * The Lexer is immediately reset and the new input tokenized.
+     * Any unprocessed tokens from any previous input are lost.
+     *
+     * @param string $input The input to be tokenized.
+     *
+     * @return void
+     */
+    public function setInput(string $input)
+    {
+        $this->input  = $input;
+        $this->tokens = [];
+
+        $this->reset();
+        $this->scan($input);
+    }
+
+    /**
+     * Resets the lexer.
+     *
+     * @return void
+     */
+    public function reset()
+    {
+        $this->lookahead = null;
+        $this->token     = null;
+        $this->peek      = 0;
+        $this->position  = 0;
+    }
+
+    /**
+     * Resets the peek pointer to 0.
+     *
+     * @return void
+     */
+    public function resetPeek()
+    {
+        $this->peek = 0;
+    }
+
+    /**
+     * Resets the lexer position on the input to the given position.
+     *
+     * @param int $position Position to place the lexical scanner.
+     *
+     * @return void
+     */
+    public function resetPosition(int $position = 0)
+    {
+        $this->position = $position;
+    }
+
+    /**
+     * Retrieve the original lexer's input until a given position.
+     *
+     * @return string
+     */
+    public function getInputUntilPosition(int $position)
+    {
+        return substr($this->input, 0, $position);
+    }
+
+    /**
+     * Checks whether a given token matches the current lookahead.
+     *
+     * @param T $type
+     *
+     * @return bool
+     *
+     * @psalm-assert-if-true !=null $this->lookahead
+     */
+    public function isNextToken(int|string|UnitEnum $type)
+    {
+        return $this->lookahead !== null && $this->lookahead->isA($type);
+    }
+
+    /**
+     * Checks whether any of the given tokens matches the current lookahead.
+     *
+     * @param list<T> $types
+     *
+     * @return bool
+     *
+     * @psalm-assert-if-true !=null $this->lookahead
+     */
+    public function isNextTokenAny(array $types)
+    {
+        return $this->lookahead !== null && $this->lookahead->isA(...$types);
+    }
+
+    /**
+     * Moves to the next token in the input string.
+     *
+     * @return bool
+     *
+     * @psalm-assert-if-true !null $this->lookahead
+     */
+    public function moveNext()
+    {
+        $this->peek      = 0;
+        $this->token     = $this->lookahead;
+        $this->lookahead = isset($this->tokens[$this->position])
+            ? $this->tokens[$this->position++] : null;
+
+        return $this->lookahead !== null;
+    }
+
+    /**
+     * Tells the lexer to skip input tokens until it sees a token with the given value.
+     *
+     * @param T $type The token type to skip until.
+     *
+     * @return void
+     */
+    public function skipUntil(int|string|UnitEnum $type)
+    {
+        while ($this->lookahead !== null && ! $this->lookahead->isA($type)) {
+            $this->moveNext();
+        }
+    }
+
+    /**
+     * Checks if given value is identical to the given token.
+     *
+     * @return bool
+     */
+    public function isA(string $value, int|string|UnitEnum $token)
+    {
+        return $this->getType($value) === $token;
+    }
+
+    /**
+     * Moves the lookahead token forward.
+     *
+     * @return Token<T, V>|null The next token or NULL if there are no more tokens ahead.
+     */
+    public function peek()
+    {
+        if (isset($this->tokens[$this->position + $this->peek])) {
+            return $this->tokens[$this->position + $this->peek++];
+        }
+
+        return null;
+    }
+
+    /**
+     * Peeks at the next token, returns it and immediately resets the peek.
+     *
+     * @return Token<T, V>|null The next token or NULL if there are no more tokens ahead.
+     */
+    public function glimpse()
+    {
+        $peek       = $this->peek();
+        $this->peek = 0;
+
+        return $peek;
+    }
+
+    /**
+     * Scans the input string for tokens.
+     *
+     * @param string $input A query string.
+     *
+     * @return void
+     */
+    protected function scan(string $input)
+    {
+        if (! isset($this->regex)) {
+            $this->regex = sprintf(
+                '/(%s)|%s/%s',
+                implode(')|(', $this->getCatchablePatterns()),
+                implode('|', $this->getNonCatchablePatterns()),
+                $this->getModifiers(),
+            );
+        }
+
+        $flags   = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE;
+        $matches = preg_split($this->regex, $input, -1, $flags);
+
+        if ($matches === false) {
+            // Work around https://bugs.php.net/78122
+            $matches = [[$input, 0]];
+        }
+
+        foreach ($matches as $match) {
+            // Must remain before 'value' assignment since it can change content
+            $firstMatch = $match[0];
+            $type       = $this->getType($firstMatch);
+
+            $this->tokens[] = new Token(
+                $firstMatch,
+                $type,
+                $match[1],
+            );
+        }
+    }
+
+    /**
+     * Gets the literal for a given token.
+     *
+     * @param T $token
+     *
+     * @return int|string
+     */
+    public function getLiteral(int|string|UnitEnum $token)
+    {
+        if ($token instanceof UnitEnum) {
+            return $token::class . '::' . $token->name;
+        }
+
+        $className = static::class;
+
+        $reflClass = new ReflectionClass($className);
+        $constants = $reflClass->getConstants();
+
+        foreach ($constants as $name => $value) {
+            if ($value === $token) {
+                return $className . '::' . $name;
+            }
+        }
+
+        return $token;
+    }
+
+    /**
+     * Regex modifiers
+     *
+     * @return string
+     */
+    protected function getModifiers()
+    {
+        return 'iu';
+    }
+
+    /**
+     * Lexical catchable patterns.
+     *
+     * @return string[]
+     */
+    abstract protected function getCatchablePatterns();
+
+    /**
+     * Lexical non-catchable patterns.
+     *
+     * @return string[]
+     */
+    abstract protected function getNonCatchablePatterns();
+
+    /**
+     * Retrieve token type. Also processes the token value if necessary.
+     *
+     * @return T|null
+     *
+     * @param-out V $value
+     */
+    abstract protected function getType(string &$value);
+}
Index: /mods/mod_rechnungen/lib/vendor/doctrine/lexer/src/Token.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/doctrine/lexer/src/Token.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/doctrine/lexer/src/Token.php	(revision 8435)
@@ -0,0 +1,56 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Doctrine\Common\Lexer;
+
+use UnitEnum;
+
+use function in_array;
+
+/**
+ * @template T of UnitEnum|string|int
+ * @template V of string|int
+ */
+final class Token
+{
+    /**
+     * The string value of the token in the input string
+     *
+     * @readonly
+     * @var V
+     */
+    public string|int $value;
+
+    /**
+     * The type of the token (identifier, numeric, string, input parameter, none)
+     *
+     * @readonly
+     * @var T|null
+     */
+    public $type;
+
+    /**
+     * The position of the token in the input string
+     *
+     * @readonly
+     */
+    public int $position;
+
+    /**
+     * @param V      $value
+     * @param T|null $type
+     */
+    public function __construct(string|int $value, $type, int $position)
+    {
+        $this->value    = $value;
+        $this->type     = $type;
+        $this->position = $position;
+    }
+
+    /** @param T ...$types */
+    public function isA(...$types): bool
+    {
+        return in_array($this->type, $types, true);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/.gitignore
===================================================================
--- /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/.gitignore	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/.gitignore	(revision 8435)
@@ -0,0 +1,8 @@
+/.buildpath
+/.project
+/.settings
+/.idea
+composer.lock
+vendor/
+/.phpunit.result.cache
+
Index: /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/.scrutinizer.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/.scrutinizer.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/.scrutinizer.yml	(revision 8435)
@@ -0,0 +1,10 @@
+tools:
+    external_code_coverage:
+        timeout: 600
+checks:
+    php:
+        code_rating: true
+        duplication: true           
+filter:
+    paths:
+        - src/*
Index: /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/.travis.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/.travis.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/.travis.yml	(revision 8435)
@@ -0,0 +1,31 @@
+language: php
+sudo: false
+cache:
+  directories:
+    - vendor
+    - $HOME/.composer/cache
+php:
+  - 7.1
+  - 7.2
+  - 7.3
+  - 7.4
+  - 8.0  
+
+matrix:
+  include:
+    - php: 7.1
+      dist: trusty
+      env: COMPOSER_FLAGS='--prefer-lowest --prefer-stable'
+
+before_script:
+  - if [[ $TRAVIS_PHP_VERSION = '7.1' ]]; then PHPUNIT_FLAGS="--coverage-clover=coverage.clover"; else PHPUNIT_FLAGS=""; fi
+  - if [[ $TRAVIS_PHP_VERSION != '7.1' ]]; then phpenv config-rm xdebug.ini; fi
+  - composer self-update
+  - composer update $COMPOSER_FLAGS
+
+script: vendor/phpunit/phpunit/phpunit $PHPUNIT_FLAGS
+
+after_script:
+  - wget https://scrutinizer-ci.com/ocular.phar
+  - if [[ $TRAVIS_PHP_VERSION = '7.1' ]]; then php ocular.phar code-coverage:upload --format=php-clover coverage.clover; fi
+
Index: /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/LICENSE	(revision 8435)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Asmir Mustafic
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/README.md	(revision 8435)
@@ -0,0 +1,17 @@
+# xsd2php-runtime
+
+[![Build Status](https://travis-ci.org/goetas-webservices/xsd2php-runtime.svg?branch=master)](https://travis-ci.org/goetas-webservices/xsd2php-runtime)
+[![Code Coverage](https://scrutinizer-ci.com/g/goetas-webservices/xsd2php-runtime/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/goetas-webservices/xsd2php-runtime/?branch=master)
+[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/goetas-webservices/xsd2php-runtime/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/goetas-webservices/xsd2php-runtime/?branch=master)
+
+
+Runtime libs for https://github.com/goetas-webservices/xsd2php
+
+## Note 
+
+The code in this project is provided under the 
+[MIT](https://opensource.org/licenses/MIT) license. 
+For professional support 
+contact [goetas@gmail.com](mailto:goetas@gmail.com) 
+or visit [https://www.goetas.com](https://www.goetas.com)
+
Index: /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/composer.json	(revision 8435)
@@ -0,0 +1,45 @@
+{
+  "name": "goetas-webservices/xsd2php-runtime",
+  "description": "Convert XSD  (XML Schema) definitions into PHP classes",
+  "type": "library",
+  "authors": [
+    {
+      "name": "Asmir Mustafic"
+    }
+  ],
+  "keywords": [
+    "converter",
+    "xml",
+    "xsd",
+    "php",
+    "jms",
+    "serializer"
+  ],
+  "license": "MIT",
+  "require": {
+    "php": ">=7.1",
+    "jms/serializer": "^1.2|^2.0|^3.0",
+    "symfony/yaml": "^2.2|^3.0|^4.0|^5.0|^6.0|^7.0"
+  },
+  "conflict": {
+    "jms/serializer": "1.4.1|1.6.1|1.6.2"
+  },  
+  "require-dev": {
+    "phpunit/phpunit": "^7.0|^8.0|^9.0"
+  },
+  "autoload": {
+    "psr-4": {
+      "GoetasWebservices\\Xsd\\XsdToPhpRuntime\\": "src/"
+    }
+  },
+  "autoload-dev": {
+    "psr-4": {
+      "GoetasWebservices\\Xsd\\XsdToPhpRuntime\\Tests\\": "tests/"
+    }
+  },
+  "extra": {
+    "branch-alias": {
+      "dev-master": "0.2-dev"
+    }
+  }
+}
Index: /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/phpunit.xml.dist
===================================================================
--- /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/phpunit.xml.dist	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/phpunit.xml.dist	(revision 8435)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit backupGlobals="true"
+         backupStaticAttributes="false"
+         bootstrap="./vendor/autoload.php"
+         colors="false"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="false"
+         convertWarningsToExceptions="true"
+         forceCoversAnnotation="false"
+
+         processIsolation="false"
+         stopOnError="false"
+         stopOnFailure="false"
+         stopOnIncomplete="false"
+         stopOnSkipped="false"
+         
+         verbose="false">
+         
+    <testsuites>
+        <testsuite name="Goetas XSD to PHP Test Suite">
+            <directory>./tests</directory>
+        </testsuite>
+    </testsuites>
+    
+<filter>
+  <whitelist>
+    <directory>src</directory>
+  </whitelist>
+  </filter>  
+
+</phpunit>
+
+
Index: /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/BaseTypesHandler.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/BaseTypesHandler.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/BaseTypesHandler.php	(revision 8435)
@@ -0,0 +1,91 @@
+<?php
+namespace GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler;
+
+use JMS\Serializer\Context;
+use JMS\Serializer\GraphNavigator;
+use JMS\Serializer\Handler\SubscribingHandlerInterface;
+use JMS\Serializer\XmlDeserializationVisitor;
+use JMS\Serializer\XmlSerializationVisitor;
+
+class BaseTypesHandler implements SubscribingHandlerInterface
+{
+
+    /**
+     * @return array
+     */
+    public static function getSubscribingMethods()
+    {
+        return array(
+            array(
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'GoetasWebservices\Xsd\XsdToPhp\Jms\SimpleListOf',
+                'method' => 'simpleListOfToXml'
+            ),
+            array(
+                'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
+                'format' => 'xml',
+                'type' => 'GoetasWebservices\Xsd\XsdToPhp\Jms\SimpleListOf',
+                'method' => 'simpleListOfFromXML'
+            ),
+            array(
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'GoetasWebservices\Xsd\XsdToPhp\Jms\Base64Encoded',
+                'method' => 'base64EncodedToXml'
+            ),
+            array(
+                'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
+                'format' => 'xml',
+                'type' => 'GoetasWebservices\Xsd\XsdToPhp\Jms\Base64Encoded',
+                'method' => 'base64EncodedFromXml'
+            )
+        );
+    }
+    public function base64EncodedToXml(XmlSerializationVisitor $visitor, $data, array $type, Context $context)
+    {
+        return $visitor->visitSimpleString(base64_encode($data), $type, $context);
+    }
+
+    public function base64EncodedFromXml(XmlDeserializationVisitor $visitor, $data, array $type)
+    {
+        $attributes = $data->attributes('xsi', true);
+        if (isset($attributes['nil'][0]) && (string)$attributes['nil'][0] === 'true') {
+            return null;
+        }
+
+        return base64_decode((string)$data);
+    }
+
+    public function simpleListOfToXml(XmlSerializationVisitor $visitor, $object, array $type, Context $context)
+    {
+
+        $newType = array(
+            'name' => $type["params"][0]["name"],
+            'params' => array()
+        );
+
+        $navigator = $context->getNavigator();
+        $ret = array();
+        foreach ($object as $v) {
+            $ret[] = $navigator->accept($v, $newType, $context)->data;
+        }
+
+        return $visitor->getDocument()->createTextNode(implode(" ", $ret));
+    }
+
+    public function simpleListOfFromXml(XmlDeserializationVisitor $visitor, $node, array $type, Context $context)
+    {
+        $newType = array(
+            'name' => $type["params"][0]["name"],
+            'params' => array()
+        );
+        $ret = array();
+        $navigator = $context->getNavigator();
+        foreach (explode(" ", (string)$node) as $v) {
+            $ret[] = $navigator->accept($v, $newType, $context);
+        }
+        return $ret;
+    }
+}
+
Index: /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/XmlSchemaDateHandler.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/XmlSchemaDateHandler.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/src/Jms/Handler/XmlSchemaDateHandler.php	(revision 8435)
@@ -0,0 +1,168 @@
+<?php
+namespace GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler;
+
+use JMS\Serializer\Context;
+use JMS\Serializer\GraphNavigator;
+use JMS\Serializer\Handler\SubscribingHandlerInterface;
+use JMS\Serializer\XmlDeserializationVisitor;
+use JMS\Serializer\XmlSerializationVisitor;
+use RuntimeException;
+
+class XmlSchemaDateHandler implements SubscribingHandlerInterface
+{
+
+    protected $defaultTimezone;
+
+    /**
+     * @return array
+     */
+    public static function getSubscribingMethods()
+    {
+        return array(
+            array(
+                'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
+                'format' => 'xml',
+                'type' => 'GoetasWebservices\Xsd\XsdToPhp\XMLSchema\Date',
+                'method' => 'deserializeDate'
+            ),
+            array(
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'GoetasWebservices\Xsd\XsdToPhp\XMLSchema\Date',
+                'method' => 'serializeDate'
+            ),
+            array(
+                'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
+                'format' => 'xml',
+                'type' => 'GoetasWebservices\Xsd\XsdToPhp\XMLSchema\DateTime',
+                'method' => 'deserializeDateTime'
+            ),
+            array(
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'GoetasWebservices\Xsd\XsdToPhp\XMLSchema\DateTime',
+                'method' => 'serializeDateTime'
+            ),
+            array(
+                'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
+                'format' => 'xml',
+                'type' => 'GoetasWebservices\Xsd\XsdToPhp\XMLSchema\Time',
+                'method' => 'deserializeTime'
+            ),
+            array(
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'GoetasWebservices\Xsd\XsdToPhp\XMLSchema\Time',
+                'method' => 'serializeTime'
+            ),
+            array(
+                'type' => 'DateInterval',
+                'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
+                'format' => 'xml',
+                'method' => 'deserializeDateIntervalXml',
+            ),
+        );
+    }
+
+    public function __construct($defaultTimezone = 'UTC')
+    {
+        $this->defaultTimezone = new \DateTimeZone($defaultTimezone);
+
+    }
+
+    public function deserializeDateIntervalXml(XmlDeserializationVisitor $visitor, $data, array $type){
+        $attributes = $data->attributes('xsi', true);
+        if (isset($attributes['nil'][0]) && (string) $attributes['nil'][0] === 'true') {
+            return null;
+        }
+        return $this->createDateInterval((string)$data);
+    }
+
+    public function serializeDate(XmlSerializationVisitor $visitor, \DateTime $date, array $type, Context $context)
+    {
+
+        $v = $date->format('Y-m-d');
+
+        return $visitor->visitSimpleString($v, $type, $context);
+    }
+
+    public function deserializeDate(XmlDeserializationVisitor $visitor, $data, array $type)
+    {
+        $attributes = $data->attributes('xsi', true);
+        if (isset($attributes['nil'][0]) && (string)$attributes['nil'][0] === 'true') {
+            return null;
+        }
+        if (!preg_match('/^(\d{4})-(\d{2})-(\d{2})(Z|([+-]\d{2}:\d{2}))?$/', $data)) {
+            throw new RuntimeException(sprintf('Invalid date "%s", expected valid XML Schema date string.', $data));
+        }
+
+        return $this->parseDateTime($data, $type);
+    }
+
+    public function serializeDateTime(XmlSerializationVisitor $visitor, \DateTime $date, array $type, Context $context)
+    {
+
+        $v = $date->format(\DateTime::W3C);
+
+        return $visitor->visitSimpleString($v, $type, $context);
+    }
+
+    public function deserializeDateTime(XmlDeserializationVisitor $visitor, $data, array $type)
+    {
+        $attributes = $data->attributes('xsi', true);
+        if (isset($attributes['nil'][0]) && (string)$attributes['nil'][0] === 'true') {
+            return null;
+        }
+
+        return $this->parseDateTime($data, $type);
+
+    }
+
+    public function serializeTime(XmlSerializationVisitor $visitor, \DateTime $date, array $type, Context $context)
+    {
+        $v = $date->format('H:i:s');
+        if ($date->getTimezone()->getOffset($date) !== $this->defaultTimezone->getOffset($date)) {
+            $v .= $date->format('P');
+        }
+        return $visitor->visitSimpleString($v, $type, $context);
+    }
+
+    public function deserializeTime(XmlDeserializationVisitor $visitor, $data, array $type)
+    {
+        $attributes = $data->attributes('xsi', true);
+        if (isset($attributes['nil'][0]) && (string)$attributes['nil'][0] === 'true') {
+            return null;
+        }
+
+        $data = (string)$data;
+
+        return new \DateTime($data, $this->defaultTimezone);
+    }
+
+    private function parseDateTime($data, array $type)
+    {
+        $timezone = isset($type['params'][1]) ? new \DateTimeZone($type['params'][1]) : $this->defaultTimezone;
+        $datetime = new \DateTime((string)$data, $timezone);
+        if (false === $datetime) {
+            throw new RuntimeException(sprintf('Invalid datetime "%s", expected valid XML Schema dateTime string.', $data));
+        }
+
+        return $datetime;
+    }
+
+    private function createDateInterval($interval){
+        $f = 0.0;
+        if (preg_match('~\.\d+~',$interval,$match)) {
+            $interval = str_replace($match[0], "", $interval);
+            $f = (float)$match[0];
+        }
+        $di = new \DateInterval($interval);
+        // milliseconds are only available from >=7.1
+        if(isset($di->f)){
+            $di->f= $f;
+        }
+
+        return $di;
+    }
+}
+
Index: /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerDeserializationTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerDeserializationTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerDeserializationTest.php	(revision 8435)
@@ -0,0 +1,120 @@
+<?php
+namespace GoetasWebservices\Xsd\XsdToPhpRuntime\Tests\Jms\Handler;
+
+use Doctrine\Common\Annotations\AnnotationReader;
+use GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\XmlSchemaDateHandler;
+use JMS\Serializer\Accessor\DefaultAccessorStrategy;
+use JMS\Serializer\Construction\UnserializeObjectConstructor;
+use JMS\Serializer\DeserializationContext;
+use JMS\Serializer\EventDispatcher\EventDispatcher;
+use JMS\Serializer\GraphNavigator;
+use JMS\Serializer\Handler\HandlerRegistry;
+use JMS\Serializer\Metadata\Driver\AnnotationDriver;
+use JMS\Serializer\Naming\IdenticalPropertyNamingStrategy;
+use JMS\Serializer\XmlDeserializationVisitor;
+use JMS\Serializer\XmlSerializationVisitor;
+use Metadata\MetadataFactory;
+use PHPUnit\Framework\TestCase;
+
+class XmlSchemaDateHandlerDeserializationTest extends TestCase
+{
+    /**
+     * @var XmlSchemaDateHandler
+     */
+    protected $handler;
+    /**
+     * @var DeserializationContext
+     */
+    protected $context;
+
+    /**
+     * @var XmlDeserializationVisitor
+     */
+    protected $visitor;
+
+    public function setUp(): void
+    {
+        $this->handler = new XmlSchemaDateHandler();
+        $this->context = DeserializationContext::create();
+        $naming = new IdenticalPropertyNamingStrategy();
+
+
+
+        $dispatcher = new EventDispatcher();
+        $handlerRegistry= new HandlerRegistry();
+        $cons = new UnserializeObjectConstructor();
+
+        $navigator = class_exists('JMS\Serializer\GraphNavigator\DeserializationGraphNavigator')
+            ? $this->initJmsv2($naming, $handlerRegistry, $cons, $dispatcher)
+            : $this->initJmsv1($naming, $handlerRegistry, $cons, $dispatcher)
+        ;
+        $this->visitor->setNavigator($navigator);
+    }
+
+    private function initJmsv2($naming, $handlerRegistry, $cons, $dispatcher)
+    {
+        $accessor = new DefaultAccessorStrategy();
+        $this->visitor = new XmlDeserializationVisitor();
+        $metadataFactory = new MetadataFactory(new AnnotationDriver(new AnnotationReader(), $naming));
+        return new GraphNavigator\DeserializationGraphNavigator($metadataFactory, $handlerRegistry, $cons, $accessor, $dispatcher);
+    }
+
+    private function initJmsv1($naming, $handlerRegistry, $cons, $dispatcher)
+    {
+        $this->visitor = new XmlDeserializationVisitor($naming);
+        $metadataFactory = new MetadataFactory(new AnnotationDriver(new AnnotationReader()));
+        return new GraphNavigator($metadataFactory, $handlerRegistry, $cons, $dispatcher);
+    }
+
+    /**
+     * @dataProvider getDeserializeDate
+     * @param string    $date
+     * @param \DateTime $expected
+     */
+    public function testDeserializeDate($date, \DateTime $expected)
+    {
+        $element = new \SimpleXMLElement("<Date>$date</Date>");
+        $deserialized = $this->handler->deserializeDate($this->visitor, $element, [], $this->context);
+        $this->assertEquals($expected, $deserialized);
+    }
+
+    /**
+     * @dataProvider getDeserializeDateInterval
+     * @param string    $dateInterval
+     * @param \DateTime $expected
+     */
+    public function testDeserializeDateInterval($dateInterval, $expected)
+    {
+        $element = new \SimpleXMLElement("<DateInterval>$dateInterval</DateInterval>");
+        $deserialized = $this->handler->deserializeDateIntervalXml($this->visitor, $element, [], $this->context);
+        if (isset($deserialized->f)) {
+            $this->assertEquals($expected['f'], $deserialized->f);
+        }
+        $this->assertEquals($expected['s'], $deserialized->s);
+    }
+
+    public function getDeserializeDateInterval()
+    {
+        return [
+            ['P0Y0M0DT3H5M7.520S', ['s' => 7, 'f' => 0.52]],
+            ['P0Y0M0DT3H5M7S', ['s' => 7, 'f' => 0]]
+        ];
+    }
+
+    public function getDeserializeDate()
+    {
+        return [
+            ['2015-01-01', new \DateTime('2015-01-01')],
+            ['2015-01-01Z', new \DateTime('2015-01-01', new \DateTimeZone("UTC"))],
+            ['2015-01-01+06:00', new \DateTime('2015-01-01', new \DateTimeZone("+06:00"))],
+            ['2015-01-01-20:00', new \DateTime('2015-01-01', new \DateTimeZone("-20:00"))],
+        ];
+    }
+
+    public function testDeserializeInvalidDate()
+    {
+        $this->expectException(\RuntimeException::class);
+        $element = new \SimpleXMLElement("<Date>2015-01-01T</Date>");
+        $this->handler->deserializeDate($this->visitor, $element, [], $this->context);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerSerializationTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerSerializationTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/goetas-webservices/xsd2php-runtime/tests/XmlSchemaDateHandlerSerializationTest.php	(revision 8435)
@@ -0,0 +1,114 @@
+<?php
+namespace GoetasWebservices\Xsd\XsdToPhpRuntime\Tests\Jms\Handler;
+
+use Doctrine\Common\Annotations\AnnotationReader;
+use GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\XmlSchemaDateHandler;
+use JMS\Serializer\Accessor\DefaultAccessorStrategy;
+use JMS\Serializer\Construction\UnserializeObjectConstructor;
+use JMS\Serializer\EventDispatcher\EventDispatcher;
+use JMS\Serializer\GraphNavigator;
+use JMS\Serializer\Handler\HandlerRegistry;
+use JMS\Serializer\Metadata\Driver\AnnotationDriver;
+use JMS\Serializer\Naming\IdenticalPropertyNamingStrategy;
+use JMS\Serializer\SerializationContext;
+use JMS\Serializer\XmlSerializationVisitor;
+use Metadata\MetadataFactory;
+use PHPUnit\Framework\TestCase;
+
+class XmlSchemaDateHandlerSerializationTest extends TestCase
+{
+    /**
+     * @var XmlSchemaDateHandler
+     */
+    protected $handler;
+    /**
+     * @var SerializationContext
+     */
+    protected $context;
+
+    /**
+     * @var XmlSerializationVisitor
+     */
+    protected $visitor;
+
+    public function setUp(): void
+    {
+        $this->handler = new XmlSchemaDateHandler();
+        $this->context = SerializationContext::create();
+
+        $naming = new IdenticalPropertyNamingStrategy();
+        $cons = new UnserializeObjectConstructor();
+
+        $dispatcher = new EventDispatcher();
+        $handlerRegistry= new HandlerRegistry();
+
+        $navigator = class_exists('JMS\Serializer\GraphNavigator\DeserializationGraphNavigator')
+            ? $this->initJmsv2($naming, $handlerRegistry, $cons, $dispatcher)
+            : $this->initJmsv1($naming, $handlerRegistry, $cons, $dispatcher)
+        ;
+        $this->visitor->setNavigator($navigator);
+    }
+
+    private function initJmsv2($naming, $handlerRegistry, $cons, $dispatcher)
+    {
+        $accessor = new DefaultAccessorStrategy();
+        $this->visitor = new XmlSerializationVisitor();
+        $metadataFactory = new MetadataFactory(new AnnotationDriver(new AnnotationReader(), $naming));
+        return new GraphNavigator\SerializationGraphNavigator($metadataFactory, $handlerRegistry, $accessor, $dispatcher);
+    }
+
+    private function initJmsv1($naming, $handlerRegistry, $cons, $dispatcher)
+    {
+        $this->visitor = new XmlSerializationVisitor($naming);
+        $metadataFactory = new MetadataFactory(new AnnotationDriver(new AnnotationReader()));
+        return new GraphNavigator($metadataFactory, $handlerRegistry, $cons, $dispatcher);
+    }
+
+    /**
+     * @dataProvider getSerializeDateTime
+     * @param \DateTime $date
+     */
+    public function testSerializeDateTime(\DateTime $date, $expected)
+    {
+        $ret = $this->handler->serializeDateTime($this->visitor, $date, [], $this->context);
+        $actual = $ret ? $ret->nodeValue : $this->visitor->getCurrentNode()->nodeValue;
+        $this->assertEquals($expected, $actual);
+    }
+
+    public function getSerializeDateTime()
+    {
+        return [
+            [new \DateTime('2015-01-01 12:00+00:00'), '2015-01-01T12:00:00+00:00'],
+            [new \DateTime('2015-01-01 12:00:56+00:00'), '2015-01-01T12:00:56+00:00'],
+            [new \DateTime('2015-01-01 12:00:56+00:00'), '2015-01-01T12:00:56+00:00'],
+            [new \DateTime('2015-01-01 12:00:56+20:00'), '2015-01-01T12:00:56+20:00'],
+            [new \DateTime('2015-01-01 12:00:56', new \DateTimeZone("Europe/London")), '2015-01-01T12:00:56+00:00'],
+            [new \DateTime('2015-01-01 12:00:56+00:00', new \DateTimeZone("Europe/London")), '2015-01-01T12:00:56+00:00'],
+            [new \DateTime('2015-01-01 12:00:56', new \DateTimeZone("Europe/Rome")), '2015-01-01T12:00:56+01:00'],
+        ];
+    }
+
+    /**
+     * @dataProvider getSerializeDate
+     * @param \DateTime $date
+     * @param string    $expected
+     */
+    public function testSerializeDate(\DateTime $date, $expected)
+    {
+        $ret = $this->handler->serializeDate($this->visitor, $date, [], $this->context);
+
+        $actual = $ret ? $ret->nodeValue : $this->visitor->getCurrentNode()->nodeValue;
+        $this->assertEquals($expected, $actual);
+    }
+
+    public function getSerializeDate()
+    {
+        return [
+            [new \DateTime('2015-01-01 12:00'), '2015-01-01'],
+            [new \DateTime('2015-01-01 12:00:56'), '2015-01-01'],
+            [new \DateTime('2015-01-01 12:00:56+00:00'), '2015-01-01'],
+            [new \DateTime('2015-01-01 12:00:56+20:00'), '2015-01-01'],
+            [new \DateTime('2015-01-01 12:00:56', new \DateTimeZone("Europe/London")), '2015-01-01'],
+        ];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php73.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php73.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php73.ant.yml	(revision 8435)
@@ -0,0 +1,31 @@
+name: CI (Ant, PHP 7.3)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+    paths-ignore:
+      - '**.md'
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '7.3'
+            extensions: imagick, swoole      
+            coverage: xdebug
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v1
+        if: always()
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php74.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php74.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php74.ant.yml	(revision 8435)
@@ -0,0 +1,31 @@
+name: CI (Ant, PHP 7.4)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+    paths-ignore:
+      - '**.md'
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '7.4'
+            extensions: imagick, swoole
+            coverage: xdebug
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v1
+        if: always()
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php80.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php80.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php80.ant.yml	(revision 8435)
@@ -0,0 +1,31 @@
+name: CI (Ant, PHP 8.0)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+    paths-ignore:
+      - '**.md'
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '8.0'
+            extensions: imagick, swoole      
+            coverage: xdebug
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v1
+        if: always()
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php81.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php81.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php81.ant.yml	(revision 8435)
@@ -0,0 +1,31 @@
+name: CI (Ant, PHP 8.1)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+    paths-ignore:
+      - '**.md'
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '8.1'
+            extensions: imagick, swoole      
+            coverage: xdebug
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v1
+        if: always()
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php81.release.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php81.release.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.github/workflows/build.php81.release.ant.yml	(revision 8435)
@@ -0,0 +1,37 @@
+name: Release
+
+on:
+  push:
+    tags:
+      - "v*"
+    paths-ignore:
+      - '**.md'
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '8.1'
+            extensions: imagick, swoole
+            coverage: xdebug
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v1
+        if: always()
+        with:
+            files: "./build/logs/junit.xml"
+      - name: Make Release
+        uses: "marvinpinto/action-automatic-releases@latest"
+        with:
+            repo_token: "${{ secrets.GITHUB_TOKEN }}"
+            prerelease: false
+            files: |
+                build/dist/doc.zip
+                build/dist/builddoc.zip
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.gitignore
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.gitignore	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/.gitignore	(revision 8435)
@@ -0,0 +1,83 @@
+#ignore thumbnails created by windows
+Thumbs.db
+#Ignore files build by Visual Studio
+*.obj
+*.exe
+*.pdb
+*.user
+*.aps
+*.pch
+*.vspscc
+*_i.c
+*_p.c
+*.ncb
+*.suo
+*.tlb
+*.tlh
+*.bak
+*.cache
+*.ilk
+*.log
+[Bb]in
+[Dd]ebug*/
+*.lib
+*.sbr
+obj/
+[Rr]elease*/
+_ReSharper*/
+[Tt]est[Rr]esult*
+*.dcu
+*.dll
+*.ini
+*.um
+[B|b]ackup/*
+*/[C|c]ompiled/*
+*/_[I|i]n[F|f]uture/*
+*.~*
+*.$$$
+[P|p][R|r][E|e][F|f][S|s]/*
+[B|b]ackup*/*
+[D|d]cu/*
+[E|e]xport/*
+*.key
+*.KEY
+*.log
+*.ini
+*.INI
+*.um
+*.UM
+*.$$$
+*.123
+*.jpg
+*.png
+*.bmp
+*.gif
+cgi-bin
+_backup*
+*.zip
+*.tar
+*.tar.gz
+[D|d][E|e][P|p][L|l][O|o][Y|y]/*
+
+.htpasswd
+/nbproject/private/
+/nbproject/
+
+!/setup/.htaccess
+.vscode 
+.idea
+
+/vendor/
+/logs/*
+.phpunit.result.cache
+/.phpdoc/
+/build/api/
+/build/coverage/
+/build/coverage-html/
+/build/doc/
+/build/logs/
+/build/pdepend/
+/build/phpdox/
+/build/phpdoc/
+/*.phar
+/composer.lock
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/LICENSE	(revision 8435)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 horstoeko
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/README.md	(revision 8435)
@@ -0,0 +1,101 @@
+# MimeDB
+
+[![Latest Stable Version](https://poser.pugx.org/horstoeko/mimedb/v/stable.png)](https://packagist.org/packages/horstoeko/mimedb) [![Total Downloads](https://poser.pugx.org/horstoeko/mimedb/downloads.png)](https://packagist.org/packages/horstoeko/mimedb) [![Latest Unstable Version](https://poser.pugx.org/horstoeko/mimedb/v/unstable.png)](https://packagist.org/packages/horstoeko/mimedb) [![License](https://poser.pugx.org/horstoeko/mimedb/license.png)](https://packagist.org/packages/horstoeko/mimedb) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/horstoeko/mimedb)
+
+[![CI (Ant, PHP 7.3)](https://github.com/horstoeko/mimedb/actions/workflows/build.php73.ant.yml/badge.svg)](https://github.com/horstoeko/mimedb/actions/workflows/build.php73.ant.yml) [![CI (Ant, PHP 7.4)](https://github.com/horstoeko/mimedb/actions/workflows/build.php74.ant.yml/badge.svg)](https://github.com/horstoeko/mimedb/actions/workflows/build.php74.ant.yml) [![CI (PHP 8.0)](https://github.com/horstoeko/mimedb/actions/workflows/build.php80.ant.yml/badge.svg)](https://github.com/horstoeko/mimedb/actions/workflows/build.php80.ant.yml) [![CI (PHP 8.1)](https://github.com/horstoeko/mimedb/actions/workflows/build.php81.ant.yml/badge.svg)](https://github.com/horstoeko/mimedb/actions/workflows/build.php81.ant.yml)
+
+## Table of Contents
+
+- [MimeDB](#mimedb)
+  - [Table of Contents](#table-of-contents)
+  - [License](#license)
+  - [Overview](#overview)
+  - [Dependencies](#dependencies)
+  - [Installation](#installation)
+  - [Usage](#usage)
+    - [Get all MimeTypes by file extensions](#get-all-mimetypes-by-file-extensions)
+    - [Get all file extensions by MimeType](#get-all-file-extensions-by-mimetype)
+
+## License
+
+The code in this project is provided under the [MIT](https://opensource.org/licenses/MIT) license.
+
+## Overview
+
+With `horstoeko/mimedb` you can receive mimetypes by file extension and visa versa.
+
+## Dependencies
+
+This package has no dependencies.
+
+## Installation
+
+There is one recommended way to install `horstoeko/mimedb` via [Composer](https://getcomposer.org/):
+
+* adding the dependency to your ``composer.json`` file:
+
+```js
+  "require": {
+      ..
+      "horstoeko/mimedb":"^1",
+      ..
+  },
+```
+
+## Usage
+
+For detailed eplanation you may have a look in the [examples](https://github.com/horstoeko/mimedb/tree/master/examples) of this package and the documentation attached to every release.
+
+### Get all MimeTypes by file extensions
+
+```php
+use horstoeko\mimedb\MimeDb;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$mimeDb = MimeDb::singleton();
+
+// OUTPUT:
+//   application/vnd.openxmlformats-officedocument.wordprocessingml.document
+
+echo $mimeDb->findFirstMimeTypeByExtension('.docx') . PHP_EOL;
+
+// OUTPUT:
+//   application/vnd.openxmlformats-officedocument.wordprocessingml.document
+
+foreach ($mimeDb->findAllMimeTypesByExtension('.docx') as $mimetype) {
+    echo $mimetype . PHP_EOL;
+}
+```
+
+### Get all file extensions by MimeType
+
+```php
+
+use horstoeko\mimedb\MimeDb;
+
+error_reporting(E_ERROR | E_WARNING | E_PARSE);
+
+$mimeDb = MimeDb::singleton();
+
+// OUTPUT:
+//   docx
+
+echo $mimeDb->findFirstFileExtensionByMimeType('application/vnd.openxmlformats-officedocument.wordprocessingml.document') . PHP_EOL;
+
+// OUTPUT:
+//   mkv
+//   mk3d
+//   mks
+
+foreach ($mimeDb->findAllFileExtensionsByMimeType('video/x-matroska') as $fileExtension) {
+    echo $fileExtension . PHP_EOL;
+}
+
+// OUTPUT:
+//   docx
+
+foreach ($mimeDb->findAllFileExtensionsByMimeType('application/vnd.openxmlformats-officedocument.wordprocessingml.document') as $fileExtension) {
+    echo $fileExtension . PHP_EOL;
+}
+```
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build.ant.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build.ant.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build.ant.xml	(revision 8435)
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="php-automate-build-ant" default="full-build" basedir=".">
+    <!-- By default the tools are managed by Composer in ${basedir}/vendor/bin -->
+    <property name="url.composer.download" value="https://getcomposer.org/download/2.2.6/composer.phar"/>
+    <property name="url.phpdocumentor.download" value="https://phpdoc.org/phpDocumentor.phar"/>
+    <property name="composer" value="${basedir}/composer.phar"/>
+    <property name="phpdocumentor" value="${basedir}/phpDocumentor.phar"/>
+    <property name="pdepend" value="${basedir}/vendor/bin/pdepend"/>
+    <property name="phpcpd" value="${basedir}/vendor/bin/phpcpd"/>
+    <property name="phpcs" value="${basedir}/vendor/bin/phpcs"/>
+    <property name="phploc" value="${basedir}/vendor/bin/phploc"/>
+    <property name="phpmd" value="${basedir}/vendor/bin/phpmd"/>
+    <property name="phpunit" value="${basedir}/vendor/bin/phpunit"/>
+    <property name="phpstan" value="${basedir}/vendor/bin/phpstan"/>
+    <property name="git" value="/usr/bin/git"/>
+    <target name="clean" unless="clean.done" description="Cleanup build artifacts.">
+        <delete dir="${basedir}/build/builddoc"/>
+        <delete dir="${basedir}/build/doc"/>
+        <delete dir="${basedir}/build/coverage"/>
+        <delete dir="${basedir}/build/logs"/>
+        <delete dir="${basedir}/build/pdepend"/>
+        <delete dir="${basedir}/build/dist"/>
+        <delete dir="${basedir}/build/phpdoc"/>
+        <property name="clean.done" value="true"/>
+    </target>
+    <target name="composer" description="Install composer packages including require-dev.">
+        <get src="${url.composer.download}" dest="${composer}"/>
+        <exec executable="chmod" failonerror="true">
+            <arg value="+x"/>
+            <arg path="${composer}"/>
+        </exec>
+        <exec executable="php" failonerror="true">
+            <arg path="${composer}"/>
+            <arg value="install"/>
+            <arg value="--prefer-dist"/>
+            <arg value="--no-progress"/>
+        </exec>
+        <exec executable="php" failonerror="true">
+            <arg path="${composer}"/>
+            <arg value="update"/>
+        </exec>
+    </target>
+    <target name="downloadphpdocumentor" description="Install phpdocumentor.">
+        <get src="${url.phpdocumentor.download}" dest="${phpdocumentor}"/>
+        <exec executable="chmod" failonerror="true">
+            <arg value="+x"/>
+            <arg path="${phpdocumentor}"/>
+        </exec>
+    </target>
+    <target name="full-build" depends="prepare,composer,static-analysis,phpunit,-check-failure,projectdoc,deploy" description="Perform static analysis, run tests, and generate project documentation.">
+        <echo message="Built"/>
+    </target>
+    <target name="lint" unless="lint.done" description="Perform syntax check of PHP sourcecode files.">
+        <apply executable="php" failonerror="true" taskname="lint">
+            <arg value="-l"/>
+            <fileset dir="${basedir}/src">
+                <include name="**/*.php"/>
+            </fileset>
+            <fileset dir="${basedir}/tests">
+                <include name="**/*.php"/>
+            </fileset>
+        </apply>
+        <property name="lint.done" value="true"/>
+    </target>
+    <target name="pdepend" unless="pdepend.done" depends="prepare" description="Calculate software metrics using PHP_Depend and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${pdepend}" taskname="pdepend">
+            <arg value="--jdepend-xml=${basedir}/build/logs/jdepend.xml"/>
+            <arg value="--jdepend-chart=${basedir}/build/pdepend/dependencies.svg"/>
+            <arg value="--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg"/>
+            <arg path="${basedir}/src"/>
+        </exec>
+        <property name="pdepend.done" value="true"/>
+    </target>
+    <target name="phpcpd" unless="phpcpd.done" description="Find duplicate code using PHPCPD and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpcpd}" taskname="phpcpd">
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities"/>
+            <arg path="${basedir}/src"/>
+        </exec>
+        <property name="phpcpd.done" value="true"/>
+    </target>
+    <target name="phpcpd-ci" unless="phpcpd.done" depends="prepare" description="Find duplicate code using PHPCPD and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpcpd}" taskname="phpcpd">
+            <arg value="--log-pmd"/>
+            <arg path="${basedir}/build/logs/pmd-cpd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities/"/>
+            <arg path="${basedir}/src"/>
+        </exec>
+        <property name="phpcpd.done" value="true"/>
+    </target>
+    <target name="phpcs" unless="phpcs.done" description="Find coding standard violations using PHP_CodeSniffer and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpcs}" taskname="phpcs">
+            <arg value="--standard=${basedir}/build/phpcsrules.xml"/>
+            <arg value="--extensions=php"/>
+            <arg value="--ignore=autoload.php"/>
+            <arg path="${basedir}/src"/>
+            <arg path="${basedir}/tests"/>
+        </exec>
+        <property name="phpcs.done" value="true"/>
+    </target>
+    <target name="phpcs-ci" unless="phpcs.done" depends="prepare" description="Find coding standard violations using PHP_CodeSniffer and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpcs}" output="/dev/null" taskname="phpcs">
+            <arg value="--report=checkstyle"/>
+            <arg value="--report-file=${basedir}/build/logs/checkstyle.xml"/>
+            <arg value="--standard=${basedir}/build/phpcsrules.xml"/>
+            <arg value="--extensions=php"/>
+            <arg value="--ignore=autoload.php"/>
+            <arg path="${basedir}/src"/>
+            <arg path="${basedir}/tests"/>
+        </exec>
+        <property name="phpcs.done" value="true"/>
+    </target>
+    <target name="phpstan" unless="phpstan.done" description="Find coding standard violations using PHPStan and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpstan}" taskname="phpstan">
+            <arg value="analyze"/>
+            <arg value="-c"/>
+            <arg path="${basedir}/build/phpstan.neon"/>
+            <arg value="--autoload-file=${basedir}/vendor/autoload.php"/>
+            <arg value="--no-interaction"/>
+            <arg value="--no-progress"/>
+            <arg value="--error-format=table"/>
+        </exec>
+        <property name="phpstan.done" value="true"/>
+    </target>
+    <target name="phpstan-ci" unless="phpstan.done" depends="prepare" description="Find coding standard violations using PHPStan and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpstan}" taskname="phpstan" outputproperty="phpstan.output">
+            <arg value="analyze"/>
+            <arg value="-c"/>
+            <arg path="${basedir}/build/phpstan.neon"/>
+            <arg value="--autoload-file=${basedir}/vendor/autoload.php"/>
+            <arg value="--no-interaction"/>
+            <arg value="--no-progress"/>
+            <arg value="--error-format=checkstyle"/>
+        </exec>
+        <echo message="${phpstan.output}" file="${basedir}/build/logs/checkstyle_phpstan.xml"/>
+        <property name="phpstan.done" value="true"/>
+    </target>
+    <target name="phploc" unless="phploc.done" description="Measure project size using PHPLOC and print human readable output. Intended for usage on the command line.">
+        <exec executable="${phploc}" taskname="phploc">
+            <arg value="--count-tests"/>
+            <arg path="${basedir}/src"/>
+            <arg path="${basedir}/tests"/>
+        </exec>
+        <property name="phploc.done" value="true"/>
+    </target>
+    <target name="phploc-ci" unless="phploc.done" depends="prepare" description="Measure project size using PHPLOC and log result in CSV and XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phploc}" taskname="phploc">
+            <arg value="--count-tests"/>
+            <arg value="--log-csv"/>
+            <arg path="${basedir}/build/logs/phploc.csv"/>
+            <arg value="--log-xml"/>
+            <arg path="${basedir}/build/logs/phploc.xml"/>
+            <arg path="${basedir}/src"/>
+            <arg path="${basedir}/tests"/>
+        </exec>
+        <property name="phploc.done" value="true"/>
+    </target>
+    <target name="phpmd" unless="phpmd.done" description="Perform project mess detection using PHPMD and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${basedir}/src"/>
+            <arg value="text"/>
+            <arg path="${basedir}/build/phpmd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities/"/>
+        </exec>
+        <property name="phpmd.done" value="true"/>
+    </target>
+    <target name="phpmd-ci" unless="phpmd.done" depends="prepare" description="Perform project mess detection using PHPMD and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${basedir}/src"/>
+            <arg value="xml"/>
+            <arg path="${basedir}/build/phpmd.xml"/>
+            <arg value="--reportfile"/>
+            <arg path="${basedir}/build/logs/pmd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities/"/>
+        </exec>
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${basedir}/src"/>
+            <arg value="html"/>
+            <arg path="${basedir}/build/phpmd.xml"/>
+            <arg value="--reportfile"/>
+            <arg path="${basedir}/build/logs/pmd.html"/>
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities/"/>
+        </exec>
+        <property name="phpmd.done" value="true"/>
+    </target>
+    <target name="phpunit" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit.">
+        <exec executable="${phpunit}" resultproperty="result.phpunit" taskname="phpunit">
+            <arg value="--configuration"/>
+            <arg path="${basedir}/build/phpunit.xml"/>
+        </exec>
+        <property name="phpunit.done" value="true"/>
+    </target>
+    <target name="phpunit-no-coverage" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit without generating code coverage reports.">
+        <exec executable="${phpunit}" failonerror="true" taskname="phpunit">
+            <arg value="--configuration"/>
+            <arg path="${basedir}/build/phpunit.xml"/>
+            <arg path="tests"/>
+            <arg value="--no-coverage"/>
+        </exec>
+        <property name="phpunit.done" value="true"/>
+    </target>
+    <target name="prepare" unless="prepare.done" depends="clean" description="Prepare for build.">
+        <mkdir dir="${basedir}/build/builddoc"/>
+        <mkdir dir="${basedir}/build/doc"/>
+        <mkdir dir="${basedir}/build/coverage"/>
+        <mkdir dir="${basedir}/build/logs"/>
+        <mkdir dir="${basedir}/build/pdepend"/>
+        <mkdir dir="${basedir}/build/dist"/>
+        <mkdir dir="${basedir}/build/phpdoc"/>
+        <property name="prepare.done" value="true"/>
+    </target>
+    <target name="quick-build" depends="prepare,composer,lint,phpunit-no-coverage" description="Perform lint check and run tests without generating code coverage reports.">
+        <echo message="Built"/>
+    </target>
+    <target name="static-analysis" depends="lint,phploc-ci,pdepend,phpmd-ci,phpcs-ci,phpstan-ci,phpcpd-ci" description="Perform static analysis.">
+        <echo message="Done"/>
+    </target>
+    <target name="-check-failure">
+        <fail message="PHPUnit did not finish successfully">
+            <condition>
+                <not>
+                    <equals arg1="${result.phpunit}" arg2="0"/>
+                </not>
+            </condition>
+        </fail>
+        <echo message="Checked failure"/>
+    </target>
+    <target name="deploy" description="Deplay build">
+        <zip destfile="${basedir}/build/dist/doc.zip">
+            <fileset dir="${basedir}/build/doc">
+                <include name="**/*.*"/>
+            </fileset>
+        </zip>
+        <zip destfile="${basedir}/build/dist/src.zip">
+            <fileset dir="${basedir}/src">
+                <include name="**/*.*"/>
+            </fileset>
+        </zip>
+        <zip destfile="${basedir}/build/dist/builddoc.zip">
+            <fileset dir="${basedir}/build">
+                <include name="builddoc/**/*.*"/>
+                <include name="coverage/**/*.*"/>
+                <include name="coverage-html/**/*.*"/>
+                <include name="logs/**/*.*"/>
+                <include name="pdepend/**/*.*"/>
+                <exclude name="phpdoc/**/*.*"/>
+            </fileset>
+        </zip>
+    </target>
+    <target name="projectdoc" description="Generate documentation">
+        <antcall target="clean"/>
+        <antcall target="downloadphpdocumentor"/>
+        <exec executable="php" dir="${basedir}/build">
+            <arg path="${phpdocumentor}"/>
+        </exec>
+        <delete file="${phpdocumentor}"/>
+        <antcall target="clean"/>
+    </target>
+</project>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build.xml	(revision 8435)
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="php-automate-build-ant" default="full-build" basedir=".">
+    <!-- By default the tools are managed by Composer in ${project.basedir}/vendor/bin -->
+    <property name="url.composer.download" value="https://getcomposer.org/download/2.2.6/composer.phar"/>
+    <property name="url.phpdocumentor.download" value="https://phpdoc.org/phpDocumentor.phar"/>
+    <property name="composer" value="${project.basedir}/composer.phar"/>
+    <property name="phpdocumentor" value="${project.basedir}/phpDocumentor.phar"/>
+    <property name="pdepend" value="${project.basedir}/vendor/bin/pdepend"/>
+    <property name="phpcpd" value="${project.basedir}/vendor/bin/phpcpd"/>
+    <property name="phpcs" value="${project.basedir}/vendor/bin/phpcs"/>
+    <property name="phploc" value="${project.basedir}/vendor/bin/phploc"/>
+    <property name="phpmd" value="${project.basedir}/vendor/bin/phpmd"/>
+    <property name="phpunit" value="${project.basedir}/vendor/bin/phpunit"/>
+    <property name="phpstan" value="${project.basedir}/vendor/bin/phpstan"/>
+    <property name="git" value="/usr/bin/git"/>
+    <target name="clean" unless="clean.done" description="Cleanup build artifacts.">
+        <delete dir="${project.basedir}/build/builddoc"/>
+        <delete dir="${project.basedir}/build/cache"/>
+        <delete dir="${project.basedir}/build/doc"/>
+        <delete dir="${project.basedir}/build/coverage"/>
+        <delete dir="${project.basedir}/build/logs"/>
+        <delete dir="${project.basedir}/build/pdepend"/>
+        <delete dir="${project.basedir}/build/dist"/>
+        <delete dir="${project.basedir}/build/phpdoc"/>
+        <property name="clean.done" value="true"/>
+    </target>
+    <target name="composer" description="Install composer packages including require-dev.">
+        <exec executable="wget">
+            <arg path="${url.composer.download}"/>
+            <arg value="-O"/>
+            <arg path="${composer}"/>
+        </exec>
+        <exec executable="chmod">
+            <arg value="+x"/>
+            <arg path="${composer}"/>
+        </exec>
+        <exec executable="php">
+            <arg path="${composer}"/>
+            <arg value="install"/>
+            <arg value="--prefer-dist"/>
+            <arg value="--no-progress"/>
+        </exec>
+        <exec executable="php">
+            <arg path="${composer}"/>
+            <arg value="update"/>
+        </exec>
+    </target>
+    <target name="downloadphpdocumentor" description="Install phpdocumentor">
+        <exec executable="wget">
+            <arg path="${url.phpdocumentor.download}"/>
+            <arg value="-O"/>
+            <arg path="${phpdocumentor}"/>
+        </exec>
+        <exec executable="chmod">
+            <arg value="+x"/>
+            <arg path="${phpdocumentor}"/>
+        </exec>
+    </target>
+    <target name="full-build" depends="prepare,composer,static-analysis,phpunit,-check-failure,projectdoc,deploy" description="Perform static analysis, run tests, and generate project documentation.">
+        <echo message="Built"/>
+    </target>
+    <target name="lint" unless="lint.done" description="Perform syntax check of PHP sourcecode files.">
+        <apply executable="php" taskname="lint">
+            <arg value="-l"/>
+            <fileset dir="${project.basedir}/src">
+                <include name="**/*.php"/>
+            </fileset>
+            <fileset dir="${project.basedir}/tests">
+                <include name="**/*.php"/>
+            </fileset>
+        </apply>
+        <property name="lint.done" value="true"/>
+    </target>
+    <target name="pdepend" unless="pdepend.done" depends="prepare" description="Calculate software metrics using PHP_Depend and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${pdepend}" taskname="pdepend">
+            <arg value="--jdepend-xml=${project.basedir}/build/logs/jdepend.xml"/>
+            <arg value="--jdepend-chart=${project.basedir}/build/pdepend/dependencies.svg"/>
+            <arg value="--overview-pyramid=${project.basedir}/build/pdepend/overview-pyramid.svg"/>
+            <arg path="${project.basedir}/src"/>
+        </exec>
+        <property name="pdepend.done" value="true"/>
+    </target>
+    <target name="phpcpd" unless="phpcpd.done" description="Find duplicate code using PHPCPD and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpcpd}" taskname="phpcpd">
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+            <arg path="${project.basedir}/src"/>
+        </exec>
+        <property name="phpcpd.done" value="true"/>
+    </target>
+    <target name="phpcpd-ci" unless="phpcpd.done" depends="prepare" description="Find duplicate code using PHPCPD and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpcpd}" taskname="phpcpd">
+            <arg value="--log-pmd"/>
+            <arg path="${project.basedir}/build/logs/pmd-cpd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+            <arg path="${project.basedir}/src"/>
+        </exec>
+        <property name="phpcpd.done" value="true"/>
+    </target>
+    <target name="phpcs" unless="phpcs.done" description="Find coding standard violations using PHP_CodeSniffer and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpcs}" taskname="phpcs">
+            <arg value="--standard=${project.basedir}/build/phpcsrules.xml"/>
+            <arg value="--extensions=php"/>
+            <arg value="--ignore=autoload.php"/>
+            <arg path="${project.basedir}/src"/>
+            <arg path="${project.basedir}/tests"/>
+        </exec>
+        <property name="phpcs.done" value="true"/>
+    </target>
+    <target name="phpcs-ci" unless="phpcs.done" depends="prepare" description="Find coding standard violations using PHP_CodeSniffer and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpcs}" output="/dev/null" taskname="phpcs">
+            <arg value="--report=checkstyle"/>
+            <arg value="--report-file=${project.basedir}/build/logs/checkstyle.xml"/>
+            <arg value="--standard=${project.basedir}/build/phpcsrules.xml"/>
+            <arg value="--extensions=php"/>
+            <arg value="--ignore=autoload.php"/>
+            <arg path="${project.basedir}/src"/>
+            <arg path="${project.basedir}/tests"/>
+        </exec>
+        <property name="phpcs.done" value="true"/>
+    </target>
+    <target name="phpstan" unless="phpstan.done" description="Find coding standard violations using PHPStan and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpstan}" taskname="phpstan" passthru="true">
+            <arg value="analyze"/>
+            <arg value="-c"/>
+            <arg path="${project.basedir}/build/phpstan.neon"/>
+            <arg value="--autoload-file=${project.basedir}/vendor/autoload.php"/>
+            <arg value="--no-interaction"/>
+            <arg value="--no-progress"/>
+            <arg value="--error-format=table"/>
+        </exec>
+        <property name="phpstan.done" value="true"/>
+    </target>
+    <target name="phpstan-ci" unless="phpstan.done" depends="prepare" description="Find coding standard violations using PHPStan and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpstan}" taskname="phpstan" outputProperty="phpstan.output">
+            <arg value="analyze"/>
+            <arg value="-c"/>
+            <arg path="${project.basedir}/build/phpstan.neon"/>
+            <arg value="--autoload-file=${project.basedir}/vendor/autoload.php"/>
+            <arg value="--no-interaction"/>
+            <arg value="--no-progress"/>
+            <arg value="--error-format=checkstyle"/>
+        </exec>
+        <echo message="${phpstan.output}" file="${project.basedir}/build/logs/checkstyle_phpstan.xml"/>
+        <property name="phpstan.done" value="true"/>
+    </target>
+    <target name="phploc" unless="phploc.done" description="Measure project size using PHPLOC and print human readable output. Intended for usage on the command line.">
+        <exec executable="${phploc}" taskname="phploc">
+            <arg value="--count-tests"/>
+            <arg path="${project.basedir}/src"/>
+            <arg path="${project.basedir}/tests"/>
+        </exec>
+        <property name="phploc.done" value="true"/>
+    </target>
+    <target name="phploc-ci" unless="phploc.done" depends="prepare" description="Measure project size using PHPLOC and log result in CSV and XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phploc}" taskname="phploc">
+            <arg value="--count-tests"/>
+            <arg value="--log-csv"/>
+            <arg path="${project.basedir}/build/logs/phploc.csv"/>
+            <arg value="--log-xml"/>
+            <arg path="${project.basedir}/build/logs/phploc.xml"/>
+            <arg path="${project.basedir}/src"/>
+            <arg path="${project.basedir}/tests"/>
+        </exec>
+        <property name="phploc.done" value="true"/>
+    </target>
+    <target name="phpmd" unless="phpmd.done" description="Perform project mess detection using PHPMD and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${project.basedir}/src"/>
+            <arg value="text"/>
+            <arg path="${project.basedir}/build/phpmd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+        </exec>
+        <property name="phpmd.done" value="true"/>
+    </target>
+    <target name="phpmd-ci" unless="phpmd.done" depends="prepare" description="Perform project mess detection using PHPMD and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${project.basedir}/src"/>
+            <arg value="xml"/>
+            <arg path="${project.basedir}/build/phpmd.xml"/>
+            <arg value="--reportfile"/>
+            <arg path="${project.basedir}/build/logs/pmd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+        </exec>
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${project.basedir}/src"/>
+            <arg value="html"/>
+            <arg path="${project.basedir}/build/phpmd.xml"/>
+            <arg value="--reportfile"/>
+            <arg path="${project.basedir}/build/logs/pmd.html"/>
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+        </exec>
+        <property name="phpmd.done" value="true"/>
+    </target>
+    <target name="phpunit" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit.">
+        <exec executable="${phpunit}" returnProperty="result.phpunit" taskname="phpunit">
+            <arg value="--configuration"/>
+            <arg path="${project.basedir}/build/phpunit.xml"/>
+        </exec>
+        <property name="phpunit.done" value="true"/>
+    </target>
+    <target name="phpunit-no-coverage" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit without generating code coverage reports.">
+        <exec executable="${phpunit}" taskname="phpunit">
+            <arg value="--configuration"/>
+            <arg path="${project.basedir}/build/phpunit.xml"/>
+            <arg path="tests"/>
+            <arg value="--no-coverage"/>
+        </exec>
+        <property name="phpunit.done" value="true"/>
+    </target>
+    <target name="prepare" unless="prepare.done" depends="clean" description="Prepare for build.">
+        <mkdir dir="${project.basedir}/build/builddoc"/>
+        <mkdir dir="${project.basedir}/build/cache"/>
+        <mkdir dir="${project.basedir}/build/doc"/>
+        <mkdir dir="${project.basedir}/build/coverage"/>
+        <mkdir dir="${project.basedir}/build/logs"/>
+        <mkdir dir="${project.basedir}/build/pdepend"/>
+        <mkdir dir="${project.basedir}/build/dist"/>
+        <mkdir dir="${project.basedir}/build/phpdoc"/>
+        <property name="prepare.done" value="true"/>
+    </target>
+    <target name="quick-build" depends="prepare,composer,lint,phpunit-no-coverage" description="Perform lint check and run tests without generating code coverage reports.">
+        <echo message="Built"/>
+    </target>
+    <target name="static-analysis" depends="lint,phploc-ci,pdepend,phpmd-ci,phpcs-ci,phpstan-ci,phpcpd-ci" description="Perform static analysis.">
+        <echo message="Done"/>
+    </target>
+    <target name="-check-failure">
+        <fail message="PHPUnit did not finish successfully">
+            <condition>
+                <not>
+                    <equals arg1="${result.phpunit}" arg2="0"/>
+                </not>
+            </condition>
+        </fail>
+        <echo message="Checked failure"/>
+    </target>
+    <target name="deploy" description="Deplay build">
+        <zip destfile="${project.basedir}/build/dist/doc.zip">
+            <fileset dir="${project.basedir}/build/doc">
+                <include name="**/*.*"/>
+            </fileset>
+        </zip>
+        <zip destfile="${project.basedir}/build/dist/src.zip">
+            <fileset dir="${project.basedir}/src">
+                <include name="**/*.*"/>
+            </fileset>
+        </zip>
+        <zip destfile="${project.basedir}/build/dist/builddoc.zip">
+            <fileset dir="${project.basedir}/build">
+                <include name="builddoc/**/*.*"/>
+                <include name="coverage/**/*.*"/>
+                <include name="coverage-html/**/*.*"/>
+                <include name="logs/**/*.*"/>
+                <include name="pdepend/**/*.*"/>
+                <exclude name="phpdoc/**/*.*"/>
+            </fileset>
+        </zip>
+    </target>
+    <target name="projectdoc" description="Generate documentation">
+        <if>
+            <versioncompare version="${php.version}" desiredVersion="7.4" operator=">=" />
+            <then>
+                <phingcall target="clean" />
+                <phingcall target="downloadphpdocumentor" />
+                <exec executable="php" dir="${project.basedir}/build">
+                    <arg path="${phpdocumentor}"/>
+                </exec>
+                <delete file="${phpdocumentor}"/>
+                <phingcall target="clean" />
+            </then>
+            <else>
+                <echo message="Build documentation only on PHP7.4 or higher" />
+            </else>
+        </if>
+    </target>
+</project>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules.xml	(revision 8435)
@@ -0,0 +1,351 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PSR12" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The PSR-12 coding standard.</description>
+    <arg name="tab-width" value="4"/>
+    <exclude-pattern>*/src/entities/*</exclude-pattern>
+
+    <!-- 2. General -->
+
+    <!-- 2.1 Basic Coding Standard -->
+
+    <!-- Code MUST follow all rules outlined in PSR-1. -->
+    <rule ref="PSR1"/>
+
+    <!-- The term 'StudlyCaps' in PSR-1 MUST be interpreted as PascalCase where the first letter of each word is capitalized including the very first letter. -->
+
+    <!-- 2.2 Files -->
+
+    <!-- All PHP files MUST use the Unix LF (linefeed) line ending only. -->
+    <rule ref="Generic.Files.LineEndings">
+        <properties>
+            <property name="eolChar" value="\n"/>
+        </properties>
+    </rule>
+
+    <!-- All PHP files MUST end with a non-blank line, terminated with a single LF. -->
+    <rule ref="PSR2.Files.EndFileNewline"/>
+
+    <!-- The closing ?> tag MUST be omitted from files containing only PHP. -->
+    <rule ref="PSR2.Files.ClosingTag"/>
+
+    <!-- 2.3 Lines -->
+
+    <!-- There MUST NOT be a hard limit on line length.
+    The soft limit on line length MUST be 120 characters.
+    Lines SHOULD NOT be longer than 80 characters; lines longer than that SHOULD be split into multiple subsequent lines of no more than 80 characters each. -->
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="500"/>
+            <property name="absoluteLineLimit" value="0"/>
+        </properties>
+    </rule>
+
+    <!-- There MUST NOT be trailing whitespace at the end of lines.
+    Blank lines MAY be added to improve readability and to indicate related blocks of code except where explicitly forbidden. -->
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace">
+        <properties>
+            <property name="ignoreBlankLines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines">
+        <severity>0</severity>
+    </rule>
+
+    <!-- There MUST NOT be more than one statement per line. -->
+    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
+
+    <!-- 2.4 Indenting -->
+
+    <!-- Code MUST use an indent of 4 spaces for each indent level, and MUST NOT use tabs for indenting. -->
+    <rule ref="Generic.WhiteSpace.ScopeIndent">
+        <properties>
+            <property name="ignoreIndentationTokens" type="array">
+                <element value="T_COMMENT"/>
+                <element value="T_DOC_COMMENT_OPEN_TAG"/>
+            </property>
+        </properties>
+    </rule>
+    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
+
+    <!-- 2.5 Keywords and Types -->
+
+    <!-- All PHP reserved keywords and types [1][2] MUST be in lower case.
+    Any new types and keywords added to future PHP versions MUST be in lower case. -->
+    <rule ref="Generic.PHP.LowerCaseKeyword"/>
+    <rule ref="Generic.PHP.LowerCaseConstant"/>
+    <rule ref="Generic.PHP.LowerCaseType"/>
+
+    <!-- Short form of type keywords MUST be used i.e. bool instead of boolean, int instead of integer etc. -->
+    <!-- checked by PSR12.Keywords.ShortFormTypeKeywords -->
+
+    <!-- 3. Declare Statements, Namespace, and Import Statements -->
+
+    <!-- The header of a PHP file may consist of a number of different blocks. If present, each of the blocks below MUST be separated by a single blank line, and MUST NOT contain a blank line. Each block MUST be in the order listed below, although blocks that are not relevant may be omitted.
+
+    Opening php tag.
+    File-level docblock.
+    One or more declare statements.
+    The namespace declaration of the file.
+    One or more class-based use import statements.
+    One or more function-based use import statements.
+    One or more constant-based use import statements.
+    The remainder of the code in the file. -->
+    <!-- checked by PSR12.Files.FileHeader -->
+
+    <!-- When a file contains a mix of HTML and PHP, any of the above sections may still be used. If so, they MUST be present at the top of the file, even if the remainder of the code consists of a closing PHP tag and then a mixture of HTML and PHP. -->
+
+    <!-- When the opening php tag is on the first line of the file, it MUST be on its own line with no other statements unless it is a file containing markup outside of PHP opening and closing tags. -->
+
+    <!-- Import statements MUST never begin with a leading backslash as they must always be fully qualified. -->
+    <!-- checked by PSR12.Files.ImportStatement -->
+
+    <!-- Compound namespaces with a depth of more than two MUST NOT be used. -->
+    <!-- checked by PSR12.Namespaces.CompoundNamespaceDepth -->
+
+    <!-- When wishing to declare strict types in files containing markup outside PHP opening and closing tags, the declaration MUST be on the first line of the file and include an opening PHP tag, the strict types declaration and closing tag. -->
+    <!-- Declare statements MUST contain no spaces and MUST be exactly declare(strict_types=1) (with an optional semi-colon terminator). -->
+    <!-- Block declare statements are allowed and MUST be formatted as below. -->
+    <!-- checked by PSR12.Files.DeclareStatement -->
+
+    <!-- 4. Classes, Properties, and Methods -->
+
+    <!-- Any closing brace MUST NOT be followed by any comment or statement on the same line. -->
+    <!-- checked by PSR12.Classes.ClosingBrace -->
+
+    <!-- When instantiating a new class, parentheses MUST always be present even when there are no arguments passed to the constructor. -->
+    <!-- checked by PSR12.Classes.ClassInstantiation -->
+
+    <!-- 4.1 Extends and Implements -->
+
+    <!-- The extends and implements keywords MUST be declared on the same line as the class name. -->
+    <!-- The opening brace for the class MUST go on its own line; the closing brace for the class MUST go on the next line after the body. -->
+    <!-- Opening braces MUST be on their own line and MUST NOT be preceded or followed by a blank line. -->
+    <!-- Closing braces MUST be on their own line and MUST NOT be preceded by a blank line. -->
+    <!-- Lists of implements and, in the case of interfaces, extends MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one interface per line. -->
+    <rule ref="PSR2.Classes.ClassDeclaration"/>
+
+    <!-- 4.2 Using traits -->
+
+    <!-- The use keyword used inside the classes to implement traits MUST be declared on the next line after the opening brace. -->
+    <!-- Each individual trait that is imported into a class MUST be included one-per-line and each inclusion MUST have its own use import statement. -->
+    <!-- When the class has nothing after the use import statement, the class closing brace MUST be on the next line after the use import statement. Otherwise, it MUST have a blank line after the use import statement. -->
+    <!-- When using the insteadof and as operators they must be used as follows taking note of indentation, spacing, and new lines. -->
+    <!-- checked by PSR12.Traits.UseDeclaration -->
+
+    <!-- 4.3 Properties and Constants -->
+
+    <!-- Visibility MUST be declared on all properties. -->
+    <!-- The var keyword MUST NOT be used to declare a property. -->
+    <!-- There MUST NOT be more than one property declared per statement. -->
+    <!-- Property names MUST NOT be prefixed with a single underscore to indicate protected or private visibility.
+    That is, an underscore prefix explicitly has no meaning. -->
+    <!-- There MUST be a space between type declaration and property name. -->
+    <rule ref="PSR2.Classes.PropertyDeclaration"/>
+
+    <!-- Visibility MUST be declared on all constants if your project PHP minimum version supports constant visibilities (PHP 7.1 or later). -->
+    <!-- checked by PSR12.Properties.ConstantVisibility -->
+
+    <!-- 4.4 Methods and Functions -->
+
+    <!-- Visibility MUST be declared on all methods. -->
+    <rule ref="Squiz.Scope.MethodScope"/>
+    <rule ref="Squiz.WhiteSpace.ScopeKeywordSpacing"/>
+
+    <!-- Method names MUST NOT be prefixed with a single underscore to indicate protected or private visibility. That is, an underscore prefix explicitly has no meaning. -->
+    <rule ref="PSR2.Methods.MethodDeclaration"/>
+    <rule ref="PSR2.Methods.MethodDeclaration.Underscore">
+        <type>error</type>
+        <message>Method name "%s" must not be prefixed with an underscore to indicate visibility</message>
+    </rule>
+
+    <!-- Method and function names MUST NOT be declared with space after the method name. The opening brace MUST go on its own line, and the closing brace MUST go on the next line following the body. There MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. -->
+    <rule ref="PSR2.Methods.FunctionClosingBrace"/>
+    <rule ref="Squiz.Functions.FunctionDeclaration"/>
+    <rule ref="Squiz.Functions.LowercaseFunctionKeywords"/>
+
+    <!-- 4.5 Method and Function Arguments -->
+
+    <!-- In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- When using the reference operator & before an argument, there MUST NOT be a space after it. -->
+    <!-- There MUST NOT be a space between the variadic three dot operator and the argument name. -->
+    <!-- When combining both the reference operator and the variadic three dot operator, there MUST NOT be any space between the two of them. -->
+    <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing">
+        <properties>
+            <property name="equalsSpacing" value="1"/>
+        </properties>
+    </rule>
+
+    <!-- Method and function arguments with default values MUST go at the end of the argument list. -->
+    <rule ref="PEAR.Functions.ValidDefaultValue"/>
+
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line.
+    When the argument list is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <rule ref="Squiz.Functions.MultiLineFunctionDeclaration"/>
+
+    <!-- When you have a return type declaration present, there MUST be one space after the colon followed by the type declaration. The colon and declaration MUST be on the same line as the argument list closing parenthesis with no spaces between the two characters. -->
+    <!-- checked by PSR12.Functions.ReturnTypeDeclaration -->
+
+    <!-- In nullable type declarations, there MUST NOT be a space between the question mark and the type. -->
+    <!-- checked by PSR12.Functions.NullableTypeDeclaration -->
+
+    <!-- 4.6 abstract, final, and static -->
+
+    <!-- When present, the abstract and final declarations MUST precede the visibility declaration. -->
+    <!-- When present, the static declaration MUST come after the visibility declaration. -->
+    <!-- checked by PSR2.Methods.MethodDeclaration included above -->
+
+    <!-- 4.7 Method and Function Calls -->
+
+    <!-- When making a method or function call, there MUST NOT be a space between the method or function name and the opening parenthesis, there MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line. A single argument being split across multiple lines (as might be the case with an anonymous function or array) does not constitute splitting the argument list itself. -->
+    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature.SpaceAfterCloseBracket">
+        <severity>0</severity>
+    </rule>
+    <rule ref="PSR2.Methods.FunctionCallSignature.OpeningIndent">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 5. Control Structures -->
+
+    <!-- The general style rules for control structures are as follows:
+    There MUST be one space after the control structure keyword
+    There MUST NOT be a space after the opening parenthesis
+    There MUST NOT be a space before the closing parenthesis
+    There MUST be one space between the closing parenthesis and the opening brace
+    The structure body MUST be indented once
+    The body MUST be on the next line after the opening brace
+    The closing brace MUST be on the next line after the body
+    The body of each structure MUST be enclosed by braces. This standardizes how the structures look and reduces the likelihood of introducing errors as new lines get added to the body. -->
+    <rule ref="Squiz.ControlStructures.ControlSignature"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose"/>
+    <rule ref="Squiz.WhiteSpace.ScopeClosingBrace"/>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration"/>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration">
+        <properties>
+            <property name="ignoreNewlines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingBeforeClose">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.LowercaseDeclaration"/>
+    <rule ref="Generic.ControlStructures.InlineControlStructure"/>
+
+    <!-- exclude this message as it is already checked in Generic.PHP.LowerCaseKeyword -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.AsNotLower">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 5.1 if, elseif, else -->
+
+    <!-- else and elseif are on the same line as the closing brace from the earlier body. -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature included above -->
+
+    <!-- The keyword elseif SHOULD be used instead of else if so that all control keywords look like single words. -->
+    <rule ref="PSR2.ControlStructures.ElseIfDeclaration"/>
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.2 switch, case -->
+
+    <!-- The case statement MUST be indented once from switch, and the break keyword (or other terminating keywords) MUST be indented at the same level as the case body. There MUST be a comment such as // no break when fall-through is intentional in a non-empty case body. -->
+    <rule ref="PSR2.ControlStructures.SwitchDeclaration"/>
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.3.1 while -->
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.3.2 do while -->
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.4 for -->
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first expression MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.5 foreach -->
+
+    <!-- exclude these messages as they are already checked by PSR2.ControlStructures.ControlStructureSpacing -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceBeforeClose">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 5.6 try, catch, finally -->
+
+    <!-- 6. Operators -->
+
+    <!-- When space is permitted around an operator, multiple spaces MAY be used for readability purposes. -->
+    <!-- All operators not described here are left undefined. -->
+
+    <!-- 6.1. Unary operators -->
+
+    <!-- The increment/decrement operators MUST NOT have any space between the operator and operand. -->
+    <rule ref="Generic.WhiteSpace.IncrementDecrementSpacing"/>
+
+    <!-- Type casting operators MUST NOT have any space within the parentheses. -->
+    <rule ref="Squiz.WhiteSpace.CastSpacing"/>
+
+    <!-- 6.2. Binary operators -->
+
+    <!-- All binary arithmetic, comparison, assignment, bitwise, logical, string, and type operators MUST be preceded and followed by at least one space. -->
+    <!-- checked by PSR12.Operators.OperatorSpacing -->
+
+    <!-- 6.3. Ternary operators -->
+
+    <!-- The conditional operator, also known simply as the ternary operator, MUST be preceded and followed by at least one space around both the ? and : characters. -->
+    <!-- When the middle operand of the conditional operator is omitted, the operator MUST follow the same style rules as other binary comparison operators. -->
+    <!-- checked by PSR12.Operators.OperatorSpacing -->
+
+    <!-- 7. Closures -->
+
+    <!-- Closures MUST be declared with a space after the function keyword, and a space before and after the use keyword. -->
+    <!-- The opening brace MUST go on the same line, and the closing brace MUST go on the next line following the body. -->
+    <!-- There MUST NOT be a space after the opening parenthesis of the argument list or variable list, and there MUST NOT be a space before the closing parenthesis of the argument list or variable list. -->
+    <!-- In the argument list and variable list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- Closure arguments with default values MUST go at the end of the argument list. -->
+    <!-- Argument lists and variable lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument or variable per line. -->
+    <!-- When the ending list (whether of arguments or variables) is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked by Squiz.Functions.MultiLineFunctionDeclaration -->
+
+    <!-- If a return type is present, it MUST follow the same rules as with normal functions and methods; if the use keyword is present, the colon MUST follow the use list closing parentheses with no spaces between the two characters. -->
+    <!-- checked by PSR12.Functions.ReturnTypeDeclaration -->
+
+    <!-- 8. Anonymous Classes -->
+
+    <!-- Anonymous Classes MUST follow the same guidelines and principles as closures in the above section. -->
+    <!-- The opening brace MAY be on the same line as the class keyword so long as the list of implements interfaces does not wrap. If the list of interfaces wraps, the brace MUST be placed on the line immediately following the last interface. -->
+    <!-- checked by PSR12.Classes.AnonClassDeclaration -->
+
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules_psr1.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules_psr1.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules_psr1.xml	(revision 8435)
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PSR1" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The PSR1 coding standard.</description>
+
+    <!-- 2. Files -->
+
+    <!-- 2.1. PHP Tags -->
+
+    <!-- PHP code MUST use the long <?php ?> tags or the short-echo <?= ?> tags; it MUST NOT use the other tag variations. -->
+    <rule ref="Generic.PHP.DisallowAlternativePHPTags"/>
+    <rule ref="Generic.PHP.DisallowShortOpenTag"/>
+    <rule ref="Generic.PHP.DisallowShortOpenTag.EchoFound">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 2.2. Character Encoding -->
+
+    <!-- PHP code MUST use only UTF-8 without BOM. -->
+    <rule ref="Generic.Files.ByteOrderMark"/>
+
+    <!-- 2.3. Side Effects -->
+
+    <!-- A file SHOULD declare new symbols (classes, functions, constants, etc.) and cause no other side effects, or it SHOULD execute logic with side effects, but SHOULD NOT do both. -->
+    <!-- checked by PSR1.Files.SideEffects -->
+
+    <!-- 3. Namespace and Class Names -->
+
+    <!-- Namespaces and classes MUST follow PSR-0.
+         This means each class is in a file by itself, and is in a namespace of at least one level: a top-level vendor name. -->
+    <!-- checked by PSR1.Classes.ClassDeclaration -->
+
+    <!-- Class names MUST be declared in StudlyCaps. -->
+    <rule ref="Squiz.Classes.ValidClassName"/>
+
+    <!-- 4. Class Constants, Properties, and Methods -->
+
+    <!-- 4.1. Constants -->
+
+    <!-- Class constants MUST be declared in all upper case with underscore separators. -->
+    <rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
+
+    <!-- 4.3. Methods -->
+
+    <!-- Method names MUST be declared in camelCase(). -->
+    <!-- checked by PSR1.Methods.CamelCapsMethodName -->
+
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules_psr12.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules_psr12.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules_psr12.xml	(revision 8435)
@@ -0,0 +1,268 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PSR12" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The PSR-12 coding standard.</description>
+    <arg name="tab-width" value="4"/>
+    <!-- 2. General -->
+    <!-- 2.1 Basic Coding Standard -->
+    <!-- Code MUST follow all rules outlined in PSR-1. -->
+    <rule ref="PSR1"/>
+    <!-- The term 'StudlyCaps' in PSR-1 MUST be interpreted as PascalCase where the first letter of each word is capitalized including the very first letter. -->
+    <!-- 2.2 Files -->
+    <!-- All PHP files MUST use the Unix LF (linefeed) line ending only. -->
+    <rule ref="Generic.Files.LineEndings">
+        <properties>
+            <property name="eolChar" value="\n"/>
+        </properties>
+    </rule>
+    <!-- All PHP files MUST end with a non-blank line, terminated with a single LF. -->
+    <rule ref="PSR2.Files.EndFileNewline"/>
+    <!-- The closing ?> tag MUST be omitted from files containing only PHP. -->
+    <rule ref="PSR2.Files.ClosingTag"/>
+    <!-- 2.3 Lines -->
+    <!-- There MUST NOT be a hard limit on line length.
+    The soft limit on line length MUST be 120 characters.
+    Lines SHOULD NOT be longer than 80 characters; lines longer than that SHOULD be split into multiple subsequent lines of no more than 80 characters each. -->
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="120"/>
+            <property name="absoluteLineLimit" value="0"/>
+        </properties>
+    </rule>
+    <!-- There MUST NOT be trailing whitespace at the end of lines.
+    Blank lines MAY be added to improve readability and to indicate related blocks of code except where explicitly forbidden. -->
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace">
+        <properties>
+            <property name="ignoreBlankLines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines">
+        <severity>0</severity>
+    </rule>
+    <!-- There MUST NOT be more than one statement per line. -->
+    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
+    <!-- 2.4 Indenting -->
+    <!-- Code MUST use an indent of 4 spaces for each indent level, and MUST NOT use tabs for indenting. -->
+    <rule ref="Generic.WhiteSpace.ScopeIndent">
+        <properties>
+            <property name="ignoreIndentationTokens" type="array">
+                <element value="T_COMMENT"/>
+                <element value="T_DOC_COMMENT_OPEN_TAG"/>
+            </property>
+        </properties>
+    </rule>
+    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
+    <!-- 2.5 Keywords and Types -->
+    <!-- All PHP reserved keywords and types [1][2] MUST be in lower case.
+    Any new types and keywords added to future PHP versions MUST be in lower case. -->
+    <rule ref="Generic.PHP.LowerCaseKeyword"/>
+    <rule ref="Generic.PHP.LowerCaseConstant"/>
+    <rule ref="Generic.PHP.LowerCaseType"/>
+    <!-- Short form of type keywords MUST be used i.e. bool instead of boolean, int instead of integer etc. -->
+    <!-- checked by PSR12.Keywords.ShortFormTypeKeywords -->
+    <!-- 3. Declare Statements, Namespace, and Import Statements -->
+    <!-- The header of a PHP file may consist of a number of different blocks. If present, each of the blocks below MUST be separated by a single blank line, and MUST NOT contain a blank line. Each block MUST be in the order listed below, although blocks that are not relevant may be omitted.
+
+    Opening php tag.
+    File-level docblock.
+    One or more declare statements.
+    The namespace declaration of the file.
+    One or more class-based use import statements.
+    One or more function-based use import statements.
+    One or more constant-based use import statements.
+    The remainder of the code in the file. -->
+    <!-- checked by PSR12.Files.FileHeader -->
+    <!-- When a file contains a mix of HTML and PHP, any of the above sections may still be used. If so, they MUST be present at the top of the file, even if the remainder of the code consists of a closing PHP tag and then a mixture of HTML and PHP. -->
+    <!-- When the opening php tag is on the first line of the file, it MUST be on its own line with no other statements unless it is a file containing markup outside of PHP opening and closing tags. -->
+    <!-- Import statements MUST never begin with a leading backslash as they must always be fully qualified. -->
+    <!-- checked by PSR12.Files.ImportStatement -->
+    <!-- Compound namespaces with a depth of more than two MUST NOT be used. -->
+    <!-- checked by PSR12.Namespaces.CompoundNamespaceDepth -->
+    <!-- When wishing to declare strict types in files containing markup outside PHP opening and closing tags, the declaration MUST be on the first line of the file and include an opening PHP tag, the strict types declaration and closing tag. -->
+    <!-- Declare statements MUST contain no spaces and MUST be exactly declare(strict_types=1) (with an optional semi-colon terminator). -->
+    <!-- Block declare statements are allowed and MUST be formatted as below. -->
+    <!-- checked by PSR12.Files.DeclareStatement -->
+    <!-- 4. Classes, Properties, and Methods -->
+    <!-- Any closing brace MUST NOT be followed by any comment or statement on the same line. -->
+    <!-- checked by PSR12.Classes.ClosingBrace -->
+    <!-- When instantiating a new class, parentheses MUST always be present even when there are no arguments passed to the constructor. -->
+    <!-- checked by PSR12.Classes.ClassInstantiation -->
+    <!-- 4.1 Extends and Implements -->
+    <!-- The extends and implements keywords MUST be declared on the same line as the class name. -->
+    <!-- The opening brace for the class MUST go on its own line; the closing brace for the class MUST go on the next line after the body. -->
+    <!-- Opening braces MUST be on their own line and MUST NOT be preceded or followed by a blank line. -->
+    <!-- Closing braces MUST be on their own line and MUST NOT be preceded by a blank line. -->
+    <!-- Lists of implements and, in the case of interfaces, extends MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one interface per line. -->
+    <rule ref="PSR2.Classes.ClassDeclaration"/>
+    <!-- 4.2 Using traits -->
+    <!-- The use keyword used inside the classes to implement traits MUST be declared on the next line after the opening brace. -->
+    <!-- Each individual trait that is imported into a class MUST be included one-per-line and each inclusion MUST have its own use import statement. -->
+    <!-- When the class has nothing after the use import statement, the class closing brace MUST be on the next line after the use import statement. Otherwise, it MUST have a blank line after the use import statement. -->
+    <!-- When using the insteadof and as operators they must be used as follows taking note of indentation, spacing, and new lines. -->
+    <!-- checked by PSR12.Traits.UseDeclaration -->
+    <!-- 4.3 Properties and Constants -->
+    <!-- Visibility MUST be declared on all properties. -->
+    <!-- The var keyword MUST NOT be used to declare a property. -->
+    <!-- There MUST NOT be more than one property declared per statement. -->
+    <!-- Property names MUST NOT be prefixed with a single underscore to indicate protected or private visibility.
+    That is, an underscore prefix explicitly has no meaning. -->
+    <!-- There MUST be a space between type declaration and property name. -->
+    <rule ref="PSR2.Classes.PropertyDeclaration"/>
+    <!-- Visibility MUST be declared on all constants if your project PHP minimum version supports constant visibilities (PHP 7.1 or later). -->
+    <!-- checked by PSR12.Properties.ConstantVisibility -->
+    <!-- 4.4 Methods and Functions -->
+    <!-- Visibility MUST be declared on all methods. -->
+    <rule ref="Squiz.Scope.MethodScope"/>
+    <rule ref="Squiz.WhiteSpace.ScopeKeywordSpacing"/>
+    <!-- Method names MUST NOT be prefixed with a single underscore to indicate protected or private visibility. That is, an underscore prefix explicitly has no meaning. -->
+    <rule ref="PSR2.Methods.MethodDeclaration"/>
+    <rule ref="PSR2.Methods.MethodDeclaration.Underscore">
+        <type>error</type>
+        <message>Method name "%s" must not be prefixed with an underscore to indicate visibility</message>
+    </rule>
+    <!-- Method and function names MUST NOT be declared with space after the method name. The opening brace MUST go on its own line, and the closing brace MUST go on the next line following the body. There MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. -->
+    <rule ref="PSR2.Methods.FunctionClosingBrace"/>
+    <rule ref="Squiz.Functions.FunctionDeclaration"/>
+    <rule ref="Squiz.Functions.LowercaseFunctionKeywords"/>
+    <!-- 4.5 Method and Function Arguments -->
+    <!-- In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- When using the reference operator & before an argument, there MUST NOT be a space after it. -->
+    <!-- There MUST NOT be a space between the variadic three dot operator and the argument name. -->
+    <!-- When combining both the reference operator and the variadic three dot operator, there MUST NOT be any space between the two of them. -->
+    <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing">
+        <properties>
+            <property name="equalsSpacing" value="1"/>
+        </properties>
+    </rule>
+    <!-- Method and function arguments with default values MUST go at the end of the argument list. -->
+    <rule ref="PEAR.Functions.ValidDefaultValue"/>
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line.
+    When the argument list is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <rule ref="Squiz.Functions.MultiLineFunctionDeclaration"/>
+    <!-- When you have a return type declaration present, there MUST be one space after the colon followed by the type declaration. The colon and declaration MUST be on the same line as the argument list closing parenthesis with no spaces between the two characters. -->
+    <!-- checked by PSR12.Functions.ReturnTypeDeclaration -->
+    <!-- In nullable type declarations, there MUST NOT be a space between the question mark and the type. -->
+    <!-- checked by PSR12.Functions.NullableTypeDeclaration -->
+    <!-- 4.6 abstract, final, and static -->
+    <!-- When present, the abstract and final declarations MUST precede the visibility declaration. -->
+    <!-- When present, the static declaration MUST come after the visibility declaration. -->
+    <!-- checked by PSR2.Methods.MethodDeclaration included above -->
+    <!-- 4.7 Method and Function Calls -->
+    <!-- When making a method or function call, there MUST NOT be a space between the method or function name and the opening parenthesis, there MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line. A single argument being split across multiple lines (as might be the case with an anonymous function or array) does not constitute splitting the argument list itself. -->
+    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature.SpaceAfterCloseBracket">
+        <severity>0</severity>
+    </rule>
+    <rule ref="PSR2.Methods.FunctionCallSignature.OpeningIndent">
+        <severity>0</severity>
+    </rule>
+    <!-- 5. Control Structures -->
+    <!-- The general style rules for control structures are as follows:
+    There MUST be one space after the control structure keyword
+    There MUST NOT be a space after the opening parenthesis
+    There MUST NOT be a space before the closing parenthesis
+    There MUST be one space between the closing parenthesis and the opening brace
+    The structure body MUST be indented once
+    The body MUST be on the next line after the opening brace
+    The closing brace MUST be on the next line after the body
+    The body of each structure MUST be enclosed by braces. This standardizes how the structures look and reduces the likelihood of introducing errors as new lines get added to the body. -->
+    <rule ref="Squiz.ControlStructures.ControlSignature"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose"/>
+    <rule ref="Squiz.WhiteSpace.ScopeClosingBrace"/>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration"/>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration">
+        <properties>
+            <property name="ignoreNewlines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingBeforeClose">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.LowercaseDeclaration"/>
+    <rule ref="Generic.ControlStructures.InlineControlStructure"/>
+    <!-- exclude this message as it is already checked in Generic.PHP.LowerCaseKeyword -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.AsNotLower">
+        <severity>0</severity>
+    </rule>
+    <!-- 5.1 if, elseif, else -->
+    <!-- else and elseif are on the same line as the closing brace from the earlier body. -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature included above -->
+    <!-- The keyword elseif SHOULD be used instead of else if so that all control keywords look like single words. -->
+    <rule ref="PSR2.ControlStructures.ElseIfDeclaration"/>
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.2 switch, case -->
+    <!-- The case statement MUST be indented once from switch, and the break keyword (or other terminating keywords) MUST be indented at the same level as the case body. There MUST be a comment such as // no break when fall-through is intentional in a non-empty case body. -->
+    <rule ref="PSR2.ControlStructures.SwitchDeclaration"/>
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.3.1 while -->
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.3.2 do while -->
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.4 for -->
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first expression MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.5 foreach -->
+    <!-- exclude these messages as they are already checked by PSR2.ControlStructures.ControlStructureSpacing -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceBeforeClose">
+        <severity>0</severity>
+    </rule>
+    <!-- 5.6 try, catch, finally -->
+    <!-- 6. Operators -->
+    <!-- When space is permitted around an operator, multiple spaces MAY be used for readability purposes. -->
+    <!-- All operators not described here are left undefined. -->
+    <!-- 6.1. Unary operators -->
+    <!-- The increment/decrement operators MUST NOT have any space between the operator and operand. -->
+    <rule ref="Generic.WhiteSpace.IncrementDecrementSpacing"/>
+    <!-- Type casting operators MUST NOT have any space within the parentheses. -->
+    <rule ref="Squiz.WhiteSpace.CastSpacing"/>
+    <!-- 6.2. Binary operators -->
+    <!-- All binary arithmetic, comparison, assignment, bitwise, logical, string, and type operators MUST be preceded and followed by at least one space. -->
+    <!-- checked by PSR12.Operators.OperatorSpacing -->
+    <!-- 6.3. Ternary operators -->
+    <!-- The conditional operator, also known simply as the ternary operator, MUST be preceded and followed by at least one space around both the ? and : characters. -->
+    <!-- When the middle operand of the conditional operator is omitted, the operator MUST follow the same style rules as other binary comparison operators. -->
+    <!-- checked by PSR12.Operators.OperatorSpacing -->
+    <!-- 7. Closures -->
+    <!-- Closures MUST be declared with a space after the function keyword, and a space before and after the use keyword. -->
+    <!-- The opening brace MUST go on the same line, and the closing brace MUST go on the next line following the body. -->
+    <!-- There MUST NOT be a space after the opening parenthesis of the argument list or variable list, and there MUST NOT be a space before the closing parenthesis of the argument list or variable list. -->
+    <!-- In the argument list and variable list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- Closure arguments with default values MUST go at the end of the argument list. -->
+    <!-- Argument lists and variable lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument or variable per line. -->
+    <!-- When the ending list (whether of arguments or variables) is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked by Squiz.Functions.MultiLineFunctionDeclaration -->
+    <!-- If a return type is present, it MUST follow the same rules as with normal functions and methods; if the use keyword is present, the colon MUST follow the use list closing parentheses with no spaces between the two characters. -->
+    <!-- checked by PSR12.Functions.ReturnTypeDeclaration -->
+    <!-- 8. Anonymous Classes -->
+    <!-- Anonymous Classes MUST follow the same guidelines and principles as closures in the above section. -->
+    <!-- The opening brace MAY be on the same line as the class keyword so long as the list of implements interfaces does not wrap. If the list of interfaces wraps, the brace MUST be placed on the line immediately following the last interface. -->
+    <!-- checked by PSR12.Classes.AnonClassDeclaration -->
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules_psr2.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules_psr2.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules_psr2.xml	(revision 8435)
@@ -0,0 +1,218 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PSR2" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The PSR-2 coding standard.</description>
+    <arg name="tab-width" value="4"/>
+
+    <!-- 2. General -->
+
+    <!-- 2.1 Basic Coding Standard -->
+
+    <!-- Include the whole PSR-1 standard -->
+    <rule ref="PSR1"/>
+
+    <!-- 2.2 Files -->
+
+    <!-- All PHP files MUST use the Unix LF (linefeed) line ending. -->
+    <rule ref="Generic.Files.LineEndings">
+        <properties>
+            <property name="eolChar" value="\n"/>
+        </properties>
+    </rule>
+
+    <!-- All PHP files MUST end with a single blank line. -->
+    <!-- checked by PSR2.Files.EndFileNewline -->
+
+    <!-- The closing ?> tag MUST be omitted from files containing only PHP. -->
+    <!-- checked by PSR2.Files.ClosingTag -->
+
+    <!-- 2.3 Lines -->
+
+    <!-- The soft limit on line length MUST be 120 characters; automated style checkers MUST warn but MUST NOT error at the soft limit. -->
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="120"/>
+            <property name="absoluteLineLimit" value="0"/>
+        </properties>
+    </rule>
+
+    <!-- There MUST NOT be trailing whitespace at the end of non-blank lines. -->
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace">
+        <properties>
+            <property name="ignoreBlankLines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines">
+        <severity>0</severity>
+    </rule>
+
+    <!-- There MUST NOT be more than one statement per line. -->
+    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
+
+    <!-- 2.4 Indenting -->
+
+    <!-- Code MUST use an indent of 4 spaces, and MUST NOT use tabs for indenting. -->
+    <rule ref="Generic.WhiteSpace.ScopeIndent">
+        <properties>
+            <property name="ignoreIndentationTokens" type="array">
+                <element value="T_COMMENT"/>
+                <element value="T_DOC_COMMENT_OPEN_TAG"/>
+            </property>
+        </properties>
+    </rule>
+    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
+
+    <!-- 2.5 Keywords and True/False/Null -->
+
+    <!-- PHP keywords MUST be in lower case. -->
+    <rule ref="Generic.PHP.LowerCaseKeyword"/>
+
+    <!-- The PHP constants true, false, and null MUST be in lower case. -->
+    <rule ref="Generic.PHP.LowerCaseConstant"/>
+
+    <!-- 3. Namespace and Use Declarations -->
+
+    <!-- When present, there MUST be one blank line after the namespace declaration. -->
+    <!-- checked by PSR2.Namespaces.NamespaceDeclaration -->
+
+    <!-- When present, all use declarations MUST go after the namespace declaration.
+         There MUST be one use keyword per declaration.
+         There MUST be one blank line after the use block. -->
+    <!-- checked by PSR2.Namespaces.UseDeclaration -->
+
+    <!-- 4. Classes, Properties, and Methods -->
+
+    <!-- 4.1. Extends and Implements -->
+
+    <!-- The extends and implements keywords MUST be declared on the same line as the class name.
+         The opening brace for the class go MUST go on its own line; the closing brace for the class MUST go on the next line after the body.
+         Lists of implements MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one interface per line. -->
+    <!-- checked by PSR2.Classes.ClassDeclaration -->
+
+    <!-- 4.2. Properties -->
+
+    <!-- Visibility MUST be declared on all properties.
+         The var keyword MUST NOT be used to declare a property.
+         There MUST NOT be more than one property declared per statement.
+         Property names SHOULD NOT be prefixed with a single underscore to indicate protected or private visibility. -->
+    <!-- checked by PSR2.Classes.PropertyDeclaration -->
+    <rule ref="PSR2.Classes.PropertyDeclaration.SpacingAfterType">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 4.3 Methods -->
+
+    <!-- Visibility MUST be declared on all methods. -->
+    <rule ref="Squiz.Scope.MethodScope"/>
+    <rule ref="Squiz.WhiteSpace.ScopeKeywordSpacing"/>
+
+    <!-- Method names SHOULD NOT be prefixed with a single underscore to indicate protected or private visibility. -->
+    <!-- checked by PSR2.Methods.MethodDeclaration -->
+
+    <!-- Method names MUST NOT be declared with a space after the method name. The opening brace MUST go on its own line, and the closing brace MUST go on the next line following the body. There MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. -->
+    <!-- checked by PSR2.Methods.FunctionClosingBrace -->
+    <rule ref="Squiz.Functions.FunctionDeclaration"/>
+    <rule ref="Squiz.Functions.LowercaseFunctionKeywords"/>
+
+    <!-- 4.4 Method Arguments -->
+
+    <!-- In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing">
+        <properties>
+            <property name="equalsSpacing" value="1"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingAfterHint">
+        <severity>0</severity>
+    </rule>
+
+    <!-- Method arguments with default values MUST go at the end of the argument list. -->
+    <rule ref="PEAR.Functions.ValidDefaultValue"/>
+
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line. When the argument list is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <rule ref="Squiz.Functions.MultiLineFunctionDeclaration"/>
+
+    <!-- 4.5 abstract, final, and static -->
+
+    <!-- When present, the abstract and final declarations MUST precede the visibility declaration.
+         When present, the static declaration MUST come after the visibility declaration. -->
+    <!-- checked by PSR2.Methods.MethodDeclaration -->
+
+    <!-- 4.6 Method and Function Calls -->
+
+    <!-- When making a method or function call, there MUST NOT be a space between the method or function name and the opening parenthesis, there MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma.
+    Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line. -->
+    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature.SpaceAfterCloseBracket">
+        <severity>0</severity>
+    </rule>
+    <rule ref="PSR2.Methods.FunctionCallSignature.OpeningIndent">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 5. Control Structures -->
+
+    <!-- The general style rules for control structures are as follows:
+         There MUST be one space after the control structure keyword
+         There MUST NOT be a space after the opening parenthesis
+         There MUST NOT be a space before the closing parenthesis
+         There MUST be one space between the closing parenthesis and the opening brace
+         The structure body MUST be indented once
+         The closing brace MUST be on the next line after the body -->
+    <rule ref="Squiz.ControlStructures.ControlSignature"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose"/>
+    <rule ref="Squiz.WhiteSpace.ScopeClosingBrace"/>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration"/>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration"/>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingBeforeClose">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.LowercaseDeclaration"/>
+    <!-- checked by PSR2.ControlStructures.ControlStructureSpacing -->
+
+    <!-- exclude this message as it is already checked by Generic.PHP.LowerCaseKeyword -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.AsNotLower">
+        <severity>0</severity>
+    </rule>
+
+    <!-- exclude these messages as they are already checked by PSR2.ControlStructures.ControlStructureSpacing -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceBeforeClose">
+        <severity>0</severity>
+    </rule>
+
+    <!-- The body of each structure MUST be enclosed by braces. This standardizes how the structures look, and reduces the likelihood of introducing errors as new lines get added to the body. -->
+    <rule ref="Generic.ControlStructures.InlineControlStructure"/>
+
+    <!-- 5.1. if, elseif, else -->
+
+    <!-- The keyword elseif SHOULD be used instead of else if so that all control keywords look like single words. -->
+    <!-- checked by PSR2.ControlStructures.ElseIfDeclaration -->
+
+    <!-- 5.2. switch, case -->
+
+    <!-- The case statement MUST be indented once from switch, and the break keyword (or other terminating keyword) MUST be indented at the same level as the case body. There MUST be a comment such as // no break when fall-through is intentional in a non-empty case body. -->
+    <!-- checked by PSR2.ControlStructures.SwitchDeclaration -->
+
+    <!-- 6. Closures -->
+
+    <!-- Closures MUST be declared with a space after the function keyword, and a space before and after the use keyword.
+         The opening brace MUST go on the same line, and the closing brace MUST go on the next line following the body.
+         There MUST NOT be a space after the opening parenthesis of the argument list or variable list, and there MUST NOT be a space before the closing parenthesis of the argument list or variable list.
+         In the argument list and variable list, there MUST NOT be a space before each comma, and there MUST be one space after each comma.
+         Closure arguments with default values MUST go at the end of the argument list.
+         Argument lists and variable lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument or variable per line.
+         When the ending list (whether or arguments or variables) is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked in Squiz.Functions.MultiLineFunctionDeclaration -->
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules_squiz.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules_squiz.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpcsrules_squiz.xml	(revision 8435)
@@ -0,0 +1,132 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Squiz" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The Squiz coding standard.</description>
+
+    <!-- Include some specific sniffs -->
+    <rule ref="Generic.Arrays.DisallowLongArraySyntax"/>
+    <rule ref="Generic.CodeAnalysis.EmptyStatement"/>
+    <rule ref="Generic.Commenting.Todo"/>
+    <rule ref="Generic.Commenting.DocComment"/>
+    <rule ref="Generic.ControlStructures.InlineControlStructure"/>
+    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
+    <rule ref="Generic.Formatting.SpaceAfterCast"/>
+    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
+    <rule ref="Generic.NamingConventions.ConstructorName"/>
+    <rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
+    <rule ref="Generic.PHP.DeprecatedFunctions"/>
+    <rule ref="Generic.PHP.DisallowShortOpenTag"/>
+    <rule ref="Generic.PHP.LowerCaseKeyword"/>
+    <rule ref="Generic.PHP.LowerCaseConstant"/>
+    <rule ref="Generic.Strings.UnnecessaryStringConcat"/>
+    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
+    <rule ref="Generic.WhiteSpace.LanguageConstructSpacing"/>
+    <rule ref="Generic.WhiteSpace.IncrementDecrementSpacing"/>
+    <rule ref="Generic.WhiteSpace.ScopeIndent"/>
+    <rule ref="PEAR.ControlStructures.MultiLineCondition"/>
+    <rule ref="PEAR.Files.IncludingFile"/>
+    <rule ref="PEAR.Formatting.MultiLineAssignment"/>
+    <rule ref="PEAR.Functions.ValidDefaultValue"/>
+    <rule ref="PSR2.Files.EndFileNewline"/>
+    <rule ref="Zend.Files.ClosingTag"/>
+    <rule ref="Zend.Debug.CodeAnalyzer"/>
+
+    <!-- Lines can be 120 chars long, but never show errors -->
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="120"/>
+            <property name="absoluteLineLimit" value="0"/>
+        </properties>
+    </rule>
+
+    <!-- Use Unix newlines -->
+    <rule ref="Generic.Files.LineEndings">
+        <properties>
+            <property name="eolChar" value="\n"/>
+        </properties>
+    </rule>
+
+    <!-- Have 20 chars padding maximum and always show as errors -->
+    <rule ref="Generic.Formatting.MultipleStatementAlignment">
+        <properties>
+            <property name="maxPadding" value="20"/>
+            <property name="error" value="true"/>
+        </properties>
+    </rule>
+
+    <!-- Ban some functions -->
+    <rule ref="Generic.PHP.ForbiddenFunctions">
+        <properties>
+            <property name="forbiddenFunctions" type="array">
+                <element key="sizeof" value="count"/>
+                <element key="delete" value="unset"/>
+                <element key="print" value="echo"/>
+                <element key="is_null" value="null"/>
+                <element key="create_function" value="null"/>
+            </property>
+        </properties>
+    </rule>
+
+    <!-- We allow empty catch statements -->
+    <rule ref="Generic.CodeAnalysis.EmptyStatement.DetectedCATCH">
+        <severity>0</severity>
+    </rule>
+
+    <!-- We don't want gsjlint throwing errors for things we already check -->
+    <rule ref="Generic.Debug.ClosureLinter">
+        <properties>
+            <property name="errorCodes" type="array" value="0210"/>
+            <property name="ignoreCodes" type="array" value="0001,0110,0240"/>
+        </properties>
+    </rule>
+    <rule ref="Generic.Debug.ClosureLinter.ExternalToolError">
+        <message>%2$s</message>
+    </rule>
+
+    <!-- Only one argument per line in multi-line function calls -->
+    <rule ref="PEAR.Functions.FunctionCallSignature">
+        <properties>
+            <property name="allowMultipleArguments" value="false"/>
+        </properties>
+    </rule>
+
+    <!-- We use custom indent rules for arrays -->
+    <rule ref="Generic.Arrays.ArrayIndent"/>
+    <rule ref="Squiz.Arrays.ArrayDeclaration.KeyNotAligned">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.Arrays.ArrayDeclaration.ValueNotAligned">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.Arrays.ArrayDeclaration.CloseBraceNotAligned">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.Arrays.ArrayDeclaration.CloseBraceNewLine">
+        <severity>0</severity>
+    </rule>
+
+    <!-- Squiz.WhiteSpace.LanguageConstructSpacing is deprecated -->
+    <rule ref="Squiz.WhiteSpace.LanguageConstructSpacing">
+        <severity>0</severity>
+    </rule>
+
+    <!-- Prevent fixer conflict for conflicting rules. -->
+    <rule ref="Squiz.Commenting.InlineComment">
+        <exclude name="Squiz.Commenting.InlineComment.SpacingAfterAtFunctionEnd"/>
+    </rule>
+
+    <!-- Private methods MUST not be prefixed with an underscore -->
+    <rule ref="Squiz.NamingConventions.ValidFunctionName.PrivateNoUnderscore">
+        <severity>0</severity>
+    </rule>
+    <rule ref="PSR2.Methods.MethodDeclaration.Underscore">
+        <type>error</type>
+    </rule>
+
+    <!-- Private properties MUST not be prefixed with an underscore -->
+    <rule ref="Squiz.NamingConventions.ValidVariableName.PrivateNoUnderscore">
+        <severity>0</severity>
+    </rule>
+    <rule ref="PSR2.Classes.PropertyDeclaration.Underscore">
+        <type>error</type>
+    </rule>
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpdoc.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpdoc.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpdoc.xml	(revision 8435)
@@ -0,0 +1,26 @@
+<phpdocumentor configVersion="3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://www.phpdoc.org" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/phpDocumentor/phpDocumentor/master/data/xsd/phpdoc.xsd">
+    <paths>
+        <output>../build/doc</output>
+        <cache>./phpdoc</cache>
+    </paths>
+    <version number="3.0">
+        <api format="php">
+            <source dsn="..">
+                <!--1 or more repetitions:-->
+                <path>src</path>
+            </source>
+            <ignore hidden="true" symlinks="true">
+                <path>src/entities/**/*</path>
+                <path>tests/**/*</path>
+            </ignore>
+            <extensions>
+                <extension>php</extension>
+            </extensions>
+            <include-source>true</include-source>
+            <markers>
+                <marker>TODO</marker>
+                <marker>FIXME</marker>
+            </markers>
+        </api>
+    </version>
+</phpdocumentor>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpmd.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpmd.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpmd.xml	(revision 8435)
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<ruleset name="PHPMD rule sets"
+         xmlns="http://pmd.sf.net/ruleset/1.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
+                      http://pmd.sf.net/ruleset_xml_schema.xsd"
+         xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
+    <description>Custom rule sets that checks your PHP code.</description>
+    <rule ref="rulesets/unusedcode.xml"/>
+    <rule ref="rulesets/codesize.xml/CyclomaticComplexity"/>
+    <rule ref="rulesets/codesize.xml/ExcessiveParameterList"/>
+</ruleset>
+
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpstan.neon
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpstan.neon	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpstan.neon	(revision 8435)
@@ -0,0 +1,9 @@
+parameters:
+    paths:
+        - ../src
+        - ../tests
+    level: 5
+    treatPhpDocTypesAsCertain: false
+    checkMissingIterableValueType: false
+    excludePaths:
+        - ../src/entities/*
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpunit.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpunit.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/build/phpunit.xml	(revision 8435)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" bootstrap="../vendor/autoload.php">
+    <testsuites>
+        <testsuite name="Basic">
+            <file>../tests/testcases/BasicTest.php</file>
+            <file>../tests/testcases/MimeDbTest.php</file>
+        </testsuite>
+    </testsuites>
+    <coverage processUncoveredFiles="true">
+        <include>
+            <directory suffix=".php">../src</directory>
+        </include>
+        <exclude>
+        </exclude>
+        <report>
+            <xml outputDirectory="coverage"/>
+            <html outputDirectory="coverage-html"/>
+            <clover outputFile="logs/clover.xml"/>
+            <crap4j outputFile="logs/crap4j.xml" threshold="50"/>
+        </report>
+    </coverage>
+    <logging>
+        <junit outputFile="logs/junit.xml"/>
+        <testdoxHtml outputFile="logs/testdox.html"/>
+    </logging>
+</phpunit>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/composer.json	(revision 8435)
@@ -0,0 +1,59 @@
+{
+    "name": "horstoeko/mimedb",
+    "keywords": [
+        "Mimetype",
+        "file Extension"
+    ],
+    "description": "Get mimetypes by fileextensions and visa versa",
+    "homepage": "https://github.com/horstoeko/mimedb",
+    "type": "package",
+    "license": "MIT",
+    "prefer-stable": true,
+    "authors": [
+        {
+            "name": "Daniel Erling",
+            "email": "daniel@erling.com.de",
+            "role": "lead"
+        }
+    ],
+    "config": {
+        "optimize-autoloader": true,
+        "sort-packages": true
+    },
+    "autoload": {
+        "psr-4": {
+            "horstoeko\\mimedb\\": "src"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "horstoeko\\mimedb\\tests\\": "tests"
+        }
+    },
+    "require": {
+        "php": "^7.3|^7.4|^8.0|^8.1|^8.2|^8.3"
+    },
+    "require-dev": {
+        "pdepend/pdepend": "^2",
+        "phploc/phploc": "^7",
+        "phpmd/phpmd": "^2",
+        "phpstan/phpstan": "^1.8",
+        "phpunit/phpunit": "^9",
+        "sebastian/phpcpd": "^6",
+        "squizlabs/php_codesniffer": "^3"
+    },
+    "scripts": {
+        "tests": "./vendor/bin/phpunit ./tests/",
+        "testsreal": "./vendor/bin/phpunit --configuration ./build/phpunit.xml",
+        "phpcs": "./vendor/bin/phpcs --standard=./build/phpcsrules.xml --extensions=php --ignore=autoload.php ./src ./tests",
+        "phpcs12": "./vendor/bin/phpcs --standard=./build/phpcsrules_psr12.xml --extensions=php --ignore=autoload.php ./src ./tests",
+        "phpcbf": "./vendor/bin/phpcbf -q ./src ./tests",
+        "phpcbf1": "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr1.xml -q ./src ./tests",
+        "phpcbf2": "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr2.xml -q ./src ./tests",
+        "phpcbf12": "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr12.xml -q ./src ./tests",
+        "phpcbfsq": "./vendor/bin/phpcbf --standard=./build/phpcsrules_squiz.xml -q ./src ./tests",
+        "phpstan": "./vendor/bin/phpstan analyze -c ./build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --xdebug",
+        "phpstan_cs": "./vendor/bin/phpstan analyze -c ./build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --error-format=checkstyle --xdebug",
+        "makedoc": "phing -f ./build.xml projectdoc"
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/examples/FindExtensionByMimeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/examples/FindExtensionByMimeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/examples/FindExtensionByMimeType.php	(revision 8435)
@@ -0,0 +1,30 @@
+<?php
+
+use horstoeko\mimedb\MimeDb;
+
+error_reporting(E_ERROR | E_WARNING | E_PARSE);
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$mimeDb = MimeDb::singleton();
+
+// OUTPUT:
+//   docx
+
+echo $mimeDb->findFirstFileExtensionByMimeType('application/vnd.openxmlformats-officedocument.wordprocessingml.document') . PHP_EOL;
+
+// OUTPUT:
+//   mkv
+//   mk3d
+//   mks
+
+foreach ($mimeDb->findAllFileExtensionsByMimeType('video/x-matroska') as $fileExtension) {
+    echo $fileExtension . PHP_EOL;
+}
+
+// OUTPUT:
+//   docx
+
+foreach ($mimeDb->findAllFileExtensionsByMimeType('application/vnd.openxmlformats-officedocument.wordprocessingml.document') as $fileExtension) {
+    echo $fileExtension . PHP_EOL;
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/examples/FindMimeTypeByExtension.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/examples/FindMimeTypeByExtension.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/examples/FindMimeTypeByExtension.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+use horstoeko\mimedb\MimeDb;
+
+error_reporting(E_ERROR | E_WARNING | E_PARSE);
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$mimeDb = MimeDb::singleton();
+
+// OUTPUT:
+//   application/vnd.openxmlformats-officedocument.wordprocessingml.document
+
+echo $mimeDb->findFirstMimeTypeByExtension('.docx') . PHP_EOL;
+
+// OUTPUT:
+//   application/vnd.openxmlformats-officedocument.wordprocessingml.document
+
+foreach ($mimeDb->findAllMimeTypesByExtension('.docx') as $mimetype) {
+    echo $mimetype . PHP_EOL;
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/src/MimeDb.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/src/MimeDb.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/src/MimeDb.php	(revision 8435)
@@ -0,0 +1,189 @@
+<?php
+
+/*
+* This file is a part of horstoeko/mimedb.
+*
+* For the full copyright and license information, please view the LICENSE
+* file that was distributed with this source code.
+*/
+
+namespace horstoeko\mimedb;
+
+/**
+ * Class representing the mime repository
+ *
+ * @category MimeDb
+ * @package  MimeDb
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/mimedb
+ */
+class MimeDb
+{
+    /**
+     * Instance
+     *
+     * @var horstoeko\mimedb\MimeDb
+     */
+    protected static $singleton = null;
+
+    /**
+     * The internal mime database
+     *
+     * @var array
+     */
+    protected $mimeDatabase = [];
+
+    /**
+     * Create instance (Singleton pattern)
+     *
+     * @return MimeDb
+     */
+    public static function singleton(): MimeDb
+    {
+        if (is_null(static::$singleton)) {
+            static::$singleton = new static();
+        }
+
+        return static::$singleton;
+    }
+
+    /**
+     * Load mime db
+     *
+     * @return MimeDb
+     */
+    protected function initializeDatabase(): MimeDb
+    {
+        if ($this->loadedDatabase()) {
+            return $this;
+        }
+
+        $this->loadDatabase();
+
+        return $this;
+    }
+
+    /**
+     * Returns true if the internal database was already loaded
+     *
+     * @return boolean
+     */
+    protected function loadedDatabase(): bool
+    {
+        return !empty($this->mimeDatabase);
+    }
+
+    /**
+     * Load database file
+     *
+     * @return MimeDb
+     */
+    protected function loadDatabase(): MimeDb
+    {
+        $this->mimeDatabase = json_decode(file_get_contents($this->getDbFilename()), true);
+        $this->mimeDatabase = array_filter(
+            $this->mimeDatabase,
+            function ($mimetypeDefinition) {
+                return isset($mimetypeDefinition['extensions']) && !empty($mimetypeDefinition['extensions']);
+            }
+        );
+
+        return $this;
+    }
+
+    /**
+     * Get first mimetype by file extension
+     *
+     * @param  string $lookuoFileExtension
+     * @return string|null
+     */
+    public function findFirstMimeTypeByExtension(string $lookuoFileExtension): ?string
+    {
+        $mimeTypes = $this->findAllMimeTypesByExtension($lookuoFileExtension);
+
+        if (is_null($mimeTypes)) {
+            return null;
+        }
+
+        return $mimeTypes[0];
+    }
+
+    /**
+     * Get all mimetypes by file extension
+     *
+     * @param  string $lookuoFileExtension
+     * @return array|null
+     */
+    public function findAllMimeTypesByExtension(string $lookuoFileExtension): ?array
+    {
+        $this->initializeDatabase();
+
+        $foundDbEntries = array_filter(
+            $this->mimeDatabase,
+            function ($mimetypeDefinition) use ($lookuoFileExtension) {
+                return in_array(ltrim($lookuoFileExtension, "."), $mimetypeDefinition['extensions']);
+            }
+        );
+
+        if (count($foundDbEntries) === 0) {
+            return null;
+        }
+
+        return array_keys($foundDbEntries);
+    }
+
+    /**
+     * Get first file extension by mimetype
+     *
+     * @param  string $lookupMimeType
+     * @return string|null
+     */
+    public function findFirstFileExtensionByMimeType(string $lookupMimeType): ?string
+    {
+        $fileExtensions = $this->findAllFileExtensionsByMimeType($lookupMimeType);
+
+        if (is_null($fileExtensions)) {
+            return null;
+        }
+
+        return $fileExtensions[0];
+    }
+
+    /**
+     * Get all file extensions by mimetype
+     *
+     * @param  string $lookupMimeType
+     * @return array|null
+     */
+    public function findAllFileExtensionsByMimeType(string $lookupMimeType): ?array
+    {
+        $this->initializeDatabase();
+
+        $foundDbEntries = array_filter(
+            $this->mimeDatabase,
+            function ($mimetypeDefinition, $mimetype) use ($lookupMimeType) {
+                return strcasecmp($mimetype, $lookupMimeType) === 0;
+            },
+            ARRAY_FILTER_USE_BOTH
+        );
+
+        if (reset($foundDbEntries) === false) {
+            return null;
+        }
+
+        return current($foundDbEntries)["extensions"];
+    }
+
+    /**
+     * Returns the full-qualified filename where
+     * the database is located
+     *
+     * @return             string
+     * @codeCoverageIgnore
+     */
+    private function getDbFilename(): string
+    {
+        return dirname(__FILE__) . "/assets/mimetypes.json";
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/src/assets/mimetypes.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/src/assets/mimetypes.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/src/assets/mimetypes.json	(revision 8435)
@@ -0,0 +1,6627 @@
+{
+  "application/1d-interleaved-parityfec": {
+    "source": "iana"
+  },
+  "application/3gpdash-qoe-report+xml": {
+    "source": "iana"
+  },
+  "application/3gpp-ims+xml": {
+    "source": "iana"
+  },
+  "application/a2l": {
+    "source": "iana"
+  },
+  "application/activemessage": {
+    "source": "iana"
+  },
+  "application/alto-costmap+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-costmapfilter+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-directory+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-endpointcost+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-endpointcostparams+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-endpointprop+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-endpointpropparams+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-error+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-networkmap+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-networkmapfilter+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/aml": {
+    "source": "iana"
+  },
+  "application/andrew-inset": {
+    "source": "iana",
+    "extensions": ["ez"]
+  },
+  "application/applefile": {
+    "source": "iana"
+  },
+  "application/applixware": {
+    "source": "apache",
+    "extensions": ["aw"]
+  },
+  "application/atf": {
+    "source": "iana"
+  },
+  "application/atfx": {
+    "source": "iana"
+  },
+  "application/atom+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["atom"]
+  },
+  "application/atomcat+xml": {
+    "source": "iana",
+    "extensions": ["atomcat"]
+  },
+  "application/atomdeleted+xml": {
+    "source": "iana"
+  },
+  "application/atomicmail": {
+    "source": "iana"
+  },
+  "application/atomsvc+xml": {
+    "source": "iana",
+    "extensions": ["atomsvc"]
+  },
+  "application/atxml": {
+    "source": "iana"
+  },
+  "application/auth-policy+xml": {
+    "source": "iana"
+  },
+  "application/bacnet-xdd+zip": {
+    "source": "iana"
+  },
+  "application/batch-smtp": {
+    "source": "iana"
+  },
+  "application/bdoc": {
+    "compressible": false,
+    "extensions": ["bdoc"]
+  },
+  "application/beep+xml": {
+    "source": "iana"
+  },
+  "application/calendar+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/calendar+xml": {
+    "source": "iana"
+  },
+  "application/call-completion": {
+    "source": "iana"
+  },
+  "application/cals-1840": {
+    "source": "iana"
+  },
+  "application/cbor": {
+    "source": "iana"
+  },
+  "application/ccmp+xml": {
+    "source": "iana"
+  },
+  "application/ccxml+xml": {
+    "source": "iana",
+    "extensions": ["ccxml"]
+  },
+  "application/cdfx+xml": {
+    "source": "iana"
+  },
+  "application/cdmi-capability": {
+    "source": "iana",
+    "extensions": ["cdmia"]
+  },
+  "application/cdmi-container": {
+    "source": "iana",
+    "extensions": ["cdmic"]
+  },
+  "application/cdmi-domain": {
+    "source": "iana",
+    "extensions": ["cdmid"]
+  },
+  "application/cdmi-object": {
+    "source": "iana",
+    "extensions": ["cdmio"]
+  },
+  "application/cdmi-queue": {
+    "source": "iana",
+    "extensions": ["cdmiq"]
+  },
+  "application/cdni": {
+    "source": "iana"
+  },
+  "application/cea": {
+    "source": "iana"
+  },
+  "application/cea-2018+xml": {
+    "source": "iana"
+  },
+  "application/cellml+xml": {
+    "source": "iana"
+  },
+  "application/cfw": {
+    "source": "iana"
+  },
+  "application/cms": {
+    "source": "iana"
+  },
+  "application/cnrp+xml": {
+    "source": "iana"
+  },
+  "application/coap-group+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/commonground": {
+    "source": "iana"
+  },
+  "application/conference-info+xml": {
+    "source": "iana"
+  },
+  "application/cpl+xml": {
+    "source": "iana"
+  },
+  "application/csrattrs": {
+    "source": "iana"
+  },
+  "application/csta+xml": {
+    "source": "iana"
+  },
+  "application/cstadata+xml": {
+    "source": "iana"
+  },
+  "application/csvm+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/cu-seeme": {
+    "source": "apache",
+    "extensions": ["cu"]
+  },
+  "application/cybercash": {
+    "source": "iana"
+  },
+  "application/dart": {
+    "compressible": true
+  },
+  "application/dash+xml": {
+    "source": "iana",
+    "extensions": ["mpd"]
+  },
+  "application/dashdelta": {
+    "source": "iana"
+  },
+  "application/davmount+xml": {
+    "source": "iana",
+    "extensions": ["davmount"]
+  },
+  "application/dca-rft": {
+    "source": "iana"
+  },
+  "application/dcd": {
+    "source": "iana"
+  },
+  "application/dec-dx": {
+    "source": "iana"
+  },
+  "application/dialog-info+xml": {
+    "source": "iana"
+  },
+  "application/dicom": {
+    "source": "iana"
+  },
+  "application/dii": {
+    "source": "iana"
+  },
+  "application/dit": {
+    "source": "iana"
+  },
+  "application/dns": {
+    "source": "iana"
+  },
+  "application/docbook+xml": {
+    "source": "apache",
+    "extensions": ["dbk"]
+  },
+  "application/dskpp+xml": {
+    "source": "iana"
+  },
+  "application/dssc+der": {
+    "source": "iana",
+    "extensions": ["dssc"]
+  },
+  "application/dssc+xml": {
+    "source": "iana",
+    "extensions": ["xdssc"]
+  },
+  "application/dvcs": {
+    "source": "iana"
+  },
+  "application/ecmascript": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["ecma"]
+  },
+  "application/edi-consent": {
+    "source": "iana"
+  },
+  "application/edi-x12": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/edifact": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/efi": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.comment+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.deviceinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.providerinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.serviceinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.subscriberinfo+xml": {
+    "source": "iana"
+  },
+  "application/emma+xml": {
+    "source": "iana",
+    "extensions": ["emma"]
+  },
+  "application/emotionml+xml": {
+    "source": "iana"
+  },
+  "application/encaprtp": {
+    "source": "iana"
+  },
+  "application/epp+xml": {
+    "source": "iana"
+  },
+  "application/epub+zip": {
+    "source": "iana",
+    "extensions": ["epub"]
+  },
+  "application/eshop": {
+    "source": "iana"
+  },
+  "application/exi": {
+    "source": "iana",
+    "extensions": ["exi"]
+  },
+  "application/fastinfoset": {
+    "source": "iana"
+  },
+  "application/fastsoap": {
+    "source": "iana"
+  },
+  "application/fdt+xml": {
+    "source": "iana"
+  },
+  "application/fits": {
+    "source": "iana"
+  },
+  "application/font-sfnt": {
+    "source": "iana"
+  },
+  "application/font-tdpfr": {
+    "source": "iana",
+    "extensions": ["pfr"]
+  },
+  "application/font-woff": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["woff"]
+  },
+  "application/font-woff2": {
+    "compressible": false,
+    "extensions": ["woff2"]
+  },
+  "application/framework-attributes+xml": {
+    "source": "iana"
+  },
+  "application/gml+xml": {
+    "source": "apache",
+    "extensions": ["gml"]
+  },
+  "application/gpx+xml": {
+    "source": "apache",
+    "extensions": ["gpx"]
+  },
+  "application/gxf": {
+    "source": "apache",
+    "extensions": ["gxf"]
+  },
+  "application/gzip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/h224": {
+    "source": "iana"
+  },
+  "application/held+xml": {
+    "source": "iana"
+  },
+  "application/http": {
+    "source": "iana"
+  },
+  "application/hyperstudio": {
+    "source": "iana",
+    "extensions": ["stk"]
+  },
+  "application/ibe-key-request+xml": {
+    "source": "iana"
+  },
+  "application/ibe-pkg-reply+xml": {
+    "source": "iana"
+  },
+  "application/ibe-pp-data": {
+    "source": "iana"
+  },
+  "application/iges": {
+    "source": "iana"
+  },
+  "application/im-iscomposing+xml": {
+    "source": "iana"
+  },
+  "application/index": {
+    "source": "iana"
+  },
+  "application/index.cmd": {
+    "source": "iana"
+  },
+  "application/index.obj": {
+    "source": "iana"
+  },
+  "application/index.response": {
+    "source": "iana"
+  },
+  "application/index.vnd": {
+    "source": "iana"
+  },
+  "application/inkml+xml": {
+    "source": "iana",
+    "extensions": ["ink","inkml"]
+  },
+  "application/iotp": {
+    "source": "iana"
+  },
+  "application/ipfix": {
+    "source": "iana",
+    "extensions": ["ipfix"]
+  },
+  "application/ipp": {
+    "source": "iana"
+  },
+  "application/isup": {
+    "source": "iana"
+  },
+  "application/its+xml": {
+    "source": "iana"
+  },
+  "application/java-archive": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["jar","war","ear"]
+  },
+  "application/java-serialized-object": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["ser"]
+  },
+  "application/java-vm": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["class"]
+  },
+  "application/javascript": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true,
+    "extensions": ["js"]
+  },
+  "application/jose": {
+    "source": "iana"
+  },
+  "application/jose+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/jrd+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/json": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true,
+    "extensions": ["json","map"]
+  },
+  "application/json-patch+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/json-seq": {
+    "source": "iana"
+  },
+  "application/json5": {
+    "extensions": ["json5"]
+  },
+  "application/jsonml+json": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["jsonml"]
+  },
+  "application/jwk+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/jwk-set+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/jwt": {
+    "source": "iana"
+  },
+  "application/kpml-request+xml": {
+    "source": "iana"
+  },
+  "application/kpml-response+xml": {
+    "source": "iana"
+  },
+  "application/ld+json": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["jsonld"]
+  },
+  "application/link-format": {
+    "source": "iana"
+  },
+  "application/load-control+xml": {
+    "source": "iana"
+  },
+  "application/lost+xml": {
+    "source": "iana",
+    "extensions": ["lostxml"]
+  },
+  "application/lostsync+xml": {
+    "source": "iana"
+  },
+  "application/lxf": {
+    "source": "iana"
+  },
+  "application/mac-binhex40": {
+    "source": "iana",
+    "extensions": ["hqx"]
+  },
+  "application/mac-compactpro": {
+    "source": "apache",
+    "extensions": ["cpt"]
+  },
+  "application/macwriteii": {
+    "source": "iana"
+  },
+  "application/mads+xml": {
+    "source": "iana",
+    "extensions": ["mads"]
+  },
+  "application/manifest+json": {
+    "charset": "UTF-8",
+    "compressible": true,
+    "extensions": ["webmanifest"]
+  },
+  "application/marc": {
+    "source": "iana",
+    "extensions": ["mrc"]
+  },
+  "application/marcxml+xml": {
+    "source": "iana",
+    "extensions": ["mrcx"]
+  },
+  "application/mathematica": {
+    "source": "iana",
+    "extensions": ["ma","nb","mb"]
+  },
+  "application/mathml+xml": {
+    "source": "iana",
+    "extensions": ["mathml"]
+  },
+  "application/mathml-content+xml": {
+    "source": "iana"
+  },
+  "application/mathml-presentation+xml": {
+    "source": "iana"
+  },
+  "application/mbms-associated-procedure-description+xml": {
+    "source": "iana"
+  },
+  "application/mbms-deregister+xml": {
+    "source": "iana"
+  },
+  "application/mbms-envelope+xml": {
+    "source": "iana"
+  },
+  "application/mbms-msk+xml": {
+    "source": "iana"
+  },
+  "application/mbms-msk-response+xml": {
+    "source": "iana"
+  },
+  "application/mbms-protection-description+xml": {
+    "source": "iana"
+  },
+  "application/mbms-reception-report+xml": {
+    "source": "iana"
+  },
+  "application/mbms-register+xml": {
+    "source": "iana"
+  },
+  "application/mbms-register-response+xml": {
+    "source": "iana"
+  },
+  "application/mbms-schedule+xml": {
+    "source": "iana"
+  },
+  "application/mbms-user-service-description+xml": {
+    "source": "iana"
+  },
+  "application/mbox": {
+    "source": "iana",
+    "extensions": ["mbox"]
+  },
+  "application/media-policy-dataset+xml": {
+    "source": "iana"
+  },
+  "application/media_control+xml": {
+    "source": "iana"
+  },
+  "application/mediaservercontrol+xml": {
+    "source": "iana",
+    "extensions": ["mscml"]
+  },
+  "application/merge-patch+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/metalink+xml": {
+    "source": "apache",
+    "extensions": ["metalink"]
+  },
+  "application/metalink4+xml": {
+    "source": "iana",
+    "extensions": ["meta4"]
+  },
+  "application/mets+xml": {
+    "source": "iana",
+    "extensions": ["mets"]
+  },
+  "application/mf4": {
+    "source": "iana"
+  },
+  "application/mikey": {
+    "source": "iana"
+  },
+  "application/mods+xml": {
+    "source": "iana",
+    "extensions": ["mods"]
+  },
+  "application/moss-keys": {
+    "source": "iana"
+  },
+  "application/moss-signature": {
+    "source": "iana"
+  },
+  "application/mosskey-data": {
+    "source": "iana"
+  },
+  "application/mosskey-request": {
+    "source": "iana"
+  },
+  "application/mp21": {
+    "source": "iana",
+    "extensions": ["m21","mp21"]
+  },
+  "application/mp4": {
+    "source": "iana",
+    "extensions": ["mp4s","m4p"]
+  },
+  "application/mpeg4-generic": {
+    "source": "iana"
+  },
+  "application/mpeg4-iod": {
+    "source": "iana"
+  },
+  "application/mpeg4-iod-xmt": {
+    "source": "iana"
+  },
+  "application/mrb-consumer+xml": {
+    "source": "iana"
+  },
+  "application/mrb-publish+xml": {
+    "source": "iana"
+  },
+  "application/msc-ivr+xml": {
+    "source": "iana"
+  },
+  "application/msc-mixer+xml": {
+    "source": "iana"
+  },
+  "application/msword": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["doc","dot"]
+  },
+  "application/mxf": {
+    "source": "iana",
+    "extensions": ["mxf"]
+  },
+  "application/nasdata": {
+    "source": "iana"
+  },
+  "application/news-checkgroups": {
+    "source": "iana"
+  },
+  "application/news-groupinfo": {
+    "source": "iana"
+  },
+  "application/news-transmission": {
+    "source": "iana"
+  },
+  "application/nlsml+xml": {
+    "source": "iana"
+  },
+  "application/nss": {
+    "source": "iana"
+  },
+  "application/ocsp-request": {
+    "source": "iana"
+  },
+  "application/ocsp-response": {
+    "source": "iana"
+  },
+  "application/octet-stream": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]
+  },
+  "application/oda": {
+    "source": "iana",
+    "extensions": ["oda"]
+  },
+  "application/odx": {
+    "source": "iana"
+  },
+  "application/oebps-package+xml": {
+    "source": "iana",
+    "extensions": ["opf"]
+  },
+  "application/ogg": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["ogx"]
+  },
+  "application/omdoc+xml": {
+    "source": "apache",
+    "extensions": ["omdoc"]
+  },
+  "application/onenote": {
+    "source": "apache",
+    "extensions": ["onetoc","onetoc2","onetmp","onepkg"]
+  },
+  "application/oxps": {
+    "source": "iana",
+    "extensions": ["oxps"]
+  },
+  "application/p2p-overlay+xml": {
+    "source": "iana"
+  },
+  "application/parityfec": {
+    "source": "iana"
+  },
+  "application/patch-ops-error+xml": {
+    "source": "iana",
+    "extensions": ["xer"]
+  },
+  "application/pdf": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["pdf"]
+  },
+  "application/pdx": {
+    "source": "iana"
+  },
+  "application/pgp-encrypted": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["pgp"]
+  },
+  "application/pgp-keys": {
+    "source": "iana"
+  },
+  "application/pgp-signature": {
+    "source": "iana",
+    "extensions": ["asc","sig"]
+  },
+  "application/pics-rules": {
+    "source": "apache",
+    "extensions": ["prf"]
+  },
+  "application/pidf+xml": {
+    "source": "iana"
+  },
+  "application/pidf-diff+xml": {
+    "source": "iana"
+  },
+  "application/pkcs10": {
+    "source": "iana",
+    "extensions": ["p10"]
+  },
+  "application/pkcs12": {
+    "source": "iana"
+  },
+  "application/pkcs7-mime": {
+    "source": "iana",
+    "extensions": ["p7m","p7c"]
+  },
+  "application/pkcs7-signature": {
+    "source": "iana",
+    "extensions": ["p7s"]
+  },
+  "application/pkcs8": {
+    "source": "iana",
+    "extensions": ["p8"]
+  },
+  "application/pkix-attr-cert": {
+    "source": "iana",
+    "extensions": ["ac"]
+  },
+  "application/pkix-cert": {
+    "source": "iana",
+    "extensions": ["cer"]
+  },
+  "application/pkix-crl": {
+    "source": "iana",
+    "extensions": ["crl"]
+  },
+  "application/pkix-pkipath": {
+    "source": "iana",
+    "extensions": ["pkipath"]
+  },
+  "application/pkixcmp": {
+    "source": "iana",
+    "extensions": ["pki"]
+  },
+  "application/pls+xml": {
+    "source": "iana",
+    "extensions": ["pls"]
+  },
+  "application/poc-settings+xml": {
+    "source": "iana"
+  },
+  "application/postscript": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["ai","eps","ps"]
+  },
+  "application/ppsp-tracker+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/problem+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/problem+xml": {
+    "source": "iana"
+  },
+  "application/provenance+xml": {
+    "source": "iana"
+  },
+  "application/prs.alvestrand.titrax-sheet": {
+    "source": "iana"
+  },
+  "application/prs.cww": {
+    "source": "iana",
+    "extensions": ["cww"]
+  },
+  "application/prs.hpub+zip": {
+    "source": "iana"
+  },
+  "application/prs.nprend": {
+    "source": "iana"
+  },
+  "application/prs.plucker": {
+    "source": "iana"
+  },
+  "application/prs.rdf-xml-crypt": {
+    "source": "iana"
+  },
+  "application/prs.xsf+xml": {
+    "source": "iana"
+  },
+  "application/pskc+xml": {
+    "source": "iana",
+    "extensions": ["pskcxml"]
+  },
+  "application/qsig": {
+    "source": "iana"
+  },
+  "application/raptorfec": {
+    "source": "iana"
+  },
+  "application/rdap+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/rdf+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rdf"]
+  },
+  "application/reginfo+xml": {
+    "source": "iana",
+    "extensions": ["rif"]
+  },
+  "application/relax-ng-compact-syntax": {
+    "source": "iana",
+    "extensions": ["rnc"]
+  },
+  "application/remote-printing": {
+    "source": "iana"
+  },
+  "application/reputon+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/resource-lists+xml": {
+    "source": "iana",
+    "extensions": ["rl"]
+  },
+  "application/resource-lists-diff+xml": {
+    "source": "iana",
+    "extensions": ["rld"]
+  },
+  "application/rfc+xml": {
+    "source": "iana"
+  },
+  "application/riscos": {
+    "source": "iana"
+  },
+  "application/rlmi+xml": {
+    "source": "iana"
+  },
+  "application/rls-services+xml": {
+    "source": "iana",
+    "extensions": ["rs"]
+  },
+  "application/rpki-ghostbusters": {
+    "source": "iana",
+    "extensions": ["gbr"]
+  },
+  "application/rpki-manifest": {
+    "source": "iana",
+    "extensions": ["mft"]
+  },
+  "application/rpki-roa": {
+    "source": "iana",
+    "extensions": ["roa"]
+  },
+  "application/rpki-updown": {
+    "source": "iana"
+  },
+  "application/rsd+xml": {
+    "source": "apache",
+    "extensions": ["rsd"]
+  },
+  "application/rss+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["rss"]
+  },
+  "application/rtf": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rtf"]
+  },
+  "application/rtploopback": {
+    "source": "iana"
+  },
+  "application/rtx": {
+    "source": "iana"
+  },
+  "application/samlassertion+xml": {
+    "source": "iana"
+  },
+  "application/samlmetadata+xml": {
+    "source": "iana"
+  },
+  "application/sbml+xml": {
+    "source": "iana",
+    "extensions": ["sbml"]
+  },
+  "application/scaip+xml": {
+    "source": "iana"
+  },
+  "application/scim+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/scvp-cv-request": {
+    "source": "iana",
+    "extensions": ["scq"]
+  },
+  "application/scvp-cv-response": {
+    "source": "iana",
+    "extensions": ["scs"]
+  },
+  "application/scvp-vp-request": {
+    "source": "iana",
+    "extensions": ["spq"]
+  },
+  "application/scvp-vp-response": {
+    "source": "iana",
+    "extensions": ["spp"]
+  },
+  "application/sdp": {
+    "source": "iana",
+    "extensions": ["sdp"]
+  },
+  "application/sep+xml": {
+    "source": "iana"
+  },
+  "application/sep-exi": {
+    "source": "iana"
+  },
+  "application/session-info": {
+    "source": "iana"
+  },
+  "application/set-payment": {
+    "source": "iana"
+  },
+  "application/set-payment-initiation": {
+    "source": "iana",
+    "extensions": ["setpay"]
+  },
+  "application/set-registration": {
+    "source": "iana"
+  },
+  "application/set-registration-initiation": {
+    "source": "iana",
+    "extensions": ["setreg"]
+  },
+  "application/sgml": {
+    "source": "iana"
+  },
+  "application/sgml-open-catalog": {
+    "source": "iana"
+  },
+  "application/shf+xml": {
+    "source": "iana",
+    "extensions": ["shf"]
+  },
+  "application/sieve": {
+    "source": "iana"
+  },
+  "application/simple-filter+xml": {
+    "source": "iana"
+  },
+  "application/simple-message-summary": {
+    "source": "iana"
+  },
+  "application/simplesymbolcontainer": {
+    "source": "iana"
+  },
+  "application/slate": {
+    "source": "iana"
+  },
+  "application/smil": {
+    "source": "iana"
+  },
+  "application/smil+xml": {
+    "source": "iana",
+    "extensions": ["smi","smil"]
+  },
+  "application/smpte336m": {
+    "source": "iana"
+  },
+  "application/soap+fastinfoset": {
+    "source": "iana"
+  },
+  "application/soap+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/sparql-query": {
+    "source": "iana",
+    "extensions": ["rq"]
+  },
+  "application/sparql-results+xml": {
+    "source": "iana",
+    "extensions": ["srx"]
+  },
+  "application/spirits-event+xml": {
+    "source": "iana"
+  },
+  "application/sql": {
+    "source": "iana"
+  },
+  "application/srgs": {
+    "source": "iana",
+    "extensions": ["gram"]
+  },
+  "application/srgs+xml": {
+    "source": "iana",
+    "extensions": ["grxml"]
+  },
+  "application/sru+xml": {
+    "source": "iana",
+    "extensions": ["sru"]
+  },
+  "application/ssdl+xml": {
+    "source": "apache",
+    "extensions": ["ssdl"]
+  },
+  "application/ssml+xml": {
+    "source": "iana",
+    "extensions": ["ssml"]
+  },
+  "application/tamp-apex-update": {
+    "source": "iana"
+  },
+  "application/tamp-apex-update-confirm": {
+    "source": "iana"
+  },
+  "application/tamp-community-update": {
+    "source": "iana"
+  },
+  "application/tamp-community-update-confirm": {
+    "source": "iana"
+  },
+  "application/tamp-error": {
+    "source": "iana"
+  },
+  "application/tamp-sequence-adjust": {
+    "source": "iana"
+  },
+  "application/tamp-sequence-adjust-confirm": {
+    "source": "iana"
+  },
+  "application/tamp-status-query": {
+    "source": "iana"
+  },
+  "application/tamp-status-response": {
+    "source": "iana"
+  },
+  "application/tamp-update": {
+    "source": "iana"
+  },
+  "application/tamp-update-confirm": {
+    "source": "iana"
+  },
+  "application/tar": {
+    "compressible": true
+  },
+  "application/tei+xml": {
+    "source": "iana",
+    "extensions": ["tei","teicorpus"]
+  },
+  "application/thraud+xml": {
+    "source": "iana",
+    "extensions": ["tfi"]
+  },
+  "application/timestamp-query": {
+    "source": "iana"
+  },
+  "application/timestamp-reply": {
+    "source": "iana"
+  },
+  "application/timestamped-data": {
+    "source": "iana",
+    "extensions": ["tsd"]
+  },
+  "application/ttml+xml": {
+    "source": "iana"
+  },
+  "application/tve-trigger": {
+    "source": "iana"
+  },
+  "application/ulpfec": {
+    "source": "iana"
+  },
+  "application/urc-grpsheet+xml": {
+    "source": "iana"
+  },
+  "application/urc-ressheet+xml": {
+    "source": "iana"
+  },
+  "application/urc-targetdesc+xml": {
+    "source": "iana"
+  },
+  "application/urc-uisocketdesc+xml": {
+    "source": "iana"
+  },
+  "application/vcard+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vcard+xml": {
+    "source": "iana"
+  },
+  "application/vemmi": {
+    "source": "iana"
+  },
+  "application/vividence.scriptfile": {
+    "source": "apache"
+  },
+  "application/vnd.3gpp-prose+xml": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp-prose-pc3ch+xml": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.access-transfer-events+xml": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.bsf+xml": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.mid-call+xml": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.pic-bw-large": {
+    "source": "iana",
+    "extensions": ["plb"]
+  },
+  "application/vnd.3gpp.pic-bw-small": {
+    "source": "iana",
+    "extensions": ["psb"]
+  },
+  "application/vnd.3gpp.pic-bw-var": {
+    "source": "iana",
+    "extensions": ["pvb"]
+  },
+  "application/vnd.3gpp.sms": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.sms+xml": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.srvcc-ext+xml": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.srvcc-info+xml": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.state-and-event-info+xml": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.ussd+xml": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp2.bcmcsinfo+xml": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp2.sms": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp2.tcap": {
+    "source": "iana",
+    "extensions": ["tcap"]
+  },
+  "application/vnd.3lightssoftware.imagescal": {
+    "source": "iana"
+  },
+  "application/vnd.3m.post-it-notes": {
+    "source": "iana",
+    "extensions": ["pwn"]
+  },
+  "application/vnd.accpac.simply.aso": {
+    "source": "iana",
+    "extensions": ["aso"]
+  },
+  "application/vnd.accpac.simply.imp": {
+    "source": "iana",
+    "extensions": ["imp"]
+  },
+  "application/vnd.acucobol": {
+    "source": "iana",
+    "extensions": ["acu"]
+  },
+  "application/vnd.acucorp": {
+    "source": "iana",
+    "extensions": ["atc","acutc"]
+  },
+  "application/vnd.adobe.air-application-installer-package+zip": {
+    "source": "apache",
+    "extensions": ["air"]
+  },
+  "application/vnd.adobe.flash.movie": {
+    "source": "iana"
+  },
+  "application/vnd.adobe.formscentral.fcdt": {
+    "source": "iana",
+    "extensions": ["fcdt"]
+  },
+  "application/vnd.adobe.fxp": {
+    "source": "iana",
+    "extensions": ["fxp","fxpl"]
+  },
+  "application/vnd.adobe.partial-upload": {
+    "source": "iana"
+  },
+  "application/vnd.adobe.xdp+xml": {
+    "source": "iana",
+    "extensions": ["xdp"]
+  },
+  "application/vnd.adobe.xfdf": {
+    "source": "iana",
+    "extensions": ["xfdf"]
+  },
+  "application/vnd.aether.imp": {
+    "source": "iana"
+  },
+  "application/vnd.ah-barcode": {
+    "source": "iana"
+  },
+  "application/vnd.ahead.space": {
+    "source": "iana",
+    "extensions": ["ahead"]
+  },
+  "application/vnd.airzip.filesecure.azf": {
+    "source": "iana",
+    "extensions": ["azf"]
+  },
+  "application/vnd.airzip.filesecure.azs": {
+    "source": "iana",
+    "extensions": ["azs"]
+  },
+  "application/vnd.amazon.ebook": {
+    "source": "apache",
+    "extensions": ["azw"]
+  },
+  "application/vnd.americandynamics.acc": {
+    "source": "iana",
+    "extensions": ["acc"]
+  },
+  "application/vnd.amiga.ami": {
+    "source": "iana",
+    "extensions": ["ami"]
+  },
+  "application/vnd.amundsen.maze+xml": {
+    "source": "iana"
+  },
+  "application/vnd.android.package-archive": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["apk"]
+  },
+  "application/vnd.anki": {
+    "source": "iana"
+  },
+  "application/vnd.anser-web-certificate-issue-initiation": {
+    "source": "iana",
+    "extensions": ["cii"]
+  },
+  "application/vnd.anser-web-funds-transfer-initiation": {
+    "source": "apache",
+    "extensions": ["fti"]
+  },
+  "application/vnd.antix.game-component": {
+    "source": "iana",
+    "extensions": ["atx"]
+  },
+  "application/vnd.apache.thrift.binary": {
+    "source": "iana"
+  },
+  "application/vnd.apache.thrift.compact": {
+    "source": "iana"
+  },
+  "application/vnd.apache.thrift.json": {
+    "source": "iana"
+  },
+  "application/vnd.api+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.apple.installer+xml": {
+    "source": "iana",
+    "extensions": ["mpkg"]
+  },
+  "application/vnd.apple.mpegurl": {
+    "source": "iana",
+    "extensions": ["m3u8"]
+  },
+  "application/vnd.apple.pkpass": {
+    "compressible": false,
+    "extensions": ["pkpass"]
+  },
+  "application/vnd.arastra.swi": {
+    "source": "iana"
+  },
+  "application/vnd.aristanetworks.swi": {
+    "source": "iana",
+    "extensions": ["swi"]
+  },
+  "application/vnd.artsquare": {
+    "source": "iana"
+  },
+  "application/vnd.astraea-software.iota": {
+    "source": "iana",
+    "extensions": ["iota"]
+  },
+  "application/vnd.audiograph": {
+    "source": "iana",
+    "extensions": ["aep"]
+  },
+  "application/vnd.autopackage": {
+    "source": "iana"
+  },
+  "application/vnd.avistar+xml": {
+    "source": "iana"
+  },
+  "application/vnd.balsamiq.bmml+xml": {
+    "source": "iana"
+  },
+  "application/vnd.balsamiq.bmpr": {
+    "source": "iana"
+  },
+  "application/vnd.bekitzur-stech+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.biopax.rdf+xml": {
+    "source": "iana"
+  },
+  "application/vnd.blueice.multipass": {
+    "source": "iana",
+    "extensions": ["mpm"]
+  },
+  "application/vnd.bluetooth.ep.oob": {
+    "source": "iana"
+  },
+  "application/vnd.bluetooth.le.oob": {
+    "source": "iana"
+  },
+  "application/vnd.bmi": {
+    "source": "iana",
+    "extensions": ["bmi"]
+  },
+  "application/vnd.businessobjects": {
+    "source": "iana",
+    "extensions": ["rep"]
+  },
+  "application/vnd.cab-jscript": {
+    "source": "iana"
+  },
+  "application/vnd.canon-cpdl": {
+    "source": "iana"
+  },
+  "application/vnd.canon-lips": {
+    "source": "iana"
+  },
+  "application/vnd.cendio.thinlinc.clientconf": {
+    "source": "iana"
+  },
+  "application/vnd.century-systems.tcp_stream": {
+    "source": "iana"
+  },
+  "application/vnd.chemdraw+xml": {
+    "source": "iana",
+    "extensions": ["cdxml"]
+  },
+  "application/vnd.chipnuts.karaoke-mmd": {
+    "source": "iana",
+    "extensions": ["mmd"]
+  },
+  "application/vnd.cinderella": {
+    "source": "iana",
+    "extensions": ["cdy"]
+  },
+  "application/vnd.cirpack.isdn-ext": {
+    "source": "iana"
+  },
+  "application/vnd.citationstyles.style+xml": {
+    "source": "iana"
+  },
+  "application/vnd.claymore": {
+    "source": "iana",
+    "extensions": ["cla"]
+  },
+  "application/vnd.cloanto.rp9": {
+    "source": "iana",
+    "extensions": ["rp9"]
+  },
+  "application/vnd.clonk.c4group": {
+    "source": "iana",
+    "extensions": ["c4g","c4d","c4f","c4p","c4u"]
+  },
+  "application/vnd.cluetrust.cartomobile-config": {
+    "source": "iana",
+    "extensions": ["c11amc"]
+  },
+  "application/vnd.cluetrust.cartomobile-config-pkg": {
+    "source": "iana",
+    "extensions": ["c11amz"]
+  },
+  "application/vnd.coffeescript": {
+    "source": "iana"
+  },
+  "application/vnd.collection+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.collection.doc+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.collection.next+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.commerce-battelle": {
+    "source": "iana"
+  },
+  "application/vnd.commonspace": {
+    "source": "iana",
+    "extensions": ["csp"]
+  },
+  "application/vnd.contact.cmsg": {
+    "source": "iana",
+    "extensions": ["cdbcmsg"]
+  },
+  "application/vnd.coreos.ignition+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.cosmocaller": {
+    "source": "iana",
+    "extensions": ["cmc"]
+  },
+  "application/vnd.crick.clicker": {
+    "source": "iana",
+    "extensions": ["clkx"]
+  },
+  "application/vnd.crick.clicker.keyboard": {
+    "source": "iana",
+    "extensions": ["clkk"]
+  },
+  "application/vnd.crick.clicker.palette": {
+    "source": "iana",
+    "extensions": ["clkp"]
+  },
+  "application/vnd.crick.clicker.template": {
+    "source": "iana",
+    "extensions": ["clkt"]
+  },
+  "application/vnd.crick.clicker.wordbank": {
+    "source": "iana",
+    "extensions": ["clkw"]
+  },
+  "application/vnd.criticaltools.wbs+xml": {
+    "source": "iana",
+    "extensions": ["wbs"]
+  },
+  "application/vnd.ctc-posml": {
+    "source": "iana",
+    "extensions": ["pml"]
+  },
+  "application/vnd.ctct.ws+xml": {
+    "source": "iana"
+  },
+  "application/vnd.cups-pdf": {
+    "source": "iana"
+  },
+  "application/vnd.cups-postscript": {
+    "source": "iana"
+  },
+  "application/vnd.cups-ppd": {
+    "source": "iana",
+    "extensions": ["ppd"]
+  },
+  "application/vnd.cups-raster": {
+    "source": "iana"
+  },
+  "application/vnd.cups-raw": {
+    "source": "iana"
+  },
+  "application/vnd.curl": {
+    "source": "iana"
+  },
+  "application/vnd.curl.car": {
+    "source": "apache",
+    "extensions": ["car"]
+  },
+  "application/vnd.curl.pcurl": {
+    "source": "apache",
+    "extensions": ["pcurl"]
+  },
+  "application/vnd.cyan.dean.root+xml": {
+    "source": "iana"
+  },
+  "application/vnd.cybank": {
+    "source": "iana"
+  },
+  "application/vnd.dart": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["dart"]
+  },
+  "application/vnd.data-vision.rdz": {
+    "source": "iana",
+    "extensions": ["rdz"]
+  },
+  "application/vnd.debian.binary-package": {
+    "source": "iana"
+  },
+  "application/vnd.dece.data": {
+    "source": "iana",
+    "extensions": ["uvf","uvvf","uvd","uvvd"]
+  },
+  "application/vnd.dece.ttml+xml": {
+    "source": "iana",
+    "extensions": ["uvt","uvvt"]
+  },
+  "application/vnd.dece.unspecified": {
+    "source": "iana",
+    "extensions": ["uvx","uvvx"]
+  },
+  "application/vnd.dece.zip": {
+    "source": "iana",
+    "extensions": ["uvz","uvvz"]
+  },
+  "application/vnd.denovo.fcselayout-link": {
+    "source": "iana",
+    "extensions": ["fe_launch"]
+  },
+  "application/vnd.desmume-movie": {
+    "source": "iana"
+  },
+  "application/vnd.desmume.movie": {
+    "source": "apache"
+  },
+  "application/vnd.dir-bi.plate-dl-nosuffix": {
+    "source": "iana"
+  },
+  "application/vnd.dm.delegation+xml": {
+    "source": "iana"
+  },
+  "application/vnd.dna": {
+    "source": "iana",
+    "extensions": ["dna"]
+  },
+  "application/vnd.document+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.dolby.mlp": {
+    "source": "apache",
+    "extensions": ["mlp"]
+  },
+  "application/vnd.dolby.mobile.1": {
+    "source": "iana"
+  },
+  "application/vnd.dolby.mobile.2": {
+    "source": "iana"
+  },
+  "application/vnd.doremir.scorecloud-binary-document": {
+    "source": "iana"
+  },
+  "application/vnd.dpgraph": {
+    "source": "iana",
+    "extensions": ["dpg"]
+  },
+  "application/vnd.dreamfactory": {
+    "source": "iana",
+    "extensions": ["dfac"]
+  },
+  "application/vnd.drive+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ds-keypoint": {
+    "source": "apache",
+    "extensions": ["kpxx"]
+  },
+  "application/vnd.dtg.local": {
+    "source": "iana"
+  },
+  "application/vnd.dtg.local.flash": {
+    "source": "iana"
+  },
+  "application/vnd.dtg.local.html": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.ait": {
+    "source": "iana",
+    "extensions": ["ait"]
+  },
+  "application/vnd.dvb.dvbj": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.esgcontainer": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.ipdcdftnotifaccess": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.ipdcesgaccess": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.ipdcesgaccess2": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.ipdcesgpdd": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.ipdcroaming": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.iptv.alfec-base": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.iptv.alfec-enhancement": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.notif-aggregate-root+xml": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.notif-container+xml": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.notif-generic+xml": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.notif-ia-msglist+xml": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.notif-ia-registration-request+xml": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.notif-ia-registration-response+xml": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.notif-init+xml": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.pfr": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.service": {
+    "source": "iana",
+    "extensions": ["svc"]
+  },
+  "application/vnd.dxr": {
+    "source": "iana"
+  },
+  "application/vnd.dynageo": {
+    "source": "iana",
+    "extensions": ["geo"]
+  },
+  "application/vnd.dzr": {
+    "source": "iana"
+  },
+  "application/vnd.easykaraoke.cdgdownload": {
+    "source": "iana"
+  },
+  "application/vnd.ecdis-update": {
+    "source": "iana"
+  },
+  "application/vnd.ecowin.chart": {
+    "source": "iana",
+    "extensions": ["mag"]
+  },
+  "application/vnd.ecowin.filerequest": {
+    "source": "iana"
+  },
+  "application/vnd.ecowin.fileupdate": {
+    "source": "iana"
+  },
+  "application/vnd.ecowin.series": {
+    "source": "iana"
+  },
+  "application/vnd.ecowin.seriesrequest": {
+    "source": "iana"
+  },
+  "application/vnd.ecowin.seriesupdate": {
+    "source": "iana"
+  },
+  "application/vnd.emclient.accessrequest+xml": {
+    "source": "iana"
+  },
+  "application/vnd.enliven": {
+    "source": "iana",
+    "extensions": ["nml"]
+  },
+  "application/vnd.enphase.envoy": {
+    "source": "iana"
+  },
+  "application/vnd.eprints.data+xml": {
+    "source": "iana"
+  },
+  "application/vnd.epson.esf": {
+    "source": "iana",
+    "extensions": ["esf"]
+  },
+  "application/vnd.epson.msf": {
+    "source": "iana",
+    "extensions": ["msf"]
+  },
+  "application/vnd.epson.quickanime": {
+    "source": "iana",
+    "extensions": ["qam"]
+  },
+  "application/vnd.epson.salt": {
+    "source": "iana",
+    "extensions": ["slt"]
+  },
+  "application/vnd.epson.ssf": {
+    "source": "iana",
+    "extensions": ["ssf"]
+  },
+  "application/vnd.ericsson.quickcall": {
+    "source": "iana"
+  },
+  "application/vnd.eszigno3+xml": {
+    "source": "iana",
+    "extensions": ["es3","et3"]
+  },
+  "application/vnd.etsi.aoc+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.asic-e+zip": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.asic-s+zip": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.cug+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.iptvcommand+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.iptvdiscovery+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.iptvprofile+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.iptvsad-bc+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.iptvsad-cod+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.iptvsad-npvr+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.iptvservice+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.iptvsync+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.iptvueprofile+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.mcid+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.mheg5": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.overload-control-policy-dataset+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.pstn+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.sci+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.simservs+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.timestamp-token": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.tsl+xml": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.tsl.der": {
+    "source": "iana"
+  },
+  "application/vnd.eudora.data": {
+    "source": "iana"
+  },
+  "application/vnd.ezpix-album": {
+    "source": "iana",
+    "extensions": ["ez2"]
+  },
+  "application/vnd.ezpix-package": {
+    "source": "iana",
+    "extensions": ["ez3"]
+  },
+  "application/vnd.f-secure.mobile": {
+    "source": "iana"
+  },
+  "application/vnd.fastcopy-disk-image": {
+    "source": "iana"
+  },
+  "application/vnd.fdf": {
+    "source": "iana",
+    "extensions": ["fdf"]
+  },
+  "application/vnd.fdsn.mseed": {
+    "source": "iana",
+    "extensions": ["mseed"]
+  },
+  "application/vnd.fdsn.seed": {
+    "source": "iana",
+    "extensions": ["seed","dataless"]
+  },
+  "application/vnd.ffsns": {
+    "source": "iana"
+  },
+  "application/vnd.filmit.zfc": {
+    "source": "iana"
+  },
+  "application/vnd.fints": {
+    "source": "iana"
+  },
+  "application/vnd.firemonkeys.cloudcell": {
+    "source": "iana"
+  },
+  "application/vnd.flographit": {
+    "source": "iana",
+    "extensions": ["gph"]
+  },
+  "application/vnd.fluxtime.clip": {
+    "source": "iana",
+    "extensions": ["ftc"]
+  },
+  "application/vnd.font-fontforge-sfd": {
+    "source": "iana"
+  },
+  "application/vnd.framemaker": {
+    "source": "iana",
+    "extensions": ["fm","frame","maker","book"]
+  },
+  "application/vnd.frogans.fnc": {
+    "source": "iana",
+    "extensions": ["fnc"]
+  },
+  "application/vnd.frogans.ltf": {
+    "source": "iana",
+    "extensions": ["ltf"]
+  },
+  "application/vnd.fsc.weblaunch": {
+    "source": "iana",
+    "extensions": ["fsc"]
+  },
+  "application/vnd.fujitsu.oasys": {
+    "source": "iana",
+    "extensions": ["oas"]
+  },
+  "application/vnd.fujitsu.oasys2": {
+    "source": "iana",
+    "extensions": ["oa2"]
+  },
+  "application/vnd.fujitsu.oasys3": {
+    "source": "iana",
+    "extensions": ["oa3"]
+  },
+  "application/vnd.fujitsu.oasysgp": {
+    "source": "iana",
+    "extensions": ["fg5"]
+  },
+  "application/vnd.fujitsu.oasysprs": {
+    "source": "iana",
+    "extensions": ["bh2"]
+  },
+  "application/vnd.fujixerox.art-ex": {
+    "source": "iana"
+  },
+  "application/vnd.fujixerox.art4": {
+    "source": "iana"
+  },
+  "application/vnd.fujixerox.ddd": {
+    "source": "iana",
+    "extensions": ["ddd"]
+  },
+  "application/vnd.fujixerox.docuworks": {
+    "source": "iana",
+    "extensions": ["xdw"]
+  },
+  "application/vnd.fujixerox.docuworks.binder": {
+    "source": "iana",
+    "extensions": ["xbd"]
+  },
+  "application/vnd.fujixerox.docuworks.container": {
+    "source": "iana"
+  },
+  "application/vnd.fujixerox.hbpl": {
+    "source": "iana"
+  },
+  "application/vnd.fut-misnet": {
+    "source": "iana"
+  },
+  "application/vnd.fuzzysheet": {
+    "source": "iana",
+    "extensions": ["fzs"]
+  },
+  "application/vnd.genomatix.tuxedo": {
+    "source": "iana",
+    "extensions": ["txd"]
+  },
+  "application/vnd.geo+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.geocube+xml": {
+    "source": "iana"
+  },
+  "application/vnd.geogebra.file": {
+    "source": "iana",
+    "extensions": ["ggb"]
+  },
+  "application/vnd.geogebra.tool": {
+    "source": "iana",
+    "extensions": ["ggt"]
+  },
+  "application/vnd.geometry-explorer": {
+    "source": "iana",
+    "extensions": ["gex","gre"]
+  },
+  "application/vnd.geonext": {
+    "source": "iana",
+    "extensions": ["gxt"]
+  },
+  "application/vnd.geoplan": {
+    "source": "iana",
+    "extensions": ["g2w"]
+  },
+  "application/vnd.geospace": {
+    "source": "iana",
+    "extensions": ["g3w"]
+  },
+  "application/vnd.gerber": {
+    "source": "iana"
+  },
+  "application/vnd.globalplatform.card-content-mgt": {
+    "source": "iana"
+  },
+  "application/vnd.globalplatform.card-content-mgt-response": {
+    "source": "iana"
+  },
+  "application/vnd.gmx": {
+    "source": "iana",
+    "extensions": ["gmx"]
+  },
+  "application/vnd.google-apps.document": {
+    "compressible": false,
+    "extensions": ["gdoc"]
+  },
+  "application/vnd.google-apps.presentation": {
+    "compressible": false,
+    "extensions": ["gslides"]
+  },
+  "application/vnd.google-apps.spreadsheet": {
+    "compressible": false,
+    "extensions": ["gsheet"]
+  },
+  "application/vnd.google-earth.kml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["kml"]
+  },
+  "application/vnd.google-earth.kmz": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["kmz"]
+  },
+  "application/vnd.gov.sk.e-form+xml": {
+    "source": "iana"
+  },
+  "application/vnd.gov.sk.e-form+zip": {
+    "source": "iana"
+  },
+  "application/vnd.gov.sk.xmldatacontainer+xml": {
+    "source": "iana"
+  },
+  "application/vnd.grafeq": {
+    "source": "iana",
+    "extensions": ["gqf","gqs"]
+  },
+  "application/vnd.gridmp": {
+    "source": "iana"
+  },
+  "application/vnd.groove-account": {
+    "source": "iana",
+    "extensions": ["gac"]
+  },
+  "application/vnd.groove-help": {
+    "source": "iana",
+    "extensions": ["ghf"]
+  },
+  "application/vnd.groove-identity-message": {
+    "source": "iana",
+    "extensions": ["gim"]
+  },
+  "application/vnd.groove-injector": {
+    "source": "iana",
+    "extensions": ["grv"]
+  },
+  "application/vnd.groove-tool-message": {
+    "source": "iana",
+    "extensions": ["gtm"]
+  },
+  "application/vnd.groove-tool-template": {
+    "source": "iana",
+    "extensions": ["tpl"]
+  },
+  "application/vnd.groove-vcard": {
+    "source": "iana",
+    "extensions": ["vcg"]
+  },
+  "application/vnd.hal+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.hal+xml": {
+    "source": "iana",
+    "extensions": ["hal"]
+  },
+  "application/vnd.handheld-entertainment+xml": {
+    "source": "iana",
+    "extensions": ["zmm"]
+  },
+  "application/vnd.hbci": {
+    "source": "iana",
+    "extensions": ["hbci"]
+  },
+  "application/vnd.hcl-bireports": {
+    "source": "iana"
+  },
+  "application/vnd.hdt": {
+    "source": "iana"
+  },
+  "application/vnd.heroku+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.hhe.lesson-player": {
+    "source": "iana",
+    "extensions": ["les"]
+  },
+  "application/vnd.hp-hpgl": {
+    "source": "iana",
+    "extensions": ["hpgl"]
+  },
+  "application/vnd.hp-hpid": {
+    "source": "iana",
+    "extensions": ["hpid"]
+  },
+  "application/vnd.hp-hps": {
+    "source": "iana",
+    "extensions": ["hps"]
+  },
+  "application/vnd.hp-jlyt": {
+    "source": "iana",
+    "extensions": ["jlt"]
+  },
+  "application/vnd.hp-pcl": {
+    "source": "iana",
+    "extensions": ["pcl"]
+  },
+  "application/vnd.hp-pclxl": {
+    "source": "iana",
+    "extensions": ["pclxl"]
+  },
+  "application/vnd.httphone": {
+    "source": "iana"
+  },
+  "application/vnd.hydrostatix.sof-data": {
+    "source": "iana",
+    "extensions": ["sfd-hdstx"]
+  },
+  "application/vnd.hyperdrive+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.hzn-3d-crossword": {
+    "source": "iana"
+  },
+  "application/vnd.ibm.afplinedata": {
+    "source": "iana"
+  },
+  "application/vnd.ibm.electronic-media": {
+    "source": "iana"
+  },
+  "application/vnd.ibm.minipay": {
+    "source": "iana",
+    "extensions": ["mpy"]
+  },
+  "application/vnd.ibm.modcap": {
+    "source": "iana",
+    "extensions": ["afp","listafp","list3820"]
+  },
+  "application/vnd.ibm.rights-management": {
+    "source": "iana",
+    "extensions": ["irm"]
+  },
+  "application/vnd.ibm.secure-container": {
+    "source": "iana",
+    "extensions": ["sc"]
+  },
+  "application/vnd.iccprofile": {
+    "source": "iana",
+    "extensions": ["icc","icm"]
+  },
+  "application/vnd.ieee.1905": {
+    "source": "iana"
+  },
+  "application/vnd.igloader": {
+    "source": "iana",
+    "extensions": ["igl"]
+  },
+  "application/vnd.immervision-ivp": {
+    "source": "iana",
+    "extensions": ["ivp"]
+  },
+  "application/vnd.immervision-ivu": {
+    "source": "iana",
+    "extensions": ["ivu"]
+  },
+  "application/vnd.ims.imsccv1p1": {
+    "source": "iana"
+  },
+  "application/vnd.ims.imsccv1p2": {
+    "source": "iana"
+  },
+  "application/vnd.ims.imsccv1p3": {
+    "source": "iana"
+  },
+  "application/vnd.ims.lis.v2.result+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ims.lti.v2.toolconsumerprofile+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ims.lti.v2.toolproxy+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ims.lti.v2.toolproxy.id+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ims.lti.v2.toolsettings+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ims.lti.v2.toolsettings.simple+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.informedcontrol.rms+xml": {
+    "source": "iana"
+  },
+  "application/vnd.informix-visionary": {
+    "source": "iana"
+  },
+  "application/vnd.infotech.project": {
+    "source": "iana"
+  },
+  "application/vnd.infotech.project+xml": {
+    "source": "iana"
+  },
+  "application/vnd.innopath.wamp.notification": {
+    "source": "iana"
+  },
+  "application/vnd.insors.igm": {
+    "source": "iana",
+    "extensions": ["igm"]
+  },
+  "application/vnd.intercon.formnet": {
+    "source": "iana",
+    "extensions": ["xpw","xpx"]
+  },
+  "application/vnd.intergeo": {
+    "source": "iana",
+    "extensions": ["i2g"]
+  },
+  "application/vnd.intertrust.digibox": {
+    "source": "iana"
+  },
+  "application/vnd.intertrust.nncp": {
+    "source": "iana"
+  },
+  "application/vnd.intu.qbo": {
+    "source": "iana",
+    "extensions": ["qbo"]
+  },
+  "application/vnd.intu.qfx": {
+    "source": "iana",
+    "extensions": ["qfx"]
+  },
+  "application/vnd.iptc.g2.catalogitem+xml": {
+    "source": "iana"
+  },
+  "application/vnd.iptc.g2.conceptitem+xml": {
+    "source": "iana"
+  },
+  "application/vnd.iptc.g2.knowledgeitem+xml": {
+    "source": "iana"
+  },
+  "application/vnd.iptc.g2.newsitem+xml": {
+    "source": "iana"
+  },
+  "application/vnd.iptc.g2.newsmessage+xml": {
+    "source": "iana"
+  },
+  "application/vnd.iptc.g2.packageitem+xml": {
+    "source": "iana"
+  },
+  "application/vnd.iptc.g2.planningitem+xml": {
+    "source": "iana"
+  },
+  "application/vnd.ipunplugged.rcprofile": {
+    "source": "iana",
+    "extensions": ["rcprofile"]
+  },
+  "application/vnd.irepository.package+xml": {
+    "source": "iana",
+    "extensions": ["irp"]
+  },
+  "application/vnd.is-xpr": {
+    "source": "iana",
+    "extensions": ["xpr"]
+  },
+  "application/vnd.isac.fcs": {
+    "source": "iana",
+    "extensions": ["fcs"]
+  },
+  "application/vnd.jam": {
+    "source": "iana",
+    "extensions": ["jam"]
+  },
+  "application/vnd.japannet-directory-service": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-jpnstore-wakeup": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-payment-wakeup": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-registration": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-registration-wakeup": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-setstore-wakeup": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-verification": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-verification-wakeup": {
+    "source": "iana"
+  },
+  "application/vnd.jcp.javame.midlet-rms": {
+    "source": "iana",
+    "extensions": ["rms"]
+  },
+  "application/vnd.jisp": {
+    "source": "iana",
+    "extensions": ["jisp"]
+  },
+  "application/vnd.joost.joda-archive": {
+    "source": "iana",
+    "extensions": ["joda"]
+  },
+  "application/vnd.jsk.isdn-ngn": {
+    "source": "iana"
+  },
+  "application/vnd.kahootz": {
+    "source": "iana",
+    "extensions": ["ktz","ktr"]
+  },
+  "application/vnd.kde.karbon": {
+    "source": "iana",
+    "extensions": ["karbon"]
+  },
+  "application/vnd.kde.kchart": {
+    "source": "iana",
+    "extensions": ["chrt"]
+  },
+  "application/vnd.kde.kformula": {
+    "source": "iana",
+    "extensions": ["kfo"]
+  },
+  "application/vnd.kde.kivio": {
+    "source": "iana",
+    "extensions": ["flw"]
+  },
+  "application/vnd.kde.kontour": {
+    "source": "iana",
+    "extensions": ["kon"]
+  },
+  "application/vnd.kde.kpresenter": {
+    "source": "iana",
+    "extensions": ["kpr","kpt"]
+  },
+  "application/vnd.kde.kspread": {
+    "source": "iana",
+    "extensions": ["ksp"]
+  },
+  "application/vnd.kde.kword": {
+    "source": "iana",
+    "extensions": ["kwd","kwt"]
+  },
+  "application/vnd.kenameaapp": {
+    "source": "iana",
+    "extensions": ["htke"]
+  },
+  "application/vnd.kidspiration": {
+    "source": "iana",
+    "extensions": ["kia"]
+  },
+  "application/vnd.kinar": {
+    "source": "iana",
+    "extensions": ["kne","knp"]
+  },
+  "application/vnd.koan": {
+    "source": "iana",
+    "extensions": ["skp","skd","skt","skm"]
+  },
+  "application/vnd.kodak-descriptor": {
+    "source": "iana",
+    "extensions": ["sse"]
+  },
+  "application/vnd.las.las+xml": {
+    "source": "iana",
+    "extensions": ["lasxml"]
+  },
+  "application/vnd.liberty-request+xml": {
+    "source": "iana"
+  },
+  "application/vnd.llamagraphics.life-balance.desktop": {
+    "source": "iana",
+    "extensions": ["lbd"]
+  },
+  "application/vnd.llamagraphics.life-balance.exchange+xml": {
+    "source": "iana",
+    "extensions": ["lbe"]
+  },
+  "application/vnd.lotus-1-2-3": {
+    "source": "iana",
+    "extensions": ["123"]
+  },
+  "application/vnd.lotus-approach": {
+    "source": "iana",
+    "extensions": ["apr"]
+  },
+  "application/vnd.lotus-freelance": {
+    "source": "iana",
+    "extensions": ["pre"]
+  },
+  "application/vnd.lotus-notes": {
+    "source": "iana",
+    "extensions": ["nsf"]
+  },
+  "application/vnd.lotus-organizer": {
+    "source": "iana",
+    "extensions": ["org"]
+  },
+  "application/vnd.lotus-screencam": {
+    "source": "iana",
+    "extensions": ["scm"]
+  },
+  "application/vnd.lotus-wordpro": {
+    "source": "iana",
+    "extensions": ["lwp"]
+  },
+  "application/vnd.macports.portpkg": {
+    "source": "iana",
+    "extensions": ["portpkg"]
+  },
+  "application/vnd.mapbox-vector-tile": {
+    "source": "iana"
+  },
+  "application/vnd.marlin.drm.actiontoken+xml": {
+    "source": "iana"
+  },
+  "application/vnd.marlin.drm.conftoken+xml": {
+    "source": "iana"
+  },
+  "application/vnd.marlin.drm.license+xml": {
+    "source": "iana"
+  },
+  "application/vnd.marlin.drm.mdcf": {
+    "source": "iana"
+  },
+  "application/vnd.mason+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.maxmind.maxmind-db": {
+    "source": "iana"
+  },
+  "application/vnd.mcd": {
+    "source": "iana",
+    "extensions": ["mcd"]
+  },
+  "application/vnd.medcalcdata": {
+    "source": "iana",
+    "extensions": ["mc1"]
+  },
+  "application/vnd.mediastation.cdkey": {
+    "source": "iana",
+    "extensions": ["cdkey"]
+  },
+  "application/vnd.meridian-slingshot": {
+    "source": "iana"
+  },
+  "application/vnd.mfer": {
+    "source": "iana",
+    "extensions": ["mwf"]
+  },
+  "application/vnd.mfmp": {
+    "source": "iana",
+    "extensions": ["mfm"]
+  },
+  "application/vnd.micro+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.micrografx.flo": {
+    "source": "iana",
+    "extensions": ["flo"]
+  },
+  "application/vnd.micrografx.igx": {
+    "source": "iana",
+    "extensions": ["igx"]
+  },
+  "application/vnd.microsoft.portable-executable": {
+    "source": "iana"
+  },
+  "application/vnd.miele+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.mif": {
+    "source": "iana",
+    "extensions": ["mif"]
+  },
+  "application/vnd.minisoft-hp3000-save": {
+    "source": "iana"
+  },
+  "application/vnd.mitsubishi.misty-guard.trustweb": {
+    "source": "iana"
+  },
+  "application/vnd.mobius.daf": {
+    "source": "iana",
+    "extensions": ["daf"]
+  },
+  "application/vnd.mobius.dis": {
+    "source": "iana",
+    "extensions": ["dis"]
+  },
+  "application/vnd.mobius.mbk": {
+    "source": "iana",
+    "extensions": ["mbk"]
+  },
+  "application/vnd.mobius.mqy": {
+    "source": "iana",
+    "extensions": ["mqy"]
+  },
+  "application/vnd.mobius.msl": {
+    "source": "iana",
+    "extensions": ["msl"]
+  },
+  "application/vnd.mobius.plc": {
+    "source": "iana",
+    "extensions": ["plc"]
+  },
+  "application/vnd.mobius.txf": {
+    "source": "iana",
+    "extensions": ["txf"]
+  },
+  "application/vnd.mophun.application": {
+    "source": "iana",
+    "extensions": ["mpn"]
+  },
+  "application/vnd.mophun.certificate": {
+    "source": "iana",
+    "extensions": ["mpc"]
+  },
+  "application/vnd.motorola.flexsuite": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.flexsuite.adsi": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.flexsuite.fis": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.flexsuite.gotap": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.flexsuite.kmr": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.flexsuite.ttc": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.flexsuite.wem": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.iprm": {
+    "source": "iana"
+  },
+  "application/vnd.mozilla.xul+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xul"]
+  },
+  "application/vnd.ms-3mfdocument": {
+    "source": "iana"
+  },
+  "application/vnd.ms-artgalry": {
+    "source": "iana",
+    "extensions": ["cil"]
+  },
+  "application/vnd.ms-asf": {
+    "source": "iana"
+  },
+  "application/vnd.ms-cab-compressed": {
+    "source": "iana",
+    "extensions": ["cab"]
+  },
+  "application/vnd.ms-color.iccprofile": {
+    "source": "apache"
+  },
+  "application/vnd.ms-excel": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["xls","xlm","xla","xlc","xlt","xlw"]
+  },
+  "application/vnd.ms-excel.addin.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["xlam"]
+  },
+  "application/vnd.ms-excel.sheet.binary.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["xlsb"]
+  },
+  "application/vnd.ms-excel.sheet.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["xlsm"]
+  },
+  "application/vnd.ms-excel.template.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["xltm"]
+  },
+  "application/vnd.ms-fontobject": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["eot"]
+  },
+  "application/vnd.ms-htmlhelp": {
+    "source": "iana",
+    "extensions": ["chm"]
+  },
+  "application/vnd.ms-ims": {
+    "source": "iana",
+    "extensions": ["ims"]
+  },
+  "application/vnd.ms-lrm": {
+    "source": "iana",
+    "extensions": ["lrm"]
+  },
+  "application/vnd.ms-office.activex+xml": {
+    "source": "iana"
+  },
+  "application/vnd.ms-officetheme": {
+    "source": "iana",
+    "extensions": ["thmx"]
+  },
+  "application/vnd.ms-opentype": {
+    "source": "apache",
+    "compressible": true
+  },
+  "application/vnd.ms-package.obfuscated-opentype": {
+    "source": "apache"
+  },
+  "application/vnd.ms-pki.seccat": {
+    "source": "apache",
+    "extensions": ["cat"]
+  },
+  "application/vnd.ms-pki.stl": {
+    "source": "apache",
+    "extensions": ["stl"]
+  },
+  "application/vnd.ms-playready.initiator+xml": {
+    "source": "iana"
+  },
+  "application/vnd.ms-powerpoint": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["ppt","pps","pot"]
+  },
+  "application/vnd.ms-powerpoint.addin.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["ppam"]
+  },
+  "application/vnd.ms-powerpoint.presentation.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["pptm"]
+  },
+  "application/vnd.ms-powerpoint.slide.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["sldm"]
+  },
+  "application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["ppsm"]
+  },
+  "application/vnd.ms-powerpoint.template.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["potm"]
+  },
+  "application/vnd.ms-printdevicecapabilities+xml": {
+    "source": "iana"
+  },
+  "application/vnd.ms-printing.printticket+xml": {
+    "source": "apache"
+  },
+  "application/vnd.ms-printschematicket+xml": {
+    "source": "iana"
+  },
+  "application/vnd.ms-project": {
+    "source": "iana",
+    "extensions": ["mpp","mpt"]
+  },
+  "application/vnd.ms-tnef": {
+    "source": "iana"
+  },
+  "application/vnd.ms-windows.devicepairing": {
+    "source": "iana"
+  },
+  "application/vnd.ms-windows.nwprinting.oob": {
+    "source": "iana"
+  },
+  "application/vnd.ms-windows.printerpairing": {
+    "source": "iana"
+  },
+  "application/vnd.ms-windows.wsd.oob": {
+    "source": "iana"
+  },
+  "application/vnd.ms-wmdrm.lic-chlg-req": {
+    "source": "iana"
+  },
+  "application/vnd.ms-wmdrm.lic-resp": {
+    "source": "iana"
+  },
+  "application/vnd.ms-wmdrm.meter-chlg-req": {
+    "source": "iana"
+  },
+  "application/vnd.ms-wmdrm.meter-resp": {
+    "source": "iana"
+  },
+  "application/vnd.ms-word.document.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["docm"]
+  },
+  "application/vnd.ms-word.template.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["dotm"]
+  },
+  "application/vnd.ms-works": {
+    "source": "iana",
+    "extensions": ["wps","wks","wcm","wdb"]
+  },
+  "application/vnd.ms-wpl": {
+    "source": "iana",
+    "extensions": ["wpl"]
+  },
+  "application/vnd.ms-xpsdocument": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["xps"]
+  },
+  "application/vnd.msa-disk-image": {
+    "source": "iana"
+  },
+  "application/vnd.mseq": {
+    "source": "iana",
+    "extensions": ["mseq"]
+  },
+  "application/vnd.msign": {
+    "source": "iana"
+  },
+  "application/vnd.multiad.creator": {
+    "source": "iana"
+  },
+  "application/vnd.multiad.creator.cif": {
+    "source": "iana"
+  },
+  "application/vnd.music-niff": {
+    "source": "iana"
+  },
+  "application/vnd.musician": {
+    "source": "iana",
+    "extensions": ["mus"]
+  },
+  "application/vnd.muvee.style": {
+    "source": "iana",
+    "extensions": ["msty"]
+  },
+  "application/vnd.mynfc": {
+    "source": "iana",
+    "extensions": ["taglet"]
+  },
+  "application/vnd.ncd.control": {
+    "source": "iana"
+  },
+  "application/vnd.ncd.reference": {
+    "source": "iana"
+  },
+  "application/vnd.nervana": {
+    "source": "iana"
+  },
+  "application/vnd.netfpx": {
+    "source": "iana"
+  },
+  "application/vnd.neurolanguage.nlu": {
+    "source": "iana",
+    "extensions": ["nlu"]
+  },
+  "application/vnd.nintendo.nitro.rom": {
+    "source": "iana"
+  },
+  "application/vnd.nintendo.snes.rom": {
+    "source": "iana"
+  },
+  "application/vnd.nitf": {
+    "source": "iana",
+    "extensions": ["ntf","nitf"]
+  },
+  "application/vnd.noblenet-directory": {
+    "source": "iana",
+    "extensions": ["nnd"]
+  },
+  "application/vnd.noblenet-sealer": {
+    "source": "iana",
+    "extensions": ["nns"]
+  },
+  "application/vnd.noblenet-web": {
+    "source": "iana",
+    "extensions": ["nnw"]
+  },
+  "application/vnd.nokia.catalogs": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.conml+wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.conml+xml": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.iptv.config+xml": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.isds-radio-presets": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.landmark+wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.landmark+xml": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.landmarkcollection+xml": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.n-gage.ac+xml": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.n-gage.data": {
+    "source": "iana",
+    "extensions": ["ngdat"]
+  },
+  "application/vnd.nokia.n-gage.symbian.install": {
+    "source": "iana",
+    "extensions": ["n-gage"]
+  },
+  "application/vnd.nokia.ncd": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.pcd+wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.pcd+xml": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.radio-preset": {
+    "source": "iana",
+    "extensions": ["rpst"]
+  },
+  "application/vnd.nokia.radio-presets": {
+    "source": "iana",
+    "extensions": ["rpss"]
+  },
+  "application/vnd.novadigm.edm": {
+    "source": "iana",
+    "extensions": ["edm"]
+  },
+  "application/vnd.novadigm.edx": {
+    "source": "iana",
+    "extensions": ["edx"]
+  },
+  "application/vnd.novadigm.ext": {
+    "source": "iana",
+    "extensions": ["ext"]
+  },
+  "application/vnd.ntt-local.content-share": {
+    "source": "iana"
+  },
+  "application/vnd.ntt-local.file-transfer": {
+    "source": "iana"
+  },
+  "application/vnd.ntt-local.ogw_remote-access": {
+    "source": "iana"
+  },
+  "application/vnd.ntt-local.sip-ta_remote": {
+    "source": "iana"
+  },
+  "application/vnd.ntt-local.sip-ta_tcp_stream": {
+    "source": "iana"
+  },
+  "application/vnd.oasis.opendocument.chart": {
+    "source": "iana",
+    "extensions": ["odc"]
+  },
+  "application/vnd.oasis.opendocument.chart-template": {
+    "source": "iana",
+    "extensions": ["otc"]
+  },
+  "application/vnd.oasis.opendocument.database": {
+    "source": "iana",
+    "extensions": ["odb"]
+  },
+  "application/vnd.oasis.opendocument.formula": {
+    "source": "iana",
+    "extensions": ["odf"]
+  },
+  "application/vnd.oasis.opendocument.formula-template": {
+    "source": "iana",
+    "extensions": ["odft"]
+  },
+  "application/vnd.oasis.opendocument.graphics": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["odg"]
+  },
+  "application/vnd.oasis.opendocument.graphics-template": {
+    "source": "iana",
+    "extensions": ["otg"]
+  },
+  "application/vnd.oasis.opendocument.image": {
+    "source": "iana",
+    "extensions": ["odi"]
+  },
+  "application/vnd.oasis.opendocument.image-template": {
+    "source": "iana",
+    "extensions": ["oti"]
+  },
+  "application/vnd.oasis.opendocument.presentation": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["odp"]
+  },
+  "application/vnd.oasis.opendocument.presentation-template": {
+    "source": "iana",
+    "extensions": ["otp"]
+  },
+  "application/vnd.oasis.opendocument.spreadsheet": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["ods"]
+  },
+  "application/vnd.oasis.opendocument.spreadsheet-template": {
+    "source": "iana",
+    "extensions": ["ots"]
+  },
+  "application/vnd.oasis.opendocument.text": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["odt"]
+  },
+  "application/vnd.oasis.opendocument.text-master": {
+    "source": "iana",
+    "extensions": ["odm"]
+  },
+  "application/vnd.oasis.opendocument.text-template": {
+    "source": "iana",
+    "extensions": ["ott"]
+  },
+  "application/vnd.oasis.opendocument.text-web": {
+    "source": "iana",
+    "extensions": ["oth"]
+  },
+  "application/vnd.obn": {
+    "source": "iana"
+  },
+  "application/vnd.oftn.l10n+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oipf.contentaccessdownload+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oipf.contentaccessstreaming+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oipf.cspg-hexbinary": {
+    "source": "iana"
+  },
+  "application/vnd.oipf.dae.svg+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oipf.dae.xhtml+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oipf.mippvcontrolmessage+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oipf.pae.gem": {
+    "source": "iana"
+  },
+  "application/vnd.oipf.spdiscovery+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oipf.spdlist+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oipf.ueprofile+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oipf.userprofile+xml": {
+    "source": "iana"
+  },
+  "application/vnd.olpc-sugar": {
+    "source": "iana",
+    "extensions": ["xo"]
+  },
+  "application/vnd.oma-scws-config": {
+    "source": "iana"
+  },
+  "application/vnd.oma-scws-http-request": {
+    "source": "iana"
+  },
+  "application/vnd.oma-scws-http-response": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.associated-procedure-parameter+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.drm-trigger+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.imd+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.ltkm": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.notification+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.provisioningtrigger": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.sgboot": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.sgdd+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.sgdu": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.simple-symbol-container": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.smartcard-trigger+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.sprov+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.stkm": {
+    "source": "iana"
+  },
+  "application/vnd.oma.cab-address-book+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.cab-feature-handler+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.cab-pcc+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.cab-subs-invite+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.cab-user-prefs+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.dcd": {
+    "source": "iana"
+  },
+  "application/vnd.oma.dcdc": {
+    "source": "iana"
+  },
+  "application/vnd.oma.dd2+xml": {
+    "source": "iana",
+    "extensions": ["dd2"]
+  },
+  "application/vnd.oma.drm.risd+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.group-usage-list+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.pal+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.poc.detailed-progress-report+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.poc.final-report+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.poc.groups+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.poc.invocation-descriptor+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.poc.optimized-progress-report+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.push": {
+    "source": "iana"
+  },
+  "application/vnd.oma.scidm.messages+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oma.xcap-directory+xml": {
+    "source": "iana"
+  },
+  "application/vnd.omads-email+xml": {
+    "source": "iana"
+  },
+  "application/vnd.omads-file+xml": {
+    "source": "iana"
+  },
+  "application/vnd.omads-folder+xml": {
+    "source": "iana"
+  },
+  "application/vnd.omaloc-supl-init": {
+    "source": "iana"
+  },
+  "application/vnd.onepager": {
+    "source": "iana"
+  },
+  "application/vnd.openblox.game+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openblox.game-binary": {
+    "source": "iana"
+  },
+  "application/vnd.openeye.oeb": {
+    "source": "iana"
+  },
+  "application/vnd.openofficeorg.extension": {
+    "source": "apache",
+    "extensions": ["oxt"]
+  },
+  "application/vnd.openxmlformats-officedocument.custom-properties+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.drawing+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.extended-properties+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml-template": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.presentation": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["pptx"]
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slide": {
+    "source": "iana",
+    "extensions": ["sldx"]
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
+    "source": "iana",
+    "extensions": ["ppsx"]
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.template": {
+    "source": "apache",
+    "extensions": ["potx"]
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml-template": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["xlsx"]
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
+    "source": "apache",
+    "extensions": ["xltx"]
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.theme+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.themeoverride+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.vmldrawing": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml-template": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["docx"]
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
+    "source": "apache",
+    "extensions": ["dotx"]
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-package.core-properties+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-package.relationships+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oracle.resource+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.orange.indata": {
+    "source": "iana"
+  },
+  "application/vnd.osa.netdeploy": {
+    "source": "iana"
+  },
+  "application/vnd.osgeo.mapguide.package": {
+    "source": "iana",
+    "extensions": ["mgp"]
+  },
+  "application/vnd.osgi.bundle": {
+    "source": "iana"
+  },
+  "application/vnd.osgi.dp": {
+    "source": "iana",
+    "extensions": ["dp"]
+  },
+  "application/vnd.osgi.subsystem": {
+    "source": "iana",
+    "extensions": ["esa"]
+  },
+  "application/vnd.otps.ct-kip+xml": {
+    "source": "iana"
+  },
+  "application/vnd.oxli.countgraph": {
+    "source": "iana"
+  },
+  "application/vnd.pagerduty+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.palm": {
+    "source": "iana",
+    "extensions": ["pdb","pqa","oprc"]
+  },
+  "application/vnd.panoply": {
+    "source": "iana"
+  },
+  "application/vnd.paos+xml": {
+    "source": "iana"
+  },
+  "application/vnd.paos.xml": {
+    "source": "apache"
+  },
+  "application/vnd.pawaafile": {
+    "source": "iana",
+    "extensions": ["paw"]
+  },
+  "application/vnd.pcos": {
+    "source": "iana"
+  },
+  "application/vnd.pg.format": {
+    "source": "iana",
+    "extensions": ["str"]
+  },
+  "application/vnd.pg.osasli": {
+    "source": "iana",
+    "extensions": ["ei6"]
+  },
+  "application/vnd.piaccess.application-licence": {
+    "source": "iana"
+  },
+  "application/vnd.picsel": {
+    "source": "iana",
+    "extensions": ["efif"]
+  },
+  "application/vnd.pmi.widget": {
+    "source": "iana",
+    "extensions": ["wg"]
+  },
+  "application/vnd.poc.group-advertisement+xml": {
+    "source": "iana"
+  },
+  "application/vnd.pocketlearn": {
+    "source": "iana",
+    "extensions": ["plf"]
+  },
+  "application/vnd.powerbuilder6": {
+    "source": "iana",
+    "extensions": ["pbd"]
+  },
+  "application/vnd.powerbuilder6-s": {
+    "source": "iana"
+  },
+  "application/vnd.powerbuilder7": {
+    "source": "iana"
+  },
+  "application/vnd.powerbuilder7-s": {
+    "source": "iana"
+  },
+  "application/vnd.powerbuilder75": {
+    "source": "iana"
+  },
+  "application/vnd.powerbuilder75-s": {
+    "source": "iana"
+  },
+  "application/vnd.preminet": {
+    "source": "iana"
+  },
+  "application/vnd.previewsystems.box": {
+    "source": "iana",
+    "extensions": ["box"]
+  },
+  "application/vnd.proteus.magazine": {
+    "source": "iana",
+    "extensions": ["mgz"]
+  },
+  "application/vnd.publishare-delta-tree": {
+    "source": "iana",
+    "extensions": ["qps"]
+  },
+  "application/vnd.pvi.ptid1": {
+    "source": "iana",
+    "extensions": ["ptid"]
+  },
+  "application/vnd.pwg-multiplexed": {
+    "source": "iana"
+  },
+  "application/vnd.pwg-xhtml-print+xml": {
+    "source": "iana"
+  },
+  "application/vnd.qualcomm.brew-app-res": {
+    "source": "iana"
+  },
+  "application/vnd.quark.quarkxpress": {
+    "source": "iana",
+    "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"]
+  },
+  "application/vnd.quobject-quoxdocument": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.moml+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml-audit+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml-audit-conf+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml-audit-conn+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml-audit-dialog+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml-audit-stream+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml-conf+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml-dialog+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml-dialog-base+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml-dialog-fax-detect+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml-dialog-group+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml-dialog-speech+xml": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.msml-dialog-transform+xml": {
+    "source": "iana"
+  },
+  "application/vnd.rainstor.data": {
+    "source": "iana"
+  },
+  "application/vnd.rapid": {
+    "source": "iana"
+  },
+  "application/vnd.realvnc.bed": {
+    "source": "iana",
+    "extensions": ["bed"]
+  },
+  "application/vnd.recordare.musicxml": {
+    "source": "iana",
+    "extensions": ["mxl"]
+  },
+  "application/vnd.recordare.musicxml+xml": {
+    "source": "iana",
+    "extensions": ["musicxml"]
+  },
+  "application/vnd.renlearn.rlprint": {
+    "source": "iana"
+  },
+  "application/vnd.rig.cryptonote": {
+    "source": "iana",
+    "extensions": ["cryptonote"]
+  },
+  "application/vnd.rim.cod": {
+    "source": "apache",
+    "extensions": ["cod"]
+  },
+  "application/vnd.rn-realmedia": {
+    "source": "apache",
+    "extensions": ["rm"]
+  },
+  "application/vnd.rn-realmedia-vbr": {
+    "source": "apache",
+    "extensions": ["rmvb"]
+  },
+  "application/vnd.route66.link66+xml": {
+    "source": "iana",
+    "extensions": ["link66"]
+  },
+  "application/vnd.rs-274x": {
+    "source": "iana"
+  },
+  "application/vnd.ruckus.download": {
+    "source": "iana"
+  },
+  "application/vnd.s3sms": {
+    "source": "iana"
+  },
+  "application/vnd.sailingtracker.track": {
+    "source": "iana",
+    "extensions": ["st"]
+  },
+  "application/vnd.sbm.cid": {
+    "source": "iana"
+  },
+  "application/vnd.sbm.mid2": {
+    "source": "iana"
+  },
+  "application/vnd.scribus": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.3df": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.csf": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.doc": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.eml": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.mht": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.net": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.ppt": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.tiff": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.xls": {
+    "source": "iana"
+  },
+  "application/vnd.sealedmedia.softseal.html": {
+    "source": "iana"
+  },
+  "application/vnd.sealedmedia.softseal.pdf": {
+    "source": "iana"
+  },
+  "application/vnd.seemail": {
+    "source": "iana",
+    "extensions": ["see"]
+  },
+  "application/vnd.sema": {
+    "source": "iana",
+    "extensions": ["sema"]
+  },
+  "application/vnd.semd": {
+    "source": "iana",
+    "extensions": ["semd"]
+  },
+  "application/vnd.semf": {
+    "source": "iana",
+    "extensions": ["semf"]
+  },
+  "application/vnd.shana.informed.formdata": {
+    "source": "iana",
+    "extensions": ["ifm"]
+  },
+  "application/vnd.shana.informed.formtemplate": {
+    "source": "iana",
+    "extensions": ["itp"]
+  },
+  "application/vnd.shana.informed.interchange": {
+    "source": "iana",
+    "extensions": ["iif"]
+  },
+  "application/vnd.shana.informed.package": {
+    "source": "iana",
+    "extensions": ["ipk"]
+  },
+  "application/vnd.simtech-mindmapper": {
+    "source": "iana",
+    "extensions": ["twd","twds"]
+  },
+  "application/vnd.siren+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.smaf": {
+    "source": "iana",
+    "extensions": ["mmf"]
+  },
+  "application/vnd.smart.notebook": {
+    "source": "iana"
+  },
+  "application/vnd.smart.teacher": {
+    "source": "iana",
+    "extensions": ["teacher"]
+  },
+  "application/vnd.software602.filler.form+xml": {
+    "source": "iana"
+  },
+  "application/vnd.software602.filler.form-xml-zip": {
+    "source": "iana"
+  },
+  "application/vnd.solent.sdkm+xml": {
+    "source": "iana",
+    "extensions": ["sdkm","sdkd"]
+  },
+  "application/vnd.spotfire.dxp": {
+    "source": "iana",
+    "extensions": ["dxp"]
+  },
+  "application/vnd.spotfire.sfs": {
+    "source": "iana",
+    "extensions": ["sfs"]
+  },
+  "application/vnd.sss-cod": {
+    "source": "iana"
+  },
+  "application/vnd.sss-dtf": {
+    "source": "iana"
+  },
+  "application/vnd.sss-ntf": {
+    "source": "iana"
+  },
+  "application/vnd.stardivision.calc": {
+    "source": "apache",
+    "extensions": ["sdc"]
+  },
+  "application/vnd.stardivision.draw": {
+    "source": "apache",
+    "extensions": ["sda"]
+  },
+  "application/vnd.stardivision.impress": {
+    "source": "apache",
+    "extensions": ["sdd"]
+  },
+  "application/vnd.stardivision.math": {
+    "source": "apache",
+    "extensions": ["smf"]
+  },
+  "application/vnd.stardivision.writer": {
+    "source": "apache",
+    "extensions": ["sdw","vor"]
+  },
+  "application/vnd.stardivision.writer-global": {
+    "source": "apache",
+    "extensions": ["sgl"]
+  },
+  "application/vnd.stepmania.package": {
+    "source": "iana",
+    "extensions": ["smzip"]
+  },
+  "application/vnd.stepmania.stepchart": {
+    "source": "iana",
+    "extensions": ["sm"]
+  },
+  "application/vnd.street-stream": {
+    "source": "iana"
+  },
+  "application/vnd.sun.wadl+xml": {
+    "source": "iana"
+  },
+  "application/vnd.sun.xml.calc": {
+    "source": "apache",
+    "extensions": ["sxc"]
+  },
+  "application/vnd.sun.xml.calc.template": {
+    "source": "apache",
+    "extensions": ["stc"]
+  },
+  "application/vnd.sun.xml.draw": {
+    "source": "apache",
+    "extensions": ["sxd"]
+  },
+  "application/vnd.sun.xml.draw.template": {
+    "source": "apache",
+    "extensions": ["std"]
+  },
+  "application/vnd.sun.xml.impress": {
+    "source": "apache",
+    "extensions": ["sxi"]
+  },
+  "application/vnd.sun.xml.impress.template": {
+    "source": "apache",
+    "extensions": ["sti"]
+  },
+  "application/vnd.sun.xml.math": {
+    "source": "apache",
+    "extensions": ["sxm"]
+  },
+  "application/vnd.sun.xml.writer": {
+    "source": "apache",
+    "extensions": ["sxw"]
+  },
+  "application/vnd.sun.xml.writer.global": {
+    "source": "apache",
+    "extensions": ["sxg"]
+  },
+  "application/vnd.sun.xml.writer.template": {
+    "source": "apache",
+    "extensions": ["stw"]
+  },
+  "application/vnd.sus-calendar": {
+    "source": "iana",
+    "extensions": ["sus","susp"]
+  },
+  "application/vnd.svd": {
+    "source": "iana",
+    "extensions": ["svd"]
+  },
+  "application/vnd.swiftview-ics": {
+    "source": "iana"
+  },
+  "application/vnd.symbian.install": {
+    "source": "apache",
+    "extensions": ["sis","sisx"]
+  },
+  "application/vnd.syncml+xml": {
+    "source": "iana",
+    "extensions": ["xsm"]
+  },
+  "application/vnd.syncml.dm+wbxml": {
+    "source": "iana",
+    "extensions": ["bdm"]
+  },
+  "application/vnd.syncml.dm+xml": {
+    "source": "iana",
+    "extensions": ["xdm"]
+  },
+  "application/vnd.syncml.dm.notification": {
+    "source": "iana"
+  },
+  "application/vnd.syncml.dmddf+wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.syncml.dmddf+xml": {
+    "source": "iana"
+  },
+  "application/vnd.syncml.dmtnds+wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.syncml.dmtnds+xml": {
+    "source": "iana"
+  },
+  "application/vnd.syncml.ds.notification": {
+    "source": "iana"
+  },
+  "application/vnd.tao.intent-module-archive": {
+    "source": "iana",
+    "extensions": ["tao"]
+  },
+  "application/vnd.tcpdump.pcap": {
+    "source": "iana",
+    "extensions": ["pcap","cap","dmp"]
+  },
+  "application/vnd.tmd.mediaflex.api+xml": {
+    "source": "iana"
+  },
+  "application/vnd.tml": {
+    "source": "iana"
+  },
+  "application/vnd.tmobile-livetv": {
+    "source": "iana",
+    "extensions": ["tmo"]
+  },
+  "application/vnd.trid.tpt": {
+    "source": "iana",
+    "extensions": ["tpt"]
+  },
+  "application/vnd.triscape.mxs": {
+    "source": "iana",
+    "extensions": ["mxs"]
+  },
+  "application/vnd.trueapp": {
+    "source": "iana",
+    "extensions": ["tra"]
+  },
+  "application/vnd.truedoc": {
+    "source": "iana"
+  },
+  "application/vnd.ubisoft.webplayer": {
+    "source": "iana"
+  },
+  "application/vnd.ufdl": {
+    "source": "iana",
+    "extensions": ["ufd","ufdl"]
+  },
+  "application/vnd.uiq.theme": {
+    "source": "iana",
+    "extensions": ["utz"]
+  },
+  "application/vnd.umajin": {
+    "source": "iana",
+    "extensions": ["umj"]
+  },
+  "application/vnd.unity": {
+    "source": "iana",
+    "extensions": ["unityweb"]
+  },
+  "application/vnd.uoml+xml": {
+    "source": "iana",
+    "extensions": ["uoml"]
+  },
+  "application/vnd.uplanet.alert": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.alert-wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.bearer-choice": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.bearer-choice-wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.cacheop": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.cacheop-wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.channel": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.channel-wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.list": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.list-wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.listcmd": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.listcmd-wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.signal": {
+    "source": "iana"
+  },
+  "application/vnd.uri-map": {
+    "source": "iana"
+  },
+  "application/vnd.valve.source.material": {
+    "source": "iana"
+  },
+  "application/vnd.vcx": {
+    "source": "iana",
+    "extensions": ["vcx"]
+  },
+  "application/vnd.vd-study": {
+    "source": "iana"
+  },
+  "application/vnd.vectorworks": {
+    "source": "iana"
+  },
+  "application/vnd.vel+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.verimatrix.vcas": {
+    "source": "iana"
+  },
+  "application/vnd.vidsoft.vidconference": {
+    "source": "iana"
+  },
+  "application/vnd.visio": {
+    "source": "iana",
+    "extensions": ["vsd","vst","vss","vsw"]
+  },
+  "application/vnd.visionary": {
+    "source": "iana",
+    "extensions": ["vis"]
+  },
+  "application/vnd.vividence.scriptfile": {
+    "source": "iana"
+  },
+  "application/vnd.vsf": {
+    "source": "iana",
+    "extensions": ["vsf"]
+  },
+  "application/vnd.wap.sic": {
+    "source": "iana"
+  },
+  "application/vnd.wap.slc": {
+    "source": "iana"
+  },
+  "application/vnd.wap.wbxml": {
+    "source": "iana",
+    "extensions": ["wbxml"]
+  },
+  "application/vnd.wap.wmlc": {
+    "source": "iana",
+    "extensions": ["wmlc"]
+  },
+  "application/vnd.wap.wmlscriptc": {
+    "source": "iana",
+    "extensions": ["wmlsc"]
+  },
+  "application/vnd.webturbo": {
+    "source": "iana",
+    "extensions": ["wtb"]
+  },
+  "application/vnd.wfa.p2p": {
+    "source": "iana"
+  },
+  "application/vnd.wfa.wsc": {
+    "source": "iana"
+  },
+  "application/vnd.windows.devicepairing": {
+    "source": "iana"
+  },
+  "application/vnd.wmc": {
+    "source": "iana"
+  },
+  "application/vnd.wmf.bootstrap": {
+    "source": "iana"
+  },
+  "application/vnd.wolfram.mathematica": {
+    "source": "iana"
+  },
+  "application/vnd.wolfram.mathematica.package": {
+    "source": "iana"
+  },
+  "application/vnd.wolfram.player": {
+    "source": "iana",
+    "extensions": ["nbp"]
+  },
+  "application/vnd.wordperfect": {
+    "source": "iana",
+    "extensions": ["wpd"]
+  },
+  "application/vnd.wqd": {
+    "source": "iana",
+    "extensions": ["wqd"]
+  },
+  "application/vnd.wrq-hp3000-labelled": {
+    "source": "iana"
+  },
+  "application/vnd.wt.stf": {
+    "source": "iana",
+    "extensions": ["stf"]
+  },
+  "application/vnd.wv.csp+wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.wv.csp+xml": {
+    "source": "iana"
+  },
+  "application/vnd.wv.ssp+xml": {
+    "source": "iana"
+  },
+  "application/vnd.xacml+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.xara": {
+    "source": "iana",
+    "extensions": ["xar"]
+  },
+  "application/vnd.xfdl": {
+    "source": "iana",
+    "extensions": ["xfdl"]
+  },
+  "application/vnd.xfdl.webform": {
+    "source": "iana"
+  },
+  "application/vnd.xmi+xml": {
+    "source": "iana"
+  },
+  "application/vnd.xmpie.cpkg": {
+    "source": "iana"
+  },
+  "application/vnd.xmpie.dpkg": {
+    "source": "iana"
+  },
+  "application/vnd.xmpie.plan": {
+    "source": "iana"
+  },
+  "application/vnd.xmpie.ppkg": {
+    "source": "iana"
+  },
+  "application/vnd.xmpie.xlim": {
+    "source": "iana"
+  },
+  "application/vnd.yamaha.hv-dic": {
+    "source": "iana",
+    "extensions": ["hvd"]
+  },
+  "application/vnd.yamaha.hv-script": {
+    "source": "iana",
+    "extensions": ["hvs"]
+  },
+  "application/vnd.yamaha.hv-voice": {
+    "source": "iana",
+    "extensions": ["hvp"]
+  },
+  "application/vnd.yamaha.openscoreformat": {
+    "source": "iana",
+    "extensions": ["osf"]
+  },
+  "application/vnd.yamaha.openscoreformat.osfpvg+xml": {
+    "source": "iana",
+    "extensions": ["osfpvg"]
+  },
+  "application/vnd.yamaha.remote-setup": {
+    "source": "iana"
+  },
+  "application/vnd.yamaha.smaf-audio": {
+    "source": "iana",
+    "extensions": ["saf"]
+  },
+  "application/vnd.yamaha.smaf-phrase": {
+    "source": "iana",
+    "extensions": ["spf"]
+  },
+  "application/vnd.yamaha.through-ngn": {
+    "source": "iana"
+  },
+  "application/vnd.yamaha.tunnel-udpencap": {
+    "source": "iana"
+  },
+  "application/vnd.yaoweme": {
+    "source": "iana"
+  },
+  "application/vnd.yellowriver-custom-menu": {
+    "source": "iana",
+    "extensions": ["cmp"]
+  },
+  "application/vnd.zul": {
+    "source": "iana",
+    "extensions": ["zir","zirz"]
+  },
+  "application/vnd.zzazz.deck+xml": {
+    "source": "iana",
+    "extensions": ["zaz"]
+  },
+  "application/voicexml+xml": {
+    "source": "iana",
+    "extensions": ["vxml"]
+  },
+  "application/vq-rtcpxr": {
+    "source": "iana"
+  },
+  "application/watcherinfo+xml": {
+    "source": "iana"
+  },
+  "application/whoispp-query": {
+    "source": "iana"
+  },
+  "application/whoispp-response": {
+    "source": "iana"
+  },
+  "application/widget": {
+    "source": "iana",
+    "extensions": ["wgt"]
+  },
+  "application/winhlp": {
+    "source": "apache",
+    "extensions": ["hlp"]
+  },
+  "application/wita": {
+    "source": "iana"
+  },
+  "application/wordperfect5.1": {
+    "source": "iana"
+  },
+  "application/wsdl+xml": {
+    "source": "iana",
+    "extensions": ["wsdl"]
+  },
+  "application/wspolicy+xml": {
+    "source": "iana",
+    "extensions": ["wspolicy"]
+  },
+  "application/x-7z-compressed": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["7z"]
+  },
+  "application/x-abiword": {
+    "source": "apache",
+    "extensions": ["abw"]
+  },
+  "application/x-ace-compressed": {
+    "source": "apache",
+    "extensions": ["ace"]
+  },
+  "application/x-amf": {
+    "source": "apache"
+  },
+  "application/x-apple-diskimage": {
+    "source": "apache",
+    "extensions": ["dmg"]
+  },
+  "application/x-authorware-bin": {
+    "source": "apache",
+    "extensions": ["aab","x32","u32","vox"]
+  },
+  "application/x-authorware-map": {
+    "source": "apache",
+    "extensions": ["aam"]
+  },
+  "application/x-authorware-seg": {
+    "source": "apache",
+    "extensions": ["aas"]
+  },
+  "application/x-bcpio": {
+    "source": "apache",
+    "extensions": ["bcpio"]
+  },
+  "application/x-bdoc": {
+    "compressible": false,
+    "extensions": ["bdoc"]
+  },
+  "application/x-bittorrent": {
+    "source": "apache",
+    "extensions": ["torrent"]
+  },
+  "application/x-blorb": {
+    "source": "apache",
+    "extensions": ["blb","blorb"]
+  },
+  "application/x-bzip": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["bz"]
+  },
+  "application/x-bzip2": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["bz2","boz"]
+  },
+  "application/x-cbr": {
+    "source": "apache",
+    "extensions": ["cbr","cba","cbt","cbz","cb7"]
+  },
+  "application/x-cdlink": {
+    "source": "apache",
+    "extensions": ["vcd"]
+  },
+  "application/x-cfs-compressed": {
+    "source": "apache",
+    "extensions": ["cfs"]
+  },
+  "application/x-chat": {
+    "source": "apache",
+    "extensions": ["chat"]
+  },
+  "application/x-chess-pgn": {
+    "source": "apache",
+    "extensions": ["pgn"]
+  },
+  "application/x-chrome-extension": {
+    "extensions": ["crx"]
+  },
+  "application/x-cocoa": {
+    "source": "nginx",
+    "extensions": ["cco"]
+  },
+  "application/x-compress": {
+    "source": "apache"
+  },
+  "application/x-conference": {
+    "source": "apache",
+    "extensions": ["nsc"]
+  },
+  "application/x-cpio": {
+    "source": "apache",
+    "extensions": ["cpio"]
+  },
+  "application/x-csh": {
+    "source": "apache",
+    "extensions": ["csh"]
+  },
+  "application/x-deb": {
+    "compressible": false
+  },
+  "application/x-debian-package": {
+    "source": "apache",
+    "extensions": ["deb","udeb"]
+  },
+  "application/x-dgc-compressed": {
+    "source": "apache",
+    "extensions": ["dgc"]
+  },
+  "application/x-director": {
+    "source": "apache",
+    "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]
+  },
+  "application/x-doom": {
+    "source": "apache",
+    "extensions": ["wad"]
+  },
+  "application/x-dtbncx+xml": {
+    "source": "apache",
+    "extensions": ["ncx"]
+  },
+  "application/x-dtbook+xml": {
+    "source": "apache",
+    "extensions": ["dtb"]
+  },
+  "application/x-dtbresource+xml": {
+    "source": "apache",
+    "extensions": ["res"]
+  },
+  "application/x-dvi": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["dvi"]
+  },
+  "application/x-envoy": {
+    "source": "apache",
+    "extensions": ["evy"]
+  },
+  "application/x-eva": {
+    "source": "apache",
+    "extensions": ["eva"]
+  },
+  "application/x-font-bdf": {
+    "source": "apache",
+    "extensions": ["bdf"]
+  },
+  "application/x-font-dos": {
+    "source": "apache"
+  },
+  "application/x-font-framemaker": {
+    "source": "apache"
+  },
+  "application/x-font-ghostscript": {
+    "source": "apache",
+    "extensions": ["gsf"]
+  },
+  "application/x-font-libgrx": {
+    "source": "apache"
+  },
+  "application/x-font-linux-psf": {
+    "source": "apache",
+    "extensions": ["psf"]
+  },
+  "application/x-font-otf": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["otf"]
+  },
+  "application/x-font-pcf": {
+    "source": "apache",
+    "extensions": ["pcf"]
+  },
+  "application/x-font-snf": {
+    "source": "apache",
+    "extensions": ["snf"]
+  },
+  "application/x-font-speedo": {
+    "source": "apache"
+  },
+  "application/x-font-sunos-news": {
+    "source": "apache"
+  },
+  "application/x-font-ttf": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["ttf","ttc"]
+  },
+  "application/x-font-type1": {
+    "source": "apache",
+    "extensions": ["pfa","pfb","pfm","afm"]
+  },
+  "application/x-font-vfont": {
+    "source": "apache"
+  },
+  "application/x-freearc": {
+    "source": "apache",
+    "extensions": ["arc"]
+  },
+  "application/x-futuresplash": {
+    "source": "apache",
+    "extensions": ["spl"]
+  },
+  "application/x-gca-compressed": {
+    "source": "apache",
+    "extensions": ["gca"]
+  },
+  "application/x-glulx": {
+    "source": "apache",
+    "extensions": ["ulx"]
+  },
+  "application/x-gnumeric": {
+    "source": "apache",
+    "extensions": ["gnumeric"]
+  },
+  "application/x-gramps-xml": {
+    "source": "apache",
+    "extensions": ["gramps"]
+  },
+  "application/x-gtar": {
+    "source": "apache",
+    "extensions": ["gtar"]
+  },
+  "application/x-gzip": {
+    "source": "apache"
+  },
+  "application/x-hdf": {
+    "source": "apache",
+    "extensions": ["hdf"]
+  },
+  "application/x-httpd-php": {
+    "compressible": true,
+    "extensions": ["php"]
+  },
+  "application/x-install-instructions": {
+    "source": "apache",
+    "extensions": ["install"]
+  },
+  "application/x-iso9660-image": {
+    "source": "apache",
+    "extensions": ["iso"]
+  },
+  "application/x-java-archive-diff": {
+    "source": "nginx",
+    "extensions": ["jardiff"]
+  },
+  "application/x-java-jnlp-file": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["jnlp"]
+  },
+  "application/x-javascript": {
+    "compressible": true
+  },
+  "application/x-latex": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["latex"]
+  },
+  "application/x-lua-bytecode": {
+    "extensions": ["luac"]
+  },
+  "application/x-lzh-compressed": {
+    "source": "apache",
+    "extensions": ["lzh","lha"]
+  },
+  "application/x-makeself": {
+    "source": "nginx",
+    "extensions": ["run"]
+  },
+  "application/x-mie": {
+    "source": "apache",
+    "extensions": ["mie"]
+  },
+  "application/x-mobipocket-ebook": {
+    "source": "apache",
+    "extensions": ["prc","mobi"]
+  },
+  "application/x-mpegurl": {
+    "compressible": false
+  },
+  "application/x-ms-application": {
+    "source": "apache",
+    "extensions": ["application"]
+  },
+  "application/x-ms-shortcut": {
+    "source": "apache",
+    "extensions": ["lnk"]
+  },
+  "application/x-ms-wmd": {
+    "source": "apache",
+    "extensions": ["wmd"]
+  },
+  "application/x-ms-wmz": {
+    "source": "apache",
+    "extensions": ["wmz"]
+  },
+  "application/x-ms-xbap": {
+    "source": "apache",
+    "extensions": ["xbap"]
+  },
+  "application/x-msaccess": {
+    "source": "apache",
+    "extensions": ["mdb"]
+  },
+  "application/x-msbinder": {
+    "source": "apache",
+    "extensions": ["obd"]
+  },
+  "application/x-mscardfile": {
+    "source": "apache",
+    "extensions": ["crd"]
+  },
+  "application/x-msclip": {
+    "source": "apache",
+    "extensions": ["clp"]
+  },
+  "application/x-msdos-program": {
+    "extensions": ["exe"]
+  },
+  "application/x-msdownload": {
+    "source": "apache",
+    "extensions": ["exe","dll","com","bat","msi"]
+  },
+  "application/x-msmediaview": {
+    "source": "apache",
+    "extensions": ["mvb","m13","m14"]
+  },
+  "application/x-msmetafile": {
+    "source": "apache",
+    "extensions": ["wmf","wmz","emf","emz"]
+  },
+  "application/x-msmoney": {
+    "source": "apache",
+    "extensions": ["mny"]
+  },
+  "application/x-mspublisher": {
+    "source": "apache",
+    "extensions": ["pub"]
+  },
+  "application/x-msschedule": {
+    "source": "apache",
+    "extensions": ["scd"]
+  },
+  "application/x-msterminal": {
+    "source": "apache",
+    "extensions": ["trm"]
+  },
+  "application/x-mswrite": {
+    "source": "apache",
+    "extensions": ["wri"]
+  },
+  "application/x-netcdf": {
+    "source": "apache",
+    "extensions": ["nc","cdf"]
+  },
+  "application/x-ns-proxy-autoconfig": {
+    "compressible": true,
+    "extensions": ["pac"]
+  },
+  "application/x-nzb": {
+    "source": "apache",
+    "extensions": ["nzb"]
+  },
+  "application/x-perl": {
+    "source": "nginx",
+    "extensions": ["pl","pm"]
+  },
+  "application/x-pilot": {
+    "source": "nginx",
+    "extensions": ["prc","pdb"]
+  },
+  "application/x-pkcs12": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["p12","pfx"]
+  },
+  "application/x-pkcs7-certificates": {
+    "source": "apache",
+    "extensions": ["p7b","spc"]
+  },
+  "application/x-pkcs7-certreqresp": {
+    "source": "apache",
+    "extensions": ["p7r"]
+  },
+  "application/x-rar-compressed": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["rar"]
+  },
+  "application/x-redhat-package-manager": {
+    "source": "nginx",
+    "extensions": ["rpm"]
+  },
+  "application/x-research-info-systems": {
+    "source": "apache",
+    "extensions": ["ris"]
+  },
+  "application/x-sea": {
+    "source": "nginx",
+    "extensions": ["sea"]
+  },
+  "application/x-sh": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["sh"]
+  },
+  "application/x-shar": {
+    "source": "apache",
+    "extensions": ["shar"]
+  },
+  "application/x-shockwave-flash": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["swf"]
+  },
+  "application/x-silverlight-app": {
+    "source": "apache",
+    "extensions": ["xap"]
+  },
+  "application/x-sql": {
+    "source": "apache",
+    "extensions": ["sql"]
+  },
+  "application/x-stuffit": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["sit"]
+  },
+  "application/x-stuffitx": {
+    "source": "apache",
+    "extensions": ["sitx"]
+  },
+  "application/x-subrip": {
+    "source": "apache",
+    "extensions": ["srt"]
+  },
+  "application/x-sv4cpio": {
+    "source": "apache",
+    "extensions": ["sv4cpio"]
+  },
+  "application/x-sv4crc": {
+    "source": "apache",
+    "extensions": ["sv4crc"]
+  },
+  "application/x-t3vm-image": {
+    "source": "apache",
+    "extensions": ["t3"]
+  },
+  "application/x-tads": {
+    "source": "apache",
+    "extensions": ["gam"]
+  },
+  "application/x-tar": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["tar"]
+  },
+  "application/x-tcl": {
+    "source": "apache",
+    "extensions": ["tcl","tk"]
+  },
+  "application/x-tex": {
+    "source": "apache",
+    "extensions": ["tex"]
+  },
+  "application/x-tex-tfm": {
+    "source": "apache",
+    "extensions": ["tfm"]
+  },
+  "application/x-texinfo": {
+    "source": "apache",
+    "extensions": ["texinfo","texi"]
+  },
+  "application/x-tgif": {
+    "source": "apache",
+    "extensions": ["obj"]
+  },
+  "application/x-ustar": {
+    "source": "apache",
+    "extensions": ["ustar"]
+  },
+  "application/x-wais-source": {
+    "source": "apache",
+    "extensions": ["src"]
+  },
+  "application/x-web-app-manifest+json": {
+    "compressible": true,
+    "extensions": ["webapp"]
+  },
+  "application/x-www-form-urlencoded": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/x-x509-ca-cert": {
+    "source": "apache",
+    "extensions": ["der","crt","pem"]
+  },
+  "application/x-xfig": {
+    "source": "apache",
+    "extensions": ["fig"]
+  },
+  "application/x-xliff+xml": {
+    "source": "apache",
+    "extensions": ["xlf"]
+  },
+  "application/x-xpinstall": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["xpi"]
+  },
+  "application/x-xz": {
+    "source": "apache",
+    "extensions": ["xz"]
+  },
+  "application/x-zmachine": {
+    "source": "apache",
+    "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"]
+  },
+  "application/x400-bp": {
+    "source": "iana"
+  },
+  "application/xacml+xml": {
+    "source": "iana"
+  },
+  "application/xaml+xml": {
+    "source": "apache",
+    "extensions": ["xaml"]
+  },
+  "application/xcap-att+xml": {
+    "source": "iana"
+  },
+  "application/xcap-caps+xml": {
+    "source": "iana"
+  },
+  "application/xcap-diff+xml": {
+    "source": "iana",
+    "extensions": ["xdf"]
+  },
+  "application/xcap-el+xml": {
+    "source": "iana"
+  },
+  "application/xcap-error+xml": {
+    "source": "iana"
+  },
+  "application/xcap-ns+xml": {
+    "source": "iana"
+  },
+  "application/xcon-conference-info+xml": {
+    "source": "iana"
+  },
+  "application/xcon-conference-info-diff+xml": {
+    "source": "iana"
+  },
+  "application/xenc+xml": {
+    "source": "iana",
+    "extensions": ["xenc"]
+  },
+  "application/xhtml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xhtml","xht"]
+  },
+  "application/xhtml-voice+xml": {
+    "source": "apache"
+  },
+  "application/xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xml","xsl","xsd","rng"]
+  },
+  "application/xml-dtd": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["dtd"]
+  },
+  "application/xml-external-parsed-entity": {
+    "source": "iana"
+  },
+  "application/xml-patch+xml": {
+    "source": "iana"
+  },
+  "application/xmpp+xml": {
+    "source": "iana"
+  },
+  "application/xop+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xop"]
+  },
+  "application/xproc+xml": {
+    "source": "apache",
+    "extensions": ["xpl"]
+  },
+  "application/xslt+xml": {
+    "source": "iana",
+    "extensions": ["xslt"]
+  },
+  "application/xspf+xml": {
+    "source": "apache",
+    "extensions": ["xspf"]
+  },
+  "application/xv+xml": {
+    "source": "iana",
+    "extensions": ["mxml","xhvml","xvml","xvm"]
+  },
+  "application/yang": {
+    "source": "iana",
+    "extensions": ["yang"]
+  },
+  "application/yin+xml": {
+    "source": "iana",
+    "extensions": ["yin"]
+  },
+  "application/zip": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["zip"]
+  },
+  "application/zlib": {
+    "source": "iana"
+  },
+  "audio/1d-interleaved-parityfec": {
+    "source": "iana"
+  },
+  "audio/32kadpcm": {
+    "source": "iana"
+  },
+  "audio/3gpp": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["3gpp"]
+  },
+  "audio/3gpp2": {
+    "source": "iana"
+  },
+  "audio/ac3": {
+    "source": "iana"
+  },
+  "audio/adpcm": {
+    "source": "apache",
+    "extensions": ["adp"]
+  },
+  "audio/amr": {
+    "source": "iana"
+  },
+  "audio/amr-wb": {
+    "source": "iana"
+  },
+  "audio/amr-wb+": {
+    "source": "iana"
+  },
+  "audio/aptx": {
+    "source": "iana"
+  },
+  "audio/asc": {
+    "source": "iana"
+  },
+  "audio/atrac-advanced-lossless": {
+    "source": "iana"
+  },
+  "audio/atrac-x": {
+    "source": "iana"
+  },
+  "audio/atrac3": {
+    "source": "iana"
+  },
+  "audio/basic": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["au","snd"]
+  },
+  "audio/bv16": {
+    "source": "iana"
+  },
+  "audio/bv32": {
+    "source": "iana"
+  },
+  "audio/clearmode": {
+    "source": "iana"
+  },
+  "audio/cn": {
+    "source": "iana"
+  },
+  "audio/dat12": {
+    "source": "iana"
+  },
+  "audio/dls": {
+    "source": "iana"
+  },
+  "audio/dsr-es201108": {
+    "source": "iana"
+  },
+  "audio/dsr-es202050": {
+    "source": "iana"
+  },
+  "audio/dsr-es202211": {
+    "source": "iana"
+  },
+  "audio/dsr-es202212": {
+    "source": "iana"
+  },
+  "audio/dv": {
+    "source": "iana"
+  },
+  "audio/dvi4": {
+    "source": "iana"
+  },
+  "audio/eac3": {
+    "source": "iana"
+  },
+  "audio/encaprtp": {
+    "source": "iana"
+  },
+  "audio/evrc": {
+    "source": "iana"
+  },
+  "audio/evrc-qcp": {
+    "source": "iana"
+  },
+  "audio/evrc0": {
+    "source": "iana"
+  },
+  "audio/evrc1": {
+    "source": "iana"
+  },
+  "audio/evrcb": {
+    "source": "iana"
+  },
+  "audio/evrcb0": {
+    "source": "iana"
+  },
+  "audio/evrcb1": {
+    "source": "iana"
+  },
+  "audio/evrcnw": {
+    "source": "iana"
+  },
+  "audio/evrcnw0": {
+    "source": "iana"
+  },
+  "audio/evrcnw1": {
+    "source": "iana"
+  },
+  "audio/evrcwb": {
+    "source": "iana"
+  },
+  "audio/evrcwb0": {
+    "source": "iana"
+  },
+  "audio/evrcwb1": {
+    "source": "iana"
+  },
+  "audio/evs": {
+    "source": "iana"
+  },
+  "audio/fwdred": {
+    "source": "iana"
+  },
+  "audio/g711-0": {
+    "source": "iana"
+  },
+  "audio/g719": {
+    "source": "iana"
+  },
+  "audio/g722": {
+    "source": "iana"
+  },
+  "audio/g7221": {
+    "source": "iana"
+  },
+  "audio/g723": {
+    "source": "iana"
+  },
+  "audio/g726-16": {
+    "source": "iana"
+  },
+  "audio/g726-24": {
+    "source": "iana"
+  },
+  "audio/g726-32": {
+    "source": "iana"
+  },
+  "audio/g726-40": {
+    "source": "iana"
+  },
+  "audio/g728": {
+    "source": "iana"
+  },
+  "audio/g729": {
+    "source": "iana"
+  },
+  "audio/g7291": {
+    "source": "iana"
+  },
+  "audio/g729d": {
+    "source": "iana"
+  },
+  "audio/g729e": {
+    "source": "iana"
+  },
+  "audio/gsm": {
+    "source": "iana"
+  },
+  "audio/gsm-efr": {
+    "source": "iana"
+  },
+  "audio/gsm-hr-08": {
+    "source": "iana"
+  },
+  "audio/ilbc": {
+    "source": "iana"
+  },
+  "audio/ip-mr_v2.5": {
+    "source": "iana"
+  },
+  "audio/isac": {
+    "source": "apache"
+  },
+  "audio/l16": {
+    "source": "iana"
+  },
+  "audio/l20": {
+    "source": "iana"
+  },
+  "audio/l24": {
+    "source": "iana",
+    "compressible": false
+  },
+  "audio/l8": {
+    "source": "iana"
+  },
+  "audio/lpc": {
+    "source": "iana"
+  },
+  "audio/midi": {
+    "source": "apache",
+    "extensions": ["mid","midi","kar","rmi"]
+  },
+  "audio/mobile-xmf": {
+    "source": "iana"
+  },
+  "audio/mp4": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["m4a","mp4a"]
+  },
+  "audio/mp4a-latm": {
+    "source": "iana"
+  },
+  "audio/mpa": {
+    "source": "iana"
+  },
+  "audio/mpa-robust": {
+    "source": "iana"
+  },
+  "audio/mpeg": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"]
+  },
+  "audio/mpeg4-generic": {
+    "source": "iana"
+  },
+  "audio/musepack": {
+    "source": "apache"
+  },
+  "audio/ogg": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["oga","ogg","spx"]
+  },
+  "audio/opus": {
+    "source": "iana"
+  },
+  "audio/parityfec": {
+    "source": "iana"
+  },
+  "audio/pcma": {
+    "source": "iana"
+  },
+  "audio/pcma-wb": {
+    "source": "iana"
+  },
+  "audio/pcmu": {
+    "source": "iana"
+  },
+  "audio/pcmu-wb": {
+    "source": "iana"
+  },
+  "audio/prs.sid": {
+    "source": "iana"
+  },
+  "audio/qcelp": {
+    "source": "iana"
+  },
+  "audio/raptorfec": {
+    "source": "iana"
+  },
+  "audio/red": {
+    "source": "iana"
+  },
+  "audio/rtp-enc-aescm128": {
+    "source": "iana"
+  },
+  "audio/rtp-midi": {
+    "source": "iana"
+  },
+  "audio/rtploopback": {
+    "source": "iana"
+  },
+  "audio/rtx": {
+    "source": "iana"
+  },
+  "audio/s3m": {
+    "source": "apache",
+    "extensions": ["s3m"]
+  },
+  "audio/silk": {
+    "source": "apache",
+    "extensions": ["sil"]
+  },
+  "audio/smv": {
+    "source": "iana"
+  },
+  "audio/smv-qcp": {
+    "source": "iana"
+  },
+  "audio/smv0": {
+    "source": "iana"
+  },
+  "audio/sp-midi": {
+    "source": "iana"
+  },
+  "audio/speex": {
+    "source": "iana"
+  },
+  "audio/t140c": {
+    "source": "iana"
+  },
+  "audio/t38": {
+    "source": "iana"
+  },
+  "audio/telephone-event": {
+    "source": "iana"
+  },
+  "audio/tone": {
+    "source": "iana"
+  },
+  "audio/uemclip": {
+    "source": "iana"
+  },
+  "audio/ulpfec": {
+    "source": "iana"
+  },
+  "audio/vdvi": {
+    "source": "iana"
+  },
+  "audio/vmr-wb": {
+    "source": "iana"
+  },
+  "audio/vnd.3gpp.iufp": {
+    "source": "iana"
+  },
+  "audio/vnd.4sb": {
+    "source": "iana"
+  },
+  "audio/vnd.audiokoz": {
+    "source": "iana"
+  },
+  "audio/vnd.celp": {
+    "source": "iana"
+  },
+  "audio/vnd.cisco.nse": {
+    "source": "iana"
+  },
+  "audio/vnd.cmles.radio-events": {
+    "source": "iana"
+  },
+  "audio/vnd.cns.anp1": {
+    "source": "iana"
+  },
+  "audio/vnd.cns.inf1": {
+    "source": "iana"
+  },
+  "audio/vnd.dece.audio": {
+    "source": "iana",
+    "extensions": ["uva","uvva"]
+  },
+  "audio/vnd.digital-winds": {
+    "source": "iana",
+    "extensions": ["eol"]
+  },
+  "audio/vnd.dlna.adts": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.heaac.1": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.heaac.2": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.mlp": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.mps": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.pl2": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.pl2x": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.pl2z": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.pulse.1": {
+    "source": "iana"
+  },
+  "audio/vnd.dra": {
+    "source": "iana",
+    "extensions": ["dra"]
+  },
+  "audio/vnd.dts": {
+    "source": "iana",
+    "extensions": ["dts"]
+  },
+  "audio/vnd.dts.hd": {
+    "source": "iana",
+    "extensions": ["dtshd"]
+  },
+  "audio/vnd.dvb.file": {
+    "source": "iana"
+  },
+  "audio/vnd.everad.plj": {
+    "source": "iana"
+  },
+  "audio/vnd.hns.audio": {
+    "source": "iana"
+  },
+  "audio/vnd.lucent.voice": {
+    "source": "iana",
+    "extensions": ["lvp"]
+  },
+  "audio/vnd.ms-playready.media.pya": {
+    "source": "iana",
+    "extensions": ["pya"]
+  },
+  "audio/vnd.nokia.mobile-xmf": {
+    "source": "iana"
+  },
+  "audio/vnd.nortel.vbk": {
+    "source": "iana"
+  },
+  "audio/vnd.nuera.ecelp4800": {
+    "source": "iana",
+    "extensions": ["ecelp4800"]
+  },
+  "audio/vnd.nuera.ecelp7470": {
+    "source": "iana",
+    "extensions": ["ecelp7470"]
+  },
+  "audio/vnd.nuera.ecelp9600": {
+    "source": "iana",
+    "extensions": ["ecelp9600"]
+  },
+  "audio/vnd.octel.sbc": {
+    "source": "iana"
+  },
+  "audio/vnd.qcelp": {
+    "source": "iana"
+  },
+  "audio/vnd.rhetorex.32kadpcm": {
+    "source": "iana"
+  },
+  "audio/vnd.rip": {
+    "source": "iana",
+    "extensions": ["rip"]
+  },
+  "audio/vnd.rn-realaudio": {
+    "compressible": false
+  },
+  "audio/vnd.sealedmedia.softseal.mpeg": {
+    "source": "iana"
+  },
+  "audio/vnd.vmx.cvsd": {
+    "source": "iana"
+  },
+  "audio/vnd.wave": {
+    "compressible": false
+  },
+  "audio/vorbis": {
+    "source": "iana",
+    "compressible": false
+  },
+  "audio/vorbis-config": {
+    "source": "iana"
+  },
+  "audio/wav": {
+    "compressible": false,
+    "extensions": ["wav"]
+  },
+  "audio/wave": {
+    "compressible": false,
+    "extensions": ["wav"]
+  },
+  "audio/webm": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["weba"]
+  },
+  "audio/x-aac": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["aac"]
+  },
+  "audio/x-aiff": {
+    "source": "apache",
+    "extensions": ["aif","aiff","aifc"]
+  },
+  "audio/x-caf": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["caf"]
+  },
+  "audio/x-flac": {
+    "source": "apache",
+    "extensions": ["flac"]
+  },
+  "audio/x-m4a": {
+    "source": "nginx",
+    "extensions": ["m4a"]
+  },
+  "audio/x-matroska": {
+    "source": "apache",
+    "extensions": ["mka"]
+  },
+  "audio/x-mpegurl": {
+    "source": "apache",
+    "extensions": ["m3u"]
+  },
+  "audio/x-ms-wax": {
+    "source": "apache",
+    "extensions": ["wax"]
+  },
+  "audio/x-ms-wma": {
+    "source": "apache",
+    "extensions": ["wma"]
+  },
+  "audio/x-pn-realaudio": {
+    "source": "apache",
+    "extensions": ["ram","ra"]
+  },
+  "audio/x-pn-realaudio-plugin": {
+    "source": "apache",
+    "extensions": ["rmp"]
+  },
+  "audio/x-realaudio": {
+    "source": "nginx",
+    "extensions": ["ra"]
+  },
+  "audio/x-tta": {
+    "source": "apache"
+  },
+  "audio/x-wav": {
+    "source": "apache",
+    "extensions": ["wav"]
+  },
+  "audio/xm": {
+    "source": "apache",
+    "extensions": ["xm"]
+  },
+  "chemical/x-cdx": {
+    "source": "apache",
+    "extensions": ["cdx"]
+  },
+  "chemical/x-cif": {
+    "source": "apache",
+    "extensions": ["cif"]
+  },
+  "chemical/x-cmdf": {
+    "source": "apache",
+    "extensions": ["cmdf"]
+  },
+  "chemical/x-cml": {
+    "source": "apache",
+    "extensions": ["cml"]
+  },
+  "chemical/x-csml": {
+    "source": "apache",
+    "extensions": ["csml"]
+  },
+  "chemical/x-pdb": {
+    "source": "apache"
+  },
+  "chemical/x-xyz": {
+    "source": "apache",
+    "extensions": ["xyz"]
+  },
+  "font/opentype": {
+    "compressible": true,
+    "extensions": ["otf"]
+  },
+  "image/bmp": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["bmp"]
+  },
+  "image/cgm": {
+    "source": "iana",
+    "extensions": ["cgm"]
+  },
+  "image/fits": {
+    "source": "iana"
+  },
+  "image/g3fax": {
+    "source": "iana",
+    "extensions": ["g3"]
+  },
+  "image/gif": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["gif"]
+  },
+  "image/ief": {
+    "source": "iana",
+    "extensions": ["ief"]
+  },
+  "image/jp2": {
+    "source": "iana"
+  },
+  "image/jpeg": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["jpeg","jpg","jpe"]
+  },
+  "image/jpm": {
+    "source": "iana"
+  },
+  "image/jpx": {
+    "source": "iana"
+  },
+  "image/ktx": {
+    "source": "iana",
+    "extensions": ["ktx"]
+  },
+  "image/naplps": {
+    "source": "iana"
+  },
+  "image/pjpeg": {
+    "compressible": false
+  },
+  "image/png": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["png"]
+  },
+  "image/prs.btif": {
+    "source": "iana",
+    "extensions": ["btif"]
+  },
+  "image/prs.pti": {
+    "source": "iana"
+  },
+  "image/pwg-raster": {
+    "source": "iana"
+  },
+  "image/sgi": {
+    "source": "apache",
+    "extensions": ["sgi"]
+  },
+  "image/svg+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["svg","svgz"]
+  },
+  "image/t38": {
+    "source": "iana"
+  },
+  "image/tiff": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["tiff","tif"]
+  },
+  "image/tiff-fx": {
+    "source": "iana"
+  },
+  "image/vnd.adobe.photoshop": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["psd"]
+  },
+  "image/vnd.airzip.accelerator.azv": {
+    "source": "iana"
+  },
+  "image/vnd.cns.inf2": {
+    "source": "iana"
+  },
+  "image/vnd.dece.graphic": {
+    "source": "iana",
+    "extensions": ["uvi","uvvi","uvg","uvvg"]
+  },
+  "image/vnd.djvu": {
+    "source": "iana",
+    "extensions": ["djvu","djv"]
+  },
+  "image/vnd.dvb.subtitle": {
+    "source": "iana",
+    "extensions": ["sub"]
+  },
+  "image/vnd.dwg": {
+    "source": "iana",
+    "extensions": ["dwg"]
+  },
+  "image/vnd.dxf": {
+    "source": "iana",
+    "extensions": ["dxf"]
+  },
+  "image/vnd.fastbidsheet": {
+    "source": "iana",
+    "extensions": ["fbs"]
+  },
+  "image/vnd.fpx": {
+    "source": "iana",
+    "extensions": ["fpx"]
+  },
+  "image/vnd.fst": {
+    "source": "iana",
+    "extensions": ["fst"]
+  },
+  "image/vnd.fujixerox.edmics-mmr": {
+    "source": "iana",
+    "extensions": ["mmr"]
+  },
+  "image/vnd.fujixerox.edmics-rlc": {
+    "source": "iana",
+    "extensions": ["rlc"]
+  },
+  "image/vnd.globalgraphics.pgb": {
+    "source": "iana"
+  },
+  "image/vnd.microsoft.icon": {
+    "source": "iana"
+  },
+  "image/vnd.mix": {
+    "source": "iana"
+  },
+  "image/vnd.mozilla.apng": {
+    "source": "iana"
+  },
+  "image/vnd.ms-modi": {
+    "source": "iana",
+    "extensions": ["mdi"]
+  },
+  "image/vnd.ms-photo": {
+    "source": "apache",
+    "extensions": ["wdp"]
+  },
+  "image/vnd.net-fpx": {
+    "source": "iana",
+    "extensions": ["npx"]
+  },
+  "image/vnd.radiance": {
+    "source": "iana"
+  },
+  "image/vnd.sealed.png": {
+    "source": "iana"
+  },
+  "image/vnd.sealedmedia.softseal.gif": {
+    "source": "iana"
+  },
+  "image/vnd.sealedmedia.softseal.jpg": {
+    "source": "iana"
+  },
+  "image/vnd.svf": {
+    "source": "iana"
+  },
+  "image/vnd.tencent.tap": {
+    "source": "iana"
+  },
+  "image/vnd.valve.source.texture": {
+    "source": "iana"
+  },
+  "image/vnd.wap.wbmp": {
+    "source": "iana",
+    "extensions": ["wbmp"]
+  },
+  "image/vnd.xiff": {
+    "source": "iana",
+    "extensions": ["xif"]
+  },
+  "image/vnd.zbrush.pcx": {
+    "source": "iana"
+  },
+  "image/webp": {
+    "source": "apache",
+    "extensions": ["webp"]
+  },
+  "image/x-3ds": {
+    "source": "apache",
+    "extensions": ["3ds"]
+  },
+  "image/x-cmu-raster": {
+    "source": "apache",
+    "extensions": ["ras"]
+  },
+  "image/x-cmx": {
+    "source": "apache",
+    "extensions": ["cmx"]
+  },
+  "image/x-freehand": {
+    "source": "apache",
+    "extensions": ["fh","fhc","fh4","fh5","fh7"]
+  },
+  "image/x-icon": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["ico"]
+  },
+  "image/x-jng": {
+    "source": "nginx",
+    "extensions": ["jng"]
+  },
+  "image/x-mrsid-image": {
+    "source": "apache",
+    "extensions": ["sid"]
+  },
+  "image/x-ms-bmp": {
+    "source": "nginx",
+    "compressible": true,
+    "extensions": ["bmp"]
+  },
+  "image/x-pcx": {
+    "source": "apache",
+    "extensions": ["pcx"]
+  },
+  "image/x-pict": {
+    "source": "apache",
+    "extensions": ["pic","pct"]
+  },
+  "image/x-portable-anymap": {
+    "source": "apache",
+    "extensions": ["pnm"]
+  },
+  "image/x-portable-bitmap": {
+    "source": "apache",
+    "extensions": ["pbm"]
+  },
+  "image/x-portable-graymap": {
+    "source": "apache",
+    "extensions": ["pgm"]
+  },
+  "image/x-portable-pixmap": {
+    "source": "apache",
+    "extensions": ["ppm"]
+  },
+  "image/x-rgb": {
+    "source": "apache",
+    "extensions": ["rgb"]
+  },
+  "image/x-tga": {
+    "source": "apache",
+    "extensions": ["tga"]
+  },
+  "image/x-xbitmap": {
+    "source": "apache",
+    "extensions": ["xbm"]
+  },
+  "image/x-xcf": {
+    "compressible": false
+  },
+  "image/x-xpixmap": {
+    "source": "apache",
+    "extensions": ["xpm"]
+  },
+  "image/x-xwindowdump": {
+    "source": "apache",
+    "extensions": ["xwd"]
+  },
+  "message/cpim": {
+    "source": "iana"
+  },
+  "message/delivery-status": {
+    "source": "iana"
+  },
+  "message/disposition-notification": {
+    "source": "iana"
+  },
+  "message/external-body": {
+    "source": "iana"
+  },
+  "message/feedback-report": {
+    "source": "iana"
+  },
+  "message/global": {
+    "source": "iana"
+  },
+  "message/global-delivery-status": {
+    "source": "iana"
+  },
+  "message/global-disposition-notification": {
+    "source": "iana"
+  },
+  "message/global-headers": {
+    "source": "iana"
+  },
+  "message/http": {
+    "source": "iana",
+    "compressible": false
+  },
+  "message/imdn+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "message/news": {
+    "source": "iana"
+  },
+  "message/partial": {
+    "source": "iana",
+    "compressible": false
+  },
+  "message/rfc822": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["eml","mime"]
+  },
+  "message/s-http": {
+    "source": "iana"
+  },
+  "message/sip": {
+    "source": "iana"
+  },
+  "message/sipfrag": {
+    "source": "iana"
+  },
+  "message/tracking-status": {
+    "source": "iana"
+  },
+  "message/vnd.si.simp": {
+    "source": "iana"
+  },
+  "message/vnd.wfa.wsc": {
+    "source": "iana"
+  },
+  "model/iges": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["igs","iges"]
+  },
+  "model/mesh": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["msh","mesh","silo"]
+  },
+  "model/vnd.collada+xml": {
+    "source": "iana",
+    "extensions": ["dae"]
+  },
+  "model/vnd.dwf": {
+    "source": "iana",
+    "extensions": ["dwf"]
+  },
+  "model/vnd.flatland.3dml": {
+    "source": "iana"
+  },
+  "model/vnd.gdl": {
+    "source": "iana",
+    "extensions": ["gdl"]
+  },
+  "model/vnd.gs-gdl": {
+    "source": "apache"
+  },
+  "model/vnd.gs.gdl": {
+    "source": "iana"
+  },
+  "model/vnd.gtw": {
+    "source": "iana",
+    "extensions": ["gtw"]
+  },
+  "model/vnd.moml+xml": {
+    "source": "iana"
+  },
+  "model/vnd.mts": {
+    "source": "iana",
+    "extensions": ["mts"]
+  },
+  "model/vnd.opengex": {
+    "source": "iana"
+  },
+  "model/vnd.parasolid.transmit.binary": {
+    "source": "iana"
+  },
+  "model/vnd.parasolid.transmit.text": {
+    "source": "iana"
+  },
+  "model/vnd.rosette.annotated-data-model": {
+    "source": "iana"
+  },
+  "model/vnd.valve.source.compiled-map": {
+    "source": "iana"
+  },
+  "model/vnd.vtu": {
+    "source": "iana",
+    "extensions": ["vtu"]
+  },
+  "model/vrml": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["wrl","vrml"]
+  },
+  "model/x3d+binary": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["x3db","x3dbz"]
+  },
+  "model/x3d+fastinfoset": {
+    "source": "iana"
+  },
+  "model/x3d+vrml": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["x3dv","x3dvz"]
+  },
+  "model/x3d+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["x3d","x3dz"]
+  },
+  "model/x3d-vrml": {
+    "source": "iana"
+  },
+  "multipart/alternative": {
+    "source": "iana",
+    "compressible": false
+  },
+  "multipart/appledouble": {
+    "source": "iana"
+  },
+  "multipart/byteranges": {
+    "source": "iana"
+  },
+  "multipart/digest": {
+    "source": "iana"
+  },
+  "multipart/encrypted": {
+    "source": "iana",
+    "compressible": false
+  },
+  "multipart/form-data": {
+    "source": "iana",
+    "compressible": false
+  },
+  "multipart/header-set": {
+    "source": "iana"
+  },
+  "multipart/mixed": {
+    "source": "iana",
+    "compressible": false
+  },
+  "multipart/parallel": {
+    "source": "iana"
+  },
+  "multipart/related": {
+    "source": "iana",
+    "compressible": false
+  },
+  "multipart/report": {
+    "source": "iana"
+  },
+  "multipart/signed": {
+    "source": "iana",
+    "compressible": false
+  },
+  "multipart/voice-message": {
+    "source": "iana"
+  },
+  "multipart/x-mixed-replace": {
+    "source": "iana"
+  },
+  "text/1d-interleaved-parityfec": {
+    "source": "iana"
+  },
+  "text/cache-manifest": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["appcache","manifest"]
+  },
+  "text/calendar": {
+    "source": "iana",
+    "extensions": ["ics","ifb"]
+  },
+  "text/calender": {
+    "compressible": true
+  },
+  "text/cmd": {
+    "compressible": true
+  },
+  "text/coffeescript": {
+    "extensions": ["coffee","litcoffee"]
+  },
+  "text/css": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["css"]
+  },
+  "text/csv": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["csv"]
+  },
+  "text/csv-schema": {
+    "source": "iana"
+  },
+  "text/directory": {
+    "source": "iana"
+  },
+  "text/dns": {
+    "source": "iana"
+  },
+  "text/ecmascript": {
+    "source": "iana"
+  },
+  "text/encaprtp": {
+    "source": "iana"
+  },
+  "text/enriched": {
+    "source": "iana"
+  },
+  "text/fwdred": {
+    "source": "iana"
+  },
+  "text/grammar-ref-list": {
+    "source": "iana"
+  },
+  "text/hjson": {
+    "extensions": ["hjson"]
+  },
+  "text/html": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["html","htm","shtml"]
+  },
+  "text/jade": {
+    "extensions": ["jade"]
+  },
+  "text/javascript": {
+    "source": "iana",
+    "compressible": true
+  },
+  "text/jcr-cnd": {
+    "source": "iana"
+  },
+  "text/jsx": {
+    "compressible": true,
+    "extensions": ["jsx"]
+  },
+  "text/less": {
+    "extensions": ["less"]
+  },
+  "text/markdown": {
+    "source": "iana"
+  },
+  "text/mathml": {
+    "source": "nginx",
+    "extensions": ["mml"]
+  },
+  "text/mizar": {
+    "source": "iana"
+  },
+  "text/n3": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["n3"]
+  },
+  "text/parameters": {
+    "source": "iana"
+  },
+  "text/parityfec": {
+    "source": "iana"
+  },
+  "text/plain": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["txt","text","conf","def","list","log","in","ini"]
+  },
+  "text/provenance-notation": {
+    "source": "iana"
+  },
+  "text/prs.fallenstein.rst": {
+    "source": "iana"
+  },
+  "text/prs.lines.tag": {
+    "source": "iana",
+    "extensions": ["dsc"]
+  },
+  "text/prs.prop.logic": {
+    "source": "iana"
+  },
+  "text/raptorfec": {
+    "source": "iana"
+  },
+  "text/red": {
+    "source": "iana"
+  },
+  "text/rfc822-headers": {
+    "source": "iana"
+  },
+  "text/richtext": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rtx"]
+  },
+  "text/rtf": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rtf"]
+  },
+  "text/rtp-enc-aescm128": {
+    "source": "iana"
+  },
+  "text/rtploopback": {
+    "source": "iana"
+  },
+  "text/rtx": {
+    "source": "iana"
+  },
+  "text/sgml": {
+    "source": "iana",
+    "extensions": ["sgml","sgm"]
+  },
+  "text/slim": {
+    "extensions": ["slim","slm"]
+  },
+  "text/stylus": {
+    "extensions": ["stylus","styl"]
+  },
+  "text/t140": {
+    "source": "iana"
+  },
+  "text/tab-separated-values": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["tsv"]
+  },
+  "text/troff": {
+    "source": "iana",
+    "extensions": ["t","tr","roff","man","me","ms"]
+  },
+  "text/turtle": {
+    "source": "iana",
+    "extensions": ["ttl"]
+  },
+  "text/ulpfec": {
+    "source": "iana"
+  },
+  "text/uri-list": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["uri","uris","urls"]
+  },
+  "text/vcard": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["vcard"]
+  },
+  "text/vnd.a": {
+    "source": "iana"
+  },
+  "text/vnd.abc": {
+    "source": "iana"
+  },
+  "text/vnd.curl": {
+    "source": "iana",
+    "extensions": ["curl"]
+  },
+  "text/vnd.curl.dcurl": {
+    "source": "apache",
+    "extensions": ["dcurl"]
+  },
+  "text/vnd.curl.mcurl": {
+    "source": "apache",
+    "extensions": ["mcurl"]
+  },
+  "text/vnd.curl.scurl": {
+    "source": "apache",
+    "extensions": ["scurl"]
+  },
+  "text/vnd.debian.copyright": {
+    "source": "iana"
+  },
+  "text/vnd.dmclientscript": {
+    "source": "iana"
+  },
+  "text/vnd.dvb.subtitle": {
+    "source": "iana",
+    "extensions": ["sub"]
+  },
+  "text/vnd.esmertec.theme-descriptor": {
+    "source": "iana"
+  },
+  "text/vnd.fly": {
+    "source": "iana",
+    "extensions": ["fly"]
+  },
+  "text/vnd.fmi.flexstor": {
+    "source": "iana",
+    "extensions": ["flx"]
+  },
+  "text/vnd.graphviz": {
+    "source": "iana",
+    "extensions": ["gv"]
+  },
+  "text/vnd.in3d.3dml": {
+    "source": "iana",
+    "extensions": ["3dml"]
+  },
+  "text/vnd.in3d.spot": {
+    "source": "iana",
+    "extensions": ["spot"]
+  },
+  "text/vnd.iptc.newsml": {
+    "source": "iana"
+  },
+  "text/vnd.iptc.nitf": {
+    "source": "iana"
+  },
+  "text/vnd.latex-z": {
+    "source": "iana"
+  },
+  "text/vnd.motorola.reflex": {
+    "source": "iana"
+  },
+  "text/vnd.ms-mediapackage": {
+    "source": "iana"
+  },
+  "text/vnd.net2phone.commcenter.command": {
+    "source": "iana"
+  },
+  "text/vnd.radisys.msml-basic-layout": {
+    "source": "iana"
+  },
+  "text/vnd.si.uricatalogue": {
+    "source": "iana"
+  },
+  "text/vnd.sun.j2me.app-descriptor": {
+    "source": "iana",
+    "extensions": ["jad"]
+  },
+  "text/vnd.trolltech.linguist": {
+    "source": "iana"
+  },
+  "text/vnd.wap.si": {
+    "source": "iana"
+  },
+  "text/vnd.wap.sl": {
+    "source": "iana"
+  },
+  "text/vnd.wap.wml": {
+    "source": "iana",
+    "extensions": ["wml"]
+  },
+  "text/vnd.wap.wmlscript": {
+    "source": "iana",
+    "extensions": ["wmls"]
+  },
+  "text/vtt": {
+    "charset": "UTF-8",
+    "compressible": true,
+    "extensions": ["vtt"]
+  },
+  "text/x-asm": {
+    "source": "apache",
+    "extensions": ["s","asm"]
+  },
+  "text/x-c": {
+    "source": "apache",
+    "extensions": ["c","cc","cxx","cpp","h","hh","dic"]
+  },
+  "text/x-component": {
+    "source": "nginx",
+    "extensions": ["htc"]
+  },
+  "text/x-fortran": {
+    "source": "apache",
+    "extensions": ["f","for","f77","f90"]
+  },
+  "text/x-gwt-rpc": {
+    "compressible": true
+  },
+  "text/x-handlebars-template": {
+    "extensions": ["hbs"]
+  },
+  "text/x-java-source": {
+    "source": "apache",
+    "extensions": ["java"]
+  },
+  "text/x-jquery-tmpl": {
+    "compressible": true
+  },
+  "text/x-lua": {
+    "extensions": ["lua"]
+  },
+  "text/x-markdown": {
+    "compressible": true,
+    "extensions": ["markdown","md","mkd"]
+  },
+  "text/x-nfo": {
+    "source": "apache",
+    "extensions": ["nfo"]
+  },
+  "text/x-opml": {
+    "source": "apache",
+    "extensions": ["opml"]
+  },
+  "text/x-pascal": {
+    "source": "apache",
+    "extensions": ["p","pas"]
+  },
+  "text/x-processing": {
+    "compressible": true,
+    "extensions": ["pde"]
+  },
+  "text/x-sass": {
+    "extensions": ["sass"]
+  },
+  "text/x-scss": {
+    "extensions": ["scss"]
+  },
+  "text/x-setext": {
+    "source": "apache",
+    "extensions": ["etx"]
+  },
+  "text/x-sfv": {
+    "source": "apache",
+    "extensions": ["sfv"]
+  },
+  "text/x-suse-ymp": {
+    "compressible": true,
+    "extensions": ["ymp"]
+  },
+  "text/x-uuencode": {
+    "source": "apache",
+    "extensions": ["uu"]
+  },
+  "text/x-vcalendar": {
+    "source": "apache",
+    "extensions": ["vcs"]
+  },
+  "text/x-vcard": {
+    "source": "apache",
+    "extensions": ["vcf"]
+  },
+  "text/xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xml"]
+  },
+  "text/xml-external-parsed-entity": {
+    "source": "iana"
+  },
+  "text/yaml": {
+    "extensions": ["yaml","yml"]
+  },
+  "video/1d-interleaved-parityfec": {
+    "source": "apache"
+  },
+  "video/3gpp": {
+    "source": "apache",
+    "extensions": ["3gp","3gpp"]
+  },
+  "video/3gpp-tt": {
+    "source": "apache"
+  },
+  "video/3gpp2": {
+    "source": "apache",
+    "extensions": ["3g2"]
+  },
+  "video/bmpeg": {
+    "source": "apache"
+  },
+  "video/bt656": {
+    "source": "apache"
+  },
+  "video/celb": {
+    "source": "apache"
+  },
+  "video/dv": {
+    "source": "apache"
+  },
+  "video/encaprtp": {
+    "source": "apache"
+  },
+  "video/h261": {
+    "source": "apache",
+    "extensions": ["h261"]
+  },
+  "video/h263": {
+    "source": "apache",
+    "extensions": ["h263"]
+  },
+  "video/h263-1998": {
+    "source": "apache"
+  },
+  "video/h263-2000": {
+    "source": "apache"
+  },
+  "video/h264": {
+    "source": "apache",
+    "extensions": ["h264"]
+  },
+  "video/h264-rcdo": {
+    "source": "apache"
+  },
+  "video/h264-svc": {
+    "source": "apache"
+  },
+  "video/h265": {
+    "source": "apache"
+  },
+  "video/iso.segment": {
+    "source": "apache"
+  },
+  "video/jpeg": {
+    "source": "apache",
+    "extensions": ["jpgv"]
+  },
+  "video/jpeg2000": {
+    "source": "apache"
+  },
+  "video/jpm": {
+    "source": "apache",
+    "extensions": ["jpm","jpgm"]
+  },
+  "video/mj2": {
+    "source": "apache",
+    "extensions": ["mj2","mjp2"]
+  },
+  "video/mp1s": {
+    "source": "apache"
+  },
+  "video/mp2p": {
+    "source": "apache"
+  },
+  "video/mp2t": {
+    "source": "apache",
+    "extensions": ["ts"]
+  },
+  "video/mp4": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["mp4","mp4v","mpg4"]
+  },
+  "video/mp4v-es": {
+    "source": "apache"
+  },
+  "video/mpeg": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["mpeg","mpg","mpe","m1v","m2v"]
+  },
+  "video/mpeg4-generic": {
+    "source": "apache"
+  },
+  "video/mpv": {
+    "source": "apache"
+  },
+  "video/nv": {
+    "source": "apache"
+  },
+  "video/ogg": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["ogv"]
+  },
+  "video/parityfec": {
+    "source": "apache"
+  },
+  "video/pointer": {
+    "source": "apache"
+  },
+  "video/quicktime": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["qt","mov"]
+  },
+  "video/raptorfec": {
+    "source": "apache"
+  },
+  "video/raw": {
+    "source": "apache"
+  },
+  "video/rtp-enc-aescm128": {
+    "source": "apache"
+  },
+  "video/rtploopback": {
+    "source": "apache"
+  },
+  "video/rtx": {
+    "source": "apache"
+  },
+  "video/smpte292m": {
+    "source": "apache"
+  },
+  "video/ulpfec": {
+    "source": "apache"
+  },
+  "video/vc1": {
+    "source": "apache"
+  },
+  "video/vnd.cctv": {
+    "source": "apache"
+  },
+  "video/vnd.dece.hd": {
+    "source": "apache",
+    "extensions": ["uvh","uvvh"]
+  },
+  "video/vnd.dece.mobile": {
+    "source": "apache",
+    "extensions": ["uvm","uvvm"]
+  },
+  "video/vnd.dece.mp4": {
+    "source": "apache"
+  },
+  "video/vnd.dece.pd": {
+    "source": "apache",
+    "extensions": ["uvp","uvvp"]
+  },
+  "video/vnd.dece.sd": {
+    "source": "apache",
+    "extensions": ["uvs","uvvs"]
+  },
+  "video/vnd.dece.video": {
+    "source": "apache",
+    "extensions": ["uvv","uvvv"]
+  },
+  "video/vnd.directv.mpeg": {
+    "source": "apache"
+  },
+  "video/vnd.directv.mpeg-tts": {
+    "source": "apache"
+  },
+  "video/vnd.dlna.mpeg-tts": {
+    "source": "apache"
+  },
+  "video/vnd.dvb.file": {
+    "source": "apache",
+    "extensions": ["dvb"]
+  },
+  "video/vnd.fvt": {
+    "source": "apache",
+    "extensions": ["fvt"]
+  },
+  "video/vnd.hns.video": {
+    "source": "apache"
+  },
+  "video/vnd.iptvforum.1dparityfec-1010": {
+    "source": "apache"
+  },
+  "video/vnd.iptvforum.1dparityfec-2005": {
+    "source": "apache"
+  },
+  "video/vnd.iptvforum.2dparityfec-1010": {
+    "source": "apache"
+  },
+  "video/vnd.iptvforum.2dparityfec-2005": {
+    "source": "apache"
+  },
+  "video/vnd.iptvforum.ttsavc": {
+    "source": "apache"
+  },
+  "video/vnd.iptvforum.ttsmpeg2": {
+    "source": "apache"
+  },
+  "video/vnd.motorola.video": {
+    "source": "apache"
+  },
+  "video/vnd.motorola.videop": {
+    "source": "apache"
+  },
+  "video/vnd.mpegurl": {
+    "source": "apache",
+    "extensions": ["mxu","m4u"]
+  },
+  "video/vnd.ms-playready.media.pyv": {
+    "source": "apache",
+    "extensions": ["pyv"]
+  },
+  "video/vnd.nokia.interleaved-multimedia": {
+    "source": "apache"
+  },
+  "video/vnd.nokia.videovoip": {
+    "source": "apache"
+  },
+  "video/vnd.objectvideo": {
+    "source": "apache"
+  },
+  "video/vnd.radgamettools.bink": {
+    "source": "apache"
+  },
+  "video/vnd.radgamettools.smacker": {
+    "source": "apache"
+  },
+  "video/vnd.sealed.mpeg1": {
+    "source": "apache"
+  },
+  "video/vnd.sealed.mpeg4": {
+    "source": "apache"
+  },
+  "video/vnd.sealed.swf": {
+    "source": "apache"
+  },
+  "video/vnd.sealedmedia.softseal.mov": {
+    "source": "apache"
+  },
+  "video/vnd.uvvu.mp4": {
+    "source": "apache",
+    "extensions": ["uvu","uvvu"]
+  },
+  "video/vnd.vivo": {
+    "source": "apache",
+    "extensions": ["viv"]
+  },
+  "video/vp8": {
+    "source": "apache"
+  },
+  "video/webm": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["webm"]
+  },
+  "video/x-f4v": {
+    "source": "apache",
+    "extensions": ["f4v"]
+  },
+  "video/x-fli": {
+    "source": "apache",
+    "extensions": ["fli"]
+  },
+  "video/x-flv": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["flv"]
+  },
+  "video/x-m4v": {
+    "source": "apache",
+    "extensions": ["m4v"]
+  },
+  "video/x-matroska": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["mkv","mk3d","mks"]
+  },
+  "video/x-mng": {
+    "source": "apache",
+    "extensions": ["mng"]
+  },
+  "video/x-ms-asf": {
+    "source": "apache",
+    "extensions": ["asf","asx"]
+  },
+  "video/x-ms-vob": {
+    "source": "apache",
+    "extensions": ["vob"]
+  },
+  "video/x-ms-wm": {
+    "source": "apache",
+    "extensions": ["wm"]
+  },
+  "video/x-ms-wmv": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["wmv"]
+  },
+  "video/x-ms-wmx": {
+    "source": "apache",
+    "extensions": ["wmx"]
+  },
+  "video/x-ms-wvx": {
+    "source": "apache",
+    "extensions": ["wvx"]
+  },
+  "video/x-msvideo": {
+    "source": "apache",
+    "extensions": ["avi"]
+  },
+  "video/x-sgi-movie": {
+    "source": "apache",
+    "extensions": ["movie"]
+  },
+  "video/x-smv": {
+    "source": "apache",
+    "extensions": ["smv"]
+  },
+  "x-conference/x-cooltalk": {
+    "source": "apache",
+    "extensions": ["ice"]
+  },
+  "x-shader/x-fragment": {
+    "compressible": true
+  },
+  "x-shader/x-vertex": {
+    "compressible": true
+  }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/tests/TestCase.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/tests/TestCase.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/tests/TestCase.php	(revision 8435)
@@ -0,0 +1,170 @@
+<?php
+
+namespace horstoeko\mimedb\tests;
+
+use ReflectionClass;
+use ReflectionMethod;
+use ReflectionProperty;
+use \PHPUnit\Framework\TestCase as PhpUnitTestCase;
+
+abstract class TestCase extends PhpUnitTestCase
+{
+    /**
+     * Registered files that should be deleted in test case teardown
+     *
+     * @var array
+     */
+    protected static $registeredTestCaseFiles = [];
+
+    /**
+     * Registered files that should be deleted in test teardown
+     *
+     * @var array
+     */
+    protected $registeredTestFiles = [];
+
+    /**
+     * @inheritDoc
+     */
+    public static function setUpBeforeClass(): void
+    {
+        self::$registeredTestCaseFiles = [];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public static function tearDownAfterClass(): void
+    {
+        foreach (self::$registeredTestCaseFiles as $registeredTestCaseFile) {
+            if (file_exists($registeredTestCaseFile) && is_writeable($registeredTestCaseFile)) {
+                @unlink($registeredTestCaseFile);
+            }
+        }
+
+        self::$registeredTestCaseFiles = [];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function setUp(): void
+    {
+        parent::setUp();
+
+        $this->registeredTestFiles = [];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function tearDown(): void
+    {
+        parent::tearDown();
+
+        foreach ($this->registeredTestFiles as $registeredTestFile) {
+            if (file_exists($registeredTestFile) && is_writeable($registeredTestFile)) {
+                @unlink($registeredTestFile);
+            }
+        }
+
+        $this->registeredTestFiles = [];
+    }
+
+    /**
+     * Register a file to delete in testcase teardown
+     *
+     * @param  string $filename
+     * @return void
+     */
+    public function registerFileForTestCaseTeardown(string $filename): void
+    {
+        self::$registeredTestCaseFiles[] = $filename;
+    }
+
+    /**
+     * Register a file to delete in testmethod teardown
+     *
+     * @param  string $filename
+     * @return void
+     */
+    public function registerFileForTestMethodTeardown(string $filename): void
+    {
+        $this->registeredTestFiles[] = $filename;
+    }
+
+    /**
+     * Expect notice on php version smaller than 8
+     * Expect warning on php version greater or equal than 8
+     *
+     * @return void
+     */
+    public function expectNoticeOrWarning(): void
+    {
+        if (version_compare(phpversion(), '8', '>=')) {
+            $this->expectWarning();
+        } else {
+            $this->expectNotice();
+        }
+    }
+
+    /**
+     * Access to private properties
+     *
+     * @param  string $className
+     * @param  string $propertyName
+     * @return ReflectionProperty
+     */
+    public function getPrivatePropertyFromClassname(string $className, string $propertyName): ReflectionProperty
+    {
+        $reflector = new ReflectionClass($className);
+        $property = $reflector->getProperty($propertyName);
+        $property->setAccessible(true);
+        return $property;
+    }
+
+    /**
+     * Access to private properties
+     *
+     * @param  object $object
+     * @param  string $propertyName
+     * @return ReflectionProperty
+     */
+    public function getPrivatePropertyFromObject(object $object, string $propertyName): ReflectionProperty
+    {
+        $reflector = new ReflectionClass($object);
+        $property = $reflector->getProperty($propertyName);
+        $property->setAccessible(true);
+        return $property;
+    }
+
+    /**
+     * Access to private method
+     *
+     * @param  string $className
+     * @param  string $methodName
+     * @return ReflectionMethod
+     */
+    public function getPrivateMethodFromClassname(string $className, string $methodName): ReflectionMethod
+    {
+        $reflector = new ReflectionClass($className);
+        $method = $reflector->getMethod($methodName);
+        $method->setAccessible(true);
+        return $method;
+    }
+
+    /**
+     * Access to private method
+     *
+     * @param  object $object
+     * @param  string $methodName
+     * @return ReflectionMethod
+     */
+    public function getPrivateMethodFromObject(object $object, string $methodName): ReflectionMethod
+    {
+        $reflector = new ReflectionClass($object);
+        $method = $reflector->getMethod($methodName);
+        $method->setAccessible(true);
+        return $method;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/tests/testcases/BasicTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/tests/testcases/BasicTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/tests/testcases/BasicTest.php	(revision 8435)
@@ -0,0 +1,13 @@
+<?php
+
+namespace horstoeko\mimedb\tests\testcases;
+
+use horstoeko\mimedb\tests\TestCase;
+
+class BasicTest extends TestCase
+{
+    public function testSoundCheck(): void
+    {
+        $this->assertTrue(true);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/tests/testcases/MimeDbTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/tests/testcases/MimeDbTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/mimedb/tests/testcases/MimeDbTest.php	(revision 8435)
@@ -0,0 +1,157 @@
+<?php
+
+namespace horstoeko\mimedb\tests\testcases;
+
+use horstoeko\mimedb\MimeDb;
+use horstoeko\mimedb\tests\TestCase;
+
+class MimeDbTest extends TestCase
+{
+    /**
+     * Internal mime database
+     *
+     * @var \horstoeko\mimedb\MimeDb
+     */
+    protected $mimeDb = null;
+
+    /**
+     * @inheritDoc
+     */
+    protected function setUp(): void
+    {
+        $this->mimeDb = new MimeDb();
+    }
+
+    /**
+     * Constructor Test
+     *
+     * @return void
+     */
+    public function testConstruction(): void
+    {
+        $this->assertEmpty($this->getPrivatePropertyFromObject($this->mimeDb, 'mimeDatabase')->getValue($this->mimeDb));
+    }
+
+    /**
+     * Test "singleton" method
+     *
+     * @covers \horstoeko\mimeDb\MimeDb::singleton
+     * @return void
+     */
+    public function testSingleton(): void
+    {
+        $instance = MimeDb::singleton();
+
+        $this->assertNotNull($instance);
+        $this->assertInstanceOf(MimeDb::class, $instance);
+        $this->assertEmpty($this->getPrivatePropertyFromObject($instance, 'mimeDatabase')->getValue($instance));
+
+        $instance->findFirstMimeTypeByExtension('.mp4');
+
+        $this->assertNotEmpty($this->getPrivatePropertyFromObject($instance, 'mimeDatabase')->getValue($instance));
+
+        $instance2 = MimeDb::singleton();
+
+        $this->assertNotEmpty($this->getPrivatePropertyFromObject($instance2, 'mimeDatabase')->getValue($instance2));
+    }
+
+    /**
+     * Test "findType" method
+     *
+     * @covers \horstoeko\mimeDb\MimeDb::findFirstMimeTypeByExtension
+     * @covers \horstoeko\mimeDb\MimeDb::findAllMimeTypesByExtension
+     * @covers \horstoeko\mimeDb\MimeDb::initializeDatabase
+     * @covers \horstoeko\mimeDb\MimeDb::loadedDatabase
+     * @covers \horstoeko\mimeDb\MimeDb::loadDatabase
+     * @return void
+     */
+    public function testFindFirstMimeTypeByExtension(): void
+    {
+        $this->assertEquals('application/vnd.openxmlformats-officedocument.wordprocessingml.document', $this->mimeDb->findFirstMimeTypeByExtension('.docx'));
+        $this->assertEquals('video/mp4', $this->mimeDb->findFirstMimeTypeByExtension('.mp4'));
+        $this->assertEquals('audio/midi', $this->mimeDb->findFirstMimeTypeByExtension('.mid'));
+        $this->assertEquals('video/x-matroska', $this->mimeDb->findFirstMimeTypeByExtension('.mkv'));
+        $this->assertEquals('video/x-matroska', $this->mimeDb->findFirstMimeTypeByExtension('.mks'));
+        $this->assertEquals('application/vnd.openxmlformats-officedocument.wordprocessingml.document', $this->mimeDb->findFirstMimeTypeByExtension('docx'));
+        $this->assertEquals('video/mp4', $this->mimeDb->findFirstMimeTypeByExtension('mp4'));
+        $this->assertEquals('audio/midi', $this->mimeDb->findFirstMimeTypeByExtension('mid'));
+        $this->assertEquals('video/x-matroska', $this->mimeDb->findFirstMimeTypeByExtension('mkv'));
+        $this->assertEquals('video/x-matroska', $this->mimeDb->findFirstMimeTypeByExtension('mks'));
+        $this->assertNull($this->mimeDb->findFirstMimeTypeByExtension('.unknown'));
+    }
+
+    /**
+     * Test "findAllMimeTypesByExtension" method
+     *
+     * @covers \horstoeko\mimeDb\MimeDb::findAllMimeTypesByExtension
+     * @covers \horstoeko\mimeDb\MimeDb::initializeDatabase
+     * @covers \horstoeko\mimeDb\MimeDb::loadedDatabase
+     * @covers \horstoeko\mimeDb\MimeDb::loadDatabase
+     * @return void
+     */
+    public function testFindAllMimeTypesByExtension(): void
+    {
+        $this->assertIsArray($this->mimeDb->findAllMimeTypesByExtension('.docx'));
+        $this->assertArrayHasKey(0, $this->mimeDb->findAllMimeTypesByExtension('.docx'));
+        $this->assertArrayNotHasKey(1, $this->mimeDb->findAllMimeTypesByExtension('.docx'));
+        $this->assertEquals("application/vnd.openxmlformats-officedocument.wordprocessingml.document", $this->mimeDb->findAllMimeTypesByExtension('.docx')[0]);
+
+        $this->assertIsArray($this->mimeDb->findAllMimeTypesByExtension('docx'));
+        $this->assertArrayHasKey(0, $this->mimeDb->findAllMimeTypesByExtension('docx'));
+        $this->assertArrayNotHasKey(1, $this->mimeDb->findAllMimeTypesByExtension('docx'));
+        $this->assertEquals("application/vnd.openxmlformats-officedocument.wordprocessingml.document", $this->mimeDb->findAllMimeTypesByExtension('.docx')[0]);
+
+        $this->assertNull($this->mimeDb->findAllMimeTypesByExtension('.unknown'));
+    }
+
+    /**
+     * Test "findFirstFileExtensionByMimeType" method
+     *
+     * @covers \horstoeko\mimeDb\MimeDb::findFirstFileExtensionByMimeType
+     * @covers \horstoeko\mimeDb\MimeDb::findAllFileExtensionsByMimeType
+     * @covers \horstoeko\mimeDb\MimeDb::initializeDatabase
+     * @covers \horstoeko\mimeDb\MimeDb::loadedDatabase
+     * @covers \horstoeko\mimeDb\MimeDb::loadDatabase
+     * @return void
+     */
+    public function testFindFirstFileExtensionByMimeType(): void
+    {
+        $this->assertEquals("docx", $this->mimeDb->findFirstFileExtensionByMimeType('application/vnd.openxmlformats-officedocument.wordprocessingml.document'));
+        $this->assertEquals("mp4", $this->mimeDb->findFirstFileExtensionByMimeType('video/mp4'));
+        $this->assertEquals("mid", $this->mimeDb->findFirstFileExtensionByMimeType('audio/midi'));
+        $this->assertNull($this->mimeDb->findFirstFileExtensionByMimeType('unknown/unknown'));
+    }
+
+    /**
+     * Test "findAllFileExtensionsByMimeType" method
+     *
+     * @covers \horstoeko\mimeDb\MimeDb::findAllFileExtensionsByMimeType
+     * @covers \horstoeko\mimeDb\MimeDb::initializeDatabase
+     * @covers \horstoeko\mimeDb\MimeDb::loadedDatabase
+     * @covers \horstoeko\mimeDb\MimeDb::loadDatabase
+     * @return void
+     */
+    public function textFindAllFileExtensionsByMimeType(): void
+    {
+        $findResult = $this->mimeDb->findAllMimeTypesByExtension('.docx');
+
+        $this->assertIsArray($findResult);
+        $this->assertArrayHasKey(0, $findResult);
+        $this->assertArrayNotHasKey(1, $findResult);
+        $this->assertEquals("docx", $findResult[0]);
+
+        $findResult = $this->mimeDb->findAllFileExtensionsByMimeType('video/x-matroska');
+
+        $this->assertIsArray($findResult);
+        $this->assertArrayHasKey(0, $findResult);
+        $this->assertArrayHasKey(1, $findResult);
+        $this->assertArrayHasKey(2, $findResult);
+        $this->assertArrayNotHasKey(3, $findResult);
+        $this->assertEquals("mkv", $findResult[0]);
+        $this->assertEquals("mk3d", $findResult[1]);
+        $this->assertEquals("mks", $findResult[2]);
+
+        $this->assertNull($this->mimeDb->findAllFileExtensionsByMimeType('application/pdx'));
+        $this->assertNull($this->mimeDb->findAllFileExtensionsByMimeType('unknown/unknown'));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php73.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php73.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php73.ant.yml	(revision 8435)
@@ -0,0 +1,29 @@
+name: CI (Ant, PHP 7.3)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '7.3'
+            extensions: imagick, swoole      
+            coverage: xdebug
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v1
+        if: always()
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php74.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php74.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php74.ant.yml	(revision 8435)
@@ -0,0 +1,29 @@
+name: CI (Ant, PHP 7.4)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '7.4'
+            extensions: imagick, swoole
+            coverage: xdebug
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v1
+        if: always()
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php80.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php80.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php80.ant.yml	(revision 8435)
@@ -0,0 +1,29 @@
+name: CI (Ant, PHP 8.0)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '8.0'
+            extensions: imagick, swoole      
+            coverage: xdebug
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v1
+        if: always()
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php81.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php81.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php81.ant.yml	(revision 8435)
@@ -0,0 +1,29 @@
+name: CI (Ant, PHP 8.1)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '8.1'
+            extensions: imagick, swoole      
+            coverage: xdebug
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v1
+        if: always()
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php81.release.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php81.release.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.github/workflows/build.php81.release.ant.yml	(revision 8435)
@@ -0,0 +1,35 @@
+name: Release
+
+on:
+  push:
+    tags:
+      - "v*"
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '8.1'
+            extensions: imagick, swoole
+            coverage: xdebug
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v1
+        if: always()
+        with:
+            files: "./build/logs/junit.xml"
+      - name: Make Release
+        uses: "marvinpinto/action-automatic-releases@latest"
+        with:
+            repo_token: "${{ secrets.GITHUB_TOKEN }}"
+            prerelease: false
+            files: |
+                build/dist/doc.zip
+                build/dist/builddoc.zip
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.gitignore
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.gitignore	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/.gitignore	(revision 8435)
@@ -0,0 +1,85 @@
+#ignore thumbnails created by windows
+Thumbs.db
+#Ignore files build by Visual Studio
+*.obj
+*.exe
+*.pdb
+*.user
+*.aps
+*.pch
+*.vspscc
+*_i.c
+*_p.c
+*.ncb
+*.suo
+*.tlb
+*.tlh
+*.bak
+*.cache
+*.ilk
+*.log
+[Bb]in
+[Dd]ebug*/
+*.lib
+*.sbr
+obj/
+[Rr]elease*/
+_ReSharper*/
+[Tt]est[Rr]esult*
+*.dcu
+*.dll
+*.ini
+*.um
+[B|b]ackup/*
+*/[C|c]ompiled/*
+*/_[I|i]n[F|f]uture/*
+*.~*
+*.$$$
+[P|p][R|r][E|e][F|f][S|s]/*
+[B|b]ackup*/*
+[D|d]cu/*
+[E|e]xport/*
+*.key
+*.KEY
+*.log
+*.ini
+*.INI
+*.um
+*.UM
+*.$$$
+*.123
+*.jpg
+*.png
+*.bmp
+*.gif
+cgi-bin
+_backup*
+*.zip
+*.tar
+*.tar.gz
+[D|d][E|e][P|p][L|l][O|o][Y|y]/*
+
+.htpasswd
+/nbproject/private/
+/nbproject/
+
+!/setup/.htaccess
+.vscode 
+.idea
+
+/vendor/
+/logs/*
+.phpunit.result.cache
+/.phpdoc/
+/build/api/
+/build/coverage/
+/build/coverage-html/
+/build/doc/
+/build/logs/
+/build/pdepend/
+/build/phpdox/
+/build/phpdoc/
+/*.phar
+/composer.lock
+/examples/fullpdf.pdf
+/examples/factur-x.xml
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/LICENSE	(revision 8435)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 D. Erling
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/README.md	(revision 8435)
@@ -0,0 +1,3 @@
+# StringManagement
+
+[![Latest Stable Version](https://poser.pugx.org/horstoeko/stringmanagement/v/stable.png)](https://packagist.org/packages/horstoeko/stringmanagement) [![Total Downloads](https://poser.pugx.org/horstoeko/stringmanagement/downloads.png)](https://packagist.org/packages/horstoeko/stringmanagement) [![Latest Unstable Version](https://poser.pugx.org/horstoeko/stringmanagement/v/unstable.png)](https://packagist.org/packages/horstoeko/stringmanagement) [![License](https://poser.pugx.org/horstoeko/stringmanagement/license.png)](https://packagist.org/packages/horstoeko/stringmanagement) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/horstoeko/stringmanagement)
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build.ant.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build.ant.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build.ant.xml	(revision 8435)
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="php-automate-build-ant" default="full-build" basedir=".">
+    <!-- By default the tools are managed by Composer in ${basedir}/vendor/bin -->
+    <property name="url.composer.download" value="https://getcomposer.org/download/2.2.6/composer.phar"/>
+    <property name="url.phpdocumentor.download" value="https://phpdoc.org/phpDocumentor.phar"/>
+    <property name="composer" value="${basedir}/composer.phar"/>
+    <property name="phpdocumentor" value="${basedir}/phpDocumentor.phar"/>
+    <property name="pdepend" value="${basedir}/vendor/bin/pdepend"/>
+    <property name="phpcpd" value="${basedir}/vendor/bin/phpcpd"/>
+    <property name="phpcs" value="${basedir}/vendor/bin/phpcs"/>
+    <property name="phploc" value="${basedir}/vendor/bin/phploc"/>
+    <property name="phpmd" value="${basedir}/vendor/bin/phpmd"/>
+    <property name="phpunit" value="${basedir}/vendor/bin/phpunit"/>
+    <property name="phpstan" value="${basedir}/vendor/bin/phpstan"/>
+    <property name="git" value="/usr/bin/git"/>
+    <target name="clean" unless="clean.done" description="Cleanup build artifacts.">
+        <delete dir="${basedir}/build/builddoc"/>
+        <delete dir="${basedir}/build/doc"/>
+        <delete dir="${basedir}/build/coverage"/>
+        <delete dir="${basedir}/build/logs"/>
+        <delete dir="${basedir}/build/pdepend"/>
+        <delete dir="${basedir}/build/dist"/>
+        <delete dir="${basedir}/build/phpdoc"/>
+        <property name="clean.done" value="true"/>
+    </target>
+    <target name="composer" description="Install composer packages including require-dev.">
+        <get src="${url.composer.download}" dest="${composer}"/>
+        <exec executable="chmod" failonerror="true">
+            <arg value="+x"/>
+            <arg path="${composer}"/>
+        </exec>
+        <exec executable="php" failonerror="true">
+            <arg path="${composer}"/>
+            <arg value="install"/>
+            <arg value="--prefer-dist"/>
+            <arg value="--no-progress"/>
+        </exec>
+        <exec executable="php" failonerror="true">
+            <arg path="${composer}"/>
+            <arg value="update"/>
+        </exec>
+    </target>
+    <target name="downloadphpdocumentor" description="Install phpdocumentor.">
+        <get src="${url.phpdocumentor.download}" dest="${phpdocumentor}"/>
+        <exec executable="chmod" failonerror="true">
+            <arg value="+x"/>
+            <arg path="${phpdocumentor}"/>
+        </exec>
+    </target>
+    <target name="full-build" depends="prepare,composer,static-analysis,phpunit,-check-failure,projectdoc,deploy" description="Perform static analysis, run tests, and generate project documentation.">
+        <echo message="Built"/>
+    </target>
+    <target name="lint" unless="lint.done" description="Perform syntax check of PHP sourcecode files.">
+        <apply executable="php" failonerror="true" taskname="lint">
+            <arg value="-l"/>
+            <fileset dir="${basedir}/src">
+                <include name="**/*.php"/>
+            </fileset>
+            <fileset dir="${basedir}/tests">
+                <include name="**/*.php"/>
+            </fileset>
+        </apply>
+        <property name="lint.done" value="true"/>
+    </target>
+    <target name="pdepend" unless="pdepend.done" depends="prepare" description="Calculate software metrics using PHP_Depend and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${pdepend}" taskname="pdepend">
+            <arg value="--jdepend-xml=${basedir}/build/logs/jdepend.xml"/>
+            <arg value="--jdepend-chart=${basedir}/build/pdepend/dependencies.svg"/>
+            <arg value="--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg"/>
+            <arg path="${basedir}/src"/>
+        </exec>
+        <property name="pdepend.done" value="true"/>
+    </target>
+    <target name="phpcpd" unless="phpcpd.done" description="Find duplicate code using PHPCPD and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpcpd}" taskname="phpcpd">
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities"/>
+            <arg path="${basedir}/src"/>
+        </exec>
+        <property name="phpcpd.done" value="true"/>
+    </target>
+    <target name="phpcpd-ci" unless="phpcpd.done" depends="prepare" description="Find duplicate code using PHPCPD and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpcpd}" taskname="phpcpd">
+            <arg value="--log-pmd"/>
+            <arg path="${basedir}/build/logs/pmd-cpd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities/"/>
+            <arg path="${basedir}/src"/>
+        </exec>
+        <property name="phpcpd.done" value="true"/>
+    </target>
+    <target name="phpcs" unless="phpcs.done" description="Find coding standard violations using PHP_CodeSniffer and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpcs}" taskname="phpcs">
+            <arg value="--standard=${basedir}/build/phpcsrules.xml"/>
+            <arg value="--extensions=php"/>
+            <arg value="--ignore=autoload.php"/>
+            <arg path="${basedir}/src"/>
+            <arg path="${basedir}/tests"/>
+        </exec>
+        <property name="phpcs.done" value="true"/>
+    </target>
+    <target name="phpcs-ci" unless="phpcs.done" depends="prepare" description="Find coding standard violations using PHP_CodeSniffer and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpcs}" output="/dev/null" taskname="phpcs">
+            <arg value="--report=checkstyle"/>
+            <arg value="--report-file=${basedir}/build/logs/checkstyle.xml"/>
+            <arg value="--standard=${basedir}/build/phpcsrules.xml"/>
+            <arg value="--extensions=php"/>
+            <arg value="--ignore=autoload.php"/>
+            <arg path="${basedir}/src"/>
+            <arg path="${basedir}/tests"/>
+        </exec>
+        <property name="phpcs.done" value="true"/>
+    </target>
+    <target name="phpstan" unless="phpstan.done" description="Find coding standard violations using PHPStan and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpstan}" taskname="phpstan">
+            <arg value="analyze"/>
+            <arg value="-c"/>
+            <arg path="${basedir}/build/phpstan.neon"/>
+            <arg value="--autoload-file=${basedir}/vendor/autoload.php"/>
+            <arg value="--no-interaction"/>
+            <arg value="--no-progress"/>
+            <arg value="--error-format=table"/>
+        </exec>
+        <property name="phpstan.done" value="true"/>
+    </target>
+    <target name="phpstan-ci" unless="phpstan.done" depends="prepare" description="Find coding standard violations using PHPStan and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpstan}" taskname="phpstan" outputproperty="phpstan.output">
+            <arg value="analyze"/>
+            <arg value="-c"/>
+            <arg path="${basedir}/build/phpstan.neon"/>
+            <arg value="--autoload-file=${basedir}/vendor/autoload.php"/>
+            <arg value="--no-interaction"/>
+            <arg value="--no-progress"/>
+            <arg value="--error-format=checkstyle"/>
+        </exec>
+        <echo message="${phpstan.output}" file="${basedir}/build/logs/checkstyle_phpstan.xml"/>
+        <property name="phpstan.done" value="true"/>
+    </target>
+    <target name="phploc" unless="phploc.done" description="Measure project size using PHPLOC and print human readable output. Intended for usage on the command line.">
+        <exec executable="${phploc}" taskname="phploc">
+            <arg value="--count-tests"/>
+            <arg path="${basedir}/src"/>
+            <arg path="${basedir}/tests"/>
+        </exec>
+        <property name="phploc.done" value="true"/>
+    </target>
+    <target name="phploc-ci" unless="phploc.done" depends="prepare" description="Measure project size using PHPLOC and log result in CSV and XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phploc}" taskname="phploc">
+            <arg value="--count-tests"/>
+            <arg value="--log-csv"/>
+            <arg path="${basedir}/build/logs/phploc.csv"/>
+            <arg value="--log-xml"/>
+            <arg path="${basedir}/build/logs/phploc.xml"/>
+            <arg path="${basedir}/src"/>
+            <arg path="${basedir}/tests"/>
+        </exec>
+        <property name="phploc.done" value="true"/>
+    </target>
+    <target name="phpmd" unless="phpmd.done" description="Perform project mess detection using PHPMD and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${basedir}/src"/>
+            <arg value="text"/>
+            <arg path="${basedir}/build/phpmd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities/"/>
+        </exec>
+        <property name="phpmd.done" value="true"/>
+    </target>
+    <target name="phpmd-ci" unless="phpmd.done" depends="prepare" description="Perform project mess detection using PHPMD and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${basedir}/src"/>
+            <arg value="xml"/>
+            <arg path="${basedir}/build/phpmd.xml"/>
+            <arg value="--reportfile"/>
+            <arg path="${basedir}/build/logs/pmd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities/"/>
+        </exec>
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${basedir}/src"/>
+            <arg value="html"/>
+            <arg path="${basedir}/build/phpmd.xml"/>
+            <arg value="--reportfile"/>
+            <arg path="${basedir}/build/logs/pmd.html"/>
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities/"/>
+        </exec>
+        <property name="phpmd.done" value="true"/>
+    </target>
+    <target name="phpunit" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit.">
+        <exec executable="${phpunit}" resultproperty="result.phpunit" taskname="phpunit">
+            <arg value="--configuration"/>
+            <arg path="${basedir}/build/phpunit.xml"/>
+        </exec>
+        <property name="phpunit.done" value="true"/>
+    </target>
+    <target name="phpunit-no-coverage" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit without generating code coverage reports.">
+        <exec executable="${phpunit}" failonerror="true" taskname="phpunit">
+            <arg value="--configuration"/>
+            <arg path="${basedir}/build/phpunit.xml"/>
+            <arg path="tests"/>
+            <arg value="--no-coverage"/>
+        </exec>
+        <property name="phpunit.done" value="true"/>
+    </target>
+    <target name="prepare" unless="prepare.done" depends="clean" description="Prepare for build.">
+        <mkdir dir="${basedir}/build/builddoc"/>
+        <mkdir dir="${basedir}/build/doc"/>
+        <mkdir dir="${basedir}/build/coverage"/>
+        <mkdir dir="${basedir}/build/logs"/>
+        <mkdir dir="${basedir}/build/pdepend"/>
+        <mkdir dir="${basedir}/build/dist"/>
+        <mkdir dir="${basedir}/build/phpdoc"/>
+        <property name="prepare.done" value="true"/>
+    </target>
+    <target name="quick-build" depends="prepare,composer,lint,phpunit-no-coverage" description="Perform lint check and run tests without generating code coverage reports.">
+        <echo message="Built"/>
+    </target>
+    <target name="static-analysis" depends="lint,phploc-ci,pdepend,phpmd-ci,phpcs-ci,phpstan-ci,phpcpd-ci" description="Perform static analysis.">
+        <echo message="Done"/>
+    </target>
+    <target name="-check-failure">
+        <fail message="PHPUnit did not finish successfully">
+            <condition>
+                <not>
+                    <equals arg1="${result.phpunit}" arg2="0"/>
+                </not>
+            </condition>
+        </fail>
+        <echo message="Checked failure"/>
+    </target>
+    <target name="deploy" description="Deplay build">
+        <zip destfile="${basedir}/build/dist/doc.zip">
+            <fileset dir="${basedir}/build/doc">
+                <include name="**/*.*"/>
+            </fileset>
+        </zip>
+        <zip destfile="${basedir}/build/dist/src.zip">
+            <fileset dir="${basedir}/src">
+                <include name="**/*.*"/>
+            </fileset>
+        </zip>
+        <zip destfile="${basedir}/build/dist/builddoc.zip">
+            <fileset dir="${basedir}/build">
+                <include name="builddoc/**/*.*"/>
+                <include name="coverage/**/*.*"/>
+                <include name="coverage-html/**/*.*"/>
+                <include name="logs/**/*.*"/>
+                <include name="pdepend/**/*.*"/>
+                <exclude name="phpdoc/**/*.*"/>
+            </fileset>
+        </zip>
+    </target>
+    <target name="projectdoc" description="Generate documentation">
+        <antcall target="clean"/>
+        <antcall target="downloadphpdocumentor"/>
+        <exec executable="php" dir="${basedir}/build">
+            <arg path="${phpdocumentor}"/>
+        </exec>
+        <delete file="${phpdocumentor}"/>
+        <antcall target="clean"/>
+    </target>
+</project>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build.xml	(revision 8435)
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="php-automate-build-ant" default="full-build" basedir=".">
+    <!-- By default the tools are managed by Composer in ${project.basedir}/vendor/bin -->
+    <property name="url.composer.download" value="https://getcomposer.org/download/2.2.6/composer.phar"/>
+    <property name="url.phpdocumentor.download" value="https://phpdoc.org/phpDocumentor.phar"/>
+    <property name="composer" value="${project.basedir}/composer.phar"/>
+    <property name="phpdocumentor" value="${project.basedir}/phpDocumentor.phar"/>
+    <property name="pdepend" value="${project.basedir}/vendor/bin/pdepend"/>
+    <property name="phpcpd" value="${project.basedir}/vendor/bin/phpcpd"/>
+    <property name="phpcs" value="${project.basedir}/vendor/bin/phpcs"/>
+    <property name="phploc" value="${project.basedir}/vendor/bin/phploc"/>
+    <property name="phpmd" value="${project.basedir}/vendor/bin/phpmd"/>
+    <property name="phpunit" value="${project.basedir}/vendor/bin/phpunit"/>
+    <property name="phpstan" value="${project.basedir}/vendor/bin/phpstan"/>
+    <property name="git" value="/usr/bin/git"/>
+    <target name="clean" unless="clean.done" description="Cleanup build artifacts.">
+        <delete dir="${project.basedir}/build/builddoc"/>
+        <delete dir="${project.basedir}/build/cache"/>
+        <delete dir="${project.basedir}/build/doc"/>
+        <delete dir="${project.basedir}/build/coverage"/>
+        <delete dir="${project.basedir}/build/logs"/>
+        <delete dir="${project.basedir}/build/pdepend"/>
+        <delete dir="${project.basedir}/build/dist"/>
+        <delete dir="${project.basedir}/build/phpdoc"/>
+        <property name="clean.done" value="true"/>
+    </target>
+    <target name="composer" description="Install composer packages including require-dev.">
+        <exec executable="wget">
+            <arg path="${url.composer.download}"/>
+            <arg value="-O"/>
+            <arg path="${composer}"/>
+        </exec>
+        <exec executable="chmod">
+            <arg value="+x"/>
+            <arg path="${composer}"/>
+        </exec>
+        <exec executable="php">
+            <arg path="${composer}"/>
+            <arg value="install"/>
+            <arg value="--prefer-dist"/>
+            <arg value="--no-progress"/>
+        </exec>
+        <exec executable="php">
+            <arg path="${composer}"/>
+            <arg value="update"/>
+        </exec>
+    </target>
+    <target name="downloadphpdocumentor" description="Install phpdocumentor">
+        <exec executable="wget">
+            <arg path="${url.phpdocumentor.download}"/>
+            <arg value="-O"/>
+            <arg path="${phpdocumentor}"/>
+        </exec>
+        <exec executable="chmod">
+            <arg value="+x"/>
+            <arg path="${phpdocumentor}"/>
+        </exec>
+    </target>
+    <target name="full-build" depends="prepare,composer,static-analysis,phpunit,-check-failure,projectdoc,deploy" description="Perform static analysis, run tests, and generate project documentation.">
+        <echo message="Built"/>
+    </target>
+    <target name="lint" unless="lint.done" description="Perform syntax check of PHP sourcecode files.">
+        <apply executable="php" taskname="lint">
+            <arg value="-l"/>
+            <fileset dir="${project.basedir}/src">
+                <include name="**/*.php"/>
+            </fileset>
+            <fileset dir="${project.basedir}/tests">
+                <include name="**/*.php"/>
+            </fileset>
+        </apply>
+        <property name="lint.done" value="true"/>
+    </target>
+    <target name="pdepend" unless="pdepend.done" depends="prepare" description="Calculate software metrics using PHP_Depend and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${pdepend}" taskname="pdepend">
+            <arg value="--jdepend-xml=${project.basedir}/build/logs/jdepend.xml"/>
+            <arg value="--jdepend-chart=${project.basedir}/build/pdepend/dependencies.svg"/>
+            <arg value="--overview-pyramid=${project.basedir}/build/pdepend/overview-pyramid.svg"/>
+            <arg path="${project.basedir}/src"/>
+        </exec>
+        <property name="pdepend.done" value="true"/>
+    </target>
+    <target name="phpcpd" unless="phpcpd.done" description="Find duplicate code using PHPCPD and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpcpd}" taskname="phpcpd">
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+            <arg path="${project.basedir}/src"/>
+        </exec>
+        <property name="phpcpd.done" value="true"/>
+    </target>
+    <target name="phpcpd-ci" unless="phpcpd.done" depends="prepare" description="Find duplicate code using PHPCPD and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpcpd}" taskname="phpcpd">
+            <arg value="--log-pmd"/>
+            <arg path="${project.basedir}/build/logs/pmd-cpd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+            <arg path="${project.basedir}/src"/>
+        </exec>
+        <property name="phpcpd.done" value="true"/>
+    </target>
+    <target name="phpcs" unless="phpcs.done" description="Find coding standard violations using PHP_CodeSniffer and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpcs}" taskname="phpcs">
+            <arg value="--standard=${project.basedir}/build/phpcsrules.xml"/>
+            <arg value="--extensions=php"/>
+            <arg value="--ignore=autoload.php"/>
+            <arg path="${project.basedir}/src"/>
+            <arg path="${project.basedir}/tests"/>
+        </exec>
+        <property name="phpcs.done" value="true"/>
+    </target>
+    <target name="phpcs-ci" unless="phpcs.done" depends="prepare" description="Find coding standard violations using PHP_CodeSniffer and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpcs}" output="/dev/null" taskname="phpcs">
+            <arg value="--report=checkstyle"/>
+            <arg value="--report-file=${project.basedir}/build/logs/checkstyle.xml"/>
+            <arg value="--standard=${project.basedir}/build/phpcsrules.xml"/>
+            <arg value="--extensions=php"/>
+            <arg value="--ignore=autoload.php"/>
+            <arg path="${project.basedir}/src"/>
+            <arg path="${project.basedir}/tests"/>
+        </exec>
+        <property name="phpcs.done" value="true"/>
+    </target>
+    <target name="phpstan" unless="phpstan.done" description="Find coding standard violations using PHPStan and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpstan}" taskname="phpstan" passthru="true">
+            <arg value="analyze"/>
+            <arg value="-c"/>
+            <arg path="${project.basedir}/build/phpstan.neon"/>
+            <arg value="--autoload-file=${project.basedir}/vendor/autoload.php"/>
+            <arg value="--no-interaction"/>
+            <arg value="--no-progress"/>
+            <arg value="--error-format=table"/>
+        </exec>
+        <property name="phpstan.done" value="true"/>
+    </target>
+    <target name="phpstan-ci" unless="phpstan.done" depends="prepare" description="Find coding standard violations using PHPStan and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpstan}" taskname="phpstan" outputProperty="phpstan.output">
+            <arg value="analyze"/>
+            <arg value="-c"/>
+            <arg path="${project.basedir}/build/phpstan.neon"/>
+            <arg value="--autoload-file=${project.basedir}/vendor/autoload.php"/>
+            <arg value="--no-interaction"/>
+            <arg value="--no-progress"/>
+            <arg value="--error-format=checkstyle"/>
+        </exec>
+        <echo message="${phpstan.output}" file="${project.basedir}/build/logs/checkstyle_phpstan.xml"/>
+        <property name="phpstan.done" value="true"/>
+    </target>
+    <target name="phploc" unless="phploc.done" description="Measure project size using PHPLOC and print human readable output. Intended for usage on the command line.">
+        <exec executable="${phploc}" taskname="phploc">
+            <arg value="--count-tests"/>
+            <arg path="${project.basedir}/src"/>
+            <arg path="${project.basedir}/tests"/>
+        </exec>
+        <property name="phploc.done" value="true"/>
+    </target>
+    <target name="phploc-ci" unless="phploc.done" depends="prepare" description="Measure project size using PHPLOC and log result in CSV and XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phploc}" taskname="phploc">
+            <arg value="--count-tests"/>
+            <arg value="--log-csv"/>
+            <arg path="${project.basedir}/build/logs/phploc.csv"/>
+            <arg value="--log-xml"/>
+            <arg path="${project.basedir}/build/logs/phploc.xml"/>
+            <arg path="${project.basedir}/src"/>
+            <arg path="${project.basedir}/tests"/>
+        </exec>
+        <property name="phploc.done" value="true"/>
+    </target>
+    <target name="phpmd" unless="phpmd.done" description="Perform project mess detection using PHPMD and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${project.basedir}/src"/>
+            <arg value="text"/>
+            <arg path="${project.basedir}/build/phpmd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+        </exec>
+        <property name="phpmd.done" value="true"/>
+    </target>
+    <target name="phpmd-ci" unless="phpmd.done" depends="prepare" description="Perform project mess detection using PHPMD and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${project.basedir}/src"/>
+            <arg value="xml"/>
+            <arg path="${project.basedir}/build/phpmd.xml"/>
+            <arg value="--reportfile"/>
+            <arg path="${project.basedir}/build/logs/pmd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+        </exec>
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${project.basedir}/src"/>
+            <arg value="html"/>
+            <arg path="${project.basedir}/build/phpmd.xml"/>
+            <arg value="--reportfile"/>
+            <arg path="${project.basedir}/build/logs/pmd.html"/>
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+        </exec>
+        <property name="phpmd.done" value="true"/>
+    </target>
+    <target name="phpunit" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit.">
+        <exec executable="${phpunit}" returnProperty="result.phpunit" taskname="phpunit">
+            <arg value="--configuration"/>
+            <arg path="${project.basedir}/build/phpunit.xml"/>
+        </exec>
+        <property name="phpunit.done" value="true"/>
+    </target>
+    <target name="phpunit-no-coverage" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit without generating code coverage reports.">
+        <exec executable="${phpunit}" taskname="phpunit">
+            <arg value="--configuration"/>
+            <arg path="${project.basedir}/build/phpunit.xml"/>
+            <arg path="tests"/>
+            <arg value="--no-coverage"/>
+        </exec>
+        <property name="phpunit.done" value="true"/>
+    </target>
+    <target name="prepare" unless="prepare.done" depends="clean" description="Prepare for build.">
+        <mkdir dir="${project.basedir}/build/builddoc"/>
+        <mkdir dir="${project.basedir}/build/cache"/>
+        <mkdir dir="${project.basedir}/build/doc"/>
+        <mkdir dir="${project.basedir}/build/coverage"/>
+        <mkdir dir="${project.basedir}/build/logs"/>
+        <mkdir dir="${project.basedir}/build/pdepend"/>
+        <mkdir dir="${project.basedir}/build/dist"/>
+        <mkdir dir="${project.basedir}/build/phpdoc"/>
+        <property name="prepare.done" value="true"/>
+    </target>
+    <target name="quick-build" depends="prepare,composer,lint,phpunit-no-coverage" description="Perform lint check and run tests without generating code coverage reports.">
+        <echo message="Built"/>
+    </target>
+    <target name="static-analysis" depends="lint,phploc-ci,pdepend,phpmd-ci,phpcs-ci,phpstan-ci,phpcpd-ci" description="Perform static analysis.">
+        <echo message="Done"/>
+    </target>
+    <target name="-check-failure">
+        <fail message="PHPUnit did not finish successfully">
+            <condition>
+                <not>
+                    <equals arg1="${result.phpunit}" arg2="0"/>
+                </not>
+            </condition>
+        </fail>
+        <echo message="Checked failure"/>
+    </target>
+    <target name="deploy" description="Deplay build">
+        <zip destfile="${project.basedir}/build/dist/doc.zip">
+            <fileset dir="${project.basedir}/build/doc">
+                <include name="**/*.*"/>
+            </fileset>
+        </zip>
+        <zip destfile="${project.basedir}/build/dist/src.zip">
+            <fileset dir="${project.basedir}/src">
+                <include name="**/*.*"/>
+            </fileset>
+        </zip>
+        <zip destfile="${project.basedir}/build/dist/builddoc.zip">
+            <fileset dir="${project.basedir}/build">
+                <include name="builddoc/**/*.*"/>
+                <include name="coverage/**/*.*"/>
+                <include name="coverage-html/**/*.*"/>
+                <include name="logs/**/*.*"/>
+                <include name="pdepend/**/*.*"/>
+                <exclude name="phpdoc/**/*.*"/>
+            </fileset>
+        </zip>
+    </target>
+    <target name="projectdoc" description="Generate documentation">
+        <if>
+            <versioncompare version="${php.version}" desiredVersion="7.4" operator=">=" />
+            <then>
+                <phingcall target="clean" />
+                <phingcall target="downloadphpdocumentor" />
+                <exec executable="php" dir="${project.basedir}/build">
+                    <arg path="${phpdocumentor}"/>
+                </exec>
+                <delete file="${phpdocumentor}"/>
+                <phingcall target="clean" />
+            </then>
+            <else>
+                <echo message="Build documentation only on PHP7.4 or higher" />
+            </else>
+        </if>
+    </target>
+</project>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpcsrules.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpcsrules.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpcsrules.xml	(revision 8435)
@@ -0,0 +1,351 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PSR12" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The PSR-12 coding standard.</description>
+    <arg name="tab-width" value="4"/>
+    <exclude-pattern>*/src/entities/*</exclude-pattern>
+
+    <!-- 2. General -->
+
+    <!-- 2.1 Basic Coding Standard -->
+
+    <!-- Code MUST follow all rules outlined in PSR-1. -->
+    <rule ref="PSR1"/>
+
+    <!-- The term 'StudlyCaps' in PSR-1 MUST be interpreted as PascalCase where the first letter of each word is capitalized including the very first letter. -->
+
+    <!-- 2.2 Files -->
+
+    <!-- All PHP files MUST use the Unix LF (linefeed) line ending only. -->
+    <rule ref="Generic.Files.LineEndings">
+        <properties>
+            <property name="eolChar" value="\n"/>
+        </properties>
+    </rule>
+
+    <!-- All PHP files MUST end with a non-blank line, terminated with a single LF. -->
+    <rule ref="PSR2.Files.EndFileNewline"/>
+
+    <!-- The closing ?> tag MUST be omitted from files containing only PHP. -->
+    <rule ref="PSR2.Files.ClosingTag"/>
+
+    <!-- 2.3 Lines -->
+
+    <!-- There MUST NOT be a hard limit on line length.
+    The soft limit on line length MUST be 120 characters.
+    Lines SHOULD NOT be longer than 80 characters; lines longer than that SHOULD be split into multiple subsequent lines of no more than 80 characters each. -->
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="500"/>
+            <property name="absoluteLineLimit" value="0"/>
+        </properties>
+    </rule>
+
+    <!-- There MUST NOT be trailing whitespace at the end of lines.
+    Blank lines MAY be added to improve readability and to indicate related blocks of code except where explicitly forbidden. -->
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace">
+        <properties>
+            <property name="ignoreBlankLines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines">
+        <severity>0</severity>
+    </rule>
+
+    <!-- There MUST NOT be more than one statement per line. -->
+    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
+
+    <!-- 2.4 Indenting -->
+
+    <!-- Code MUST use an indent of 4 spaces for each indent level, and MUST NOT use tabs for indenting. -->
+    <rule ref="Generic.WhiteSpace.ScopeIndent">
+        <properties>
+            <property name="ignoreIndentationTokens" type="array">
+                <element value="T_COMMENT"/>
+                <element value="T_DOC_COMMENT_OPEN_TAG"/>
+            </property>
+        </properties>
+    </rule>
+    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
+
+    <!-- 2.5 Keywords and Types -->
+
+    <!-- All PHP reserved keywords and types [1][2] MUST be in lower case.
+    Any new types and keywords added to future PHP versions MUST be in lower case. -->
+    <rule ref="Generic.PHP.LowerCaseKeyword"/>
+    <rule ref="Generic.PHP.LowerCaseConstant"/>
+    <rule ref="Generic.PHP.LowerCaseType"/>
+
+    <!-- Short form of type keywords MUST be used i.e. bool instead of boolean, int instead of integer etc. -->
+    <!-- checked by PSR12.Keywords.ShortFormTypeKeywords -->
+
+    <!-- 3. Declare Statements, Namespace, and Import Statements -->
+
+    <!-- The header of a PHP file may consist of a number of different blocks. If present, each of the blocks below MUST be separated by a single blank line, and MUST NOT contain a blank line. Each block MUST be in the order listed below, although blocks that are not relevant may be omitted.
+
+    Opening php tag.
+    File-level docblock.
+    One or more declare statements.
+    The namespace declaration of the file.
+    One or more class-based use import statements.
+    One or more function-based use import statements.
+    One or more constant-based use import statements.
+    The remainder of the code in the file. -->
+    <!-- checked by PSR12.Files.FileHeader -->
+
+    <!-- When a file contains a mix of HTML and PHP, any of the above sections may still be used. If so, they MUST be present at the top of the file, even if the remainder of the code consists of a closing PHP tag and then a mixture of HTML and PHP. -->
+
+    <!-- When the opening php tag is on the first line of the file, it MUST be on its own line with no other statements unless it is a file containing markup outside of PHP opening and closing tags. -->
+
+    <!-- Import statements MUST never begin with a leading backslash as they must always be fully qualified. -->
+    <!-- checked by PSR12.Files.ImportStatement -->
+
+    <!-- Compound namespaces with a depth of more than two MUST NOT be used. -->
+    <!-- checked by PSR12.Namespaces.CompoundNamespaceDepth -->
+
+    <!-- When wishing to declare strict types in files containing markup outside PHP opening and closing tags, the declaration MUST be on the first line of the file and include an opening PHP tag, the strict types declaration and closing tag. -->
+    <!-- Declare statements MUST contain no spaces and MUST be exactly declare(strict_types=1) (with an optional semi-colon terminator). -->
+    <!-- Block declare statements are allowed and MUST be formatted as below. -->
+    <!-- checked by PSR12.Files.DeclareStatement -->
+
+    <!-- 4. Classes, Properties, and Methods -->
+
+    <!-- Any closing brace MUST NOT be followed by any comment or statement on the same line. -->
+    <!-- checked by PSR12.Classes.ClosingBrace -->
+
+    <!-- When instantiating a new class, parentheses MUST always be present even when there are no arguments passed to the constructor. -->
+    <!-- checked by PSR12.Classes.ClassInstantiation -->
+
+    <!-- 4.1 Extends and Implements -->
+
+    <!-- The extends and implements keywords MUST be declared on the same line as the class name. -->
+    <!-- The opening brace for the class MUST go on its own line; the closing brace for the class MUST go on the next line after the body. -->
+    <!-- Opening braces MUST be on their own line and MUST NOT be preceded or followed by a blank line. -->
+    <!-- Closing braces MUST be on their own line and MUST NOT be preceded by a blank line. -->
+    <!-- Lists of implements and, in the case of interfaces, extends MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one interface per line. -->
+    <rule ref="PSR2.Classes.ClassDeclaration"/>
+
+    <!-- 4.2 Using traits -->
+
+    <!-- The use keyword used inside the classes to implement traits MUST be declared on the next line after the opening brace. -->
+    <!-- Each individual trait that is imported into a class MUST be included one-per-line and each inclusion MUST have its own use import statement. -->
+    <!-- When the class has nothing after the use import statement, the class closing brace MUST be on the next line after the use import statement. Otherwise, it MUST have a blank line after the use import statement. -->
+    <!-- When using the insteadof and as operators they must be used as follows taking note of indentation, spacing, and new lines. -->
+    <!-- checked by PSR12.Traits.UseDeclaration -->
+
+    <!-- 4.3 Properties and Constants -->
+
+    <!-- Visibility MUST be declared on all properties. -->
+    <!-- The var keyword MUST NOT be used to declare a property. -->
+    <!-- There MUST NOT be more than one property declared per statement. -->
+    <!-- Property names MUST NOT be prefixed with a single underscore to indicate protected or private visibility.
+    That is, an underscore prefix explicitly has no meaning. -->
+    <!-- There MUST be a space between type declaration and property name. -->
+    <rule ref="PSR2.Classes.PropertyDeclaration"/>
+
+    <!-- Visibility MUST be declared on all constants if your project PHP minimum version supports constant visibilities (PHP 7.1 or later). -->
+    <!-- checked by PSR12.Properties.ConstantVisibility -->
+
+    <!-- 4.4 Methods and Functions -->
+
+    <!-- Visibility MUST be declared on all methods. -->
+    <rule ref="Squiz.Scope.MethodScope"/>
+    <rule ref="Squiz.WhiteSpace.ScopeKeywordSpacing"/>
+
+    <!-- Method names MUST NOT be prefixed with a single underscore to indicate protected or private visibility. That is, an underscore prefix explicitly has no meaning. -->
+    <rule ref="PSR2.Methods.MethodDeclaration"/>
+    <rule ref="PSR2.Methods.MethodDeclaration.Underscore">
+        <type>error</type>
+        <message>Method name "%s" must not be prefixed with an underscore to indicate visibility</message>
+    </rule>
+
+    <!-- Method and function names MUST NOT be declared with space after the method name. The opening brace MUST go on its own line, and the closing brace MUST go on the next line following the body. There MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. -->
+    <rule ref="PSR2.Methods.FunctionClosingBrace"/>
+    <rule ref="Squiz.Functions.FunctionDeclaration"/>
+    <rule ref="Squiz.Functions.LowercaseFunctionKeywords"/>
+
+    <!-- 4.5 Method and Function Arguments -->
+
+    <!-- In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- When using the reference operator & before an argument, there MUST NOT be a space after it. -->
+    <!-- There MUST NOT be a space between the variadic three dot operator and the argument name. -->
+    <!-- When combining both the reference operator and the variadic three dot operator, there MUST NOT be any space between the two of them. -->
+    <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing">
+        <properties>
+            <property name="equalsSpacing" value="1"/>
+        </properties>
+    </rule>
+
+    <!-- Method and function arguments with default values MUST go at the end of the argument list. -->
+    <rule ref="PEAR.Functions.ValidDefaultValue"/>
+
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line.
+    When the argument list is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <rule ref="Squiz.Functions.MultiLineFunctionDeclaration"/>
+
+    <!-- When you have a return type declaration present, there MUST be one space after the colon followed by the type declaration. The colon and declaration MUST be on the same line as the argument list closing parenthesis with no spaces between the two characters. -->
+    <!-- checked by PSR12.Functions.ReturnTypeDeclaration -->
+
+    <!-- In nullable type declarations, there MUST NOT be a space between the question mark and the type. -->
+    <!-- checked by PSR12.Functions.NullableTypeDeclaration -->
+
+    <!-- 4.6 abstract, final, and static -->
+
+    <!-- When present, the abstract and final declarations MUST precede the visibility declaration. -->
+    <!-- When present, the static declaration MUST come after the visibility declaration. -->
+    <!-- checked by PSR2.Methods.MethodDeclaration included above -->
+
+    <!-- 4.7 Method and Function Calls -->
+
+    <!-- When making a method or function call, there MUST NOT be a space between the method or function name and the opening parenthesis, there MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line. A single argument being split across multiple lines (as might be the case with an anonymous function or array) does not constitute splitting the argument list itself. -->
+    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature.SpaceAfterCloseBracket">
+        <severity>0</severity>
+    </rule>
+    <rule ref="PSR2.Methods.FunctionCallSignature.OpeningIndent">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 5. Control Structures -->
+
+    <!-- The general style rules for control structures are as follows:
+    There MUST be one space after the control structure keyword
+    There MUST NOT be a space after the opening parenthesis
+    There MUST NOT be a space before the closing parenthesis
+    There MUST be one space between the closing parenthesis and the opening brace
+    The structure body MUST be indented once
+    The body MUST be on the next line after the opening brace
+    The closing brace MUST be on the next line after the body
+    The body of each structure MUST be enclosed by braces. This standardizes how the structures look and reduces the likelihood of introducing errors as new lines get added to the body. -->
+    <rule ref="Squiz.ControlStructures.ControlSignature"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose"/>
+    <rule ref="Squiz.WhiteSpace.ScopeClosingBrace"/>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration"/>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration">
+        <properties>
+            <property name="ignoreNewlines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingBeforeClose">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.LowercaseDeclaration"/>
+    <rule ref="Generic.ControlStructures.InlineControlStructure"/>
+
+    <!-- exclude this message as it is already checked in Generic.PHP.LowerCaseKeyword -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.AsNotLower">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 5.1 if, elseif, else -->
+
+    <!-- else and elseif are on the same line as the closing brace from the earlier body. -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature included above -->
+
+    <!-- The keyword elseif SHOULD be used instead of else if so that all control keywords look like single words. -->
+    <rule ref="PSR2.ControlStructures.ElseIfDeclaration"/>
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.2 switch, case -->
+
+    <!-- The case statement MUST be indented once from switch, and the break keyword (or other terminating keywords) MUST be indented at the same level as the case body. There MUST be a comment such as // no break when fall-through is intentional in a non-empty case body. -->
+    <rule ref="PSR2.ControlStructures.SwitchDeclaration"/>
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.3.1 while -->
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.3.2 do while -->
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.4 for -->
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first expression MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.5 foreach -->
+
+    <!-- exclude these messages as they are already checked by PSR2.ControlStructures.ControlStructureSpacing -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceBeforeClose">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 5.6 try, catch, finally -->
+
+    <!-- 6. Operators -->
+
+    <!-- When space is permitted around an operator, multiple spaces MAY be used for readability purposes. -->
+    <!-- All operators not described here are left undefined. -->
+
+    <!-- 6.1. Unary operators -->
+
+    <!-- The increment/decrement operators MUST NOT have any space between the operator and operand. -->
+    <rule ref="Generic.WhiteSpace.IncrementDecrementSpacing"/>
+
+    <!-- Type casting operators MUST NOT have any space within the parentheses. -->
+    <rule ref="Squiz.WhiteSpace.CastSpacing"/>
+
+    <!-- 6.2. Binary operators -->
+
+    <!-- All binary arithmetic, comparison, assignment, bitwise, logical, string, and type operators MUST be preceded and followed by at least one space. -->
+    <!-- checked by PSR12.Operators.OperatorSpacing -->
+
+    <!-- 6.3. Ternary operators -->
+
+    <!-- The conditional operator, also known simply as the ternary operator, MUST be preceded and followed by at least one space around both the ? and : characters. -->
+    <!-- When the middle operand of the conditional operator is omitted, the operator MUST follow the same style rules as other binary comparison operators. -->
+    <!-- checked by PSR12.Operators.OperatorSpacing -->
+
+    <!-- 7. Closures -->
+
+    <!-- Closures MUST be declared with a space after the function keyword, and a space before and after the use keyword. -->
+    <!-- The opening brace MUST go on the same line, and the closing brace MUST go on the next line following the body. -->
+    <!-- There MUST NOT be a space after the opening parenthesis of the argument list or variable list, and there MUST NOT be a space before the closing parenthesis of the argument list or variable list. -->
+    <!-- In the argument list and variable list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- Closure arguments with default values MUST go at the end of the argument list. -->
+    <!-- Argument lists and variable lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument or variable per line. -->
+    <!-- When the ending list (whether of arguments or variables) is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked by Squiz.Functions.MultiLineFunctionDeclaration -->
+
+    <!-- If a return type is present, it MUST follow the same rules as with normal functions and methods; if the use keyword is present, the colon MUST follow the use list closing parentheses with no spaces between the two characters. -->
+    <!-- checked by PSR12.Functions.ReturnTypeDeclaration -->
+
+    <!-- 8. Anonymous Classes -->
+
+    <!-- Anonymous Classes MUST follow the same guidelines and principles as closures in the above section. -->
+    <!-- The opening brace MAY be on the same line as the class keyword so long as the list of implements interfaces does not wrap. If the list of interfaces wraps, the brace MUST be placed on the line immediately following the last interface. -->
+    <!-- checked by PSR12.Classes.AnonClassDeclaration -->
+
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpcsrules_psr1.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpcsrules_psr1.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpcsrules_psr1.xml	(revision 8435)
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PSR1" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The PSR1 coding standard.</description>
+
+    <!-- 2. Files -->
+
+    <!-- 2.1. PHP Tags -->
+
+    <!-- PHP code MUST use the long <?php ?> tags or the short-echo <?= ?> tags; it MUST NOT use the other tag variations. -->
+    <rule ref="Generic.PHP.DisallowAlternativePHPTags"/>
+    <rule ref="Generic.PHP.DisallowShortOpenTag"/>
+    <rule ref="Generic.PHP.DisallowShortOpenTag.EchoFound">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 2.2. Character Encoding -->
+
+    <!-- PHP code MUST use only UTF-8 without BOM. -->
+    <rule ref="Generic.Files.ByteOrderMark"/>
+
+    <!-- 2.3. Side Effects -->
+
+    <!-- A file SHOULD declare new symbols (classes, functions, constants, etc.) and cause no other side effects, or it SHOULD execute logic with side effects, but SHOULD NOT do both. -->
+    <!-- checked by PSR1.Files.SideEffects -->
+
+    <!-- 3. Namespace and Class Names -->
+
+    <!-- Namespaces and classes MUST follow PSR-0.
+         This means each class is in a file by itself, and is in a namespace of at least one level: a top-level vendor name. -->
+    <!-- checked by PSR1.Classes.ClassDeclaration -->
+
+    <!-- Class names MUST be declared in StudlyCaps. -->
+    <rule ref="Squiz.Classes.ValidClassName"/>
+
+    <!-- 4. Class Constants, Properties, and Methods -->
+
+    <!-- 4.1. Constants -->
+
+    <!-- Class constants MUST be declared in all upper case with underscore separators. -->
+    <rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
+
+    <!-- 4.3. Methods -->
+
+    <!-- Method names MUST be declared in camelCase(). -->
+    <!-- checked by PSR1.Methods.CamelCapsMethodName -->
+
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpcsrules_psr12.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpcsrules_psr12.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpcsrules_psr12.xml	(revision 8435)
@@ -0,0 +1,268 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PSR12" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The PSR-12 coding standard.</description>
+    <arg name="tab-width" value="4"/>
+    <!-- 2. General -->
+    <!-- 2.1 Basic Coding Standard -->
+    <!-- Code MUST follow all rules outlined in PSR-1. -->
+    <rule ref="PSR1"/>
+    <!-- The term 'StudlyCaps' in PSR-1 MUST be interpreted as PascalCase where the first letter of each word is capitalized including the very first letter. -->
+    <!-- 2.2 Files -->
+    <!-- All PHP files MUST use the Unix LF (linefeed) line ending only. -->
+    <rule ref="Generic.Files.LineEndings">
+        <properties>
+            <property name="eolChar" value="\n"/>
+        </properties>
+    </rule>
+    <!-- All PHP files MUST end with a non-blank line, terminated with a single LF. -->
+    <rule ref="PSR2.Files.EndFileNewline"/>
+    <!-- The closing ?> tag MUST be omitted from files containing only PHP. -->
+    <rule ref="PSR2.Files.ClosingTag"/>
+    <!-- 2.3 Lines -->
+    <!-- There MUST NOT be a hard limit on line length.
+    The soft limit on line length MUST be 120 characters.
+    Lines SHOULD NOT be longer than 80 characters; lines longer than that SHOULD be split into multiple subsequent lines of no more than 80 characters each. -->
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="120"/>
+            <property name="absoluteLineLimit" value="0"/>
+        </properties>
+    </rule>
+    <!-- There MUST NOT be trailing whitespace at the end of lines.
+    Blank lines MAY be added to improve readability and to indicate related blocks of code except where explicitly forbidden. -->
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace">
+        <properties>
+            <property name="ignoreBlankLines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines">
+        <severity>0</severity>
+    </rule>
+    <!-- There MUST NOT be more than one statement per line. -->
+    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
+    <!-- 2.4 Indenting -->
+    <!-- Code MUST use an indent of 4 spaces for each indent level, and MUST NOT use tabs for indenting. -->
+    <rule ref="Generic.WhiteSpace.ScopeIndent">
+        <properties>
+            <property name="ignoreIndentationTokens" type="array">
+                <element value="T_COMMENT"/>
+                <element value="T_DOC_COMMENT_OPEN_TAG"/>
+            </property>
+        </properties>
+    </rule>
+    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
+    <!-- 2.5 Keywords and Types -->
+    <!-- All PHP reserved keywords and types [1][2] MUST be in lower case.
+    Any new types and keywords added to future PHP versions MUST be in lower case. -->
+    <rule ref="Generic.PHP.LowerCaseKeyword"/>
+    <rule ref="Generic.PHP.LowerCaseConstant"/>
+    <rule ref="Generic.PHP.LowerCaseType"/>
+    <!-- Short form of type keywords MUST be used i.e. bool instead of boolean, int instead of integer etc. -->
+    <!-- checked by PSR12.Keywords.ShortFormTypeKeywords -->
+    <!-- 3. Declare Statements, Namespace, and Import Statements -->
+    <!-- The header of a PHP file may consist of a number of different blocks. If present, each of the blocks below MUST be separated by a single blank line, and MUST NOT contain a blank line. Each block MUST be in the order listed below, although blocks that are not relevant may be omitted.
+
+    Opening php tag.
+    File-level docblock.
+    One or more declare statements.
+    The namespace declaration of the file.
+    One or more class-based use import statements.
+    One or more function-based use import statements.
+    One or more constant-based use import statements.
+    The remainder of the code in the file. -->
+    <!-- checked by PSR12.Files.FileHeader -->
+    <!-- When a file contains a mix of HTML and PHP, any of the above sections may still be used. If so, they MUST be present at the top of the file, even if the remainder of the code consists of a closing PHP tag and then a mixture of HTML and PHP. -->
+    <!-- When the opening php tag is on the first line of the file, it MUST be on its own line with no other statements unless it is a file containing markup outside of PHP opening and closing tags. -->
+    <!-- Import statements MUST never begin with a leading backslash as they must always be fully qualified. -->
+    <!-- checked by PSR12.Files.ImportStatement -->
+    <!-- Compound namespaces with a depth of more than two MUST NOT be used. -->
+    <!-- checked by PSR12.Namespaces.CompoundNamespaceDepth -->
+    <!-- When wishing to declare strict types in files containing markup outside PHP opening and closing tags, the declaration MUST be on the first line of the file and include an opening PHP tag, the strict types declaration and closing tag. -->
+    <!-- Declare statements MUST contain no spaces and MUST be exactly declare(strict_types=1) (with an optional semi-colon terminator). -->
+    <!-- Block declare statements are allowed and MUST be formatted as below. -->
+    <!-- checked by PSR12.Files.DeclareStatement -->
+    <!-- 4. Classes, Properties, and Methods -->
+    <!-- Any closing brace MUST NOT be followed by any comment or statement on the same line. -->
+    <!-- checked by PSR12.Classes.ClosingBrace -->
+    <!-- When instantiating a new class, parentheses MUST always be present even when there are no arguments passed to the constructor. -->
+    <!-- checked by PSR12.Classes.ClassInstantiation -->
+    <!-- 4.1 Extends and Implements -->
+    <!-- The extends and implements keywords MUST be declared on the same line as the class name. -->
+    <!-- The opening brace for the class MUST go on its own line; the closing brace for the class MUST go on the next line after the body. -->
+    <!-- Opening braces MUST be on their own line and MUST NOT be preceded or followed by a blank line. -->
+    <!-- Closing braces MUST be on their own line and MUST NOT be preceded by a blank line. -->
+    <!-- Lists of implements and, in the case of interfaces, extends MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one interface per line. -->
+    <rule ref="PSR2.Classes.ClassDeclaration"/>
+    <!-- 4.2 Using traits -->
+    <!-- The use keyword used inside the classes to implement traits MUST be declared on the next line after the opening brace. -->
+    <!-- Each individual trait that is imported into a class MUST be included one-per-line and each inclusion MUST have its own use import statement. -->
+    <!-- When the class has nothing after the use import statement, the class closing brace MUST be on the next line after the use import statement. Otherwise, it MUST have a blank line after the use import statement. -->
+    <!-- When using the insteadof and as operators they must be used as follows taking note of indentation, spacing, and new lines. -->
+    <!-- checked by PSR12.Traits.UseDeclaration -->
+    <!-- 4.3 Properties and Constants -->
+    <!-- Visibility MUST be declared on all properties. -->
+    <!-- The var keyword MUST NOT be used to declare a property. -->
+    <!-- There MUST NOT be more than one property declared per statement. -->
+    <!-- Property names MUST NOT be prefixed with a single underscore to indicate protected or private visibility.
+    That is, an underscore prefix explicitly has no meaning. -->
+    <!-- There MUST be a space between type declaration and property name. -->
+    <rule ref="PSR2.Classes.PropertyDeclaration"/>
+    <!-- Visibility MUST be declared on all constants if your project PHP minimum version supports constant visibilities (PHP 7.1 or later). -->
+    <!-- checked by PSR12.Properties.ConstantVisibility -->
+    <!-- 4.4 Methods and Functions -->
+    <!-- Visibility MUST be declared on all methods. -->
+    <rule ref="Squiz.Scope.MethodScope"/>
+    <rule ref="Squiz.WhiteSpace.ScopeKeywordSpacing"/>
+    <!-- Method names MUST NOT be prefixed with a single underscore to indicate protected or private visibility. That is, an underscore prefix explicitly has no meaning. -->
+    <rule ref="PSR2.Methods.MethodDeclaration"/>
+    <rule ref="PSR2.Methods.MethodDeclaration.Underscore">
+        <type>error</type>
+        <message>Method name "%s" must not be prefixed with an underscore to indicate visibility</message>
+    </rule>
+    <!-- Method and function names MUST NOT be declared with space after the method name. The opening brace MUST go on its own line, and the closing brace MUST go on the next line following the body. There MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. -->
+    <rule ref="PSR2.Methods.FunctionClosingBrace"/>
+    <rule ref="Squiz.Functions.FunctionDeclaration"/>
+    <rule ref="Squiz.Functions.LowercaseFunctionKeywords"/>
+    <!-- 4.5 Method and Function Arguments -->
+    <!-- In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- When using the reference operator & before an argument, there MUST NOT be a space after it. -->
+    <!-- There MUST NOT be a space between the variadic three dot operator and the argument name. -->
+    <!-- When combining both the reference operator and the variadic three dot operator, there MUST NOT be any space between the two of them. -->
+    <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing">
+        <properties>
+            <property name="equalsSpacing" value="1"/>
+        </properties>
+    </rule>
+    <!-- Method and function arguments with default values MUST go at the end of the argument list. -->
+    <rule ref="PEAR.Functions.ValidDefaultValue"/>
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line.
+    When the argument list is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <rule ref="Squiz.Functions.MultiLineFunctionDeclaration"/>
+    <!-- When you have a return type declaration present, there MUST be one space after the colon followed by the type declaration. The colon and declaration MUST be on the same line as the argument list closing parenthesis with no spaces between the two characters. -->
+    <!-- checked by PSR12.Functions.ReturnTypeDeclaration -->
+    <!-- In nullable type declarations, there MUST NOT be a space between the question mark and the type. -->
+    <!-- checked by PSR12.Functions.NullableTypeDeclaration -->
+    <!-- 4.6 abstract, final, and static -->
+    <!-- When present, the abstract and final declarations MUST precede the visibility declaration. -->
+    <!-- When present, the static declaration MUST come after the visibility declaration. -->
+    <!-- checked by PSR2.Methods.MethodDeclaration included above -->
+    <!-- 4.7 Method and Function Calls -->
+    <!-- When making a method or function call, there MUST NOT be a space between the method or function name and the opening parenthesis, there MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line. A single argument being split across multiple lines (as might be the case with an anonymous function or array) does not constitute splitting the argument list itself. -->
+    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature.SpaceAfterCloseBracket">
+        <severity>0</severity>
+    </rule>
+    <rule ref="PSR2.Methods.FunctionCallSignature.OpeningIndent">
+        <severity>0</severity>
+    </rule>
+    <!-- 5. Control Structures -->
+    <!-- The general style rules for control structures are as follows:
+    There MUST be one space after the control structure keyword
+    There MUST NOT be a space after the opening parenthesis
+    There MUST NOT be a space before the closing parenthesis
+    There MUST be one space between the closing parenthesis and the opening brace
+    The structure body MUST be indented once
+    The body MUST be on the next line after the opening brace
+    The closing brace MUST be on the next line after the body
+    The body of each structure MUST be enclosed by braces. This standardizes how the structures look and reduces the likelihood of introducing errors as new lines get added to the body. -->
+    <rule ref="Squiz.ControlStructures.ControlSignature"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose"/>
+    <rule ref="Squiz.WhiteSpace.ScopeClosingBrace"/>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration"/>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration">
+        <properties>
+            <property name="ignoreNewlines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingBeforeClose">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.LowercaseDeclaration"/>
+    <rule ref="Generic.ControlStructures.InlineControlStructure"/>
+    <!-- exclude this message as it is already checked in Generic.PHP.LowerCaseKeyword -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.AsNotLower">
+        <severity>0</severity>
+    </rule>
+    <!-- 5.1 if, elseif, else -->
+    <!-- else and elseif are on the same line as the closing brace from the earlier body. -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature included above -->
+    <!-- The keyword elseif SHOULD be used instead of else if so that all control keywords look like single words. -->
+    <rule ref="PSR2.ControlStructures.ElseIfDeclaration"/>
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.2 switch, case -->
+    <!-- The case statement MUST be indented once from switch, and the break keyword (or other terminating keywords) MUST be indented at the same level as the case body. There MUST be a comment such as // no break when fall-through is intentional in a non-empty case body. -->
+    <rule ref="PSR2.ControlStructures.SwitchDeclaration"/>
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.3.1 while -->
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.3.2 do while -->
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.4 for -->
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first expression MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.5 foreach -->
+    <!-- exclude these messages as they are already checked by PSR2.ControlStructures.ControlStructureSpacing -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceBeforeClose">
+        <severity>0</severity>
+    </rule>
+    <!-- 5.6 try, catch, finally -->
+    <!-- 6. Operators -->
+    <!-- When space is permitted around an operator, multiple spaces MAY be used for readability purposes. -->
+    <!-- All operators not described here are left undefined. -->
+    <!-- 6.1. Unary operators -->
+    <!-- The increment/decrement operators MUST NOT have any space between the operator and operand. -->
+    <rule ref="Generic.WhiteSpace.IncrementDecrementSpacing"/>
+    <!-- Type casting operators MUST NOT have any space within the parentheses. -->
+    <rule ref="Squiz.WhiteSpace.CastSpacing"/>
+    <!-- 6.2. Binary operators -->
+    <!-- All binary arithmetic, comparison, assignment, bitwise, logical, string, and type operators MUST be preceded and followed by at least one space. -->
+    <!-- checked by PSR12.Operators.OperatorSpacing -->
+    <!-- 6.3. Ternary operators -->
+    <!-- The conditional operator, also known simply as the ternary operator, MUST be preceded and followed by at least one space around both the ? and : characters. -->
+    <!-- When the middle operand of the conditional operator is omitted, the operator MUST follow the same style rules as other binary comparison operators. -->
+    <!-- checked by PSR12.Operators.OperatorSpacing -->
+    <!-- 7. Closures -->
+    <!-- Closures MUST be declared with a space after the function keyword, and a space before and after the use keyword. -->
+    <!-- The opening brace MUST go on the same line, and the closing brace MUST go on the next line following the body. -->
+    <!-- There MUST NOT be a space after the opening parenthesis of the argument list or variable list, and there MUST NOT be a space before the closing parenthesis of the argument list or variable list. -->
+    <!-- In the argument list and variable list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- Closure arguments with default values MUST go at the end of the argument list. -->
+    <!-- Argument lists and variable lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument or variable per line. -->
+    <!-- When the ending list (whether of arguments or variables) is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked by Squiz.Functions.MultiLineFunctionDeclaration -->
+    <!-- If a return type is present, it MUST follow the same rules as with normal functions and methods; if the use keyword is present, the colon MUST follow the use list closing parentheses with no spaces between the two characters. -->
+    <!-- checked by PSR12.Functions.ReturnTypeDeclaration -->
+    <!-- 8. Anonymous Classes -->
+    <!-- Anonymous Classes MUST follow the same guidelines and principles as closures in the above section. -->
+    <!-- The opening brace MAY be on the same line as the class keyword so long as the list of implements interfaces does not wrap. If the list of interfaces wraps, the brace MUST be placed on the line immediately following the last interface. -->
+    <!-- checked by PSR12.Classes.AnonClassDeclaration -->
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpcsrules_psr2.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpcsrules_psr2.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpcsrules_psr2.xml	(revision 8435)
@@ -0,0 +1,218 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PSR2" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The PSR-2 coding standard.</description>
+    <arg name="tab-width" value="4"/>
+
+    <!-- 2. General -->
+
+    <!-- 2.1 Basic Coding Standard -->
+
+    <!-- Include the whole PSR-1 standard -->
+    <rule ref="PSR1"/>
+
+    <!-- 2.2 Files -->
+
+    <!-- All PHP files MUST use the Unix LF (linefeed) line ending. -->
+    <rule ref="Generic.Files.LineEndings">
+        <properties>
+            <property name="eolChar" value="\n"/>
+        </properties>
+    </rule>
+
+    <!-- All PHP files MUST end with a single blank line. -->
+    <!-- checked by PSR2.Files.EndFileNewline -->
+
+    <!-- The closing ?> tag MUST be omitted from files containing only PHP. -->
+    <!-- checked by PSR2.Files.ClosingTag -->
+
+    <!-- 2.3 Lines -->
+
+    <!-- The soft limit on line length MUST be 120 characters; automated style checkers MUST warn but MUST NOT error at the soft limit. -->
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="120"/>
+            <property name="absoluteLineLimit" value="0"/>
+        </properties>
+    </rule>
+
+    <!-- There MUST NOT be trailing whitespace at the end of non-blank lines. -->
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace">
+        <properties>
+            <property name="ignoreBlankLines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines">
+        <severity>0</severity>
+    </rule>
+
+    <!-- There MUST NOT be more than one statement per line. -->
+    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
+
+    <!-- 2.4 Indenting -->
+
+    <!-- Code MUST use an indent of 4 spaces, and MUST NOT use tabs for indenting. -->
+    <rule ref="Generic.WhiteSpace.ScopeIndent">
+        <properties>
+            <property name="ignoreIndentationTokens" type="array">
+                <element value="T_COMMENT"/>
+                <element value="T_DOC_COMMENT_OPEN_TAG"/>
+            </property>
+        </properties>
+    </rule>
+    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
+
+    <!-- 2.5 Keywords and True/False/Null -->
+
+    <!-- PHP keywords MUST be in lower case. -->
+    <rule ref="Generic.PHP.LowerCaseKeyword"/>
+
+    <!-- The PHP constants true, false, and null MUST be in lower case. -->
+    <rule ref="Generic.PHP.LowerCaseConstant"/>
+
+    <!-- 3. Namespace and Use Declarations -->
+
+    <!-- When present, there MUST be one blank line after the namespace declaration. -->
+    <!-- checked by PSR2.Namespaces.NamespaceDeclaration -->
+
+    <!-- When present, all use declarations MUST go after the namespace declaration.
+         There MUST be one use keyword per declaration.
+         There MUST be one blank line after the use block. -->
+    <!-- checked by PSR2.Namespaces.UseDeclaration -->
+
+    <!-- 4. Classes, Properties, and Methods -->
+
+    <!-- 4.1. Extends and Implements -->
+
+    <!-- The extends and implements keywords MUST be declared on the same line as the class name.
+         The opening brace for the class go MUST go on its own line; the closing brace for the class MUST go on the next line after the body.
+         Lists of implements MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one interface per line. -->
+    <!-- checked by PSR2.Classes.ClassDeclaration -->
+
+    <!-- 4.2. Properties -->
+
+    <!-- Visibility MUST be declared on all properties.
+         The var keyword MUST NOT be used to declare a property.
+         There MUST NOT be more than one property declared per statement.
+         Property names SHOULD NOT be prefixed with a single underscore to indicate protected or private visibility. -->
+    <!-- checked by PSR2.Classes.PropertyDeclaration -->
+    <rule ref="PSR2.Classes.PropertyDeclaration.SpacingAfterType">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 4.3 Methods -->
+
+    <!-- Visibility MUST be declared on all methods. -->
+    <rule ref="Squiz.Scope.MethodScope"/>
+    <rule ref="Squiz.WhiteSpace.ScopeKeywordSpacing"/>
+
+    <!-- Method names SHOULD NOT be prefixed with a single underscore to indicate protected or private visibility. -->
+    <!-- checked by PSR2.Methods.MethodDeclaration -->
+
+    <!-- Method names MUST NOT be declared with a space after the method name. The opening brace MUST go on its own line, and the closing brace MUST go on the next line following the body. There MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. -->
+    <!-- checked by PSR2.Methods.FunctionClosingBrace -->
+    <rule ref="Squiz.Functions.FunctionDeclaration"/>
+    <rule ref="Squiz.Functions.LowercaseFunctionKeywords"/>
+
+    <!-- 4.4 Method Arguments -->
+
+    <!-- In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing">
+        <properties>
+            <property name="equalsSpacing" value="1"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingAfterHint">
+        <severity>0</severity>
+    </rule>
+
+    <!-- Method arguments with default values MUST go at the end of the argument list. -->
+    <rule ref="PEAR.Functions.ValidDefaultValue"/>
+
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line. When the argument list is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <rule ref="Squiz.Functions.MultiLineFunctionDeclaration"/>
+
+    <!-- 4.5 abstract, final, and static -->
+
+    <!-- When present, the abstract and final declarations MUST precede the visibility declaration.
+         When present, the static declaration MUST come after the visibility declaration. -->
+    <!-- checked by PSR2.Methods.MethodDeclaration -->
+
+    <!-- 4.6 Method and Function Calls -->
+
+    <!-- When making a method or function call, there MUST NOT be a space between the method or function name and the opening parenthesis, there MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma.
+    Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line. -->
+    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature.SpaceAfterCloseBracket">
+        <severity>0</severity>
+    </rule>
+    <rule ref="PSR2.Methods.FunctionCallSignature.OpeningIndent">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 5. Control Structures -->
+
+    <!-- The general style rules for control structures are as follows:
+         There MUST be one space after the control structure keyword
+         There MUST NOT be a space after the opening parenthesis
+         There MUST NOT be a space before the closing parenthesis
+         There MUST be one space between the closing parenthesis and the opening brace
+         The structure body MUST be indented once
+         The closing brace MUST be on the next line after the body -->
+    <rule ref="Squiz.ControlStructures.ControlSignature"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose"/>
+    <rule ref="Squiz.WhiteSpace.ScopeClosingBrace"/>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration"/>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration"/>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingBeforeClose">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.LowercaseDeclaration"/>
+    <!-- checked by PSR2.ControlStructures.ControlStructureSpacing -->
+
+    <!-- exclude this message as it is already checked by Generic.PHP.LowerCaseKeyword -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.AsNotLower">
+        <severity>0</severity>
+    </rule>
+
+    <!-- exclude these messages as they are already checked by PSR2.ControlStructures.ControlStructureSpacing -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceBeforeClose">
+        <severity>0</severity>
+    </rule>
+
+    <!-- The body of each structure MUST be enclosed by braces. This standardizes how the structures look, and reduces the likelihood of introducing errors as new lines get added to the body. -->
+    <rule ref="Generic.ControlStructures.InlineControlStructure"/>
+
+    <!-- 5.1. if, elseif, else -->
+
+    <!-- The keyword elseif SHOULD be used instead of else if so that all control keywords look like single words. -->
+    <!-- checked by PSR2.ControlStructures.ElseIfDeclaration -->
+
+    <!-- 5.2. switch, case -->
+
+    <!-- The case statement MUST be indented once from switch, and the break keyword (or other terminating keyword) MUST be indented at the same level as the case body. There MUST be a comment such as // no break when fall-through is intentional in a non-empty case body. -->
+    <!-- checked by PSR2.ControlStructures.SwitchDeclaration -->
+
+    <!-- 6. Closures -->
+
+    <!-- Closures MUST be declared with a space after the function keyword, and a space before and after the use keyword.
+         The opening brace MUST go on the same line, and the closing brace MUST go on the next line following the body.
+         There MUST NOT be a space after the opening parenthesis of the argument list or variable list, and there MUST NOT be a space before the closing parenthesis of the argument list or variable list.
+         In the argument list and variable list, there MUST NOT be a space before each comma, and there MUST be one space after each comma.
+         Closure arguments with default values MUST go at the end of the argument list.
+         Argument lists and variable lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument or variable per line.
+         When the ending list (whether or arguments or variables) is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked in Squiz.Functions.MultiLineFunctionDeclaration -->
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpdoc.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpdoc.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpdoc.xml	(revision 8435)
@@ -0,0 +1,25 @@
+<phpdocumentor configVersion="3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://www.phpdoc.org" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/phpDocumentor/phpDocumentor/master/data/xsd/phpdoc.xsd">
+    <paths>
+        <output>../build/doc</output>
+        <cache>./phpdoc</cache>
+    </paths>
+    <version number="3.0">
+        <api format="php">
+            <source dsn="..">
+                <!--1 or more repetitions:-->
+                <path>src</path>
+            </source>
+            <ignore hidden="true" symlinks="true">
+                <path>tests/**/*</path>
+            </ignore>
+            <extensions>
+                <extension>php</extension>
+            </extensions>
+            <include-source>true</include-source>
+            <markers>
+                <marker>TODO</marker>
+                <marker>FIXME</marker>
+            </markers>
+        </api>
+    </version>
+</phpdocumentor>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpdocumentor.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpdocumentor.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpdocumentor.xml	(revision 8435)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpdoc>
+    <parser>
+        <target>../build/phpdocumentor</target>
+    </parser>
+    <transformer>
+        <target>../doc</target>
+    </transformer>
+    <files>
+        <directory>../src</directory>
+    </files>
+</phpdoc>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpmd.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpmd.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpmd.xml	(revision 8435)
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<ruleset name="PHPMD rule sets"
+         xmlns="http://pmd.sf.net/ruleset/1.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
+                      http://pmd.sf.net/ruleset_xml_schema.xsd"
+         xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
+    <description>Custom rule sets that checks your PHP code.</description>
+    <rule ref="rulesets/unusedcode.xml"/>
+    <rule ref="rulesets/codesize.xml/CyclomaticComplexity"/>
+    <rule ref="rulesets/codesize.xml/ExcessiveParameterList"/>
+</ruleset>
+
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpstan.neon
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpstan.neon	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpstan.neon	(revision 8435)
@@ -0,0 +1,9 @@
+parameters:
+    paths:
+        - ../src
+        - ../tests
+    level: 5
+    treatPhpDocTypesAsCertain: false
+    checkMissingIterableValueType: false
+    excludePaths:
+        - ../src/entities/*
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpunit.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpunit.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/build/phpunit.xml	(revision 8435)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" bootstrap="../vendor/autoload.php">
+    <testsuites>
+        <testsuite name="default">
+            <directory>../tests</directory>
+        </testsuite>
+    </testsuites>
+    <coverage processUncoveredFiles="true">
+        <include>
+            <directory suffix=".php">../src</directory>
+        </include>
+        <exclude>
+        </exclude>
+        <report>
+            <xml outputDirectory="coverage"/>
+            <html outputDirectory="coverage-html"/>
+            <clover outputFile="logs/clover.xml"/>
+            <crap4j outputFile="logs/crap4j.xml" threshold="50"/>
+        </report>
+    </coverage>
+    <logging>
+        <junit outputFile="logs/junit.xml"/>
+        <testdoxHtml outputFile="logs/testdox.html"/>
+    </logging>
+</phpunit>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/composer.json	(revision 8435)
@@ -0,0 +1,56 @@
+{
+    "name": "horstoeko/stringmanagement",
+    "keywords": ["stringmanagement"],
+    "description": "A library for string manipulation utilities",
+    "homepage": "https://github.com/horstoeko/stringmanagement",
+    "type": "package",
+    "license": "MIT",
+    "prefer-stable": true,
+    "authors": [
+        {
+            "name": "Daniel Erling",
+            "email": "daniel@erling.com.de",
+            "role": "lead"
+        }
+    ],
+    "config": {
+        "optimize-autoloader": true,
+        "sort-packages": true
+    },
+    "autoload": {
+        "psr-4": {
+            "horstoeko\\stringmanagement\\": "src"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "horstoeko\\stringmanagement\\tests\\": "tests"
+        }
+    },
+    "require": {
+        "php": "^7.3|^7.4|^8.0|^8.1|^8.2|^8.3"
+    },
+    "require-dev": {
+        "pdepend/pdepend": "^2",
+        "phploc/phploc": "^7",
+        "phpmd/phpmd": "^2",
+        "phpstan/phpstan": "^1.8",
+        "phpunit/phpunit": "^9",
+        "sebastian/phpcpd": "^6",
+        "squizlabs/php_codesniffer": "^3"
+    },
+    "scripts": {
+        "tests": "./vendor/bin/phpunit ./tests/",
+        "testsreal": "./vendor/bin/phpunit --configuration ./build/phpunit.xml",
+        "phpcs": "./vendor/bin/phpcs --standard=./build/phpcsrules.xml --extensions=php --ignore=autoload.php ./src ./tests",
+        "phpcs12": "./vendor/bin/phpcs --standard=./build/phpcsrules_psr12.xml --extensions=php --ignore=autoload.php ./src ./tests",
+        "phpcbf": "./vendor/bin/phpcbf -q ./src ./tests",
+        "phpcbf1": "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr1.xml -q ./src ./tests",
+        "phpcbf2": "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr2.xml -q ./src ./tests",
+        "phpcbf12": "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr12.xml -q ./src ./tests",
+        "phpcbfsq": "./vendor/bin/phpcbf --standard=./build/phpcsrules_squiz.xml -q ./src ./tests",
+        "phpstan": "./vendor/bin/phpstan analyze -c ./build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --xdebug",
+        "phpstan_cs": "./vendor/bin/phpstan analyze -c ./build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --error-format=checkstyle --xdebug",
+        "makedoc": "phing -f ./build.xml projectdoc"
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/src/FileUtils.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/src/FileUtils.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/src/FileUtils.php	(revision 8435)
@@ -0,0 +1,254 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/stringmanagement.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\stringmanagement;
+
+use horstoeko\stringmanagement\StringUtils;
+use horstoeko\stringmanagement\PathUtils;
+
+/**
+ * Class representing some string utilities for files
+ *
+ * @category StringManagement
+ * @package  StringManagement
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/stringmanagement
+ */
+class FileUtils
+{
+    /**
+     * Check if file $filename exists, also checks if it's readable
+     * To turn off the readble check set $checkreadable to false
+     *
+     * @param  string  $filename
+     * @param  boolean $checkreadable
+     * @return boolean
+     */
+    public static function fileExists(string $filename, bool $checkreadable = true): bool
+    {
+        $exists = file_exists($filename);
+
+        if ($exists === true && $checkreadable === true) {
+            $exists = is_readable($filename);
+        }
+
+        return $exists;
+    }
+
+    /**
+     * Converts a file $filename to base64 string. If the file does not exist
+     * this function returns false
+     *
+     * @param  string $filename
+     * @return boolean|string
+     */
+    public static function fileToBase64(string $filename)
+    {
+        if (self::fileExists($filename) === false) {
+            return false;
+        }
+
+        $data = file_get_contents($filename);
+
+        if ($data === false) {
+            return false;
+        }
+
+        $data = base64_encode($data);
+
+        if (StringUtils::stringIsNullOrEmpty($data)) {
+            return false;
+        }
+
+        return $data;
+    }
+
+    /**
+     * Converts the content of a file to BASE64 encoded file
+     *
+     * @param  string $filename
+     * Source filename
+     * @param  string $toFilename
+     * Filename to which the BASE64 is saved to
+     * @return boolean
+     */
+    public static function fileToBase64File(string $filename, string $toFilename): bool
+    {
+        $base64String = static::fileToBase64($filename);
+
+        if ($base64String === false) {
+            return false;
+        }
+
+        if (file_put_contents($toFilename, $base64String) === false) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Decodes a base64 string and saves it to file
+     *
+     * @param  string $base64String
+     * The base64 encoded data
+     * @param  string $toFilename
+     * Filename to which the binary (=decoded base64) data is saved to
+     * @return boolean
+     */
+    public static function base64ToFile(string $base64String, string $toFilename): bool
+    {
+        return file_put_contents($toFilename, base64_decode($base64String)) !== false;
+    }
+
+    /**
+     * Decodes a file which is containing base64 data to another file
+     *
+     * @param  string $filename
+     * Name of the file which contains base64 data
+     * @param  string $toFilename
+     * Filename where the decoded base64 data are stored to
+     * @return boolean
+     */
+    public static function base64FileToFile(string $filename, string $toFilename): bool
+    {
+        if (self::fileExists($filename) === false) {
+            return false;
+        }
+
+        $base64String = file_get_contents($filename);
+
+        if ($base64String === false) {
+            return false;
+        }
+
+        return self::base64ToFile($base64String, $toFilename);
+    }
+
+    /**
+     * Combine a filename (which has no extension) with a fileextension
+     *
+     * @param  string $filename
+     * @param  string $fileextension
+     * @return string
+     */
+    public static function combineFilenameWithFileextension(string $filename, string $fileextension): string
+    {
+        $extensionDelimiter = ".";
+        $filename = rtrim($filename, $extensionDelimiter);
+        $fileextension = ltrim($fileextension, $extensionDelimiter);
+        return $filename . $extensionDelimiter . $fileextension;
+    }
+
+    /**
+     * Returns the directory where $filename is located
+     *
+     * @param  string $filename
+     * @return string
+     */
+    public static function getFileDirectory(string $filename): string
+    {
+        return pathinfo($filename, PATHINFO_DIRNAME);
+    }
+
+    /**
+     * Returns the filename only including it's extension
+     *
+     * @param  string $filename
+     * @return string
+     */
+    public static function getFilenameWithExtension(string $filename): string
+    {
+        return pathinfo($filename, PATHINFO_BASENAME);
+    }
+
+    /**
+     * Returns the filename only without it's extension
+     *
+     * @param  string $filename
+     * @return string
+     */
+    public static function getFilenameWithoutExtension(string $filename): string
+    {
+        return pathinfo($filename, PATHINFO_FILENAME);
+    }
+
+    /**
+     * Returns the fileextension of a $filename, Optionally you can
+     * add the dot on the beginning
+     *
+     * @param  string  $filename
+     * @param  boolean $withdot
+     * @return string
+     */
+    public static function getFileExtension(string $filename, bool $withdot = false): string
+    {
+        $extension = ltrim(pathinfo($filename, PATHINFO_EXTENSION), ".");
+
+        if ($withdot === true) {
+            $extension = "." . $extension;
+        }
+
+        return $extension;
+    }
+
+    /**
+     * Change the extension of a filename
+     *
+     * @param  string $filename
+     * @param  string $newFileextension
+     * @return string
+     */
+    public static function changeFileExtension(string $filename, string $newFileextension): string
+    {
+        $directory = static::getFileDirectory($filename);
+        $filename = static::getFilenameWithoutExtension($filename);
+
+        return PathUtils::combinePathWithFile(
+            $directory,
+            static::combineFilenameWithFileextension(
+                $filename,
+                $newFileextension
+            )
+        );
+    }
+
+    /**
+     * Returns the size of the file $filename
+     *
+     * @param  string $filename
+     * @return integer
+     */
+    public static function getFileSize(string $filename): int
+    {
+        if (!self::fileExists($filename)) {
+            return 0;
+        }
+
+        return filesize($filename);
+    }
+
+    /**
+     * Get the file real file size of a base64 encoded string
+     *
+     * @param  string $base64string
+     * @return integer
+     */
+    public static function getFileSizeFromBase64String(string $base64string): int
+    {
+        $decodedBase64String = base64_decode($base64string);
+
+        if ($decodedBase64String == false) {
+            return 0;
+        }
+
+        return strlen($decodedBase64String);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/src/PathUtils.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/src/PathUtils.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/src/PathUtils.php	(revision 8435)
@@ -0,0 +1,134 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/stringmanagement.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\stringmanagement;
+
+/**
+ * Class representing some string utilities for directories/paths
+ *
+ * @category StringManagement
+ * @package  StringManagement
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/stringmanagement
+ */
+class PathUtils
+{
+    /**
+     * Combine a path and a filename savely
+     *
+     * @param  string $path
+     * @param  string $filename
+     * @return string
+     */
+    public static function combinePathWithFile(string $path, string $filename): string
+    {
+        $path = rtrim($path, DIRECTORY_SEPARATOR);
+        $filename = ltrim($filename, DIRECTORY_SEPARATOR);
+        return $path . DIRECTORY_SEPARATOR . $filename;
+    }
+
+    /**
+     * Combine two paths savely
+     *
+     * @param  string $path
+     * @param  string $path2
+     * @return string
+     */
+    public static function combinePathWithPath(string $path, string $path2): string
+    {
+        $path = rtrim($path, DIRECTORY_SEPARATOR);
+        $path2 = ltrim($path2, DIRECTORY_SEPARATOR);
+        return $path . DIRECTORY_SEPARATOR . $path2;
+    }
+
+    /**
+     * Combine multiple paths
+     *
+     * @param  string ...$paths
+     * @return string
+     */
+    public static function combineAllPaths(...$paths): string
+    {
+        if (empty($paths)) {
+            return "";
+        }
+
+        $result = array_shift($paths);;
+
+        foreach ($paths as $path) {
+            $result = self::combinePathWithPath($result, $path);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Generate a hashed directory structur
+     *
+     * @param  integer $maxLevel
+     * @return string
+     */
+    public static function getHashedDirectory(int $maxLevel = 1): string
+    {
+        if ($maxLevel <= 0) {
+            throw new \Exception("The maximum level must be greater than zero");
+        }
+
+        $result = "";
+
+        for ($level = 1; $level <= $maxLevel; $level++) {
+            $result = self::combinePathWithPath($result, chr(rand(97, 122)));
+        }
+
+        return $result;
+    }
+
+    /**
+     * Create a hashed directory
+     *
+     * @param  string  $basedir
+     * @param  integer $maxLevel
+     * @param  integer $mode
+     * @return boolean|string
+     */
+    public static function createHashedDirectory(string $basedir, int $maxLevel = 1, $mode = 0777)
+    {
+        $directory = self::combinePathWithPath($basedir, self::getHashedDirectory($maxLevel));
+
+        if (is_dir($directory)) {
+            return $directory;
+        }
+
+        if (mkdir($directory, $mode, true)) {
+            return $directory;
+        }
+
+        return false;
+    }
+
+    /**
+     * Remove directory in a recursive way
+     *
+     * @param  string $directory
+     * @return void
+     */
+    public static function recursiveRemoveDirectory(string $directory): void
+    {
+        foreach (glob(self::combineAllPaths($directory, "/*")) as $file) {
+            if (is_dir($file)) {
+                self::recursiveRemoveDirectory($file);
+            } else {
+                unlink($file);
+            }
+        }
+
+        rmdir($directory);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/src/StringUtils.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/src/StringUtils.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/src/StringUtils.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/stringmanagement.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\stringmanagement;
+
+/**
+ * Class representing some string utilities
+ *
+ * @category StringManagement
+ * @package  StringManagement
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/stringmanagement
+ */
+class StringUtils
+{
+    /**
+     * Its like the almost known C#-Methods
+     * Tests is string is not nul and has a value != ""
+     *
+     * @param  string|null $str
+     * @return boolean
+     */
+    public static function stringIsNullOrEmpty(?string $str): bool
+    {
+        return (!isset($str) || trim($str) === '');
+    }
+
+    /**
+     * Tests if an string $astring is starting with $astartswith
+     * The parameter $acaseinsensitive controls wether the comparission is
+     * case sensitive or not
+     *
+     * @param  string  $astring
+     * @param  string  $astartswith
+     * @param  boolean $acaseinsensitive
+     * @return boolean
+     */
+    public static function strisstartingwith(string $astring, string $astartswith, bool $acaseinsensitive = false): bool
+    {
+        return $acaseinsensitive === true
+            ? stripos($astring, $astartswith) === 0
+            : strpos($astring, $astartswith) === 0;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/FileUtilsTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/FileUtilsTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/FileUtilsTest.php	(revision 8435)
@@ -0,0 +1,166 @@
+<?php
+
+namespace horstoeko\stringmanagement\tests;
+
+use \PHPUnit\Framework\TestCase;
+use \horstoeko\stringmanagement\FileUtils;
+
+class FileUtilsTest extends TestCase
+{
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::fileExists
+     */
+    public function testFileExists(): void
+    {
+        $this->assertTrue(FileUtils::fileExists(__FILE__, true));
+        $this->assertFalse(FileUtils::fileExists(__FILE__ . ".xxx", true));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::fileToBase64
+     */
+    public function testFileToBase64(): void
+    {
+        $this->assertEquals("SSBhbSBhIHRlc3RmaWxl", substr(FileUtils::fileToBase64(dirname(__FILE__) . "/data/tobase64.txt"), 0, 20));
+        $this->assertEquals(false, FileUtils::fileToBase64(__FILE__ . ".xxx"));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::fileToBase64File
+     */
+    public function testFileToBase64File(): void
+    {
+        $sourceFilename = dirname(__FILE__) . "/data/tobase64.txt";
+        $destinationFilename = dirname(__FILE__) . "/data/encbase64.txt";
+        $this->assertTrue(FileUtils::fileToBase64File($sourceFilename, $destinationFilename));
+        $this->assertTrue(FileUtils::fileExists($destinationFilename));
+        $destinationFilenameContent = file_get_contents($destinationFilename);
+        $this->assertEquals("SSBhbSBhIHRlc3RmaWxl", substr($destinationFilenameContent, 0, 20));
+        @unlink($destinationFilename);
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::fileToBase64File
+     */
+    public function testFileToBase64FileSourceNotExisting(): void
+    {
+        $sourceFilename = dirname(__FILE__) . "/data/tobase64_2.txt";
+        $destinationFilename = dirname(__FILE__) . "/data/encbase64_2.txt";
+        $this->assertFalse(FileUtils::fileToBase64File($sourceFilename, $destinationFilename));
+        $this->assertFalse(FileUtils::fileExists($destinationFilename));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::base64ToFile
+     */
+    public function testBase64ToFile(): void
+    {
+        $sourceData = "SSBhbSBhIHRlc3RmaWxlLiBEb24ndCBtb2RpZnkgbWUuLi4=";
+        $destinationFilename = dirname(__FILE__) . "/data/decbase64.txt";
+        $this->assertTrue(FileUtils::base64ToFile($sourceData, $destinationFilename));
+        $this->assertTrue(FileUtils::fileExists($destinationFilename));
+        $destinationFilenameContent = file_get_contents($destinationFilename);
+        $this->assertEquals("I am a testfile. Don", substr($destinationFilenameContent, 0, 20));
+        @unlink($destinationFilename);
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::base64FileToFile
+     */
+    public function testBase64FileToFile(): void
+    {
+        $sourceFilename = dirname(__FILE__) . "/data/base64.txt";
+        $destinationFilename = dirname(__FILE__) . "/data/decbase64.txt";
+        $this->assertTrue(FileUtils::base64FileToFile($sourceFilename, $destinationFilename));
+        $this->assertTrue(FileUtils::fileExists($destinationFilename));
+        $destinationFilenameContent = file_get_contents($destinationFilename);
+        $this->assertEquals("I am a testfile. Don", substr($destinationFilenameContent, 0, 20));
+        @unlink($destinationFilename);
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::combineFilenameWithFileextension
+     */
+    public function testCombineFilenameWithFileextension(): void
+    {
+        $this->assertEquals("file.txt", FileUtils::combineFilenameWithFileextension("file", "txt"));
+        $this->assertEquals("file.txt", FileUtils::combineFilenameWithFileextension("file.", "txt"));
+        $this->assertEquals("file.txt", FileUtils::combineFilenameWithFileextension("file.", ".txt"));
+        $this->assertEquals("file.txt", FileUtils::combineFilenameWithFileextension("file..", "txt"));
+        $this->assertEquals("file.txt", FileUtils::combineFilenameWithFileextension("file..", "..txt"));
+        $this->assertEquals("file.x.txt", FileUtils::combineFilenameWithFileextension("file.x", "txt"));
+        $this->assertEquals("file.x.txt", FileUtils::combineFilenameWithFileextension("file.x", ".txt"));
+        $this->assertEquals("/home/john/file.txt", FileUtils::combineFilenameWithFileextension("/home/john/file", "txt"));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::getFileDirectory
+     */
+    public function testGetFileDirectory(): void
+    {
+        $this->assertEquals("/home/john", FileUtils::getFileDirectory("/home/john/file.txt"));
+        $this->assertEquals("/home/john", FileUtils::getFileDirectory("/home/john/file.x.txt"));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::getFilenameWithExtension
+     */
+    public function testGetFilenameWithExtension(): void
+    {
+        $this->assertEquals("file.txt", FileUtils::getFilenameWithExtension("/home/john/file.txt"));
+        $this->assertEquals("file.x.txt", FileUtils::getFilenameWithExtension("/home/john/file.x.txt"));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::getFilenameWithoutExtension
+     */
+    public function testGetFilenameWithoutExtension(): void
+    {
+        $this->assertEquals("file", FileUtils::getFilenameWithoutExtension("/home/john/file.txt"));
+        $this->assertEquals("file.x", FileUtils::getFilenameWithoutExtension("/home/john/file.x.txt"));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::getFileExtension
+     */
+    public function testGetFileExtension(): void
+    {
+        $this->assertEquals(".txt", FileUtils::getFileExtension("file.txt", true));
+        $this->assertEquals(".txt", FileUtils::getFileExtension("file.x.txt", true));
+        $this->assertEquals(".txt", FileUtils::getFileExtension("/home/john/file.x.txt", true));
+        $this->assertEquals("txt", FileUtils::getFileExtension("file.txt"));
+        $this->assertEquals("txt", FileUtils::getFileExtension("file.x.txt"));
+        $this->assertEquals("txt", FileUtils::getFileExtension("/home/john/file.x.txt"));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::changeFileExtension
+     */
+    public function testChangeFileExtension(): void
+    {
+        $ds = DIRECTORY_SEPARATOR;
+
+        $this->assertEquals(".{$ds}file.new", FileUtils::changeFileExtension("file.txt", "new"));
+        $this->assertEquals(".{$ds}file.new", FileUtils::changeFileExtension("file.txt", ".new"));
+        $this->assertEquals("{$ds}home{$ds}john{$ds}file.new", FileUtils::changeFileExtension("{$ds}home{$ds}john{$ds}file.txt", "new"));
+        $this->assertEquals("{$ds}home{$ds}john{$ds}file.new", FileUtils::changeFileExtension("{$ds}home{$ds}john{$ds}file.txt", ".new"));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::getFileSize
+     */
+    public function testGetFileSize(): void
+    {
+        $this->assertEquals(35, FileUtils::getFileSize(dirname(__FILE__) . "/data/tobase64.txt"));
+        $this->assertEquals(0, FileUtils::getFileSize(dirname(__FILE__) . "/data/filenotexists.txt"));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\FileUtils::getFileSizeFromBase64String
+     */
+    public function testGetFileSizeFromBase64String(): void
+    {
+        $this->assertEquals(35, FileUtils::getFileSizeFromBase64String("SSBhbSBhIHRlc3RmaWxlLiBEb24ndCBtb2RpZnkgbWUuLi4="));
+        $this->assertEquals(0, FileUtils::getFileSizeFromBase64String(""));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/PathUtilsTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/PathUtilsTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/PathUtilsTest.php	(revision 8435)
@@ -0,0 +1,88 @@
+<?php
+
+namespace horstoeko\stringmanagement\tests;
+
+use \PHPUnit\Framework\TestCase;
+use \horstoeko\stringmanagement\PathUtils;
+
+class PathUtilsTest extends TestCase
+{
+    /**
+     * @covers \horstoeko\stringmanagement\PathUtils::combinePathWithFile
+     */
+    public function testCombinePathWithFile(): void
+    {
+        $ds = DIRECTORY_SEPARATOR;
+
+        $this->assertEquals("{$ds}home{$ds}user{$ds}test.txt", PathUtils::combinePathWithFile("{$ds}home{$ds}user", "test.txt"));
+        $this->assertEquals("{$ds}home{$ds}user{$ds}test.txt", PathUtils::combinePathWithFile("{$ds}home{$ds}user{$ds}", "test.txt"));
+        $this->assertEquals("{$ds}home{$ds}user{$ds}test.txt", PathUtils::combinePathWithFile("{$ds}home{$ds}user", "{$ds}test.txt"));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\PathUtils::combinePathWithPath
+     */
+    public function testCombinePathWithPath(): void
+    {
+        $ds = DIRECTORY_SEPARATOR;
+
+        $this->assertEquals("{$ds}home{$ds}user", PathUtils::combinePathWithPath("{$ds}home", "user"));
+        $this->assertEquals("{$ds}home{$ds}user", PathUtils::combinePathWithPath("{$ds}home", "{$ds}user"));
+        $this->assertEquals("{$ds}home{$ds}user", PathUtils::combinePathWithPath("{$ds}home{$ds}{$ds}", "{$ds}user"));
+        $this->assertEquals("{$ds}home{$ds}user", PathUtils::combinePathWithPath("{$ds}home{$ds}{$ds}", "user"));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\PathUtils::combineAllPaths
+     */
+    public function testCombineAllPaths(): void
+    {
+        $ds = DIRECTORY_SEPARATOR;
+
+        $this->assertEquals("home{$ds}user{$ds}john", PathUtils::combineAllPaths("home", "user", "john"));
+        $this->assertEquals("{$ds}home{$ds}user{$ds}john", PathUtils::combineAllPaths("{$ds}home", "user", "john"));
+        $this->assertEquals("{$ds}home{$ds}user{$ds}john", PathUtils::combineAllPaths("{$ds}home", "{$ds}user", "john"));
+        $this->assertEquals("{$ds}home{$ds}user{$ds}john", PathUtils::combineAllPaths("{$ds}home", "{$ds}user", "{$ds}john"));
+        $this->assertEquals("{$ds}home{$ds}user{$ds}john", PathUtils::combineAllPaths("{$ds}home{$ds}{$ds}", "user", "john"));
+        $this->assertEquals("{$ds}home{$ds}user{$ds}john", PathUtils::combineAllPaths("{$ds}home{$ds}{$ds}", "{$ds}user{$ds}{$ds}", "john"));
+        $this->assertEquals("{$ds}home{$ds}user{$ds}john", PathUtils::combineAllPaths("{$ds}home{$ds}{$ds}", "{$ds}user{$ds}{$ds}", "{$ds}john"));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\PathUtils::getHashedDirectory
+     */
+    public function testGetHashedDirectory(): void
+    {
+        $this->assertNotEquals("", PathUtils::getHashedDirectory(3));
+        $this->assertEquals(3, substr_count(PathUtils::getHashedDirectory(3), DIRECTORY_SEPARATOR));
+        $this->assertStringStartsWith(DIRECTORY_SEPARATOR, PathUtils::getHashedDirectory(3));
+        $this->assertStringEndsNotWith(DIRECTORY_SEPARATOR, PathUtils::getHashedDirectory(3));
+        $this->expectException(\Exception::class);
+        PathUtils::getHashedDirectory(0);
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\PathUtils::createHashedDirectory
+     * @covers \horstoeko\stringmanagement\PathUtils::recursiveRemoveDirectory
+     */
+    public function testCreateHashedDirectory(): void
+    {
+        $ds = DIRECTORY_SEPARATOR;
+
+        $baseDirectory = PathUtils::combineAllPaths(__DIR__, "test");
+        $createdDirectory = PathUtils::createHashedDirectory($baseDirectory, 3);
+
+        $this->assertIsString($createdDirectory);
+        $this->assertNotEquals("", PathUtils::getHashedDirectory(3));
+        $this->assertEquals(3, substr_count(PathUtils::getHashedDirectory(3), DIRECTORY_SEPARATOR));
+        $this->assertStringStartsWith("{$ds}", PathUtils::getHashedDirectory(3));
+        $this->assertStringEndsNotWith("{$ds}", PathUtils::getHashedDirectory(3));
+        $this->assertTrue(is_dir($createdDirectory));
+        $this->assertTrue(file_exists($createdDirectory));
+
+        PathUtils::recursiveRemoveDirectory($baseDirectory);
+
+        $this->assertFalse(is_dir($createdDirectory));
+        $this->assertFalse(file_exists($createdDirectory));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/StringUtilsTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/StringUtilsTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/StringUtilsTest.php	(revision 8435)
@@ -0,0 +1,34 @@
+<?php
+
+namespace horstoeko\stringmanagement\tests;
+
+use \PHPUnit\Framework\TestCase;
+use \horstoeko\stringmanagement\StringUtils;
+
+class StringUtilsTest extends TestCase
+{
+    /**
+     * @covers \horstoeko\stringmanagement\StringUtils::stringIsNullOrEmpty
+     */
+    public function testStringIsNullOrEmpty(): void
+    {
+        $this->assertTrue(StringUtils::stringIsNullOrEmpty(null));
+        $this->assertTrue(StringUtils::stringIsNullOrEmpty(""));
+        $this->assertTrue(StringUtils::stringIsNullOrEmpty("  "));
+        $this->assertFalse(StringUtils::stringIsNullOrEmpty("abc"));
+        $this->assertFalse(StringUtils::stringIsNullOrEmpty(" abc "));
+        $this->assertFalse(StringUtils::stringIsNullOrEmpty(222));
+    }
+
+    /**
+     * @covers \horstoeko\stringmanagement\StringUtils::strisstartingwith
+     */
+    public function testStrisstartingwith(): void
+    {
+        $this->assertTrue(StringUtils::strisstartingwith("abcdef", "abc"));
+        $this->assertFalse(StringUtils::strisstartingwith("abcdef", "ABC"));
+        $this->assertTrue(StringUtils::strisstartingwith("abcdef", "ABC", true));
+        $this->assertFalse(StringUtils::strisstartingwith("abcdef", "def"));
+        $this->assertFalse(StringUtils::strisstartingwith("abcdef", "def", true));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/data/base64.txt
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/data/base64.txt	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/data/base64.txt	(revision 8435)
@@ -0,0 +1,1 @@
+SSBhbSBhIHRlc3RmaWxlLiBEb24ndCBtb2RpZnkgbWUuLi4=
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/data/tobase64.txt
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/data/tobase64.txt	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/stringmanagement/tests/data/tobase64.txt	(revision 8435)
@@ -0,0 +1,1 @@
+I am a testfile. Don't modify me...
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/bug_report.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/bug_report.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/bug_report.md	(revision 8435)
@@ -0,0 +1,31 @@
+---
+name: Bug Report
+about: Create a report to help us improve
+title: "[BUG]"
+labels: bug
+assignees: horstoeko
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Sample Code
+If applicable, add (sample) code to help explain your problem.
+
+**Additional information:**
+ - OS: [e.g. Windows/Limux/etc.]
+ - OS-Version [e.g. Windows10,Debian10,etc.]
+ - PHP-Version [e.g. PHP7.x,PHP8.x,etc.]
+
+**Additional context**
+Add any other context about the problem here.
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/config.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/config.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/config.yml	(revision 8435)
@@ -0,0 +1,1 @@
+blank_issues_enabled: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/feature.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/feature.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/feature.md	(revision 8435)
@@ -0,0 +1,23 @@
+---
+name: Feature Request
+about: Create a feature request
+title: "[FEATURE]"
+labels: enhancement
+assignees: horstoeko
+
+---
+
+**Describe the feature**
+A clear and concise description of what feature/improvement you like to have
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots**
+If applicable, add screenshots to help explain your feature request.
+
+**Sample Code
+If applicable, add (sample) code to help explain your feature request.
+
+**Additional context**
+Add any other context about the feature request here.
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/question.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/question.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/ISSUE_TEMPLATE/question.md	(revision 8435)
@@ -0,0 +1,20 @@
+---
+name: Question
+about: Ask a question
+title: "[QUESTION]"
+labels: question
+assignees: horstoeko
+
+---
+
+**Your question**
+A clear and concise question
+
+**Screenshots**
+If applicable, add screenshots to help explain your question.
+
+**Sample Code
+If applicable, add (sample) code to help explain your problem.
+
+**Additional context**
+Add any other context about the question here.
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/pull_request_template.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/pull_request_template.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/pull_request_template.md	(revision 8435)
@@ -0,0 +1,38 @@
+# Description
+
+Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
+
+Fixes # (issue)
+
+## Type of change
+
+Please delete options that are not relevant.
+
+- [ ] Bug fix (non-breaking change which fixes an issue)
+- [ ] New feature (non-breaking change which adds functionality)
+- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
+- [ ] This change requires a documentation update
+
+# How Has This Been Tested?
+
+Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
+
+- [ ] Test A
+- [ ] Test B
+
+**Test Configuration**:
+
+* OS:
+* OS Version:
+* PHP Version:
+
+# Checklist:
+
+- [ ] My code follows the style guidelines of this project
+- [ ] I have performed a self-review of my own code
+- [ ] I have commented my code, particularly in hard-to-understand areas
+- [ ] I have made corresponding changes to the documentation
+- [ ] My changes generate no new warnings
+- [ ] I have added tests that prove my fix is effective or that my feature works
+- [ ] New and existing unit tests pass locally with my changes
+- [ ] Any dependent changes have been merged and published in downstream modules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php73.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php73.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php73.ant.yml	(revision 8435)
@@ -0,0 +1,44 @@
+name: CI (Ant, PHP 7.3)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+    paths-ignore:
+      - '**.md'
+      - '.github/**'
+      - 'examples/**'
+  pull_request:
+    types:
+      - opened
+    branches:
+      - 'master'
+  workflow_dispatch:
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v4
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '7.3'
+            extensions: imagick, swoole
+            coverage: xdebug
+      - name: Set up JDK 11
+        uses: actions/setup-java@v4
+        with:
+            java-version: '11'
+            distribution: 'adopt'
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v2
+        if: github.event_name != 'pull_request'
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php74.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php74.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php74.ant.yml	(revision 8435)
@@ -0,0 +1,44 @@
+name: CI (Ant, PHP 7.4)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+    paths-ignore:
+      - '**.md'
+      - '.github/**'
+      - 'examples/**'
+  pull_request:
+    types:
+      - opened
+    branches:
+      - 'master'
+  workflow_dispatch:
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v4
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '7.4'
+            extensions: imagick, swoole
+            coverage: xdebug
+      - name: Set up JDK 11
+        uses: actions/setup-java@v4
+        with:
+            java-version: '11'
+            distribution: 'adopt'
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v2
+        if: github.event_name != 'pull_request'
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php80.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php80.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php80.ant.yml	(revision 8435)
@@ -0,0 +1,44 @@
+name: CI (Ant, PHP 8.0)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+    paths-ignore:
+      - '**.md'
+      - '.github/**'
+      - 'examples/**'
+  pull_request:
+    types:
+      - opened
+    branches:
+      - 'master'
+  workflow_dispatch:
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v4
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '8.0'
+            extensions: imagick, swoole
+            coverage: xdebug
+      - name: Set up JDK 11
+        uses: actions/setup-java@v4
+        with:
+            java-version: '11'
+            distribution: 'adopt'
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v2
+        if: github.event_name != 'pull_request'
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php81.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php81.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php81.ant.yml	(revision 8435)
@@ -0,0 +1,44 @@
+name: CI (Ant, PHP 8.1)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+    paths-ignore:
+      - '**.md'
+      - '.github/**'
+      - 'examples/**'
+  pull_request:
+    types:
+      - opened
+    branches:
+      - 'master'
+  workflow_dispatch:
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v4
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '8.1'
+            extensions: imagick, swoole
+            coverage: xdebug
+      - name: Set up JDK 11
+        uses: actions/setup-java@v4
+        with:
+            java-version: '11'
+            distribution: 'adopt'
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v2
+        if: github.event_name != 'pull_request'
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php81.release.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php81.release.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php81.release.ant.yml	(revision 8435)
@@ -0,0 +1,44 @@
+name: Release
+
+on:
+  push:
+    tags:
+      - "v*"
+    paths-ignore:
+      - '**.md'
+      - '.github/**'
+      - 'examples/**'
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v4
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '8.1'
+            extensions: imagick, swoole
+            coverage: xdebug
+      - name: Set up JDK 11
+        uses: actions/setup-java@v4
+        with:
+            java-version: '11'
+            distribution: 'adopt'
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v2
+        if: always()
+        with:
+            files: "./build/logs/junit.xml"
+      - name: Make Release
+        uses: "marvinpinto/action-automatic-releases@latest"
+        with:
+            repo_token: "${{ secrets.GITHUB_TOKEN }}"
+            prerelease: false
+            files: |
+                build/dist/doc.zip
+                build/dist/builddoc.zip
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php82.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php82.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php82.ant.yml	(revision 8435)
@@ -0,0 +1,44 @@
+name: CI (Ant, PHP 8.2)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+    paths-ignore:
+      - '**.md'
+      - '.github/**'
+      - 'examples/**'
+  pull_request:
+    types:
+      - opened
+    branches:
+      - 'master'
+  workflow_dispatch:
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v4
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '8.2'
+            extensions: imagick, swoole
+            coverage: xdebug
+      - name: Set up JDK 11
+        uses: actions/setup-java@v4
+        with:
+            java-version: '11'
+            distribution: 'adopt'
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v2
+        if: github.event_name != 'pull_request'
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php83.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php83.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.php83.ant.yml	(revision 8435)
@@ -0,0 +1,44 @@
+name: CI (Ant, PHP 8.3)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+    paths-ignore:
+      - '**.md'
+      - '.github/**'
+      - 'examples/**'
+  pull_request:
+    types:
+      - opened
+    branches:
+      - 'master'
+  workflow_dispatch:
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v4
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: '8.3'
+            extensions: imagick, swoole
+            coverage: xdebug
+      - name: Set up JDK 11
+        uses: actions/setup-java@v4
+        with:
+            java-version: '11'
+            distribution: 'adopt'
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v2
+        if: github.event_name != 'pull_request'
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.phpall.ant.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.phpall.ant.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/build.phpall.ant.yml	(revision 8435)
@@ -0,0 +1,47 @@
+name: CI (Ant, PHP All Versions)
+
+on:
+  push:
+    tags-ignore:
+      - '**'
+    branches:
+      - '**'
+    paths-ignore:
+      - '**.md'
+      - '.github/**'
+      - 'examples/**'
+  pull_request:
+    types:
+      - opened
+    branches:
+      - 'master'
+  workflow_dispatch:
+
+jobs:
+  build:
+    permissions: write-all
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        phpversion: ['7.3','7.4','8.0','8.1']
+
+    steps:
+      - uses: actions/checkout@v4
+      - name: Setup PHP with PECL extension
+        uses: shivammathur/setup-php@v2
+        with:
+            php-version: ${{ matrix.phpversion }}
+            extensions: imagick, swoole
+            coverage: xdebug
+      - name: Set up JDK 11
+        uses: actions/setup-java@v3
+        with:
+            java-version: '11'
+            distribution: 'adopt'
+      - name: Build with Ant
+        run: ant -noinput -buildfile build.ant.xml
+      - name: Publish Unit Test Results
+        uses: EnricoMi/publish-unit-test-result-action@v2
+        if: github.event_name != 'pull_request'
+        with:
+            files: "./build/logs/junit.xml"
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/maintain-issues-stale.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/maintain-issues-stale.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.github/workflows/maintain-issues-stale.yml	(revision 8435)
@@ -0,0 +1,24 @@
+name: Close inactive issues
+
+on:
+  schedule:
+    - cron: "0 5 * * *"
+  workflow_dispatch:
+
+jobs:
+  close-issues:
+    runs-on: ubuntu-latest
+    permissions:
+      issues: write
+      pull-requests: write
+    steps:
+      - uses: actions/stale@v5
+        with:
+          days-before-issue-stale: 30
+          days-before-issue-close: 14
+          stale-issue-label: "stale"
+          stale-issue-message: "This issue is stale because it has been open for 30 days with no activity."
+          close-issue-message: "This issue was closed because it has been inactive for 14 days since being marked as stale."
+          days-before-pr-stale: -1
+          days-before-pr-close: -1
+          repo-token: ${{ secrets.GITHUB_TOKEN }}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.gitignore
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.gitignore	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/.gitignore	(revision 8435)
@@ -0,0 +1,88 @@
+#ignore thumbnails created by windows
+Thumbs.db
+#Ignore files build by Visual Studio
+*.obj
+*.exe
+*.pdb
+*.user
+*.aps
+*.pch
+*.vspscc
+*_i.c
+*_p.c
+*.ncb
+*.suo
+*.tlb
+*.tlh
+*.bak
+*.cache
+*.ilk
+*.log
+[Bb]in
+[Dd]ebug*/
+*.lib
+*.sbr
+obj/
+[Rr]elease*/
+_ReSharper*/
+[Tt]est[Rr]esult*
+*.dcu
+*.dll
+*.ini
+*.um
+[B|b]ackup/*
+*/[C|c]ompiled/*
+*/_[I|i]n[F|f]uture/*
+*.~*
+*.$$$
+[P|p][R|r][E|e][F|f][S|s]/*
+[B|b]ackup*/*
+[D|d]cu/*
+[E|e]xport/*
+*.key
+*.KEY
+*.log
+*.ini
+*.INI
+*.um
+*.UM
+*.$$$
+*.123
+*.jpg
+*.png
+*.bmp
+*.gif
+cgi-bin
+_backup*
+*.zip
+*.tar
+*.tar.gz
+[D|d][E|e][P|p][L|l][O|o][Y|y]/*
+
+.htpasswd
+/nbproject/private/
+/nbproject/
+
+!/setup/.htaccess
+.vscode
+.idea
+
+/vendor/
+/logs/*
+.phpunit.result.cache
+/.phpdoc/
+/build/api/
+/build/coverage/
+/build/coverage-html/
+/build/doc/
+/build/logs/
+/build/pdepend/
+/build/phpdox/
+/build/phpdoc/
+/*.phar
+/composer.lock
+/examples/fullpdf.pdf
+/examples/factur-x.xml
+/examples/filetovalidate-report.xml
+/examples/filetovalidate-report.html
+myfile_dbg.xml
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/CODE_OF_CONDUCT.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/CODE_OF_CONDUCT.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/CODE_OF_CONDUCT.md	(revision 8435)
@@ -0,0 +1,128 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, religion, or sexual identity
+and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
+
+## Our Standards
+
+Examples of behavior that contributes to a positive environment for our
+community include:
+
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes,
+  and learning from the experience
+* Focusing on what is best not just for us as individuals, but for the
+  overall community
+
+Examples of unacceptable behavior include:
+
+* The use of sexualized language or imagery, and sexual attention or
+  advances of any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or email
+  address, without their explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+  professional setting
+
+## Enforcement Responsibilities
+
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
+
+## Scope
+
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported to the community leaders responsible for enforcement at
+.
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series
+of actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or
+permanent ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior,  harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within
+the community.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 2.0, available at
+https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
+
+Community Impact Guidelines were inspired by [Mozilla's code of conduct
+enforcement ladder](https://github.com/mozilla/diversity).
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see the FAQ at
+https://www.contributor-covenant.org/faq. Translations are available at
+https://www.contributor-covenant.org/translations.
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/CONTRIBUTING.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/CONTRIBUTING.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/CONTRIBUTING.md	(revision 8435)
@@ -0,0 +1,116 @@
+<!-- omit in toc -->
+# Contributing to horstoeko/zugferd
+
+First off, thanks for taking the time to contribute! â€ïž
+
+All types of contributions are encouraged and valued. See the [Table of Contents](#table-of-contents) for different ways to help and details about how this project handles them. Please make sure to read the relevant section before making your contribution. It will make it a lot easier for us maintainers and smooth out the experience for all involved. The community looks forward to your contributions. ð
+
+> And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about:
+> - Star the project
+> - Tweet about it
+> - Refer this project in your project's readme
+> - Mention the project at local meetups and tell your friends/colleagues
+
+<!-- omit in toc -->
+## Table of Contents
+
+- [I Have a Question](#i-have-a-question)
+- [I Want To Contribute](#i-want-to-contribute)
+  - [Reporting Bugs](#reporting-bugs)
+  - [Suggesting Enhancements](#suggesting-enhancements)
+
+
+
+## I Have a Question
+
+> If you want to ask a question, we assume that you have read the available [Documentation](https://github.com/horstoeko/zugferd).
+
+Before you ask a question, it is best to search for existing [Issues](https://github.com/horstoeko/zugferd/issues) that might help you. In case you have found a suitable issue and still need clarification, you can write your question in this issue. It is also advisable to search the internet for answers first.
+
+If you then still feel the need to ask a question and need clarification, we recommend the following:
+
+- Open an [Issue](https://github.com/horstoeko/zugferd/issues/new?assignees=horstoeko&labels=question&projects=&template=question.md&title=%5BQUESTION%5D).
+- Provide as much context as you can about what you're running into.
+- Provide project and platform versions (nodejs, npm, etc), depending on what seems relevant.
+
+We will then take care of the issue as soon as possible.
+
+## I Want To Contribute
+
+> ### Legal Notice <!-- omit in toc -->
+> When contributing to this project, you must agree that you have authored 100% of the content, that you have the necessary rights to the content and that the content you contribute may be provided under the project license.
+
+### Reporting Bugs
+
+<!-- omit in toc -->
+#### Before Submitting a Bug Report
+
+A good bug report shouldn't leave others needing to chase you up for more information. Therefore, we ask you to investigate carefully, collect information and describe the issue in detail in your report. Please complete the following steps in advance to help us fix any potential bug as fast as possible.
+
+- Make sure that you are using the latest version.
+- Determine if your bug is really a bug and not an error on your side e.g. using incompatible environment components/versions (Make sure that you have read the [documentation](https://github.com/horstoeko/zugferd). If you are looking for support, you might want to check [this section](#i-have-a-question)).
+- To see if other users have experienced (and potentially already solved) the same issue you are having, check if there is not already a bug report existing for your bug or error in the [bug tracker](https://github.com/horstoeko/zugferd/issues?q=label%3Abug).
+- Also make sure to search the internet (including Stack Overflow) to see if users outside of the GitHub community have discussed the issue.
+- Collect information about the bug:
+  - Stack trace (Traceback)
+  - OS, Platform and Version (Windows, Linux, macOS, x86, ARM)
+  - Version of the interpreter, compiler, SDK, runtime environment, package manager, depending on what seems relevant.
+  - Possibly your input and the output
+  - Can you reliably reproduce the issue? And can you also reproduce it with older versions?
+
+<!-- omit in toc -->
+#### How Do I Submit a Good Bug Report?
+
+> You must never report security related issues, vulnerabilities or bugs including sensitive information to the issue tracker, or elsewhere in public. Instead sensitive bugs must be sent by email to <security-horstoeko-zugferd@erling.com.de>.
+<!-- You may add a PGP key to allow the messages to be sent encrypted as well. -->
+
+We use GitHub issues to track bugs and errors. If you run into an issue with the project:
+
+- Open an [Issue](https://github.com/horstoeko/zugferd/issues/new?assignees=horstoeko&labels=bug&projects=&template=bug_report.md&title=%5BBUG%5D).
+- Explain the behavior you would expect and the actual behavior.
+- Please provide as much context as possible and describe the *reproduction steps* that someone else can follow to recreate the issue on their own. This usually includes your code. For good bug reports you should isolate the problem and create a reduced test case.
+- Provide the information you collected in the previous section.
+
+Once it's filed:
+
+- The project team will label the issue accordingly.
+- A team member will try to reproduce the issue with your provided steps. If there are no reproduction steps or no obvious way to reproduce the issue, the team will ask you for those steps and mark the issue as `needs-repro`. Bugs with the `needs-repro` tag will not be addressed until they are reproduced.
+- If the team is able to reproduce the issue, it will be marked `needs-fix`, as well as possibly other tags (such as `critical`), and the issue will be left to be [implemented by someone](#your-first-code-contribution).
+
+<!-- You might want to create an issue template for bugs and errors that can be used as a guide and that defines the structure of the information to be included. If you do so, reference it here in the description. -->
+
+
+### Suggesting Enhancements
+
+This section guides you through submitting an enhancement suggestion for horstoeko/zugferd, **including completely new features and minor improvements to existing functionality**. Following these guidelines will help maintainers and the community to understand your suggestion and find related suggestions.
+
+<!-- omit in toc -->
+#### Before Submitting an Enhancement
+
+- Make sure that you are using the latest version.
+- Read the [documentation](https://github.com/horstoeko/zugferd) carefully and find out if the functionality is already covered, maybe by an individual configuration.
+- Perform a [search](https://github.com/horstoeko/zugferd/issues?q=label%3Aenhancement) to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.
+- Find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Keep in mind that we want features that will be useful to the majority of our users and not just a small subset. If you're just targeting a minority of users, consider writing an add-on/plugin library.
+
+<!-- omit in toc -->
+#### How Do I Submit a Good Enhancement Suggestion?
+
+- Open an [issue](https://github.com/horstoeko/zugferd/issues/new?assignees=horstoeko&labels=enhancement&projects=&template=feature.md&title=%5BFEATURE%5D).
+- Use a **clear and descriptive title** for the issue to identify the suggestion.
+- Provide a **step-by-step description of the suggested enhancement** in as many details as possible.
+- **Describe the current behavior** and **explain which behavior you expected to see instead** and why. At this point you can also tell which alternatives do not work for you.
+- You may want to **include screenshots and animated GIFs** which help you demonstrate the steps or point out the part which the suggestion is related to. You can use [this tool](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. <!-- this should only be included if the project has a GUI -->
+- **Explain why this enhancement would be useful** to most horstoeko/zugferd users. You may also want to point out the other projects that solved it better and which could serve as inspiration.
+<!--
+### Your First Code Contribution
+include Setup of env, IDE and typical getting started instructions?
+
+### Improving The Documentation
+Updating, improving and correcting the documentation
+
+## Styleguides
+### Commit Messages
+
+## Join The Project Team
+## Attribution
+-->
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/LICENSE	(revision 8435)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 D. Erling
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/README.md	(revision 8435)
@@ -0,0 +1,371 @@
+# ZUGFeRD/XRechnung/Factur-X
+
+[![Latest Stable Version](https://poser.pugx.org/horstoeko/zugferd/v/stable.png)](https://packagist.org/packages/horstoeko/zugferd) [![Total Downloads](https://poser.pugx.org/horstoeko/zugferd/downloads.png)](https://packagist.org/packages/horstoeko/zugferd) [![Latest Unstable Version](https://poser.pugx.org/horstoeko/zugferd/v/unstable.png)](https://packagist.org/packages/horstoeko/zugferd) [![License](https://poser.pugx.org/horstoeko/zugferd/license.png)](https://packagist.org/packages/horstoeko/zugferd) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/horstoeko/zugferd)
+
+[![CI (Ant, PHP 7.3)](https://github.com/horstoeko/zugferd/actions/workflows/build.php73.ant.yml/badge.svg)](https://github.com/horstoeko/zugferd/actions/workflows/build.php73.ant.yml)
+[![CI (Ant, PHP 7.4)](https://github.com/horstoeko/zugferd/actions/workflows/build.php74.ant.yml/badge.svg)](https://github.com/horstoeko/zugferd/actions/workflows/build.php74.ant.yml)
+[![CI (PHP 8.0)](https://github.com/horstoeko/zugferd/actions/workflows/build.php80.ant.yml/badge.svg)](https://github.com/horstoeko/zugferd/actions/workflows/build.php80.ant.yml)
+[![CI (PHP 8.1)](https://github.com/horstoeko/zugferd/actions/workflows/build.php81.ant.yml/badge.svg)](https://github.com/horstoeko/zugferd/actions/workflows/build.php81.ant.yml)
+[![CI (PHP 8.2)](https://github.com/horstoeko/zugferd/actions/workflows/build.php82.ant.yml/badge.svg)](https://github.com/horstoeko/zugferd/actions/workflows/build.php82.ant.yml)
+[![CI (PHP 8.3)](https://github.com/horstoeko/zugferd/actions/workflows/build.php83.ant.yml/badge.svg)](https://github.com/horstoeko/zugferd/actions/workflows/build.php83.ant.yml)
+
+## Table of Contents
+
+- [ZUGFeRD/XRechnung/Factur-X](#zugferdxrechnungfactur-x)
+  - [Table of Contents](#table-of-contents)
+  - [License](#license)
+  - [Overview](#overview)
+  - [Supported profiles](#supported-profiles)
+  - [Further information](#further-information)
+  - [Related projects](#related-projects)
+  - [Dependencies](#dependencies)
+  - [Our Wiki](#our-wiki)
+  - [Installation](#installation)
+  - [Usage](#usage)
+    - [Configuration](#configuration)
+    - [Reading a xml file](#reading-a-xml-file)
+    - [Reading a pdf file with xml attachment](#reading-a-pdf-file-with-xml-attachment)
+    - [Writing a xml file](#writing-a-xml-file)
+    - [Writing a pdf file with attached xml file](#writing-a-pdf-file-with-attached-xml-file)
+    - [Merge existing PDF and XML](#merge-existing-pdf-and-xml)
+    - [Validation](#validation)
+
+## License
+
+The code in this project is provided under the [MIT](https://opensource.org/licenses/MIT) license.
+
+## Overview
+
+With `horstoeko/zugferd` you can read and write xml files containing electronic invoice data in the Minimum-, Basic-, EN16931-, Extended- and XRechnung Profile. In addition, it is possible to attach the XML data to an existing PDF file, which was created from an ERP system, for example. If both an XML file (or XML string) and a PDF file (or a PDF in the form of a string) exist, then a compliant PDF file with attachment can be created using the `ZugferdDocumentPdfMerger` class.
+
+**The advantage of this library is that you don't have to worry about whether a particular XML element exists in a desired profile - you can use the same program code for all supported profiles.**
+
+## Supported profiles
+
+- EN16931 Minimum
+- EN16931 Basic
+- EN16931 Basic WL
+- EN16931 Comfort
+- EN16931 Extended
+- EN16931 XRechnung 1.x
+- EN16931 XRechnung 2.x
+- EN16931 XRechnung 3.x
+
+**Note: This package provides only support for CII - not UBL**
+
+## Further information
+
+* [ZUGFeRD](https://de.wikipedia.org/wiki/ZUGFeRD) (German)
+* [XRechnung](https://de.wikipedia.org/wiki/XRechnung) (German)
+* [Factur-X](http://fnfe-mpe.org/factur-x/factur-x_en) (France)
+
+## Related projects
+
+* [ZUGFeRD Visualizer](https://github.com/horstoeko/zugferdvisualizer)
+* [ZUGFeRD Laravel](https://github.com/horstoeko/zugferd-laravel)
+* [ZUGFeRD UBL Syntax](https://github.com/horstoeko/ubl)
+* [Order-X](https://github.com/horstoeko/orderx)
+
+## Dependencies
+
+This package makes use of
+
+- [JMS Serializer](http://jmsyst.com/libs/serializer)
+- [Xsd2Php](https://github.com/goetas-webservices/xsd2php)
+- [FPDF](https://github.com/Setasign/FPDF)
+- [FPDI](https://github.com/Setasign/FPDI).
+
+## Our Wiki
+
+We offer you a wiki that is currently under construction. This wiki lives from your questions, but also from your cooperation. If you find that something is unclear or not described at all during your work with this library, please let us know.
+
+[You can find our Wiki here...](https://github.com/horstoeko/zugferd/wiki)
+
+## Installation
+
+There is one recommended way to install `horstoeko/zugferd` via [Composer](https://getcomposer.org/):
+
+* adding the dependency to your ``composer.json`` file:
+
+```js
+  "require": {
+      ..
+      "horstoeko/zugferd":"^1",
+      ..
+  },
+```
+
+## Usage
+
+For detailed eplanation you may have a look in the [examples](https://github.com/horstoeko/zugferd/tree/master/examples) of this package and the documentation attached to every release.
+
+### Configuration
+
+This library can be configured in various ways. For more information please visit our [Wiki](https://github.com/horstoeko/zugferd/wiki/Configuration).
+
+### Reading a xml file
+
+The central entry point to read XML data is the class `ZugferdDocumentReader`. Among other things, this provides methods for reading header and line information, as can be seen in the following example:
+
+```php
+use horstoeko\zugferd\ZugferdDocumentReader;
+
+$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/xml/factur-x.xml");
+
+$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+
+echo "\r\nGeneral document information\r\n";
+echo "----------------------------------------------------------------------\r\n";
+echo "Profile:               {$document->getProfileDefinitionParameter("name")}\r\n";
+echo "Profile:               {$document->getProfileDefinitionParameter("altname")}\r\n";
+echo "Document No:           {$documentno}\r\n";
+echo "Document Type:         {$documenttypecode}\r\n";
+echo "Document Date:         {$documentdate->format("Y-m-d")}\r\n";
+echo "Invoice currency:      {$invoiceCurrency}\r\n";
+echo "Tax currency:          {$taxCurrency}\r\n";
+
+if ($document->firstDocumentPosition()) {
+    echo "\r\nDocument positions\r\n";
+    echo "----------------------------------------------------------------------\r\n";
+    do {
+        $document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+
+        echo " - Line Id:                        {$lineid}\r\n";
+        echo " - Product Name:                   {$prodname}\r\n";
+        echo " - Product Description:            {$proddesc}\r\n";
+        echo " - Product Buyer ID:               {$prodbuyerid}\r\n";
+        echo " - Product Gross Price:            {$grosspriceamount}\r\n";
+        echo " - Product Gross Price Basis Qty.: {$grosspricebasisquantity} {$grosspricebasisquantityunitcode}\r\n";
+        echo " - Product Net Price:              {$netpriceamount}\r\n";
+        echo " - Product Net Price Basis Qty.:   {$netpricebasisquantity} {$netpricebasisquantityunitcode}\r\n";
+        echo " - Quantity:                       {$billedquantity} {$billedquantityunitcode}\r\n";
+        echo " - Line amount:                    {$lineTotalAmount}\r\n";
+
+        if ($document->firstDocumentPositionTax()) {
+            echo " - Position Tax(es)\r\n";
+            do {
+                $document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+                echo "   - Tax category code:            {$categoryCode}\r\n";
+                echo "   - Tax type code:                {$typeCode}\r\n";
+                echo "   - Tax percent:                  {$rateApplicablePercent}\r\n";
+                echo "   - Tax amount:                   {$calculatedAmount}\r\n";
+            } while ($document->nextDocumentPositionTax());
+        }
+
+        if ($document->firstDocumentPositionAllowanceCharge()) {
+            echo " - Position Allowance(s)/Charge(s)\r\n";
+            do {
+                $document->getDocumentPositionAllowanceCharge($actualAmount, $isCharge, $calculationPercent, $basisAmount, $reason, $taxTypeCode, $taxCategoryCode, $rateApplicablePercent, $sequence, $basisQuantity, $basisQuantityUnitCode, $reasonCode);
+                echo "   - Information\r\n";
+                echo "     - Actual Amount:                {$actualAmount}\r\n";
+                echo "     - Type:                         " . ($isCharge ? "Charge" : "Allowance") . "\r\n";
+                echo "     - Tax category code:            {$taxCategoryCode}\r\n";
+                echo "     - Tax type code:                {$taxTypeCode}\r\n";
+                echo "     - Tax percent:                  {$rateApplicablePercent}\r\n";
+                echo "     - Calculated percent:           {$calculationPercent}\r\n";
+                echo "     - Basis amount:                 {$basisAmount}\r\n";
+                echo "     - Basis qty.:                   {$basisQuantity} {$basisQuantityUnitCode}\r\n";
+            } while ($document->nextDocumentPositionAllowanceCharge());
+        }
+
+        echo "\r\n";
+    } while ($document->nextDocumentPosition());
+}
+
+if ($document->firstDocumentAllowanceCharge()) {
+    echo "\r\nDocument allowance(s)/charge(s)\r\n";
+    echo "----------------------------------------------------------------------\r\n";
+    do {
+        $document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        echo "   - Information\r\n";
+        echo "     - Actual Amount:                {$actualAmount}\r\n";
+        echo "     - Type:                         " . ($isCharge ? "Charge" : "Allowance") . "\r\n";
+        echo "     - Tax category code:            {$taxCategoryCode}\r\n";
+        echo "     - Tax type code:                {$taxTypeCode}\r\n";
+        echo "     - Tax percent:                  {$rateApplicablePercent}\r\n";
+        echo "     - Calculated percent:           {$calculationPercent}\r\n";
+        echo "     - Basis amount:                 {$basisAmount}\r\n";
+        echo "     - Basis qty.:                   {$basisQuantity} {$basisQuantityUnitCode}\r\n";
+    } while ($document->nextDocumentAllowanceCharge());
+}
+
+if ($document->firstDocumentTax()) {
+    echo "\r\nDocument tax\r\n";
+    echo "----------------------------------------------------------------------\r\n";
+    do {
+        $document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        echo "   - Information\r\n";
+        echo "     - Tax category code:            {$categoryCode}\r\n";
+        echo "     - Tax type code:                {$typeCode}\r\n";
+        echo "     - Basis amount:                 {$basisAmount}\r\n";
+        echo "     - Line total Basis amount:      {$lineTotalBasisAmount}\r\n";
+        echo "     - Tax percent:                  {$rateApplicablePercent}\r\n";
+        echo "     - Tax amount:                   {$calculatedAmount}\r\n";
+    } while ($document->nextDocumentTax());
+}
+
+$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+
+echo "\r\nDocument summation\r\n";
+echo "----------------------------------------------------------------------\r\n";
+
+echo "  - Line total amount                {$lineTotalAmount}\r\n";
+echo "  - Charge total amount              {$chargeTotalAmount}\r\n";
+echo "  - Allowance total amount           {$allowanceTotalAmount}\r\n";
+echo "  - Tax basis total amount           {$taxBasisTotalAmount}\r\n";
+echo "  - Tax total amount                 {$taxTotalAmount}\r\n";
+echo "  - Grant total amount               {$grandTotalAmount}\r\n";
+echo "  - Due payable amount               {$duePayableAmount}\r\n";
+```
+
+### Reading a pdf file with xml attachment
+
+Reading invoice data from a PDF is similar: you just need to use the `ZugferdDocumentPdfReader` class instead of `ZugferdDocumentReader`:
+
+```php
+  use horstoeko\zugferd\ZugferdDocumentPdfReader;
+
+  $document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/xml/factur-x.pdf");
+```
+
+The further reading of the invoice data is then identical with [Reading a xml file](#reading-a-xml-file)
+
+### Writing a xml file
+
+The `ZugferdDocumentBuilder` class is again the central entry point to generate compliant XML data:
+
+```php
+  use horstoeko\zugferd\ZugferdDocumentBuilder;
+  use horstoeko\zugferd\ZugferdProfiles;
+
+  // Create an empty invoice document in the EN16931 profile
+  $document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931);
+
+  // Add invoice and position information
+  $document
+    ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+    ->setDocumentSeller("Lieferant GmbH", "549910")
+    ->addDocumentSellerGlobalId("4000001123452", "0088")
+    ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+    ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+    ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+    ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+    ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+    ->addDocumentTax("S", "VAT", 275.0, 19.25, 7.0)
+    ->addDocumentTax("S", "VAT", 198.0, 37.02, 19.0)
+    ->setDocumentSummation(529.87, 529.87, 473.00, 0.0, 0.0, 473.00, 56.27, null, 0.0)
+    ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+    ->addNewPosition("1")
+    ->setDocumentPositionProductDetails("TrennblÃ€tter A4", "", "TB100A4", null, "0160", "4012345001235")
+    ->setDocumentPositionGrossPrice(9.9000)
+    ->setDocumentPositionNetPrice(9.9000)
+    ->setDocumentPositionQuantity(20, "H87")
+    ->addDocumentPositionTax('S', 'VAT', 19)
+    ->setDocumentPositionLineSummation(198.0)
+    ->addNewPosition("2")
+    ->setDocumentPositionProductDetails("Joghurt Banane", "", "ARNR2", null, "0160", "4000050986428")
+    ->SetDocumentPositionGrossPrice(5.5000)
+    ->SetDocumentPositionNetPrice(5.5000)
+    ->SetDocumentPositionQuantity(50, "H87")
+    ->AddDocumentPositionTax('S', 'VAT', 7)
+    ->SetDocumentPositionLineSummation(275.0)
+    ->writeFile("/tmp/factur-x.xml");
+```
+
+### Writing a pdf file with attached xml file
+
+Use the class ```ZugferdDocumentPdfBuilder``` if you already have an existing print output of the invoice (for example from an ERP system) and want to add an XML data stream to the existing PDF:
+
+
+```php
+  use horstoeko\zugferd\ZugferdDocumentBuilder;
+  use horstoeko\zugferd\ZugferdDocumentPdfBuilder;
+  use horstoeko\zugferd\ZugferdProfiles;
+
+  // Create an empty invoice document in the EN16931 profile
+  $document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931);
+
+  // Add invoice and position information
+  $document
+    ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+    ->setDocumentSeller("Lieferant GmbH", "549910")
+    ->addDocumentSellerGlobalId("4000001123452", "0088")
+    ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+    ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+    ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+    ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+    ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+    ->addDocumentTax("S", "VAT", 275.0, 19.25, 7.0)
+    ->addDocumentTax("S", "VAT", 198.0, 37.02, 19.0)
+    ->setDocumentSummation(529.87, 529.87, 473.00, 0.0, 0.0, 473.00, 56.27, null, 0.0)
+    ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+    ->addNewPosition("1")
+    ->setDocumentPositionProductDetails("TrennblÃ€tter A4", "", "TB100A4", null, "0160", "4012345001235")
+    ->setDocumentPositionGrossPrice(9.9000)
+    ->setDocumentPositionNetPrice(9.9000)
+    ->setDocumentPositionQuantity(20, "H87")
+    ->addDocumentPositionTax('S', 'VAT', 19)
+    ->setDocumentPositionLineSummation(198.0)
+    ->addNewPosition("2")
+    ->setDocumentPositionProductDetails("Joghurt Banane", "", "ARNR2", null, "0160", "4000050986428")
+    ->SetDocumentPositionGrossPrice(5.5000)
+    ->SetDocumentPositionNetPrice(5.5000)
+    ->SetDocumentPositionQuantity(50, "H87")
+    ->AddDocumentPositionTax('S', 'VAT', 7)
+    ->SetDocumentPositionLineSummation(275.0);
+
+  // Save merged PDF (existing original and XML) to a file
+  $pdfBuilder = new ZugferdDocumentPdfBuilder($document, "/tmp/existingprintlayout.pdf");
+  $pdfBuilder->generateDocument()->saveDocument("/tmp/merged.pdf");
+
+  // Alternatively, you can also return the merged output (existing original and XML) as a binary string
+  $pdfBuilder = new ZugferdDocumentPdfBuilder($document, "/tmp/existingprintlayout.pdf");
+  $pdfBinaryString = $pdfBuilder->generateDocument()->downloadString("merged.pdf");
+```
+
+### Merge existing PDF and XML
+
+Let's assume we already have a compliant XML (for example in the Comfort profile) and a PDF that already contains the print layout. Then it is possible to merge these two files into a compliant PDF (with XML attachment) using the class ```ZugferdDocumentPdfMerger```.
+
+```php
+use horstoeko\zugferd\ZugferdDocumentPdfMerger;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$existingXml = dirname(__FILE__) . "/invoice_1.xml";
+$existingPdf = dirname(__FILE__) . "/emptypdf.pdf";
+$mergeToPdf = dirname(__FILE__) . "/fullpdf.pdf";
+
+if (!file_exists($existingXml) || !file_exists($existingPdf)) {
+    throw new \Exception("XML and/or PDF does not exist");
+}
+
+(new ZugferdDocumentPdfMerger($existingXml, $existingPdf))->generateDocument()->saveDocument($mergeToPdf);
+```
+
+XML and/or PDF do not have to be available as a file. Strings containing the corresponding data can also be passed to the ZugferdDocumentPdfMerger class.
+
+```php
+use horstoeko\zugferd\ZugferdDocumentPdfMerger;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$existingXml = "<xml>,,,,,</xml>";
+$existingPdf = "%PDF-1.5...........";
+$mergeToPdf = dirname(__FILE__) . "/fullpdf.pdf";
+
+(new ZugferdDocumentPdfMerger($existingXml, $existingPdf))->generateDocument()->saveDocument($mergeToPdf);
+```
+
+### Validation
+
+This library offers several options for checking and validating a document. Please visit the corresponding page in our [Wiki](https://github.com/horstoeko/zugferd/wiki/Validation).
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/SECURITY.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/SECURITY.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/SECURITY.md	(revision 8435)
@@ -0,0 +1,10 @@
+# Security Policy
+
+## Supported Versions
+
+Only the latest released version of horstoeko/zugferd is supported.
+To facilitate upgrades we almost never make backwards-incompatible changes.
+
+## Reporting a Vulnerability
+
+Please report vulnerabilities over email, by sending an email to security-horstoeko-zugferd@erling.com.de.
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build.ant.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build.ant.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build.ant.xml	(revision 8435)
@@ -0,0 +1,363 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="php-automate-build-ant" default="full-build" basedir=".">
+    <!-- By default the tools are managed by Composer in ${basedir}/vendor/bin -->
+    <property name="url.composer.download" value="https://getcomposer.org/download/2.2.6/composer.phar"/>
+    <property name="url.validator.download" value="https://github.com/itplr-kosit/validator/releases/download/v1.5.0/validator-1.5.0-distribution.zip"/>
+    <property name="url.validator.scenarios.download" value="https://github.com/itplr-kosit/validator-configuration-xrechnung/releases/download/release-2023-07-31/validator-configuration-xrechnung_3.0.0_2023-07-31.zip"/>
+    <property name="url.phpdocumentor.download" value="https://phpdoc.org/phpDocumentor.phar"/>
+    <property name="validatorzipdir" value="${basedir}/build/validator"/>
+    <property name="validatorconfigzipdir" value="${validatorzipdir}"/>
+    <property name="validatorzipname" value="validator.zip"/>
+    <property name="validatorconfigzipname" value="validator-configuration.zip"/>
+    <property name="validatorzip" value="${validatorzipdir}/${validatorzipname}"/>
+    <property name="validatorconfigzip" value="${validatorconfigzipdir}/${validatorconfigzipname}"/>
+    <property name="validatorjarfilename" value="validationtool-1.5.0-standalone.jar"/>
+    <property name="composer" value="${basedir}/composer.phar"/>
+    <property name="phpdocumentor" value="${basedir}/phpDocumentor.phar"/>
+    <property name="pdepend" value="${basedir}/vendor/bin/pdepend"/>
+    <property name="phpcpd" value="${basedir}/vendor/bin/phpcpd"/>
+    <property name="phpcs" value="${basedir}/vendor/bin/phpcs"/>
+    <property name="phploc" value="${basedir}/vendor/bin/phploc"/>
+    <property name="phpmd" value="${basedir}/vendor/bin/phpmd"/>
+    <property name="phpunit" value="${basedir}/vendor/bin/phpunit"/>
+    <property name="phpstan" value="${basedir}/vendor/bin/phpstan"/>
+    <property name="git" value="/usr/bin/git"/>
+    <property name="result.schematron.en16931" value="0"/>
+    <property name="result.schematron.xrechnung" value="0"/>
+    <target name="clean" unless="clean.done" description="Cleanup build artifacts.">
+        <delete dir="${basedir}/build/builddoc"/>
+        <delete dir="${basedir}/build/doc"/>
+        <delete dir="${basedir}/build/coverage"/>
+        <delete dir="${basedir}/build/logs"/>
+        <delete dir="${basedir}/build/pdepend"/>
+        <delete dir="${basedir}/build/dist"/>
+        <delete dir="${basedir}/build/phpdoc"/>
+        <property name="clean.done" value="true"/>
+    </target>
+    <target name="composer" description="Install composer packages including require-dev.">
+        <get src="${url.composer.download}" dest="${composer}"/>
+        <exec executable="chmod" failonerror="true">
+            <arg value="+x"/>
+            <arg path="${composer}"/>
+        </exec>
+        <exec executable="php" failonerror="true">
+            <arg path="${composer}"/>
+            <arg value="install"/>
+            <arg value="--prefer-dist"/>
+            <arg value="--no-progress"/>
+        </exec>
+        <exec executable="php" failonerror="true">
+            <arg path="${composer}"/>
+            <arg value="update"/>
+        </exec>
+    </target>
+    <target name="downloadphpdocumentor" description="Install phpdocumentor.">
+        <get src="${url.phpdocumentor.download}" dest="${phpdocumentor}"/>
+        <exec executable="chmod" failonerror="true">
+            <arg value="+x"/>
+            <arg path="${phpdocumentor}"/>
+        </exec>
+    </target>
+    <target name="full-build" depends="prepare,composer,static-analysis,phpunit,schematron,-check-failure,projectdoc,deploy" description="Perform static analysis, run tests, and generate project documentation.">
+        <echo message="Built"/>
+    </target>
+    <target name="lint" unless="lint.done" description="Perform syntax check of PHP sourcecode files.">
+        <apply executable="php" failonerror="true" taskname="lint">
+            <arg value="-l"/>
+            <fileset dir="${basedir}/src">
+                <include name="**/*.php"/>
+            </fileset>
+            <fileset dir="${basedir}/tests">
+                <include name="**/*.php"/>
+            </fileset>
+        </apply>
+        <property name="lint.done" value="true"/>
+    </target>
+    <target name="pdepend" unless="pdepend.done" depends="prepare" description="Calculate software metrics using PHP_Depend and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${pdepend}" taskname="pdepend">
+            <arg value="--jdepend-xml=${basedir}/build/logs/jdepend.xml"/>
+            <arg value="--jdepend-chart=${basedir}/build/pdepend/dependencies.svg"/>
+            <arg value="--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg"/>
+            <arg path="${basedir}/src"/>
+        </exec>
+        <property name="pdepend.done" value="true"/>
+    </target>
+    <target name="phpcpd" unless="phpcpd.done" description="Find duplicate code using PHPCPD and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpcpd}" taskname="phpcpd">
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities"/>
+            <arg path="${basedir}/src"/>
+        </exec>
+        <property name="phpcpd.done" value="true"/>
+    </target>
+    <target name="phpcpd-ci" unless="phpcpd.done" depends="prepare" description="Find duplicate code using PHPCPD and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpcpd}" taskname="phpcpd">
+            <arg value="--log-pmd"/>
+            <arg path="${basedir}/build/logs/pmd-cpd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities/"/>
+            <arg path="${basedir}/src"/>
+        </exec>
+        <property name="phpcpd.done" value="true"/>
+    </target>
+    <target name="phpcs" unless="phpcs.done" description="Find coding standard violations using PHP_CodeSniffer and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpcs}" taskname="phpcs">
+            <arg value="--standard=${basedir}/build/phpcsrules.xml"/>
+            <arg value="--extensions=php"/>
+            <arg value="--ignore=autoload.php"/>
+            <arg path="${basedir}/src"/>
+            <arg path="${basedir}/tests"/>
+        </exec>
+        <property name="phpcs.done" value="true"/>
+    </target>
+    <target name="phpcs-ci" unless="phpcs.done" depends="prepare" description="Find coding standard violations using PHP_CodeSniffer and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpcs}" output="/dev/null" taskname="phpcs">
+            <arg value="--report=checkstyle"/>
+            <arg value="--report-file=${basedir}/build/logs/checkstyle.xml"/>
+            <arg value="--standard=${basedir}/build/phpcsrules.xml"/>
+            <arg value="--extensions=php"/>
+            <arg value="--ignore=autoload.php"/>
+            <arg path="${basedir}/src"/>
+            <arg path="${basedir}/tests"/>
+        </exec>
+        <property name="phpcs.done" value="true"/>
+    </target>
+    <target name="phpstan" unless="phpstan.done" description="Find coding standard violations using PHPStan and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpstan}" taskname="phpstan">
+            <arg value="analyze"/>
+            <arg value="-c"/>
+            <arg path="${basedir}/build/phpstan.neon"/>
+            <arg value="--autoload-file=${basedir}/vendor/autoload.php"/>
+            <arg value="--no-interaction"/>
+            <arg value="--no-progress"/>
+            <arg value="--error-format=table"/>
+        </exec>
+        <property name="phpstan.done" value="true"/>
+    </target>
+    <target name="phpstan-ci" unless="phpstan.done" depends="prepare" description="Find coding standard violations using PHPStan and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpstan}" taskname="phpstan" outputproperty="phpstan.output">
+            <arg value="analyze"/>
+            <arg value="-c"/>
+            <arg path="${basedir}/build/phpstan.neon"/>
+            <arg value="--autoload-file=${basedir}/vendor/autoload.php"/>
+            <arg value="--no-interaction"/>
+            <arg value="--no-progress"/>
+            <arg value="--error-format=checkstyle"/>
+        </exec>
+        <echo message="${phpstan.output}" file="${basedir}/build/logs/checkstyle_phpstan.xml"/>
+        <property name="phpstan.done" value="true"/>
+    </target>
+    <target name="phploc" unless="phploc.done" description="Measure project size using PHPLOC and print human readable output. Intended for usage on the command line.">
+        <exec executable="${phploc}" taskname="phploc">
+            <arg value="--count-tests"/>
+            <arg path="${basedir}/src"/>
+            <arg path="${basedir}/tests"/>
+        </exec>
+        <property name="phploc.done" value="true"/>
+    </target>
+    <target name="phploc-ci" unless="phploc.done" depends="prepare" description="Measure project size using PHPLOC and log result in CSV and XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phploc}" taskname="phploc">
+            <arg value="--count-tests"/>
+            <arg value="--log-csv"/>
+            <arg path="${basedir}/build/logs/phploc.csv"/>
+            <arg value="--log-xml"/>
+            <arg path="${basedir}/build/logs/phploc.xml"/>
+            <arg path="${basedir}/src"/>
+            <arg path="${basedir}/tests"/>
+        </exec>
+        <property name="phploc.done" value="true"/>
+    </target>
+    <target name="phpmd" unless="phpmd.done" description="Perform project mess detection using PHPMD and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${basedir}/src"/>
+            <arg value="text"/>
+            <arg path="${basedir}/build/phpmd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities/"/>
+        </exec>
+        <property name="phpmd.done" value="true"/>
+    </target>
+    <target name="phpmd-ci" unless="phpmd.done" depends="prepare" description="Perform project mess detection using PHPMD and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${basedir}/src"/>
+            <arg value="xml"/>
+            <arg path="${basedir}/build/phpmd.xml"/>
+            <arg value="--reportfile"/>
+            <arg path="${basedir}/build/logs/pmd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities/"/>
+        </exec>
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${basedir}/src"/>
+            <arg value="html"/>
+            <arg path="${basedir}/build/phpmd.xml"/>
+            <arg value="--reportfile"/>
+            <arg path="${basedir}/build/logs/pmd.html"/>
+            <arg value="--exclude"/>
+            <arg path="${basedir}/src/entities/"/>
+        </exec>
+        <property name="phpmd.done" value="true"/>
+    </target>
+    <target name="phpunit" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit.">
+        <exec executable="${phpunit}" resultproperty="result.phpunit" taskname="phpunit">
+            <arg value="--configuration"/>
+            <arg path="${basedir}/build/phpunit.xml"/>
+        </exec>
+        <property name="phpunit.done" value="true"/>
+    </target>
+    <target name="phpunit-no-coverage" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit without generating code coverage reports.">
+        <exec executable="${phpunit}" failonerror="true" taskname="phpunit">
+            <arg value="--configuration"/>
+            <arg path="${basedir}/build/phpunit.xml"/>
+            <arg path="tests"/>
+            <arg value="--no-coverage"/>
+        </exec>
+        <property name="phpunit.done" value="true"/>
+    </target>
+    <target name="prepare" unless="prepare.done" depends="clean" description="Prepare for build.">
+        <mkdir dir="${basedir}/build/builddoc"/>
+        <mkdir dir="${basedir}/build/doc"/>
+        <mkdir dir="${basedir}/build/coverage"/>
+        <mkdir dir="${basedir}/build/logs"/>
+        <mkdir dir="${basedir}/build/pdepend"/>
+        <mkdir dir="${basedir}/build/dist"/>
+        <mkdir dir="${basedir}/build/phpdoc"/>
+        <property name="prepare.done" value="true"/>
+    </target>
+    <target name="quick-build" depends="prepare,composer,lint,phpunit-no-coverage" description="Perform lint check and run tests without generating code coverage reports.">
+        <echo message="Built"/>
+    </target>
+    <target name="static-analysis" depends="lint,phploc-ci,pdepend,phpmd-ci,phpcs-ci,phpstan-ci,phpcpd-ci" description="Perform static analysis.">
+        <echo message="Done"/>
+    </target>
+    <target name="-check-failure">
+        <fail message="PHPUnit did not finish successfully">
+            <condition>
+                <not>
+                    <equals arg1="${result.phpunit}" arg2="0"/>
+                </not>
+            </condition>
+        </fail>
+        <fail message="Schematron for XRechnung 2.0 did not finish successfully">
+            <condition>
+                <not>
+                    <equals arg1="${result.schematron.xrechnung}" arg2="0"/>
+                </not>
+            </condition>
+        </fail>
+        <fail message="Schematron for EN16931 did not finish successfully">
+            <condition>
+                <not>
+                    <equals arg1="${result.schematron.en16931}" arg2="0"/>
+                </not>
+            </condition>
+        </fail>
+        <echo message="Checked failure"/>
+    </target>
+    <target name="deploy" description="Deplay build">
+        <zip destfile="${basedir}/build/dist/doc.zip">
+            <fileset dir="${basedir}/build/doc">
+                <include name="**/*.*"/>
+            </fileset>
+        </zip>
+        <zip destfile="${basedir}/build/dist/src.zip">
+            <fileset dir="${basedir}/src">
+                <include name="**/*.*"/>
+            </fileset>
+        </zip>
+        <zip destfile="${basedir}/build/dist/builddoc.zip">
+            <fileset dir="${basedir}/build">
+                <include name="builddoc/**/*.*"/>
+                <include name="coverage/**/*.*"/>
+                <include name="coverage-html/**/*.*"/>
+                <include name="logs/**/*.*"/>
+                <include name="pdepend/**/*.*"/>
+                <exclude name="phpdoc/**/*.*"/>
+            </fileset>
+        </zip>
+    </target>
+    <target name="schematron" description="Validate agains schematron">
+        <!-- Clean -->
+        <delete dir="${validatorzipdir}"/>
+        <delete dir="${validatorconfigzipdir}"/>
+        <delete file="${basedir}/examples/factur-x.xml"/>
+        <mkdir dir="${validatorzipdir}"/>
+        <mkdir dir="${validatorconfigzipdir}"/>
+        <!-- Get Validator -->
+        <echo message="Downloading validator..."/>
+        <exec executable="wget" failonerror="true">
+            <arg value="${url.validator.download}"/>
+            <arg value="-O"/>
+            <arg path="${validatorzip}"/>
+        </exec>
+        <echo message="Downloaded validator."/>
+        <!-- Get Scenarios -->
+        <echo message="Downloading scenarios..."/>
+        <exec executable="wget" failonerror="true">
+            <arg value="${url.validator.scenarios.download}"/>
+            <arg value="-O"/>
+            <arg path="${validatorconfigzip}"/>
+        </exec>
+        <echo message="Downloaded validator."/>
+        <!-- Unpacking -->
+        <echo message="Unpacking..."/>
+        <exec executable="unzip" failonerror="true">
+            <arg path="${validatorzip}"/>
+            <arg value="-d"/>
+            <arg path="${validatorzipdir}"/>
+        </exec>
+        <exec executable="unzip" failonerror="true">
+            <arg path="${validatorconfigzip}"/>
+            <arg value="-d"/>
+            <arg path="${validatorconfigzipdir}"/>
+        </exec>
+        <echo message="Unpacked."/>
+        <!-- Create XRechnung 3.0 -->
+        <echo message="Creating XRechnung 3.0..."/>
+        <exec executable="php" dir="${basedir}/examples" failonerror="true">
+            <arg value="-f"/>
+            <arg path="./examples/XRechnung3SimpleQuick.php"/>
+        </exec>
+        <echo message="Created XRechnung 3.0."/>
+        <!-- Validate XRechnugn 3.0 -->
+        <exec executable="java" resultproperty="result.schematron.xrechnung" failonerror="false">
+            <arg value="-jar"/>
+            <arg path="${validatorzipdir}/${validatorjarfilename}"/>
+            <arg value="-r"/>
+            <arg path="${validatorconfigzipdir}/"/>
+            <arg value="-s"/>
+            <arg path="${validatorconfigzipdir}/scenarios.xml"/>
+            <arg path="${basedir}/examples/factur-x.xml"/>
+        </exec>
+        <!-- Create EN16931 -->
+        <echo message="Creating EN16931..."/>
+        <exec executable="php" dir="${basedir}/examples" failonerror="true">
+            <arg value="-f"/>
+            <arg path="./examples/En16931SimpleQuick.php"/>
+        </exec>
+        <echo message="Created EN16931."/>
+        <!-- Validate EN16931 -->
+        <exec executable="java" resultproperty="result.schematron.en16931" failonerror="false">
+            <arg value="-jar"/>
+            <arg path="${validatorzipdir}/${validatorjarfilename}"/>
+            <arg value="-r"/>
+            <arg path="${validatorconfigzipdir}/"/>
+            <arg value="-s"/>
+            <arg path="${validatorconfigzipdir}/scenarios.xml"/>
+            <arg path="${basedir}/examples/factur-x.xml"/>
+        </exec>
+        <!-- Clean -->
+        <delete dir="${validatorzipdir}"/>
+        <delete dir="${validatorconfigzipdir}"/>
+        <delete file="${basedir}/examples/factur-x.xml"/>
+    </target>
+    <target name="projectdoc" description="Generate documentation">
+        <antcall target="clean"/>
+        <antcall target="downloadphpdocumentor"/>
+        <exec executable="php" dir="${basedir}/build">
+            <arg path="${phpdocumentor}"/>
+        </exec>
+        <delete file="${phpdocumentor}"/>
+        <antcall target="clean"/>
+    </target>
+</project>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build.xml	(revision 8435)
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="php-automate-build-ant" default="full-build" basedir=".">
+    <!-- By default the tools are managed by Composer in ${project.basedir}/vendor/bin -->
+    <property name="url.composer.download" value="https://getcomposer.org/download/2.2.6/composer.phar"/>
+    <property name="url.phpdocumentor.download" value="https://phpdoc.org/phpDocumentor.phar"/>
+    <property name="composer" value="${project.basedir}/composer.phar"/>
+    <property name="phpdocumentor" value="${project.basedir}/phpDocumentor.phar"/>
+    <property name="pdepend" value="${project.basedir}/vendor/bin/pdepend"/>
+    <property name="phpcpd" value="${project.basedir}/vendor/bin/phpcpd"/>
+    <property name="phpcs" value="${project.basedir}/vendor/bin/phpcs"/>
+    <property name="phploc" value="${project.basedir}/vendor/bin/phploc"/>
+    <property name="phpmd" value="${project.basedir}/vendor/bin/phpmd"/>
+    <property name="phpunit" value="${project.basedir}/vendor/bin/phpunit"/>
+    <property name="phpstan" value="${project.basedir}/vendor/bin/phpstan"/>
+    <property name="git" value="/usr/bin/git"/>
+    <target name="clean" unless="clean.done" description="Cleanup build artifacts.">
+        <delete dir="${project.basedir}/build/builddoc"/>
+        <delete dir="${project.basedir}/build/cache"/>
+        <delete dir="${project.basedir}/build/doc"/>
+        <delete dir="${project.basedir}/build/coverage"/>
+        <delete dir="${project.basedir}/build/logs"/>
+        <delete dir="${project.basedir}/build/pdepend"/>
+        <delete dir="${project.basedir}/build/dist"/>
+        <delete dir="${project.basedir}/build/phpdoc"/>
+        <property name="clean.done" value="true"/>
+    </target>
+    <target name="composer" description="Install composer packages including require-dev.">
+        <exec executable="wget">
+            <arg path="${url.composer.download}"/>
+            <arg value="-O"/>
+            <arg path="${composer}"/>
+        </exec>
+        <exec executable="chmod">
+            <arg value="+x"/>
+            <arg path="${composer}"/>
+        </exec>
+        <exec executable="php">
+            <arg path="${composer}"/>
+            <arg value="install"/>
+            <arg value="--prefer-dist"/>
+            <arg value="--no-progress"/>
+        </exec>
+        <exec executable="php">
+            <arg path="${composer}"/>
+            <arg value="update"/>
+        </exec>
+    </target>
+    <target name="downloadphpdocumentor" description="Install phpdocumentor">
+        <exec executable="wget">
+            <arg path="${url.phpdocumentor.download}"/>
+            <arg value="-O"/>
+            <arg path="${phpdocumentor}"/>
+        </exec>
+        <exec executable="chmod">
+            <arg value="+x"/>
+            <arg path="${phpdocumentor}"/>
+        </exec>
+    </target>
+    <target name="full-build" depends="prepare,composer,static-analysis,phpunit,-check-failure,projectdoc,deploy" description="Perform static analysis, run tests, and generate project documentation.">
+        <echo message="Built"/>
+    </target>
+    <target name="lint" unless="lint.done" description="Perform syntax check of PHP sourcecode files.">
+        <apply executable="php" taskname="lint">
+            <arg value="-l"/>
+            <fileset dir="${project.basedir}/src">
+                <include name="**/*.php"/>
+            </fileset>
+            <fileset dir="${project.basedir}/tests">
+                <include name="**/*.php"/>
+            </fileset>
+        </apply>
+        <property name="lint.done" value="true"/>
+    </target>
+    <target name="pdepend" unless="pdepend.done" depends="prepare" description="Calculate software metrics using PHP_Depend and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${pdepend}" taskname="pdepend">
+            <arg value="--jdepend-xml=${project.basedir}/build/logs/jdepend.xml"/>
+            <arg value="--jdepend-chart=${project.basedir}/build/pdepend/dependencies.svg"/>
+            <arg value="--overview-pyramid=${project.basedir}/build/pdepend/overview-pyramid.svg"/>
+            <arg path="${project.basedir}/src"/>
+        </exec>
+        <property name="pdepend.done" value="true"/>
+    </target>
+    <target name="phpcpd" unless="phpcpd.done" description="Find duplicate code using PHPCPD and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpcpd}" taskname="phpcpd">
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+            <arg path="${project.basedir}/src"/>
+        </exec>
+        <property name="phpcpd.done" value="true"/>
+    </target>
+    <target name="phpcpd-ci" unless="phpcpd.done" depends="prepare" description="Find duplicate code using PHPCPD and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpcpd}" taskname="phpcpd">
+            <arg value="--log-pmd"/>
+            <arg path="${project.basedir}/build/logs/pmd-cpd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+            <arg path="${project.basedir}/src"/>
+        </exec>
+        <property name="phpcpd.done" value="true"/>
+    </target>
+    <target name="phpcs" unless="phpcs.done" description="Find coding standard violations using PHP_CodeSniffer and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpcs}" taskname="phpcs">
+            <arg value="--standard=${project.basedir}/build/phpcsrules.xml"/>
+            <arg value="--extensions=php"/>
+            <arg value="--ignore=autoload.php"/>
+            <arg path="${project.basedir}/src"/>
+            <arg path="${project.basedir}/tests"/>
+        </exec>
+        <property name="phpcs.done" value="true"/>
+    </target>
+    <target name="phpcs-ci" unless="phpcs.done" depends="prepare" description="Find coding standard violations using PHP_CodeSniffer and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpcs}" output="/dev/null" taskname="phpcs">
+            <arg value="--report=checkstyle"/>
+            <arg value="--report-file=${project.basedir}/build/logs/checkstyle.xml"/>
+            <arg value="--standard=${project.basedir}/build/phpcsrules.xml"/>
+            <arg value="--extensions=php"/>
+            <arg value="--ignore=autoload.php"/>
+            <arg path="${project.basedir}/src"/>
+            <arg path="${project.basedir}/tests"/>
+        </exec>
+        <property name="phpcs.done" value="true"/>
+    </target>
+    <target name="phpstan" unless="phpstan.done" description="Find coding standard violations using PHPStan and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpstan}" taskname="phpstan" passthru="true">
+            <arg value="analyze"/>
+            <arg value="-c"/>
+            <arg path="${project.basedir}/build/phpstan.neon"/>
+            <arg value="--autoload-file=${project.basedir}/vendor/autoload.php"/>
+            <arg value="--no-interaction"/>
+            <arg value="--no-progress"/>
+            <arg value="--error-format=table"/>
+        </exec>
+        <property name="phpstan.done" value="true"/>
+    </target>
+    <target name="phpstan-ci" unless="phpstan.done" depends="prepare" description="Find coding standard violations using PHPStan and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpstan}" taskname="phpstan" outputProperty="phpstan.output">
+            <arg value="analyze"/>
+            <arg value="-c"/>
+            <arg path="${project.basedir}/build/phpstan.neon"/>
+            <arg value="--autoload-file=${project.basedir}/vendor/autoload.php"/>
+            <arg value="--no-interaction"/>
+            <arg value="--no-progress"/>
+            <arg value="--error-format=checkstyle"/>
+        </exec>
+        <echo message="${phpstan.output}" file="${project.basedir}/build/logs/checkstyle_phpstan.xml"/>
+        <property name="phpstan.done" value="true"/>
+    </target>
+    <target name="phploc" unless="phploc.done" description="Measure project size using PHPLOC and print human readable output. Intended for usage on the command line.">
+        <exec executable="${phploc}" taskname="phploc">
+            <arg value="--count-tests"/>
+            <arg path="${project.basedir}/src"/>
+            <arg path="${project.basedir}/tests"/>
+        </exec>
+        <property name="phploc.done" value="true"/>
+    </target>
+    <target name="phploc-ci" unless="phploc.done" depends="prepare" description="Measure project size using PHPLOC and log result in CSV and XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phploc}" taskname="phploc">
+            <arg value="--count-tests"/>
+            <arg value="--log-csv"/>
+            <arg path="${project.basedir}/build/logs/phploc.csv"/>
+            <arg value="--log-xml"/>
+            <arg path="${project.basedir}/build/logs/phploc.xml"/>
+            <arg path="${project.basedir}/src"/>
+            <arg path="${project.basedir}/tests"/>
+        </exec>
+        <property name="phploc.done" value="true"/>
+    </target>
+    <target name="phpmd" unless="phpmd.done" description="Perform project mess detection using PHPMD and print human readable output. Intended for usage on the command line before committing.">
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${project.basedir}/src"/>
+            <arg value="text"/>
+            <arg path="${project.basedir}/build/phpmd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+        </exec>
+        <property name="phpmd.done" value="true"/>
+    </target>
+    <target name="phpmd-ci" unless="phpmd.done" depends="prepare" description="Perform project mess detection using PHPMD and log result in XML format. Intended for usage within a continuous integration environment.">
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${project.basedir}/src"/>
+            <arg value="xml"/>
+            <arg path="${project.basedir}/build/phpmd.xml"/>
+            <arg value="--reportfile"/>
+            <arg path="${project.basedir}/build/logs/pmd.xml"/>
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+        </exec>
+        <exec executable="${phpmd}" taskname="phpmd">
+            <arg path="${project.basedir}/src"/>
+            <arg value="html"/>
+            <arg path="${project.basedir}/build/phpmd.xml"/>
+            <arg value="--reportfile"/>
+            <arg path="${project.basedir}/build/logs/pmd.html"/>
+            <arg value="--exclude"/>
+            <arg path="${project.basedir}/src/entities/"/>
+        </exec>
+        <property name="phpmd.done" value="true"/>
+    </target>
+    <target name="phpunit" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit.">
+        <exec executable="${phpunit}" returnProperty="result.phpunit" taskname="phpunit">
+            <arg value="--configuration"/>
+            <arg path="${project.basedir}/build/phpunit.xml"/>
+        </exec>
+        <property name="phpunit.done" value="true"/>
+    </target>
+    <target name="phpunit-no-coverage" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit without generating code coverage reports.">
+        <exec executable="${phpunit}" taskname="phpunit">
+            <arg value="--configuration"/>
+            <arg path="${project.basedir}/build/phpunit.xml"/>
+            <arg path="tests"/>
+            <arg value="--no-coverage"/>
+        </exec>
+        <property name="phpunit.done" value="true"/>
+    </target>
+    <target name="prepare" unless="prepare.done" depends="clean" description="Prepare for build.">
+        <mkdir dir="${project.basedir}/build/builddoc"/>
+        <mkdir dir="${project.basedir}/build/cache"/>
+        <mkdir dir="${project.basedir}/build/doc"/>
+        <mkdir dir="${project.basedir}/build/coverage"/>
+        <mkdir dir="${project.basedir}/build/logs"/>
+        <mkdir dir="${project.basedir}/build/pdepend"/>
+        <mkdir dir="${project.basedir}/build/dist"/>
+        <mkdir dir="${project.basedir}/build/phpdoc"/>
+        <property name="prepare.done" value="true"/>
+    </target>
+    <target name="quick-build" depends="prepare,composer,lint,phpunit-no-coverage" description="Perform lint check and run tests without generating code coverage reports.">
+        <echo message="Built"/>
+    </target>
+    <target name="static-analysis" depends="lint,phploc-ci,pdepend,phpmd-ci,phpcs-ci,phpstan-ci,phpcpd-ci" description="Perform static analysis.">
+        <echo message="Done"/>
+    </target>
+    <target name="-check-failure">
+        <fail message="PHPUnit did not finish successfully">
+            <condition>
+                <not>
+                    <equals arg1="${result.phpunit}" arg2="0"/>
+                </not>
+            </condition>
+        </fail>
+        <echo message="Checked failure"/>
+    </target>
+    <target name="deploy" description="Deplay build">
+        <zip destfile="${project.basedir}/build/dist/doc.zip">
+            <fileset dir="${project.basedir}/build/doc">
+                <include name="**/*.*"/>
+            </fileset>
+        </zip>
+        <zip destfile="${project.basedir}/build/dist/src.zip">
+            <fileset dir="${project.basedir}/src">
+                <include name="**/*.*"/>
+            </fileset>
+        </zip>
+        <zip destfile="${project.basedir}/build/dist/builddoc.zip">
+            <fileset dir="${project.basedir}/build">
+                <include name="builddoc/**/*.*"/>
+                <include name="coverage/**/*.*"/>
+                <include name="coverage-html/**/*.*"/>
+                <include name="logs/**/*.*"/>
+                <include name="pdepend/**/*.*"/>
+                <exclude name="phpdoc/**/*.*"/>
+            </fileset>
+        </zip>
+    </target>
+    <target name="projectdoc" description="Generate documentation">
+        <if>
+            <versioncompare version="${php.version}" desiredVersion="7.4" operator=">=" />
+            <then>
+                <phingcall target="clean" />
+                <phingcall target="downloadphpdocumentor" />
+                <exec executable="php" dir="${project.basedir}/build">
+                    <arg path="${phpdocumentor}"/>
+                </exec>
+                <delete file="${phpdocumentor}"/>
+                <phingcall target="clean" />
+            </then>
+            <else>
+                <echo message="Build documentation only on PHP7.4 or higher" />
+            </else>
+        </if>
+    </target>
+</project>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules.xml	(revision 8435)
@@ -0,0 +1,351 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PSR12" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The PSR-12 coding standard.</description>
+    <arg name="tab-width" value="4"/>
+    <exclude-pattern>*/src/entities/*</exclude-pattern>
+
+    <!-- 2. General -->
+
+    <!-- 2.1 Basic Coding Standard -->
+
+    <!-- Code MUST follow all rules outlined in PSR-1. -->
+    <rule ref="PSR1"/>
+
+    <!-- The term 'StudlyCaps' in PSR-1 MUST be interpreted as PascalCase where the first letter of each word is capitalized including the very first letter. -->
+
+    <!-- 2.2 Files -->
+
+    <!-- All PHP files MUST use the Unix LF (linefeed) line ending only. -->
+    <rule ref="Generic.Files.LineEndings">
+        <properties>
+            <property name="eolChar" value="\n"/>
+        </properties>
+    </rule>
+
+    <!-- All PHP files MUST end with a non-blank line, terminated with a single LF. -->
+    <rule ref="PSR2.Files.EndFileNewline"/>
+
+    <!-- The closing ?> tag MUST be omitted from files containing only PHP. -->
+    <rule ref="PSR2.Files.ClosingTag"/>
+
+    <!-- 2.3 Lines -->
+
+    <!-- There MUST NOT be a hard limit on line length.
+    The soft limit on line length MUST be 120 characters.
+    Lines SHOULD NOT be longer than 80 characters; lines longer than that SHOULD be split into multiple subsequent lines of no more than 80 characters each. -->
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="500"/>
+            <property name="absoluteLineLimit" value="0"/>
+        </properties>
+    </rule>
+
+    <!-- There MUST NOT be trailing whitespace at the end of lines.
+    Blank lines MAY be added to improve readability and to indicate related blocks of code except where explicitly forbidden. -->
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace">
+        <properties>
+            <property name="ignoreBlankLines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines">
+        <severity>0</severity>
+    </rule>
+
+    <!-- There MUST NOT be more than one statement per line. -->
+    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
+
+    <!-- 2.4 Indenting -->
+
+    <!-- Code MUST use an indent of 4 spaces for each indent level, and MUST NOT use tabs for indenting. -->
+    <rule ref="Generic.WhiteSpace.ScopeIndent">
+        <properties>
+            <property name="ignoreIndentationTokens" type="array">
+                <element value="T_COMMENT"/>
+                <element value="T_DOC_COMMENT_OPEN_TAG"/>
+            </property>
+        </properties>
+    </rule>
+    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
+
+    <!-- 2.5 Keywords and Types -->
+
+    <!-- All PHP reserved keywords and types [1][2] MUST be in lower case.
+    Any new types and keywords added to future PHP versions MUST be in lower case. -->
+    <rule ref="Generic.PHP.LowerCaseKeyword"/>
+    <rule ref="Generic.PHP.LowerCaseConstant"/>
+    <rule ref="Generic.PHP.LowerCaseType"/>
+
+    <!-- Short form of type keywords MUST be used i.e. bool instead of boolean, int instead of integer etc. -->
+    <!-- checked by PSR12.Keywords.ShortFormTypeKeywords -->
+
+    <!-- 3. Declare Statements, Namespace, and Import Statements -->
+
+    <!-- The header of a PHP file may consist of a number of different blocks. If present, each of the blocks below MUST be separated by a single blank line, and MUST NOT contain a blank line. Each block MUST be in the order listed below, although blocks that are not relevant may be omitted.
+
+    Opening php tag.
+    File-level docblock.
+    One or more declare statements.
+    The namespace declaration of the file.
+    One or more class-based use import statements.
+    One or more function-based use import statements.
+    One or more constant-based use import statements.
+    The remainder of the code in the file. -->
+    <!-- checked by PSR12.Files.FileHeader -->
+
+    <!-- When a file contains a mix of HTML and PHP, any of the above sections may still be used. If so, they MUST be present at the top of the file, even if the remainder of the code consists of a closing PHP tag and then a mixture of HTML and PHP. -->
+
+    <!-- When the opening php tag is on the first line of the file, it MUST be on its own line with no other statements unless it is a file containing markup outside of PHP opening and closing tags. -->
+
+    <!-- Import statements MUST never begin with a leading backslash as they must always be fully qualified. -->
+    <!-- checked by PSR12.Files.ImportStatement -->
+
+    <!-- Compound namespaces with a depth of more than two MUST NOT be used. -->
+    <!-- checked by PSR12.Namespaces.CompoundNamespaceDepth -->
+
+    <!-- When wishing to declare strict types in files containing markup outside PHP opening and closing tags, the declaration MUST be on the first line of the file and include an opening PHP tag, the strict types declaration and closing tag. -->
+    <!-- Declare statements MUST contain no spaces and MUST be exactly declare(strict_types=1) (with an optional semi-colon terminator). -->
+    <!-- Block declare statements are allowed and MUST be formatted as below. -->
+    <!-- checked by PSR12.Files.DeclareStatement -->
+
+    <!-- 4. Classes, Properties, and Methods -->
+
+    <!-- Any closing brace MUST NOT be followed by any comment or statement on the same line. -->
+    <!-- checked by PSR12.Classes.ClosingBrace -->
+
+    <!-- When instantiating a new class, parentheses MUST always be present even when there are no arguments passed to the constructor. -->
+    <!-- checked by PSR12.Classes.ClassInstantiation -->
+
+    <!-- 4.1 Extends and Implements -->
+
+    <!-- The extends and implements keywords MUST be declared on the same line as the class name. -->
+    <!-- The opening brace for the class MUST go on its own line; the closing brace for the class MUST go on the next line after the body. -->
+    <!-- Opening braces MUST be on their own line and MUST NOT be preceded or followed by a blank line. -->
+    <!-- Closing braces MUST be on their own line and MUST NOT be preceded by a blank line. -->
+    <!-- Lists of implements and, in the case of interfaces, extends MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one interface per line. -->
+    <rule ref="PSR2.Classes.ClassDeclaration"/>
+
+    <!-- 4.2 Using traits -->
+
+    <!-- The use keyword used inside the classes to implement traits MUST be declared on the next line after the opening brace. -->
+    <!-- Each individual trait that is imported into a class MUST be included one-per-line and each inclusion MUST have its own use import statement. -->
+    <!-- When the class has nothing after the use import statement, the class closing brace MUST be on the next line after the use import statement. Otherwise, it MUST have a blank line after the use import statement. -->
+    <!-- When using the insteadof and as operators they must be used as follows taking note of indentation, spacing, and new lines. -->
+    <!-- checked by PSR12.Traits.UseDeclaration -->
+
+    <!-- 4.3 Properties and Constants -->
+
+    <!-- Visibility MUST be declared on all properties. -->
+    <!-- The var keyword MUST NOT be used to declare a property. -->
+    <!-- There MUST NOT be more than one property declared per statement. -->
+    <!-- Property names MUST NOT be prefixed with a single underscore to indicate protected or private visibility.
+    That is, an underscore prefix explicitly has no meaning. -->
+    <!-- There MUST be a space between type declaration and property name. -->
+    <rule ref="PSR2.Classes.PropertyDeclaration"/>
+
+    <!-- Visibility MUST be declared on all constants if your project PHP minimum version supports constant visibilities (PHP 7.1 or later). -->
+    <!-- checked by PSR12.Properties.ConstantVisibility -->
+
+    <!-- 4.4 Methods and Functions -->
+
+    <!-- Visibility MUST be declared on all methods. -->
+    <rule ref="Squiz.Scope.MethodScope"/>
+    <rule ref="Squiz.WhiteSpace.ScopeKeywordSpacing"/>
+
+    <!-- Method names MUST NOT be prefixed with a single underscore to indicate protected or private visibility. That is, an underscore prefix explicitly has no meaning. -->
+    <rule ref="PSR2.Methods.MethodDeclaration"/>
+    <rule ref="PSR2.Methods.MethodDeclaration.Underscore">
+        <type>error</type>
+        <message>Method name "%s" must not be prefixed with an underscore to indicate visibility</message>
+    </rule>
+
+    <!-- Method and function names MUST NOT be declared with space after the method name. The opening brace MUST go on its own line, and the closing brace MUST go on the next line following the body. There MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. -->
+    <rule ref="PSR2.Methods.FunctionClosingBrace"/>
+    <rule ref="Squiz.Functions.FunctionDeclaration"/>
+    <rule ref="Squiz.Functions.LowercaseFunctionKeywords"/>
+
+    <!-- 4.5 Method and Function Arguments -->
+
+    <!-- In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- When using the reference operator & before an argument, there MUST NOT be a space after it. -->
+    <!-- There MUST NOT be a space between the variadic three dot operator and the argument name. -->
+    <!-- When combining both the reference operator and the variadic three dot operator, there MUST NOT be any space between the two of them. -->
+    <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing">
+        <properties>
+            <property name="equalsSpacing" value="1"/>
+        </properties>
+    </rule>
+
+    <!-- Method and function arguments with default values MUST go at the end of the argument list. -->
+    <rule ref="PEAR.Functions.ValidDefaultValue"/>
+
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line.
+    When the argument list is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <rule ref="Squiz.Functions.MultiLineFunctionDeclaration"/>
+
+    <!-- When you have a return type declaration present, there MUST be one space after the colon followed by the type declaration. The colon and declaration MUST be on the same line as the argument list closing parenthesis with no spaces between the two characters. -->
+    <!-- checked by PSR12.Functions.ReturnTypeDeclaration -->
+
+    <!-- In nullable type declarations, there MUST NOT be a space between the question mark and the type. -->
+    <!-- checked by PSR12.Functions.NullableTypeDeclaration -->
+
+    <!-- 4.6 abstract, final, and static -->
+
+    <!-- When present, the abstract and final declarations MUST precede the visibility declaration. -->
+    <!-- When present, the static declaration MUST come after the visibility declaration. -->
+    <!-- checked by PSR2.Methods.MethodDeclaration included above -->
+
+    <!-- 4.7 Method and Function Calls -->
+
+    <!-- When making a method or function call, there MUST NOT be a space between the method or function name and the opening parenthesis, there MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line. A single argument being split across multiple lines (as might be the case with an anonymous function or array) does not constitute splitting the argument list itself. -->
+    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature.SpaceAfterCloseBracket">
+        <severity>0</severity>
+    </rule>
+    <rule ref="PSR2.Methods.FunctionCallSignature.OpeningIndent">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 5. Control Structures -->
+
+    <!-- The general style rules for control structures are as follows:
+    There MUST be one space after the control structure keyword
+    There MUST NOT be a space after the opening parenthesis
+    There MUST NOT be a space before the closing parenthesis
+    There MUST be one space between the closing parenthesis and the opening brace
+    The structure body MUST be indented once
+    The body MUST be on the next line after the opening brace
+    The closing brace MUST be on the next line after the body
+    The body of each structure MUST be enclosed by braces. This standardizes how the structures look and reduces the likelihood of introducing errors as new lines get added to the body. -->
+    <rule ref="Squiz.ControlStructures.ControlSignature"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose"/>
+    <rule ref="Squiz.WhiteSpace.ScopeClosingBrace"/>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration"/>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration">
+        <properties>
+            <property name="ignoreNewlines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingBeforeClose">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.LowercaseDeclaration"/>
+    <rule ref="Generic.ControlStructures.InlineControlStructure"/>
+
+    <!-- exclude this message as it is already checked in Generic.PHP.LowerCaseKeyword -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.AsNotLower">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 5.1 if, elseif, else -->
+
+    <!-- else and elseif are on the same line as the closing brace from the earlier body. -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature included above -->
+
+    <!-- The keyword elseif SHOULD be used instead of else if so that all control keywords look like single words. -->
+    <rule ref="PSR2.ControlStructures.ElseIfDeclaration"/>
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.2 switch, case -->
+
+    <!-- The case statement MUST be indented once from switch, and the break keyword (or other terminating keywords) MUST be indented at the same level as the case body. There MUST be a comment such as // no break when fall-through is intentional in a non-empty case body. -->
+    <rule ref="PSR2.ControlStructures.SwitchDeclaration"/>
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.3.1 while -->
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.3.2 do while -->
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.4 for -->
+
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first expression MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+
+    <!-- 5.5 foreach -->
+
+    <!-- exclude these messages as they are already checked by PSR2.ControlStructures.ControlStructureSpacing -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceBeforeClose">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 5.6 try, catch, finally -->
+
+    <!-- 6. Operators -->
+
+    <!-- When space is permitted around an operator, multiple spaces MAY be used for readability purposes. -->
+    <!-- All operators not described here are left undefined. -->
+
+    <!-- 6.1. Unary operators -->
+
+    <!-- The increment/decrement operators MUST NOT have any space between the operator and operand. -->
+    <rule ref="Generic.WhiteSpace.IncrementDecrementSpacing"/>
+
+    <!-- Type casting operators MUST NOT have any space within the parentheses. -->
+    <rule ref="Squiz.WhiteSpace.CastSpacing"/>
+
+    <!-- 6.2. Binary operators -->
+
+    <!-- All binary arithmetic, comparison, assignment, bitwise, logical, string, and type operators MUST be preceded and followed by at least one space. -->
+    <!-- checked by PSR12.Operators.OperatorSpacing -->
+
+    <!-- 6.3. Ternary operators -->
+
+    <!-- The conditional operator, also known simply as the ternary operator, MUST be preceded and followed by at least one space around both the ? and : characters. -->
+    <!-- When the middle operand of the conditional operator is omitted, the operator MUST follow the same style rules as other binary comparison operators. -->
+    <!-- checked by PSR12.Operators.OperatorSpacing -->
+
+    <!-- 7. Closures -->
+
+    <!-- Closures MUST be declared with a space after the function keyword, and a space before and after the use keyword. -->
+    <!-- The opening brace MUST go on the same line, and the closing brace MUST go on the next line following the body. -->
+    <!-- There MUST NOT be a space after the opening parenthesis of the argument list or variable list, and there MUST NOT be a space before the closing parenthesis of the argument list or variable list. -->
+    <!-- In the argument list and variable list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- Closure arguments with default values MUST go at the end of the argument list. -->
+    <!-- Argument lists and variable lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument or variable per line. -->
+    <!-- When the ending list (whether of arguments or variables) is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked by Squiz.Functions.MultiLineFunctionDeclaration -->
+
+    <!-- If a return type is present, it MUST follow the same rules as with normal functions and methods; if the use keyword is present, the colon MUST follow the use list closing parentheses with no spaces between the two characters. -->
+    <!-- checked by PSR12.Functions.ReturnTypeDeclaration -->
+
+    <!-- 8. Anonymous Classes -->
+
+    <!-- Anonymous Classes MUST follow the same guidelines and principles as closures in the above section. -->
+    <!-- The opening brace MAY be on the same line as the class keyword so long as the list of implements interfaces does not wrap. If the list of interfaces wraps, the brace MUST be placed on the line immediately following the last interface. -->
+    <!-- checked by PSR12.Classes.AnonClassDeclaration -->
+
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules_psr1.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules_psr1.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules_psr1.xml	(revision 8435)
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PSR1" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The PSR1 coding standard.</description>
+
+    <!-- 2. Files -->
+
+    <!-- 2.1. PHP Tags -->
+
+    <!-- PHP code MUST use the long <?php ?> tags or the short-echo <?= ?> tags; it MUST NOT use the other tag variations. -->
+    <rule ref="Generic.PHP.DisallowAlternativePHPTags"/>
+    <rule ref="Generic.PHP.DisallowShortOpenTag"/>
+    <rule ref="Generic.PHP.DisallowShortOpenTag.EchoFound">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 2.2. Character Encoding -->
+
+    <!-- PHP code MUST use only UTF-8 without BOM. -->
+    <rule ref="Generic.Files.ByteOrderMark"/>
+
+    <!-- 2.3. Side Effects -->
+
+    <!-- A file SHOULD declare new symbols (classes, functions, constants, etc.) and cause no other side effects, or it SHOULD execute logic with side effects, but SHOULD NOT do both. -->
+    <!-- checked by PSR1.Files.SideEffects -->
+
+    <!-- 3. Namespace and Class Names -->
+
+    <!-- Namespaces and classes MUST follow PSR-0.
+         This means each class is in a file by itself, and is in a namespace of at least one level: a top-level vendor name. -->
+    <!-- checked by PSR1.Classes.ClassDeclaration -->
+
+    <!-- Class names MUST be declared in StudlyCaps. -->
+    <rule ref="Squiz.Classes.ValidClassName"/>
+
+    <!-- 4. Class Constants, Properties, and Methods -->
+
+    <!-- 4.1. Constants -->
+
+    <!-- Class constants MUST be declared in all upper case with underscore separators. -->
+    <rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
+
+    <!-- 4.3. Methods -->
+
+    <!-- Method names MUST be declared in camelCase(). -->
+    <!-- checked by PSR1.Methods.CamelCapsMethodName -->
+
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules_psr12.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules_psr12.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules_psr12.xml	(revision 8435)
@@ -0,0 +1,268 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PSR12" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The PSR-12 coding standard.</description>
+    <arg name="tab-width" value="4"/>
+    <!-- 2. General -->
+    <!-- 2.1 Basic Coding Standard -->
+    <!-- Code MUST follow all rules outlined in PSR-1. -->
+    <rule ref="PSR1"/>
+    <!-- The term 'StudlyCaps' in PSR-1 MUST be interpreted as PascalCase where the first letter of each word is capitalized including the very first letter. -->
+    <!-- 2.2 Files -->
+    <!-- All PHP files MUST use the Unix LF (linefeed) line ending only. -->
+    <rule ref="Generic.Files.LineEndings">
+        <properties>
+            <property name="eolChar" value="\n"/>
+        </properties>
+    </rule>
+    <!-- All PHP files MUST end with a non-blank line, terminated with a single LF. -->
+    <rule ref="PSR2.Files.EndFileNewline"/>
+    <!-- The closing ?> tag MUST be omitted from files containing only PHP. -->
+    <rule ref="PSR2.Files.ClosingTag"/>
+    <!-- 2.3 Lines -->
+    <!-- There MUST NOT be a hard limit on line length.
+    The soft limit on line length MUST be 120 characters.
+    Lines SHOULD NOT be longer than 80 characters; lines longer than that SHOULD be split into multiple subsequent lines of no more than 80 characters each. -->
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="120"/>
+            <property name="absoluteLineLimit" value="0"/>
+        </properties>
+    </rule>
+    <!-- There MUST NOT be trailing whitespace at the end of lines.
+    Blank lines MAY be added to improve readability and to indicate related blocks of code except where explicitly forbidden. -->
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace">
+        <properties>
+            <property name="ignoreBlankLines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines">
+        <severity>0</severity>
+    </rule>
+    <!-- There MUST NOT be more than one statement per line. -->
+    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
+    <!-- 2.4 Indenting -->
+    <!-- Code MUST use an indent of 4 spaces for each indent level, and MUST NOT use tabs for indenting. -->
+    <rule ref="Generic.WhiteSpace.ScopeIndent">
+        <properties>
+            <property name="ignoreIndentationTokens" type="array">
+                <element value="T_COMMENT"/>
+                <element value="T_DOC_COMMENT_OPEN_TAG"/>
+            </property>
+        </properties>
+    </rule>
+    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
+    <!-- 2.5 Keywords and Types -->
+    <!-- All PHP reserved keywords and types [1][2] MUST be in lower case.
+    Any new types and keywords added to future PHP versions MUST be in lower case. -->
+    <rule ref="Generic.PHP.LowerCaseKeyword"/>
+    <rule ref="Generic.PHP.LowerCaseConstant"/>
+    <rule ref="Generic.PHP.LowerCaseType"/>
+    <!-- Short form of type keywords MUST be used i.e. bool instead of boolean, int instead of integer etc. -->
+    <!-- checked by PSR12.Keywords.ShortFormTypeKeywords -->
+    <!-- 3. Declare Statements, Namespace, and Import Statements -->
+    <!-- The header of a PHP file may consist of a number of different blocks. If present, each of the blocks below MUST be separated by a single blank line, and MUST NOT contain a blank line. Each block MUST be in the order listed below, although blocks that are not relevant may be omitted.
+
+    Opening php tag.
+    File-level docblock.
+    One or more declare statements.
+    The namespace declaration of the file.
+    One or more class-based use import statements.
+    One or more function-based use import statements.
+    One or more constant-based use import statements.
+    The remainder of the code in the file. -->
+    <!-- checked by PSR12.Files.FileHeader -->
+    <!-- When a file contains a mix of HTML and PHP, any of the above sections may still be used. If so, they MUST be present at the top of the file, even if the remainder of the code consists of a closing PHP tag and then a mixture of HTML and PHP. -->
+    <!-- When the opening php tag is on the first line of the file, it MUST be on its own line with no other statements unless it is a file containing markup outside of PHP opening and closing tags. -->
+    <!-- Import statements MUST never begin with a leading backslash as they must always be fully qualified. -->
+    <!-- checked by PSR12.Files.ImportStatement -->
+    <!-- Compound namespaces with a depth of more than two MUST NOT be used. -->
+    <!-- checked by PSR12.Namespaces.CompoundNamespaceDepth -->
+    <!-- When wishing to declare strict types in files containing markup outside PHP opening and closing tags, the declaration MUST be on the first line of the file and include an opening PHP tag, the strict types declaration and closing tag. -->
+    <!-- Declare statements MUST contain no spaces and MUST be exactly declare(strict_types=1) (with an optional semi-colon terminator). -->
+    <!-- Block declare statements are allowed and MUST be formatted as below. -->
+    <!-- checked by PSR12.Files.DeclareStatement -->
+    <!-- 4. Classes, Properties, and Methods -->
+    <!-- Any closing brace MUST NOT be followed by any comment or statement on the same line. -->
+    <!-- checked by PSR12.Classes.ClosingBrace -->
+    <!-- When instantiating a new class, parentheses MUST always be present even when there are no arguments passed to the constructor. -->
+    <!-- checked by PSR12.Classes.ClassInstantiation -->
+    <!-- 4.1 Extends and Implements -->
+    <!-- The extends and implements keywords MUST be declared on the same line as the class name. -->
+    <!-- The opening brace for the class MUST go on its own line; the closing brace for the class MUST go on the next line after the body. -->
+    <!-- Opening braces MUST be on their own line and MUST NOT be preceded or followed by a blank line. -->
+    <!-- Closing braces MUST be on their own line and MUST NOT be preceded by a blank line. -->
+    <!-- Lists of implements and, in the case of interfaces, extends MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one interface per line. -->
+    <rule ref="PSR2.Classes.ClassDeclaration"/>
+    <!-- 4.2 Using traits -->
+    <!-- The use keyword used inside the classes to implement traits MUST be declared on the next line after the opening brace. -->
+    <!-- Each individual trait that is imported into a class MUST be included one-per-line and each inclusion MUST have its own use import statement. -->
+    <!-- When the class has nothing after the use import statement, the class closing brace MUST be on the next line after the use import statement. Otherwise, it MUST have a blank line after the use import statement. -->
+    <!-- When using the insteadof and as operators they must be used as follows taking note of indentation, spacing, and new lines. -->
+    <!-- checked by PSR12.Traits.UseDeclaration -->
+    <!-- 4.3 Properties and Constants -->
+    <!-- Visibility MUST be declared on all properties. -->
+    <!-- The var keyword MUST NOT be used to declare a property. -->
+    <!-- There MUST NOT be more than one property declared per statement. -->
+    <!-- Property names MUST NOT be prefixed with a single underscore to indicate protected or private visibility.
+    That is, an underscore prefix explicitly has no meaning. -->
+    <!-- There MUST be a space between type declaration and property name. -->
+    <rule ref="PSR2.Classes.PropertyDeclaration"/>
+    <!-- Visibility MUST be declared on all constants if your project PHP minimum version supports constant visibilities (PHP 7.1 or later). -->
+    <!-- checked by PSR12.Properties.ConstantVisibility -->
+    <!-- 4.4 Methods and Functions -->
+    <!-- Visibility MUST be declared on all methods. -->
+    <rule ref="Squiz.Scope.MethodScope"/>
+    <rule ref="Squiz.WhiteSpace.ScopeKeywordSpacing"/>
+    <!-- Method names MUST NOT be prefixed with a single underscore to indicate protected or private visibility. That is, an underscore prefix explicitly has no meaning. -->
+    <rule ref="PSR2.Methods.MethodDeclaration"/>
+    <rule ref="PSR2.Methods.MethodDeclaration.Underscore">
+        <type>error</type>
+        <message>Method name "%s" must not be prefixed with an underscore to indicate visibility</message>
+    </rule>
+    <!-- Method and function names MUST NOT be declared with space after the method name. The opening brace MUST go on its own line, and the closing brace MUST go on the next line following the body. There MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. -->
+    <rule ref="PSR2.Methods.FunctionClosingBrace"/>
+    <rule ref="Squiz.Functions.FunctionDeclaration"/>
+    <rule ref="Squiz.Functions.LowercaseFunctionKeywords"/>
+    <!-- 4.5 Method and Function Arguments -->
+    <!-- In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- When using the reference operator & before an argument, there MUST NOT be a space after it. -->
+    <!-- There MUST NOT be a space between the variadic three dot operator and the argument name. -->
+    <!-- When combining both the reference operator and the variadic three dot operator, there MUST NOT be any space between the two of them. -->
+    <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing">
+        <properties>
+            <property name="equalsSpacing" value="1"/>
+        </properties>
+    </rule>
+    <!-- Method and function arguments with default values MUST go at the end of the argument list. -->
+    <rule ref="PEAR.Functions.ValidDefaultValue"/>
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line.
+    When the argument list is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <rule ref="Squiz.Functions.MultiLineFunctionDeclaration"/>
+    <!-- When you have a return type declaration present, there MUST be one space after the colon followed by the type declaration. The colon and declaration MUST be on the same line as the argument list closing parenthesis with no spaces between the two characters. -->
+    <!-- checked by PSR12.Functions.ReturnTypeDeclaration -->
+    <!-- In nullable type declarations, there MUST NOT be a space between the question mark and the type. -->
+    <!-- checked by PSR12.Functions.NullableTypeDeclaration -->
+    <!-- 4.6 abstract, final, and static -->
+    <!-- When present, the abstract and final declarations MUST precede the visibility declaration. -->
+    <!-- When present, the static declaration MUST come after the visibility declaration. -->
+    <!-- checked by PSR2.Methods.MethodDeclaration included above -->
+    <!-- 4.7 Method and Function Calls -->
+    <!-- When making a method or function call, there MUST NOT be a space between the method or function name and the opening parenthesis, there MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line. A single argument being split across multiple lines (as might be the case with an anonymous function or array) does not constitute splitting the argument list itself. -->
+    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature.SpaceAfterCloseBracket">
+        <severity>0</severity>
+    </rule>
+    <rule ref="PSR2.Methods.FunctionCallSignature.OpeningIndent">
+        <severity>0</severity>
+    </rule>
+    <!-- 5. Control Structures -->
+    <!-- The general style rules for control structures are as follows:
+    There MUST be one space after the control structure keyword
+    There MUST NOT be a space after the opening parenthesis
+    There MUST NOT be a space before the closing parenthesis
+    There MUST be one space between the closing parenthesis and the opening brace
+    The structure body MUST be indented once
+    The body MUST be on the next line after the opening brace
+    The closing brace MUST be on the next line after the body
+    The body of each structure MUST be enclosed by braces. This standardizes how the structures look and reduces the likelihood of introducing errors as new lines get added to the body. -->
+    <rule ref="Squiz.ControlStructures.ControlSignature"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose"/>
+    <rule ref="Squiz.WhiteSpace.ScopeClosingBrace"/>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration"/>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration">
+        <properties>
+            <property name="ignoreNewlines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingBeforeClose">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.LowercaseDeclaration"/>
+    <rule ref="Generic.ControlStructures.InlineControlStructure"/>
+    <!-- exclude this message as it is already checked in Generic.PHP.LowerCaseKeyword -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.AsNotLower">
+        <severity>0</severity>
+    </rule>
+    <!-- 5.1 if, elseif, else -->
+    <!-- else and elseif are on the same line as the closing brace from the earlier body. -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature included above -->
+    <!-- The keyword elseif SHOULD be used instead of else if so that all control keywords look like single words. -->
+    <rule ref="PSR2.ControlStructures.ElseIfDeclaration"/>
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.2 switch, case -->
+    <!-- The case statement MUST be indented once from switch, and the break keyword (or other terminating keywords) MUST be indented at the same level as the case body. There MUST be a comment such as // no break when fall-through is intentional in a non-empty case body. -->
+    <rule ref="PSR2.ControlStructures.SwitchDeclaration"/>
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.3.1 while -->
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.3.2 do while -->
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first condition MUST be on the next line. Boolean operators between conditions MUST always be at the beginning or at the end of the line, not a mix of both. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.4 for -->
+    <!-- Expressions in parentheses MAY be split across multiple lines, where each subsequent line is indented at least once. When doing so, the first expression MUST be on the next line. The closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked by PSR12.ControlStructures.ControlStructureSpacing -->
+    <!-- checked by PSR12.ControlStructures.BooleanOperatorPlacement -->
+    <!-- checked by Squiz.ControlStructures.ControlSignature -->
+    <!-- 5.5 foreach -->
+    <!-- exclude these messages as they are already checked by PSR2.ControlStructures.ControlStructureSpacing -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceBeforeClose">
+        <severity>0</severity>
+    </rule>
+    <!-- 5.6 try, catch, finally -->
+    <!-- 6. Operators -->
+    <!-- When space is permitted around an operator, multiple spaces MAY be used for readability purposes. -->
+    <!-- All operators not described here are left undefined. -->
+    <!-- 6.1. Unary operators -->
+    <!-- The increment/decrement operators MUST NOT have any space between the operator and operand. -->
+    <rule ref="Generic.WhiteSpace.IncrementDecrementSpacing"/>
+    <!-- Type casting operators MUST NOT have any space within the parentheses. -->
+    <rule ref="Squiz.WhiteSpace.CastSpacing"/>
+    <!-- 6.2. Binary operators -->
+    <!-- All binary arithmetic, comparison, assignment, bitwise, logical, string, and type operators MUST be preceded and followed by at least one space. -->
+    <!-- checked by PSR12.Operators.OperatorSpacing -->
+    <!-- 6.3. Ternary operators -->
+    <!-- The conditional operator, also known simply as the ternary operator, MUST be preceded and followed by at least one space around both the ? and : characters. -->
+    <!-- When the middle operand of the conditional operator is omitted, the operator MUST follow the same style rules as other binary comparison operators. -->
+    <!-- checked by PSR12.Operators.OperatorSpacing -->
+    <!-- 7. Closures -->
+    <!-- Closures MUST be declared with a space after the function keyword, and a space before and after the use keyword. -->
+    <!-- The opening brace MUST go on the same line, and the closing brace MUST go on the next line following the body. -->
+    <!-- There MUST NOT be a space after the opening parenthesis of the argument list or variable list, and there MUST NOT be a space before the closing parenthesis of the argument list or variable list. -->
+    <!-- In the argument list and variable list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <!-- Closure arguments with default values MUST go at the end of the argument list. -->
+    <!-- Argument lists and variable lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument or variable per line. -->
+    <!-- When the ending list (whether of arguments or variables) is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked by Squiz.Functions.MultiLineFunctionDeclaration -->
+    <!-- If a return type is present, it MUST follow the same rules as with normal functions and methods; if the use keyword is present, the colon MUST follow the use list closing parentheses with no spaces between the two characters. -->
+    <!-- checked by PSR12.Functions.ReturnTypeDeclaration -->
+    <!-- 8. Anonymous Classes -->
+    <!-- Anonymous Classes MUST follow the same guidelines and principles as closures in the above section. -->
+    <!-- The opening brace MAY be on the same line as the class keyword so long as the list of implements interfaces does not wrap. If the list of interfaces wraps, the brace MUST be placed on the line immediately following the last interface. -->
+    <!-- checked by PSR12.Classes.AnonClassDeclaration -->
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules_psr2.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules_psr2.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules_psr2.xml	(revision 8435)
@@ -0,0 +1,218 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PSR2" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The PSR-2 coding standard.</description>
+    <arg name="tab-width" value="4"/>
+
+    <!-- 2. General -->
+
+    <!-- 2.1 Basic Coding Standard -->
+
+    <!-- Include the whole PSR-1 standard -->
+    <rule ref="PSR1"/>
+
+    <!-- 2.2 Files -->
+
+    <!-- All PHP files MUST use the Unix LF (linefeed) line ending. -->
+    <rule ref="Generic.Files.LineEndings">
+        <properties>
+            <property name="eolChar" value="\n"/>
+        </properties>
+    </rule>
+
+    <!-- All PHP files MUST end with a single blank line. -->
+    <!-- checked by PSR2.Files.EndFileNewline -->
+
+    <!-- The closing ?> tag MUST be omitted from files containing only PHP. -->
+    <!-- checked by PSR2.Files.ClosingTag -->
+
+    <!-- 2.3 Lines -->
+
+    <!-- The soft limit on line length MUST be 120 characters; automated style checkers MUST warn but MUST NOT error at the soft limit. -->
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="120"/>
+            <property name="absoluteLineLimit" value="0"/>
+        </properties>
+    </rule>
+
+    <!-- There MUST NOT be trailing whitespace at the end of non-blank lines. -->
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace">
+        <properties>
+            <property name="ignoreBlankLines" value="true"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines">
+        <severity>0</severity>
+    </rule>
+
+    <!-- There MUST NOT be more than one statement per line. -->
+    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
+
+    <!-- 2.4 Indenting -->
+
+    <!-- Code MUST use an indent of 4 spaces, and MUST NOT use tabs for indenting. -->
+    <rule ref="Generic.WhiteSpace.ScopeIndent">
+        <properties>
+            <property name="ignoreIndentationTokens" type="array">
+                <element value="T_COMMENT"/>
+                <element value="T_DOC_COMMENT_OPEN_TAG"/>
+            </property>
+        </properties>
+    </rule>
+    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
+
+    <!-- 2.5 Keywords and True/False/Null -->
+
+    <!-- PHP keywords MUST be in lower case. -->
+    <rule ref="Generic.PHP.LowerCaseKeyword"/>
+
+    <!-- The PHP constants true, false, and null MUST be in lower case. -->
+    <rule ref="Generic.PHP.LowerCaseConstant"/>
+
+    <!-- 3. Namespace and Use Declarations -->
+
+    <!-- When present, there MUST be one blank line after the namespace declaration. -->
+    <!-- checked by PSR2.Namespaces.NamespaceDeclaration -->
+
+    <!-- When present, all use declarations MUST go after the namespace declaration.
+         There MUST be one use keyword per declaration.
+         There MUST be one blank line after the use block. -->
+    <!-- checked by PSR2.Namespaces.UseDeclaration -->
+
+    <!-- 4. Classes, Properties, and Methods -->
+
+    <!-- 4.1. Extends and Implements -->
+
+    <!-- The extends and implements keywords MUST be declared on the same line as the class name.
+         The opening brace for the class go MUST go on its own line; the closing brace for the class MUST go on the next line after the body.
+         Lists of implements MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one interface per line. -->
+    <!-- checked by PSR2.Classes.ClassDeclaration -->
+
+    <!-- 4.2. Properties -->
+
+    <!-- Visibility MUST be declared on all properties.
+         The var keyword MUST NOT be used to declare a property.
+         There MUST NOT be more than one property declared per statement.
+         Property names SHOULD NOT be prefixed with a single underscore to indicate protected or private visibility. -->
+    <!-- checked by PSR2.Classes.PropertyDeclaration -->
+    <rule ref="PSR2.Classes.PropertyDeclaration.SpacingAfterType">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 4.3 Methods -->
+
+    <!-- Visibility MUST be declared on all methods. -->
+    <rule ref="Squiz.Scope.MethodScope"/>
+    <rule ref="Squiz.WhiteSpace.ScopeKeywordSpacing"/>
+
+    <!-- Method names SHOULD NOT be prefixed with a single underscore to indicate protected or private visibility. -->
+    <!-- checked by PSR2.Methods.MethodDeclaration -->
+
+    <!-- Method names MUST NOT be declared with a space after the method name. The opening brace MUST go on its own line, and the closing brace MUST go on the next line following the body. There MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. -->
+    <!-- checked by PSR2.Methods.FunctionClosingBrace -->
+    <rule ref="Squiz.Functions.FunctionDeclaration"/>
+    <rule ref="Squiz.Functions.LowercaseFunctionKeywords"/>
+
+    <!-- 4.4 Method Arguments -->
+
+    <!-- In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma. -->
+    <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing">
+        <properties>
+            <property name="equalsSpacing" value="1"/>
+        </properties>
+    </rule>
+    <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingAfterHint">
+        <severity>0</severity>
+    </rule>
+
+    <!-- Method arguments with default values MUST go at the end of the argument list. -->
+    <rule ref="PEAR.Functions.ValidDefaultValue"/>
+
+    <!-- Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line. When the argument list is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <rule ref="Squiz.Functions.MultiLineFunctionDeclaration"/>
+
+    <!-- 4.5 abstract, final, and static -->
+
+    <!-- When present, the abstract and final declarations MUST precede the visibility declaration.
+         When present, the static declaration MUST come after the visibility declaration. -->
+    <!-- checked by PSR2.Methods.MethodDeclaration -->
+
+    <!-- 4.6 Method and Function Calls -->
+
+    <!-- When making a method or function call, there MUST NOT be a space between the method or function name and the opening parenthesis, there MUST NOT be a space after the opening parenthesis, and there MUST NOT be a space before the closing parenthesis. In the argument list, there MUST NOT be a space before each comma, and there MUST be one space after each comma.
+    Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line. -->
+    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
+    <rule ref="PSR2.Methods.FunctionCallSignature.SpaceAfterCloseBracket">
+        <severity>0</severity>
+    </rule>
+    <rule ref="PSR2.Methods.FunctionCallSignature.OpeningIndent">
+        <severity>0</severity>
+    </rule>
+
+    <!-- 5. Control Structures -->
+
+    <!-- The general style rules for control structures are as follows:
+         There MUST be one space after the control structure keyword
+         There MUST NOT be a space after the opening parenthesis
+         There MUST NOT be a space before the closing parenthesis
+         There MUST be one space between the closing parenthesis and the opening brace
+         The structure body MUST be indented once
+         The closing brace MUST be on the next line after the body -->
+    <rule ref="Squiz.ControlStructures.ControlSignature"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen"/>
+    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose"/>
+    <rule ref="Squiz.WhiteSpace.ScopeClosingBrace"/>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration"/>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration"/>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingBeforeClose">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.LowercaseDeclaration"/>
+    <!-- checked by PSR2.ControlStructures.ControlStructureSpacing -->
+
+    <!-- exclude this message as it is already checked by Generic.PHP.LowerCaseKeyword -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.AsNotLower">
+        <severity>0</severity>
+    </rule>
+
+    <!-- exclude these messages as they are already checked by PSR2.ControlStructures.ControlStructureSpacing -->
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceAfterOpen">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceBeforeClose">
+        <severity>0</severity>
+    </rule>
+
+    <!-- The body of each structure MUST be enclosed by braces. This standardizes how the structures look, and reduces the likelihood of introducing errors as new lines get added to the body. -->
+    <rule ref="Generic.ControlStructures.InlineControlStructure"/>
+
+    <!-- 5.1. if, elseif, else -->
+
+    <!-- The keyword elseif SHOULD be used instead of else if so that all control keywords look like single words. -->
+    <!-- checked by PSR2.ControlStructures.ElseIfDeclaration -->
+
+    <!-- 5.2. switch, case -->
+
+    <!-- The case statement MUST be indented once from switch, and the break keyword (or other terminating keyword) MUST be indented at the same level as the case body. There MUST be a comment such as // no break when fall-through is intentional in a non-empty case body. -->
+    <!-- checked by PSR2.ControlStructures.SwitchDeclaration -->
+
+    <!-- 6. Closures -->
+
+    <!-- Closures MUST be declared with a space after the function keyword, and a space before and after the use keyword.
+         The opening brace MUST go on the same line, and the closing brace MUST go on the next line following the body.
+         There MUST NOT be a space after the opening parenthesis of the argument list or variable list, and there MUST NOT be a space before the closing parenthesis of the argument list or variable list.
+         In the argument list and variable list, there MUST NOT be a space before each comma, and there MUST be one space after each comma.
+         Closure arguments with default values MUST go at the end of the argument list.
+         Argument lists and variable lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument or variable per line.
+         When the ending list (whether or arguments or variables) is split across multiple lines, the closing parenthesis and opening brace MUST be placed together on their own line with one space between them. -->
+    <!-- checked in Squiz.Functions.MultiLineFunctionDeclaration -->
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules_squiz.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules_squiz.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpcsrules_squiz.xml	(revision 8435)
@@ -0,0 +1,132 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Squiz" xsi:noNamespaceSchemaLocation="../../../phpcs.xsd">
+    <description>The Squiz coding standard.</description>
+
+    <!-- Include some specific sniffs -->
+    <rule ref="Generic.Arrays.DisallowLongArraySyntax"/>
+    <rule ref="Generic.CodeAnalysis.EmptyStatement"/>
+    <rule ref="Generic.Commenting.Todo"/>
+    <rule ref="Generic.Commenting.DocComment"/>
+    <rule ref="Generic.ControlStructures.InlineControlStructure"/>
+    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
+    <rule ref="Generic.Formatting.SpaceAfterCast"/>
+    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
+    <rule ref="Generic.NamingConventions.ConstructorName"/>
+    <rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
+    <rule ref="Generic.PHP.DeprecatedFunctions"/>
+    <rule ref="Generic.PHP.DisallowShortOpenTag"/>
+    <rule ref="Generic.PHP.LowerCaseKeyword"/>
+    <rule ref="Generic.PHP.LowerCaseConstant"/>
+    <rule ref="Generic.Strings.UnnecessaryStringConcat"/>
+    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
+    <rule ref="Generic.WhiteSpace.LanguageConstructSpacing"/>
+    <rule ref="Generic.WhiteSpace.IncrementDecrementSpacing"/>
+    <rule ref="Generic.WhiteSpace.ScopeIndent"/>
+    <rule ref="PEAR.ControlStructures.MultiLineCondition"/>
+    <rule ref="PEAR.Files.IncludingFile"/>
+    <rule ref="PEAR.Formatting.MultiLineAssignment"/>
+    <rule ref="PEAR.Functions.ValidDefaultValue"/>
+    <rule ref="PSR2.Files.EndFileNewline"/>
+    <rule ref="Zend.Files.ClosingTag"/>
+    <rule ref="Zend.Debug.CodeAnalyzer"/>
+
+    <!-- Lines can be 120 chars long, but never show errors -->
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="120"/>
+            <property name="absoluteLineLimit" value="0"/>
+        </properties>
+    </rule>
+
+    <!-- Use Unix newlines -->
+    <rule ref="Generic.Files.LineEndings">
+        <properties>
+            <property name="eolChar" value="\n"/>
+        </properties>
+    </rule>
+
+    <!-- Have 20 chars padding maximum and always show as errors -->
+    <rule ref="Generic.Formatting.MultipleStatementAlignment">
+        <properties>
+            <property name="maxPadding" value="20"/>
+            <property name="error" value="true"/>
+        </properties>
+    </rule>
+
+    <!-- Ban some functions -->
+    <rule ref="Generic.PHP.ForbiddenFunctions">
+        <properties>
+            <property name="forbiddenFunctions" type="array">
+                <element key="sizeof" value="count"/>
+                <element key="delete" value="unset"/>
+                <element key="print" value="echo"/>
+                <element key="is_null" value="null"/>
+                <element key="create_function" value="null"/>
+            </property>
+        </properties>
+    </rule>
+
+    <!-- We allow empty catch statements -->
+    <rule ref="Generic.CodeAnalysis.EmptyStatement.DetectedCATCH">
+        <severity>0</severity>
+    </rule>
+
+    <!-- We don't want gsjlint throwing errors for things we already check -->
+    <rule ref="Generic.Debug.ClosureLinter">
+        <properties>
+            <property name="errorCodes" type="array" value="0210"/>
+            <property name="ignoreCodes" type="array" value="0001,0110,0240"/>
+        </properties>
+    </rule>
+    <rule ref="Generic.Debug.ClosureLinter.ExternalToolError">
+        <message>%2$s</message>
+    </rule>
+
+    <!-- Only one argument per line in multi-line function calls -->
+    <rule ref="PEAR.Functions.FunctionCallSignature">
+        <properties>
+            <property name="allowMultipleArguments" value="false"/>
+        </properties>
+    </rule>
+
+    <!-- We use custom indent rules for arrays -->
+    <rule ref="Generic.Arrays.ArrayIndent"/>
+    <rule ref="Squiz.Arrays.ArrayDeclaration.KeyNotAligned">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.Arrays.ArrayDeclaration.ValueNotAligned">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.Arrays.ArrayDeclaration.CloseBraceNotAligned">
+        <severity>0</severity>
+    </rule>
+    <rule ref="Squiz.Arrays.ArrayDeclaration.CloseBraceNewLine">
+        <severity>0</severity>
+    </rule>
+
+    <!-- Squiz.WhiteSpace.LanguageConstructSpacing is deprecated -->
+    <rule ref="Squiz.WhiteSpace.LanguageConstructSpacing">
+        <severity>0</severity>
+    </rule>
+
+    <!-- Prevent fixer conflict for conflicting rules. -->
+    <rule ref="Squiz.Commenting.InlineComment">
+        <exclude name="Squiz.Commenting.InlineComment.SpacingAfterAtFunctionEnd"/>
+    </rule>
+
+    <!-- Private methods MUST not be prefixed with an underscore -->
+    <rule ref="Squiz.NamingConventions.ValidFunctionName.PrivateNoUnderscore">
+        <severity>0</severity>
+    </rule>
+    <rule ref="PSR2.Methods.MethodDeclaration.Underscore">
+        <type>error</type>
+    </rule>
+
+    <!-- Private properties MUST not be prefixed with an underscore -->
+    <rule ref="Squiz.NamingConventions.ValidVariableName.PrivateNoUnderscore">
+        <severity>0</severity>
+    </rule>
+    <rule ref="PSR2.Classes.PropertyDeclaration.Underscore">
+        <type>error</type>
+    </rule>
+</ruleset>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpdoc.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpdoc.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpdoc.xml	(revision 8435)
@@ -0,0 +1,26 @@
+<phpdocumentor configVersion="3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://www.phpdoc.org" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/phpDocumentor/phpDocumentor/master/data/xsd/phpdoc.xsd">
+    <paths>
+        <output>../build/doc</output>
+        <cache>./phpdoc</cache>
+    </paths>
+    <version number="3.0">
+        <api format="php">
+            <source dsn="..">
+                <!--1 or more repetitions:-->
+                <path>src</path>
+            </source>
+            <ignore hidden="true" symlinks="true">
+                <path>src/entities/**/*</path>
+                <path>tests/**/*</path>
+            </ignore>
+            <extensions>
+                <extension>php</extension>
+            </extensions>
+            <include-source>true</include-source>
+            <markers>
+                <marker>TODO</marker>
+                <marker>FIXME</marker>
+            </markers>
+        </api>
+    </version>
+</phpdocumentor>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpmd.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpmd.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpmd.xml	(revision 8435)
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<ruleset name="PHPMD rule sets"
+         xmlns="http://pmd.sf.net/ruleset/1.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
+                      http://pmd.sf.net/ruleset_xml_schema.xsd"
+         xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
+    <description>Custom rule sets that checks your PHP code.</description>
+    <rule ref="rulesets/unusedcode.xml"/>
+    <rule ref="rulesets/codesize.xml/CyclomaticComplexity"/>
+    <rule ref="rulesets/codesize.xml/ExcessiveParameterList"/>
+</ruleset>
+
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpstan.neon
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpstan.neon	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpstan.neon	(revision 8435)
@@ -0,0 +1,9 @@
+parameters:
+    paths:
+        - ../src
+        - ../tests
+    level: 5
+    treatPhpDocTypesAsCertain: false
+    checkMissingIterableValueType: false
+    excludePaths:
+        - ../src/entities/*
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpunit.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpunit.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/build/phpunit.xml	(revision 8435)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" bootstrap="../vendor/autoload.php">
+    <testsuites>
+        <testsuite name="General">
+            <file>../tests/testcases/SettingsTest.php</file>
+            <file>../tests/testcases/PackageVersionTest.php</file>
+        </testsuite>
+        <testsuite name="ObjectHelper">
+            <file>../tests/testcases/ObjectHelperEn16931Test.php</file>
+            <file>../tests/testcases/ObjectHelperExtendedTest.php</file>
+        </testsuite>
+        <testsuite name="Base">
+            <file>../tests/testcases/ProfileResolverTest.php</file>
+            <file>../tests/testcases/DocumentTest.php</file>
+        </testsuite>
+        <testsuite name="Reader">
+            <file>../tests/testcases/ReaderBasicSimpleTest.php</file>
+            <file>../tests/testcases/ReaderEn16931SimpleTest.php</file>
+            <file>../tests/testcases/ReaderEn16931AllowanceChargeTest.php</file>
+            <file>../tests/testcases/ReaderEn16931Bank1Test.php</file>
+            <file>../tests/testcases/ReaderExtendedTest.php</file>
+            <file>../tests/testcases/ReaderExtended2Test.php</file>
+            <file>../tests/testcases/ReaderXRechnungSimpleTest.php</file>
+            <file>../tests/testcases/ReaderXRechnungAttachedBinaryObjectTest.php</file>
+        </testsuite>
+        <testsuite name="Builder">
+            <file>../tests/testcases/BuilderMinimumTest.php</file>
+            <file>../tests/testcases/BuilderEn16931Test.php</file>
+            <file>../tests/testcases/BuilderExtendedTest.php</file>
+        </testsuite>
+        <testsuite name="PDFReader">
+            <file>../tests/testcases/PdfReaderMinimumSimpleTest.php</file>
+            <file>../tests/testcases/PdfReaderEn16931AllowanceChargeTest.php</file>
+            <file>../tests/testcases/PdfReaderEn16931SimpleTest.php</file>
+            <file>../tests/testcases/PdfReaderExtendedTest.php</file>
+            <file>../tests/testcases/PdfReaderExtended2Test.php</file>
+            <file>../tests/testcases/PdfReaderXRechnungSimpleTest.php</file>
+            <file>../tests/testcases/PdfReaderInvalidTest.php</file>
+            <file>../tests/testcases/PdfReaderMultipleAttachmentsTest.php</file>
+        </testsuite>
+        <testsuite name="PDFBuilder">
+            <file>../tests/testcases/PdfBuilderEn16931Test.php</file>
+        </testsuite>
+        <testsuite name="Validator">
+            <file>../tests/testcases/ValidatorValidTest.php</file>
+            <file>../tests/testcases/ValidatorInvalidTest.php</file>
+        </testsuite>
+        <testsuite name="Exporter">
+            <file>../tests/testcases/JsonExporterTest.php</file>
+        </testsuite>
+        <testsuite name="issues">
+            <file>../tests/testcases/issues/Issue10Test.php</file>
+            <file>../tests/testcases/issues/Issue18Test.php</file>
+            <file>../tests/testcases/issues/Issue32Test.php</file>
+            <file>../tests/testcases/issues/Issue43Test.php</file>
+        </testsuite>
+    </testsuites>
+    <coverage processUncoveredFiles="true">
+        <include>
+            <directory suffix=".php">../src</directory>
+        </include>
+        <exclude>
+            <directory suffix=".php">../src/codelists</directory>
+            <directory suffix=".php">../src/entities</directory>
+            <directory suffix=".php">../src/exception</directory>
+            <file>../src/ZugferdProfiles.php</file>
+        </exclude>
+        <report>
+            <xml outputDirectory="coverage"/>
+            <html outputDirectory="coverage-html"/>
+            <clover outputFile="logs/clover.xml"/>
+            <crap4j outputFile="logs/crap4j.xml" threshold="50"/>
+        </report>
+    </coverage>
+    <logging>
+        <junit outputFile="logs/junit.xml"/>
+        <testdoxHtml outputFile="logs/testdox.html"/>
+    </logging>
+</phpunit>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/composer.json	(revision 8435)
@@ -0,0 +1,73 @@
+{
+    "name": "horstoeko/zugferd",
+    "keywords": ["zugferd","xrechnung","factur-x","electronic","invoice"],
+    "description": "A library for creating and reading european electronic invoices",
+    "homepage": "https://github.com/horstoeko/zugferd",
+    "type": "package",
+    "license": "MIT",
+    "prefer-stable": true,
+    "authors": [
+        {
+            "name": "Daniel Erling",
+            "email": "daniel@erling.com.de",
+            "role": "lead"
+        }
+    ],
+    "config": {
+        "optimize-autoloader": true,
+        "sort-packages": true
+    },
+    "autoload": {
+        "psr-4": {
+            "horstoeko\\zugferd\\": "src",
+            "horstoeko\\zugferd\\rsm\\": "src/entities/rsm",
+            "horstoeko\\zugferd\\qdt\\": "src/entities/qdt",
+            "horstoeko\\zugferd\\ram\\": "src/entities/ram",
+            "horstoeko\\zugferd\\udt\\": "src/entities/udt"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "horstoeko\\zugferd\\tests\\": "tests"
+        }
+    },
+    "require": {
+        "php": "^7.3|^7.4|^8",
+        "jms/serializer": "^3",
+        "goetas-webservices/xsd2php-runtime": "^0.2.13",
+        "ext-simplexml": "*",
+        "symfony/validator": "^5|^6|^7",
+        "smalot/pdfparser": "^0|^2",
+        "setasign/fpdf": "^1",
+        "setasign/fpdi": "^2",
+        "symfony/yaml": "^5|^6|^7",
+        "symfony/process": "^5|^6|^7",
+        "horstoeko/stringmanagement": "^1",
+        "horstoeko/mimedb": "^1"
+    },
+    "require-dev": {
+        "goetas-webservices/xsd2php": "^0",
+        "nette/php-generator": "*",
+        "pdepend/pdepend": "^2",
+        "phploc/phploc": "^7",
+        "phpmd/phpmd": "^2",
+        "phpstan/phpstan": "^1.8",
+        "phpunit/phpunit": "^9",
+        "sebastian/phpcpd": "^6",
+        "squizlabs/php_codesniffer": "^3"
+    },
+    "scripts": {
+        "tests": "./vendor/bin/phpunit ./tests/",
+        "testsreal": "./vendor/bin/phpunit --configuration ./build/phpunit.xml",
+        "phpcs": "./vendor/bin/phpcs --standard=./build/phpcsrules.xml --extensions=php --ignore=autoload.php ./src ./tests",
+        "phpcs12": "./vendor/bin/phpcs --standard=./build/phpcsrules_psr12.xml --extensions=php --ignore=autoload.php ./src ./tests",
+        "phpcbf": "./vendor/bin/phpcbf -q ./src ./tests",
+        "phpcbf1": "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr1.xml -q ./src ./tests",
+        "phpcbf2": "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr2.xml -q ./src ./tests",
+        "phpcbf12": "./vendor/bin/phpcbf --standard=./build/phpcsrules_psr12.xml -q ./src ./tests",
+        "phpcbfsq": "./vendor/bin/phpcbf --standard=./build/phpcsrules_squiz.xml -q ./src ./tests",
+        "phpstan": "./vendor/bin/phpstan analyze -c ./build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --xdebug",
+        "phpstan_cs": "./vendor/bin/phpstan analyze -c ./build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --error-format=checkstyle --xdebug",
+        "makedoc": "phing -f ./build.xml projectdoc"
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/BasicSimple.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/BasicSimple.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/BasicSimple.php	(revision 8435)
@@ -0,0 +1,52 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentBuilder;
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\codelists\ZugferdPaymentMeans;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_BASIC);
+$document
+    ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->addDocumentNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, null, 'REG')
+    ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+    ->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null)
+    ->setDocumentSeller("Lieferant GmbH", "549910")
+    ->addDocumentSellerGlobalId("4000001123452", "0088")
+    ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+    ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+    ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+    ->setDocumentSellerContact("Heinz MÃŒkker", "Buchhaltung", "+49-111-2222222", "+49-111-3333333","info@lieferant.de")
+    ->setDocumentSellerTaxRepresentativeTradeParty("Tax Representative", "123", "Tax Representative Description")
+    ->setDocumentSellerTaxRepresentativeAddress("Street 1", "", "", "11111", "Representative City", "DE", "Bayern")
+    ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+    ->setDocumentBuyerReference("34676-342323")
+    ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+    ->addDocumentTax("S", "VAT", 275.0, 19.25, 7.0)
+    ->addDocumentTax("S", "VAT", 198.0, 37.62, 19.0)
+    ->setDocumentSummation(529.87, 529.87, 473.00, 0.0, 0.0, 473.00, 56.87, null, 0.0)
+    ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+    ->addNewPosition("1")
+    ->setDocumentPositionNote("Bemerkung zu Zeile 1")
+    ->setDocumentPositionProductDetails("TrennblÃ€tter A4", "", "TB100A4", null, "0160", "4012345001235")
+    ->addDocumentPositionProductCharacteristic("Farbe", "Gelb")
+    ->addDocumentPositionProductClassification("ClassCode", "ClassName", "ListId", "ListVersionId")
+    ->setDocumentPositionProductOriginTradeCountry("CN")
+    ->setDocumentPositionGrossPrice(9.9000)
+    ->setDocumentPositionNetPrice(9.9000)
+    ->setDocumentPositionQuantity(20, "H87")
+    ->addDocumentPositionTax('S', 'VAT', 19)
+    ->setDocumentPositionLineSummation(198.0)
+    ->addNewPosition("2")
+    ->setDocumentPositionNote("Bemerkung zu Zeile 2")
+    ->setDocumentPositionProductDetails("Joghurt Banane", "", "ARNR2", null, "0160", "4000050986428")
+    ->addDocumentPositionProductCharacteristic("Suesstoff", "Nein")
+    ->addDocumentPositionProductClassification("ClassCode", "ClassName", "ListId", "ListVersionId")
+    ->SetDocumentPositionGrossPrice(5.5000)
+    ->SetDocumentPositionNetPrice(5.5000)
+    ->SetDocumentPositionQuantity(50, "H87")
+    ->AddDocumentPositionTax('S', 'VAT', 7)
+    ->SetDocumentPositionLineSummation(275.0)
+    ->writeFile(dirname(__FILE__) . "/factur-x.xml");
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931AdditionalRefDocument.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931AdditionalRefDocument.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931AdditionalRefDocument.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentReader;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$invoiceFile = dirname(__FILE__) . '/Invoice_2.xml';
+
+$document = ZugferdDocumentReader::readAndGuessFromFile($invoiceFile);
+
+// This is important - if you don't call this an attached file will not get extracted
+// The directory you set must exist
+$document->setBinaryDataDirectory('/tmp');
+
+if ($document->firstDocumentAdditionalReferencedDocument()) {
+    do {
+        $document->getDocumentAdditionalReferencedDocument(
+            $issuerassignedid,
+            $typecode,
+            $uriid,
+            $name,
+            $reftypecode,
+            $issueddate,
+            $binarydatafilename
+        );
+
+        // Information about the document
+        echo "Issuer Assigned ID ........... " . $issuerassignedid . PHP_EOL;
+        echo "Issued Date .................. " . $issueddate . PHP_EOL;
+        echo "Type Code .................... " . $typecode . PHP_EOL;
+        echo "URI .......................... " . $uriid . PHP_EOL;
+        echo "Name ......................... " . $name[0] . PHP_EOL;
+        echo "Ref. Type Code ............... " . $reftypecode . PHP_EOL;
+
+        // $binarydatafilename contains the full filename. In this example /tmp/01_15_Anhang_01.pdf
+        echo "The attachment is stored in .. " . $binarydatafilename . PHP_EOL;
+
+    } while ($document->nextDocumentAdditionalReferencedDocument());
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931Discounts.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931Discounts.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931Discounts.php	(revision 8435)
@@ -0,0 +1,138 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentBuilder;
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\codelists\ZugferdPaymentMeans;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+/*
+    Example 1: No discounts or surcharges at all
+*/
+
+$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931);
+$document
+    ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->addDocumentNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, null, 'REG')
+    ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+    ->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null)
+    ->setDocumentSeller("Lieferant GmbH", "549910")
+    ->addDocumentSellerGlobalId("4000001123452", "0088")
+    ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+    ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+    ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+    ->setDocumentSellerContact("Heinz MÃŒkker", "Buchhaltung", "+49-111-2222222", "+49-111-3333333","info@lieferant.de")
+    ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+    ->setDocumentBuyerReference("34676-342323")
+    ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+    ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+    ->addNewPosition("1")
+    ->setDocumentPositionProductDetails("Hosting", "", "HST0000")
+    ->setDocumentPositionGrossPrice(10.0)
+    ->setDocumentPositionNetPrice(10.0)
+    ->setDocumentPositionQuantity(1, "XPP")
+    ->addDocumentPositionTax('S', 'VAT', 19)
+    ->setDocumentPositionLineSummation(10)
+    ->addDocumentTax("S", "VAT", 10, 1.90, 19.0)
+    ->setDocumentSummation(11.90, 11.90, 10.00, 0.0, 0.0, 10.0, 1.90, 0.0, 0.0)
+    ->writeFile(dirname(__FILE__) . "/discount_1.xml");
+
+/*
+    Example 2: Reduction of the net unit price (from item level)
+*/
+
+$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931);
+$document
+    ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->addDocumentNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, null, 'REG')
+    ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+    ->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null)
+    ->setDocumentSeller("Lieferant GmbH", "549910")
+    ->addDocumentSellerGlobalId("4000001123452", "0088")
+    ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+    ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+    ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+    ->setDocumentSellerContact("Heinz MÃŒkker", "Buchhaltung", "+49-111-2222222", "+49-111-3333333","info@lieferant.de")
+    ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+    ->setDocumentBuyerReference("34676-342323")
+    ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+    ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+    ->addNewPosition("1")
+    ->setDocumentPositionProductDetails("Hosting", "", "HST0000")
+    ->setDocumentPositionGrossPrice(14.0)
+    ->addDocumentPositionGrossPriceAllowanceCharge(4.00, false)
+    ->setDocumentPositionNetPrice(10.0)
+    ->setDocumentPositionQuantity(1, "XPP")
+    ->addDocumentPositionTax('S', 'VAT', 19)
+    ->setDocumentPositionLineSummation(10)
+    ->addDocumentTax("S", "VAT", 10, 1.90, 19.0)
+    ->setDocumentSummation(11.90, 11.90, 10.00, 0.0, 0.0, 10.0, 1.90, 0.0, 0.0)
+    ->writeFile(dirname(__FILE__) . "/discount_2.xml");
+
+/*
+    Example 3: Row discount (on the total net amount of the row, NetPriceProductTradePrice * BilledQuantity)
+*/
+
+$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931);
+$document
+    ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->addDocumentNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, null, 'REG')
+    ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+    ->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null)
+    ->setDocumentSeller("Lieferant GmbH", "549910")
+    ->addDocumentSellerGlobalId("4000001123452", "0088")
+    ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+    ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+    ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+    ->setDocumentSellerContact("Heinz MÃŒkker", "Buchhaltung", "+49-111-2222222", "+49-111-3333333","info@lieferant.de")
+    ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+    ->setDocumentBuyerReference("34676-342323")
+    ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+    ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+    ->addNewPosition("1")
+    ->setDocumentPositionProductDetails("Hosting", "", "HST0000")
+    ->setDocumentPositionGrossPrice(10.0)
+    ->setDocumentPositionNetPrice(10.0)
+    ->setDocumentPositionQuantity(1, "XPP")
+    ->addDocumentPositionTax('S', 'VAT', 19)
+    ->addDocumentPositionAllowanceCharge(1.00, false, null, null, null, "Discount")
+    ->setDocumentPositionLineSummation(9)
+    ->addDocumentTax("S", "VAT", 9.00, 1.71, 19.0)
+    ->setDocumentSummation(10.71, 10.71, 9.00, 0.0, 0.0, 9.0, 1.71, 0.0, 0.0)
+    ->writeFile(dirname(__FILE__) . "/discount_3.xml");
+
+/*
+    Example 4: Discount at document level (e.g. invoice discount)
+*/
+
+$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931);
+$document
+    ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->addDocumentNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, null, 'REG')
+    ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+    ->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null)
+    ->setDocumentSeller("Lieferant GmbH", "549910")
+    ->addDocumentSellerGlobalId("4000001123452", "0088")
+    ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+    ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+    ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+    ->setDocumentSellerContact("Heinz MÃŒkker", "Buchhaltung", "+49-111-2222222", "+49-111-3333333","info@lieferant.de")
+    ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+    ->setDocumentBuyerReference("34676-342323")
+    ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+    ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+    ->addNewPosition("1")
+    ->setDocumentPositionProductDetails("Hosting", "", "HST0000")
+    ->setDocumentPositionGrossPrice(10.0)
+    ->setDocumentPositionNetPrice(10.0)
+    ->setDocumentPositionQuantity(1, "XPP")
+    ->addDocumentPositionTax('S', 'VAT', 19)
+    ->setDocumentPositionLineSummation(10)
+    ->addDocumentAllowanceCharge(1.00, false, "S", "VAT", 19.0, null, null, null, null, null, null, "Discount")
+    ->addDocumentTax("S", "VAT", 9, 1.71, 19.0)
+    ->setDocumentSummation(10.71, 10.71, 10.00, 0.0, 1.0, 9.0, 1.71, 0.0, 0.0)
+    ->writeFile(dirname(__FILE__) . "/discount_4.xml");
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931PdfMerger.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931PdfMerger.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931PdfMerger.php	(revision 8435)
@@ -0,0 +1,15 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentPdfMerger;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$existingXml = dirname(__FILE__) . "/invoice_1.xml";
+$existingPdf = dirname(__FILE__) . "/emptypdf.pdf";
+$mergeToPdf = dirname(__FILE__) . "/fullpdf.pdf";
+
+if (!file_exists($existingXml) || !file_exists($existingPdf)) {
+    throw new \Exception("XML and/or PDF does not exist");
+}
+
+(new ZugferdDocumentPdfMerger($existingXml, $existingPdf))->setAdditionalCreatorTool('Contoso ERP 1.0')->generateDocument()->saveDocument($mergeToPdf);
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931ReaderPdf.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931ReaderPdf.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931ReaderPdf.php	(revision 8435)
@@ -0,0 +1,119 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentPdfReader;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/invoice_1.pdf");
+
+$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+
+echo "\r\nGeneral document information\r\n";
+echo "----------------------------------------------------------------------\r\n";
+echo "Profile:               {$document->getProfileDefinitionParameter("name")}\r\n";
+echo "Profile:               {$document->getProfileDefinitionParameter("altname")}\r\n";
+echo "Document No:           {$documentno}\r\n";
+echo "Document Type:         {$documenttypecode}\r\n";
+echo "Document Date:         {$documentdate->format("Y-m-d")}\r\n";
+echo "Invoice currency:      {$invoiceCurrency}\r\n";
+echo "Tax currency:          {$taxCurrency}\r\n";
+
+if ($document->firstDocumentPosition()) {
+    echo "\r\nDocument positions\r\n";
+    echo "----------------------------------------------------------------------\r\n";
+    do {
+        $document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+
+        echo " - Line Id:                        {$lineid}\r\n";
+        echo " - Product Name:                   {$prodname}\r\n";
+        echo " - Product Description:            {$proddesc}\r\n";
+        echo " - Product Buyer ID:               {$prodbuyerid}\r\n";
+        echo " - Product Gross Price:            {$grosspriceamount}\r\n";
+        echo " - Product Gross Price Basis Qty.: {$grosspricebasisquantity} {$grosspricebasisquantityunitcode}\r\n";
+        echo " - Product Net Price:              {$netpriceamount}\r\n";
+        echo " - Product Net Price Basis Qty.:   {$netpricebasisquantity} {$netpricebasisquantityunitcode}\r\n";
+        echo " - Quantity:                       {$billedquantity} {$billedquantityunitcode}\r\n";
+        echo " - Line amount:                    {$lineTotalAmount}\r\n";
+
+        if ($document->firstDocumentPositionTax()) {
+            echo " - Position Tax(es)\r\n";
+            do {
+                $document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+                echo "   - Tax category code:            {$categoryCode}\r\n";
+                echo "   - Tax type code:                {$typeCode}\r\n";
+                echo "   - Tax percent:                  {$rateApplicablePercent}\r\n";
+                echo "   - Tax amount:                   {$calculatedAmount}\r\n";
+            } while ($document->nextDocumentPositionTax());
+        }
+
+        if ($document->firstDocumentPositionAllowanceCharge()) {
+            echo " - Position Allowance(s)/Charge(s)\r\n";
+            do {
+                $document->getDocumentPositionAllowanceCharge($actualAmount, $isCharge, $calculationPercent, $basisAmount, $reason, $taxTypeCode, $taxCategoryCode, $rateApplicablePercent, $sequence, $basisQuantity, $basisQuantityUnitCode, $reasonCode);
+                echo "   - Information\r\n";
+                echo "     - Actual Amount:                {$actualAmount}\r\n";
+                echo "     - Type:                         " . ($isCharge ? "Charge" : "Allowance") . "\r\n";
+                echo "     - Tax category code:            {$taxCategoryCode}\r\n";
+                echo "     - Tax type code:                {$taxTypeCode}\r\n";
+                echo "     - Tax percent:                  {$rateApplicablePercent}\r\n";
+                echo "     - Calculated percent:           {$calculationPercent}\r\n";
+                echo "     - Basis amount:                 {$basisAmount}\r\n";
+                echo "     - Basis qty.:                   {$basisQuantity} {$basisQuantityUnitCode}\r\n";
+            } while ($document->nextDocumentPositionAllowanceCharge());
+        }
+
+        echo "\r\n";
+    } while ($document->nextDocumentPosition());
+}
+
+if ($document->firstDocumentAllowanceCharge()) {
+    echo "\r\nDocument allowance(s)/charge(s)\r\n";
+    echo "----------------------------------------------------------------------\r\n";
+    do {
+        $document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        echo "   - Information\r\n";
+        echo "     - Actual Amount:                {$actualAmount}\r\n";
+        echo "     - Type:                         " . ($isCharge ? "Charge" : "Allowance") . "\r\n";
+        echo "     - Tax category code:            {$taxCategoryCode}\r\n";
+        echo "     - Tax type code:                {$taxTypeCode}\r\n";
+        echo "     - Tax percent:                  {$rateApplicablePercent}\r\n";
+        echo "     - Calculated percent:           {$calculationPercent}\r\n";
+        echo "     - Basis amount:                 {$basisAmount}\r\n";
+        echo "     - Basis qty.:                   {$basisQuantity} {$basisQuantityUnitCode}\r\n";
+    } while ($document->nextDocumentAllowanceCharge());
+}
+
+if ($document->firstDocumentTax()) {
+    echo "\r\nDocument tax\r\n";
+    echo "----------------------------------------------------------------------\r\n";
+    do {
+        $document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        echo "   - Information\r\n";
+        echo "     - Tax category code:            {$categoryCode}\r\n";
+        echo "     - Tax type code:                {$typeCode}\r\n";
+        echo "     - Basis amount:                 {$basisAmount}\r\n";
+        echo "     - Line total Basis amount:      {$lineTotalBasisAmount}\r\n";
+        echo "     - Tax percent:                  {$rateApplicablePercent}\r\n";
+        echo "     - Tax amount:                   {$calculatedAmount}\r\n";
+    } while ($document->nextDocumentTax());
+}
+
+$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+
+echo "\r\nDocument summation\r\n";
+echo "----------------------------------------------------------------------\r\n";
+
+echo "  - Line total amount                {$lineTotalAmount}\r\n";
+echo "  - Charge total amount              {$chargeTotalAmount}\r\n";
+echo "  - Allowance total amount           {$allowanceTotalAmount}\r\n";
+echo "  - Tax basis total amount           {$taxBasisTotalAmount}\r\n";
+echo "  - Tax total amount                 {$taxTotalAmount}\r\n";
+echo "  - Grant total amount               {$grandTotalAmount}\r\n";
+echo "  - Due payable amount               {$duePayableAmount}\r\n";
+
+echo "\r\n\r\n";
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931ReaderPdfWithJsonExport.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931ReaderPdfWithJsonExport.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931ReaderPdfWithJsonExport.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentJsonExporter;
+use horstoeko\zugferd\ZugferdDocumentPdfReader;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/invoice_1.pdf");
+
+$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+
+$documentJsonExporter = new ZugferdDocumentJsonExporter($document);
+
+echo $documentJsonExporter->toPrettyJsonString();
+echo "\r\n\r\n";
+
+$jsonObject = $documentJsonExporter->toJsonObject();
+
+var_dump($jsonObject);
+
+echo "\r\n\r\n";
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931Simple.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931Simple.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931Simple.php	(revision 8435)
@@ -0,0 +1,50 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentBuilder;
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\codelists\ZugferdPaymentMeans;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931);
+$document
+    ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->addDocumentNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, null, 'REG')
+    ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+    ->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null)
+    ->setDocumentSeller("Lieferant GmbH", "549910")
+    ->addDocumentSellerGlobalId("4000001123452", "0088")
+    ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+    ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+    ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+    ->setDocumentSellerContact("Heinz MÃŒkker", "Buchhaltung", "+49-111-2222222", "+49-111-3333333","info@lieferant.de")
+    ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+    ->setDocumentBuyerReference("34676-342323")
+    ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+    ->addDocumentTax("S", "VAT", 275.0, 19.25, 7.0)
+    ->addDocumentTax("S", "VAT", 198.0, 37.62, 19.0)
+    ->setDocumentSummation(529.87, 529.87, 473.00, 0.0, 0.0, 473.00, 56.87, null, 0.0)
+    ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+    ->addNewPosition("1")
+    ->setDocumentPositionNote("Bemerkung zu Zeile 1")
+    ->setDocumentPositionProductDetails("TrennblÃ€tter A4", "", "TB100A4", null, "0160", "4012345001235")
+    ->addDocumentPositionProductCharacteristic("Farbe", "Gelb")
+    ->addDocumentPositionProductClassification("ClassCode", "ClassName", "ListId", "ListVersionId")
+    ->setDocumentPositionProductOriginTradeCountry("CN")
+    ->setDocumentPositionGrossPrice(9.9000)
+    ->setDocumentPositionNetPrice(9.9000)
+    ->setDocumentPositionQuantity(20, "H87")
+    ->addDocumentPositionTax('S', 'VAT', 19)
+    ->setDocumentPositionLineSummation(198.0)
+    ->addNewPosition("2")
+    ->setDocumentPositionNote("Bemerkung zu Zeile 2")
+    ->setDocumentPositionProductDetails("Joghurt Banane", "", "ARNR2", null, "0160", "4000050986428")
+    ->addDocumentPositionProductCharacteristic("Suesstoff", "Nein")
+    ->addDocumentPositionProductClassification("ClassCode", "ClassName", "ListId", "ListVersionId")
+    ->SetDocumentPositionGrossPrice(5.5000)
+    ->SetDocumentPositionNetPrice(5.5000)
+    ->SetDocumentPositionQuantity(50, "H87")
+    ->AddDocumentPositionTax('S', 'VAT', 7)
+    ->SetDocumentPositionLineSummation(275.0)
+    ->writeFile(dirname(__FILE__) . "/factur-x.xml");
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931SimpleQuick.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931SimpleQuick.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931SimpleQuick.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+use horstoeko\zugferd\quick\ZugferdQuickDescriptorEn16931;
+use horstoeko\zugferd\codelists\ZugferdTextSubjectCodeQualifiers;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = (ZugferdQuickDescriptorEn16931::doCreateNew())
+    ->doCreateInvoice("471102", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->doSetPaymentTerms("Zahlbar sofort", new \DateTime('+3 days'))
+    ->doAddNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->doAddNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, ZugferdTextSubjectCodeQualifiers::UNTDID_4451_REG)
+    ->doSetBuyer("Kunden AG Mitte", "69876", "Frankfurt", "LieferantenstraÃe 20", "DE", "34676-342323")
+    ->doSetBuyerContact("Hans Miller")
+    ->doSetBuyerElectronicCommunication("kunde@kunde.de")
+    ->doSetSeller("Lieferant GmbH", "80333", "MÃŒnchen", "LieferantenstraÃe 20", "DE", null, "4000001123452", "0088")
+    ->doAddSellerTaxRegistration("FC", "201/113/40209")
+    ->doAddSellerTaxRegistration("VA", "DE123456789")
+    ->doSetSellerContact("Horst Meier", null, "horst@nowhere.all", "+49-0000-8888888")
+    ->doSetSellerElectronicCommunication("lieferant@lieferant.de")
+    ->doAddTradeLineItem("1", "ZitronensÃ€ure 100ml", 1.0, 100.0, "H87", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("2", "Gelierzucker Extra 250g", 1.45, 50.0, "H87", 0.0, "", "S", "VAT", 7.0)
+    ->doAddTradeLineItem("3", "Gelierzucker Extra 250g", 0.0, 10.0, "H87", 0.0, "", "S", "VAT", 7.0)
+    ->doSetDocumentPositionNote("Artikel wie vereinbart ohne Berechnung")
+    ->doAddTradeLineItem("4", "Bierbrau Pils 20/0500", 12.0, 15.0, "XBC", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("5", "Leergutpfand 20 x 0,5l", 3.10, 15.0, "C62", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("6", "Mischpalette Joghurt Karton 3 x 20", 29.10, 2.0, "C62", 0.0, "", "S", "VAT", 7.0)
+    ->doSetPaymentMeansForCreditTransfer(true, "DE12500105170648489890")
+    ->doAddTradeAllowanceCharge(-5.60, "Rechnungsrabatt 1", "S", "VAT", 19.0)
+    ->doAddTradeAllowanceCharge(-2.61, "Rechnungsrabatt 1", "S", "VAT", 7.0)
+    ->doAddTradeAllowanceCharge(-2.50, "Rechnungsrabatt 2", "S", "VAT", 19.0)
+    ->doAddTradeAllowanceCharge(-0.50, "Rechnungsrabatt 2", "S", "VAT", 7.0)
+    ->writeFile(dirname(__FILE__) . "/factur-x.xml");
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931SimpleReader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931SimpleReader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931SimpleReader.php	(revision 8435)
@@ -0,0 +1,23 @@
+<?php
+
+error_reporting(E_ERROR | E_WARNING | E_PARSE);
+
+use horstoeko\zugferd\ZugferdDocumentReader;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../tests/data/en16931_simple.xml", true);
+
+$document->getDocumentInformation(
+    $documentno,
+    $documenttypecode,
+    $documentdate,
+    $duedate,
+    $invoiceCurrency,
+    $taxCurrency,
+    $documentname,
+    $documentlanguage,
+    $effectiveSpecifiedPeriod
+);
+
+echo "The Invoice No. is {$documentno}" . PHP_EOL;
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931SimpleToJson.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931SimpleToJson.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931SimpleToJson.php	(revision 8435)
@@ -0,0 +1,54 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentBuilder;
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\codelists\ZugferdPaymentMeans;
+use horstoeko\zugferd\ZugferdDocumentJsonExporter;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931);
+$document
+    ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->addDocumentNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, null, 'REG')
+    ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+    ->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null)
+    ->setDocumentSeller("Lieferant GmbH", "549910")
+    ->addDocumentSellerGlobalId("4000001123452", "0088")
+    ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+    ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+    ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+    ->setDocumentSellerContact("Heinz MÃŒkker", "Buchhaltung", "+49-111-2222222", "+49-111-3333333","info@lieferant.de")
+    ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+    ->setDocumentBuyerReference("34676-342323")
+    ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+    ->addDocumentTax("S", "VAT", 275.0, 19.25, 7.0)
+    ->addDocumentTax("S", "VAT", 198.0, 37.62, 19.0)
+    ->setDocumentSummation(529.87, 529.87, 473.00, 0.0, 0.0, 473.00, 56.87, null, 0.0)
+    ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+    ->addNewPosition("1")
+    ->setDocumentPositionNote("Bemerkung zu Zeile 1")
+    ->setDocumentPositionProductDetails("TrennblÃ€tter A4", "", "TB100A4", null, "0160", "4012345001235")
+    ->addDocumentPositionProductCharacteristic("Farbe", "Gelb")
+    ->addDocumentPositionProductClassification("ClassCode", "ClassName", "ListId", "ListVersionId")
+    ->setDocumentPositionProductOriginTradeCountry("CN")
+    ->setDocumentPositionGrossPrice(9.9000)
+    ->setDocumentPositionNetPrice(9.9000)
+    ->setDocumentPositionQuantity(20, "H87")
+    ->addDocumentPositionTax('S', 'VAT', 19)
+    ->setDocumentPositionLineSummation(198.0)
+    ->addNewPosition("2")
+    ->setDocumentPositionNote("Bemerkung zu Zeile 2")
+    ->setDocumentPositionProductDetails("Joghurt Banane", "", "ARNR2", null, "0160", "4000050986428")
+    ->addDocumentPositionProductCharacteristic("Suesstoff", "Nein")
+    ->addDocumentPositionProductClassification("ClassCode", "ClassName", "ListId", "ListVersionId")
+    ->SetDocumentPositionGrossPrice(5.5000)
+    ->SetDocumentPositionNetPrice(5.5000)
+    ->SetDocumentPositionQuantity(50, "H87")
+    ->AddDocumentPositionTax('S', 'VAT', 7)
+    ->SetDocumentPositionLineSummation(275.0)
+    ->writeFile(dirname(__FILE__) . "/factur-x.xml");
+
+$jsonExporter = new ZugferdDocumentJsonExporter($document);
+echo $jsonExporter->toPrettyJsonString();
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931SimpleWithPdf.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931SimpleWithPdf.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/En16931SimpleWithPdf.php	(revision 8435)
@@ -0,0 +1,47 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentBuilder;
+use horstoeko\zugferd\ZugferdDocumentPdfBuilder;
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\codelists\ZugferdPaymentMeans;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931);
+$document
+    ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->addDocumentNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, null, 'REG')
+    ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+    ->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null)
+    ->setDocumentSeller("Lieferant GmbH", "549910")
+    ->addDocumentSellerGlobalId("4000001123452", "0088")
+    ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+    ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+    ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+    ->setDocumentSellerContact("Heinz MÃŒkker", "Buchhaltung", "+49-111-2222222", "+49-111-3333333","info@lieferant.de")
+    ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+    ->setDocumentBuyerReference("34676-342323")
+    ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+    ->addDocumentTax("S", "VAT", 275.0, 19.25, 7.0)
+    ->addDocumentTax("S", "VAT", 198.0, 37.62, 19.0)
+    ->setDocumentSummation(529.87, 529.87, 473.00, 0.0, 0.0, 473.00, 56.87, null, 0.0)
+    ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+    ->addNewPosition("1")
+    ->setDocumentPositionProductDetails("TrennblÃ€tter A4", "", "TB100A4", null, "0160", "4012345001235")
+    ->setDocumentPositionGrossPrice(9.9000)
+    ->setDocumentPositionNetPrice(9.9000)
+    ->setDocumentPositionQuantity(20, "H87")
+    ->addDocumentPositionTax('S', 'VAT', 19)
+    ->setDocumentPositionLineSummation(198.0)
+    ->addNewPosition("2")
+    ->setDocumentPositionProductDetails("Joghurt Banane", "", "ARNR2", null, "0160", "4000050986428")
+    ->SetDocumentPositionGrossPrice(5.5000)
+    ->SetDocumentPositionNetPrice(5.5000)
+    ->SetDocumentPositionQuantity(50, "H87")
+    ->AddDocumentPositionTax('S', 'VAT', 7)
+    ->SetDocumentPositionLineSummation(275.0);
+
+$pdf = new ZugferdDocumentPdfBuilder($document, dirname(__FILE__) . "/emptypdf.pdf");
+$pdf->generateDocument();
+$pdf->saveDocument(dirname(__FILE__) . "/fullpdf.pdf");
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/ExtendedPdfReader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/ExtendedPdfReader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/ExtendedPdfReader.php	(revision 8435)
@@ -0,0 +1,156 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentPdfReader;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/invoice_2.pdf");
+
+$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+
+echo "\r\nGeneral document information\r\n";
+echo "----------------------------------------------------------------------\r\n";
+echo "Profile:               {$document->getProfileDefinitionParameter("name")}\r\n";
+echo "Profile:               {$document->getProfileDefinitionParameter("altname")}\r\n";
+echo "Document No:           {$documentno}\r\n";
+echo "Document Type:         {$documenttypecode}\r\n";
+echo "Document Date:         {$documentdate->format("Y-m-d")}\r\n";
+echo "Invoice currency:      {$invoiceCurrency}\r\n";
+echo "Tax currency:          {$taxCurrency}\r\n";
+
+if ($document->firstDocumentPosition()) {
+    echo "\r\nDocument positions\r\n";
+    echo "----------------------------------------------------------------------\r\n";
+    do {
+        $document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+
+        echo " - Line Id:                        {$lineid}\r\n";
+        echo " - Product Name:                   {$prodname}\r\n";
+        echo " - Product Description:            {$proddesc}\r\n";
+        echo " - Product Buyer ID:               {$prodbuyerid}\r\n";
+        echo " - Product Gross Price:            {$grosspriceamount}\r\n";
+        echo " - Product Gross Price Basis Qty.: {$grosspricebasisquantity} {$grosspricebasisquantityunitcode}\r\n";
+        echo " - Product Net Price:              {$netpriceamount}\r\n";
+        echo " - Product Net Price Basis Qty.:   {$netpricebasisquantity} {$netpricebasisquantityunitcode}\r\n";
+        echo " - Quantity:                       {$billedquantity} {$billedquantityunitcode}\r\n";
+        echo " - Line amount:                    {$lineTotalAmount}\r\n";
+
+        if ($document->firstDocumentPositionTax()) {
+            echo " - Position Tax(es)\r\n";
+            do {
+                $document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+                echo "   - Tax category code:            {$categoryCode}\r\n";
+                echo "   - Tax type code:                {$typeCode}\r\n";
+                echo "   - Tax percent:                  {$rateApplicablePercent}\r\n";
+                echo "   - Tax amount:                   {$calculatedAmount}\r\n";
+            } while ($document->nextDocumentPositionTax());
+        }
+
+        if ($document->firstDocumentPositionAllowanceCharge()) {
+            echo " - Position Allowance(s)/Charge(s)\r\n";
+            do {
+                $document->getDocumentPositionAllowanceCharge($actualAmount, $isCharge, $calculationPercent, $basisAmount, $reason, $taxTypeCode, $taxCategoryCode, $rateApplicablePercent, $sequence, $basisQuantity, $basisQuantityUnitCode, $reasonCode);
+                echo "   - Information\r\n";
+                echo "     - Actual Amount:                {$actualAmount}\r\n";
+                echo "     - Type:                         " . ($isCharge ? "Charge" : "Allowance") . "\r\n";
+                echo "     - Tax category code:            {$taxCategoryCode}\r\n";
+                echo "     - Tax type code:                {$taxTypeCode}\r\n";
+                echo "     - Tax percent:                  {$rateApplicablePercent}\r\n";
+                echo "     - Calculated percent:           {$calculationPercent}\r\n";
+                echo "     - Basis amount:                 {$basisAmount}\r\n";
+                echo "     - Basis qty.:                   {$basisQuantity} {$basisQuantityUnitCode}\r\n";
+            } while ($document->nextDocumentPositionAllowanceCharge());
+        }
+
+        if ($document->firstDocumentPositionProductCharacteristic()) {
+            echo " - Position Product Characteristics\r\n";
+            do {
+                $document->getDocumentPositionProductCharacteristic($prodchardescription, $prodcharvalue, $prodchrtypecode, $prodcharmeasure, $prodcharmeasureunit);
+                echo "   - Description:                  {$prodchardescription}\r\n";
+                echo "   - Value:                        {$prodcharvalue}\r\n";
+                echo "   - Type Code:                    {$prodchrtypecode}\r\n";
+                echo "   - Meassure                      {$prodcharmeasure}\r\n";
+                echo "   - Meassure Unit                 {$prodcharmeasureunit}\r\n";
+            } while ($document->nextDocumentPositionProductCharacteristic());
+        }
+
+        if ($document->firstDocumentPositionProductClassification()) {
+            echo " - Position Product Classifications\r\n";
+            do {
+                $document->getDocumentPositionProductClassification($prodclasscode, $prodclassname, $prodclasslistid, $prodclasslistversionid);
+                echo "   - Code:                         {$prodclasscode}\r\n";
+                echo "   - Name:                         {$prodclassname}\r\n";
+                echo "   - List ID:                      {$prodclasslistid}\r\n";
+                echo "   - List Version ID:              {$prodclasslistversionid}\r\n";
+            } while ($document->nextDocumentPositionProductClassification());
+        }
+
+        if ($document->firstDocumentPositionReferencedProduct()) {
+            echo " - Position Product Referenced Products\r\n";
+            do {
+                $document->getDocumentPositionReferencedProduct($refprodname, $refprodesc, $refprodsellerid, $refprodbuyerid, $refprodglobalid, $refprodunitqty, $refprodunitcode);
+                echo "   - Name:                         {$refprodname}\r\n";
+                echo "   - Description:                  {$refprodesc}\r\n";
+                echo "   - Seller iD:                    {$refprodsellerid}\r\n";
+                echo "   - Buyer iD:                     {$refprodbuyerid}\r\n";
+                echo "   - Unit Quantity:                {$refprodunitqty} {$refprodunitcode}\r\n";
+                echo "   - Global iD:                    " . implode(",", $refprodglobalid) . "\r\n";
+            } while ($document->nextDocumentPositionReferencedProduct());
+        }
+
+        echo "\r\n";
+    } while ($document->nextDocumentPosition());
+}
+
+/*
+if ($document->firstDocumentAllowanceCharge()) {
+    echo "\r\nDocument allowance(s)/charge(s)\r\n";
+    echo "----------------------------------------------------------------------\r\n";
+    do {
+        $document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        echo "   - Information\r\n";
+        echo "     - Actual Amount:                {$actualAmount}\r\n";
+        echo "     - Type:                         " . ($isCharge ? "Charge" : "Allowance") . "\r\n";
+        echo "     - Tax category code:            {$taxCategoryCode}\r\n";
+        echo "     - Tax type code:                {$taxTypeCode}\r\n";
+        echo "     - Tax percent:                  {$rateApplicablePercent}\r\n";
+        echo "     - Calculated percent:           {$calculationPercent}\r\n";
+        echo "     - Basis amount:                 {$basisAmount}\r\n";
+        echo "     - Basis qty.:                   {$basisQuantity} {$basisQuantityUnitCode}\r\n";
+    } while ($document->nextDocumentAllowanceCharge());
+}
+
+if ($document->firstDocumentTax()) {
+    echo "\r\nDocument tax\r\n";
+    echo "----------------------------------------------------------------------\r\n";
+    do {
+        $document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        echo "   - Information\r\n";
+        echo "     - Tax category code:            {$categoryCode}\r\n";
+        echo "     - Tax type code:                {$typeCode}\r\n";
+        echo "     - Basis amount:                 {$basisAmount}\r\n";
+        echo "     - Line total Basis amount:      {$lineTotalBasisAmount}\r\n";
+        echo "     - Tax percent:                  {$rateApplicablePercent}\r\n";
+        echo "     - Tax amount:                   {$calculatedAmount}\r\n";
+    } while ($document->nextDocumentTax());
+}
+
+$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+
+echo "\r\nDocument summation\r\n";
+echo "----------------------------------------------------------------------\r\n";
+
+echo "  - Line total amount                {$lineTotalAmount}\r\n";
+echo "  - Charge total amount              {$chargeTotalAmount}\r\n";
+echo "  - Allowance total amount           {$allowanceTotalAmount}\r\n";
+echo "  - Tax basis total amount           {$taxBasisTotalAmount}\r\n";
+echo "  - Tax total amount                 {$taxTotalAmount}\r\n";
+echo "  - Grant total amount               {$grandTotalAmount}\r\n";
+echo "  - Due payable amount               {$duePayableAmount}\r\n";
+*/
+echo "\r\n\r\n";
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/ExtendedSimpleQuick.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/ExtendedSimpleQuick.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/ExtendedSimpleQuick.php	(revision 8435)
@@ -0,0 +1,34 @@
+<?php
+
+use horstoeko\zugferd\quick\ZugferdQuickDescriptorExtended;
+use horstoeko\zugferd\codelists\ZugferdTextSubjectCodeQualifiers;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = (ZugferdQuickDescriptorExtended::doCreateNew())
+    ->doCreateInvoice("471102", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->doSetPaymentTerms("Zahlbar sofort", new \DateTime('+3 days'))
+    ->doAddNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->doAddNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, ZugferdTextSubjectCodeQualifiers::UNTDID_4451_REG)
+    ->doSetBuyer("Kunden AG Mitte", "69876", "Frankfurt", "LieferantenstraÃe 20", "DE", "34676-342323")
+    ->doSetBuyerContact("Hans Miller")
+    ->doSetBuyerElectronicCommunication("kunde@kunde.de")
+    ->doSetSeller("Lieferant GmbH", "80333", "MÃŒnchen", "LieferantenstraÃe 20", "DE", null, "4000001123452", "0088")
+    ->doAddSellerTaxRegistration("FC", "201/113/40209")
+    ->doAddSellerTaxRegistration("VA", "DE123456789")
+    ->doSetSellerContact("Horst Meier", null, "horst@nowhere.all", "+49-0000-8888888")
+    ->doSetSellerElectronicCommunication("lieferant@lieferant.de")
+    ->doAddTradeLineItem("1", "ZitronensÃ€ure 100ml", 1.0, 100.0, "H87", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("2", "Gelierzucker Extra 250g", 1.45, 50.0, "H87", 0.0, "", "S", "VAT", 7.0)
+    ->doAddTradeLineItem("3", "Gelierzucker Extra 250g", 0.0, 10.0, "H87", 0.0, "", "S", "VAT", 7.0)
+    ->doSetDocumentPositionNote("Artikel wie vereinbart ohne Berechnung")
+    ->doAddTradeLineItem("4", "Bierbrau Pils 20/0500", 12.0, 15.0, "XBC", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("5", "Leergutpfand 20 x 0,5l", 3.10, 15.0, "C62", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("6", "Mischpalette Joghurt Karton 3 x 20", 29.10, 2.0, "C62", 0.0, "", "S", "VAT", 7.0)
+    ->doSetPaymentMeansForCreditTransfer(true, "DE12500105170648489890")
+    ->doAddTradeAllowanceCharge(-5.60, "Rechnungsrabatt 1", "S", "VAT", 19.0)
+    ->doAddTradeAllowanceCharge(-2.61, "Rechnungsrabatt 1", "S", "VAT", 7.0)
+    ->doAddTradeAllowanceCharge(-2.50, "Rechnungsrabatt 2", "S", "VAT", 19.0)
+    ->doAddTradeAllowanceCharge(-0.50, "Rechnungsrabatt 2", "S", "VAT", 7.0)
+    ->doAddLogisticsServiceCharge(10.0, "Transportkosten", "VAT", "S", 19.0)
+    ->writeFile(dirname(__FILE__) . "/factur-x.xml");
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/InvoiceXsdInvalid.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/InvoiceXsdInvalid.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/InvoiceXsdInvalid.xml	(revision 8435)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rsm:CrossIndustryInvoice xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:10" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <rsm:ExchangedDocumentContext>
+        <ram:GuidelineSpecifiedDocumentContextParameter>
+            <ram:ID>urn:cen.eu:en16931:2017</ram:ID>
+        </ram:GuidelineSpecifiedDocumentContextParameter>
+    </rsm:ExchangedDocumentContext>
+    <rsm:ExchangedDocument>
+        <ram:ID>471102</ram:ID>
+        <ram:TypeCode>380</ram:TypeCode>
+        <ram:IssueDateTime>
+            <udt:DateTimeString format="102">20180305</udt:DateTimeString>
+        </ram:IssueDateTime>
+        <ram:IncludedNote>
+            <ram:Content>Rechnung gemÃ€Ã Bestellung vom 01.03.2018.</ram:Content>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>Lieferant GmbH
+                LieferantenstraÃe 20
+                80333 MÃŒnchen
+                Deutschland
+                GeschÃ€ftsfÃŒhrer: Hans Muster
+                Handelsregisternummer: H A 123
+            </ram:Content>
+            <ram:SubjectCode>REG</ram:SubjectCode>
+        </ram:IncludedNote>
+    </rsm:ExchangedDocument>
+    <rsm:SupplyChainTradeTransaction>
+    </rsm:SupplyChainTradeTransaction>
+</rsm:CrossIndustryInvoice>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/Invoice_2.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/Invoice_2.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/Invoice_2.xml	(revision 8435)
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rsm:CrossIndustryInvoice xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
+    <rsm:ExchangedDocumentContext>
+        <ram:GuidelineSpecifiedDocumentContextParameter>
+            <ram:ID>urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_2.0</ram:ID>
+        </ram:GuidelineSpecifiedDocumentContextParameter>
+    </rsm:ExchangedDocumentContext>
+    <rsm:ExchangedDocument>
+        <ram:ID>123456789</ram:ID>
+        <ram:TypeCode>380</ram:TypeCode>
+        <ram:IssueDateTime>
+            <udt:DateTimeString format="102">20180605</udt:DateTimeString>
+        </ram:IssueDateTime>
+    </rsm:ExchangedDocument>
+    <rsm:SupplyChainTradeTransaction>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>1</ram:LineID>
+                <ram:IncludedNote>
+                    <ram:Content>Messpreis</ram:Content>
+                </ram:IncludedNote>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:Name>Messpreis</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>386.52</ram:ChargeAmount>
+                    <ram:BasisQuantity unitCode="DAY">366</ram:BasisQuantity>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="DAY">31</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:BillingSpecifiedPeriod>
+                    <ram:StartDateTime>
+                        <udt:DateTimeString format="102">20160101</udt:DateTimeString>
+                    </ram:StartDateTime>
+                    <ram:EndDateTime>
+                        <udt:DateTimeString format="102">20160131</udt:DateTimeString>
+                    </ram:EndDateTime>
+                </ram:BillingSpecifiedPeriod>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>32.74</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>2</ram:LineID>
+                <ram:IncludedNote>
+                    <ram:Content>Grundpreis</ram:Content>
+                </ram:IncludedNote>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:Name>Grundpreis</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>3.2916</ram:ChargeAmount>
+                    <ram:BasisQuantity unitCode="KWT">1</ram:BasisQuantity>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="KWT">2100</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:BillingSpecifiedPeriod>
+                    <ram:StartDateTime>
+                        <udt:DateTimeString format="102">20160101</udt:DateTimeString>
+                    </ram:StartDateTime>
+                    <ram:EndDateTime>
+                        <udt:DateTimeString format="102">20160131</udt:DateTimeString>
+                    </ram:EndDateTime>
+                </ram:BillingSpecifiedPeriod>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>6912.37</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>3</ram:LineID>
+                <ram:IncludedNote>
+                    <ram:Content>Arbeitspreis</ram:Content>
+                </ram:IncludedNote>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:Name>Arbeitspreis</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>0.061232374</ram:ChargeAmount>
+                    <ram:BasisQuantity unitCode="KWH">1</ram:BasisQuantity>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="KWH">616290</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:BillingSpecifiedPeriod>
+                    <ram:StartDateTime>
+                        <udt:DateTimeString format="102">20160101</udt:DateTimeString>
+                    </ram:StartDateTime>
+                    <ram:EndDateTime>
+                        <udt:DateTimeString format="102">20160131</udt:DateTimeString>
+                    </ram:EndDateTime>
+                </ram:BillingSpecifiedPeriod>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>37736.90</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:ApplicableHeaderTradeAgreement>
+            <ram:BuyerReference>90000000-03083-12</ram:BuyerReference>
+            <ram:SellerTradeParty>
+                <ram:Name>[Seller name]</ram:Name>
+                <ram:SpecifiedLegalOrganization/>
+                <ram:DefinedTradeContact>
+                    <ram:PersonName>Kundencenter</ram:PersonName>
+                    <ram:TelephoneUniversalCommunication>
+                        <ram:CompleteNumber>0800-12345678</ram:CompleteNumber>
+                    </ram:TelephoneUniversalCommunication>
+                    <ram:EmailURIUniversalCommunication>
+                        <ram:URIID>kundencenter@sellder.de</ram:URIID>
+                    </ram:EmailURIUniversalCommunication>
+                </ram:DefinedTradeContact>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>12345</ram:PostcodeCode>
+                    <ram:LineOne>[Seller address line 1]</ram:LineOne>
+                    <ram:CityName>[Seller city]</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="VA">ATU123456789</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+            </ram:SellerTradeParty>
+            <ram:BuyerTradeParty>
+                <ram:ID>BI123456</ram:ID>
+                <ram:Name>[Buyer name]</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>12345</ram:PostcodeCode>
+                    <ram:LineOne>[Buyer address line 1]</ram:LineOne>
+                    <ram:CityName>[Buyer city]</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+            </ram:BuyerTradeParty>
+            <ram:ContractReferencedDocument>
+                <ram:IssuerAssignedID>CR123456</ram:IssuerAssignedID>
+            </ram:ContractReferencedDocument>
+            <ram:AdditionalReferencedDocument>
+                <ram:IssuerAssignedID>01_15_Anhang_01.pdf</ram:IssuerAssignedID>
+                <ram:TypeCode>916</ram:TypeCode>
+                <ram:Name>AufschlÃŒsselung der einzelnen Leistungspositionen</ram:Name>
+                <ram:AttachmentBinaryObject mimeCode="application/pdf" filename="01_15_Anhang_01.pdf">JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhkZS1ERSkgL1N0cnVjdFRyZWVSb290IDEwIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+Pg0KZW5kb2JqDQoyIDAgb2JqDQo8PC9UeXBlL1BhZ2VzL0NvdW50IDEvS2lkc1sgMyAwIFJdID4+DQplbmRvYmoNCjMgMCBvYmoNCjw8L1R5cGUvUGFnZS9QYXJlbnQgMiAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4vRXh0R1N0YXRlPDwvR1M3IDcgMCBSL0dTOCA4IDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQi9JbWFnZUMvSW1hZ2VJXSA+Pi9NZWRpYUJveFsgMCAwIDU5NS4zMiA4NDEuOTJdIC9Db250ZW50cyA0IDAgUi9Hcm91cDw8L1R5cGUvR3JvdXAvUy9UcmFuc3BhcmVuY3kvQ1MvRGV2aWNlUkdCPj4vVGFicy9TL1N0cnVjdFBhcmVudHMgMD4+DQplbmRvYmoNCjQgMCBvYmoNCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMjEzPj4NCnN0cmVhbQ0KeJytj0FrwkAQhe8L+x/ecaaQzWyycTcgQk2sWBAsDXgQDx7WINpAm/72npsED8VzB+bwmDcz70O6w3yebqtNDVkssKwrfGolRsYKwVsIirIweYbgrCkzfEWt9k/otFo2WqUvFtYacWjOWo1ugYUXEzIHPxPjA5qPwbd+92j74TTaSYW7Wmt1oJoTR6ceVw70w0lBHedTf0f2hMhJTpeOC4pcEp47dnQ7tTyjiHHUxwtbmRYM+IjmVavVEO5Nq3+AycSaUP6FmRju0R/+YbWt8AtH80VUDQplbmRzdHJlYW0NCmVuZG9iag0KNSAwIG9iag0KPDwvVHlwZS9Gb250L1N1YnR5cGUvVHJ1ZVR5cGUvTmFtZS9GMS9CYXNlRm9udC9BQkNERUUrQ2FsaWJyaS9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvRm9udERlc2NyaXB0b3IgNiAwIFIvRmlyc3RDaGFyIDMyL0xhc3RDaGFyIDI0Ni9XaWR0aHMgMTcgMCBSPj4NCmVuZG9iag0KNiAwIG9iag0KPDwvVHlwZS9Gb250RGVzY3JpcHRvci9Gb250TmFtZS9BQkNERUUrQ2FsaWJyaS9GbGFncyAzMi9JdGFsaWNBbmdsZSAwL0FzY2VudCA3NTAvRGVzY2VudCAtMjUwL0NhcEhlaWdodCA3NTAvQXZnV2lkdGggNTIxL01heFdpZHRoIDE3NDMvRm9udFdlaWdodCA0MDAvWEhlaWdodCAyNTAvU3RlbVYgNTIvRm9udEJCb3hbIC01MDMgLTI1MCAxMjQwIDc1MF0gL0ZvbnRGaWxlMiAxOCAwIFI+Pg0KZW5kb2JqDQo3IDAgb2JqDQo8PC9UeXBlL0V4dEdTdGF0ZS9CTS9Ob3JtYWwvY2EgMT4+DQplbmRvYmoNCjggMCBvYmoNCjw8L1R5cGUvRXh0R1N0YXRlL0JNL05vcm1hbC9DQSAxPj4NCmVuZG9iag0KOSAwIG9iag0KPDwvQXV0aG9yKFdFSVNTTUFOTiBNYXJjZWwpIC9DcmVhdG9yKP7/AE0AaQBjAHIAbwBzAG8AZgB0AK4AIABXAG8AcgBkACAAMgAwADEANikgL0NyZWF0aW9uRGF0ZShEOjIwMTgwNzI1MTI1OTQyKzAyJzAwJykgL01vZERhdGUoRDoyMDE4MDcyNTEyNTk0MiswMicwMCcpIC9Qcm9kdWNlcij+/wBNAGkAYwByAG8AcwBvAGYAdACuACAAVwBvAHIAZAAgADIAMAAxADYpID4+DQplbmRvYmoNCjE2IDAgb2JqDQo8PC9UeXBlL09ialN0bS9OIDYvRmlyc3QgMzkvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyODQ+Pg0Kc3RyZWFtDQp4nG1RwYqDMBC9F/oP8wdjrMIulMKybdmlVESFPZQeUp3VUE1KGqH9+03UYg4LIZk3897LZMIiCICtIGbAbBDYw673EFgIUfgGLIbI1tZrTB0tgAxzTLF43ghzo/vS7Frq8HCC4AyY1jBwNpvlYpQELwnX5j8Vc/dnZ5gUHqPQRJlSBjPV0pHfXGPOyzqRHKquR5dxNqvRxqsm9DAHegKbrPfWSypDmLhtJ6sZFJZ6UQ/MqTT4RbwiPcZO84q/ZSsk5Q13HbrEh7QO3AglJ6yN+OU2GNCP0teLUlfcqrLvbE9D5t4QmXEYR15q5eHPxu4e3greqtpL5K2oyOOO91harXmHe1H3mqa3Jn13P7mPjefpzrNeLv4ATdCbvw0KZW5kc3RyZWFtDQplbmRvYmoNCjE3IDAgb2JqDQpbIDIyNiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDI1MiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1NzkgMCAwIDYxNSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDQ3OSAwIDAgMCA0OTggMCA0NzEgMCAyMzAgMCA0NTUgMjMwIDAgNTI1IDAgMCAwIDAgMzkxIDMzNSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1MjddIA0KZW5kb2JqDQoxOCAwIG9iag0KPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxNDY2NzUvTGVuZ3RoMSAzNDE5MzI+Pg0Kc3RyZWFtDQp4nOxcB3hUxdqeOWdbtiS7ySYk2SS7YUkoSwidgEiWNHoJsJhQE1KBUAQiiJRYAI2g2Lti94pls6AG7L1cxYa9cvVarmIFCyX7v3O+nVAE9bm/3vv7/Pvtvud9v2/KmZkzM2eCMYwzxpJw0bGKookjht2b9Gwd06e9xFjqu8UFRZPm5tj3MZ57NWOG1cUFowsT9lz1HOPddYyplw8rKi6Z/MMcD1N8dqTbh40fN7Gx6v0SpvRC7IvgsImBAuOn5yUz3n8FY3suHDcxt/cVj06/hzH+Ge5aUTWvcmH2ntxzGBsHV/2u6pQlnm0L3+zH2BorY/oHahfWzVv1vjqAsQl7GLP56ioXL2QZzMu4Dz6z1zWcWusbkNbIWPMzjA0J1ddUVu99yGhE/Q1I71+PgO1O+2L4N8HvVD9vybKvp6X0ZUwZztjo1rk1i+b3vXvg3Yzt34n0Aw0Lqip3zX35TsaeRXt7T55XuWxh97jsLiiP+plnXs2SyndvTBuH/qSJ9s+vnFfTedP63iiK8cpVFy5YvCTsYmvRPlGfZ+GimoUJdR1TkNWD23/BxFgbet50UeIN22fGDd7LUkxM2P1frHhe8M7tsR/t33ewKeZLU3+4MUxhZChnYG2MP2HetH/fvk0xX2o1HWa23iKS0o1dxOxsGdOjpJ3lsnWMxffHfRWkqjof34gUk/4KfR9UmUGsvsTWKszElDi9oig6VdF9yLqFH2GdTtNaABsz0eNhfsaynqc2GK9Vsj2Mh0Waep8+VvSUOXWxh1rDX8R0uh7P6Q803Zfsjj+yvj/bDG/8tdr7R5q6B7PvDzRdDbv+iPqbjvR/tewZrOHX0vmXv14X0h1Hx9RnqYzy4bHLGgzset0Fx07T3c5qf0/sWKbuPmocxrERx8xXztJ+T31/hqmvsWl/Zv26vqziiPvtZ9P/zPv9p0x9gvU7OnZ0X482/jpb81v1Is8Vx7zfjYfix8sTacPx0/LYlN8TO5Ypzx1Zr5rJSo+VT3/XkXHlLpb5i3s2/jJ2rDz6BMpneOu38/+ePH+WKXewonb9TzZcaWXDNH0Z6yaYV7HKiN/AZ9D+pnzCGoBiWY7/AL8nK+Af/bHv4X/H1E4RLvnP3hfzmvEd/9l7Ri1qUYva8Uy5ipuPm1bBdh83Tc8u+3Na9H/f1H7s3P92G6IWtahFLWr/vuke/X3/zvFrpuw99G8b6ih23m/ec95v54la1KIWtahFLWpRi1rUoha1qP3/tMN/xhQW/TkzalGLWtSiFrWoRS1qUYta1KIWtahF7a9v/Li/5R61qEUtalGLWtSiFrWoRS1qUYta1KIWtahFLWpRi1rU/oKmRpBGf1WNW+FBqQrTsW8Q6M08UPFQNtaR9WBDWREbwypZDatjs1kDW8CWsE3sNvYD75XePb1n+kBPjGd11vNh7S+koYznsDLVWpm5bD5bdJwyPLwX9+4Wfjy8M/yj9veePmd7qKHhKj6TrWf9vlgnPrs776r84MTIX4LrcVh/umjXbHC34/VYHalexlN5Bm/gC/gpfCVfzzfyK5mB/6Cl/3D035eDr0T+Gp3Cft34oTsc5+Zlv1EDmU67Jv8iXvSLyLGbobVT9BHX8cB08VcB+QJc0V8tjfr8hxk/47fzKMb/xQ3U/0XZ4xqv/X83y5l/yto1SxYvOnnhgvnzGubOmV1fV1tTPWvmjOnTpk4pLwtMmjihdPy4sWNGjxo5YviwkuKiwoKh/vwhJw4+YdDAvAH9++X2yOneJTurk7ejO9npsMfZLOYYk9Gg16kKZ92LvSUVnmB2RVCX7R0+PEf43koEKg8LVAQ9CJUcmSfoqdCyeY7M6UfO2qNy+imnvz0nt3sGs8E53T3FXk/whSKvp5VPKS2D3lDkLfcEd2t6jKZ12Zpjg5OZiRKe4uT6Ik+QV3iKgyWn1DcXVxShvhaLudBbWGPO6c5azBZIC1Swi3dhC+8yhGtC6VI8qEVhJpu4bVDNKq6sDo4vLSsucmVmlmsxVqjVFTQUBo1aXZ7Zos3sXE9L90ea17fa2awKn7XaW105rSyoVqJQs1rc3Lwu6PAFu3qLgl2Xf5yMLtcEu3uLioM+LyobNaH9Bjyoz7J7Pc17GRrv3f3lkZHKSMSQZd/LhBRdbB8mpEvN0Da0EP3LzBRtObfVz2bBCTaVlpHvYbNcIebP9ZUHlQqR8ohMSQyIlCaZ0l68wpspHlVxReR7Sn1ysGmWJ6c7Rl/7ZuGLdE9Qza6YVVUvuLKm2VtUROM2qSzoL4LwV0b6WtzSMxf5KyvQidliGErLgrnehUGnt4AyIOARz2D2xDKtSKRY0FkYZBVVkVLB3OIi0S5PcXNFETVQ1OUtLdvG+oQ/bOnrcW3pw/qyctGOYFIhHkp2cXNZdW3QXeGqxvys9ZS5MoP+cgxfubesplw8Ja892PVD3C5Tu6NWCn07KrfMLHpuzDJ5yhSXWi6eFgKeEly8BYORYMfj0lzxRAsGe8q4i8lsuEskh1BH1ANHzSocLpJUUbRwuCuzPJPsV5rkirRJnxU0HVaXHYH2NtF9jts0yi0a1NVTXFN0WAOPqFQfaWCktmO3UxFjEbkxSpjE4xwuk9QsrFzEFFSjhcRTTPYE2XhPmbfGW+7FHPKPLxN9E2OtPd9RE72jSqeUaU87MksmHeFReh55QZaJZOkohZiDJT6XfKyaP0zz293hRyWPkMle0a7m5uoWpmaJqexq4ZrQF55bHhznK/cGZ/m8maKdOd1bTMyaOamiEGu1BNudt6TS67F7SporW8NNs5pb/P7mhcUV9YOwLpq9I6qbvRPLBru0xk8oW+laLu4dz0bxUZMKUJXCClq8/OzSFj8/e+KUsm12xjxnTyoLKVwprCgob+mEtLJtHrwAtKgioiIoHI9wRE0T4Ji0/K5tfsaatFSdFtD8qlbOtJhJxjiralUoZqcbZWs38uOsVNWqoxS/zK1DzESxJsrdJZLbhBS7SNnO8CJhWiJZCxMD7Dfr/SZ/jN+q2BQMqQiFENmOvDGcbbFyG3e1oM4JWriVN7XE+F3btJomRHI2IaeINbXH0HKR7bCKcD/qeOBQDwJTyrZYGerXrshRIAyzMLkecwjvk2JPtZh/K8rrmyvKxe7BkjBX8eVB7h3Cgop3CFpssAbN3pqCoMVbIOL5Ip5PcYOIGzHzeRLHwxabbnOFFxsxVkwZc3Faa6qo0tMaDk8qy3zBtbs8E2tpGjClLBjjw8tNnzUS+YYJVCA8LNhUVSnawQJloqwxa0RVOdalrBBZRgRjUENMpAbkKNHKiPWGQlWYa5VeTSKMraOpPFjuEzctm12urVd7kA33DgoasqlOfba4UW55c7y3t7b5YK2bs9YJikHb2MQyirjg4mblNEhGK1pe5UVSVYWH5shErGV6WZhdFKnBnq/LrtFgdkUSmeiWmmWxmYMxPVAhvkJbeog9R59lLC+nxmveukgG3NsetKBF2YcNZaQARgdJI0Rb8F2Hpoqsj4pqSlvZBO8ybJ2i0VpNRiQHbVkjKvF2o/IWRLx5srBJbIKWSB1PUNQoem7FuGNLaA3f6j018zDD3iHefmL+Mdc2LFRW3nx0IDjVl9PddHTUpoWbm022Yxeg8TLZ2lkLKllV4q0AFhNOm2+eYvGq9I5sUcb6NOYaN4/04g2iZAngoKNi+WR6qstFLjR5vLaXHTcTPyyTeE1rlTfbT5Aej3j0MJuDdUe69e1uiQAOg1k96AyBroi9FnNljivYgJkps4gn4mn22L2DvOKiFR4mUIGH1L4sMP0x68SiaarylM3CZEeFJRXNJc3iiFpVGRm2yJ2C831HVIl1wTF5UJHoTrBpvKei3FOBoykvLcvMdGE1gj21OKd6K8WrYDz1Z/wU7ahS2SymOMNJpdwVNOLFVFtZ483EGyQodiAafdFGXWTZMFdzs7c5qK3bEmRG9dlYdiME4bvQ562sEUfoWnGCrtHKlqC52uiI2lzFXqzlGoS1scTAYeubJS5VzeKAPr3Ch5FwNMc3ewY2YwuejreHLrtqcgVeVeKN5NEedaULHgZhhPDKURFljMkSGWkJiNbM87VMN2YdimjfBT7KbNJqRcsmlAXHyyzaehLiZF9Q6ZCHRNF5PmFKmdynVJE8AsPrx6xyidKeoDKpLPJ4tPIjRFGXfGBUDBHtHRJZX+1vG/kemubCmB43jpeDOnSi8ozyFMtjbuXpCL/H8pS3WUB5C/wG+M0Ivw5+DbwT/Cr4FfDL4IfBD4EfBD/AAkynvMP6ApMAtV1VAzcBOwE9m4uaOLOgPGdO5TFWBFQDS4CLAT3yPoS0m1AjZx7lrK0xyXwkHuiZUpwhxelSNEmxWopVUqyUYoUUp0mxXIpTpVgmxVIpTpGiUYolUiyW4mQpFkqxQIr5UsyTokGKuVLMkWK2FPVS1ElRK0WNFNVSVEkxS4pKKSqkmCnFDCmmSzFNiqlSTJGiXIoyKU6SYrIUASkmSTFRiglSlEoxXopxUoyVYowUo6UYJcVIKUZIMVyKYVKUSFEsRZEUhVIUSDFUCr8U+VIMkeJEKQZLcYIUg6QYKEWeFAOk6C9FPyn6StFHit5S9JKipxS5UvSQIkeK7lL4pOgmRVcpukjRWYpsKbKk6CSFV4qOUmRK4ZHCLUWGFOlSpEnhkiJVihQpkqXoIEWSFIlSOKVIkCJeCocUdinipIiVwiaFVQqLFGYpYqQwSWGUwiCFXgqdFKoUihRcChYRPCxFmxQHpTggxX4p9knxsxQ/SfGjFD9IsVeKPVJ8L8V3UnwrxTdSfC3FV1LsluJLKb6Q4l9SfC7FZ1J8KsUnUvxTio+l+EiKf0ixS4oPpfhAiveleE+Kd6V4R4q3pXhLijeleEOK16V4TYqdUrwqxStSvCzFS1K8KMUOKV6Q4nkp/i7Fc1I8K8UzUjwtxVNSPCnFE1I8LsVjUjwqxSNSPCzFQ1I8KMUDUtwvxXYptknRKsV9UtwrxT1SbJViixQhKVqkCEpxtxR3SXGnFHdIsVmK26X4mxS3SXGrFLdIcbMUN0lxoxQ3SHG9FJukuE6Ka6W4RoqrpbhKiiuluEKKy6W4TIpLpbhEiouluEiKC6W4QIqNUpwvxXlSbJBivRTnStEsxTlSnC3FOinWSrFGCnns4fLYw+Wxh8tjD5fHHi6PPVwee7g89nB57OHy2MPlsYfLYw+Xxx4ujz1cHnu4PPZweezh8tjDF0khzz9cnn+4PP9wef7h8vzD5fmHy/MPl+cfLs8/XJ5/uDz/cHn+4fL8w+X5h8vzD5fnHy7PP1yef7g8/3B5/uHy/MPl+YfL8w+X5x8uzz9cnn+4PP9wef7h8vzD5fmHy/MPl+cfLo89XB57uDz2cHna4fK0w+Vph8vTDpenHS5PO1yedrg87XB52uGFW4RoVc4KZQxx48wcykgEnUHe6aGMQaAm8lYTrQplWEEryVtBdBrRcqJTQ+lDQctC6YWgpUSnEDVS2hLyFhMtouDJofQC0EKiBUTzKcs8ogaiuaG0YtAcotlE9UR1RLWhtCJQDXnVRFVEs4gqiSqIZhLNoHLTyZtGNJVoClE5URnRSUSTiQJEk4gmEk0gKiUaTzSOaCzRGKLRRKOIRoZcI0AjiIaHXCNBw4hKQq5RoOKQazSoiKiQqIDShlI5P1E+lRtCdCLRYMp5AtEgKj6QKI9oAFF/on5UWV+iPlRLb6JeRD2pslyiHlQuh6g7kY+oG1FXoi5EnanqbKIsqrMTkZeoI1WdSeShcm6iDKJ0ojQiF1FqKHUsKIUoOZQ6DtSBKImCiUROCiYQxRM5KM1OFEfBWCIbkZXSLERmohhKMxEZiQyhlPEgfSilFKQjUimokMeJmEY8TNSmZeEHyTtAtJ9oH6X9TN5PRD8S/UC0N5Q8CbQnlDwR9D153xF9S/QNpX1N3ldEu4m+pLQviP5Fwc+JPiP6lOgTyvJP8j4m7yPy/kG0i+hDSvuA6H0Kvkf0LtE7RG9TlrfIe5PojVCHk0CvhzpMBr1GtJOCrxK9QvQy0UuU5UWiHRR8geh5or8TPUdZniV6hoJPEz1F9CTRE0SPU87HyHuU6BGihyntIaIHKfgA0f1E24m2EbVSzvvIu5foHqKtRFtCSfmgUChpKqiFKEh0N9FdRHcS3UG0mej2UBL2a/43quU2olsp7Raim4luIrqR6Aai64k2EV1HlV1LtVxDdDWlXUV0JdEVRJdTgcvIu5ToEqKLKe0iquVCogsobSPR+UTnEW0gWk85zyWvmegcorOJ1hGtDSVWgtaEEmeBziI6M5RYCzqD6PRQYgDUFErEZsxXhxL7g1YRraTiK6jcaUTLQ4nVoFOp+DKipUSnEDUSLSFaTFUvouInEy0MJVaBFlBl8ynnPKIGorlEc4hmU7l6ojpqWS0VryGqppxVRLOIKokqiGYSzaBOT6eWTSOaSp2eQlWX043KiE6i5k6mGwWolklEE4kmEJWGnH7Q+JBT3GFcyCmm99iQ80zQmJAzBzSasowiGhly4lzAR5A3nGgYBUtCzlWg4pBzHago5FwNKgw5m0AFofgS0FAiP1E+0ZBQPN7v/ETyBocc5aATiAaFHGJqDCTKCzmGgQaEHGWg/iHHFFA/SutL1Cfk6A7qTTl7hRyiYz1DDrE2c4l6UPEcukN3Ih9V1o2oK1XWhagzUTZRVsghRqkTkZfq7Eh1ZlJlHqrFTZRB5dKJ0ohcRKlEKSH7dFByyD4D1CFknwlKIkokchIlEMVTAQcVsFMwjiiWyEZkpZwWymmmYAyRichIZKCcesqpo6BKpBBxIuYPx81yC7TFVbkPxlW7D0DvB/YBPyP2E2I/Aj8Ae4E9iH8PfIe0b+F/A3wNfAXsRvxL4Auk/Qv+58BnwKfAJ7F17n/G1rs/Bj4C/gHsQuxD8AfA+8B78N8FvwO8DbwFvGmb637D1sv9Ovg1W4N7py3b/SrwCvTLNp/7JeBFYAfSX0Dseds899+hn4N+FvoZ2xz307bZ7qds9e4nbXXuJ1D2cdT3GPAo4A8/guvDwEPAg9aT3Q9YF7nvty52b7cucW8DWoH7EL8XuAdpW5G2BbEQ0AIEgbstp7rvsix332lZ4b7DstK92bLKfTvwN+A24FbgFuBmS477JvCNwA0ocz14k2Wu+zroa6GvAa6Gvgp1XYm6rkBdlyN2GXApcAlwMXARcCHKXYD6NprHus83j3OfZ65zbzDf7F5vvtW9Rs1yn6Xmuc/kee4zAk2B0zc3BVYHVgZWbV4ZsKzklpWulaNWnrZy88p3VvrjDeYVgeWB0zYvD5waWBpYtnlpYLuyltUqa/yDA6dsbgzoGp2NSxrVPY18cyMvauQ9G7nCGu2NnkbVuiSwKLB486IAWzR+UdOi4CLdCcFFHy5S2CJubg0/smWRK6ME7F+xyGYvOTmwILBw84LA/Np5gTlo4Oy8ukD95rpAbV51oGZzdaAqb1agMq8iMDNvemDG5umBaXlTAlM3TwmU55UFTkL+yXmTAoHNkwIT80oDEzaXBsbljQ2MRXxM3qjA6M2jAiPzhgdGbB4eGJZXEihG51maPc2TptpFA8amoSXMxQt6uvyuD13fuHTMFXQ94lLj41LdqUrXuBReOC6FL0hZnXJ+ihqX/GKy4k/u2r0krsOLHT7o8HUHXYK/Q9ceJSzJnuRJUhNF35LGTCrROL+IuFc/ra/uJG92SVwij0t0JyrFXyfytUzlHs4Zt4NUE/Js5YnuEvVBLn7pTs8438gm+Ua1mtiEUUHT+KlBfnYwa6K4+kunBA1nB1lgytSyFs7PK9d+JyHoFL9UovlrNmxg6QWjgukTy0Lqpk3pBeWjgk1C+/2aDgvNkKXcN2Nx42Jfmf9E5vjQ8Y1DTXzY/qJdiYvjcXHhOMUfh8bHxbpjFXEJx6r+2F4DSuJsbpsiLmGbmuS3ISL619k6flJJnMVtUQL5lnEWxW/JLyzxW3J6lvyin1tEP+nOviUzcJmxeIlP+8Ir543C9Ymo+C5eAl98GjWf+X7VKBto5mLYEhlc8uul/q8b/2834K9v9Js8Q8PKWaxaORM4AzgdaAJWA6uAlcAK4DRgOXAqsAxYCpwCNAJLgMXAycBCYAEwH5gHNABzgTnAbKAeqANqgRqgGqgCZgGVQAUwE5gBTAemAVOBKUA5UAacBEwGAsAkYCIwASgFxgPjgLHAGGA0MAoYCYwAhgPDgBKgGCgCCoECYCjgB/KBIcCJwGDgBGAQMBDIAwYA/YF+QF+gD9Ab6AX0BHKBHkAO0B3wAd2ArkAXoDOQDWQBnQAv0BHIBDyAG8gA0oE0wAWkAilAMtABSAISASeQAMQDDsAOxAGxgA2wAhbADMQAJsAIGAA9oBsaxlUFFIADjFVzxHgbcBA4AOwH9gE/Az8BPwI/AHuBPcD3wHfAt8A3wNfAV8Bu4EvgC+BfwOfAZ8CnwCfAP4GPgY+AfwC7gA+BD4D3gfeAd4F3gLeBt4A3gTeA14HXgJ3Aq8ArwMvAS8CLwA7gBeB54O/Ac8CzwDPA08BTwJPAE8DjwGPAo8AjwMPAQ8CDwAPA/cB2YBvQCtwH3AvcA2wFtgAhoAUIAncDdwF3AncAm4Hbgb8BtwG3ArcANwM3ATcCNwDXA5uA64BrgWuAq4GrgCuBK4DLgcuAS4FLgIuBi4ALgQuAjcD5wHnABmA9cC7QDJwDnA2sA9YCa1j10CaO9c+x/jnWP8f651j/HOufY/1zrH+O9c+x/jnWP8f651j/HOufY/1zrH+O9c+x/vkiAHsAxx7AsQdw7AEcewDHHsCxB3DsARx7AMcewLEHcOwBHHsAxx7AsQdw7AEcewDHHsCxB3DsARx7AMcewLEHcOwBHHsAxx7AsQdw7AEcewDHHsCxB3DsARzrn2P9c6x/jrXPsfY51j7H2udY+xxrn2Ptc6x9jrXPsfb/2/vwX9zK/9sN+IsbW7z4sIOZsOSZMxhjxmsZa7voiP+LZDybwxazJnzWsg3sIvYwe4fNYmdCXcE2sVvY31iQPcqeZW/83v/j5vdY26n6ecyq3scMLIGx8L7w7rZbgFZ97GGRi+Al6DyHImF7+KujYl+1XRS2t7Ua4plZK2tTXkH0e34wvA+vXPjh/sJX1kHHaSW+NV7bdnfbrUeNQSmbwqayaWw6q2CV6H81q2ezMTJzWQObx+Zr3nyk1eFaC28mcmF70fShXAvYQmARW8Ia2Sn4LIReHPFE2sma38iW4rOMncqWs9PYCrYycl2qRVYgZbnmLwNWsdV4MqezMzQlmSJnsrPYGjy1dexsds6veue0q2Z2LluP53weO/+4esMR3kZ8LmAXYj5czC5hl7LLMS+uYlcfFb1Mi1/JrmXXYc6ItEsQuU5TIvUB9hS7h93F7mb3amNZhVGjEZHjUquN4UKMwQr08MzDWkzjt7R9tFah76JvzZGeLkP8jMNKnBIZR5HzTOSkWug5iFpWHjUSG9EH0od6RN4lWv8PRQ8flV+LyvG4+rCRuUrzhDo6ejx9KbsGK/B6XMWoCnUDNKnrNH14/Nr2vJs0/0Z2E7sZz+JWTUmmyC3Qt7LbsLZvZ5vZHfgc0ocr4rvYndqTC7IWFmJb2FY8yXvZfaxVi/9a2rHiWyLxUHtkG9vO7scMeYg9gp3mMXxk5EHEHo5En9Bi5D/GHocvcpH3FHsaO9Rz7O/sefYiexLeDu36DLyX2CvsVfYGt0G9zD7H9SB7Sf8xi2VD8eP/dozz1WwGm/FH7m5Hmz6VJbJN4Z/CS8M/qcNZLZ+EA+QdeEpb2Xr8xD7/UE7uZmbdP5iTbQ3/oE4Ddzn4tr6+7Ybw10yPXXOx+gp2OZUZ2UA2ho1llwXX+MoeYDacUpLYIH7PPYlFRaYc40M4gSjMgzOMiXFe6I/TKbb7UlPzvff1M2xQHSNaec7WfOMGnM7zD75/cEfuwfd3xw/M3c1z39v1/i77tzscA3P77Nq5q1dPl9+ZaruvAUX7ee9r6KcaNjSojnxR3h/TkO9XjBsaUElyvi91h29Hrm+HD9X4evYq545MhwZnrGI0Og3ejj2Ufp2z+/fp03uI0q9vtrdjrKLF+vYfMETt0ztDUZ0yMkQRPldfOTBFHXfQoKzy5k/uo89IjXPaDHolLTk+Z3CWfeLUrME90o2q0aDqTcYuAwo6jmoo7vi20ZGemJQebzLFpyclpjuMB9/Rx+77Th+7v1DXsP9i1XDCtPxO6uVmk6IzGFozklO6nZA5YnJcgl1nSbA7kkzGeIe1S9G0g2sT00QdaYmJVNfBMRhOb3ifbpXeyTqybPauGPdtrFP4s61WOx/tbY2I7NbwN1stEBYpzBD+VKGy7OJq065W7ervwrNEcncLH9PJm521x2qxJndM95ptPElnZVa7Vbnb+7D3Ra/qtXqt8ekT4gP6AMvPz48fODA3d/p0R4eBDkhHH/vu3o4+vXpy3/TI29/nc/kzUKU1a0/D4XUeXk+yrKi9Gh9qwcPLSkoyaE+ss5qpxqrejtnZ/QdwekwdjF41U9do4vYstzsrIUa34OAnc1RzgjctPSuOm3hIZ0vpnOHplhqrO41/wB87MckVq1ON1hh+QtuzMbYYnT7WlaQLWWJNqmqKs2w4eBpG9g7GdOdjXsczN7tcjKw/PT+TJyTb+ZgEexwuThsu8VZckjFUCffjB2PGUsOfbUGOVIzglrgI2zT+YYtV48+2IHfq/fgRNoYlc2sottTVyrNb9JNY/u58zPZd2mDtJOrVc7qrJTa5lVu3NsSW6kXOUAOyYnLna1NaTNDMjtn9HH3798nEUBj79lC8XoeY0brzJ9/8zS1tX3Xo2rUDz7rts2tK7+m74Pa1d7esuH3RQOXK2/bfPMHdWXdGZ/dJN352xex7zhp5wDGk6VHG2R3hfQYfej6Yva71214xZOEQxdazZ4fcXHOP5GStE7+nk62KAw+8l9VqFqNmFqNmtiOj2YxcZjFq5u0YBxZ+xJ8Ch3XqX2pJ7mDLTe7Vw+DuUuoOyKmVH4/Z0Cef5+700bhgTtjblWPgibl9+oi5Nh1bwzHrSD5UiZhLclk7vFxMJUwq7nW0B/uKHQGzivcR80vIRIPP5HSndMhMMCltfVRLYrozMcNpUdqGcZPTk5LsSTB2d9V7enZKjuFL9XytJdWdnTIvzpVgTTVZjXq90WrS1e2/2Gg2qjqj2YBlf0V7/JZunaypXVwHTlJvyeiWYolJSE/E7LOH96kf67JZJ9aFnSyewj3JHTpbs22tCvfHdMj2IG7JNrcqJ/jtLDsrvVvnn6xYQzXx9fp6Wou5u7F8eEpu8s5djoED4wem2t8jIfZPO0pYO//UcKgMrbtcHwodsdg6ZxqPXGw6bbGpbxtVe3ZmZpbTpJ7U5p+gMyd0Skv3xiomPltnTe6ckeJNjreY1JXK3bxucBIWnmqwxuz+IsZqUvWxaYnqk5ZYo8qxTVpNTW1m8fcNrmdMPYAztFhvQ+gNkqAMFEtKcfpjYpJ/jq12/ayvk6uEXgTW2OSfG2Kr9a6fG5B0xKrwHntVqAdGND+zYb+zUycndzQ/emZRsEtgXcMFG2vXlndX3OufXzs0PVO9KTO9+KyHV01YXzfowFe9ai4Tf19BtC8W7evOykTrWlI7t6JhzhhPgieBxaT+mJ1tSPnJVt35JwO1kd5dL4i9zL6rt2hsQnbqjw3IZkv5qcFWbcD4GyJtjrygso5ezYlawHGURDOMFsPBT0UflHijxaiDb2yr4HVGi9jBoK/gtxoQL4pPdRipP0a7Kz4+Jc7U9rzRnprgSLEb22422lNEzxrCX6lf6XozP1soerYlIyMuWfwuDusS16rk+c39vHtT9Pj0NIv/GDmo1tnK41t6zo70UvRPeyBPYH7lin5aUrx7G7QCg0SJrQ2DanuKMqEGFIr0F6XanxTmmXj1Jjoz8JLtP8DR/sbN7J2U6HAajLRGIy9hnfqV3hiji+s1et7oyc2VfQdUnVPao7Lzl3Ic+Mwkj92ROX7S5K6rn10/YtzGZ08rXBQY4DSr6xNcdlN6VvrgOZeUz7q0rl9SIs/AEIhhMaa726qc6cb41ATL6PVPLV+9Y+O4RLc7wa09+fA+PgprMZF1ojcsU5xbzfYabamh5+jzFs3DIjpid4mcGhL5KG2XyHSaYpye5BSP09RBtlb93kDKwMJh5sCdpunXKNk4jTJmULIdkfurG3D/PDaD7u9VKrbm5CTl9XlIORFvfovixEHLrFT5bSypS01HiyOtxtG+EQwU2ybOT7135WKaaavGcnimyBv38JZ35o5f9MERedeKeWjkPENVN5gSvClpnTrY9G2rZP9Mzkytf3yBIS7Jk5zaMSFGNVhi2m7lSw0mg5pstBrFi9ekOA5+bfrFELT1488hqoqowRLrsLQtbosxxdrMkfWnvIVRSGZ9aRQS8BSY0VaDqRXbotMWHdab9jRsNToRDTXoaIFpfTNElpbskFhKylv2uDa3s9OhdostubhTJhbN87JZB043Olz0HPQ12AHy2BzRgq3dE3M649Uc9sd0tOWac3I69jULz8E69qvOSbKo6dnV6fX2yIMQbx/tSfSOx+sKA45NAfuxeBxxR2eXb6uj31WRPfl/2PsS6Diqq81XVb3vi3rfqtXqTS11q1ut3ZZasiy1NsuWd2zZli3ZyJQ2S7bBGJKYJeEnCwYcfkjOTDgnk2TOTAI2BhzIxhmRdUyWn2EGAgST/IQlSkJyfkjmx9Lc9+qVuiUvccjk/OfkyNd69arq1Vu+e9+999163X01W2W3yUeUVt7h4i1Kdv5uWSgGXqOam3+QVVp4lytgUUacQqAiCIYqLmMyOlcw7t3vKivI49EPbtfpOIVawR3/4K7Fq98r5bGRuphlv+8vd2v5Ukkufw8caUK9RCMGLXhDl1dWdY75EYiit3ZEW+7ghx3XcweKRTFD1aG2+P4SKVRg5R1lIpFoqARz6pLRWu12R3WSKzCT+32pezoQMc2/GeuPMgzLKM1eu9OHR3vc7Ckxq+YTm+MsA/8UFq/D6TMr2kr5QJDV9jzUW9rd01168VvFY1UZnab5sg0PD8Q2b94SY/4NrJRMBgm2U/sXfitrB21pRVGUx+P+Niphm2C6+iHVIBdjPGPcHzrHGE/LR5cYq9NGF1w9Kxj3y/Ft8ONGl1qsooUGMViLOhF8ufbWj3zj2LEnb17V9tFvHDv8+PHcmWD3jdu23dQT4nvgeKw3yPpP/PjkuvaP//DOW8/fs679zu9+Ztt9wqrcxH0bdnx2rKlt8hToF9J3+W2gX34IHVayalgHE9sLnPw8SHY12IBhcXZpWNvZtClhzuJNq5EmMzZ2Rm/C/EZTk6PhPcw1Ua6JnWuAMWaevwAMfIEoGEuiyfyGACX5hvcEWhZzmBi6hmJNE01yoaXiLBk7pZ9zOOx2rsh0f15lC3s9QZuG22Isq2rNHpDUDthy9547dlT5anrTnspw0LRdo/yNraond+rTzesyLqsSxJlTG7R/KG9Puef7F1n9o6Av0nGgNbtlbcakDVblYm+5XeyroVUJ1/zXXCn8HQNdC79lPwBu96DbRVzaWMvjkWwka/DhPbrIAMKuz6kbmv/sWyNP7AcFYH6Ct1ZZWStoBj0RgYvPD85h2b74/BwWf2L7iDw0kGf1QkOi+c8CedyKn39MsMrxw5KAzCbw03AoyIlCkhNx5bp4rrAttacK9oOm/Z/eWL27t8aklLMs+Afayo6hVZW9dYFEx3WD13WWZ3cez5cPrEkbyH21Uh1fPVAdzVU4Kzqv23VdZwUT7Z7pr7B4vLA4tJlKfCVqX8hnjzdF4qtT4fLqtUOtudHuuMnuMmrNTpPVbVa5fW5buNqXaE5GY5n2XVhTeEG+mkG+eNRINAWSgTg9ZjfKTKClH/MMa7AozWWY1Oy7zwIyZ2QefOOsQO6A4CQyZOygwQuiEix4CeASNRsN8xfUlqDLHShRzV+QHCH2Tcxr7ufh4AcnFrl+q8oMvpDHrMRqHaR/58Ic18L9kEj/e2TFwxvbAm2pNk6rdmR1sFbJ4lVLFi9YsiYjrJGz55j3cwYUjRrx95bhdQ1qxIsgKNqIFz96etSKx7P4mcZzrCpXYnY8i7KmLNv0nSyDskw2m2wtP8eADfhJKVNaKvO9nexe/bKuT4ZS1IccxH58anBq16C0NpxN7BpsSInLnwwYkF2w6tFrHUzW8ayA6yslFdoFVAqLa6gz6XtbSHbrVr8s4HqdKepw7t41iL39VGJQ1LkK7OXX1Ig2hgBbXUO1EL0iI6pWKcqWHbtqXIvJ63EHDE0nN3ROb6hsnvnK6HF7el3D6qGutE6lU8uUnrYt+7NDn9gU+eKn2ofbAtvXt06sdup0CoVOd11LR7hjf2vvZHe4I7u+xgNypTK5jC6fO+SzVmy+ddOso7Il3rGxrR14tAd49Hn5GIqgBvQNwqNASxOj9TRgzjTg9WSDyYQT4EUDZlTD08yfQbelFl7D3EjRJWuKLllTlFspyqXUOVaT01iDHdqGqEdmKMcb5ZzdwGbZY4Y+eS+WTuAGseBL1ucYf4BfIz3oxE+eFZzdBvwsrNnxw1iAAfJl9rwY6YzdUTBlkUix5q/jPg+2rATHfjof3LHvk1tjmb0nd/ffllOWBMBlsai/tOaW9pZtdS5bdktrcHWuI+qCpSUIuk51tG9L322n9848fXvn2jWsVqnHK0698uLajVtX7T2eaz8xstpSviYN6A4Cug/CDEigLHqboFueqm2pnajlrDyOcvA43mENVpgAsgqMbgWGvYLMhYpzzJ8fb098McEmANTHoWQiKzsnwg7H32KYybmWHMXJIMN4B4MV3/uo7B4Z+x0Z8xMZI5N5Uy9Hup1v7zFMGliD+m1vH1WeZB5MHZImQOaVxCDJYOklIZJcqazie8IRUkck9bIQ6TY43xaQwWRgjZzBq35bgLqwKsVCT6R/MCFpFIoz9W0VxVbYFq0lvFByD0ZdF8/4OyY35Ia7UjrwCTmWU2prt0zlJr58qHHV1Bf2HTy1p/JL3E1HV+9sLmVZNhrsuXFL0ua2KQ0ui95q1GldTmvzsXPHZr7+sbXt05/bZj1xf7J3pA5/v1zN/H3cXdz3UTNah3YzdoK/zVLZiWW5UwXwdfImK9PbWd1ybuFPGM4WKsVwfO0JfKtF2Q/ZnN5oYXr7PTJjFVetVGLMQeQ9eH+WHjKV1UqPR1ldKUO4bBYHXLbhJrbxJnhsW3k4p4Vj2Fil5Oq7X9JtfNNm21PPvbUqX863vVjfveNFvp8u+VqITpp7Ac8IJpWoPo+VkgPMGizqQKc4GkznE/A/ISXYJYiSenXdLwk6m23jmwKufBX3loCrr297Uajv5ne8KEATdIHYIion03fxxKG8CtntooGLRBVg6uwOh5+zFXlOdaDAsrUkFScVLCCZbGRRYTWz1mwkGjVw9Iy7y2r8WMibGfzourp9HoujtfadNZMDyewNX5oae3BvhSmY5tOpTDhQlt35sd54Z4Axmc3z8yODVZ0px8iOdD7l2Lh7w1t83Km+/UjPSLOHmwkFyram1t24scJntyT9oSSrYYOrtzc1T25Oh3Pbs8Hm+mqXq7di9Z5IeLCt79imSrUqOP/uzgN8fVds+/5AXf7irsYWVuWqjMdsrWt8Vc3YPu0B+fg8zM7VaD36OJaOMxn/evz5ZGQwoA48k/QxHxqo78o0r/fLQq14X29ldw8cHg/1Ot+Ri2wT9Ze5uhpm0Sy2Hxmy+NAXPVmJHz0rVHaH8MM5tRDqlTvfEeSUKaIOgxoKamypI1KzZKHOOmqurNPqhIeF9L6NtSUqjpXBakNd2TXanhtq4+PdnZ1RSc3FO9d2xlUWrP7MyksUXXjswT0VWotNbzSV6EqghNVlda8e6R2JN5QZ+257ZO/0U7d1msNN8TG16A6o598nqq9l7YnhVZY4qD5A9w5Yc2+Qp2B1H0Rfxug+2RLqD02EODu15HYa1iTnVnIkE8tOZ6Gd2hD70+wU8iKbGAy10ads9K4Nx96x6rOdY/70hCaQgyfx9vizLlMXMTAvzCWofqO2RQz+unChxwWxFFiS7yYuG2Kw4tcZWPpB7JlmlUUMSsJKENsIlbWiqTGB/1wqLV7JABy3K8U1jZKpaiyPN8Af+GkPAhbN3DeKIh3Mn85qaAelSAftyOUjHZc0XdQiMAC8cK0KiS1xx+VTYG8eI/pO11LLxNNMOmdh+tLnFn5CoEpTMwLHtzGWaWpG0k+zUVSKdBRRHY0/6yjkOgq5DpDOue2VlQiDjXJwC9lLtfJYl7fD3EvGRBad4HYmEjAj3iXG5TUJezAr2uLSTlr8mgMlCiXDwALmuMpa6vaEnEbF/O3L0WE2qSyuUqer1KbWG+efYsb1WjdebHJKvZr5w7xeAk9eLy1BP/gZc0SjByCVWrUOVqlPzYfNNiTxDhC1oQ2iFDv6HRMODlFwEAUHUXCQJI/oHOFxh8RjSfIeI5c+BKMLfaV8/gLorgw6R/hstJjwyxKctGSZcivuHX6jQueSlfbWSntrpb21YlZ6/Frs42mx76HFlkuL/T4t9ke0cP9JkcN+WDoocprK7nJXWZeLshnbLAaskziz6KsD7Lvhl1KnK8kjWqHoGTEe0bJssmF3WKG8lOe22lpRz30BUCFoOJNdVc3H2yWQcNTB7jMpex/ou+7m3uAiVqyxb1d72bbNF+++dJoc3dy/ev9de7COug78s1cBRRxz+AHB0dsSZ2IWJm5mInomomMiKiaiZMo5Js4yfurs+imofjqN/NQb81NQ/dh0+FMaRlOC38+UYEhLsL9Xgt9qlWBcS55iNfj9zJNG1DcJ7HThT4kYu0PnGPa0vI+GNwYprKnBxZdW0j8x6MGcFYzdOOjBwpq275qDHtyrjdNfPTTxX8ZrG6b/+zQc677maT7YD4Yi6Gk52J8/2M4z/zr+9Tt72m49ewiO3XA83nVib0N294m+7hNDDdldJ3BUlaAn97MR8g3ESlaJ7kZ0xrBfJuu+O0k8b7KGiRip4BkpRkZpmhipZBqxJFpQzoo1ihkSDBhyw8I9nFMnuiNGG99lwzKHo1lzRLWI8JCVwukEKagRCiWdYtHl0fDLSRlRLAr2y6xCrVI5fGU2V1VNY2i5jIVbGxt8+mCZTyfjGG6v3W9Wq9WqkmRv3cVHL5Wy22rbo0ZOpdGoDTjGuWFhjn0OMOliTKJeTvW09PT3fKTnkR55K4WglWLUSuWrFe/qt9JzEz1q8ZF5ORcoy5RldB48Zz14unrwFPbg+e/B8uZ5Cn/5NXioGqyidTmituE0AvW16B7RsbrkK3Wad8zrzXvMk2auzlxntq/6eatHHu+2vylKIKA3Zybvnk1zJiKOCek1oRhrKVjTXLgu+Ypg1rwjILPJzJs5g1hjfNXPBVKn3P6mJKE45kKqxWuGIu7Irjn28lz1rhPrqraurbJrZAqtUpto2VJf3p7xRHPrN2/IReMDNw+U5RvjNiUH2lyjUJfWdqXKc3FbLDeweWMuyhjWCiAlDldJWcDqNik9vMcSqg1HsrFAaaJ5y6qaoa4KncVm0hntJvw+x+6yW0NV3mhNjC8tX7UJidyUj8kn0L3oj2Kksp55GY2gnYB5K5pkXjtbFrfefAe4krlGo8s41jrSajUara0jsr6Pob6b84G5wx31Ow929LwzsH5gz8DkAJccSA5srf5B5GD31jc7+u4wzrnyd8FC97Ra1AUZSKoXmWEmUwDHfGct4urAgrcFXMiYXn3+ggkI+5/Zm/OHA3OC2NBAD3BmwDTADwBnSFsHq38gQGsdW98UoD2XcU5w5dW4yTOCmmqSDCTVBVaRVmnIny7nzMQ1Ko5oYBWznF+2q/LX7pCWFXgmUgOPQ5d2afUoH2Nh1R2Ipeydwzn/zUaLXKVXHXMl2+KxNVXukE/F4fBaaU13MZOvLiKV629odiUsdkfVzts2DRzfVP6GSq+WWYy/rs3bw94SpUKlkO0w281arVGtCPdMr2MNfJnVbVZ2r9pa5/GmO+K5bi/vv4x0NF5dthqH1kYUCmc+0jaxIZnc8rHNu5Rmt7WMn9cM7lZr1HKDE6QruPA7dkz2VdSI7iL6M47MoUqqEyqprqikuqKS2qRKqlcrsRrVOfSVc6G8Tz/nyKexGClFMTqPFWc1jbCcnyVvC6DqOQHKOnIO/ZzgyCvTRAiUVAjcpvOSsZZdwvOrcY0dU5n4eNLRMZzz3Sry7BbJpfk1DmEB2nWdjjJviUqulst2+EpNhqVYv6CEUjK1DjLLMALbAxhxv5OnwPZ8hdieMPufiO3B118G7FrR9WRFl2o1YT8s4fcnjHg+6riaRGvelJhrqsmX4DBUuE8thqHOwyxjUplXLljIIo68cdVD0ZrEnNCUq8mHS0jkiZQnkSf3eZgiWH+Rt6mL4dMiDGxXA437it+uIm+UrKr5VBEUV8aNe9Lj/uCBRVtjKyBi8QXNV4SP4iL7qez/gJL6EsXFgL9ZIbFuG0YloG/Te4FQTWITWpdvzTc18fmqPJvfZkjM1eQtWCTCfTuLRAl0UmZ2sCGFXdvZVLW4tYjoIAqdS6wG5U15Vsvla7YZMJAAo4XCqNy5RNBA32RMOI6E61wicMsQvVT1SIgGC2uFy0mk7Kcqsz+OtUiLf761CHCWUxr9sctDznwbeOQEN0D1BhFaw69rO0FF2EBFYKENmgwainoRM8wlZr1efyV2MIy0R2V+4fKSrdhIJPusKNlyVpJsRStw8KC4sjsTaO4nAn0wc9BwcHDwoIHzrMPfmdGWxiuPM2HPRsA35xjuy/c259P5RIKvr6pn6/uRZy6cl2FW2qhxoYxsEbUDngHEqhB2Yl6eHiZV+YVCXajeVA9srQ/3o7BnTgjnbTLCTZtkOwq8bBFdsGudFsHiF8l/eWIxI8Uzxxy4wswpsJFd43NA3uXgS5TzqSJmFoSDSxZPrKvopWJOXnlmFlWA1xzt7LNsTu5BlaDfP0k4qbQ14q9WQqEQyp5jtud8xvApnvfYTvJJpiqZS7LJpMZzKjZVd59mhpumMXMcuQWPAO+FKQ47hfnwKQEeTtpOCihpSv4+yek4eD7mOSXEpjR19wmkDho6p28r6DZOMdRxhTcVBSNd/KKChcVj0B0ebKzoqQ3EeoQ1m/SB6kh4VaVfpbcYmoZXtw82uO8ciDVFLJmKipYy9pc6nVZfFY7bK1rKk2sr7SFPuVdvsZlDXmuJ3+mr7Ut9VGfn7dFoWRSwygNWxxRmVIZq0HUEK7Wr5mkG/+RKJXNXzmQOjLnUXOxR+1Tmc7oibMj7hOcpJFZSyB57VLBP6TKfE3TFAJB3Bwzds3pNrw5g0MdcQbPdqEgNrWrb0eDmW3e3pAdiSqO7pMRtUnwi1hkrywaMOn8mUtaVZH+l0+NAXGsqneofXdUx3Z+IRJikXCXjOJlKPr8xmeSza0JlHTXBRA2Wj04Y8zjIRxgl0XHyVi8pw1+Z5jGbPZFzzNacA3ms9xsM6uRJHgfmnfF7+Sn1KeeMtDtqanF7r2jJMAYBg/V+AZ6RJUEsZIyHg+f4+L0CP+VUnxLgWWeRPFgK8lCI4tvFORe5JIbPjrut8yct8bZ0pCUT1GhUhtJEuo4/dSrafUN7B0ynj8vWtoeyZVZWhtyu6Opyu9aos7q9LoNOLb/3VMfUuvJYx65ac0ePI5b147h9OfM+OyJ3oVWoF+1Ab4ge9gamHcWQhRlACbSW2fhkOgEU9qzGX86hRH1PM1uRB21ituRiYdn9DROxDffnbOttrC1/0phUcrW8jtHp+NzJ2il+K7P1ZI5nePzZcJU2zx9BLYnBuSkRO1B9cy8MzjXQ7QXPv3zBLG7FArf6FeJYpxtk9wvQgG3D/QKymaAJnS5/UiCtvEZaqc2dFHA7ADXP6LmihgDlwpsSaCph+u5gQlqj/qU4fO0lYXj4U14ahieP4jN2RK/usRiCzVtqAvUWjT7C35fszXpDXRM9+f2t/oqolw+57a7S5q3V3pTtCa32m411nrhH35j1Jjz6ZE3q4yFnT3uiMWSU/Ry83IQzmc+49TqNw2RxsgrWFqkvja3J+uyRGj7W6ten3KEmh70hkcpXexRy53+uqjP7oiVVWZOvbP6gH+yvJ2oP8UYnj6V8iP0Rw8r/nUSHcyKH7cxLyAuWbivSoADjPusyTcrxjH61sNMDB23dTwiuHLkFc9j9HMbOesmSvq4obPtvcqPbhmemwuQusbmNcn1pVTJYmqwKsr+CiSnDs5N1gsvPspA8We73x8sDfrx/j/0RO6Sw4p8QwT1s1aI0czfeFwZdtKMQ8zjocA1zDu8Ow/HMSe+YeZr0mEY/QXzI/jCyKae4RFHEUwpNRLnLRDzrChFPpdVuZ4eUFq/d7jWr5T+Tm0RtoxCP8rMyjQVG57Eo1YYv/kirKgyNqZz/FynPeeV4OwIk86UvKjQKDo9YVWJ5dP4di1EcMfojjLgoTr31rMY0RkYlxanHxBFcFvc/Lu9XoR+FthHF9mbQchVoHdFxZWY8g72A7bacAXkNj0anyhz8pIMCKsYZ8eqWqHRD1PCoUFSiKKrIFPoUWRZUxMKwGFJkb8ZdtHqMytr6UGcMTqy4365Q0JXZU900kLYXQVjf1ZmqnL+/IC06+NdWnSxbPVCPpXkt6OyHYTRW0Np0j20JcxfeuwRWSq1xfdY4Ffpn+cyyPbZG12cF45Q89M+CfOYag3e17MPx/kP5/smu0mjv4XXd413hTxnDq5Plq2Ml+LhuM/f+msmBymjvWOeaiQ0V8Z6xrlhnjd+b7awo78j6dlHsmZ8SD6SD7EstdSMjNiw6t2Y2OlVqtPknbdOFSNu7s+LmZn1UMysU7l9DfE0EXNzezPwUVvFyldZoMxtB79glQXGFQg5neSRkNQTtSrBnPzM7DUq5Qq51xnzzX1mKeGcg5lDJVAqDA0bRxj7LzMEoWtAnRFltYDY9zlfwFTrXOWZzzod05SdfS/8+zaZr73U1yMNTmpPfMf/EzJrt92JOFHYPDS7dPpQLp8tPCny6Cp4M194rkGfNmpMktAW+gFluv5cyTHztTTYRDV4+klULDpR0KisERkBDAyJzZS3ba/imZECn4ORKmcYXqw1XNpc3d7XE+YYNGX911K2Vwx25wl6WCmQSiZbulnLuaKKt0qk1GnUOm96qk5ssxtKoN+hwxHI10VUJu1qn18Ads06uN+njbn/IaQ83Y66HAK9H5A+jDNpCuI5CgSjmuslq1AYmog+4tA9YJxIPKkUpPU82fc6+++z/msWY2AIT1ugDgsuas2ofEKwTysSDgnJmMUSQEL0o0UEwU827JEBgL6zGyPxjHlFo7P6gcc+mdVqtVtenoN7T3XCmvZsvd0cUMoWc5Ux2p1alkO3cxUScPq/zFjl46jJIbnF6fc7536YzRpnWgn9LjnuS/YLcj7TIgZyoTZyDOrYXWZCC7T2DbOpzzOrHjJwzj1pezeAtURfIlrozNg7feVwwcjm45wSLklncFSVZEHnxS0CmOVZbG4mCHWb2SrmLe2TP1MWiNfWxWA09zj+DeyXj2Wfkty3v1RDp1ZDYq1bcq+HL9apV7NXwNfWqLV5XF43V1cWYj8TramPx2vroxRZ5uC4eq62PRevocX4W/+Ih9yR5M6tFOhSTdl5PnVWoOR1G57yo6M+quZyOIPLq+WUtM8wG6cXn/COy8/Q95/xpXLeMZ3rkdyyt+yipe3hZ3cNXqLunoqG+PNFQn5h/HPqfiNfVQ93Qb0az8B7zsnwXWKc4CpPPbsjDnj5TB6iqV56DWp+Qh3PkHDsGrzxXrEy5yOL73GWfPPumEn/yy2tRmhmVLeT1hGwqg9oVCwTiTrXaGQ8EYi41c1h688Y9pbPo5AqdWffvDcGER6v1JILBSpdW66rEdmBuYY55RLab9LBe5LadHUY8srENT2hN5dDfUQSdNc1KVuAJfDHnwRsS3fj6Epcge6VOn1IaPTa7x6RgzAprmddTalWq1fYynzfiUKsdEa+vzK5mavDHYjhI2AWdSSOXg9v9Ae+LOrVaZ9Tni7k0GlcM9MIDC+8z4+g14Fhc3EOoAH/1CR3TBzzrRS3AscQz2O6rcxwOfLnP063EiwwbTzWvSuK/sc5Uci38YSTu5vazD8kPF/PKE+k0dQKvzmcIrzw5co55dT6zhFeS5Vt2xW5jb1OYHBaL06hwaEqCDmewRM3Mf3zJtaoId6fELObHUm4+vfSayYSQCe1H18l2yNYhJTLC/AygKEqhOrAnnagfbUW70QE0gY6ijzBkF3ZufP31wiah/sbjq47HJmcqZvg9w2XDqnyvrhfl2mXtpqpsSVY4PjPc257NtvcOzxwXlN5tO53e7kNH1h1pO3Zrx62Zg+O14+7rdvl3WQa22Lewjc2KZk150pA8cuv4ri3NyWTzll3jtx5RRvbvLY2g1PnUebMY3heDMeczV08Y/ITlr3kCa/b6D9e/XAQ5U+6/touEzaHSmmx1JkqPVnp00KN0X7nsfPlx+X2lfel5eFn9Unvc81XZbNX9OHm/Ol2dLsO5+boM/PtqdTpdzQ7g9KIbX2BvWyx78WtV2UymjElns2nme/jm/E6cvo9L349z3GchqYKz+f9dXZ3+BZwwD0BmC67tZkiYb2ZSNRfzkDtVVZVleVpoXgmZN/FjL2arsknILCwgL3uefV7+FnjnjyH8pvXT7E/Zd+W/gvMn6fmPuV/I34Tz75B95rQ8rE3CqJ3sUiibDfnwp9DOsXc8Zll0olOWhjnMdI2ubFZYVsAplSCezJU/qMY6lFw1+5yc0fqdTq9JIWubf2MVqzJ7nc6AlpEzGlZtBuXkN2vYTfufY98zmNQsI1cqHjsthyUWpzLr2VeUahnLyjSKh+Z/DL2noyOfUKM20sr8E/6EGrP9MbVrVo/76J5VHKL+89zzeBBn9a5ZAd96XOGeFeDmZT+ltuhCi1vd2Xez++8b+YrB4zGc3f+ZPelPexq3te/Y0bq1yS87sP/BkYzVyX7Taa0Z/tTOun352MULpWuvBx1J8UZNaA/RkZUu/LWhIfzBrW1nUKgG9yLp0HL+GM75pwvrQPHDKXMZ0xyebV9HNZcrWfy5lML6haMfoeRC1mKXWvygRrVV+ggl9wulyWWzegzKtxi10W402Q1q5mWGUZqcNry88Vs7HLzLpPgB9y9Ki81l6dZYdWr2l+Bwwj9YkeUufoPDnpZMIYP8/1i8/oLbBlWYL/6B1VvcRoVcZ9Yv+R1lHUbCQ5Lt26vEa98WiRGukd76+xD73/4jiSu7RpqhdOFyJJtaRl9aRqclkmeBDhfRRcWNRfTCIr1+KSknRFJZimjobyF19V9Jr4ukefjvT9rTEun2LKM3lpPeU0SzmAzGJXSmmIwbFmnwMvRrkUzPFch8USTLZxbpc8vJGrV+YP2gRHUJ/eZvIdsJQh/Yb7Hf4pgAesbxjLPROQH0gquS0D3umPuBv5led7/uqfyQtMNz1wqt0P8HeqmYvNkltPs/lE6v0Ar9Y5Nv/i+RX0HIcAnZV2iFVmiFVmiFVqiIDlP67nIK9KzQCq3QCq3QCq3QCv2D0fYVWqEVWqEVWqEVWqEVWqEVWqEVWqEVWqEVWqEVWqEVWqEV+kcg8YcS4e9PkEbRd5AclSMZ89DC/0QybhvSISeSLbyOnNy2hZ8wLFyfY/yQ/huznmEXXoLUDVfWM/6F30G6HlkhvWXhD5CeIOlDCxcYAUq+Aql74fuQ+he+BektC09DeoKk90ANApR8jzlC6v8klH8BUvfCryD1L/wrpOtJ/paFX0B6gqT3QJ2fhF5lmHvgqbeYh+CpX0PqJnn/wtuQ3rLwG0hPkPShhV/CeGRIx22DftohfWjhefxFN2wpwt+Kgj/oZSJocAQRAznjyOe/DLJHaZ5DZbJv0bysqIwcOWWv07yi6LoSHZH9X5pXAbIGmlcjXj5J8xr2C4vltWiL/B6a16Fy+Rs0rzcoFFIZAxJK7NJnhRhVyQmaZ5DS9k80zyKl/SWa55DTfoHmZUVl5Ehn/zPNK4quK1GTQ07zKmQruYvm1cjkyNG8hlm/WF6LEo71NK9DNsfNNK9Xco57aN6Aav33QU8YmRrOhkmvcF7EWcyLOIt5EWcxLysqI+Is5hVF10WcxbyIs5gXcRbzIs5iXsRZzIs4i3m9wen/Ac2LOP9XxKMMqkJpVAe5PvJru4fQBJqGv/1oBq6tIb9SLP5W8RBcGYXcOErCnVYkAPFoAK4dQNfDvWlyNgLHESh9BNJhKKlHecjthSsj6CiU6IfaRqCOTegmkuNRL9R8E9R7mLQoQO4A6QkPfxPkd34PLbbBL/a5ClVDLrJ4VocqSPtDUMMklOWh3SFoB9exD91Ay3bD2fVwFd89DP2bXhzPJvJrw9OkB1fqz36CA4/a4Hwv3MFXhwgKS8co1jNBR8qTVg7D3X1kvBK6R+HZQ+TKYSg1TFDj4fr15Fof6oI+YXRGyXPjBNcm8vwIKTGCxqBNjPIwSXnaI6ksT65PE56OQl8k7hXGge/PQC9G4clpQGENGc0oGcno4jiG4G8MnhB7KI5niLTBU16PQo241iEoh+u6Cc6OQm6G8AH/jvVeyAukT4cIFni8+HeyD1CkxFpnyJjENsfJiPaRno6TVqYJn7oIV/bDlSHyO82HyBh5chR5MUrGJGIxTaRiGmodovKKOTZJr0utjEE9AsFnkvZyHK6MkVbFOqcJUoUe4BYnyVik3/EWsRX7LhCpwZJwPZVc3Cv8m9X4t8BnyNk44bUk1yJmYisiH8fpuCYItntJyUKPi0eEUbuRPCeO+gY4T5K5W8zNKKltjNRwE8HhMJ2lxXhL0jdOJRmPX+TLISINkoyOEF5jyZ1cHI3YxwO0zDScHaO1z8AoRA4dWeTSEJERPAPGloxL0jz7oCdDpP19tP0k0S4HCK/wnUv1VeMlo95CJUeS/FqoJY0ariLpM6TNYSKJuJUbFnlQmJmX6skDVK4nF0tjyRU5Pg7lR4js9EKJfShGMI3T+cejTvLsBKl/BmgSxpECOkooSebU0vaStPYU5G8iEniA9BrrvZvgKkZsPxkxltSltQqkD7gHhRJSfZcb2TQZ1SRBS9Qy0nNYxraTUYtydRORB1HzzCxqU6m0JAX76EzFPK0gGOByk1TrFs/KScKbcSoNYi0j9HyIzsARIj+jZIRi7/aSfki8Wq4RZ+gT4sw6dMmV/YtjqLgmvos6YJhgOkN1jWj9xHYrFttZPgJxzhylv3F//RUwO0pHOkosmUBslmhXL8UePyPqkRiUjy+xEJevXezDh8W22P6Iupyn2niGcG7fEq24fAQFHbi8X01FMoBHIo5FtA2SJ3Jo0c4ME007TjTu0BVHKsre0BKpEvXUBE3FUYn5w2S+iPZ/mGitUWq7xXpwSYHM9SvLqOgjjVPOFGqXZshokQ25nmiiUYoz9pn0xB8ZoWOQ7ImE8lKpriCcGSL5YSRZ0+V+xPKZEFumF0aIH3SU2I9Rwn3M1SG4hhE6QPSReC9F69y9zDeJ09lb0BYF3S/15q/x/q7R2+K9y+rolergfYvSfBCuiXySpEa0RQL10grSfTUPUpLKK3uRmHPrF2fOdJHlEfktSsEIbUvU2uOU7xVkzIeodydZEdEKHqB8luRYlKtJat3EFiaIlzVExilJyhAqeNHL9dnfgReLCA2RsWPcRqmuH6ZzdR/1rMZJX4t90lHie00T2aR9vDJvIb9xqR8N3I4XYTRc5A8Wz4drrg8VfFip9OW1W8Uy7SZhv/xpgfiAo8vGLfWrsMYpzJqCJZJ4WIEkXxz73NL5SJGETBJvWyDydn2RhRV7vZf0ZYRaqsOLvCzWJSIPU5Tj02SWCIt9kOb1Ulm6dlSLLbw4ymJLs1SmC0gcJTiOfUg+StbgMFlLiMiMFPVgmKS4zQIuB6HEviLbMXMVfSxq/mEyAsniNS7R4kNQ4wTROJdf1Y4TGyFZmWJvXLITl9MpS5+aJrpC5NVeOu7L29yhK3D00OLop4mUjpPaxVl06Trnw0qAZN/yaC2524864GwrWMsBcqULrvGgRQfgzhY4a4er7XAlCiU20vtRwqmtxA7lodz/Y+9boKMosv5vd/VMZiaTIk9ERLZFxKAxICIiskggCQmGJCbhoQKbyWRCBiczcWbygMUwsgEjIiIiIGIMLiIqi4iIiIoRMKIisoiK6CLrg1VURHx8fKyL3607FUi36EF395z//xx64Hf7dj1u1a9u3aqaTmA0rXHROooQ81G/jmJcNuikC+0azJ+PdYmyWTCObGRhbcWUs4jqHoVP81BmyXyixHB8Mhp1cT+ComDUXj6Wip7Rc+WaGG1pCT7XT/TQ2KpcstjeslGoFWH9OTI1A+vOpfpE+4X9bLrPP9HObNnSDOJI1CzqHI4tyiNNPB2NshDzFZP9DOpztLX51IdsTI/2JYtaICyny75G8wl+xsgUMUaifXn4OdmrDOIgh1pzkr/hKAux5aL+EZhaQitEAZbMpJ4WE3tZkjPR2zzSTvYqOlLDqTeCVcFBJt6Pwr8jTnBXRBhtS1GH2ozcjaX0k7mi/cuQOJyYKyAtOhrDSSuhsRKpaXIsi6gfZqtjyROzKFcG9bj4hIdkk/dGW9/unVEbBR1aErUnxrZjW9q9Wv+FORKtpT19tBzpn/IiWM8gTkS7ik9Y/rmaxdz8T51CT54v+1D8Ed8PRb9nSaf9QTXUP6L363vpFfoorzsYCAUqwvrwQLA6EHSFvQF/up7h8+lF3kmV4ZBe5Al5grWe8vS4HE9Z0FOnF1R7/CVTqj16nmtKoCas+wKTvG7dHaieEhQldFFz38v0XkJckaYXuXzVlXqOy+8OuG/EpyMDlX49p6Y8JOyUVHpDuq9jPRWBoD7MW+bzul0+XVrEPAE0qocCNUG3RxfNrXMFPXqNv9wT1MOVHn1Ubome53V7/CHPVXrI49E9VWWe8nJPue6LPtXLPSF30Fstukc2yj1hl9cXSh/u8nnLgl5hw6VXBbBCtOPyh7CWoLdCr3BVeX1T9DpvuFIP1ZSFfR49GEC7Xv8kbBRmDXuqsKS/HAkI+j3BULqeG9YrPK5wTdAT0oMe7IU3jDbcoTQ9VOVCXt2uarwXRapqfGFvNVbpr6nyBDFnyBOmCkJ6dTCAoyFai7X7fIE6vRLJ1b1V1S53WPf69bDgGluGRbCPfrQVqNDLvJOo4qihsKc+jIW9N3rSddnNC0N6lcs/RXfX4JBG2y3o8yPJQRf2JegNCUY9riq9plqYwRon4ZOQdypmDwewQ7WiSy4dB6Aqaks4j7vSFcSGeYLpRZ5JNT5X8IRfDWo3PUj4w+VjkCIxBAPSL73SQH046Cr3VLmCN4p+0JCe8MxJyHi1eOwOYPf9Xk8oPa/GneoK9cZR1EcEA4FwZThcPahPn7q6uvSq9nLpmL1PeEp1YFLQVV05pY87XBHwh0Myq6/G7QrRA5HvpLFQTXW1z4uOI9LS9esCNcjYFL0GXSgsnFU8FkS4cWjDnjS93BuqRgeODmh10IupbsziQenCYfQEq7zhMFZXNoV61e6OSBX6TSDYflMhLKT9tO/oB+U17nCacMdaLJsmyrQbwPGpq/S6Kzu0rA6Nev1uXw36/snWB/zoKane3tFp0SE71vBLrY3OIvR1HPdQOOh1Rx2y3QD5YXtdVxEDqV60gnNChJKgmDnlgTq/L+AqN7LnilKFnoXdweETNzXhaowC5R7RTZGn0uOrNjKKcQl9N5pdDIiX5kmlt8wbFvEprgSbXBEQs0U0WVKdppe5QtjWgP9EpGgfhFTpCx5/ep33Rm+1p9zrSg8EJ/URWh/M+QcZU3rj8JJb0BwQ1Zw6CJ4qeO2SOfJEjjcFzZMD2CdBDc4lHwY2otsYJgWVhkAZF1coBidEkwf7jRR4sBS6NjJTnqZXBDHoiSmCE3ES9llwjFzhiGJxPVCGwc4vSHFRoG73s9PvhWiQKxQKuL0u4R/lATeGLH/YFY2nXh8ykypqNPRWL5aR+s3e1KJyiobRcThlPoqz4nEHd0uT7iZa357s86KfRm2LuoLRlQot0CQSPUwTsdxbIaSHCKmuwQ6FKmnCYtVlNWLyhsRD6SXYwz7Y8ZBHhOhAtTcaUX+2qdEJjyajk0YyTY2oqwxU/UIfxTSoCfqxMR6qoDyAMZTaMtnjDrc72Ek/Rucv99LEGxR1cVdZoNbTYcH1B8JiykSDuVdO46inyKRQpVgPyjyGmevq0NGgMB8KozN5cYhOrDy/RICYbzlZenFBdsnYjKIsPbdYLywqGJObmZWpX5hRjPqFafrY3JKcgtElOuYoysgvuU4vyNYz8q/Tr8nNz0zTs8YVFmUVF+sFRXruqMK83Cx8lps/PG90Zm7+CH0YlssvwHU9F2ciVlpSoAuDsqrcrGJR2aisouE5qGYMy83LLbkuTc/OLckXdWZjpRl6YUZRSe7w0XkZRXrh6KLCguIsNJ+J1ebn5mcXoZWsUVn5Jbjk5uMzPWsMKnpxTkZeHpnKGI2tL6L2DS8ovK4od0ROiZ5TkJeZhQ+HZWHLMoblZUVNYaeG52XkjkrTMzNGZYzIolIFWEsRZZOtG5uTRY/QXgb+GV6SW5AvujG8IL+kCNU07GVRyYmiY3OLs9L0jKLcYkFIdlEBVi/oxBIFVAmWy8+K1iKo1g0jglmEPro462RbMrMy8rCuYlG4Y+b0uNNZQmm97FPuqXDhziXdFaquP/Pi4syLi1/B7ZkXF/+9FxcO+nvm5cX/ny8voqN35gXGmRcYZ15gnHmBYY7mZ15iGF9itLNz5kXGmRcZZ15k/L/3IsMhf/Yd4McuMAtOdSmYw44ZUyDmxx+hk/hfqOgnxkFJRVkpf3/g5y+NLXI6FcyjzDvd/HFxlP/o6ebv1EnkV0tPN398POXfdrr5ExJEftb3dPMnJWF+lCB+gl6j/Br+TSbsgrRnQldFhQuVrtBP6Q5XK4UwUpkAYxUflCsBuEmphQblZrhNmQELlDmwDJlbpSyBp9UY2MJGwitsHLyNtb+PtX1ssvPpKez0QTuD0E4O2ilGO6Vopwrt/BHt3IZ2FqCdB9DOKrTzNNrZjHbeQDtvoZ2PsPbPsLavjXaUdzvYOQvtXIB2BqOdHLQzFu240U4Q7UTQzp1opxntPIp21qOdrWhnJ9p5H+0cRDuH0c6PbJEifKqT0Y7asT9no51UtJOBdkahnQlox4t26tHOLLSzEO2sQDtr0c4mtPM62nkX7XyCdr5BO8fYOMWBdhLQTlejHU3tYOcctHMx2snGXMVopxzt3IR2bkE789DOMrSzFu28gHa2o5330c5naOd7NUaxsJGK+B2Tc9FOT7RzidGOpU8HO+einUFoZyza8aCdOrQzE+0sRDsr0c5GtLMd7exFO5+inWPKPMWmLFE6o51eaOcStHM12slGO4ViXtpi8E98fGpq5rQZM2xWxWY73NSIV9Nhm02xObZseQive++1WhRrzGFbfVNTvc2i2GJs4hYVel7ddDQSEc+t1vp580oj1VhYUWxaBCJ02TTFZo1E5rW0trTMi6bIi4qv2SaqkjXhVU0WCiGqWJli1fZHc2tooTrS2jd+f4wGMdrQw0Px6qswxWZp6VAvehBeLMIooaXlF/poV2yxL0ZejDyInwX4acJPh77aLYod+9reWWG/dN7hSKT65ztr1xQ7dlb21q4o9hO9Pa3uog3LmlZTd20a2LShhv52rLlDh+2iw3Y72O02dJpk6IGfDJhOjbPHKHb70cYZ4mo8ancodmcrXsuGLhs6nz5z8BNjUWKwYdjlxZUOq+KwaZoWnoNszQnHWJUYW31j4w+RyDRMiomZJlocwSf10dZICiIOi+KIQdkkSJjX5FAUx0kSIlTNhq1iBBrbq2wUdVgVuy0VpBajKTGSiIi4RyYipfHx++0a2C2SCuLCbm1xKKrDcoKLiKooKtrTNMVhnYeXA9cipOMkIdOREmqnTXE4fphxC10zfnDEKo641tLWUqSw5S79Ln02fhrxI1upTUMSYq2K+E/lT01KDN43iNZH0NOmGUmJtSixgpR2VmIVJbYDKz9LCw1C6ql5EWNVL9zRdtjIi8qw7y0tsYoa206MkZlYYibWAbEOJyTS5zzxPz9HpkeGRvDP0FibEus4OitKzoxZR2PjlNhOrV1au7SktqTOy5mXI9x1pm2mbYaNphTRg3w4YxSnXcVrULbws+xBlDowUxCUOTA2BpUTDM2YFnWNdooiTqvitHXgqBF3Ac6OJEVsWIF9w1by4RmkDMwUt1R1rB15atcp6kiiIjTHqpvQg2xN1cI9rUOHHiWqhg5UmRob09LiVFSn9YQdA1nOGEGWMxacsRw4BnvxuTRyaaS0dTr6i3AZp0NxOo/DFowlrR2uFyNbIsfByRVn/P5u+7sdHrwzbY9vj29b3vbtW+e8PGeLc4uTZuW0Nqu1oa1tR22cTYlzMLyumrRFXJOustswfXBFW9vx1taywU6hTW/Da1prA6Y3xKlKnNbaCnDCZlyMEmcXN23b9xw+vGf79jaZp8MlKnW8f2BL9CJtcAXdVwymJlRUAJx4QmFwz/72smKe1m9t3V/fzTmnXri1tbT0aGn0GqhalbiY7dvjVDXOetIetk74hKW11YLptu3igg77IrEvVMt9/knyvlsoep8p7jOCrrI0ffiUoC9NHxH03JhGby7T9DxX2P9LaVS7Q10ffwgsLswHuhvzwYFJmE+ZVYn5lI0+zKfsh26gZWcU6TBkVN51OpQW52fqMGN0EeKD9P/7ceiJu1lxEKuABrgd5sFIWAVPwxbcTQ2QOS6AztjeG/BwOx3mwF14nPwLbICt8AlcIXP0wn1PFozHHWEE7oD5uPFeDc/AS3AABlKOODy4dsEN9wQ8Ht8Cc+FuPCJshDb4B1xJ6Z2Qm7Nxo54LE2EyzIA7YQFu1x+HZ+Fl3MUNgqGgDiso1iG+uGiYOJaLMiloNwY37lcB7kzgD3AjHtD/BM3wEHKzCN6Gv8EaeA62wRtiz0b5O2Gk7AOD0cVLoJR+sqgRHoAVyOZieAf2wRPwPLwCO+GgzB+Pe/2+8HvkcDS46Le+ZkILPIy7i3thD3wAa2ETvAp/hc9pDxMtk4Cng0thCO5nxkAZ+KEWTxLLYCWeG5bAu7AfnoQX4DXYBV9gPiV3LI5MFyqpQW/oDm64R2oXwe+gHBYi8yy3sDAHRhYVjNKhrKToGh1bK/KchZEtFvrBxXA1HZ7EFzR/hFtxXB/B8gVwH+yFv8M6aIXt8CZ8SWXscBlyeR6MEz9NBU14ZD1Ez7tAEjihPx7bMnAVuQ48cBNMgWlwG/wZHgULXAtL4T34EJ6CF+F12A1fyRYk48heDpfgAfR8uB6CMBVuhtmwHB7DM1ER3I+78o9gPWyGHfAWHIav3f1CbstKwjWEGwhbCbcR7iTc43b5wpb9hAcJvyU8LtBqI0wk7OZ2hTzWXoRphP0IBxIOIcwkHOl2V1VbCwnLCH2EtYQRwvmELYSrCZ8jfJXwmMCYiwgHEmYTlpT7vJNiSgknE4YJGwibCOcTLiZsJlxO+Gi5P1AVs4ZwPeFzhJsJtxHuINxNuLfC63fF7Cc8QPgF4RHCoxVBlzvmuECbjTCRsBthL8K+hIMIM71+b9iWT1hCeD1hKWGFNxTw2XyEQWysy1ZP+CBhG+FBgXZOOJBwCGEm4Uifv6bKXkg4hnA8YRlhJaGfMEw41Rdw++wRwlmEcwjnEy4mbCFcQbiacB3hRsLWKk+5195GuJ1wN+Fewv1oJGg/QPgF4RHCo4THBTo0QgdhfACFozNhN8IehKmE6YT9CQcRDg0Ey/2ObMI8wqJq8Xwc4UTCcsLJhNWEtYTTCGcQNhHOJVxAuISwJej2hR0rCN8XGKsRphGWiEGKbSJcQNhCuIpwA+FWwldDOHdidxLuIdxHeIDwC8IjhMdCXn+FEwithE7CRMIuhN0Je4aq3NXOiwj7Ew4hzCEsIhxPWBEK9b3UWU1YSziNcAZhE+E8wsWELYQrCdcQbkDs52wlbCPcTriLcA/hPsIDhIcIvyc8LjDOSsgRL4vrTNiNsAdhKmE6YX/CwYSZhHmEJYTjCcsR+8f5CIOE9YQNhI2EswnniZ9ZiVtIuJTwQcKVhKsJ1xFuDNVUh+JaCdsItxPuItxDuI/w4zD6RtxBwsOE3xP+IJCrhDZCTphM2JVQJ+xFmEbYT+xYcD1I/g2S4Vp8Dq6X/96dAvbTxBj68nM4fd2XjfsHUUv0yanvfprfgmulRfybD7g3+DVaZ1x303DlS8cdhfgXEfrhytof18IBuCcaiLuaQbgvGYx7hyG4Og/9DflPvyUaadF7hvuvGbgLOv07BfcdJ/F3P8G4X4nX/AIy3PPgUeM/dqfgHvGXcOQJTKLXRtW4qwnSa54a3JfV4Q5oCu5Y/oj7nJtx7zud+Ig35DyZ77+R5/RbpeDe8NSY+CuxgLCQ8FrCIpq/qvy3XlSDphCmdsDo2SaPcuXhLr5dM6LjV2LCr8Rzf4I5v4jxvwrPxt30ONwFX49nnvF4ZpmIp4tSep3plr+ZMIleUk7GM4cPzwVT8UwDyG97qZ/mb8/738jX5Ve1NtpWDU9MJXiqGfMb7hU8m7Sj8BOdNP0nWvszMDzjp4kMz1KdxdnoN96dRXcKnvBOhSqegXr8BqngCfDnUcVTUM/fIBU5j06NKp6/e/0GKf4Nq9PF0x0VBefG6WLuL2KnX4EfKK3KTmW/chgDU7yqq33VoWqhWqpWqxF1ntqirlFb1Z3qfvUwAxbPdNaXDWWFrJRNZSvZ2+wA+16zap21XtoALVsbo1VotdosbaG2QluvfWx1WrtZ06yDrXnW8VafdZp1jnWpdZX1Oet26/sxu2I+jDlia7XttR20T7T77Q32B+077QftxxzJjp6O/o5MR4mj3BF2NDoWOJY71jm2OnY7PnZ8G6vFJsf2jO0fOzt2eeym2B2xnzo7O3s5Rzr9zqXOVufeuL5xwbgZcfPjVsU9F7c/7hh38K68P8/nq/kmvoPv44f48U68U/dO6Z2GdJrdaUmnXfEQ3zX+ovgF8avjN8XviN8Xfyj+eAJP6J6QnjAkIT9hYoI/oSFhbkJzwuqETQk7EvYlHEo4nsgTuyemJw5JzE+cmOhPbEicm9icuDpxU+KOxH2JhxKPJ/Gk7knpSUOS8pMmJvmTGpLmJjUnrU7alLQjaV/SoaTjyTy5e3J68pDk/OSJyf7khuS5yc3Jq5M3Je9I3pd8KPl4Ck/pnpKeMiQlP2Viij+lIWVuSnPK6pRNKTtS9qUcSjnemXfu3jm985DO+bg3EeNoi64nyQtN+qMmfbdJf7uDrpnSrbix0iFG6aCfM82on3vQWF4fYqz/ggeNeq8cY/29xpt0vyn/PJO+3KSb+nNhD5NebdIXm/RWY/sv+dSY3kcz6gOmmfSGDjpG4wERU/ou0lVciROjPRzYEpVXllOKhjO/M+42ekWfDtKlvEjK/lIOPVXuqxqlnCvlYilNLF2119jLwbOM+lCTFw1dadSHmVgbPsOkNxr1TN2km0Ylc7BJN3lNZhnqysn2Zc436UtIN7GR2SzlSinXSdlKuc/FnX8O7s3G4fpdSd/QRaAJ5sFiaIGVsAY2QCtsg52wB/bDp3AYjqJBmxKvdFHkmGTJEcxq1/tKOVTKIiknSumTcqqUs6VcIuUqKZ+TcoeUe6X8VMqjUZkt50h2Zyllv7MHSjlSynFSVkpZL2WTlNJ+trSf3SrlLuMo5HQxsp7T2aT3MOnZJr26g471j7QZ00cOMen5Rv26rib9OaN+wziT3tBBx/bfMIv0LngKHILn0XzcX03E/Zr41rgBZsFcWAjNsAJWw3rYBG2wA96GfXAADkVbe8MYKcukrJYyIuV8KeV8vmGNlJulfFvKD6U8HJXjQUrpTeOlN41Pl3KIlPlSlkoZlHKWlHIUx6+QUnr7+FYj6xM2G1masJ/0ZDwrnx4v0VpelVL65gTpmxOkb060Sil9c2JPKWX8mjhMSjlHJspeTZSsTmyQUkayiUullD46caOUsh0T90j5KfWmQ3z9w/dRWQrGfpfOJT0WuuGuMA36w2DIxPNUCQ5IOciZWiqtl8pIUrpaSjlDS6X1Umm99ICU30alS5UyXsruxjaUjUHdftJD3X7SGZ63k7FdVMY9TUo5zu75lMcU69ybpNwm5W4pPzTzUd5dylSjX5SXUb0dcy6Xcq0xDpSb1liP09gLz0CTnmnUJ80w6l7VpINRnxwx6XNM+lyTvqeDjixPPthBx/7cONSkjzfmv7HRlL7fqPuyjcz51pFuk+Nxch5FU6WP+OSI+N6X8mMpZXzxy6jrl/n9u83jUR2WssGccpOcRTeNN7Y0iHNfNYx+SHpVKJVSTF4UPiLl8aiskf5c862x3rrtP/XTehkH6+WqUj/3p3mmyPkzZV9UTk0+lS9PHSCljHx/zJQy76c1TsuWMk/K5WZupkk+p+2kHv/MKN0s49PNcp91s4xTN8u1vEFG1wYZ3RselXI9xDBxlwhd8cx6EfSDQdGUyE4p5XhHJJcRyXFEcnyL08ht4yCTPt7co8YFUi415pyZ+VN+Zsod4EwZwWauMMeDWTLizlpvjE1NecZZ0bTA3I4mucI17TOn3JYqZTml2HHNFb920RcGnthzRdOlr9wmo9dsuWrMlqvDbLlTmS39ZrZcM2+XnnK7yd9vj5j0FpO+waR/YdTnaCb9OSMHd2CM1DrM/HkbjZHgLiv5WAzxf3JViaY5pEyWUq7z8/tJKXdt82Xf5+Pux9Kh7rvfJ0+zQPwJNqPPpV/dLf3q7h+icoEst+CUc2yR3B0skswvkrNk0dtm/2iWntScauSmeSrldHTw+2EwEorgepA7pGbpe81yHWmWLW2We4QHyqWUq2yLZKBFekeL7NGybuY2LZN7qmXbjJF/2W6TfsS4Ui37tsNpFW+Wf2/UH+pizP9QV5NuTk8z6ekmva/xNLgyzbgjfSTepHOT7jTOyUccJl3voGP9j6Sa9FVG/dE8Iz+r3zfqj6cb8z8eMepr5nfIj/oTy036ZqO+NtVY/9pa43xaGzb2d+00kz7VqD9p2i89ucuk7zTq69JpPp5oz7qcDrpIzzPpI03lc0x6mbF/T60y6fuN+tM+Y/kN6436M4NM+iaT/qFR36ga27ux1qg/25NixEl9nbH8s5tNuomv5zca9U21Rv2FfkZ/eOGQUW8FY/9b+5r0YUZ9s2rS1xn1Ldykh436S/2Nets4kz7XqL9sM+rbTPZfyTHpDSZ9hkmfZ9IXGPVXu5t0v1F/TeuwniC/r3U8QQvdNL6vhU16bYc1QuhNxvF/bbZx/F77whg/tvcwpm9PN6WnmfSBJn2kSW826fuM/vF6P/Fv7WOKW7kHKpSl9A6jDD+gLFBwV2OJtyTQ+7BEsDpzeZszh2/lrXwzPrEqXypfYr7DCu4BlCPKEVCV75TvgPEMngEaH86H49oo1giVZbEcYU9NVFPwCdpmXLSCxWHJdNoB9oUgLMWz7H44piRjG2zYqmTntaA6c5xFiLnOYkTRu5Or7QAYzD8FpsZjmz4j2cYPokxB/XOSbfxtUFHbg9jG9yJuw746ontDvh/b2oqpfyfZxj9EuRn1j0i2dcj5scz5icx5QOb8h8zZ3t5rqL151N5R1N72lHxKKaCUwo4p/FVq4XZq4Q5qYXvKTkrZRSm7KUVEG/wAqLFqLChqvBqPrKYgq8yZ7RyBrLfyVrBim0RcYSDeeios+uYGN5RYfgb2agaqnZROMF3pqpwLESVVSYVG5XplPMxUfEoVNCkBJQCzlZuUMNyuzFZmw53KYuVemKd8rXwN85Xvle/hbuWfyj9hgXANuEe1qlZYqDpVJyxSE9QEWKx2VjvDveo56jmwRD1fPR/uU3urvWGp2lcthPvVsFoDm9Q6tQ5a1anqVHhRvVltwODTqDbCVvVW9VZ4SV2gLoA2dZG6CF5Wl6vvwDYWh17zA+vP+sNxNoxlwo8sl+UqKruf3a8wLawtUzSL2+JW+lk8Fo9ymWWSZZLS3+K1eJXLLSFLSBlgqbHUKFdY6ix1ykDLm9Ym5UpHscOlfOW4NVZRjjvjnVnqFOcNzmb18bjyuMnqN3HT4+aox7jKbczGz+PnsU78fH4+i+cX8AtYAr+QX8gSeW/emyXxi/nFLJlfwi9hKbwP78M680v5pews3p/3Z134AD6Anc0H8oGsKx/EB7Fz+GA+mHXjQ/gQdi4fyoey7nwYH8Z+xzN5JtN5Ds9h5/GJfCLrwct5OTufV/AK1pNX8kp2Aa/iVawXD/AAu5DfxG9iqbyG17DevI7XsYv4FD6FXcyn8+ksjd/Cb2GX8Jl8JkvnTbyJ9eGz+WzWl9/B72CX8jv5nawfn8/ns8v4Ar6A9ecL+UJ2OV/MF7MBfAlfwq7gS/lSNpA382Z2JW/hLWwQf5A/yK7iy/lyNpiv4CvY7/lKvpIN4Y/yR9nVfBVfxYby1Xw1y+BP8CfYMP4kf5IN50/xp1gmf5o/zbL4M/wZls2f5c+yEXwT38Ry+Iv8RZbLt/AtbCR/ib/EruEv85dZHn+Fv8JG8df4ayyfv85fZwX8Df4GK+R/5X9l1/I3+ZusiL/F32LF/B3+Divh7/J32Wj+Hn+PjeEf8A/YWP4l/5KN44f5YXYdP8KPsOv5t/xbdgP/nv8PG4/O66L4BRS5FOWYcgyj2I/Kjxg9LKoFNJpnFppnVppnMWpXtSvY1B5qD7CrqWoqOFgORrdYS5mlDJyWcks5xFkqLBXALZWWSuhkCVqCEG8JW8KQYKm11EIi17kOSbwH74FzvCfvCSm8F+8FnXkqT4Wz+EX8IujC03ganM3TeTp05X15XziHX8Yvg278cn45nMuv4FdAd34lvxJ+x6/iV4HOf89/D+fxq/nVGK1E/D2f4m9PPoKPgAv4BD4BenE3d8OF3MM9kMon8UnQm/u4Dy7ifu6Hi3k1r4Y0HuZhuITX8lpI5/W8HvrwBt4AfXmER+BS3sgboR+/ld8Kl/Hb+G3Qn8/hc+ByPpfPhQH8Ln4XXMHv5nfDQH4Pvweu5Iv4IhjE7+X3wlX8Pn4fxuv7+f3we/4AfwCG8GV8GVzN/8z/DEP5Q/whyOAP84dhGH+EPwLD+WP8Mcjkf+F/gSy+hq+BbL6Wr4URfB1fBzl8PV8PuXwD3wAj+Ua+Ea7hz/PnIY/i3yiKf/kYO7dCAcbONijk2zB6XstfxWhbxLdjtC3mOzDalvCdGGVH810YZcfw3Rhlx/K3cc0Yx/fgmnEd34trxvV8H98HN/Av+Bcwnn/Fv4IJ/Gv+NUzk3/Bv4A/8O/4dlMqfFxGnof4Ua29F37IoE5QJ+NijeEDRntaeBtX6L+u/gNmG2IZgHP7PeB/GwDPed8b7pPd1Je8T3+Koitf63hkfO+Nj/yEfUyyTxXddSg+1P8vWxkE3w/dLk+m3H2bAbJgPS+BBeBTWwkbYDK/CLtgLH8JBOII7e1CsitNeD8wesoftU0jW2KeSrLX/kWSd/WaUYbxrIBm2TydZY4+QrLXfQrLO/ieUNZivkWTYPpNkjX0WyVr7rSTr7LehrMV8s0mG7beTrLHPIVlrv4Nknf1OlHWYbx7JsP0ukjX2+SRr7XeTrLNPAxVTZyDW2JsQa+1zEev+DUbuoZ6H7AslM4skM4slM/dKZpZIZu6TjCyVjNwvGXlAMtIiGVkmGXlQMvJnychDkpEVkpGHJSMrJSOPSEYek4yskoz8RTKyWjLyuGRkAfY/ZG8mRpYTI4/+m4w8IRlZKxl5UjKyTjLylGTkacnIBukrz0hmNkpmnpXMPCeZeV4ys0ky8oJk5EXJyGbJyBbJyFbJyEuSkZclI9skI69IRl6VjLwmGVlDjKwnT2klRtr+TUZel4zskIy8IRnZKRn5q2TkTcnIbsnIW5KRtyUj70hG3pWM7JWMvCd95X3JzN8kM/skMx9IZvZLZv4uGflIMvKxZOQTycgBycg/JCPbiZFdxMge8pQP/01GPpOMHJSMfC4Z+UIy8qVk5CvJyGHJyNeSkSOSkW8kI99JRr6XjPyPZOSoZOR/JSP/lIz8IBn5l2TkuPSVH6PMiH9PQzDjUKLMONQoMw4mmfmUGDlEjHxLjBwTnoJrtiLaTT+VNA56K7vUB1geK2AVbBKbzG5kIVbD6tgUdjNrYrex2ex2NofdgafgD9lH7GP2CTvA/sE+ZZ+xg+xz9gX7kh1iX7HD7Gt2hH3DvmXfxQ3AejspO5WdaKBZbQaFXcOuAZXls3xgrJx5QGOVzAtWFmRBsLEwC4Od1bJa3AnUs3qIZdPYNHCyBvYniGP3sfsgiW1kr0Ny3OVxl0Mq1t4VHFp37Xearp2n9dDO13pqF2i9tAtFz7BF3wG0fzchf98B4DaRhmWiP4+pMN+JHO0/dz1bfDfFfJgCWrJ2LuZO1VIhtkO5qN1kLUXrrJ2lddHO1rpq52jdMO9Juyr0hE5aopakWTSrFqPZNLvm0GI1pxanca2TFq+J77s07Nt0bKQoo2q/14aAU8vQMoBj2gDowlawlWwVe5xtZS+xNvYy28ZeYa+y19h29vqpGBfflrGH2ENY48PsYWzLY+wx5Hs1wziKzG1Bex+yz0/U/hDmegxTN7Jn2XPsebaJvcBa2YtsM9tyqjGm2lewFVj7SrYSa1/FVmHtjzOMztjC17F20Q9Rezokn7LWU/SDOPtQcibKnaZ3UTnhDVjO4lfXwZ+gEWbCLDwRNeEoz4bbYQ7cAXPhTpgHd+EsvxsWwD2wEBbBYrgX5/x9sBTuh2Z4AFpgGUaAP8NyeAhWwMOwEh7BePAYrIK/wGp4HNbAExgdnoR18BSsh6dhAzyDseJZeA6eh03wArTCixg5tsBWeAna4GXYBq9gHHkNtsPrsAPegJ3wV4wqb8JueAvehndgD7yLMeY9eB/+BvvgA9gPf8eI8xF8DJ/AAfgHfAqfYfz5HL6AL+EQfCV+oxOj0TfwLXwH38P/wFH4XzgG/4Qf4F9wHH5EN1bUa9UitVgt+T/uzgNMimLr+1XVPVOz3T1DT3fPssCKiMQlB5EkOYNIFFxyUkCQICCCRBFRAZF0cclBMohIEskgonLRa0AyKFFExASIAt+p/w7L9PW+7/XeNzzv89HPVPWe33RVVzqnTlVPI1qKR0Ur0Vo8JtJFG9FWtBPtRQfRUXQSnUUX0VV0E4+LJ0R30UP0FE+KXqK3eEr0EX1FPzFPHBKHxRFxVBwTx8UJcVKcEl+Jr8VpcUacFefEeXFBfCMuim/FJc0Q34nLmim+F1fED+JH8ZP4Wfwiropr4rr4VdwQv4nfxU1xS9wmFcQ1oWmargW0oCa1kJakNdWaac21FlpbrZ3WUeuk9db6aWO0F7Sx2ovaFO11bZa2RntLe1tbp23S3tEOaB9rn2h/0z7VPtM+177QDmpfaoe0w9oR7ah2TDuundBOaqe0r/RKemX9U/0z/XP9C/2g/qV+SD+sH9GP6sf04/oJ/aR+Sv9K/1o/rZ/Rz+rn9PP6Bf0b/aL+rX5J/06/rH+vX9F/0H/Uf9J/1n/Rr+rX9Ov6r/oN/Tf9d/2mfku/HQgHHFld1pA1ZS1ZW9aRdWU9WV82kA1lI/mwbCwfkU1kU9lMNpctZEv5qGwlW8vHZLpsI9vKdrK97CA7yk6ys+xCRzc6nqCjh+wpn5S9ZG/5lOwj+8p+sr98Wg6QA+Ug+YwcLJ+VQ+h4Tg6Tw+UIOVKOkqPl83KMfEGOlS/KcfIl+bJ8RY6XE+RE+aqcJF+Tk+UUOVVOk9PlX+QM+brMkDPlLDlbzpFz5Tw5Xy6QC+UiuUKulKvkavmmXCPfkmvl23KdXC83yI1yk3xHbpbvyi1yq9wmt8sdcqfcJXfLPfI9uVe+L/fJD+SH8iO5X/5VHpAfy0/k3+Sn8jP5ufxCHpRfykPysDwij8pj8rg8IU/KU/Ir+bU8Lc/Is/KcPC8vyG/kRfmtvCS/k5fl9/KK/EH+KK/LX+UN+Zv8Xd6Ut+TtEAtx+YZcLJfIpXKZXC5/kj/LX+RVec0YbDxrDDGGGs8Zw4zhxghjpDHKGG08b4wxXjDGmkPN58xh5nBzhDnSHGWONp83x5hjzRfNceZL5svmK+Z4c4I50XzVnGRmmDPNWeZsc44515xnzjcXmAvNReYb5mJzibnUXGYuN1eYq8zV5pvmGvMtc635trnOXG9uN3eYO81d5m5zj/meudf80PzI/Kt5wPzY/MT8m/mp+Zn5ufmFedA8ZH5lnjbPmufNb8xvze/NH8yfzJ/NX8yr5jXzuvmrecP8zfzdvGXetpjFLWFplm4FrKB12jpjnbXOWeetC9Y31kXrW+uS9Z112freumL9YP1o/WT9bP1iXbWuWdetX60b1m/W79ZN65Z1O8zCPCzCWlgPB8LBsAyHwklhI2yGrXA4HAlnC9vhaNgJu2EvHAsnh7OHU8I5wjnDucKp4XvCucP3hvOE7wvnDd8fzhfOHy4QnhmeFZ4dnhOeG54Xnh9eEF4YXhR+I7w4vCS8FL/RwNo+1thHiLmCNChWzudrDci+f6E9TPb9Sy1da8MOa+21DuworOlxra/Wl50gizeKndQma5PZaW2GNoOdgWU/C7t1DnbrPOzWBditb7QN2kZ2ERbikl5Br8gZVuBFwAgYvGTADti8FNbYSwe/Cp7jF2RJWZZfxnr7T8aLxkwhjDeM7SK78YFxXZTGqntnrLerpyV/xBMqeVlR1phmQBlkAbaRdqYszBeYiHyAs5U4U3s0Nktmqeb79PeX5j4KD5sfUHjU3J/13S/pbCcL0XwiheWmGUBa5u6ReVjJzaMUfmQep/Cv5kkKPza/U1dGYirFSLJKMZJdpYi0biLVO3s0SfTXexGDwvcjpo9kA7FBoj6SApIDJCeIYEnUaiWp7cqL8oyLSqISE6KOqMM0UV/UZ7p4RDzCAsYUYwoLGhuNjUwaV4wrlJ4ILBef/g/ZWL+F/f/bvv7vWFhlQ/+s3fyftJmO7Cofl93lULJAynLWJpvZCNasKVmmibCTrclGKuuYaRu7/Umr+Nw/sYd/tIavkx28awETrcv/NWuYZe3ILs4g+51oFavT7EPNPTJnHmre0YRmHr/G5x2/0azjMZpxzMGcYy7NOG5Qr32UemoH1S/v2E7R2283LduKWo7lWp4Vs5Kt7FaKlcPKaeWyUq17rNzWvVYe6z4rr3W/lc/KbxWwClqFrMJW2j+0ti/8Y3sbSYoYEfNPWd2Vf7S7kWwROxL9g/V939xnfgAbvP8fWuEvyQ4fNo+ax82Td+xxJDmSHTb5u//QKt/8o12OpERyRHL+W9bZZ5utm/8d1tne/U/s8yNc8Bg5szl5IebxJrwFux+77oV4e96NFeFP8CdYGd6D92Bl+ZO8N3uA9+FDWHn+HJ/GavEMPpu15+v5x6yz6C8GsGFikBjGRooRYhQbJ54XL7JXxEtiApskXhWT2TTsn78upgvS9/Dy52iW5rC5mqd5bLGWrKWxJVpRrQTbopXSarEdsPmfw+Z/Af/toL5A/5hdDEQDUZ4SuBq4ynMErgeu85yBG4EbPFeQKoynBl8KTuD3BF8NTuF5g9OCM3jBYEZwNi8SnBtczksEVwbX8UrBDcG9vFZwX/AT3jJ4MHiQtw8eDh7lHYLHgyd5Z5od3OTdgrdpdjBalpOV+Cb5kKzKt4UKh9L4zlDRUAm+O1QqVIq/HyoXKsf3hSqEKvAP1A4a/zBULVSNfxSqEarB94fqhOrwv4bqh+rzA6FGoUb841CLUAv+SahVqBX/Wyg9lM4/DXUIdeGfhXqEevBDSeT488NGZ6MLP2J0M7rzY0ZPYwA/ZQwyBvFvydLO5JfI0m7nv5Clvc5vmcJsI6TZzhwiOllzra/FiHDDcEOxOzwhnCH2ZD7nQl7pauy8tOOPxyUbEiScVcRzySl46lM9iyrI6r6BcDXNDt5ArP7aGv9rK/11nA71tE0RXoT6TnFenMxeeV6e0qzL65KRacgbMp3P4DPwtM0+1imQM5ArkBq4J5A7cG8gT+C+QN7A/YF8gfyBAoGCgUKBwoG0QJFA0UCxQPFAiUDJQKlA6UAZ/hn/nH/BD/Iv+SF+mB/hR/kxfpyf4Cf5Kf4V/5qf5mf4WX6On+cX+Df8Iv+WX9I1Xdeuate069qv2g3tN+137aZ2S7v9X5HpVBRdYMVBx1ulolgDSqFDY6nqbV5UcwWppEWZehJK/WcGIarVijRfrEyHwarQYeL9FhZrSEeEtaIjG34fbrP2dDj4jyxc1p0OD+8diOGNA9nZCDpy0BgVLCfPxm2Wi0ZqTnYPz81zs9x4SuZeGrVNWB4atensPuzu5sV4vZ/34r1YPjw3k58P5INYAT6MD6OR/RJ/iRXmr/DxLI1P4pNYURrHGawYjeP1rDjfwXeyEnwvf5+V4vv5flYG605lMf7KYW7dAKtP7bH61DFrTWxPfE3sFaqpe0QpUYpmjuVEOZo51hK1aObYQDSgmWMz0Yxmjq1EKxag+U83FqSZz5M0cxxnvMxCxnhjEjONxcYSZhvLjJXMMQ4aX7Jk47BxjKUYJ43TNKd+zhzO7iMrMoblUxaCFSYLMZ8VUfqclSB9fpCVIi1+nD1AmvwkK0e6/DR7kPT5WVaefKzzrALp9G9YRdLr37JKpNu/ozZSz4FVEm2zyvJhvCzjqSy5fWWpICrQd1WJNNGEfBodJQqgREGa56UziXKFaBbXjyWhXAbKFUa5HJTLM1Yba6hEa40NLBfKmAdlzGucN75hBYxvje+pXKqkxVHSUihpOZS0PNnBN8hPWELeRlWUujZKXZfs01XWkKzTTfxeQdAsvWd8F7YRjc+uKNEEVUbeDOOeZUkY1jQF786rZckEb8GLMo53yGTKaAT8g7qoLCpTXaga0dHGAdRLEPUiUS8h1EsSzX/bMQO1Y6LVLdRR2HjMeIxFyEMfzrKRFzaZ2n6qMZOlki+2geUzNhnbWTnyyL5nVYwfjOusG80lXmS9adYwiQ2hWcJKNprmAOvZNLL5h9lstP0mtP07ZMm/YpvRA95FD9iCHrAVPWAbesB29IAdZOG/ZzvJyv/AdpGlv8l2k10PsgM010lhB2l+cx87QXOaNHaOZicmu0yzjCj7gWx9TvIESBOSp9SPMeVJshpqtYE1Vc9vsebmUKs2O0DX3MNfxzOO2t0WwRPwjDwi1euaJLTIxLstwlqwKlkywaqxtIQWmahWn41ZxiLKeYexj3rbr6bqvySFv515P/fhTkrGcxeUS85/R7PSlTHoIQY9xKGHNOghHXooAD0UhB6S0EMh6KEk6CEDesiEHrKghyLQQ9mgh2zoIQd6yIUe8qCHYtBD2aGHcjCu7VK/WxH1tM1UE/9sP0Zwgzt0l3l5Gi/NK/IavAFvRnfXmffkffkgmsGM5uP4RD6Vcp3HF/OVfC3fxLfxPfxD/gnVzTGqhwv8Mv+Z3yDlHxSWcESKyC3yiTSq3XI8jUpfiOqiGOJ0sn4qbscrIG7PKyLuwCsh7sgrI+7EH0LcmVdB3IVXRdyVRp6Ku/HqiB/ntRD34HUQ9yKLquI+/BHEGYHsKtY3BFIQbwzkUHHkt5Cp4oAbslQcXBQKI94aiiDeFsqG+GbIRnwrFEV8O+SomOYwLuKq2Tjy6ckLkybIRnZe0F9FKUwna6/mDiUobM9LUtiBl6KwIy9NYSdehsLOnOYRVLYHKOzKy1HYjT9I4eO8hnoGhNek8Elem8JeNF8QVKp6FPbl9SnsxxtQ2J83ojCDP0zhLN6YwpkBjwkqb4zCjQG1AvJbiBqGSkq9msqpU7g1RPMNKmNQPdUUkhTeCoUovB1KYoLKRrOfUFVWOOv3mwPYc2wMafmpbBZbxFaydWwL2bH97HN2jJ0hn//nO/t61JNSqK/no75Ukpfjlak31eONSUOmU7kfp1Isp9rKoBpagbgdX4m4PV+FuANfjbgjfxNxZ74GcRf+FuJOfC3irvxtxN34OsSPh+5RMZUxt4qplPci3hrKg3hb6D7EN0N5Ed8K3Y/4diifiqnE+RFX5XPQfnPRcvPQcvPRcgvQcgvRZovQZm+gFRej5Zag5Zai5Zap9gh5qPEYajwZNZ4dNZ6CGs+BGs+JGs+FGk9FjXOmZ2N4uluDrmAY6Tybep2I+vVrY/zyqBArTbY4viLFk9HXsqOPpKi8VSo8R9ZZd9WTlO4lfTIdfQWh2injNmkoxmPk2XBoIgH9omxaCnuJt+St+GO8NX+Udzdak/VJz1wfFgPFcDFOTNMytGXa2sjvkZuRW5HbpF9nG3OMucY8Y76xwFhoLCJdu9PYZew29hjvGXuN9419kWsREdEieiQQCUZkJGT8atwwfjN+N24at4zbJqk98zVzsjnFnGpOM6ebfzFnmK+bG8yN5ibzHXOz+a65xdxqbjOPmMfME+Yp82vzjHnOvGBeNC+Zl80r5o+WtEJWkmVYpmVZYStiZbOKWEWtYlZxq4RV0ipllbbKWGWtB6xy1oNWeauCVdGqZFW2HrKqWFWtalZ1q4ZV06pl1Y5YkXAkEnEibsSLXI/8GrkRyRVJjai9yALw/Rj8vQDNHBqSTespepHVHkB+nSWGkV8XxlPQEXhx2eCb2ViDjWpvaW8xJ/hmcA1zgxuDG1kseC14jeZt5LGw7MpjofnNCeMsK6z8FprNjCPbXZF89/WsJnndh1kj8ryPsodhuxvDdj8C290EtrspbHcz2O7msN0tYLtbwnY/CtvdCra7tXmLrPZjlk2WujMs9TBY6pGRGFnq56mcm1n6n2nRf68F/0fa6U4LGahNhtpMQj06qMdcqMd8KHkxlLwcSt4UJW+BOUqrTM8vYATCGIUNmFrfrcFyJ/b/v+/F/3F/zOw7lEIUPYWhp2ho4SDaM4L2zIb2tNGeUbSng/Z00Z4e2jOG9kxGe2ZHe6agPXOgPXNSu2VnueJ3bwYiCXcfoflmfMSqMY9+ytBPOfqpQD/V4tdagWwJ16bQrCRLC9wZ6dAcGAXoyQH0ZImeTDaEZlCxP7tOau9Wv0/J3HFWHjnz4n4FfvFi72TCVr+n5XZHzObuyrVw2SySOQdUM/kWmO29GpdUxi8mxvlkaqb4FM2EEmWkqcm/nBqXqTQHq7qw89n5GLML24VJUtwmW24/YNNcxX7Ifogl2TXthvSdxnZj5trN7ebMs9vYbVjM7mB3YMlIpZH6xcc/SUVdaeBKE9dUQ1hMtYbYIi5SC12hz1Xcm9LLmlhMx+ckO0KfUwnyiVpRsYVku+izL0uui0FikOaJRSRdTp81WYRrZE/EJIpDWTIh6onLJH2OPj/f/aY4RJ/HqZ3qidIJ301FXk1IXlqkJnxb5UNzPC2nlkcrcPf7/JKYTITssSa0EH5DdOeKwfQJUhkuiMvqPOuKzYLanV8m8ok4qM6zrqASclULjRJk60i2g+5rAc2T70rnkJTmHGK8mOy7y7Ekn0zyAWKIGJmQZx3xFJEh6ldRCdKSojU8QyHq8JIJ8hRBLUYzME0UF2X5truE3RJUdprpacITOUWehHqj2TER9cl9t/347/yKEGpThD6hBPkh8jCoHzD1uXJXzubQXP9T+lt9Dt1tbzaWjeXruHqfh/rsSCC9yPJP5OoX9+qzOIsE1H90xUfyAVy9E0N9xidcVY5GflfekyTq0zfhqlSWyquQr9Ak7pU9GmeZvb4R9Xo1OgrbzaiPp9kt7ZasqJ1ut2PFMEZK2ePt8aw0+nvmSKY5M7MDSYEkurKjGvF2Z7sbjZcn7J4saPeye9NI6WP3Y5b9tP00y2YPtJ9ltj3UHkqjbpg9giXbo+zRLIc9xh7Dctlj7XEs1Z5gT2f32hn2IrqPxaQ31PP9gu6oZdYIjcZzVHlx5BVAXknIy0ReEeSVDXl5yCuGvFKQV07klct+xX6F5c7KcSFyXMHK2Kso3wpZWozyQNgM4cMIWyMcnfnrOtIL6q8HKEzO0ngTmE4ar5fdAEy9TyUNbyZIZnnAH6FSNcdZk6yzpjij/mTXsutA05XENSksX/wapUXvXHX3vGn8POFKvgB3Ugb/meYANoSNpH4ynrzKGWwO+QPL2Rq2gTyCXWwfO0A+wRF2ip0jr+BHdp3d4jr5lzZP5qnkYRbixXlZ8jGr8Tq8EXmZrWl+3fXv/UzSmIJ6UH4K89sFKCxgF6SwoE3a2y5EmlSQPk2jMM0mb8suonqOXZS0prCLQcMWt8nnskvY5HPZJW3yuexSNvlcdmmbfC67jE0+l12WaljpYvK57HI2+Vz2g3Z5CsvbFSisQDpa2BXtShRWssmS2JWpXQRp7SoUVrGrUliVtLWwq9nVKaxuk79m17DJXyPLUIvCWjZ5bXZtqj9h17HJd7Pr2uS72fVs8t3s+tSSwm5ANkTYDVU/tBvRWBE0YpqhfzZXbUe9VNC4SacwnSyEIDvRlsK2NIaE3Y7GkKCRNJ5CNV55ICnhlwQpGIuvZa1l/GsjMidaGx6D3Z7mBC+oMFwWfW8Q45F09jx5egWoFdNJa0zkS/kufoxfFTZ5/LVEezGYdO1KsVecEjc0Tyuu1dM6a89p07U12ofaGe2WnqKX1hvpj+sj9Qx9nX5AvxAQgdRAuUCTQM/AmMCcwKbAp4FLwWAwT7BisEXwqeC44ILgluDB4BVpyHyyimwt+8vxcrHcIY/In0ORUKFQjVDb0KDQpNDy0J7QidD1JCepaFKdpI5JQ5KmJq1O2pf0ddLvRrJR0mhgdKUZ3AxjrbHfOEez1ZxmWbOx2d0cbc6iWeon5kVLt3LTjLOZ1csaa82zNlufW5fDoXDecOXwo+G+4ZfDi8LbwofCP9LMs0Ck2h0fjOqeakmF4bIIy9whqi9T/eVTBOFdkh8kP0h+HykAUgCkgI8UBCkIUtBHCoEUAinkI4VBCoMU9pE0kDSQNB8pAlIEpIiPFAUpClLUR4qBFAMp5iPFQYqDFPeREiAlQEr4SEmQkiAlfaQUSCmQUj5SGqQ0SGkfKQNSBqSMj5QFKQtS1kceAHkA5AEfKQdSDqScjzwI8iDIgz5SHqQ8SHkfqQBSAaSCj1QEqQhS0UcqgVQCqeQjlUEqg1T2kYdAHgJ5yEeqgFQBqeIjVUGqglT1kWog1UCq+Uh1kOog1X2kBkgNkBo+UhOkJkhNH6kFUguklo/UBqkNUttH6oDUAanjI3VB6oLU9ZF6IPVA6vlIfZD6IPV9pAFIA5AGPtIQpCFIQx9pBNIIpJGPNAZpDNLYR5qBNANp5iPNQZqDNPeRliAtQVr6SDpIOki6j7QBaQPSxkfagrQFaesj7UDagbTzkQ4gHUA6+EhHkI4gHX2kM0hnkM4+0gWkC0gXH+kK0hWkq490A+kG0s1HngB5AuQJH+kO0h2ku4/0AOkB0sNHeoL0BOnpI71AeoH08pHeIL1BevtIH5A+IH18pC9IX5C+PtIPpB9IPx95GuRpkKd9ZCDIQJCBPjIIZBDIIB95BuQZkGd8ZDDIYJDBPvIsyLMgz/rIUJChIEN9ZBjIMJBhPjIcZDjIcB8ZATICZISPjAIZBTLKR0aDjAYZ7SNjQMaAjPGRsSBjQcb6yIsgL4K86CPjQMaBjPOR8SDjQcb7yASQCSATfGQiyESQiT7yKsirIK/6yCSQSSCTfOQ1kNdAXvORySCTQSb7yBSQKSBTfGQqyFSQqT4yDWQayDQfmQ4yHWS6j2SAZIBk+MhMkJkgM31kFsgskFk+MhtkNshsH5kDMgdkjo/MBZkLMtdH5oHMA5nnI/NB5oPM95EFIAtAFvjIQpCFIAt9ZBHIIpBFPrIYZDHIYh9ZArIEZImPLAVZCrLUR5aBLANZ5iPLQZaDLPeRFSArQFb4yEqQlSArfWQVyCqQVT6yGmQ1yGofeRPkTZA3fWQNyBqQNT7yFshbIG/5yFqQtSBrfeRtkLdB3vaRdSDrQNb5yHqQ9SDrfWQDyAaQDT6yEWQjyEYf2QSyCWSTj7wD8g7IOz6yGWQzyGYfeRfkXZB3fWQLyBaQLT6yFWQryFYf2QayDWSbj2wH2Q6y3Ud2gOwA2eEjO0F2guwEESwWX41R3iqHt5oGb7UIvNVi8FaLk7fakZXGik1ZrNiUx4pNZazYVMGKTXWs2NTAik1drNjUw4pNQ6zYPIwVm8bk705nTbE61BarQ2plZgELszwsjZVlVVg91oy1ZY+zvmwIG8MmshlYH4GPjzP4+TiDr48z+Ps4g8+PM/j9OIPvjzP4/zjDGgDOsA6As4fp7GGcYVUAZ/D31Xq5XZMkDD67xThPZ8nYD2zMOrL+8ftcwFayDWwf+5QdY+fYFXaD/PVknoen8cz7yFCrDHEPfyZWHGaptYa4ZDYkcxIkcyGZlyCZD8kCSFSKC5GiOlucdbYk62xp1tmyhJxXIo1VWWmszvrWW1lna7PO3s46W5eQxnqksSErjY1Z39qUdfYOzjL7XbIaIXTFVqbZrSjeRnHrrNS2g+2IlzOMdci7a4PdWcDuSf1Nor+FqL/1ZQb6m2UPovlQ2H42a53QtodTr4ui17nodTG6l+LYZUmN50Yjku6BRp/dOi7ZCsk2SNRK5Wh7s29HZFG8h6hVxMzVwkbxdUS19iNEebUeLepg9WdyXJZPkJ8uZsXX7u9IIyKZaWIsHamJcn6V32K6eAqH7iPH+Bm6rq8Y5JPu5QconSoiPb4+f0e+mm+gdArQUUPU85GpfBYLqPdN0VFIFPexwXwk3X8hn6wr76VyF55P2pg/yjTKfS+/5ZOX41WYTrmr45yPpPJ8FK7BqvldaZBHsCe+K1Gq3k9PqXfnY/hin1y9vV7jTXgvPtUnV++219WTnbwF99UP3vStq6d/eEXe2UfU0xQBruPIw2v4mHp/foBdUAfRoj6mnsngPNknU++BFTykdg8SpOo9opzn8cnUW0sFO8GtuFT1sr726v/19XBBvTmfXYNyUntg99ptSLPnwQrk/fG1ckEjs2bWqqUBfZe5S5aBcBHChVl7B//qrkN1pqE+1GjMm/VL5SlgNREOj6+rqvO6f7cuuhx6eEVcd3OqIbUftJ9fwI6V2h3rjvSws8rX8U9IfhD7aHelc0T/zD0rfllUTJCPFekkX4p9tLvSvqIB9qwE3yGsBHlrNbLVjpUwEqQ1RN7MHSs+mZ9IkKepb3H1nOOxBKnHb5CkHEbbmrty9jv/OnOfiq9OkJ5TY4iHMNpGJ8gPYN9JvVFwZIJ0E1dvdz6C/tkiQT6Pq963K/6U5R3py0iRLAM7wgskyPtjD4pGHc+XIG1L1o8z8gPpiusJ8loYT6quryZIi3PV8k3obDj7MEGezFXLqrreF5eq3om9D7seta+GPiXRg/BuR7UC8S/t7QrqMV3srvRtZUUEjahelMMw8m0D9ggaP0EaP6Moxdlke0P2XLK3SfZC6tsGjZnFNOqWkgW17E1kycLxcdEw3tOTcFfqafWA3Zt6IaOxOZDuR1kiYS+jHqrZ68hiBnHfs9ndHajMkdML4dI7a/sUrkXYHeFiqh+NFaBD1eUgpv6pGvOwG981Pmam/Zf3ywVs3Wi6frOtdlEFXfHP0qtJ6TWgOZSJ9Cykp57aSGV33m2s222xA6Jjx6QtdF263ZZl7pNcJb08mK+lI3Ond3pcfoLkHdVzV/yUT76XNH89fiBuKe5I1fNppfkmvtYnzSBpKl/Kp/ukY0gapPE41id9iuIrfDT6911pa4qPkJ1J90lrULyHt41bkjvSohSv5nXi4+iOlOw7m8FLxi3L9P8Ds2vVql1o7GSOAo5RoFFag6iFZtN8M4g+H0KfT0KfN+y11B/N/5bnMe48W6HCpggfQdgEYXOEtRHWQkizKO7gf7QoTva1GfX2QWwc6av97CqPWwGH+pWT3aFZuZMzLmkFSacESWtISBM7ueKSxyBpn/CddEg6JkjaQNIFV8nMX8nCShVnZZGHg3RdpOXh+hiuSXbaUlgAdxZVfd/pjFQD5CvEf0GLnD3cdRR5xnC/Dr6ZEs+/C9JSd+0iFZVqdqV76JoUxpycdF8hyqcAdI/FNK2peueA+obWQGtAakL9Ppnj98nqvbQcvx6oEdcYf4EWaYSntEsmyDTSwuXRXqlZUmqL6CilkTPfAhLtHx3KjOiY6ATmRTdEN2I+w6Pno7dZ5ptJWiRophnI5ymmxkCzBJnG0ulQc88qCVKd1cKhdk8LZclJN0XbRdtRzh2jnaCb/vM7ORA9F78TZb+Kx9N5HXdSHneSmiWj1KLtox3+ZJr0bYc7Iq6BS8JmZaaU8YcUxkVfjqeQHbl0dgL/aS6ZOqM4xVVwqFRnxqUpVDOF4kem/I91cuceBc2ukqObou9EN0ffjW6Jbo1ui26P7ojujO6K7o7uib4X3Rt9P7ov+kH0w+hH0f1R9a4SDffDcD8G7seLp9M/+nR0QHRgdFD0mejg6LPRIdGh9K0XomOjL1IJX4q+HH0lOj46Adeoe9gUxbtLVH/0tntbvW3qTr1V3irGvF3ebnWnfB370unj9HX6Of2dp50BzkBnkPOMM9jZ5LzjbHbedbY4W51tznZnh7PT2eXsdvY47zl7nfedfc4HzofOR85+V3N1N+AGXemG3CTXcE3XcsNuxM3m2m7UdVzX9dx8bn63gFvQLeQWdtPcIm5Rt5hb3C3hlnRLuaXd2m4dt65bz63vNnAbuo3ch93G7iNuE7ep28xt7rZwW7qPuoPdZ90h7lD3OXeYO9wd4Y50R7mj3WnudPcv7gz3dTfDXeIudZe5y93d7h73PXev+767z/3A/dD9xr3ofutecr9zL7vfu1fcH9wfPeFpnu4FvKBX06vl1fbqeHW9el59r4HX0GvkPew19h7xmnhNvWZec6+F19J71Ev3+nr9vP7e094Ab6A3yHveG+O94I31FngLvUXeG95ib4m31FvmLfc2epu8d7zN3g5vp7eHPju8g96X3iHvsHfEO+od8457J7yT3invK+9r77R3xjvrnYvljOWKpcbuieWO3RvLE7svljd2fyxfLH+sQKxgrFCscCwtVjRWIlYy9mCsPLVhDqeb8xRpnWcd6iHOX50T7F435t7PSrll3FqsmtvK7cSauc+741g7d6Y7h3VxV7hr2RPuR+7nrI/7k3uNPetJLycb7rXyWrHJXhuvE5viPeMNYRnei96rbI63wlvNlnjvelvYCuo529kq9JfV3nveF2yNd967xnbGisSKsE9jxWLF2WexUrHS7AvqTUXZFGehs8h5w1nsLHGWOsuc5c4KZ6WzylntvOmscd5y1jpvO+uc9c4GZ6Pzg/Oj85Pzs/OLc9W55lx3fnVuOL85vzs3nVvObZe53BVub/cpt4/b1+3n9nefdge4A91B7jPuq+4k9zV3sjvFneoudBe5b7iL3XfdLe5Wd5u73d3h7nR3uSfdU+5X7tfuafeMe9Y95553L7g33VvubZquca+EV9Ir5ZX2ynhlvQe8ct6DXnmvglfRq+RV9h7yqnhVvWpeda+G95jXw+vpPen18np7T3l9vBHeSG+UN9p73cvwZnqzvNneHG+uN8+b773trfPWextiSTEjZsasWDgWiWWL2bFozIm5MS8WiyXHssdSYjliD8TUe6tstB9D+8XQZgXRZqXRZuXRZpXRZrXQZo3RZs3RZk+gzbqjzfqgzZ5Gmz2HthmJ9ngtc00kpYOyGd7b8daZ6LzqTHJecyY7U5ypzjRnuvMXZ4bzupPhzHRmObOdOc5cZ54z31ngnHROOV85XzunnTPOWeecc9654HzjXHS+dS453zmXne+dK25nt4vb1e3mPu4+4XZ3e7g93SfdXu5L7svuK+54d4I70Z3rznPnuwvc/8fed8BZUWTrn+47d/IUc7u7qmtmYJgZchpyzkFARXIWEMkgkgRkFRDDM/B2zYsKKAoCSlCSgCCKYX2uATGRRBQDJiSDgIR36rs9wyWuuvv87f/9H/3jdN+a6gqnzjn1ndPV1cvdFe4L7kp3lbvafdFd437ibnI3u1vcre4291N3u/uZu8M96h5zj7u/uCe8LK+oV8zL9op7OV6ul+eV8Ep6pbzSXhmvrFfOK+9V8Cp6lbx8r7vXz+vvDfAGeoO8wd4Q72ZvojfJm+zd7z3gPeg95D3s/dWb5j3iPeo97y2RE71l3lHvmHfc+8U74Z30TnmnJUlL2jIk42RYxssEmSiryxp/0OiwXdZ99bW6H2aQYZFhbPUnRSZT9Hsktu6vB2C2Ghq5nrAjmEmJrGL7PkGOluPYyqySfzJ5OcdQvvd6zmfxvMBpPB/czTPJVJ734rgdN1KYLdbtFM/WaRUl8J0vUqKsL+vj2zrcjmipmH3M/YT7Ldxvoih90KIasbhJduT5d6TsxHSU7Mx0tH+CbP9x2YWvx5yVsytydkPO7sh5Ejl7ICf3kEdxKJ1Zr5WHeXUmZqv+3hCerYZ5IxmHcUt4rppAZ/ZcK8Alj5uWcyn9OO9QLsuSI+RIc7+p2RnN43gD32fu6op3RnJ4Pm0RxXZ6jWmFXku2HB6kvIyUV2JSXkLKupiU9Uh5NUi5UN0FbRwVtPEJTivClpvbz9a6K3kYi64Yi25sa1+l7jxf7KJr2LJWo9vY1telqbKBbEV/kW2ZV4/JwVzXXDlHLqSF/kP+dFqh1+h36CW9N6MUbYCWLwziWh6iM9FY1yz85XkgR4NIi6BtxAi1A9mhbiH2rRirXk/h0GhGrPGhm0I3UQLe3k2M9Ir0gnQNoxRIV1pkZGQUCUhpemRKZAo5kbmReeTqXro3yZgxjK65e7Kw1jgn3knmcUhljBx2KjlNKMdpxYi6RjAq0biF+RZm1KfehW8bDQ987Ohe1MZn3RD8Nl86bBNw9qmg3nrso4wKUniUjO1hXvP8wHKU5WWxJlT2KrMmmLGKx1glmBhfYcuKcMsijkNJ7A9ISmGPI5PSnGJOLucp4ZQkBYSvufVVeQ6u7tSkbKe2U4dynfpOAyrhNHIaUynuVWsq41zptKFyTlunHVVwOrIvUQl41XOAP7mc2uDJ1eylkE7X6Wyn2+v2rPMddUf0PzOQlJlsbTy2obPJ53luHmUyyllAxbw0rxnlMGLpyRLUj7VjiDrtP0jjta3jrWSdqFOsIjpNC8vl0iOW1K5Wlq8zdDErSxfXOVaOztN5Vp4upytZJXRlXdUqq6vrGlYFXVvXsSrperq+VVk30o2tqrqZbm5V15fpllZNfbnuYd7Jo4ipidvONVHY1ERJpiZKMTVRmqmJ83BNpExNpE1NlGFqomxTE+WamqiEqYlKmZqojKmJypmaqIKpiSphrGthrG1agBE3KSvozHuvs6ngbQYriKjNNhLOWKgra+TfWKNK6tdYT1pC/9KddB5r1/hx7NEp41E6RdmPy3PyePRLOaUo3qnmVKMEp5ZTi326uk49loeGTkOWhyYstanO5c4VLBVXOVdxae2dDjxT9Gc5djCeQxy24c5wRmfGIgxkKeNZCT5hMcwkxGjZ4+qr83xSkjHt3dSJMex0GoD5ZBhj17dpDGPKBXQTt/xnup2RYTVaCdz3vrxJ3kwfyFvlbPrIf8Q/Tod1qk61eugiuojVUzvasa7WvtZWL52ts60+OlfnWtfofJ1v9dXVdDXrWl1T17L66bq6rjVAN9ANrIG6iW5qDdItdAtriG6lW1tDdU99tXWd4ZUpnUeYS2fp5NJZOrl0nrO4dB5zLp3iTemUYEqnRFM6SwGXzlLApbOV5NJZFrh0Lo1Lp3RTOvMqOmKlEa0xIzaHzrx9MjOIRiIiJyeaSI3xUJivY3i2sNlHGcujW9ItHehzAmO32pTIqK0hJTGeb07JjOKvpBTG7x0o1eA3SmPsNoKKGAxP6Yzfx5HDiDuLDTHjbfIYb+eRYoxdkXyDs0mD45myK9tdE0FLYFQ7n1uwyFnE9uMx7zEe2RneDEpgrJfMMykjPUpipBdBdCbOeDQ81m3dtmx5ZnssoewjPM0zTygqp+xR2ng2GZVmBT6YZyAT0fOnz5Lfj6kkexDfYI+NFMZvfJdBbiy/jziPcMkPew8zJ6Z507hlS72l3LKj3lHmyinvFLeMjTK3zJbxlAxkY6y/xbhtOOYJG72lwK+wqTT3cxGX/4LzAnsW+51DXOMR5zhL+imXR4dt6VzSBmlTFuPrnVSM0fVXlMO4+jTlYjRKMp6uQaV4TOpRaYxJecbQPagCxqEixiGfUfQtVBl8rAI+VmUc/ThVYyT9FFU3SJpqGRxNdcDZeuBsA0bRPjUEem6mrlNjqYWapCZRWzVFTaF26jZ1G7VXd6g7qIO6U02ljupedR91Uw+oB6iHekg9Qj3VdDWDrgHPPcRfDLIxHDc7lyQwx5vxqLVwO1M6e5xduUeG+3ngfjXoXTO2JG/SAIxxppvJuXPdXOZnObcc2ezNVoHttuEVEXBeND5RHrH6PYHFisaRFR9TOHVbYeofNxfZVNf4AVwT+wGsU+wHsPV61HmUrd8Mh+XaeAJs/Z50nmQ5mO3M5hawV8fWj706EsarY7u32FlMDnt1S8g1fh15kBvFnt0q8hmDP0ya5fJxnq3MuJZi5H2CynqnvdNUkVG3RZUM6qZ8g7qpCmtSGnM5Xabz2DvSodrGY2IJYI+JJaA6j3oDuUVuoSZyu9xOTeUO+Tk1k1/Kr6mF3CV3USv5nfyBWsuf5E90pdwn91MbeVAeobbymDxGHeVJeZI6ydOKqLMKqTB1VQkqgSUjSaWwZAglqLeKKIf6KE/51FdlqkwaoLJVNg1UOSqXBqmSqjTPs2VVWbpOlVcVabiqrCrTSFVNVadRqqaqQwbNMkY9M+Z0Khjd+bFjTj8Upv6RYx5xleuzzGa6WSytxVhy49waLttst77biFLdJiz/6Sz/Lch1W7qtWd+vctsz7ujIGpEFjchmjfgbFff+y3uL0cc73kfQjk2s3Vu8razd272vEUe0nIHobz5bLfPO2dGgv88grmi8gmzzLqL1ZWF6AU78Pw3436IBUT9gUTDCzyJudd7sZSIPzPeZzizm+1POHOb1s84CHmcz0xZxnnNWMJdXGm5iPsxgv/4Bashz3jRq5E33plNTnjlmUTPgvMsw8w1m//4Ee99m/ruO578kGi5TmLPjZRGeS/7Ec0kG3QRu3i5/5hbfBeQ22BnMLbvOuY5bNpo9RtsZ54yDDEffFTOfxkvHfE1Rzyr4FX1v0Ql6uYDLyrtgL2dxHU8ZKXI1zxtpblG3KOtarluCtbKOW4d1rZ5bj6T7nruBlLvR3cjz7Ifux5RhoiRU1N3mbqNsd7trYn0n3BOsd9leNpXwcrwcnnPzvDyWrjJeGZ5zK3qVqIw3yBtE5bxJ3iSefw3PKoBnFYEQKoNPVcCnquBTDeZTItUEQmgkb5A3sIxNZOzVFD64mbkJM7d9AcwQxxi1PP826CmCvzn4m3cRFHPGR4zGzxeafHKT3MRlGLm2WKK/itYEtExAxU7MfdFVMotQ92a5me/bKj/l+z6TOznlG5b4pEvcHV3hs9jgIK71CHBQHDAHeSu9ldzf1d5qxlVrvDVAbISIhE0jLFE4/k4hcjC7nKVeesTB/zTwX4DzEXDeAeclOK/A+eLG74uMjph4hUG8FiNexrrOePYE453VzrtsC/e7NstBSbcaVXGvd2+jxu597D90YWS2gK5lZPYaDWVk9hWNdr9xv6Hx7rfuT3Sju9fdS5NN5JtucU96Ft3KWK0r3ckjO5ye45EdT8sYk91JaxGTeN1b771BbwD9/l2OkxPoPf2yfpU+OG/0/xF3ngd35rBeE/Tagl6HoNdx0OsUaHEatFgw5ktiGTLa6kBbJbRVAfP9v8idaAymdRDFCGIUiGwQLTExCubNKpbRfu6NrPv3uA+znj7GM0Vt5kQG66Dpdwcg9suMHsFSRf1I4y86cg7Lb6Y/w38Fz83PlvCl5j7o3K+5Lwd+duwIRlu5DNGtLI+RsXxRvkxl5dvyfazcu5TeJ0TjdOBjMvNxPGN7w8Em4Fpr3/VLUxtwrWDHArP6syCyZ1YENAgs6nJgqS14bl8+Ji1EPAZWPrynglSu10vz8oOW5sk35N+prDrtO5Svt+vtjN5P6pPUPMPP8BH9u1QP0oP4CzeVbbPB+pIRU3G2zQbxZ7g1GTdlug3chmybDW7KBm7KdTszVsoDViohO3JfS8q5ci7P9vPlfKrkH/APclvWcL+r/KFYJ7Ew7liCe2NscgnMmK3QxqGIKY7293PrbkJMcVLMqIwJRmVKzKisCNZDDYoZlRUYFbNGr2PMqKwwUs5ywPLjXc7S4GHs8/QOvYNq6dP6NNXO4H9U5x+Mh48oF8m3eEyF/Fh+Quk++SypfsgPcalhP0zST/KTSflpPOLa93xJ2T7/oxwe8AzK9Yv52ZTn53L9Jf32fgcq73fyO1FFv4vfhcemh9+T8v3efj+q4g/wB1Itf7A/mOr4Q/2hVNe/3h9B9fzR/njspPHHjVwpnluMhVjOtqu8+4n7HdVzj7KNagt+dPdu9m6jQYw0n6IR3vPeMpriHWXLcQfwzTw5SU6mBXKZXE2L5Hr5Ki0H/16QH6tTtMrwz/rS8M/62vDP+sbwz9pl+Gd9Z/hn7TH8s/YZ/ln7Df+sA4Z/1iHDP+u44Z91wvDPOmn4Z50y/OPBYv7Z8YZ/dqLhn51k+GcnG/7Zqf4s/wvb8Y/5x+3OkKMJkK2pgcS8UGgDxsek2HQEe00MiE2zrrAM3mwfkxayatl52DOiQWxO+3goDhGngjSLbP2sNnjNgj7SeX67iTtdBBUyhtNBBCAMexDvlnHLUALiAImIAyQhmpCMaEIm7EEFoKCKsMgNZGfZmdF5d9mdrpK3yjmM0Y2dGA07MQbxyhu4BUnRJ72stz6XlcV+WxpboRzWgI6yE2tHF9mFZX+GP5Nl32ivz31ZR5m/IZrxDqIZ8YURtrHcRzOjhuUQOZQS5XA5nJL9x/0nENnKYcS0lTn0NfsccexzfMv5fpS7KUHukQcoSR6Wx0moMPsWHvsWiSRVqkojXxVRLmUopbIoW5VmH6Ik+xDlqJSqpPKpjKqialA5VZuxeL6aqWZRFbVALaAaapFaTDXVUrWMaqsVajXVVWvVemqk3lHvUAv1ntpAl6kP1UfUSn2ittLlarvaSW3VbrWb/Zs9ai91UQfVIeqmjqjj7OWcZJk3z7HKsN/3EPd1Gnt8Yfh38aw/9/Pc8aD3ICWap4WUxJ7aMcYmJ72TlMrW8VlKkz9z3zz0TaNvGehbFvpWDH3LQ9/Kom/l0LcK6Fsl9K2aqq8ac6+aqWbckzaqDdVT7VQ7qq86qA7UQHVV3aih6qF6UGPVW/WmJmod97YpensZetsSvW2N3l6B3rZDb7ugt13R2+7obU/09ho8MRtoYtJGliC1BKm1ILU2pDYEqY2D1Ia5r3MoHrKYAFlMLPTkCr69vBI+wXJGyqSv0dfg658XQoVOgHaIVkHCYMdgqcrDRjWAjeojNzFv+rFNeIX+BtRucBv5R/2jWLNnSirJ6S0ZqZyZh0z0LrqacDX/LRxFUUBOEsgpG8ipstJcdtUYnHW9wVnIl4N85ZCvHmozdj0cxVmIwDuYjbLQs4roWT48GoPVCFhN4b68oAXvBi0oj5Kro+QWaEHLwohjg0Jk/GLAk9ngyaPcqqPsB2TDD6jMPPGpKnhyw6/qnwX8W4DezLrezoW/DPduotkxT0684D/Rml9VemIUzQFXJwPTZQDTNWUpWEPtgIe7qevUDOqldrDc/eVfyvFfJznRVWBmBV3LQE7XmtHiWZl9QKeH04N5ZJ62wWM16xbQNvZozWoFTrnPvR+rgqPP5gpLs+4PSnvpoqXV5/Y9wKlznHmMsj93djK/9jsH2dM3zx8Fnj+mm/UP5CBy7vEsvplxpImfZ7hH3eOMIE38vDieUeYhil4CzyhL4hllKZ7jb2a/3sTMy8BSlUXkvBzP988zR5Z7y3luecF7gecWY7UqmZUNlI8nE1UQP68K77o6W+of2dP/Wf7MVjVVpVItHmHNtrWSqkR1VD3VkO2SsUhRK9SIrVAftkXXqRFshUyM/TI1VU1lK2Ti6q3YUs9km7tULWVbtEPtoCvZ/hykNuq0Ok1XMcpzqa1fxi9D7fz6fn1q77fz21EHv7/fnzrymM2iTv58fz519pf4S6iLv8pfRV39nf5O6uZ/739P3Q0+oB6wMFeD9wZHEWOn2jxjV9fm/bjo6vVk7ORjvohSVPZkT74fc21V4dUbhVcvIlc6aXk1ezQmT/T8RnB+EaM/xOsXRCYSC/P3DvL3DvL3Lsxvce5zv1i7DuUs8B6/JKI99yvLLweaOJf7OJ/lPQSd8aAzxaAz0IULaIspG6vDqBLKrnzeSopXYFf7m2c+7gjWx+QzeocyHJRRAmWURBmlzytjPcqY6t7LZdzPti/8O8p4lc5f0fHrOfQaOHRvELM1z9SM3fRgN4vBbl7aKz037vQ6pOpz53Mub6eznzX6oGtHn+P+ijKiPXoDXDFP5wlP50O/6e7ofLfCXcN3v8T4PuFX3h2Nf70JS2Y8AmIrcpTtynH3JHupp9k7yPhN7fgvjEtR4zl7VdhTc3/T3W/h7oneZL57Cnsjv5YH0RUif4cWLfuV90Q1zDwftr2VcjIih7F33SxvPivWF63jHdSx9ILxmah8RW38u5CweWzHTUSG7QDPENdjhriH5/373PuiWMdtyZiagKmLFJahgzLeM3U588CT2d4c5slcb0FMXcuCfBtMNMt5ADOHqdFyvnC+YLtxwDkAjNGPx9bUHkbt8ag9gWeUWexfzHHnMJpb7i5nn2Ctu5ZnmmPuMUp1T7mnKA2ziMAsUsTr7vWgdMwlDuYSF3OJh7lE8vyxlBTPHy9QBtYsFZUT5STKhs3NCXibzdzKYQ6HweH0wn7MC/rxPufT/yb9WB70IxMjXaVwpC3sBJlLrakn3cG48RmWoN2WMG+DWJ2tQdYEa6o103rOWm99aH1tHbET7Uy7ot3Ibm/3s4fb4+0p9oP20/ZztsGaZu3Xe1x6cb3XSFPsOjfNFsq9TLM2uV00y5L3tN6AnPuQM3rvRqTsj0n5ACkHkFL4DTD9Osp6C2V9iBwHz8nxBnL8HTk+Qo5D5+T4G3K8jRwfI8fhc3K8iRzvIMcnyHEkpmWbkPJzTMpmpByNSdmClGMxKVuRcjwmZRtSfolJ+RQpJ2JStiPlZEzKDqScjkn5yaRkpMSk7EFKakzKF0ixYlK+REooJuVrpIRjUr5BSnxMyi6kJMSkfI+UxDMpGcnmOqO0SWcZi9PfFl79UHi1G1fREnaiBDumzK+QEocUzh1T1meFV98FJWT9m2hZrLWYSNnAeMUDm3Hut3A3Ir5i1icaDzRZT9OPstc4XU+nkH5CP8m9m61nU4JeqBdSol6sF1OSfl4/zzmX6qWUolfoFcylVXo1pZ1n1T8wes1aaCI5KzLKFr5V82RQ94eYiaZZ5te9MWkhuo2P3fz7psLUPyLea9q53Uj4Hxg9TEDElxDxLYKIb3W0sgsivr0RMxqEiG/B+lsT8e0b+IojYqJoH4GbP2CFXfmYtBBtok34/ocqTOWZA/FdQnzXQnz3Hz0p/P81vlvkovFdE9ntDq+3LyK7Y+D7jofv+ygiuzMR2X0Ckd257A2fovkmtmptRGzVKdTGzGBkPoYMfqZP4XyXvgdjar5ocCbW+gnuMu8394tJsS1t9aEzkdZo2gTsn9sgJi1kDbA3WLXozMrsT+hCkdZUvZc1l/R+ngktfdDMbfowz04h/TPPN3H6GM8oYf0Lzxnx+iS3NyHDYruZlBFmq52SkcBWmK0vzwTmS9DeHxalnc0e7X7/CI1C3NR83TzlovFZE0dzYAtc2IKzorT+Cf8EZfqn/FPYpfx/JlZb859fKwgLH0HM10HMVyHm6yPmm4GYbxZivjmIi5ZGXLQM4qLlEBetgLhoFcRFayEuWhtx0bqIi9ZXtVU9aqKaqKbUQjVXzaml6qQ6USvVRXWh1qq76k6Xqz6qD12h+qq+dKXqpwZRGzVUDaMOiBR3QqS4GyLF3REp7olIcS9Eiq9F7HQwYqdDEDsdhtjpcMRORyN2eiNipxMQO70JsdOJiJ2adyxL/+ZIsYkRp4EXEfDCAS888EKBF1ngRS54kQdelAQvSiNGXAEx4kqIEVdDjLg6IjI1ECOuiRhxLURn6iBGXBcx4nroZyP0szH62RT9bI5+tkY/26Kf7dDPDuhnJ/SzO/S9LSPkIYHGbsLzkjvM+6p219i0cHz4YU5rdlbac/HlOS2/MM2mHhdYDWFWAMRhBUAYKwAS4HcnmjeL2LJ+63zHmrTb+Ykt615nL9vE/eyPp5u3wtjKHnOOk2veCOMZ2XIt8t0B7gDS7kh3JFbHbGbN3enupCxId1FIdzGsJ832ZnmzqDgkPQcR61zIeynIe2nIexnIe1msPKiENQf5WG1aGatNq8Da1oQe1JWvsp2tJ1+Xr1N96EQD6EQT6ERT6ERz6MRl0IkrIAftIQcdIAedIAddIAc9IQd9IQfXQg76Qw4GQieGQSdGQCdGQSdGQyfGQCdugE6MhU6Mg06MZ524jm5Wo9UYmqzGqrE0BSthb1V3qjvpNnWPuoduV/ep++gOrIf9D6yHvVNNZx36T+jQA9ChB6FDD0OHpkGHZkC2noJszYZsPQ3ZmgfZWgjZWgrZWgbZWgHZWgnZWovY7Dpgwx3Gzul97AuRPs7egaVPGPyvT2cw1sgIMQYOZ8QzAk/ISMpIwr4iZ61FxqriFKxESsVKJIEYaBGsHk7HaEewxs7BumGJuKePkczASGZG15AozbzPBe9Lgfelwfuy4H156GBlrC2uirXF9RH3bIC1xQ3B0UZYW9wYMdAW4GVL8LIV1ha3UTsKn0F1BFc6gStdwJVu4EovX/ua+vhLmDfmCU2rX6MvkO1EyHYSepsM2U6BbKdCqtMg1QJSXQRSnQ6plpBqBV744IWGVBeDVOdCkvMgyaUhyWUgyeUgyRUgyVUgybUgybUhyXUhyfUhyU3AzZbgZitw83Jw80pIcntIcmdIcldIcjdIcndIcg9Ick9I8tWQ5F6Q5GshyQMgyYPA98GQ5CGQ5KGQ5GHg/nXg/nBI8mhI8o2Q5AmQ5JsgyRMhybdCku+CJN8NSZ4KSf4zJPkBjNkjGLNHMWbTMWYzMWZPYbTmGJx6/pzAqG0Hz+FH3RMsg1lePntJ/bwhVJ4R3GSqihmjJmaMWpgxamPGqIsZox7sfX3Y+yaw901h75vB3jeHvW8Be98S9r4VVrO0Znx3jHr9ZuTgXWA+6+f1Z+ka7A1muTLalQztSkWr09BqgVYXQasjaLWDVrtotUarM9DqTLQ6C60uilZno9XGe024GEoDxooDxgoDI8XDE4kr+LI5RfdJiKYV7PsQnW02Gw/QrW6o/BFxN6w+9a7GM6uLvG+G95Y66kSdR910Od2AxuhG+mq6sxAtF7xXtMVgLTxnJ9nVvL2o1+q1jE3X6XWMTV/RrzA2fZXxbAIVrHf+da3eijbejLsO4PoW9MM8p7vUW3LENZmSmzFtzTO28cR6BnUkBDUUxYrrgh5sQx2fow7zXpyFPlrs/0WfXBi66nfyioWOBrHnMIYm0GT+fwdNpftpGs2k2TG/nsF64CVBK120rQm1pDb8vyNjjz4sl8NoVMyv8fz3aOvNN+ottQ68uR5tvT2mDz3RtyFneuJitxLnizMc9cx3GmxYpN/bR1HYrj5o53juax/0bhT3zzyDpiBfwbjX4vExo9OVr3qxD9WaCnDVdrTyHkQtvjy3J+5ytHhoYYujY2Pom/h7v4AD//xoMUJADx7kq+gXK6JXCzh1Cdey8rzRasLjZfjQl6+ipUSvJnDq5KB3n/0zvWPtOTOO/2xPLTIrsktSwfPv9KCFO9AelC7NjlWafZ3Rcoy8QY6V4+R4eaOcgLepQ3hvm7zbvTvZLpl3pBMp+j62ecfVvI9t3njF94mt/dYR65fgO48RW9lZdgm7XOjycP/wwPDg8NDwDeFx4RtFrighSokyopyoICqJyqKqqCFqiTqinmggGokmoploIVqLPmKAGCSGiOvFSDFajBM3ij+JW8St4j/E3WKq+Iu4TzwoHhbTxKNiupgpnhBPitniaTFPPCMWiEXiObFULBcviFXiRbFWvCxeFa+Lv4n/En8X74j3xPviA/GR+ERsFlvFp+Jz8ZPYJw6IQ+II9+Naa5/FqMw6bB0myzpuHWfP/rR1mkJ22A5TnJ1ip1DYTrfTKd5mWEEJdqadSYl2np1HSXZZuywlh1qHWlNKuF+4H6WGB4QHUFp4UHgQifCQ8BAqEh4THkPp4bHhsRQJjw+PJ0fkiBxyRZ7II0+UFCVJitKiNClRVpQlX5QX5UmLiqIiZYh8kU+ZooqoQlmiuqhORUVNUZOKidqiNmWLuqIuFRf1RX3KEQ1FQ8oVjUVjyhNNRVMqIZqL5lRStBKtqJToLXpTadFf9KcyYqAYSGXFYDGYyonhYjiVFyPECKogRolRVFGMFWOpkhgvxlO+mCAmUGUxWUymKmKKmEJVxR3iDqom7hJ3UXVxj7iHaog/iz9TTXGvuJdqiQfEA1RbPCQeojrir+KvVFc8Ih6heuIx8RjVFzPEDGogHhePU0MxS8yiRuIp8RQ1FnPEHGoi5oq51FTMF/OpmXhWPEvNxUKxkFqIxWIxXSaWiCXUUiwTy6iVWCFWUGuxUqyky8VqsZquEGvEGrpSrBPrqI1YL9bTVeI18Rq1FW+IN6ideFO8Se3FW+It6iDeFm9TR/GueJc6iQ1iA3UWG8VG6iI+FB9SV/Gx+Ji6iU1iE3UXW8QW6iG2iW3UU+wQO+hqsVvspl5ir9hLvcV+sZ/6iIPiIF0jDovDZHYoTKewNSjsil/iTyU2Ns/S8BVFsgZarN9xq+JWma89xp+kkPnmOZ6lsVZZw+KNZbStofGfEnasiDPPZ62Qea8+k5LjvDgZp+L8OB2XEZcZlxVXNM58186Ky44rE40qs7fa0DbRqejXmKMpV9rDqeBrxrZ1iH62q9g17TqcozmntbM72F3tHnYve4A9zB6V3D15Ev/9gkfyQ2cfXMrZR53zj+RVZx9c64WP5uccLbltZx/tzj+S9519cF8ucqTcffbBfT776HGhI2Xx2Qdz6eyjD44zvweccwzmY9hFjlEXOlJOnX2kpp9zZJxz5J19BP2Lthcl0P99dfrCX502O/plAUVGMWRP1twzOC4WxT1Dz9EKWkPr6U16lz40eJj1of7voHV+F233e+hFvmxt9ga+11gVfM3Q/KpPBTulJhbsagrEkg37YVbHxZm91YMdqJcEVwW7w57Zg7hgX+toGYMo1TwJLkSDsVy200umma9vlQPNB60JWgu0Nmgd0Lqg9UAbgnYCvdrQ3/gdxfGMToO98grRdyz2/ufa1Rz0ivPa+Lt3rIzLxve0/tGXk8dYE6zJ1h3WVOt+a5o105ptPWM9Z771Z6233jRfA7S2WDvM1wIZ3RyxTti2nWiL6NcH7dJ2RbsaS1kjtgRXsAXoyjasnz3EHhH9/qF9J76P+Kj9hP20vcBeYq+0X7Jfs9+yN9gf29vsL+xd9m77gH3UPhWKCyWH0kMqVDSUFyobyg/VCNULNQm1DLUJdQx1D/UJDQgNC40KjQ9NDN0Wujt0b+jh0PTQk6F5oUWhZaHVoZdDb4TeDm0MbQptD30Z+i60J3QodDyO4uLjUuOcOE12OCmtCsbH0FKgpUHLgJYFLQdaHrQCaEXQSqD5oJVBq4BWBa0GWh20BmhN0FqgtUHrgNYFrQdaH7QBaEPQRqCNQZuANgVtBtoctAXoZaAtQVuBtga9HPQK0CtB24C2Be0I2gm0C2hP0KtBe4H2Br0GtC9oP9D+oANAB4IOBh0COhR0GOhw0OtBR4KOAh0NegPoONDxoDeCTgD9E+jNoJNAJ4PeAnor6G2gd4DeCXoX6N2gfwb9C+i9oPeB3g/6AOiDoA+BPgz6V9BpoNNBZ4DOBH0c9AnQWaBPgj4FOht0DujToPNA54M+A/os6ALQhaCLQBeDPgf6POgS0KWgy0CXg64AfQF0Jegq0NWgL4KuAV0L+hLoOtCXQV8BXQ/6qqH/Bru2tqScyJHIz5GjkWOR45FfIiciJyOnIqcj30a+i3wf+SHyY2R35KfInsjeyL7CtP2RA5GDQdqhyGG69A6XpobPIjsin0e+iOyMfBn5KvJ15JvIrsiGyPuRjZEPIh9GPop8HPkksimyuTBtS2RrZFuQ9mlk+yVrsKx4yjlvHhhPE/GF4HvpYZpOT9I8WkTLaDW9TG/Q27SRNtF2+pK+oz3R79uT7diRz0B3gH4O+gXoTtAvQb8C/Rr0G9BdoBtA3wfdCPoB6IegH4F+DPoJ6CbQzZe8dwvoVtBtF7n3U9A/hkPh0G7Qn0D3gO4F3Qe6H/QA6EHQQ6CHDY2MAb0BdCzoONDxoDeCTgD9E+hNoDdf8t67Qe8BnXqRe1eCrro0h7BLanTtm+1QxOywG4r0ZRoXuZbO3RH1HyAjOULfCjoadJzZEU4/CfqfoH/m9JHIMxJ5RiLPUOQZijxDTZ5zVheb55pJ0bV5Z9Vry+HaAp2EXdyexfVE0FuQsgB0MlLuBzX79Z29lxyQo/cKRfddi8GE/MuOjKbormvIFTEraaL7W9xGjbStQzpOh3W8TtRJOlmnmP2zzO5Z2tWellrpDJ2ps3RRXczsoKXNLl3ldQVdUVfSlXUVXdXsn2V2zzJ7Z5mds8y+WWbXLH25vkJfqdvoq3Rb3U631x10R91Jd9ZddFfdTXfXPf7QtS355OlUXUQ7Zt8ona1zdb6uZnaJ0nV1A7M3lG5hdoXCnlD/03tzJWIFcMGOUmUp4s/yn/Sf8mf7c/yn/bn+PH++/4z/rL/AX+gv8hf7z/nP079qvyVBcWYlGP838baL7xxkkYAMsfQ4Iym6jwZaLgcHUdLoryGFfzMlz/BnYs3HpXaxsNmvayY3yc1yi9wqt8lP5Xb5mdk/RH4hd8ov5Rz5tJwr58n58hn5rFwgF8pFcrF8Tj4vl8ilcplcLlfIF+RKuUquli/KNXKtfEmuky/LV+R6+ZX8Wn4jd8lX5bfyO/m9/ME8P5Q/yT1yr9mDRB6QB+UheVgeka9Js+b+f9f+GGY1vtlR0nxJpLTZxwI7FITk9uD8ZXD+CucL73RhvhBhfPLWbA/7si9unp/czz74M+x/r2ffewt9TfvohJVoeVaOVdGqY7Ww2lu9rCHWWArLzaZklB6WW2Out8Vcfxpz/VnM9Y6Y689jrr+Iud4Zc/1NzPWumOtvY66/i7n+Pub6h5jrH2Oud8dc/xRzvSfmem/M9b6Y6/0x1wdirg/GXB+KuT4cc32k8PpS+4hYVnusHG+P5x9D8C2aKYwB7qdHGQE8Q0t4/jffu9mIr+GY/SuPsnImWunsv+ZYZdl7rWM1sVrHSMbm4LwlOG8NztuC86fnSNBnwXlHcP48OH8RnHdeUNJC8uvg/E1w3hWcvw3O3wXn74PzD8H5x+C8Ozj/FJz3BOe9wXlfcN4fnA8E54PB+VBwPhycjwS8PrPrSmvKlT/Lo/KYPC5/kSfkSXnK7E6kLGWrkIpTYRVv1hyoJJWsUsy6AyVUEZVu9ihSrvKUVEqZXfj/lfuvcJuUVhkqU2WpoqqYylbFzd5HKk+VUP/N3reHR1FkfVf1TC4zJCGZTFfPJAFyA7nEgBiB5SZiQAgRYrjITYRwlZshXAz3CIiILLcFZBUBkY2IrPqCogLrIiIishgxKJIsxgiomFXMCwHZvMz7q9OVMNOJn/ruPt/3/fE+9fzOqdNdVV1ddapO9Uyd7mTRVDQTt8idDqKlaCVS5H9ZorVoI26Tb0ASaeIO0Y72kPx733oivase1Rfpi/Ul+mP6Uv1xfZn+hL5cf1Jfof9eX6mv0lfra/S1zP89Ic1YpP4HfZ2+Xt+gP6Vv1P+oP60/o2/Sn9U361v0rfpzunxL5s33g0xlacInd9wammEz7EaQEWyEGKFyx63RwAgzwo0Io6ERaUQZLiNa7r01hGEYHsNrxBixRpzce2s0MeKNBCPRSDKSjaZGM/2w/p5+RH9f7unVi/SP9ZP6J7Sz9+feKLKa9TAeMfKN2cYcY64xz5hvLDAWGgXGo8YiY7GxxLjFaG60MFoarYwU41Yj1WhttDFuM9oatxtpxh1GO6O90cH4ndER5X2oH9f/pp/QP/K/rtFP7go2so3+xgBjoDHIuN8YLHcFG8OM4cYDxgjjQWOkMcrIkTtkvfLLD7/tbSL57HdGJ6Oz0cXoatxpdDPuMrobdxvpRg+jp3GP0cvobWQYfYxM416jr/GYsdR43FhmPGEsN540Vhi/N1Yaq4zVxhpjrTFa7k42xhnjjQnGQ8ZEY5IxWe5ONh42co1pRp4x3ZhhzDRmeb7wMi99H+NXvl1DrhX+YKwz1hvy6yfWdx3Is08ZG40/Gk+zOu944ifZBSH3qnQWXURXcafc0yO6i7tFuugheop7RC/RW2SIPiJT3Cv6iklispgipoqHRa7cxyOmixlippglHhH5YraYI+aKeWK+WCAWin4iS9wnskV/MUAMlPtGRIF4VCwSi8US8ZhYKh4Xy8RgMUQMFcPEcOmPKh4UI8UokSNGizFirBgnxgu5J2i5eFKsEL+Xu7LEarFGrBV/EOvEerFBPCU2ij/KHaNyf5bYJJ4Vm8UWsVU8J7aJ58V28SdRKF4QO8SLYqd4Se4cEi+LV8SrcveQ2CNeE6+LveIN8aZ4S+wT+8UB8RfxtvirOCjeEYfEu+KweE8cEe+Lo+IDcUx8KI7L3UXiI1EkPpY7jESxOCU+FZ+J0+JzcUaUiFLxd3FWfCHKxJeiXHwlzonz4oL4WnwjvhUXxXeiQvxD7kASl8SPolLuQhJXRJW4Kq6Jn8R18U9RLXcjGQeNd4xDxrvGYeM944jxvnHU+MA4ZnxoHDf+ZpwwPjKKjI+Nk8YnRrFxyvjU+Mw4bXxunDFKjFLj78ZZ4wujjP16f/ydLPs39Gfd3vvlvpH98i+3Cfs1fuz/ey//P94LJ389+Y0qG557msm1Anh7eoI2vfGlx4n8rUGweGaXqwhKZcba18Q8t5vr63r9xGuv4Cr0TPDsJT4evMZTW37RrY3lf7C1anfMTlrjvc2OsBOsmJ2hVd73rArrcY07a9d5qTyNd8a6PBMr80Hym1R8Is/ls/gCvpSv5Bv4Zl6IaxV61hGdQHQm0SVEpxPdrGr4OkmziG4lmk90G9HnKNVMVdYWlWeLuqv1dPTPRAuIvkRn5qv041W6Gsmsg3nsdXXFmpIkn+Z5TPFH6ewbROfTsUUqzQTFZ3rWm96viJv1WKDi8myBOrbZ7yqr1bk1iq/3vKVquz6gFv7pftlTXvrZuukfL/mLT4blVzzZvyv8fsPTonM8k6Qfndkq0fK3JylNquXm0alEHyK6lOhaoovkW0uohCmqhCmUc4oqYYoqYQqVMIVKmEIlTKESpsgSLB76cm+fE3obj5Vcit8/dwOkP7LsNdD1ROV1n1DXfcKzEXQVnV9F51fR+VXq/CoPfcEpwI///9Fvc/+XRtwa0vM1NOLW0IhbQyNuDY24NTTi1tCcIKVZRLcSzSe6jehzlGqmKmuLylPDn6WjfyZaQPQlOjNfpR+v0tVIZh3ksfHqultrS5LcHHFr1IhbQyNuDY24NRhxzwaknQnOXWsohVmPBSouzxaoY5v9rrJanatJ8yyNOFnbwJL90/3ymxfke1ATMdKy2CDa9zgBTxQz2Bx6Vvb/vTxwR8FZdo5dZJXsGrvB7dS38le/MmqpMmqpMvqNtox6q4zmjzK6mzLqyzLqqzL0kk2mV9IEoluIvkJ0N9ElRN+itGZvVCo6nuh8otOJrie6mehMoluJyitVqitV0pUq6UqVdKVKulIlXamSrlRpXqneN03INy4G13iP0+jTorfQ2N0irwmK8qOfpyPP05Hn5RHLGyekH2vNP/yBo7emF7ToPVTGHo/0ituj5oI9VPoeqfOg04nirqL3U9r9lHa/Sruf0u6ntPsp7X6Z1vL2Co5RGse64mnI3AF7Uw/k/yZLA+bc3bV6YI7wCyjrJ1yZR/9EsWdwdcjgUppJdCvRfKLPEt1CqWZSqhuU+wbFZO4bKvcNyn2Dct+g3Dco9w3KfUPl/onu8Ce695/o3nFE5Z+gSjfLknnozP/h7Ruc98S8bf3vqIDaoGaWk2PhADscMBIuYZa7zhkPrt0B0QzznPyKs+aOlbMr6CNEtxKdQfQZv/hWPNPHUmxVnTxbiD5B9HH5DO55HKlMPkPxZxXfrLjM2ZpKaa3iW4nOIPqMX1xeuTXFVtXJs4XoE0TllVurK7dWV26trtxaXbm1eWXLW0nqGS/uubJfQNcRlZZnIR1ZSEcWyiOWt5PU/sruftWziJlvH+H01VX5VgTN/Zq0xvp8Ome+ZaQ2B2bD1xhX/yQsR2ppm9vi6VrqvHWVIXVevl1hPNElRAuIvk70GaK7oE89PA8raQLRSUSnEjXL2EP0IaLziS6lfOM9i5n1jSTSSzeUfA6S6ZvXHczvYbu3SzskKbXMdmmBSHqdpElKWk/8YWmBiD/KrG8y4Ww1i6qznyhw1l+E1pFvb3iD6Hyii4hOIDqJ6LNE0b7y/QaIFRDdTHQr0dVE1xDFbCrLknoCPl7l/gOr/z0lAf9P6q2pDq2pvNbmf3kB7wfR0FYNPX/yFHpe8Oyo5bs8L3te9ez2Nve28Mj3tf1r7y+g/268Tma+tcDcUV7ji22+F0B+D6zmV536PehlnmWe5azGf5t+5/OGext6I71RXpc32qt7Da/HG+uN8zbxJngTvcnepuzf62/twfEIr9srUKkYbyNvY2+8N4n9Nu8+85sn9G+pPgr4zpXnHsZMb57Af7z8U45gdlele2F0MqvxoImrPTeShbhzpZXVh7hzTN8C8nwZwWq+Up6q57Do6CnuxdCXoUg5wZ0T3cNV5l4ov89SI4lb3Yt/VbpU0xuF/FMyaq+RrD/IIjzlZs7oPe6HUJ58QjkSLd9AtrjO2VT/s7UeFH519oxg0fWV5xpLd1mbt0661PrT1V7DbNVgPUcfrY/Rx+rjvLco/wjTWyKMMa2rJr+ZJHdw67BogkMHeQyX31lqwfshnsXxtIeV9lOIb+TyKXozfw3x1/kPiF/iPzIbr+SXEb/CqxC/yn8iD4N/Il7Nofncp3Fm0zTNzrgWpAUjHiK/yK410DAWtHANs5kWqUUh7tLciOuagbhHg4XVYrRYxOO0BMQTtSTEkzXcg9Zca4F4S036JbfSWiGeoqUgfqt2K+Kp2tOIP6NhhaBt0jYh/qyGGUXbbLuHcVsvW2/5xd4g2JogdxDuNygmqAfiPYPuYbagXkGjEM8JegjxiUHTEM8LegTx/KAliD8WhDkzaGnQQcTfCXoH8UOh8q8gLRQjMLSZYxLjjsmOyczmmBL+IuPhO8N3Mlv4S+HvIH4o/D3Ej0Q0YjyicQTaKuJqBMZ9Q9YQI72hFpnEeGRyZH9mixwQOQBxudfJFjkochDi90cORnxI5BDE5e4nW+SISGgQfevZFjky8knEV0SuQPz3LjztuYJdY6DHY/X70K3ZGFOa/iBGD9dHoe81fbTxT8aNasOH0StfaoVFiKcz5okuni6ISy8bm2e4Zxzi4+WM7Nkn31njvUVqj5wnmfy+h6lBGnuOPEu4n2cJJ88STp4lnDxLOHmWcPIs4eRZwsmzhJNnCbf1Ro9w8izh5FnCybOEk2cJJ88STp4lnDxLzJYMJv8STv4lnPxLOPmXcPIv4eRfwsm/hJN/CSf/Ek7+JZz8Szj5l3DyL+HkX8LJv4STfwkn/xJO/iWc/Es4+Zdw8i/h5F/Cyb+Ek38JJ/8STv4lnPxLOPmXcPIv4eRfwsm/hJN/CSf/Ek7+JZz8Szj5l3DyL+HkX8LJv4STfwkn/xJO/iWc/Es4+Zdw8i/h5F/Cyb+Ek38JJ/8STv4lnPxLOPmXcPIv4eRfwsm/hJN/CSf/Ek7+JZz8Szj5l3DyL+HkX8LJv4STfwkn/xJO/iWc/Es4+Zdw8i/h5F/Cyb+Ek38JJ/8STv4lnPxLOPmXcPIv4eRfwmnXika7VjTaKeKgvSsa7Rcxd7BotGvEQftYzL0jDtrNotEOEgftadFoH4mDfiXUaGeLRntKHLS/RaOdJQ7a5aKp/SVyr4tGu0wctONFo70mDtr3otGOEwftftFo34mD9sBotPvEQTthNNqD4sA44rCxIZ4QrBTkl9Wc9GU1J31ZzUlfVnPSl9Wc9GU1pyfJ0xwp5ffVnPR9NSd9X81J31dz0vfVnPR9NSd9X81J31dz0l4aJ8bmfFxrAdZWIZ6FWCMF0crFTisXu9/KxY61zg5Q+X4WG1YxuxGXaxY71ixvMTuNaDuNZifvEHSEBY3KG5XD4kfPzpvM8sfnjZ3Edk8Ym5PHDk8eNWMqK4c9tve8KzueNb83c0g8S+vfNz2edRuYDZrJmM+H2SEElqepiocyQ76Rm+Jyn9YtKu7EE1RzFW/AYlgLuSuye7/+8Syyf3b3eKy55Tk7WalY+TYikjjWWHGslZLkP1qNkFKmMo/YsDZuzG6Vv631vh91dNNx6bXURMWiWLx853DvrKxeLDm7373xrM2A7D7x8qvoVIIdq8kE+Q1zqlk0nrlbqzNBKC1JfrudpGCmYz15G2s7Ond6Lk8lmka0I9FuRHsSzSSaPWls3lQ+mOgmovuIniZaJamWRrQj0W5EexLNJEolaFSCNoLoGKITp4zKm6TlEl1HdBfRw0RLiVZJanMSbUy0LdGeRJcRPUb0LNFKSe3BUyZNmWSPIdqMaBuiHYmmE+1LdBDREUTHEZ1KdBbRBUSXKqvx62g8eqE12httzG7Hc8gdeDJsjyed3+GJpBPrzLrgiaQ/G8AG4rnkfjyVDWFD2TA8oTyAtdWDbCQbhTLCA8oIzPGvnW0UcPa31ovTPdZHI/xo/Wkioat34pnsLtad3Y1n0h54OuvFemOF2gcj8F7WT45klSbw3G8/3qDe4/fijFy72mgcYK7DyG7wLx5rgpEbidHpwphzY2wJzBsezBExGP1xaO3GSBGPkZmIMZiM2aUZZpLmmDVaYjZIwYj/d5Tw774nO7uH9cWT+n3kp2zGfykmnxDD/8f8Pb6Cb+IHeREv45fwMBmpxWtttG5aljZSy9UKtKe1ndo+7Zj2vXbDlmJPDJoXtCJoU3BMcNfg3cFljjRHumOAY4xjhmOJY51ju+Oo47Sj2pnmnOyc51zh3Oc85jzjvOi83sDZIKZBywYdG4xokN9gWYNtDXY3ONTgZJgzLCasZVjfsBFhU8MWhK0M2xFWFm4PbxyeGr4r/ED48YiIiJ4RI7F2OBdxuaG9obthcsO0hukNBzTMb7ip4cGG5yJDI1MisyJnRG6MPBB5PLI0siKyOiosKi4qJapzVGbU8KjJUfOiVkRtitoVdSDqeFRpVEVUNVYKca4UV2dXpmu4a7JrnmuFa5Nrl+uA67ir1FXhqo4Oi46LTonuHJ0ZPTx6cvS86BXRm6J3RR+IPh5dGl0RXe0Oc8e5U9yd3Znu4e7J7nnuFe5N7l3uA+7j7lJ3hbtaD9Pj9BS9s56pD9cn6/P0FfomfZd+QD+ul+oVerUIE3EiRXQWmWK4mCzmiRVik9glDojjohQ6wNSTK0atPpg56G3TYdDNOPo1gumFJt9UafLdY/zywNZt2Bkov24PlPdmBspvdQiU95cFyJqICJQ9hwLlmO6BcjLqHOwnN43zOx/MtPZjAuXOuyE71L+w8o64lmny0L3M9L5TJXUdZJF3+cmAK5Tkm60lj2UoPkjxnMAy7tpJ8s19mmaqtYpvUnyH4maNPLApXTG3yV+yR7BxbCr9c7iUrWQb2GZWyF5me9V/VJ+ys+wC+17lflPxw4oXKX5W8YuKXzN5tKZ4pOLxirdVvJviWYqPVDxP8SWKb1S8UPG9ih9R/LTi6vrRN0zudiruobtOpN8x5X8HE1me+iVvLXuabWM76Tf7Q+wYO8nOYK0n/7e5Tv/IuXgMT+QteVvekXfnGfT9H1liquIdFe+l+GDFxyk+S/Fliq9TfJviuxU/qLhqUXe54pdMrit909VOfF21pN5G8e6Kq/rpYxTPV3yp4hsUV/qg71P8hOLnFL9schGseIziLRXvrHhWoDZ26xio0UZfksNIM1Pr0Toz1QHFVX8aJxUvU1z1q1Flco9d8QjFVe3wVGFypV+ernXHk+eM4hcUv0xpGtBvyin0r3o6/Rc9XL09Uv6yOUdx1Ype1Yve7Yq/qvjbiqvW9Kpreb9RXI2LGHt9YzZml+KqT2KOKV5KqTuxeeq//U0B/7AUs1J2jlWwy6ya23kYd/M4nsxTav9BHsCH8zF8Mp/B5/ElsJPrYCm38138NX6AH+bHeTEv5ed4Bb/MqzW7Fqa5tTgtWUvR0rTOWjrNZKhDrNK7WKV3sUrvYtUIjlUjODZH8RmKK72PfVpxdY+xSt9jixVXPRx73eRxYYo3VlxdLy5dcTXO4qYqvkhxpd9x6jpxhxRXPRGnrhOnrtNIXaeRuk4jdZ1Gajw1UrNuo4mKFyiu5tdGSgMavan4ccXV+G2kNLaxmokaq+s0TlO8p+JDFVf301jNfI1VuzVW47Wxuk7jo4qfVlzdV+NqkzdRM26TRMXV9Zr0Unx44LjtzgLHbfxBi3zSIlcE2sC7y/zOQ05PDZR7xNUdifFqlMcr6xF/0ZLn1bp5ElT9EwYoblrDIPktC6xymzPVf4lKTxNTFO+guNKfxKyfybdVcaU/iaq9E5XFSywKbIekrvXW2TKykzYrvlNxVWrS0cBe6JlDKwlTRkiq9pOBZOEnw7Ymz7LI+wLlVhmB8q0LmCPEr/ZpE5hDs7RwmloxpCmNS9sbsLrBkXZKx9sVB5be/og1ZUc1Sjt+H3gfnXIt8puB9ep0nTmC6umdzqo3O6tZpnOu4qpGnc8wR00ZskZdUgPbt0dLi0bhWC9h8kEjTL6xu1+eIMjLmSPUr4znCvxknN9eHKgRd20n2a8VuqvVTPcF9egcSiisNPmLySZ/qcjkf84w+R5P3XFwt7JMd+crvjTgqtDEfeMUr2QOh1/97i4k+RcscrrS3HRlSdPVuqTncMXV/HbPApP3Uul7qfS9lO3KUHYhQ+XvM5Q5nH616XM5UM6cR7WT/4THYL0m/+NVK6xMNWPfq1YkfdWM2lf9h9ZPrQGy4qiEOrqTpVZc96kZ9j7Vcvepmfa+1dYWfOt7k/8lkUaJ069G3WtXkpR3gLJmA1UdBiYrrlaBA5WeDlStMFCtPQaq2XqQsrL3X7DW4e2pJn83kupQ206DY/zmXykXWOS1FrnQIu+zyEUW+QLJATo3+JrJhyi9HpJSN80Q1VtDlN0ckldPGmWrh6hZcci+etIo/RnyjcmHBtdNM9SjeDvFB9STRvXAUNXLQ7fVk+Y1xdVaZOjlummGqXYZ1lzxXvWkUWNj2DzFN9WTRq0UhylNGHYpYIbiea8FyjM7Bsqz+gbKjwTacZ4/0SIfCZTnrAiU524NlOdpgfL8SIs8OVBeYKnfQkv9CgKfVvmjswLsJV90OlBenGqRlwTmX3wmUH5sZKDFHHrUz5LAAowI8xs3UrZYzJHfBMo55YHyaIs8xiKP9fhdD2FsL7JcPy+PsMgz/O5Hysst8lqL/LTfbC7lbRb5eqA8LssiF1rk6kB5fLZF3mGRbwTKEwZY5J2B8kPMb36X8mCL/Gpg+omhFnmERd4bKE8Ks8g5FvlNv/5HmBxhkSN/4fxvla3luerKfr+P1ZWFRfZY5DiL3Ngix1vkZIvc3CKnWOQ2FrmtRU6zyO0sckeL3NUid7fIPS1yhkXua5GzLfIgizzUIo+wyDkWeZxFnmCRJ1rkyRZ5qkXOtch5FnmGRZ5lkfMt8jyLLJ8/nVjdNKfvA0ZgDlzEmNZGy2ILte3aZ2yr7Vnbs6zYPsP+HDsV9EnwMm5z9neO4m85H2/A+dGwyLAe2t1hw8I2a7PDx4RP1P4SvjB8hXY4QosI1U5GXI24qn2OWbtK/rcY/Gn43npDEcKZ8HN+4aIKRfWEy3KvggrNEToipCNMpLDRGsKLIrZFvBa5QYWtfmGnDFGs3uCMyqoNy6PW1YYqM7ji6gmpCGnSW7U2bDcDnbEE92730dpwQi9DuCCDsNcXXKnCJZoby/3COgqH6g1FxvWa4HF7YmpDugoZ9YYsCoMUDwwFisp0RygU1wYz91nPJW9L7xjvZu8OGayle1+uL5ile9/0lqtw+WaQV/Fep2sVSDTKTOpYGzKTsmvDGBUmIhQkTUxui9CtaWrT9KSJoKlNDzU7esunFC43H4qQ26IZQkqL8hbXgPIWN1oebbVZhhblrQ60utjqYoo9JSLFnbIPoTi1K0JW6tDWm1R4+7aC25vd/k3a2nZpCF3be9oPbZ/fYbcKBzoc6VDcsSVCh45LO5V2CaawusshCtVd23XdpcLeLtWQd3W9RNKlO7U7ta677kzptrLbgbtSewxGOHvPhC6rzdTgl8xUvbvKdL0zMxIz2mR0zdjRpxmFrD4TKeT3WdpnE2h+n2MIZZlzMgsyz96bi7Ch70ikyup7ou+JPsdAS2UMobxvRd/r/QooFPY7TuFsvwrgbL+qLHu/KpyvyBqaVZpVft8MhLXZ8UhX2K/KPJM9p19V9rns7wdmDToyePADrgfiHmg23j5+6PjT46/X8AkpCLunRk5NzM3PXZR7MLc8tyK3app9Wttp6dPGTcudNmfasmkbpu2atnfa4Wkn83Lz1ubtyKuczqa7pveanjP9wPRPZ6TNyJmxaeagmctmvj3z8qzgWSmzes7aNevCI+mPXM+Py++ZPzI/L39T/sv5p2cnzh4+e+/s07OvzwmbI+Z0mNN9zpg5hXNOz205N33uiLkb5+6cWzq3al63eXPmHZgfPL/b/Lz5r84/Mr96QcyCCQsKF1Qs7Lgwf+HLBVk/M1fttc5HgbNNwaybQc4jBVtvBnMG+Zmxl2EdcYHjxNT0emedmpnHLwTOHQVHbgY5OxQU3wzmvCDn0MidniPGOszDZ7pewqxJczBxzLdRWZhfN0Zsi9wQXlQ7ZyJtVFXSGJk3fG/Exptzp9lKmJ3Taf41UyVGbKtpPXlUzsWU9ow8T+lVC6LcveHnMJNvQ44zVFoRarcB/AyFm9bhosUqpPvZgZuWYJusd53Zf2ed2d+p5vzlNN/TLE/lIHdEOuIba2ZC9McO1V+Ym8z5x5zfVD9iTsQMKHttTO3sWNOjmOM8GQXlMsfNPk7KLigvKEdpMtVlnMvylidl19UJzIPFfjNqPfOs/7xad05VM/cR0iZzFs2smT/lvI4juGpBhXcHjmR7stql9T0h7KYdIw6bZVzXy6BVrhrrU2NVXHHCftMCmVopbRultssUyHtIuOQZeUSmksddceFFNZrqiXHFwQK6ZH4ZN4/etKP+llTWhaymspt+ltOFEqx2cl2AdSxSltFdU3ucv25eXV6/T5Ze5klHfQJaX7aabGP0lN+IrWljcyTK1jQ1JWkM2jtD9qZsCU+W+2nq7x2yb/xGdUfvy7jXGgtbbJZaUOEpKKgwg7yC5EnZsldkzNQ0yQsqmqYmtzVhWrjktmSV/IK0cKZ1I/v4PwxkU/1C3RRkaf2Csri1oW4OaWl/WyBb/KtDrcX+mWBtKRlq7fjPBLLsvzrQauNXBmvr0BrFL9RtP1q7+AWp92ZP/7ZQt+Rfrt2vC2Y7y7VLxLYuwRmJXarDz8hVD4XVdCRYrnRIWp2RKNdA6hwCVlAd5KrJPCrnfhmTgVZHg2llJddQl7peovURVkeIHeqymlYnBbWrGBkK+xX0Le1XIFcwJBWqdY4ZL8QqqFwekSsama+vCrTimUFrI6Sls4WSel9G6kK5msJs0axvKa278lXIoiPN5KqLpKy+pXJeUucQsHJrg7WaXKHJfEsphkDrtFxazyEtrdRq12t9su7UqEWqZVvcN8NsiS7BdD+osVnTPseobHmlpVQWlRs4Euv2qL8e3PKpKbFgftB3xnav74BtIGtoG8zCbHm+H21vs/ZMw5kiSOcpVmEb6DvHOOhVpoF+YBvsK2IN2Eu+anbYV81Hsmg+imXzHOblo1kCH8Oi+CQWhZRpSHmnbbLvr4yjnK+YHWnDkDYKacOQ1knlnUeq75mDj2BxOJ+E8wNxvhHOJ6GspigrAbmfQX3OsgaI7UZ9o2zzUI/5vjdQ3462r3xP2c6xNrbzrK3ta9bK9q3vY9tF6SOE0otQejmzI6bZBt/4J2qzDiW9y/JZQ5bBIoGOrAXrBIzxfczGAuOA6b6v2QzfZTYTmAU8AuQDs1kYm+M7yeYC84D5wAJgMfIvAR4DlgKPA8uAJ4DlwJPACuAt1p3tA64hfgPwsRacARzIYp34fUA20B8YADzE+vEjrAnu+CHbINbZNoyF2h4EJrNltoWsse1RFm9bzBrbt/hO2rcCzwEnWQv7J0AxcAr4FPgMOA18DpwBSoBS4O+sRVCk7+OgMt/JoO9YWFAF4v8ALvlOBgexjOAW4LezFsHtwCf7Pg6eAkwFHgZm+r4OngWgbYLRNsFom+A5ANom+BXWKfhV4A3gKusU0pI1CWkFPMhahIwEcoBpQB4wGygAHgXQRiGrgTXAFuA51j3kJfB/AN8Dl4AfgUrgKoA2DB0NjAHGAjNZEwdjnRxu+a4o6MoF6LWTYt+i168yHVq7B1q7B9rWDNp2F7RtEbStP7QtB9rWG9rWDam3Q19SbYN8K233++ZAg+6A3qxHCSNtb/sKbV9Bz84zm+0CdPBbNoz07BxSlWKZWTMqRrDWfuX3QvmzUH4PlN8eqYei7HUo+w3kuh1lb0DZz6C8AyhvEItAKT+glB9QSiRKuQWlTEUprVFKa5TSCqXcglqeRUnNUdIYlNIWJeygO/0AsVeYB2X8FWX8FWU05w/69qGc1ijnQZSThnL6o5w7+UO+j1BWa77R9yZy7kd5dpQ3CzUbhzKjUbPFKO1JW7nvMmp3zPYNRuu37FbbRTVio1BqS5T6EEptj1J7oNRklNgcpX2CnJ9g5N2LuxzIGqgZ5r8wk8iZ5Y9ssa+CLQEeA5YCjwPLgCeA5cCTwArgmO8a+xA4DvwNOAF8BBQBHwMngU+AYuAUcBr4u8/HzgJfAGXAl0A58JXvQ3YOOA9U+krYf2KcXwauAFXAVeAaZrefcP468E+gGvgv4Abq4vNVcAZwmhW/sg2Fhg33/WAbAT7S94P9pK/C/glQDJwCPgU+A04DnwNngBKgFPg78I3vmv1b4CLwHVAB/AP4HvgBuAT8CFQC/wlcBlAX+w3A5/swyOX7MKSb71pIDyAD6AP09X0dMgB8IDAU54cBI4AHfRUhI4EcYBLOTQPPA2Yg/giQD8yGPA+8APxRYCnijwPoh5BV4KvB1wB/QHwdsB7YADyF8rfg+DbEtyP+EuKvIL4fQB+FoI9C0Ech6KOQEp8vpBRAH4Wgj0LQRyFlyPMlUA6gj0K+9ZWEXAS+w71UAP/wFYV8D/yAc5dQ9o9AJXAZMvoupAr8KmT0UehoYAwwFv2lsZXMTZbLxlZCdwdCh6X1CoL0Z0gZkHpDyw/bPmKtGMfRKpYOzSyBZpZAM0ugmSXQzBJoZgk0swSaWQLNLIFmliD119C0a9C0a9C0a9C0a9C0a9C0a9CiCmhMFTSmChpTBY2pwvUO4noltgdYkG0UkAMNGu37ClpTAq0pgdaUQGtKoDUl0JoSaE0JtKYEWlMCrSmB1pRAa0rQk1XoySr0ZBV6sQS9WIKeq0KvlaDXStBbVeipKvRUCXqlBL1Rgla/hla/hla/hla/hla/hlatQKtWoEWr0KJVaNEqtGIJWrEKrViCVixBK5bQiD3DQtCWd2Ekh8L2/gW293VbEWztx7BCsDbUvhdxhx/jDr+k9p0HyQMpDu27CCV8xgbDTibATibATibATibATibATibATibATibATibATibgSu1gK5NhK5MxZosxZosxZosxZr/EmL2CMXsFY/YKxuwVjNkrsKcujNnzGLPnMWbPY8yex5hFf7M+sJtpGKdfYpx+gXH6JcbpF7Yc1sw2GpjMlsCONoEdbQI7GgvbmQDbmQDbmQDbmQDbmQDbmQDbmQDbmQDbmQDbmQDbmQDbmYCxeB5j8TzG4nmMxWKMvSsYc8UYc8UYc+dh4xJg4xJg3xJg3xJg1xIwVs7DtiXAtiVjrJyHfUuA/hdD/4uh/8XQ/2Lo/5fQ/y+h/1eg/1dg/1ywfy7o/3nofDF0/gp0/jxsYALsXwLsXwLsX4LUd18l2roS67OVvsfQA70wn3+J+XwmeqIXeuJPOLsC2t7DdhIrqWLfDdsplkO9V4LUZ5DqNCzmSt8CSDnIexJ5P8HRbsi7EnnfR94M5C1GviEsWI2j+5HyFFIWI2UGra+kzrxAJY3F+Ttx/gTOf4rznVDSEzj7KkrqjpKOoaQ2lP5zWieeJVrFnLwha8KHApOBKcDDQC4wDcgDZgDLYemj+EEWjqssQun5KOcDWhttZYZtP7vD9g76v5wlwWr3xyrRBcsdg1Viku0bzAzfogYXcew7dgfseZ7vHeQQWFMmSpuO/JNZb1iwodD5Yay3bQStvnqzCNQsFjWLRc1iUbNY1CwWNYtFzWJRs1jULBY1i0VON3JORU43ck6lnOHIGY6c4cgZjpzhyBmOnOHIGY6c4cgZjpzNkPM25GyGnLdRzjDkDEPOMOQMQ84w5AxDzjDkDEPOMOQMUznTVM403Mkw1hKxltTGe2iNcBWtVYIWzgLuA7KB/sAA5sTazYm1mxNrNyfWbk6H9Hqxo4WjkSdLrTQOUx99yYp5c185bwG0BFoBKcCtQCrQGmgD3Aa0BW4H0oA7gHZAe6AD8DugI9AJ6Ax0AboCdwLdgLuA7sDdQDrQA+gJ3AP0AnoDGUAfIBO4F+gL9AOeBp4BNgGbgS3AVuA5YBvwPLAd+BNQCLwA7ABeBHYCLwG7gD8DLwOvAK8C/wHsBvYArwGvY7V2EPwd3xl+CHgXOAy8BxzB8fd9p/hR4APgGPAhcNx3gf8NOAF8hBXEUDytjPAV2d/DSuII8D5wFPgAOAZ8CBwH/uY7ZT8BfOQ7FRTlKw9yAzogAAPwAF5fefAq4I8A2iB4s+9CcKHvh+AXgB3Ai8BO4DUcfxccq83g9xAv8p0K/gTpTyNe5SsPaQQ0BpoA8UCC74eQRCAJSAaaAs18p0JuAZr7zoS0AKALIdCFEPR7SFvIt+NcJ9+FkM7g2b4fQjVfeagNsANBQDAQAoQCDsAJNADCgHAgAmgIRAK431AXEA3gvkNx36G471DcdyjuOxT3HRoDxAJxAOofivqHov6hqH9oApAIJAHJQFOgGerU1nch9Hbgd75ToR2BTjjWDegJ3AM8iHQ54ONwbjzSTQAeAiYCM3FuPrAAWAgUAKtw/HmkfwHpd/jOhL4IeSdQiWNXfOUODuBeHdG+Uw7ch0P3XXDEQ4fmcrQOR+twtA5H63C0DkfrcLQORw6O1uFoHY6W4ZG+r3kU4AKiATegAwIwAA/gBWL+m5d7j4+zrvY9/nQmTdJkQrmW+6XcBBSQuwJe0G1FkSruDRtxq9lHQFOoIlAKrenFIIiA5U4RKiBVA9hWGwsCNhQotk1JSdrm0rQ0adMhyXSSJmlmMm3B33lPduWg55zXOf+c88fHZy7PzLPW97vW+v2eIdWe9SgcjWMwHsfiOByPE3AiPoKT3GWfjFPwUXwMp+I0nI6P4wycibNwNs7BuTgPn8AncT4uwIX4FD6Nz+CzuAifw+fxL/gCJuCLuBhfwpdxCb6CSzERX8XXwrZRl+Hr+Ff8Gy4X9xX4d1yJb6Ay9I6agZmYhdn4CapwO36KO3Anfgb3G6PuC8Oj7scDeBAP4WE8gkfxSzPycTyBX+FJPIWn8Ws8g/n4DX4LK+CoajyL5/A8fo8FWAizdpRZO+qPWIwa/AnLzPLX8DrewHK8iRVYiVWow2r88xS5PPynKX2ldWCsyX+hdWCs6X+hqd1YYOIVmHgFJl6BiVdg4hWYeAUmXoGJV2DiFZh4BSZegYlXsNA9yiL8AX/EYtTgT1iCP4fegpfwMl7BX7AUtXgVy/AaXscbWI76KFGwBm9HidH7RSWjD4xKRx+EcTgYh+DQqLTwntBbeG9IF87x+BGP54auwsesSTwYmWZPeU8uhb/xnpgLxVwo5kJTunBR2Fb4Byz2Xg3yU+4F57/otZe8/zJe8fwvEGehOEem3wrP67y32vEtr9VjDd5GQ5QoXOfa7u0K3dsVNnutJQyPTMo2sbmfK+zyWfcshWmP7a4L7a4Ld8A9S6F7lkL3LIU7MYQMsnIbDtuK9gm9RWOxL/bDIWG46FAchsNxBI6MSoqOwtE4BidGiaKP4CScjDO8dqbjWbDKFlld/2vqRoniWFRaHEcBRqMQRSjGGJSgFAmUYR+Mxb7YD/vjABwYlRQfhHE4GIfgUByGw3EExFkszmJxFouzeDyOxXE4HifgI6G3+KPu0T6GU3Ga53YKxWd4/PdJfLbH5+I8fAKflMf5+IrHl8J9bvFXfe5rYXnxZfg6vhGGi78jzmud989T2v1usfvd4qmoFMMMzMQs59/l2vp/ZGo/4jjX9z6GX+Jx/M73VePvU/x5r/GwOOOze8LwmChsGzPKXqk4pMfQc0yJ435ePyBKjEx2K9SYg712CA6FeTzmiPzvkvlO37uvqtShTSN7tNc/eP0HXr9t5HeU/H6rLxoduzj8R/zS8IbdaUn+ty3v9UYfi308pGJn4zx8BheHxtiXwurYJbjUrvzysNnuYpPdxaaSK8PqkqtwZ0iV/Ax34ee4G/fgXriXK5mD+3A/HsCDeAgP4xE8irl4DL/E43gC8/ArPImn8DR+jWcwP6QSHw2pKC7SbOxK98Q3uoe+QPwZ8Wdi54ek+DOxzzveFbbEfu7e5ZvRqebXqc5cXfKvIVnyb7gC/4Hvhi0lk3A9foAbcDPuDBm5ZeSWkVtGbhm5ZeSWkVtGbhm5ZeSWkVtGbhm5ZeSWkVtGbhm5ZeSWkVtGbhm5ZeSWkVtGbhm5ZeSWkVtGbhm5ZUq/HLaUXoKv4FJMxFfxNVwWtsg9w8PzQguH3oqN+BhWjvxyeLTcq+VdHftmWBi7GpNxV1hGg2X5+2+5V8u9Wu7Vcq+W+zK5L5P7Mrkvk/syuS8ruTUsLLkN0zEbPw0LxbVMXMvEtUxcy8S1TFzLxLVMXMuiizhQwYEKsXVyoEJ8wypoSAUNibNdJK0iaY1f/reh+JV/y1hdyjhzutWljDun773HX666hlTXkOhaRdcqulbRtYquVXStnKngTAVnKjhTwZkKzlRwpoIzFZyp4EwFZyo4U8GZCs5UcKaCMxWcqeBMBWcqOFPBmQrOVHCmgjMVnKngTAVnKjhTwZkKzlRQoJUCrRRopUArBVop0EqBVgq0cqYi+jwVyqlQzotVVCjnx6rYxdGRsp8o+4l7f2+9e+/99ClUGEeFs6gwjgpn7f2V+Bu8WsWrVbxaxatV1JhIjYnUmEiNidSYSI2J1CinRjk1yqlRTo1yapRTo5wa5dQop0Y5NcqpUU6NcmqUU6OcGuXUKKdGOTXKqVFOjXJqlFOjnBrl1CinRjk1yqlRTo1yapRTYyI1JlJjIjUmUmMiNSZSYyI1JlKjPCpSC0MyTsj4fhnfIuP9ZThDhlOjQ2m0nD7LadNMm2Y67E+D/b37oPyXy3+5/JfLf7n8m+XfLP9m+TfLv1n+zeJoFkezOJrF0SyOZnE0i6NZHM16pSL87p/m3VB0auwyM+5KVJhzk8y463A9fLeIOz6YdZVmxsywunR6SJX+GJWYgZmYhdn4CapwO36KO2A2lpqNpWZjqdlYajaWmo2lZmOp2VhqNpaajaXmYqm5WGoulpqLpeZiqblYai6Wmov7jEEJSs28/GRPjcSe0eNJPZ7U40m65e/TT/TuWr2b1LtJvZvUu0m9mxR7RuwZsWfEnhF7RuwZsWfEnhF7RuwZsWfEnhF7RuwZsWfEnhF7RuwZsWfEnhF7RuwZsWfEnhF7RuwZsWfEnhF7RuwZsWfEnhF7fmZdGTZQ+y0Kv/bBzMpn1B6dKaMa72/1/jA33uPGe9x4z7ntzi12bqlOKZHpaTqlRLan7f0N6K8ceo9D78myRpY1sqyRZY0sa2RZI8saWdbIskaWNbKskWWNLGtkWSPLGlnWyLJGljWyrJFljSxrZFkjyxpZ1siyRpY1sqyRZY0sa2RZI8saWdbIsiY6RyZVvFnJm5WxiugI/qyUwXd1wC4dkJXJ7TI5eO8vMwfnf5mRyaP5X7N4t5J3K3m3kncrebdSVlWyqpJVlayqZFUlqypZVcmqSlZVsqqSVZWsqmRVJasqWVXJqkpWVbKqklWVrKpkVSWrKllVyapKVlWyqpJVlayqZFUlqypZVcmqSlZV+vjKkT7+hCze3vvfnCaI+kFRL45K5Vsv33q51svrIDkd5J2H5VMvn3r51MunXj71UWFsCl9vCbtiU8O7sdvVxb2hL/Zw/pd2r+6O3R6y0Sj/uys62RnZ2K0q4jbcHppid0TFsTt9+p7QHXskKovNDXtij4U9pfa3pfa3pUfiKByNYzAex+Jq51yDa/E9fB8VmITrcD0m4wf4IW7Aj3AjbsLNmIJbMBW34jZMC3tG8tkt0s5YZeiSy7bYQ2FHzJ1edFXsRtV+E6Z49VZZ3oaZoSE2C7PxE9weHRS7IyyKzXHefaEjdj8ewIOYG16S30ulsfBWaRwFGI1CFKEYY1CCUiRQhn0wFvtiP+yPA3AgDsI4HIxDcCgOw+Ghj4Z9NOyjYR8N+2jYR8M+GvaVnh8aSi/AhfgUPo3P4LO4CJ/D5/Ev+AIm4Iu4GF/C1fK4Btfie/g+KjAJ1+F6TMYP8EPcgB/hRtyEmzEFt2AqbsVtmBZeigpUzmYqrqPiltgjYUAt3R4G1clw9DUu5LiQ48BuDuQrbIsVJ2vFyTojS+UclXNWmKwVJmuFyVphslaYrBUmS/0c9XPUz1E/R/0c9XPUz1E/R/0c9XPUz1E/R/0c9XPUz1E/R/0c9XPUz1E/R/0c9XPUz1E/R/0c9XdTfzf1d1N/N/V3U3839XdTf7dVLmuVy1rlsla5rFUua5XLWuWyVrksdXPUzVE3R90cdXPUzVE3R90cdXPUzVE3R90cdXPUzVE3R90cdXPUzVE3R90cdXPUzVE3p+duUd35Xqyk6QzVfXu0D7U7qb2V2juiG2hcS+Nald7tzJW07qR1Z2ya55Whx6cGVX5a5adVflrlp/nwPh9q+VDLh4HYL8IKHdCiA1p0QIsOaNFLb5kNf+VRE4+aeFTLo1oe1fKolke1PKrlUS2PanlUy6NaHtXyqJZHtTyq5VEtj2p5VMujWh7V8qiWR7U8quVRLY9qeVTLo1oe1fKolke1PKrlUS2POnnUyaNOHnXyqJNHnTzq5FGnDknrkLQOSeuQtA5J65C0DknrkLQOSeuQtA5J65C0DknrkLQOSeuQNI9reVzL41oe1/K4lse1PK7lcS2Pm3jcxOMmHjfxuInHTTxu4nETj5t43MTjJh438biJx008buJxE4+beNzE4yYeN/G4icdNPG6KKjiY5GCSgzv5/ToXd3CujXPbOdfHuT7O9XGuj/8J/i/mXpp76djdXruX03PCAg52c7Cbg90c7OZgLwcH1MlSLrZzsZ2LaS6muZjmYpqLaS6muZjkYpKLSS4muZjkYpKLSS4muZjkYpKLSS4muZjkYpKLSS4muZjkYpKLSS4muZjkYpKLSS4muZjkUh+X+rjUx6U+LvVxqY9LfVzq41Ifl/q41MelPi71camPS31c6uNSmktpLqW5lOZSmktpLqW5lOZSO5faudTOpXYutXOpnUvtXGrnUjuX2rnUzqV2LrVzqZ1L7Vxq51I7l9q51M6ldi61c6mdS+3Rx7mU5VJ2pBv/y4UhLgxwYYADWQ7k75sGqDtA3QHqDlB3gLoD1M1SN0vdLHWz1M1SN0vdLHWz1M1SN0vdLHWz1M1SN0vdLHWz1M1SN0vdLHWz1M1SN0vdLHWz1M1SZ4A6A9QZoM4AdQaoM0CdAeoMRKeYDO+ZDO/p/rT1vCR2tyzukcVI9B4/grnW+8es24fb1R2BI3EUjsYxGI9jcbVzrsG1+B6+DztIWg/TepjWw7QepvUwrYdpPUzrYVoP03qY1sO0Hqb1MK2HaT1M62FaD0ffp3U3rbtFnBZxWhekdEFKF6R0QWpE/793AN3/p8q3g4/lf9n431d7Nz+6+dHNj25+dPOjmx/d/OjmRzc/uvnRzY9ufnTzo5sf3fzo5kc3P7r50c2Pbn5086ObH9386OZHNwXTFExTME3BNAXTFExTME3BtG5I6YaUbkjphpRuSOmGlG5I6YaUbkjphpRuSOmGlG5I6YaUbkjphtT/RTekOJTiUIpDKQ6lOJTiUIpDKQ6lOJTiUIpDKQ6lOJTiUIpDKQ6lOJTiUIpDKQ6lOJTiUGpkje8f+a+Q5/Iqzau0aZM2bZK0T9M+r3Gaxmkap2mcpnGaxmkap2mcpnGaxmkap2mcpnGaxmkap2mcpnGaxmkap2mcpnGaxmkap2mcpnE+x7Qc03JMyzEtx7Qc03JMyzEtx7Qc03JMyzEtx7Qc03JMyzFdmq+FKbgFU6He5JiWYzra1yzO/GPPqLS7Rzo9a6Zm/089Yu9+iz2qO1PdltBthbpti047SKeVRBM/mChTrMaVmOG+/HbXuiv0q+x+Z+f0Zr/VecinTqNwlsJDH9o19avuftXdr7r7VXe/6u7//zRt+lVfv+rrV339qq9f9fWrvn7V1///dFeUv1vJUWrFB/ctQ1F872s5Lu2JLqdtHW3r+NfLv17a5u9s2jgxmr5d9O0amX9zPH/IPcLDdkpzvfZY6KJrF1276NpF1y66dtG1i651dK2jax1d6+haR9c6utbRtY6udXSto2sdXevoWkfXOrrW0bWOrnV0raNrHV3r6FpH1zq61tG1jq51aqpXTfWqqV411aumetVUr5rqVVO9dO+iexfdu+jeRfcuunfRvYvuXXTvonsX3bvo3kX3Lrp30b2L7l1076J7F9276N5F9y66d9G9i+5dpfk8p+AWTMWtuA3TQteIxrv2dkIuOiC2JBoXe82O83V1+UaYFVsRqmM77TMyYU5sV2iIm5zxU929nh4Wxc8OyQ/+WvmKaN/4v0eJvX9T2J3YGNZwbL7vXYjXdcAbYX1suUp/Eytcc6Xj6rAxtsad7npXa3JsRnc0JtajUzP2uFk7oWHsDgPxKHTEi1CMQ939nx4642eEnfEzcRbOCdn4BWFrojykE9eE+sR1MCMSP3S8IWxM/AhmQmK6Y6XjDNhDJ6pgxUzcC12ZmOP9B71m9iUe9XwunvAd88OuxLO+fxH+EHYm/ojFXqvx/CVHOSUavNaItWjxvBUbPd6EDuf1ho7ETgyHjrIDQ1/ZQRgHd4dl7g7Ljvf6pFBfZk9fJq6yO8NQ2b1hZ9nDeAzPhL7oy3tVbeNTjqotVO2lai9V36PqNqq2UrWFqjup2kLVFmpmqTlIzUFKDlJykJKDVNxFxQwVM1TMULCXgm0UbKFgCwXbKNhCwVYKtlKwjYKt/6RgGwV7KdhLwV4KtlKwjYJtFOylYC8FW6jXS71e6mWol6FcL8UyFMtQLEOpDKUylOql1CClBik1SKlBSg1SapBSg5QapNQgpVr2KtVGqV5KZSiVoVSGUoPRsbHnwvTYkvAHStWqwT0U+i1Vtsc2h++psymxnvCk6r4iNmSnvSt8Wp39NR4Py+OF4RfxRPiBam+KHxjGx4+Oro2fEG5W+cfGTwufo9ozqn+Cmns8/ukwI35R+Obev85qj/97eCp+ZZgUrwhL83+/JKuXzaTXrBJvYEV4xxXf5cdmV0y6Qo9v7feNW33jDr10gV76lDvC5zj2Wmj0qXy/vDXSI93RUT691idX+eQ2sSXFVuob1o/0w9lhvU++Flb51Ls+9YJPHOATW1yvfaR/3VWP9PDR+vRUz08Pm32qQ5TLoyNV1s6RTy5XWW9ipYpZ7dNrVNV6u8gmx+awTXVsUx3bVMY2lbFFZWxRFVtUxU5VsVNV7FQRORWRUxE5FbFFJeRUQk4lbOPcNs7t5Fp+8ndH+4inUOTzXe851/2zXF/CyrCbrpvomUzcGrK+f9D3D/r+wcRjnv8qZH3PYFTgU0Miv9Entubr3k74ObNkiVzeCA1e3RhrNEfyGm4OKbo1+t4W39sSXemqc5w9S091jlTLn0Olq1f65AAldlNit2/opESgxNDevhqixFCsNSz0jTUqqSGWVj0lODBcEx/HjYNxCI4LN8WPxwlhe/wkPp+MU7lH9/hnvH/RyN8unyGaM/ReJ3WHqDuk9zopPEThQOGg9zqpUEnpQIk5lJhDiTn6r5Pau6m9m9q7qR30X6f+66T6bqrvplYl5YcoVplYYBItxCvhpsRyx7dQjzXYgDa84712xy2+Y2u4qSwKfy0bHRaWFaII4z0/EZNMqNlhjh7s5ObuskfC1rJHMRe/xLywMCpVkYOqcSunzzJ93jd93jd93uf6eTr9fZ3+vk5/X1e/Hx3Bj7yXWdr3077fpwrNqAEzasCMGpD7kNyH5D4k735598u7X679cu03XwbMlwGzZcBsGTBbBtT3gNkyINYhcfabFQNmxYBZMTCqxBVnq4BHuL+M+w9w/4HYUo7W4rWwIrbcqvgmVoRnVMGe2Fqvr1dbrWFKbEP4S6wNG7EJ72BzuDPW7rgVnb5zm2MSXeiOZquWmljK4+1Iq7xexz7sCDfF+jHg8SB2hgqzqcHkbjW5W3XwFWbUmtge772H98PS2N8cg1V4FGLIz68C1Tba40JzqiTMipd6nAiTR+bZWMd9sR/2x4HhAtV6sWq9WLVebG29I35YmBo/3HtH4OjoG/HxjsfiODPveJwQ/iN+oucfwUmen4xTPP4YTg2fNyP/02RZwLXZXJvNtdmq/VLz8t74uc45D58IP4l/0vF8XBBmxi90/BQ+Hb6lKy6Of9bji8KNOuOKvX8xu0CHTI1fFR0S/zYqwtvm6+8TFaEhMQk3hD26ZI8OeUCH7FEls1XJbFUyOzHb+z/Bz3AXfo57onGJe/ELzHH+w157BI96PheP+Z7HPf+V45NhcuJpPIP54Y7Eb8JUq9nMxHOeP4/fY0GYoKsmWOFmqsDZKnC2/cEdVrmZiT+FnySW4AXnveS1V5z3F4+Xotbryz1f4fWVvrfOa6vxltfqsQYNvqsRa7HO+S3ObcUG77XB9Fbds3XthMTm8BedO8EqOlP3Xqx7JyQ6vaYGE2ow8S7UYaIbPWFZQh0m1GEiDTWY2IF+DJgAg8h6nAtLE7uw2+P3oeYSas5UmFWm7srUXVk8LC0rcBwdppgSU0yJKWXFno8xPUqgBssSYVlZGfbxeCz29fp+2B8HeP3A0Gqlb7XSt5Yd7PsOcc6hOAyH4wgc6dyjvX8Mxrv+sV4zYU2jWWUzQ4MOn112ZzSujNdlvC7jddnduAf3eu/BMFXnzzapJphUE0yqCabAbNNqQtnjvmeeuJ/0nc/4/vme/wa/xe/CTdF4U+JGU+KPIyvz6yPr+ZsmQZeOn6Ozv6Wzl+jaRbp2lTU3o2Nf1bGdurJRN9bpwqW6cJ2u+4LO+rZOWqRj7tUxb+qYLl3ysC5ZpwtqVf9vVP9XVf8y1Z//lwrnqvi3o/9mXj0rkt9bsdbGFlmllpgJf/baS3jdOveG95aHZtOz2cq1zMzqtXItsQb2irbH6rXE6rXE/Jov8jfNqR6RrzGLlou61bzZat5sFXmXeb1e5DvM7PVm9nrzZLnoF5gFC8yCBaLcI8qv5/c8Vq+1if80aa8JS6xgS6xga61gS/Rmr97stYKt1Z/P6s9e/fms/nxWfz5rBVubuN3nfoq7cU9oNtWbTfVmvdlrNVtrNVtrwjeb8M1681mr2RK9+axeWqDuF6jzBWq6x3qy3nqyXt32WFPWq9UedbpcXc5Xl/PV5Xy12KPWtqq1rWptq9rqUVs96mqrutqqrpZbi9arqeVWuCVq6lkr3ForR7P6mK8+etTHVjvIpeqgFq/Zoa0If6b0NqtDo1r4nGm+yTTfpB5WU7WDqg1UbVATL5rcmym70qTeRNmVlF2pNrarjXdN43Wm8TrTeJ0a+ZgaGTZl20zZNrWyQZ0kTdZ6k7XeZK1XM02m6QZTtNXkXGciNpqIjVTfRvVt1N5mAjaagI0mYKMJ2GgCNlJ2m6nXaOo1mnSNJlqrKdZmirWZYq2mWL0pVm+CtZpgG0ywDabVBtOqzXRqM53aTKc206nedKo3nepNpw2mUpup1LZ3KtWbRm2mUatptI47K02WTSbLJi6t5NBK02Wz6bLZBNlsWmwyLTaZDJtMhk0mwyZONXCqgVMNpsJmE2ATpxo41aDzN3Fqpc5v1PGNOr5Rxzfq+EYd36jj63V7vW5v0+1tur1Nt9fr9jbdvomLDbp8ky7fpMs36fJN7om77Y7z++qzw3vRObosf591nY6aq6Pm6qjX+TxL1+zi62/5WsPXGt2S4msnXxfydCFPF+qInC7I8WIWL2bpgBw/Zqn4nCqfq8rnqvK5vJilynOqPKfK56ryuap5F70W0mmhat5Fq4W06qRVp6reRa9OlbyLPjX0qaFPDX06VfMu1byLRjU0qqHPQtWbU71zVe4uOdfI8Y1wr4odlsFSz3aKPROeU5ubo8NkttOzpMx6ZNYjs35Z1ZsDKZnVy6xedDtFVy+6etHtFF29qHaKaKeIekTUI6Ie0ewUzU7R9IimRzT1osjfy/ZER7tSxpU2uFLSlZKu1E3D/D1qg6sNuVqDqzW4WsbVGlytwdUyrtZAi0FaDLpqhhaDrpxx5aQrJ105SYtBV8+4esbVk66edPUGV8/fHybdI2w2L3eGt2X9tisPueIms+wlE7fFxM3fH7w4MnELnTW09x4qtfffMJ0evzI6c0S5Du9s8k7HyLP8vd2eER1H7/3UoGdp39/s+wfshlvtadMU3i3PEkpEGG1PWogijPf8RMwL/b5j84gzjc7eaBXJxzgUneg73vTOn+k36Ltedsa7f7+/H1lvIvOlCMUoCS/L6jLZfJeOg3TcTMfNdMzfX2+m36AYXhbDm2J4Uwxv0vIf77sPxxEfuv8e7/zj9eKJjvOc/6TX8vfco+TcFx0svgExDYhpu5i27/0FZ4foe8S1Q1w7xLFDHDvEsMO1B1x7wLUHXHe762533e2ut931trvWDtcZcI3t0fG+/RXZ/1XmKz80ZdfTeYErZUemasnIX4r8dK+XG2Rfkf+Lnr9PHxmvdNVXXPUVV33lfzl58pNmvPPyU+ZEx/zEmOfcf54YY0ZW0Z32AbvcWxfy9fJww96/7njblb8x8hejZ4p7szNf5Fq9+4Jm8b9KpUUfmiD5laGVUvN4nV9336XWPGrNk8+rvvVu37aQi/X2bs0UnEfBeZysp+I8HdGqI1o5Wi+/V3VFqxw3y3GzHDdztd4erNkerNl+q/mfJkcrl+u5XP/B5BjvO44P8+T+qrw3c7l+ZHocTvWNVN848mtExhTZFd4QdS/lN4q4V8T533B6qb2R2htF2SvCXipvpPJGKm+k8kYqb6TyRgpvdKVeCm+k7kbqbqTuRupu1FUZU3e31U/1qLBMeDWKWQV32yntiuJ2Iys8G/CsKxrvWZ97mJz9SZ/9SZ+VcthKOWylHN77G2HKnqXfPj5nxUtZ6VJWumEr3bD9es5ql7JHz9lX9NmT56xuw1a3YavbsH13zr47Z2UbtrIN23f0WdlS9h59VpphK82w1WU4GmMt3yWSJ6zdfdbs/L7uXVft4+AzHHxmZKqMsdoPxQ80SU4NaRn0OCsdPycaa8K454nOcJ3WqMD3bPM9+d9cc/kMZJwY+QUhlT+fEgfqp3NCzuv5X2Wd4XNbo4M8y2c/JPsh2Q+NZH6VvcK3Q9OHMh+S+dBI1g2OjViLjdgE2clsSGZDMhuKjnG1NfTN0LeFvi0fvjN37bSrJGmbcYWkKyQ/uBtfPPKLX5K2Gdq20DbzD3foLZ63jvwKOHKnTtsWV0/StuXDd+vRKJlnouPjZR4dGJ60W+qzW+qzW+oT0wtieoFaGTumHjum/K9rvXTabmfUx4H3OPA8B553H7m/+8j8X0fmdz09dj094nrB7qbH7qbH7qbH7qbHbqbHbqZHPC/YyfTYxfSJ6QU7ih47ih47ih67iZ6oSDR/dOWdrphzxZ2utsvVVrva6ug4726hW5cYN4hxgzOze3/D/h8OnWNnd4G6vogO80MXDXfTcPcHLi32Wo3nLzm+Yqe1wvHDrrV43oq/u/eOczqcvzVs+AcXx1Gtg2odVOugVAelOsTdvvc3qQ6KdFCkgxod1OigRgc1OqjRQY0OSnRQooMKHVTooEIHFTqiw+T5jhzfkeM7ctwhx/VyXCfHdXJcZ6ear7p18llnV5myq0zJ5R07y3wFrpPLOrmss5NMyWOdPNbJ4x05vCOHdXJYJ4d1I/+K8rj4d6LjornR1eGx6Bpci5vCU9G0cH80HT9GJWagM8yNtiGJQefsCvdFu7EH7+H9cN+ok0LDqJNxCj6Kj+FUnIbT8XGcgTNxFs7GOTgX5+ET+CTOxwW4EJ/Cp/EZfBYX4XP4PP4FX8AEfBEX40v4Mi7BV3ApJuKrqIgOHrUsvDrqtfDiqNfxBpbjTawIS0etxCrUYXVYWvBkuL/gKTyNes/X4G3IteBvCOG+0fuGx0bvH+aOtssebZc92i579ME4BIeiI9w/Ou2cXvSH+wtPxrm4PjxWOBk/wA8xJTxVeAvoXjgnNBQ2hKWF7niKTgxLiz6Ck8KLRSfjTJzl+YW4Kswt+ia+He4rehTz0eH5FmwFz4p6wlNFKezw3pDn2XBfcSw0FMdRgNEohJ1isZ1i8RiUoBQJlGEfjMW+2A/74wB8MiwtPh/f8fhax1mOv3OsDi8WZ0LDGN815gD7429F+4c10QEw/aKDMA4H4yM4CSfjFHwUl+AruBQT8VV8DZfh6/hXXIFv4OrwhMp9QuU+oXJnRDeHedEU3IKpuBXTQrVqrlbN1aq5WjVXF/w8rCm4G/fgXvwCc3Af7scDeBAP4WE8gid97ik8Haq5/sTolrBm9Ca8g3Z0eP1dxy6kvd+Lfq+9H9YUFqIIY1CCQ3AoTsCJoEMhHVRHdeHZjuc6XuD4RXwL38Z3UI7rwxMq5wmV84TKeULlzFA5MwrlWyhfFVRd/MO8NtH9oSF6AA/iITyMR/Bb/A7VeBbPoQ6r8RbqsQZvowGNWIt1WI8mtKIzLDYTFpsJi82EVdFODCGDLIaxKywyJxaZE4vMiUXmxKKC7tBQ0IMUtiMNdycFfdiBfgxgEO5YCoaQ/9zfEMIi/ba4yCwo0vtFer1Irxfp86KJYVXRvzlejquc8018Oywqus7zmzEFU3Erfow7cCf0WxGNimhURKMiGumnRUW/dpzvuMjxFdChiA5FdCiig15brNcW67XFem2xXlul11YVbUcaO3x2yOv00HeLRp0WFUT7RaNRiCIUYwxKUIpE/v9iEvvg/GhcdAGuDtPV+HQ1Pl2NT1Hjk9T4JDU+SY1PUuOTott8w7QwWZ1PVueT1flkdT45qorGRrfjp7gDd+JnuAs/x924By9FR0UvozNM4+g0jk7j6EMcreZoNUerOVrN0eooJ+JdoZKrlVyt5GolVytH/TI0jXocT+BXeBJP4Wn8Gs9gPn6D3+J3qMazeA7P4/dYgIVYhD/gj1iMGvwpNMU+Ho2NnRGNi53t+BlcHKbHvhRuil2CyzyvCLNjk8L1setwfbjenu2S+DfDzfZtl8S/43hzqItPCY3xhmh0vDE6ML7OrrfJXXlzVBLvDNXxbfYiyeik+LuOXfn/byDH7dH+BTdH+xVMwS2YiltxG6ZhOn6MSszATDwZJpsXk82LyQVro7EF67AeTWhGC1qxAW3YiE14B/RU7ZWqvdKsmT56v9Ck6qeZMZNHb49KzJfp5st082Xy6D3RfoVxqK3C/XEAjsPJYXLhKY5n4KxonJkyufA8j68P082P6ebHdPNjuvkxxfyYYn5MMj8mFaqlwmlQS4WPhabCX478C/qmoiNxFI7GMTgDE0O1Tpum06bptMqiH0Vji27ELMzG/XjU6086Ph0dpZsqi573uMP5W7AVak7nPKRzHtI51Tqnuqg3GlPUhx3OH/K++tNBlUXD0djiA0NT8UEYh4NxCA7FYTgcR0CsxWItFmuxWIvH41gch+NxAr7ru67GNaj0fAZmhqYxo0JTyZXhppKrUBmuL5kJfVOib0r0TYm++e/EnQmYFMXZx6u7erp6enqWa1nu+/KI8YjRSNQ1ZtWoHBJFERBQMIgCciu3NwjKqYCieHB4YBDFi0M8CB6JgsAAw8AisMAuw9ILCMuxy9T362b104jR5MvzfDvPv6e7uo63qt963/9/xBmXfeOyb9zHwQQwEUwCzNedAqaCJ8CTYBqYDmaAp8DTYCZ4BjwLZgHWx30evABeBLPBHFEpNhyMACPBKDAasLYx1jb2AGB/x9jfMfZ3jP0dw84YdsawM4adMeyMYWcMO2PYGcPOGHbGsDGGjTFsjGFjDBtj2BjDxhg2emeKSllR4IIY8cGUq9kpBUSj4Cz47pEa5j1EM49o5hHNPKKZRzTziA0escgjmnnhKw6yQFWdggGkYAApGEAKBpCCAaRgACkYQAoGkIIBpGAAKSJfNSJfNZhAGiaQhgmkYQJpmEAaJpCGCaRhAmmYQBomkIYJpImSPYmSPYmSPcUd2he9wJ3gLtAb9AF9wd2gH+gPBoCBuhcRtR8RtR8RtR8RtR8RtR/RNI9omkc0zSOa5hFN84imLtHUJZq6RFOXaOoSTV2iqUs0dYmmLtHUJe9uIe9uIe9uIe9uIe9uIe9uIe9uEcHnHS+DV8CrYLGoReStRf71yb8++dcn//rkX5/865N/ffKvT/71yb8++dcn//rkX59o3Z9o3Z9o3V8UomWLwB6QBntBMdgHfFAC9oMD4KCeTmSfR2SfR2SfR2SfR2SfR1QfSlQfSlQfSlQfSlQfCqdPwumTcPoknD4Jp0/C6ZNw+iScPgmnT8Lpk3D6JJw+CadPwumTcPoknD4Jp0/C6ZNw+iScPgmnT8Lpk3D6JJw+CadPwumTcPoknD4Jp0/C6ZNw+iScPgmnT8Lpk3D6JJw+CadPwumTcPoknD5pXCdyjHbgz+B6cAN4WifIRAkyUYJMlCATJchECTJRgkyUIBMlyEQJMlGCTJQgEyXIRAkyUYJMlCATJchECTJRgkyUIBMlyEQJMlGCTJQgEyXIRAm0xCK0xDK0xDK0xDK0xDK0xDK0xCK0xCK0xCK0xCK0xCLjC+EaX4JVYLVwyWIeWcwji3lmy+D/UeX9j7z/SY8mm7Uhm7UJs1knXWz2AL3Ibt/LamYfXUxmu4TMdieZ7RIy251o8YlyoP6rXKo/lstFlvyI7LcaPb8Gnb5O1CDLpclyUm5E35/MdBEyXdPwOybTlO8l8wwSHlnOI8t5ZDmPLOeR5TyynEeW88hyHlnOI8t5ZDkPJp2GSadh0mmYdBomnYZJp2HSaZh0GiadhkmnYdJpmHQaJp22pmvfmgGeAk+DmeAZ8CyYBZ7TeWTOPDJnHrprEbprEbprEVnUJYu6ZFGXLOqSRV2yqEsWdcmiLlnUJYu6ZFGXLOrCM314pg/P9OGZPjzTh2f68EwfnunDM314pg/P9OGZPjzTtw7rYqsUHAFHwTFwHJSBcsCeIDMPJTMPJTP3JDMnyMz90X9J9F8S/ZdE/yXRf0n0XxKVkEIlpFAJaVRCigyeF9mpfZRCCqWQIpP3JJP3jGBTBJvI6HlkdA/VkIpkuNbatwUwgAmk8Mj0HooihaJIoShSKIoUmd8j83soixTKImXXpW490ISyZlw3B8RaVEYKZpAHM/Dsc7iPD8IOqqE6UjCEPBiCh/JIoTxSKI8UyiOF8kihPFIwh54wh54wh54wh542cdQmjtrEUXsgGAQG616wiV6wiX6wiX6wiDz0bBImkYBJJOxZ4Tcy5dgLwVvhtzLl2Ct5/0ovgmUkbJ4lujdpHxE5MI4EjCMB40jAOBJo4UVo4UVo4WVo4WUwkAR6eBl6eJH6vXDRxIvQBT66wEcX+OgCH12wBZYyD13gowt82Ep/2Ep/1VkXq1tAFz0UfeCr3pyzp1RfcDfoB/rT5wDAvNAOW9AOPtrBRzv4MBwXhuOiIXw0hK/GUX98+K2CPqzHRU/46AkfPeGjJ3xY0FBYkAsLqoWu8GFCQ2FCLtrCR1v4aAsfbeGjLXy0hQ9D6g9D6g9D6g9D6q920vcusBsQ6xWxHtY0HdY0HdY0D9Y0D7Y0FLbUH7Y0D7Y0FLbkovWTaP0kWj+J1k+i9ZNo/SRaP4nWT6L1k2j9JFo/idZPovWTaP0kWj+J1k+i9ZNo/SSsKwHrSsC6ErCuBKwrAetKwLoSsK4ErCsB60rAuhKwrgSsKwHrSsC6ErCuBKwrAetKOOdh02/ARXqR0xJ0pe/uXPcAt4O/UNaT9ztAL3AnuFunYWgJGFoChpZw7qPNRMpfou7LepnzCuevgsM6GRUiBwaXiDK3aDW9KFpduO71usC9AdwIOug2MLs2bmfO79XF7lAwHHzL9O7n/GEwRngwPg/G58H4PBifB+PzYHwejM+D8XkwPg/G58H4PBifB+PzYHwejM+D8XkwPg/G58H4PBifB+PzYHwejM+D8XkwPg/G58H4PBifB+Pz/h8Zn/cDxlddTNAXG11Ea6ObuN64Vdxr3CauMLqLi40e4ibzT6KD2UvcKNvry2UH/Qe5RM+Ty3VruUN/DjfMlkQ4uVtPlkX6U7lH1JFp9NZeXSoaiAmZFWK+Xiv+ptfS+6UV3wZ7Ab2fSe9n0vtlRi9dSm7dxSioOVRZe92SUS5hlMFymV4q3wfLM8XyQ/02OW6j/FivlCv0BEZ/iJGPyl26kNFbMvpERpeMPovRVwhHrtJz5FfYhJKXa3V3uU4vlglabdCbyYr58NT5+hNs+4SaN5M7V1F7OrWHy7WZDLVfoPbV5NG3aXEPLZ4Ov9vxbKwdSTavR/a+2mxNJu+le5l9hTRfhSev0LeZn+oZ5lbxW/MwGTlbVJJn67lymfDI0mczgzcY6VP0qJRr0Zrr9Vtk6Qi9Z5hRgkw9vCJTywpNKplZodzDrNKU79X7jJuEpReLCLCBAg6IAhfEgAfiIAtU0ktFZdBSbxa/Bw/qheIh8DB4BIwBY8GjYBwYDx4DE1jDxXqNWKLXGKbebEhggQiwgQIOiAIXxEAcVAZVQFVQDWSD6iAH1AA1QS1QHzQADUEj0Bg0AU1BM9ActADX6XyjHfgzuB7cAEaCUWA0uA/cDx4AD4KHwMPgETAGjAWT9CZjMpgCpoInwJNgGpiuN5nn6IXm+SAXtNPvmY/qlDlOp/Dy9jyVYvysHB9byJMoxsfa4mPlsjRTJI+wI45qJY9ljsjjmc2yTNuyPFMoT+hcmaFc61pWJFNk2fpyS2llOZkjVjSz2XK1bcUyhZanc6045VnUG6QXW4PBEHAPuBcMBcPAcDACjASjwGjwot5szQZzwFwwD7wEXgavgFfBfPAa+CtYAF4HC8Eb4E2wCLwF3gbv6XxrMVgCloJl4H2wHHwAPgQfgY/BCvA3sFYvtNaBBFgPNoCNIAk2gRTYDLaAfL0wUqYX2xLgv3ZEL7Wr8l4NNAFngHPBb/Rm+0LeH9P59jQwg2vmac/lnPnYzMdmPjbzsV+nbCF4EywC74LFlC8BS8EygO02ttt/5/wf4AvOvwSrwGqwAWzUm+wU9wrBXnAAHATfgEPgMDii81UWqAQqgyqgpt6kaoHaoA6oC87Xm9WFoL9eqAaA+8D9YDJ4Dryg16j5vB/RC50WOt85U292fs37Oby3AW05v1lvcrpzvwe4HTxK+QzKnwJPg5lgPijTm6JC50er8M7+irKvorVBXb3Z7a5T7p2gN+gL+oFBgP3ust9d9rvLfnfZ7y773X0cTAATwSSAve4UMBU8AZ4E08B0MAM8BZ4GM8Ez4FkwCzBH93nwAngRzAZz9MLYNToVuxa0Aq1BG9AWXAfageH6vdgIMBKMAqPBfeB+8AB4EDwEHgaPgDFgLHgUjAPjwWPgcTABTASTwBQwFTwBngTTwHQwAzyl3/PO1Auzovq9LBfE9HvCIlcsJPKn5Xrxa+JyuXhSDNMzxXAwAowEo8AxnUI/p9DPKfRzCv2cQj/76Gcf/eyjn330s49+9tHPPvrZRz/76Gcf/eyjn330s49+9tHPPvrZRz/76Gcf/eyjn330s49+9tHPPvrZRz/76Gcf/eyjn330s49+9tHPPvrZRz/76Gcf/eyjn330s49+9tHPPvrZD76Fy/gEOz/VxWjWYjRrMZq1GM1ajA6dgQ6dge5ch+5ch+5cZ87RReG/jzz5r462m0f0drJZkiw2U64WDciX28hgj6HhZqLhZqLhZqLhitFwxWi4QD+l0E8p9FMKzeSjmXw0k49m8tFMPprJRyPNRAfNRKfMRJPMREPMREP4aIRitIGPDihGBxSrM3RKnRl+H2cx3D/g8il4dgpunYILp+DAKfivD//14b8+/NeH//rwXx/+68N/ffivD//14b8+/NeH//rwXx/+68N/ffivD//14avF8NVi+KoPRy12BtP3fZy/FHxrmvbhmz58sziazX7qoGfAMWfAKdfBKdd5I3WRNwqM1kXxbL09Xh3kgAagIbif8tl6uzDJKq+R1+Fxcom4SC4Vt8gPxPnyQ1GT9X1XfgyTWiFayFWiDWvdBl0fgTFciravKhPiPNb9a5hDfXjODkoLxBnwhTbwheaySFxJvx9XfJZ9JiN9pOdTf2o45kLu3QmrWCqyKPucq9XB91L++Lt0jV4i99Tfp4s957I7LmbUVuTDq7HhZMm5ZMsjlF5OtlxKtkyH31G8VxiMXCDqcnVp+JliDeo2w4bgtwh2i7Oo8WuuVotcZpjNvfrMNfjWtw76SzlItMT+j61L4GsmJZ9x9Q9qk5vghCVc5XPVW8S5Os7VZ6KFsESuiAAbKOCAKHBBDHggDrIYsb2oLjvC8bqA3sxpKTzwQ3jmR3qNNUjkWoPBEHAPuBcMBcPAcDACjASjwGiRi5bPRbPnotlz0ei5aPRcNHku+jsX7Z2L3s4Nf/8iDrs9xEj5zGK3/IAnGfyayUf6HdjtXuY+iDVZgl3vU4vZMve4qGp8JZoYa8Q5rEwX1uGPsiO1OolOskv4HXOdZG/9UfCtRHKI3iGniQvkdHEh4/g86WYwmQXWReI8q6U4h9XqJOrToj7jnM/THCQaMtK+YPxwpHjF75p8KjvT+hbqd+P9Vt4H4WFf6U1w5GL48bHQfzYIh1ZS2MEvoVA7h5o51IxS06dGicgRBURROJTYBW8awEjBMx2i18G7i3nqlYi4a8L+EjzB9bSiz4ARR6rqcjR8ORq+HI1cjkYuRyOXo5HL0b7ljNleFwX/xxM9nsFOUWFv6/UhUeMHY3YmZnUDfZjbIJj4an0A60qYh4/HVWfsw7Raybgxxj36s+PGGHdH8Nss9FaVcSP0eJgei+nxED1G6e1AxSzK2WftKQ2+L7AzTL4bGMCdQaIWLaNYbNOylJbltIxjSyZYNVqWsSsKxFViJ9gFjuHZx0EZKAcniA7tUS4d9DmyM9HiFtFVduP9Vt77oH0GYM8QPVuOwC+mid/hDxez4l8xYsvw2azVz4ajJfQG9lw2Kud4hY+cZ9G3lQFatIhUFVepjqAT6CJaqOlgDtjG9XawA2CnKqHsEO+l2BZ8/2MJlh1jzsew7AzmfQzLzmDetZl3EDEc5usy10K5UVQOvW4ZLT6mxU5a1KbFTlrUpsXvqF0Zm3eHnrdWl2H3UVruDFslwt8l6Mh4nfDkLrx35X0wUXGHaEzEKyHGuETGWkTGKsS7ZeEv6gTPL0UtSUkJz6E9Zx3CvRF8G16OHIhX3UO+243dRYy4R/uhv22j3U7aufTu0LPJnZSoJXroA+J28BcwkKffnufZEbu6gMF4ZlC7AC/ZzUoXYtMe9GWaXvaSJy8RNSKV9YFIMdinD9i9QR/QF9wNBoMh9JtV8ZtASXpO0XNKDmRWg4n5O3iOBXjRTnZQOFvicBFrtEd/EWrxGthXhn1l2FdWMfvgM+Wt9LKVXkx6OQMbK9PLEXrJ0EvwTfMOPWwPfo8I+8qwrwz7yrCvDPvKsK8M+8rEWaKHaCVuB38Bw0SeGA5GgJFglMhjxEqM+CtiVoQVbkfMirDK7YhZL7HSb7LS7+Onn+KnV+OnreSrejJz+gcZovlJa8hbgTVFsImLREt8tKV1iU5az4k863nwgsiLVBatItt4L+Z9H9gv8uzTwQWgt2hl9wF9wd0gsM/BqtIKvzEr/MYMn1Wwgnt0YfhpxALsnldRK6eiVg52+9Q8L/wEYo9eh2f0zqxAC+5D+21D6+1D222zTsvswtd6Z3xKSygpsU7Tl9Jr78xWWco6l9G6nNhwQq+yIvoIuvCoFdOHqLmKmleGbT/i7hpK1lDihm19eZzxyliVE3o9GjNjRYVN2wy11qMlM9TMJS71zuxmlAwq9RCWFctjvJcxajmeebJlOaNmUKeHsLjYcnh3sSJG+cmeypnBYbyuN7r2iDDopYReMvSi6aEoHNsWBq1LaJ2htaZlUYUNpwfrlJmEDTto3YTWm2ldKo+zYwPry/HjE3hcBp6g9Qls2UFvTehtM72VWlGdCGcV4zl7ojJKOU3PJ7Dpr0EW1SY9HsWOfJkRJq2OMna+Fef8NN0oqJFZTY1CxgtWKkWNQvoMVilFH/tZ3X96Xjz9iudE6595PmHd8LlQ92eeB3P8Pz4H4um/uf5Emf/yujPHn1jv8M4p11lkWdkialXHvprCtWrTWx3a1IUz1OO8PvcacK8x95py3Yx7zbnXgnxgWTmMUIe7DXlvxjPxrGyu0BBWDcavzQh1GCnoqz7lDShvRHlTyptRTj88haB2MHKdihrBSEFfVbHL5O4uK4eSGqCmqI99Vam5iz7rY5+JfSatdlkNud8INKa8KXWaUdac8xbBr5LTSz62BjM0rVrYWltEKnoJWudjfzBD02rCvabcO9naZL7ZoDq+l4PNNem3NnOpw9Ovy1j1gnlxvwH3G3K/MfebUtaM+82534L5MQueTXX6zaG0BqipN2BDhtXZYdXlWdZjzvWp04A6DbnfCDSmThPqNKVOc+q0ILMFz8kL17WmyMaOYMWOYkc2dsSwwwvXtjHXTcMVPIoN2dgQC56KkOHca1es80nrg9WT4bxPtiipsNoUlf5Tn2DX+qzfP/kFu/1sEf93fYNW5wj1U/7B3Wai2n/LR+jtV8z6P/QTWp8mqvxffYVeLgpm9N/xF57E38Pn+B/5TJgb4v+u34RR/TRZmtlDJO1GxKlLVGstj2dKiGpXyPJMmujTg6jWkKjW0opk9hBRuxGN6hLVWlvRTAlR7QorlkkTmXoQ1RoS1Vpa2ZlSVuQsVuR0VuR0qybXtfSvWJEsrDqXVWnOqjSz6lPegHoNqdMINOa6CfWaUq8Z9ZpTrwVeE0W5eWiuXBn8rs8KUQ22mw3TbQqr+B1cYSVsr1L420JLjC7i90Y3caVxqxhv3MZ7d5R7e/2MvBEtcpNeAvN4JvylutP/Ra2VYa3gN5A2hqXfXi387spEyS83PtQLw7Pg1+12cFYJlXyWEKIlmvQM8Qde54hrxfXiXHGjuInSm+FyF4s7xGPiGjFBvCruFkvEcq4+5DVZ/F1sEFNEktdzIh918rwopMdXjDpGHbHWqG+cJdYZrYzWosBoa9wgdhkdjc5ir9HV6Cp841ajhygxeht9xTfGYGOGKDWe5lXbeIZXHWMWr7rGK8arRj3jQ2O10cA8xzzPONs837zQOM9sabY0LjAvNXONC80/mnnGReaV5pXG780/mdcaF5utzdbGZWY783rjD+aNZgcjz+xkdjKuMruaXY0/mT3M242rzZ5mT+Nas5fZ12hlDjCHGH827zXHGDeZj5qPGz3NieY0o7c5w3zKGGTOMd8whpiLzJXGQ+an5gZjupk0C4yXzD3mXmORWWLuN94xD5pHjPfMY2aZsdzUUhgfSVNKY4VUMm6slJVkVeMLmS2zja9kjqxtrJGNZGNjg2wqmxlJ2UKebqTkr+RZRr48W55tfC3PlecZ2+T58gJjh2wpf2/skpfIS41CeZm8zNgjL5eXG2mZJ/OMvbK1bGsUyxtkB6NEdpTdjUOyt+xjZOQAeY8p5Ag5wrTlKDnKVHKanG46coFcYLryLfmWGZPvyndNTy6WK8y4XCU3mjXlDrnXbCxLpTZ/ZUWsLPMCK9s6zbzMusS6xGxvDbLGmDda46y3zTut96zl5jTrS2u1+ay11tplPm8VWdp8K+JGXPOLiBfxzC8jlSNVzVWRdZFN5prIlsg2MxkpiBSY+ZHdkd3m1khRZI/5dWRvZL+5PXIwctAsjByOHDGLIscix8y9kbJImVkcOWFHzH22srPMUruyXdnM2FXt6qa2a9r1pbQb2b+Rrv1b+7eynn2hfZWsb7e128uz7VvsB+QF9kP2I7Kz/ag9Xna1J9oT5W32ZHuK7G4/aT8pb7en28/Iv9jP28/L3vZse7bsY8+158q+9nx7kbzbfsdeJu+1P7A/lqPtT+xP5YP25/Z6+bC90U7KKXbKTskn7K321/JJu9BOy+n2AbtczlRCmfIlpVRD+apqrs6Xf1MXqUvkOnWZukwm1R/VVXKTuka1kVtVO9VOFqgb1A1yp7pR3Sh3qY6qq9ytuqseslj1Ur2kr+5S98oSNUyNkifUfep+y1SPqDGWpcap8ZatJqoZlqOeVk9bVdUz6hmrmpqlnrOy1Rw1x8pR89VSq4ZaoT63TlNr1AbrbLVZHbR+qw6p41ZrVa60dYPT3GludXBOc86wbnZ+7ZxtdXbOd863ujgXOS2trs7FziXWrc5lzmVWd+dPzjVWD6eV08rq6bRx2lp3ONc77a07nZudm60+Tnenp9XXudvpbw10hjnDrCHOSGekdY9zn/OAda8zxnnUGu6Mdx6zRjkTnYnWfc4UZ4p1vzPNmWk94LzkvGyNdeY7861xzgJngTXeOeh8Yz3mHHYOWxOco85Ra2KUwGdNilpRy5oSVVHXmhr1ojWs6dFa0VrW7GidaH1rTrRhtKH1snu929F6xe3mdrPecHu4Paw33TvcXtYi9y73Luttt4/b13rH7ef2s95zh7hDrMXuMHeYtcQd4Y62lrpj3NesD9wP3c+sXe56d4vlu1vdXVapeyxW28rEmsQmRRrGpsReiEyIvRNbHpkVWx07GHnJU17NyD+8M70rIvleB++OyFHvLq+fHfUGeIPsSt4Q7167qjfMG2ZX90Z4D9s53lhvgt3Qm+RNslt4U7wn7NO8ad7z9pnei96L9gXeHO81+0Lvde8t+zLvXW+pfaX3vve+fa33gfeB3cr7yPvMbu194a2123sJL2F39jZ4SfsWL+V9bXfztnv77b9433hH7SHeca/cHuFl4sIeHTfjpv1A3Irb9oNxJx63H4lXjufYj8VrxmvaU+O143XtJ+L1403t6fHm8eb2rPjo+Gj7ufj98Yft5+Nj44/bc+OT41Pt+fEn49PsBfGn4k/ZC+Mz4zPtN+LPxl+w34zPjr9kv5tlZmXZy7KqZtWwP8+qk1XPXp11JOu4vVaYLvxdCO/yKteJ00RD8V/600t0gd4tztFFnG8+ZY2Mnqlf51Wix3F1ne5Em5WcFVXcL9Jpjtsrrkp/1D64m9aHeP3vPXWKcb4BT/ysvcPB+z8o2coIOcEoP/mH8qLeJl3GuUcm7yziXBf80MZvZ3OKMb/Q27Svv6SHHcy28Ods/AV/Dr1Oq+h9py7WK/WuiquDPxp9L8jXX+t1+qi+RkRZuzNEo+/dz/zcYPowz+4QPfyv5aw/jOXk3bl6rvDAd8/wn1rvA7t0ij62chmBZzUXl3LWILz7N71Kb8B/8B10+6nHf1W/qGfxPhbk6l/rwXoQZ99bx29nz1nxj1pn9Ce6EA/6RP8DO3gOwer9sNV3db/4maUQ6FQhssKzCRUlPn1/+a1vft8rKkoOMfODrP1m/Q18vxJF5/MUvhtd7w2f0N5va/+ofbHewx7zv13x4JPR8H3L9+v8nN0V9VI/uOr/g6vPflkf/J0b1q/wNL2R5+fojT8z8pHv7e1zxe9+pvZr+uVgR+tPfrFNP2y/O/COwGd/dGf9L2jNzPQj4dk7/7yf9W2/oD0+ot8K49bW4Ln9u3/6lTCavsK6/vjP+UU9lOglYdT8hX5xih4O/nKvOkXrigir1/5HrReGx41B5Piv//3mF4y/+2Qu02X40Tf/9gjev7zbAvw5HOXbjLf95KvifoNTtDmdVwNep//AynkV76tPvv5F+3NP2b5idfGSw0Snwz9lMPFznz5ABNsW7qnAq4+G5VPD2/X1h3q5TgQZ/Sfal3/vfLyoRfy/SbQNdkhFWT65YemPY/F3bcq+dz6JzFNJXC26cb6goqyA1Vvz01n12/FDj36K9lGiz4CKSB6Uv6lfF1K/+5Pt/9kLI7CnnpQ/XnH/M/0p6//3iqsfx+/j3zsfR+taorUImFBuRdn7ejE9/PUnx9956vIMTyyIj7qdbqN76LYVtZ/7UfsHiGJz9V/1VzrxvWJT3CIeFI9xNkFMDP6fGfEanrtAvAs7XCqWi/PCTxUuECvEBnGh2CR2iWtFoWGIDkY3o5sYiKL/sxgUaHkxJFDx4h7zTrOPGIoeT4qR5mazQIwyi8wiMcZMm3vF2ECbi3FmqXlEPGaWmWViQqDNxcRAm4vJaPOYmCobyAZihuwsbxFPyW7yVjHTesd6RwSqVotZkaqRquIL+237bfGl/b69XKyyN9tbxFe2trVYG2g6sS7QdCKprlPtRH6g6cTXaLqbxLZA04kdgaYTRYGmE+lA04m9gaYTxwJNJzJouvGGQM1NNmw1Vc0wooGmMyoFms6oHGg6o4qareYY1QJNZ1QPNJ3RHE130DgLNaeNto50IkYnx3Fco4vjOVnGrU4Vp5rRw6nu1DB6OrWdusadTn2nodHHaeI0M/o5lzq5xkBU2+3GYNTZWONe1Nl4Y1igv4zhgSYyRgSayBgZGx6bZNwfKB1julfZq2ks9V7zXjP+5hV4+42VgdYw1gVaw9gUaA1jS6A1jK8DrWFsC7SGURBoDWNPoDWM/YHWMA4EWsM4FGgNoyzQEUZ5oCOME4GOMM2saFbMVFnVs2qYbtbRrONm8N8UNoYeY4QeY+Ix01AU08XT+PRMMYeSubyUmCdeJUvNx5/s0J9s/GkZu+59vMoNvcrFqz6n/O8iIWJiPS8TL9sAq94ktsCu8sUO9lgBPtdIFIoD7PiDvBqLb8QR0UQc5dVUHBMnRDORwSOrhB5ZL/RIGXqkF3qkh0f2FpXNPvilF/plVfwyX+SYW82topr5tbld1DB3mDtETbMAf60b+mud0F9rhv5aPfTX2qG/VjO1qUU1Cf0X2XityZE/UR3fVZzz8EUtGcWPs0M/roMfdxbN5S14cwu8uRvnt+LTLUKfrodP5wvD2mrtEqa12yoUtlVk+SJmlViHRH3rsFUqKllHrHLRwDqB9zcLvb9R6P31Qu+vF3p/vdD76+H9fxTZKk/liZi6Ql0hLHUl+yHCfriGkmvVtZS0Uq2EUq1Va+GoNuyTJuyT62jbjt0SDXdLLPgERMTVTeyZLPZMJ9FIdVa3iEqqi+oimqmu7KIq4S6qEu4ig110F616q37U6a8GUDJQDRSmGqQGM8oQNYSe72Gnxdhpw2k1Qo2gfKQaSf1R7L14uPeM4PMU6oxVjzLuODWeuxPVREomqUm0mqwmU2eqmkbJdDUdS2aoGZSwP4Ub7E/6maVm0eo59Rzls9Vs+pmj5lBzvppPyWtqAW1fV6+zDgvVW6zM22oxdi5RS1iTpWopVq1QK7H2E/U5fa5ReKZar/BJtVGl6G2z+lo0VNtUAWuyUxUx1h6VFo3VXlXMSu5TvmiqSlQJI+5XB7H5kDpEzcPqMHdLVSnlR9QRLDmqjtH/cXWcnstUGT2Xq3JRTZ1QJxg9ozK01UoHv6/qRES9IJpwJJpwJJpwJJpwJJpwJJpwJJpwJJpwJJoIg2gyhuNYZ6wwg5girCCmCCOIKcIjpozgONIdLSoHkUVIIssG4cU2xpIiHtsUOygqB1FGyCDKiFpEmQJRzdvp7RTZ3i5vl4h7u73dIscr9Aq5W+QViZreHm+PqOulvX2c+55P/RKvhDr7vf3U+cb7hvND3mFR2yv1SqlzxDtKnePece6WeeUi5mU8LWrGA2ldLYhfHK24xTESt0VVopgjasSjcVdUj8fiMWp68bioS1yrRkl2PEfUDqKbyCG61eZYJ16XOvXjDUR2vGG8If00ijfmvEm8CfWbxptyTuyjnNhHybPxWYzyXPx5Wr0Qf4GeZ8fn0Ofc+EuiehANhQyioagcRENRmYj1RkU0nMRLhtEwQjScwflM4qAM46BNFHyN8wXiPY6LBd5GNPyQ84+JgVKsJA5K4uB6IuYG4qsMP793wjgowzhYPYyDOWEcdMM4WCOMgzXDOFgrjIO1wzjoGZWMSiJudDQ6cuxt9OF4tzGA4yBjEMdxxjgRJ0q2E2YYJaNEyR4cgygZC6NkNIySWWFMzDaLzWJRJYyDVcM4WM08YZ4QlcIIWFla0hJViX0O5650RRXZUXYUdWWn8F+yBbGvXhj7GsgusgvlXcN/3RbEwXphHGwgb5PdRZ3v4mChkETAQ8Ih9pULN4x6tcOolxN8asv+/IP6A7v3cnW5kGGMc9RVxDiLGHct50F0k2F0s8PoVlO1VW0pCaKbVNer6zneoNpTM4hxVhjdcsLo5obRrTbRrZvw1G3qNo7dVXfq365u59hT9eQYRDonjHRuRaQbpAZRMphIZ4cxzvkf6r4DPopq+//MnZ3Z2c1sMilAEnpvMQYIASFBQEQECw/BXnioNKUISBUQBEVFBJSiIl0UUERAEOQHFuw8RHhipVqw8iwI9vv/nrOTsEtC5+n7z3z27J1z+925537PlO8GhwSHIO/Q4FCkL7R0IxGO2rjRwTsQZkvniKUzxdKFg+OD45HrvuAEaNjqOWL1XN/qTQ5Ohp5tnyO2L1OsnilWLxB8FFbP9K3e7OBshOcE58CizQ3ORXq2g6bYwcwYO2iKHXRgB9cgHLV9a4MvIvxycDMk2z4Htu9DhNnqlRKrV1qsXlisXhmxeuli9TLE6mWK1XODPwZ/RC62faXF9qWL7cv0bd/vsHGm2DjXMRyDzKi1Cg8OD6FQeFh4GOTw8HBKCI+EbUoIjwqPgmZseCyFxE6phMkJD5ESi5Pmfgtb47nfuz9QitgXTyxLGizLQYR/dn+hJNiUPzHP2aYkR8yISUmwJkFKFDuSInYkDRYkBWG2IKmRMpEySMO2Iy1SPlIe+oq+7aiMEth2pIjt8MR2JIvtSIHteBRlzorMQq55kXlIPx9WI0WshiJV/zu+8tro83PyqC1dfiSc///Hpr/QX/LHP9pVkt/F13nkWt+Jlv0pX+ESz/sFOf6osE6Rm33v8xv2P8UX/VDv0Xvjr+gcu97CK3S674m38PRuuh08T/4+ou9dLMcX8LRfO/nrMkXlfHP4kf5epK+Hr7gfI7tH78On6MpejCeaFpP7Q6R6n/i6RxmE/CuMhd71X7SFi1oTW69LV4ju65KuLuivil+b0z/o3foDxBS7C3GyW+FV8vgjnj/+WR1zvQBtN4vC3xzpV9Y7i1/VPF1byXdwjplrvp4j37/L1fDX+cPXh/RChN7w0xSeWTyDf9JvF+pPqJ5P5Rzdc+iYr4Lp7TEp7pPrQXytfKeEPkVrYi2UP77H+/vKVes9x0534hvOtJhy9QH9Oz6/8rUu/UdcuqPdl/of2/7iOX8cm55xCpnbl1DeHqqFc7DCKZR69K0WiW1leyo2tcQNtuG47yGe+lpxWHlxrYqde8eZf5lep5f69wfS9Cy9TrSf8Ooeu3qfFH54H7Zxl+CHvYJNxJrxmqR34Xuxn2qf3G97E59XsO+Nv3ItliyDCq/NbsBa8IZ+B58Z0LbVW/Vbov93FEXIHe0rTrylxVr+ZdyRrKH6mRhNTz1P99J381V+3a9I2xS653jeFb/rSHzPtfi90K/0C+jLh6dvphaeD7yOwYIV4sI3yL8/G9sG2OWieyN8j+UYJf/rdLXxZDeMUkS+J/H95mKxA/SGuLTR7+1Y3T7hM+Qk6nuXz3rBWzJOHML6tssfNUjdQ2+S3/sgmSWsYRHKKVbmPsyDb/27SyYsR+Fdp4PR2FNf3w7dh46/X1mIUhh7ybr9KfZ9xbDnTsGeJcx2zObTbLtK2g6zZ1uLxf9+uMbX31Kynk7kPvoJb7rrCWaIPmMxTo+V7/+IBVjOH4Se0CujIYkrxGdyvxO/1OqTaN0y/Rws5rP+0Qa9iPj5oFUcxgeWE1ZsA6xEIQr+D6zvW76diN4/SyxW5mv6Wb3eLzONj3x9nHXQ+sRbK/kwS/UHRUeFvstuDhX6lVEkLhbtDT4/os+I+PPnB7HI1+j2crSe+G5eX3wGITRRT8daN8gvJebZFozA83roSbT2n3q4nqt7IfQSZvVc3U3sw31YjeZinNfrGbo71tb/8D1A6dkavUTPjtbsrxqZ+qXDytyrt8GrjM7chkUhH3fqX6Kf40fMcWXvl/le9FRQ/Col63SR5yvId5c89xD7xEV2/BMrf9UWfxdXnmD69tgtkR4Ve/7qr9jiPVkeVZzDPx7Lfsqvc9o83RPZYvEHZgN7We/h+wh3uotSfnXq7dWP6tv0GD1Nwm/jfJ/DT8r461AUL/6kV+Cz7tTqkZJyok+ynFIZn+jPsRLK+ojf9HOch0WYO/qr6++AOb4rCQGecF0ngbljcr8V/VXRFraD//KPdvrzx2/13zOfS9p0V32jXqtXkpKj4XogrHXnKCLQq/TPOBqvb9Fn6aqwo7l6kO5xCnVF8WOlU2qvb5OiPm3R84Zz4mNP56bnn4Yy+OzdFrXqwLfFfn2J36O3HFqF/94NrfkIc06ueeIcZk+xyFOJIl3EvobPEZ5V/as3tHdC7MwFvlrzd7bnyBtm2wDGTtEnXXV/oKN/Y/ZF49aL/Eiv1lfpuxG6X38c1Z1kXa+dentPsMb9sc95/e9uRRj3h1N/urKkZ91P5xZFh8Dfn2HVOw1XLI71jPJR8x7nGaWflmv7X598TTFbxmkp5bg2YKFTRq560uloyTHq8C0d0O0pX5c/Tb/SsWr5BMj2vzxTTt8G1LP/tI1Myim043TM97/wfsTJnI3APXuiOf03Owqvi2yS+wybjpq5t5926YnX+1dvJ/MORLEyjng35Ch55Go9XymKesLRKzpF94LDR/OP5dpuBvUi+8Trlfwn8ZaX3itrx6F3yQqvyR2vb5dA5514rX/rVvpkM574nSfipxr4vnSRZ6+fF/kt7PMx70b8r23A/T8d+Z2JmHQ///fbcnzb8VnIk13VS3xX6ph1yRMEh94dlDsWRWdWuMRMhWn5WlU5ugpz7m/Y4rF71GrAezqGnZU7MX/D9T79/Wksazf5V5RLfOOotrzlxHfQ3y4h9lhl83tUuwtzFobkCv9uX1NYZ1Op67B2xRzddajMwrbw+1rFWsVvZdXjuzQn47XrGXqBXlP0HpgfYkTgX9N8u6gd9Yq1d8GJ1xeX/ySeFNJb5K7Em0XH8gwQ8KZ93Hf6juPtvSPUXeK7ycfI87lcteKVXGyBHG3A3ItahvDR8KWsKEnU7Pje1ywh/8k8/7CV37eUz4HosUj/qvnRrYPfl3Lxzxvh/PpevyOfGVQGmPRL/27SruiclnOt54m39Bj9iN5hi/HWdWc9SD+uZwpvQNEzPbqdXnaCJW/4axAzt/HI9eg/S7qrHL2jeJju+2PfxTnZTZ6R8S2z/gF44gfgo/f1h4cskf4GOr5n3FhfKsfLcQZs09foV/hYr9cP6lf5irnEPRBX9vZC/Qm16GLdS4/Sbf0jCeEM7CbhBXqe7ofzYAbQ2hqsvJxipX5Wr/BXbb46X5py5J7zYH2z6KLPI84Ern6Ufw9mSSh6CijuWpD+pfBt/hNq70N6IXy1h/2jTVL3DLHzm2QM+O7rUr1fvygJom/t+08Y+GdxwxOv9e/a/itvYxevZXehxYred/67tpO5T4Vf+luKuepQxJBwPGtPKvHzO5dIuBzlwvesJHk/A+r4TFaTstRAv4sZyvt2vUOfhfnSjVwdXdd9PxWzM+pTlfGPl/l3KhQVvTEt+ieP0g95tkIPxTrnX4HULfR1+LTTXSlVR9fgQg6N4ficq5vqTtp/s0G/rj+WpyV4xn6FNWm377/WpVqyctaVVEe/ulFyu+boeZALi47XsC8X92RFRz9wFXWgxlRfeGKqS0xs38N/btEJfx6UlXKtvkkv5zVMj9B3cAil3hNXbfQZsJtOor036z7ofx85cBC6WezmHbJSv4Pfcu+f0TfpVwkrSOEmI6v7+2Uch49XYt1fHjtNsTzfyBMBjBPkbJKzeQOOAxLtHhXvcK4kykfrFW09Bo/dlT6P3Wg631BGKbpB2OkGCzvdOGGnu8e40riGJho9jB70oPDSTTFuNe6h6cZ4YxotYXY6WsPsdPQ8s9PRWmano/8zXjTepvUqR9WjTSpX5dFmZqejrepsdTb9m9np6F11vmpH76l+qj99qAarIfSxmqgeoB1qvppPe9Tjagl9olaqVfS1Wq1W07dqrVpH+9QG9Qp9r95Qb9CP6l9qE+1Xm9U7dEBtVVvpZ7VNbaNfTNeM0K+mZ6bQ78wwR1oY5kgY5iyzmlnNCArDnCOscglmnplnRIRVLlFY5TxhlUsRPrlU80rzKiPNvNa8zijN78oZ6cz6ZmQy65uRHVgVWGdcyaxvRhdmejNuZKY3o6vlWclGNyvNyjB6MN+b0cf62NptDGS+N+M25nszhjPfmzGC+d6M25nvzbjT+sn6zbiLOd6MCczxZkxjjjdjFnO8GbOZ482YzxxvxmLmeDPWMcebsZ453ozN9jX2ncZ7zO6mDGZ3UwFmd1MWs7upILO7Kceebc9TiczrplKY102lMq+bKse8bqoq87qpmvYb9vuqNjO6qbOY0U01sffaX6t8ZnRTLZjRTV3IjG6qPTO6qZ7M6KaG8PtxaoSjHKVGOrYTVLc7CU6CGu0kOZ66w0lz0tRYJ93JUHc65Z3yapxT2ami7mbGNXUvM66p8cy4pu536jn11CTmXVOTmXdNPcC8a2qK09xpoaYx75p6iHnX1AzmXVOPMu+amsW8a2qu09XppuYx75p6zBngDFBPMPuaWsjsa2oRs6+pxc7dzt1qiTPeGa+edu53JqqlzL6mljH7mlrO7GtqNbOvqeed5c46tdZ5wdmqXne2Oe+pj50PnI/UDme7s1ftdr50flTfMCubOsisbOpnR4cM9QuzsqnfmZVN/cGsbKYRyghVMCPMx2amhqqEaplpobqhbLNsqH6ovlkx1DDU0KwUahRqalYOFYRamjVCrUKtzKxQ61Ab84xQ21A7Myd0Yehis37ostDlZsNQ71A/s1G4Uriamc/sbmYLZnczz2e2NrMts7WZfZmtzRzCbG3mKGZrM+9O6JhwvbmY39ozn2e2NvNlN+gmmRuZp818173K7W5+xzxt5p/M0xYIME9bIMg8bYEw87QFEpinLVCKedoC5ZinLVCeedoClZinLVDXne8uDmQxT1sgl3naAk2Ypy1wNvO0BZozT1ugBfO0Bc5nnrZAe+ZpC/yDedoCHd3d7p7AlcyyFriaWdYC1zDLWqALs6wFujPLWuAmZlkL9EpUiU6gd6KbmBi4NTElMS0wmJnVAsMSDyYeDIxIoiQjMJKUsQdWLxEeXxJ5ZFAydpNSsA4HKB1rt4VVvTr0NbAHqSZWQYeyYCVDsIdNyYU95P95aCb/gMEWM1EsZhIs5qXIdRn2ZNjNa1DitXQ9NacbYENbwIb2A3Loj70lDaDBVIqGYC9NQ2kEah4JC5sOC+tShhExEilT3hAua3iwuWfA5taEppZRi3KM2kYd6OsadRHOgi3OEFtcD7b4Ysj2sMjnCl9ohnEN7HJ9scv1xS43gF2+Dfrhxl2Ua4wzxqHMu2Gpy8JS3095xkRjCjUypsJq1xOrXU+sdj2x2jmw2gsRXgTbnQPb/QrWg1eNV6mp8ZrxFuUbG2HNC8SaK1jzXMiGsOm22HRPbLoSm+6JTU8Tm36O2PQzxaY3FpteDjZ9IVVUi9QiKq8Wq6eosloCK19FrHwVsfKVYOXXQv4fbH0FsfXVxNaXh63/F+QmWPxKsPibId+B3a8gdr+C2P2qsPsuVTcjsP41xPrXEutfE9Y/neqYGWYG1TUzzUxqxSsBwlgJqDZWgpqQtczayIX1gLJ4PUCuJmYTyKZmU8QWmAWQzcxmSIO1ARJrAzT8rvV58q51G3m/+jx5v7qNvFPdGuvESGoWuD1wFxlYLSZSUmBSYCqdFZgWmE6pgYcCM6lJYFZgDpUJzA08RRmBJYFnKRMryiqqz2yilMvrCuXzukIuryuQnuVRCyvZSqZ6vLpQfawu/ybTetd6lypZ26xtlGS9Z71HAet96wOysOp8DM12azs0O6wdFLR2WjvJsXZZu6iUtdvaTQm8JlGE1ySk/ML6gpKtL60vKQUr09dkWN9Y36LGfdZ/KNX6zvqOyvBahRp/sn6idOuAdYAKrIPWQbTtZ+tntOcX6xeEf7V+Rfg36zdqZv1h/YGS/7QVpdqmHaBmtmVbZGCFCxIWC9uhiB2yw5RkJ9gJZNqu7VK6HbEjVGAn2olIg1WQ/9XdTkXeNLsU8qbbGUifaZelFLucXR4lV7ArEDOgVoasYldBCVXtqkhfza6G9NXtWkhf265NZew6dh3o69p1KWBn2VmUaJ9hZ6P8M+0zkTfHzkFp9ex6SFPfro+8DewG5PKKi7oa2Y2gb2w3QcqmdlOUkG83J8tuYZ+LlK3t1hS0z7PPQ5svtv+BfnWwO6H8a+zOqP2fdhfUcr3dFeV0s2+i5vbNdh9qYfe1B6DGW+2B1NIeZMN62EPsoVTaHmYPQ2tvs0egLyPt21HOKHsUShhtj0YJd9h3UII9xh6DWsbaY5HmTvtO1AIEQGUZAVAOEMAkyrUn25OpAeMAygAOmIbY6fZ0yrQfsmEH7EfsRyjfnmHPwGjPtmdDzrHnUn3mgEV6YAWUsNheDPmkjbPUXmIvQd6n7aV0rv2M/QxKXmYvR+xKeyXyrrJXQf+cvQYpn7fXIuV6+wXEvmi/RHlAGK9C/5r9GmUDZ7yB9G/ab0Lzlv0WUm6030bKzfZmtOcdewvSbLW3ooX/tt9Fm7fZ2+gM+z37PWpkv2+/j7zAKMi1w96BknfaO5Frr70XpX1hf4X0X9tfI/339k9Ic8A+gNE4aB9E2362f6cMxjHUADgmgnBiMJlygynBVCobTAuWobxgerAcNQqWD1aiekA5NSk/WCtYm84P1gnWpabBrGAWNGcEz6SCYE4wByXUC9ZDyvrB+kjTINgAsblB+I7ARmdRw2CTYBPU1TTYFOnzg/mILQgWoC7mFDAYM1F9xkyQwEyQwEyQwEyQwEyQwEyQwEyQwEyUyZiJyjJmggRmojMYMyEMzET5jJkog7lqKdtp4bRALiAnaICckAbICRLIifIYOVEjICd4Ak43pxsVAD/1oSSnr3ML0gBFIS9QFPRAUUh5u3M7yhnljEJ4tDMaeiAqtAeICunvd+6nXGeiMxG5gKuoAXDVVGimOTjrnOnOIwg/7jyOup5wnqDzGWlBA6RFYUZakEBakEBakEBakF8639PZzg/OD6jlR+dHlAPURTmMuhDWjub/3goRnRsyQgZlMAKjskBgQUgn5FDDEDbKCYVDYYTdUCJkUgjrb8gLeZQXSg6lQJMaSqX8UFoojRqESoVKUUGodKgM9BmhDMoNZYYy6YxQ2VBZhMuFyqGW8qHyiK0QqgANsB3CwHZoCbAdJLAdJLAdJLAdJLAdJLAdJLAdJLAdJLAdJLAdJLAdhRnb0dnAdpeQF+4Y7kh2uFO4E8KXhi9F+LLwZQhfHr6S0hj5QXNXeD6p8GPhJxEG/kMY+A9pgP+Q5pcEg1SCSsikcxgFUuModwOjQFKMAiGBAiGvcq+i8u7V7tVUyb3GvYaS3Wvda6mie517HVV1O7udqYr7T/efZLpd3BsR7up2Rfpubjek6e52R5qb3JsQvtntRdXc3m5vpOnj9kWafm4/xPZ3B1AFIMtB0A92B0MPfAl5m3sb5HB3BJVzR7q3U2V3lDsaKe9w70DKMe5Y1DjOvRea8e4ElAwMilomu5MhH3AfRJqp7jS0ebo7HeU85D6M8CPuI0g/w52B8KPuoyhzpjsTsbPcWVTTne3OptqMXKkWkOt8qus+5j5GrdwF7kKEF7mLkGaxuxixT7tPQy51n6Esd5m7DLHL3RWIXeU+R3Xc1e4aaJ53n4cGeBcSeBfyRfclqu6+7G5AmlfcV6mG+5r7GlK+7r6OWja6b0Oz2d2CMoGGUf42dxvke+77SPOh+xFiP3Y/Rjnb3R0I73R3Ui5Q8m6UtsfdQzUZK1MFYOXRVC5yR2QMVYmMjWCUgJvHUVbk7gjGKjI+Mp4qRu6L3AfNpMhkqht5IPIAtWI8DQ3wNGUxnqY0xtOkGE9DAk9DAk9TGuNpqg9k11zwdGvB00qQdBQ3FyJmxseJgo8T6QrsiYKM2wgybivIOEWQ8QWCjEsLMi4jyDhdkHFGDH+PJfw9jvD3WMLfYwl/T1j4eyzh77GEvyci/D2W8PdYwt9jCX9PkvD3WMLfkyT8PZbw95wv/D3thL8nVfh7LhT+nouEv+di4e9pL/w9mUDqCcDNESMiGD2DGhqZRiYwNCP1xkDqF1MTweKXGJ2MK6BnLN7U6Gp0BcK+1bgVcqAxFLj5NiDyRkDk46gAWPxuhO817kV6RuSNgMinUXNg8RnUAih8BeSzxrPU0lhprEcso/DLBIWfIyi8laDwc4HCc8gUFG7G4G8T+Pscwd/nA3+3ExTODEMBYRhKFoahZGEYKiUMQ8mC0f8hGP0sdbe6h5oxsz919JE64/K66mn1NNVWzwGXVxVEXl0QeU31lnoL+JuxeGW1RW2B/l3g78rCWlRefaC2A5HvVDshmcEoS1jd6qhP1WfQ7FV7IZnbrYIwG1VT36p9CDO/UQ31vfoBYWY5qqV+U78jzFxHFdWfSlMFYTyqYhqmQph5j2qYlmkhzOxHVYT9qJqZYCZAkwT0ny24v77g/lzB/R3MsmY56Bn9Z5tVgf7PNGsA/WcL+s8x65h1EM4ysyDrmQ2oATyBRgg3NhvTGeZZ8AeyxR+oZ+bDH8g2zzbPRvnsD2SLJ9BJPIFLxRPoJJ7ApeIDtAb6n0qJwP0zKUUQf7og/rKC+BsHVgLxNwXi30AFgVcCG6ml4P5WMZxMlnAyJQknU6pwMrUXT6CteAIthJ+pnfgDTeAPbCVbfICg9QF8AFt8gKD4AImC/oOC/tOtT61PgfI/t/ZCw7jfFsRfRhB/W0H8KYL40wXxZ1j7rf2QjOlbC6YPCqZPEUzfWjC9sm1g+qCg+aCg+QxB7a0FrwcFqacIUs8QdN5acHlQcHm64PLWwOLwe+1sIHJbsHiKYPHWPgrPtXORPs/OQ3rG4q0FhUcxd1BwdlCwdRvB1m0FW6cItr5AsHVpwdZlBFunC7bOEPScYY+3xwNT3mffBzTJ6LmJIOZ8e6o9FXpGzA0FMbewZ9ozgSMZK+fZc4GV8wUrlxWsXGAvsBcBxy8GSi4rKPkSwccF9gp7BXIxSs4TlHwJUPJzyLsaWLmsYOXGgpUL7JftDSjhFfsVpGesnCcouayg5MaCkgsEJbeytwAl5wtKbiEoOU9QcoGg5OaCks8VlNzQ3m5vRyzj4ygybmh/Y38HDePjxoKPmwg+vsT+0/4TCJWRcb4g4wIg4zIIMyZuLpi4RbBysDq1FGTcSpDxZYKMzxEc3EJw8GWCg1sJDi4bbBRsBMkI+FxBwK2CZwfPRpnMKJYkXGKWcIklCYtYkrCIWcIiFhYWsYuERcwSFjEr2CHYAbUzl5glXGJJwiLWTljEUoVFrL2wiGUKi1imsIhZwiJmCYuYJSxiScIilhrDIpYkLGJhYRFLEhaxTGERs4RFLElYxKwYFjFLWMSShEXMEhaxVGERyxQWMUtYxJKERSwzhkXMEhaxJGERay8sYpbwh1kx/GGW8IdFhD8sSfjDLOEPax/DH2YJf1iS8IdZwh+WJPxhlvCHWcIfliT8YZbwh50v/GHthD8sVfjDLhT+sIuEP+xi4Q9rL/xhmcIfZgl/WDvhD7tI+MPax/CHWcIflin8YRZ8mFRqAo+lOrUQ/6SlU9OpCd+gllMLWL+uU5caO1nOGfA3sp1s6HOcHN9vyXPqOw3oXPFe8pw8pzEk+zCtnKZOU5TDPkxLp7VzHmQbpx1Ku8C5EGkuci6ihs7F8GQKnPZOB3gIlzmXIZb9mebOdc51aE8XpwtyRZkY2cNpBQ+nJ+piDyfRucXph3L6O/2R61bnVjrHGeQMgma4MxK9YD+nifg2ZYW5MU88nHxngjMBkv2cc8XPyXemOLAS4ufkiYdT4MxyZkEzz5mH2tnbaSXezmXOQmcRcrHPU+A85TyFNE87SyGXw/NJcHY4n0B+Bp8nQXye88Tnaensd/ajZPZ5mji/Ob+hd+zzJIjPc4n4PC3E58kXbydPvJ0m4u3khSLwcPLh4SRTc/FwWomHc454OOfCwykNL6hMKB0pM+DhNBbfpqz4My3hz9RELXXgzyTAn8mFzAs1gSyAD5MgPkwCfJiLIdl7SRDvJUG8l/PgvXT0PRb2VS6HH3KleCxXh6+G5vrw9dQs3DPcE/Lm8M2QvcO9IfuG+0IOCA+AZC66ZOGiSxYuulLCRVdKuOiShYsuWTwfU3ybfySUTahCZyW0TfgHNUu4IWEodRSmuoB4OwF4OHXhRbAPU1d8mNrujfBhKrs93J5A6uy3VBaPpS48lj4I93Vvgecw0B0IDfsqVd1h7jBohrsj4aWwf1Jd/JO64p/Uhn9yDzT3wkupLV5KTfd+936kZ/+krjvFnYrYafBPasI/eQilsX9SXfyTqGdSVTyTbHeOOwdynjsPkj2TXPFMOrgL4ZnUg2fyJPRPuUsoRzyTeuKZNBDPJBeeyXJoVrjP0hnuSnclUq52V0PP/smZ7lr4J9nuOncdYjfAM8kRnyRXfJIO7pvuW4jd6G6Cnj2TBu5WdytSsk+S637gfgj9R/BJGsAn2Y7SdsAzqSCeSY67y92Fetk/qS/+yZnuJy4wnrADZgkfaR33K/cbaJgpsIq7z/0OYeYLrCF8gVWELzBL+AKrCF9gReEjreD+4f4BydyBWa52gQCFQbAagDkQoPAIVhRu0grCJlheuEkrCKdgDeEUzBJu0jqRxEgS9MwvWCOSGkmFhlkGawnLYMVIeiQTscw1mCVcgzWEa7CWcA1Wi1SJVEEsMw7WEMbBKsI4WC3SM9KTKosnVh2e2CjxxHA+RO6K3AUPbRy8r+rifTUQv6sD/K4pCE+NTKcc8b4aRB6OPIwwMxfWEObC8sJcmCXMhbWEubCGMBcGyLB2wIshak73GLnY87G3MjqoRKDO7ubowFrI7oENgY347ArsCxzA/qf1gtnd2oR9m7UtsDawlnPxd2BfNC1itzFq5bzRHVoug/ddgQNF+TcVlbKPynk36E16k9dTb9abvZtE9tXL9DJvkP5If+QN1sv1cm+4flg/7I0U/e0iR+uleql3h8gJkmailPOAxM6S8GyRj0uZS0T/tMilIpdL+c9JeI2U87zItSL/T+Q6kS9x+WREW8HfVAu78rpLCQtYUkWzk+6sO3vX6416o3ej1NxVZA+RvUT2FnmLyH4iB4ocInKoyFEix4gcK3KSyAdFThE5VeSjUtdMkXNEM1fkQpGLRC4WuUzkCpGrRa4X+QJLauR10cP1cLR9hp7h3cC9Qw9e1C+iByy7UyWqhH5wuKfep/fhd2LZSzS9Rfbxe8bhfiL7i2aA30vWDPL7yuGhIoeJ5ja/36wZI3KsyInSkkkSnuyPAYeniJwq8hFp+QyRj0r7Z4qcJXlni5wjKeeKXCB9eVzav1A0i0QuFvmk1PKUyGf8kWP9cn/8OPyshFf6Y8ma9SJfYEnK7EQuueY0fpqHAuaF3AKcG011U7OfXqAXeB0pG3suYirAr+ykX9Ov8f+/Q17BEvE1qAZ+BaTCr3BAH8CvwLK7aHpIuJfI3iL78D8oYeQ53E9kf9EMEDlQNIMpTGGMPIeHihwmsbeJHCWaMSLHipwg6SdKjZNEM1lSPijhKSKnipwlaWaLnCOauSIXiGahhBeJXCzySSnnKZHPiFwm+hUinxXNSpGrRbNe5AsiX+JWkYExw6zEdz+9Sq8iE8c9dU8czdKzMHpNsONX0C/rl3FUDjtyUGXsnPNCfSFVwvea6D8+6hkYdZb9mA0G6dMoDaPO9XcV2UNkL5G9/ZFm2c8fXZZDRA71x5LlGJFjRU7yR47lFJFTRc4ROVfkQpGLRC72R4XlCn8kWK4X+QJL9K+ff65Uw8792qV3wTJF+6so3eyEPpN5uXkFYvkagilXDwJmP7MfWeY0cxrZXkekD3rX41xzvO44v8LezV5fSvAGekPJ84Z7I6iUN8obS2W8u7x7Yanvw3lR2ZuI86KqN9l7gKp5U7ypOFcf5XnmLfSWUpa33FtBud4qbxXleau9F2BbXsLvdjb8+At4xbFnOmEqJc/E/fc28xDbZtFTTL/F/tvIcW4J0XdA9GeaebpLfKNJ4o5nc2P+PcaStZefYN0XywbK64j+xOefe8d/HruEdut79b2F7dFPYYdV0av1au4325miuHf99+JieUVrCRNh8X7swX4g/h0Sfb4+/7j6xhtsmawlfvlxZdXHfljaYm05vF1pUSZasaKxbXoz9i0D/z2DA8wwE+WYib55WfJ2ZOZVfjLyOFnpwsXfHtK8fXvoKVrhQ/vwsH/k+vPQv7Hpgz7H1Fw9lxph57HD783WTK/XYvHYotF12LFa8UyX9Hy+FI5rJvaS+nG0/m+OcjEebROkQ/LMc7HnOBkpxR3z+QpLfLRy9UK9kPsg4cewf1oyF9DhZctWIZ6PU86FTtgP30o6pw/LS62wx5b1o/6RQtEnt4u15dlCLrIjbG78P0FJWW7J/w4ldvl4toD/LCafX2mxLMwlb4fPVdlKyneEdpVYpj8/pOyc4oyDsWlKjHsryqF5zHr8ucFlsf2U78I5sfQ43uJQFMHKdhUM/bW8pnmdvW5YzXp4PSgRK1g/SvJu9W6j0t4IrFoVsGpNxbo03ZuLFWm+9xi1kJXqHKxUL1A7WZ2uQIn5sla6ctU9Iitmolx1j8i6mYg6/on1tYvXhUysmNdj3bwB62bAu9HritWzG1qQKi1IRQtuBobo5fVGbB+vD4W8vlhVw94taFkqWnYr5EBvIPSDvEFo62CgM+UNwZprecPQ7gS0ewSleCO921HyKG8Uyhnt3YEVeQzW4mTvTu9OlHCXNw613O3dg57fi36moZ/3QU7AGq28+7370VpeqQPeJG8SypnsTUaND2DVDnsPeg+ihCneFMROxegkY3TYr3nEm4HePerNRO9mYU0PeHMwao6MWipGbTE0T3pPoZwlGMEwRnA52r8CK77lPeutRMt53U/xnvOeQ67V3mqkX+OtQ8vXY6yTZawV9mYy1mEZ6wQZa1fGOkHG2i021nbMWAcFqaTIWAe9nt5NaAGPeLKMeFBG3JERD8mIB73+3gBoeMSDMuKRmBEPyog7MuKejHhIRjwoI54oIx70xmGsk2WsLRnrZBnr5COMdVDG2pGxDmGsp0Jz+PjaMeMb9BYALad4j3uPoy9PeE+gZB7roIy1I2Md8p7xnkF4mbcMeh73iIx7UMbdkXH3ZNxDMu5BGfdEGfegP+6MiQxKwacWPkRdWOed47Uj8i7yLkLO67zrYH0UclTzqkFb26uNVmd72ehlQ68JUhd4BUh3iXcJfv2rPH5HNlpqPnKxheVyr/d18JBhQ66N06VBV47a+zoD5Z7jnXeCNRpI0VZkG7/UjvhcKWXe4GtaosyLqE2cLhvf7BvkxmnTYXeryV7B13PJF4jsjFICaFlLtIxbUBEtuAbe43hvPFWN5lc5pFSeype8N/o6IHBVRTWL0zlkqkSVo+rEao0fSBk/q7w43Q4yjU+VrarEaV9HGSlxmpVIt8NYa7wUp8VZZbyOfYHxZJx+HFnGUtknGA/GxfRGOVONAcbEOO3lKOd241p8hsbpm0PfHXtro0ucvhbKb489G5+2cTGJiMmTPc3IiY2h/WQb5XinXyFLx8W9j1YR7UBcrPYl/Fpf0ev0lWHH6RdBvwX7UtoXp58MpL0G+3R8tsXFDEbMbNlH0Nq4mGvJpjtlvwGfuXFxfF71lGcLDun4vOJnFQbHafm8ai574TjFn1c88y7wZ15YZl70zJ5/1HOOU8wT+XC0HhMzz2xpjpY6uvq6WvD23jezzd5x2hR4fy9hTzcvj9WrX5GazFfNjXHaT5H6QfWVudRcGaffCO+R//F+izndnBkXswxn/XPmw3G6mSj7IjXfvDNOOw5lNzYbqwlm3zh9X8yRgWa+eW2c9kqkDqvOZg2zTZy+JVnqB+xtzEQzJy4G/VfZar9ZLk6L/quXVLraYdqxeuNXlLMIO6lX1b64mF04Bz9XE1WNOO2bKGeosVkNVV6cfhnK6aK6GM/h83NczHTMmZmqjbpB9YzT344cOcadsAoXqA5xMV3JVqVVaeNmyPqqcVxcW7SqvfGrqh+nzUUdnxpNYDnieo35YxkbsVcxNqpAXIxCjGMsMzYZvysVG0NfYF5Op33GdGOFscf4Ii5uIwXlKZQtkNONV424s4aW4KxfAasx1JgRp5+KulrTDLYaxpi4mNtQV5aRRaMh2xhx40OdUVpXw0NMxzh9G8zdn/k5G1iU/LiYbMzdHdhz8fnVqFIUZxjpsvaRr4nORYWZV8OD7+DV8epiRp7pnYkVvp5XD+tzrpeLVamp1xSrazPvbKxBLTEnE7yrMRtdmY2JyJ9shSz4EMAqmN9AgT2R/2avF1L38W5B6v5ef6zCt3pDsLIP84YBnw33RspVldGUDnQxhjKB58ZRWcEVUaxa0XsYc7w2UMFiauA95b1IZx3TJhzNojzs25VDtqNbjC3qhNFRWJczcTTCH59uRePj+f3rjBoM6aWSXtrSy7D00pVeJkkvPellKellaellhvSyrPSyXFH/5kv/XsTvxO2u7lVHHfkefkuvhdeiCKt8h090JnX3NTuwXralz+N0b2I+YHWB9Y/VrsBvnh+nmYu8iUadON0EfP+KM6V0nBaW3F9fCjVd0aYtWK9idR3wvQ77rjgt17k5TlMHeaciXayuNL5HY1/kaxkJVffy/6IRP/q5xG+lGJEckfV47mANM6g1PhdJa3uILovkWT6a7/chquVx5OuPE+hBX1t4phX276+aMUebFXzG72OkYHTwz/iefO3MaEUfYjeMZjHaABBNNm3A/v/Y+xY4p6qr33XOSTIzmWfOKye8QUSkSBEREWGAYUgyec2AOIKgIiIiIgJStEgRKRctlyIOiBQpIFpLkYtUERFREZFSX6X+kPpRa6nlUupHrVWrSJnk/vc6J5nMTFDQMt773S/7d3Z29mPttddee+219uNE6DgN8TJtFFwjlTWCINMKScjSk9kQ6BjcPDwSHWkEYRLnfTMbAu2EJiFmoe2NIGyAGwSdSKJHG0HoSnvwa1GjOJ22MQ+n41qCpwS1L3L0+DS1zy8bDv7qVnYFZEz3sqvAZRcw/S9kXuuVk9cU6FyTaFIWVW7m9ieg47/Aev62rHg39cF4ewxOjLq1WSkecGEn0EU4MQssyKS1nGT7OjRB/3n6emA5eKB3et5nnCcLung65fXxwG7zQPf0vJ6Jlz1eD7QQzwyS87p4tjTkzytxf+yG7PSMwbMqE+8S57LcB92QWR5Ya575WTW8697pBjd5IK8873omZZXZ5dnlfswNewJ1yfhV01DKvdCz2g3Lwf0pUh7z9M4qtcg91TPfPRNpGFOeVpkUt2e6Z7q71jPJDdzcO5FGWaVq3f08CTckjhuaMH4dzirXz9PP3c7Ty90ZqfcitZ97bwMl3MiA+ElpCqYxdB11n3RhRLmHI6WDp0tDCdebrv2I74tWfODxeIqyWrXPtcW1HWntAPeY++MG/Nxb3VtdK11rkeZC2lvud7JKrXTNcYGirqMijJw7ssrNcc9xjXNB0rteR+ocpK/NwrHSPdIFq8m1CWlj3bPd87JKVrq6uvu7eiC1DjWOdU9ooIi7q7urq8jdwQXL0DUTqZXuSFZJr/KhW1Ywa7lGAq7X3cXdvaGs65jrmLLPdViBXeSCpe065s53lzRQx9b8Xa1Ap6NuV1Y86/0uqMuufa4GyijKXNcyoecrHyBlm6BsJmWCa5YyGSn7kLLatTMLVkyB3ot6FNdE13xXNkUSSi8Feq+yCmUmuRY0tMrV29UbNgysdVg9sqvGNTmrlCWfVCBTlQkijJwNnOpSTion5UMydAcFGrRyUqQ3YALLALykdEfKe8oJV5ss7HfL6+VNbD/JyiGXnAVxg7JBXixjppOPI22PcjSr1GJ5ugw9Qn5XhJHz9axy05Xpcq0M7pd3InU60jc3lJT7KjGxdiCvQ9oIZaqyKKtkX7mN0lOsDMgLUOMIx36y09pgstNljAFYGTLsqxFZaQS74Lj0AdISbO21UfpmtV2cqZb4FPj7clJpGKmKtFHeCbtGkqGvyHvlw0rWSJU3SkvkR6XlbEHJIrWBt2AzLZFmyPeKtQMJOpu8Ud6bVXK6VCtPktB+Ce0HnRbLGxqwkfpi/pUkyD95RRYmneQ+mH8lCdSQ52Xl9mIGliTIP7mLPCmLiiX0sdAdRS2ObcV1S59Jn2GOh/zDbC/J/bJqeBdzL+QfNERZelfukFVml7QLc8xGnu1laZfsaShFC6XVJFZOIP+kxwSFM6UW0VTYOpB/rFPsa6CONF2aTrWwdYAb6hQrOQ2laqmflGCNC/JPqpVWZpXrJ/WjdlIvseNLkH/4PcdJbUl9/f8Vm0nonMMxz34T2ynbanJWXHgF1R4jt3Adl5eNpvRKZtMcUzI5IC/LwrzWKqC7muW8tVHOyrKgg43CerXQbyrw2ON9KsctJGHvSsxF6bjZDrywE5fmizNZXz3z1dgN7D/O2mc5c+N0R9+axvhPAF5izF6TFSv01H2MaTruzOsdwjS7oGzQKVayRZ7LW0zXC3GrxlMdfq1wWjWd42p4xXB+o7j+NIf7MzuuK/fYmEZxOq8fhjNxZ06lcIZK4lcVNayfR9m/Ngfet+XA+7YceN+WA287bhyvh4YzcWeOd2UjvIeyH2Q/8aX93TCyYlw35gbkyCWzeoMDLoNV6mVpVcTSqoSlVSnLB983KKk4I1OM0iWMx/c4TvQGNDV8z86KFdbQWITESYkJWfH2WHbxbn8rx/7+3tews0LsT4Mv3uKzHo9bGaYMI1KuFKvByi3KLdALpinToCvMUmbBsmqgoj2rCpxLfPf5lhCpN6g3k6zeot5BBZqhVZChVWojaIhWq9XSCP0VfT9doR/Q/zfdYNQYw+l7xghjFN1h3GjcSHOMm4yb6S7jbuMXNM/abr1GjwvMHC4Sp2J6UF9n/afRJ9UXblVqVSa35EhGSHe9WIccNC41LiXZTPmBs/Wu9a5IU/jMkTJX+YwK0u/NOnsfcWYj+Y7jyuHGwO2HO+S4L+DEdzpuHRzy1R+sP5haD7cwtZDjt8KJPFOTU1Mz7H+YScNO9Ur1ysAW9ZwCdhonhj0aLpQKZercbztxXrUR/j1SPXLRvWlcGu9kUbLR2QKBN3/vTO7M4L0qy5XBdYZL/37McSLs9G/Kk/IwbLhGeCA+nc584NAktdZxZY5bm+XugxPf98KJ71apVoKmAn/+DXqLb8ZXwBI4ZNP7MzhBc4GTKHcafcl9lqsvBb1zwUadpw0bfk7YR5NHG8HendydohQle8OF4fA7+ajjnocT30vgxHeaB9fXr0/dCjcuNS45G07AXgEn2iP4RKZ87SKMdeKxXsZjvSOP9U481nthTC+hCqPOWEfDrV0Y2dejjIYymB21i7WLyaP10S5DuL82AOFybSDCg7RBCA/WBiNcAeh5gF4JfyjqkLkOmetwcx1urkNBHXXwl6ImN2rahfH+srWH8q1foVZY5TSNZZuUJdsk3xgfpLHvJh+kme8Wn4i51YdZy/cDH+Yz31zfXJIg124gtzpBhf2kTlYnkwsybgrC31d/THnqfepS+MvV5fBXqCvgr1XXwn9DfY+K1T+qH1EhpKEf2LfWWsNvq3WAL2hWpl2pTUb4h9pi+A9p6+A/rj1JJdpT2naEX9PeoyLtE+1zyNPj2kkq0vP0IspjuVaqX6mPRHi0fh0V6OP0iQjfrs+Bf49+H2KW6EsQrtOXwX9QB1b64/pG8uqb9M3wn9SfhP+c/iJ8QUef/hcdtehf6F8gZ71eDz+lpyjP+I7xHSpgGaob/Y3+iCk3yuEPMgbBrzDQN0algb4xgkYQfsSIwI8bcfjDjGEkG8ONKxC+yriGVJb1HuNmyHrZuMWAbm9MMaYgdZoxA/4jkP75xgbjcSozNhrbqMh41niBSo0XjZcRv9v4NcKvGm+TYRwwPqN88zJzIOWZFSZwMCtN4GDGzBj8arMa/jDzcvi15pXwR5mj4F9tXg3/WvNa+KvMHYAgZoVS/3n+fmT4q/3j4N/unw//If8qUvxr/E9Qvv9P/j9Rof8f/k/ASdut50kFV70M/xXrFfh7rb3wX7Vehb/P2keF1lvWWwjvt/bDP2AdgP+O9Q58Mfdo1h+sP5BpHbYOU4F1xDqC+L9af4X/N+tvpAbKAqrQLiRLzE9STNpBnjN/37g4w8zn7yDX+Pdmx4n3SKblgXOeqmleCsJB2+AzdSI8Hk58i7y1cJCZQq5k8op4B2ajvG/CxVIxlqkiLOSoqEOcaUzj4Jzh5HTIEpbh6XInkyezYQs8haxhHYNYx8jDqOpFGvPmhdAohkHWCP7qzbrExcxNQmdQefwqGL8TMGZvVCdiRN/EY/lmwJKcsXyreivyTFWnIjxNnY7421RoiOr3VFjq6u2oT+b6XFyfm+uTuD6Z65O4PiFlzG8gZfJZasgsBRQe526uL49HkYvrK2CudTPXeplrvcy1XuZOF/OZh2T5EHhIlj9SKvDrK88Nnt2PfWo09Qfxpn3H381vZrb9x/gNupP4nZw8h4vZy0kttTnV1kEc3y71/dT3s3iPGoe/cb3OCMk+79qoLMYBOSdM03rHadfLeNoa1Cnr/fL21oj/qj/j9p5OvTYE+x9w7fgHxX9nNqq3WXtz9PgZ0tk5q9sfLg3BxsemM9fr5LHDMs8so4jA9S+x9VKM38MRe7lxOUbNCIwXyag1rsSoGYl8CvJth0bwnPUcydYOawfCz2O8yNYL1gtIfdF6EWNnp7UT4ZcAUYzk1d9gJKusHXjVxepiKoSOsASy5H71foTr1DqEl0JrcKnL1GWIeQC6g6w+qD6IsNAgZPUn6kqEH1IfQniVugrhn6o/RXi1uhql1qhrECO0DJf6sPowwuvUdQgL2eFhjUPIxnOgmQn9wsv6hZf1Cy9LlgLWL7wsX4pYj/Cy7uCF1lAHu2mpvhT61TLoDi79Af0BKtSX68sRflB/EPEroE249F/qv0S80B1K9OP6cYS/0E8g/l/6SeSp15NUaJBB8CVDQh/IhoKwy3Aj7DEwqxl5Rj7CFxm9HZlaxvqFl/ULL+sXXtYvvKxfeFm/8LJ+4WX9wmtcA52ilGWixhqE15htzAZkW4/43ABWxhfGF+CJE8ZJhOuNeoSThsAtZaRgFYoLES5TMmUqNBUTuJkeE7iZeWYewvlmPsIFZgHCXrMQ+YvMYsSUmCWIKTXLEPaZKsKaqSGsm36ELzX7IXyZ2Z8Uc4A5AOFysxzhgdBW3OYgcxBiBkNnUcwh5hCEheaimEPNIMIhM4Rw2AwjXGVWIRwxIygVNaOIEdqN24ybcYQT5jCEh5vDkedyaDpuc4Q5AvFXmFcgXGvWIv5K6D5uc6Q5EvGjzKsQHm2OQfzV5jWIGWuOhX+deR3ix5nXIzzehJ5rTjAnIHyjOQnhF80Xkf9l82X4r5ivwN9j7kH8r83X4L9hvgH/N+Zv4O8zf4vU/SZ0cvN35jvwD5p/gC/mqmKeq3w8V/l4rvKxDlXKOlQp61ClrEOVsg6VxzpUKetQpaxDlbIOVcpzWxHrUD7WoUpZhyplHaqUdahSXiMQ62PptVGi2/HbwzM/8Zxvz/AKz+32TJ7Hc3iBWEWw3mB/Dq8iiHN9UzN75nfwrkg36oHYMdB1smPbkIXYoFiLcU5o3iHWYzAOwWJaZ+1czOrC5nHBhgmSByMHlgmsl99h3t4FK0XsMspqF/USlIpCgtwEXL+v3gm7YzFkh9ALfoNx/kf1T7AOBEwfQ9MwwkeSoY3Tric/xvl8Cmg/0hZSa4z2VdRWW6OtpfYY8xupI8b8FjoHNsVrdK72tvY2dYFl8QmdB8viOHWFZZFH5+ut9dbUDTbFaPoObIpx1B1y4Xa6QL9Tv5N6wLK4h77LlkVPWBOP04X6E/oT1At2xHN0kf4irIne3K6L9aP6UbpEP6b/jfqyTdGPJcJlPM4HsC5TzuO2gm2BIRi906gSWv0BGmr8p/GfFMTo/ZxCGG9FFDb7YSxVsVYfY00+zhycgA6/imrMX5q/pGHm8+bzNNx8y3yLLjdTZopGgOfOoyvAc9VUC33+IboS+vwaGun/uf/nNMq/07+TrvLv9e+l0azhj+GZ4Wrmy2uYL6+13gAvjGWOvI65cBxz4fXWQesgjQcv/oFusA5Zh+hG5sWJzIs3MRdO4t7U1VGCl1Sd/QBzVCdeP53PU5zNqYNohsNJ32eO+Spreh1VsB093tGHJ4BTJjq26VTwy3TorV51JjTWYubtMlB6MqmgwWrmUb9xgQGtwrjQ6EWyf6kfkt36u/V3WDf/sP4Bq+QT6xPw5D+tf8KW+dz6HOPtC+sLKrb+Zf2LSqx6K0mlASkgky/gDrhJC+QF8kkPeAOFZAaKA8VkBUoDGgUCRsCgdgF/wKL2gdaBNtQx0D7Qns4JdAx0os6BzoFzqQuJN9VCAkszpSS0VOOrtIrsT71Sfzw5Kzm1PlFfmTwKjWVG6lh9IjkLOtNFqUnJx1JdYTP0Tc05Vfnke81z1lfWr092SJpJuX4HIM2BxTIH0HkVBmFho8S+NOd+XitK55zEOSfX70uOSQ5PTgC+W3lFa1X95OQKYeGkKtgmu1f8y4XYAcPIttD3rbRWkBNttbbk1tpr7cmjddQ6gjM6a+dhTj9fO5+KtO5adyrWemg9IA96aj0xDwptqAxz3yNkGT8zfkYB4+fGz6kVLNfPqLX/pD9FHVlXOlfYKLwiIWkW6pO5Ppnrk7g+ieuTUV8XhM9DrTLXKnOtEtcqca1CB0trWwprW25b22I8ZMZDZjxkxkNiPBTGQ2hYrZkXJeZFiXmxiHlRYl7MY17MZ170Mi8WMC/KzIsSeLGe3FYSHOlhjpSYIwuZI13gSC8pgULwpZf5UgNflsLG1sCdxcydGrjTT2UBCzzqYx7VmEd15tFS8GhnKuFRK+4n9MlI/Flinbz5OMXYrKNOPDbFfmhek7E5BbQRKyL5thXHks/LKw1ib62AW0+MqYtHkJtx9PIIKmTsihm7UsaujEeQmsGuG410sLtTrJOzzCCWGWW8ItahBTGizMlR+/z17MzqvLDCxSw8CXUrXKvQ3D3c58R9K3HfyixnFO5VN/dqXiO49mnNH2Tgypitrkd7b9Rv5JtEHusj6yNAPGGdAMSTFnRSK2WB8wJKwIXWeAIeyBubdvYuqn1HZQ5rCmJFgGybn2cFF1sKbrYRPGwd5An5bv0dlGnQFewbNHYf3MVtFXaAWKu41VlBEByvML+Sw6+C8xR23agX7wGleWyus8sn9mkSmThR6xLrfoYjWYizbrRABesuaynLdhfjS4yvxPjKjK9yBjXfnaPmu7nmH1h3/dtqlpV9gOtWjrjG8fse/02fVF2WS98DTv9+A84JZ/KzDZpVfnODaxqX/ftM8PnKcCwVO63yWfsyDbEIl6XK+HsLXCzLOWXTvzl8D1w6LNb+mq0h5MDhVucfTU6VnkXDbPqn0zIxux3nhDP5s8KN4O6DO2X7s+KdvSiGPTbLpeH2tR2H18BlwzkFzJxtc/Km62lafybNcZm4YXC7c7vsOpryYqb8j1I/4u8N4v+mGuIy5cTdfvrqdZlGeIIO6XBmPfdU5VbCZWOd3WfpdmCU+7b5dhL5dvlepQLf6743IBEhRxC7jSTfs75nSfZt921Hvud8kKm+Hb4d5PY973uePL4XfC9Qnu9F34uU79sJKAWAsgulXva9jFK7fbtR6hXfKyi1x7eHvL5f+X5Fhb69vr1U5Pu179co9apT6+tU7HsDdYsTRebXrPsl30uo48swKGQMihiD4kYYvOZ7DWUFHiWMR6kjTYWE3Ue2NJ3HmrtP9WF20IV1oPphHQjrrwtmmWKrGLNMmVUG/UezDOg/naxOPCObjl14q3ob9A9hBXrZsixiC69Ee1nbDV1EWHWq9k/tn6Tpso66dZfuIoMtPFMfog8hP1t4lj5Vn0oBtupa6ev0ddRaf0Z/htqwPdcW9txOasf2XAe2UzvxHk5nMb9aeVYeZP051nnO/NtNnGeTvE77fsjziil5+IzKZ5lYmYpUfNACQzXQ6lYq9E61p9oTc2VIDZNLvVIdh7aXWCWkWj7LR5plWibpVnerOxlWuTWQTCthjeIZx8qmhjoLtrJXfVbdDmoIypQwZcqYMipTRmfKmEwZP1PGYsoEmDKtmDKtmTJtmDJtmTLtmDLtmTIdmDIdmTKdmDKdmTJdmDJdm1Hm6/Ry9r2KWqbbfMq+VxF21jTs2PS9in7U3YkV+sibjImYnwnzcx35HS1FzOF3W/+DU5dZz2JG7ho4H1ZYGlJ3pCx0IIlcCnTcWmhVr+hHqDPrtUHElqplahnapKka2mSqJtrUWm2DPuykdkJPnKueCx2ql9oL+mYftQ9ocKnajwrUAeoAKlQHqYPABVVqhIrVuBoHtBoVNqp6vTqe5YWLtVNi7VSBVncDeaDVTSSvw2fBrBNFC2w+A016ZZ0pWtAUCltGHrY5SpxWVXKr3gaXiVadc5ZbxRJA6oAR0sfB8R7EdOedY+KdYzev+3rsnWO2zfJ5t7iQd4uLtLe1A+Dl/9D+Awj+Xvs9adpx7V8Y2a31tuDi9np7cG5HvSM49xy9Czi3q/4d8GkPvQedyzTswjTspt+pz6bu+hx9DvXgdZzv6nX6UurJO8S9eD+4N6/XXMp7wP14D/gy3mftz/usg3m1soJXIofwikylOcwcTkN5nzXEqzNVvM8a4X3WqJnySxTzK36Fqv1uv5tq/Hl+Lw3zF/lL6Qo/hgS/ZeFb6hPHRrH75F4xSsRZoW8Nm8487m1sfsRWze36LIxhsQ4lbAe3eqN6IzCYpk6D/S1wlBlHnXE8t0VwFLZS+nbUQraWDql/Ro1H1CMYdR+oH6CWD9UPyaM9pT0NXn5Ge5bfHfDt0LSbI0dtfP+nIy8qWF5UZGK/XF7I2lCWggcgBdUWkxRprlz035KikaRo8d5w1hvs3vhxRka0PB5COvR28FicQzq0PEb9+SytjdF9ZyALWhZTe41HrEQtZkyXiPGeLY14Tf0clklDBTZWkVUEupZapdCaVAsYWn7LIsVqZ7WD5tbR6gjp0MPqAc2tl9ULmtvFVh8qsC61LqVCq7/Vn4qsQdZgKrYqrUpAC1lhKrOuskZzWyXepaUceN3/7eLFO8PkSE1xcn2X07N1jtTcROLuy6ZMrGjLrarYG5PJz/vcpC5TH0Cs2MlWeA/bpa5S16DvHlYfgXb+C3UD+mijuhF9tEndgj7aqj4DXfx+/X5o4cv05dDCV+orIZV+qq+B5i32lTvqJ/ST0LaTepLONcgogLZdaBRTT6PUKKWLDJ8RoN7GRUYfGmB8bvalwS0yq2TTZ2lO+iwV9NFv0m/9/44+Nl+LE9knmBLL2HK1279SfQg1ilMMiroObXapT6ibUddT6lOo5Rm0toBb6+UTB4Xc2iJ9DVpbzO0s4Xb60E4J40OcJtD5HIHJbba4za3RZpXaGIZhUjvDQvs7cPs7nXXbRdYUTSeCtflqTsnzAGsaD4AHSN2Avpb4jIWM3vwp89W3gZ2wJu37lcsb7RBMRN2ToBMpvKvoUqer01HTjMzeYuFZxzc/x65A0tkVkMjFuwJu3uvx8F5Pvn03RYb1LE/hN9LYUlbcmbTvVIpWPiji5EN4wiQp+Zk4We4t3gsjY2Q7dyAfBLThjTQvoXN51EfV9WjP4+rjwP5p9Wlgf0h9n0p41vPxfKeqH6ufkqYeV4+TqYmXmvp5h97SJmo3UyvtFm0KtdNu02ZSB22N9jB11h7Rfkbn8Q59N+05bQd1Zz2uB+txPbU/aofoQu3P2p/pImhzJ6i3Vq+l6BLere/Hetxl+vn6+TRQ/67+XRqkX6L3o8H6AH0ADeV9kSDvi4QhjSZRlT5Fn0JR3tGP6Xfpd1Gc9bsE9Ls6qoZ+9xOq0R/SH6LL9bX6wzRCf0LfTLWs641kXW+U4TW8dJVRYpTQaNb4xrDGdx3reuNY17seut4wGs+63g2s693Iut5Ec7I5lW4ybzNvoynmD8wf0K3mXHMuTTXnmfNomnmPeS9NNxeaC2mGudhcTN/jvfyZrAne7i/2F9Odfs2v0Wx/a387+oG/o78j3c07/fP83/X3oh/6L/ZfTPf4L/NfRvf6h/iD9CN/lb+KfsznABb7r/RfRff5r/ZfTUv91/uvp2X+m/1T6AH/NP80+skZ776fTf6Hnhloy6Mgx05WgHgnSwH/805WoCBQQHmBtijB+2lsFxDv6Cq8o+vivVw379/m8/5twSn33eobjzAhs3iXl4wrjCtJNkbBOnKzdeT5mqPUxW8j7kQRtiXFm9/st7SJe72SbxprkmLFjNRR4gSFOlodDahirUyxaqwaclnDreHATOJ7PVrm5Ay+9ZvE7jOJf92VKL3a8hNn1hbrap0zcUKDFidUyHrLelvM1qipC+/bNatbpHIuysBOrzatdG6/Dc+qb6Ww1W3YRnujA3B/w/otsD5g/R762CHrL1T6FbUpXIK4hJtLFGb2GC2nlocEDP2oA6lpKt+IMlpnUsV/ElvUjjWXGifPTzP0zo2Fi6UWsbyS+VyRS7tPW0KeDMUbwZVWOnBXfwXcy6AN3I/YR9THMLOIM0356j/UT2DDivNKJZCGj2L0CWmosjTUIQ1/B0n6R+1PFGAJ2IYlYHuWgJ1Y6p3D55U6Q8bdBEtWSLcuLN3OY+nWVf8J5Nr5fF6pm/6U/hR9R39afxoWrpBrF/DppB4s13pCrpXShXwW6SI+i9SbzyJdzGeR+piWadEl5gXmBdTX7GcOoEtZ3g1gGVfO55IGmjebU2D/Crk2lGVZELLsPti84rxSFZ9Xipjvme/B5v3E/IRiLOPiLNcSLMuqWX7VsMwaxnJqOJ9dupzPLo3wb/ZvhkX8jP8ZquWzS1f6/+r/K430f+E/QaOsa61raXRWD9l8kT4dsAb0L+Sz8MTr5BKvkyt8mszNZ9PyeGW7gFe2C/nEVjHk3jwqMZYay2AxiNNqaoavhB0oduOnOvDXnrLX/521Nub1h5nf7haj1PcXXyrLumpF6XvU63LkEbi345w2nEeyUu3c2Wvs/MZ4pDyaE5LJ2r/pPEQ/ywFL4Tdw2/nsGh/LWWN2237O8Vdzvjd9R5y2ZedYzznGfkmOX3CO65rkaEyfDTnraZzn8Zw1Nc6zMUddTen8v7JS7Vqb59nUJM/YHHmeaJLnupz9tTlny5rm+mXOtjXN9WTO1jXt+6dytq9pri05W9g019M52ticj7bmqLF5rmdy1Ng817acVBXvyWuHUDt2It+zOenaPN/2nJRtnu+5nLS1+D1NvN/HZYh25KRu83zP56Rv83wv5KSwlckpOflezEnj5vl25qRy83wv5ajXnk3TOe3+2JWj3lz5Xs5Rb658u5vVK8snoU09n5xlO77ntf0r3OnkEe7Nb8lN+m/H7nT6oWmffds4p92/u/9XNXd0tt5eIEOmivcWhKEZCe0n+3MC7nRvJKTzSc5tRftuIt9KdO4g8u1DtlDe4LsLMr+twwVNbDPCnejf8pEs6i91p0VSiXjrKlx3OAvPRLSlP2ToCY75EkcN9xvsMxCSeolts1GcT0q6oB/eBKtZ3Hrw8K2HPL71UMQWQjHrjfmsMZp86yHA1kkrvvXgZ+vE4lsPrdmKaMMnP2S2IhS+9VDAtx68fAqkgG89ePnkRwlbEaV88sPHVoTKtx40tiJ0PgViOPepxa2HtmxFtOWzIIV866GQddd2fOuhPdt97TM3qZPoSaHNSnzroQPzi5tP2rr51oPOlkYeWxp5bGnksaWRx7ce0neZ0/eXr+Gby6vgCysij2895PGthzy2IkrZfihjy6GMbz242XLIY8shj2895PGthzy2HIr51GYHvvXQim89WMxFHfnWQzHfemjDtx4UvvXQkW/glPINnDK++9CR7z7ofPehLd996Ige3ckc+Kl4W3ju/8c59adeqd+TLE9eLN48kNya2pyKpbbXK8lw8mRKdt4GUZfqjO9jRCfX1I+rP1j/26Q4jT8cOT2p2pOv1x9OrkiuTu7ns/U9kjtTZalFDXCTU5HeDK6oOQP3692rKGMultnKUXgF1b5nrPA7A+x7xgrfM5b5nrHCa6r2PWMFcNP3jJXM3eKJCN+EOiSuQ4yUtt/CeXlxJ90401PzgXMD55Ih1mOZE+ZAQrgov3lvsxTeDaqLGeqYc1ZzrHNTfVE6nXO+yT1zZmfYvafTJ1zevsutcHmJywt6FzONJaaHwvSQmR55TA+F6aEwPVxMDzfTQ2F6eJgeMtNDZnrknQY9ejAX9oCbIeiRXMccLOjBXGync84Z/yXoYc+SXahn01lS/JsANX+rj32DQOIbBDaO0pdBoSn8rrWmUOz7AhKvi4tU8D//w4N9ph9jmf93ZzxF4cbTKU6wO7l+Bzv0Cfhfnms8320+FSz7/UvCImx8gpDjQYdc8ZK0hpqf8xPn5KKs15zd1WnglSxviVpSnhappX2L1PLjFqhFapFa5PqDLcJj6/7r1JIafdZrwehP/Tj1ZkvUQ7elxNrU2TyVYtezPDXprNcjeGBqi/TO0y3QOy0laWTMji0xOs9+z7TMPCP6v32ynBr2K0XrxBuxxa6Gze3jU57s39I19Z80+v2L+peyf0M7/mEWPBEzumkMLJ7K7DJNfru/eLB+ZaN9CMwhyTcaxSDXiVe/MlfOcv+qb1JO1Hi4fkmjVUjEfT43R9yTTeJEDXvPOEZg0aY59OPbcsR90Dzu5Igccd7Ti0vuzRE36zTj9spTm9UxNkdcXZO4r0elloz5Bj0it5HF/yEUUT/xZrTYOyRnPeK31OSRne+a2ObY1tiO2K7Y3tibsf2xg7FDsSOxY7GPY8djybgr7o2Xxc14m3ineNd4j3jveL/4oHgQKbH48PhIJ/6a+Pj4pPjU+Mz47Pi8+L3xxfFl8ZXxtfHH4hvjT8a3xV+I746/Gt8XPxB/N/5+/Gj8w/in8RMJSngSRQk1YSXaJTonuiV6Jvok+icqEuEEPvFlqGNfYkTiqsTYxITE5MT0xB2JOYn5zX0H2sLEksTyxKrEOsStT2xKbElsT+xM7Em8jhreSryTeC9xOPFBbDNSP0p8ljhZLVfnV5c47c1udVbbbb9ar25V3cGmQ3WX6u7VvexWA6921X2ry6srqyNOvE0H9qtrqmurxzg0yaJM9bj4SOS1fRtyNmXmAeLE6inVM6pnOZRpRpPqudULqhc5lGHfjnH8uuoV1attigHik9XiH9Jy/29hS7zneZt4Yzu40hT2Z6SCn5p433h5vDIeidfEa+Nj4uPiE+NT4mMix+Iz4rPic+MLosHY6/FF8bro4viK6JPx1fFH4xvim+Nb4zscVxffFd8bfzO+HyUPInQofgTwBEQBsyZ+DHA/BuTj8WT848ixyLHYe4AN6LE+sT7xYwJ6tCzhiq8QsBPeRBmgb04I8pjxrQmxp5n+p8WWoNEW3gss4rmQqtqBPvL/3Y5a8l9hGlEnTFQT/SD6UfSz6MmYHMuHE34Jf+uxVvjugKdLrHusV6xvrDxWGYtwWk2slnML1ys2hkvZ+eVYrYAXGweIE/FrCuJmxGbF5sYWAO4sxMgMexFy18F1YOgC9ooM7JrYan5q4Vq1KHW6850dhzrB96kouiC6KFqHZ1F0RXRBuDy6OvoonhUZrAr4P2IJmExEjPgvWAW1zySX80+rj5Q9Qvn8H6sF/O+qXv4X1ULx3xCSeJ96EbUS75wIzuRHwlMT7RPtH62IhqOJ6IjoVdGx0QnRydHp0Tuic/Ckw/OjCzO/l0SXR1dF13H8+ugmjt8S3R7dGd0TfT36VvSd6HvRww39zPlQjnsavca/sx+UEf2SqSsbvignyqTxS+OYxjNdBo/gGoGL6F2BL/9O50nj7cBmzsLD+KdxT+MtnqZ4N30E9wm8AIty/6vbtyChK9fyUxOZE5kfWRhZElkeWRV+NLIulAjG8L0+6I1simyJbEd4Z6hnZE/k9chbkXeCL1TuibwXORxKDF1tO6R8EPmo8nDks8jJqBzNj5ZUboksjOqRJdFWkeXRDtEu0e5VZtXaaK/Iqiozsj6yPto36I2WRzZFK6OVyAvo0Ui0Jlqbhp120THRcdGW/Qc4cVa9bwONhszmpygSiZQEKyIlcDUI10bGRMbhqcnC7WuPtcZSb4iXasLHwh+Hj4eTVa4qb0itKhu6o3I7vs3KO6pOVHWq6opwj6Grq3pX9asaVBUc2n1I76pY1XDkKrIdUkZWXTNkeNX4qklVU6tmVs0e0il8vGoeIN4LmIurllWtDM2PUNVawJ9fJV6z9xhgb6w6EfFEPEM6MfRtVS9U7U7DzrhXq/ZVHaD0/3e1uNQbfIyKwh+GPw2fwPNpFYU/rPJUFVWpeCiD1dfvifF8sq2IIlSKuuZ+7acoPCM8KzwXz6yKEoQXhBeF68KLKsRdym/6HzFfv3WNRv+gdfzUhD4MfRo6EaawJ1wUVsPWoM3hdvjuHO42+EC4Z7hPuH+4omJOOBxOVHwQHhG+asiu8NjwhPDk8HTHhcN3hOeE51cQYheGl4SXh1eFTjBEAdMTXhcuGrw2rIZWhtfjuzPcpnA3AX3Q/kH7kSqgTw9vAXQb9nbAmQB/e6gMteykhv9+aXEJOXAOPzWD1dC60PrQptCW0PZgMLQztCf0ejA4dEbordA7g0eE3gtZocOhD0IfDTw4GLIs9FnoZFgO54dLgu/bLvRRWA+3CncIdwl3D/cK9w2XhysBT0AUMLeEI6Htg2YGg+GacO2gmUNnDJ0x8BBgA3p4DFxEQB9UFh4H6DbsiYCeD39ieEq4JKR+mzQqv4qfmlBJqGbw/lDtwE9DY4JbQuNCEyvaBLdU1oSmhGYMnhKaNfTT0NzBydCC8q3Bw8Gi4PbQolBdaEVodSjiuAWhR0MbQptDW0M7Bh8J7QrtDb05eL+AKGAC6v7QmNDB4JaB/YIfhQ5W1lTWlO8AbEAPHYLbL6CXHwsdAXQb9jFAXwH/WOjj0OqKTi1Mo0NSCdOoHA8N6HNGT01wY/DJ4DbMhncEd1eOGLJsaCT4auWI4L7ggcqxQw8OrQy+O/AI+Opo8MPgp8ETIQp5ho4bKIeKQqrtgkfBke1CnUPdwI19gj1C/UMVgAeIAmblHeWbgrtD4coRoURoRCgMuP+HvfMBiyurEvx9rypFNSJNp9M00ohIIyIixoiINI10/aOqqHqv/v+nqqh/VDFsjIgYMxmMTGQxsvnoDBMz2RgxZphsOrKZLMZMJkY6xkyMGYyImUw2EzFmMGZZzGDETER6zzmvCui02u2un99+327ed37v5L4/9d59555z7ruXqivNPt1VPHszLI1jePZGVXNCd186d3Pnh3k4fycsXfAp9K2ev9evJv3R4/Zz50lyXrirGlQN6mp09bomWOsaGnU1z1erzrHVX0f6/X5759WfEiTJ0c5q52A5rPGpg9o5jV6r1B7WLjyf/Yf5lPoHJDnaPapp1bR2n/agpgvWh7VHQT+uPfm//SkPOCmyuvDXn+v3/EHEojqhzX/hqLbouQeqfM0mbam2omE7rKvrHdoa1UNtvWZT/VZVj2q7tkmr00w3NGlNDaNam7ZC7ZMW2OJRd2qD2pi2Rt2l7XhuVrMZzrdFW6Ttee6Bdru2TzugOqXdrR1W5cO6Gpb9cO4RbY12VDuq2Yxnb5pQFWmPrZw7vTy3oD2hrWH/J7949EfvA9ctMYsm8X/3wqRfUfqj1M4zC0X4rYA5sl3sh5ArO0Ag/qjDIAmQTpCulTWn3gpriOHqnSC7QIZA9oIcAIH8R30EZAxkHOQ0yATIBZDLIFMg10BuMl59m4Sp75Lw6nsgi6AvQQ8Ke1JKkFyQDSCFICUg5SBVIJuka9DU/ZZ1Y/pcqGvSxxhBLLSNaVwgAel66ZhD0j1qIiBJkM1SeXrNa7pJOM02kB2g96+USTIIskfS4XN5zb50+cG0HE7LUZDjICdBzoCcS+97kfZnmkmQaameNNdX6lzad4b2Y5pZkDmQBZAH6XtYlj5PK5fuVZsNkgeSL23XFqW3l6YFWqq2GgSevrYepGnlXuietToQE4gNxAMCPlkbA+kA2QLSk15vX7PO7N8HMpBed6SPG1izfTfIMMh+EOgta0dBjq2u8ZlpT4CcesNrXnt29VnRvUGk0l6Snvfvta569RrtW3tF+hyypXQ5fe5auQpyY3VN9laVtjcLXNMtKL8DMp+2PzzP/dW19iH+6In8CdWAardqWLVfNUIcJR4DnlCdAp5VnQdeUl0BXlXdAN5S3QHiUfOq+6qHaqZWqHPU69UF6mJ1mbpSvZFYu6I3qFVA3KpXC2oHxIawOgGUdImd6i71VnWveidxF3CI9CHS96oPAA+pjwDH1OPA0+oJIB51AXgZ9Cn1NfVN9W31XeA99SJwScMDoVyj1ORqNmgKNSWacmCVZpOmTtOo0WiMkH26iAFiBJjUbAZ2a7YBd2j6gYOaPcB9moNAPOqw5qjmuOak5ozmnOaiZlIzDbyumdHMEuc0C5oHmmWtXJsNzNPma5axRFsklae3QjSFeFejrcfoqTVlqNkM8a2Jyj1pYvzsgKjZQ9wO7CN9ACJnh3ZYux84AhGzQ3sMomKGp7Rntee1l7RXtFe1N7S3tHe089r7QDzbQ6lEx3SKDLEEcvn1ugJdsa5MV0ncuKJjea2uQafS6XWCzgFE3QcMg57Qdeq6dFt1vcSdK/ou3RBwr+4A8JDuCHBMNw48rZsg/QIQj72sm9Jd092EfP+u7p5uUbeUYTOvW2pWQn9kA+iFzSXN5c1VzZvwGprriI0ZvVnTbARaoI8RwB7LCrFXEWje1rwDeiXYl0DuIx5M91P6qafS33wGeir92FcBTjdfB+JRM82z1O940Lysl+uz9Xn6fH2RvhRYoa8mol6jrwfi1ia9Tm/SzOpteg8wqDfpY2l26Lfoe/Tb9X3EAeBu0neTPqzfDxzRjwKP6U8AT+nPAvGo88BLoF/RX9Xf0N/S3wHim5Mb+ocGBoTy9LuTAkOxoQxYadhoqDU0GFQGvUEwOIg+YhiYMHQCuwxbgb2GncBdhiHgXsMBIB51yHDEMGYYN5w2TBguGC4bpoDXDDcNt4l3DfcMi4YlI29UAnONGwxLWGIslMrTW0uM5cYq4yZjneakwWdszNCoMRqBUG60pCm9g0saNxO7V/Rtxh3AfuMgcI9xH/Cg8TDwqPE48KTxjPGc8aJxUs2M08brxhnjrHHOuEBne5AuWW6RG2daspFY0pLXkt9S1FLaUtFSTaxZ0bG8vqWpRddiarG1eICoB1tiLR0tW1p6Wra39LUM6O8gW3av6MMt+4EjLaPAYy0ngKdazgLPt1wCXmm5CsRjb7TcarnTMt9yv+WhiZkUppxHuN5UYGKGCVOxqcxUadpoqjU1mFRE/YoumBxAnylsSpg6TV0r3GrqBe407TINmfaaDhAPAY+QPmYaB542TQAvmC4Dp0zXgDdNt4F41F3TPdOiacnMm5XmXPMGc6G5xFxurgJuItYRceSvhLZmxv8s5ggRdRwJTI8C4gggcd8jOo4H9tOIYD+NCfbTaGA/HYVjgtdpPHDOvCCN/wlyIRuIY3sLQpFQCqwQqs3dQg2xXmgSdIJJsAkeISjEiB3ELUCT0APcLvQBB4TdwGFhP5XbhBFhVDgG+gnhlHBWOC9cEq4IV4UbwFvCHeC8cN9UhhQeikxUiDnierFA8IjFYhlwvVhJLBBG0uUSN4q1YoOoEvXmblEQHUAfMSwmgFAudopd4lbVcFrvFXeKu8QhcS/xwAoPiUeAY+I48LQ4AbwgXgZOideAN8Xb4l3xnrgoLokqC29RChWWXIsS9A0WpaXQUiJ4LOWWKuAmIpaMWOosjRaNxWixPEIsd1kCloi4y5K0bLZ0W7ZZdlj6LYOWPUDU9wEPgn7YchTvy3KceNJyRtIt5ywXgZOWaeB1ywxw1jIHXLA8AC5b5UA4Vuy0ZlvzrPnWImuptcJaba15hPXWJqDOarLarB5r0BqzdpgOIa1bVthj3Q7ssw5Yd1uHrfuBI8RR6zHgCesp61nMSaznrZeskKtgbmC9ar1hvaXear1jnQfetz6UIriNYRy0KWw5tvXaDluBrVjbgZHIVmartG3EqGSr1XVhrLE12FQ2cOk2wQZRD9uLzWcL2xKmIbRbW6ety7bV3G/rte0E7rINSTZm24vP13bAdsiGT7PXNgY1DPVgG7edtk1gndgumLulO7Vdtk0Br9luWmMYcWy3bXdt95r70fPbFm1Ldl7fY1fac4Eb7IWSf7aXoJezl9ur7JvAE7rsdcYI+hl7o11jN6LPsVta+tCT2F32gD1iqrUn7ZtNtWT5I/Zu+zb7Dnu/fdC+x77PftB+2H7Uftx+0n7Gfk5dZr9on1T77NP26/YZ2GcW9pmzL9gf2Jcdcke2I8+R7yhylDoqHNWOGke9+qZuytGku+nQOUwOm8PjCDpizYWOjuZyxxZHj2O7tsbR5xjQBh2QqziGHftNS44Rx6jjmOOE45TjrJRvOM47LjmuOK46ILfEjMJxy3HHMe+473joZPgUnIpMZHfmONcTC4DF9llnmbPSudFZ62xwqpx6p+B0OH3OsDPh7HR2Obc6e507nbucQ1JOq7E492qMUh4lZSnOA85DkLtS3ug84hwDjjtPa2bRNpwT2hHnBeeE87JzynnNedN523nXec+56Fxy8binJtel1BS6cl0bXIVS5qa66ipRDbvKXVVge5Sjuja56tRbNYOuRo3RpXFB4NMec1m0HS6XKwCMuJLaO67Nrm7IwcZc23Rdrh2ufuCga4+jSFPi2gfnP+g67DrqOu466SzDGnCdcZ1zXZRs23DXNemahvNcd83o9K5Z15xrwfXAteyWSxmmO9ud5853F7lL3RXYLtzV7hp3PWTpkKu7myS6dW6TlIG7bWvoIQbxU9wxYod7i7tHvdW93d2nvukecO+GLBoyavewe797JK2PEo9h+3KfkGoS82H3KeJZvCr3efcl9xX3eUknXnXfcN/SVrvvuOchH4as2H3f/dDDpBzYo1jDHB1rbtTe8az3FACLkZi1esokeio9G6VM1VPrafCodMUevUcAQjmUODw+KWu1NazSE8ZW70kQOyV6ujxbIReFjNTT69np2QW5KOSlniHPXs+B5nLPIc8RoMMzBjYZ8YxDbgnPxXNaomfCc8Fz2Zz0TEGEAs9s7vZc89yEuJn03Ab9rueeZ1Go8CxhRPDyXqU317tBzPEWeku85d4q7yZvnbfRq/EavRavyxuQfHvae2/zRrxJ72Zvt6Xf6vFu8+6QPKG33zvo3ePd5z3oPew9KpzyHvee9J7xnpNyACHovQixiaKMd9JyMhOjvdPe694Z76x3zrvgpWjrXfbJTWXotXzZ4mlfni/bl2/e4ysSbvlKhSu+Cl+197AUl0XBV2Pu9tX7mjCX8OlMQz6Tz4Yx3ecx9/uCPojFvg4fRGFxyteD8cu3Xdzl6/MNQPlu3zBEpWXf/kyk8I34Rn3HfCd8p+DaIJdwFfrO+s47y/DufJd8V3xXJU9rnvTd8N2C89zxzVtjGHN9930PRb2fYZzyK/w5/vX+An+xv8xf6d/or/U3YL35VXgev94v+B1+nz/sT+hy0If7O9PZDtA2nmYmq3H5u5BSiX8rsRevwb+TuMs/5N9rnvEf8B8yL/iPUDYCmYlt3D/mH5d0sRPp78VY4D+NXtd/2j/hvyDlFf7LEvEubHv9U/5rEC9IR8KeN/23xQb/Xf89yCggr/Av+pcCvJRF2MZX6e8VhYDSogzkBiD6BwoDJVLEt+1FBsoDVYFNUpQP1AUaA9jJNQYg7mM5lLgCASnKByJrmMQ4FdiM9PeS3h3YFtgBsRsieKA/MBjYA5Ea4nhgX+Bg4LDVFjgaOA48GTgD0Xk4cA5iMdR54CJxUqqZwHTguqU/MBOYtVYE5gIL1ljgQWDZNNQqb81uzWvNby1qLW2taK1urWmtb20C6lpNhqVWW6tHn98abI1pZls7Wre09sA+22FrX+tA6+7W4db9sHWkdbT1WOuJ1lOtZ1vPt17S3zBca71iuN16tfVG6y1DQ+sdg751vvV+68MgCyqCOcH1wYJgsdEVLDNGgpXBjcHaYENQFdQHhaAj6Ev3DpqC4RZTMBHsDHYFt7Z0BHuDO4O7gkPBvcED+pipMngok4cHjwTHguPB08EJ0C8ELwengteCN4O3g3eD94KLwaUQH1KGckMbQoWhklB5qCq0KVQXapR6oAYhpDHopZ6O1KcIGUOWkEvq5YUCLbuBkVDScBtjfWizcU+oO7TZ1BnaFtoR6g8NhvaE9oUOBhf1t3BPQ07osKEgdDR0PJTuZzUPhs5k+rNSHzN0DvuVBqFlAHt8oYuZTzceDE0Cqa8Umg5Bvyndxzmlvw9XNRMcc1cYikOzcP650ELoQWg5LDcuYA2Es8N54XwpV9GfDxeFS42RcEW42lQbrgnXh5vCurApbJP6g2FPOBiOhTvCW8I9mOeEt4f7wgN6Ofasw7uJw+H94RHoNUOi5T6LDI9Sb3qO9GP4KeETEsOnwtA7Dp9vOaG/Eb4UvgJ9Xuj/hq+Gb4RvpfU7xHnMl8L3pZrE3mv4YZpwVW2sTdGW08Yknbi+raCt2FjVVtZWCb1X6MO2bWyrbWuQeqxtqjXUG5fbBONMm6PNBwwjsY9pOyCxLdHWKfUr27ratrb1tpS27WzbBYRyKBlq2yv1MdsOrOEhzOLajhDHJLaNt52GniP0H9sm2i60XTYx7EW2TbVda7tpKmu73XYXeK9t0VTbthThg+P4XCJKYq4hJ7IhfDVSGClpMUXKI1UmFtkUqTPVRhojmub+iDFiibiw7yDFI/Rd4BW7I4FIJJKMbI50R7aZLZEdrsJIf2QQY0dkT2Rf5CAS9MORo5HjkZORM8BzK7wYmYxMR65HZiKzkTk4akHq00UWIg8iy1F5NDuaF82PFkVLoxXR6mhNpB/9J1LsjNZHm7zl6C2jOqJJGI1C/y7qiQajsWhHdEu0R1wf3S6MRPuiA9Hd0eHo/ugIcRT9ZPRYum8FjJ6InoqejZ6X+lnRS9Er0avRG9Fbwdroneh89H70YYzFFLGc2HpgQaw4VoY+M1ZJ3BirjTXEVEC9eSYmxBzBqZgvFg5OSTElloh1xrpiW2O9sZ2xXbGh2N7Ygdih2JHYWGzcXYFe1JuMnY5N6PNjF2KXY1Oxa7Gbsduxu7F7sUVrUWzJWhHn40prfjw3vqGlVIpQyHihtc83inq8xK+XMjd3Ubw8XhXfFK+LN5o3xDVxY9wSd8UD8Ug8GXFFLsY3R6bj3fFtkeX4jnh/fDC+J74vfjB+OH40fjx+Mn7GsBQ/FxmMX3zV2Sbj0/Hr8Zn4bHwuvhB/EF9OyBPZibxEfqIoUZqoSFQnahL1iSZIi0wJW8KTCCZiiY7ElkRPa01ie6IPOJDYHb+Y5nBiv2koMZIYTRxLnEicil5NnE2cT1xKXElcTdxI3ErcScwn7icetrN2RXtO+/r2gvbi9jJ8vu2V7Rutnvba9oZ2Vbs+frJdMCy1O9p97WHp2bUn2jvbu9q3tvc6itp3tu9qH2rf234AeKj9SPtY+3j76faJ9gvtl717xN72KXFX+7X2m8Db7Xfb77Uvti8l+aQymQvcEHMkC5MlyXLP5WRVcpNmNlmXbExqksakJelKBpIRfU8ymdyc7E5uS+5I9icHk3uS+5IHLY3uiuTh5NFoafJ48mTyDOx5Dva8mJxMTkufkryenEnOJueSC86y5IPkckputsQnzYFUdiovlS9uTBWJDanSVEWqOlWTqk81pXQpU8qW8iROpGyWulTQoknFUh2pLda+VI91d2p7qi81kNqdGk7tT42kRlPHUidSp1JnI9dT573lyNQlqdefupK6mrqRupW6k5rH7CV1H7OU1EN8i9LBpBaHOYa2KP2m4lWtA8+w+magQ9GR07E+MovxvaMA++AdxWiNHWXS2yH0D2JnR2VkEM5PmVjHxo5a82TkeEeDeVIqkd6rdKjMhR36+KYOocMh9fo7fB3hjgQ+axt+H+vT3D3u3xjjfsEtMp57yP2KyblXeI4p+HW8gj3Gv4nPYW/i8/gn2Jv5p/h89jhfyD/DnuBL+WfZk3wF/y72FP8F/gvsaZleZmAF63Trmlnhuq51H2NF615e9zIrzoWFvS23JNfMSnItuQEm5IZyP8P8uS/mfoP15V7MnWN/mzufu8iuwtVYmRxndLBc9jh7jD3BHOxNzMUiTGQx9jkWYP+J7WY72RD7PutnP2A/YpfYj7ls9k9cDvdm9gr3OPcUx3GFXAWn5Cycg3ua83HtXBGX4vq5Sm6AG+b03D7uC5yT+yr3Xc4v+4rsK1yPvFv+ce4T8h3yPu6T8gH557jt8hflL3I75J+X/xX3afkX5V/mdsrH5Me5z8pPyv+OG5R/Q/4Nbkj+Lfk/cC/K/1H+XW5YPiX/Pvd5+U35DPdX8ln5T7kD8p/Jf8aNyH8h/yX3Jfmv5a9wh9c9ue5J7m/WfX/dMndEsU5Rxk0r3ql4J3df8S5FNfcLxQcV9dyvFA2KJu4VhVqh4eUKncLMKxSiIsDnKtoUMb5IkVB08SWKjyt6+fcoPqvYzX9QMaQ4wD+v+KJilDcqXlK8xNsUY4rv8HbFpGKS/6jiiuIa36W4objB/6liRjHDb1f8RHGX/zPFnOIe/2nFzxX3+X7FomKZH8hiWW/mX8xan/UU/8Wsp7Oe5b+cVZ71Af541gtZnfxE1sey9vBzWX+Z9ZeynKzPZx2QvTnrpawx2ZNZx7PGZU9nfS3rlKwo63TWy7LirG9mXZGVZ/0g65qsJut61qysLuunWb+UaZXlyhMyh/Lnj71d9qPcX+X+Sp7HOLaVjdI4fCXLYuwd59LCp6VqRS8XI3W3xOS7A8/1VDqkv+aoG8G/z6jaotoq/Y3Ge03iQfGweFQ8Lp4UzzQ3NQ+L5/Rj4sWa7lomTorT4nVxRpxtHq6pwzkcYO/3yN5/wTiw94dg9a9wrzAZ2Hgek+d+KPdDbF3u87nP03ePvpU/zB9mjH+Jf4lx/Ff4rzCeP87/Lez9df7rbB1/nv8WtJTv8t9lSv57/PegvXyfn2bZ/DX+Gsvhf8j/EFrNj/gfsVz+Nv+v0HZ+xv8M2s4i/0u2XsbJOLZBBv/YU7J1MgXLl+XIcliBLF+Wz94iK5AVsELZM7Ii9oysQlbB3ip7n2wTK5Y1yBpYiaxR1sjeLmuSvcBK8cmzspwv5XyJvQPuKIdbvzq/QTjBtr/mnSq+UZ0HZt6lrr5PvYHvU8XK1fem+NZU9OH7UulN6cobUukt6QF6M4rvRfGt6IVXLZfp7Si+G80smXekKwv5vFzwZIvg+dYuJZZC8R6+M7VsgmPSS7rPXUeL0WIRb1tcsC90niyRzJtSOGdh5m0pzpt4rDPtU+TgU55If2MhfhsCftuenJWzd7J1rAqWLPZeWJSsHpbH6HsUslkjLG9iGqaF2sRvachlblgeZ17mY3kMui5wPkhY2JMsCcsG9jHWzZ5in2Tb2NPsU7C8hf05LIXgrV5kz7DPw/JW9p9hKWZ/Dbb/NvYSLG9nY7CUsr+D5Vn297CUsa/D8g72TXYeru8SLBXgGa+yd7Fr7J+htfwLLFXsx7C8h/0Elmq2wH4O1/6A/Tt7H1uG5f0cz2WxGi4bPGM992bwjM+BZ8xjDeAZC1kjV8y9nX2Ye5Z7lqnBU1YwDfhKC9OCr/QxHdfKhVkzF+EirIVLcAlmAu+ZYmauk+tkAvcR7iNM5D7O9TAL92dcH7OBZ+1nHvCtn2Ve7nPcIPNzQ9wQa+X2c/tZEPzsKRbiTnOnWZSb4F5mMe4C9w8swX2b+zZLct/hLrMU2e+fgI+oYJ3KSmUl+4iyWlnNtijfp9zEPqqsUdawjynrlfWsW9mobGQfV76gfIH1KE1KM/uEMqxsY59URpVR9qfwbOfh7tH2a+HpMfMhkCMgYyDjIKfTMpGWCyCXmd98xDxmHjefNk+YL5gvm6fM18w3zbeBd833zIuwLAm8oBRyhQ1CoVAilAtVwiahTmgUNIJRsAguISBEhKSwWegWtgk7hH5hUNgDyz7hoHBYOCocF04KZ4RzwkVhUpgWrm9YFGaEWWFOWBAegL4sysVsMW/DopgvFomlYoVYLdbAUi82iTrRBItN9MDWoBgTO8QtYg8s28W+fPolsHWRdSkIla25QfpLacMfzM7NsDxO1p5H1v4EWfuTZO0byNqfImvPJ2svIGsvJGt/hqy9iKy9mKz9bWTtJWTtpWTtz5K1l5G1v4OsvZys/Z1k7e9il2GpJJt/N9l8Fdl8Ndn8e8nmN5LNv49s/v1k8x8Am+dZLSfn5OyDZO11ZO313Fu5YrD/Eq6EPU/W3kjW/mGy9iaw9lb2AhfiQkxFdq4mO9eQnWvJznVg53/G9NynuE8xA/dZsHMj2XkL2bmZ+wvuL6BdoLWLYO1fhXbxNe5rzErWbiNrd3CXwc5d3CQ3ydxKp9LJPEqf0se8ypQyhd9Lnbcjbxf9NRD+vSlnegh2CY/RrACBXMi8Pl1WAFIMUgZSiWXyJ9JvzH634D6rI4ibzHWPCJZJf0Ooofdtq39J+LsF91kdYVwV/D+OMe4DWf17w98tuM+Zlb9EnKRxx9Wxxzl6ywk6jj/i6COOPeJbLBx3XBH8/+oI5O8WaXyyQ9gi9JDgqCSOSQ6nBXS8N2H/qtD/pXHKUVqjSLH19QX3W43ArxaMx5nzrhUa7VyVlVj9ekKxPB3Jf5NgdM9E+EyUfyOSyQQeFcwM1mYHb0Qy2UMmg8hkEZlMAterGYSUOTwqmfzh9WQDZBNwDsgqykkgq6BcYq3g6OujYoH8Yq0EIM94o5IZuX1UMiO5j8o+y8G1Qvf9BgR7dJbjOPZrXv6NgtvOWS7iaDDp1y0zb0hmLXM4XvwawXMsW05a5emx4zcimfHljNRY61cEtzeB4Cgz6isjzdYt9FmPCI430xrHWV5PpBHpkVcdj+PSawVHqB8VPPasNGJNY9W4vmW985uu57eJdR7HtW3sUZFGt20Fr5FiW9mrpNK2ccW3r/XFaV+Z8XG2WltDxgfhmPhaP7JiI2ue68ozSdcRjqBnrpnG0NdcE/oSWwL8CbR9W6fkA2xdUvvFdmXbasnFuIH2busF2WnblbFn25BlD34ObrftlcbcbWM40i720jjOhO0CluO94Vg7jrSjf8VxdvSTtnvSKDvGABxnJ98O94z2jiPuGf9sL5HG2/G+7XX2RqwLHG1H34nnRLFbpPF2HG1/dJSd6hfqlGIC1KH9MMTJdDyzHzXPZOrZfhzOg2PxcA7adg5H5O3TNO8lE2fXPqPMOVEyMSUdC+heITbSWD5e26x9LvOcaX94dvTsMS5jzMN7W7A/wDL7MsTwkrRgvG58RAJSXKZ4hbEYY3AmFg+mBewH7+01MXZWEodcKEWhGJuJq2lxZAs9KJkYSZKJjWti5atiZCZOpsWRB3EQYyHGPoiHjnzhDgodg7FuXpIVnwWCsxtonZ7hQG0M/Iejae0cB0cHlUMbxviB7RbbEbYnad6Dow99kWPAsRvbRaYdrPhFsC08D/o5xzD4pkwbwVkg4Lfw+IwPfLRtPdquMv5lpW3BOdBvOvY7RvCZ42yLzPH0GdDepNkXDvI7mbkX6MPxfuge0jMw6LjX80Hp63I8TPvxTPnyGh+Vvma610f9ceZ+cJZPWn6rr/st/tTJ0msF+M9Lq/IaP7nGV5J/zPjINf4Q96Xz4D7om6AOnDnW8871zgJnsbMMBXMbfN6Y09AMFCwDn5WZiZLJXzIzUigPgbwDZ6ZgPoE+LTNDJZMT4EwV8mkY/zFvAF/n3Os8gDHaeQjnp+CcCueE88JvmpPiUlI+lvaXNKcLc7NM3gSfnclR6Fzpc+A2nMOC/pLynExel8nDdq76YJJMDpPOPfBcmI+5Cl0lmO/g7JfM8bQ/3A/9H3NBaCd4bzgrhsowb8xIJk9cK4/mgpncb62k6/U1eV1GMJ/LyCM53UqO9htyM1ejJK+bm2HutTb/wpwrk3etzbHgWulY3CdTJ4+2LWh/OEvo0XblgirL5FiuAM4acm1GX5TZz9Xt2oZ2jbOHyJ4yfgz2wXaF9odrnFfk2uc6SHp6VhHK2vaG84vQR7guuibRPl3TruuvyWNAXDOuWRSyRxBqh+C3cA4SrR+4ljNtENuEWy7NRsq0P2xXOCKF7c1dIc1MwtlINM8sLXi/2MfCesJ7dpvcNrfHHaRzg/9wx9zkgzP74wwlnJ+Es5NwXhL6IveIe9R9zH3Cfcp9FuceYfxDIT8JOYH7ijT/CP0xzkBCO8VYKM1B8ig8OZ71WF+eAk8xzjDCfgLOJsJ6wjlGuD/OMsLZRZ6wJ4E5IPr/jG+WZhN5ekngfBhn0LZxXhHWuzSryHMI7cxzxDOG9YjP0TPuOU3bcD4RnuOyZwp9Oc4m8tyW5hF5ljIziFbnD2H94hwi8mNw/ziXiNYWrwvtwRvIzCLCGUTe/oz9YA6O+cfauURUnva5mVlFeH5sJ96L3snMHKIVW830A9IxCnWaX4TzjB54l7EMv/kqtz93iLH/P/7y/9D4C/7jZPSLLPxnkBx9dx7/A6KGSs6S/mXieioZJL2Q9M8SZVTyMul3iTEq+RkxSCXXiAeJb6ZvXfuPpP+QKP1u1EW6Ho6O2kK8StTSPt8gfpT2jCNfoaN4+m1g7u+JH6CSZ0jfRWyic2ZReQ+V3CP934hhKrlOZzuFXD6G/PUXqfxHRAt94iXaf4n4J1T+r6TvI9L5uU+T/hjt/2s6p/RZJ4nvoH3ozEygrfTb4MvSNXfQ1n8m2umaqQZkAeLztA9dG19OJW8ifRvtf5/0z5H+kNhN+7RR+RWikUr+J+kXSKcnzkvHbibeIlrpDN+hfZpJnyH9C8Qc2qcfKX8/lXyJmEflVOf8bSLdBfePpP+CSFbB3SRdQfrHqTbITrjHqZyeBW+gkm8S/5z2+QTVGNUSLz0RnnTJPt9De/4NXQk9cf6/Et9FJWS3PD0d7ldEB10/faJskniA+CRRqr07dNTniWS9Mqpb2XeJZJMyuhJ84Q46Wb6M7lT2IpGuQRZFrouQTvYmp1/wk8upZCfpPmI2sZfK/zvpe4n0i3eyfyHO0/VQO5W9jfh94teI1BbkHyKShciozl8hG2MvEanG2H8hUqthnUSyDUatmB2lo6Sap3bBqG7ZduI4keyKURth1LLYfyCOEP+a+HXiO+lsZAksRJSerJN0uk7234gfpD0lnXzLK9Tq07//Ta2MfZhINcY+QvxM+u4WiPN0jwvEebrTBeI83e8CcZ7ueoE4T/e+QES9nfSX05yn2lggzlOdLBDnqWYWiPNUPwvEeaqlBeI81dUCcZ5qbIE4T/W2QJyn2lsgzlMdLhDnqSYXiPNUnwvEearVBSLqk6hDTc5THS4Q56kOF4ig8+QtefpVd44skyML5MgP8O8mvYJI3oaT2q+LSK2JqyL9adJ/SST/yR0h0nOnX8LleMlP0nl4ybPVE+eIUqSYTV/JFF3JFF0JkH9f+nqwhJ4sR1cOPhO3voW2Ulvj/j19DVjuZpJPwKMeUDnZJ0e/nM3VUPk/kU4Wzv04be14LP1aFUf2xpEP5EaJUix7Px1LMYij6+e+QkwSyc6599A+1BY46ZtDyQ/w1L548lqc1GaleCFZfhfxe1RCbY07Q3oJkdo+/y26ToqV3FephNopT76LSRG5kdo4PUHZE1RC8ZSnViaj+pdTucxLpOgppxqTke/lqXXz3ybSr4pz9Ln8HtqHfgOPpxYney/pFNd4yUOSn5GRr+Yl3U/cSCVUk/ynqKSF9OdIl+xqgXieSsjeZGYi+VsZPXcZeSe5pNN9yRqI5MdkZIfyT5JOXl0m1YZIZ95BOtk8T/Ygo2ctk3wp1aRMisvSsfQE+QnSKQ7KKKbIKEbLpmgrWZSMPlFO9i+zkV5MOlmInPaXU3YkT1A5PXHZIpWEiX1UQvUskzKcn5BO1iKjDEH+dtJ/TqQMSvZW2vN/EKVoQt5SRp/OUd3yw8hXpPNT/sbP0FaKEfwyWQ7VA3+CPuUF2pMiNS/FEbJbGeV4MvLYskqidD1kw7KfEiWfQJkMv5VKSumz6DnyFOVlFOVlA0Ty2Dy1NZ5yTk6K+xQj+N20z7NEioz8/2Lv/ON9rLLF//z8HPmVdJJOJ3MykpCEjHRGkvxOOnye5/OrkpGRypgyklxJP0am5BiMkV9jjCSMJFHnSK6QDDIIybgyMkiFkXE5vmu993M46fS67ut+/7v39bzWOqv1rL322muvvfba+5wezLJHLHnEnlcBbHZ5VrpL9LpkHhefO7ngqnDIco6ZQXZSl9rJYSd1yAmO0YM33AVgo58a0mGksoo3oXkTNZhgl0woK24TvpVM67CXOSbOn0Pmo6iXTVgiuITKoSTt3S445T8muBJ0RegboW9U2npWdnW7pKnXQXAzfyBve/H2d9AvCm7ivwHdAdpouBG6G21vENwIfjOvP3q0bRN6yUjtJthPq+QZ/Zc7LX+IYPfMh3DmCc6WWBbs/0rwQlpNU0tOQ58uxqoR8B+CbgrdFLoZ/TaN8BDwL5ERnaf/w2sgeLd5q7S8TWMnHqD3rn4lxbFb1OYzr8K/DjxScGNkblTLBc/A5iHQBtcEF8I3befjn5vx4YN4qS9v4bvb4FRAxsKq1+A8Qu9zsbAz/Iuhb0XP47z9DD2fYf/FjF3ent6gPj+9wZ8Kx6dtc9r2UfuhG0M38VrC7wfdHM3wwU1524S3P/HUGz/xH8LOlkgq3dQ9goyZhRfRVoRtjIsIaepPQ17xDd5sJGfjGUbntQAXINmbvhbT12N6IlBL3FcUO3dLDS44dlA4v1bsNYDerlj4i+Eshp4DPQd6JPRI6MPQWpncnVVT2yp27i65TTO231Oq5QOK3Wb0dT30WsXO9XCe8wdolavYec5wsKQjuDKWPBd7XWViSaVVszNINXgPoGcQrXoh/zLyt9LLG7y9lbe3Mq6h4KXIVInwHDhzoEdCj4Q+DK3julx7d9+g91sZ12/RvM1/VHqcrdjZRi8rsWEwmhfgmbfQsA3730LDVOwfpv73pjELw2g7jLbdaDtd+f69vJ2ub21HaZtZkwMDHJW0M8g/Du4Mx2G+xisWWsc1QLHQOq5HFQutVrVTLPTrWimBHWzriG116b0jfY2HvlqxdQwOnnTeBRPb3o+QacJYmqDHItI6w7fgW/gfO+Xt73U3UexYeLWPejX2EHPXB/nx/s9E8/uKnfGGg5fejTAjpa9ZGtveaiJ8FpKzkNmv2L+GHt8Bz9JWwlkMPQd6DvRI6JHQh6EPQ7cV+jrFzqySNWLbcl9kYu9h53L6ugR6N1FxScSRjOSu9mtgTwvlYE8lbLhEbbY/UWvduGYD+xO8+gn+mQ7+GbP5ZySPEu3VFNtHkTyKDPL2UZXxsum9kLl4E58XYkkh/T4BXkzvhazrxXigkHW9GA8Usq4X44FCovcJPFCoK9p7AlwM5y/4/A76+hN93aF9uS8rnXWlD2042mPWVTGd64nYPDHiz4GfkLbZ6KmBnmwzOiLnFHg1lntmpFjrEc94252LT3bTajf6P0ZyN2t2rq44+6T3kdA9FdsnkTwZqyN9TVLsFoJvVWyf9I8qR7HQW6C3QBdDF9O2Nq1qQ3eibSel8clG7wOJlmsVOxvxv6O0OwwOK9cp8DYL5y3FToHhYMNyrGoM/Qx0S/8TlfSfE7o++pugbRfacpE8hWQ7OO0Y3VfItFdsf2U4SFYFd2akH4NXM8bOjHE1Y+zMGFczxs6M8VNsaK822F+xTpvSVx9P+F6eYses1j7oP4w9fbSt7Au1Nf+oBq8Bo+jDKPJ1Lrzaip182ubT9hPaduXtJG+w0vrWOs7cjVRsHTcc7GcsTkdwHcXWcZ0753nFQsu4nO6KhS6GLqatWnWzYuGLbfbvFVvHsa0K0bKU3qvgvU70vo/etxsOPfbFhn8h/x4y/+Ltv1izxYxuO/xi+MW02k6rYrJfDcV2MV51iZyZzJ2LTzrih6bg681IdVze9YyxI9bGmYUcZiFOq7hKem3BT9MqTqunaRVXbwi9BboYuphWtZGvDX0V9FXI5Ar9W8VOvOS47uPY+THR9TnWvmBoxrgHb/Tz6ipt7NHsZ3/O/E5m7MfAn+Ol2Vj+pWJ7NhpmI3kzlhPb9hgk59FXP/qah+Q8JFshMw+ZuZ7sxe6Tiu259N4e713HXLQ3HDzTAP3t8UwDPNMezzTAM+3xTAM80561cBjPtGe9H1YstHopxEuD6P0MfdVkxs+Q5eorHWuLT+objvYba+vrOaK+9iX0M0IXmxhjXCuQnwtnheEw0sfACxjvClbuAlbuW3imA555C/m3kOyF5Fus3w6s34PeLzRfKbYPInnQX6cc8FDF9jHwQX8KnCnQA6AHQN8HfR/0B9AfQB9CzyGliefLtZdYRXq8HM938f9d6Gl6dnC60PsJravddortE4aDJfdgw27wgQg/rZL+Dcon8mP+e8L5XLET07b+Nf5qoXP8FcL/yn9faXSWYMNIRl1iOPTye/BW9Jcwxq2MsYQxbmWMJYxxK2MswYat2FDCjPfy10ovKxXbNaP4l1OGu0qxvaekvmJ6WUUve9C2Cm170LYKbXv8d3QdKRb71UvT1Uty5D5I3bVSOH+mzrya7HdQ29qjFVsHI47q/zfFTi3wT8GP6wxazKCTp9hiBp2bFQv9sdAN1R6LWbMOeverZvBuLHycvnbrWKx/Qs+g338aTiRflbfaYzss2ccohjKKffjqY5V031RJ++PIZpGxn1NsHcxqJW2fAC/SeXSb6Hz5h5k7U1XmQC9TLF5Sr35Gjy0jPAXOFH1LhKzWefE6I59L282GRlsuGnYp9q5EQ662FXoK9ADoAdD3Qd8H/QE0+6/Ol3cts5brzdUaWLHol7OnO4T4f5V+h7D2txjL1W/uFvWMu52YfAD+XkNjyV58OAZcyNv1vKWiswuxvBJvhzLSXP8jYkbj8DFicrhiy6ypy70zGgmK7dBwYpeJfLZi+yk0/BKZHOZoO3gyvWzHnjrG/3h4u/Ew62U7/slhvWzHPzlE+Hb8k0NOmKxYaPXV1YrtDehfQuRsQPNOpf33FTs7DUf79d/X2wahB0Dr2iyi7TDaFjGWjXCWwtnIituI5Uvxz0bsXErb8V5GtB1XbI+PzjUqmY3ktAg/rTK6Kp216kN3h6/VZpOSrpaeaicpzmLsWbUsPQ8qpwqcpXCqaF0tJ0fOX8q394EdJGcZrBxvP/Kz/HdldMXMWiFvC3m7WN/6XzGnR5Uv1e9iql/VfBQZT2Uk3+rbg7GfsuLIGHBK4GxVjuSuKdBkA+XbGxRbtHVyDUZ+l8p7673hxKryc+BvV75vKV+8OgWv6u6wkbdL6eUk/Z6MTaUq7iL0ajjFcDrDeZMa+y5ToSnf3qFYqq9J1Bhg5UgNI/J+jqc5qj389vAbwL/d+1T3QfSvQOcC6vYV9LVAZZyFnJvMaX0vcVUXTis4deHkcfqo5GcrDedGzvUW+fbG6EainvR4RexuoZ9Cwww0fMH9xtWGZo1/xnnkGGeTJwyNhrG63uUkq3vfWGLv75z+ihTbf0emCq0KaZVT0sbSewPtd5T2673G2b+i/3PBX0L3QM+lnJsqwblUOV4Lzk3PKo5NMjT8d805WjXLXqm9X87KWs4qns+4VjGW+djTkLZL0N+wRPesLVg4Fgu3mLsjWj1Cq5bYPBufNIAz25xA9Y7OWwzuiZ34zR0ALkIyy2CVj3GCq1CsOMb5JfYbXZsVLMWxx9nruVvwf8fcLWV0PXXlemaPPq15IIblWdw/xB5BT0N9G/tIsb9WZZyRnBn3c/Y/wMl3NufNt8zNBvRN5t6AUzaS9jpazTMnzTOv0NdCsfBVbjCWGJu9+Wqz95zS+GEbIyrCn/24r3ib+4qY+s0zdzJ3xzYT4Xo2BEsmUfqB6K5G6ceQ2R/dThha+ZdwZq8E/xr4lcCLzSk+ojcTe8b/bwrnJUY3FnuWYM9Y5jErOoMvFflv2SPu5kz9CrdY3Bd5qzlfH+XewDP3gf5+Im2/0npz6zwH549wnlOOnO6VM1CxfRSOybTsXPYYE1en9R7++tg24a+NPa80GWAQ/T6ADYMMp8QB5wm+HHwruAptC2m7EgvfwsJhaJiGhmFoGMatwkvcgQwzt3OqQTK26mmHTBOwZTD3hCPRZqmM24eZ7cstRx/VH3tI9bsDkB9Pj+/T43jDQfMl+HM3/GuUdrqSzT6BH8e3n8A5k9VB9/fYcc3zWXOVzkrhedVczcwCOgtLpoKVvoP94k/c89yhetyXVT7rSmx7GUuy0VADG7LxQ1NuRE8hM44IP4bkTVqneRUVOzex4qprpS01vObkG/wc9gjhODWpuxx2NKpi/xDZrzo1zDGNLvvjqD7UCjAPnTnUimRg2RGu1BOQv0Zpk7epoz6jFqpLfE5T2vsczjRkppkKB/0h54I5ir2bqSt6w1+ku7/bnhpgEbZt0qyS1YF6YxN6NmLPIM0Pfj1yxRZyy2Yyxi1URBWoHC7XmidW0a8iHDKVk039f0Kxk001ss6cL7JaUCG0YLe9jX32PnaudexiOqK2xgbNG1kdsHO61j9ytnqHs5XB5iTyDucXg6neqUI7KbY4lzkNqMR2IbOLVg8g8xU12API7I2qNeWsoMcMnllR0lpnBJs/w+YsTlvfKrZn4UnOIDKDWi/lQm/mdLCRanApoxvEuH7FHP2KVlMUux1Vj7+bGpgbZrcj1TI1v9sRv53wZOzuQsVyNtQsUYgG9i/7Kuq9GeCrkG/DjE/EwoOaPexTxG2M/JDDiqjAui4BL4l9K5x/Vyznr/s4i2kF28JEo/JlxX1LjZRHFdeKGWyFhknUUXpXcLNitwl7UxWdL6E1Zg5rDemavJGDf5YpR1bNOnp5mlOAnv5m4sO90L9hvRfCWQ+n0FQ4sWup+fW8Xxh7SWn9bZpU8ndZeso7LfT9SN7PSHPIAzEs30C1toRqbQP27MTC96lyN9GqCHuG0WMRNfNIauaN8Jci+Qmx+hry5DG7R6yB8N8D79Q6X3ROotUhWlGXktuHktubx7SWGx57Srz3Neulhd5aeNX0xsZpwdr/ltuMbdzhfBtxVMMrnn4NodhTb9/rjRD5Avw5GNtuQU9V9Dzt6T7Yz9BE1wtoW47mXENHN7F6e9bKe1Y4H3hbNWN7zyhtbqKQv17lrRIiuQ89MlPeVXpDaHEraH+ptG1uG76B3ssdzlpDY8MVyvHXK8e9gt47mJs9bhqLqQGeVkucD3WMfiPG+CGSVzC6yxgRbe3j2NaRsRzX2sxtCb0V/kxDIzmXe6G52J9Az0j0JNDcDhsaYNVXWLsEDfVoRSVjfwHnCTjrPM3bj3iaq9dR59TWW6as1dxr1YYzR+kKXeHMYafoRy8nwNXgrNe6wn+IvPoMeRhPxh7BS/weMPaoLztXVoyarRbW3s+9Vkbv5fxruZ0zu8MAcxPL27XmzpNqrS132g+Ye7Azk0UPEZK1WscSq2qs1VqoQlet0/wS7glvJCpuJirOlPxGNPSN7sz1DrAFN6VtuRv/nLvBydBj8G22uadFQz6z2VE12Hu8VSL5umJ7FZyT3Mv15FY8zg15Dnd0K7B5gfldg693jFeTA09STRX4deXtPhP/ZMV5/uVaiyIzD85kfr9QTWXse83vO6imHHocRo+VyQPmTFoL/i742VG1o3njY4N5ez1vn8Xn+VhbG04+8vncnWZzd5pvbvi1rZzpqMTMGRD8GqOrweiKqZ1c9Zg/gxtRVzX7M1Wz66K5I301pa+OhkOrV80dMra9gN++5SZ/ts99MpzZ9LiKau3mWHPlxPZBj8Nv2rYfkvOQnIe1LUsetvS8qWM/w/3wFZwrz1BB1ddWsbZYmEerfegpRs8+bmU3kqVXwJ8LfwmReQ02r6PVW4q9bFbcPFo9Ca6vd8ui/wQ5vxORoPTJ2O1Us4LtA+ySi6mmDjC/U7hHvcO7Umk4f4HzBzh/OXOp/qaG/TGHimgBu/mnaDiN/GmqqUHs1BXhvEEvITJvkMHu4O1VSNYyNJJ57MIfgvO469ujf2vhdPP0juISxU43JNfr7Z/LHY69nn18v/4ljGSeXkpHua4X+b+X0sjkUVesiW47ZwvdGm1Poucx9utcKsnH4E+Ccz2cSXB+D2cqVWhNX29dplKH3KgaYhW4QeKk794I3/z+Oocq6DrefksNeR0yeZr9/D8rds2NwYfcVfbz9Lckr1Anj+ak/wr2H6Vtf6x9AHv+hj39sfBvvH3RvFV5a6upcMDt8d5sxRa/HXB+orTkYa3WelGtrcNj0/BhJ6ru3tz+rWQu+sP5NZwvuONdwF68GczfM9gH2KM9OF5UP1eUVi+BC9Q22SPuZ5+VHr00N2m3YE99/PM1b+tHs6wcMzvrye3Pmrs+/ZsWqQQGsreqzC/g/+NMU6HR6T6CtRXQMwarmmPVWjx/j/lNAXvZKE6sszmxjkL+gKcyS73L9YaWuejG2eQLPZs4P6ZH7redH0dxolXWbURXTXMqwZPt8eTHcIppdYNbxNp5hKjQnfqvuoJiKbwxnDGysmID4axGhmo5NgTOt2fai55BekLxpnvzlGZENTgrtWLUMzgXbFEZ/3ZktrByb9G3/mB/sNLItCPG0qxQfufrHIbTg3k5bKom7ka4JxG6JzmqJ6PQHn3VZuMN9zFdlU6RtvVtNHCz6jajJq/GSr+I2VnK24uieVeZPyl2GsCpjcwOZGqbGyQvzepOK41Vq5G5kbhdDedt7yF8/pDS5vcCJTfpGlfbLPP7+jXY+TrRsgbbLmZGOM35nOYcTnNOS+9h/a2cd4XS5p4NO6dqVDg99C/WvOHuV0oj38P9UjhPubqzjPPuEPqA/v2VM45eWmm8xf5ILm2FtkVeb6HvVywxxm8TnFeUVmxvZnSjGN3mqHbK4GHlfBFxjM91LNPgm9PrTayyKsRnE89jFIKdzxX7Sw2NVU20KvCTiiVTyVhs8qf7n+AsxbEahqbHV7GhE329CudRPLYHzqNmrZHn93t6K9hTsT2fVpchw32gu4ycXA/+MTTUw/LfYfk/sPx3cLoisxCZX3HS/4aM9yuzW7Gu81jXA6nB6uHJNuwsrQyNnn5w7oPTj1PeF8T8w1j7BNp2wmkO50F+i7Gee4DXoqpb7d+jUeGuU2zv0axuj9C/i3P+qtgeEf3m7iKR+bWRZxfI09+PxK7gtsr8vnI3s5bBtkcY9f2MmttFpxecTnB6weliflNJjq0JLgT3YL2/gAc2wCkCj49+szlB6B2Mq7PmMdl5c9mRNfu9gcw88vkZWr2Lt3Ox/F3edmPVH+NGK5f7xtzYmyJTOboZ1pzZglvc5dRs/IbaaRurRPbWE816pZ33oY942/Ck1ldnOAWc5sb4Ov27RMnquhLn4JkPmCnuZGTd/Vz/zw5H6lUnofuIW997UHv3/ih4udLOYe8bS/9mRrB7xJtl6R2CSFo7Fdt9adVBsT9HsRcDN/KGsjYfZGf8UE8EaDilb2M9aFUAbsb+dQJcwdNdYIf7pM6sq79RLVDaGa7/95zzsGJ3gLsLbSJprVFs1zat4GxS7B1SLKNQPMN9SUeBnrbkjVVGD28Tiv0RaDgB3gUeBV7o6t17PcVufcVOkZthXWhknoBT3U9hrd74VVaOtUlpa6dikVd6jcr7+ejJQ+cy2jZ29d6vrjtRI8GdgZ1z9eactgvBLcF7IxuUTtB2qjtEYxh+qwjP1dog0jBDvYRVi5W2d2OJ69iK/WOCHWjHcZRjL+Ot/u1xU3sPf5WqvxPs5ozSOk0zp1PkvKxZ1/m1Wuv8SfBWpZ3nHb2/Hebo74kclbcLwQWK3YeQGe/wN3vOGME3uC8IfgO6ofsqesZoDYYkbZ07aPsy9KVoO6pRav+N3k86sueK4RoVCacmdlbTleJo9T7biWnN4FwsON+5Vs84Km93Bd+t2PqnYtdFQwe0xZ0rNKs4G9Cp9HHnc83G0HOR7IKGEtr+CHof+H1bPbwIGw7YPxbJRrbeIOn/2WPbp+x9mjEU26ftY5pnnMaCVzjDuZ3I1v3U3q1WKbZvc2oox1mie4f9d60HwLngRopFp2Drc+gx4Or2LiR3aWaA3mkP0WyDzg32TMHj7E+1wqTtP9UGy9ITt2V5XyuOZUP/B3QV/ka9EvRP4P8Zjmjw/hCbqbhEq6Y/ZEnGjl2pnNiVcFK8TUG3hW5raJX0DsE5BOcQnDNwzijH3a+0u9/Q+tadB2eecvzKSvuVDU3bU7Q9hbZTyvFbI9NaOY6ntOMZGvmxyI+F8xJvXzI0b+vxth6930O/9xgaS3oZDGcAbwfQ7720ulfp2Cf44RMsrI8l9Q2NbVlwsuB0ge5iaN7eBecu9HyFnq/QXxv9tZHshQw2eAn4CUMbX4H3Yds+7NyHZjT4RkNtRjqKtqOUk1VL6axahubttby9Fg3voe09Q6P/GJxjaMugOYMNeNvD2+5HyHwE/wH4D0A/Dv04MsORGQ7dDbobMiOQGQE9GHow9BToKUrbRJFtoojY84g9pxVz2gqdH6LzQ/i74e+Gxj8O/nG+hv4a+S3Ib8H/MfwfQ38h+guh+0D3gZ4DPQf6Heh30PMBej6A/wb8N+B/Cf9LaObaZa7dJHQSeWLSIybd0/BPYw/jiplxrYO/DvoZ6GegH4R+EPkbkL8Bnc3Q2QwZ4sd70WDe9oPux9v/RMN/4plf4plfwl8Jf6XRRoTcTqvbmYutzMVWJJcjuRz+AfgH4P8R/h+NvGqQakf158KhX9v0y6gdM+rejKI3/c6gxxnQLaBbQOdD5yOPZ2J4xlmLnrX0fjW9X01f39DXN8jMR2Y+NGN0GKNTBF1EW6LOJer8JUT7EvhEsmsieRr0NOjroK+DJju5ZCd/HG3HQa+CXoX907F/OvQm6E20PcZaG67YNnlyDphM5V+GhstMDMC/k7Z3oocc6JEDPTPjJmNMoe0w2g7Dkmugr0EPHnPxmF8Vyap4g7XpsDadutB1yRUXkTcuQvNeetmLntfR8zr8W+Hfik70+GaNt4HfBroqNH1VeF37rUDbCoyxAmOMucysi5726GmPDW9jw9vQ2dDZyF9p8jk+XIvO8WgbjyR5Pos8722m981oroPmOoyCDOySgV3mzmXuvBT73Sfoj3KpyZn09SaSbyLZGM2NsYf1EmO9OLfhw9vQvAj5RcizI3hmR2C9+2a990WmL5azK2WxK8XI27FaZn1hw1/Q8Bc4aHPR5rxAjy/Qy0FkDqLht2j4LTQ7Y8zsjMSPQ/y4j6LnUZMTGOPVrN/5ROY39Euu8EyuOIz8Yfr6K/y/Qs+EnokMu4/L7uMehT6K/ib02wR7oGPQPrb52OY1RU9T2qZpm4YmElwiwR0DPQaaMbqM0Z0IPRFPrseT64m0OLERpy+qF5/qxcefPv6MbcCeDbRlRrKYkRhtY7T16MszfZFjXXKsezP0zSbz48NX4LxCL+xfvqmdbkLDTdC3QN8CfTf03WjYSNuNeOwLPPYF9L+g/4X888g/j4U/w8Kfwe8Ovzv9Eqs+seo3h26OntHoGQ3NOnVYpw6z5jBr3iD0DILGAx4ecLHTNXYy+y6z75JRXZNR34V+l7YP0fYhaNa1x7p2r0DmCuz/Bfb/AprVGmO1ZiGThYxHFHlEkT+EsQxBnooxRsXoke09sr3HXumxV7rsXy77l38xbS9Gpjoy1aHZoz32aJec5pLTXGxzsc2hanJM1UTN4FIz+PTl05c3ED0DoV+Dfg16NvRs5MlOvqlC4bvwXSLQJQL91cishr8L/i7GSy6NkUtdagCXGsA5gm1H6Is87JGHfWR8UycwL56Zl2LoYvRURE9F9E9G/2RkyF2eyV3LoJchX4B8AXQOdA40vnXxrUut6FIrxkaicyR24ivH+IpV5rHKvE+hP4Vmp/ZMNUIO9MiBNrWcTS0XewqdT9HXk/T1JPpPov8kfCoHl8rBG4qeodDboLchT7ZxTLYh5l1i3jpinbDOfvE/7GL9ovSrXPo1rjJf4BpqvsEVPQWA+RaXec5+kav0C1z69a2yX92KvrjFE24FzL/jZ578RJuy392KvrPV0/yLfYkxQvFdLf2m1tmnD1/V4l/oi55NfE9rcmIvVopdyOkb7Vf6kVHaVeZYjtXl/8v3zu+0qlp3yXMJ3zuvzvfOL+V755dZ+r3zGlZfq591ufWwPDl89fxKvnp+FV89/xFfPc/jq+dX89XzH/PV8zp89fwavnp+LV89r8dXz6/jq+f1+ep5A7563tBaa62zGlnr5bmRr5434avnTfnq+U189by59YX1D+sn1kF5WvLt81v49vlP+fb5rXz7vDXfPr+Nb5+34dvnbe1adi3rDjvPzrPa8e3z9nz7vAPfPu/It8878e3zznz7vAvfPr+Tb5935dvnd9n/Zj9l3W0/bT9t9eDb53G+fR7w7fMEXz1P2m/Zb1spe6m91LqHr57fy1fPe/LV817eKO831s+833kTrQe8Jd5S6+feB94q60Fvv/cP6yHvn95x6xFL/zWQYediOGhoNQka6jcJg1ZBW/3+nn5vr/Q7e8FAniH6TTa+n8cX9M5+PU//NU591ui/xKn/DifPPrD+a5y7zb/HqY9GktNAIun6KJKq07/GkCOzdq3Ek0aPJzPSROJJoydG9GRJ7NwhUaVfy79I4iUlUaURU4mIqcwX8qtI1DwksaXxUU2io1AiTCOjusTFLIkwjYls6w15LiMmahATl0tErJRI1i/hXyFRsF1iTuPgSuIgl6/fXyWxcMCqxazn2dVkvq9mpmszuz9mXuvIvPa0rmFGr5UZHWDVswfJjNbna/YN7BdlFhsyi9czi434dv0N9tv2Equx1B/NK+Sfm4/4cO+S+PDvPc/HX4yPjU88+0yNz4yeOd97FsQXx4uiZ0V8jTzrhXP+szm+I75bnn3yHOI5Aj4RLyl9Ai+oWM5TTdvLzxrRkxs9tYN68jQSaFbO0zJoHbQ7+3RB1jwF0ZP43nNv0DvoFww4+wwKhkbPiO89I4PRZ/saF0ySp4twzn+mB7OCufJofwt5lgTLBK+khXnWlqN9RLCR9iNKPRtsjZ6dwR559gvMKuc5LOM7VvpIq5OlT2iZ5/ueCmNh5WBZWP3sUzOsxVOnjCeiJ6wfNpZYKH3ErrB5mH/e00agQ9iVp4c8qYjfM+wj+OGzsVIU1AgfDQeX8wwLnw1HhWPCCTyTwxnRMzucL/+9SJ53wkXn9Jx7wuXB1nDV2Wd+uK70iby/MJiu8R1uInIXh9vCXRpj4V48cUDjI/xaqOOMNj88lXDUooSDdqNJIiVRgTkanaiayFYqkaPeT+Th6TaJurJ2xoZ1ZN3MTDQMChJNRPuyRIt4UaJVoq1E875EJ4n2ioluwclEIJHcrMeuRCbsETRLtJU4yRXZXom+if7BscTAxJCErkeN/2aJ5xnlPpmxWJCbeDHRXzSOTUyUtaMyjAhJs1Z0dnPjaxJTw8HB2vjwxEzh1xO5ifFDQb3EHKHGhscTC8TGxYmixIrEmsT6xGbW8hrzJHYkWK+JfYlD8hxJnIibR9ZqoiTp0Zv0lKwY5Car6ZpM1hDNh5K5ydrJeslGyWZB62TLaP3pCixItk7K6PSROKslb9vJTPdIdglrJQuSieS94Yxkb5ldma1E22S/5IDkIJmL/HCwxErrsHJyaHKESI+UZ3TYNdlPI5BRmrnKJ3YkYtRLyXECk2TkoiE5XfjrkrOSc5OjkwuTS8LqyWXJlcm1yY3JreJrJ7lT4z25J7k/eTh5LHmSGC8yc56yJNbeCXukYsncVGV5qqdqhg/rI+9qJXem6sgIng0nyJv64YxUY41TwYtSzVP5qTapDonNqa7B1lSPcFUqJfE4X8eW6pnqI30ukghdp+NLPRz0Sz2aGix+GZoaFp8oUTpAYq5F0Cz1bGqUZIGC1BjJEyOS7VITUpPjDYMB8f7Jk6kZqdm6riVmxFup+alFqXeSidTy1CqJUMkcEpG98U6B5KqRRkI0rkttEl2a7YhgJMkyRHDbYFJqW9A6tStIpPbKm5MiN0Ds2ZM6IFS/VCz1dTA03CTjPp46lXbSFciCUSZLV5W8JJkuuSdRIVEhnZ3OkTy30uS6dF66rvamPaUbBlvTTTSbCd6TbpJukW6VbpvulO4W1EvFTObS3CVjy0sH6bxwRjqjlqR7Scxo7MxI90331/gxT6Kt2D0iPVBzUnpIcnR6eDhGenle4ipf8kF+SnJG/Ej6xfDh9Nj0RHkzNT1TImNlek66U7x/vH96Qfhs/Eg4QXJqxfTiYEm6KL0idTy9JlyUHK1+D/rJ2tyYXi+2bk7vSI5L707MEUsHp/eF86X/hfGJYfP0mkRGLBsTLgrqpQ+lj6RPhLXSJRkvUzFTTfKclamRyc3UDiZl6mUaZSQbZFrKTrMs0zrTLpgrmhem1qVnBsvi/TNdMgWZRObeTO9MP7FxtOi2xK5lmQGZQZmhQb2MzFZmpKzjojA/M1rGkS+x0iMzLqyVmpDReV0iMTIh0TY9PFiYHJGZnpmVmZTsEpzMzM0szCxJDs0sy6zMrM1szGzN7MwsC5+Vn3uS0zP7M4dF+limYrp/5uQ9Vrjuntg9le+pfk/NTMVgf3iKaur6//uGbOx/zzdk+1oD+HeL9BvCVkGJZXf3rOzuljwxeSrLU12emt1r3ln5zsrda3Wv1S3VLdW9jjz1u9eH11ie5vIoL1+eNvJIu85OZ6d7B3m6du+qvxeu2rXqXdJHNU43FqcbhxONS83rcaLxOcXEqHmzOMVU4BRzESeXSpxcKlPzVqXmvZiatxpnlks4rVxq2dV6V+vPmGrpiaBglGUXjJGfE+TnZO+SgjEFEy4IJgvMEJj9AzA/gkURvHOBsFxgVTmwLoJNAtsuEHYJ7I3gQARfR3A8+nmqYEJ3R6CCQNVyIFsg5wIgT6CuQMMImgi0+C4wtvOge6vzoO1/AzoJdCsHgnL0KmTOg14XCH0F+gsM/AEYEsHwCJ6/QHhRYGw5MDGCqQIzLxDmCCyIYHEERRGsiH6uEVgvsFlgRzmwW2DfBcChSMeRCE4IlHwXenjlQMXzoNp/A2oI5JYDtQXqlQONvguM+wKgRzOBltH6KAf0XY/WAu0iussFQoFAohxoGcG9Ar0vEPoJDCgDg8pAqczQ6OcIgZECo8v0VRbGRT8nXQBMF5h1Xvu558HCckDbLhFYJrAy+rn2B+z5IdgosLUc2CmwpxzYfx4cLpO7y+bbKFeW5rEex87llx4nz8sfpTFSdl5L/R35KG6dszke+65NZ/NJ2RxQun6jtaV7RmnMxysXfDeme5v38eoCNQVqmRyh+0u8juHrmOL1BRqb/BpvXkCejOcLtDF7QLxDgcntOl6J93jXgrP5Od5DIGXGG+9p/BDvY/Kl6gQeFnhUYLDAMIFnBUYJlPq31J9to32ydA87cM7P6JlgdOi7uMjFZxi7vjdP583R2T0lmifGKntjfHZk2/xz7ZFvFf33bLPnMbZFEW9GGZhfDpy/L68rB7aV2V/L7rERsLeWwvn7a+l++T/ZJzsVfHcvDArO7YFl9ruzOUtj853op875qogv+SOufpQaIy5jiu+K+AvN/sG6PWzWU1xqivgBk4viX0fronQdlObFZkYPeW5QmTXS2OQt2kc58Htr67x1dTa/lNrfOPp5PJrzU2XaTzLrLZC6Jqhg7A7E10F2lMMXmjEEEhtBXtTuv8o/5+fx8mRKbS4vH5fC6DLwQ339V/l02Xlwfp4smyt3lsmRZfNhy6jt1ig3qQ8kRwdSwwUNDWhto/OtNU3QJOJJzgokRgONrah+CSQGg05RHpO6I+gW1ROSzwKJwyBzriYIekW5rKKpGzTPBVJf6R4dSI0VSJ/BEAHtU/uSPgLtQ+qhYGqUP6N8qW2pzUrrpsXn8ii6Ih3YODPKlzvKycPn5eCzNUyUh1WX1mPBHFPvBAvKtN9nxsN/D4zWiYwtWBzx+peBIeXA+bXgxHIg8uv36rpS2FwGdpwHpTXa/6Q2q1Hw3fqrdsG5uqtsjTUxaptbxifnrS1df0HR99dVsOJcjRVInRqsN7moVC7YbOI62GHi6WweWGfWlcYfP6WGDfZFtNSpwREDZddbcMLkiKDExGfoFXy/jhEIKxogHodEa0/yVlgt+lnj3BrUNRHKuMPaZdafrKuwnllvofgnlHwYtjR7TynoeDljrTdjDqW2DNtFuiV/hF2icUbyoeSfUPJPKPVi2NvkolBycKj2qPxQs/8p0E5qglBqwFBrQO1/tIlT3QtDqf1C8UM43fgrlNoulHHrOSFcaPwULjHyoYwxlNotXFtADaj5vzQ3hzLecGsEymtnYjvcafweqh/2mzgLDxs/6jyGx6J3J42OhGVyeULqpoTUPgmxPSF1TkLWbULqm4TUNYnGxr+J5lEek/En8qOfbUw8JKS+SUhNk5BaJpEqEz8Fph5ISF2TkJom8XDEj3JuQmqaxGCjX9dJQmqbhNQ2iVHnYvXsOSDao5ROjDEyiQmGp//eUpUVVfQL8P93V/a/5q7Mq++t1N+oOmutP1tWu0AgI9BLoK9Af4GBZX4OERgu8LzAiwJjBSYKTBWYKTBHYIHAYoEigRUCawTWC2wW2CGwO4J9AocEjgicECixrPaeQEWBagI1BHJNn+1r/8DPetHPRpF8M4GWht++9f+j7mvAosrONE/dKpCmSXU1QUITYoghxPanREQaqm4V9XN/KsRxCTGG2C7tOMQYYhzaGNYhxjaMcRzXJca4xnFtw/A4hHYYYxjXMbZNjDGsa1iX8fFxDDGu8WEdQlzCGsK6BIt9z3suirY93bP77Myk63m/7zvf+c6555x7zrm3TtG+gKXaxvjDqg/2UqAaqFH+B7oWqFNttesf9tluABqBLUCzU99O53otwD7goONvBdqBTqfeLuAU0A2cBy4CfcBV4Dpwy9GD0/RU/DAw6uirTrnRafnjQiSwRBOpANZqIhPIeajluCRmAQXvXE+NRWIuUKTG8h+lsx/Vcp4kSlX9vE+On9ebDh2IPdQc22znXsq60dHEMue+yjqWP9SJlcBq8R2zwzxmnjBPm2fNHqLXvGxeM2+YA+aQOWKOmROWZqVZXivLyrXyrUJrvlWMT5kVtgyr0qqyVlirrDXWOmuDtclqIrZZO5jejc9e6wBw2DpiHbWOWyfNEesMajtnXbAuEVesfuumddu6Y9217llJ22On2z7rtp1t59mz7Tm23y6xA3bEtuyldrVdY9fadXa93WA32lvsZnun3WLvsw/arXa73cn8RrvLPmV32+fti3affdW+bt8iBu1he/SJGE9gLpi9iQznk4nPk+wcfGYlChJzYRc5n9KETsTwkf8tSyxPrEysTqwl1ic24pnwnGtEMuy4fuMaE5pr3PVb4XFNakKkailaqkjTntYyRLrm057FbjJTyxZeLVd7r/Bps7UPikxtjva8yNJe1V4V2e6E+yPiPSkbU74gnvPmexeJ93oXew2xwPsH3nWiwrve+7IwvZu8fyQ+6t3qfUV8zLvd+1Xxce/Xva+LT3jf8HaLbd4L3l+KZu+wd0y0/wtumfw/jhr49yqnxTwhzGsObgADDoYcjEyzJcaACcdGnKUp20pz4HWQBeQC+UAhMF/FWsVOvPSVTUuHHW04qHx4TatKpfEUmIe19HA1ybXUw8/lR9aU+hybWlvmgOU1h2BhhZk9zhqTq6zMvIZVVozraeKZFCvFFiLlByk/EJp3lneWcHuLvcXC4zW9lkjxfsT7e2KGt8q7SmR4X/KuwX34rPdz4n3ejd4viHxvk/fLYra32fvHotB7xntGzPF+3/t98bz3jveOmPv/uXaXKBZlD//6aOE+8YxZYM41ixa2mKWmDsTMxKIN5rIXzi06aS43V8pfHn3VaNWMlKdSnhLC91nfZ+F52fey0Hxf9H1RuH2bfZuFx/dl35dFiq/Ft1/I/yvvgnaDb18W3r7EQr/QpkGmXY9B+t3TIH1Vxgmjx+g1LhvXjBvGgDFkjBhjxoSpmWmm18wyc818s9CcbxabZWbYNMxKs8pcYa4y15jrzA3mJrNpkcfcZu4wd5t7zQPmYfPIg/yj5nHzpHnGPGdeMC+ZV0pKzH7zpnnbvGPeNe+ZSctjpS9qtHxWtpVnzbbmWH6rxApYEcuyllrVVo1Va9WZ/Va91WA1WlusZmun1WLtsw5arVa71Wl1WadQuts6X5SF9uFjXbT6jAHr6sIO6zoiby2utAatYWsUOeO2sFPfSk9dx86wM+0ce5ZdYM+1i+xSW184ZsfMdXbCXla81V4u67VX2qvttfZ6o8feaG+2t9rbzbRF9fYue4+93z5kt9kd9rGp8XvTOD4+no62T9inzaP22anxtXvsXv+ofXlqHO1r9g17wB6yR9C6MXviQf7U+Do6oSXSEt5E1tR4Pz7uidxEfqLQXDGlp677+LjLcUnMTxQnyhLhhJGofDDubzHeiarEisSqxJqpcZ/SU/4Hel1iA2reNHVfrPREE1p+G7Pe7Yv7PopZv8z3MfGU7yXfS+Jd8rdSZy2s9q3GWljj+zTWwmd89SLVt973eZHu+0OsjgzfF3xfEM9gjfyR8Pm+5PuSmIk18orI9n3F1yye8233bRfv9e3w7RR5vn+HVfN+30HfEfG8r933A1FCZrvTD9fpvDuiytxobja3mtvNXeYefKTcT33IbIMuBfj2ENvj7HgyrzcWY7T8nMC+J0up+F3IkfVdQ4034B+Az3nHQL0j8MjPIUsz2/COkIb6UbusOzZrqm6zF3slEMN/Zht3iqX/NKPj6U/JEjMwOvKvh8XcS8L1BKQ62uNoN6BNy59eLuUt6vhYfMI4bBwBjsI6Hj26oNY4uaA2uiF61DhjaMY54wJwCdYVI83oN24Ct2HdiXTMW7sgfd5a467hNe4ZWUbS9BhJf4+RZaYbuabPzAbyYM0250D6jdx4wsg1mswSM2BGzMC8E4i0jNxIhrkUqJaRRv6CRrMGqDXyzbpHyyG63mww6yMxXqEw2m82Rvvj641Cc4vZXHzE3Gm2GHfMfeZB1Jm5+Gok02yVdcbPmu1mJ9AF69Rjbemed8I8P+9EPMMoNi8aZWafedXsW3TDKIvVGWHzunkLiMAajF03h81RYDyaW3zE2GQJKxXIMIyo16i0Mv37rUwrx6hc6DWq/B3WLH/H/G1GVfSCkevvsQqAuexfllVkNlhFTh9WWKWWDsRgJSK9kQxrGbA80hvrNHKtldZqayXuhiz3zlOPtNpYZa211gMbYW3G1bda262t8/PVPbJ2WXuA/SxXaB2y2oAONZ7zYtYxs8U6ocbTOu0fsk5bZ2Wk1RM9Z/UCl2Ut0Vzr2oI+65p1g63W5hVYA8DQm+eLNWKNWRPWmHHb1ublPDp77DTba2fZ3li3nTv/7qNzKTJi59uFdr6/x54vW20XF3vtYruM97bHDtsGUGlXxdfbK4wme5XRFC00mmIee41dZa+zN9ib7CbTsrfZO+zd9o7oDmNH5DRml8/eCxyQ8+zRco/Ns8dS8VlWR3yWffjNc9A+Yh+1j9tHY+ftk5hZj8xI+4x9bsFB+0Kk1L5kX3k0FT87r8DuB25yfv4DMzJ23b5t3wHuqjlonLHvAUk5BxOeRHrCl0i3MhLZibw3z8HEbH/P/CtPnoOJOZiDqXIOMuVPlCQCMpWIyPmZsKxYYumCceZVJ2oStVN5iTnzJqxUmRfpTdQl6hN11mk5C2J9iQZrGbA80RjrNJuj2xJbzJZFA3IksHs+5fuQD98QfXN98/FWtdBXImb4gj5dvMsX9lVgx4z6YuJZ3yd8nxDv9q3y/WuR5dvt282/EnrW2XdrfbXYd+Xuq3H3dXP3ncHd92nuvu/i7uvj7vssd99s7r7v4e6by903j7vv+7j75nP3ncvdV/57QDtdZ/h3PHy7+1AV4XL0P4TpMVUVRnxOoYj74yXxQDwSt+JLoyvj1fGa8Nl4bbwuXh/oijfEG+NbmG6O7wx1xVvi+0K1gVPxg5Gl8dZ4ezAR74x3xU9Fd8W74+fjF+N98avx6/FbH75QsTd2Jz4Y2Rkfjo+GauPjFbsNERVG6nTEu40MI9PIia0wZhkFxtzoNaMoVGuURlcbuhEzEoUDxjJjubGS7Ztq41Q7gQ9dNFbHqyt2VOQba2Ubw3uM9cZGY3NF/odvyvZKGFuN7bLdU203dkWLJFB2T7zT2C/bjrYcMtqMDtl21W7jmGx3pM84IdsuIW0J47RxVvYlMtvowR1I8xX4CnDHn/c9jzu+wIf3aN8SXwDzJuQL4Ukb8UVwxz/u+ziety/6Xvwne3eJiBV8dwlIDuIPFgmhH3kImQ6WPgrph9Zip2KnHnnrWua8dcl/iUZDT17km9Egv1vE0B/X7MuEOzDwwHbFWqg12vuEq+yucMMWErC95YPYLeo/NAbdEKuPNT5Zz7vhpLe8jW529M630Fve4k6VPrhTT/FOpfNOPc07lfEW757y/+Zpefg3dB+4QrgcZEdPRE9Hz0Z7iBPR3ujl6LXojehAdAh6JDoWuBWdkP6YFkt7R/BGr0nttCaO1ti+BHpQ6asUbu5W0/vlfzAD3U6/ZA/SeR/fzX5lsR8z0Y8asYNzJCzP6D8ARC4pSPuF3UJEa1U6WgfUK3+0AWgUGdHKaBU+ldEV0VXQayAro+ui8q8LZ7xNi+QYp7MtT/8joyXz9Em2eQXeykV+Ddp396Euvazs0hG0/yR891Sa+bAjSWWXoS9R3Lvy1dDpIjMiIj14u7kcuRa5ERmIDEVGImOwRiITUS2aFjkU9UazONKFznNhHlq30LcQ37YX4emQyqdDOp8OGb4Yng5ePhee4XPh2f+Hki6RK2azv/wb1PevI1yReq7FT/pq5Bs/9hKXdkMbx2zI0K6KLvSz2oHsdy21K1LnpB9CQz1vZ0/3Pcn/aHzDA1te781oRN6WaWWbHyu/84lteSftfLu4t2q7iLQA+6alD07TrY9B1tUOdDrjWvsvdIynl318jLt+Z8bYFRoOjYbGMfM9malYpCLTzqwTwRwtRxefygnnvCj2Tc1/r/CWIC5DOyzwHAtVO8A1QrWOfhSuUP3b2tN9T/I/Gt8wzd4yLab5sbidT7zmO2nP28W9VRtFCOMf2jctfXCabn0Msq52oNMZu6nx++cYx+l4fBy7flfGUbsWLHvuWDAcNIKVwargiuCq4JrgOmBVcAOwiemm4DboHcBuYG/wQPAwcCR4FDgQPA6cZPoM4g4EzwEXgEvBK8H+4M3gbeAScAe4S/se/EndI209XfcpDWQj9gp0XrBfz9Nn63Ng+/US5vv1QPCKHtEtfalerdcAEaAWqKNdD3+D3kh7i95MvRNoQawFvQ/5+/SDeivsdr2T+V36KeR16+f1i0j3Ad3AVeA67VvwD+rDtEf1calDAkhF7HnoDP1iKCOUGcqBPStUwPy5oSL9fKg0pIdioURoGVAKLAdW0l4N/9rQemnreaGN9G0GtiJWh96O/O2hXaE9sPeHDjF/f6gNeR2hY8QJ4DRw1klL9EyzT4R6Q5enpSWuOVr6b4QGgKHQCDAGTAA3whqQFvbSzgJyQyPhrHA+04XAfKA4XMZ0GP6BsBGuDBuhoXAVsAJYBRjhNcC68Abam4D54SroJqa3ATuA3eG9TB8IN6GOw+EjxFHgOHDSSUucmWYfDZ8LX5iWlrjkaOm/Eu4P3wRuA1fCd4C7sO+G7zGdrPCE+yvSAR+QLeMq8sJXKmYDcyr8FSUVASAC+CssYCnspRXVTNdU1ELXAfVAA9BYsQX+ZmBnRUvFvoqDQCvQDrRUdAJdwCnqbvjOAxcf5O+r6AOuAteZvlUxCD1cMVoxXjEaEUAq7OFIBpAJ5EgdmQV/ATB3Kh+6CCgFdMbHIgnYyyLL3zFWRlZH1gLrIxthb4YtsTGyFb7twC5gD7AfOBRpi3QAx5B/CHEdxMbICfhOA2eBHqAXkG+r7xTL8Db7JKh33SHosciEtKNaZABvvPBHvcofzZK243+LeqK50fxoITDf0cXRsmgYMBxdjO8GYcCgLntTfBW/RazAtwil1wEbgE2AzGtCuW3ADurd0b3QB4DDQFP0SPRo9Hj0JHCG+lz0AvQl4ApwNNofvRm9Hb0D3HX0PSAZvR3zQCMvlo5Xb4VsIM+xZzt6DuAHSmKBWCRmEUthL41V066J1VLXAfXwLZXXjjVIxBqjl2KNsS20m2M7qVuAfbEt8B+MtTrIBvIce7aj5wB+oCTWHuuMdQGngG6gPXY+dtFpSx9wFbiI9lx3rnsLGASu4xrDsdHYeGw0LoBU2MPxjHhmPCc+CygAMuNzaWfGi+KlcR2IOXo6Ek/wLQOW014Zi8RXA2uBlfH18Y3Umx29nvmPxmxleruDXVLH9wD744dgt0Ur46uBtUBbvCO+kfqYozuY/2jMCaa3O9gldfw0cDZ+CHZPvDd+GbgG9MRv0O6JD8SH4iPAmKOnY+LNPkMD0qRteI0sI9fINwoBac83ih9D2QM7bBhGJVAFrADCxir6JNYA64ANwCamm+iT2GbseAy7H9h7jQPGYUDqI8BR47hxEpC/iJyDvmBcMq4AF3i+fcm4bdwx7gJS3wN4em2mmz7TY2bTzjNnU88x/fCVmB48x6sBi7qWdgOf+3i+mwG92sS7QSiTOC+1fKZDD8rnuHxemxZi8B5hVps1QK1ZB11Pu8FspN5iNkPvBFrkySvQyl9C9pld0ePmqehxPWJ2m+dhXzT7iKv87aDPHORvHeNSW8Ict1KtDCvTgbRzgFnIKwDmmu1WEeqVsfLXjBiQAJY5tsRyYCWw2rHXOvnrgY3AZidO/johf5PYDxwC2hxbogM4Bpxw7NPAWaAH6AUuO3HXrBvWgDU09WuDhK1BD0jI3xkcW/qz7Fwg3y6EPZ/5xXaZnWZN2Gl6xA7j3aoa71mteO9qxTtYK9/XInqrbSjNPPnehvtmV8JfJdP2CpRr5Xtat70K71LVoQK8X10E+uR7Ft+xcuw1SjNPvqfhvtrr4N8g0/amUBHycJ/tJueXi73AAeAw0ETI3xuUvZf6OHDSPgP7HNMXUO6Ifck+IvtrX4Gv375p3wbu2Hfte3Yy4bFvEul6a8IHZIdyEnnAbORJzFG/BeCbXxq+IabjG2JGZqFIyVyAb4v5/LZYgm+LqaI6Jy1ntvhkzvP45riR3xx3yG+Vz254doMQz7787MvClfnpmeVCk//MkvZ3wpWxO+Psw++TCzUHaYDX0Y/CtTD3be3pvif5H43Pn2bPnxZT/Fhc2ROv+U7a83Zxb9VGsTAMGNPSldN01WOQda0AVjljNzV+/xzjOB2Pj+Oa35Vx1L5UPrIgo3ysfGJBUflEQAPSAt5AFpAWyA3kQxcG5geKgcJAGdLz4Q8HjEBloApYEVgVWLN4dWAdsCGwKdAEbAvsCOwG9gIHgG2Bw8AR4ChwPHASvjPAuQf5OwIXgEvAFZledDfQD30zcDtwB7gL3HNsiWTgdtADpDu2D8gG8oDZwBwVV7Q96AdKivYHS4KBYATaQnopUL0kPVizJN1fpXSwdklJsA6oDzYEG4Etjm4O7gy2APuCB4M1wYP+KqWDtQs2BuuA+mAr4lqD7Y5uDnYGu4BTC0aC3cD5BRPBi9B9wFXguj+N/lvw3/JXBgdhD0v41wW7kZZgvJM36l8FPREcRDmZJuiTdSMuOB4cLBcyrQvUMSjLlZ8GztKXCmQsmNAzoXOAWUCBP43+ufDP9VfqRbBLAd2/Tk9FWoLxTl7Mvwp6Qi9COZlOAEX0yboRVzauF5ULppehjiJZrvw0cBb2Bn05sNLfpK+GXgusBzb6t9G/Gf7N/nP6VtjbgV3+m/CfI1S8ytvjvwLdBGxjej+wlT5ZN+LKc/St5bOYPoQ6tspy5T1Ar75Vb3thg962YEzv8Gv6MaANOAGcpp0Lf75+lvb80kzqMiCsH0OZNr+BfEPv8VfBXlHey/w1ei/yemD3OFrW14N6UAdjLyN9TcaWDesog3JVqKcK16/i9dugbyjNPNkOWXYA9pBMl6fq0i/rmvKN6GP6BOqSbR3xayENSJN2yKtPhLJCubTzQ4XU84Fi3IMx6DLkl4XCIQN2ZaiK+Sv8u/WxUBh1hB0t6wuHslgHYhfoSK9i7Br/bthVKD8RMsrPynroN5xrGsyT7ZBl1yG9gelN/t2wUdcDX1uwGzhf3hu8CN0HXAWu68fov6V3AD3BQdjDeluoSe+Fv4dQ8SpvFOUHETuIcjJN0Ie6ZVxoG+whmdaFLv2y3MADXyqQgbmRCZ0DzAIK9GP0z9U7gB69CHYpoOu98PcQKl7lxVC+CLFFKCfTCaCIPtTNuAHYQ0wv06VflpvyjejLgZX6hL4aei2wHtiI+yX9m+HfjPuyFfZ2YBfu1XKkJRjv5O0JVUFPYJ6fZXo/sJU+WbeMW4f0BqYPoY6tstyUL9iwZDS0A9gN7A0dCB1eMhpsCB1x9AGZPz0m2ODPZfqog+Pw7QydBM6EziF9AbgEXJF2qD90k/q2o/uZ/2jMHabvOkB9oXuhZOhe2BM6F04PHly8OuwDshevDh5ckhfOo57j6DyZ/1iMX6YXbFQIz5Z6SQSwwnOQ9hePh0uAAOBfUrPER13r6BrmPxpTx3REYYn0RZbUAw1hq3gw2LpkNLwUqMY4tIYOhGuojzj6gMx/NAbjJ32dChy/Toxfpxq/cC1QB9RLO9QfbqC+7eh+5j8ac0emH6svGeyU44f8xpI7wF1HT8e9J/iS4cYlHtpblrQC7Y6ejs4n+LqAU9Iu31W+p3w/cMLBofK2cDOwE2gpb1uQGd4HHFywHHo59Ei4FWhfMBHuhO7yV4ZPAXg+hvFsC+M5SLubMcgvGw93lwum+8pPwz4b7vZvCLcC7f6m8FXoLv856HP0XwS6HbTLvPIclJnFdF95D+zeMPaccCvQrneET0F36T3QPfRjHwljz6HdzRiZPwB7iOm+Bzb6AbTrE+Gr0F2hcPgqIP0XgW4H7cxbF+4ObWC6b8pe2BK+DtwCBoFhYBQYX9hSIRaOVqQuHEX+KPJHkT+K/FHkjyJ/VOUXba/IKNpfkQnkFN2omFU0UlEAzC3Oqygqrq0oWjxWUVqSX6FXxCoS/5ffbVJmfmZmvRAzX575mvDM/N7MbhGaef494yKe81LOS1qTcImfaj8RklFSsgEdTkkRkmsnS/6b3WQe0qRH+wX9LdKv2IYkVZqQXHHSv0rKlMtSevz03PVckow1rKeB/gIyDw1KO3UjY9ZSJlj/MGsbJQNQjcMGVCAku49kVTlMz1cdxiC/cHiGxG/IRVT5kElIjJNbKIs8Q52UayX/kOuIrE3rU+xEys/I/bQ11jBM2UjZ4W6Rf+uL/2QbYGvbyOuzXDIPaT3kBCqhXeL+G1kD4yfJBvRuh5cIUvxcxqQUs4Z7UrqrWdYg81BAelzv9hyS48BS2WQSmsOYww7zEGRy76RkhKqavCQ5EmjXyLZpfdJ2mbRXMteg/Qbta4zcQjuNdoC5P2Spcfr/jP4C+v+C/lLac5mbSvsztP9E1SBt108YOcTczcpmbqZqGz23kpKhZz5jMllDEeUa5l5Vkrm50k5WT45hnhRKj6cw+SrGoYK5XUKy1vXT3pZ8XY6M9Lif4d2JJr8tR552mDIplsoZyHp8UroWyRhtRNpinDEHWNt/Y+4R2c6Uy4x3MbdNXsWtSTv1ffR0Mj6N8W/IXNco7T1JMkgxpjr5XdlHaaeomdNCOZdyu/LIlni2srZG9msf7QD7tYaeDnrOsF+/ZKlvsEdNvOJs9uUw+3KBkevpX8eW7OLV09W8lXWmFDP3HOVBtvwI7UrG97M99fScUtdl2Wz6z9PDO+K6yjFJOFd8jvVLHimv6jvbc5uROWzh15JYuaJbSnc+Y947OQ5Ps7yu+A3buYG19Tt9l54G1nOdMbeldIdpX6e/lTPqGK+ylVcZUHeBspTxTdLvnqBnOftYlJwgJ9yEHDfKXVK6hihv0pPHmNu0M+k/Rc8v6VlGGaD/nJTuOEeghPerh23bzKuv5XVvcuZ42KM5av5MfkLOZLYnU3rSsqWcUaNmqRyl1BzG35Z2isWYDHpWqnkry3ryVA1yprl2cPRqkpJfbT1b2EE7PflJObuSkrHs3ZTLWKqHo2fSXiMjXaMsVUR7jJE9rGEP7d30X2Wve+kvpOfXzP06Pf2s7ev0VDDyV1JiR+NMYN8TbPlS9uLnbMNNecdTOQ+1fbK/njtSYnxeZ19e50r/Nlso45Oswe/czddZQxvZaOTKzeK9+AhzA5QDnDOXWWefM2JqHGSbDfbiJkcpm/53UdYwcr1zxQnOwwnO57ucGypSjtgsaWPfuMsdQMbUUu6h55OMzOW1chl5iaV6GHPQmV0y9x7nzzYpXUlnl3uOfq5W3n1drW61v3EWDYtnuE4hZ+RxFnHHcA8yvo6Su5znOMd8RF7L3ZH8GWf+Xc58OX+WOzvPXc5qNbaytX1sv5ppuzgaQ4z5Dv3r2fIE7Y/Sf4Q9ukq7k34reYV3to12A0f7ruRg4BWXOftMsXyX4J06wTv+X+hnj7Tvs+wZ3t8N6i7LGKwUcuyxd+rZdFjddzluYr+MwZ7zOuuUkdlqB3Z26efY09fZU1nnCY5VlrRTZ3NUG3mVQ2zbIdZQ7ax0Wc8qzroCytVswx1nx5ayhvX3qp0weYB3s5g7/362pJjxgs8IWed28tUNizqujjp5Byc/BnsF7/gQYxrUTs527lajp/2Y6/d1zkzZr7PqycjIV+hfzj7u445dTc9sPgvUOHdQpjE3n/2Nsac3KFsoJ1izwbsfoZwtZfLA5C3huv9XUqJV1XJ9seW/p55NbMmu5A/Jyiz/spTP3JRmti2fkdVJvv+wbJ6YhavnOu2fRcY7+a8HpFMKz07akIr9TggyTCjuMcV4p7juFL8dOe0cNjsy2CnuOsVXpzjqFDudYqRTXHSKf85hniNvk+KZUwxzilvOYZVTTHKKQ45cYooxTnHFKZY4xQ+n2OAUA5xifVN8b4rjzWF3I6Ob4nJTLG6Kv81hblNMV4qtTXGHKIY2xc1GfizFx6aY2BQHm2Jfc3jXFOMa+TkUy5riV3OY1RSnmmJTI4+aYlBT3GkOa5riS1MsLBwrxY6meNEcRjTFhUYGEcV/5jCfKbYz8pwphjPFbaZYzRSTmeIwU+xlirdMMZYpljLFT6aYyRQnmcNGpnjIyCOiuMcU65jiG1NMYw7HmGIXUyw4HDHFJeawiCn+MMUcpmaIYgsjT5jDEEZuMMX75XB9KZYvxQioOL3I5qV4vFLIBONwd5G1S/F1KaYuxdGl2LkUL5fDyMVSacxV/FuKeUtxbjlsW+TZUnxaiklLcWgp9iyHN0sxZpFhSPFgKQYsxX2lWK8U35ViulIcV4rdSvFaKS4rxWKl+KsUc5XDWaVWDUdAMVQpDirFPuXwTpFxyuGaIj+Q5nBK8bqKCZL8Lg6PlGKQUtxRijWKfFGKKUpxRDnsUGybYoRSXFCKBUrxPznMT4rziTxPiuHJ4XZSrE6KJ4lMTg6HE9mbFG+TYmxSXE0OSxP5mRxmJsXJpBgcFQ8Tr+5wLynWJTXTFKOP4ljiHVS8Sg6jEu+aYlFS/EmKOUlxJjlsSYpTkKtDcSM5rEiKs1AxIbE2xX6keI8U45HDdaRYjshjpJiNHE4jjp7iMVIMRoq7SLEWKb4ixVSkOIocdiLyEilGIsVF5LAQkX/IYR5SnEOKbYi7mWIYUtxCDquQ4hNSOwDnm2IPUrxBijFIcQUpliCHH4jMQIoTSLEBJV/0xCFXSrbm5NO002kvor2I9mJPArIkZRP9a+j/Ju3dkMUp36WdoK3KLqJdxbILIf30l0huadQjyxaz/lWexVKmvEhm1ibYWZI9PZmVInl8uxjzLXnd+7Tvv8E2NNP/OdqLaS+mXaJa68gmypcZgzrv/9wzD/Km06N5zH2RrWJPPeXs12fZ8nXSdl+jncZcwVKv0fN5lv0oPc/QrmDZf8PanmFLKihTGFPKmLWQRbSLaBd7AvTX0y5lDfRTLmZuMXNf8ASlTPkcWxJgpLQXy9MYxKhx2M3azrC2BO1vMVLKhZ4OxihZRlnNmDrWf5L1y5F5MaVXzofUX8r5QDud9iLai2gvTnlV9i71JP0N9B+l/ZK8eupO2j+iPUz7jrRn5LDsaTkf6C9J+Qrr+Uv24jecCbL9q1KvyPkwQ/YiKzUk5Qx5la7U9XI+zPiKnA/Svv+GtJPNqV+T82HGiKw/dUDKGb+i/VNZ/4xB2r+lrWI+RrmYkb9PWSdniGzb/ZuqzanfZHwbbVVqiG0epb+Afp+UMyLsnZ/yV+zvduaeoJxB/wuMjPFad+i/yDqL6VEzQXnGmfsi43fxihc5SuOUr/DqUUZyDs+QkUW0i2gXp16g/x7teaxH+QvZkhW0n6f9Kdbzd1KmzaDNOZ+WxtwX6flT1vY9OUNYwwusYRHtRbQXp/4rxv8t7WzKmSxlss3FbPMa3uVX2dPfMJdtS22n5yXKH1GOMvc9ct7O+A7t46yzm7aa539N+Q36T9C+TPvXnMk/ZmvlPFw8+ZrkBZ/8z7T/Sl6Rsnjy27Sfp5SRRU7ua5RtjG+irWQO5dfpV2WP0T7G2jopf0bPz2hfY4z0L07myzbcn6TNe5c8KHPv/0JG3ud8SK6nR67oxfffkO1RnuQrlPmULMUaFt0/z0iWvc+Rv/8q7QHW+UPaV2kPM5ez+v5P6Pl71oPZqH1afpPSqvitgd+VtCXSIz6ovh/Jq7t4mqfx7M6lTucW0v4mJU8Fxb+nzZMlF+sR/5WS34tdRyl5LipepeS3G9cHaP8HyiwpJ/+M1+JZh2sv/X9KP7+Du8Yo1bnWLyh56iX+gvL9jORp5KRqLU+NBE8IJ39CWUs/v0OJ31Lyu57rZ5SfpKeP8hOUv6L8NMvyfCn5+4z8OP38li14vjT5Y9qqzTPpUSe6PNNz7aTkiajgWZNLnUtspIc9muSZYZKno/e/JeUEzyIEzyIEz/Qmf0rJ78uamzV8mbkcGfEleljW9Rw976H9J7Tvsyy/RSb/N/1vUL7AXHW+sYSSpwqTMUbSc5+nwa6XmctTkUmOv6bG8xo9PId0dTOGJ58ufsvmAa5L8DTVxW/f4quUPFnVeBrjukX5Iv03OcfU2Ttrc/1HSp6daqrOVyjZBtcfsJS6L1HaXYxUZ2Kz6OdJiJttcHNWuHj3NTUPOQNd+ZQ8JXbxjosblKzfpU5BG+nh2YvrXbQ5tpPskeuj9PyIkrVNcma6fk7PFcpPUfLuC979SZ4YJ7/ASH73F/+JspKSJ+eTTzOXNbt4ki84W0SIvbDp/wElf5UQ36efc8D1DXq+TskzE/GXlOpOvUb5OiVPv8X/oGRtgit38o9pf5tyCyVPe4TqlxqTz1O2UnJeiQ+zrFojL1H+kO1RK4s9En9NyRk4SXtStZzj7+H+4OYZr4st1NSew9mrqXOkbbQ5M12XKNlT92fp53mv63uUH6HcTMlzZjfrd7FH2jx6uM9o++nnehGfoU2P4A7g4im0xh3A9Tzb+RQ9vNcern3tu8z9W0qesGmcb27+uuQ6zTvO+t3cqTSu+kn+CiP+nJ6TlBHWqc7xeMdd/J1CfJEeta9yPWrsHd68pc1V7+aO4eLvDq7/RQ9ngqZ27/9JD3ctTfWRu43rb+hXNfyauV+jn/dX44mchzPZrWbjcXq4V2hcLy716xLnsHaRueydmzu/S51MqlNHznaNMy2Fq9vN31Y07jke3lM3V5mHvdP+OyXnsJs7huD+4+FM0zi7NP5u4lG/2nA2apwPk3/uzA28J7jVHH5N2pNq7ZTSz90Aa+EyZ4j0qHm+XtqaGts2Z7bA4+FzSuOzD6sGHqFmYNKZOfJ0d7mTK8+9v+vYeBYLtUv/IWvgU8+jZoKaq1yVk2oWfYst4b6H9XiZK2UEfq5TjWsQnmGuL0iPenardSQ4DpyZGvdGt7o7as26nZkg61d73c/Zd650N/coD+NTudY0zh+Pesa1snc/dWxcN7WcMXz+erhONT5PPVW0qzg+fFq51Vrj3XSrNcVfGN3c8Vxq5aperKZUv0WqJ4Va0fwFxKV+qeSK1j5EmzuVi3fKzd1Y4x10sR433yXc/5YjpvaBIsaouc14198zhrX9H+6+Bjyq6lp7n79JxPB35kzmZP6YGSbJJHMCFBERERERYxoRMcUUESONQJFijIiIiICoFCmNGCMXkVJALsU0pkqRUow0Ui5FRMqlXKQpIlKa0hgopVxKk5m71ntmSORp1ed++PS5H5v9nnfWWvt/n733yczeR/oV+CfQYhZT7NEVc7p8O3A95E6UFGVX0GoyUlHsOcu+R/CtpdoTEtxBKr6vVI4CcXermOkU+/tTjPMqVibyVZCj1RTc+5I9UmHtIWMUUr4H+U3g94CjZypoLxkrJQVztIx7SsE9peDeV/EdqIw5VLF7DlY+cfTnBMarBO64OPpJHN9RxrEyUezawNpGtr8rQV3FUVftmFPiaOV2tFp7H0gw67VjzIljHmxHTuIYtdoxzrRj5G/H94BxjGDtmJ3j9kxhz0dYyyXQUgl7rYheGscsH8cdHce3xnHMle24j+Joi3gF7O1VFsbehL2SwfpBYKyOo2biqP842qsdPSqOO6Idlu34XimOHhsvAI4G2nKsQNqx/mzHPZt4HfELcQFYA9zF+Lft4K8DyyEZD05PPbQuh6V0O3JLPPFntiSswfqZJb8D/iEZ5wIe2/l3I/LkeAZjgp5bxV+VhTzn2khtKElFju8RTqDVhCSa0vgXKU6b818PRCL+GHN+yiZke2f8I/C3gd8GTgW+hbD9EU8EMbwP+4XQ/hRyGZKTkFQAH+K/tFN/l5Sn4/eD0zOgMirxMnPtMeD3gGWw0aHtDsl0SLqB3wEOSft5SDRIHiF8KD4CEgXo43TVCYzxkcjnOsbE95CfrpAgh1o7bBzQ9oRWhiQd2t+DZwC5vZraz0GOksbHAidCci/4k+D1jHTHswS1px6F/CXgDOCz0GYhXT8kSyDxgj8I3gtoW16BeP4MjvaKPw3JH8GXIdRgLjvN6lwnd6KeP0ZNPo06Qc1rw4HfQB2eYy2tU1gyDng95G2IYTz4CcRzBpJvoZ4HQfJr2FMtyar6XcLr2vlbKhWtqXK9ySr/ZYDwSv7rZVI7BUh9TM7hv3TJ1fFTjNwuco5WCFwE3A1tAng3JGvB7wHeB8k14F8HzmFsPwr5W5BUIZWRiL8L5GOBLwIPQe6B5UxIfgI+C/xm8EnAlxDz3yH/JSSvodRvotQPo0TPAM+gvDcATSr12aT2EeBfSTJA3UO4JrGRufYXRgf1H+nDeAvwdsiPsU38ZmhfBD4HnM9Px1x70pr2v8HmDg7VTjHL3bXr+EktsYN4Af9dSO7u+AEkOiO3nVyg8Xfr3eMPw+Z14KvAl4FRhHoTNuDcnwl7E96j8q/OtsS/j3q4E9gInM7y9lPQzuTRpt1uQe5pOnqCrr0N/A3wHdY67oM9WtbBvegG5Q5IYmi1xcC/AV9F/HugdSL+Ysi5p6XznS7rPJ5Qihng58CXw/5qcLSI8mPCShrXqQVpLSbJ76HXVWslkHBZ3ovPBvaC3AKOAO4DBmG5nlH5T8TwOORXQ47+qXUFZgPRozQJ2meRh3HIgwGkUIqs3kJYkZgEzqNiRfxt5lxjxH8MHAPtGcj5O+gslUYY5frEHOb8l3DCC5wfdRuXN1ku7pPVDhrZpFMskaL23dfO9Rzlv+MRbgHKwDog98wi9WVGbimaO7wcQ3wJJHWQ9AR2hfxrhPO5NqQtSGU++uF8/tsd1f/j4PnA7wKfhjzIz1yqhfxMZa4VAHcBc4BvA39BNj+i9QuPYxMxXtUBHwX+Avgs8HXY3MmzD/coaT7y49SizOOvQl4DXgS+APynwEGM6ivIWzVzRxb4teB2z18HzEV+cpEW36Hv81hNrfk6c3U1JPOAf2J5O9LV/o4UM4A/RD1MBz6J+Lsj7CrEw7/SfF/5NSSIU+MxKreNx8zl6ieMCR6v7tO4n9/nuJHwg3hP4FqMM8ORt3sxVvdk5L9MEh8L7I4UA8jJu4z8d1oqlwnJJ+BPAB2wrINNGSRPATMh2QOtB33ABD4BRH+D5Sm2pJniA8bEeK43HtnkHzn4V6lunmEJVyDPQ5HnbyKH6cjzOfDbgHwycz7/8lNt4D4vOVX+huvf7fZV+RcX96ppPBrHz2FMXoR5PI21yRl/HPBOrE/8WJ/cgBnzL5DfDSyBFjXDd5x0L8+kFOcdjG1cM2tVnkOf5LWNtFbj1lmLe6GMLaW9yE8Zf3Mk7Y2/Bf4ptDuhfQCSMLSPgNNqUO6p7EWcf2SuxYAvot15/Lwu0Q0lakN/eAzynyBXheAHoD3N3PE4JL9EWSpRugvgCvgjiGE0wqKu2vuhp30L8ncgqQQ/Bh5FbC9B8jH3NJV/nehI8JrzA/U1vjeVH7E2sY3l/Bd76s8Ktzv/nlm8yr8Zk07xmE+SR3GXPczjhoKRhOdr0mIs4tWRVMO1p7ym8q+AXmNL5RjXgPizxvdsRaKKuaOAkb8Lk2ocTuAE5PMG5LMRcdahly5EusMh+S5wL/AeRtyJp3huIpwCfAx4CPghWp9/EafGJ0OCOS6uIU4ZklsxszwH7gPuAb4Km9PgY4G2/UvAFeirMmIu4ThV9MP4d7CW+wvumj1ce+qPGfk7VjEdfalIrYL9TNgPRQ0/Chs/MAAJn/P2vIpeHbdX+M8DDwN/ixXsFGiHQDIIiJUtrw9JixLJn4KPQWw8Ypxq5zXtq0oDcBlyOI3z1s4zSJH837Dn2F5tnwHttcDBkLyFUGsR8yn0nO9grLuXucotcq9cgzphSZ7yHu4RWzsfefsEeBw4DUgxSI8pdL9Ldyu8XlqW+A/0roXoXc3o+f8G5FFuvv3MwuOeMkP5DfexxBPM1T+hvx1grn0L2p2MiQeh/QOjrY1HUBsSauMwo7IdLeLi1VG8DO1ut/Iq3CMzcL88xaOchvVMcoVzJywXA/8GtFc4H0MbBZ8BPgha7pm/Rh/7La8QKP4M8HPgy4HD2D7ZS7+BXMmQ3Artc+A+INZR6KVb0Eu3oJdu0Wz7l4DcSx+I/x5I62HJj1WrP86/wH8AK88BWHk+wCtDal/qq5KTv5miHngFOK91ndop9BDuq8+3/xCWVzHyt5yisL0G8uGw/B36cB1sYOngZ5xrYPMq29CTbDokaznORF9C0Z4HDAO/AXwB+F3GuA/2q9DuhSxpex5300igA/GkgacDM4DlyPM58LHAicAngdcDC2EzBfzbwCzEZsfjBfYCPgu8AvgY8GngMuAQ4AOI7TmMAHim0+x+az8JngeegKQH+EZgAyR26YZD0gpEz9fwVIh7sCmOp1qtL/AXwNdxt/JfJJoSvSH5EJLd4NvA9yIsQrXjSZb7GElCwAJIBoL3AbdHAPsO/QnwDUhuR1vsQz7HomXf5/KmGbDh0cDJ6wcxnb/XJv4ELFHbaV9D/JjBeS1BkrXoLZ8inl9B0h33uwnJu+BPAPFE75gH+TxIvgfk1UtRclWAMto5caA20vAsn8Z/Iy3S/sBpcSq02ukOXgG+H7nlmr/G8Xvgv6H3vou0VkP7e6C9ttGA3TCnvIc596/Ac7hTdOA9qKtHGNs+RrugTdsw7iVuhJb7xqttH4A7oR0KbTGeTx8B8pN+NcdA+AnwD5Dz72OzORRJPhK8J4VHgw85lLSG7ek5ke/EQ4inO2J4D9r5wC3As/y0Iv2AZ3YxQIzmsx5EvkgTou/hi17qe/Qzn+W+u/ru7XuAmVD1rnoPIfQsPYv4VfpVQjNdpovfvCHknt/vSTNcen368U5nSKxP+gXka5PXz3qp76Iv5J1l/0j+Wfs3OvEtnWwaLrHb8Q/T/DL5+SK7f5ZH0Xc3+X2dPh/sdG26xHNcNDP2bU7WXar+/hX12NlfWo+t/2fqca6IS+mSLvmkHKmfNFgaIY2SyqTp0jxpqbRaekPaJu2U9kmHpeNSq3ReluUMOVMOyvnyAHmoXCiPkcfLk+QKeba8UF4qL5fXyLXyZnm7vFs+IB+Rm+UzcpviUHooHiWi9FEGKcOVYmWsUqZMpTXJXGWRskxZqaxX6pWtyg5lr3JIOaa0KOdUoXZRDTWgRtX+6hB1pDpaHaeWq9PVWeoCdYlao65WN6qb1AZ1l7pfbVJPqKfVCxqNRpqphTVLG6gN04q0Em2CNkWr1OZoz2hV2gptnVanbdEatT3aQe2odlI7q8XpiVq2yq2pVoU1k9g4q8yqtKYRm27NsGZb8y5q5xAbYs2y5loLifUn/TxrNrGR1hxrgVUKbSXrhcrhrGesJdYya7m1ylonFPtqbbTqrc2k51QmWdOsumR8Cq5rrMXWBquG9Kut9Vat9Ya1xWqwdli7SYKrtc86aDVZx6xmIcf2xg7EDltNxHbELljC2k9sa2x7bKe1l1h97ESsxdpBbH2sNvZGrIHYXGuztc1qpJw2xJbHVsU2EttKqW6w6lgb28ThiY2NLePUSVsXW83hiW2k0FQGYsmcEdtEobdbO4k1Wrs4bmKcSzss6yhuYtugp1xRPS3iUhCrsmqsPZxn1FEjwi6yllKJU2F3WnuIUTjrgEVjbEfJrePWSeuQdYTYCauF9GeItVpnrQsFglhbAYdnbbxALehS0EPIBRkFOuV7N7FuBYZ1zmoj1qMgk9MmpheYnDYxo8BTELTWEPMVhLn9iQUKIgX50OYUdON2Ixam0FFoIwWOgoBVgZiDFHchwmYWdLGGEjOtZmqzMRyzdYRKVJhMdxu0ekEG1eSAZK42WPm2NtZmyXauYmdi51O5KshButHYkdhxTte6wO1vpxvbHdvH6VpnrPNWnNOlPJXGtiVjHhV7w46ZS5UsEcVOLEgxU6nsmLm+UKJ8rkuU16KaPk0sWtDHOmqdsMNySyBsjt2CFNbHLXxR23BRu+miduPFmlydjLmOejrHHKb7Ykky3RXWAmiD1D9mJXM1xZoObcCaYJVzzBRviTUO5W20iqzRdnkp5ZHJdAdaQ5JhLat/MuawFU2ma1qBZIm6WQax/IJ+1EpdkmGPWILDxk5STZ/jsLHzBfmxFrorzsZaYxdix6hfyVZ6bH/sELEeVmZsV4x7tm6ZsYbYDu51VrBAjW2lsMIKFzhi9cRkSrUttv6idiW0Uas5tox7rBWwjsQWEQtaObGa2FxiYcsXWxKbgd4esTbEphI7anmsVbEyYk2xXVZ1bCyxQ7EGa3GsmNgB0h6ODcedEiaLQcQCViQWjfVJxhyIRRBzNGbEPMQiVn6sS4zuDyvHsmLHYw777s4flbf6f73PfIxrghCu+1z3ia7uNndCdDO3mn8SuvlpVo4YwSstWe1YXVGL/WNfLCqtAdZgaxiNrsXWGKuU2x7jcDmNxLafmfSXyuaQX0B+UZJf+nlp0rOrTvoV5Fcn/fqkryX/Rqfrli/wDZf4VP5S+dqRzEfqmvK7ye9LXg928k1Jfyzpm5Oe42slf5b8Bauc+lF5gYN8RlJOadFoV05jT8c1cImPfNZfrL/O9ZrMO907tu+X9AOTnuMZkqyfWrssBcOTZUrFNYDvSSGbaSa1ttnbjPJ6WAzufNIaVseyfr/+bVo5P6g/LK7QH9PniG76Fv3nQtff1z8QmU7FqYksp8uZKXzOiDNbBJxXOQeIoPNm50gRdt7lLBUR5yznYyLH+ZRzoYg6X3TWiHzny86VwnL+u3OD6ON8zVkr+jnfde4Q/Z3vOd8XA5x/dP5JXOP8i/OvYrAhG6q43kgz0sQw4ybjJnGjcZdxlxhujDPuFjcZFUaFuNl41HhUjDSeMp4StxjPGs+KQmONsUbcarxmvCaKjLeMt8TXjZ8bPxfFxjvGdnGb8Utjp7jdOGj8l7jDaDaaxZ1Gi/GpKDFOGafEWJfX5RV3uXq5gqLUFXaFxTjXta5rxd2u0a47xHjXZNd3xARXheshcb/rEdcjYrJrtutxMcU137VATHW94KoW01y1rlox3f2y+2XxoPsV9yuigk+rE/yN9ACZ7rTUPRY99k98s7hBzKO7dolYJpYLfirZKOrFVtEo9ogD4og4Lk6K0+KcaJNkWht2kwzJIwVpfWhJ/aVB0lBaIxZJo6Wx0nhpojSF1oozpNm0XnxGWiItk5ZLq6R10kapXtpMa8dGaZe0VzpA68ej0gmpRTojnZfiPA7klefRuJY3ATg1r+KipDiP5sy8kXk03ueNyStNStS8UrJlCyVvUt60vDKSjCTNVLJQ8kp6R/JGkYQsevsQi5lHI32enkczXV5Gni7k6Nk8Gt3zRB6NdNHm6FmWRGmmizZRbbCklXBftAmhaDbOy8/rRxgBz8ij0TPPgTgD4JFONv3A+0GeD5t8pBvhdAkzEMoB5DyYnC6hnYfWi/k0YW+yfbQU9hlsHy2GvYPt8wTsBfJ8gdqSsRa4Hria0S5ptBq4FKksAlKonCNRWs1GW6MzUeqKf3CPqvZITmN4u+hKY/hO0d3cY7YK/lYyKPcTmsiQJvCvpKP15Dd/ZV76UnbbyDeS30WeZuPoAfjONkrS43PwmFCjhz/HH/0C/eXwJ4SaU23zYPNFebrQRVQMpZqdSndnjaB2ze6X3S93Efml5KvxaQVJPdme3MXkq3JrwFfm0ro1d1m2yi53IvkpYLR6yp0TaWWXW547FdeKXGr5yKHIodxp5AeSr8QnWj1EGiONuRPJD8qdAj49t4himBCpZZfbhfxIsEySjorUsMvNyB2C6/DcAPqSZErUlyabP0Nfkqj/4LeScrW8kd8SKI0RdwiRM+dzvfwF+s/zypeyo+fiHHqOzllKvvoL7aWc1f/Uq5+juxxeI+9IfQ7UXZR3EZligBgjKsRS6im7RbPkkGgEyt6W3Uh+V3ZjOJ69N/tA9uHso8ROZLdk07MSf8o+HD5KMnK2lK7ns+M5NCbTp8bslnAjhSWXfYbD05XDnLgYdh2FXUe4Mbs+ezNdOT1a/1OKe7N3hZ/J3ht+hnBJ9rLs5XRdlU2WpN1Mdps5Z+EpsDwQnpJyqTyHiyjdIkLWj6frAf4ELaUStrLXhWkBy6llD6XrZv5EWspFdn24G33uRkjp4rqckbSc/qrQ6ex1odOElGdcZzNS71Sony6j3lptviks86fUZ4vRZxtN/MZYmibN4bdbSWOpnkXvXV+Zl76U3V7yNLL1Pkz+6Bfbe2m+6N3yOf7MF+j/372S4t4LF2US1agcCUQikfxIv8jAYGlkSGQ4Ro7J1AoCrXAbWUnmHiFp27SdGDXGiTuFCI/8yrz8peyKyVNPCJeSnyCUcDl8Sq9eYq9FDCGFp36Or/gC/eXwM4WDruwlz6yL8t6iUEwSC8UasZ3We220vhtE67kZtH6rp/Vai9xFjsoj5XJ5gbxabpCb5AuKqQxUSpRKpUqpU/YoJ9V0NUcdQfW2MLw4XBVYyi5cE14ZXhPeAF4XoJWHLQlUsAtvCNeFN4W3gm8P0MojPCs8N7wwMIYdaavYGnxNgNaA/DkwIOXClYiJ2cLAANJyqpkpl0yH2YZAph3Wfz7lwgPDQ8KTwAr950lLqfoPpxzHRNbMVvoP2yXyb0u50IWwCOczC2f4t5G2MjzLvyrlwqPCJeFxYGX+VaQto3TmpVx4GqyJhfb550Fb6J+YcmEdYZlN8k8kLcXlH5FyoQWhRaRlVu3neh5OYXNSjsKa4VFg+f4c0lIJ/ekpx7akJRYq9afbWt/JlAutCDWFh4PV+k6SNj8sfHt8e8L9GENdYM3M59tD2kjomK/OVxfOZwy2ULoBsLivTsih1rDuq/JVhU3G4N5wgOIiFqr20ZNdqDl01lfpqww7GIP1YUFxEQvN9FVy2NAiXwlZlLALLQ1VU36IBdf5SkjbFJrqG0j2A9mFKkIzQ0uZBZ/xDSTt7tA+nxk66DPZhcZQbTUxC07x0Uo6tCP0hvdCaLf3ArvQgFB5qIFZsIjHodAboS3eppQLeoJB0jKzvLT6D60P1XobUo5tQ2DBbt4G1npXd7jgEqrLWma9Tntp5R2q9i7ocKRbTfbMar0LoC3vcMHRwbGhFcx6bfLSs05ogXdkhwv2Dw4KjWHWq8ZLo1Oo1BvtcEEj6AlNYNZrljdK2mJvlw4XCoeioT5gA7xdhOxp6ex6Hep1JDQAbIiHRmTP3s6u19Ze24P1YAEPraY99Z1dr5W91gSXgQlPPWmXdXaBfb3agpAFjnmWYR7lVaDA2P4+PT+IrJysHH6LXVp52mzhSD1F+Cq+Mi9/KbuZ5Gmd56M1oW+RUHxL4VN69RJ7yVf9OX7FF+gvh6c1IV3ZS8aaDnlwJT5fQyvCxfRE3yAOiTNSBj21D5PG0ci+VNpAT+NN0jm5h5wvj5AnyLPkZXKtvFM+SqO7ofRRCpWJyhylRqlXdivHlbhqqv3VYnWSOk9doW5S96rNmqz5tIHaaG2qtlBbpW3R9mvUgwJHAycCLeYSc0ngTOA8X21HmuOBk4HTZqVZGTgXaOOr7UjTHGg1S20XOJtiZqkdmznUdhTr0JQjzaHAETNiu8DxFDNpzRvYFzhodrFdYHeKmdT3A42BXe7TtgvUp5ib1n6BDYE690HbBWpSzH2QNCsCq93bbBdYn2JuGvsDywLPuNfYLrA8xdz07BVYGFjsXmS7QCTF3PTUHZjpP+GebrtAlxRz05NZYGJgirvEdoHpKeamsS8wLlDmHmy7QEmKuQeTpti/3B10BwNjyJcysx1pRvjnuh1uR6CI/FBmtiON6W/NbMlsCQTIR5jZjjQ9Ar7M/Zn7A5nkuzCzHWnS/XrmlkC3zC2ZW/yTGG0nZP8F3/nMVQGRuSpzlb+Y0XakafFvzFzoP5O5kLA/o+1Ic8RflTnVfzxzKqHJaDvS7POXZ462na8lxTJHk2abvzFzoO38wRTLpLHfX5fpSzn/pg5OmtWZcsr5V3Rw0ixxNaecf14HF7Jrr3+Wa6/t/HM7OGk2dTh/cQcnzYoO5+/fwSmdgd7D3qOuea55/iHeFr7ajjRR7xF/H9ck1yT/AO9pvtqO1sZN3mOuYtt5m1PMRU8i3hMUR3/bec+kmKs/aU5SHKbtvIdSzGXasRlx23mbU8yI01i4xXvCOG4777wUM46TZp13uLHbdt5JKWbsJk2Vd4dRbzvv7hQzaOz3zfFuM2ps561PMaOGNFM8Z405xhxvHflNzGxHmhLPYWOiMdG7nvwKZrajXM/wFhmFRqF3Nvl5zGxHmmnefkYfo4+3kvwkZraj2DI80w3Dpxv0z9NoXPxHYeKeEucFn+q84Lzg2cBoO9Kc9jqcR73nnEedRz1LGW1HmmOeFudOb7Nzp3OnZwaj7UhzwLPdWWs7T2GKOWtJs90bcC6znWdOijlp7vN2cc5KOW+PDk5zZptzQsp5znVw0jQ7R6Scp6mDC9mZ7zngzLed53CKOfNJ06PDUUkv8s882/5MWFnRrDx6huU5+VQW9gmKIjGL3xOLvxRLRstFL9h74vT8SM9pxDVPi16r13rOAM8z0jXuVfVaWmNwSmnmVHMqpTTDnEHxP2o+SvP9fHM+5eAp8ymhmk+bTwvN/L75fZrzZfo82ZxM1g+aD5L1Q+ZDZP2sSfOu4HfcBvHXa51/X0U9RvGs8Kz2rMfT4M9QphfNFynsK+YrJFlnruMSyeMVi0NJcd7nnVGY9BHyo5LXy+VLktdxnWRlnfiky5jWNPKVnT7P6nSde4lPlXVUJ/5VlLuz71zuqn9ZufuYi80qcjXmSnONucGsI9xkboVsu7nT3EO4n/CQecQ8bp40T5M7Z7YRI58lZ6Vndcsysjx0Tc8KkpMhk+HouUqEL34T2l1oek9dF1fohu4SV+pu3SO66n49JHrqvfWIyNRz9Bxh6gX610SWfpV+tQjo1+iDREi/Th8ieutD9RtEtn6LXihy9a/rxSJPH6XfLmL6GH2iKMD3qkPNdPNKcZPZ1ewmbjF7mD3FrabTzBRfN7NMv7jd7GUGRYlJD2BirJlnFoi7zL7m18R48ypzgLjXvMYcJO4zB5vXiW/ReukGcb853LxJTDZvNkeKb5u3mt8UD3zm77P8q1KJ/m/BHVcnokKkt14efwXdf1eMuuzxRd3DyI10F7vH0LWU/AR3uXuqu8I90z3HvYD8HFpzLXVXu1e4VxOud9fCv+He4m5w76Aru93k99FKr8lNT3vURj3w6z2n7hSSnqlnCln36j6h6PSITS2erWcLh95f7y/S9IH6QJGuX6sPpj5wvX499YFh+jCRod+qF1FPuE2/TXTXR+t3iB76t/RyoZsZZoYwzO5md+EydVMXmabbNIXbDJgBkWWGzJDwmH3MPsJr9jf7C595tTlQ+M1rzWtFL3OIOUQEzWHmjSJkjjBHiN7mLWahiJjjzLtFDtqRx3WBcT1HSIqq8K/hM+Qu4kkh0kYkfZB8UfJ6ufzo5HVsJ9n4TnziZU4v5aeQn97p84xO19mX+FS5izrxr6IOOvvOdbDkX1buOUaDsYPcbmOfcZBck3HMaCZZE/lW46xxwSVcDmJNrgyj2aWzzmUaZ10BV8SVT9p+roGuIa7hxApdo1wlZDOEQp11jUs5iqfBVeaaRDjNVema5Zpr7HYtdC12VdHnGtdK10pKkUOvcW2gPOwjSR3FQMw5m1bPW0m3naQ7mVHsNa49xPe7DpH2iOs4rWFPOmeT/LTrHEnHufaQ7X7Xfv4WnfAsxdbmGmgcI3+W0h1CFgNphZ/Oa1UaYy/vWH2jfhON1Txi52PEtjBi98GI3Q8j9o0YsUdixC7CiF2MEXsURuwxGLHvwoj9TYzY4zBi34sReyJG7HKM2JMwYk/BiD0VI/Y0jNjT/7+bgSQpQ9qNGWeriAkhz/kK/EHyTZc9vqi+Sd9Kfru+U99DuF3frx8if0Q/TvKT9Pk0uUP6Ob3NKZNPd3ZzGk6PM+jMIWfpm5z99a3OQSSXyQ3VD1Hb9roMs88IfST1Ap6DemAO0jEHOTEHuTAHuTEHmZiDsjAHeTAH+TAH+TEHBTAH9cIcFMQcFMYc1BtzUARzUA7moFzMQXn/Z+fOjtMreK/jBGUzo2girFJ4Z2wVc5E65wInXNinWvzvz7NQJjkGEu4W2J/m4N1Ecd7TLl53NJJ8IWtVB7TvarzbNo5d+jlso/bhs7YpFNnIE/HujbDjFJ/kC/l+tpcXszyt0SFwFnyAz3/XRvKZufykp3yQ9hDZ47wVaYq6TCTPWHFoWjHhBLZXtqfNS52SQza8q+RR5uqVWhaH5dhI/pSQujzG7zvp8jGn7ihhSdqdif9kG94bpv4u0YPzz1yOJX7KbzLgcxkcZ8XHhLnqD0nSwDbKp46b+azzRB9OS+X9Ws/YYdu7AnlV04w62YTTQNK5NpSFvFNImYT9QvtxVsI0LjvJGyBv4DzzaaHqLdgx3lW5C/vH+G0is3iHvPYu5IPltZCPYTnv9Cb54yhRHmEj712nEnE898M+loznuwhr7/ceSvwG+eLeby2KN8qUY8fs+8qL2JXKe4CreYetuob3MUpTFC/kGSTpoTxC9lcmeHfxOt6dKF/HJ4CoMyB/kOVaH95t6MBZYxRKhmQ0S7hupXVKEPJsrlve2+l4PfEO+GzwxxHzPsTcSi2Vzntd0q5OLAfvBU4ldfye99g7qjhO4tXgVAp1u/o7ji2Zloy8fcrnufMZlMoY9e/cglwnUjf5I+Kf8m5zZR/3VbFf/gXahWJQ6/FOjlfAI9z/1Qjvz1QP8X5ytQXvGjkESSHvOtby4p8QDlI+QLvQrKGuV1uI/wm5ekd7mfjziZeQq4WoAcqD403ekeuo5J08ahvv5nU8x3tu1TbuJ+r9vL86bSZa52O+C5SZfBqIWC/xLt8a5vIpHgHsU0Lkv3Dqopi1ygPcsuqVLFdf4Df3qL8Dr+fUtSzm1PpXEX6Dd3erc3nPpJoHm7nYX13Kpw8oCxHzYu5vihe8iOtQXqvOJWxHfso4RbkUuzqDvI9OOsv1RhJ+U9G1LJFjvI9LXuzgffutdpxce/JveO83IfO1ODPlWsQ5FXF+hF2gD8D+Pd4RrYzh2JTbcPLCGJyNspnPLFA2g1/Lu0CVD9r4HIrJfCK/egxhb+baE+dQM1dzjYljiH8Dl1EsA9/JZRRzwZ9BGT/iMoqNkGzj0snTUK5WuxScZ8XL+ScsR/3zjt+VSKUv51zsZe54jk/AcazDfq3k2UM4b+iaRJlIvrFJXIO3d+Cukc6y3H5bj1yN93DgRCTJPqmwCWN7E8I2QV6SGAQsA+7Azjrmo2yEjX2aFc50k6ogr7I53oThtOMBzrcRNvOhfQ5p7YLE2ektI19LrGTk90bYb+uhXGEnM+Q4LU7KRagi2BfxqR+k5Rw6IZ+X1HIMJXhLzSTEM4tjEDg7zH4LEUnKIInyrMES+30hygf2+M/pOuyzw7bbswBjl8cwa9jliiNvH/MuYs0+lawbp2u/7UbSsLvYrmeV3/9hv4eJSsp8BlLEiVoOlCstHRxnq6lIMfk+oV2wx/lTyj5oI0CceKUWIp5B4OuB7yRTOcCjASRtQPss1KnJGbkW/ElCWsGDP0HYA3PNWWUsbJYDn8WMz7v31yh8Xslm7i32W82kRnvegXwhelEN9/NEC3ZTV0E7BrPVdoXPudDxLrRa5gIng5BlMe44tnkB2MbvNlOvorWDpK4Ef0pSKayl3I3etRT9ls9b2ZfgU2ZKuUTSqQTdWVqTchOj4FOBauQ5sOcTHyxuZbk1cb3gN68EYD8c9tmwrKS6mqLwLLCC0yVeAf5nSt2DPNyB/GwF/yHyU4T81HF+tI+R7sfJdIsgz6eyZHCKpLVTGQZ5T4r5O0jrB0jrO0jrB3hnWI1cApsB/C4BzKQPA7vw6kK7UeLzOP4mt2J1NB73NfXAxCZeoSmrMMM+ifeynAH/VJ5GNobMe9TXYaZulX4rkiemqRk8b2pl/LYV7V2OUysTCdhPJstG3u2sNLONwGmkWhnVoqTN5b3xjht5vUc2XK7FHD/J6V5zRMVoxLAW2rug3YYUaQXleJhnDccS7ieOVxWqH8cmvC3GoDZhexn2pZwi10zaFTz7pF3H/ZP4K+DdKVQD3YuEuLMMtqewGdzTmDsalP9GDNx2n/CoTrl6AjHn8El/3Pe013g2l0slPpfncbahensBsT2Eusrmvs3lojk0QvY7YN/KMSh/xHz9E57pyJLP0KliS+Vp7r3qJM4bxUZ3lro7adMTcuJqNp/cod7G9wvxbzDnmlc/5DOkqC0cnCLupiBy+yFs2mDzE+T8Fm5xeRtrtT5cJ9o5rEwM+R7UQ0/UA7Tqr5DnUuZYuxocD9nwOSOtyZZ9GPXJs2ozQq3k+5GQZkZVhk057vd3MYO/Gf8B4Vvgz0nXkbZe4vN6Ygqv8dJZq3wEPk3injwSNTxNeQErCj6T7n62p5ipZVUvJL+SfsR1pfAK5xOWSM/LXVEP3D9dLNHKOAbtNebqTajh8Qj7d4S9CS3+d5p/qLZVPt9hMPL5NsacSm5f+SDs53Lq8pt4D+Ip2AzjmlcGc+tQ3vjMkSZtE5eFU6F4+A1GL+IMprf5HpfXcovI7+GeOoiwaZD/ESevpSl8Ass6bhclnZ+qlGmokxA/I1BdVXE9oCfI3Dq0muqJ8oYoVC5q9RTXqnIn16HaEzW5imtSjnO5aG32P9VdeTiU3fufzTayjiVjjywxPDNoqJTIGmONkpLs6zBZWxkRlZKIIrtSIaLotVVUtlRSlCRblkRpEZHf8xwt3n59v9/3+8f7e6/fNZfPnHOf+7mf+5xzn89zn2eu60B6VARyFS7Qi3jEB7gXZUgr4idWGvgzB/xRBZEpBvx0QuRYLSC3A35+BX76IH7Ca2kBs8HO7g3AEoCVyDnCYK+3Efk/SfNeaB1kZ4dkm/AqiwCYBrAV6McjO0H0MIKYYkQTDY/hfOtCGWArRgXIm0B5P7JbxCQg+E0TKbeiZ4G1FNBqCiRNQDIMdEyBNVNEgliDMQEgkCCnccGacF46n4Z2Q56hyJlBsBw5EYBnHjAMcoocigegDECBb+VbQOcw0GkBOi1ADsrziUATKQvMQ0ACgb5DQP4B6COIAndBAX3UNwn4Re+rB0Dk1zrKXD4ot4DWnQAh0It0gFUAx0FfngD/3UCZAeTAPoYdSIB9zCpQzkVOw0RaYVywIwbKV0A5GCAN4AZgUwoZJbDSUcjuBpY/AHMHrCHxA1+7DrQeBBIfUAbRgqxZGMG8IJwPl0HOgMQtjMcQxLEC5AU6YAQw4P3Dgj/IioPRBrkLehTca6EXOgCLAN4COAquCgdzutDfnSDSnoCrwDhgnoH7CgFUB2gFRhVEJsjWUAjHohSQ7AieOyAB/30NhWRZcCsSyQpArvBNDtbCHLAM3jag5r0ABgJNW2CnHkj2A9QFV7WDMhHomAIkAjk4Lxd8kG8UETkVWgBk7CjiDYhJrGLlWBFtFD3FhWbDZDKJhbDoAgZOiTkhDlYWJW4shsiCgpxY8UqsaByaScWgcZnWkCWkvEgili0RLgYncsjHHLUTpng6ygfligqE/9YiH0h6kTGcQMzr+6s3jV+FDraPcrq42+LYokWeZjIFIyEmrg5iYi9lYjFoDIaAnKR6JzR8JTqI6MkADt+BuH54i2aB/QoBbmI34VgJmE3WZALEh1TYCXg7p10enn7ugXQ/Mi/EjQjZCGxWri6+dD8XsgQkhkjwBEEzT2cGfRfdLVBKj87wpzOcAj3hK6QhSaQdS1j6s93G09eVZB3o5OsvZaG3HpIQ5iKvhLQgKpmqoamhZg9XNRdVoYjSv8UzLogTaeck4MzMLazI8tDyhaqEn56nv4crQ2qDtb6UvjVtlYEGRZOkRqVSSZrrqSvJyyGZhR6J/bZH1q6MYE9nV4iJXrZ4hNEsKCwTzYOC5XgME41GFXLKiOY3xSgIrOyv89jGelAhaP0h/vy0C+qYHVmFBtfwXAV5j7gM9Icvp4u937V9nj57LYWU9ElUJuaTZelQqp3tnFlztsb1QadmdwGM8IbPsYKGmST8cdTl5kM3TFwaNWt6jyqN1kWrXVO6QSyelj/DCvlr9lQR6sPvm+xICejvraOXx68y7OPlvMSIcdgvq8f95OJ5afWYZwUh8YO9PHtPCkfLxIk8uhtwJ+9TsYVyhn2LfTH6biKzHv1FEOM65lcjjCIdYjlxeHsc9ShHRo3bSz/fxy8zTbpeJKbv3vdUyO0GeoWqufyM/eDnd+KvuXGfvPUlBPbdcDnV9eD6vEGrV+0uSQwWXkc5TDQHPCIskDg8pOLcOCGcQHvtJ0pxDJnnlUjiu7W15JmtGB4OEEPiMrilkFC4gIz656dWBv74Nzpfgr+UKhXXaZTyQDaIgiTODNoIGWcaZupH63kEBvqvUlV1Zvio+H6fJxVnuq+qv7cnIlX1Z9BdgpwDd6n+mEZkFsEkwlGpAqtAm1nZ4YXJwsIGbwJNIRPI6HsdwkSv+XaDkJCQ393AlfFvLAdCBMTf5bglEP67SSz7LwsSi0RJylbU84kcoyMDFlruibI36MdrdHq0zimbxSrnb1lLwXu1zDoI41Ig87b5JdlRL5bfwq1in6INoEtf+Om50l5qq+j7Kwa1mXuaC4WWtu5ZOyFSYFZSFESxkmVJju80eja84Uu8k9CW7fdKlDYlZVg53LwBybONPzGVDyutmzLR4BIxyyHffv6IuCxOnkNdh9qabiR2OOiw3tlORZuyfKqPQHpDqE+5yMVDoTlUlxp0wli3zgFHPl6bRBb7ZwdKFTbyp6szj6gq7KDyvnMntjN3dfVQvvSo5fTraEhXUbdSPOjNnUrDaCfnE8kxr0bfFmMuT085zPZE1KnvL7PsFpUcsxqbgWnsDUxjj3/SGFrn1IVxf9uvLWwLj5pfaSzsbyELGUh6YdETF7e7uEpZe7r7wVYXEZkmWZMCkWH2QoiMSiZDlG9VKCLy/4LIvqlj/4X6fySmro1HRrBejg2i2/AsWgOPuRMe1PceGc7lYhHZfGNNh2J3bLmH38aM/VVnqm2itS6809QQeiVe8KXI+zkHNFEh0ePz2eTMpmSjBpnY0i3y6tVJZMM0nlYdDQr168h781xibmlYVXjqOtmU+of0xweG9OIGnk+2vSpye4NbJZ14zu45tkv5jui8klb+ttpNX7uNe2xYEi+p9eTuI58zq7a9L0T2WHfQW8z3/fhj6PC4q2h6ObuY4v6T1ZP7dIM1l7Xv2fuh4npAel3iB2a0BvNcYDVGbcYmOipnec3F2O19Wo5y61OIL66/MogKrbSkYAzHBqYlq3GWQa/4U4NfRyULLMNnEaacvhOTEzwi2363ULGL2CptcNiXaVdElX0xuv1CvWO8eOvTPZAV0syHg6ko1xDS/3V+1CEKUmUhKFEoWpqQmpIbVVNjJ9kZImm4aLmR1NXIK0maLiudSFR1J9eV6hQXF1e4cTEDNvMNN7WVCW1GN1JV1ISErpuewUtCtgsMaA7BHJgJc2C0/n/FgHAww6EMR7EjBD/syCQ4ZiHAgfaLOJAGwSy4iAPX/jUO/Be2A39HeN4Dtv0dBHEpnWnfkRe0rm0Sd3zkcqYGOcKXzNv1lrU/nXYw6mU9cCvXpuLU7o9xjZGEJQG1n2crVVoEd71HedOWX/xQj2ckWmWEmCmeVGAnCz3t8Qu8VD9MEyw5zbKBRjQ2Vi4IG6+NMj/oZzhR09l2xNiTWzHyY151jqh0YXbe2niptI8Z/Nq7twS5TDzLiTpI4cdgvFxC0Oe0UkrHsxWMfQpkKQpr84+4KX/BdEaqyiScmLJznc99PGLJnvjpydyNxzek9Of0jM3Dxl1EDuyg9dU3WdMkv9if4Np6TzZy767hRt0QfkeyXGNxq/VhJ5upW3GM0+9uXxPffzH+IG5VcljhDojJUgUTXu4C4eGd1OSIIF0j/8pzjoA+8BwJcrEnJ5Vd0CJCWHjgySKQ8J+EHD/mhUyClBaIQfYnMVjR6TA7wBPl6ebp7BToKrU+KNCDzvAMDANsBkGaamQKhaylRoHZjPKtSkGq/yTR/icKu8LY4iACudSKn9khJaV7OtjaZ63oE3pL87tR76/JQrwve1YFRhLLVTMpY/MvbunSZB4zUF0advjYpiIp4w9vPQrMNsblVYdtDEg1ZHs2t7znbFDM/Yu7NhzoiOh6Xz25MrfRQf/55ULtlwoeycTzeYxdtu+EEwfmNBIZmU+CHSVC9COjNIUe7NrK8oe7VVzeFU/VZyKcXxMCFfuCVW26BaAtn9vids41NzoakC2uyxMGdKD7DEVehWV3qTTtTIp2/L0sTdYoB5otU2EFC6V8Y4e581Abaec7fe2hAnbUJ4Os9Idbj8pZD+++aDJpcJ+6RjO9LMQhTzg9rpnvuO2amwUcjthH3ylsOzwi9hAPwgwENHoexwJh4a9F9PVbJkHYSpwHh4MjMBriZ+X4tjcRRONYgGE4//0hwyBW5h6SaY/kDif1puxYnU+mn1tT1UmCRH4oCWBwSyTwKGtUELyf0UOt/xOXcRcwd+jYyicPLifMrujFWydtGciFLBa4zBiC6TNTL3N99Lq/zmU/mhlwaCMUBFjMZhGLGUEG0IZFLKb532RyyILRW7D6v/kLg0Zt0Vp7QM7g8mu6TgnlqtdrblW/fOOp145Bb0xXkzr0Cjm/No+QyDkyLXstUsKltxVoq5r+kZ1vm9bvX1lR9jnsqjFjau3o+gNNvUuEPZvz0qRIM5wW9bb3SP0mbVX+Q/lc2dg825cVhzfaTSbppr17PzHeHy2pvqbC9sxba5moFblMsZN9iWzik320z0ezmoYJeSdoDaJtxxlJKwJ8U4mfxd5aP3FvWTbvIH4v+2i1/JUwZ9sN2Zb3pkdyNtt2p2L0N6g6fnhW1M6k+M3mJhEGXnsOXchWrmlQ4uV2PXa662P2DL8ch6tm4rvdkiaVD3tthx+Enlrq0Kgh5Nh9Utz4GKmmUH2D2DivIBG1rVtjq3Rryl2O8Sjuo+a+3ASa9l5FozTGw/c+TTfH/HPsEuz2JcZlihph7afu57jjA/NWviGpCje8YlD5P9BL1rgzp62uxKkJuUpwH+7mfeHygd5q0P5IeCSsHlf26Ityj+Th9AL8F4K8TuHAdO+FAwaVbDsMXXfo0Ip1x2hvSoPDOvHqHL5i4WTJPm6b7sGsL4OGvIUuKfMWQip7a1mkd/clrZf3rDt5PKkxrjNVuojLIe1tdlG0R+QSL1JlsDdK/FThpNCeT0KRstdj7nvlG5JVzzzvD9DuQO3fafiwNaaxYukMNyPuZo72ZYyO17xn6qk+3nzeMqoF+5M6bYjJygbz98R3/hbyUAf8LfZP8DdEhdQhmLE11CAthL/JoKoGIdV/br//n9g7I8unpKfLKGHFXm8Vkd7qvv7bpy1lLApbu5fSZHnGH55/aFoYCEnxvWZ7bJMkaJwoqptQlOIAyT1DeQ/vqR6LZeOZ4salvI1tkWxWkz10dvKDu5jy7J6hGPHRIVpO1k0Z66a4Gf37HA+2X35QrIvLnj7nc9K9Q+G5gXVx9INBBQMV+YJo801WSwawyl+84uMhv0Pvt0BnZ/Y/SS4dlk7e/7mN8J693NrXqkw/PsMIZWLoxiev6JafPPCINcIke/rgeT5DAQ5mxsE3m0K/os+IW7BHoXghgzflL2QMKutJNhmXJULXk0NaUntWR57McsJcFecqmZ1KvYJuXbbRZn6ape6WFOd39r4Ej8j5f8fev90J/4m9eRezNyxBQREpC+QbEQ9FxP2efrOcc53+9vBk8oYVCmWZZOYVmu7a/IGNoOL6/4b1/9LeHR5r3uTDdQ7YDSu7R8oKQ7pawyzN0CUqgQFbfZcQLrXW7DleodLOn33Ud2eFHaaZJkWwON29W6fPrvLy5jNiveLo6ILK0MkjD8ZWo8f7ao7jWRrijPreWgt2m19KGBiK83ocfvNV4iSrahR25MQK2WX+Xz7NDoSeVuGaYuvzr1pKO3vMG89IqsjSSnMn3bbkHt3psE4o5YjUuj42ImW6hWwSTNZWYnA2jPprz0fhCT238E7H3nZUCL+mHTlwW0Npe07t66p9nLp72q0Z0uNQU2Woq8NWtDBegLvtmUDKxzXX3TaXklSHpqOiWyxth8/6J/oUaJm2fwqrvbh0907FiexURXXWEOLORm0JX0nmW867ypX39UoHp8f2Xe3PzQ/UqKDdDpDhlwvmXGN1NMDeQE+gqrS02My9IUN3PjxMOjxdEHIb1uXfTmxIXyb9QG9EaaTyg1GLcnsnJdxUboWRrKP9qO3EuRenzzatoldHyAey8o0HS9emMm/K21wr8dKOzQp2KvPLIpyrvWj4lp8+d5jic+Vrj2XDUZlGt+qz4of4XTDapMtbjlcMSA9eLW5yLgu1YWlfr2JRkFicF3qpNPNUEPFpwiFC0DJVSj67X+bWo8trMycONkk/eS1h3nhm3PjlFNqVHsu5r8Gz4ZXf6PnkVrLiPPftrQ6dZqJZnTOq6etUNgl5NxJy5shMHLyEcecxaDQEL7d/Ll/+/XuTn2+RMyPqkXTtW/xyYMlLFr+ihh34WeMkc0OLWwWRZPD7hTgyTErE2rJC59EzA+0H9F+Jhd9OrtJTsoZcFl2yhGwL2WSuCFdAmaE8Uc4oBooO3nK7oQJRUigbVBjKH665w3InuOSBCsuSC5f9l4vVJsyf7s5w8vcIU/3loYJjwrtJ1nAVnp2s5fPnghgWHUtT73dfYKql+odxK0UWpZeXvnFW4mkusQni8uko39c8BfFS/bnTGYpKnBL30jZO9FyoMQ9ARV6y5z8rlNVfOXvea8VsUc5o77G5ldKU2dbNdSk3pNomiqcV4jxEVvmacfcH8I1R5FsssoPxNL6QINm+rKPjdYHQQMPk9pyQi1z6Rt6cOrakj9XLzz7v4hNMk7kvyKHdFxf3bGX+24fXIjrL2MLUr+xeIf66j0/nvNy0wYlwDa4z67wj/BnO+wfCL9jyfkwv30GVUJS85k4bjbE4VxAjMRd77GXD5SrdodUHSBl3bQ51zj3uVTR7kVi1I7nlVslg/pEsJkYBYmJkf84RK5mJEYRFfCAqj/1jWcDvf5JYFJPboKWLQ5Lz508raPjmP1pYyDzIazaIAic2murqyGu2XyMyows9886qb1uNo+7eWxxEtRhzvl+zMSRWmKsESjpEDvmoiTFPxybwjMoVRqS/2tQn1G9ZG5CgHR3+pkW7yvqu4ugfpiiR2plG52WbD4ZhE+8QXMOJL8KK0n1x25S6pe4wKtKUJdSJn02OXy+qyS9+Y80pmnL1mFxHwH6u61vlr92tFBPOG3zfVH6280ibwHXf4j8OVZyfTWmv6phMeLR8qtzYhD38kdmQ/fo2u2Tc7eMnWOwtNUltbVTRrydiBm7FjQoWSSnGQu88eKqbAo95yY4+NTs39h67RaOvLWjkqV3qakV3L8bgyGrr/KM8E5bPtZP7uM5/Tmgw1ztkxW63ulIq+KtJ1JBEn79hOW/S0j1NS8K8T86OzVwkOWraMf8HJf0ykg0KZW5kc3RyZWFtDQplbmRvYmoNCjE5IDAgb2JqDQo8PC9UeXBlL1hSZWYvU2l6ZSAxOS9XWyAxIDQgMl0gL1Jvb3QgMSAwIFIvSW5mbyA5IDAgUi9JRFs8NUQyNDU1Njg4M0VDQUE0MUIwMzQ3QTZGMDMyMUE0MEM+PDVEMjQ1NTY4ODNFQ0FBNDFCMDM0N0E2RjAzMjFBNDBDPl0gL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNzg+Pg0Kc3RyZWFtDQp4nGNgAIL//xmBpCADA4iqhVBbwRTjYTDF9AhMMXeBKZZKCLUOQj0GygM1CDAwQShmCMUCoRghFFQJK1AD6wmwPnYPMMWpycAAABqrCWINCmVuZHN0cmVhbQ0KZW5kb2JqDQp4cmVmDQowIDIwDQowMDAwMDAwMDEwIDY1NTM1IGYNCjAwMDAwMDAwMTcgMDAwMDAgbg0KMDAwMDAwMDEyNSAwMDAwMCBuDQowMDAwMDAwMTgxIDAwMDAwIG4NCjAwMDAwMDA0NTEgMDAwMDAgbg0KMDAwMDAwMDczOCAwMDAwMCBuDQowMDAwMDAwOTA2IDAwMDAwIG4NCjAwMDAwMDExNDUgMDAwMDAgbg0KMDAwMDAwMTE5OCAwMDAwMCBuDQowMDAwMDAxMjUxIDAwMDAwIG4NCjAwMDAwMDAwMTEgNjU1MzUgZg0KMDAwMDAwMDAxMiA2NTUzNSBmDQowMDAwMDAwMDEzIDY1NTM1IGYNCjAwMDAwMDAwMTQgNjU1MzUgZg0KMDAwMDAwMDAxNSA2NTUzNSBmDQowMDAwMDAwMDE2IDY1NTM1IGYNCjAwMDAwMDAwMDAgNjU1MzUgZg0KMDAwMDAwMTg2NCAwMDAwMCBuDQowMDAwMDAyMzQ1IDAwMDAwIG4NCjAwMDAxNDkxMTMgMDAwMDAgbg0KdHJhaWxlcg0KPDwvU2l6ZSAyMC9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDVEMjQ1NTY4ODNFQ0FBNDFCMDM0N0E2RjAzMjFBNDBDPjw1RDI0NTU2ODgzRUNBQTQxQjAzNDdBNkYwMzIxQTQwQz5dID4+DQpzdGFydHhyZWYNCjE0OTM5MA0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyMC9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDVEMjQ1NTY4ODNFQ0FBNDFCMDM0N0E2RjAzMjFBNDBDPjw1RDI0NTU2ODgzRUNBQTQxQjAzNDdBNkYwMzIxQTQwQz5dIC9QcmV2IDE0OTM5MC9YUmVmU3RtIDE0OTExMz4+DQpzdGFydHhyZWYNCjE0OTk0Nw0KJSVFT0Y=</ram:AttachmentBinaryObject>
+            </ram:AdditionalReferencedDocument>
+        </ram:ApplicableHeaderTradeAgreement>
+        <ram:ApplicableHeaderTradeDelivery/>
+        <ram:ApplicableHeaderTradeSettlement>
+            <ram:CreditorReferenceID>[Bank assigned creditor identifier]</ram:CreditorReferenceID>
+            <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
+            <ram:SpecifiedTradeSettlementPaymentMeans>
+                <ram:TypeCode>59</ram:TypeCode>
+                <ram:PayerPartyDebtorFinancialAccount>
+                    <ram:IBANID>DE75512108001245126199</ram:IBANID>
+                </ram:PayerPartyDebtorFinancialAccount>
+            </ram:SpecifiedTradeSettlementPaymentMeans>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>8489.58</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>44682.01</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>19</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:BillingSpecifiedPeriod>
+                <ram:StartDateTime>
+                    <udt:DateTimeString format="102">20160101</udt:DateTimeString>
+                </ram:StartDateTime>
+                <ram:EndDateTime>
+                    <udt:DateTimeString format="102">20160131</udt:DateTimeString>
+                </ram:EndDateTime>
+            </ram:BillingSpecifiedPeriod>
+            <ram:SpecifiedTradePaymentTerms>
+                <ram:Description>Dieses Guthaben werden wir auf Ihr Konto erstatten.</ram:Description>
+                <ram:DueDateDateTime>
+                    <udt:DateTimeString format="102">20190314</udt:DateTimeString>
+                </ram:DueDateDateTime>
+                <ram:DirectDebitMandateID>[Mandate reference identifier]</ram:DirectDebitMandateID>
+            </ram:SpecifiedTradePaymentTerms>
+            <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+                <ram:LineTotalAmount>44682.01</ram:LineTotalAmount>
+                <ram:TaxBasisTotalAmount>44682.01</ram:TaxBasisTotalAmount>
+                <ram:TaxTotalAmount currencyID="EUR">8489.58</ram:TaxTotalAmount>
+                <ram:GrandTotalAmount>53171.59</ram:GrandTotalAmount>
+                <ram:DuePayableAmount>53171.59</ram:DuePayableAmount>
+            </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+        </ram:ApplicableHeaderTradeSettlement>
+    </rsm:SupplyChainTradeTransaction>
+</rsm:CrossIndustryInvoice>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/KositValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/KositValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/KositValidator.php	(revision 8435)
@@ -0,0 +1,60 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentReader;
+use horstoeko\zugferd\ZugferdKositValidator;
+use horstoeko\zugferd\ZugferdDocumentPdfReader;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+/**
+ * Helper function for outputting the errors
+ *
+ * @param ZugferdKositValidator $kositValidator
+ * @return void
+ */
+function showValidationResult(ZugferdKositValidator $kositValidator)
+{
+    foreach ($kositValidator->getProcessOutput() as $output) {
+        echo $output . PHP_EOL;
+    }
+
+    if ($kositValidator->hasProcessErrors()) {
+        echo "\033[01;31mProcess failed\e[0m\n";
+        foreach ($kositValidator->getProcessErrors() as $processError) {
+            echo " - " . $processError . PHP_EOL;
+        }
+    } elseif ($kositValidator->hasValidationErrors()) {
+        echo "\033[01;31mValidation failed\e[0m\n";
+        foreach ($kositValidator->getValidationErrors() as $validationError) {
+            echo " - " . $validationError . PHP_EOL;
+        }
+    } else {
+        echo "\033[01;32mValidation passed\e[0m\n";
+    }
+}
+
+/* ----------------------------------------------------------------------------------
+   - Get instance of the Validator
+   ---------------------------------------------------------------------------------- */
+
+$kositValidator = new ZugferdKositValidator();
+
+/* ----------------------------------------------------------------------------------
+   - Validation of a document read by ZugferdDocumentPdfReader
+   ---------------------------------------------------------------------------------- */
+
+$document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/invoice_1.pdf");
+$kositValidator->setDocument($document)->disableCleanup()->validate();
+
+showValidationResult($kositValidator);
+
+/* ----------------------------------------------------------------------------------
+   - Validation of a document read by ZugferdDocumentReader
+   ---------------------------------------------------------------------------------- */
+
+$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../tests/assets/en16931_simple_invalid.xml");
+
+$kositValidator = new ZugferdKositValidator($document);
+$kositValidator->setDocument($document)->disableCleanup()->validate();
+
+showValidationResult($kositValidator);
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnung2Simple.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnung2Simple.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnung2Simple.php	(revision 8435)
@@ -0,0 +1,45 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentBuilder;
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\codelists\ZugferdPaymentMeans;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_XRECHNUNG_2);
+$document
+    ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->addDocumentNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, null, 'REG')
+    ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+    ->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null)
+    ->setDocumentSeller("Lieferant GmbH", "549910")
+    ->addDocumentSellerGlobalId("4000001123452", "0088")
+    ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+    ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+    ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+    ->setDocumentSellerContact("Heinz MÃŒkker", "Buchhaltung", "+49-111-2222222", "+49-111-3333333","info@lieferant.de")
+    ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+    ->setDocumentBuyerReference("34676-342323")
+    ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+    ->addDocumentTax("S", "VAT", 275.0, 19.25, 7.0)
+    ->addDocumentTax("S", "VAT", 198.0, 37.62, 19.0)
+    ->setDocumentSummation(529.87, 529.87, 473.00, 0.0, 0.0, 473.00, 56.87, null, 0.0)
+    ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+    ->addNewPosition("1")
+    ->setDocumentPositionNote("Bemerkung zu Zeile 1")
+    ->setDocumentPositionProductDetails("TrennblÃ€tter A4", "", "TB100A4")
+    ->setDocumentPositionGrossPrice(9.9000)
+    ->setDocumentPositionNetPrice(9.9000)
+    ->setDocumentPositionQuantity(20, "H87")
+    ->addDocumentPositionTax('S', 'VAT', 19)
+    ->setDocumentPositionLineSummation(198.0)
+    ->addNewPosition("2")
+    ->setDocumentPositionNote("Bemerkung zu Zeile 2")
+    ->setDocumentPositionProductDetails("Joghurt Banane", "", "ARNR2", null, "0160", "4000050986428")
+    ->SetDocumentPositionGrossPrice(5.5000)
+    ->SetDocumentPositionNetPrice(5.5000)
+    ->SetDocumentPositionQuantity(50, "H87")
+    ->AddDocumentPositionTax('S', 'VAT', 7)
+    ->SetDocumentPositionLineSummation(275.0)
+    ->writeFile(dirname(__FILE__) . "/factur-x.xml");
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnung2SimpleQuick.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnung2SimpleQuick.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnung2SimpleQuick.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+use horstoeko\zugferd\quick\ZugferdQuickDescriptorXRechnung2;
+use horstoeko\zugferd\codelists\ZugferdTextSubjectCodeQualifiers;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = (ZugferdQuickDescriptorXRechnung2::doCreateNew())
+    ->doCreateInvoice("471102", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->doSetPaymentTerms("Zahlbar sofort", new \DateTime('+3 days'))
+    ->doAddNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->doAddNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, ZugferdTextSubjectCodeQualifiers::UNTDID_4451_REG)
+    ->doSetBuyer("Kunden AG Mitte", "69876", "Frankfurt", "LieferantenstraÃe 20", "DE", "34676-342323")
+    ->doSetBuyerContact("Hans Miller")
+    ->doSetBuyerElectronicCommunication("kunde@kunde.de")
+    ->doSetSeller("Lieferant GmbH", "80333", "MÃŒnchen", "LieferantenstraÃe 20", "DE", null, "4000001123452", "0088")
+    ->doAddSellerTaxRegistration("FC", "201/113/40209")
+    ->doAddSellerTaxRegistration("VA", "DE123456789")
+    ->doSetSellerContact("Horst Meier", null, "horst@nowhere.all", "+49-0000-8888888")
+    ->doSetSellerElectronicCommunication("lieferant@lieferant.de")
+    ->doAddTradeLineItem("1", "ZitronensÃ€ure 100ml", 1.0, 100.0, "H87", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("2", "Gelierzucker Extra 250g", 1.45, 50.0, "H87", 0.0, "", "S", "VAT", 7.0)
+    ->doAddTradeLineItem("3", "Gelierzucker Extra 250g", 0.0, 10.0, "H87", 0.0, "", "S", "VAT", 7.0)
+    ->doSetDocumentPositionNote("Artikel wie vereinbart ohne Berechnung")
+    ->doAddTradeLineItem("4", "Bierbrau Pils 20/0500", 12.0, 15.0, "XBC", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("5", "Leergutpfand 20 x 0,5l", 3.10, 15.0, "C62", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("6", "Mischpalette Joghurt Karton 3 x 20", 29.10, 2.0, "C62", 0.0, "", "S", "VAT", 7.0)
+    ->doSetPaymentMeansForCreditTransfer(true, "DE12500105170648489890")
+    ->doAddTradeAllowanceCharge(-5.60, "Rechnungsrabatt 1", "S", "VAT", 19.0)
+    ->doAddTradeAllowanceCharge(-2.61, "Rechnungsrabatt 1", "S", "VAT", 7.0)
+    ->doAddTradeAllowanceCharge(-2.50, "Rechnungsrabatt 2", "S", "VAT", 19.0)
+    ->doAddTradeAllowanceCharge(-0.50, "Rechnungsrabatt 2", "S", "VAT", 7.0)
+    ->writeFile(dirname(__FILE__) . "/factur-x.xml");
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnung3Simple.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnung3Simple.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnung3Simple.php	(revision 8435)
@@ -0,0 +1,45 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentBuilder;
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\codelists\ZugferdPaymentMeans;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_XRECHNUNG_3);
+$document
+    ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->addDocumentNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, null, 'REG')
+    ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+    ->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null)
+    ->setDocumentSeller("Lieferant GmbH", "549910")
+    ->addDocumentSellerGlobalId("4000001123452", "0088")
+    ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+    ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+    ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+    ->setDocumentSellerContact("Heinz MÃŒkker", "Buchhaltung", "+49-111-2222222", "+49-111-3333333","info@lieferant.de")
+    ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+    ->setDocumentBuyerReference("34676-342323")
+    ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+    ->addDocumentTax("S", "VAT", 275.0, 19.25, 7.0)
+    ->addDocumentTax("S", "VAT", 198.0, 37.62, 19.0)
+    ->setDocumentSummation(529.87, 529.87, 473.00, 0.0, 0.0, 473.00, 56.87, null, 0.0)
+    ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+    ->addNewPosition("1")
+    ->setDocumentPositionNote("Bemerkung zu Zeile 1")
+    ->setDocumentPositionProductDetails("TrennblÃ€tter A4", "", "TB100A4")
+    ->setDocumentPositionGrossPrice(9.9000)
+    ->setDocumentPositionNetPrice(9.9000)
+    ->setDocumentPositionQuantity(20, "H87")
+    ->addDocumentPositionTax('S', 'VAT', 19)
+    ->setDocumentPositionLineSummation(198.0)
+    ->addNewPosition("2")
+    ->setDocumentPositionNote("Bemerkung zu Zeile 2")
+    ->setDocumentPositionProductDetails("Joghurt Banane", "", "ARNR2", null, "0160", "4000050986428")
+    ->SetDocumentPositionGrossPrice(5.5000)
+    ->SetDocumentPositionNetPrice(5.5000)
+    ->SetDocumentPositionQuantity(50, "H87")
+    ->AddDocumentPositionTax('S', 'VAT', 7)
+    ->SetDocumentPositionLineSummation(275.0)
+    ->writeFile(dirname(__FILE__) . "/factur-x.xml");
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnung3SimpleQuick.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnung3SimpleQuick.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnung3SimpleQuick.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+use horstoeko\zugferd\quick\ZugferdQuickDescriptorXRechnung3;
+use horstoeko\zugferd\codelists\ZugferdTextSubjectCodeQualifiers;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = (ZugferdQuickDescriptorXRechnung3::doCreateNew())
+    ->doCreateInvoice("471102", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->doSetPaymentTerms("Zahlbar sofort", new \DateTime('+3 days'))
+    ->doAddNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->doAddNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, ZugferdTextSubjectCodeQualifiers::UNTDID_4451_REG)
+    ->doSetBuyer("Kunden AG Mitte", "69876", "Frankfurt", "LieferantenstraÃe 20", "DE", "34676-342323")
+    ->doSetBuyerContact("Hans Miller")
+    ->doSetBuyerElectronicCommunication("kunde@kunde.de")
+    ->doSetSeller("Lieferant GmbH", "80333", "MÃŒnchen", "LieferantenstraÃe 20", "DE", null, "4000001123452", "0088")
+    ->doAddSellerTaxRegistration("FC", "201/113/40209")
+    ->doAddSellerTaxRegistration("VA", "DE123456789")
+    ->doSetSellerContact("Horst Meier", null, "horst@nowhere.all", "+49-0000-8888888")
+    ->doSetSellerElectronicCommunication("lieferant@lieferant.de")
+    ->doAddTradeLineItem("1", "ZitronensÃ€ure 100ml", 1.0, 100.0, "H87", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("2", "Gelierzucker Extra 250g", 1.45, 50.0, "H87", 0.0, "", "S", "VAT", 7.0)
+    ->doAddTradeLineItem("3", "Gelierzucker Extra 250g", 0.0, 10.0, "H87", 0.0, "", "S", "VAT", 7.0)
+    ->doSetDocumentPositionNote("Artikel wie vereinbart ohne Berechnung")
+    ->doAddTradeLineItem("4", "Bierbrau Pils 20/0500", 12.0, 15.0, "XBC", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("5", "Leergutpfand 20 x 0,5l", 3.10, 15.0, "C62", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("6", "Mischpalette Joghurt Karton 3 x 20", 29.10, 2.0, "C62", 0.0, "", "S", "VAT", 7.0)
+    ->doSetPaymentMeansForCreditTransfer(true, "DE12500105170648489890")
+    ->doAddTradeAllowanceCharge(-5.60, "Rechnungsrabatt 1", "S", "VAT", 19.0)
+    ->doAddTradeAllowanceCharge(-2.61, "Rechnungsrabatt 1", "S", "VAT", 7.0)
+    ->doAddTradeAllowanceCharge(-2.50, "Rechnungsrabatt 2", "S", "VAT", 19.0)
+    ->doAddTradeAllowanceCharge(-0.50, "Rechnungsrabatt 2", "S", "VAT", 7.0)
+    ->writeFile(dirname(__FILE__) . "/factur-x.xml");
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnungSimple.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnungSimple.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnungSimple.php	(revision 8435)
@@ -0,0 +1,45 @@
+<?php
+
+use horstoeko\zugferd\ZugferdDocumentBuilder;
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\codelists\ZugferdPaymentMeans;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_XRECHNUNG);
+$document
+    ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->addDocumentNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, null, 'REG')
+    ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+    ->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null)
+    ->setDocumentSeller("Lieferant GmbH", "549910")
+    ->addDocumentSellerGlobalId("4000001123452", "0088")
+    ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+    ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+    ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+    ->setDocumentSellerContact("Heinz MÃŒkker", "Buchhaltung", "+49-111-2222222", "+49-111-3333333","info@lieferant.de")
+    ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+    ->setDocumentBuyerReference("34676-342323")
+    ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+    ->addDocumentTax("S", "VAT", 275.0, 19.25, 7.0)
+    ->addDocumentTax("S", "VAT", 198.0, 37.62, 19.0)
+    ->setDocumentSummation(529.87, 529.87, 473.00, 0.0, 0.0, 473.00, 56.87, null, 0.0)
+    ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+    ->addNewPosition("1")
+    ->setDocumentPositionNote("Bemerkung zu Zeile 1")
+    ->setDocumentPositionProductDetails("TrennblÃ€tter A4", "", "TB100A4")
+    ->setDocumentPositionGrossPrice(9.9000)
+    ->setDocumentPositionNetPrice(9.9000)
+    ->setDocumentPositionQuantity(20, "H87")
+    ->addDocumentPositionTax('S', 'VAT', 19)
+    ->setDocumentPositionLineSummation(198.0)
+    ->addNewPosition("2")
+    ->setDocumentPositionNote("Bemerkung zu Zeile 2")
+    ->setDocumentPositionProductDetails("Joghurt Banane", "", "ARNR2", null, "0160", "4000050986428")
+    ->SetDocumentPositionGrossPrice(5.5000)
+    ->SetDocumentPositionNetPrice(5.5000)
+    ->SetDocumentPositionQuantity(50, "H87")
+    ->AddDocumentPositionTax('S', 'VAT', 7)
+    ->SetDocumentPositionLineSummation(275.0)
+    ->writeFile(dirname(__FILE__) . "/factur-x.xml");
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnungSimpleQuick.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnungSimpleQuick.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XRechnungSimpleQuick.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+use horstoeko\zugferd\quick\ZugferdQuickDescriptorXRechnung;
+use horstoeko\zugferd\codelists\ZugferdTextSubjectCodeQualifiers;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+$document = (ZugferdQuickDescriptorXRechnung::doCreateNew())
+    ->doCreateInvoice("471102", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+    ->doSetPaymentTerms("Zahlbar sofort", new \DateTime('+3 days'))
+    ->doAddNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+    ->doAddNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, ZugferdTextSubjectCodeQualifiers::UNTDID_4451_REG)
+    ->doSetBuyer("Kunden AG Mitte", "69876", "Frankfurt", "LieferantenstraÃe 20", "DE", "34676-342323")
+    ->doSetBuyerContact("Hans Miller")
+    ->doSetBuyerElectronicCommunication("kunde@kunde.de")
+    ->doSetSeller("Lieferant GmbH", "80333", "MÃŒnchen", "LieferantenstraÃe 20", "DE", null, "4000001123452", "0088")
+    ->doAddSellerTaxRegistration("FC", "201/113/40209")
+    ->doAddSellerTaxRegistration("VA", "DE123456789")
+    ->doSetSellerContact("Horst Meier", null, "horst@nowhere.all", "+49-0000-8888888")
+    ->doSetSellerElectronicCommunication("lieferant@lieferant.de")
+    ->doAddTradeLineItem("1", "ZitronensÃ€ure 100ml", 1.0, 100.0, "H87", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("2", "Gelierzucker Extra 250g", 1.45, 50.0, "H87", 0.0, "", "S", "VAT", 7.0)
+    ->doAddTradeLineItem("3", "Gelierzucker Extra 250g", 0.0, 10.0, "H87", 0.0, "", "S", "VAT", 7.0)
+    ->doSetDocumentPositionNote("Artikel wie vereinbart ohne Berechnung")
+    ->doAddTradeLineItem("4", "Bierbrau Pils 20/0500", 12.0, 15.0, "XBC", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("5", "Leergutpfand 20 x 0,5l", 3.10, 15.0, "C62", 0.0, "", "S", "VAT", 19.0)
+    ->doAddTradeLineItem("6", "Mischpalette Joghurt Karton 3 x 20", 29.10, 2.0, "C62", 0.0, "", "S", "VAT", 7.0)
+    ->doSetPaymentMeansForCreditTransfer(true, "DE12500105170648489890")
+    ->doAddTradeAllowanceCharge(-5.60, "Rechnungsrabatt 1", "S", "VAT", 19.0)
+    ->doAddTradeAllowanceCharge(-2.61, "Rechnungsrabatt 1", "S", "VAT", 7.0)
+    ->doAddTradeAllowanceCharge(-2.50, "Rechnungsrabatt 2", "S", "VAT", 19.0)
+    ->doAddTradeAllowanceCharge(-0.50, "Rechnungsrabatt 2", "S", "VAT", 7.0)
+    ->writeFile(dirname(__FILE__) . "/factur-x.xml");
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XsdValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XsdValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/XsdValidator.php	(revision 8435)
@@ -0,0 +1,41 @@
+<?php
+
+use horstoeko\zugferd\ZugferdXsdValidator;
+use horstoeko\zugferd\ZugferdDocumentReader;
+use horstoeko\zugferd\ZugferdDocumentPdfReader;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+function showValidationResult($xsdValidator)
+{
+    if ($xsdValidator->validationFailed()) {
+        echo "\033[01;31mValidation failed\e[0m\n";
+        foreach ($xsdValidator->validationErrors() as $validationError) {
+            echo $validationError . PHP_EOL;
+        }
+    } else {
+        echo "\033[01;32mValidation passed\e[0m\n";
+    }
+}
+
+/**
+ * Invalid XML
+ */
+
+$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/InvoiceXsdInvalid.xml");
+
+$xsdValidator = new ZugferdXsdValidator($document);
+$xsdValidator->validate();
+
+showValidationResult($xsdValidator);
+
+/**
+ * Valid XML
+ */
+
+$document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/invoice_1.pdf");
+
+$xsdValidator = new ZugferdXsdValidator($document);
+$xsdValidator->validate();
+
+showValidationResult($xsdValidator);
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/invoice_1.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/invoice_1.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/examples/invoice_1.xml	(revision 8435)
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rsm:CrossIndustryInvoice xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:10" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <rsm:ExchangedDocumentContext>
+        <ram:GuidelineSpecifiedDocumentContextParameter>
+            <ram:ID>urn:cen.eu:en16931:2017</ram:ID>
+        </ram:GuidelineSpecifiedDocumentContextParameter>
+    </rsm:ExchangedDocumentContext>
+    <rsm:ExchangedDocument>
+        <ram:ID>471102</ram:ID>
+        <ram:TypeCode>380</ram:TypeCode>
+        <ram:IssueDateTime>
+            <udt:DateTimeString format="102">20180305</udt:DateTimeString>
+        </ram:IssueDateTime>
+        <ram:IncludedNote>
+            <ram:Content>Rechnung gemÃ€Ã Bestellung vom 01.03.2018.</ram:Content>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>Lieferant GmbH
+                LieferantenstraÃe 20
+                80333 MÃŒnchen
+                Deutschland
+                GeschÃ€ftsfÃŒhrer: Hans Muster
+                Handelsregisternummer: H A 123
+            </ram:Content>
+            <ram:SubjectCode>REG</ram:SubjectCode>
+        </ram:IncludedNote>
+    </rsm:ExchangedDocument>
+    <rsm:SupplyChainTradeTransaction>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>1</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0160">4012345001235</ram:GlobalID>
+                <ram:SellerAssignedID>TB100A4</ram:SellerAssignedID>
+                <ram:Name>TrennblÃ€tter A4</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>9.90</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>9.90</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="H87">20.00</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>198.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>2</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0160">4000050986428</ram:GlobalID>
+                <ram:SellerAssignedID>ARNR2</ram:SellerAssignedID>
+                <ram:Name>Joghurt Banane</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>5.50</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>5.50</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="H87">50.00</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>275.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:ApplicableHeaderTradeAgreement>
+            <ram:BuyerReference>34676-342323</ram:BuyerReference>
+            <ram:SellerTradeParty>
+                <ram:ID>549910</ram:ID>
+                <ram:GlobalID schemeID="0088">4000001123452</ram:GlobalID>
+                <ram:Name>Lieferant GmbH</ram:Name>
+                <ram:DefinedTradeContact>
+                    <ram:PersonName>Heinz MÃŒkker</ram:PersonName>
+                    <ram:DepartmentName>Buchhaltung</ram:DepartmentName>
+                    <ram:TelephoneUniversalCommunication>
+                        <ram:CompleteNumber>+49-111-2222222</ram:CompleteNumber>
+                    </ram:TelephoneUniversalCommunication>
+                    <ram:EmailURIUniversalCommunication>
+                        <ram:URIID>info@lieferant.de</ram:URIID>
+                    </ram:EmailURIUniversalCommunication>
+                </ram:DefinedTradeContact>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>80333</ram:PostcodeCode>
+                    <ram:LineOne>LieferantenstraÃe 20</ram:LineOne>
+                    <ram:CityName>MÃŒnchen</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="FC">201/113/40209</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="VA">DE123456789</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+            </ram:SellerTradeParty>
+            <ram:BuyerTradeParty>
+                <ram:ID>GE2020211</ram:ID>
+                <ram:Name>Kunden AG Mitte</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>69876</ram:PostcodeCode>
+                    <ram:LineOne>KundenstraÃe 15</ram:LineOne>
+                    <ram:CityName>Frankfurt</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+            </ram:BuyerTradeParty>
+        </ram:ApplicableHeaderTradeAgreement>
+        <ram:ApplicableHeaderTradeDelivery>
+            <ram:ActualDeliverySupplyChainEvent>
+                <ram:OccurrenceDateTime>
+                    <udt:DateTimeString format="102">20180305</udt:DateTimeString>
+                </ram:OccurrenceDateTime>
+            </ram:ActualDeliverySupplyChainEvent>
+        </ram:ApplicableHeaderTradeDelivery>
+        <ram:ApplicableHeaderTradeSettlement>
+            <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
+            <ram:SpecifiedTradeSettlementPaymentMeans>
+                <ram:TypeCode>58</ram:TypeCode>
+                <ram:PayeePartyCreditorFinancialAccount>
+                    <ram:IBANID>DE12500105170648489890</ram:IBANID>
+                </ram:PayeePartyCreditorFinancialAccount>
+            </ram:SpecifiedTradeSettlementPaymentMeans>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>19.25</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>275.00</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>37.62</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>198.00</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:SpecifiedTradePaymentTerms>
+                <ram:Description>Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018</ram:Description>
+            </ram:SpecifiedTradePaymentTerms>
+            <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+                <ram:LineTotalAmount>473.00</ram:LineTotalAmount>
+                <ram:ChargeTotalAmount>0.00</ram:ChargeTotalAmount>
+                <ram:AllowanceTotalAmount>0.00</ram:AllowanceTotalAmount>
+                <ram:TaxBasisTotalAmount>473.00</ram:TaxBasisTotalAmount>
+                <ram:TaxTotalAmount currencyID="EUR">56.87</ram:TaxTotalAmount>
+                <ram:GrandTotalAmount>529.87</ram:GrandTotalAmount>
+                <ram:TotalPrepaidAmount>0.00</ram:TotalPrepaidAmount>
+                <ram:DuePayableAmount>529.87</ram:DuePayableAmount>
+            </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+        </ram:ApplicableHeaderTradeSettlement>
+    </rsm:SupplyChainTradeTransaction>
+</rsm:CrossIndustryInvoice>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/.gitignore
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/.gitignore	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/.gitignore	(revision 8435)
@@ -0,0 +1,2 @@
+classes/
+download/
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_basic.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_basic.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_basic.yml	(revision 8435)
@@ -0,0 +1,27 @@
+xsd2php:
+  namespaces:
+    'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100': 'horstoeko\zugferd\entities\basic\rsm'
+    'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100': 'horstoeko\zugferd\entities\basic\ram'
+    'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100': 'horstoeko\zugferd\entities\basic\udt'
+    'urn:un:unece:uncefact:data:standard:QualifiedDataType:100': 'horstoeko\zugferd\entities\basic\qdt'
+  destinations_php: 
+    'horstoeko\zugferd\entities\basic\rsm': '../src/entities/basic/rsm'
+    'horstoeko\zugferd\entities\basic\ram': '../src/entities/basic/ram'
+    'horstoeko\zugferd\entities\basic\udt': '../src/entities/basic/udt'
+    'horstoeko\zugferd\entities\basic\qdt': '../src/entities/basic/qdt'
+  destinations_jms: 
+    'horstoeko\zugferd\entities\basic\rsm': '../src/yaml/basic/rsm'
+    'horstoeko\zugferd\entities\basic\ram': '../src/yaml/basic/ram'
+    'horstoeko\zugferd\entities\basic\udt': '../src/yaml/basic/udt'
+    'horstoeko\zugferd\entities\basic\qdt': '../src/yaml/basic/qdt'
+  destinations_validation:
+    'horstoeko\zugferd\entities\basic\rsm': '../src/validation/basic/rsm'
+    'horstoeko\zugferd\entities\basic\ram': '../src/validation/basic/ram'
+    'horstoeko\zugferd\entities\basic\udt': '../src/validation/basic/udt'
+    'horstoeko\zugferd\entities\basic\qdt': '../src/validation/basic/qdt'
+  configs_jms:
+    xml_cdata: false
+  aliases:
+    'http://www.w3.org/2001/XMLSchema':
+      anyType: 'string'
+      anySimpleType: 'string'
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_basic_wl.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_basic_wl.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_basic_wl.yml	(revision 8435)
@@ -0,0 +1,27 @@
+xsd2php:
+  namespaces:
+    'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100': 'horstoeko\zugferd\entities\basicwl\rsm'
+    'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100': 'horstoeko\zugferd\entities\basicwl\ram'
+    'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100': 'horstoeko\zugferd\entities\basicwl\udt'
+    'urn:un:unece:uncefact:data:standard:QualifiedDataType:100': 'horstoeko\zugferd\entities\basicwl\qdt'
+  destinations_php: 
+    'horstoeko\zugferd\entities\basicwl\rsm': '../src/entities/basicwl/rsm'
+    'horstoeko\zugferd\entities\basicwl\ram': '../src/entities/basicwl/ram'
+    'horstoeko\zugferd\entities\basicwl\udt': '../src/entities/basicwl/udt'
+    'horstoeko\zugferd\entities\basicwl\qdt': '../src/entities/basicwl/qdt'
+  destinations_jms: 
+    'horstoeko\zugferd\entities\basicwl\rsm': '../src/yaml/basicwl/rsm'
+    'horstoeko\zugferd\entities\basicwl\ram': '../src/yaml/basicwl/ram'
+    'horstoeko\zugferd\entities\basicwl\udt': '../src/yaml/basicwl/udt'
+    'horstoeko\zugferd\entities\basicwl\qdt': '../src/yaml/basicwl/qdt'
+  destinations_validation:
+    'horstoeko\zugferd\entities\basicwl\rsm': '../src/validation/basicwl/rsm'
+    'horstoeko\zugferd\entities\basicwl\ram': '../src/validation/basicwl/ram'
+    'horstoeko\zugferd\entities\basicwl\udt': '../src/validation/basicwl/udt'
+    'horstoeko\zugferd\entities\basicwl\qdt': '../src/validation/basicwl/qdt'
+  configs_jms:
+    xml_cdata: false
+  aliases:
+    'http://www.w3.org/2001/XMLSchema':
+      anyType: 'string'
+      anySimpleType: 'string'
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_en16931.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_en16931.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_en16931.yml	(revision 8435)
@@ -0,0 +1,27 @@
+xsd2php:
+  namespaces:
+    'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100': 'horstoeko\zugferd\entities\en16931\rsm'
+    'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100': 'horstoeko\zugferd\entities\en16931\ram'
+    'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100': 'horstoeko\zugferd\entities\en16931\udt'
+    'urn:un:unece:uncefact:data:standard:QualifiedDataType:100': 'horstoeko\zugferd\entities\en16931\qdt'
+  destinations_php: 
+    'horstoeko\zugferd\entities\en16931\rsm': '../src/entities/en16931/rsm'
+    'horstoeko\zugferd\entities\en16931\ram': '../src/entities/en16931/ram'
+    'horstoeko\zugferd\entities\en16931\udt': '../src/entities/en16931/udt'
+    'horstoeko\zugferd\entities\en16931\qdt': '../src/entities/en16931/qdt'
+  destinations_jms: 
+    'horstoeko\zugferd\entities\en16931\rsm': '../src/yaml/en16931/rsm'
+    'horstoeko\zugferd\entities\en16931\ram': '../src/yaml/en16931/ram'
+    'horstoeko\zugferd\entities\en16931\udt': '../src/yaml/en16931/udt'
+    'horstoeko\zugferd\entities\en16931\qdt': '../src/yaml/en16931/qdt'
+  destinations_validation:
+    'horstoeko\zugferd\entities\en16931\rsm': '../src/validation/en16931/rsm'
+    'horstoeko\zugferd\entities\en16931\ram': '../src/validation/en16931/ram'
+    'horstoeko\zugferd\entities\en16931\udt': '../src/validation/en16931/udt'
+    'horstoeko\zugferd\entities\en16931\qdt': '../src/validation/en16931/qdt'
+  configs_jms:
+    xml_cdata: false
+  aliases:
+    'http://www.w3.org/2001/XMLSchema':
+      anyType: 'string'
+      anySimpleType: 'string'
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_extended.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_extended.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_extended.yml	(revision 8435)
@@ -0,0 +1,27 @@
+xsd2php:
+  namespaces:
+    'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100': 'horstoeko\zugferd\entities\extended\rsm'
+    'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100': 'horstoeko\zugferd\entities\extended\ram'
+    'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100': 'horstoeko\zugferd\entities\extended\udt'
+    'urn:un:unece:uncefact:data:standard:QualifiedDataType:100': 'horstoeko\zugferd\entities\extended\qdt'
+  destinations_php: 
+    'horstoeko\zugferd\entities\extended\rsm': '../src/entities/extended/rsm'
+    'horstoeko\zugferd\entities\extended\ram': '../src/entities/extended/ram'
+    'horstoeko\zugferd\entities\extended\udt': '../src/entities/extended/udt'
+    'horstoeko\zugferd\entities\extended\qdt': '../src/entities/extended/qdt'
+  destinations_jms: 
+    'horstoeko\zugferd\entities\extended\rsm': '../src/yaml/extended/rsm'
+    'horstoeko\zugferd\entities\extended\ram': '../src/yaml/extended/ram'
+    'horstoeko\zugferd\entities\extended\udt': '../src/yaml/extended/udt'
+    'horstoeko\zugferd\entities\extended\qdt': '../src/yaml/extended/qdt'
+  destinations_validation:
+    'horstoeko\zugferd\entities\extended\rsm': '../src/validation/extended/rsm'
+    'horstoeko\zugferd\entities\extended\ram': '../src/validation/extended/ram'
+    'horstoeko\zugferd\entities\extended\udt': '../src/validation/extended/udt'
+    'horstoeko\zugferd\entities\extended\qdt': '../src/validation/extended/qdt'
+  configs_jms:
+    xml_cdata: false
+  aliases:
+    'http://www.w3.org/2001/XMLSchema':
+      anyType: 'string'
+      anySimpleType: 'string'
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_minimum.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_minimum.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/config_minimum.yml	(revision 8435)
@@ -0,0 +1,27 @@
+xsd2php:
+  namespaces:
+    'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100': 'horstoeko\zugferd\entities\minimum\rsm'
+    'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100': 'horstoeko\zugferd\entities\minimum\ram'
+    'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100': 'horstoeko\zugferd\entities\minimum\udt'
+    'urn:un:unece:uncefact:data:standard:QualifiedDataType:100': 'horstoeko\zugferd\entities\minimum\qdt'
+  destinations_php: 
+    'horstoeko\zugferd\entities\minimum\rsm': '../src/entities/minimum/rsm'
+    'horstoeko\zugferd\entities\minimum\ram': '../src/entities/minimum/ram'
+    'horstoeko\zugferd\entities\minimum\udt': '../src/entities/minimum/udt'
+    'horstoeko\zugferd\entities\minimum\qdt': '../src/entities/minimum/qdt'
+  destinations_jms: 
+    'horstoeko\zugferd\entities\minimum\rsm': '../src/yaml/minimum/rsm'
+    'horstoeko\zugferd\entities\minimum\ram': '../src/yaml/minimum/ram'
+    'horstoeko\zugferd\entities\minimum\udt': '../src/yaml/minimum/udt'
+    'horstoeko\zugferd\entities\minimum\qdt': '../src/yaml/minimum/qdt'
+  destinations_validation:
+    'horstoeko\zugferd\entities\minimum\rsm': '../src/validation/minimum/rsm'
+    'horstoeko\zugferd\entities\minimum\ram': '../src/validation/minimum/ram'
+    'horstoeko\zugferd\entities\minimum\udt': '../src/validation/minimum/udt'
+    'horstoeko\zugferd\entities\minimum\qdt': '../src/validation/minimum/qdt'
+  configs_jms:
+    xml_cdata: false
+  aliases:
+    'http://www.w3.org/2001/XMLSchema':
+      anyType: 'string'
+      anySimpleType: 'string'
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/genclasses
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/genclasses	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/genclasses	(revision 8435)
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+CURRENTUSER=$(id -u -n)
+
+if [ "$CURRENTUSER" != "www-data" ]; then
+    echo "Not the right user"
+    exit 1
+fi
+
+./../vendor/bin/xsd2php convert ./config_extended.yml ./../src/schema/FACTUR-X_EXTENDED.xsd -vvv
+./../vendor/bin/xsd2php convert ./config_en16931.yml ./../src/schema/FACTUR-X_EN16931.xsd -vvv
+./../vendor/bin/xsd2php convert ./config_basic.yml ./../src/schema/FACTUR-X_BASIC.xsd -vvv
+./../vendor/bin/xsd2php convert ./config_basic_wl.yml ./../src/schema/FACTUR-X_BASIC-WL.xsd -vvv
+./../vendor/bin/xsd2php convert ./config_minimum.yml ./../src/schema/FACTUR-X_MINIMUM.xsd -vvv
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/genclasses.bat
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/genclasses.bat	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/genclasses.bat	(revision 8435)
@@ -0,0 +1,5 @@
+.\..\vendor\bin\xsd2php convert .\config_extended.yml .\..\src\schema\FACTUR-X_EXTENDED.xsd -vvv
+.\..\vendor\bin\xsd2php convert .\config_en16931.yml .\..\src\schema\FACTUR-X_EN16931.xsd -vvv
+.\..\vendor\bin\xsd2php convert .\config_basic.yml .\..\src\schema\FACTUR-X_BASIC.xsd -vvv
+.\..\vendor\bin\xsd2php convert .\config_basic_wl.yml .\..\src\schema\FACTUR-X_BASIC-WL.xsd -vvv
+.\..\vendor\bin\xsd2php convert .\config_minimum.yml .\..\src\schema\FACTUR-X_MINIMUM.xsd -vvv
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/gencodelists
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/gencodelists	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/gencodelists	(revision 8435)
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+sudo -u www-data php -f ./gencodelists.php
+sudo -u www-data ../vendor/bin/phpcbf --standard=./../build/phpcsrules_psr12.xml -q ./classes/
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/gencodelists.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/gencodelists.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/make/gencodelists.php	(revision 8435)
@@ -0,0 +1,618 @@
+<?php
+
+use horstoeko\stringmanagement\PathUtils;
+
+require dirname(__FILE__) . "/../vendor/autoload.php";
+
+define('DOWNLOADDEF_LIB_NAME', 'libname');
+define('DOWNLOADDEF_LIB_TITLE', 'libtitle');
+define('DOWNLOADDEF_KEY_URL', 'url');
+define('DOWNLOADDEF_KEY_URL_HP', 'urlhp');
+define('DOWNLOADDEF_KEY_TOFILE', 'filename');
+define('DOWNLOADDEF_KEY_CLASSNAME', 'classname');
+define('DOWNLOADDEF_KEY_CLASSNAMESPACE', 'classnamespace');
+define('DOWNLOADDEF_KEY_TITLE', 'title');
+define('DOWNLOADDEF_KEY_TITLE_LIST', 'titlelist');
+define('DOWNLOADDEF_KEY_SHORTIDENTIFIERS', 'shortidentifiers');
+define('DOWNLOADDEF_KEY_ADDMETHODS', 'addmethods');
+define('DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT', true);
+define('DOWNLOADDEF_KEY_DATA_CODEINDEX', 'codeindex');
+define('DOWNLOADDEF_KEY_DATA_DESCINDEX', 'descindex');
+define('DOWNLOADDEF_KEY_DATA_DESCLONGINDEX', 'desclongindex');
+define('DOWNLOADDEF_KEY_DATA_SORTINDEX', 'sortindex');
+define('DOWNLOADDEF_KEY_CLASSCREATORFUNC', 'classcreatorfunc');
+define('DOWNLOADDEF_KEY_CLASSCREATORFUNC_DEFAULT', 'createCodeClassFromKositJson');
+define('DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX', 'createconstantprefix');
+
+/**
+ * Script for downloading and generating code lists
+ */
+
+set_time_limit(0);
+
+/**
+ * Handle german umlauts
+ *
+ * @param  string $str
+ * @return string
+ */
+function handleUmlauts(string $str): string
+{
+    $str = str_replace("Ã", "Oe", $str);
+    $str = str_replace("Ã", "Ae", $str);
+    $str = str_replace("Ã", "Ue", $str);
+    $str = str_replace("Ã¶", "oe", $str);
+    $str = str_replace("Ã€", "ae", $str);
+    $str = str_replace("ÃŒ", "ue", $str);
+    $str = str_replace("Ã
+", "A", $str);
+    return $str;
+}
+
+/**
+ * Handle comment string
+ *
+ * @param  string $str
+ * @return string
+ */
+function strComment(string $str): string
+{
+    $str = handleUmlauts($str);
+    $str = str_replace("\n", "", $str);
+    $str = str_replace("\r", "", $str);
+    $str = str_replace("\t", "", $str);
+    $str = preg_replace('/\s+/', ' ', $str);
+    $str = wordwrap($str);
+    return $str;
+}
+
+/**
+ * Create an identifier
+ *
+ * @param  string  $str
+ * @param  boolean $shortIdentifier
+ * @return string
+ */
+function strIdentifier(string $str, bool $shortIdentifier): string
+{
+    $strNew = "";
+    $str = handleUmlauts($str);
+    $str = str_replace("\n", "", $str);
+    $str = str_replace("\r", "", $str);
+    $str = str_replace("\t", "", $str);
+    $str = strtoupper($str);
+    $str = preg_replace("/[^A-Za-z0-9\s]/", "", $str);
+    $strArray = explode(" ", $str);
+    if (count($strArray) == 1) {
+        $strNew = $strArray[0];
+    } else {
+        foreach ($strArray as $item) {
+            if ($strNew != "") {
+                $strNew .= "_";
+            }
+            if ($shortIdentifier) {
+                $strNew .= substr($item, 0, 4);
+            } else {
+                $strNew .= $item;
+            }
+        }
+    }
+    $strNew = preg_replace('/__+/', '_', $strNew);
+    $strNew = preg_replace('~\d~', '', $strNew, 5);
+    $strNew = rtrim(ltrim($strNew, "_"), "_");
+    return $strNew;
+}
+
+/**
+ * Returns a clean string
+ *
+ * @param  string $str
+ * @return string
+ */
+function strDesc(string $str): string
+{
+    $str = handleUmlauts($str);
+    $str = str_replace("'", "\'", $str);
+    $str = str_replace("\n", " ", $str);
+    $str = str_replace("\r", " ", $str);
+    $str = str_replace("\t", " ", $str);
+    $str = preg_replace('/\s+/', ' ', $str);
+    return $str;
+}
+
+/**
+ * Output line on screen
+ *
+ * @param  string $str
+ * @return void
+ */
+function outputLine(string $str): void
+{
+    echo $str . PHP_EOL;
+}
+
+/**
+ * Function to download a codelist
+ *
+ * @param  array $fileToDownload
+ * @return void
+ */
+function downloadList(array $fileToDownload): void
+{
+    foreach ($fileToDownload[DOWNLOADDEF_KEY_URL] as $idx => $dummy) {
+        $downloadFromUrl = $fileToDownload[DOWNLOADDEF_KEY_URL][$idx];
+        $saveToFile = $fileToDownload[DOWNLOADDEF_KEY_TOFILE][$idx];
+        $saveToDirectory = dirname($saveToFile);
+
+        if (!is_file($saveToDirectory)) {
+            @mkdir($saveToDirectory);
+        }
+
+        outputLine(sprintf("Downloading from\n   %s\nand saving to file\n   %s...", $downloadFromUrl, $saveToFile));
+
+        if (file_exists($saveToFile)) {
+            continue;
+        }
+
+        $ch = curl_init();
+        curl_setopt($ch, CURLOPT_URL, $downloadFromUrl);
+        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0");
+        curl_setopt($ch, CURLOPT_HEADER, 0);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
+        $output = curl_exec($ch);
+        curl_close($ch);
+
+        if (file_put_contents($saveToFile, $output) === false) {
+            throw new \Exception('Failed saved the downloaded file.');
+        }
+    }
+}
+
+/**
+ * Download a bunch of files
+ *
+ * @param  array $filesToDownload
+ * @return void
+ */
+function downloadLists(array $filesToDownload): void
+{
+    foreach ($filesToDownload as $fileToDownload) {
+        downloadList($fileToDownload);
+    }
+}
+
+/**
+ * Create a code class
+ *
+ * @return void
+ */
+function createCodeClassFromKositJson(array $fileToDownload): void
+{
+    // Define some internal variables
+
+    $classNamespace = $fileToDownload[DOWNLOADDEF_KEY_CLASSNAMESPACE];
+    $className = $fileToDownload[DOWNLOADDEF_KEY_CLASSNAME];
+    $classDir = PathUtils::combineAllPaths(dirname(__FILE__), "classes");
+    $classTitle = $fileToDownload[DOWNLOADDEF_KEY_TITLE];
+    $classTitleList = $fileToDownload[DOWNLOADDEF_KEY_TITLE_LIST];
+    $classHomepageUrls = !is_array($fileToDownload[DOWNLOADDEF_KEY_URL_HP]) ? [$fileToDownload[DOWNLOADDEF_KEY_URL_HP]] : $fileToDownload[DOWNLOADDEF_KEY_URL_HP];
+    $classShortIdentifiers = $fileToDownload[DOWNLOADDEF_KEY_SHORTIDENTIFIERS];
+    $classFilename = PathUtils::combinePathWithFile($classDir, sprintf('%s.php', $className));
+    $classConstantPrefixes = !is_array($fileToDownload[DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX]) ? [$fileToDownload[DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX]] : $fileToDownload[DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX];
+
+    $dataCodeIndex = $fileToDownload[DOWNLOADDEF_KEY_DATA_CODEINDEX] ?? 0;
+    $dataDescIndex = $fileToDownload[DOWNLOADDEF_KEY_DATA_DESCINDEX] ?? 1;
+    $dataDescLongIndex = $fileToDownload[DOWNLOADDEF_KEY_DATA_DESCLONGINDEX] ?? 2;
+    $dataSortIndex = $fileToDownload[DOWNLOADDEF_KEY_DATA_SORTINDEX] ?? ($fileToDownload[DOWNLOADDEF_KEY_DATA_CODEINDEX] ?? 0);
+
+    $libName = $fileToDownload[DOWNLOADDEF_LIB_NAME];
+    $libTitle = $fileToDownload[DOWNLOADDEF_LIB_TITLE];
+
+    // Check destination directory
+
+    if (!is_file($classDir)) {
+        @mkdir($classDir);
+    }
+
+    // Remove existing class file
+
+    if (file_exists($classFilename)) {
+        @unlink($classFilename);
+    }
+
+    // Create PHP Printer
+
+    $phpPrinter = new Nette\PhpGenerator\Printer;
+
+    // Create PHP File
+
+    $phpFile = new Nette\PhpGenerator\PhpFile;
+    $phpFile->addComment(sprintf("This file is a part of horstoeko/%s.\n\nFor the full copyright and license information, please view the LICENSE\nfile that was distributed with this source code.", $libName));
+
+    // Create PHP Class
+
+    $phpClass = $phpFile->addNamespace($classNamespace)->addClass($className);
+    $phpClass->addComment(sprintf("Class representing %s\nName of list: %s\n\n@category %s\n@package  %s\n@author   D. Erling <horstoeko@erling.com.de>\n@license  https://opensource.org/licenses/MIT MIT\n@link     https://github.com/horstoeko/zugferd", $classTitle, $classTitleList, $libTitle, $libTitle));
+    foreach ($classHomepageUrls as $classHomepageUrl) {
+        $phpClass->addComment(sprintf("@see      %s", $classHomepageUrl));
+    }
+
+    // Fill PHP Class
+
+    foreach ($fileToDownload[DOWNLOADDEF_KEY_TOFILE] as $idx => $dummy) {
+        $downloadedContent = file_get_contents($fileToDownload[DOWNLOADDEF_KEY_TOFILE][$idx]);
+        $downloadedContentObject = json_decode($downloadedContent, true);
+        $downloadedContentObjectData = $downloadedContentObject["daten"];
+        $constantPrefix = $classConstantPrefixes[$idx] ?? "";
+
+        usort(
+            $downloadedContentObjectData,
+            function ($a, $b) use ($dataSortIndex) {
+                return strcasecmp($a[$dataSortIndex], $b[$dataSortIndex]);
+            }
+        );
+
+        foreach ($downloadedContentObjectData as $line) {
+            $phpClass
+                ->addConstant(sprintf('%s%s', $constantPrefix, strIdentifier($line[$dataDescIndex], $classShortIdentifiers)), $line[$dataCodeIndex])
+                ->addComment("\n" . (strComment($line[$dataDescIndex] ?? "")) . " (" . (strComment($line[$dataCodeIndex] ?? "")) . ")")
+                ->addComment("\n" . strComment($line[$dataDescLongIndex] ?? ($line[$dataDescIndex] ?? "")));
+        }
+    }
+
+    // Should methods be added
+
+    if ($fileToDownload[DOWNLOADDEF_KEY_ADDMETHODS] === true) {
+        // Add method which returns a list of all codes to generated class
+
+        $phpClassMethod = $phpClass->addMethod('getAllCodes');
+        $phpClassMethod->setFinal();
+        $phpClassMethod->setStatic();
+        $phpClassMethod->setReturnType('array');
+        $phpClassMethod->addComment("Returns an array of all available codes\n");
+        $phpClassMethod->addComment("@return array");
+        $phpClassMethod->addComment("@codeCoverageIgnore");
+        $phpClassMethod->addBody('return [');
+
+        foreach ($fileToDownload[DOWNLOADDEF_KEY_TOFILE] as $idx => $dummy) {
+            $downloadedContent = file_get_contents($fileToDownload[DOWNLOADDEF_KEY_TOFILE][$idx]);
+            $downloadedContentObject = json_decode($downloadedContent, true);
+            $downloadedContentObjectData = $downloadedContentObject["daten"];
+            $constantPrefix = $classConstantPrefixes[$idx] ?? "";
+
+            usort(
+                $downloadedContentObjectData,
+                function ($a, $b) use ($dataSortIndex) {
+                    return strcasecmp($a[$dataSortIndex], $b[$dataSortIndex]);
+                }
+            );
+
+            foreach ($downloadedContentObjectData as $line) {
+                $phpClassMethod->addBody(sprintf("    static::%s%s,", $constantPrefix, strIdentifier($line[$dataDescIndex], $classShortIdentifiers)));
+            }
+        }
+
+        $phpClassMethod->addBody('];');
+
+        // Add method which returns an associate array for code => description
+
+        $phpClassMethod = $phpClass->addMethod('getAllCodeDescriptions');
+        $phpClassMethod->setFinal();
+        $phpClassMethod->setStatic();
+        $phpClassMethod->setReturnType('array');
+        $phpClassMethod->addComment("Returns an array of code descriptions indexed by code\n");
+        $phpClassMethod->addComment("@return array");
+        $phpClassMethod->addComment("@codeCoverageIgnore");
+        $phpClassMethod->addBody('return [');
+
+        foreach ($fileToDownload[DOWNLOADDEF_KEY_TOFILE] as $idx => $dummy) {
+            $downloadedContent = file_get_contents($fileToDownload[DOWNLOADDEF_KEY_TOFILE][$idx]);
+            $downloadedContentObject = json_decode($downloadedContent, true);
+            $downloadedContentObjectData = $downloadedContentObject["daten"];
+            $constantPrefix = $classConstantPrefixes[$idx] ?? "";
+
+            usort(
+                $downloadedContentObjectData,
+                function ($a, $b) use ($dataSortIndex) {
+                    return strcasecmp($a[$dataSortIndex], $b[$dataSortIndex]);
+                }
+            );
+
+            foreach ($downloadedContentObjectData as $line) {
+                $phpClassMethod->addBody(sprintf("    static::%s%s => '%s',", $constantPrefix, strIdentifier($line[$dataDescIndex], $classShortIdentifiers), strDesc($line[$dataDescIndex])));
+            }
+        }
+
+        $phpClassMethod->addBody('];');
+
+        // Add method which returns an boolean true when code exists otherwise false
+
+        $phpClassMethod = $phpClass->addMethod('checkCodeExists');
+        $phpClassMethod->setFinal();
+        $phpClassMethod->setStatic();
+        $phpClassMethod->setReturnType('bool');
+        $phpClassMethod->addComment("Returns true if a code exists in the list, otherwise false\n");
+        $phpClassMethod->addComment("@param string \$code");
+        $phpClassMethod->addComment("@return boolean");
+        $phpClassMethod->addComment("@codeCoverageIgnore");
+        $phpClassMethod->addParameter('code')->setType("string");
+        $phpClassMethod->addBody('return isset(static::getAllCodes()[$code]);');
+
+        // Add method which returns the description of a code
+
+        $phpClassMethod = $phpClass->addMethod('getCodeDescription');
+        $phpClassMethod->setFinal();
+        $phpClassMethod->setStatic();
+        $phpClassMethod->setReturnType('string');
+        $phpClassMethod->addComment("Returns the description of a code. If code is not found an empty string is returned\n");
+        $phpClassMethod->addComment("@param string \$code");
+        $phpClassMethod->addComment("@return string");
+        $phpClassMethod->addComment("@codeCoverageIgnore");
+        $phpClassMethod->addParameter('code')->setType("string");
+        $phpClassMethod->addBody('if (static::checkCodeExists($code) === true) {');
+        $phpClassMethod->addBody('    return static::getAllCodeDescriptions()[$code];');
+        $phpClassMethod->addBody('}');
+        $phpClassMethod->addBody('');
+        $phpClassMethod->addBody('return "";');
+    }
+
+    // Save generated class to file
+
+    outputLine(sprintf("Saving class to directory\n  %s", $classFilename));
+
+    file_put_contents($classFilename, $phpPrinter->printFile($phpFile));
+}
+
+/**
+ * Create code classes
+ *
+ * @param  array $filesToDownload
+ * @return void
+ */
+function createCodeClasses(array $filesToDownload): void
+{
+    foreach ($filesToDownload as $fileToDownload) {
+        $classCreatorFunc = $filesToDownload[DOWNLOADDEF_KEY_CLASSCREATORFUNC] ?? DOWNLOADDEF_KEY_CLASSCREATORFUNC_DEFAULT;
+        $classCreatorFunc($fileToDownload);
+    }
+}
+
+/* ----------------------------------------------------------------------------------------------------------
+   Main
+   ---------------------------------------------------------------------------------------------------------- */
+
+$filesToDownload = [
+    [
+        DOWNLOADDEF_LIB_NAME => 'zugferd',
+        DOWNLOADDEF_LIB_TITLE => 'Zugferd',
+        DOWNLOADDEF_KEY_URL => [
+            "https://www.xrepository.de/api/xrepository/urn:xoev-de:kosit:codeliste:untdid.7161_3/download/UNTDID_7161_3.json",
+            "https://www.xrepository.de/api/xrepository/urn:xoev-de:kosit:codeliste:untdid.5189_3/download/UNTDID_5189_3.json",
+        ],
+        DOWNLOADDEF_KEY_TOFILE => [
+            PathUtils::combinePathWithFile(PathUtils::combineAllPaths(dirname(__FILE__), "download"), "UNTDID_7161.json"),
+            PathUtils::combinePathWithFile(PathUtils::combineAllPaths(dirname(__FILE__), "download"), "UNTDID_5189.json"),
+        ],
+        DOWNLOADDEF_KEY_URL_HP => "https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:untdid.7161",
+        DOWNLOADDEF_KEY_CLASSNAMESPACE => "horstoeko\zugferd\codelists",
+        DOWNLOADDEF_KEY_CLASSNAME => "ZugferdAllowanceChargeCodes",
+        DOWNLOADDEF_KEY_TITLE => "list of allowance and charge identification codes",
+        DOWNLOADDEF_KEY_TITLE_LIST => "UNTDID 7161 Special service description code, UNTDID 5189 Allowance or charge identification code",
+        DOWNLOADDEF_KEY_SHORTIDENTIFIERS => true,
+        DOWNLOADDEF_KEY_ADDMETHODS => DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT,
+        DOWNLOADDEF_KEY_DATA_SORTINDEX => 1,
+        DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX => [],
+    ],
+    [
+        DOWNLOADDEF_LIB_NAME => 'zugferd',
+        DOWNLOADDEF_LIB_TITLE => 'Zugferd',
+        DOWNLOADDEF_KEY_URL => [
+            "https://www.xrepository.de/api/xrepository/urn:xoev-de:kosit:codeliste:country-codes_8/download/Country_Codes_8.json",
+        ],
+        DOWNLOADDEF_KEY_TOFILE => [
+            PathUtils::combinePathWithFile(PathUtils::combineAllPaths(dirname(__FILE__), "download"), "ISO_COUNTRY_CODES.json"),
+        ],
+        DOWNLOADDEF_KEY_URL_HP => "https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:country-codes",
+        DOWNLOADDEF_KEY_CLASSNAMESPACE => "horstoeko\zugferd\codelists",
+        DOWNLOADDEF_KEY_CLASSNAME => "ZugferdCountryCodes",
+        DOWNLOADDEF_KEY_TITLE => "list of country codes",
+        DOWNLOADDEF_KEY_TITLE_LIST => "ISO",
+        DOWNLOADDEF_KEY_SHORTIDENTIFIERS => true,
+        DOWNLOADDEF_KEY_ADDMETHODS => DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT,
+        DOWNLOADDEF_KEY_DATA_CODEINDEX => 0,
+        DOWNLOADDEF_KEY_DATA_DESCINDEX => 2,
+        DOWNLOADDEF_KEY_DATA_DESCLONGINDEX => 0,
+        DOWNLOADDEF_KEY_DATA_SORTINDEX => 2,
+        DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX => [],
+    ],
+    [
+        DOWNLOADDEF_LIB_NAME => 'zugferd',
+        DOWNLOADDEF_LIB_TITLE => 'Zugferd',
+        DOWNLOADDEF_KEY_URL => [
+            "https://www.xrepository.de/api/xrepository/urn:xoev-de:kosit:codeliste:currency-codes_3/download/Currency_Codes_3.json",
+        ],
+        DOWNLOADDEF_KEY_TOFILE => [
+            PathUtils::combinePathWithFile(PathUtils::combineAllPaths(dirname(__FILE__), "download"), "ISO_CURRENCY_CODES.json"),
+        ],
+        DOWNLOADDEF_KEY_URL_HP => "https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:currency-codes",
+        DOWNLOADDEF_KEY_CLASSNAMESPACE => "horstoeko\zugferd\codelists",
+        DOWNLOADDEF_KEY_CLASSNAME => "ZugferdCurrencyCodes",
+        DOWNLOADDEF_KEY_TITLE => "list of currency codes",
+        DOWNLOADDEF_KEY_TITLE_LIST => "ISO",
+        DOWNLOADDEF_KEY_SHORTIDENTIFIERS => false,
+        DOWNLOADDEF_KEY_ADDMETHODS => DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT,
+        DOWNLOADDEF_KEY_DATA_CODEINDEX => 0,
+        DOWNLOADDEF_KEY_DATA_DESCINDEX => 1,
+        DOWNLOADDEF_KEY_DATA_DESCLONGINDEX => 1,
+        DOWNLOADDEF_KEY_DATA_SORTINDEX => 1,
+        DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX => [],
+    ],
+    [
+        DOWNLOADDEF_LIB_NAME => 'zugferd',
+        DOWNLOADDEF_LIB_TITLE => 'Zugferd',
+        DOWNLOADDEF_KEY_URL => [
+            "https://www.xrepository.de/api/xrepository/urn:xoev-de:kosit:codeliste:untdid.5305_3/download/UNTDID_5305_3.json",
+        ],
+        DOWNLOADDEF_KEY_TOFILE => [
+            PathUtils::combinePathWithFile(PathUtils::combineAllPaths(dirname(__FILE__), "download"), "UNTDID_5305.json"),
+        ],
+        DOWNLOADDEF_KEY_URL_HP => "https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:untdid.5305",
+        DOWNLOADDEF_KEY_CLASSNAMESPACE => "horstoeko\zugferd\codelists",
+        DOWNLOADDEF_KEY_CLASSNAME => "ZugferdDutyTaxFeeCategories",
+        DOWNLOADDEF_KEY_TITLE => "list of duty or tax or fee category codes",
+        DOWNLOADDEF_KEY_TITLE_LIST => "UNTDID 5305 Duty or tax or fee category code",
+        DOWNLOADDEF_KEY_SHORTIDENTIFIERS => false,
+        DOWNLOADDEF_KEY_ADDMETHODS => DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT,
+        DOWNLOADDEF_KEY_DATA_CODEINDEX => 0,
+        DOWNLOADDEF_KEY_DATA_DESCINDEX => 1,
+        DOWNLOADDEF_KEY_DATA_DESCLONGINDEX => 1,
+        DOWNLOADDEF_KEY_DATA_SORTINDEX => 1,
+        DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX => [],
+    ],
+    [
+        DOWNLOADDEF_LIB_NAME => 'zugferd',
+        DOWNLOADDEF_LIB_TITLE => 'Zugferd',
+        DOWNLOADDEF_KEY_URL => [
+            "https://www.xrepository.de/api/xrepository/urn:xoev-de:kosit:codeliste:untdid.1001_4/download/UNTDID_1001_4.json",
+        ],
+        DOWNLOADDEF_KEY_TOFILE => [
+            PathUtils::combinePathWithFile(PathUtils::combineAllPaths(dirname(__FILE__), "download"), "UNTDID_1001.json"),
+        ],
+        DOWNLOADDEF_KEY_URL_HP => "https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:untdid.1001",
+        DOWNLOADDEF_KEY_CLASSNAMESPACE => "horstoeko\zugferd\codelists",
+        DOWNLOADDEF_KEY_CLASSNAME => "ZugferdDocumentType",
+        DOWNLOADDEF_KEY_TITLE => "list of document name codes",
+        DOWNLOADDEF_KEY_TITLE_LIST => "UNTDID 1001 Document name code",
+        DOWNLOADDEF_KEY_SHORTIDENTIFIERS => false,
+        DOWNLOADDEF_KEY_ADDMETHODS => DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT,
+        DOWNLOADDEF_KEY_DATA_SORTINDEX => 1,
+        DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX => [],
+    ],
+    [
+        DOWNLOADDEF_LIB_NAME => 'zugferd',
+        DOWNLOADDEF_LIB_TITLE => 'Zugferd',
+        DOWNLOADDEF_KEY_URL => [
+            "https://www.xrepository.de/api/xrepository/urn:xoev-de:kosit:codeliste:untdid.7143_4/download/UNTDID_7143_4.json",
+        ],
+        DOWNLOADDEF_KEY_TOFILE => [
+            PathUtils::combinePathWithFile(PathUtils::combineAllPaths(dirname(__FILE__), "download"), "UNTDID_7143.json"),
+        ],
+        DOWNLOADDEF_KEY_URL_HP => "https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:untdid.7143",
+        DOWNLOADDEF_KEY_CLASSNAMESPACE => "horstoeko\zugferd\codelists",
+        DOWNLOADDEF_KEY_CLASSNAME => "ZugferdItemTypeIdentificationCodes",
+        DOWNLOADDEF_KEY_TITLE => "list of item type identification codes",
+        DOWNLOADDEF_KEY_TITLE_LIST => "UNTDID 7143 Item type identification code",
+        DOWNLOADDEF_KEY_SHORTIDENTIFIERS => true,
+        DOWNLOADDEF_KEY_ADDMETHODS => DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT,
+        DOWNLOADDEF_KEY_DATA_SORTINDEX => 1,
+        DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX => [],
+    ],
+    [
+        DOWNLOADDEF_LIB_NAME => 'zugferd',
+        DOWNLOADDEF_LIB_TITLE => 'Zugferd',
+        DOWNLOADDEF_KEY_URL => [
+            "https://www.xrepository.de/api/xrepository/urn:xoev-de:xrechnung:codeliste:untdid.4461_3/download/UNTDID_4461_3.json",
+        ],
+        DOWNLOADDEF_KEY_TOFILE => [
+            PathUtils::combinePathWithFile(PathUtils::combineAllPaths(dirname(__FILE__), "download"), "UNTDID_4461.json"),
+        ],
+        DOWNLOADDEF_KEY_URL_HP => "https://www.xrepository.de/details/urn:xoev-de:xrechnung:codeliste:untdid.4461",
+        DOWNLOADDEF_KEY_CLASSNAMESPACE => "horstoeko\zugferd\codelists",
+        DOWNLOADDEF_KEY_CLASSNAME => "ZugferdPaymentMeans",
+        DOWNLOADDEF_KEY_TITLE => "list of payment means codes",
+        DOWNLOADDEF_KEY_TITLE_LIST => "UNTDID 4461 Payment means code",
+        DOWNLOADDEF_KEY_SHORTIDENTIFIERS => true,
+        DOWNLOADDEF_KEY_ADDMETHODS => DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT,
+        DOWNLOADDEF_KEY_DATA_SORTINDEX => 1,
+        DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX => [],
+    ],
+    [
+        DOWNLOADDEF_LIB_NAME => 'zugferd',
+        DOWNLOADDEF_LIB_TITLE => 'Zugferd',
+        DOWNLOADDEF_KEY_URL => [
+            "https://www.xrepository.de/api/xrepository/urn:xoev-de:kosit:codeliste:untdid.1153_3/download/UNTDID_1153_3.json",
+        ],
+        DOWNLOADDEF_KEY_TOFILE => [
+            PathUtils::combinePathWithFile(PathUtils::combineAllPaths(dirname(__FILE__), "download"), "UNTDID_1153.json"),
+        ],
+        DOWNLOADDEF_KEY_URL_HP => "https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:untdid.1153",
+        DOWNLOADDEF_KEY_CLASSNAMESPACE => "horstoeko\zugferd\codelists",
+        DOWNLOADDEF_KEY_CLASSNAME => "ZugferdReferenceCodeQualifiers",
+        DOWNLOADDEF_KEY_TITLE => "list of reference code qualifiers",
+        DOWNLOADDEF_KEY_TITLE_LIST => "UNTDID 1153 Reference code qualifier",
+        DOWNLOADDEF_KEY_SHORTIDENTIFIERS => true,
+        DOWNLOADDEF_KEY_ADDMETHODS => DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT,
+        DOWNLOADDEF_KEY_DATA_SORTINDEX => 1,
+        DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX => [],
+    ],
+    [
+        DOWNLOADDEF_LIB_NAME => 'zugferd',
+        DOWNLOADDEF_LIB_TITLE => 'Zugferd',
+        DOWNLOADDEF_KEY_URL => [
+            "https://www.xrepository.de/api/xrepository/urn:xoev-de:kosit:codeliste:untdid.4451_4/download/UNTDID_4451_4.json",
+        ],
+        DOWNLOADDEF_KEY_TOFILE => [
+            PathUtils::combinePathWithFile(PathUtils::combineAllPaths(dirname(__FILE__), "download"), "UNTDID_4451.json"),
+        ],
+        DOWNLOADDEF_KEY_URL_HP => "https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:untdid.4451",
+        DOWNLOADDEF_KEY_CLASSNAMESPACE => "horstoeko\zugferd\codelists",
+        DOWNLOADDEF_KEY_CLASSNAME => "ZugferdTextSubjectCodeQualifiers",
+        DOWNLOADDEF_KEY_TITLE => "list of text subject code qualifiers",
+        DOWNLOADDEF_KEY_TITLE_LIST => "UNTDID 4451 Text subject code qualifier",
+        DOWNLOADDEF_KEY_SHORTIDENTIFIERS => true,
+        DOWNLOADDEF_KEY_ADDMETHODS => DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT,
+        DOWNLOADDEF_KEY_DATA_SORTINDEX => 1,
+        DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX => [],
+    ],
+    [
+        DOWNLOADDEF_LIB_NAME => 'zugferd',
+        DOWNLOADDEF_LIB_TITLE => 'Zugferd',
+        DOWNLOADDEF_KEY_URL => [
+            "https://www.xrepository.de/api/xrepository/urn:xoev-de:kosit:codeliste:icd_5/download/ICD_5.json",
+        ],
+        DOWNLOADDEF_KEY_TOFILE => [
+            PathUtils::combinePathWithFile(PathUtils::combineAllPaths(dirname(__FILE__), "download"), "ICD_5.json"),
+        ],
+        DOWNLOADDEF_KEY_URL_HP => "https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:icd",
+        DOWNLOADDEF_KEY_CLASSNAMESPACE => "horstoeko\zugferd\codelists",
+        DOWNLOADDEF_KEY_CLASSNAME => "ZugferdSchemeIdentifiers",
+        DOWNLOADDEF_KEY_TITLE => "list of codes for the identification of organizations and organization parts",
+        DOWNLOADDEF_KEY_TITLE_LIST => "ISO/IEC 17 6523 - Identifier scheme code (ICD)",
+        DOWNLOADDEF_KEY_SHORTIDENTIFIERS => true,
+        DOWNLOADDEF_KEY_ADDMETHODS => DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT,
+        DOWNLOADDEF_KEY_DATA_SORTINDEX => 1,
+        DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX => [],
+    ],
+    [
+        DOWNLOADDEF_LIB_NAME => 'zugferd',
+        DOWNLOADDEF_LIB_TITLE => 'Zugferd',
+        DOWNLOADDEF_KEY_URL => [
+            "https://www.xrepository.de/api/xrepository/urn:xoev-de:kosit:codeliste:rec20_3/download/UN_ECE_Recommendation_N_20_3.json",
+            "https://www.xrepository.de/api/xrepository/urn:xoev-de:kosit:codeliste:rec21_3/download/UN_ECE_Recommendation_N_21_3.json",
+        ],
+        DOWNLOADDEF_KEY_TOFILE => [
+            PathUtils::combinePathWithFile(PathUtils::combineAllPaths(dirname(__FILE__), "download"), "UNECE_REC_20.json"),
+            PathUtils::combinePathWithFile(PathUtils::combineAllPaths(dirname(__FILE__), "download"), "UNECE_REC_21.json"),
+        ],
+        DOWNLOADDEF_KEY_URL_HP => [
+            "https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:rec20",
+            "https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:rec21",
+        ],
+        DOWNLOADDEF_KEY_CLASSNAMESPACE => "horstoeko\zugferd\codelists",
+        DOWNLOADDEF_KEY_CLASSNAME => "ZugferdUnitCodes",
+        DOWNLOADDEF_KEY_TITLE => "list of codes for units of measure used in international trade",
+        DOWNLOADDEF_KEY_TITLE_LIST => "UN/ECE Recommendation NÂ°20 and NÂ°21",
+        DOWNLOADDEF_KEY_SHORTIDENTIFIERS => true,
+        DOWNLOADDEF_KEY_ADDMETHODS => DOWNLOADDEF_KEY_ADDMETHODS_DEFAULT,
+        DOWNLOADDEF_KEY_DATA_SORTINDEX => 1,
+        DOWNLOADDEF_KEY_CLASSCONSTANT_PREFIX => ["REC20_", "REC21_"],
+    ],
+];
+
+outputLine("\n\nCodelist Generator v1.0\n----------------------------------------\n");
+
+downloadLists($filesToDownload);
+createCodeClasses($filesToDownload);
+
+outputLine("\n");
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocument.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocument.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocument.php	(revision 8435)
@@ -0,0 +1,305 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\BaseTypesHandler;
+use GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\XmlSchemaDateHandler;
+use horstoeko\stringmanagement\PathUtils;
+use horstoeko\zugferd\entities\en16931\rsm\CrossIndustryInvoiceType;
+use horstoeko\zugferd\exception\ZugferdUnknownProfileParameterException;
+use horstoeko\zugferd\jms\ZugferdTypesHandler;
+use horstoeko\zugferd\ZugferdObjectHelper;
+use horstoeko\zugferd\ZugferdProfileResolver;
+use JMS\Serializer\Handler\HandlerRegistryInterface;
+use JMS\Serializer\SerializerBuilder;
+use JMS\Serializer\SerializerInterface;
+
+/**
+ * Class representing the document basics
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdDocument
+{
+    /**
+     * @internal
+     * @var      integer    Internal profile id
+     */
+    private $profileId = -1;
+
+    /**
+     * @internal
+     * @var      array  Internal profile definition
+     */
+    private $profileDefinition = [];
+
+    /**
+     * @internal
+     * @var      SerializerBuilder  Serializer builder
+     */
+    private $serializerBuilder;
+
+    /**
+     * @internal
+     * @var      SerializerInterface    Serializer
+     */
+    private $serializer;
+
+    /**
+     * @internal
+     * @var      CrossIndustryInvoiceType   The internal invoice object
+     */
+    private $invoiceObject = null;
+
+    /**
+     * @internal
+     * @var      ZugferdObjectHelper    Object Helper
+     */
+    private $objectHelper = null;
+
+    /**
+     * Constructor
+     *
+     * @param integer $profile
+     * The ID of the profile of the document
+     *
+     * @codeCoverageIgnore
+     */
+    final protected function __construct(int $profile)
+    {
+        $this->initProfile($profile);
+        $this->initObjectHelper();
+        $this->initSerialzer();
+    }
+
+    /**
+     * Returns the internal invoice object (created by the
+     * serializer). This is used e.g. in the validator
+     *
+     * @return \horstoeko\zugferd\entities\basic\rsm\CrossIndustryInvoice|\horstoeko\zugferd\entities\basicwl\rsm\CrossIndustryInvoice|\horstoeko\zugferd\entities\en16931\rsm\CrossIndustryInvoice|\horstoeko\zugferd\entities\extended\rsm\CrossIndustryInvoice|\horstoeko\zugferd\entities\minimum\rsm\CrossIndustryInvoice
+     */
+    public function getInvoiceObject()
+    {
+        return $this->invoiceObject;
+    }
+
+    /**
+     * Create a new instance of the internal invoice object
+     *
+     * @return \horstoeko\zugferd\entities\basic\rsm\CrossIndustryInvoice|\horstoeko\zugferd\entities\basicwl\rsm\CrossIndustryInvoice|\horstoeko\zugferd\entities\en16931\rsm\CrossIndustryInvoice|\horstoeko\zugferd\entities\extended\rsm\CrossIndustryInvoice|\horstoeko\zugferd\entities\minimum\rsm\CrossIndustryInvoice
+     * @codeCoverageIgnore
+     */
+    protected function createInvoiceObject()
+    {
+        $this->invoiceObject = $this->getObjectHelper()->getCrossIndustryInvoice();
+
+        return $this->invoiceObject;
+    }
+
+    /**
+     * Get the instance of the internal serializuer
+     *
+     * @return SerializerInterface
+     */
+    public function getSerializer()
+    {
+        return $this->serializer;
+    }
+
+    /**
+     * Get object helper instance
+     *
+     * @return \horstoeko\zugferd\ZugferdObjectHelper
+     */
+    public function getObjectHelper()
+    {
+        return $this->objectHelper;
+    }
+
+    /**
+     * Returns the selected profile id
+     *
+     * @return integer
+     */
+    public function getProfileId(): int
+    {
+        return $this->profileId;
+    }
+
+    /**
+     * Returns the profile definition
+     *
+     * @return array
+     */
+    public function getProfileDefinition(): array
+    {
+        return $this->profileDefinition;
+    }
+
+    /**
+     * Get a parameter from profile definition
+     *
+     * @param string $parameterName
+     * @return mixed
+     */
+    public function getProfileDefinitionParameter(string $parameterName)
+    {
+        $profileDefinition = $this->getProfileDefinition();
+
+        if (is_array($profileDefinition) && isset($profileDefinition[$parameterName])) {
+            return $profileDefinition[$parameterName];
+        }
+
+        throw new ZugferdUnknownProfileParameterException($parameterName);
+    }
+
+    /**
+     * @internal
+     *
+     * Sets the internal profile definitions
+     *
+     * @param integer $profile
+     * The internal id of the profile
+     *
+     * @return ZugferdDocument
+     */
+    private function initProfile(int $profile): ZugferdDocument
+    {
+        $this->profileId = $profile;
+        $this->profileDefinition = ZugferdProfileResolver::resolveProfileDefById($profile);
+
+        return $this;
+    }
+
+    /**
+     * @internal
+     *
+     * Build the internal object helper
+     * @codeCoverageIgnore
+     *
+     * @return ZugferdDocument
+     */
+    private function initObjectHelper(): ZugferdDocument
+    {
+        $this->objectHelper = new ZugferdObjectHelper($this->profileId);
+
+        return $this;
+    }
+
+    /**
+     * @internal
+     *
+     * Build the internal serialzer
+     * @codeCoverageIgnore
+     *
+     * @return ZugferdDocument
+     */
+    private function initSerialzer(): ZugferdDocument
+    {
+        $this->serializerBuilder = SerializerBuilder::create();
+
+        $this->serializerBuilder->addMetadataDir(
+            PathUtils::combineAllPaths(
+                ZugferdSettings::getYamlDirectory(),
+                $this->getProfileDefinitionParameter("name"),
+                'qdt'
+            ),
+            sprintf(
+                'horstoeko\zugferd\entities\%s\qdt',
+                $this->getProfileDefinitionParameter("name")
+            )
+        );
+        $this->serializerBuilder->addMetadataDir(
+            PathUtils::combineAllPaths(
+                ZugferdSettings::getYamlDirectory(),
+                $this->getProfileDefinitionParameter("name"),
+                'ram'
+            ),
+            sprintf(
+                'horstoeko\zugferd\entities\%s\ram',
+                $this->getProfileDefinitionParameter("name")
+            )
+        );
+        $this->serializerBuilder->addMetadataDir(
+            PathUtils::combineAllPaths(
+                ZugferdSettings::getYamlDirectory(),
+                $this->getProfileDefinitionParameter("name"),
+                'rsm'
+            ),
+            sprintf(
+                'horstoeko\zugferd\entities\%s\rsm',
+                $this->getProfileDefinitionParameter("name")
+            )
+        );
+        $this->serializerBuilder->addMetadataDir(
+            PathUtils::combineAllPaths(
+                ZugferdSettings::getYamlDirectory(),
+                $this->getProfileDefinitionParameter("name"),
+                'udt'
+            ),
+            sprintf(
+                'horstoeko\zugferd\entities\%s\udt',
+                $this->getProfileDefinitionParameter("name")
+            )
+        );
+
+        $this->serializerBuilder->addDefaultListeners();
+        $this->serializerBuilder->addDefaultHandlers();
+
+        $this->serializerBuilder->configureHandlers(
+            function (HandlerRegistryInterface $handler) {
+                $handler->registerSubscribingHandler(new BaseTypesHandler());
+                $handler->registerSubscribingHandler(new XmlSchemaDateHandler());
+                $handler->registerSubscribingHandler(new ZugferdTypesHandler());
+            }
+        );
+
+        $this->serializer = $this->serializerBuilder->build();
+
+        return $this;
+    }
+
+    /**
+     * Deserialize XML content to internal invoice object
+     *
+     * @param string $xmlContent
+     * @return \horstoeko\zugferd\entities\basic\rsm\CrossIndustryInvoice|\horstoeko\zugferd\entities\basicwl\rsm\CrossIndustryInvoice|\horstoeko\zugferd\entities\en16931\rsm\CrossIndustryInvoice|\horstoeko\zugferd\entities\extended\rsm\CrossIndustryInvoice|\horstoeko\zugferd\entities\minimum\rsm\CrossIndustryInvoice
+     */
+    public function deserialize($xmlContent)
+    {
+        $this->invoiceObject = $this->getSerializer()->deserialize($xmlContent, 'horstoeko\zugferd\entities\\' . $this->getProfileDefinitionParameter("name") . '\rsm\CrossIndustryInvoice', 'xml');
+
+        return $this->invoiceObject;
+    }
+
+    /**
+     * Serialize internal invoice object as XML
+     *
+     * @return string
+     */
+    public function serializeAsXml(): string
+    {
+        return $this->getSerializer()->serialize($this->getInvoiceObject(), 'xml');
+    }
+
+    /**
+     * Serialize internal invoice object as JSON
+     *
+     * @return string
+     */
+    public function serializeAsJson(): string
+    {
+        return $this->getSerializer()->serialize($this->getInvoiceObject(), 'json');
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentBuilder.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentBuilder.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentBuilder.php	(revision 8435)
@@ -0,0 +1,3680 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use DateTime;
+use DOMDocument;
+use DOMXPath;
+
+use horstoeko\zugferd\codelists\ZugferdPaymentMeans;
+
+/**
+ * Class representing the document builder for outgoing documents
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdDocumentBuilder extends ZugferdDocument
+{
+    /**
+     * HeaderTradeAgreement
+     *
+     * @var object
+     */
+    protected $headerTradeAgreement = null;
+
+    /**
+     * HeaderTradeDelivery
+     *
+     * @var object
+     */
+    protected $headerTradeDelivery = null;
+
+    /**
+     * HeaderTradeSettlement
+     *
+     * @var object
+     */
+    protected $headerTradeSettlement = null;
+
+    /**
+     * SupplyChainTradeTransactionType
+     *
+     * @var object
+     */
+    protected $headerSupplyChainTradeTransaction = null;
+
+    /**
+     * Last added payment terms
+     *
+     * @var object
+     */
+    protected $currentPaymentTerms = null;
+
+    /**
+     * Last added position (line) to the docuemnt
+     *
+     * @var object
+     */
+    protected $currentPosition = null;
+
+    /**
+     * Receive the content as XML string
+     *
+     * @return string
+     * @see https://www.php.net/manual/en/language.oop5.magic.php#object.tostring
+     */
+    public function __toString()
+    {
+        return $this->getContent();
+    }
+
+    /**
+     * Creates a new ZugferdDocumentBuilder with profile $profile
+     *
+     * @codeCoverageIgnore
+     *
+     * @param  integer $profileId
+     * @return ZugferdDocumentBuilder
+     */
+    public static function createNew(int $profileId): ZugferdDocumentBuilder
+    {
+        return (new static($profileId))->initNewDocument();
+    }
+
+    /**
+     * Initialized a new document with profile settings
+     *
+     * @return ZugferdDocumentBuilder
+     */
+    public function initNewDocument(): ZugferdDocumentBuilder
+    {
+        $this->createInvoiceObject();
+
+        $this->headerTradeAgreement = $this->getInvoiceObject()->getSupplyChainTradeTransaction()->getApplicableHeaderTradeAgreement();
+        $this->headerTradeDelivery = $this->getInvoiceObject()->getSupplyChainTradeTransaction()->getApplicableHeaderTradeDelivery();
+        $this->headerTradeSettlement = $this->getInvoiceObject()->getSupplyChainTradeTransaction()->getApplicableHeaderTradeSettlement();
+        $this->headerSupplyChainTradeTransaction = $this->getInvoiceObject()->getSupplyChainTradeTransaction();
+
+        return $this;
+    }
+
+    /**
+     * This method can be overridden in derived class
+     * It is called before a XML is written
+     *
+     * @return void
+     */
+    protected function onBeforeGetContent()
+    {
+        // Do nothing
+    }
+
+    /**
+     * Write the content of a CrossIndustryInvoice object to a string
+     *
+     * @return string
+     */
+    public function getContent(): string
+    {
+        $this->onBeforeGetContent();
+
+        return $this->serializeAsXml();
+    }
+
+    /**
+     * Write the content of a invoice object to a DOMDocument instance
+     *
+     * @return DOMDocument
+     */
+    public function getContentAsDomDocument(): DOMDocument
+    {
+        $domDocument = new DOMDocument();
+        $domDocument->loadXML($this->getContent());
+
+        return $domDocument;
+    }
+
+    /**
+     * Write the content of a invoice object to a DOMXpath instance
+     *
+     * @return DOMXpath
+     */
+    public function getContentAsDomXPath(): DOMXpath
+    {
+        $domXPath = new DOMXPath($this->getContentAsDomDocument());
+
+        return $domXPath;
+    }
+
+    /**
+     * Write the content of a CrossIndustryInvoice object to a file
+     *
+     * @param  string $xmlfilename
+     * @return ZugferdDocument
+     */
+    public function writeFile(string $xmlfilename): ZugferdDocument
+    {
+        file_put_contents($xmlfilename, $this->getContent());
+        return $this;
+    }
+
+    /**
+     * Set main information about this document
+     *
+     * @param string         $documentno               __BT-1, From MINIMUM__ The document no issued by the seller
+     * @param string         $documenttypecode         __BT-3, From MINIMUM__ The type of the document, See \horstoeko\codelists\ZugferdInvoiceType for details
+     * @param DateTime       $documentdate             __BT-2, From MINIMUM__ Date of invoice. The date when the document was issued by the seller
+     * @param string         $invoiceCurrency          __BT-5, From MINIMUM__ Code for the invoice currency. The code for the invoice currency
+     * @param string|null    $documentname             Document Type. The documenttype (free text)
+     * @param string|null    $documentlanguage         Language indicator. The language code in which the document was written
+     * @param  DateTime|null $effectiveSpecifiedPeriod The contractual due date of the invoice
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentInformation(string $documentno, string $documenttypecode, DateTime $documentdate, string $invoiceCurrency, ?string $documentname = null, ?string $documentlanguage = null, ?DateTime $effectiveSpecifiedPeriod = null): ZugferdDocumentBuilder
+    {
+        $this->getObjectHelper()->tryCall($this->getInvoiceObject()->getExchangedDocument(), "setID", $this->getObjectHelper()->getIdType($documentno));
+        $this->getObjectHelper()->tryCall($this->getInvoiceObject()->getExchangedDocument(), "setName", $this->getObjectHelper()->getTextType($documentname));
+        $this->getObjectHelper()->tryCall($this->getInvoiceObject()->getExchangedDocument(), "setTypeCode", $this->getObjectHelper()->getDocumentCodeType($documenttypecode));
+        $this->getObjectHelper()->tryCall($this->getInvoiceObject()->getExchangedDocument(), "setIssueDateTime", $this->getObjectHelper()->getDateTimeType($documentdate));
+        $this->getObjectHelper()->tryCall($this->getInvoiceObject()->getExchangedDocument(), "addToLanguageID", $this->getObjectHelper()->getIdType($documentlanguage));
+        $this->getObjectHelper()->tryCall($this->getInvoiceObject()->getExchangedDocument(), "setEffectiveSpecifiedPeriod", $this->getObjectHelper()->getSpecifiedPeriodType(null, null, $effectiveSpecifiedPeriod, null));
+
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setInvoiceCurrencyCode", $this->getObjectHelper()->getIdType($invoiceCurrency));
+
+        return $this;
+    }
+
+    /**
+     * Set grouping of business process information
+     *
+     * @param string $id    __BT-23, From MINIMUM__ Identifies the context of a business process where the transaction is taking place, thus allowing the buyer to process the invoice in an appropriate manner.
+     * __Note__: These data make it possible to define the purpose of the settlement (invoice of the authorised person, contractual partner, subcontractor, settlement document for a building contract etc.).
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentBusinessProcess(string $id): ZugferdDocumentBuilder
+    {
+        if ($this->getObjectHelper()->isNullOrEmpty($id)) {
+            return $this;
+        }
+
+        $busProcessCtxParameter = $this->getObjectHelper()->createClassInstance('ram\DocumentContextParameterType');
+        $this->getObjectHelper()->tryCall($busProcessCtxParameter, 'setID', $this->getObjectHelper()->getIdType($id));
+        $this->getObjectHelper()->tryCall($this->getInvoiceObject()->getExchangedDocumentContext(), 'setBusinessProcessSpecifiedDocumentContextParameter', $busProcessCtxParameter);
+
+        return $this;
+    }
+
+    /**
+     * Set general payment information
+     *
+     * @param  string|null $creditorReferenceID __BT-90, From BASIC WL__ Identifier of the creditor
+     * @param  string|null $paymentReference    __BT-83, From BASIC WL__ Intended use for payment
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentGeneralPaymentInformation(?string $creditorReferenceID = null, ?string $paymentReference = null): ZugferdDocumentBuilder
+    {
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setCreditorReferenceID", $this->getObjectHelper()->getIdType($creditorReferenceID));
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setPaymentReference", $this->getObjectHelper()->getIdType($paymentReference));
+        return $this;
+    }
+
+    /**
+     * Mark document as a copy from the original one
+     *
+     * @return ZugferdDocumentBuilder
+     */
+    public function setIsDocumentCopy(): ZugferdDocumentBuilder
+    {
+        $this->getObjectHelper()->tryCall($this->getInvoiceObject()->getExchangedDocument(), "setCopyIndicator", $this->getObjectHelper()->getIndicatorType(true));
+        return $this;
+    }
+
+    /**
+     * Mark document as a test document
+     *
+     * @return ZugferdDocumentBuilder
+     */
+    public function setIsTestDocument(): ZugferdDocumentBuilder
+    {
+        $this->getObjectHelper()->tryCall($this->getInvoiceObject()->getExchangedDocumentContext(), "setTestIndicator", $this->getObjectHelper()->getIndicatorType(true));
+        return $this;
+    }
+
+    /**
+     * Document money summation
+     *
+     * @param  float      $grandTotalAmount     __BT-112, From MINIMUM__ Total invoice amount including sales tax
+     * @param  float      $duePayableAmount     __BT-115, From MINIMUM__ Payment amount due
+     * @param  float|null $lineTotalAmount      __BT-106, From BASIC WL__ Sum of the net amounts of all invoice items
+     * @param  float|null $chargeTotalAmount    __BT-108, From BASIC WL__ Sum of the surcharges at document level
+     * @param  float|null $allowanceTotalAmount __BT-107, From BASIC WL__ Sum of the discounts at document level
+     * @param  float|null $taxBasisTotalAmount  __BT-109, From MINIMUM__ Total invoice amount excluding sales tax
+     * @param  float|null $taxTotalAmount       __BT-110/111, From MINIMUM/BASIC WL__ if BT--6 is not null $taxTotalAmount = BT--111. Total amount of the invoice sales tax, Total tax amount in the booking currency
+     * @param  float|null $roundingAmount       __BT-114, From EN 16931__ Rounding amount
+     * @param  float|null $totalPrepaidAmount   __BT-113, From BASIC WL__ Prepayment amount
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentSummation(float $grandTotalAmount, float $duePayableAmount, ?float $lineTotalAmount = null, ?float $chargeTotalAmount = null, ?float $allowanceTotalAmount = null, ?float $taxBasisTotalAmount = null, ?float $taxTotalAmount = null, ?float $roundingAmount = null, ?float $totalPrepaidAmount = null): ZugferdDocumentBuilder
+    {
+        $summation = $this->getObjectHelper()->getTradeSettlementHeaderMonetarySummationType($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setSpecifiedTradeSettlementHeaderMonetarySummation", $summation);
+        $taxTotalAmount = $this->getObjectHelper()->tryCallAndReturn($summation, "getTaxTotalAmount");
+        $invoiceCurrencyCode = $this->getObjectHelper()->tryCallByPathAndReturn($this->headerTradeSettlement, "getInvoiceCurrencyCode.value");
+        $this->getObjectHelper()->tryCall($this->getObjectHelper()->ensureArray($taxTotalAmount)[0], 'setCurrencyID', $invoiceCurrencyCode);
+        return $this;
+    }
+
+    /**
+     * Initilize the main document summation
+     *
+     * @return ZugferdDocumentBuilder
+     */
+    public function initDocumentSummation(): ZugferdDocumentBuilder
+    {
+        $this->setDocumentSummation(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+        return $this;
+    }
+
+    /**
+     * Sets a foreign currency (code) with the tax amount. The exchange rate
+     * is calculated by tax amounts
+     *
+     * @param  string $foreignCurrencyCode __BT-6, From BASIC WL__ Foreign currency code
+     * @param  float  $foreignTaxAmount    __BT-, From __ Required from EXTENDED Tax total amount in the foreign currency
+     * @return ZugferdDocumentBuilder
+     */
+    public function setForeignCurrency(string $foreignCurrencyCode, ?float $foreignTaxAmount): ZugferdDocumentBuilder
+    {
+        $invoiceCurrencyCode = $this->getObjectHelper()->tryCallByPathAndReturn($this->headerTradeSettlement, "getInvoiceCurrencyCode.value");
+
+        if (is_null($invoiceCurrencyCode)) {
+            return $this;
+        }
+
+        $documentSummation = $this->getObjectHelper()->tryCallByPathAndReturn($this->headerTradeSettlement, "getSpecifiedTradeSettlementHeaderMonetarySummation");
+
+        if (is_null($documentSummation)) {
+            return $this;
+        }
+
+        $taxTotalAmounts = $this->getObjectHelper()->tryCallByPathAndReturn($documentSummation, "getTaxTotalAmount") ?? [];
+        $taxTotalAmountInvoice = null;
+        $taxTotalAmountForeign = null;
+
+        foreach ($taxTotalAmounts as $taxTotalAmount) {
+            if ($this->getObjectHelper()->tryCallAndReturn($taxTotalAmount, "getCurrencyID") == $invoiceCurrencyCode) {
+                $taxTotalAmountInvoice = $taxTotalAmount;
+            }
+            if ($this->getObjectHelper()->tryCallAndReturn($taxTotalAmount, "getCurrencyID") == $foreignCurrencyCode) {
+                $taxTotalAmountForeign = $taxTotalAmount;
+            }
+        }
+
+        if (is_null($taxTotalAmountInvoice)) {
+            return $this;
+        }
+
+        $invoiceTaxAmount = $this->getObjectHelper()->tryCallByPathAndReturn($taxTotalAmountInvoice, "value") ?? 0;
+
+        if ($invoiceTaxAmount == 0) {
+            return $this;
+        }
+
+        if (is_null($taxTotalAmountForeign)) {
+            $taxTotalAmountForeign = $this->getObjectHelper()->getAmountType($foreignTaxAmount, $foreignCurrencyCode);
+            $this->getObjectHelper()->tryCall($documentSummation, "addToTaxTotalAmount", $taxTotalAmountForeign);
+        } else {
+            $this->getObjectHelper()->tryCallByPath($taxTotalAmountForeign, "value", $foreignTaxAmount);
+            $this->getObjectHelper()->tryCallByPath($taxTotalAmountForeign, "setCurrencyID", $foreignCurrencyCode);
+        }
+
+        $exchangeRate = round($foreignTaxAmount / $invoiceTaxAmount, 5);
+
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setTaxCurrencyCode", $this->getObjectHelper()->getIdType($foreignCurrencyCode));
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setTaxApplicableTradeCurrencyExchange", $this->getObjectHelper()->getTaxApplicableTradeCurrencyExchangeType($invoiceCurrencyCode, $foreignCurrencyCode, $exchangeRate));
+        return $this;
+    }
+
+    /**
+     * Add a note to the docuzment
+     *
+     * @param  string      $content     __BT-22, From BASIC WL__ Free text on the invoice
+     * @param  string|null $contentCode __BT-, From __ Free text at document level
+     * @param  string|null $subjectCode __BT-21, From BASIC WL__ Code to qualify the free text for the invoice
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentNote(string $content, ?string $contentCode = null, ?string $subjectCode = null): ZugferdDocumentBuilder
+    {
+        $note = $this->getObjectHelper()->getNoteType($content, $contentCode, $subjectCode);
+        $this->getObjectHelper()->tryCall($this->getInvoiceObject()->getExchangedDocument(), "addToIncludedNote", $note);
+        return $this;
+    }
+
+    /**
+     * An identifier assigned by the buyer and used for internal routing.
+     *
+     * __Note__: The reference is specified by the buyer (e.g. contact details, department, office ID, project code),
+     * but stated by the seller on the invoice.
+     *
+     * __Note__: The route ID must be specified in the Buyer Reference (BT--10) in the XRechnung. According to the XRechnung
+     * standard, two syntaxes are permitted for displaying electronic invoices: Universal Business Language (UBL) and UN/CEFACT
+     * Cross Industry Invoice (CII).
+     *
+     * @param  string $buyerreference __BT-10, From MINIMUM__ An identifier assigned by the buyer and used for internal routing
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentBuyerReference(?string $buyerreference): ZugferdDocumentBuilder
+    {
+        $reference = $this->getObjectHelper()->getTextType($buyerreference);
+        $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "setBuyerReference", $reference);
+        return $this;
+    }
+
+    /**
+     * Set the routing-id (needed for German XRechnung)
+     * This is an alias-method for setDocumentBuyerReference
+     *
+     * __Note__: The route ID must be specified in the Buyer Reference (BT--10) in the XRechnung. According to the XRechnung
+     * standard, two syntaxes are permitted for displaying electronic invoices: Universal Business Language (UBL) and UN/CEFACT
+     * Cross Industry Invoice (CII).
+     *
+     * @param  string $routingId __BT-, From __ The routing ID
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentRoutingId(string $routingId): ZugferdDocumentBuilder
+    {
+        return $this->setDocumentBuyerReference($routingId);
+    }
+
+    /**
+     * Detailed information about the seller (=service provider)
+     *
+     * @param  string      $name        __BT-27, From MINIMUM__ The full formal name under which the seller is registered in the National Register of Legal Entities, Taxable Person or otherwise acting as person(s)
+     * @param  string|null $id          __BT-29, From BASIC WL__ An identifier of the seller. In many systems, seller identification is key information. Multiple seller IDs can be assigned or specified. They can be differentiated by using different identification schemes. If no scheme is given, it should be known to the buyer and seller, e.g. a previously exchanged, buyer-assigned identifier of the seller
+     * @param  string|null $description __BT-33, From EN 16931__ Further legal information that is relevant for the seller
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentSeller(string $name, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder
+    {
+        $sellerTradeParty = $this->getObjectHelper()->getTradeParty($name, $id, $description);
+        $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "setSellerTradeParty", $sellerTradeParty);
+        return $this;
+    }
+
+    /**
+     * Add an id to the document seller
+     *
+     * @param  string|null $id          __BT-29, From BASIC WL__ An identifier of the seller. In many systems, seller identification is key information. Multiple seller IDs can be assigned or specified. They can be differentiated by using different identification schemes. If no scheme is given, it should be known to the buyer and seller, e.g. a previously exchanged, buyer-assigned identifier of the seller
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentSellerId(string $id): ZugferdDocumentBuilder
+    {
+        $sellerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTradeParty");
+        $this->getObjectHelper()->tryCall($sellerTradeParty, "addToID", $this->getObjectHelper()->getIdType($id));
+        return $this;
+    }
+
+    /**
+     * Add a global id for the seller
+     *
+     * __Notes__
+     *
+     * - The Seller's ID identification scheme is a unique identifier
+     *   assigned to a seller by a global registration organization
+     *
+     * @param  string|null $globalID     __BT-29/BT--29-0, From BASIC WL__ The seller's identifier identification scheme is an identifier uniquely assigned to a seller by a global registration organization.
+     * @param  string|null $globalIDType __BT-29-1, From BASIC WL__ If the identifier is used for the identification scheme, it must be selected from the entries in the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentSellerGlobalId(?string $globalID = null, ?string $globalIDType = null): ZugferdDocumentBuilder
+    {
+        $sellerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTradeParty");
+        $this->getObjectHelper()->tryCall($sellerTradeParty, "addToGlobalID", $this->getObjectHelper()->getIdType($globalID, $globalIDType));
+        return $this;
+    }
+
+    /**
+     * Add detailed information on the seller's tax information
+     *
+     * The local identification (defined by the seller's address) of the seller for tax purposes or a reference that enables the seller
+     * to indicate his reporting status for tax purposes The sales tax identification number of the seller
+     * Note: This information may affect how the buyer the invoice settled (such as in relation to social security contributions). So
+     * e.g. In some countries, if the seller is not reported for tax, the buyer will withhold the tax amount and pay it on behalf of the
+     * seller. Sales tax number with a prefixed country code. A supplier registered as subject to VAT must provide his sales tax
+     * identification number, unless he uses a tax agent.
+     *
+     * @param  string|null $taxregtype __BT-31-0/BT-32-0, From __ Type of tax number of the seller (FC = Tax number, VA = Sales tax identification number)
+     * @param  string|null $taxregid   __BT-31/32, From MINIMUM/EN 16931__ Tax number of the seller or sales tax identification number of the seller
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentSellerTaxRegistration(?string $taxregtype = null, ?string $taxregid = null): ZugferdDocumentBuilder
+    {
+        $sellerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTradeParty");
+        $taxreg = $this->getObjectHelper()->getTaxRegistrationType($taxregtype, $taxregid);
+        $this->getObjectHelper()->tryCall($sellerTradeParty, "addToSpecifiedTaxRegistration", $taxreg);
+        return $this;
+    }
+
+    /**
+     * Sets detailed information on the business address of the seller
+     *
+     * @param  string|null $lineone     __BT-35, From BASIC WL__ The main line in the sellers address. This is usually the street name and house number or the post office box
+     * @param  string|null $linetwo     __BT-36, From BASIC WL__ Line 2 of the seller's address. This is an additional address line in an address that can be used to provide additional details in addition to the main line used to provide additional details in addition to the main line
+     * @param  string|null $linethree   __BT-162, From BASIC WL__Line 3 of the seller's address. This is an additional address line in an address that can be used to provide additional details in addition to the main line
+     * @param  string|null $postcode    __BT-38, From BASIC WL__ Identifier for a group of properties, such as a zip code
+     * @param  string|null $city        __BT-37, From BASIC WL__ Usual name of the city or municipality in which the seller's address is located
+     * @param  string|null $country     __BT-40, From MINIMUM__ Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the representation of names of countries and their subdivisionsâ
+     * @param  string|null $subdivision __BT-39, From BASIC WL__ The sellers state
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentSellerAddress(?string $lineone = null, ?string $linetwo = null, ?string $linethree = null, ?string $postcode = null, ?string $city = null, ?string $country = null, ?string $subdivision = null): ZugferdDocumentBuilder
+    {
+        $sellerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTradeParty");
+        $address = $this->getObjectHelper()->getTradeAddress($lineone, $linetwo, $linethree, $postcode, $city, $country, $subdivision);
+        $this->getObjectHelper()->tryCall($sellerTradeParty, "setPostalTradeAddress", $address);
+        return $this;
+    }
+
+    /**
+     * Set Organization details
+     *
+     * @param  string|null $legalorgid   __BT-30, From MINIMUM__ An identifier issued by an official registrar that identifies the seller as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided, it should be known to the buyer and seller
+     * @param  string|null $legalorgtype __BT-30-1, From MINIMUM__ The identifier for the identification scheme of the legal registration of the seller. If the identification scheme is used, it must be selected from ISO/IEC 6523 list
+     * @param  string|null $legalorgname __BT-28, From BASIC WL__ A name by which the seller is known, if different from the seller's name (also known as the company name). Note: This may be used if different from the seller's name.
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentSellerLegalOrganisation(?string $legalorgid, ?string $legalorgtype, ?string $legalorgname): ZugferdDocumentBuilder
+    {
+        $sellerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTradeParty");
+        $legalorg = $this->getObjectHelper()->getLegalOrganization($legalorgid, $legalorgtype, $legalorgname);
+        $this->getObjectHelper()->tryCall($sellerTradeParty, "setSpecifiedLegalOrganization", $legalorg);
+        return $this;
+    }
+
+    /**
+     * Set detailed information on the seller's contact person
+     *
+     * @param  string|null $contactpersonname     __BT-41, From EN 16931__ Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname __BT-, From __ Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno        __BT-42, From EN 16931__ Detailed information on the seller's phone number
+     * @param  string|null $contactfaxno          __BT-, From __ Detailed information on the seller's fax number
+     * @param  string|null $contactemailadd       __BT-43, From __ Detailed information on the seller's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentSellerContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $sellerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCallIfMethodExists($sellerTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact);
+        return $this;
+    }
+
+    /**
+     * Add additional detailed information on the seller's contact person. Only supported
+     * in EXTENDED profile
+     *
+     * @param  string|null $contactpersonname     __BT-, From __ Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname __BT-, From __ Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno        __BT-, From __ Detailed information on the seller's phone number
+     * @param  string|null $contactfaxno          __BT-, From __ Detailed information on the seller's fax number
+     * @param  string|null $contactemailadd       __BT-, From __ Detailed information on the seller's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentSellerContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $sellerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCall($sellerTradeParty, "addToDefinedTradeContact", $contact);
+        return $this;
+    }
+
+    /**
+     * Set Sellers electronic communication information
+     *
+     * @param  string|null $uriScheme __BT-34-1, From BASIC WL__
+     * @param  string|null $uri       __BT-34, From BASIC WL__
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentSellerCommunication(?string $uriScheme, ?string $uri): ZugferdDocumentBuilder
+    {
+        $sellerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTradeParty");
+        $communication = $this->getObjectHelper()->getUniversalCommunicationType(null, $uri, $uriScheme);
+        $this->getObjectHelper()->tryCall($sellerTradeParty, "setURIUniversalCommunication", $communication);
+        return $this;
+    }
+
+    /**
+     * Detailed information about the buyer (service recipient)
+     *
+     * @param  string      $name        __BT-44, From MINIMUM__ The full name of the buyer
+     * @param  string|null $id          __BT-46, From BASIC WL__ An identifier of the buyer. In many systems, buyer identification is key information. Multiple buyer IDs can be assigned or specified. They can be differentiated by using different identification schemes. If no scheme is given, it should be known to the buyer and buyer, e.g. a previously exchanged, seller-assigned identifier of the buyer
+     * @param  string|null $description __BT-, From __  Further legal information about the buyer
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentBuyer(string $name, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder
+    {
+        $buyerTradeParty = $this->getObjectHelper()->getTradeParty($name, $id, $description);
+        $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "setBuyerTradeParty", $buyerTradeParty);
+        return $this;
+    }
+
+    /**
+     * Add an id to the document buyer
+     *
+     * @param  string|null $id          __BT-46, From BASIC WL__ An identifier of the buyer. In many systems, buyer identification is key information. Multiple buyer IDs can be assigned or specified. They can be differentiated by using different identification schemes. If no scheme is given, it should be known to the buyer and buyer, e.g. a previously exchanged, seller-assigned identifier of the buyer
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentBuyerId(string $id): ZugferdDocumentBuilder
+    {
+        $buyerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getBuyerTradeParty");
+        $this->getObjectHelper()->tryCall($buyerTradeParty, "addToID", $this->getObjectHelper()->getIdType($id));
+        return $this;
+    }
+
+    /**
+     * Add a global id for the buyer
+     *
+     * @param  string|null $globalID     __BT-46/BT-46-0, From BASIC WL__ The buyers's identifier identification scheme is an identifier uniquely assigned to a buyer by a global registration organization.
+     * @param  string|null $globalIDType __BT-46-1__ If the identifier is used for the identification scheme, it must be selected from the entries in the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentBuyerGlobalId(?string $globalID = null, ?string $globalIDType = null): ZugferdDocumentBuilder
+    {
+        $buyerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getBuyerTradeParty");
+        $this->getObjectHelper()->tryCall($buyerTradeParty, "addToGlobalID", $this->getObjectHelper()->getIdType($globalID, $globalIDType));
+        return $this;
+    }
+
+    /**
+     * Add detailed information on the buyers's tax information
+     *
+     * The local identification (defined by the buyers's address) of the buyers for tax purposes or a reference that enables the buyers
+     * to indicate his reporting status for tax purposes The sales tax identification number of the buyers
+     * Note: This information may affect how the buyer the invoice settled (such as in relation to social security contributions). So
+     * e.g. In some countries, if the buyers is not reported for tax, the buyer will withhold the tax amount and pay it on behalf of the
+     * buyers. Sales tax number with a prefixed country code. A supplier registered as subject to VAT must provide his sales tax
+     * identification number, unless he uses a tax agent.
+     *
+     * @param  string|null $taxregtype __BT-48-0, From BASIC WL__ Type of tax number of the seller (FC = Tax number, VA = Sales tax identification number)
+     * @param  string|null $taxregid   __BT-48, From BASIC WL__ Tax number of the seller or sales tax identification number of the seller. Tax number of the seller or sales tax identification number of the (FC = Tax number, VA = Sales tax number)
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentBuyerTaxRegistration(?string $taxregtype = null, ?string $taxregid = null): ZugferdDocumentBuilder
+    {
+        $buyerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getBuyerTradeParty");
+        $taxreg = $this->getObjectHelper()->getTaxRegistrationType($taxregtype, $taxregid);
+        $this->getObjectHelper()->tryCall($buyerTradeParty, "addToSpecifiedTaxRegistration", $taxreg);
+        return $this;
+    }
+
+    /**
+     * Sets detailed information on the business address of the buyer
+     *
+     * @param  string|null $lineone     __BT-50, From BASIC WL__ The main line in the buyers address. This is usually the street name and house number or the post office box
+     * @param  string|null $linetwo     __BT-51, From BASIC WL__ Line 2 of the buyers address. This is an additional address line in an address that can be used to provide additional details in addition to the main line
+     * @param  string|null $linethree   __BT-163, From BASIC WL__ Line 3 of the buyers address. This is an additional address line in an address that can be used to provide additional details in addition to the main line
+     * @param  string|null $postcode    __BT-53, From BASIC WL__ Identifier for a group of properties, such as a zip code
+     * @param  string|null $city        __BT-52, From BASIC WL__ Usual name of the city or municipality in which the buyers address is located
+     * @param  string|null $country     __BT-55, From BASIC WL__ Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the representation of names of countries and their subdivisionsâ
+     * @param  string|null $subdivision __BT-54, From BASIC WL__ The buyers state
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentBuyerAddress(?string $lineone = null, ?string $linetwo = null, ?string $linethree = null, ?string $postcode = null, ?string $city = null, ?string $country = null, ?string $subdivision = null): ZugferdDocumentBuilder
+    {
+        $buyerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getBuyerTradeParty");
+        $address = $this->getObjectHelper()->getTradeAddress($lineone, $linetwo, $linethree, $postcode, $city, $country, $subdivision);
+        $this->getObjectHelper()->tryCall($buyerTradeParty, "setPostalTradeAddress", $address);
+        return $this;
+    }
+
+    /**
+     * Set legal organisation of the buyer party
+     *
+     * @param  string|null $legalorgid   __BT-47, From MINIMUM__ An identifier issued by an official registrar that identifies the buyer as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided, it should be known to the buyer and buyer
+     * @param  string|null $legalorgtype __BT-47-1, From MINIMUM__ The identifier for the identification scheme of the legal registration of the buyer. If the identification scheme is used, it must be selected from ISO/IEC 6523 list
+     * @param  string|null $legalorgname __BT-45, From EN 16931__ A name by which the buyer is known, if different from the buyers name (also known as the company name)
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentBuyerLegalOrganisation(?string $legalorgid, ?string $legalorgtype, ?string $legalorgname): ZugferdDocumentBuilder
+    {
+        $buyerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getBuyerTradeParty");
+        $legalorg = $this->getObjectHelper()->getLegalOrganization($legalorgid, $legalorgtype, $legalorgname);
+        $this->getObjectHelper()->tryCall($buyerTradeParty, "setSpecifiedLegalOrganization", $legalorg);
+        return $this;
+    }
+
+    /**
+     * Set contact of the buyer party
+     *
+     * @param  string|null $contactpersonname     __BT-56, From EN 16931__ Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname __BT-, From __ Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno        __BT-57, From EN 16931__ Detailed information on the buyer's phone number
+     * @param  string|null $contactfaxno          __BT-, From __ Detailed information on the buyer's fax number
+     * @param  string|null $contactemailadd       __BT-58, From EN 16931__ Detailed information on the buyer's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentBuyerContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $buyerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getBuyerTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCallIfMethodExists($buyerTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact);
+        return $this;
+    }
+
+    /**
+     * Add additional contact of the buyer party. This only supported in the
+     * EXTENDED profile
+     *
+     * @param  string|null $contactpersonname     __BT-, From __ Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname __BT-, From __ Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno        __BT-, From __ Detailed information on the buyer's phone number
+     * @param  string|null $contactfaxno          __BT-, From __ Detailed information on the buyer's fax number
+     * @param  string|null $contactemailadd       __BT-, From __ Detailed information on the buyer's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentBuyerContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $buyerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getBuyerTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCall($buyerTradeParty, "addToDefinedTradeContact", $contact);
+        return $this;
+    }
+
+    /**
+     * Set Buyers electronic communication information
+     *
+     * @param  string|null $uriScheme __BT-49-1, From BASIC WL__
+     * @param  string|null $uri       __BT-49, From BASIC WL__
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentBuyerCommunication(?string $uriScheme, ?string $uri): ZugferdDocumentBuilder
+    {
+        $buyerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getBuyerTradeParty");
+        $communication = $this->getObjectHelper()->getUniversalCommunicationType(null, $uri, $uriScheme);
+        $this->getObjectHelper()->tryCall($buyerTradeParty, "setURIUniversalCommunication", $communication);
+        return $this;
+    }
+
+    /**
+     * Sets the sellers tax representative trade party
+     *
+     * @param  string      $name        __BT-62, From BASIC WL__ The full name of the seller's tax agent
+     * @param  string|null $id          __BT-, From __ An identifier of the sellers tax agent.
+     * @param  string|null $description __BT-, From __ Further legal information that is relevant for the sellers tax agent
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentSellerTaxRepresentativeTradeParty(string $name, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder
+    {
+        $sellerTaxRepresentativeTradeParty = $this->getObjectHelper()->getTradeParty($name, $id, $description);
+        $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "setSellerTaxRepresentativeTradeParty", $sellerTaxRepresentativeTradeParty);
+        return $this;
+    }
+
+    /**
+     * Add a global id for the Tax representative party
+     *
+     * @param  string|null $globalID
+     * The seller's tax agent identifier identification scheme is an identifier uniquely assigned to a seller by a
+     * global registration organization.
+     * @param  string|null $globalIDType
+     * If the identifier is used for the identification scheme, it must be selected from the entries in
+     * the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentSellerTaxRepresentativeGlobalId(?string $globalID = null, ?string $globalIDType = null): ZugferdDocumentBuilder
+    {
+        $taxrepresentativeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTaxRepresentativeTradeParty");
+        $this->getObjectHelper()->tryCall($taxrepresentativeTradeParty, "addToGlobalID", $this->getObjectHelper()->getIdType($globalID, $globalIDType));
+        return $this;
+    }
+
+    /**
+     * Add Tax registration to tax representative party
+     *
+     * @param  string|null $taxregtype __BT-63-0, From BASIC WL__ Type of tax number of the seller (FC = Tax number, VA = Sales tax identification number)
+     * @param  string|null $taxregid   __BT-63, From BASIC WL__ Tax number of the seller or sales tax identification number of the seller
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentSellerTaxRepresentativeTaxRegistration(?string $taxregtype = null, ?string $taxregid = null): ZugferdDocumentBuilder
+    {
+        $taxrepresentativeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTaxRepresentativeTradeParty");
+        $taxreg = $this->getObjectHelper()->getTaxRegistrationType($taxregtype, $taxregid);
+        $this->getObjectHelper()->tryCall($taxrepresentativeTradeParty, "addToSpecifiedTaxRegistration", $taxreg);
+        return $this;
+    }
+
+    /**
+     * Sets the postal address of the tax representative party
+     *
+     * @param  string|null $lineone     __BT-64, From BASIC WL__ The main line in the sellers tax agent address. This is usually the street name and house number or the post office box
+     * @param  string|null $linetwo     __BT-65, From BASIC WL__ Line 2 of the sellers tax agent address. This is an additional address line in an address that can be used to provide additional details in addition to the main line
+     * @param  string|null $linethree   __BT-164, From BASIC WL__ Line 3 of the sellers tax agent address. This is an additional address line in an address that can be used to provide additional details in addition to the main line
+     * @param  string|null $postcode    __BT-67, From BASIC WL__ Identifier for a group of properties, such as a zip code
+     * @param  string|null $city        __BT-66, From BASIC WL__ Usual name of the city or municipality in which the sellers tax agent address is located
+     * @param  string|null $country     __BT-69, From BASIC WL__ Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the representation of names of countries and their subdivisionsâ
+     * @param  string|null $subdivision __BT-68, From BASIC WL__ The sellers tax agent state
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentSellerTaxRepresentativeAddress(?string $lineone = null, ?string $linetwo = null, ?string $linethree = null, ?string $postcode = null, ?string $city = null, ?string $country = null, ?string $subdivision = null): ZugferdDocumentBuilder
+    {
+        $taxrepresentativeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTaxRepresentativeTradeParty");
+        $address = $this->getObjectHelper()->getTradeAddress($lineone, $linetwo, $linethree, $postcode, $city, $country, $subdivision);
+        $this->getObjectHelper()->tryCall($taxrepresentativeTradeParty, "setPostalTradeAddress", $address);
+        return $this;
+    }
+
+    /**
+     * Set legal organisation of the tax representative party
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the seller tax agent as
+     * a legal entity or legal person.
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal registration of the sellers tax
+     * agent. If the identification scheme is used, it must be selected from  ISO/IEC 6523 list
+     * @param  string|null $legalorgname
+     * A name by which the sellers tax agent is known, if different from the  sellers tax agent
+     * name (also known as the company name)
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentSellerTaxRepresentativeLegalOrganisation(?string $legalorgid, ?string $legalorgtype, ?string $legalorgname): ZugferdDocumentBuilder
+    {
+        $taxrepresentativeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTaxRepresentativeTradeParty");
+        $legalorg = $this->getObjectHelper()->getLegalOrganization($legalorgid, $legalorgtype, $legalorgname);
+        $this->getObjectHelper()->tryCall($taxrepresentativeTradeParty, "setSpecifiedLegalOrganization", $legalorg);
+        return $this;
+    }
+
+    /**
+     * Set contact of the tax representative party
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the seller's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the seller's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the seller's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentSellerTaxRepresentativeContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $taxrepresentativeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTaxRepresentativeTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCallIfMethodExists($taxrepresentativeTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact);
+        return $this;
+    }
+
+    /**
+     * Add an additional contact to the tax representative party. This is only supported in
+     * EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the seller's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the seller's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the seller's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentSellerTaxRepresentativeContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $taxrepresentativeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getSellerTaxRepresentativeTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCall($taxrepresentativeTradeParty, "addToDefinedTradeContact", $contact);
+        return $this;
+    }
+
+    /**
+     * Detailed information on the product end user (general information)
+     *
+     * @param  string      $name
+     * The full formal name under which the product end user is registered in the
+     * National Register of Legal Entities, Taxable Person or otherwise acting as person(s)
+     * @param  string|null $id
+     * An identifier of the product end user. In many systems, product end user identification
+     * is key information. Multiple product end user IDs can be assigned or specified. They can be differentiated
+     * by using different identification schemes. If no scheme is given, it should be known to all trade
+     * parties, e.g. a previously exchanged
+     * @param  string|null $description
+     * Further legal information that is relevant for the product end user
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentProductEndUser(string $name, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder
+    {
+        $productEndUserTradeParty = $this->getObjectHelper()->getTradeParty($name, $id, $description);
+        $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "setProductEndUserTradeParty", $productEndUserTradeParty);
+        return $this;
+    }
+
+    /**
+     * Add a global id for the Product Enduser Trade Party
+     *
+     * @param  string|null $globalID
+     * The identifier is uniquely assigned to a party by a global registration organization.
+     * @param  string|null $globalIDType
+     * If the identifier is used for the identification scheme, it must be selected from the entries in
+     * the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentProductEndUserGlobalId(?string $globalID = null, ?string $globalIDType = null): ZugferdDocumentBuilder
+    {
+        $productEndUserTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getProductEndUserTradeParty");
+        $this->getObjectHelper()->tryCall($productEndUserTradeParty, "addToGlobalID", $this->getObjectHelper()->getIdType($globalID, $globalIDType));
+        return $this;
+    }
+
+    /**
+     * Add Tax registration to Product Enduser Trade Party
+     *
+     * The local identification (defined by the party's address) of the party for tax purposes or a reference that enables the party
+     * to indicate his reporting status for tax purposes The sales tax identification number of the party
+     * Note: This information may affect how the buyer the invoice settled (such as in relation to social security contributions). So
+     * e.g. In some countries, if the party is not reported for tax, the buyer will withhold the tax amount and pay it on behalf of the
+     * party. Sales tax number with a prefixed country code. A supplier registered as subject to VAT must provide his sales tax
+     * identification number, unless he uses a tax agent.
+     *
+     * @param  string|null $taxregtype
+     * Type of tax number of the seller (FC = Tax number, VA = Sales tax identification number)
+     * @param  string|null $taxregid
+     * Tax number of the seller or sales tax identification number of the seller
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentProductEndUserTaxRegistration(?string $taxregtype = null, ?string $taxregid = null): ZugferdDocumentBuilder
+    {
+        $productEndUserTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getProductEndUserTradeParty");
+        $taxreg = $this->getObjectHelper()->getTaxRegistrationType($taxregtype, $taxregid);
+        $this->getObjectHelper()->tryCall($productEndUserTradeParty, "addToSpecifiedTaxRegistration", $taxreg);
+        return $this;
+    }
+
+    /**
+     * Sets the postal address of the Product Enduser party
+     *
+     * @param  string|null $lineone
+     * The main line in the product end users address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the product end users address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the product end users address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the product end users address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  string|null $subdivision
+     * The product end users state
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentProductEndUserAddress(?string $lineone = null, ?string $linetwo = null, ?string $linethree = null, ?string $postcode = null, ?string $city = null, ?string $country = null, ?string $subdivision = null): ZugferdDocumentBuilder
+    {
+        $productEndUserTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getProductEndUserTradeParty");
+        $address = $this->getObjectHelper()->getTradeAddress($lineone, $linetwo, $linethree, $postcode, $city, $country, $subdivision);
+        $this->getObjectHelper()->tryCall($productEndUserTradeParty, "setPostalTradeAddress", $address);
+        return $this;
+    }
+
+    /**
+     * Set legal organisation of the Product Enduser party
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * product end user as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to all trade parties
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal
+     * registration of the product end user. If the identification scheme is used, it must be selected from
+     * ISO/IEC 6523 list
+     * @param  string|null $legalorgname
+     * A name by which the product end user is known, if different from the product
+     * end users name (also known as the company name)
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentProductEndUserLegalOrganisation(?string $legalorgid, ?string $legalorgtype, ?string $legalorgname): ZugferdDocumentBuilder
+    {
+        $productEndUserTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getProductEndUserTradeParty");
+        $legalorg = $this->getObjectHelper()->getLegalOrganization($legalorgid, $legalorgtype, $legalorgname);
+        $this->getObjectHelper()->tryCall($productEndUserTradeParty, "setSpecifiedLegalOrganization", $legalorg);
+        return $this;
+    }
+
+    /**
+     * Set contact of the Product Enduser party
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the product end user's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the product end user's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the product end user's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentProductEndUserContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $productEndUserTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getProductEndUserTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCallIfMethodExists($productEndUserTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact);
+        return $this;
+    }
+
+    /**
+     * Add an additional contact to the Product Enduser party. This is only supported in
+     * EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the product end user's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the product end user's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the product end user's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentProductEndUserContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $productEndUserTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeAgreement, "getProductEndUserTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCall($productEndUserTradeParty, "addToDefinedTradeContact", $contact);
+        return $this;
+    }
+
+    /**
+     * Ship-To
+     *
+     * @param  string      $name        __BT-70, From BASIC WL__ The name of the party to whom the goods are being delivered or for whom the services are being performed. Must be used if the recipient of the goods or services is not the same as the buyer.
+     * @param  string|null $id          __BT-71, From BASIC WL__ An identifier for the place where the goods are delivered or where the services are provided. Multiple IDs can be assigned or specified. They can be differentiated by using different identification schemes. If no scheme is given, it should be known to the buyer and seller, e.g. a previously exchanged identifier assigned by the buyer or seller.
+     * @param  string|null $description __BT-, From __ Further legal information that is relevant for the party
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentShipTo(?string $name, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder
+    {
+        $shipToTradeParty = $this->getObjectHelper()->getTradeParty($name, $id, $description);
+        $this->getObjectHelper()->tryCall($this->headerTradeDelivery, "setShipToTradeParty", $shipToTradeParty);
+        return $this;
+    }
+
+    /**
+     * Add an id to the Ship-to Trade Party
+     *
+     * @param  string|null $id          __BT-71, From BASIC WL__ An identifier for the place where the goods are delivered or where the services are provided. Multiple IDs can be assigned or specified. They can be differentiated by using different identification schemes. If no scheme is given, it should be known to the buyer and seller, e.g. a previously exchanged identifier assigned by the buyer or seller.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentShipTolId(string $id): ZugferdDocumentBuilder
+    {
+        $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipToTradeParty");
+        $this->getObjectHelper()->tryCall($shipToTradeParty, "addToID", $this->getObjectHelper()->getIdType($id));
+        return $this;
+    }
+
+    /**
+     * Add a global id for the Ship-to Trade Party
+     *
+     * @param  string|null $globalID     __BT-71-0, From __ Global identifier of the goods recipient
+     * @param  string|null $globalIDType __BT-71-1, From __ Type of global identification number, must be selected from the entries in the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentShipToGlobalId(?string $globalID = null, ?string $globalIDType = null): ZugferdDocumentBuilder
+    {
+        $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipToTradeParty");
+        $this->getObjectHelper()->tryCall($shipToTradeParty, "addToGlobalID", $this->getObjectHelper()->getIdType($globalID, $globalIDType));
+        return $this;
+    }
+
+    /**
+     * Add Tax registration to Ship-To Trade party
+     *
+     * @param  string|null $taxregtype __BT-, From __ Type of tax number of the seller (FC = Tax number, VA = Sales tax identification number)
+     * @param  string|null $taxregid   __BT-, From __ Tax number of the seller or sales tax identification number of the seller
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentShipToTaxRegistration(?string $taxregtype = null, ?string $taxregid = null): ZugferdDocumentBuilder
+    {
+        $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipToTradeParty");
+        $taxreg = $this->getObjectHelper()->getTaxRegistrationType($taxregtype, $taxregid);
+        $this->getObjectHelper()->tryCall($shipToTradeParty, "addToSpecifiedTaxRegistration", $taxreg);
+        return $this;
+    }
+
+    /**
+     * Sets the postal address of the Ship-To party
+     *
+     * @param  string|null $lineone     __BT-75, From BASIC WL__ The main line in the party's address. This is usually the street name and house number or the post office box
+     * @param  string|null $linetwo     __BT-76, From BASIC WL__ Line 2 of the party's address. This is an additional address line in an address that can be used to provide additional details in addition to the main line
+     * @param  string|null $linethree   __BT-165, From BASIC WL__ Line 3 of the party's address. This is an additional address line in an address that can be used to provide additional details in addition to the main line
+     * @param  string|null $postcode    __BT-78, From BASIC WL__ Identifier for a group of properties, such as a zip code
+     * @param  string|null $city        __BT-77, From BASIC WL__ Usual name of the city or municipality in which the party's address is located
+     * @param  string|null $country     __BT-80, From BASIC WL__ Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the representation of names of countries and their subdivisionsâ
+     * @param  string|null $subdivision __BT-79, From BASIC WL__ The party's state
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentShipToAddress(?string $lineone = null, ?string $linetwo = null, ?string $linethree = null, ?string $postcode = null, ?string $city = null, ?string $country = null, ?string $subdivision = null): ZugferdDocumentBuilder
+    {
+        $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipToTradeParty");
+        $address = $this->getObjectHelper()->getTradeAddress($lineone, $linetwo, $linethree, $postcode, $city, $country, $subdivision);
+        $this->getObjectHelper()->tryCall($shipToTradeParty, "setPostalTradeAddress", $address);
+        return $this;
+    }
+
+    /**
+     * Set legal organisation of the Ship-To party
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * party as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer or seller party
+     * @param  string|null $legalorgtype The identifier for the identification scheme of the legal
+     *                                   registration of the party. In particular, the following scheme codes are used: 0021 : SWIFT, 0088 : EAN,
+     *                                   0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname A name by which the party is known, if different from the party's name
+     *                                   (also known as the company name)
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentShipToLegalOrganisation(?string $legalorgid, ?string $legalorgtype, ?string $legalorgname): ZugferdDocumentBuilder
+    {
+        $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipToTradeParty");
+        $legalorg = $this->getObjectHelper()->getLegalOrganization($legalorgid, $legalorgtype, $legalorgname);
+        $this->getObjectHelper()->tryCall($shipToTradeParty, "setSpecifiedLegalOrganization", $legalorg);
+        return $this;
+    }
+
+    /**
+     * Set contact of the Ship-To party. All formerly assigned contacts will be
+     * overwritten
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentShipToContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipToTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCallIfMethodExists($shipToTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact);
+        return $this;
+    }
+
+    /**
+     * Add a contact to the Ship-To party. This is actually only possible in
+     * the EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentShipToContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipToTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCall($shipToTradeParty, "addToDefinedTradeContact", $contact);
+        return $this;
+    }
+
+    /**
+     * Detailed information on the different end recipient
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string      $name
+     * Name or company name of the different end recipient
+     * @param  string|null $id
+     * Identification of the different end recipient. Multiple IDs can be assigned or specified. They can be
+     * differentiated by using different identification schemes.
+     * @param  string|null $description
+     * Further legal information that is relevant for the different end recipient
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentUltimateShipTo(string $name, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder
+    {
+        $shipToTradeParty = $this->getObjectHelper()->getTradeParty($name, $id, $description);
+        $this->getObjectHelper()->tryCall($this->headerTradeDelivery, "setUltimateShipToTradeParty", $shipToTradeParty);
+        return $this;
+    }
+
+    /**
+     * Add an id to the different end recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $id
+     * Identification of the different end recipient. Multiple IDs can be assigned or specified. They can be
+     * differentiated by using different identification schemes.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentUltimateShipToId(string $id): ZugferdDocumentBuilder
+    {
+        $UltimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getUltimateShipToTradeParty");
+        $this->getObjectHelper()->tryCall($UltimateShipToTradeParty, "addToID", $this->getObjectHelper()->getIdType($id));
+        return $this;
+    }
+
+    /**
+     * Add a global id for the different end recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $globalID
+     * Global identifier of the goods recipient
+     * @param  string|null $globalIDType
+     * Type of global identification number, must be selected from the entries in
+     * the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentUltimateShipToGlobalId(?string $globalID = null, ?string $globalIDType = null): ZugferdDocumentBuilder
+    {
+        $UltimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getUltimateShipToTradeParty");
+        $this->getObjectHelper()->tryCall($UltimateShipToTradeParty, "addToGlobalID", $this->getObjectHelper()->getIdType($globalID, $globalIDType));
+        return $this;
+    }
+
+    /**
+     * Add Tax registration to the different end recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $taxregtype
+     * Type of tax number of the seller (FC = Tax number, VA = Sales tax identification number)
+     * @param  string|null $taxregid
+     * Tax number of the seller or sales tax identification number of the seller
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentUltimateShipToTaxRegistration(?string $taxregtype = null, ?string $taxregid = null): ZugferdDocumentBuilder
+    {
+        $UltimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getUltimateShipToTradeParty");
+        $taxreg = $this->getObjectHelper()->getTaxRegistrationType($taxregtype, $taxregid);
+        $this->getObjectHelper()->tryCall($UltimateShipToTradeParty, "addToSpecifiedTaxRegistration", $taxreg);
+        return $this;
+    }
+
+    /**
+     * Sets the postal address of the different end recipient
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $lineone
+     * The main line in the party's address. This is usually the street name and house number or
+     * the post office box. For major customer addresses, this field must be filled with "-".
+     * @param  string|null $linetwo
+     * Line 2 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the party's address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  string|null $subdivision
+     * The party's state
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentUltimateShipToAddress(?string $lineone = null, ?string $linetwo = null, ?string $linethree = null, ?string $postcode = null, ?string $city = null, ?string $country = null, ?string $subdivision = null): ZugferdDocumentBuilder
+    {
+        $UltimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getUltimateShipToTradeParty");
+        $address = $this->getObjectHelper()->getTradeAddress($lineone, $linetwo, $linethree, $postcode, $city, $country, $subdivision);
+        $this->getObjectHelper()->tryCall($UltimateShipToTradeParty, "setPostalTradeAddress", $address);
+        return $this;
+    }
+
+    /**
+     * Set legal organisation of the different end recipient
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * party as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer or seller party
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal registration of the party. In particular,
+     * the following scheme codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname
+     * A name by which the party is known, if different from the party's name (also known as the company name)
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentUltimateShipToLegalOrganisation(?string $legalorgid, ?string $legalorgtype, ?string $legalorgname): ZugferdDocumentBuilder
+    {
+        $UltimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getUltimateShipToTradeParty");
+        $legalorg = $this->getObjectHelper()->getLegalOrganization($legalorgid, $legalorgtype, $legalorgname);
+        $this->getObjectHelper()->tryCall($UltimateShipToTradeParty, "setSpecifiedLegalOrganization", $legalorg);
+        return $this;
+    }
+
+    /**
+     * Set contact of the different end recipient
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentUltimateShipToContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $UltimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getUltimateShipToTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCallIfMethodExists($UltimateShipToTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact);
+        return $this;
+    }
+
+    /**
+     * Add an additional contact to the different end recipient. This is only supported in the
+     * EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentUltimateShipToContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $UltimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getUltimateShipToTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCall($UltimateShipToTradeParty, "addToDefinedTradeContact", $contact);
+        return $this;
+    }
+
+    /**
+     * Set detailed information of the deviating consignor party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string      $name
+     * The name of the party
+     * @param  string|null $id
+     * An identifier for the party. Multiple IDs can be assigned or specified. They can be differentiated by using
+     * different identification schemes. If no scheme is given, it should  be known to the buyer and seller, e.g.
+     * a previously exchanged identifier assigned by the buyer or seller.
+     * @param  string|null $description
+     * Further legal information that is relevant for the party
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentShipFrom(string $name, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder
+    {
+        $shipToTradeParty = $this->getObjectHelper()->getTradeParty($name, $id, $description);
+        $this->getObjectHelper()->tryCall($this->headerTradeDelivery, "setShipFromTradeParty", $shipToTradeParty);
+        return $this;
+    }
+
+    /**
+     * Add an id to the deviating consignor party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $id
+     * An identifier for the party. Multiple IDs can be assigned or specified. They can be differentiated by using
+     * different identification schemes. If no scheme is given, it should  be known to the buyer and seller, e.g.
+     * a previously exchanged identifier assigned by the buyer or seller.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentShipFromId(string $id): ZugferdDocumentBuilder
+    {
+        $shipFromTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipFromTradeParty");
+        $this->getObjectHelper()->tryCall($shipFromTradeParty, "addToID", $this->getObjectHelper()->getIdType($id));
+        return $this;
+    }
+
+    /**
+     * Add a global id for the deviating consignor party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $globalID
+     * Global identifier of the goods recipient
+     * @param  string|null $globalIDType
+     * Type of global identification number, must be selected from the entries in
+     * the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentShipFromGlobalId(?string $globalID = null, ?string $globalIDType = null): ZugferdDocumentBuilder
+    {
+        $shipFromTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipFromTradeParty");
+        $this->getObjectHelper()->tryCall($shipFromTradeParty, "addToGlobalID", $this->getObjectHelper()->getIdType($globalID, $globalIDType));
+        return $this;
+    }
+
+    /**
+     * Add Tax registration to the deviating consignor party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $taxregtype
+     * Type of tax number of the seller (FC = Tax number, VA = Sales tax identification number)
+     * @param  string|null $taxregid
+     * Tax number of the seller or sales tax identification number of the seller
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentShipFromTaxRegistration(?string $taxregtype = null, ?string $taxregid = null): ZugferdDocumentBuilder
+    {
+        $shipFromTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipFromTradeParty");
+        $taxreg = $this->getObjectHelper()->getTaxRegistrationType($taxregtype, $taxregid);
+        $this->getObjectHelper()->tryCall($shipFromTradeParty, "addToSpecifiedTaxRegistration", $taxreg);
+        return $this;
+    }
+
+    /**
+     * Sets the postal address of the deviating consignor party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $lineone
+     * The main line in the party's address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the party's address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  string|null $subdivision
+     * The party's state
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentShipFromAddress(?string $lineone = null, ?string $linetwo = null, ?string $linethree = null, ?string $postcode = null, ?string $city = null, ?string $country = null, ?string $subdivision = null): ZugferdDocumentBuilder
+    {
+        $shipFromTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipFromTradeParty");
+        $address = $this->getObjectHelper()->getTradeAddress($lineone, $linetwo, $linethree, $postcode, $city, $country, $subdivision);
+        $this->getObjectHelper()->tryCall($shipFromTradeParty, "setPostalTradeAddress", $address);
+        return $this;
+    }
+
+    /**
+     * Set legal organisation of the deviating consignor party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * party as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer or seller party
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal registration of the party. In particular,
+     * the following scheme codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname
+     * A name by which the party is known, if different from the party's name (also known as the company name)
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentShipFromLegalOrganisation(?string $legalorgid, ?string $legalorgtype, ?string $legalorgname): ZugferdDocumentBuilder
+    {
+        $shipFromTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipFromTradeParty");
+        $legalorg = $this->getObjectHelper()->getLegalOrganization($legalorgid, $legalorgtype, $legalorgname);
+        $this->getObjectHelper()->tryCall($shipFromTradeParty, "setSpecifiedLegalOrganization", $legalorg);
+        return $this;
+    }
+
+    /**
+     * Set contact of the deviating consignor party
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentShipFromContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $shipFromTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipFromTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCallIfMethodExists($shipFromTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact);
+        return $this;
+    }
+
+    /**
+     * Add an additional contact to the deviating consignor party. This is only supported in the
+     * EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentShipFromContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $shipFromTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeDelivery, "getShipFromTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCall($shipFromTradeParty, "addToDefinedTradeContact", $contact);
+        return $this;
+    }
+
+    /**
+     * Invoicer (Rechnungssteller)
+     *
+     * @param  string      $name
+     * The name of the party
+     * @param  string|null $id
+     * An identifier for the party. Multiple IDs can be assigned or specified. They can be differentiated by using
+     * different identification schemes. If no scheme is given, it should  be known to the buyer and seller, e.g.
+     * a previously exchanged identifier assigned by the buyer or seller.
+     * @param  string|null $description
+     * Further legal information that is relevant for the party
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentInvoicer(string $name, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder
+    {
+        $invoicerTradeParty = $this->getObjectHelper()->getTradeParty($name, $id, $description);
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setInvoicerTradeParty", $invoicerTradeParty);
+        return $this;
+    }
+
+    /**
+     * Add an id to the Invoicer Trade Party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $id
+     * An identifier for the party. Multiple IDs can be assigned or specified. They can be differentiated by using
+     * different identification schemes. If no scheme is given, it should  be known to the buyer and seller, e.g.
+     * a previously exchanged identifier assigned by the buyer or seller.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentInvoicerId(string $id): ZugferdDocumentBuilder
+    {
+        $invoicerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoicerTradeParty");
+        $this->getObjectHelper()->tryCall($invoicerTradeParty, "addToID", $this->getObjectHelper()->getIdType($id));
+        return $this;
+    }
+
+    /**
+     * Add a global id for the Invoicer Trade Party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $globalID
+     * Global identifier of the goods recipient
+     * @param  string|null $globalIDType
+     * Type of global identification number, must be selected from the entries in
+     * the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentInvoicerGlobalId(?string $globalID = null, ?string $globalIDType = null): ZugferdDocumentBuilder
+    {
+        $invoicerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoicerTradeParty");
+        $this->getObjectHelper()->tryCall($invoicerTradeParty, "addToGlobalID", $this->getObjectHelper()->getIdType($globalID, $globalIDType));
+        return $this;
+    }
+
+    /**
+     * Add Tax registration to Invoicer Trade Party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $taxregtype
+     * Type of tax number of the seller (FC = Tax number, VA = Sales tax identification number)
+     * @param  string|null $taxregid
+     * Tax number of the seller or sales tax identification number of the seller
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentInvoicerTaxRegistration(?string $taxregtype = null, ?string $taxregid = null): ZugferdDocumentBuilder
+    {
+        $invoicerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoicerTradeParty");
+        $taxreg = $this->getObjectHelper()->getTaxRegistrationType($taxregtype, $taxregid);
+        $this->getObjectHelper()->tryCall($invoicerTradeParty, "addToSpecifiedTaxRegistration", $taxreg);
+        return $this;
+    }
+
+    /**
+     * Sets the postal address of the ultimate Ship-from party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $lineone
+     * The main line in the party's address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the party's address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  string|null $subdivision
+     * The party's state
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentInvoicerAddress(?string $lineone = null, ?string $linetwo = null, ?string $linethree = null, ?string $postcode = null, ?string $city = null, ?string $country = null, ?string $subdivision = null): ZugferdDocumentBuilder
+    {
+        $invoicerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoicerTradeParty");
+        $address = $this->getObjectHelper()->getTradeAddress($lineone, $linetwo, $linethree, $postcode, $city, $country, $subdivision);
+        $this->getObjectHelper()->tryCall($invoicerTradeParty, "setPostalTradeAddress", $address);
+        return $this;
+    }
+
+    /**
+     * Set legal organisation of the ultimate Ship-from party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * party as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer or seller party
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal registration of the party. In particular,
+     * the following scheme codes are used: 0021 : SWIFT, 0088 : EAN,* 0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname
+     * A name by which the party is known, if different from the party's name (also known as the company name)
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentInvoicerLegalOrganisation(?string $legalorgid, ?string $legalorgtype, ?string $legalorgname): ZugferdDocumentBuilder
+    {
+        $invoicerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoicerTradeParty");
+        $legalorg = $this->getObjectHelper()->getLegalOrganization($legalorgid, $legalorgtype, $legalorgname);
+        $this->getObjectHelper()->tryCall($invoicerTradeParty, "setSpecifiedLegalOrganization", $legalorg);
+        return $this;
+    }
+
+    /**
+     * Set contact of the ultimate Ship-from party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentInvoicerContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $invoicerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoicerTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCallIfMethodExists($invoicerTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact);
+        return $this;
+    }
+
+    /**
+     * Add an additional contact to the ultimate Ship-from party
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentInvoicerContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $invoicerTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoicerTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCall($invoicerTradeParty, "addToDefinedTradeContact", $contact);
+        return $this;
+    }
+
+    /**
+     * Set detailed information on the different invoice recipient,
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string      $name
+     * The name of the party
+     * @param  string|null $id
+     * An identifier for the party. Multiple IDs can be assigned or specified. They can be differentiated by using
+     * different identification schemes. If no scheme is given, it should  be known to the buyer and seller, e.g.
+     * a previously exchanged identifier assigned by the buyer or seller.
+     * @param  string|null $description
+     * Further legal information that is relevant for the party
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentInvoicee(string $name, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder
+    {
+        $invoiceeTradeParty = $this->getObjectHelper()->getTradeParty($name, $id, $description);
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setInvoiceeTradeParty", $invoiceeTradeParty);
+        return $this;
+    }
+
+    /**
+     * Add an id to the Invoicee Trade Party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $id
+     * An identifier for the party. Multiple IDs can be assigned or specified. They can be differentiated by using
+     * different identification schemes. If no scheme is given, it should  be known to the buyer and seller, e.g.
+     * a previously exchanged identifier assigned by the buyer or seller.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentInvoiceeId(string $id): ZugferdDocumentBuilder
+    {
+        $invoiceeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoiceeTradeParty");
+        $this->getObjectHelper()->tryCall($invoiceeTradeParty, "addToID", $this->getObjectHelper()->getIdType($id));
+        return $this;
+    }
+
+    /**
+     * Add a global id for the Invoicee Trade Party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $globalID
+     * Global identification number
+     * @param  string|null $globalIDType
+     * Type of global identification number, must be selected from the entries in
+     * the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentInvoiceeGlobalId(?string $globalID = null, ?string $globalIDType = null): ZugferdDocumentBuilder
+    {
+        $invoiceeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoiceeTradeParty");
+        $this->getObjectHelper()->tryCall($invoiceeTradeParty, "addToGlobalID", $this->getObjectHelper()->getIdType($globalID, $globalIDType));
+        return $this;
+    }
+
+    /**
+     * Add Tax registration to Invoicer Trade Party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $taxregtype
+     * Type of tax number of the seller (FC = Tax number, VA = Sales tax identification number)
+     * @param  string|null $taxregid
+     * Tax number of the seller or sales tax identification number of the seller
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentInvoiceeTaxRegistration(?string $taxregtype = null, ?string $taxregid = null): ZugferdDocumentBuilder
+    {
+        $invoiceeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoiceeTradeParty");
+        $taxreg = $this->getObjectHelper()->getTaxRegistrationType($taxregtype, $taxregid);
+        $this->getObjectHelper()->tryCall($invoiceeTradeParty, "addToSpecifiedTaxRegistration", $taxreg);
+        return $this;
+    }
+
+    /**
+     * Sets the postal address of the ultimate Ship-from party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $lineone
+     * The main line in the party's address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the party's address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  string|null $subdivision
+     * The party's state
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentInvoiceeAddress(?string $lineone = null, ?string $linetwo = null, ?string $linethree = null, ?string $postcode = null, ?string $city = null, ?string $country = null, ?string $subdivision = null): ZugferdDocumentBuilder
+    {
+        $invoiceeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoiceeTradeParty");
+        $address = $this->getObjectHelper()->getTradeAddress($lineone, $linetwo, $linethree, $postcode, $city, $country, $subdivision);
+        $this->getObjectHelper()->tryCall($invoiceeTradeParty, "setPostalTradeAddress", $address);
+        return $this;
+    }
+
+    /**
+     * Set legal organisation of the ultimate Ship-from party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * party as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer or seller party
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal registration of the party. In particular,
+     * the following scheme codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname
+     * A name by which the party is known, if different from the party's name (also known as the company name)
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentInvoiceeLegalOrganisation(?string $legalorgid, ?string $legalorgtype, ?string $legalorgname): ZugferdDocumentBuilder
+    {
+        $invoiceeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoiceeTradeParty");
+        $legalorg = $this->getObjectHelper()->getLegalOrganization($legalorgid, $legalorgtype, $legalorgname);
+        $this->getObjectHelper()->tryCall($invoiceeTradeParty, "setSpecifiedLegalOrganization", $legalorg);
+        return $this;
+    }
+
+    /**
+     * Set contact of the ultimate Ship-from party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentInvoiceeContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $invoiceeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoiceeTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCallIfMethodExists($invoiceeTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact);
+        return $this;
+    }
+
+    /**
+     * Add an additional contact to the ultimate Ship-from party. This is only supported in the
+     * EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentInvoiceeContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $invoiceeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getInvoiceeTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCall($invoiceeTradeParty, "addToDefinedTradeContact", $contact);
+        return $this;
+    }
+
+    /**
+     * Set detailed information about the payee, i.e. about the place that receives the payment.
+     * The role of the payee may also be performed by a party other than the seller, e.g. by a factoring service.
+     *
+     * @param  string      $name        __BT-59, From BASIC WL__ The name of the party. Must be used if the payee is not the same as the seller. However, the name of the payee may match the name of the seller.
+     * @param  string|null $id          __BT-60, From BASIC WL__ An identifier for the party. Multiple IDs can be assigned or specified. They can be differentiated by using different identification schemes. If no scheme is given, it should  be known to the buyer and seller, e.g. a previously exchanged identifier assigned by the buyer or seller.
+     * @param  string|null $description __BT-, From __ Further legal information that is relevant for the party
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPayee(string $name, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder
+    {
+        $payeeTradeParty = $this->getObjectHelper()->getTradeParty($name, $id, $description);
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setPayeeTradeParty", $payeeTradeParty);
+        return $this;
+    }
+
+    /**
+     * Add an id to the payee trade party
+     *
+     * @param  string|null $id          __BT-60, From BASIC WL__ An identifier for the party. Multiple IDs can be assigned or specified. They can be differentiated by using different identification schemes. If no scheme is given, it should  be known to the buyer and seller, e.g. a previously exchanged identifier assigned by the buyer or seller.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPayeeId(string $id): ZugferdDocumentBuilder
+    {
+        $payeeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getPayeeTradeParty");
+        $this->getObjectHelper()->tryCall($payeeTradeParty, "addToID", $this->getObjectHelper()->getIdType($id));
+        return $this;
+    }
+
+    /**
+     * Add a global id for the payee trade party
+     *
+     * @param  string|null $globalID
+     * Global identification number
+     * @param  string|null $globalIDType
+     * Type of global identification number, must be selected from the entries in
+     * the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPayeeGlobalId(?string $globalID = null, ?string $globalIDType = null): ZugferdDocumentBuilder
+    {
+        $payeeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getPayeeTradeParty");
+        $this->getObjectHelper()->tryCall($payeeTradeParty, "addToGlobalID", $this->getObjectHelper()->getIdType($globalID, $globalIDType));
+        return $this;
+    }
+
+    /**
+     * Add Tax registration to payee trade party
+     *
+     * @param  string|null $taxregtype __BT-, From BASIC WL__ Type of tax number of the seller (FC = Tax number, VA = Sales tax identification number)
+     * @param  string|null $taxregid   __BT-60, From BASIC WL__ Tax number of the seller or sales tax identification number of the seller
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPayeeTaxRegistration(?string $taxregtype = null, ?string $taxregid = null): ZugferdDocumentBuilder
+    {
+        $payeeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getPayeeTradeParty");
+        $taxreg = $this->getObjectHelper()->getTaxRegistrationType($taxregtype, $taxregid);
+        $this->getObjectHelper()->tryCall($payeeTradeParty, "addToSpecifiedTaxRegistration", $taxreg);
+        return $this;
+    }
+
+    /**
+     * Sets the postal address of the payee trade party
+     *
+     * @param  string|null $lineone
+     * The main line in the party's address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the party's address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  string|null $subdivision
+     * The party's state
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPayeeAddress(?string $lineone = null, ?string $linetwo = null, ?string $linethree = null, ?string $postcode = null, ?string $city = null, ?string $country = null, ?string $subdivision = null): ZugferdDocumentBuilder
+    {
+        $payeeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getPayeeTradeParty");
+        $address = $this->getObjectHelper()->getTradeAddress($lineone, $linetwo, $linethree, $postcode, $city, $country, $subdivision);
+        $this->getObjectHelper()->tryCall($payeeTradeParty, "setPostalTradeAddress", $address);
+        return $this;
+    }
+
+    /**
+     * Set legal organisation of the payee trade party
+     *
+     * @param  string|null $legalorgid   __BT-61, From BASIC WL__ An identifier issued by an official registrar that identifies the party as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided, it should be known to the buyer or seller party
+     * @param  string|null $legalorgtype __BT-, From __ The identifier for the identification scheme of the legal registration of the party. In particular, the following scheme codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname __BT-, From __ A name by which the party is known, if different from the party's name (also known as the company name)
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPayeeLegalOrganisation(?string $legalorgid, ?string $legalorgtype, ?string $legalorgname): ZugferdDocumentBuilder
+    {
+        $payeeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getPayeeTradeParty");
+        $legalorg = $this->getObjectHelper()->getLegalOrganization($legalorgid, $legalorgtype, $legalorgname);
+        $this->getObjectHelper()->tryCall($payeeTradeParty, "setSpecifiedLegalOrganization", $legalorg);
+        return $this;
+    }
+
+    /**
+     * Set contact of the payee trade party
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPayeeContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $payeeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getPayeeTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCallIfMethodExists($payeeTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact);
+        return $this;
+    }
+
+    /**
+     * Add an additional contact to the payee trade party. Note this is only supported in the
+     * EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPayeeContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $payeeTradeParty = $this->getObjectHelper()->tryCallAndReturn($this->headerTradeSettlement, "getPayeeTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCall($payeeTradeParty, "addToDefinedTradeContact", $contact);
+        return $this;
+    }
+
+    /**
+     * Set information on the delivery conditions
+     *
+     * __Note__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $code
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentDeliveryTerms(?string $code): ZugferdDocumentBuilder
+    {
+        $deliveryterms = $this->getObjectHelper()->getTradeDeliveryTermsType($code);
+        $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "setApplicableTradeDeliveryTerms", $deliveryterms);
+        return $this;
+    }
+
+    /**
+     * Set details of the associated order confirmation
+     *
+     * @param  string        $issuerassignedid __BT-14, From EN 16931__ An identifier issued by the seller for a referenced sales order (Order confirmation number)
+     * @param  DateTime|null $issueddate       __BT-, From __ Order confirmation date
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentSellerOrderReferencedDocument(string $issuerassignedid, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $sellerorderrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, null, null, null, null, $issueddate, null);
+        $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "setSellerOrderReferencedDocument", $sellerorderrefdoc);
+        return $this;
+    }
+
+    /**
+     * Set details of the related buyer order
+     *
+     * @param  string        $issuerassignedid __BT-13, From MINIMUM__ An identifier issued by the buyer for a referenced order (order number)
+     * @param  DateTime|null $issueddate       __BT-, From __ Date of order
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentBuyerOrderReferencedDocument(?string $issuerassignedid, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $buyerorderrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, null, null, null, null, $issueddate, null);
+        $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "setBuyerOrderReferencedDocument", $buyerorderrefdoc);
+        return $this;
+    }
+
+    /**
+     * Set details of the associated contract
+     *
+     * @param  string        $issuerassignedid __BT-12, From BASIC WL__ The contract reference should be assigned once in the context of the specific trade relationship and for a defined period of time (contract number)
+     * @param  DateTime|null $issueddate       __BT-, From __ Contract date
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentContractReferencedDocument(?string $issuerassignedid, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $contractrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, null, null, null, null, $issueddate, null);
+        $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "setContractReferencedDocument", $contractrefdoc);
+        return $this;
+    }
+
+    /**
+     * Set information about billing documents that provide evidence of claims made in the bill
+     *
+     * __Notes__
+     *  - The documents justifying the invoice can be used to reference a document number, which should be
+     *    known to the recipient, as well as an external document (referenced by a URL) or an embedded document (such
+     *    as a timesheet as a PDF file). The option of linking to an external document is e.g. required when it comes
+     *    to large attachments and / or sensitive information, e.g. for personal services, which must be separated
+     *    from the bill
+     *  - Use ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument and
+     *    ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument to seek between multiple additional referenced
+     *    documents
+     *
+     * @param  string            $issuerassignedid
+     * The identifier of the tender or lot to which the invoice relates, or an identifier specified by the seller for
+     * an object on which the invoice is based, or an identifier of the document on which the invoice is based.
+     * @param  string            $typecode
+     * Type of referenced document (See codelist UNTDID 1001)
+     *  - Code 916 "reference paper" is used to reference the identification of the document on which the invoice is based
+     *  - Code 50 "Price / sales catalog response" is used to reference the tender or the lot
+     *  - Code 130 "invoice data sheet" is used to reference an identifier for an object specified by the seller.
+     * @param  string|null       $uriid
+     * The Uniform Resource Locator (URL) at which the external document is available. A means of finding the resource
+     * including the primary access method intended for it, e.g. http: // or ftp: //. The location of the external document
+     * must be used if the buyer needs additional information to support the amounts billed. External documents are not part
+     * of the invoice. Access to external documents can involve certain risks.
+     * @param  string|array|null $name
+     * A description of the document, e.g. Hourly billing, usage or consumption report, etc.
+     * @param  string|null       $reftypecode
+     * The identifier for the identification scheme of the identifier of the item invoiced. If it is not clear to the
+     * recipient which scheme is used for the identifier, an identifier of the scheme should be used, which must be selected
+     * from UNTDID 1153 in accordance with the code list entries.
+     * @param  DateTime|null     $issueddate
+     * Document date
+     * @param  string|null       $binarydatafilename
+     * Contains a file name of an attachment document embedded as a binary object
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentAdditionalReferencedDocument(string $issuerassignedid, string $typecode, ?string $uriid = null, $name = null, ?string $reftypecode = null, ?DateTime $issueddate = null, ?string $binarydatafilename = null): ZugferdDocumentBuilder
+    {
+        $additionalrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, $uriid, null, $typecode, $name, $reftypecode, $issueddate, $binarydatafilename);
+        $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "addToAdditionalReferencedDocument", $additionalrefdoc);
+        return $this;
+    }
+
+    /**
+     * Set a Reference to the previous invoice
+     *
+     * __Note__: To be used if:
+     *  - a previous invoice is corrected
+     *  - reference is made to previous partial invoices from a final invoice
+     *  - Reference is made to previous invoices for advance payments from a final invoice
+     *
+     * @param  string        $issuerassignedid __BT-25, From BASIC WL__ Number of the previous invoice
+     * @param  DateTime|null $issueddate       __BT-26, From BASIC WL__ Date of the previous invoice
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentInvoiceReferencedDocument(string $issuerassignedid, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $invoicerefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, null, null, null, null, $issueddate, null);
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setInvoiceReferencedDocument", $invoicerefdoc);
+        return $this;
+    }
+
+    /**
+     * Set Details of a project reference
+     *
+     * @param  string $id   __BT-11, From EN 16931__ Project Data
+     * @param  string $name __BT-, From __ Project Name
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentProcuringProject(string $id, string $name = "Project Reference"): ZugferdDocumentBuilder
+    {
+        $procuringproject = $this->getObjectHelper()->getProcuringProjectType($id, $name);
+        $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "setSpecifiedProcuringProject", $procuringproject);
+        return $this;
+    }
+
+    /**
+     * Add a reference of the ultimate customer order
+     *
+     * @param  string        $issuerassignedid
+     * @param  DateTime|null $issueddate
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentUltimateCustomerOrderReferencedDocument(string $issuerassignedid, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $additionalrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, null, null, null, null, $issueddate, null);
+        $this->getObjectHelper()->tryCall($this->headerTradeAgreement, "addToUltimateCustomerOrderReferencedDocument", $additionalrefdoc);
+        return $this;
+    }
+
+    /**
+     * Set detailed information on the actual delivery
+     *
+     * @param  DateTime|null $date __BT-72, From BASIC WL__ Actual delivery time
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentSupplyChainEvent(?DateTime $date): ZugferdDocumentBuilder
+    {
+        $supplyChainevent = $this->getObjectHelper()->getSupplyChainEventType($date);
+        $this->getObjectHelper()->tryCall($this->headerTradeDelivery, "setActualDeliverySupplyChainEvent", $supplyChainevent);
+        return $this;
+    }
+
+    /**
+     * Set detailed information on the associated shipping notification
+     *
+     * @param  string        $issuerassignedid __BT-16, From BASIC WL__ Shipping notification reference
+     * @param  DateTime|null $issueddate       __BT-, From __ Shipping notification date
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentDespatchAdviceReferencedDocument(?string $issuerassignedid, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $despatchddvicerefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, null, null, null, null, $issueddate, null);
+        $this->getObjectHelper()->tryCall($this->headerTradeDelivery, "setDespatchAdviceReferencedDocument", $despatchddvicerefdoc);
+        return $this;
+    }
+
+    /**
+     * Set detailed information on the associated goods receipt notification
+     *
+     * @param  string        $issuerassignedid __BT-15, From EN 16931__ An identifier for a referenced goods receipt notification (Goods receipt number)
+     * @param  DateTime|null $issueddate       __BT-, From __ Goods receipt date
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentReceivingAdviceReferencedDocument(string $issuerassignedid, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $receivingadvicerefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, null, null, null, null, $issueddate, null);
+        $this->getObjectHelper()->tryCall($this->headerTradeDelivery, "setReceivingAdviceReferencedDocument", $receivingadvicerefdoc);
+        return $this;
+    }
+
+    /**
+     * Set detailed information on the associated delivery note
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string        $issuerassignedid
+     * Delivery receipt number
+     * @param  DateTime|null $issueddate
+     * Delivery receipt date
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentDeliveryNoteReferencedDocument(string $issuerassignedid, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $deliverynoterefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, null, null, null, null, $issueddate, null);
+        $this->getObjectHelper()->tryCall($this->headerTradeDelivery, "setDeliveryNoteReferencedDocument", $deliverynoterefdoc);
+        return $this;
+    }
+
+    /**
+     * Add detailed information on the payment method
+     *
+     * __Notes__
+     *  - The SpecifiedTradeSettlementPaymentMeans element can only be repeated for each bank account if
+     *    several bank accounts are to be transferred for transfers. The code for the payment method in the Typecode
+     *    element must therefore not differ in the repetitions. The elements ApplicableTradeSettlementFinancialCard
+     *    and PayerPartyDebtorFinancialAccount must not be specified for bank transfers.
+     *
+     * @param  string      $typecode          __BT-81, From BASIC WL__ The expected or used means of payment, expressed as a code. The entries from the UNTDID 4461 code list must be used. A distinction should be made between SEPA and non-SEPA payments as well as between credit payments, direct debits, card payments and other means of payment In particular, the following codes can be used:
+     *  - 10: cash
+     *  - 20: check
+     *  - 30: transfer
+     *  - 42: Payment to bank account
+     *  - 48: Card payment
+     *  - 49: direct debit
+     *  - 57: Standing order
+     *  - 58: SEPA Credit Transfer
+     *  - 59: SEPA Direct Debit
+     *  - 97: Report
+     * @param  string|null $information      __BT-82, From EN 16931__ The expected or used means of payment expressed in text form, e.g. cash, bank transfer, direct debit, credit card, etc.
+     * @param  string|null $cardType         __BT-, From __ The type of the card
+     * @param  string|null $cardId           __BT-84, From BASIC WL__ The primary account number (PAN) to which the card used for payment belongs. In accordance with card payment security standards, an invoice should never contain a full payment card master account number. The following specification of the PCI Security Standards Council currently applies: The first 6 and last 4 digits at most are to be displayed
+     * @param  string|null $cardHolderName   __BT-, From __ Name of the payment card holder
+     * @param  string|null $buyerIban        __BT-91, From BASIC WL__ Direct debit: ID of the account to be debited
+     * @param  string|null $payeeIban        __BT-, From __ Transfer: A unique identifier for the financial account held with a payment service provider to which the payment should be made, e.g. Use an IBAN (in the case of a SEPA payment) for a national ProprietaryID account number
+     * @param  string|null $payeeAccountName __BT-, From __ The name of the payment account held with a payment service provider to which the payment should be made. Information only required if different from the name of the payee / seller
+     * @param  string|null $payeePropId      __BT-, From __ National account number (not for SEPA)
+     * @param  string|null $payeeBic         __BT-, From __ Seller's banking institution, An identifier for the payment service provider with whom the payment account is managed, such as the BIC or a national bank code, if required. No identification scheme is to be used.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPaymentMean(string $typecode, ?string $information = null, ?string $cardType = null, ?string $cardId = null, ?string $cardHolderName = null, ?string $buyerIban = null, ?string $payeeIban = null, ?string $payeeAccountName = null, ?string $payeePropId = null, ?string $payeeBic = null): ZugferdDocumentBuilder
+    {
+        $cardId = substr($cardId ?? "", -4);
+
+        $paymentMeans = $this->getObjectHelper()->getTradeSettlementPaymentMeansType($typecode, $information);
+        $financialCard = $this->getObjectHelper()->getTradeSettlementFinancialCardType($cardType, $cardId, $cardHolderName);
+        $buyerfinancialaccount = $this->getObjectHelper()->getDebtorFinancialAccountType($buyerIban);
+        $payeefinancialaccount = $this->getObjectHelper()->getCreditorFinancialAccountType($payeeIban, $payeeAccountName, $payeePropId);
+        $payeefinancialInstitution = $this->getObjectHelper()->getCreditorFinancialInstitutionType($payeeBic);
+
+        $this->getObjectHelper()->tryCall($paymentMeans, "setApplicableTradeSettlementFinancialCard", $financialCard);
+        $this->getObjectHelper()->tryCall($paymentMeans, "setPayerPartyDebtorFinancialAccount", $buyerfinancialaccount);
+        $this->getObjectHelper()->tryCall($paymentMeans, "setPayeePartyCreditorFinancialAccount", $payeefinancialaccount);
+        $this->getObjectHelper()->tryCall($paymentMeans, "setPayeeSpecifiedCreditorFinancialInstitution", $payeefinancialInstitution);
+
+        $this->getObjectHelper()->tryCallAll($this->headerTradeSettlement, ["addToSpecifiedTradeSettlementPaymentMeans", "setSpecifiedTradeSettlementPaymentMeans"], $paymentMeans);
+
+        return $this;
+    }
+
+    /**
+     * Sets the document payment means to _SEPA Credit Transfer_
+     * German translation: _Ãberweisung_
+     *
+     * @param  string      $payeeIban
+     * Transfer: A unique identifier for the financial account held with a payment service provider to which
+     * the payment should be made, e.g. Use an IBAN (in the case of a SEPA payment) for a national ProprietaryID
+     * account number
+     * @param  string|null $payeeAccountName
+     * The name of the payment account held with a payment service provider to which the payment should be made.
+     * Information only required if different from the name of the payee / seller
+     * @param  string|null $payeePropId
+     * National account number (not for SEPA)
+     * @param  string|null $payeeBic
+     * Seller's banking institution, An identifier for the payment service provider with whom the payment account
+     * is managed, such as the BIC or a national bank code, if required. No identification scheme is to be used.
+     * @param string|null $paymentReference
+     * Intended use for payment. It can also be set using `setDocumentGeneralPaymentInformation()`.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPaymentMeanToCreditTransfer(string $payeeIban, ?string $payeeAccountName = null, ?string $payeePropId = null, ?string $payeeBic = null, ?string $paymentReference = null): ZugferdDocumentBuilder
+    {
+        $paymentMeans = $this->getObjectHelper()->getTradeSettlementPaymentMeansType(ZugferdPaymentMeans::UNTDID_4461_58);
+        $payeefinancialaccount = $this->getObjectHelper()->getCreditorFinancialAccountType($payeeIban, $payeeAccountName, $payeePropId);
+        $payeefinancialInstitution = $this->getObjectHelper()->getCreditorFinancialInstitutionType($payeeBic);
+
+        $this->getObjectHelper()->tryCall($paymentMeans, "setPayeePartyCreditorFinancialAccount", $payeefinancialaccount);
+        $this->getObjectHelper()->tryCall($paymentMeans, "setPayeeSpecifiedCreditorFinancialInstitution", $payeefinancialInstitution);
+
+        $this->getObjectHelper()->tryCallAll($this->headerTradeSettlement, ["addToSpecifiedTradeSettlementPaymentMeans", "setSpecifiedTradeSettlementPaymentMeans"], $paymentMeans);
+
+        if (!is_null($paymentReference)) {
+            $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setPaymentReference", $this->getObjectHelper()->getIdType($paymentReference));
+        }
+
+        return $this;
+    }
+
+    /**
+     * Sets the document payment means to _SEPA Direct Debit_
+     *
+     * @param  string $buyerIban
+     * Direct debit: ID of the account to be debited
+     * @param  string|null $creditorReferenceID
+     * Identifier of the creditor (German: "GlÃ€ubiger ID").
+     * It can also be set using `setDocumentGeneralPaymentInformation()`.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPaymentMeanToDirectDebit(string $buyerIban, ?string $creditorReferenceID = null): ZugferdDocumentBuilder
+    {
+        $paymentMeans = $this->getObjectHelper()->getTradeSettlementPaymentMeansType(ZugferdPaymentMeans::UNTDID_4461_59);
+        $buyerfinancialaccount = $this->getObjectHelper()->getDebtorFinancialAccountType($buyerIban);
+
+        $this->getObjectHelper()->tryCall($paymentMeans, "setPayerPartyDebtorFinancialAccount", $buyerfinancialaccount);
+
+        $this->getObjectHelper()->tryCallAll($this->headerTradeSettlement, ["addToSpecifiedTradeSettlementPaymentMeans", "setSpecifiedTradeSettlementPaymentMeans"], $paymentMeans);
+
+        if (!is_null($creditorReferenceID)) {
+            $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setCreditorReferenceID", $this->getObjectHelper()->getIdType($creditorReferenceID));
+        }
+
+        return $this;
+    }
+
+    /**
+     * Sets the document payment means to _Payment card_
+     *
+     * @param  string      $cardType
+     * The type of the card, such as VISA, American Express, Master Card.
+     * @param  string      $cardId
+     * The primary account number (PAN) to which the card used for payment belongs. In accordance with card
+     * payment security standards, an invoice should never contain a full payment card master account number.
+     * The following specification of the PCI Security Standards Council currently applies: The first 6 and
+     * last 4 digits at most are to be displayed
+     * @param  string|null $cardHolderName
+     * Name of the payment card holder
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPaymentMeanToPaymentCard(string $cardType, string $cardId, ?string $cardHolderName = null): ZugferdDocumentBuilder
+    {
+        $paymentMeans = $this->getObjectHelper()->getTradeSettlementPaymentMeansType(ZugferdPaymentMeans::UNTDID_4461_48);
+        $financialCard = $this->getObjectHelper()->getTradeSettlementFinancialCardType($cardType, $cardId, $cardHolderName);
+
+        $this->getObjectHelper()->tryCall($paymentMeans, "setApplicableTradeSettlementFinancialCard", $financialCard);
+
+        $this->getObjectHelper()->tryCallAll($this->headerTradeSettlement, ["addToSpecifiedTradeSettlementPaymentMeans", "setSpecifiedTradeSettlementPaymentMeans"], $paymentMeans);
+
+        return $this;
+    }
+
+    /**
+     * Add a VAT breakdown (at document level)
+     *
+     * @param  string        $categoryCode               __BT-118, From BASIC WL__ Coded description of a sales tax category
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  string        $typeCode                   __BT-118-0, From BASIC WL__ Coded description of a sales tax category. Note: Fixed value = "VAT"
+     * @param  float         $basisAmount                __BT-116, From BASIC WL__ Tax base amount, Each sales tax breakdown must show a category-specific tax base amount.
+     * @param  float         $calculatedAmount           __BT-117, From BASIC WL__ The total amount to be paid for the relevant VAT category. Note: Calculated by multiplying the amount to be taxed according to the sales tax category by the sales tax rate applicable for the sales tax category concerned
+     * @param  float|null    $rateApplicablePercent      __BT-119, From BASIC WL__ The sales tax rate, expressed as the percentage applicable to the sales tax category in question. Note: The code of the sales tax category and the category-specific sales tax rate must correspond to one another. The value to be given is the percentage. For example, the value 20 is given for 20% (and not 0.2)
+     * @param  string|null   $exemptionReason            __BT-120, From BASIC WL__ Reason for tax exemption (free text)
+     * @param  string|null   $exemptionReasonCode        __BT-121, From BASIC WL__ Reason given in code form for the exemption of the amount from VAT. Note: Code list issued and maintained by the Connecting Europe Facility.
+     * @param  float|null    $lineTotalBasisAmount       __BT-, From __ Tax rate goods amount
+     * @param  float|null    $allowanceChargeBasisAmount __BT-, From __ Total amount of surcharges and deductions of the tax rate at document level
+     * @param  DateTime|null $taxPointDate               __BT-, From __ Specification of a date, in accordance with the sales tax guideline, on which the sales tax for the seller and for the buyer becomes relevant for accounting, insofar as this date can be determined and differs from the invoice date
+     * Note: The tax collection date for VAT purposes is usually the date the goods were delivered or the service was completed (the base tax date). There are a few variations. For further information, please refer to Article 226 (7) of Council Directive 2006/112 / EC. This element is required if the date set for the sales tax return differs from the invoice date. Both the buyer and the seller should use the delivery date for VAT returns, if provided by the seller. This is not used in Germany. Instead, the delivery and service date must be specified.
+     * @param  string|null   $dueDateTypeCode            __BT-8, From BASIC WL__ The code for the date on which sales tax becomes relevant for the seller and the buyer.
+     * The code must distinguish between the following entries from UNTDID 2005:
+     *  - date of issue of the invoice document
+     *  - actual delivery date
+     *  - Date of payment.
+     * The VAT Collection Date Code is used when the VAT Collection Date is not known for VAT purposes
+     * when the invoice is issued.
+     * The semantic values cited in the standard, which are represented by the values 3, 35, 432 in
+     * UNTDID2005, are mapped to the following values of UNTDID2475, which is the relevant code list
+     * supported by CII 16B:
+     *  - 5: date of issue of the invoice
+     *  - 29: Delivery date, current status
+     *  - 72: Paid to date
+     * In Germany, the date of delivery and service is decisive.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentTax(string $categoryCode, string $typeCode, float $basisAmount, float $calculatedAmount, ?float $rateApplicablePercent = null, ?string $exemptionReason = null, ?string $exemptionReasonCode = null, ?float $lineTotalBasisAmount = null, ?float $allowanceChargeBasisAmount = null, ?DateTime $taxPointDate = null, ?string $dueDateTypeCode = null): ZugferdDocumentBuilder
+    {
+        $tax = $this->getObjectHelper()->getTradeTaxType($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "addToApplicableTradeTax", $tax);
+        return $this;
+    }
+
+    /**
+     * Add a VAT breakdown (at document level) in a more simple way
+     *
+     * @param  string     $categoryCode
+     * Coded description of a sales tax category
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  string     $typeCode
+     * Coded description of a sales tax category. Note: Fixed value = "VAT"
+     * @param  float      $basisAmount
+     * Tax base amount, Each sales tax breakdown must show a category-specific tax base amount.
+     * @param  float      $calculatedAmount
+     * The total amount to be paid for the relevant VAT category. Note: Calculated by multiplying
+     * the amount to be taxed according to the sales tax category by the sales tax rate applicable
+     * for the sales tax category concerned
+     * @param  float|null $rateApplicablePercent
+     * The sales tax rate, expressed as the percentage applicable to the sales tax category in
+     * question. Note: The code of the sales tax category and the category-specific sales tax rate
+     * must correspond to one another. The value to be given is the percentage. For example, the
+     * value 20 is given for 20% (and not 0.2)
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentTaxSimple(string $categoryCode, string $typeCode, float $basisAmount, float $calculatedAmount, ?float $rateApplicablePercent = null): ZugferdDocumentBuilder
+    {
+        return $this->addDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent);
+    }
+
+    /**
+     * Get detailed information on the billing period
+     *
+     * @param  DateTime|null $startdate   __BT-73, From BASIC WL__ Start of the billing period
+     * @param  DateTime|null $endDate     __BT-74, From BASIC WL__ End of the billing period
+     * @param  string|null   $description __BT-, From __ Further information of the billing period
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentBillingPeriod(?DateTime $startdate, ?DateTime $endDate, ?string $description): ZugferdDocumentBuilder
+    {
+        $period = $this->getObjectHelper()->getSpecifiedPeriodType($startdate, $endDate, null, $description);
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "setBillingSpecifiedPeriod", $period);
+        return $this;
+    }
+
+    /**
+     * Add information about surcharges and charges applicable to the bill as a whole, Deductions,
+     * such as for withheld taxes may also be specified in this group
+     *
+     * @param  float       $actualAmount          __BT-92/BT-99, From BASIC WL__ Amount of the surcharge or discount at document level
+     * @param  boolean     $isCharge              __BT-20-1/BT-21-1, From BASIC WL__ Switch that indicates whether the following data refer to an surcharge or a discount, true means that this an charge
+     * @param  string      $taxCategoryCode       __BT-95/BT-102, From BASIC WL__ A coded indication of which sales tax category applies to the surcharge or deduction at document level
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta/Melilla)
+     * @param  string      $taxTypeCode           __BT-95-0/BT-102-0, From BASIC WL__ Code for the VAT category of the surcharge or charge at document level. Note: Fixed value = "VAT"
+     * @param  float       $rateApplicablePercent __BT-96/BT-103, From BASIC WL__ VAT rate for the surcharge or discount on document level. Note: The code of the sales tax category and the category-specific sales tax rate must correspond to one another. The value to be given is the percentage. For example, the value 20 is given for 20% (and not 0.2)
+     * @param  float|null  $sequence              __BT-, From __ Calculation order
+     * @param  float|null  $calculationPercent    __BT-94/BT-101, From BASIC WL__ Percentage surcharge or discount at document level
+     * @param  float|null  $basisAmount           __BT-93/BT-100, From BASIC WL__ The base amount that may be used in conjunction with the percentage of the surcharge or discount at document level to calculate the amount of the discount at document level
+     * @param  float|null  $basisQuantity         __BT-, From __ Basismenge des Rabatts
+     * @param  string|null $basisQuantityUnitCode __BT-, From __ Einheit der Preisbasismenge
+     *  - Codeliste: Rec. NÂ°20 VollstÃ€ndige Liste, In Recommendation NÂ°20 Intro 2.a ist beschrieben, dass
+     *    beide Listen kombiniert anzuwenden sind.
+     *  - Codeliste: Rec. NÂ°21 VollstÃ€ndige Liste, In Recommendation NÂ°20 Intro 2.a ist beschrieben, dass
+     *    beide Listen kombiniert anzuwenden sind.
+     * @param  string|null $reasonCode            __BT-98/BT-105, From BASIC WL__ The reason given as a code for the surcharge or discount at document level. Note: Use entries from the UNTDID 5189 code list. The code of the reason for the surcharge or discount at document level and the reason for the surcharge or discount at document level must correspond to each other
+     * Code list: UNTDID 7161 Complete list, code list: UNTDID 5189 Restricted
+     * Include PEPPOL subset:
+     *  - 41 - Bonus for works ahead of schedule
+     *  - 42 - Other bonus
+     *  - 60 - Manufacturerâs consumer discount
+     *  - 62 - Due to military status
+     *  - 63 - Due to work accident
+     *  - 64 - Special agreement
+     *  - 65 - Production error discount
+     *  - 66 - New outlet discount
+     *  - 67 - Sample discount
+     *  - 68 - End-of-range discount
+     *  - 70 - Incoterm discount
+     *  - 71 - Point of sales threshold allowance
+     *  - 88 - Material surcharge/deduction
+     *  - 95 - Discount
+     *  - 100 - Special rebate
+     *  - 102 - Fixed long term
+     *  - 103 - Temporary
+     *  - 104 - Standard
+     *  - 105 - Yearly turnover
+     * @param  string|null $reason                __BT-97/BT-104, From BASIC WL__ The reason given in text form for the surcharge or discount at document level
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentAllowanceCharge(float $actualAmount, bool $isCharge, string $taxCategoryCode, string $taxTypeCode, ?float $rateApplicablePercent, ?float $sequence = null, ?float $calculationPercent = null, ?float $basisAmount = null, ?float $basisQuantity = null, ?string $basisQuantityUnitCode = null, ?string $reasonCode = null, ?string $reason = null): ZugferdDocumentBuilder
+    {
+        $allowanceCharge = $this->getObjectHelper()->getTradeAllowanceChargeType($actualAmount, $isCharge, $taxTypeCode, $taxCategoryCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "addToSpecifiedTradeAllowanceCharge", $allowanceCharge);
+        return $this;
+    }
+
+    /**
+     * Add a logistical service fees (On document level)
+     *
+     * @param  string     $description
+     * Identification of the service fee
+     * @param  float      $appliedAmount
+     * Amount of the service fee
+     * @param  array|null $taxTypeCodes
+     * Coded description of a sales tax category. Note: Fixed value = "VAT"
+     * @param  array|null $taxCategoryCodes
+     * Coded description of a sales tax category
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  array|null $rateApplicablePercents
+     * The sales tax rate, expressed as the percentage applicable to the sales tax category in
+     * question. Note: The code of the sales tax category and the category-specific sales tax rate
+     * must correspond to one another. The value to be given is the percentage. For example, the
+     * value 20 is given for 20% (and not 0.2)
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentLogisticsServiceCharge(string $description, float $appliedAmount, ?array $taxTypeCodes = null, ?array $taxCategoryCodes = null, ?array $rateApplicablePercents = null): ZugferdDocumentBuilder
+    {
+        $logcharge = $this->getObjectHelper()->getLogisticsServiceChargeType($description, $appliedAmount, $taxTypeCodes, $taxCategoryCodes, $rateApplicablePercents);
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "addToSpecifiedLogisticsServiceCharge", $logcharge);
+        return $this;
+    }
+
+    /**
+     * Add a payment term
+     *
+     * @param  string|null   $description          __BT-20, From _BASIC WL__ A text description of the payment terms that apply to the payment amount due (including a description of possible penalties). Note: This element can contain multiple lines and multiple conditions.
+     * @param  DateTime|null $dueDate              __BT-9, From BASIC WL__ The date by which payment is due Note: The payment due date reflects the net payment due date. In the case of partial payments, this indicates the first due date of a net payment. The corresponding description of more complex payment terms can be given in BT--20.
+     * @param  string|null   $directDebitMandateID __BT-89, From BASIC WL__ Unique identifier assigned by the payee to reference the direct debit authorization.
+     * __Note:__ Used to inform the buyer in advance about a SEPA direct debit. __Synonym:__ mandate reference for SEPA
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPaymentTerm(?string $description = null, ?DateTime $dueDate = null, ?string $directDebitMandateID = null): ZugferdDocumentBuilder
+    {
+        $paymentTerms = $this->getObjectHelper()->getTradePaymentTermsType($description, $dueDate, $directDebitMandateID);
+        $this->getObjectHelper()->tryCallAll($this->headerTradeSettlement, ["addToSpecifiedTradePaymentTerms", "setSpecifiedTradePaymentTerms"], $paymentTerms);
+        $this->currentPaymentTerms = $paymentTerms;
+        return $this;
+    }
+
+    /**
+     * Add discount Terms to last added payment term
+     *
+     * @param  float|null    $calculationPercent
+     * Percentage of the down payment
+     * @param  DateTime|null $basisDateTime
+     * Due date reference date
+     * @param  float|null    $basisPeriodMeasureValue
+     * Due period
+     * @param  string|null   $basisPeriodMeasureUnitCode
+     * Due period, unit
+     * @param  float|null    $basisAmount
+     * Base amount of the down payment
+     * @param  float|null    $actualDiscountAmount
+     * Amount of the down payment
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDiscountTermsToPaymentTerms(?float $calculationPercent = null, ?DateTime $basisDateTime = null, ?float $basisPeriodMeasureValue = null, ?string $basisPeriodMeasureUnitCode = null, ?float $basisAmount = null, ?float $actualDiscountAmount = null): ZugferdDocumentBuilder
+    {
+        $discountTerms = $this->getObjectHelper()->getTradePaymentDiscountTermsType($basisDateTime, $basisPeriodMeasureValue, $basisPeriodMeasureUnitCode, $basisAmount, $calculationPercent, $actualDiscountAmount);
+        $this->getObjectHelper()->tryCall($this->currentPaymentTerms, "setApplicableTradePaymentDiscountTerms", $discountTerms);
+        return $this;
+    }
+
+    /**
+     * Add an AccountingAccount
+     * Detailinformationen zur Buchungsreferenz
+     *
+     * @param  string      $id       __BT-19, From BASIC WL__
+     * @param  string|null $typeCode __BT-, From __
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentReceivableSpecifiedTradeAccountingAccount(?string $id, ?string $typeCode): ZugferdDocumentBuilder
+    {
+        $account = $this->getObjectHelper()->getTradeAccountingAccountType($id, $typeCode);
+        $this->getObjectHelper()->tryCall($this->headerTradeSettlement, "addToReceivableSpecifiedTradeAccountingAccount", $account);
+        return $this;
+    }
+
+    /**
+     * Adds a new position (line) to document
+     *
+     * @param  string      $lineid               __BT-126, From BASIC__ A unique identifier for the relevant item within the invoice (item number)
+     * @param  string|null $lineStatusCode       __BT-, From BASIC__ Indicates whether the invoice item contains prices that must be taken into account when calculating the invoice amount, or whether it only contains information. The following code should be used: TYPE_LINE
+     * @param  string|null $lineStatusReasonCode __BT-, From BASIC__ Adds the type to specify whether the invoice line is:
+     *  - detail (normal position)
+     *  - Subtotal
+     *  - Information only
+     *
+     * If the $lineStatusCode field is used, the LineStatusReasonCode field must use the following codes:
+     *  - detail
+     *  - grouping
+     *  - information
+     * @return ZugferdDocumentBuilder
+     */
+    public function addNewPosition(string $lineid, ?string $lineStatusCode = null, ?string $lineStatusReasonCode = null): ZugferdDocumentBuilder
+    {
+        $position = $this->getObjectHelper()->getSupplyChainTradeLineItemType($lineid, $lineStatusCode, $lineStatusReasonCode);
+        $this->getObjectHelper()->tryCall($this->headerSupplyChainTradeTransaction, "addToIncludedSupplyChainTradeLineItem", $position);
+        $this->currentPosition = $position;
+        return $this;
+    }
+
+    /**
+     * Adds a new text-only position (line) to document
+     *
+     * @param  string      $lineid
+     * A unique identifier for the relevant item within the invoice (item number)
+     * @param  string|null $lineStatusCode
+     * Indicates whether the invoice item contains prices that must be taken into account when
+     * calculating the invoice amount, or whether it only contains information.
+     * The following code should be used: TYPE_LINE
+     * @param  string|null $lineStatusReasonCode
+     * Adds the type to specify whether the invoice line is:
+     *  - detail (normal position)
+     *  - Subtotal
+     *  - Information only
+     * If the $lineStatusCode field is used, the LineStatusReasonCode field must use the following codes:
+     *  - detail
+     *  - grouping
+     *  - information
+     * @return ZugferdDocumentBuilder
+     */
+    public function addNewTextPosition(string $lineid, ?string $lineStatusCode = null, ?string $lineStatusReasonCode = null): ZugferdDocumentBuilder
+    {
+        $position = $this->getObjectHelper()->getSupplyChainTradeLineItemType($lineid, $lineStatusCode, $lineStatusReasonCode, true);
+        $this->getObjectHelper()->tryCall($this->headerSupplyChainTradeTransaction, "addToIncludedSupplyChainTradeLineItem", $position);
+        $this->currentPosition = $position;
+        return $this;
+    }
+
+    /**
+     * Add detailed information on the free text on the position
+     *
+     * @param  string      $content     __BT-127, From BASIC__ A free text that contains unstructured information that is relevant to the invoice item
+     * @param  string|null $contentCode __BT-, From __ Text modules agreed bilaterally, which are transmitted here as code.
+     * @param  string|null $subjectCode __BT-, From __ Free text for the position (code for the type)
+     * __Codelist:__ UNTDID 4451
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionNote(?string $content, ?string $contentCode = null, ?string $subjectCode = null): ZugferdDocumentBuilder
+    {
+        $linedoc = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getAssociatedDocumentLineDocument");
+        $note = $this->getObjectHelper()->getNoteType($content, $contentCode, $subjectCode);
+        $this->getObjectHelper()->tryCallAll($linedoc, ["addToIncludedNote", "setIncludedNote"], $note);
+        return $this;
+    }
+
+    /**
+     * Adds product details to the last created position (line) in the document
+     *
+     * @param  string      $name             __BT-153, From BASIC__ A name of the item (item name)
+     * @param  string|null $description      __BT-154, From EN 16931__ A description of the item, the item description makes it possible to describe the item and its properties in more detail than is possible with the item name.
+     * @param  string|null $sellerAssignedID __BT-155, From EN 16931__ An identifier assigned to the item by the seller
+     * @param  string|null $buyerAssignedID  __BT-156, From EN 16931__ An identifier assigned to the item by the buyer. The article number of the buyer is a clear, bilaterally agreed identification of the product. It can, for example, be the customer article number or the article number assigned by the manufacturer.
+     * @param  string|null $globalIDType     __BT-157-1, From BASIC__ The scheme for $globalID
+     * @param  string|null $globalID         __BT-157, From BASIC__ Identification of an article according to the registered scheme (Global identifier of the product, GTIN, ...)
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionProductDetails(string $name, ?string $description = null, ?string $sellerAssignedID = null, ?string $buyerAssignedID = null, ?string $globalIDType = null, ?string $globalID = null): ZugferdDocumentBuilder
+    {
+        $product = $this->getObjectHelper()->getTradeProductType($name, $description, $sellerAssignedID, $buyerAssignedID, $globalIDType, $globalID);
+        $this->getObjectHelper()->tryCall($this->currentPosition, "setSpecifiedTradeProduct", $product);
+        return $this;
+    }
+
+    /**
+     * Add extra characteristics to the formerly added product.
+     * Contains information about the characteristics of the goods and services invoiced
+     *
+     * @param  string      $description
+     * The name of the attribute or property of the product such as "Colour"
+     * @param  string      $value
+     * The value of the attribute or property of the product such as "Red"
+     * @param  string|null $typecode
+     * Type of product property (code). The codes must be taken from the
+     * UNTDID 6313 codelist. Available only in the Extended-Profile
+     * @param  float|null  $valueMeasure
+     * Value of the product property (numerical measurand)
+     * @param  string|null $valueMeasureUnitCode
+     * Unit of measurement of the measurand
+     *  - Codeliste: Rec. NÂ°20 VollstÃ€ndige Liste, In Recommendation NÂ°20 Intro 2.a ist beschrieben, dass
+     *    beide Listen kombiniert anzuwenden sind.
+     *  - Codeliste: Rec. NÂ°21 VollstÃ€ndige Liste, In Recommendation NÂ°20 Intro 2.a ist beschrieben, dass
+     *    beide Listen kombiniert anzuwenden sind.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionProductCharacteristic(string $description, string $value, ?string $typecode = null, ?float $valueMeasure = null, ?string $valueMeasureUnitCode = null): ZugferdDocumentBuilder
+    {
+        $product = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedTradeProduct");
+        $productCharacteristic = $this->getObjectHelper()->getProductCharacteristicType($typecode, $description, $valueMeasure, $valueMeasureUnitCode, $value);
+        $this->getObjectHelper()->tryCall($product, "addToApplicableProductCharacteristic", $productCharacteristic);
+        return $this;
+    }
+
+    /**
+     * Add detailed information on product classification
+     *
+     * @param  string      $classCode
+     * A code for classifying the item by type or nature or essence or condition.
+     * __Note__: Classification codes are used to group similar items for different purposes, such as public
+     * procurement (using the Common Procurement Vocabulary [CPV]), e-commerce (UNSPSC), etc.
+     * @param  string|null $className
+     * Classification name
+     * @param  string|null $listID
+     * The identifier for the identification scheme of the identifier of the article classification
+     * __Note__: The identification scheme must be selected from the entries from UNTDID 7143.
+     * @param  string|null $listVersionID
+     * The version of the identification scheme
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionProductClassification(string $classCode, ?string $className = null, ?string $listID = null, ?string $listVersionID = null): ZugferdDocumentBuilder
+    {
+        $product = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedTradeProduct");
+        $productClassification = $this->getObjectHelper()->getProductClassificationType($classCode, $className, $listID, $listVersionID);
+        $this->getObjectHelper()->tryCall($product, "addToDesignatedProductClassification", $productClassification);
+        return $this;
+    }
+
+    /**
+     * Sets the detailed information on the product origin
+     *
+     * @param  string $country __BT-159, From EN 16931__ The code indicating the country the goods came from
+     * __Note__: The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the representation of names of countries and their subdivisionsâ.
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionProductOriginTradeCountry(string $country): ZugferdDocumentBuilder
+    {
+        $product = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedTradeProduct");
+        $productTradeCounty = $this->getObjectHelper()->getTradeCountryType($country);
+        $this->getObjectHelper()->tryCall($product, "setOriginTradeCountry", $productTradeCounty);
+        return $this;
+    }
+
+    /**
+     * Add detailed information on included products. This information relates to the
+     * product that has just been added
+     *
+     * @param  string      $name
+     * Item name
+     * @param  string|null $description
+     * Item description
+     * @param  string|null $sellerAssignedID
+     * Item number of the seller
+     * @param  string|null $buyerAssignedID
+     * Item number of the buyer
+     * __Note__: The identifier of the product is a unique, bilaterally agreed identification of the
+     * product. It can, for example, be the customer article number or the article number assigned by
+     * the manufacturer.
+     * @param  string|null $globalID
+     * Global identifier of the product
+     * __Note__: The global identifier of the product is a label uniquely assigned by the manufacturer,
+     * which is based on the rules of a global registration organization.
+     * @param  string|null $globalIDType
+     * Type of global item number
+     * In particular, the following codes can be used:
+     *  * 0021: SWIFT
+     *  * 0088: EAN
+     *  * 0060: DUNS
+     *  * 0177: ODETTE
+     * @param  float|null  $unitQuantity
+     * Included quantity
+     * @param  string|null $unitCode
+     * Unit of measurement of the included quantity
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionReferencedProduct(string $name, ?string $description = null, ?string $sellerAssignedID = null, ?string $buyerAssignedID = null, ?string $globalID = null, ?string $globalIDType = null, ?float $unitQuantity = null, ?string $unitCode = null): ZugferdDocumentBuilder
+    {
+        $product = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedTradeProduct");
+        $referencedProduct = $this->getObjectHelper()->getReferencedProductType($globalID, $globalIDType, $sellerAssignedID, $buyerAssignedID, $name, $description, $unitQuantity, $unitCode);
+        $this->getObjectHelper()->tryCall($product, "addToIncludedReferencedProduct", $referencedProduct);
+        return $this;
+    }
+
+    /**
+     * Set details of the related buyer order position
+     *
+     * @param  string        $issuerassignedid __BT-13, From MINIMUM__ An identifier issued by the buyer for a referenced order (order number)
+     * @param  string        $lineid           __BT-132, From EN 16931__ An identifier for a position within an order placed by the buyer. Note: Reference is made to the order reference at the document level.
+     * @param  DateTime|null $issueddate       __BT-, From __ Date of order
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionBuyerOrderReferencedDocument(string $issuerassignedid, string $lineid, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $buyerorderrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, $lineid, null, null, null, $issueddate, null);
+        $positionagreement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeAgreement");
+        $this->getObjectHelper()->tryCall($positionagreement, "setBuyerOrderReferencedDocument", $buyerorderrefdoc);
+        return $this;
+    }
+
+    /**
+     * Set details of the related contract position
+     *
+     * @param  string        $issuerassignedid
+     * The contract reference should be assigned once in the context of the specific trade relationship and for a
+     * defined period of time (contract number)
+     * @param  string        $lineid
+     * Identifier of the according contract position
+     * @param  DateTime|null $issueddate
+     * Contract date
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionContractReferencedDocument(string $issuerassignedid, string $lineid, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $contractrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, $lineid, null, null, null, $issueddate, null);
+        $positionagreement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeAgreement");
+        $this->getObjectHelper()->tryCall($positionagreement, "setContractReferencedDocument", $contractrefdoc);
+        return $this;
+    }
+
+    /**
+     * Add an additional Document reference on a position
+     *
+     * __Notes__
+     *  - The documents justifying the invoice can be used to reference a document number, which should be
+     *    known to the recipient, as well as an external document (referenced by a URL) or an embedded document (such
+     *    as a timesheet as a PDF file). The option of linking to an external document is e.g. required when it comes
+     *    to large attachments and / or sensitive information, e.g. for personal services, which must be separated
+     *    from the bill
+     *  - Use ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument and
+     *    ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument to seek between multiple additional referenced
+     *    documents
+     *
+     * @param  string        $issuerassignedid
+     * The identifier of the tender or lot to which the invoice relates, or an identifier specified by the seller for
+     * an object on which the invoice is based, or an identifier of the document on which the invoice is based.
+     * @param  string        $typecode
+     * Type of referenced document (See codelist UNTDID 1001)
+     *  - Code 916 "reference paper" is used to reference the identification of the document on which the invoice is based
+     *  - Code 50 "Price / sales catalog response" is used to reference the tender or the lot
+     *  - Code 130 "invoice data sheet" is used to reference an identifier for an object specified by the seller.
+     * @param  string|null   $uriid
+     * The Uniform Resource Locator (URL) at which the external document is available. A means of finding the resource
+     * including the primary access method intended for it, e.g. http: // or ftp: //. The location of the external document
+     * must be used if the buyer needs additional information to support the amounts billed. External documents are not part
+     * of the invoice. Access to external documents can involve certain risks.
+     * @param  string|null   $lineid
+     * The referenced position identifier in the additional document
+     * @param  string|null   $name
+     * A description of the document, e.g. Hourly billing, usage or consumption report, etc.
+     * @param  string|null   $reftypecode
+     * The identifier for the identification scheme of the identifier of the item invoiced. If it is not clear to the
+     * recipient which scheme is used for the identifier, an identifier of the scheme should be used, which must be selected
+     * from UNTDID 1153 in accordance with the code list entries.
+     * @param  DateTime|null $issueddate
+     * Document date
+     * @param  string|null   $binarydatafilename
+     * Contains a file name of an attachment document embedded as a binary object
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionAdditionalReferencedDocument(string $issuerassignedid, string $typecode, ?string $uriid = null, ?string $lineid = null, ?string $name = null, ?string $reftypecode = null, ?DateTime $issueddate = null, ?string $binarydatafilename = null): ZugferdDocumentBuilder
+    {
+        $contractrefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, $uriid, $lineid, $typecode, $name, $reftypecode, $issueddate, $binarydatafilename);
+        $positionagreement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeAgreement");
+        $this->getObjectHelper()->tryCall($positionagreement, "addToAdditionalReferencedDocument", $contractrefdoc);
+        return $this;
+    }
+
+    /**
+     * Add a referennce to a ultimate customer order referenced document
+     *
+     * @param  string        $issuerassignedid
+     * @param  string        $lineid
+     * @param  DateTime|null $issueddate
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionUltimateCustomerOrderReferencedDocument(string $issuerassignedid, string $lineid, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $ultimaterefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, $lineid, null, null, null, $issueddate, null);
+        $positionagreement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeAgreement");
+        $this->getObjectHelper()->tryCall($positionagreement, "addToUltimateCustomerOrderReferencedDocument", $ultimaterefdoc);
+        return $this;
+    }
+
+    /**
+     * Set the unit price excluding sales tax before deduction of the discount on the item price.
+     *
+     * @param  float       $amount                __BT-148, From BASIC__ The unit price excluding sales tax before deduction of the discount on the item price.
+     * Note: If the price is shown according to the net calculation, the price must also be shown according to the gross calculation.
+     * @param  float|null  $basisQuantity         __BT-149-1, From BASIC__ The number of item units for which the price applies (price base quantity)
+     * @param  string|null $basisQuantityUnitCode __BT-150-1, From BASIC__ The unit code of the number of item units for which the price applies (price base quantity)
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionGrossPrice(float $amount, ?float $basisQuantity = null, ?string $basisQuantityUnitCode = null): ZugferdDocumentBuilder
+    {
+        $grossPrice = $this->getObjectHelper()->getTradePriceType($amount, $basisQuantity, $basisQuantityUnitCode);
+        $positionagreement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeAgreement");
+        $this->getObjectHelper()->tryCall($positionagreement, "setGrossPriceProductTradePrice", $grossPrice);
+        return $this;
+    }
+
+    /**
+     * Detailed information on surcharges and discounts on item gross price
+     *
+     * @param  float       $actualAmount          __BT-147, From BASIC__ Discount on the item price. The total discount subtracted from the gross price to calculate the net price. Note: Only applies if the discount is given per unit and is not included in the gross price.
+     * @param  boolean     $isCharge              __BT-147-02, From BASIC__ Switch for surcharge/discount, if true then its an charge
+     * @param  float|null  $calculationPercent    __BT-, From BASIC__Discount/surcharge in percent. Up to level EN16931, only the final result of the discount (ActualAmount) is transferred
+     * @param  float|null  $basisAmount           __BT-, From BASIC__ Base amount of the discount/surcharge
+     * @param  string|null $reason                __BT-, From BASIC__ Reason for surcharge/discount (free text)
+     * @param  string|null $taxTypeCode           __BT-, From BASIC__
+     * @param  string|null $taxCategoryCode       __BT-, From BASIC__
+     * @param  float|null  $rateApplicablePercent __BT-, From BASIC__
+     * @param  float|null  $sequence              __BT-, From BASIC__
+     * @param  float|null  $basisQuantity         __BT-, From BASIC__
+     * @param  string|null $basisQuantityUnitCode __BT-, From BASIC__
+     * @param  string|null $reasonCode            __BT-, From BASIC__
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionGrossPriceAllowanceCharge(float $actualAmount, bool $isCharge, ?float $calculationPercent = null, ?float $basisAmount = null, ?string $reason = null, ?string $taxTypeCode = null, ?string $taxCategoryCode = null, ?float $rateApplicablePercent = null, ?float $sequence = null, ?float $basisQuantity = null, ?string $basisQuantityUnitCode = null, ?string $reasonCode = null): ZugferdDocumentBuilder
+    {
+        $positionagreement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeAgreement");
+        $grossPrice = $this->getObjectHelper()->tryCallAndReturn($positionagreement, "getGrossPriceProductTradePrice");
+        $allowanceCharge = $this->getObjectHelper()->getTradeAllowanceChargeType($actualAmount, $isCharge, $taxTypeCode, $taxCategoryCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->getObjectHelper()->tryCallAll($grossPrice, ["addToAppliedTradeAllowanceCharge", "setAppliedTradeAllowanceCharge"], $allowanceCharge);
+        return $this;
+    }
+
+    /**
+     * Set detailed information on the net price of the item
+     *
+     * @param  float       $amount                __BT-146, From BASIC__ Net price of the item
+     * @param  float|null  $basisQuantity         __BT-149, From BASIC__ Base quantity at the item price
+     * @param  string|null $basisQuantityUnitCode __BT-150, From BASIC__ Code of the unit of measurement of the base quantity at the item price
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionNetPrice(float $amount, ?float $basisQuantity = null, ?string $basisQuantityUnitCode = null): ZugferdDocumentBuilder
+    {
+        $netPrice = $this->getObjectHelper()->getTradePriceType($amount, $basisQuantity, $basisQuantityUnitCode);
+        $positionagreement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeAgreement");
+        $this->getObjectHelper()->tryCall($positionagreement, "setNetPriceProductTradePrice", $netPrice);
+        return $this;
+    }
+
+    /**
+     * Tax included for B2C on position level
+     *
+     * @param  string      $categoryCode          __BT-, From __ Coded description of a sales tax category
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  string      $typeCode              __BT-, From __ Coded description of a sales tax category. Note: Fixed value = "VAT"
+     * @param  float       $rateApplicablePercent __BT-, From __ The sales tax rate, expressed as the percentage applicable to the sales tax category in question. Note: The code of the sales tax category and the category-specific sales tax rate must correspond to one another. The value to be given is the percentage. For example, the value 20 is given for 20% (and not 0.2)
+     * @param  float       $calculatedAmount      __BT-, From __ The total amount to be paid for the relevant VAT category. Note: Calculated by multiplying the amount to be taxed according to the sales tax category by the sales tax rate applicable for the sales tax category concerned
+     * @param  string|null $exemptionReason       __BT-, From __ Reason for tax exemption (free text)
+     * @param  string|null $exemptionReasonCode   __BT-, From __ Reason given in code form for the exemption of the amount from VAT. Note: Code list issued and maintained by the Connecting Europe Facility.
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionNetPriceTax(string $categoryCode, string $typeCode, float $rateApplicablePercent, float $calculatedAmount, ?string $exemptionReason = null, ?string $exemptionReasonCode = null): ZugferdDocumentBuilder
+    {
+        $positionagreement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeAgreement");
+        $netPrice = $this->getObjectHelper()->tryCallAndReturn($positionagreement, "getNetPriceProductTradePrice");
+        $tax = $this->getObjectHelper()->getTradeTaxType($categoryCode, $typeCode, null, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, null, null, null, null);
+        $this->getObjectHelper()->tryCall($netPrice, "setIncludedTradeTax", $tax);
+        return $this;
+    }
+
+    /**
+     * Set the position Quantity
+     *
+     * @param  float       $billedQuantity             __BT-129, From BASIC__ The quantity of individual items (goods or services) billed in the relevant line
+     * @param  string      $billedQuantityUnitCode     __BT-130, From BASIC__ The unit of measure applicable to the amount billed. Note: The unit of measurement must be taken from the lists from UN / ECE Recommendation No. 20 "Codes for Units of Measure Used in International Trade" and UN / ECE Recommendation No. 21 "Codes for Passengers, Types of Cargo, Packages and Packaging Materials (with Complementary Codes for Package Names)" using the UN / ECE Rec No. 20 Intro 2.a) can be selected.
+     * It should be noted that in most cases it is not necessary for buyers and sellers to fully implement these lists in their software. Sellers only need to support the entities necessary for their goods and services; Buyers only need to verify that the units used in the invoice match those in other documents (such as in Contracts, catalogs, orders and shipping notifications) match the units used.
+     * @param  float|null  $chargeFreeQuantity         __BT-, From __ Quantity, free of charge
+     * @param  string|null $chargeFreeQuantityUnitCpde __BT-, From __ Unit of measure code for the quantity free of charge
+     * @param  float|null  $packageQuantity            __BT-, From __ Number of packages
+     * @param  string|null $packageQuantityUnitCode    __BT-, From __ Unit of measure code for number of packages
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionQuantity(float $billedQuantity, string $billedQuantityUnitCode, ?float $chargeFreeQuantity = null, ?string $chargeFreeQuantityUnitCpde = null, ?float $packageQuantity = null, ?string $packageQuantityUnitCode = null): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $this->getObjectHelper()->tryCall($positiondelivery, "setBilledQuantity", $this->getObjectHelper()->getQuantityType($billedQuantity, $billedQuantityUnitCode));
+        $this->getObjectHelper()->tryCall($positiondelivery, "setChargeFreeQuantity", $this->getObjectHelper()->getQuantityType($chargeFreeQuantity, $chargeFreeQuantityUnitCpde));
+        $this->getObjectHelper()->tryCall($positiondelivery, "setPackageQuantity", $this->getObjectHelper()->getQuantityType($packageQuantity, $packageQuantityUnitCode));
+        return $this;
+    }
+
+    /**
+     * Set detailed information on the different ship-to party at item level
+     *
+     * @param  string      $name
+     * The name of the party to whom the goods are being delivered or for whom the services are being
+     * performed. Must be used if the recipient of the goods or services is not the same as the buyer.
+     * @param  string|null $id
+     * An identifier for the place where the goods are delivered or where the services are provided.
+     * Multiple IDs can be assigned or specified. They can be differentiated by using different
+     * identification schemes. If no scheme is given, it should be known to the buyer and seller, e.g.
+     * a previously exchanged identifier assigned by the buyer or seller.
+     * @param  string|null $description
+     * Further legal information that is relevant for the party
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionShipTo(string $name, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $shipToTradeParty = $this->getObjectHelper()->getTradeParty($name, $id, $description);
+        $this->getObjectHelper()->tryCall($positiondelivery, "setShipToTradeParty", $shipToTradeParty);
+        return $this;
+    }
+
+    /**
+     * Add a global id for the Ship-to Trade Party
+     *
+     * @param  string|null $globalID
+     * The identifier is uniquely assigned to a party by a global registration organization.
+     * @param  string|null $globalIDType
+     * If the identifier is used for the identification scheme, it must be selected from the entries in
+     * the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionShipToGlobalId(?string $globalID = null, ?string $globalIDType = null): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getShipToTradeParty");
+        $this->getObjectHelper()->tryCall($shipToTradeParty, "addToGlobalID", $this->getObjectHelper()->getIdType($globalID, $globalIDType));
+        return $this;
+    }
+
+    /**
+     * Add Tax registration to Ship-To Trade party
+     *
+     * The local identification (defined by the party's address) of the party for tax purposes or a reference that enables the party
+     * to indicate his reporting status for tax purposes The sales tax identification number of the party
+     * Note: This information may affect how the buyer the invoice settled (such as in relation to social security contributions). So
+     * e.g. In some countries, if the party is not reported for tax, the buyer will withhold the tax amount and pay it on behalf of the
+     * party. Sales tax number with a prefixed country code. A supplier registered as subject to VAT must provide his sales tax
+     * identification number, unless he uses a tax agent.
+     *
+     * @param  string|null $taxregtype
+     * Type of tax number of the seller (FC = Tax number, VA = Sales tax identification number)
+     * @param  string|null $taxregid
+     * Tax number of the seller or sales tax identification number of the seller
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionShipToTaxRegistration(?string $taxregtype = null, ?string $taxregid = null): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getShipToTradeParty");
+        $taxreg = $this->getObjectHelper()->getTaxRegistrationType($taxregtype, $taxregid);
+        $this->getObjectHelper()->tryCall($shipToTradeParty, "addToSpecifiedTaxRegistration", $taxreg);
+        return $this;
+    }
+
+    /**
+     * Sets the postal address of the Ship-To party
+     *
+     * @param  string|null $lineone
+     * The main line in the product end users address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the product end users address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the product end users address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the product end users address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  string|null $subdivision
+     * The product end users state
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionShipToAddress(?string $lineone = null, ?string $linetwo = null, ?string $linethree = null, ?string $postcode = null, ?string $city = null, ?string $country = null, ?string $subdivision = null): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getShipToTradeParty");
+        $address = $this->getObjectHelper()->getTradeAddress($lineone, $linetwo, $linethree, $postcode, $city, $country, $subdivision);
+        $this->getObjectHelper()->tryCall($shipToTradeParty, "setPostalTradeAddress", $address);
+        return $this;
+    }
+
+    /**
+     * Set legal organisation of the Ship-To party on item level
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * party as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer or seller party
+     * @param  string|null $legalorgtype
+     * registration of the party. In particular, the following scheme codes are used: 0021 : SWIFT, 0088 : EAN,
+     * 0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname A name by which the party is known, if different from the party's name
+     *                                   (also known as the company name)
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionShipToLegalOrganisation(?string $legalorgid, ?string $legalorgtype, ?string $legalorgname): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getShipToTradeParty");
+        $legalorg = $this->getObjectHelper()->getLegalOrganization($legalorgid, $legalorgtype, $legalorgname);
+        $this->getObjectHelper()->tryCall($shipToTradeParty, "setSpecifiedLegalOrganization", $legalorg);
+        return $this;
+    }
+
+    /**
+     * Set contact of the Ship-To party
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionShipToContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getShipToTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCallIfMethodExists($shipToTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact);
+        return $this;
+    }
+
+    /**
+     * Add an additional contact to the Ship-To party
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionShipToContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $shipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getShipToTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCall($shipToTradeParty, "addToDefinedTradeContact", $contact);
+        return $this;
+    }
+
+    /**
+     * Detailed information on the different end recipient
+     *
+     * @param  string      $name
+     * The name of the party to whom the goods are being delivered or for whom the services are being
+     * performed. Must be used if the recipient of the goods or services is not the same as the buyer.
+     * @param  string|null $id
+     * An identifier for the party Multiple IDs can be assigned or specified. They can be differentiated
+     * by using different identification schemes. If no scheme is given, it should be known to the buyer
+     * and seller, e.g. a previously exchanged identifier assigned by the buyer or seller.
+     * @param  string|null $description
+     * Further legal information that is relevant for the party
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionUltimateShipTo(string $name, ?string $id = null, ?string $description = null): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $shipToTradeParty = $this->getObjectHelper()->getTradeParty($name, $id, $description);
+        $this->getObjectHelper()->tryCall($positiondelivery, "setUltimateShipToTradeParty", $shipToTradeParty);
+        return $this;
+    }
+
+    /**
+     * Add a global id for the Ship-to Trade Party
+     *
+     * @param  string|null $globalID
+     * Global identifier of the parfty
+     * @param  string|null $globalIDType
+     * Type of global identification number, must be selected from the entries in
+     * the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionUltimateShipToGlobalId(?string $globalID = null, ?string $globalIDType = null): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $ultimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getUltimateShipToTradeParty");
+        $this->getObjectHelper()->tryCall($ultimateShipToTradeParty, "addToGlobalID", $this->getObjectHelper()->getIdType($globalID, $globalIDType));
+        return $this;
+    }
+
+    /**
+     * Add Tax registration to Ship-To Trade party
+     *
+     * @param  string|null $taxregtype
+     * Type of tax number of the seller (FC = Tax number, VA = Sales tax identification number)
+     * @param  string|null $taxregid
+     * Tax number of the seller or sales tax identification number of the seller
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionUltimateShipToTaxRegistration(?string $taxregtype = null, ?string $taxregid = null): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $ultimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getUltimateShipToTradeParty");
+        $taxreg = $this->getObjectHelper()->getTaxRegistrationType($taxregtype, $taxregid);
+        $this->getObjectHelper()->tryCall($ultimateShipToTradeParty, "addToSpecifiedTaxRegistration", $taxreg);
+        return $this;
+    }
+
+    /**
+     * Sets the postal address of the Ship-To party
+     *
+     * @param  string|null $lineone
+     * The main line in the party's address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the party's address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  string|null $subdivision
+     * The party's state
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionUltimateShipToAddress(?string $lineone = null, ?string $linetwo = null, ?string $linethree = null, ?string $postcode = null, ?string $city = null, ?string $country = null, ?string $subdivision = null): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $ultimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getUltimateShipToTradeParty");
+        $address = $this->getObjectHelper()->getTradeAddress($lineone, $linetwo, $linethree, $postcode, $city, $country, $subdivision);
+        $this->getObjectHelper()->tryCall($ultimateShipToTradeParty, "setPostalTradeAddress", $address);
+        return $this;
+    }
+
+    /**
+     * Set legal organisation of the Ship-To party
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * party as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer or seller party
+     * @param  string|null $legalorgtype The identifier for the identification scheme of the legal
+     *                                   registration of the party. In particular, the following scheme codes are used: 0021 : SWIFT, 0088 : EAN,
+     *                                   0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname A name by which the party is known, if different from the party's name
+     *                                   (also known as the company name)
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionUltimateShipToLegalOrganisation(?string $legalorgid, ?string $legalorgtype, ?string $legalorgname): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $ultimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getUltimateShipToTradeParty");
+        $legalorg = $this->getObjectHelper()->getLegalOrganization($legalorgid, $legalorgtype, $legalorgname);
+        $this->getObjectHelper()->tryCall($ultimateShipToTradeParty, "setSpecifiedLegalOrganization", $legalorg);
+        return $this;
+    }
+
+    /**
+     * Set contact of the Ship-To party
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionUltimateShipToContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $ultimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getUltimateShipToTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCallIfMethodExists($ultimateShipToTradeParty, "addToDefinedTradeContact", "setDefinedTradeContact", [$contact], $contact);
+        return $this;
+    }
+
+    /**
+     * Add an additional contact of the Ship-To party. This is only supported in the
+     * EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionUltimateShipToContact(?string $contactpersonname, ?string $contactdepartmentname, ?string $contactphoneno, ?string $contactfaxno, ?string $contactemailadd): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $ultimateShipToTradeParty = $this->getObjectHelper()->tryCallAndReturn($positiondelivery, "getUltimateShipToTradeParty");
+        $contact = $this->getObjectHelper()->getTradeContact($contactpersonname, $contactdepartmentname, $contactphoneno, $contactfaxno, $contactemailadd);
+        $this->getObjectHelper()->tryCall($ultimateShipToTradeParty, "addToDefinedTradeContact", $contact);
+        return $this;
+    }
+
+    /**
+     * Detailed information on the actual delivery on item level
+     *
+     * @param  DateTime|null $date
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionSupplyChainEvent(?DateTime $date): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $supplyChainevent = $this->getObjectHelper()->getSupplyChainEventType($date);
+        $this->getObjectHelper()->tryCall($positiondelivery, "setActualDeliverySupplyChainEvent", $supplyChainevent);
+        return $this;
+    }
+
+    /**
+     * Detailed information on the associated shipping notification on item level
+     *
+     * @param  string        $issuerassignedid
+     * @param  string|null   $lineid
+     * @param  DateTime|null $issueddate
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionDespatchAdviceReferencedDocument(string $issuerassignedid, ?string $lineid = null, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $despatchddvicerefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, $lineid, null, null, null, $issueddate, null);
+        $this->getObjectHelper()->tryCall($positiondelivery, "setDespatchAdviceReferencedDocument", $despatchddvicerefdoc);
+        return $this;
+    }
+
+    /**
+     * Detailed information on the associated shipping notification on item level
+     *
+     * @param  string        $issuerassignedid
+     * @param  string|null   $lineid
+     * @param  DateTime|null $issueddate
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionReceivingAdviceReferencedDocument(string $issuerassignedid, ?string $lineid = null, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $receivingadvicerefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, $lineid, null, null, null, $issueddate, null);
+        $this->getObjectHelper()->tryCall($positiondelivery, "setReceivingAdviceReferencedDocument", $receivingadvicerefdoc);
+        return $this;
+    }
+
+    /**
+     * Detailed information on the associated delivery note on item level
+     *
+     * @param  string        $issuerassignedid
+     * @param  string|null   $lineid
+     * @param  DateTime|null $issueddate
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionDeliveryNoteReferencedDocument(string $issuerassignedid, ?string $lineid = null, ?DateTime $issueddate = null): ZugferdDocumentBuilder
+    {
+        $positiondelivery = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeDelivery");
+        $deliverynoterefdoc = $this->getObjectHelper()->getReferencedDocumentType($issuerassignedid, null, $lineid, null, null, null, $issueddate, null);
+        $this->getObjectHelper()->tryCall($positiondelivery, "setDeliveryNoteReferencedDocument", $deliverynoterefdoc);
+        return $this;
+    }
+
+    /**
+     * Add information about the sales tax that applies to the goods and services invoiced
+     * in the relevant invoice line
+     *
+     * @param  string      $categoryCode          __BT-151, From BASIC__ Coded description of a sales tax category
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  string      $typeCode              __BT-151-0, From BASIC__ In EN 16931 only the tax type âsales taxâ with the code âVATâ is supported. Should other types of tax be specified, such as an insurance tax or a mineral oil tax the EXTENDED profile must be used. The code for the tax type must then be taken from the code list UNTDID 5153.
+     * @param  float       $rateApplicablePercent __BT-152, From BASIC__ The VAT rate applicable to the item invoiced and expressed as a percentage. Note: The code of the sales tax category and the category-specific sales tax rate  must correspond to one another. The value to be given is the percentage. For example, the value 20 is given for 20% (and not 0.2)
+     * @param  float|null  $calculatedAmount      __BT-, From __ Tax amount. Information only for taxes that are not VAT.
+     * @param  string|null $exemptionReason       __BT-, From __ Reason for tax exemption (free text)
+     * @param  string|null $exemptionReasonCode   __BT-, From __ Reason given in code form for the exemption of the amount from VAT. Note: Code list issued and maintained by the Connecting Europe Facility.
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionTax(string $categoryCode, string $typeCode, ?float $rateApplicablePercent, ?float $calculatedAmount = null, ?string $exemptionReason = null, ?string $exemptionReasonCode = null): ZugferdDocumentBuilder
+    {
+        $positionsettlement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeSettlement");
+        $tax = $this->getObjectHelper()->getTradeTaxType($categoryCode, $typeCode, null, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, null, null, null, null);
+        $this->getObjectHelper()->tryCallAll($positionsettlement, ["addToApplicableTradeTax", "setApplicableTradeTax"], $tax);
+        return $this;
+    }
+
+    /**
+     * Set information about the period relevant for the invoice item.
+     * Note: Also known as the invoice line delivery period.
+     *
+     * @param  DateTime|null $startdate __BT-134, From BASIC__ Start of the billing period
+     * @param  DateTime|null $endDate   __BT-135, From BASIC__ End of the billing period
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionBillingPeriod(?DateTime $startdate, ?DateTime $endDate): ZugferdDocumentBuilder
+    {
+        $positionsettlement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeSettlement");
+        $period = $this->getObjectHelper()->getSpecifiedPeriodType($startdate, $endDate, null, null);
+        $this->getObjectHelper()->tryCall($positionsettlement, "setBillingSpecifiedPeriod", $period);
+        return $this;
+    }
+
+    /**
+     * Add surcharges and discounts on position level
+     *
+     * @param  float       $actualAmount       __BT-136/BT-141, From BASIC__ The surcharge/discount amount excluding sales tax
+     * @param  boolean     $isCharge           __BT-27-1/BT-28-1, From BASIC__ (true for BT-/ and false for /BT-) Switch that indicates whether the following data refer to an allowance or a discount,
+     * true means that
+     * @param  float|null  $calculationPercent __BT-, From BASIC__ The percentage that may be used in conjunction with the base invoice line discount amount to calculate the invoice line discount amount
+     * @param  float|null  $basisAmount        __BT-, From BASIC__ The base amount that may be used in conjunction with the invoice line discount percentage to calculate the invoice line discount amount
+     * @param  string|null $reasonCode         __BT-140/BT-145, From BASIC__ The reason given as a code for the invoice line discount
+     * __Notes__
+     *  - Use entries from the UNTDID 5189 code list (discounts) or the UNTDID 7161 code list
+     *    (surcharges). The invoice line discount reason code and the invoice line discount reason must
+     *    match.
+     *  - In the case of a discount, the code list UNTDID 5189 must be used.
+     *  - In the event of a surcharge, the code list UNTDID 7161 must be used.
+     *
+     * In particular, the following codes can be used:
+     *  - AA = Advertising
+     *  - ABL = Additional packaging
+     *  - ADR = Other services
+     *  - ADT = Pick-up
+     *  - FC = Freight service
+     *  - FI = Financing
+     *  - LA = Labelling
+     *
+     * Include PEPPOL subset:
+     *  - 41 - Bonus for works ahead of schedule
+     *  - 42 - Other bonus
+     *  - 60 - Manufacturerâs consumer discount
+     *  - 62 - Due to military status
+     *  - 63 - Due to work accident
+     *  - 64 - Special agreement
+     *  - 65 - Production error discount
+     *  - 66 - New outlet discount
+     *  - 67 - Sample discount
+     *  - 68 - End-of-range discount
+     *  - 70 - Incoterm discount
+     *  - 71 - Point of sales threshold allowance
+     *  - 88 - Material surcharge/deduction
+     *  - 95 - Discount
+     *  - 100 - Special rebate
+     *  - 102 - Fixed long term
+     *  - 103 - Temporary
+     *  - 104 - Standard
+     *  - 105 - Yearly turnover
+     *
+     * Codelists: UNTDID 7161 (Complete list), UNTDID 5189 (Restricted)
+     * @param  string|null $reason             __BT-139/BT-144, From BASIC__ The reason given in text form for the invoice item discount/surcharge
+     * __Notes__
+     *  - The invoice line discount reason code (BT--140) and the invoice line discount reason
+     *    (BT--139) must show the same allowance type.
+     *  - Each line item discount (BG-27) must include a corresponding line discount reason
+     *    (BT--139) or an appropriate line discount reason code (BT--140), or both.
+     *  - The code for the reason for the charge at the invoice line level (BT--145) and the
+     *    reason for the invoice line discount (BT--144) must show the same discount type
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionAllowanceCharge(float $actualAmount, bool $isCharge, ?float $calculationPercent = null, ?float $basisAmount = null, ?string $reasonCode = null, ?string $reason = null): ZugferdDocumentBuilder
+    {
+        $positionsettlement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeSettlement");
+        $allowanceCharge = $this->getObjectHelper()->getTradeAllowanceChargeType($actualAmount, $isCharge, null, null, null, null, $calculationPercent, $basisAmount, null, null, $reasonCode, $reason);
+        $this->getObjectHelper()->tryCall($positionsettlement, "addToSpecifiedTradeAllowanceCharge", $allowanceCharge);
+        return $this;
+    }
+
+    /**
+     * Set information on item totals
+     *
+     * @param  float      $lineTotalAmount            __BT-131, From BASIC__ The total amount of the invoice item.
+     * __Note:__ This is the "net" amount, that is, excluding sales tax, but including all surcharges and discounts applicable to the item level, as well as other taxes.
+     * @param  float|null $totalAllowanceChargeAmount __BT-, From __ Total amount of item surcharges and discounts
+     * @return ZugferdDocumentBuilder
+     */
+    public function setDocumentPositionLineSummation(float $lineTotalAmount, ?float $totalAllowanceChargeAmount = null): ZugferdDocumentBuilder
+    {
+        $positionsettlement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeSettlement");
+        $summation = $this->getObjectHelper()->getTradeSettlementLineMonetarySummationType($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->getObjectHelper()->tryCall($positionsettlement, "setSpecifiedTradeSettlementLineMonetarySummation", $summation);
+        return $this;
+    }
+
+    /**
+     * Add an AccountingAccount on item level
+     * Detailinformationen zur Buchungsreferenz
+     *
+     * @param  string      $id
+     * @param  string|null $typeCode
+     * @return ZugferdDocumentBuilder
+     */
+    public function addDocumentPositionReceivableSpecifiedTradeAccountingAccount(string $id, ?string $typeCode): ZugferdDocumentBuilder
+    {
+        $positionsettlement = $this->getObjectHelper()->tryCallAndReturn($this->currentPosition, "getSpecifiedLineTradeSettlement");
+        $account = $this->getObjectHelper()->getTradeAccountingAccountType($id, $typeCode);
+        $this->getObjectHelper()->tryCallAll($positionsettlement, ["addToReceivableSpecifiedTradeAccountingAccount", "setReceivableSpecifiedTradeAccountingAccount"], $account);
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentJsonExporter.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentJsonExporter.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentJsonExporter.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use stdClass;
+
+/**
+ * Class representing the export of a zugferd document
+ * in JSON format
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdDocumentJsonExporter
+{
+    /**
+     * The instance to the zugferd document
+     *
+     * @var ZugferdDocument
+     */
+    private $document = null;
+
+    /**
+     * Constructor
+     *
+     * @param ZugferdDocument $document
+     *
+     * @codeCoverageIgnore
+     */
+    public function __construct(ZugferdDocument $document)
+    {
+        $this->document = $document;
+    }
+
+    /**
+     * Returns the invoice object as a json string
+     *
+     * @return string
+     */
+    public function toJsonString(): string
+    {
+        return $this->document->serializeAsJson();
+    }
+
+    /**
+     * Returns the invoice object as a json object
+     *
+     * @return null|stdClass
+     */
+    public function toJsonObject(): ?\stdClass
+    {
+        $jsonObject = json_decode($this->toJsonString());
+
+        return $jsonObject;
+    }
+
+    /**
+     * Returns the invoice object as a pretty printed json string
+     *
+     * @return string|boolean
+     */
+    public function toPrettyJsonString()
+    {
+        return json_encode($this->toJsonObject(), JSON_PRETTY_PRINT);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilder.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilder.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilder.php	(revision 8435)
@@ -0,0 +1,106 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use horstoeko\zugferd\ZugferdDocumentPdfBuilderAbstract;
+use horstoeko\zugferd\ZugferdDocumentBuilder;
+
+/**
+ * Class representing the facillity adding XML data from ZugferdDocumentBuilder
+ * to an existing PDF with conversion to PDF/A
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdDocumentPdfBuilder extends ZugferdDocumentPdfBuilderAbstract
+{
+    /**
+     * Internal reference to the xml builder instance
+     *
+     * @var ZugferdDocumentBuilder
+     */
+    private $documentBuilder = null;
+
+    /**
+     * Cached XML data
+     *
+     * @var string
+     */
+    private $xmlDataCache = "";
+
+    /**
+     * @see self::__construct
+     */
+    public static function fromPdfFile(ZugferdDocumentBuilder $documentBuilder, string $pdfFileName): self
+    {
+        if (!is_file($pdfFileName)) {
+            throw new \InvalidArgumentException("The given PDF file does not exist.");
+        }
+
+        return new self($documentBuilder, $pdfFileName);
+    }
+
+    /**
+     * @see self::__construct
+     */
+    public static function fromPdfString(ZugferdDocumentBuilder $documentBuilder, string $pdfContent): self
+    {
+        return new self($documentBuilder, $pdfContent);
+    }
+
+    /**
+     * Constructor
+     *
+     * @param ZugferdDocumentBuilder $documentBuilder
+     * The instance of the document builder. Needed to get the XML data
+     * @param string                 $pdfData
+     * The full filename or a string containing the binary pdf data. This
+     * is the original PDF (e.g. created by a ERP system)
+     */
+    public function __construct(ZugferdDocumentBuilder $documentBuilder, string $pdfData)
+    {
+        $this->documentBuilder = $documentBuilder;
+
+        parent::__construct($pdfData);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function getXmlContent(): string
+    {
+        if ($this->xmlDataCache) {
+            return $this->xmlDataCache;
+        }
+
+        $this->xmlDataCache = $this->documentBuilder->getContentAsDomDocument()->saveXML();
+
+        return $this->xmlDataCache;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function getXmlAttachmentFilename(): string
+    {
+        return $this->documentBuilder->getProfileDefinitionParameter('attachmentfilename');
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function getXmlAttachmentXmpName(): string
+    {
+        return $this->documentBuilder->getProfileDefinitionParameter("xmpname");
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilderAbstract.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilderAbstract.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfBuilderAbstract.php	(revision 8435)
@@ -0,0 +1,343 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use DOMDocument;
+use DOMXpath;
+use horstoeko\stringmanagement\PathUtils;
+use horstoeko\zugferd\codelists\ZugferdInvoiceType;
+use horstoeko\zugferd\ZugferdPackageVersion;
+use horstoeko\zugferd\ZugferdPdfWriter;
+use horstoeko\zugferd\ZugferdSettings;
+use setasign\Fpdi\PdfParser\StreamReader as PdfStreamReader;
+
+/**
+ * Class representing the base facillity adding XML data
+ * to an existing PDF with conversion to PDF/A
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+abstract class ZugferdDocumentPdfBuilderAbstract
+{
+    /**
+     * Additional creator tool (e.g. the ERP software that called the PHP library)
+     *
+     * @var string
+     */
+    private $additionalCreatorTool = "";
+
+    /**
+     * Instance of the pdfwriter
+     *
+     * @var ZugferdPdfWriter
+     */
+    private $pdfWriter = null;
+
+    /**
+     * Contains the data of the original PDF document
+     *
+     * @var string
+     */
+    private $pdfData = "";
+
+    /**
+     * Constructor
+     *
+     * @param string $pdfData
+     * The full filename or a string containing the binary pdf data. This
+     * is the original PDF (e.g. created by a ERP system)
+     */
+    public function __construct(string $pdfData)
+    {
+        $this->pdfData = $pdfData;
+        $this->pdfWriter = new ZugferdPdfWriter();
+    }
+
+    /**
+     * Generates the final document
+     *
+     * @return self
+     */
+    public function generateDocument()
+    {
+        $this->startCreatePdf();
+
+        return $this;
+    }
+
+    /**
+     * Saves the document generated with generateDocument to a file
+     *
+     * @param  string $toFilename
+     * The full qualified filename to which the generated PDF (with attachment)
+     * is stored
+     * @return self
+     */
+    public function saveDocument(string $toFilename)
+    {
+        $this->pdfWriter->Output($toFilename, 'F');
+
+        return $this;
+    }
+
+    /**
+     * Returns the PDF as an inline file
+     *
+     * @param  string $toFilename
+     * @return string
+     */
+    public function saveDocumentInline(string $toFilename): string
+    {
+        return $this->pdfWriter->Output($toFilename, 'I');
+    }
+
+    /**
+     * Returns the PDF as a string
+     *
+     * @param  string $toFilename
+     * @return string
+     */
+    public function downloadString(string $toFilename): string
+    {
+        return $this->pdfWriter->Output($toFilename, 'S');
+    }
+
+    /**
+     * Sets an additional creator tool (e.g. the ERP software that called the PHP library)
+     *
+     * @param  string $additionalCreatorTool
+     * The name of the creator
+     * @return self
+     */
+    public function setAdditionalCreatorTool(string $additionalCreatorTool)
+    {
+        $this->additionalCreatorTool = $additionalCreatorTool;
+
+        return $this;
+    }
+
+    /**
+     * Returns the creator tool name (the PHP library, and if given also the additional creator tool)
+     *
+     * @return string
+     */
+    public function getCreatorToolName(): string
+    {
+        $toolName = sprintf('Factur-X PHP library v%s by HorstOeko', ZugferdPackageVersion::getInstalledVersion());
+        if ($this->additionalCreatorTool) {
+            return $this->additionalCreatorTool . ' / ' . $toolName;
+        }
+        return $toolName;
+    }
+
+    /**
+     * Get the content of XML to attach
+     *
+     * @return string
+     */
+    abstract protected function getXmlContent(): string;
+
+    /**
+     * Get the filename of the XML to attach
+     *
+     * @return string
+     */
+    abstract protected function getXmlAttachmentFilename(): string;
+
+    /**
+     * Get the XMP name for the XML to attach
+     *
+     * @return string
+     */
+    abstract protected function getXmlAttachmentXmpName(): string;
+
+    /**
+     * Internal function which sets up the PDF
+     *
+     * @return void
+     */
+    private function startCreatePdf(): void
+    {
+        // Get PDF data
+
+        $pdfDataRef = null;
+
+        if ($this->pdfDataIsFile($this->pdfData)) {
+            $pdfDataRef = $this->pdfData;
+        } elseif (is_string($this->pdfData)) {
+            $pdfDataRef = PdfStreamReader::createByString($this->pdfData);
+        }
+
+        // Get XML data from Builder
+
+        $documentBuilderXmlDataRef = PdfStreamReader::createByString($this->getXmlContent());
+
+        // Start
+
+        $this->pdfWriter->attach(
+            $documentBuilderXmlDataRef,
+            $this->getXmlAttachmentFilename(),
+            'Factur-X Invoice',
+            'Data',
+            'text#2Fxml'
+        );
+
+        $this->pdfWriter->openAttachmentPane();
+
+        // Copy pages from the original PDF
+
+        $pageCount = $this->pdfWriter->setSourceFile($pdfDataRef);
+
+        for ($pageNumber = 1; $pageNumber <= $pageCount; ++$pageNumber) {
+            $pageContent = $this->pdfWriter->importPage($pageNumber, '/MediaBox');
+            $this->pdfWriter->AddPage();
+            $this->pdfWriter->useTemplate($pageContent, 0, 0, null, null, true);
+        }
+
+        // Set PDF version 1.7 according to PDF/A-3 ISO 32000-1
+
+        $this->pdfWriter->setPdfVersion('1.7', true);
+
+        // Update meta data (e.g. such as author, producer, title)
+
+        $this->updatePdfMetadata();
+    }
+
+    /**
+     * Update PDF metadata to according to FacturX/ZUGFeRD XML data.
+     *
+     * @return void
+     */
+    private function updatePdfMetadata(): void
+    {
+        $pdfMetadataInfos = $this->preparePdfMetadata();
+        $this->pdfWriter->setPdfMetadataInfos($pdfMetadataInfos);
+
+        $xmp = simplexml_load_file(ZugferdSettings::getFullXmpMetaDataFilename());
+        $descriptionNodes = $xmp->xpath('rdf:Description');
+
+        $descFx = $descriptionNodes[0];
+        $descFx->children('fx', true)->{'ConformanceLevel'} = strtoupper($this->getXmlAttachmentXmpName());
+        $descFx->children('fx', true)->{'DocumentFileName'} = $this->getXmlAttachmentFilename();
+        $this->pdfWriter->addMetadataDescriptionNode($descFx->asXML());
+
+        $this->pdfWriter->addMetadataDescriptionNode($descriptionNodes[1]->asXML());
+
+        $descPdfAid = $descriptionNodes[2];
+        $this->pdfWriter->addMetadataDescriptionNode($descPdfAid->asXML());
+
+        $descDc = $descriptionNodes[3];
+        $descNodes = $descDc->children('dc', true);
+        $descNodes->title->children('rdf', true)->Alt->li = $pdfMetadataInfos['title'];
+        $descNodes->creator->children('rdf', true)->Seq->li = $pdfMetadataInfos['author'];
+        $descNodes->description->children('rdf', true)->Alt->li = $pdfMetadataInfos['subject'];
+        $this->pdfWriter->addMetadataDescriptionNode($descDc->asXML());
+
+        $descAdobe = $descriptionNodes[4];
+        $descAdobe->children('pdf', true)->{'Producer'} = 'FPDF';
+        $this->pdfWriter->addMetadataDescriptionNode($descAdobe->asXML());
+
+        $descXmp = $descriptionNodes[5];
+        $xmpNodes = $descXmp->children('xmp', true);
+        $xmpNodes->{'CreatorTool'} = $this->getCreatorToolName();
+        $xmpNodes->{'CreateDate'} = $pdfMetadataInfos['createdDate'];
+        $xmpNodes->{'ModifyDate'} = $pdfMetadataInfos['modifiedDate'];
+        $this->pdfWriter->addMetadataDescriptionNode($descXmp->asXML());
+    }
+
+    /**
+     * Prepare PDF Metadata informations from FacturX/ZUGFeRD XML.
+     *
+     * @return array
+     */
+    private function preparePdfMetadata(): array
+    {
+        $invoiceInformations = $this->extractInvoiceInformations();
+
+        $dateString = date('Y-m-d', strtotime($invoiceInformations['date']));
+        $title = sprintf('%s : %s %s', $invoiceInformations['seller'], $invoiceInformations['docTypeName'], $invoiceInformations['invoiceId']);
+        $subject = sprintf('FacturX/ZUGFeRD %s %s dated %s issued by %s', $invoiceInformations['docTypeName'], $invoiceInformations['invoiceId'], $dateString, $invoiceInformations['seller']);
+
+        $pdfMetadata = array(
+            'author' => $invoiceInformations['seller'],
+            'keywords' => sprintf('%s, FacturX/ZUGFeRD', $invoiceInformations['docTypeName']),
+            'title' => $title,
+            'subject' => $subject,
+            'createdDate' => $invoiceInformations['date'],
+            'modifiedDate' => date('Y-m-d\TH:i:s') . '+00:00',
+        );
+
+        return $pdfMetadata;
+    }
+
+    /**
+     * Extract major invoice information from FacturX/ZUGFeRD XML.
+     *
+     * @return array
+     */
+    protected function extractInvoiceInformations(): array
+    {
+        $domDocument = new DOMDocument();
+        $domDocument->loadXML($this->getXmlContent());
+
+        $xpath = new DOMXPath($domDocument);
+
+        $dateXpath = $xpath->query('//rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString');
+        $date = $dateXpath->item(0)->nodeValue;
+        $dateReformatted = date('Y-m-d\TH:i:s', strtotime($date)) . '+00:00';
+
+        $invoiceIdXpath = $xpath->query('//rsm:ExchangedDocument/ram:ID');
+        $invoiceId = $invoiceIdXpath->item(0)->nodeValue;
+
+        $sellerXpath = $xpath->query('//ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name');
+        $sellerName = $sellerXpath->item(0)->nodeValue;
+
+        $docTypeXpath = $xpath->query('//rsm:ExchangedDocument/ram:TypeCode');
+        $docTypeCode = $docTypeXpath->item(0)->nodeValue;
+
+        switch ($docTypeCode) {
+            case ZugferdInvoiceType::CREDITNOTE:
+                $docTypeName = 'Credit Note';
+                break;
+            default:
+                $docTypeName = 'Invoice';
+                break;
+        }
+
+        $invoiceInformation = array(
+            'invoiceId' => $invoiceId,
+            'docTypeName' => $docTypeName,
+            'seller' => $sellerName,
+            'date' => $dateReformatted,
+        );
+
+        return $invoiceInformation;
+    }
+
+    /**
+     * Returns true if the submittet parameter $pdfData is a valid file.
+     * Otherwise it will return false
+     *
+     * @param  string $pdfData
+     * @return boolean
+     */
+    private function pdfDataIsFile($pdfData): bool
+    {
+        try {
+            return @is_file($pdfData);
+        } catch (\TypeError $ex) {
+            return false;
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfMerger.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfMerger.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfMerger.php	(revision 8435)
@@ -0,0 +1,142 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use horstoeko\zugferd\exception\ZugferdFileNotReadableException;
+use horstoeko\zugferd\exception\ZugferdUnknownProfileParameterException;
+use horstoeko\zugferd\ZugferdDocumentPdfBuilderAbstract;
+use horstoeko\zugferd\ZugferdProfileResolver;
+
+/**
+ * Class representing the facillity adding existing XML data (file or data-string)
+ * to an existing PDF with conversion to PDF/A
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdDocumentPdfMerger extends ZugferdDocumentPdfBuilderAbstract
+{
+    /**
+     * Internal reference to the xml data (file or data-string)
+     *
+     * @var string
+     */
+    private $xmlDataOrFilename = "";
+
+    /**
+     * Cached XML data
+     *
+     * @var string
+     */
+    private $xmlDataCache = "";
+
+    /**
+     * Constructor
+     *
+     * @param string $xmlDataOrFilename
+     * The XML data as a string or the full qualified path to an XML-File
+     * containing the XML-data
+     * @param string $pdfData
+     * The full filename or a string containing the binary pdf data. This
+     * is the original PDF (e.g. created by a ERP system)
+     */
+    public function __construct(string $xmlDataOrFilename, string $pdfData)
+    {
+        $this->xmlDataOrFilename = $xmlDataOrFilename;
+
+        parent::__construct($pdfData);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function getXmlContent(): string
+    {
+        if ($this->xmlDataCache) {
+            return $this->xmlDataCache;
+        }
+
+        if ($this->xmlDataIsFile()) {
+            $xmlContent = file_get_contents($this->xmlDataOrFilename);
+            if ($xmlContent === false) {
+                throw new ZugferdFileNotReadableException('Could not read XML file');
+            }
+        } else {
+            $xmlContent = $this->xmlDataOrFilename;
+        }
+
+        $this->xmlDataCache = $xmlContent;
+
+        return $xmlContent;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function getXmlAttachmentFilename(): string
+    {
+        return $this->getProfileDefinitionParameter('attachmentfilename');
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function getXmlAttachmentXmpName(): string
+    {
+        return $this->getProfileDefinitionParameter("xmpname");
+    }
+
+    /**
+     * Returns true if the submitted $xmlDataOrFilename is a valid file.
+     * Otherwise it will return false
+     *
+     * @return boolean
+     */
+    private function xmlDataIsFile(): bool
+    {
+        try {
+            return @is_file($this->xmlDataOrFilename);
+        } catch (\TypeError $ex) {
+            return false;
+        }
+    }
+
+    /**
+     * Guess the profile type of the readden xml document
+     *
+     * @codeCoverageIgnore
+     *
+     * @return array
+     */
+    private function getProfileDefinition(): array
+    {
+        return ZugferdProfileResolver::resolveProfileDef($this->getXmlContent());
+    }
+
+    /**
+     * Get a parameter from profile definition
+     *
+     * @param string $parameterName
+     * @return mixed
+     */
+    public function getProfileDefinitionParameter(string $parameterName)
+    {
+        $profileDefinition = $this->getProfileDefinition();
+
+        if (is_array($profileDefinition) && isset($profileDefinition[$parameterName])) {
+            return $profileDefinition[$parameterName];
+        }
+
+        throw new ZugferdUnknownProfileParameterException($parameterName);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfReader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfReader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentPdfReader.php	(revision 8435)
@@ -0,0 +1,83 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use Smalot\PdfParser\Parser as PdfParser;
+use horstoeko\zugferd\exception\ZugferdFileNotFoundException;
+
+/**
+ * Class representing the document reader for incoming PDF/A-Documents with
+ * attached XML data in BASIC-, EN16931- and EXTENDED profile
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdDocumentPdfReader
+{
+    /**
+     * List of filenames which are possible in PDF
+     */
+    const ATTACHMENT_FILENAMES = ['ZUGFeRD-invoice.xml'/*1.0*/, 'zugferd-invoice.xml'/*2.0*/, 'factur-x.xml'/*2.1*/, 'xrechnung.xml'];
+
+    /**
+     * Load a PDF file (ZUGFeRD/Factur-X)
+     *
+     * @param  string $pdfFilename
+     * Contains a full-qualified filename which must exist and must be readable
+     * @return ZugferdDocumentReader|null
+     */
+    public static function readAndGuessFromFile(string $pdfFilename): ?ZugferdDocumentReader
+    {
+        if (!file_exists($pdfFilename)) {
+            throw new ZugferdFileNotFoundException($pdfFilename);
+        }
+
+        $pdfParser = new PdfParser();
+        $pdfParsed = $pdfParser->parseFile($pdfFilename);
+        $filespecs = $pdfParsed->getObjectsByType('Filespec');
+
+        $attachmentFound = false;
+        $attachmentIndex = 0;
+        $embeddedFileIndex = 0;
+        $returnValue = null;
+
+        try {
+            foreach ($filespecs as $filespec) {
+                $filespecDetails = $filespec->getDetails();
+                if (in_array($filespecDetails['F'], static::ATTACHMENT_FILENAMES)) {
+                    $attachmentFound = true;
+                    break;
+                }
+                $attachmentIndex++;
+            }
+
+            if (true == $attachmentFound) {
+                /**
+                 * @var array<\Smalot\PdfParser\PDFObject>
+                 */
+                $embeddedFiles = $pdfParsed->getObjectsByType('EmbeddedFile');
+                foreach ($embeddedFiles as $embeddedFile) {
+                    if ($attachmentIndex == $embeddedFileIndex) {
+                        $returnValue = ZugferdDocumentReader::readAndGuessFromContent($embeddedFile->getContent());
+                        break;
+                    }
+                    $embeddedFileIndex++;
+                }
+            }
+        } catch (\Exception $e) {
+            $returnValue = null;
+        }
+
+        return $returnValue;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentReader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentReader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentReader.php	(revision 8435)
@@ -0,0 +1,4668 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use Closure;
+use DateTime;
+use horstoeko\stringmanagement\FileUtils;
+use horstoeko\stringmanagement\PathUtils;
+use horstoeko\stringmanagement\StringUtils;
+use horstoeko\zugferd\exception\ZugferdFileNotFoundException;
+use horstoeko\zugferd\ZugferdProfileResolver;
+
+/**
+ * Class representing the document reader for incoming XML-Documents with
+ * XML data in BASIC-, EN16931- and EXTENDED profile
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdDocumentReader extends ZugferdDocument
+{
+    /**
+     * Undocumented variable
+     *
+     * @var integer
+     */
+    private $documentAddRefDocPointer = 0;
+
+    /**
+     * Undocumented variable
+     *
+     * @var integer
+     */
+    private $documentUltimateCustomerOrderReferencedDocumentPointer = 0;
+
+    /**
+     * Internal pointer for documents allowance charges
+     *
+     * @var integer
+     */
+    private $documentAllowanceChargePointer = 0;
+
+    /**
+     * Internal pointer for documents logistic service charges
+     *
+     * @var integer
+     */
+    private $documentLogisticServiceChargePointer = 0;
+
+    /**
+     * Internal pointer for documents payment terms
+     *
+     * @var integer
+     */
+    private $documentPaymentTermsPointer = 0;
+
+    /**
+     * Internal pointer for document payment means
+     *
+     * @var integer
+     */
+    private $documentPaymentMeansPointer = 0;
+
+    /**
+     * Internal pointer for the document taxes
+     *
+     * @var integer
+     */
+    private $documentTaxPointer = 0;
+
+    /**
+     * Internal pointer for seller contacts
+     *
+     * @var integer
+     */
+    private $documentSellerContactPointer = 0;
+
+    /**
+     * Internal pointer for byuer contacts
+     *
+     * @var integer
+     */
+    private $documentBuyerContactPointer = 0;
+
+    /**
+     * Internal pointer for seller tax representativ party contacts
+     *
+     * @var integer
+     */
+    private $documentSellerTaxRepresentativeContactPointer = 0;
+
+    /**
+     * Internal pointer for product enduser contacts
+     *
+     * @var integer
+     */
+    private $documentProductEndUserContactPointer = 0;
+
+    /**
+     * Internal pointer for Ship-To contacts
+     *
+     * @var integer
+     */
+    private $documentShipToContactPointer = 0;
+
+    /**
+     * Internal pointer for Ultimate-Ship-To contacts
+     *
+     * @var integer
+     */
+    private $documentUltimateShipToContactPointer = 0;
+
+    /**
+     * Internal pointer for Ship-From contacts
+     *
+     * @var integer
+     */
+    private $documentShipFromContactPointer = 0;
+
+    /**
+     * Internal pointer for invoicer contacts
+     *
+     * @var integer
+     */
+    private $documentInvoicerContactPointer = 0;
+
+    /**
+     * Internal pointer for invoicee contacts
+     *
+     * @var integer
+     */
+    private $documentInvoiceeContactPointer = 0;
+
+    /**
+     * Internal pointer for payee contacts
+     *
+     * @var integer
+     */
+    private $documentPayeeContactPointer = 0;
+
+    /**
+     * Internal pointer for the position
+     *
+     * @var integer
+     */
+    private $positionPointer = 0;
+
+    /**
+     * Internal pointer for the position note
+     *
+     * @var integer
+     */
+    private $positionNotePointer = 0;
+
+    /**
+     * Internal pointer for the position's gross price allowances/charges
+     *
+     * @var integer
+     */
+    private $positionGrossPriceAllowanceChargePointer = 0;
+
+    /**
+     * Internal pointer for the position taxes
+     *
+     * @var integer
+     */
+    private $positionTaxPointer = 0;
+
+    /**
+     * Internal pointer for the position's allowances/charges
+     *
+     * @var integer
+     */
+    private $positionAllowanceChargePointer = 0;
+
+    /**
+     * Internal pointer for the position's additional referenced document
+     *
+     * @var integer
+     */
+    private $positionAddRefDocPointer = 0;
+
+    /**
+     * Internal pointer for the positions product characteristics
+     *
+     * @var integer
+     */
+    private $positionProductCharacteristicPointer = 0;
+
+    /**
+     * Internal pointer for the positions product classification
+     *
+     * @var integer
+     */
+    private $positionProductClassificationPointer = 0;
+
+    /**
+     * Internal pointer for the positions referenced product
+     *
+     * @var integer
+     */
+    private $positionReferencedProductPointer = 0;
+
+    /**
+     * @var string
+     */
+    private $binarydatadirectory = "";
+
+    /**
+     * Guess the profile type of a xml file
+     *
+     * @codeCoverageIgnore
+     *
+     * @param  string $xmlfilename The filename to read invoice data from
+     * @return ZugferdDocumentReader
+     */
+    public static function readAndGuessFromFile(string $xmlfilename): ZugferdDocumentReader
+    {
+        if (!file_exists($xmlfilename)) {
+            throw new ZugferdFileNotFoundException($xmlfilename);
+        }
+
+        return self::readAndGuessFromContent(file_get_contents($xmlfilename));
+    }
+
+    /**
+     * Guess the profile type of the readden xml document
+     *
+     * @codeCoverageIgnore
+     *
+     * @param  string $xmlcontent The XML content as a string to read the invoice data from
+     * @return ZugferdDocumentReader
+     */
+    public static function readAndGuessFromContent(string $xmlcontent): ZugferdDocumentReader
+    {
+        $profileId = ZugferdProfileResolver::resolveProfileId($xmlcontent);
+
+        return (new static($profileId))->readContent($xmlcontent);
+    }
+
+    /**
+     * Set the directory where the attached binary data from
+     * additional referenced documents are temporary stored
+     *
+     * @param  string $binarydatadirectory
+     * @return ZugferdDocumentReader
+     */
+    public function setBinaryDataDirectory(string $binarydatadirectory): ZugferdDocumentReader
+    {
+        if ($binarydatadirectory) {
+            if (is_dir($binarydatadirectory)) {
+                $this->binarydatadirectory = $binarydatadirectory;
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * Read content of a zuferd/xrechnung xml from a string
+     *
+     * @codeCoverageIgnore
+     *
+     * @param  string $xmlcontent The XML content as a string to read the invoice data from
+     * @return ZugferdDocumentReader
+     */
+    private function readContent(string $xmlcontent): ZugferdDocumentReader
+    {
+        $this->deserialize($xmlcontent);
+
+        return $this;
+    }
+
+    /**
+     * Read general information about the document
+     *
+     * @param  string|null   $documentno               Returns the document no issued by the seller
+     * @param  string|null   $documenttypecode         Returns the type of the document, See \horstoeko\codelists\ZugferdInvoiceType for details
+     * @param  DateTime|null $documentdate             Returns the date when the document was issued by the seller
+     * @param  string|null   $invoiceCurrency          Returns the code for the invoice currency
+     * @param  string|null   $taxCurrency              Returns the code for the currency of the VAT posting
+     * @param  string|null   $documentname             Returns the document type (free text)
+     * @param  string|null   $documentlanguage         Returns the language code in which the document was written
+     * @param  DateTime|null $effectiveSpecifiedPeriod Returns the contractual due date of the invoice
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentInformation(?string &$documentno, ?string &$documenttypecode, ?DateTime &$documentdate, ?string &$invoiceCurrency, ?string &$taxCurrency, ?string &$documentname, ?string &$documentlanguage, ?DateTime &$effectiveSpecifiedPeriod): ZugferdDocumentReader
+    {
+        $documentno = $this->getInvoiceValueByPath("getExchangedDocument.getID", "");
+        $documenttypecode = $this->getInvoiceValueByPath("getExchangedDocument.getTypeCode.value", "");
+        $documentdate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getExchangedDocument.getIssueDateTime.getDateTimeString", ""),
+            $this->getInvoiceValueByPath("getExchangedDocument.getIssueDateTime.getDateTimeString.getFormat", "")
+        );
+        $invoiceCurrency = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceCurrencyCode.value", "");
+        $taxCurrency = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getTaxCurrencyCode.value", "");
+        $documentname = $this->getInvoiceValueByPath("getExchangedDocument.getName.value", "");
+        $documentlanguages = $this->getInvoiceValueByPath("getExchangedDocument.getLanguageID", []);
+        $documentlanguage = (isset($documentlanguages[0]) ? $this->getObjectHelper()->tryCallByPathAndReturn($documentlanguages[0], "value") : "");
+        $effectiveSpecifiedPeriod = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getExchangedDocument.getEffectiveSpecifiedPeriod.getDateTimeString", ""),
+            $this->getInvoiceValueByPath("getExchangedDocument.getEffectiveSpecifiedPeriod.getDateTimeString.getFormat", "")
+        );
+        return $this;
+    }
+
+    /**
+     * Read general payment information
+     *
+     * @param  string|null $creditorReferenceID
+     * Returns the identifier of the creditor (SEPA)
+     * @param  string|null $paymentReference
+     * Returns the Usage (SEPA)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentGeneralPaymentInformation(?string &$creditorReferenceID, ?string &$paymentReference): ZugferdDocumentReader
+    {
+        $creditorReferenceID = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getCreditorReferenceID.value", "");
+        $paymentReference = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPaymentReference.value", "") ?? "";
+        return $this;
+    }
+
+    /**
+     * Read copy indicator
+     *
+     * @param  boolean|null $copyindicator
+     * Returns true if this document is a copy from the original document
+     * @return ZugferdDocumentReader
+     */
+    public function getIsDocumentCopy(?bool &$copyindicator): ZugferdDocumentReader
+    {
+        $copyindicator = $this->getInvoiceValueByPath("getExchangedDocument.getCopyIndicator.getIndicator", false);
+        return $this;
+    }
+
+    /**
+     * Read a test document indicator
+     *
+     * @param  boolean|null $testdocumentindicator
+     * Returns true if this document is only for test purposes
+     * @return ZugferdDocumentReader
+     */
+    public function getIsTestDocument(?bool &$testdocumentindicator): ZugferdDocumentReader
+    {
+        $testdocumentindicator = $this->getInvoiceValueByPath("getExchangedDocumentContext.getTestIndicator.getIndicator", false);
+        return $this;
+    }
+
+    /**
+     * Read Document money summation
+     *
+     * @param  float|null $grandTotalAmount
+     * Returns the total invoice amount including sales tax
+     * @param  float|null $duePayableAmount
+     * Returns the Payment amount due
+     * @param  float|null $lineTotalAmount
+     * Returns the sum of the net amounts of all invoice lines
+     * @param  float|null $chargeTotalAmount
+     * Returns the sum of the surcharges at document level
+     * @param  float|null $allowanceTotalAmount
+     * Returns the sum of the discounts at document level
+     * @param  float|null $taxBasisTotalAmount
+     * Returns the total invoice amount excluding sales tax
+     * @param  float|null $taxTotalAmount
+     * Returns the total amount of the invoice sales tax, total tax amount in the booking currency
+     * @param  float|null $roundingAmount
+     * Returns the rounding amount
+     * @param  float|null $totalPrepaidAmount
+     * Returns the alreay payed amout
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSummation(?float &$grandTotalAmount, ?float &$duePayableAmount, ?float &$lineTotalAmount, ?float &$chargeTotalAmount, ?float &$allowanceTotalAmount, ?float &$taxBasisTotalAmount, ?float &$taxTotalAmount, ?float &$roundingAmount, ?float &$totalPrepaidAmount): ZugferdDocumentReader
+    {
+        $invoiceCurrencyCode = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceCurrencyCode.value", "");
+
+        $grandTotalAmountElement = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getGrandTotalAmount", 0);
+        if (is_array($grandTotalAmountElement)) {
+            foreach ($grandTotalAmountElement as $grandTotalAmountElementItem) {
+                $grandTotalAmountCurrencyCode = $this->getObjectHelper()->tryCallAndReturn($grandTotalAmountElementItem, "getCurrencyID") ?? "";
+                if ($grandTotalAmountCurrencyCode == $invoiceCurrencyCode || $grandTotalAmountCurrencyCode == "") {
+                    $grandTotalAmount = $this->getObjectHelper()->tryCallAndReturn($grandTotalAmountElementItem, "value") ?? 0;
+                    break;
+                }
+            }
+        } else {
+            $grandTotalAmount = $this->getObjectHelper()->tryCallAndReturn($grandTotalAmountElement, "value") ?? 0;
+        }
+
+        $taxBasisTotalAmountElement = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getTaxBasisTotalAmount", 0);
+        if (is_array($taxBasisTotalAmountElement)) {
+            foreach ($taxBasisTotalAmountElement as $taxBasisTotalAmountElementItem) {
+                $taxBasisTotalAmountCurrencyCode = $this->getObjectHelper()->tryCallAndReturn($taxBasisTotalAmountElementItem, "getCurrencyID") ?? "";
+                if ($taxBasisTotalAmountCurrencyCode == $invoiceCurrencyCode || $taxBasisTotalAmountCurrencyCode == "") {
+                    $taxBasisTotalAmount = $this->getObjectHelper()->tryCallAndReturn($taxBasisTotalAmountElementItem, "value") ?? 0;
+                    break;
+                }
+            }
+        } else {
+            $taxBasisTotalAmount = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getTaxBasisTotalAmount.value", 0);
+        }
+
+        $taxTotalAmountElement = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getTaxTotalAmount", 0);
+        if (is_array($taxTotalAmountElement)) {
+            foreach ($taxTotalAmountElement as $taxTotalAmountElementItem) {
+                $taxTotalAmountCurrencyCode = $this->getObjectHelper()->tryCallAndReturn($taxTotalAmountElementItem, "getCurrencyID") ?? "";
+                if ($taxTotalAmountCurrencyCode == $invoiceCurrencyCode || $taxTotalAmountCurrencyCode == "") {
+                    $taxTotalAmount = $this->getObjectHelper()->tryCallAndReturn($taxTotalAmountElementItem, "value") ?? 0;
+                    break;
+                }
+            }
+        } else {
+            $taxTotalAmount = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getTaxTotalAmount.value", 0);
+        }
+
+        $duePayableAmount = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getDuePayableAmount.value", 0);
+        $lineTotalAmount = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getLineTotalAmount.value", 0);
+        $chargeTotalAmount = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getChargeTotalAmount.value", 0);
+        $allowanceTotalAmount = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getAllowanceTotalAmount.value", 0);
+        $roundingAmount = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getRoundingAmount.value", 0);
+        $totalPrepaidAmount = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementHeaderMonetarySummation.getTotalPrepaidAmount.value", 0);
+
+        return $this;
+    }
+
+    /**
+     * Retrieve document notes
+     *
+     * @param  array|null $notes Returns an array with all document notes. Each array element
+     *                           contains an assiociative array containing the following keys: _contentcode_, _subjectcode_ and
+     *                           _content_
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentNotes(?array &$notes): ZugferdDocumentReader
+    {
+        $notes = $this->getInvoiceValueByPath("getExchangedDocument.getIncludedNote", []);
+        $notes = $this->convertToArray(
+            $notes,
+            [
+                "contentcode" => ["getContentCode.value", ""],
+                "subjectcode" => ["getSubjectCode.value", ""],
+                "content" => ["getContent.value", ""],
+            ]
+        );
+
+        return $this;
+    }
+
+    /**
+     * Get the identifier assigned by the buyer and used for internal routing.
+     *
+     * __Note__: The reference is specified by the buyer (e.g. contact details, department, office ID, project code),
+     * but stated by the seller on the invoice.
+     *
+     * @param  string|null $buyerreference
+     * An identifier assigned by the buyer and used for internal routing
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentBuyerReference(?string &$buyerreference): ZugferdDocumentReader
+    {
+        $buyerreference = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerReference.value", "");
+        return $this;
+    }
+
+    /**
+     * Get detailed information about the seller (=service provider)
+     *
+     * @param  string|null $name
+     * The full formal name under which the seller is registered in the
+     * National Register of Legal Entities, Taxable Person or otherwise acting as person(s)
+     * @param  array|null  $id
+     * An identifier of the seller. In many systems, seller identification
+     * is key information. Multiple seller IDs can be assigned or specified. They can be differentiated
+     * by using different identification schemes. If no scheme is given, it should be known to the buyer
+     * and seller, e.g. a previously exchanged, buyer-assigned identifier of the seller
+     * @param  string|null $description
+     * Further legal information that is relevant for the seller
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSeller(?string &$name, ?array &$id, ?string &$description): ZugferdDocumentReader
+    {
+        $name = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getName.value", "");
+        $id = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getID", []);
+        $description = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getDescription.value", "");
+
+        $id = $this->convertToArray($id, ["id" => "value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get global identifier of the seller.
+     *
+     * __Notes__
+     *
+     * - The Seller's ID identification scheme is a unique identifier
+     *   assigned to a seller by a global registration organization
+     *
+     * @param  array|null $globalID
+     * Array of the sellers global ids indexed by the identification scheme. The identification scheme results
+     * from the list published by the ISO/IEC 6523 Maintenance Agency. In particular, the following scheme
+     * codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSellerGlobalId(?array &$globalID): ZugferdDocumentReader
+    {
+        $globalID = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getGlobalID", []);
+        $globalID = $this->convertToAssociativeArray($globalID, "getSchemeID", "value");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the seller's tax information.
+     *
+     * __Notes__
+     *  - The local identification (defined by the seller's address) of the seller for tax purposes or a reference that
+     *    enables the seller to indicate his reporting status for tax purposes. This information may have an impact on how the buyer
+     *    pays the bill (such as regarding social security contributions). So e.g. in some countries, if the seller is not reported
+     *    for tax, the buyer will withhold the tax amount and pay it on behalf of the seller
+     *
+     * @param  array|null $taxreg
+     * Array of tax numbers indexed by __FC__ for _Tax number_ and __VA__ for _Sales tax identification number_
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSellerTaxRegistration(?array &$taxreg): ZugferdDocumentReader
+    {
+        $taxreg = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getSpecifiedTaxRegistration", []);
+        $taxreg = $this->convertToAssociativeArray($taxreg, "getID.getSchemeID", "getID.value");
+
+        return $this;
+    }
+
+    /**
+     * Get the address of seller trade party
+     *
+     * @param  string|null $lineone
+     * The main line in the sellers address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the seller's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the seller's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the seller's address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  array|null  $subdivision
+     * The sellers state
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSellerAddress(?string &$lineone, ?string &$linetwo, ?string &$linethree, ?string &$postcode, ?string &$city, ?string &$country, ?array &$subdivision): ZugferdDocumentReader
+    {
+        $lineone = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getPostalTradeAddress.getLineOne.value", "");
+        $linetwo = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getPostalTradeAddress.getLineTwo.value", "");
+        $linethree = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getPostalTradeAddress.getLineThree.value", "");
+        $postcode = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getPostalTradeAddress.getPostcodeCode.value", "");
+        $city = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getPostalTradeAddress.getCityName.value", "");
+        $country = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getPostalTradeAddress.getCountryID.value", "");
+        $subdivision = $this->convertToArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getPostalTradeAddress.getCountrySubDivisionName", []), ["value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get the legal organisation of seller trade party
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * seller as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer and seller
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal
+     * registration of the seller. If the identification scheme is used, it must be selected from
+     * ISO/IEC 6523 list
+     * @param  string|null $legalorgname
+     * A name by which the seller is known, if different from the seller's name
+     * (also known as the company name)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSellerLegalOrganisation(?string &$legalorgid, ?string &$legalorgtype, ?string &$legalorgname): ZugferdDocumentReader
+    {
+        $legalorgid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getSpecifiedLegalOrganization.getID.value", "");
+        $legalorgtype = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getSpecifiedLegalOrganization.getID.getSchemeID", "");
+        $legalorgname = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getSpecifiedLegalOrganization.getTradingBusinessName.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first seller contact of the document.
+     * Returns true if a first seller contact is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentSellerContact
+     *
+     * @return boolean
+     */
+    public function firstDocumentSellerContact(): bool
+    {
+        $this->documentSellerContactPointer = 0;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentSellerContactPointer]);
+    }
+
+    /**
+     * Seek to the next available first seller contact of the document.
+     * Returns true if another seller contact is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentSellerContact
+     *
+     * @return boolean
+     */
+    public function nextDocumentSellerContact(): bool
+    {
+        $this->documentSellerContactPointer++;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentSellerContactPointer]);
+    }
+
+    /**
+     * Get detailed information on the seller's contact person
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity,
+     * such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the seller's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the seller's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the seller's email address
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSellerContact(?string &$contactpersonname, ?string &$contactdepartmentname, ?string &$contactphoneno, ?string &$contactfaxno, ?string &$contactemailadd): ZugferdDocumentReader
+    {
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTradeParty.getDefinedTradeContact", []));
+        $contact = $contacts[$this->documentSellerContactPointer];
+        $contactpersonname = $this->getInvoiceValueByPathFrom($contact, "getPersonName.value", "");
+        $contactdepartmentname = $this->getInvoiceValueByPathFrom($contact, "getDepartmentName.value", "");
+        $contactphoneno = $this->getInvoiceValueByPathFrom($contact, "getTelephoneUniversalCommunication.getCompleteNumber.value", "");
+        $contactfaxno = $this->getInvoiceValueByPathFrom($contact, "getFaxUniversalCommunication.getCompleteNumber.value", "");
+        $contactemailadd = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information about the buyer (service recipient)
+     *
+     * @param  string|null $name
+     * The full name of the buyer
+     * @param  array|null  $id
+     * An identifier of the buyer. In many systems, buyer identification is key information. Multiple buyer IDs can be
+     * assigned or specified. They can be differentiated by using different identification schemes. If no scheme is given,
+     * it should be known to the buyer and buyer, e.g. a previously exchanged, seller-assigned identifier of the buyer
+     * @param  string|null $description
+     * Further legal information about the buyer
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentBuyer(?string &$name, ?array &$id, ?string &$description): ZugferdDocumentReader
+    {
+        $name = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getName.value", "");
+        $id = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getID", []);
+        $description = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getDescription.value", "");
+
+        $id = $this->convertToArray($id, ["id" => "value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get global identifier of the buyer.
+     *
+     * __Notes__
+     *  - The buyers's ID identification scheme is a unique identifier
+     *    assigned to a buyer by a global registration organization
+     *
+     * @param  array|null $globalID
+     * Array of the buyers global ids indexed by the identification scheme. The identification scheme results
+     * from the list published by the ISO/IEC 6523 Maintenance Agency. In particular, the following scheme
+     * codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentBuyerGlobalId(?array &$globalID): ZugferdDocumentReader
+    {
+        $globalID = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getGlobalID", []);
+        $globalID = $this->convertToAssociativeArray($globalID, "getSchemeID", "value");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the buyer's tax information.
+     *
+     * __Notes__
+     *  - The local identification (defined by the buyer's address) of the buyer for tax purposes or a reference that
+     *    enables the buyer to indicate his reporting status for tax purposes.
+     *
+     * @param  array|null $taxreg
+     * Array of tax numbers indexed by __FC__ for _Tax number_ and __VA__ for _Sales tax identification number_
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentBuyerTaxRegistration(?array &$taxreg): ZugferdDocumentReader
+    {
+        $taxreg = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getSpecifiedTaxRegistration", []);
+        $taxreg = $this->convertToAssociativeArray($taxreg, "getID.getSchemeID", "getID.value");
+
+        return $this;
+    }
+
+    /**
+     * Get the address of buyer trade party
+     *
+     * @param  string|null $lineone
+     * The main line in the buyers address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the buyers address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the buyers address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the buyers address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  array|null  $subdivision
+     * The buyers state
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentBuyerAddress(?string &$lineone, ?string &$linetwo, ?string &$linethree, ?string &$postcode, ?string &$city, ?string &$country, ?array &$subdivision): ZugferdDocumentReader
+    {
+        $lineone = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getPostalTradeAddress.getLineOne.value", "");
+        $linetwo = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getPostalTradeAddress.getLineTwo.value", "");
+        $linethree = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getPostalTradeAddress.getLineThree.value", "");
+        $postcode = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getPostalTradeAddress.getPostcodeCode.value", "");
+        $city = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getPostalTradeAddress.getCityName.value", "");
+        $country = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getPostalTradeAddress.getCountryID.value", "");
+        $subdivision = $this->convertToArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getPostalTradeAddress.getCountrySubDivisionName", []), ["value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get the legal organisation of buyer trade party
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * buyer as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer and buyer
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal
+     * registration of the buyer. If the identification scheme is used, it must be selected from
+     * ISO/IEC 6523 list
+     * @param  string|null $legalorgname
+     * A name by which the buyer is known, if different from the buyers name
+     * (also known as the company name)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentBuyerLegalOrganisation(?string &$legalorgid, ?string &$legalorgtype, ?string &$legalorgname): ZugferdDocumentReader
+    {
+        $legalorgid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getSpecifiedLegalOrganization.getID.value", "");
+        $legalorgtype = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getSpecifiedLegalOrganization.getID.getSchemeID", "");
+        $legalorgname = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getSpecifiedLegalOrganization.getTradingBusinessName.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first buyer contact of the document.
+     * Returns true if a first buyer contact is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentBuyerContact
+     *
+     * @return boolean
+     */
+    public function firstDocumentBuyerContact(): bool
+    {
+        $this->documentBuyerContactPointer = 0;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentBuyerContactPointer]);
+    }
+
+    /**
+     * Seek to the next available first Buyer contact of the document.
+     * Returns true if another Buyer contact is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentBuyerContact
+     *
+     * @return boolean
+     */
+    public function nextDocumentBuyerContact(): bool
+    {
+        $this->documentBuyerContactPointer++;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentBuyerContactPointer]);
+    }
+
+    /**
+     * Get contact information of buyer trade party
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the buyer's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the buyer's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the buyer's email address
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentBuyerContact(?string &$contactpersonname, ?string &$contactdepartmentname, ?string &$contactphoneno, ?string &$contactfaxno, ?string &$contactemailadd): ZugferdDocumentReader
+    {
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerTradeParty.getDefinedTradeContact", []));
+        $contact = $contacts[$this->documentBuyerContactPointer];
+        $contactpersonname = $this->getInvoiceValueByPathFrom($contact, "getPersonName.value", "");
+        $contactdepartmentname = $this->getInvoiceValueByPathFrom($contact, "getDepartmentName.value", "");
+        $contactphoneno = $this->getInvoiceValueByPathFrom($contact, "getTelephoneUniversalCommunication.getCompleteNumber.value", "");
+        $contactfaxno = $this->getInvoiceValueByPathFrom($contact, "getFaxUniversalCommunication.getCompleteNumber.value", "");
+        $contactemailadd = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information about the seller's tax agent
+     *
+     * @param  string|null $name
+     * The full name of the seller's tax agent
+     * @param  array|null  $id
+     * An identifier of the sellers tax agent.
+     * @param  string|null $description
+     * Further legal information that is relevant for the sellers tax agent
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSellerTaxRepresentative(?string &$name, ?array &$id, ?string &$description): ZugferdDocumentReader
+    {
+        $name = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getName.value", "");
+        $id = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getID", []);
+        $description = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getDescription.value", "");
+
+        $id = $this->convertToArray($id, ["id" => "value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get document seller tax agent global ids
+     *
+     * @param  array|null $globalID
+     * Returns an array of the seller's tax agent identifier. Identification scheme is an identifier uniquely
+     * assigned to a seller's tax agent by a global registration organization. The array key is the scheme id. The scheme results from the
+     * list published by the ISO/IEC 6523 Maintenance Agency. In particular, the following scheme codes are used:
+     * 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSellerTaxRepresentativeGlobalId(?array &$globalID): ZugferdDocumentReader
+    {
+        $globalID = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getGlobalID", []);
+        $globalID = $this->convertToAssociativeArray($globalID, "getSchemeID", "value");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the seller's tax agent tax information.
+     *
+     * __Notes__
+     *  - The local identification (defined by the sellers tax agent address) of the tax agent for tax purposes
+     *    or a reference that enables the sellers tax agent to indicate his reporting status for tax purposes.
+     *
+     * @param  array|null $taxreg
+     * Array of tax numbers indexed by __FC__ for _Tax number_ and __VA__ for _Sales tax identification number_
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSellerTaxRepresentativeTaxRegistration(?array &$taxreg): ZugferdDocumentReader
+    {
+        $taxreg = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getSpecifiedTaxRegistration", []);
+        $taxreg = $this->convertToAssociativeArray($taxreg, "getID.getSchemeID", "getID.value");
+
+        return $this;
+    }
+
+    /**
+     * Get the address of sellers tax agent
+     *
+     * @param  string|null $lineone
+     * The main line in the sellers tax agent address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the sellers tax agent address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the sellers tax agent address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the sellers tax agent address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  array|null  $subdivision
+     * The sellers tax agent state
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSellerTaxRepresentativeAddress(?string &$lineone, ?string &$linetwo, ?string &$linethree, ?string &$postcode, ?string &$city, ?string &$country, ?array &$subdivision): ZugferdDocumentReader
+    {
+        $lineone = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getPostalTradeAddress.getLineOne.value", "");
+        $linetwo = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getPostalTradeAddress.getLineTwo.value", "");
+        $linethree = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getPostalTradeAddress.getLineThree.value", "");
+        $postcode = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getPostalTradeAddress.getPostcodeCode.value", "");
+        $city = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getPostalTradeAddress.getCityName.value", "");
+        $country = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getPostalTradeAddress.getCountryID.value", "");
+        $subdivision = $this->convertToArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getPostalTradeAddress.getCountrySubDivisionName", []), ["value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get the legal organisation of sellers tax agent
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the seller tax agent as
+     * a legal entity or legal person.
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal registration of the sellers tax
+     * agent. If the identification scheme is used, it must be selected from  ISO/IEC 6523 list
+     * @param  string|null $legalorgname
+     * A name by which the sellers tax agent is known, if different from the  sellers tax agent
+     * name (also known as the company name)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSellerTaxRepresentativeLegalOrganisation(?string &$legalorgid, ?string &$legalorgtype, ?string &$legalorgname): ZugferdDocumentReader
+    {
+        $legalorgid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getSpecifiedLegalOrganization.getID.value", "");
+        $legalorgtype = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getSpecifiedLegalOrganization.getID.getSchemeID", "");
+        $legalorgname = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getSpecifiedLegalOrganization.getTradingBusinessName.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first Seller Tax Representative contact of the document.
+     * Returns true if a first Seller Tax Representative contact is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     *
+     * @return boolean
+     */
+    public function firstDocumentSellerTaxRepresentativeContact(): bool
+    {
+        $this->documentSellerTaxRepresentativeContactPointer = 0;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentSellerTaxRepresentativeContactPointer]);
+    }
+
+    /**
+     * Seek to the next available first seller contact of the document.
+     * Returns true if another seller contact is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentSellerContact
+     *
+     * @return boolean
+     */
+    public function nextDocumentSellerTaxRepresentativeContact(): bool
+    {
+        $this->documentSellerTaxRepresentativeContactPointer++;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentSellerTaxRepresentativeContactPointer]);
+    }
+
+    /**
+     * Get contact information of sellers tax agent
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the seller's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the seller's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the seller's email address
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSellerTaxRepresentativeContact(?string &$contactpersonname, ?string &$contactdepartmentname, ?string &$contactphoneno, ?string &$contactfaxno, ?string &$contactemailadd): ZugferdDocumentReader
+    {
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerTaxRepresentativeTradeParty.getDefinedTradeContact", []));
+        $contact = $contacts[$this->documentSellerTaxRepresentativeContactPointer];
+        $contactpersonname = $this->getInvoiceValueByPathFrom($contact, "getPersonName.value", "");
+        $contactdepartmentname = $this->getInvoiceValueByPathFrom($contact, "getDepartmentName.value", "");
+        $contactphoneno = $this->getInvoiceValueByPathFrom($contact, "getTelephoneUniversalCommunication.getCompleteNumber.value", "");
+        $contactfaxno = $this->getInvoiceValueByPathFrom($contact, "getFaxUniversalCommunication.getCompleteNumber.value", "");
+        $contactemailadd = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the product end user (general information)
+     *
+     * @param  string|null $name
+     * The full formal name under which the product end user is registered in the
+     * National Register of Legal Entities, Taxable Person or otherwise acting as person(s)
+     * @param  array|null  $id
+     * An identifier of the product end user. In many systems, product end user identification
+     * is key information. Multiple product end user IDs can be assigned or specified. They can be differentiated
+     * by using different identification schemes. If no scheme is given, it should be known to all trade
+     * parties, e.g. a previously exchanged
+     * @param  string|null $description
+     * Further legal information that is relevant for the product end user
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentProductEndUser(?string &$name, ?array &$id, ?string &$description): ZugferdDocumentReader
+    {
+        $name = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getName.value", "");
+        $id = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getID", []);
+        $description = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getDescription.value", "");
+
+        $id = $this->convertToArray($id, ["id" => "value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get global identifier of the product end user.
+     *
+     * __Notes__
+     *  - The product end users ID identification scheme is a unique identifier
+     *    assigned to a product end user by a global registration organization
+     *
+     * @param  array|null $globalID
+     * Array of the product end users global ids indexed by the identification scheme. The identification scheme results
+     * from the list published by the ISO/IEC 6523 Maintenance Agency. In particular, the following scheme
+     * codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentProductEndUserGlobalId(?array &$globalID): ZugferdDocumentReader
+    {
+        $globalID = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getGlobalID", []);
+        $globalID = $this->convertToAssociativeArray($globalID, "getSchemeID", "value");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the tax number of the product end user
+     *
+     * @param  array|null $taxreg
+     * Array of tax numbers indexed by __FC__ for _Tax number_ and __VA__ for _Sales tax identification number_
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentProductEndUserTaxRegistration(?array &$taxreg): ZugferdDocumentReader
+    {
+        $taxreg = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getSpecifiedTaxRegistration", []);
+        $taxreg = $this->convertToAssociativeArray($taxreg, "getID.getSchemeID", "getID.value");
+
+        return $this;
+    }
+
+    /**
+     * Get the address of product end user
+     *
+     * @param  string|null $lineone
+     * The main line in the product end users address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the product end users address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the product end users address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the product end users address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  array|null  $subdivision
+     * The product end users state
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentProductEndUserAddress(?string &$lineone, ?string &$linetwo, ?string &$linethree, ?string &$postcode, ?string &$city, ?string &$country, ?array &$subdivision): ZugferdDocumentReader
+    {
+        $lineone = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getPostalTradeAddress.getLineOne.value", "");
+        $linetwo = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getPostalTradeAddress.getLineTwo.value", "");
+        $linethree = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getPostalTradeAddress.getLineThree.value", "");
+        $postcode = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getPostalTradeAddress.getPostcodeCode.value", "");
+        $city = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getPostalTradeAddress.getCityName.value", "");
+        $country = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getPostalTradeAddress.getCountryID.value", "");
+        $subdivision = $this->convertToArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getPostalTradeAddress.getCountrySubDivisionName", []), ["value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get the legal organisation of product end user
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * product end user as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to all trade parties
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal
+     * registration of the product end user. If the identification scheme is used, it must be selected from
+     * ISO/IEC 6523 list
+     * @param  string|null $legalorgname
+     * A name by which the product end user is known, if different from the product
+     * end users name (also known as the company name)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentProductEndUserLegalOrganisation(?string &$legalorgid, ?string &$legalorgtype, ?string &$legalorgname): ZugferdDocumentReader
+    {
+        $legalorgid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getSpecifiedLegalOrganization.getID.value", "");
+        $legalorgtype = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getSpecifiedLegalOrganization.getID.getSchemeID", "");
+        $legalorgname = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getSpecifiedLegalOrganization.getTradingBusinessName.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first product end-user contact of the document.
+     * Returns true if a first product end-user contact is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentProductEndUserContact
+     *
+     * @return boolean
+     */
+    public function firstDocumentProductEndUserContactContact(): bool
+    {
+        $this->documentProductEndUserContactPointer = 0;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentProductEndUserContactPointer]);
+    }
+
+    /**
+     * Seek to the next available first product end-user contact of the document.
+     * Returns true if another product end-user contact is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentProductEndUserContact
+     *
+     * @return boolean
+     */
+    public function nextDocumentProductEndUserContactContact(): bool
+    {
+        $this->documentProductEndUserContactPointer++;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentProductEndUserContactPointer]);
+    }
+
+    /**
+     * Get detailed information on the product end user's contact person
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the product end user's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the product end user's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the product end user's email address
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentProductEndUserContact(?string &$contactpersonname, ?string &$contactdepartmentname, ?string &$contactphoneno, ?string &$contactfaxno, ?string &$contactemailadd): ZugferdDocumentReader
+    {
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getProductEndUserTradeParty.getDefinedTradeContact", []));
+        $contact = $contacts[$this->documentProductEndUserContactPointer];
+        $contactpersonname = $this->getInvoiceValueByPathFrom($contact, "getPersonName.value", "");
+        $contactdepartmentname = $this->getInvoiceValueByPathFrom($contact, "getDepartmentName.value", "");
+        $contactphoneno = $this->getInvoiceValueByPathFrom($contact, "getTelephoneUniversalCommunication.getCompleteNumber.value", "");
+        $contactfaxno = $this->getInvoiceValueByPathFrom($contact, "getFaxUniversalCommunication.getCompleteNumber.value", "");
+        $contactemailadd = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the different ship-to party
+     *
+     * @param  string|null $name
+     * The name of the party to whom the goods are being delivered or for whom the services are being
+     * performed. Must be used if the recipient of the goods or services is not the same as the buyer.
+     * @param  array|null  $id
+     * An identifier for the place where the goods are delivered or where the services are provided.
+     * Multiple IDs can be assigned or specified. They can be differentiated by using different
+     * identification schemes. If no scheme is given, it should be known to the buyer and seller, e.g.
+     * a previously exchanged identifier assigned by the buyer or seller.
+     * @param  string|null $description
+     * Further legal information that is relevant for the party
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentShipTo(?string &$name, ?array &$id, ?string &$description): ZugferdDocumentReader
+    {
+        $name = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getName.value", "");
+        $id = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getID", []);
+        $description = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getDescription.value", "");
+
+        $id = $this->convertToArray($id, ["id" => "value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get global identifier for the delivery location
+     *
+     * @param  array|null $globalID
+     * Array of the delivery location's global ids indexed by the identification scheme. The identification scheme results
+     * from the list published by the ISO/IEC 6523 Maintenance Agency. In particular, the following scheme
+     * codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentShipToGlobalId(?array &$globalID): ZugferdDocumentReader
+    {
+        $globalID = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getGlobalID", []);
+        $globalID = $this->convertToAssociativeArray($globalID, "getSchemeID", "value");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on tax details of the goods recipient
+     *
+     * @param  array|null $taxreg
+     * Array of tax numbers indexed by __FC__ for _Tax number_ and __VA__ for _Sales tax identification number_
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentShipToTaxRegistration(?array &$taxreg): ZugferdDocumentReader
+    {
+        $taxreg = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getSpecifiedTaxRegistration", []);
+        $taxreg = $this->convertToAssociativeArray($taxreg, "getID.getSchemeID", "getID.value");
+
+        return $this;
+    }
+
+    /**
+     * Get the address to which the invoiced goods are delivered or to which the invoiced services are provided.
+     *
+     * __Notes__
+     *  - In the event of a collection, the delivery address corresponds to the collection address. In order
+     *    to meet the legal requirements, a sufficient number of components of the address must be entered.
+     *
+     * @param  string|null $lineone
+     * The main line in the party's address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the party's address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  array|null  $subdivision
+     * The party's state
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentShipToAddress(?string &$lineone, ?string &$linetwo, ?string &$linethree, ?string &$postcode, ?string &$city, ?string &$country, ?array &$subdivision): ZugferdDocumentReader
+    {
+        $lineone = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getPostalTradeAddress.getLineOne.value", "");
+        $linetwo = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getPostalTradeAddress.getLineTwo.value", "");
+        $linethree = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getPostalTradeAddress.getLineThree.value", "");
+        $postcode = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getPostalTradeAddress.getPostcodeCode.value", "");
+        $city = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getPostalTradeAddress.getCityName.value", "");
+        $country = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getPostalTradeAddress.getCountryID.value", "");
+        $subdivision = $this->convertToArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getPostalTradeAddress.getCountrySubDivisionName", []), ["value"]);
+
+        return $this;
+    }
+
+    /**
+     * Legal organisation of Ship-To trade party
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the party as a legal entity or legal
+     * person. If no identification scheme ($legalorgtype) is provided, it should be known to the buyer or
+     * seller party
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal
+     * registration of the party. In particular, the following scheme codes are used: 0021 : SWIFT, 0088 : EAN,
+     * 0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname
+     * A name by which the party is known, if different from the party's name (also known as the company name)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentShipToLegalOrganisation(?string &$legalorgid, ?string &$legalorgtype, ?string &$legalorgname): ZugferdDocumentReader
+    {
+        $legalorgid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getSpecifiedLegalOrganization.getID.value", "");
+        $legalorgtype = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getSpecifiedLegalOrganization.getID.getSchemeID", "");
+        $legalorgname = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getSpecifiedLegalOrganization.getTradingBusinessName.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first Ship-To contact of the document.
+     * Returns true if a first ship-to contact is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentShipToContact
+     *
+     * @return boolean
+     */
+    public function firstDocumentShipToContact(): bool
+    {
+        $this->documentShipToContactPointer = 0;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentShipToContactPointer]);
+    }
+
+    /**
+     * Seek to the next available first ship-to contact of the document.
+     * Returns true if another ship-to contact is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentShipToContact
+     *
+     * @return boolean
+     */
+    public function nextDocumentShipToContact(): bool
+    {
+        $this->documentShipToContactPointer++;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentShipToContactPointer]);
+    }
+
+    /**
+     * Get detailed information on the contact person of the goods recipient
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentShipToContact(?string &$contactpersonname, ?string &$contactdepartmentname, ?string &$contactphoneno, ?string &$contactfaxno, ?string &$contactemailadd): ZugferdDocumentReader
+    {
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipToTradeParty.getDefinedTradeContact", []));
+        $contact = $contacts[$this->documentShipToContactPointer];
+        $contactpersonname = $this->getInvoiceValueByPathFrom($contact, "getPersonName", "");
+        $contactdepartmentname = $this->getInvoiceValueByPathFrom($contact, "getDepartmentName", "");
+        $contactphoneno = $this->getInvoiceValueByPathFrom($contact, "getTelephoneUniversalCommunication.getCompleteNumber", "");
+        $contactfaxno = $this->getInvoiceValueByPathFrom($contact, "getFaxUniversalCommunication.getCompleteNumber", "");
+        $contactemailadd = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the different end recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $name
+     * Name or company name of the different end recipient
+     * @param  array|null  $id
+     * Identification of the different end recipient. Multiple IDs can be assigned or specified. They can be
+     * differentiated by using different identification schemes.
+     * @param  string|null $description
+     * Further legal information that is relevant for the different end recipient
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentUltimateShipTo(?string &$name, ?array &$id, ?string &$description): ZugferdDocumentReader
+    {
+        $name = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getName.value", "");
+        $id = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getID.value", []);
+        $description = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getDescription.value", "");
+
+        $id = $this->convertToArray($id, ["id" => "value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get global identifiers of the different end recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  array|null $globalID
+     * Array of the party's global ids indexed by the identification scheme. The identification scheme results
+     * from the list published by the ISO/IEC 6523 Maintenance Agency. In particular, the following scheme
+     * codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentUltimateShipToGlobalId(?array &$globalID): ZugferdDocumentReader
+    {
+        $globalID = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getGlobalID", []);
+        $globalID = $this->convertToAssociativeArray($globalID, "getSchemeID", "value");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on tax details of the different end recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  array|null $taxreg
+     * Array of tax numbers indexed by __FC__ for _Tax number_ and __VA__ for _Sales tax identification number_
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentUltimateShipToTaxRegistration(?array &$taxreg): ZugferdDocumentReader
+    {
+        $taxreg = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getSpecifiedTaxRegistration", []);
+        $taxreg = $this->convertToAssociativeArray($taxreg, "getID.getSchemeID", "getID.value");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the address of the different end recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $lineone
+     * The main line in the party's address. This is usually the street name and house number or
+     * the post office box. For major customer addresses, this field must be filled with "-".
+     * @param  string|null $linetwo
+     * Line 2 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the party's address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  array|null  $subdivision
+     * The party's state
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentUltimateShipToAddress(?string &$lineone, ?string &$linetwo, ?string &$linethree, ?string &$postcode, ?string &$city, ?string &$country, ?array &$subdivision): ZugferdDocumentReader
+    {
+        $lineone = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getPostalTradeAddress.getLineOne.value", "");
+        $linetwo = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getPostalTradeAddress.getLineTwo.value", "");
+        $linethree = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getPostalTradeAddress.getLineThree.value", "");
+        $postcode = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getPostalTradeAddress.getPostcodeCode.value", "");
+        $city = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getPostalTradeAddress.getCityName.value", "");
+        $country = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getPostalTradeAddress.getCountryID.value", "");
+        $subdivision = $this->convertToArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getPostalTradeAddress.getCountrySubDivisionName", []), ["value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information about the Legal organisation of the different end recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * party as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer or seller party
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal registration of the party. In particular,
+     * the following scheme codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname
+     * A name by which the party is known, if different from the party's name (also known as the company name)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentUltimateShipToLegalOrganisation(?string &$legalorgid, ?string &$legalorgtype, ?string &$legalorgname): ZugferdDocumentReader
+    {
+        $legalorgid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getSpecifiedLegalOrganization.getID.value", "");
+        $legalorgtype = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getSpecifiedLegalOrganization.getID.getSchemeID", "");
+        $legalorgname = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getSpecifiedLegalOrganization.getTradingBusinessName.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first contact person of the different end recipient party
+     * Returns true if a first contact person of the different end recipient party
+     * is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentUltimateShipToContact
+     *
+     * @return boolean
+     */
+    public function firstDocumentUltimateShipToContact(): bool
+    {
+        $this->documentUltimateShipToContactPointer = 0;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentUltimateShipToContactPointer]);
+    }
+
+    /**
+     * Seek to the next available contact person of the different end recipient party.
+     * Returns true if another contact person of the different end recipient party
+     * is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentUltimateShipToContact
+     *
+     * @return boolean
+     */
+    public function nextDocumentUltimateShipToContact(): bool
+    {
+        $this->documentUltimateShipToContactPointer++;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentUltimateShipToContactPointer]);
+    }
+
+    /**
+     * Get detailed information on the contact person of the different end recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentUltimateShipToContact(?string &$contactpersonname, ?string &$contactdepartmentname, ?string &$contactphoneno, ?string &$contactfaxno, ?string &$contactemailadd): ZugferdDocumentReader
+    {
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getUltimateShipToTradeParty.getDefinedTradeContact", []));
+        $contact = $contacts[$this->documentUltimateShipToContactPointer];
+        $contactpersonname = $this->getInvoiceValueByPathFrom($contact, "getPersonName.value", "");
+        $contactdepartmentname = $this->getInvoiceValueByPathFrom($contact, "getDepartmentName.value", "");
+        $contactphoneno = $this->getInvoiceValueByPathFrom($contact, "getTelephoneUniversalCommunication.getCompleteNumber.value", "");
+        $contactfaxno = $this->getInvoiceValueByPathFrom($contact, "getFaxUniversalCommunication.getCompleteNumber.value", "");
+        $contactemailadd = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information of the deviating consignor party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $name
+     * The name of the party
+     * @param  array|null  $id
+     * An identifier for the party. Multiple IDs can be assigned or specified. They can be differentiated by using
+     * different identification schemes. If no scheme is given, it should  be known to the buyer and seller, e.g.
+     * a previously exchanged identifier assigned by the buyer or seller.
+     * @param  string|null $description
+     * Further legal information that is relevant for the party
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentShipFrom(?string &$name, ?array &$id, ?string &$description): ZugferdDocumentReader
+    {
+        $name = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getName.value", "");
+        $id = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getID", []);
+        $description = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getDescription.value", "");
+
+        $id = $this->convertToArray($id, ["id" => "value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get global identifier of the deviating consignor party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  array|null $globalID
+     * Array of the party's global ids indexed by the identification scheme. The identification scheme results
+     * from the list published by the ISO/IEC 6523 Maintenance Agency. In particular, the following scheme
+     * codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentShipFromGlobalId(?array &$globalID): ZugferdDocumentReader
+    {
+        $globalID = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getGlobalID", []);
+        $globalID = $this->convertToAssociativeArray($globalID, "getSchemeID", "value");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on tax details of the deviating consignor party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  array|null $taxreg
+     * Array of tax numbers indexed by __FC__ for _Tax number_ and __VA__ for _Sales tax identification number_
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentShipFromTaxRegistration(?array &$taxreg): ZugferdDocumentReader
+    {
+        $taxreg = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getSpecifiedTaxRegistration", []);
+        $taxreg = $this->convertToAssociativeArray($taxreg, "getID.getSchemeID", "getID.value");
+
+        return $this;
+    }
+
+    /**
+     * Get Detailed information on the address of the deviating consignor party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $lineone
+     * The main line in the party's address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the party's address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  array|null  $subdivision
+     * The party's state
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentShipFromAddress(?string &$lineone, ?string &$linetwo, ?string &$linethree, ?string &$postcode, ?string &$city, ?string &$country, ?array &$subdivision): ZugferdDocumentReader
+    {
+        $lineone = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getPostalTradeAddress.getLineOne.value", "");
+        $linetwo = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getPostalTradeAddress.getLineTwo.value", "");
+        $linethree = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getPostalTradeAddress.getLineThree.value", "");
+        $postcode = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getPostalTradeAddress.getPostcodeCode.value", "");
+        $city = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getPostalTradeAddress.getCityName.value", "");
+        $country = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getPostalTradeAddress.getCountryID.value.value", "");
+        $subdivision = $this->convertToArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getPostalTradeAddress.getCountrySubDivisionName", []), ["value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get information about the legal organisation of the deviating consignor party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * party as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer or seller party
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal registration of the party. In particular,
+     * the following scheme codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname
+     * A name by which the party is known, if different from the party's name (also known as the company name)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentShipFromLegalOrganisation(?string &$legalorgid, ?string &$legalorgtype, ?string &$legalorgname): ZugferdDocumentReader
+    {
+        $legalorgid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getSpecifiedLegalOrganization.getID.value", "");
+        $legalorgtype = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getSpecifiedLegalOrganization.getID.getSchemeID", "");
+        $legalorgname = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getSpecifiedLegalOrganization.getTradingBusinessName.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first contact information of the deviating consignor party of the document.
+     * Returns true if a first contact information of the deviating consignor party is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentShipFromContact
+     *
+     * @return boolean
+     */
+    public function firstDocumentShipFromContact(): bool
+    {
+        $this->documentShipFromContactPointer = 0;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentShipFromContactPointer]);
+    }
+
+    /**
+     * Seek to the next available first contact information of the deviating consignor party of the document.
+     * Returns true if another contact information of the deviating consignor party is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentShipFromContact
+     *
+     * @return boolean
+     */
+    public function nextDocumentShipFromContact(): bool
+    {
+        $this->documentShipFromContactPointer++;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentShipFromContactPointer]);
+    }
+
+    /**
+     * Get contact information of the deviating consignor party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentShipFromContact(?string &$contactpersonname, ?string &$contactdepartmentname, ?string &$contactphoneno, ?string &$contactfaxno, ?string &$contactemailadd): ZugferdDocumentReader
+    {
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getShipFromTradeParty.getDefinedTradeContact", []));
+        $contact = $contacts[$this->documentShipFromContactPointer];
+        $contactpersonname = $this->getInvoiceValueByPathFrom($contact, "getPersonName.value", "");
+        $contactdepartmentname = $this->getInvoiceValueByPathFrom($contact, "getDepartmentName.value", "");
+        $contactphoneno = $this->getInvoiceValueByPathFrom($contact, "getTelephoneUniversalCommunication.getCompleteNumber.value", "");
+        $contactfaxno = $this->getInvoiceValueByPathFrom($contact, "getFaxUniversalCommunication.getCompleteNumber.value", "");
+        $contactemailadd = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information of the invoicer party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $name
+     * The name of the party
+     * @param  array|null  $id
+     * An identifier for the party. Multiple IDs can be assigned or specified. They can be differentiated by using
+     * different identification schemes. If no scheme is given, it should  be known to the buyer and seller, e.g.
+     * a previously exchanged identifier assigned by the buyer or seller.
+     * @param  string|null $description
+     * Further legal information that is relevant for the party
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentInvoicer(?string &$name, ?array &$id, ?string &$description): ZugferdDocumentReader
+    {
+        $name = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getName.value", "");
+        $id = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getID", []);
+        $description = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getDescription.value", "");
+
+        $id = $this->convertToArray($id, ["id" => "value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get global identifier of the invoicer party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  array|null $globalID
+     * Array of the party's global ids indexed by the identification scheme. The identification scheme results
+     * from the list published by the ISO/IEC 6523 Maintenance Agency. In particular, the following scheme
+     * codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentInvoicerGlobalId(?array &$globalID): ZugferdDocumentReader
+    {
+        $globalID = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getGlobalID", []);
+        $globalID = $this->convertToAssociativeArray($globalID, "getSchemeID", "value");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on tax details of the invoicer party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  array|null $taxreg
+     * Array of tax numbers indexed by __FC__ for _Tax number_ and __VA__ for _Sales tax identification number_
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentInvoicerTaxRegistration(?array &$taxreg): ZugferdDocumentReader
+    {
+        $taxreg = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getSpecifiedTaxRegistration", []);
+        $taxreg = $this->convertToAssociativeArray($taxreg, "getID.getSchemeID", "getID.value");
+
+        return $this;
+    }
+
+    /**
+     * Get Detailed information on the address of the invoicer party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $lineone
+     * The main line in the party's address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the party's address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  array|null  $subdivision
+     * The party's state
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentInvoicerAddress(?string &$lineone, ?string &$linetwo, ?string &$linethree, ?string &$postcode, ?string &$city, ?string &$country, ?array &$subdivision): ZugferdDocumentReader
+    {
+        $lineone = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getPostalTradeAddress.getLineOne.value", "");
+        $linetwo = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getPostalTradeAddress.getLineTwo.value", "");
+        $linethree = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getPostalTradeAddress.getLineThree.value", "");
+        $postcode = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getPostalTradeAddress.getPostcodeCode.value", "");
+        $city = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getPostalTradeAddress.getCityName.value", "");
+        $country = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getPostalTradeAddress.getCountryID.value", "");
+        $subdivision = $this->convertToArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getPostalTradeAddress.getCountrySubDivisionName", []), ["value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get information about the legal organisation of the invoicer party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * party as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer or seller party
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal registration of the party. In particular,
+     * the following scheme codes are used: 0021 : SWIFT, 0088 : EAN,* 0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname
+     * A name by which the party is known, if different from the party's name (also known as the company name)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentInvoicerLegalOrganisation(?string &$legalorgid, ?string &$legalorgtype, ?string &$legalorgname): ZugferdDocumentReader
+    {
+        $legalorgid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getSpecifiedLegalOrganization.getID.value", "");
+        $legalorgtype = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getSpecifiedLegalOrganization.getID.getSchemeID", "");
+        $legalorgname = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getSpecifiedLegalOrganization.getTradingBusinessName.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first contact information of the invoicer party of the document.
+     * Returns true if a first contact information of the invoicer party is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentInvoicerContact
+     *
+     * @return boolean
+     */
+    public function firstDocumentInvoicerContact(): bool
+    {
+        $this->documentInvoicerContactPointer = 0;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentInvoicerContactPointer]);
+    }
+
+    /**
+     * Seek to the next available contact information of the invoicer party of the document.
+     * Returns true if another contact information of the invoicer party is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentInvoicerContact
+     *
+     * @return boolean
+     */
+    public function nextDocumentInvoicerContact(): bool
+    {
+        $this->documentInvoicerContactPointer++;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentInvoicerContactPointer]);
+    }
+
+    /**
+     * Get contact information of the invoicer party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentInvoicerContact(?string &$contactpersonname, ?string &$contactdepartmentname, ?string &$contactphoneno, ?string &$contactfaxno, ?string &$contactemailadd): ZugferdDocumentReader
+    {
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoicerTradeParty.getDefinedTradeContact", []));
+        $contact = $contacts[$this->documentInvoicerContactPointer];
+        $contactpersonname = $this->getInvoiceValueByPathFrom($contact, "getPersonName.value", "");
+        $contactdepartmentname = $this->getInvoiceValueByPathFrom($contact, "getDepartmentName.value", "");
+        $contactphoneno = $this->getInvoiceValueByPathFrom($contact, "getTelephoneUniversalCommunication.getCompleteNumber.value", "");
+        $contactfaxno = $this->getInvoiceValueByPathFrom($contact, "getFaxUniversalCommunication.getCompleteNumber.value", "");
+        $contactemailadd = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the different invoice recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $name
+     * The name of the party
+     * @param  array|null  $id
+     * An identifier for the party. Multiple IDs can be assigned or specified. They can be differentiated by using
+     * different identification schemes. If no scheme is given, it should  be known to the buyer and seller, e.g.
+     * a previously exchanged identifier assigned by the buyer or seller.
+     * @param  string|null $description
+     * Further legal information that is relevant for the party
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentInvoicee(?string &$name, ?array &$id, ?string &$description): ZugferdDocumentReader
+    {
+        $name = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getName.value", "");
+        $id = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getID", []);
+        $description = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getDescription.value", "");
+
+        $id = $this->convertToArray($id, ["id" => "value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get global identifier of the different invoice recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  array|null $globalID
+     * Array of the party's global ids indexed by the identification scheme. The identification scheme results
+     * from the list published by the ISO/IEC 6523 Maintenance Agency. In particular, the following scheme
+     * codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentInvoiceeGlobalId(?array &$globalID): ZugferdDocumentReader
+    {
+        $globalID = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getGlobalID", []);
+        $globalID = $this->convertToAssociativeArray($globalID, "getSchemeID", "value");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on tax details of the different invoice recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  array|null $taxreg
+     * Array of tax numbers indexed by __FC__ for _Tax number_ and __VA__ for _Sales tax identification number_
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentInvoiceeTaxRegistration(?array &$taxreg): ZugferdDocumentReader
+    {
+        $taxreg = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getSpecifiedTaxRegistration", []);
+        $taxreg = $this->convertToAssociativeArray($taxreg, "getID.getSchemeID", "getID.value");
+
+        return $this;
+    }
+
+    /**
+     * Get Detailed information on the address of the different invoice recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $lineone
+     * The main line in the party's address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the party's address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  array|null  $subdivision
+     * The party's state
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentInvoiceeAddress(?string &$lineone, ?string &$linetwo, ?string &$linethree, ?string &$postcode, ?string &$city, ?string &$country, ?array &$subdivision): ZugferdDocumentReader
+    {
+        $lineone = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getPostalTradeAddress.getLineOne.value", "");
+        $linetwo = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getPostalTradeAddress.getLineTwo.value", "");
+        $linethree = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getPostalTradeAddress.getLineThree.value", "");
+        $postcode = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getPostalTradeAddress.getPostcodeCode.value", "");
+        $city = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getPostalTradeAddress.getCityName.value", "");
+        $country = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getPostalTradeAddress.getCountryID.value", "");
+        $subdivision = $this->convertToArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getPostalTradeAddress.getCountrySubDivisionName", []), ["value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get information about the legal organisation of the different invoice recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * party as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer or seller party
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal registration of the party. In particular,
+     * the following scheme codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname
+     * A name by which the party is known, if different from the party's name (also known as the company name)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentInvoiceeLegalOrganisation(?string &$legalorgid, ?string &$legalorgtype, ?string &$legalorgname): ZugferdDocumentReader
+    {
+        $legalorgid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getSpecifiedLegalOrganization.getID.value", "");
+        $legalorgtype = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getSpecifiedLegalOrganization.getID.getSchemeID", "");
+        $legalorgname = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getSpecifiedLegalOrganization.getTradingBusinessName.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first contact information of the different invoice recipient party of the document.
+     * Returns true if a first contact information of the different invoice recipient party is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentInvoiceeContact
+     *
+     * @return boolean
+     */
+    public function firstDocumentInvoiceeContact(): bool
+    {
+        $this->documentInvoiceeContactPointer = 0;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentInvoiceeContactPointer]);
+    }
+
+    /**
+     * Seek to the next available first contact information of the different invoice recipient party of the document.
+     * Returns true if another contact information of the different invoice recipient party is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentInvoiceeContact
+     *
+     * @return boolean
+     */
+    public function nextDocumentInvoiceeContact(): bool
+    {
+        $this->documentInvoiceeContactPointer++;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentInvoiceeContactPointer]);
+    }
+
+    /**
+     * Get contact information of the different invoice recipient party
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentInvoiceeContact(?string &$contactpersonname, ?string &$contactdepartmentname, ?string &$contactphoneno, ?string &$contactfaxno, ?string &$contactemailadd): ZugferdDocumentReader
+    {
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getInvoiceeTradeParty.getDefinedTradeContact", []));
+        $contact = $contacts[$this->documentInvoiceeContactPointer];
+        $contactpersonname = $this->getInvoiceValueByPathFrom($contact, "getPersonName.value", "");
+        $contactdepartmentname = $this->getInvoiceValueByPathFrom($contact, "getDepartmentName.value", "");
+        $contactphoneno = $this->getInvoiceValueByPathFrom($contact, "getTelephoneUniversalCommunication.getCompleteNumber.value", "");
+        $contactfaxno = $this->getInvoiceValueByPathFrom($contact, "getFaxUniversalCommunication.getCompleteNumber.value", "");
+        $contactemailadd = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information about the payee, i.e. about the place that receives the payment.
+     * The role of the payee may also be performed by a party other than the seller, e.g. by a factoring service.
+     *
+     * @param  string|null $name
+     * The name of the party. Must be used if the payee is not the same as the seller. However, the name of the
+     * payee may match the name of the seller.
+     * @param  array|null  $id
+     * An identifier for the party. Multiple IDs can be assigned or specified. They can be differentiated by using
+     * different identification schemes. If no scheme is given, it should  be known to the buyer and seller, e.g.
+     * a previously exchanged identifier assigned by the buyer or seller.
+     * @param  string|null $description
+     * Further legal information that is relevant for the party
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPayee(?string &$name, ?array &$id, ?string &$description): ZugferdDocumentReader
+    {
+        $name = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getName.value", "");
+        $id = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getID", []);
+        $description = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getDescription.value", "");
+
+        $id = $this->convertToArray($id, ["id" => "value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get global identifier of the payee party
+     *
+     * @param  array|null $globalID
+     * Array of the party's global ids indexed by the identification scheme. The identification scheme results
+     * from the list published by the ISO/IEC 6523 Maintenance Agency. In particular, the following scheme
+     * codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPayeeGlobalId(?array &$globalID): ZugferdDocumentReader
+    {
+        $globalID = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getGlobalID", []);
+        $globalID = $this->convertToAssociativeArray($globalID, "getSchemeID", "value");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on tax details of the payee party
+     *
+     * @param  array|null $taxreg
+     * Array of tax numbers indexed by __FC__ for _Tax number_ and __VA__ for _Sales tax identification number_
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPayeeTaxRegistration(?array &$taxreg): ZugferdDocumentReader
+    {
+        $taxreg = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getSpecifiedTaxRegistration", []);
+        $taxreg = $this->convertToAssociativeArray($taxreg, "getID.getSchemeID", "getID.value");
+
+        return $this;
+    }
+
+    /**
+     * Get Detailed information on the address of the payee party
+     *
+     * @param  string|null $lineone
+     * The main line in the party's address. This is usually the street name and house number or
+     * the post office box
+     * @param  string|null $linetwo
+     * Line 2 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $linethree
+     * Line 3 of the party's address. This is an additional address line in an address that can be
+     * used to provide additional details in addition to the main line
+     * @param  string|null $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string|null $city
+     * Usual name of the city or municipality in which the party's address is located
+     * @param  string|null $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  array|null  $subdivision
+     * The party's state
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPayeeAddress(?string &$lineone, ?string &$linetwo, ?string &$linethree, ?string &$postcode, ?string &$city, ?string &$country, ?array &$subdivision): ZugferdDocumentReader
+    {
+        $lineone = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getPostalTradeAddress.getLineOne.value", "");
+        $linetwo = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getPostalTradeAddress.getLineTwo.value", "");
+        $linethree = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getPostalTradeAddress.getLineThree.value", "");
+        $postcode = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getPostalTradeAddress.getPostcodeCode.value", "");
+        $city = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getPostalTradeAddress.getCityName.value", "");
+        $country = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getPostalTradeAddress.getCountryID.value", "");
+        $subdivision = $this->convertToArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getPostalTradeAddress.getCountrySubDivisionName", []), ["value"]);
+
+        return $this;
+    }
+
+    /**
+     * Get information about the legal organisation of the payee party
+     *
+     * @param  string|null $legalorgid
+     * An identifier issued by an official registrar that identifies the
+     * party as a legal entity or legal person. If no identification scheme ($legalorgtype) is provided,
+     * it should be known to the buyer or seller party
+     * @param  string|null $legalorgtype
+     * The identifier for the identification scheme of the legal registration of the party. In particular,
+     * the following scheme codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @param  string|null $legalorgname
+     * A name by which the party is known, if different from the party's name (also known as the company name)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPayeeLegalOrganisation(?string &$legalorgid, ?string &$legalorgtype, ?string &$legalorgname): ZugferdDocumentReader
+    {
+        $legalorgid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getSpecifiedLegalOrganization.getID.value", "");
+        $legalorgtype = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getSpecifiedLegalOrganization.getID.getSchemeID", "");
+        $legalorgname = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getSpecifiedLegalOrganization.getTradingBusinessName.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first contact information of the payee party of the document.
+     * Returns true if a first contact information of the payee party is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentPayeeContact
+     *
+     * @return boolean
+     */
+    public function firstDocumentPayeeContact(): bool
+    {
+        $this->documentPayeeContactPointer = 0;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentPayeeContactPointer]);
+    }
+
+    /**
+     * Seek to the next available first contact information of the payee party of the document.
+     * Returns true if another contact information of the payee party is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentPayeeContact
+     *
+     * @return boolean
+     */
+    public function nextDocumentPayeeContact(): bool
+    {
+        $this->documentPayeeContactPointer++;
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getDefinedTradeContact", []));
+        return isset($contacts[$this->documentPayeeContactPointer]);
+    }
+
+    /**
+     * Get contact information of the payee party
+     *
+     * @param  string|null $contactpersonname
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $contactdepartmentname
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $contactphoneno
+     * Detailed information on the party's phone number
+     * @param  string|null $contactfaxno
+     * Detailed information on the party's fax number
+     * @param  string|null $contactemailadd
+     * Detailed information on the party's email address
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPayeeContact(?string &$contactpersonname, ?string &$contactdepartmentname, ?string &$contactphoneno, ?string &$contactfaxno, ?string &$contactemailadd): ZugferdDocumentReader
+    {
+        $contacts = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getPayeeTradeParty.getDefinedTradeContact", []));
+        $contact = $contacts[$this->documentPayeeContactPointer];
+        $contactpersonname = $this->getInvoiceValueByPathFrom($contact, "getPersonName.value", "");
+        $contactdepartmentname = $this->getInvoiceValueByPathFrom($contact, "getDepartmentName.value", "");
+        $contactphoneno = $this->getInvoiceValueByPathFrom($contact, "getTelephoneUniversalCommunication.getCompleteNumber.value", "");
+        $contactfaxno = $this->getInvoiceValueByPathFrom($contact, "getFaxUniversalCommunication.getCompleteNumber.value", "");
+        $contactemailadd = $this->getInvoiceValueByPathFrom($contact, "getEmailURIUniversalCommunication.getURIID.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the delivery conditions
+     *
+     * __Note__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null $code
+     * Delivery condition (code)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentDeliveryTerms(?string &$code): ZugferdDocumentReader
+    {
+        $code = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getApplicableTradeDeliveryTerms.setDeliveryTypeCode.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get details of the associated order confirmation
+     *
+     * @param  string|null   $issuerassignedid
+     * An identifier issued by the seller for a referenced sales order (Order confirmation number)
+     * @param  DateTime|null $issueddate
+     * Order confirmation date
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSellerOrderReferencedDocument(?string &$issuerassignedid, ?DateTime &$issueddate): ZugferdDocumentReader
+    {
+        $issuerassignedid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerOrderReferencedDocument.getIssuerAssignedID.value", "");
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerOrderReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", ""),
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSellerOrderReferencedDocument.getFormattedIssueDateTime.getDateTimeString.getFormat", "")
+        );
+
+        return $this;
+    }
+
+    /**
+     * Get details of the related buyer order
+     *
+     * @param  string|null   $issuerassignedid
+     * An identifier issued by the buyer for a referenced order (order number)
+     * @param  DateTime|null $issueddate
+     * Date of order
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentBuyerOrderReferencedDocument(?string &$issuerassignedid, ?DateTime &$issueddate): ZugferdDocumentReader
+    {
+        $issuerassignedid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerOrderReferencedDocument.getIssuerAssignedID.value", "");
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerOrderReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", ""),
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getBuyerOrderReferencedDocument.getFormattedIssueDateTime.getDateTimeString.getFormat", "")
+        );
+
+        return $this;
+    }
+
+    /**
+     * Get details of the associated contract
+     *
+     * @param  string|null   $issuerassignedid
+     * The contract reference should be assigned once in the context of the specific trade relationship and for a
+     * defined period of time (contract number)
+     * @param  DateTime|null $issueddate
+     * Contract date
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentContractReferencedDocument(?string &$issuerassignedid, ?DateTime &$issueddate): ZugferdDocumentReader
+    {
+        $issuerassignedid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getContractReferencedDocument.getIssuerAssignedID.value", "");
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getContractReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", ""),
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getContractReferencedDocument.getFormattedIssueDateTime.getDateTimeString.getFormat", "")
+        );
+
+        return $this;
+    }
+
+    /**
+     * Get first additional referenced document for the document
+     * Returns true if an additional referenced document is available, otherwise false
+     *
+     * @return boolean
+     */
+    public function firstDocumentAdditionalReferencedDocument(): bool
+    {
+        $this->documentAddRefDocPointer = 0;
+        $addRefDoc = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getAdditionalReferencedDocument", []);
+        return isset($addRefDoc[$this->documentAddRefDocPointer]);
+    }
+
+    /**
+     * Get next additional referenced document for the document
+     * Returns true when another additional referenced document is available, otherwise false
+     *
+     * @return boolean
+     */
+    public function nextDocumentAdditionalReferencedDocument(): bool
+    {
+        $this->documentAddRefDocPointer++;
+        $addRefDoc = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getAdditionalReferencedDocument", []);
+        return isset($addRefDoc[$this->documentAddRefDocPointer]);
+    }
+
+    /**
+     * Get information about billing documents that provide evidence of claims made in the bill
+     *
+     * __Notes__
+     *  - The documents justifying the invoice can be used to reference a document number, which should be
+     *    known to the recipient, as well as an external document (referenced by a URL) or an embedded document (such
+     *    as a timesheet as a PDF file). The option of linking to an external document is e.g. required when it comes
+     *    to large attachments and / or sensitive information, e.g. for personal services, which must be separated
+     *    from the bill
+     *  - Use ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument and
+     *    ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument to seek between multiple additional referenced
+     *    documents
+     *
+     * @param  string|null   $issuerassignedid
+     * The identifier of the tender or lot to which the invoice relates, or an identifier specified by the seller for
+     * an object on which the invoice is based, or an identifier of the document on which the invoice is based.
+     * @param  string|null   $typecode
+     * Type of referenced document (See codelist UNTDID 1001)
+     *  - Code 916 "reference paper" is used to reference the identification of the document on which the invoice is based
+     *  - Code 50 "Price / sales catalog response" is used to reference the tender or the lot
+     *  - Code 130 "invoice data sheet" is used to reference an identifier for an object specified by the seller.
+     * @param  string|null   $uriid
+     * The Uniform Resource Locator (URL) at which the external document is available. A means of finding the resource
+     * including the primary access method intended for it, e.g. http: // or ftp: //. The location of the external document
+     * must be used if the buyer needs additional information to support the amounts billed. External documents are not part
+     * of the invoice. Access to external documents can involve certain risks.
+     * @param  array|null    $name
+     * A description of the document, e.g. Hourly billing, usage or consumption report, etc.
+     * @param  string|null   $reftypecode
+     * The identifier for the identification scheme of the identifier of the item invoiced. If it is not clear to the
+     * recipient which scheme is used for the identifier, an identifier of the scheme should be used, which must be selected
+     * from UNTDID 1153 in accordance with the code list entries.
+     * @param  DateTime|null $issueddate
+     * Document date
+     * @param  string|null   $binarydatafilename
+     * Contains a file name of an attachment document embedded as a binary object or sent with the invoice. Where the
+     * binary attached file is stored can be controlled by using the methud ZugferdDocumentReader::setBinaryDataDirectory()
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentAdditionalReferencedDocument(?string &$issuerassignedid, ?string &$typecode, ?string &$uriid = null, ?array &$name = null, ?string &$reftypecode = null, ?DateTime &$issueddate = null, ?string &$binarydatafilename = null): ZugferdDocumentReader
+    {
+        $addRefDoc = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getAdditionalReferencedDocument", []);
+        $addRefDoc = $addRefDoc[$this->documentAddRefDocPointer];
+
+        $issuerassignedid = $this->getInvoiceValueByPathFrom($addRefDoc, "getIssuerAssignedID.value", "");
+        $typecode = $this->getInvoiceValueByPathFrom($addRefDoc, "getTypeCode.value", "");
+        $uriid = $this->getInvoiceValueByPathFrom($addRefDoc, "getURIID.value", "");
+        $name = $this->convertToArray($this->getInvoiceValueByPathFrom($addRefDoc, "getName", []), ["value"]);
+        $reftypecode = $this->getInvoiceValueByPathFrom($addRefDoc, "getReferenceTypeCode.value", "");
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPathFrom($addRefDoc, "getFormattedIssueDateTime.getDateTimeString.value", ""),
+            $this->getInvoiceValueByPathFrom($addRefDoc, "getFormattedIssueDateTime.getDateTimeString.getFormat", "")
+        );
+        $binarydatafilename = $this->getInvoiceValueByPathFrom($addRefDoc, "getAttachmentBinaryObject.getFilename", "");
+        $binarydata = $this->getInvoiceValueByPathFrom($addRefDoc, "getAttachmentBinaryObject.value", "");
+        if (
+            StringUtils::stringIsNullOrEmpty($binarydatafilename) === false
+            && StringUtils::stringIsNullOrEmpty($binarydata) === false
+            && StringUtils::stringIsNullOrEmpty($this->binarydatadirectory) === false
+        ) {
+            $binarydatafilename = PathUtils::combinePathWithFile($this->binarydatadirectory, $binarydatafilename);
+            FileUtils::base64ToFile($binarydata, $binarydatafilename);
+        } else {
+            $binarydatafilename = "";
+        }
+
+        return $this;
+    }
+
+    /**
+     * Get all additional referenced documents
+     *
+     * @param  array|null $refdocs
+     * Array contains all additional referenced documents, but without extracting attached binary objects. If you
+     * want to access attached binary objects you have to use ZugferdDocumentReader::getDocumentAdditionalReferencedDocument
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentAdditionalReferencedDocuments(?array &$refdocs): ZugferdDocumentReader
+    {
+        $refdocs = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getAdditionalReferencedDocument", []);
+        $refdocs = $this->convertToArray(
+            $refdocs,
+            [
+                "IssuerAssignedID" => ["getIssuerAssignedID.value", ""],
+                "URIID" => ["getURIID.value", ""],
+                "LineID" => ["getLineID.value", ""],
+                "TypeCode" => ["getTypeCode.value", ""],
+                "ReferenceTypeCode" => ["getReferenceTypeCode.value", ""],
+                "FormattedIssueDateTime" => ["getFormattedIssueDateTime.getDateTimeString.value", ""],
+            ]
+        );
+
+        return $this;
+    }
+
+    /**
+     * Get Details of a project reference
+     *
+     * @param  string|null $id
+     * Project Data
+     * @param  string|null $name
+     * Project Name
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentProcuringProject(?string &$id, ?string &$name): ZugferdDocumentReader
+    {
+        $id = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSpecifiedProcuringProject.getID.value", "");
+        $name = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getSpecifiedProcuringProject.getName.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get first additional referenced document for the document
+     * Returns true if the first position is available, otherwise false
+     *
+     * @return boolean
+     */
+    public function firstDocumentUltimateCustomerOrderReferencedDocument(): bool
+    {
+        $this->documentUltimateCustomerOrderReferencedDocumentPointer = 0;
+        $addRefDoc = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getUltimateCustomerOrderReferencedDocument", []);
+        return isset($addRefDoc[$this->documentUltimateCustomerOrderReferencedDocumentPointer]);
+    }
+
+    /**
+     * Get next additional referenced document for the document
+     * Returns true if the first position is available, otherwise false
+     *
+     * @return boolean
+     */
+    public function nextDocumentUltimateCustomerOrderReferencedDocument(): bool
+    {
+        $this->documentUltimateCustomerOrderReferencedDocumentPointer++;
+        $addRefDoc = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getUltimateCustomerOrderReferencedDocument", []);
+        return isset($addRefDoc[$this->documentUltimateCustomerOrderReferencedDocumentPointer]);
+    }
+
+    /**
+     * Get details of the ultimate customer order
+     *
+     * @param  string|null   $issuerassignedid
+     * @param  DateTime|null $issueddate
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentUltimateCustomerOrderReferencedDocument(?string &$issuerassignedid, ?DateTime &$issueddate): ZugferdDocumentReader
+    {
+        $addRefDoc = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeAgreement.getUltimateCustomerOrderReferencedDocument", []);
+        $addRefDoc = $addRefDoc[$this->documentUltimateCustomerOrderReferencedDocumentPointer];
+
+        $issuerassignedid = $this->getInvoiceValueByPathFrom($addRefDoc, "getIssuerAssignedID.value", "");
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPathFrom($addRefDoc, "getFormattedIssueDateTime.getDateTimeString.value", ""),
+            $this->getInvoiceValueByPathFrom($addRefDoc, "getFormattedIssueDateTime.getDateTimeString.getFormat", "")
+        );
+
+        return $this;
+    }
+
+    /**
+     * Details of the ultimate customer order
+     *
+     * @param  array|null $refdocs
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentUltimateCustomerOrderReferencedDocuments(?array $refdocs): ZugferdDocumentReader
+    {
+        // TODO: Implemente method getDocumentUltimateCustomerOrderReferencedDocuments
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the actual delivery
+     *
+     * @param  DateTime|null $date
+     * Actual delivery time. In Germany, the delivery and service date is a mandatory requirement on invoices.
+     * This can be done here or at item level.
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentSupplyChainEvent(?DateTime &$date): ZugferdDocumentReader
+    {
+        $date = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getActualDeliverySupplyChainEvent.getOccurrenceDateTime.getDateTimeString.value", ""),
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getActualDeliverySupplyChainEvent.getOccurrenceDateTime.getDateTimeString.getformat", "")
+        );
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the associated shipping notification
+     *
+     * @param  string|null   $issuerassignedid
+     * Shipping notification reference
+     * @param  DateTime|null $issueddate
+     * Shipping notification date
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentDespatchAdviceReferencedDocument(?string &$issuerassignedid, ?DateTime &$issueddate): ZugferdDocumentReader
+    {
+        $issuerassignedid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getDespatchAdviceReferencedDocument.getIssuerAssignedID.value", "");
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getDespatchAdviceReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", ""),
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getDespatchAdviceReferencedDocument.getFormattedIssueDateTime.getDateTimeString.getFormat", "")
+        );
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the associated goods receipt notification
+     *
+     * @param  string|null   $issuerassignedid
+     * An identifier for a referenced goods receipt notification (Goods receipt number)
+     * @param  DateTime|null $issueddate
+     * Goods receipt date
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentReceivingAdviceReferencedDocument(?string &$issuerassignedid, ?DateTime &$issueddate): ZugferdDocumentReader
+    {
+        $issuerassignedid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getReceivingAdviceReferencedDocument.getIssuerAssignedID.value", "");
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getReceivingAdviceReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", ""),
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getReceivingAdviceReferencedDocument.getFormattedIssueDateTime.getDateTimeString.getFormat", "")
+        );
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the associated delivery note
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string|null   $issuerassignedid
+     * Delivery receipt number
+     * @param  DateTime|null $issueddate
+     * Delivery receipt date
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentDeliveryNoteReferencedDocument(?string &$issuerassignedid, ?DateTime &$issueddate): ZugferdDocumentReader
+    {
+        $issuerassignedid = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getDeliveryNoteReferencedDocument.getIssuerAssignedID.value", "");
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getDeliveryNoteReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", ""),
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeDelivery.getDeliveryNoteReferencedDocument.getFormattedIssueDateTime.getDateTimeString.getFormat", "")
+        );
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first payment means of the document.
+     * Returns true if a first payment mean is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentPaymentMeans
+     *
+     * @return boolean
+     */
+    public function firstGetDocumentPaymentMeans(): bool
+    {
+        $this->documentPaymentMeansPointer = 0;
+        $paymentMeans = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementPaymentMeans", []));
+        return isset($paymentMeans[$this->documentPaymentMeansPointer]);
+    }
+
+    /**
+     * Seek to the next payment means of the document
+     * Returns true if another payment mean is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentPaymentMeans
+     *
+     * @return boolean
+     */
+    public function nextGetDocumentPaymentMeans(): bool
+    {
+        $this->documentPaymentMeansPointer++;
+        $paymentMeans = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementPaymentMeans", []));
+        return isset($paymentMeans[$this->documentPaymentMeansPointer]);
+    }
+
+    /**
+     * Get detailed information on the payment method
+     *
+     * __Notes__
+     *  - The SpecifiedTradeSettlementPaymentMeans element can only be repeated for each bank account if
+     *    several bank accounts are to be transferred for transfers. The code for the payment method in the Typecode
+     *    element must therefore not differ in the repetitions. The elements ApplicableTradeSettlementFinancialCard
+     *    and PayerPartyDebtorFinancialAccount must not be specified for bank transfers.
+     *
+     * @param  string|null $typecode
+     * The expected or used means of payment, expressed as a code. The entries from the UNTDID 4461 code list
+     * must be used. A distinction should be made between SEPA and non-SEPA payments as well as between credit
+     * payments, direct debits, card payments and other means of payment In particular, the following codes can
+     * be used:
+     *  - 10: cash
+     *  - 20: check
+     *  - 30: transfer
+     *  - 42: Payment to bank account
+     *  - 48: Card payment
+     *  - 49: direct debit
+     *  - 57: Standing order
+     *  - 58: SEPA Credit Transfer
+     *  - 59: SEPA Direct Debit
+     *  - 97: Report
+     * @param  string|null $information
+     * The expected or used means of payment expressed in text form, e.g. cash, bank transfer, direct debit,
+     * credit card, etc.
+     * @param  string|null $cardType
+     * The type of the card
+     * @param  string|null $cardId
+     * The primary account number (PAN) to which the card used for payment belongs. In accordance with card
+     * payment security standards, an invoice should never contain a full payment card master account number.
+     * The following specification of the PCI Security Standards Council currently applies: The first 6 and
+     * last 4 digits at most are to be displayed
+     * @param  string|null $cardHolderName
+     * Name of the payment card holder
+     * @param  string|null $buyerIban
+     * Direct debit: ID of the account to be debited
+     * @param  string|null $payeeIban
+     * Transfer: A unique identifier for the financial account held with a payment service provider to which
+     * the payment should be made, e.g. Use an IBAN (in the case of a SEPA payment) for a national ProprietaryID
+     * account number
+     * @param  string|null $payeeAccountName
+     * The name of the payment account held with a payment service provider to which the payment should be made.
+     * Information only required if different from the name of the payee / seller
+     * @param  string|null $payeePropId
+     * National account number (not for SEPA)
+     * @param  string|null $payeeBic
+     * Seller's banking institution, An identifier for the payment service provider with whom the payment account
+     * is managed, such as the BIC or a national bank code, if required. No identification scheme is to be used.
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPaymentMeans(?string &$typecode, ?string &$information, ?string &$cardType, ?string &$cardId, ?string &$cardHolderName, ?string &$buyerIban, ?string &$payeeIban, ?string &$payeeAccountName, ?string &$payeePropId, ?string &$payeeBic): ZugferdDocumentReader
+    {
+        $paymentMeans = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeSettlementPaymentMeans", []));
+        $paymentMeans = $paymentMeans[$this->documentPaymentMeansPointer];
+
+        $typecode = $this->getInvoiceValueByPathFrom($paymentMeans, "getTypeCode.value", "");
+        $information = $this->getInvoiceValueByPathFrom($paymentMeans, "getInformation.value", "");
+        $cardType = $this->getInvoiceValueByPathFrom($paymentMeans, "getApplicableTradeSettlementFinancialCard.getID.getSchemeID", "");
+        $cardId = $this->getInvoiceValueByPathFrom($paymentMeans, "getApplicableTradeSettlementFinancialCard.getID.value", "");
+        $cardHolderName = $this->getInvoiceValueByPathFrom($paymentMeans, "getApplicableTradeSettlementFinancialCard.getCardholderName.value", "");
+        $buyerIban = $this->getInvoiceValueByPathFrom($paymentMeans, "getPayerPartyDebtorFinancialAccount.getIBANID.value", "");
+        $payeeIban = $this->getInvoiceValueByPathFrom($paymentMeans, "getPayeePartyCreditorFinancialAccount.getIBANID.value", "");
+        $payeeAccountName = $this->getInvoiceValueByPathFrom($paymentMeans, "getPayeePartyCreditorFinancialAccount.getAccountName.value", "");
+        $payeePropId = $this->getInvoiceValueByPathFrom($paymentMeans, "getPayeePartyCreditorFinancialAccount.getProprietaryID.value", "");
+        $payeeBic = $this->getInvoiceValueByPathFrom($paymentMeans, "getPayeeSpecifiedCreditorFinancialInstitution.getBICID.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first document tax
+     * Returns true if a first tax (at document level) is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentTax
+     *
+     * @return boolean
+     */
+    public function firstDocumentTax(): bool
+    {
+        $this->documentTaxPointer = 0;
+        $taxes = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getApplicableTradeTax", []));
+        return isset($taxes[$this->documentTaxPointer]);
+    }
+
+    /**
+     * Seek to the next document tax
+     * Returns true if another tax (at document level) is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentTax
+     *
+     * @return boolean
+     */
+    public function nextDocumentTax(): bool
+    {
+        $this->documentTaxPointer++;
+        $taxes = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getApplicableTradeTax", []));
+        return isset($taxes[$this->documentTaxPointer]);
+    }
+
+    /**
+     * Get current VAT breakdown (at document level)
+     *
+     * @param  string|null   $categoryCode
+     * Coded description of a sales tax category
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  string|null   $typeCode
+     * Coded description of a sales tax category. Note: Fixed value = "VAT"
+     * @param  float|null    $basisAmount
+     * Tax base amount, Each sales tax breakdown must show a category-specific tax base amount.
+     * @param  float|null    $calculatedAmount
+     * The total amount to be paid for the relevant VAT category. Note: Calculated by multiplying
+     * the amount to be taxed according to the sales tax category by the sales tax rate applicable
+     * for the sales tax category concerned
+     * @param  float|null    $rateApplicablePercent
+     * The sales tax rate, expressed as the percentage applicable to the sales tax category in
+     * question. Note: The code of the sales tax category and the category-specific sales tax rate
+     * must correspond to one another. The value to be given is the percentage. For example, the
+     * value 20 is given for 20% (and not 0.2)
+     * @param  string|null   $exemptionReason
+     * Reason for tax exemption (free text)
+     * @param  string|null   $exemptionReasonCode
+     * Reason given in code form for the exemption of the amount from VAT. Note: Code list issued
+     * and maintained by the Connecting Europe Facility.
+     * @param  float|null    $lineTotalBasisAmount
+     * Tax rate goods amount
+     * @param  float|null    $allowanceChargeBasisAmount
+     * Total amount of surcharges and deductions of the tax rate at document level
+     * @param  DateTime|null $taxPointDate
+     * Specification of a date, in accordance with the sales tax guideline, on which the sales tax
+     * for the seller and for the buyer becomes relevant for accounting, insofar as this date can be
+     * determined and differs from the invoice date
+     * Note: The tax collection date for VAT purposes is usually the date the goods were delivered or
+     * the service was completed (the base tax date). There are a few variations. For further information,
+     * please refer to Article 226 (7) of Council Directive 2006/112 / EC. This element is required
+     * if the date set for the sales tax return differs from the invoice date. Both the buyer and the
+     * seller should use the delivery date for VAT returns, if provided by the seller.
+     * This is not used in Germany. Instead, the delivery and service date must be specified.
+     * @param  string|null   $dueDateTypeCode
+     * The code for the date on which sales tax becomes relevant for the seller and the buyer.
+     * The code must distinguish between the following entries from UNTDID 2005:
+     *  - date of issue of the invoice document
+     *  - actual delivery date
+     *  - Date of payment.
+     *
+     * The VAT Collection Date Code is used when the VAT Collection Date is not known for VAT purposes
+     * when the invoice is issued.
+     *
+     * The semantic values cited in the standard, which are represented by the values 3, 35, 432 in
+     * UNTDID2005, are mapped to the following values of UNTDID2475, which is the relevant code list
+     * supported by CII 16B:
+     *  - 5: date of issue of the invoice
+     *  - 29: Delivery date, current status
+     *  - 72: Paid to date
+     *
+     * In Germany, the date of delivery and service is decisive.
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentTax(?string &$categoryCode, ?string &$typeCode, ?float &$basisAmount, ?float &$calculatedAmount, ?float &$rateApplicablePercent, ?string &$exemptionReason, ?string &$exemptionReasonCode, ?float &$lineTotalBasisAmount, ?float &$allowanceChargeBasisAmount, ?DateTime &$taxPointDate, ?string &$dueDateTypeCode): ZugferdDocumentReader
+    {
+        $taxes = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getApplicableTradeTax", []));
+        $taxes = $taxes[$this->documentTaxPointer];
+
+        $categoryCode = $this->getInvoiceValueByPathFrom($taxes, "getCategoryCode.value", "");
+        $typeCode = $this->getInvoiceValueByPathFrom($taxes, "getTypeCode.value", "");
+        $basisAmount = $this->getInvoiceValueByPathFrom($taxes, "getBasisAmount.value", 0.0);
+        $calculatedAmount = $this->getInvoiceValueByPathFrom($taxes, "getCalculatedAmount.value", 0.0);
+        $rateApplicablePercent = $this->getInvoiceValueByPathFrom($taxes, "getRateApplicablePercent.value", 0.0);
+        $exemptionReason = $this->getInvoiceValueByPathFrom($taxes, "getExemptionReason.value", "");
+        $exemptionReasonCode = $this->getInvoiceValueByPathFrom($taxes, "getExemptionReasonCode.value", "");
+        $lineTotalBasisAmount = $this->getInvoiceValueByPathFrom($taxes, "getLineTotalBasisAmount.value", 0.0);
+        $allowanceChargeBasisAmount = $this->getInvoiceValueByPathFrom($taxes, "getAllowanceChargeBasisAmount.value", 0.0);
+        $taxPointDate = $this->getObjectHelper()->toDateTime(
+            $this->getObjectHelper()->tryCallByPathAndReturn($taxes, "getTaxPointDate.getDateString.value"),
+            $this->getObjectHelper()->tryCallByPathAndReturn($taxes, "getTaxPointDate.getDateString.getFormat")
+        );
+        $dueDateTypeCode = $this->getInvoiceValueByPathFrom($taxes, "getDueDateTypeCode.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the billing period
+     *
+     * @param  DateTime|null $startdate
+     * Start of the billing period
+     * @param  DateTime|null $endDate
+     * End of the billing period
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentBillingPeriod(?DateTime &$startdate, ?DateTime &$endDate): ZugferdDocumentReader
+    {
+        $startdate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getBillingSpecifiedPeriod.getStartDateTime.getDateTimeString.value", null),
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getBillingSpecifiedPeriod.getStartDateTime.getDateTimeString.getFormat", null)
+        );
+        $endDate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getBillingSpecifiedPeriod.getEndDateTime.getDateTimeString.value", null),
+            $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getBillingSpecifiedPeriod.getEndDateTime.getDateTimeString.getFormat", null)
+        );
+
+        return $this;
+    }
+
+    /**
+     * Get information about surcharges and charges applicable to the bill as a whole, Deductions, such as for
+     * withheld taxes may also be specified in this group
+     *
+     * @param  array|null $allowanceCharge
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentAllowanceCharges(?array &$allowanceCharge): ZugferdDocumentReader
+    {
+        $allowanceCharge = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeAllowanceCharge", []);
+        $allowanceCharge = $this->convertToArray(
+            $allowanceCharge,
+            [
+                "chargeindicator" => ["getChargeIndicator.getIndicator", false],
+                "sequencenumeric" => ["getSequenceNumeric.value", 0],
+                "calculationpercent" => ["getCalculationPercent.value", 0.0],
+                "basisamount" => ["getBasisAmount.value", 0.0],
+                "basisquantity" => ["getBasisQuantity.value", 0.0],
+                "actualAmount" => ["getActualAmount.value", 0.0],
+                "reasoncode" => ["getReasonCode.value", ""],
+                "reason" => ["getReason.value", ""],
+                "taxcalculatedamount" => ["getCategoryTradeTax.getCalculatedAmount.value", 0.0],
+                "taxtypecode" => ["getCategoryTradeTax.getTypeCode.value", ""],
+                "taxexemptionreason" => ["getCategoryTradeTax.getExemptionReason.value", ""],
+                "taxbasisamount" => ["getCategoryTradeTax.getBasisAmount.value", 0.0],
+                "taxlinetotalbasisamount" => ["getCategoryTradeTax.getLineTotalBasisAmount.value", 0.0],
+                "taxallowancechargebasisamount" => ["getCategoryTradeTax.getAllowanceChargeBasisAmount.value", 0.0],
+                "taxcategorycode" => ["getCategoryTradeTax.getCategoryCode.value", ""],
+                "taxexemptionreasoncode" => ["getCategoryTradeTax.getExemptionReasonCode.value", ""],
+                "taxpointdate" => function ($item) {
+                    return $this->getObjectHelper()->toDateTime(
+                        $this->getObjectHelper()->tryCallByPathAndReturn($item, "getCategoryTradeTax.getTaxPointDate.getDateString.value"),
+                        $this->getObjectHelper()->tryCallByPathAndReturn($item, "getCategoryTradeTax.getTaxPointDate.getDateString.getFormat")
+                    );
+                },
+                "taxduedatetypecode" => ["getCategoryTradeTax.getDueDateTypeCode.value", ""],
+                "taxrateapplicablepercent" => ["getCategoryTradeTax.getRateApplicablePercent.value", 0.0],
+            ]
+        );
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first documents allowance charge. Returns true if the first position is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentAllowanceCharge
+     *
+     * @return boolean
+     */
+    public function firstDocumentAllowanceCharge(): bool
+    {
+        $this->documentAllowanceChargePointer = 0;
+        $allowanceCharge = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeAllowanceCharge", []);
+        return isset($allowanceCharge[$this->documentAllowanceChargePointer]);
+    }
+
+    /**
+     * Seek to the next documents allowance charge. Returns true if a other position is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentAllowanceCharge
+     *
+     * @return boolean
+     */
+    public function nextDocumentAllowanceCharge(): bool
+    {
+        $this->documentAllowanceChargePointer++;
+        $allowanceCharge = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeAllowanceCharge", []);
+        return isset($allowanceCharge[$this->documentAllowanceChargePointer]);
+    }
+
+    /**
+     * Get information about the currently seeked surcharges and charges applicable to the
+     * bill as a whole, Deductions, such as for withheld taxes may also be specified in this group
+     *
+     * @param  float|null   $actualAmount
+     * Amount of the surcharge or discount at document level
+     * @param  boolean|null $isCharge
+     * Switch that indicates whether the following data refer to an allowance or a discount, true means that
+     * this an charge
+     * @param  string|null  $taxCategoryCode
+     * A coded indication of which sales tax category applies to the surcharge or deduction at document level
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta/Melilla)
+     * @param  string|null  $taxTypeCode
+     * Code for the VAT category of the surcharge or charge at document level. Note: Fixed value = "VAT"
+     * @param  float|null   $rateApplicablePercent
+     * VAT rate for the surcharge or discount on document level. Note: The code of the sales tax category
+     * and the category-specific sales tax rate must correspond to one another. The value to be given is
+     * the percentage. For example, the value 20 is given for 20% (and not 0.2)
+     * @param  float|null   $sequence
+     * Calculation order
+     * @param  float|null   $calculationPercent
+     * Percentage surcharge or discount at document level
+     * @param  float|null   $basisAmount
+     * The base amount that may be used in conjunction with the percentage of the surcharge or discount
+     * at document level to calculate the amount of the discount at document level
+     * @param  float|null   $basisQuantity
+     * Basismenge des Rabatts
+     * @param  string|null  $basisQuantityUnitCode
+     * Einheit der Preisbasismenge
+     *  - Codeliste: Rec. NÂ°20 VollstÃ€ndige Liste, In Recommendation NÂ°20 Intro 2.a ist beschrieben, dass
+     *    beide Listen kombiniert anzuwenden sind.
+     *  - Codeliste: Rec. NÂ°21 VollstÃ€ndige Liste, In Recommendation NÂ°20 Intro 2.a ist beschrieben, dass
+     *    beide Listen kombiniert anzuwenden sind.
+     * @param  string|null  $reasonCode
+     * The reason given as a code for the surcharge or discount at document level. Note: Use entries from
+     * the UNTDID 5189 code list. The code of the reason for the surcharge or discount at document level
+     * and the reason for the surcharge or discount at document level must correspond to each other
+     *
+     * Code list: UNTDID 7161 Complete list, code list: UNTDID 5189 Restricted
+     * Include PEPPOL subset:
+     *  - 41 - Bonus for works ahead of schedule
+     *  - 42 - Other bonus
+     *  - 60 - Manufacturerâs consumer discount
+     *  - 62 - Due to military status
+     *  - 63 - Due to work accident
+     *  - 64 - Special agreement
+     *  - 65 - Production error discount
+     *  - 66 - New outlet discount
+     *  - 67 - Sample discount
+     *  - 68 - End-of-range discount
+     *  - 70 - Incoterm discount
+     *  - 71 - Point of sales threshold allowance
+     *  - 88 - Material surcharge/deduction
+     *  - 95 - Discount
+     *  - 100 - Special rebate
+     *  - 102 - Fixed long term
+     *  - 103 - Temporary
+     *  - 104 - Standard
+     *  - 105 - Yearly turnover
+     * @param  string|null  $reason
+     * The reason given in text form for the surcharge or discount at document level
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentAllowanceCharge(?float &$actualAmount, ?bool &$isCharge, ?string &$taxCategoryCode, ?string &$taxTypeCode, ?float &$rateApplicablePercent, ?float &$sequence, ?float &$calculationPercent, ?float &$basisAmount, ?float &$basisQuantity, ?string &$basisQuantityUnitCode, ?string &$reasonCode, ?string &$reason): ZugferdDocumentReader
+    {
+        $allowanceCharge = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradeAllowanceCharge", []);
+        $allowanceCharge = $allowanceCharge[$this->documentAllowanceChargePointer];
+
+        $actualAmount = $this->getInvoiceValueByPathFrom($allowanceCharge, "getActualAmount.value", 0.0);
+        $isCharge = $this->getInvoiceValueByPathFrom($allowanceCharge, "getChargeIndicator.getIndicator", false);
+        $taxCategoryCode = $this->getInvoiceValueByPathFrom($allowanceCharge, "getCategoryTradeTax.getCategoryCode.value", "");
+        $taxTypeCode = $this->getInvoiceValueByPathFrom($allowanceCharge, "getCategoryTradeTax.getTypeCode.value", "");
+        $rateApplicablePercent = $this->getInvoiceValueByPathFrom($allowanceCharge, "getCategoryTradeTax.getRateApplicablePercent.value", 0.0);
+        $sequence = $this->getInvoiceValueByPathFrom($allowanceCharge, "getSequenceNumeric.value", 0);
+        $calculationPercent = $this->getInvoiceValueByPathFrom($allowanceCharge, "getCalculationPercent.value", 0.0);
+        $basisAmount = $this->getInvoiceValueByPathFrom($allowanceCharge, "getBasisAmount.value", 0.0);
+        $basisQuantity = $this->getInvoiceValueByPathFrom($allowanceCharge, "getBasisQuantity.value", 0.0);
+        $basisQuantityUnitCode = $this->getInvoiceValueByPathFrom($allowanceCharge, "getBasisQuantity.getUnitCode", "");
+        $reasonCode = $this->getInvoiceValueByPathFrom($allowanceCharge, "getReasonCode.value", "");
+        $reason = $this->getInvoiceValueByPathFrom($allowanceCharge, "getReason.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first documents service charge position
+     * Returns true if the first position is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentLogisticsServiceCharge
+     *
+     * @return boolean
+     */
+    public function firstDocumentLogisticsServiceCharge(): bool
+    {
+        $this->documentLogisticServiceChargePointer = 0;
+        $serviceCharge = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedLogisticsServiceCharge", []);
+
+        return isset($serviceCharge[$this->documentLogisticServiceChargePointer]);
+    }
+
+    /**
+     * Seek to the next documents service charge position
+     * Returns true if a other position is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentLogisticsServiceCharge
+     *
+     * @return boolean
+     */
+    public function nextDocumentLogisticsServiceCharge(): bool
+    {
+        $this->documentLogisticServiceChargePointer++;
+        $serviceCharge = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedLogisticsServiceCharge", []);
+
+        return isset($serviceCharge[$this->documentLogisticServiceChargePointer]);
+    }
+
+    /**
+     * Get currently seeked logistical service fees (On document level)
+     *
+     * @param  string|null $description
+     * Identification of the service fee
+     * @param  float|null  $appliedAmount
+     * Amount of the service fee
+     * @param  array|null  $taxTypeCodes
+     * Coded description of a sales tax category. Note: Fixed value = "VAT"
+     * @param  array|null  $taxCategoryCodes
+     * Coded description of a sales tax category
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  array|null  $rateApplicablePercents
+     * The sales tax rate, expressed as the percentage applicable to the sales tax category in
+     * question. Note: The code of the sales tax category and the category-specific sales tax rate
+     * must correspond to one another. The value to be given is the percentage. For example, the
+     * value 20 is given for 20% (and not 0.2)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentLogisticsServiceCharge(?string &$description, ?float &$appliedAmount, ?array &$taxTypeCodes = null, ?array &$taxCategoryCodes = null, ?array &$rateApplicablePercents = null): ZugferdDocumentReader
+    {
+        $serviceCharge = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedLogisticsServiceCharge", []);
+        $serviceCharge = $serviceCharge[$this->documentLogisticServiceChargePointer];
+
+        $description = $this->getInvoiceValueByPathFrom($serviceCharge, "getDescription.value", "");
+        $appliedAmount = $this->getInvoiceValueByPathFrom($serviceCharge, "getAppliedAmount.value", 0.0);
+        $appliedTradeTax = $this->getInvoiceValueByPathFrom($serviceCharge, "getAppliedTradeTax", []);
+        $taxTypeCodes = $this->convertToArray(
+            $appliedTradeTax,
+            [
+                "typecode" => ["getTypeCode.value", ""],
+            ]
+        );
+        $taxCategoryCodes = $this->convertToArray(
+            $appliedTradeTax,
+            [
+                "categorycode" => ["getCategoryCode.value", ""],
+            ]
+        );
+        $rateApplicablePercents = $this->convertToArray(
+            $appliedTradeTax,
+            [
+                "percent" => ["getRateApplicablePercent.value", 0.0],
+            ]
+        );
+
+        return $this;
+    }
+
+    /**
+     * Get all documents payment terms
+     *
+     * @param  array|null $paymentTerms
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPaymentTerms(?array &$paymentTerms): ZugferdDocumentReader
+    {
+        $paymentTerms = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradePaymentTerms", []);
+        $paymentTerms = $this->convertToArray(
+            $paymentTerms,
+            [
+                "description" => ["getDescription.value", ""],
+                "duedate" => function ($item) {
+                    return $this->getObjectHelper()->toDateTime(
+                        $this->getObjectHelper()->tryCallByPathAndReturn($item, "getDueDateDateTime.getDateTimeString.value"),
+                        $this->getObjectHelper()->tryCallByPathAndReturn($item, "getDueDateDateTime.getDateTimeString.getFormat")
+                    );
+                },
+                "directdebitmandateid" => ["getDirectDebitMandateID.value", ""],
+                "partialpaymentamount" => ["getPartialPaymentAmount.value", 0.0],
+            ]
+        );
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first documents payment terms position
+     * Returns true if the first position is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentPaymentTerm
+     *
+     * @return boolean
+     */
+    public function firstDocumentPaymentTerms(): bool
+    {
+        $this->documentPaymentTermsPointer = 0;
+        $paymentTerms = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradePaymentTerms", []));
+        return isset($paymentTerms[$this->documentPaymentTermsPointer]);
+    }
+
+    /**
+     * Seek to the next documents payment terms position
+     * Returns true if a other position is available, otherwise false
+     * You may use this together with ZugferdDocumentReader::getDocumentPaymentTerm
+     *
+     * @return boolean
+     */
+    public function nextDocumentPaymentTerms(): bool
+    {
+        $this->documentPaymentTermsPointer++;
+        $paymentTerms = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradePaymentTerms", []));
+        return isset($paymentTerms[$this->documentPaymentTermsPointer]);
+    }
+
+    /**
+     * Get currently seeked payment term
+     * This controlled by firstDocumentPaymentTerms and nextDocumentPaymentTerms methods
+     *
+     * @param  string|null   $description
+     * A text description of the payment terms that apply to the payment amount due (including a
+     * description of possible penalties). Note: This element can contain multiple lines and
+     * multiple conditions.
+     * @param  DateTime|null $dueDate
+     * The date by which payment is due Note: The payment due date reflects the net payment due
+     * date. In the case of partial payments, this indicates the first due date of a net payment.
+     * The corresponding description of more complex payment terms can be given in BT-20.
+     * @param  string|null   $directDebitMandateID
+     * Unique identifier assigned by the payee to reference the direct debit authorization.
+     * __Note:__ Used to inform the buyer in advance about a SEPA direct debit. __Synonym:__ mandate reference for SEPA
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPaymentTerm(?string &$description, ?DateTime &$dueDate, ?string &$directDebitMandateID): ZugferdDocumentReader
+    {
+        $paymentTerms = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradePaymentTerms", []));
+        $paymentTerms = $paymentTerms[$this->documentPaymentTermsPointer];
+
+        $description = $this->getInvoiceValueByPathFrom($paymentTerms, "getDescription.value", "");
+        $dueDate = $this->getObjectHelper()->toDateTime(
+            $this->getObjectHelper()->tryCallByPathAndReturn($paymentTerms, "getDueDateDateTime.getDateTimeString.value"),
+            $this->getObjectHelper()->tryCallByPathAndReturn($paymentTerms, "getDueDateDateTime.getDateTimeString.getFormat")
+        );
+        $directDebitMandateID = $this->getInvoiceValueByPathFrom($paymentTerms, "getDirectDebitMandateID.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on payment discounts
+     *
+     * @param  float|null    $calculationPercent
+     * Percentage of the down payment
+     * @param  DateTime|null $basisDateTime
+     * Due date reference date
+     * @param  float|null    $basisPeriodMeasureValue
+     * Due period
+     * @param  string|null   $basisPeriodMeasureUnitCode
+     * Due period, unit
+     * @param  float|null    $basisAmount
+     * Base amount of the down payment
+     * @param  float|null    $actualDiscountAmount
+     * Amount of the down payment
+     * @return ZugferdDocumentReader
+     */
+    public function getDiscountTermsFromPaymentTerm(?float &$calculationPercent, ?DateTime &$basisDateTime, ?float &$basisPeriodMeasureValue, ?string &$basisPeriodMeasureUnitCode, ?float &$basisAmount, ?float &$actualDiscountAmount): ZugferdDocumentReader
+    {
+        $paymentTerms = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getApplicableHeaderTradeSettlement.getSpecifiedTradePaymentTerms", []));
+        $paymentTerms = $paymentTerms[$this->documentPaymentTermsPointer];
+
+        $calculationPercent = $this->getInvoiceValueByPathFrom($paymentTerms, "getApplicableTradePaymentDiscountTerms.getCalculationPercent.value", 0.0);
+        $basisDateTime = $this->getObjectHelper()->toDateTime(
+            $this->getObjectHelper()->tryCallByPathAndReturn($paymentTerms, "getApplicableTradePaymentDiscountTerms.getBasisDateTime.getDateTimeString.value"),
+            $this->getObjectHelper()->tryCallByPathAndReturn($paymentTerms, "getApplicableTradePaymentDiscountTerms.getBasisDateTime.getDateTimeString.getFormat")
+        );
+        $basisPeriodMeasureValue = $this->getInvoiceValueByPathFrom($paymentTerms, "getApplicableTradePaymentDiscountTerms.getBasisPeriodMeasure.value", 0.0);
+        $basisPeriodMeasureUnitCode = $this->getInvoiceValueByPathFrom($paymentTerms, "getApplicableTradePaymentDiscountTerms.getBasisPeriodMeasure.getUnitCode", "");
+        $basisAmount = $this->getInvoiceValueByPathFrom($paymentTerms, "getApplicableTradePaymentDiscountTerms.getBasisAmount.value", 0.0);
+        $actualDiscountAmount = $this->getInvoiceValueByPathFrom($paymentTerms, "getApplicableTradePaymentDiscountTerms.getActualDiscountAmount.value", 0.0);
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first document position
+     * Returns true if the first position is available, otherwise false
+     * You may use it together with getDocumentPositionGenerals
+     *
+     * @return boolean
+     */
+    public function firstDocumentPosition(): bool
+    {
+        $this->positionPointer = 0;
+
+        $this->positionNotePointer = 0;
+        $this->positionGrossPriceAllowanceChargePointer = 0;
+        $this->positionTaxPointer = 0;
+        $this->positionAllowanceChargePointer = 0;
+        $this->positionAddRefDocPointer = 0;
+        $this->positionProductCharacteristicPointer = 0;
+        $this->positionProductClassificationPointer = 0;
+        $this->positionReferencedProductPointer = 0;
+
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        return isset($tradeLineItem[$this->positionPointer]);
+    }
+
+    /**
+     * Seek to the next document position
+     * Returns true if another position is available, otherwise false
+     * You may use it together with getDocumentPositionGenerals
+     *
+     * @return boolean
+     */
+    public function nextDocumentPosition(): bool
+    {
+        $this->positionPointer++;
+
+        $this->positionNotePointer = 0;
+        $this->positionGrossPriceAllowanceChargePointer = 0;
+        $this->positionTaxPointer = 0;
+        $this->positionAllowanceChargePointer = 0;
+        $this->positionAddRefDocPointer = 0;
+
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        return isset($tradeLineItem[$this->positionPointer]);
+    }
+
+    /**
+     * Get general information of the current position
+     *
+     * @param  string|null $lineid
+     * A unique identifier for the relevant item within the invoice (item number)
+     * @param  string|null $lineStatusCode
+     * Indicates whether the invoice item contains prices that must be taken into account when
+     * calculating the invoice amount, or whether it only contains information.
+     * The following code should be used: TYPE_LINE
+     * @param  string|null $lineStatusReasonCode
+     * Adds the type to specify whether the invoice line is:
+     *  - detail (normal position)
+     *  - Subtotal
+     *  - Information only
+     *
+     * If the $lineStatusCode field is used, the LineStatusReasonCode field must use the following codes:
+     *  - detail
+     *  - grouping
+     *  - information
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionGenerals(?string &$lineid, ?string &$lineStatusCode, ?string &$lineStatusReasonCode): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $lineid = $this->getInvoiceValueByPathFrom($tradeLineItem, "getAssociatedDocumentLineDocument.getLineID.value", "");
+        $lineStatusCode = $this->getInvoiceValueByPathFrom($tradeLineItem, "getAssociatedDocumentLineDocument.getLineStatusCode.value", "");
+        $lineStatusReasonCode = $this->getInvoiceValueByPathFrom($tradeLineItem, "getAssociatedDocumentLineDocument.getLineStatusReasonCode.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first document position
+     * Returns true if the first position is available, otherwise false
+     * You may use it together with getDocumentPositionNote
+     *
+     * @return boolean
+     */
+    public function firstDocumentPositionNote(): bool
+    {
+        $this->positionNotePointer = 0;
+
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $tradeLineItemNote = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getAssociatedDocumentLineDocument.getIncludedNote", []));
+
+        return isset($tradeLineItemNote[$this->positionNotePointer]);
+    }
+
+    /**
+     * Seek to the next document position
+     * Returns true if the first position is available, otherwise false
+     * You may use it together with getDocumentPositionNote
+     *
+     * @return boolean
+     */
+    public function nextDocumentPositionNote(): bool
+    {
+        $this->positionNotePointer++;
+
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $tradeLineItemNote = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getAssociatedDocumentLineDocument.getIncludedNote", []));
+
+        return isset($tradeLineItemNote[$this->positionNotePointer]);
+    }
+
+    /**
+     * Get detailed information on the free text on the position
+     *
+     * @param  string|null $content
+     * A free text that contains unstructured information that is relevant to the invoice item
+     * @param  string|null $contentCode
+     * Text modules agreed bilaterally, which are transmitted here as code.
+     * @param  string|null $subjectCode
+     * Free text for the position (code for the type)
+     * __Codelist:__ UNTDID 4451
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionNote(?string &$content, ?string &$contentCode, ?string &$subjectCode): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+        $tradeLineItemNote = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getAssociatedDocumentLineDocument.getIncludedNote", []));
+        $tradeLineItemNote = $tradeLineItemNote[$this->positionNotePointer];
+
+        $content = $this->getInvoiceValueByPathFrom($tradeLineItemNote, "getContent.value", "");
+        $contentCode = $this->getInvoiceValueByPathFrom($tradeLineItemNote, "getContentCode.value", "");
+        $subjectCode = $this->getInvoiceValueByPathFrom($tradeLineItemNote, "getSubjectCode.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get information about the goods and services billed
+     *
+     * @param  string|null $name
+     * A name of the item (item name)
+     * @param  string|null $description
+     * A description of the item, the item description makes it possible to describe the item and its
+     * properties in more detail than is possible with the item name.
+     * @param  string|null $sellerAssignedID
+     * An identifier assigned to the item by the seller
+     * @param  string|null $buyerAssignedID
+     * An identifier assigned to the item by the buyer. The article number of the buyer is a clear,
+     * bilaterally agreed identification of the product. It can, for example, be the customer article
+     * number or the article number assigned by the manufacturer.
+     * @param  string|null $globalIDType
+     * The scheme for $globalID
+     * @param  string|null $globalID
+     * Identification of an article according to the registered scheme (Global identifier of the product,
+     * GTIN, ...)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionProductDetails(?string &$name, ?string &$description, ?string &$sellerAssignedID, ?string &$buyerAssignedID, ?string &$globalIDType, ?string &$globalID): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $name = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getName.value", "");
+        $description = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getDescription.value", "");
+        $sellerAssignedID = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getSellerAssignedID.value", "");
+        $buyerAssignedID = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getBuyerAssignedID.value", "");
+        $globalIDType = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getGlobalID.getSchemeID", "");
+        $globalID = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getGlobalID.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get details of the related buyer order position
+     *
+     * @param  string|null   $issuerassignedid
+     * An identifier issued by the buyer for a referenced order (order number)
+     * @param  string|null   $lineid
+     * An identifier for a position within an order placed by the buyer. Note: Reference is made to the order
+     * reference at the document level.
+     * @param  DateTime|null $issueddate
+     * Date of order
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionBuyerOrderReferencedDocument(?string &$issuerassignedid, ?string &$lineid, ?DateTime &$issueddate): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $issuerassignedid = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getBuyerOrderReferencedDocument.getIssuerAssignedID.value", "");
+        $lineid = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getBuyerOrderReferencedDocument.getLineID.value", "");
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getBuyerOrderReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", null),
+            $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getBuyerOrderReferencedDocument.getFormattedIssueDateTime.getDateTimeString.getFormat", null)
+        );
+
+        return $this;
+    }
+
+    /**
+     * Get details of the related contract position
+     *
+     * @param  string|null   $issuerassignedid
+     * The contract reference should be assigned once in the context of the specific trade relationship and for a
+     * defined period of time (contract number)
+     * @param  string|null   $lineid
+     * Identifier of the according contract position
+     * @param  DateTime|null $issueddate
+     * Contract date
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionContractReferencedDocument(?string &$issuerassignedid, ?string &$lineid, ?DateTime &$issueddate): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $issuerassignedid = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getContractReferencedDocument.getIssuerAssignedID.value", "");
+        $lineid = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getContractReferencedDocument.getLineID.value", "");
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getContractReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", null),
+            $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getContractReferencedDocument.getFormattedIssueDateTime.getDateTimeString.getFormat", null)
+        );
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first documents position additional referenced document
+     * Returns true if the first position is available, otherwise false
+     * You may use it together with getDocumentPositionAdditionalReferencedDocument
+     *
+     * @return boolean
+     */
+    public function firstDocumentPositionAdditionalReferencedDocument(): bool
+    {
+        $this->positionAddRefDocPointer = 0;
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+        $addRefDoc = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getAdditionalReferencedDocument", []));
+        return isset($addRefDoc[$this->positionAddRefDocPointer]);
+    }
+
+    /**
+     * Seek to the next documents position additional referenced document
+     * Returns true if the first position is available, otherwise false
+     * You may use it together with getDocumentPositionAdditionalReferencedDocument
+     *
+     * @return boolean
+     */
+    public function nextDocumentPositionAdditionalReferencedDocument(): bool
+    {
+        $this->positionAddRefDocPointer++;
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+        $addRefDoc = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getAdditionalReferencedDocument", []));
+        return isset($addRefDoc[$this->positionAddRefDocPointer]);
+    }
+
+    /**
+     * Details of an additional Document reference (on position level)
+     *
+     * __Notes__
+     *  - The documents justifying the invoice can be used to reference a document number, which should be
+     *    known to the recipient, as well as an external document (referenced by a URL) or an embedded document (such
+     *    as a timesheet as a PDF file). The option of linking to an external document is e.g. required when it comes
+     *    to large attachments and / or sensitive information, e.g. for personal services, which must be separated
+     *    from the bill
+     *  - Use ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument and
+     *    ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument to seek between multiple additional referenced
+     *    documents
+     *
+     * @param  string|null   $issuerassignedid
+     * The identifier of the tender or lot to which the invoice relates, or an identifier specified by the seller for
+     * an object on which the invoice is based, or an identifier of the document on which the invoice is based.
+     * @param  string|null   $typecode
+     * Type of referenced document (See codelist UNTDID 1001)
+     *  - Code 916 "reference paper" is used to reference the identification of the document on which the invoice is based
+     *  - Code 50 "Price / sales catalog response" is used to reference the tender or the lot
+     *  - Code 130 "invoice data sheet" is used to reference an identifier for an object specified by the seller.
+     * @param  string|null   $uriid
+     * The Uniform Resource Locator (URL) at which the external document is available. A means of finding the resource
+     * including the primary access method intended for it, e.g. http: // or ftp: //. The location of the external document
+     * must be used if the buyer needs additional information to support the amounts billed. External documents are not part
+     * of the invoice. Access to external documents can involve certain risks.
+     * @param  string|null   $lineid
+     * The referenced position identifier in the additional document
+     * @param  string|null   $name
+     * A description of the document, e.g. Hourly billing, usage or consumption report, etc.
+     * @param  string|null   $reftypecode
+     * The identifier for the identification scheme of the identifier of the item invoiced. If it is not clear to the
+     * recipient which scheme is used for the identifier, an identifier of the scheme should be used, which must be selected
+     * from UNTDID 1153 in accordance with the code list entries.
+     * @param  DateTime|null $issueddate
+     * Document date
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionAdditionalReferencedDocument(?string &$issuerassignedid, ?string &$typecode, ?string &$uriid, ?string &$lineid, ?string &$name, ?string &$reftypecode, ?DateTime &$issueddate): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $addRefDoc = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getAdditionalReferencedDocument", []));
+        $addRefDoc = $addRefDoc[$this->positionAddRefDocPointer];
+
+        $typecode = $this->getInvoiceValueByPathFrom($addRefDoc, "getTypeCode.value", "");
+        $issuerassignedid = $this->getInvoiceValueByPathFrom($addRefDoc, "getIssuerAssignedID.value", "");
+        $reftypecode = $this->getInvoiceValueByPathFrom($addRefDoc, "getReferenceTypeCode.value", "");
+        $uriid = $this->getInvoiceValueByPathFrom($addRefDoc, "getURIID.value", "");
+        $lineid = $this->getInvoiceValueByPathFrom($addRefDoc, "getLineID.value", "");
+        $name = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($addRefDoc, "getName.value", ""));
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPathFrom($addRefDoc, "getFormattedIssueDateTime.getDateTimeString.value", null),
+            $this->getInvoiceValueByPathFrom($addRefDoc, "getFormattedIssueDateTime.getDateTimeString.getFormat", null)
+        );
+
+        return $this;
+    }
+
+    //TODO: DocumentPositionUltimateCustomerOrderReferencedDocument
+
+    /**
+     * Get the unit price excluding sales tax before deduction of the discount on the item price.
+     *
+     * @param  float|null  $amount
+     * The unit price excluding sales tax before deduction of the discount on the item price.
+     * Note: If the price is shown according to the net calculation, the price must also be shown
+     * according to the gross calculation.
+     * @param  float|null  $basisQuantity
+     * The number of item units for which the price applies (price base quantity)
+     * @param  string|null $basisQuantityUnitCode
+     * The unit code of the number of item units for which the price applies (price base quantity)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionGrossPrice(?float &$amount, ?float &$basisQuantity, ?string &$basisQuantityUnitCode): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $amount = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getGrossPriceProductTradePrice.getChargeAmount.value", 0.0);
+        $basisQuantity = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getGrossPriceProductTradePrice.getBasisQuantity.value", 0.0);
+        $basisQuantityUnitCode = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getGrossPriceProductTradePrice.getBasisQuantity.getUnitCode", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first documents position gross price allowance charge position
+     * Returns true if the first position is available, otherwise false
+     * You may use it together with getDocumentPositionGrossPriceAllowanceCharge
+     *
+     * @return boolean
+     */
+    public function firstDocumentPositionGrossPriceAllowanceCharge(): bool
+    {
+        $this->positionGrossPriceAllowanceChargePointer = 0;
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+        $allowanceCharge = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getGrossPriceProductTradePrice.getAppliedTradeAllowanceCharge", []));
+        return isset($allowanceCharge[$this->positionGrossPriceAllowanceChargePointer]);
+    }
+
+    /**
+     * Seek to the next documents position gross price allowance charge position
+     * Returns true if a other position is available, otherwise false
+     * You may use it together with getDocumentPositionGrossPriceAllowanceCharge
+     *
+     * @return boolean
+     */
+    public function nextDocumentPositionGrossPriceAllowanceCharge(): bool
+    {
+        $this->positionGrossPriceAllowanceChargePointer++;
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+        $allowanceCharge = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getGrossPriceProductTradePrice.getAppliedTradeAllowanceCharge", []));
+        return isset($allowanceCharge[$this->positionGrossPriceAllowanceChargePointer]);
+    }
+
+    /**
+     * Get detailed information on surcharges and discounts
+     *
+     * @param  float|null   $actualAmount
+     * Discount on the item price. The total discount subtracted from the gross price to calculate the
+     * net price. Note: Only applies if the discount is given per unit and is not included in the gross price.
+     * @param  boolean|null $isCharge
+     * Switch for surcharge/discount, if true then its an charge
+     * @param  float|null   $calculationPercent
+     * Discount/surcharge in percent. Up to level EN16931, only the final result of the discount (ActualAmount)
+     * is transferred
+     * @param  float|null   $basisAmount
+     * Base amount of the discount/surcharge
+     * @param  string|null  $reason
+     * Reason for surcharge/discount (free text)
+     * @param  string|null  $taxTypeCode
+     * @param  string|null  $taxCategoryCode
+     * @param  float|null   $rateApplicablePercent
+     * @param  float|null   $sequence
+     * @param  float|null   $basisQuantity
+     * @param  string|null  $basisQuantityUnitCode
+     * @param  string|null  $reasonCode
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionGrossPriceAllowanceCharge(?float &$actualAmount, ?bool &$isCharge, ?float &$calculationPercent, ?float &$basisAmount, ?string &$reason, ?string &$taxTypeCode, ?string &$taxCategoryCode, ?float &$rateApplicablePercent, ?float &$sequence, ?float &$basisQuantity, ?string &$basisQuantityUnitCode, ?string &$reasonCode): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $allowanceCharge = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getGrossPriceProductTradePrice.getAppliedTradeAllowanceCharge", []));
+        $allowanceCharge = $allowanceCharge[$this->positionGrossPriceAllowanceChargePointer];
+
+        $actualAmount = $this->getInvoiceValueByPathFrom($allowanceCharge, "getActualAmount.value", 0.0);
+        $isCharge = $this->getInvoiceValueByPathFrom($allowanceCharge, "getChargeIndicator.getIndicator", false);
+        $calculationPercent = $this->getInvoiceValueByPathFrom($allowanceCharge, "getCalculationPercent.value", 0.0);
+        $basisAmount = $this->getInvoiceValueByPathFrom($allowanceCharge, "getBasisAmount.value", 0.0);
+        $reason = $this->getInvoiceValueByPathFrom($allowanceCharge, "getReason.value", "");
+        $taxTypeCode = $this->getInvoiceValueByPathFrom($allowanceCharge, "getCategoryTradeTax.getTypeCode.value", "");
+        $taxCategoryCode = $this->getInvoiceValueByPathFrom($allowanceCharge, "getCategoryTradeTax.getCategoryCode.value", "");
+        $rateApplicablePercent = $this->getInvoiceValueByPathFrom($allowanceCharge, "getCategoryTradeTax.getRateApplicablePercent.value", 0.0);
+        $sequence = $this->getInvoiceValueByPathFrom($allowanceCharge, "getSequenceNumeric.value", 0.0);
+        $basisQuantity = $this->getInvoiceValueByPathFrom($allowanceCharge, "getBasisQuantity.value", 0.0);
+        $basisQuantityUnitCode = $this->getInvoiceValueByPathFrom($allowanceCharge, "getBasisQuantity.getUnitCode", "");
+        $reasonCode = $this->getInvoiceValueByPathFrom($allowanceCharge, "getReasonCode.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the net price of the item
+     *
+     * @param  float|null  $amount
+     * Net price of the item
+     * @param  float|null  $basisQuantity
+     * Base quantity at the item price
+     * @param  string|null $basisQuantityUnitCode
+     * Code of the unit of measurement of the base quantity at the item price
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionNetPrice(?float &$amount, ?float &$basisQuantity, ?string &$basisQuantityUnitCode): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $amount = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getNetPriceProductTradePrice.getChargeAmount.value", 0.0);
+        $basisQuantity = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getNetPriceProductTradePrice.getBasisQuantity.value", 0.0);
+        $basisQuantityUnitCode = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getNetPriceProductTradePrice.getBasisQuantity.getUnitCode", "");
+
+        return $this;
+    }
+
+    /**
+     * Tax included for B2C on position level
+     *
+     * @param  string|null $categoryCode
+     * Coded description of a sales tax category
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  string|null $typeCode
+     * Coded description of a sales tax category. Note: Fixed value = "VAT"
+     * @param  float|null  $rateApplicablePercent
+     * The sales tax rate, expressed as the percentage applicable to the sales tax category in
+     * question. Note: The code of the sales tax category and the category-specific sales tax rate
+     * must correspond to one another. The value to be given is the percentage. For example, the
+     * value 20 is given for 20% (and not 0.2)
+     * @param  float|null  $calculatedAmount
+     * The total amount to be paid for the relevant VAT category. Note: Calculated by multiplying
+     * the amount to be taxed according to the sales tax category by the sales tax rate applicable
+     * for the sales tax category concerned
+     * @param  string|null $exemptionReason
+     * Reason for tax exemption (free text)
+     * @param  string|null $exemptionReasonCode
+     * Reason given in code form for the exemption of the amount from VAT. Note: Code list issued
+     * and maintained by the Connecting Europe Facility.
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionNetPriceTax(?string &$categoryCode, ?string &$typeCode, ?float &$rateApplicablePercent, ?float &$calculatedAmount, ?string &$exemptionReason, ?string &$exemptionReasonCode): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $categoryCode = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getNetPriceProductTradePrice.getIncludedTradeTax.getCategoryCode.value", "");
+        $typeCode = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getNetPriceProductTradePrice.getIncludedTradeTax.getTypeCode.value", "");
+        $rateApplicablePercent = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getNetPriceProductTradePrice.getIncludedTradeTax.getRateApplicablePercent.value", 0.0);
+        $calculatedAmount = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getNetPriceProductTradePrice.getIncludedTradeTax.getCalculatedAmount.value", 0.0);
+        $exemptionReason = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getNetPriceProductTradePrice.getIncludedTradeTax.getExemptionReason.value", "");
+        $exemptionReasonCode = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeAgreement.getNetPriceProductTradePrice.getIncludedTradeTax.getExemptionReasonCode.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get the position Quantity
+     *
+     * @param  float|null  $billedQuantity
+     * The quantity of individual items (goods or services) billed in the relevant line
+     * @param  string|null $billedQuantityUnitCode
+     * The unit of measure applicable to the amount billed. Note: The unit of measurement must be taken from the
+     * lists from UN / ECE Recommendation No. 20 "Codes for Units of Measure Used in International Trade" and
+     * UN / ECE Recommendation No. 21 "Codes for Passengers, Types of Cargo, Packages and Packaging Materials
+     * (with Complementary Codes for Package Names)" using the UN / ECE Rec No. 20 Intro 2.a) can be selected.
+     * It should be noted that in most cases it is not necessary for buyers and sellers to fully implement these
+     * lists in their software. Sellers only need to support the entities necessary for their goods and services;
+     * Buyers only need to verify that the units used in the invoice match those in other documents (such as in
+     * Contracts, catalogs, orders and shipping notifications) match the units used.
+     * @param  float|null  $chargeFreeQuantity
+     * Quantity, free of charge
+     * @param  string|null $chargeFreeQuantityUnitCpde
+     * Unit of measure code for the quantity free of charge
+     * @param  float|null  $packageQuantity
+     * Number of packages
+     * @param  string|null $packageQuantityUnitCode
+     * Unit of measure code for number of packages
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionQuantity(?float &$billedQuantity, ?string &$billedQuantityUnitCode, ?float &$chargeFreeQuantity, ?string &$chargeFreeQuantityUnitCpde, ?float &$packageQuantity, ?string &$packageQuantityUnitCode): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $billedQuantity = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getBilledQuantity.value", 0.0);
+        $billedQuantityUnitCode = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getBilledQuantity.getUnitCode", "");
+        $chargeFreeQuantity = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getChargeFreeQuantity.value", 0.0);
+        $chargeFreeQuantityUnitCpde = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getChargeFreeQuantity.getUnitCode", "");
+        $packageQuantity = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getPackageQuantity.value", 0.0);
+        $packageQuantityUnitCode = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getPackageQuantity.getUnitCode", "");
+
+        return $this;
+    }
+
+    //TODO: GetDocumentPositionShipTo
+    //TODO: GetDocumentPositionUltimateShipTo
+
+    /**
+     * Get detailed information on the actual delivery (on position level)
+     *
+     * @param  DateTime|null $date
+     * Actual delivery time. In Germany, the delivery and service date is a mandatory requirement on invoices.
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionSupplyChainEvent(?DateTime &$date): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $date = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getActualDeliverySupplyChainEvent.getOccurrenceDateTime.getDateTimeString.value", ""),
+            $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getActualDeliverySupplyChainEvent.getOccurrenceDateTime,getDateTimeString.getFormat", "")
+        );
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on the associated shipping notification (on position level)
+     *
+     * @param  string|null   $issuerassignedid
+     * Shipping notification reference
+     * @param  string|null   $lineid
+     * Shipping notification position reference date
+     * @param  DateTime|null $issueddate
+     * Shipping notification date
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionDespatchAdviceReferencedDocument(?string &$issuerassignedid, ?string &$lineid = null, ?DateTime &$issueddate = null): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $issuerassignedid = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getDespatchAdviceReferencedDocument.getIssuerAssignedID.value", "");
+        $lineid = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getDespatchAdviceReferencedDocument.getLineID.value", "");
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getSpecifiedLineTradeDelivery.getDespatchAdviceReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", ""),
+            $this->getInvoiceValueByPath("getSpecifiedLineTradeDelivery.getDespatchAdviceReferencedDocument.getFormattedIssueDateTime,getDateTimeString.getFormat", "")
+        );
+
+        return $this;
+    }
+
+    /**
+     * Detailed information on the associated shipping notification (on position level)
+     *
+     * @param  string|null   $issuerassignedid
+     * @param  string|null   $lineid
+     * @param  DateTime|null $issueddate
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionReceivingAdviceReferencedDocument(?string &$issuerassignedid, ?string &$lineid, ?DateTime &$issueddate): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $issuerassignedid = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getReceivingAdviceReferencedDocument.getIssuerAssignedID.value", "");
+        $lineid = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getReceivingAdviceReferencedDocument.getLineID.value", "");
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getSpecifiedLineTradeDelivery.getReceivingAdviceReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", ""),
+            $this->getInvoiceValueByPath("getSpecifiedLineTradeDelivery.getReceivingAdviceReferencedDocument.getFormattedIssueDateTime,getDateTimeString.getFormat", "")
+        );
+
+        return $this;
+    }
+
+    /**
+     * Detailed information on the associated delivery note on position level
+     *
+     * @param  string|null   $issuerassignedid
+     * @param  string|null   $lineid
+     * @param  DateTime|null $issueddate
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionDeliveryNoteReferencedDocument(?string &$issuerassignedid, ?string &$lineid, ?DateTime &$issueddate): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $issuerassignedid = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getDeliveryNoteReferencedDocument.getIssuerAssignedID.value", "");
+        $lineid = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeDelivery.getDeliveryNoteReferencedDocument.getLineID.value", "");
+        $issueddate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPath("getSpecifiedLineTradeDelivery.getDeliveryNoteReferencedDocument.getFormattedIssueDateTime.getDateTimeString.value", ""),
+            $this->getInvoiceValueByPath("getSpecifiedLineTradeDelivery.getDeliveryNoteReferencedDocument.getFormattedIssueDateTime,getDateTimeString.getFormat", "")
+        );
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first document position tax
+     * Returns true if the first tax position is available, otherwise false
+     * You may use it together with ZugferdDocumentReader::getDocumentPositionTax
+     *
+     * @return boolean
+     */
+    public function firstDocumentPositionTax(): bool
+    {
+        $this->positionTaxPointer = 0;
+
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $taxes = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getApplicableTradeTax", []));
+
+        return isset($taxes[$this->positionTaxPointer]);
+    }
+
+    /**
+     * Seek to the next document position tax
+     * Returns true if another tax position is available, otherwise false
+     * You may use it together with ZugferdDocumentReader::getDocumentPositionTax
+     *
+     * @return boolean
+     */
+    public function nextDocumentPositionTax(): bool
+    {
+        $this->positionTaxPointer++;
+
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $taxes = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getApplicableTradeTax", []));
+
+        return isset($taxes[$this->positionTaxPointer]);
+    }
+
+    /**
+     * Get information about the sales tax that applies to the goods and services invoiced
+     * in the relevant invoice line
+     *
+     * @param  string|null $categoryCode
+     * Coded description of a sales tax category
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  string|null $typeCode
+     * Coded description of a sales tax category. Note: Fixed value = "VAT"
+     * In EN 16931 only the tax type âsales taxâ with the code âVATâ is supported. If other types of tax are
+     * to be specified, such as an insurance tax or a mineral oil tax, the EXTENDED profile must be used. The
+     * code for the tax type must then be taken from the code list UNTDID 5153.
+     * @param  float|null  $rateApplicablePercent
+     * The VAT rate applicable to the item invoiced and expressed as a percentage. Note: The code of the sales
+     * tax category and the category-specific sales tax rate  must correspond to one another. The value to be
+     * given is the percentage. For example, the value 20 is given for 20% (and not 0.2)
+     * @param  float|null  $calculatedAmount
+     * Tax amount. Information only for taxes that are not VAT.
+     * @param  string|null $exemptionReason
+     * Reason for tax exemption (free text)
+     * @param  string|null $exemptionReasonCode
+     * Reason given in code form for the exemption of the amount from VAT. Note: Code list issued
+     * and maintained by the Connecting Europe Facility.
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionTax(?string &$categoryCode, ?string &$typeCode, ?float &$rateApplicablePercent, ?float &$calculatedAmount, ?string &$exemptionReason, ?string &$exemptionReasonCode): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $taxes = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getApplicableTradeTax", []));
+        $taxes = $taxes[$this->positionTaxPointer];
+
+        $categoryCode = $this->getInvoiceValueByPathFrom($taxes, "getCategoryCode.value", "");
+        $typeCode = $this->getInvoiceValueByPathFrom($taxes, "getTypeCode.value", "");
+        $rateApplicablePercent = $this->getInvoiceValueByPathFrom($taxes, "getRateApplicablePercent.value", 0.0);
+        $calculatedAmount = $this->getInvoiceValueByPathFrom($taxes, "getCalculatedAmount.value", 0.0);
+        $exemptionReason = $this->getInvoiceValueByPathFrom($taxes, "getExemptionReason.value", "");
+        $exemptionReasonCode = $this->getInvoiceValueByPathFrom($taxes, "getExemptionReasonCode.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get information about the period relevant for the invoice item.
+     * Note: Also known as the invoice line delivery period.
+     *
+     * @param  DateTime|null $startdate
+     * Start of the billing period
+     * @param  DateTime|null $endDate
+     * End of the billing period
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionBillingPeriod(?DateTime &$startdate, ?DateTime &$endDate): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $startdate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getBillingSpecifiedPeriod.getStartDateTime.getDateTimeString.value", null),
+            $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getBillingSpecifiedPeriod.getStartDateTime.getDateTimeString.getFormat", null)
+        );
+        $endDate = $this->getObjectHelper()->toDateTime(
+            $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getBillingSpecifiedPeriod.getEndDateTime.getDateTimeString.value", null),
+            $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getBillingSpecifiedPeriod.getEndDateTime.getDateTimeString.getFormat", null)
+        );
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first allowance charge (on position level)
+     * Returns true if the first position is available, otherwise false
+     * You may use it together with ZugferdDocumentReader::getDocumentPositionAllowanceCharge
+     *
+     * @return boolean
+     */
+    public function firstDocumentPositionAllowanceCharge(): bool
+    {
+        $this->positionAllowanceChargePointer = 0;
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+        $allowanceCharge = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getSpecifiedTradeAllowanceCharge", []));
+        return isset($allowanceCharge[$this->positionAllowanceChargePointer]);
+    }
+
+    /**
+     * Seek to the next allowance charge (on position level)
+     * Returns true if another position is available, otherwise false
+     * You may use it together with ZugferdDocumentReader::getDocumentPositionAllowanceCharge
+     *
+     * @return boolean
+     */
+    public function nextDocumentPositionAllowanceCharge(): bool
+    {
+        $this->positionAllowanceChargePointer++;
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+        $allowanceCharge = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getSpecifiedTradeAllowanceCharge", []));
+        return isset($allowanceCharge[$this->positionAllowanceChargePointer]);
+    }
+
+    /**
+     * Detailed information on currentley seeked surcharges and discounts on position level
+     *
+     * @param  float|null   $actualAmount
+     * The surcharge / discount amount excluding sales tax
+     * @param  boolean|null $isCharge
+     * Switch that indicates whether the following data refer to an allowance or a discount,
+     * true means that
+     * @param  float|null   $calculationPercent
+     * The percentage that may be used in conjunction with the base invoice line discount
+     * amount to calculate the invoice line discount amount
+     * @param  float|null   $basisAmount
+     * The base amount that may be used in conjunction with the invoice line discount percentage
+     * to calculate the invoice line discount amount
+     * @param  string|null  $reason
+     * The reason given in text form for the invoice item discount/surcharge
+     *
+     * __Notes__
+     *  - The invoice line discount reason code (BT-140) and the invoice line discount reason
+     *    (BT-139) must show the same allowance type.
+     *  - Each line item discount (BG-27) must include a corresponding line discount reason
+     *    (BT-139) or an appropriate line discount reason code (BT-140), or both.
+     *  - The code for the reason for the charge at the invoice line level (BT-145) and the
+     *    reason for the invoice line discount (BT-144) must show the same discount type
+     * @param  string|null  $taxTypeCode
+     * Not used, this is only a dummy
+     * @param  string|null  $taxCategoryCode
+     * Not used, this is only a dummy
+     * @param  float|null   $rateApplicablePercent
+     * Not used, this is only a dummy
+     * @param  float|null   $sequence
+     * Not used, this is only a dummy
+     * @param  float|null   $basisQuantity
+     * Not used, this is only a dummy
+     * @param  string|null  $basisQuantityUnitCode
+     * Not used, this is only a dummy
+     * @param  string|null  $reasonCode
+     * The reason given as a code for the invoice line discount
+     *
+     * __Notes__
+     *  - Use entries from the UNTDID 5189 code list (discounts) or the UNTDID 7161 code list
+     *    (surcharges). The invoice line discount reason code and the invoice line discount reason must
+     *    match.
+     *  - In the case of a discount, the code list UNTDID 5189 must be used.
+     *  - In the event of a surcharge, the code list UNTDID 7161 must be used.
+     *
+     * In particular, the following codes can be used:
+     *  - AA = Advertising
+     *  - ABL = Additional packaging
+     *  - ADR = Other services
+     *  - ADT = Pick-up
+     *  - FC = Freight service
+     *  - FI = Financing
+     *  - LA = Labelling
+     *
+     * Include PEPPOL subset:
+     *  - 41 - Bonus for works ahead of schedule
+     *  - 42 - Other bonus
+     *  - 60 - Manufacturerâs consumer discount
+     *  - 62 - Due to military status
+     *  - 63 - Due to work accident
+     *  - 64 - Special agreement
+     *  - 65 - Production error discount
+     *  - 66 - New outlet discount
+     *  - 67 - Sample discount
+     *  - 68 - End-of-range discount
+     *  - 70 - Incoterm discount
+     *  - 71 - Point of sales threshold allowance
+     *  - 88 - Material surcharge/deduction
+     *  - 95 - Discount
+     *  - 100 - Special rebate
+     *  - 102 - Fixed long term
+     *  - 103 - Temporary
+     *  - 104 - Standard
+     *  - 105 - Yearly turnover
+     *
+     * Codelists: UNTDID 7161 (Complete list), UNTDID 5189 (Restricted)
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionAllowanceCharge(?float &$actualAmount, ?bool &$isCharge, ?float &$calculationPercent, ?float &$basisAmount, ?string &$reason, ?string &$taxTypeCode, ?string &$taxCategoryCode, ?float &$rateApplicablePercent, ?float &$sequence, ?float &$basisQuantity, ?string &$basisQuantityUnitCode, ?string &$reasonCode): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $allowanceCharge = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getSpecifiedTradeAllowanceCharge", []));
+        $allowanceCharge = $allowanceCharge[$this->positionAllowanceChargePointer];
+
+        $actualAmount = $this->getInvoiceValueByPathFrom($allowanceCharge, "getActualAmount.value", 0.0);
+        $isCharge = $this->getInvoiceValueByPathFrom($allowanceCharge, "getChargeIndicator.getIndicator", false);
+        $calculationPercent = $this->getInvoiceValueByPathFrom($allowanceCharge, "getCalculationPercent.value", 0.0);
+        $basisAmount = $this->getInvoiceValueByPathFrom($allowanceCharge, "getBasisAmount.value", 0.0);
+        $reason = $this->getInvoiceValueByPathFrom($allowanceCharge, "getReason.value", "");
+        $taxTypeCode = $this->getInvoiceValueByPathFrom($allowanceCharge, "getCategoryTradeTax.getTypeCode.value", "");
+        $taxCategoryCode = $this->getInvoiceValueByPathFrom($allowanceCharge, "getCategoryTradeTax.getCategoryCode.value", "");
+        $rateApplicablePercent = $this->getInvoiceValueByPathFrom($allowanceCharge, "getCategoryTradeTax.getRateApplicablePercent.value", 0.0);
+        $sequence = $this->getInvoiceValueByPathFrom($allowanceCharge, "getSequenceNumeric.value", 0.0);
+        $basisQuantity = $this->getInvoiceValueByPathFrom($allowanceCharge, "getBasisQuantity.value", 0.0);
+        $basisQuantityUnitCode = $this->getInvoiceValueByPathFrom($allowanceCharge, "getBasisQuantity.getUnitCode", "");
+        $reasonCode = $this->getInvoiceValueByPathFrom($allowanceCharge, "getReasonCode.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Detailed information on surcharges and discounts on position level (on a simple way)
+     * This is the simplified version of ZugferdDocumentReader::getDocumentPositionAllowanceCharge
+     *
+     * @param  float|null   $actualAmount
+     * The surcharge / discount amount excluding sales tax
+     * @param  boolean|null $isCharge
+     * Switch that indicates whether the following data refer to an allowance or a discount,
+     * true means that
+     * @param  float|null   $calculationPercent
+     * The percentage that may be used in conjunction with the base invoice line discount
+     * amount to calculate the invoice line discount amount
+     * @param  float|null   $basisAmount
+     * The base amount that may be used in conjunction with the invoice line discount percentage
+     * to calculate the invoice line discount amount
+     * @param  string|null  $reasonCode
+     * The reason given as a code for the invoice line discount
+     *
+     * __Notes__
+     *
+     *  - Use entries from the UNTDID 5189 code list (discounts) or the UNTDID 7161 code list
+     *    (surcharges). The invoice line discount reason code and the invoice line discount reason must
+     *    match.
+     *  - In the case of a discount, the code list UNTDID 5189 must be used.
+     *  - In the event of a surcharge, the code list UNTDID 7161 must be used.
+     *
+     * In particular, the following codes can be used:
+     *  - AA = Advertising
+     *  - ABL = Additional packaging
+     *  - ADR = Other services
+     *  - ADT = Pick-up
+     *  - FC = Freight service
+     *  - FI = Financing
+     *  - LA = Labelling
+     *
+     * Include PEPPOL subset:
+     *  - 41 - Bonus for works ahead of schedule
+     *  - 42 - Other bonus
+     *  - 60 - Manufacturerâs consumer discount
+     *  - 62 - Due to military status
+     *  - 63 - Due to work accident
+     *  - 64 - Special agreement
+     *  - 65 - Production error discount
+     *  - 66 - New outlet discount
+     *  - 67 - Sample discount
+     *  - 68 - End-of-range discount
+     *  - 70 - Incoterm discount
+     *  - 71 - Point of sales threshold allowance
+     *  - 88 - Material surcharge/deduction
+     *  - 95 - Discount
+     *  - 100 - Special rebate
+     *  - 102 - Fixed long term
+     *  - 103 - Temporary
+     *  - 104 - Standard
+     *  - 105 - Yearly turnover
+     *
+     * Codelists: UNTDID 7161 (Complete list), UNTDID 5189 (Restricted)
+     * @param  string|null  $reason
+     * The reason given in text form for the invoice item discount / surcharge
+     *
+     * __Notes__
+     *  - The invoice line discount reason code (BT-140) and the invoice line discount reason
+     *    (BT-139) must show the same allowance type.
+     *  - Each line item discount (BG-27) must include a corresponding line discount reason
+     *    or an appropriate line discount reason code (BT-140), or both.
+     *  - The code for the reason for the charge at the invoice line level (BT-145) and the
+     *    reason for the invoice line discount (BT-144) must show the same discount type
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionAllowanceCharge2(?float &$actualAmount, ?bool &$isCharge, ?float &$calculationPercent, ?float &$basisAmount, ?string &$reasonCode, ?string &$reason): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $allowanceCharge = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getSpecifiedTradeAllowanceCharge", []));
+        $allowanceCharge = $allowanceCharge[$this->positionAllowanceChargePointer];
+
+        $actualAmount = $this->getInvoiceValueByPathFrom($allowanceCharge, "getActualAmount.value", 0.0);
+        $isCharge = $this->getInvoiceValueByPathFrom($allowanceCharge, "getChargeIndicator.getIndicator", false);
+        $calculationPercent = $this->getInvoiceValueByPathFrom($allowanceCharge, "getCalculationPercent.value", 0.0);
+        $basisAmount = $this->getInvoiceValueByPathFrom($allowanceCharge, "getBasisAmount.value", 0.0);
+        $reason = $this->getInvoiceValueByPathFrom($allowanceCharge, "getReason.value", "");
+        $reasonCode = $this->getInvoiceValueByPathFrom($allowanceCharge, "getReasonCode.value", "");
+
+        return $this;
+    }
+
+    /**
+     * Get detailed information on item totals
+     *
+     * @param  float|null $lineTotalAmount
+     * The total amount of the invoice item.
+     * __Note:__ This is the "net" amount, that is, excluding sales tax, but including all surcharges
+     * and discounts applicable to the item level, as well as other taxes.
+     * @param  float|null $totalAllowanceChargeAmount
+     * Total amount of item surcharges and discounts
+     * @return ZugferdDocumentReader
+     */
+    public function getDocumentPositionLineSummation(?float &$lineTotalAmount, ?float &$totalAllowanceChargeAmount): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $lineTotalAmount = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getSpecifiedTradeSettlementLineMonetarySummation.getLineTotalAmount.value", 0.0);
+        $totalAllowanceChargeAmount = $this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedLineTradeSettlement.getSpecifiedTradeSettlementLineMonetarySummation.getTotalAllowanceChargeAmount.value", 0.0);
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first document position's product characteristic
+     * Returns true if the first position propduct characteristic is available, otherwise false
+     * You may use it together with getDocumentPositionProductCharacteristic
+     *
+     * @return boolean
+     */
+    public function firstDocumentPositionProductCharacteristic(): bool
+    {
+        $this->positionProductCharacteristicPointer = 0;
+
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $tradeLineItemProductCharacteristic = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getApplicableProductCharacteristic", []));
+
+        return isset($tradeLineItemProductCharacteristic[$this->positionProductCharacteristicPointer]);
+    }
+
+    /**
+     * Seek to the next document position's product characteristic
+     * Returns true if more position propduct characteristics are available, otherwise false
+     * You may use it together with getDocumentPositionProductCharacteristic
+     *
+     * @return boolean
+     */
+    public function nextDocumentPositionProductCharacteristic(): bool
+    {
+        $this->positionProductCharacteristicPointer++;
+
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $tradeLineItemProductCharacteristic = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getApplicableProductCharacteristic", []));
+
+        return isset($tradeLineItemProductCharacteristic[$this->positionProductCharacteristicPointer]);
+    }
+
+    /**
+     * Get extra characteristics to the formerly added product.
+     * Contains information about the characteristics of the goods and services invoiced
+     *
+     * @param  string      $description
+     * The name of the attribute or property of the product such as "Colour"
+     * @param  string      $value
+     * The value of the attribute or property of the product such as "Red"
+     * @param  string|null $typecode
+     * Type of product property (code). The codes must be taken from the
+     * UNTDID 6313 codelist. Available only in the Extended-Profile
+     * @param  float|null  $valueMeasure
+     * Value of the product property (numerical measurand)
+     * @param  string|null $valueMeasureUnitCode
+     * Unit of measurement of the measurand
+     *  - Codeliste: Rec. NÂ°20 VollstÃ€ndige Liste, In Recommendation NÂ°20 Intro 2.a ist beschrieben, dass
+     *    beide Listen kombiniert anzuwenden sind.
+     *  - Codeliste: Rec. NÂ°21 VollstÃ€ndige Liste, In Recommendation NÂ°20 Intro 2.a ist beschrieben, dass
+     *    beide Listen kombiniert anzuwenden sind.
+     * @return ZugferdDocumentBuilder
+     */
+    public function getDocumentPositionProductCharacteristic(?string &$description, ?string &$value, ?string &$typecode, ?float &$valueMeasure, ?string &$valueMeasureUnitCode): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+        $tradeLineItemProductCharacteristic = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getApplicableProductCharacteristic", []));
+        $tradeLineItemProductCharacteristic = $tradeLineItemProductCharacteristic[$this->positionProductCharacteristicPointer];
+
+        $description = $this->getInvoiceValueByPathFrom($tradeLineItemProductCharacteristic, "getDescription.value", "");
+        $value = $this->getInvoiceValueByPathFrom($tradeLineItemProductCharacteristic, "getValue.value", "");
+        $typecode = $this->getInvoiceValueByPathFrom($tradeLineItemProductCharacteristic, "getTypeCode.value", "");
+        $valueMeasure = $this->getInvoiceValueByPathFrom($tradeLineItemProductCharacteristic, "getValueMeasure.value", 0.0);
+        $valueMeasureUnitCode = $this->getInvoiceValueByPathFrom($tradeLineItemProductCharacteristic, "getValueMeasure.getUnitCode", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first document position's product classification
+     * Returns true if the first position propduct classification is available, otherwise false
+     * You may use it together with getDocumentPositionProductClassification
+     *
+     * @return boolean
+     */
+    public function firstDocumentPositionProductClassification(): bool
+    {
+        $this->positionProductClassificationPointer = 0;
+
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $tradeLineItemProductClassification = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getDesignatedProductClassification", []));
+
+        return isset($tradeLineItemProductClassification[$this->positionProductClassificationPointer]);
+    }
+
+    /**
+     * Seek to the next document position's product classification
+     * Returns true if more position propduct classifications are available, otherwise false
+     * You may use it together with getDocumentPositionProductClassification
+     *
+     * @return boolean
+     */
+    public function nextDocumentPositionProductClassification(): bool
+    {
+        $this->positionProductClassificationPointer++;
+
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $tradeLineItemProductClassification = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getDesignatedProductClassification", []));
+
+        return isset($tradeLineItemProductClassification[$this->positionProductClassificationPointer]);
+    }
+
+    /**
+     * Get detailed information on product classification
+     *
+     * @param  string      $classCode
+     * A code for classifying the item by type or nature or essence or condition.
+     * __Note__: Classification codes are used to group similar items for different purposes, such as public
+     * procurement (using the Common Procurement Vocabulary [CPV]), e-commerce (UNSPSC), etc.
+     * @param  string|null $className
+     * Classification name
+     * @param  string|null $listID
+     * The identifier for the identification scheme of the identifier of the article classification
+     * __Note__: The identification scheme must be selected from the entries from UNTDID 7143.
+     * @param  string|null $listVersionID
+     * The version of the identification scheme
+     * @return ZugferdDocumentBuilder
+     */
+    public function getDocumentPositionProductClassification(?string &$classCode, ?string &$className, ?string &$listID, ?string &$listVersionID): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+        $tradeLineItemProductClassification = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getDesignatedProductClassification", []));
+        $tradeLineItemProductClassification = $tradeLineItemProductClassification[$this->positionProductClassificationPointer];
+
+        $classCode = $this->getInvoiceValueByPathFrom($tradeLineItemProductClassification, "getClassCode.value", "");
+        $className = $this->getInvoiceValueByPathFrom($tradeLineItemProductClassification, "getClassName.value", "");
+        $listID = $this->getInvoiceValueByPathFrom($tradeLineItemProductClassification, "getClassCode.getListID", "");
+        $listVersionID = $this->getInvoiceValueByPathFrom($tradeLineItemProductClassification, "getClassCode.getListVersionID", "");
+
+        return $this;
+    }
+
+    /**
+     * Seek to the first document position's referenced product
+     * Returns true if the first position referenced product is available, otherwise false
+     * You may use it together with getDocumentPositionReferencedProduct
+     *
+     * @return boolean
+     */
+    public function firstDocumentPositionReferencedProduct(): bool
+    {
+        $this->positionReferencedProductPointer = 0;
+
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $tradeLineItemReferencedProduct = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getIncludedReferencedProduct", []));
+
+        return isset($tradeLineItemReferencedProduct[$this->positionReferencedProductPointer]);
+    }
+
+    /**
+     * Seek to the next document position's referenced product
+     * Returns true if more position referenced products are available, otherwise false
+     * You may use it together with getDocumentPositionReferencedProduct
+     *
+     * @return boolean
+     */
+    public function nextDocumentPositionReferencedProduct(): bool
+    {
+        $this->positionReferencedProductPointer++;
+
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+
+        $tradeLineItemReferencedProduct = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getIncludedReferencedProduct", []));
+
+        return isset($tradeLineItemReferencedProduct[$this->positionReferencedProductPointer]);
+    }
+
+    /**
+     * Get detailed information on included products. This information relates to the
+     * product that has just been added
+     *
+     * @param  string $name
+     * Item name
+     * @param  string $description
+     * Item description
+     * @param  string $sellerAssignedID
+     * Item number of the seller
+     * @param  string $buyerAssignedID
+     * Item number of the buyer
+     * __Note__: The identifier of the product is a unique, bilaterally agreed identification of the
+     * product. It can, for example, be the customer article number or the article number assigned by
+     * the manufacturer.
+     * @param  array $globalID
+     * Array of the global ids indexed by the identification scheme. The identification scheme results
+     * from the list published by the ISO/IEC 6523 Maintenance Agency. In particular, the following scheme
+     * codes are used: 0021 : SWIFT, 0088 : EAN, 0060 : DUNS, 0177 : ODETTE
+     * @param  float  $unitQuantity
+     * Included quantity
+     * @param  string $unitCode
+     * Unit of measurement of the included quantity
+     * @return ZugferdDocumentBuilder
+     */
+    public function getDocumentPositionReferencedProduct(?string &$name, ?string &$description, ?string &$sellerAssignedID, ?string &$buyerAssignedID, ?array &$globalID, ?float &$unitQuantity, ?string &$unitCode): ZugferdDocumentReader
+    {
+        $tradeLineItem = $this->getInvoiceValueByPath("getSupplyChainTradeTransaction.getIncludedSupplyChainTradeLineItem", []);
+        $tradeLineItem = $tradeLineItem[$this->positionPointer];
+        $tradeLineItemReferencedProduct = $this->getObjectHelper()->ensureArray($this->getInvoiceValueByPathFrom($tradeLineItem, "getSpecifiedTradeProduct.getIncludedReferencedProduct", []));
+        $tradeLineItemReferencedProduct = $tradeLineItemReferencedProduct[$this->positionReferencedProductPointer];
+
+        $name = $this->getInvoiceValueByPathFrom($tradeLineItemReferencedProduct, "getName.value", "");
+        $description = $this->getInvoiceValueByPathFrom($tradeLineItemReferencedProduct, "getDescription.value", "");
+        $sellerAssignedID = $this->getInvoiceValueByPathFrom($tradeLineItemReferencedProduct, "getSellerAssignedID.value", "");
+        $buyerAssignedID = $this->getInvoiceValueByPathFrom($tradeLineItemReferencedProduct, "getBuyerAssignedID.value", "");
+        $unitQuantity = $this->getInvoiceValueByPathFrom($tradeLineItemReferencedProduct, "getUnitQuantity.value", 0);
+        $unitCode = $this->getInvoiceValueByPathFrom($tradeLineItemReferencedProduct, "getUnitQuantity.getUnitCode", "");
+        $globalID = $this->getInvoiceValueByPathFrom($tradeLineItemReferencedProduct, "getGlobalID", []);
+        $globalID = $this->convertToAssociativeArray($globalID, "getSchemeID", "value");
+
+        return $this;
+    }
+
+    //TODO: Seeker for documents position TradeAccountingAccount
+
+    /**
+     * Function to return a value from $invoiceObject by path
+     *
+     * @codeCoverageIgnore
+     *
+     * @param  string $methods
+     * @param  mixed  $defaultValue
+     * @return mixed
+     */
+    private function getInvoiceValueByPath(string $methods, $defaultValue)
+    {
+        return $this->getInvoiceValueByPathFrom($this->getInvoiceObject(), $methods, $defaultValue);
+    }
+
+    /**
+     * Function to return a value from $from by path
+     *
+     * @codeCoverageIgnore
+     *
+     * @param  object|null $from
+     * @param  string      $methods
+     * @param  mixed       $defaultValue
+     * @return mixed
+     */
+    private function getInvoiceValueByPathFrom(?object $from, string $methods, $defaultValue)
+    {
+        return $this->getObjectHelper()->tryCallByPathAndReturn($from, $methods) ?? $defaultValue;
+    }
+
+    /**
+     * Convert to array
+     *
+     * @codeCoverageIgnore
+     *
+     * @param  mixed $value
+     * @param  array $methods
+     * @return array
+     */
+    private function convertToArray($value, array $methods)
+    {
+        $result = [];
+        $isFlat = count($methods) == 1;
+        $value = $this->getObjectHelper()->ensureArray($value);
+
+        foreach ($value as $valueItem) {
+            $resultItem = [];
+
+            foreach ($methods as $methodKey => $method) {
+                if (is_array($method)) {
+                    $defaultValue = $method[1];
+                    $method = $method[0];
+                } else {
+                    $defaultValue = null;
+                }
+
+                if ($method instanceof Closure) {
+                    $itemValue = $method($valueItem);
+                } else {
+                    $itemValue = $this->getObjectHelper()->tryCallByPathAndReturn($valueItem, $method) ?? $defaultValue;
+                }
+
+                if ($isFlat === true) {
+                    $result[] = $itemValue;
+                } else {
+                    $resultItem[$methodKey] = $itemValue;
+                }
+            }
+
+            if ($isFlat !== true) {
+                $result[] = $resultItem;
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Convert to associative array
+     *
+     * @codeCoverageIgnore
+     *
+     * @param  mixed  $value
+     * @param  string $methodKey
+     * @param  string $methodValue
+     * @return array
+     */
+    private function convertToAssociativeArray($value, string $methodKey, string $methodValue)
+    {
+        $result = [];
+        $value = $this->getObjectHelper()->ensureArray($value);
+
+        foreach ($value as $valueItem) {
+            $theValueForKey = $this->getObjectHelper()->tryCallByPathAndReturn($valueItem, $methodKey);
+            $theValueForValue = $this->getObjectHelper()->tryCallByPathAndReturn($valueItem, $methodValue);
+
+            if (!ZugferdObjectHelper::isNullOrEmpty($theValueForKey) && !ZugferdObjectHelper::isNullOrEmpty($theValueForValue)) {
+                $result[$theValueForKey] = $theValueForValue;
+            }
+        }
+
+        return $result;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdDocumentValidator.php	(revision 8435)
@@ -0,0 +1,109 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use horstoeko\stringmanagement\PathUtils;
+use horstoeko\zugferd\ZugferdSettings;
+use Symfony\Component\Validator\ConstraintViolationListInterface;
+use Symfony\Component\Validator\Validation;
+
+/**
+ * Class representing the document validator for incoming documents
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdDocumentValidator
+{
+    /**
+     * The invoice document reference
+     *
+     * @var ZugferdDocument
+     */
+    private $document;
+
+    /**
+     * The validator instance
+     *
+     * @var \Symfony\Component\Validator\Validator\ValidatorInterface;
+     */
+    private $validator = null;
+
+    /**
+     * Constructor
+     *
+     * @codeCoverageIgnore
+     * @param              ZugferdDocument $document
+     */
+    public function __construct(ZugferdDocument $document)
+    {
+        $this->document = $document;
+        $this->initValidator();
+    }
+
+    /**
+     * Perform the validation of the document
+     *
+     * @return ConstraintViolationListInterface
+     */
+    public function validateDocument(): ConstraintViolationListInterface
+    {
+        return $this->validator->validate($this->document->getInvoiceObject(), null, ['xsd_rules']);
+    }
+
+    /**
+     * Initialize the internal validator object
+     *
+     * @codeCoverageIgnore
+     * @return             void
+     */
+    private function initValidator(): void
+    {
+        $validatorBuilder = Validation::createValidatorBuilder();
+
+        $validatorYamlFiles = PathUtils::combinePathWithFile(
+            PathUtils::combineAllPaths(
+                ZugferdSettings::getValidationDirectory(),
+                $this->document->getProfileDefinitionParameter('name')
+            ),
+            '*.yml'
+        );
+
+        $validatorYamlFiles = $this->globRecursive($validatorYamlFiles);
+
+        foreach ($validatorYamlFiles as $validatorYamlFile) {
+            $validatorBuilder->addYamlMapping($validatorYamlFile);
+        }
+
+        $this->validator = $validatorBuilder->getValidator();
+    }
+
+    /**
+     * Helper for find all files by pattern
+     *
+     * @codeCoverageIgnore
+     * @param              string  $pattern
+     * @param              integer $flags
+     * @return             array
+     */
+    private function globRecursive(string $pattern, int $flags = 0): array
+    {
+        $files = glob($pattern, $flags);
+
+        foreach (glob(dirname($pattern) . '/*', GLOB_ONLYDIR | GLOB_NOSORT) as $dir) {
+            $files = array_merge($files, $this->globRecursive($dir . '/' . basename($pattern), $flags));
+        }
+
+        return $files;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdKositValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdKositValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdKositValidator.php	(revision 8435)
@@ -0,0 +1,873 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use DOMDocument;
+use DOMXPath;
+use Exception;
+use horstoeko\stringmanagement\FileUtils;
+use horstoeko\stringmanagement\PathUtils;
+use horstoeko\stringmanagement\StringUtils;
+use Symfony\Component\Process\ExecutableFinder;
+use Symfony\Component\Process\Process;
+use Throwable;
+use ZipArchive;
+
+/**
+ * Class representing the validator against Schematron (Kosit) for documents
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdKositValidator
+{
+    /**
+     * The invoice document reference
+     *
+     * @var ZugferdDocument
+     */
+    private $document = null;
+
+    /**
+     * Internal message bag
+     *
+     * @var array
+     */
+    private $messageBag = [];
+
+    /**
+     * Base directory (download)
+     *
+     * @var string
+     */
+    private $baseDirectory;
+
+    /**
+     * Kosit Validator download url
+     *
+     * @var string
+     */
+    private $validatorDownloadUrl = "https://github.com/itplr-kosit/validator/releases/download/v1.5.0/validator-1.5.0-distribution.zip";
+
+    /**
+     * Kosit Validator scenarios download url
+     *
+     * @var string
+     */
+    private $validatorScenarioDownloadUrl = "https://github.com/itplr-kosit/validator-configuration-xrechnung/releases/download/release-2023-11-15/validator-configuration-xrechnung_3.0.1_2023-11-15.zip";
+
+    /**
+     * The filename of the validation application zip archive
+     *
+     * @var string $validatorAppZipFilename
+     */
+    private $validatorAppZipFilename = "validator.zip";
+
+    /**
+     * The filename of the validation scenario zip archive
+     *
+     * @var string $validatorScenarioZipFilename
+     */
+    private $validatorScenarioZipFilename = "validator-configuration.zip";
+
+    /**
+     * The java application filename
+     *
+     * @var string $validatorAppJarFilename
+     */
+    private $validatorAppJarFilename = "validationtool-1.5.0-standalone.jar";
+
+    /**
+     * The java application scenario filename
+     *
+     * @var string
+     */
+    private $validatorAppScenarioFilename = "scenarios.xml";
+
+    /**
+     * The temporary filename which contains the xml data to validate
+     *
+     * @var string
+     */
+    private $fileToValidateFilename = "filetovalidate.xml";
+
+    /**
+     * Internal flag which indicates that the cleanup of the base directory is disables
+     *
+     * @var boolean
+     */
+    private $cleanupBaseDirectoryIsDisabled = false;
+
+    /**
+     * Message Type "Internal Error"
+     */
+    private const MSG_TYPE_INTERNALERROR = 'internalerror';
+
+    /**
+     * Message Type "Validation Error"
+     */
+    private const MSG_TYPE_VALIDATIONERROR = 'validationerror';
+
+    /**
+     * Message Type "Validation Warning"
+     */
+    private const MSG_TYPE_VALIDATIONWARNING = 'validationwarning';
+
+    /**
+     * Message Type "Validation info"
+     */
+    private const MSG_TYPE_VALIDATIONINFORMATION = 'validationinformation';
+
+    /**
+     * Message Type "Process Output"
+     */
+    private const MSG_TYPE_PROCESSOUTPUT = 'processoutput';
+
+    /**
+     * Constructor
+     *
+     * @codeCoverageIgnore
+     * @param              ZugferdDocument|null $document
+     */
+    public function __construct(?ZugferdDocument $document = null)
+    {
+        $this->document = $document;
+        $this->baseDirectory = sys_get_temp_dir();
+    }
+
+    /**
+     * Set the ZugferdDocument instance to validate
+     *
+     * @param  ZugferdDocument $document
+     * @return ZugferdKositValidator
+     */
+    public function setDocument(ZugferdDocument $document): ZugferdKositValidator
+    {
+        $this->document = $document;
+
+        return $this;
+    }
+
+    /**
+     * Setup the base directory. In the base directory all files will be downloaded
+     * and created
+     *
+     * @param  string $newBaseDirectory
+     * @return ZugferdKositValidator
+     */
+    public function setBaseDirectory(string $newBaseDirectory): ZugferdKositValidator
+    {
+        if (is_dir($newBaseDirectory)) {
+            $this->baseDirectory = $newBaseDirectory;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Setup the KOSIT validator application download url
+     *
+     * @param  string $newValidatorDownloadUrl
+     * @return ZugferdKositValidator
+     */
+    public function setValidatorDownloadUrl(string $newValidatorDownloadUrl): ZugferdKositValidator
+    {
+        if (filter_var($newValidatorDownloadUrl, FILTER_VALIDATE_URL) !== false) {
+            $this->validatorDownloadUrl = $newValidatorDownloadUrl;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Setup the KOSIT validator scenario download url
+     *
+     * @param  string $newValidatorScenarioDownloadUrl
+     * @return ZugferdKositValidator
+     */
+    public function setValidatorScenarioDownloadUrl(string $newValidatorScenarioDownloadUrl): ZugferdKositValidator
+    {
+        if (filter_var($newValidatorScenarioDownloadUrl, FILTER_VALIDATE_URL) !== false) {
+            $this->validatorScenarioDownloadUrl = $newValidatorScenarioDownloadUrl;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Set the filename of the ZIP file which contains the validation application
+     *
+     * @param  string $newValidatorAppZipFilename
+     * @return ZugferdKositValidator
+     */
+    public function setValidatorAppZipFilename(string $newValidatorAppZipFilename): ZugferdKositValidator
+    {
+        $this->validatorAppZipFilename = $newValidatorAppZipFilename;
+
+        return $this;
+    }
+
+    /**
+     * Set the filename of the ZIP file which contains the validation scenarios
+     *
+     * @param  string $newValidatorScenarioZipFilename
+     * @return ZugferdKositValidator
+     */
+    public function setValidatorScenarioZipFilename(string $newValidatorScenarioZipFilename): ZugferdKositValidator
+    {
+        $this->validatorScenarioZipFilename = $newValidatorScenarioZipFilename;
+
+        return $this;
+    }
+
+    /**
+     * Set the filename of the applications JAR
+     *
+     * @param  string $newValidatorAppJarFilename
+     * @return ZugferdKositValidator
+     */
+    public function setValidatorAppJarFilename(string $newValidatorAppJarFilename): ZugferdKositValidator
+    {
+        $this->validatorAppJarFilename = $newValidatorAppJarFilename;
+
+        return $this;
+    }
+
+    /**
+     * Set the filename of the application scenario file
+     *
+     * @param  string $newValidatorAppScenarioFilename
+     * @return ZugferdKositValidator
+     */
+    public function setValidatorAppScenarioFilename(string $newValidatorAppScenarioFilename): ZugferdKositValidator
+    {
+        $this->validatorAppScenarioFilename = $newValidatorAppScenarioFilename;
+
+        return $this;
+    }
+
+    /**
+     * Set the filename of the file which contains the temporary xml data to validate
+     *
+     * @param  string $newFileToValidateFilename
+     * @return ZugferdKositValidator
+     */
+    public function setFileToValidateFilename(string $newFileToValidateFilename): ZugferdKositValidator
+    {
+        $this->fileToValidateFilename = $newFileToValidateFilename;
+
+        return $this;
+    }
+
+    /**
+     * Disable cleanup base directory
+     *
+     * @return ZugferdKositValidator
+     */
+    public function disableCleanup(): ZugferdKositValidator
+    {
+        $this->cleanupBaseDirectoryIsDisabled = true;
+
+        return $this;
+    }
+
+    /**
+     * Enable cleanup base directory
+     *
+     * @return ZugferdKositValidator
+     */
+    public function enableCleanup(): ZugferdKositValidator
+    {
+        $this->cleanupBaseDirectoryIsDisabled = false;
+
+        return $this;
+    }
+
+    /**
+     * Perform validation
+     *
+     * @return ZugferdKositValidator
+     */
+    public function validate(): ZugferdKositValidator
+    {
+        $this->clearMessageBag();
+
+        if ($this->checkRequirements() === false) {
+            return $this;
+        }
+
+        if ($this->downloadRequiredFiles() === false) {
+            $this->cleanupBaseDirectory();
+            return $this;
+        }
+
+        if ($this->unpackRequiredFiles() === false) {
+            $this->cleanupBaseDirectory();
+            return $this;
+        }
+
+        $this->performValidation();
+
+        $this->cleanupBaseDirectory();
+
+        return $this;
+    }
+
+    /**
+     * Internal get (and create) the directory for downloads and file creation
+     *
+     * @return string
+     */
+    private function resolveBaseDirectory(): string
+    {
+        $baseDirectorySuffix = md5($this->validatorDownloadUrl . $this->validatorScenarioDownloadUrl);
+
+        $baseDirectory = PathUtils::combinePathWithPath($this->baseDirectory, sprintf("kositvalidator-%s", $baseDirectorySuffix));
+
+        if (!is_dir($baseDirectory)) {
+            @mkdir($baseDirectory);
+        }
+
+        return $baseDirectory;
+    }
+
+    /**
+     * Get the full filename of the archive to download which contains the Java validation application
+     *
+     * @return string
+     */
+    private function resolveAppZipFilename(): string
+    {
+        return PathUtils::combinePathWithFile($this->resolveBaseDirectory(), $this->validatorAppZipFilename);
+    }
+
+    /**
+     * Get the full filename of the archive to download which contains the Java validation application scenarios
+     *
+     * @return string
+     */
+    public function resolveScenatioZipFilename(): string
+    {
+        return PathUtils::combinePathWithFile($this->resolveBaseDirectory(), $this->validatorScenarioZipFilename);
+    }
+
+    /**
+     * Get the full filename of the validator application jar file
+     *
+     * @return string
+     */
+    private function resolveAppJarFilename(): string
+    {
+        return PathUtils::combineAllPaths($this->resolveBaseDirectory(), $this->validatorAppJarFilename);
+    }
+
+    /**
+     * Get the full filename of the validator application scenario file
+     *
+     * @return string
+     */
+    private function resolveAppScenarioFilename(): string
+    {
+        return PathUtils::combinePathWithFile($this->resolveBaseDirectory(), $this->validatorAppScenarioFilename);
+    }
+
+    /**
+     * Get the full filename which contains the xml to validate
+     *
+     * @return string
+     */
+    private function resolveFileToValidateFilename(): string
+    {
+        return PathUtils::combinePathWithFile($this->resolveBaseDirectory(), $this->fileToValidateFilename);
+    }
+
+    /**
+     * Clear the internal error bag
+     *
+     * @return void
+     */
+    private function clearMessageBag(): void
+    {
+        $this->messageBag = [];
+    }
+
+    /**
+     * Add message to error bag
+     *
+     * @param  string|Exception|Throwable $error
+     * @return void
+     */
+    private function addToMessageBag($error, string $messageType = ""): void
+    {
+        $messageType = StringUtils::stringIsNullOrEmpty($messageType) ? static::MSG_TYPE_INTERNALERROR : $messageType;
+
+        if (is_string($error)) {
+            $this->messageBag[] = ["type" => $messageType, "message" => $error];
+        } elseif ($error instanceof Exception) {
+            $this->messageBag[] = ["type" => $messageType, "message" => $error->getMessage()];
+        } elseif ($error instanceof Throwable) {
+            $this->messageBag[] = ["type" => $messageType, "message" => $error->getMessage()];
+        }
+    }
+
+    /**
+     * Get messages from messagebag filtered by message type
+     *
+     * @param string $messageType
+     * @return array
+     */
+    private function getMessageBagFiltered(string $messageType): array
+    {
+        return array_map(
+            function ($data) {
+                return $data["message"];
+            },
+            array_filter(
+                $this->messageBag,
+                function ($data) use ($messageType) {
+                    return $data['type'] == $messageType;
+                }
+            )
+        );
+    }
+
+    /**
+     * Returns an array of all validation errors
+     *
+     * @return array
+     */
+    public function getValidationErrors(): array
+    {
+        return $this->getMessageBagFiltered(static::MSG_TYPE_VALIDATIONERROR);
+    }
+
+    /**
+     * Returns true if __no__ validation errors are present otherwise false
+     *
+     * @return boolean
+     */
+    public function hasNoValidationErrors(): bool
+    {
+        return empty($this->getValidationErrors());
+    }
+
+    /**
+     * Returns true if validation errors are present otherwise false
+     *
+     * @return boolean
+     */
+    public function hasValidationErrors(): bool
+    {
+        return !$this->hasNoValidationErrors();
+    }
+
+    /**
+     * Returns an array of all validation warnings
+     *
+     * @return array
+     */
+    public function getValidationWarnings(): array
+    {
+        return $this->getMessageBagFiltered(static::MSG_TYPE_VALIDATIONWARNING);
+    }
+
+    /**
+     * Returns true if __no__ validation warnings are present otherwise false
+     *
+     * @return boolean
+     */
+    public function hasNoValidationWarnings(): bool
+    {
+        return empty($this->getValidationWarnings());
+    }
+
+    /**
+     * Returns true if validation warnings are present otherwise false
+     *
+     * @return boolean
+     */
+    public function hasValidationWarnings(): bool
+    {
+        return !$this->hasNoValidationWarnings();
+    }
+
+    /**
+     * Returns an array of all validation information
+     *
+     * @return array
+     */
+    public function getValidationInformation(): array
+    {
+        return $this->getMessageBagFiltered(static::MSG_TYPE_VALIDATIONINFORMATION);
+    }
+
+    /**
+     * Returns true if __no__ validation information are present otherwise false
+     *
+     * @return boolean
+     */
+    public function hasNoValidationInformation(): bool
+    {
+        return empty($this->getValidationInformation());
+    }
+
+    /**
+     * Returns true if validation Information are present otherwise false
+     *
+     * @return boolean
+     */
+    public function hasValidationInformation(): bool
+    {
+        return !$this->hasNoValidationInformation();
+    }
+
+    /**
+     * Return an array of all internal errors (such as download error or system exceptions)
+     *
+     * @return array
+     */
+    public function getProcessErrors(): array
+    {
+        return $this->getMessageBagFiltered(static::MSG_TYPE_INTERNALERROR);
+    }
+
+    /**
+     * Returns true if there are __no__ system errors (e.g. exceptions before the validation app was called)
+     *
+     * @return boolean
+     */
+    public function hasNoProcessErrors(): bool
+    {
+        return empty($this->getProcessErrors());
+    }
+
+    /**
+     * Returns true if there are any system errors (e.g. exceptions before the validation app was called)
+     *
+     * @return boolean
+     */
+    public function hasProcessErrors(): bool
+    {
+        return !$this->hasNoProcessErrors();
+    }
+
+    /**
+     * Returns an array of all messages from process system (calling external applications)
+     *
+     * @return array
+     */
+    public function getProcessOutput(): array
+    {
+        return $this->getMessageBagFiltered(static::MSG_TYPE_PROCESSOUTPUT);
+    }
+
+    /**
+     * Check Requirements
+     *
+     * @return boolean
+     */
+    private function checkRequirements(): bool
+    {
+        if (is_null($this->document)) {
+            $this->addToMessageBag("You must specify an instance of the ZugferdDocument class");
+            return false;
+        }
+
+        if (!extension_loaded('zip')) {
+            $this->addToMessageBag("ZIP extension not installed");
+            return false;
+        }
+
+        $executeableFinder = new ExecutableFinder();
+
+        if (is_null($executeableFinder->find('java'))) {
+            $this->addToMessageBag("JAVA not installed on this machine");
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Download required files
+     *
+     * @return boolean
+     */
+    private function downloadRequiredFiles(): bool
+    {
+        if (!$this->runFileDownload($this->validatorDownloadUrl, $this->resolveAppZipFilename())) {
+            return false;
+        }
+
+        if (!$this->runFileDownload($this->validatorScenarioDownloadUrl, $this->resolveScenatioZipFilename())) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Unpack required files
+     *
+     * @return boolean
+     */
+    private function unpackRequiredFiles(): bool
+    {
+        $validatorAppFile = $this->resolveAppZipFilename();
+        $validatorScenarioFile = $this->resolveScenatioZipFilename();
+
+        if ($this->unpackRequiredFile($validatorAppFile) !== true) {
+            $this->addToMessageBag("Unable to unpack archive $validatorAppFile containing the JAVA-Application");
+            return false;
+        }
+
+        if ($this->unpackRequiredFile($validatorScenarioFile) !== true) {
+            $this->addToMessageBag("Unable to unpack archive $validatorScenarioFile containing the validation scenarios");
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Unpack single required file
+     *
+     * @param  string $filename
+     * @return boolean
+     */
+    private function unpackRequiredFile(string $filename): bool
+    {
+        $zip = new ZipArchive();
+
+        if ($zip->open($filename) !== true) {
+            return false;
+        }
+
+        $numFilesExists = 0;
+
+        for ($i = 0; $i < $zip->numFiles; $i++) {
+            $zipStat = $zip->statIndex($i);
+            $realfilename = PathUtils::combinePathWithFile($this->resolveBaseDirectory(), $zipStat['name']);
+            if (file_exists($realfilename)) {
+                $numFilesExists++;
+            }
+        }
+
+        if ($numFilesExists == $zip->numFiles) {
+            return true;
+        }
+
+        if ($zip->extractTo($this->resolveBaseDirectory()) !== true) {
+            $zip->close();
+            return false;
+        }
+
+        $zip->close();
+
+        return true;
+    }
+
+    /**
+     * Runs the validator java application
+     *
+     * @return boolean
+     */
+    private function performValidation(): bool
+    {
+        if (file_put_contents($this->resolveFileToValidateFilename(), $this->document->serializeAsXml()) === false) {
+            $this->addToMessageBag("Cannot create temporary file which contains the XML to validate");
+            return false;
+        }
+
+        $applicationOptions = [
+            'java',
+            '-jar',
+            $this->resolveAppJarFilename(),
+            '-r',
+            $this->resolveBaseDirectory(),
+            '-s',
+            $this->resolveAppScenarioFilename(),
+            $this->resolveFileToValidateFilename()
+        ];
+
+        if (!$this->runValidationApplication($applicationOptions, $this->resolveBaseDirectory())) {
+            $this->parseValidatorXmlReport();
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Parses the XML report from the validation app (JAVA application) and put errors
+     * to messagebag
+     *
+     * @return void
+     */
+    private function parseValidatorXmlReport(): void
+    {
+        $reportFilename =
+            PathUtils::combinePathWithFile(
+                $this->resolveBaseDirectory(),
+                FileUtils::getFilenameWithoutExtension($this->resolveFileToValidateFilename()) . '-report.xml'
+            );
+
+        if (!file_exists($reportFilename)) {
+            return;
+        }
+
+        $domDocument = new DOMDocument();
+        $domDocument->load($reportFilename);
+
+        $domXPath = new DOMXPath($domDocument);
+
+        $messageTypeMaps = [
+            static::MSG_TYPE_VALIDATIONERROR => 'error',
+            static::MSG_TYPE_VALIDATIONWARNING => 'warning',
+            static::MSG_TYPE_VALIDATIONINFORMATION => 'information',
+        ];
+
+        $resultAreas = [
+            'val-xsd',
+            'val-sch.1',
+            'val-xml',
+        ];
+
+        foreach ($resultAreas as $resultArea) {
+            $queryResult = $domXPath->query("//rep:report/rep:scenarioMatched/rep:validationStepResult[@id='$resultArea']/s:resource/s:name");
+            $resourceName = isset($queryResult[0]) ? $queryResult[0]->nodeValue : $resultArea;
+            foreach ($messageTypeMaps as $messageType => $reportMessageType) {
+                $queryResult = $domXPath->query("//rep:report/rep:scenarioMatched/rep:validationStepResult[@id='$resultArea']/rep:message[@level='$reportMessageType']");
+                foreach ($queryResult as $queryItem) {
+                    $this->addToMessageBag(sprintf("%s: %s", $resourceName, $queryItem->nodeValue), $messageType);
+                }
+            }
+        }
+    }
+
+    /**
+     * Cleanup downloads and created files
+     *
+     * @return void
+     */
+    private function cleanupBaseDirectory(): void
+    {
+        if ($this->cleanupBaseDirectoryIsDisabled === true) {
+            return;
+        }
+
+        if (!is_dir($this->resolveBaseDirectory())) {
+            return;
+        }
+
+        $this->cleanupBaseDirectoryInternal($this->resolveBaseDirectory());
+    }
+
+    /**
+     * Helper method for removeBaseDirectory
+     *
+     * @param  string $directoryToRemove
+     * @return void
+     */
+    private function cleanupBaseDirectoryInternal(string $directoryToRemove): void
+    {
+        if (!is_dir($directoryToRemove)) {
+            return;
+        }
+
+        $objects = scandir($directoryToRemove);
+
+        foreach ($objects as $object) {
+            if ($object != "." && $object != "..") {
+                $fullFilename = PathUtils::combinePathWithFile($directoryToRemove, $object);
+                if (is_dir($fullFilename) && !is_link($fullFilename)) {
+                    $this->cleanupBaseDirectoryInternal($fullFilename);
+                } else {
+                    unlink($fullFilename);
+                }
+            }
+        }
+
+        rmdir($directoryToRemove);
+    }
+
+    /**
+     * Runs a process. If the process runned successfully this method
+     * returns true, otherwise false
+     *
+     * @param  array  $command
+     * @param  string $workingdirectory
+     * @param  string $processOutput
+     * @return boolean
+     */
+    private function runValidationApplication(array $command, string $workingdirectory): bool
+    {
+        try {
+            $process = new Process($command);
+            $process->setTimeout(0.0);
+            $process->setWorkingDirectory($workingdirectory);
+            $process->run();
+
+            foreach (preg_split("/\r\n|\n|\r/", $process->getOutput()) as $outputLine) {
+                $this->addToMessageBag($outputLine, static::MSG_TYPE_PROCESSOUTPUT);
+            }
+
+            if (!$process->isSuccessful()) {
+                if ($process->getExitCode() == -1) {
+                    $this->addToMessageBag("Parsing error. The commandline arguments specified are incorrect", static::MSG_TYPE_VALIDATIONERROR);
+                }
+                if ($process->getExitCode() == -2) {
+                    $this->addToMessageBag("Configuration error. There is an error loading the configuration and/or validation targets", static::MSG_TYPE_VALIDATIONERROR);
+                }
+                if ($process->getExitCode() > 0) {
+                    $this->addToMessageBag("Validation error. One ore more files were rejected", static::MSG_TYPE_VALIDATIONERROR);
+                }
+                return false;
+            }
+        } catch (Exception $e) {
+            $this->addToMessageBag($e, static::MSG_TYPE_VALIDATIONERROR);
+            return false;
+        } catch (Throwable $e) {
+            $this->addToMessageBag($e, static::MSG_TYPE_VALIDATIONERROR);
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Run a file download.
+     *
+     * @param  string  $url
+     * @param  string  $toFilePath
+     * @param  boolean $forceOverwrite
+     * @return boolean
+     */
+    private function runFileDownload(string $url, string $toFilePath, bool $forceOverwrite = false): bool
+    {
+        try {
+            if (file_exists($toFilePath) && !$forceOverwrite) {
+                return true;
+            }
+            file_put_contents($toFilePath, file_get_contents($url));
+        } catch (Exception $e) {
+            $this->addToMessageBag($e);
+            return false;
+        } catch (Throwable $e) {
+            $this->addToMessageBag($e);
+            return false;
+        }
+
+        return true;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdObjectHelper.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdObjectHelper.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdObjectHelper.php	(revision 8435)
@@ -0,0 +1,1716 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use DateTime;
+use horstoeko\mimedb\MimeDb;
+use horstoeko\stringmanagement\FileUtils;
+use horstoeko\stringmanagement\StringUtils;
+use horstoeko\zugferd\exception\ZugferdUnknownDateFormatException;
+use horstoeko\zugferd\ZugferdProfileResolver;
+
+/**
+ * Class representing a collection of common helpers and class factories
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdObjectHelper
+{
+    /**
+     * Internal profile id
+     *
+     * @var integer
+     */
+    public $profile = -1;
+
+    /**
+     * Internal profile definition
+     *
+     * @var array
+     */
+    public $profiledef = [];
+
+    /**
+     * A list of supported mimetypes by binaryattachments
+     */
+    const SUPPORTEDTMIMETYPES = [
+        "application/pdf",
+        "image/png",
+        "image/jpeg",
+        "text/csv",
+        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+        "application/vnd.oasis.opendocument.spreadsheet",
+        "application/xml",
+    ];
+
+    /**
+     * Constructor
+     *
+     * @codeCoverageIgnore
+     *
+     * @param integer $profile
+     */
+    public function __construct(int $profile)
+    {
+        $this->profile = $profile;
+        $this->profiledef = ZugferdProfileResolver::resolveProfileDefById($profile);
+    }
+
+    /**
+     * Creates an instance of DocumentCodeType
+     *
+     * @param  string|null $value
+     * @return object|null
+     */
+    public function getDocumentCodeType(?string $value = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        return $this->createClassInstance('qdt\DocumentCodeType', $value);
+    }
+
+    /**
+     * Creates an instance of IDType
+     *
+     * @param  string|null $value
+     * @param  string|null $schemeId
+     * @return object
+     */
+    public function getIdType(?string $value = null, ?string $schemeId = null): ?object
+    {
+        if (self::isNullOrEmpty($value)) {
+            return null;
+        }
+
+        $idType = $this->createClassInstance('udt\IDType', $value);
+
+        $this->tryCall($idType, "setSchemeID", $schemeId);
+
+        return $idType;
+    }
+
+    /**
+     * Creates an instance of TextType
+     *
+     * @param  string|null $value
+     * @return object
+     */
+    public function getTextType(?string $value = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        return $this->createClassInstance('udt\TextType', $value);
+    }
+
+    /**
+     * Creates an instance of CodeType
+     *
+     * @param  string|null $value
+     * @return object|null
+     */
+    public function getCodeType(?string $value = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        return $this->createClassInstance('udt\CodeType', $value);
+    }
+
+    /**
+     * Creates an instance of CodeType with extended list
+     * information
+     *
+     * @param  string|null $value
+     * @param  string|null $listID
+     * @param  string|null $listVersionID
+     * @return object|null
+     */
+    public function getCodeType2(?string $value = null, ?string $listID = null, ?string $listVersionID = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $codetype = $this->createClassInstance('udt\CodeType', $value);
+
+        $this->tryCall($codetype, 'setListID', $listID);
+        $this->tryCall($codetype, 'setListVersionID', $listVersionID);
+
+        return $codetype;
+    }
+
+    /**
+     * Get indicator type
+     *
+     * @param  bool|null $value
+     * @return object|null
+     */
+    public function getIndicatorType(?bool $value = null): ?object
+    {
+        if ($value === null) {
+            return null;
+        }
+
+        $indicator = $this->createClassInstance('udt\IndicatorType');
+
+        $this->tryCall($indicator, 'setIndicator', $value);
+
+        return $indicator;
+    }
+
+    /**
+     * Get Note type
+     *
+     * @param  string|null $content
+     * @param  string|null $contentCode
+     * @param  string|null $subjectCode
+     * @return object|null
+     */
+    public function getNoteType(?string $content = null, ?string $contentCode = null, ?string $subjectCode = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+        if (self::isNullOrEmpty($content)) {
+            return null;
+        }
+
+        $note = $this->createClassInstance('ram\NoteType');
+
+        $this->tryCall($note, 'setContentCode', $this->getCodeType($contentCode));
+        $this->tryCall($note, 'setSubjectCode', $this->getCodeType($subjectCode));
+        $this->tryCall($note, 'setContent', $this->getTextType($content));
+
+        return $note;
+    }
+
+    /**
+     * Get formatted issue date
+     *
+     * @param  DateTime|null $datetime
+     * @return object|null
+     */
+    public function getFormattedDateTimeType(?DateTime $datetime = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $date2 = $this->createClassInstance('qdt\FormattedDateTimeType\DateTimeStringAType');
+        $this->tryCall($date2, "value", $datetime->format("Ymd"));
+        $this->tryCall($date2, "setFormat", "102");
+
+        $date = $this->createClassInstance('qdt\FormattedDateTimeType');
+        $this->tryCall($date, "setDateTimeString", $date2);
+
+        return $date;
+    }
+
+    /**
+     * Get formatted issue date
+     *
+     * @param  DateTime|null $datetime
+     * @return object|null
+     */
+    public function getDateTimeType(?DateTime $datetime = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $date2 = $this->createClassInstance('udt\DateTimeType\DateTimeStringAType');
+        $this->tryCall($date2, "value", $datetime->format("Ymd"));
+        $this->tryCall($date2, "setFormat", "102");
+
+        $date = $this->createClassInstance('udt\DateTimeType');
+        $this->tryCall($date, "setDateTimeString", $date2);
+
+        return $date;
+    }
+
+    /**
+     * Get date
+     *
+     * @param  DateTime|null $datetime
+     * @return object|null
+     */
+    public function getDateType(?DateTime $datetime = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $date2 = $this->createClassInstance('udt\DateType\DateStringAType');
+        $this->tryCall($date2, "value", $datetime->format("Ymd"));
+        $this->tryCall($date2, "setFormat", "102");
+
+        $date = $this->createClassInstance('udt\DateType');
+        $this->tryCall($date, "setDateString", $date2);
+
+        return $date;
+    }
+
+    /**
+     * Representation of Amount
+     *
+     * @param  float|null  $value
+     * @param  string|null $currencyCode
+     * @return object|null
+     */
+    public function getAmountType(?float $value, ?string $currencyCode = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+        if (self::isNullOrEmpty($value)) {
+            return null;
+        }
+
+        $amount = $this->createClassInstance('udt\AmountType');
+
+        $this->tryCall($amount, "value", $value);
+        $this->tryCall($amount, "setCurrencyID", $currencyCode);
+
+        return $amount;
+    }
+
+    /**
+     * Representation of Percdnt
+     *
+     * @param  float|null $value
+     * @return object|null
+     */
+    public function getPercentType(?float $value): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $amount = $this->createClassInstance('udt\PercentType');
+
+        $this->tryCall($amount, "value", $value);
+
+        return $amount;
+    }
+
+    /**
+     * Representation of Quantity
+     *
+     * @param  float|null  $value
+     * @param  string|null $unitCode
+     * @return object|null
+     */
+    public function getQuantityType(?float $value, ?string $unitCode = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+        if (self::isNullOrEmpty($value)) {
+            return null;
+        }
+
+        $amount = $this->createClassInstance('udt\QuantityType');
+
+        $this->tryCall($amount, "value", $value);
+        $this->tryCall($amount, "setUnitCode", $unitCode);
+
+        return $amount;
+    }
+
+    /**
+     * Representation of Quantity Measure
+     *
+     * @param  float|null  $value
+     * @param  string|null $unitCode
+     * @return object|null
+     */
+    public function getMeasureType(?float $value, ?string $unitCode = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+        if (self::isNullOrEmpty($value)) {
+            return null;
+        }
+
+        $measure = $this->createClassInstance('udt\MeasureType');
+
+        $this->tryCall($measure, "value", $value);
+        $this->tryCall($measure, "setUnitCode", $unitCode);
+
+        return $measure;
+    }
+
+    /**
+     * Get an instance of GetNumericType
+     *
+     * @param  float|null $value
+     * @return object|null
+     */
+    public function getNumericType(?float $value = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $numericType = $this->createClassInstance('udt\NumericType');
+
+        $this->tryCall($numericType, 'value', $value);
+
+        return $numericType;
+    }
+
+    /**
+     * Representation of Tax Category
+     *
+     * @param  string|null $taxCategoryCode
+     * @return object|null
+     */
+    public function getTaxCategoryCodeType(?string $taxCategoryCode = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $category = $this->createClassInstance('qdt\TaxCategoryCodeType');
+
+        $this->tryCall($category, "value", $taxCategoryCode);
+
+        return $category;
+    }
+
+    /**
+     * Representation of Tax Type
+     *
+     * @param  string|null $taxTypeCode
+     * @return object|null
+     */
+    public function getTaxTypeCodeType(?string $taxTypeCode = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $category = $this->createClassInstance('qdt\TaxTypeCodeType');
+
+        $this->tryCall($category, "value", $taxTypeCode);
+
+        return $category;
+    }
+
+    /**
+     * Representation of Time Reference Code
+     *
+     * @param  string|null $value
+     * @return object|null
+     */
+    public function getTimeReferenceCodeType(?string $value = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $category = $this->createClassInstance('qdt\TimeReferenceCodeType');
+
+        $this->tryCall($category, "value", $value);
+
+        return $category;
+    }
+
+    /**
+     * Get Specified Period type
+     *
+     * @param  DateTime|null $startdate
+     * @param  DateTime|null $endDate
+     * @param  DateTime|null $completedate
+     * @param  string|null   $description
+     * @return object|null
+     */
+    public function getSpecifiedPeriodType(?DateTime $startdate = null, ?DateTime $endDate = null, ?DateTime $completedate = null, ?string $description = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $period = $this->createClassInstance('ram\SpecifiedPeriodType');
+
+        $this->tryCall($period, 'setDescription', $this->getTextType($description));
+        $this->tryCall($period, 'setStartDateTime', $this->getDateTimeType($startdate));
+        $this->tryCall($period, 'setEndDateTime', $this->getDateTimeType($endDate));
+        $this->tryCall($period, 'setCompleteDateTime', $this->getDateTimeType($completedate));
+
+        return $period;
+    }
+
+    /**
+     * Get a BinaryObjectType object
+     *
+     * @param  string|null $binarydata
+     * @param  string|null $mimetype
+     * @param  string|null $filename
+     * @return object|null
+     */
+    public function getBinaryObjectType(?string $binarydata = null, ?string $mimetype = null, ?string $filename = null): ?object
+    {
+        if (self::isNullOrEmpty($binarydata) || self::isNullOrEmpty($mimetype) || self::isNullOrEmpty($filename)) {
+            return null;
+        }
+
+        $binaryobject = $this->createClassInstance('udt\BinaryObjectType');
+
+        $this->tryCall($binaryobject, "value", $binarydata);
+        $this->tryCall($binaryobject, "setMimeCode", $mimetype);
+        $this->tryCall($binaryobject, "setFilename", $filename);
+
+        return $binaryobject;
+    }
+
+    /**
+     * Get a reference document object
+     *
+     * @param  string|null       $issuerassignedid
+     * @param  string|null       $uriid
+     * @param  string|null       $lineid
+     * @param  string|null       $typecode
+     * @param  string|array|null $name
+     * @param  string|null       $reftypecode
+     * @param  DateTime|null     $issueddate
+     * @param  string|null       $binarydatafilename
+     * @return object|null
+     */
+    public function getReferencedDocumentType(?string $issuerassignedid = null, ?string $uriid = null, ?string $lineid = null, ?string $typecode = null, $name = null, ?string $reftypecode = null, ?DateTime $issueddate = null, ?string $binarydatafilename = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $refdoctype = $this->createClassInstance('ram\ReferencedDocumentType', $issuerassignedid);
+
+        $this->tryCall($refdoctype, 'setIssuerAssignedID', $this->getIdType($issuerassignedid));
+        $this->tryCall($refdoctype, 'setURIID', $this->getIdType($uriid));
+        $this->tryCall($refdoctype, 'setLineID', $this->getIdType($lineid));
+        $this->tryCall($refdoctype, 'setTypeCode', $this->getCodeType($typecode));
+        $this->tryCall($refdoctype, 'setReferenceTypeCode', $this->getCodeType($reftypecode));
+        $this->tryCall($refdoctype, 'setFormattedIssueDateTime', $this->getFormattedDateTimeType($issueddate));
+
+        foreach ($this->ensureStringArray($name) as $name) {
+            $this->tryCallAll($refdoctype, ['addToName', 'setName'], $this->getTextType($name));
+        }
+
+        if (StringUtils::stringIsNullOrEmpty($binarydatafilename) === false) {
+            if (FileUtils::fileExists($binarydatafilename)) {
+                $mimeDb = new MimeDb();
+                $mimeTypes = $mimeDb->findAllMimeTypesByExtension(FileUtils::getFileExtension($binarydatafilename));
+                $mimeTypesSupported = array_intersect($mimeTypes, self::SUPPORTEDTMIMETYPES);
+
+                if (count($mimeTypesSupported) > 0) {
+                    $content = FileUtils::fileToBase64($binarydatafilename);
+                    $this->tryCall(
+                        $refdoctype,
+                        'setAttachmentBinaryObject',
+                        $this->getBinaryObjectType($content, $mimeTypesSupported[0], FileUtils::getFilenameWithExtension($binarydatafilename))
+                    );
+                } else {
+                    throw new \Exception(sprintf("Invalid attachment. Mimetype not supported"));
+                }
+            }
+        }
+
+        return $refdoctype;
+    }
+
+    /**
+     * Get instance of CountryID
+     *
+     * @param  string|null $id
+     * @return object|null
+     */
+    public function getCountryIDType(?string $id = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $countryId = $this->createClassInstance('qdt\CountryIDType', $id);
+
+        return $countryId;
+    }
+
+    /**
+     * Get instance of TradeCountry
+     *
+     * @param  string|null $id
+     * @return object|null
+     */
+    public function getTradeCountryType(?string $id = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $tradeCountry = $this->createClassInstance('ram\TradeCountryType');
+
+        $this->tryCall($tradeCountry, 'setID', $this->getCountryIDType($id));
+
+        return $tradeCountry;
+    }
+
+    /**
+     * Undocumented function
+     *
+     * @return \horstoeko\zugferd\entities\basic\rsm\CrossIndustryInvoiceType|\horstoeko\zugferd\entities\basicwl\rsm\CrossIndustryInvoiceType|\horstoeko\zugferd\entities\en16931\rsm\CrossIndustryInvoiceType|\horstoeko\zugferd\entities\extended\rsm\CrossIndustryInvoiceType
+     */
+    public function getCrossIndustryInvoice()
+    {
+        $result = $this->createClassInstance('rsm\CrossIndustryInvoice');
+        $result->setExchangedDocumentContext($this->createClassInstance('ram\ExchangedDocumentContextType'));
+        $result->setExchangedDocument($this->createClassInstance('ram\ExchangedDocumentType'));
+        $result->setSupplyChainTradeTransaction($this->createClassInstance('ram\SupplyChainTradeTransactionType'));
+        $result->getExchangedDocumentContext()->setGuidelineSpecifiedDocumentContextParameter($this->createClassInstance('ram\DocumentContextParameterType'));
+        $result->getExchangedDocumentContext()->getGuidelineSpecifiedDocumentContextParameter()->setID($this->getIdType($this->profiledef['contextparameter']));
+        if ($this->profiledef['businessprocess']) {
+            $result->getExchangedDocumentContext()->setBusinessProcessSpecifiedDocumentContextParameter($this->createClassInstance('ram\DocumentContextParameterType'));
+            $result->getExchangedDocumentContext()->getBusinessProcessSpecifiedDocumentContextParameter()->setID($this->getIdType($this->profiledef['businessprocess']));
+        }
+        $result->getSupplyChainTradeTransaction()->setApplicableHeaderTradeAgreement($this->createClassInstance('ram\HeaderTradeAgreementType'));
+        $result->getSupplyChainTradeTransaction()->setApplicableHeaderTradeDelivery($this->createClassInstance('ram\HeaderTradeDeliveryType'));
+        $result->getSupplyChainTradeTransaction()->setApplicableHeaderTradeSettlement($this->createClassInstance('ram\HeaderTradeSettlementType'));
+
+        return $result;
+    }
+
+    /**
+     * Tradeparty type^^
+     *
+     * @param  string|null $name
+     * @param  string|null $ID
+     * @param  string|null $description
+     * @return object|null
+     */
+    public function getTradeParty(?string $name = null, ?string $ID = null, ?string $description = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $tradeParty = $this->createClassInstance('ram\TradePartyType');
+
+        $this->tryCall($tradeParty, "addToID", $this->getIdType($ID));
+        $this->tryCall($tradeParty, "setName", $this->getTextType($name));
+        $this->tryCall($tradeParty, "setDescription", $this->getTextType($description));
+
+        return $tradeParty;
+    }
+
+    /**
+     * Address type
+     *
+     * @param  string|null $lineone
+     * @param  string|null $linetwo
+     * @param  string|null $linethree
+     * @param  string|null $postcode
+     * @param  string|null $city
+     * @param  string|null $country
+     * @param  string|null $subdivision
+     * @return object|null
+     */
+    public function getTradeAddress(?string $lineone = null, ?string $linetwo = null, ?string $linethree = null, ?string $postcode = null, ?string $city = null, ?string $country = null, ?string $subdivision = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $address = $this->createClassInstance('ram\TradeAddressType');
+
+        $this->tryCall($address, "setLineOne", $this->getTextType($lineone));
+        $this->tryCall($address, "setLineTwo", $this->getTextType($linetwo));
+        $this->tryCall($address, "setLineThree", $this->getTextType($linethree));
+        $this->tryCall($address, "setPostcodeCode", $this->getCodeType($postcode));
+        $this->tryCall($address, "setCityName", $this->getTextType($city));
+        $this->tryCall($address, "setCountryID", $this->getCountryIDType($country));
+        $this->tryCallAll($address, ["addToCountrySubDivisionName", "setCountrySubDivisionName"], $this->getTextType($subdivision));
+
+        return $address;
+    }
+
+    /**
+     * Legal organization type
+     *
+     * @param  string|null $legalorgid
+     * @param  string|null $legalorgtype
+     * @param  string|null $legalorgname
+     * @return object|null
+     */
+    public function getLegalOrganization(?string $legalorgid = null, ?string $legalorgtype = null, ?string $legalorgname = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $legalorg = $this->createClassInstance('ram\LegalOrganizationType', $legalorgname);
+
+        $this->tryCall($legalorg, "setID", $this->getIdType($legalorgid, $legalorgtype));
+        $this->tryCall($legalorg, "setTradingBusinessName", $this->getTextType($legalorgname));
+
+        return $legalorg;
+    }
+
+    /**
+     * Contact type
+     *
+     * @param  string|null $contactpersonname
+     * @param  string|null $contactdepartmentname
+     * @param  string|null $contactphoneno
+     * @param  string|null $contactfaxno
+     * @param  string|null $contactemailaddr
+     * @return object|null
+     */
+    public function getTradeContact(?string $contactpersonname = null, ?string $contactdepartmentname = null, ?string $contactphoneno = null, ?string $contactfaxno = null, ?string $contactemailaddr = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $contact = $this->createClassInstance('ram\TradeContactType', $contactpersonname);
+        $contactphone = $this->getUniversalCommunicationType($contactphoneno, null, null);
+        $contactfax = $this->getUniversalCommunicationType($contactfaxno, null, null);
+        $contactemail = $this->getUniversalCommunicationType(null, $contactemailaddr);
+
+        $this->tryCall($contact, "setPersonName", $this->getTextType($contactpersonname));
+        $this->tryCall($contact, "setDepartmentName", $this->getTextType($contactdepartmentname));
+        $this->tryCall($contact, "setTelephoneUniversalCommunication", $contactphone);
+        $this->tryCall($contact, "setFaxUniversalCommunication", $contactfax);
+        $this->tryCall($contact, "setEmailURIUniversalCommunication", $contactemail);
+
+        return $contact;
+    }
+
+    /**
+     * Communication type
+     *
+     * @param  string|null $number
+     * @param  string|null $uriid
+     * @param  string|null $urischeme
+     * @return object|null
+     */
+    public function getUniversalCommunicationType(?string $number = null, ?string $uriid = null, ?string $urischeme = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $communication = $this->createClassInstance('ram\UniversalCommunicationType');
+
+        $this->tryCall($communication, "setCompleteNumber", $this->getTextType($number));
+        $this->tryCall($communication, "setURIID", $this->getIdType($uriid, $urischeme));
+
+        return $communication;
+    }
+
+    /**
+     * Tax registration type
+     *
+     * @param  string|null $taxregtype
+     * @param  string|null $taxregid
+     * @return object|null
+     */
+    public function getTaxRegistrationType(?string $taxregtype = null, ?string $taxregid = null): ?object
+    {
+        if (self::isNullOrEmpty($taxregtype)) {
+            return null;
+        }
+
+        if (self::isNullOrEmpty($taxregid)) {
+            return null;
+        }
+
+        $taxreg = $this->createClassInstance('ram\TaxRegistrationType');
+
+        $this->tryCall($taxreg, "setID", $this->getIdType($taxregid, $taxregtype));
+
+        return $taxreg;
+    }
+
+    /**
+     * Delivery terms type
+     *
+     * @param  string|null $code
+     * @return object|null
+     */
+    public function getTradeDeliveryTermsType(?string $code = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $deliveryterms = $this->createClassInstance('ram\TradeDeliveryTermsType');
+
+        $this->tryCall($deliveryterms, "setDeliveryTypeCode", $this->getCodeType($code));
+
+        return $deliveryterms;
+    }
+
+    /**
+     * Procuring project type
+     *
+     * @param  string|null $id
+     * @param  string|null $name
+     * @return object|null
+     */
+    public function getProcuringProjectType(?string $id = null, ?string $name = null): ?object
+    {
+        if (self::isOneNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $procuringproject = $this->createClassInstance('ram\ProcuringProjectType');
+
+        $this->tryCall($procuringproject, "setID", $this->getIdType($id));
+        $this->tryCall($procuringproject, "setName", $this->getTextType($name));
+
+        return $procuringproject;
+    }
+
+    /**
+     * Undocumented function
+     *
+     * @param  DateTime|null $date
+     * @return object|null
+     */
+    public function getSupplyChainEventType(?DateTime $date = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $supplychainevent = $this->createClassInstance('ram\SupplyChainEventType');
+
+        $this->tryCall($supplychainevent, "setOccurrenceDateTime", $this->getDateTimeType($date));
+
+        return $supplychainevent;
+    }
+
+    /**
+     * Get instance of TradeSettlementFinancialCardType
+     *
+     * @param  string|null $type
+     * @param  string|null $id
+     * @param  string|null $holderName
+     * @return object|null
+     */
+    public function getTradeSettlementFinancialCardType(?string $type = null, ?string $id = null, ?string $holderName = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $card = $this->createClassInstance('ram\TradeSettlementFinancialCardType');
+
+        $this->tryCall($card, "setID", $this->getIdType($id, $type));
+        $this->tryCall($card, "setCardholderName", $this->getTextType($holderName));
+
+        return $card;
+    }
+
+    /**
+     * Get instance of DebtorFinancialAccountType
+     *
+     * @param  string|null $iban
+     * @return object|null
+     */
+    public function getDebtorFinancialAccountType(?string $iban = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $card = $this->createClassInstance('ram\DebtorFinancialAccountType');
+
+        $this->tryCall($card, "setIBANID", $this->getIdType($iban));
+
+        return $card;
+    }
+
+    /**
+     * Get instance of CreditorFinancialAccountType
+     *
+     * @param  string|null $iban
+     * @param  string|null $accountName
+     * @param  string|null $proprietaryID
+     * @return object|null
+     */
+    public function getCreditorFinancialAccountType(?string $iban = null, ?string $accountName = null, ?string $proprietaryID = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $account = $this->createClassInstance('ram\CreditorFinancialAccountType');
+
+        $this->tryCall($account, "setIBANID", $this->getIdType($iban));
+        $this->tryCall($account, "setAccountName", $this->getTextType($accountName));
+        $this->tryCall($account, "setProprietaryID", $this->getIdType($proprietaryID));
+
+        return $account;
+    }
+
+    /**
+     * Undocumented function
+     *
+     * @param  string|null $bic
+     * @return object|null
+     */
+    public function getCreditorFinancialInstitutionType(?string $bic = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $institution = $this->createClassInstance('ram\CreditorFinancialInstitutionType');
+
+        $this->tryCall($institution, "setBICID", $this->getIdType($bic));
+
+        return $institution;
+    }
+
+    /**
+     * Get instance of TradeSettlementPaymentMeansType
+     *
+     * @param  string|null $typecode
+     * @param  string|null $information
+     * @return object|null
+     */
+    public function getTradeSettlementPaymentMeansType(?string $typecode = null, ?string $information = null): ?object
+    {
+        if (self::isNullOrEmpty($typecode)) {
+            return null;
+        }
+
+        $paymentMeans = $this->createClassInstance('ram\TradeSettlementPaymentMeansType');
+
+        $this->tryCall($paymentMeans, "setTypeCode", $this->getCodeType($typecode));
+        $this->tryCall($paymentMeans, "setInformation", $this->getTextType($information));
+
+        return $paymentMeans;
+    }
+
+    /**
+     * Get instance of TradePaymentTermsType
+     *
+     * @param  string|null   $description
+     * @param  DateTime|null $dueDate
+     * @param  string|null   $directDebitMandateID
+     * @return object|null
+     */
+    public function getTradePaymentTermsType(?string $description = null, ?DateTime $dueDate = null, ?string $directDebitMandateID = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $paymentTerms = $this->createClassInstance('ram\TradePaymentTermsType');
+
+        $this->tryCall($paymentTerms, "setDescription", $this->getTextType($description));
+        $this->tryCall($paymentTerms, "setDueDateDateTime", $this->getDateTimeType($dueDate));
+        $this->tryCall($paymentTerms, "setDirectDebitMandateID", $this->getIdType($directDebitMandateID));
+
+        return $paymentTerms;
+    }
+
+    /**
+     * Get instance of TradePaymentDiscountTermsType
+     *
+     * @param  DateTime|null $basisDateTime
+     * @param  float|null    $basisPeriodMeasureValue
+     * @param  string|null   $basisPeriodMeasureUnitCode
+     * @param  float|null    $basisAmount
+     * @param  float|null    $calculationPercent
+     * @param  float|null    $actualDiscountAmount
+     * @return object|null
+     */
+    public function getTradePaymentDiscountTermsType(?DateTime $basisDateTime = null, ?float $basisPeriodMeasureValue = null, ?string $basisPeriodMeasureUnitCode = null, ?float $basisAmount = null, ?float $calculationPercent = null, ?float $actualDiscountAmount = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $discountTerms = $this->createClassInstance('ram\TradePaymentDiscountTermsType');
+
+        $this->tryCall($discountTerms, "setBasisDateTime", $this->getDateTimeType($basisDateTime));
+        $this->tryCall($discountTerms, "setBasisPeriodMeasure", $this->getMeasureType($basisPeriodMeasureValue, $basisPeriodMeasureUnitCode));
+        $this->tryCall($discountTerms, "setBasisAmount", $this->getAmountType($basisAmount));
+        $this->tryCall($discountTerms, "setCalculationPercent", $this->getPercentType($calculationPercent));
+        $this->tryCall($discountTerms, "setActualDiscountAmount", $this->getAmountType($actualDiscountAmount));
+
+        return $discountTerms;
+    }
+
+    /**
+     * Get instance of TradeTaxType
+     * Sales tax breakdown, UmsatzsteueraufschlÃŒsselung
+     *
+     * @param  string|null   $categoryCode
+     * @param  string|null   $typeCode
+     * @param  float|null    $basisAmount
+     * @param  float|null    $calculatedAmount
+     * @param  float|null    $rateApplicablePercent
+     * @param  string|null   $exemptionReason
+     * @param  string|null   $exemptionReasonCode
+     * @param  float|null    $lineTotalBasisAmount
+     * @param  float|null    $allowanceChargeBasisAmount
+     * @param  DateTime|null $taxPointDate
+     * @param  string|null   $dueDateTypeCode
+     * @return object|null
+     */
+    public function getTradeTaxType(?string $categoryCode = null, ?string $typeCode = null, ?float $basisAmount = null, ?float $calculatedAmount = null, ?float $rateApplicablePercent = null, ?string $exemptionReason = null, ?string $exemptionReasonCode = null, ?float $lineTotalBasisAmount = null, ?float $allowanceChargeBasisAmount = null, ?DateTime $taxPointDate = null, ?string $dueDateTypeCode = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $taxBreakdown = $this->createClassInstance('ram\TradeTaxType');
+
+        $this->tryCall($taxBreakdown, "setCalculatedAmount", $this->getAmountType($calculatedAmount));
+        $this->tryCall($taxBreakdown, "setTypeCode", $this->getTaxTypeCodeType($typeCode));
+        $this->tryCall($taxBreakdown, "setExemptionReason", $this->getTextType($exemptionReason));
+        $this->tryCall($taxBreakdown, "setBasisAmount", $this->getAmountType($basisAmount));
+        $this->tryCall($taxBreakdown, "setLineTotalBasisAmount", $this->getAmountType($lineTotalBasisAmount));
+        $this->tryCall($taxBreakdown, "setAllowanceChargeBasisAmount", $this->getAmountType($allowanceChargeBasisAmount));
+        $this->tryCall($taxBreakdown, "setCategoryCode", $this->getTaxCategoryCodeType($categoryCode));
+        $this->tryCall($taxBreakdown, "setExemptionReasonCode", $this->getCodeType($exemptionReasonCode));
+        $this->tryCall($taxBreakdown, "setTaxPointDate", $this->getDateType($taxPointDate));
+        $this->tryCall($taxBreakdown, "setDueDateTypeCode", $this->getTimeReferenceCodeType($dueDateTypeCode));
+        $this->tryCall($taxBreakdown, "setRateApplicablePercent", $this->getPercentType($rateApplicablePercent));
+
+        return $taxBreakdown;
+    }
+
+    /**
+     * Get Allowance/Charge type
+     * Zu- und AbschlÃ€ge
+     *
+     * @param  float|null   $actualAmount
+     * @param  boolean|null $isCharge
+     * @param  string|null  $taxTypeCode
+     * @param  string|null  $taxCategoryCode
+     * @param  float|null   $rateApplicablePercent
+     * @param  float|null   $sequence
+     * @param  float|null   $calculationPercent
+     * @param  float|null   $basisAmount
+     * @param  float|null   $basisQuantity
+     * @param  string|null  $basisQuantityUnitCode
+     * @param  string|null  $reasonCode
+     * @param  string|null  $reason
+     * @return object|null
+     */
+    public function getTradeAllowanceChargeType(?float $actualAmount = null, ?bool $isCharge = null, ?string $taxTypeCode = null, ?string $taxCategoryCode = null, ?float $rateApplicablePercent = null, ?float $sequence = null, ?float $calculationPercent = null, ?float $basisAmount = null, ?float $basisQuantity = null, ?string $basisQuantityUnitCode = null, ?string $reasonCode = null, ?string $reason = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $allowanceCharge = $this->createClassInstance('ram\TradeAllowanceChargeType');
+
+        $this->tryCall($allowanceCharge, "setChargeIndicator", $this->getIndicatorType($isCharge));
+        $this->tryCall($allowanceCharge, "setSequenceNumeric", $this->getNumericType($sequence));
+        $this->tryCall($allowanceCharge, "setCalculationPercent", $this->getPercentType($calculationPercent));
+        $this->tryCall($allowanceCharge, "setBasisAmount", $this->getAmountType($basisAmount));
+        $this->tryCall($allowanceCharge, "setBasisQuantity", $this->getQuantityType($basisQuantity, $basisQuantityUnitCode));
+        $this->tryCall($allowanceCharge, "setActualAmount", $this->getAmountType($actualAmount));
+        $this->tryCall($allowanceCharge, "setReasonCode", $this->getCodeType($reasonCode));
+        $this->tryCall($allowanceCharge, "setReason", $this->getTextType($reason));
+
+        if (!is_null($taxCategoryCode) && !is_null($taxTypeCode) && !is_null($rateApplicablePercent)) {
+            $this->tryCall($allowanceCharge, "setCategoryTradeTax", $this->getTradeTaxType($taxCategoryCode, $taxTypeCode, null, null, $rateApplicablePercent));
+        }
+
+        return $allowanceCharge;
+    }
+
+    /**
+     * Get instance of
+     *
+     * @param  string|null $description
+     * @param  float|null  $appliedAmount
+     * @param  array|null  $taxTypeCodes
+     * @param  array|null  $taxCategoryCodes
+     * @param  array|null  $rateApplicablePercents
+     * @return object|null
+     */
+    public function getLogisticsServiceChargeType(?string $description = null, ?float $appliedAmount = null, ?array $taxTypeCodes = null, ?array $taxCategoryCodes = null, ?array $rateApplicablePercents = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $logCharge = $this->createClassInstance('ram\LogisticsServiceChargeType');
+
+        $this->tryCall($logCharge, "setDescription", $this->getTextType($description));
+        $this->tryCall($logCharge, "setAppliedAmount", $this->getAmountType($appliedAmount));
+
+        if (!is_null($taxCategoryCodes) && !is_null($taxTypeCodes) && !is_null($rateApplicablePercents)) {
+            foreach ($rateApplicablePercents as $index => $rateApplicablePercent) {
+                $taxBreakdown = $this->getTradeTaxType($taxCategoryCodes[$index], $taxTypeCodes[$index], null, null, $rateApplicablePercent);
+                $this->tryCall($logCharge, "addToAppliedTradeTax", $taxBreakdown);
+            }
+        }
+
+        return $logCharge;
+    }
+
+    /**
+     * Get instance of TradeSettlementHeaderMonetarySummationType
+     *
+     * @param  float|null $grandTotalAmount
+     * @param  float|null $duePayableAmount
+     * @param  float|null $lineTotalAmount
+     * @param  float|null $chargeTotalAmount
+     * @param  float|null $allowanceTotalAmount
+     * @param  float|null $taxBasisTotalAmount
+     * @param  float|null $taxTotalAmount
+     * @param  float|null $roundingAmount
+     * @param  float|null $totalPrepaidAmount
+     * @return object|null
+     */
+    public function getTradeSettlementHeaderMonetarySummationType(?float $grandTotalAmount = null, ?float $duePayableAmount = null, ?float $lineTotalAmount = null, ?float $chargeTotalAmount = null, ?float $allowanceTotalAmount = null, ?float $taxBasisTotalAmount = null, ?float $taxTotalAmount = null, ?float $roundingAmount = null, ?float $totalPrepaidAmount = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $summation = $this->createClassInstance('ram\TradeSettlementHeaderMonetarySummationType');
+
+        $this->tryCall($summation, "setLineTotalAmount", $this->getAmountType($lineTotalAmount));
+        $this->tryCall($summation, "setChargeTotalAmount", $this->getAmountType($chargeTotalAmount));
+        $this->tryCall($summation, "setAllowanceTotalAmount", $this->getAmountType($allowanceTotalAmount));
+        $this->tryCallAll($summation, ["addToTaxBasisTotalAmount", "setTaxBasisTotalAmount"], $this->getAmountType($taxBasisTotalAmount));
+        $this->tryCallAll($summation, ["addToTaxTotalAmount", "setTaxTotalAmount"], $this->getAmountType($taxTotalAmount));
+        $this->tryCall($summation, "setRoundingAmount", $this->getAmountType($roundingAmount));
+        $this->tryCallAll($summation, ["addToGrandTotalAmount", "setGrandTotalAmount"], $this->getAmountType($grandTotalAmount));
+        $this->tryCall($summation, "setTotalPrepaidAmount", $this->getAmountType($totalPrepaidAmount));
+        $this->tryCall($summation, "setDuePayableAmount", $this->getAmountType($duePayableAmount));
+
+        return $summation;
+    }
+
+    /**
+     * Create summation class only
+     *
+     * @return object|null
+     */
+    public function getTradeSettlementHeaderMonetarySummationTypeOnly(): ?object
+    {
+        return $this->createClassInstance('ram\TradeSettlementHeaderMonetarySummationType');
+    }
+
+    /**
+     * Get an instance of TradeAccountingAccountType
+     *
+     * @param  string|null $id
+     * @param  string|null $typeCode
+     * @return object|null
+     */
+    public function getTradeAccountingAccountType(?string $id = null, ?string $typeCode = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $account = $this->createClassInstance('ram\TradeAccountingAccountType');
+
+        $this->tryCall($account, "setID", $this->getIdType($id));
+        $this->tryCall($account, "setTypeCode", $this->getCodeType($typeCode));
+
+        return $account;
+    }
+
+    /**
+     * Get Document line
+     *
+     * @param  string|null $lineid
+     * @return object|null
+     */
+    public function getDocumentLineDocumentType(?string $lineid = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $doclinedoc = $this->createClassInstance('ram\DocumentLineDocumentType');
+
+        $this->tryCall($doclinedoc, "setLineID", $this->getIdType($lineid));
+
+        return $doclinedoc;
+    }
+
+    /**
+     * Get instance of SupplyChainTradeLineItemType
+     *
+     * @param  string|null $lineid
+     * @param  string|null $lineStatusCode
+     * @param  string|null $lineStatusReasonCode
+     * @param  boolean     $isTextPosition
+     * @return object|null
+     */
+    public function getSupplyChainTradeLineItemType(?string $lineid = null, ?string $lineStatusCode = null, ?string $lineStatusReasonCode = null, bool $isTextPosition = false): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $line = $this->createClassInstance('ram\SupplyChainTradeLineItemType');
+        $doclinedoc = $this->getDocumentLineDocumentType($lineid);
+        $lineAgreement = $this->createClassInstance('ram\LineTradeAgreementType');
+        $lineDelivery = $this->createClassInstance('ram\LineTradeDeliveryType');
+        $lineSettlement = $this->createClassInstance('ram\LineTradeSettlementType');
+
+        $this->tryCall($line, "setAssociatedDocumentLineDocument", $doclinedoc);
+        $this->tryCall($doclinedoc, "setLineStatusCode", $this->getCodeType($lineStatusCode));
+        $this->tryCall($doclinedoc, "setLineStatusReasonCode", $this->getCodeType($lineStatusReasonCode));
+        if ($isTextPosition == false) {
+            $this->tryCall($line, "setSpecifiedLineTradeAgreement", $lineAgreement);
+            $this->tryCall($line, "setSpecifiedLineTradeDelivery", $lineDelivery);
+        }
+        $this->tryCall($line, "setSpecifiedLineTradeSettlement", $lineSettlement);
+
+        return $line;
+    }
+
+    /**
+     * Get product specification
+     *
+     * @param  string|null $name
+     * @param  string|null $description
+     * @param  string|null $sellerAssignedID
+     * @param  string|null $buyerAssignedID
+     * @param  string|null $globalIDType
+     * @param  string|null $globalID
+     * @return object|null
+     */
+    public function getTradeProductType(?string $name = null, ?string $description = null, ?string $sellerAssignedID = null, ?string $buyerAssignedID = null, ?string $globalIDType = null, ?string $globalID = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $product = $this->createClassInstance('ram\TradeProductType');
+
+        $this->tryCall($product, "setGlobalID", $this->getIdType($globalID, $globalIDType));
+        $this->tryCall($product, "setSellerAssignedID", $this->getIdType($sellerAssignedID));
+        $this->tryCall($product, "setBuyerAssignedID", $this->getIdType($buyerAssignedID));
+        $this->tryCall($product, "setName", $this->getTextType($name));
+        $this->tryCall($product, "setDescription", $this->getTextType($description));
+
+        return $product;
+    }
+
+    /**
+     * Get Product Characteristic
+     *
+     * @param  string|null $typeCode
+     * @param  string|null $description
+     * @param  float|null  $valueMeasure
+     * @param  string|null $valueMeasureUnitCode
+     * @param  string|null $value
+     * @return object|null
+     */
+    public function getProductCharacteristicType(?string $typeCode = null, ?string $description = null, ?float $valueMeasure = null, ?string $valueMeasureUnitCode = null, ?string $value = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $productCharacteristic = $this->createClassInstance('ram\ProductCharacteristicType');
+
+        $this->tryCall($productCharacteristic, "setTypeCode", $this->getCodeType($typeCode));
+        $this->tryCall($productCharacteristic, "setDescription", $this->getTextType($description));
+        $this->tryCall($productCharacteristic, "setValueMeasure", $this->getMeasureType($valueMeasure, $valueMeasureUnitCode));
+        $this->tryCall($productCharacteristic, "setValue", $this->getTextType($value));
+
+        return $productCharacteristic;
+    }
+
+    /**
+     * Get Product Classification
+     *
+     * @param  string|null $classCode
+     * @param  string|null $className
+     * @param  string|null $listID
+     * @param  string|null $listVersionID
+     * @return object|null
+     */
+    public function getProductClassificationType(?string $classCode = null, ?string $className = null, ?string $listID = null, ?string $listVersionID = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $productClassification = $this->createClassInstance('ram\ProductClassificationType');
+
+        $this->tryCall($productClassification, "setClassCode", $this->getCodeType2($classCode, $listID, $listVersionID));
+        $this->tryCall($productClassification, "setClassName", $this->getTextType($className));
+
+        return $productClassification;
+    }
+
+    /**
+     * Get product reference product
+     *
+     * @param  string|null $globalID
+     * @param  string|null $globalIDType
+     * @param  string|null $sellerAssignedID
+     * @param  string|null $buyerAssignedID
+     * @param  string|null $name
+     * @param  string|null $description
+     * @param  float|null  $unitQuantity
+     * @param  string|null $unitCode
+     * @return object|null
+     */
+    public function getReferencedProductType(?string $globalID, ?string $globalIDType, ?string $sellerAssignedID, ?string $buyerAssignedID, ?string $name, ?string $description, ?float $unitQuantity, ?string $unitCode): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $referencedProduct = $this->createClassInstance('ram\ReferencedProductType');
+
+        $this->tryCallAll($referencedProduct, ["addToGlobalID", "setGlobalID"], $this->getIdType($globalID, $globalIDType));
+        $this->tryCall($referencedProduct, "setSellerAssignedID", $this->getIdType($sellerAssignedID));
+        $this->tryCall($referencedProduct, "setBuyerAssignedID", $this->getIdType($buyerAssignedID));
+        $this->tryCall($referencedProduct, "setName", $this->getTextType($name));
+        $this->tryCall($referencedProduct, "setDescription", $this->getTextType($description));
+        $this->tryCall($referencedProduct, "setUnitQuantity", $this->getQuantityType($unitQuantity, $unitCode));
+
+        return $referencedProduct;
+    }
+
+    /**
+     * Get trade price
+     *
+     * @param  float|null  $amount
+     * @param  float|null  $basisQuantity
+     * @param  string|null $basisQuantityUnitCode
+     * @return object|null
+     */
+    public function getTradePriceType(?float $amount = null, ?float $basisQuantity = null, ?string $basisQuantityUnitCode = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $tradePrice = $this->createClassInstance('ram\TradePriceType');
+
+        $this->tryCall($tradePrice, "setChargeAmount", $this->getAmountType($amount));
+        $this->tryCall($tradePrice, "setBasisQuantity", $this->getQuantityType($basisQuantity, $basisQuantityUnitCode));
+
+        return $tradePrice;
+    }
+
+    /**
+     * Get Line Summation
+     *
+     * @param  float|null $lineTotalAmount
+     * @param  float|null $totalAllowanceChargeAmount
+     * @return object|null
+     */
+    public function getTradeSettlementLineMonetarySummationType(?float $lineTotalAmount = null, ?float $totalAllowanceChargeAmount = null): ?object
+    {
+        if (self::isAllNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $summation = $this->createClassInstance('ram\TradeSettlementLineMonetarySummationType');
+
+        $this->tryCall($summation, "setLineTotalAmount", $this->getAmountType($lineTotalAmount));
+        $this->tryCall($summation, "setTotalAllowanceChargeAmount", $this->getAmountType($totalAllowanceChargeAmount));
+
+        return $summation;
+    }
+
+    /**
+     * Undocumented function
+     *
+     * @param  string|null   $sourceCurrencyCode
+     * @param  string|null   $targetCurrencyCode
+     * @param  float|null    $rate
+     * @param  DateTime|null $rateDateTime
+     * @return object|null
+     */
+    public function getTaxApplicableTradeCurrencyExchangeType(?string $sourceCurrencyCode = null, ?string $targetCurrencyCode = null, ?float $rate = null, ?DateTime $rateDateTime = null): ?object
+    {
+        if (self::isOneNullOrEmpty(func_get_args())) {
+            return null;
+        }
+
+        $currencyExchange = $this->createClassInstance('ram\TradeCurrencyExchangeType');
+
+        $this->tryCall($currencyExchange, "setSourceCurrencyCode", $this->getIdType($sourceCurrencyCode));
+        $this->tryCall($currencyExchange, "setTargetCurrencyCode", $this->getIdType($targetCurrencyCode));
+        $this->tryCall($currencyExchange, "setConversionRate", $this->getRateType($rate));
+
+        return $currencyExchange;
+    }
+
+    /**
+     * Create a datetime object
+     *
+     * @param  string|null $dateTimeString
+     * @param  string|null $format
+     * @return DateTime|null
+     */
+    public function toDateTime(?string $dateTimeString, ?string $format): ?DateTime
+    {
+        if (self::isNullOrEmpty($dateTimeString) || self::isNullOrEmpty($format)) {
+            return null;
+        }
+        if ($format == "102") {
+            return DateTime::createFromFormat("Ymd", $dateTimeString);
+        } elseif ($format == "101") {
+            return DateTime::createFromFormat("ymd", $dateTimeString);
+        } elseif ($format == "201") {
+            return DateTime::createFromFormat("ymdHi", $dateTimeString);
+        } elseif ($format == "202") {
+            return DateTime::createFromFormat("ymdHis", $dateTimeString);
+        } elseif ($format == "203") {
+            return DateTime::createFromFormat("YmdHi", $dateTimeString);
+        } elseif ($format == "204") {
+            return DateTime::createFromFormat("YmdHis", $dateTimeString);
+        } else {
+            throw new ZugferdUnknownDateFormatException($format);
+        }
+    }
+
+    /**
+     * Get Exchange rate type instance
+     *
+     * @param  float|null $rateValue
+     * @return object|null
+     */
+    public function getRateType(?float $rateValue): ?object
+    {
+        $rate = $this->createClassInstance('udt\RateType');
+        $this->tryCall($rate, "value", $rateValue);
+        return $rate;
+    }
+
+    /**
+     * Creates an instance of a class needed by $invoiceObject
+     *
+     * @param  string $classname
+     * @param  mixed  $constructorvalue
+     * @return object|null
+     */
+    public function createClassInstance($classname, $constructorvalue = null): ?object
+    {
+        $className = 'horstoeko\zugferd\entities\\' . $this->profiledef["name"] . '\\' . $classname;
+
+        if (!class_exists($className)) {
+            return null;
+        }
+
+        return new $className($constructorvalue);
+    }
+
+    /**
+     * Tries to call a method
+     *
+     * @codeCoverageIgnore
+     * @param              object $instance
+     * @param              string $method
+     * @param              mixed  $value
+     * @return             ZugferdObjectHelper
+     */
+    public function tryCall($instance, string $method, $value): ZugferdObjectHelper
+    {
+        if (!$instance) {
+            return $this;
+        }
+        if (!$method) {
+            return $this;
+        }
+        if (self::isNullOrEmpty($value)) {
+            return $this;
+        }
+        if ($this->methodExists($instance, $method)) {
+            $instance->$method($value);
+        }
+        return $this;
+    }
+
+    /**
+     * Try call all methods
+     *
+     * @codeCoverageIgnore
+     * @param              object   $instance
+     * @param              string[] $methods
+     * @param              mixed    $value
+     * @return             ZugferdObjectHelper
+     */
+    public function tryCallAll($instance, array $methods, $value): ZugferdObjectHelper
+    {
+        if (!$instance) {
+            return $this;
+        }
+        if (self::isNullOrEmpty($value)) {
+            return $this;
+        }
+        foreach ($methods as $method) {
+            if ($this->methodExists($instance, $method)) {
+                $instance->$method($value);
+                return $this;
+            }
+        }
+        return $this;
+    }
+
+    /**
+     * Tries to call a method and return the returnvalue from call to $method
+     * in object $instance
+     *
+     * @codeCoverageIgnore
+     * @param              object $instance
+     * @param              string $method
+     * @return             mixed
+     */
+    public function tryCallAndReturn($instance, string $method)
+    {
+        if (!$instance) {
+            return null;
+        }
+        if (!$method) {
+            return null;
+        }
+        if ($this->methodExists($instance, $method)) {
+            return $instance->$method();
+        }
+        return null;
+    }
+
+    /**
+     * Try call methods in a form .object.method1.method2.method3
+     *
+     * @codeCoverageIgnore
+     * @param              object $instance
+     * @param              string $methods
+     * @param              mixed  $value
+     * @return             void
+     */
+    public function tryCallByPath($instance, string $methods, $value)
+    {
+        $methods = explode(".", $methods);
+
+        foreach ($methods as $index => $method) {
+            if ($index == count($methods) - 1) {
+                $this->tryCall($instance, $method, $value);
+            } else {
+                $instance = $this->tryCallAndReturn($instance, $method);
+            }
+        }
+    }
+
+    /**
+     * Try call methods in a form .object.method1.method2.method3
+     *
+     * @codeCoverageIgnore
+     * @param              object $instance
+     * @param              string $methods
+     * @return             mixed
+     */
+    public function tryCallByPathAndReturn($instance, string $methods)
+    {
+        $result = null;
+        $methods = explode(".", $methods);
+
+        foreach ($methods as $method) {
+            $result = $this->tryCallAndReturn($instance, $method);
+            $instance = $result;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Call $method if exists, otherwise $method2 is calles with $value
+     *
+     * @codeCoverageIgnore
+     * @param  object $instance
+     * @param  string $methodToLookFor
+     * @param  string $methodToCall
+     * @param  mixed  $value
+     * @param  mixed  $value2
+     * @return ZugferdObjectHelper
+     */
+    public function tryCallIfMethodExists($instance, string $methodToLookFor, string $methodToCall, $value, $value2): ZugferdObjectHelper
+    {
+        if (!$instance) {
+            return $this;
+        }
+        if (!$methodToLookFor) {
+            return $this;
+        }
+        if (!$methodToCall) {
+            return $this;
+        }
+        if (!$this->methodExists($instance, $methodToCall)) {
+            return $this;
+        }
+        if ($this->methodExists($instance, $methodToLookFor)) {
+            $instance->$methodToCall($value);
+        } else {
+            $instance->$methodToCall($value2);
+        }
+        return $this;
+    }
+
+    /**
+     * Ensure that $input is an array
+     *
+     * @codeCoverageIgnore
+     * @param              mixed $input
+     * @return             array
+     */
+    public function ensureStringArray($input): array
+    {
+        if (is_array($input)) {
+            return $input;
+        }
+        return [(string)$input];
+    }
+
+    /**
+     * Ensure array
+     *
+     * @codeCoverageIgnore
+     *
+     * @param  mixed $value
+     * @return array
+     */
+    public function ensureArray($value): array
+    {
+        if (!is_array($value)) {
+            if (!is_null($value)) {
+                return [$value];
+            }
+            return [];
+        }
+        return $value;
+    }
+
+    /**
+     * Test if a value is null or empty
+     *
+     * @codeCoverageIgnore
+     * @param              mixed $value
+     * @return             boolean
+     */
+    public static function isNullOrEmpty($value)
+    {
+        if ($value === null) {
+            return true;
+        }
+        if (!is_object($value)) {
+            if ((string)$value === "") {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Checks if all function arguments are null or empty
+     *
+     * @codeCoverageIgnore
+     * @param              array $args
+     * @return             boolean
+     */
+    public static function isAllNullOrEmpty(array $args): bool
+    {
+        foreach ($args as $arg) {
+            if ($arg instanceof DateTime) {
+                return false;
+            } else {
+                if (!self::isNullOrEmpty($arg)) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Checks if all function arguments are null or empty
+     *
+     * @codeCoverageIgnore
+     * @param              array $args
+     * @return             boolean
+     */
+    public static function isOneNullOrEmpty(array $args): bool
+    {
+        foreach ($args as $arg) {
+            if ($arg instanceof DateTime) {
+                if ($arg == null) {
+                    return true;
+                }
+            } else {
+                if (self::isNullOrEmpty($arg)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * If $value is an array and has at least one array element the first
+     * array element is returned otherwise null is returned. If $value is not an
+     * array $value is returned
+     *
+     * @param  mixed $value
+     * @return mixed
+     */
+    public function getFirstFromArrayIfArray($value)
+    {
+        if (is_array($value)) {
+            $first = reset($value);
+            if ($first !== false) {
+                return $first;
+            }
+            return null;
+        }
+        return $value;
+    }
+
+    /**
+     * Wrapper for method_exists for use in PHP8
+     *
+     * @param  string|object $instance
+     * @param  string        $method
+     * @return boolean
+     */
+    public function methodExists($instance, $method): bool
+    {
+        if ($instance == null) {
+            return false;
+        }
+        if (!(is_object($instance) || is_string($instance))) {
+            return false;
+        }
+        return method_exists($instance, $method);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdPackageVersion.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdPackageVersion.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdPackageVersion.php	(revision 8435)
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use Composer\InstalledVersions as ComposerInstalledVersions;
+
+/**
+ * Class representing some tools for getting the package version
+ * of this package
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdPackageVersion
+{
+    public static function getInstalledVersion(): string
+    {
+        return ComposerInstalledVersions::getVersion('horstoeko/zugferd');
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdPdfWriter.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdPdfWriter.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdPdfWriter.php	(revision 8435)
@@ -0,0 +1,465 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use setasign\Fpdi\Fpdi as PdfFpdi;
+
+/**
+ * Class representing some tools for pdf generation
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ *
+ * @codeCoverageIgnore
+ */
+class ZugferdPdfWriter extends PdfFpdi
+{
+    /**
+     * Contains all attached files
+     *
+     * @var array
+     */
+    protected $files = array();
+
+    /**
+     * Contains meta data
+     *
+     * @var array
+     */
+    protected $metaDataDescriptions = [];
+
+    /**
+     * Contains meta data
+     *
+     * @var array
+     */
+    protected $metaDataInfos = [];
+
+    /**
+     * Internal index
+     *
+     * @var integer
+     */
+    protected $fileSpecDictionnaryIndex = 0;
+
+    /**
+     * Internal index
+     *
+     * @var integer
+     */
+    protected $descriptionIndex = 0;
+
+    /**
+     * Internal index
+     *
+     * @var integer
+     */
+    protected $outputIntentIndex = 0;
+
+    /**
+     * Internal index
+     *
+     * @var integer
+     */
+    protected $filesIndex;
+
+    /**
+     * Internal flag that indicates that the attachment
+     * pane should be shown by default
+     *
+     * @var boolean
+     */
+    protected $openAttachmentPane = false;
+
+    /**
+     * Set the PDF version.
+     *
+     * @param string $version     Contains the PDF version number.
+     * @param bool   $binary_data This is true for binary data
+     *
+     * @return void
+     */
+    public function setPdfVersion($version = '1.3', $binary_data = false): void
+    {
+        $this->PDFVersion = sprintf('%.1F', $version);
+
+        if (true == $binary_data) {
+            $this->PDFVersion .=
+                "\n" . '%' .
+                chr(rand(128, 256)) .
+                chr(rand(128, 256)) .
+                chr(rand(128, 256)) .
+                chr(rand(128, 256));
+        }
+    }
+
+    /**
+     * Attach file to PDF.
+     *
+     * @param  mixed  $file
+     * Data to embed to the pdf
+     * @param  string $name
+     * The visible attachment filename
+     * @param  string $desc
+     * The description for the attached file
+     * @param  string $relationship
+     * The type of the relationship of the attached file
+     * @param  string $mimetype
+     * The url-encoded mimetype of the attached file
+     * @param  bool   $isUTF8
+     * Set to true, if the attached file is UTF-8 encoded
+     * @return void
+     */
+    public function attach($file, $name = '', $desc = '', $relationship = 'Unspecified', $mimetype = '', $isUTF8 = false): void
+    {
+        if ('' == $name) {
+            $p = strrpos($file, '/');
+            if (false === $p) {
+                $p = strrpos($file, '\\');
+            }
+            if (false !== $p) {
+                $name = substr($file, $p + 1);
+            } else {
+                $name = $file;
+            }
+        }
+
+        if (!$isUTF8) {
+            $desc = mb_convert_encoding($desc, 'UTF-8', mb_list_encodings());
+        }
+
+        if ('' == $mimetype) {
+            $mimetype = mime_content_type($file);
+            if (!$mimetype) {
+                $mimetype = 'application/octet-stream';
+            }
+        }
+
+        $mimetype = str_replace('/', '#2F', $mimetype);
+        $this->files[] = array('file' => $file, 'name' => $name, 'desc' => $desc, 'relationship' => $relationship, 'subtype' => $mimetype);
+    }
+
+    /**
+     * Open attachment panel on PDF.
+     *
+     * @return void
+     */
+    public function openAttachmentPane(): void
+    {
+        $this->openAttachmentPane = true;
+    }
+
+    /**
+     * Add metadata description node.
+     *
+     * @param  string $description
+     * The description of the metadata
+     * @return void
+     */
+    public function addMetadataDescriptionNode($description): void
+    {
+        $this->metaDataDescriptions[] = $description;
+    }
+
+    /**
+     * Set PDF metadata infos.
+     *
+     * @param  array $metaDataInfos
+     * The array with metadata information applied to the pdf
+     * @return void
+     */
+    public function setPdfMetadataInfos(array $metaDataInfos): void
+    {
+        $this->metaDataInfos = $metaDataInfos;
+    }
+
+    /**
+     * Put files.
+     *
+     * @return void
+     *
+     * @codingStandardsIgnoreStart
+     */
+    protected function _putfiles(): void
+    {
+        foreach ($this->files as $i => &$info) {
+            $this->putFileSpecification($info);
+            $info['file_index'] = $this->n;
+            $this->putFileStream($info);
+        }
+
+        $this->putFileDictionary();
+    }
+
+    /**
+     * Put file attachment specification.
+     *
+     * @param array $file_info
+     * @return void
+     */
+    protected function putFileSpecification(array $file_info): void
+    {
+        $this->_newobj();
+        $this->fileSpecDictionnaryIndex = $this->n;
+        $this->_put('<<');
+        $this->_put('/F (' . $this->_escape($file_info['name']) . ')');
+        $this->_put('/Type /Filespec');
+        $this->_put('/UF ' . $this->_textstring(mb_convert_encoding($file_info['name'], 'UTF-8', mb_list_encodings())));
+        if ($file_info['relationship']) {
+            $this->_put('/AFRelationship /' . $file_info['relationship']);
+        }
+        if ($file_info['desc']) {
+            $this->_put('/Desc ' . $this->_textstring($file_info['desc']));
+        }
+        $this->_put('/EF <<');
+        $this->_put('/F ' . ($this->n + 1) . ' 0 R');
+        $this->_put('/UF ' . ($this->n + 1) . ' 0 R');
+        $this->_put('>>');
+        $this->_put('>>');
+        $this->_put('endobj');
+    }
+
+    /**
+     * Put file stream.
+     *
+     * @param array $file_info
+     */
+    protected function putFileStream(array $file_info): void
+    {
+        $this->_newobj();
+        $this->_put('<<');
+        $this->_put('/Filter /FlateDecode');
+        if ($file_info['subtype']) {
+            $this->_put('/Subtype /' . $file_info['subtype']);
+        }
+        $this->_put('/Type /EmbeddedFile');
+        if (is_string($file_info['file']) && @is_file($file_info['file'])) {
+            $fc = file_get_contents($file_info['file']);
+        } else {
+            $stream = $file_info['file']->getStream();
+            \fseek($stream, 0);
+            $fc = stream_get_contents($stream);
+        }
+        if (false === $fc) {
+            $this->Error('Cannot open file: ' . $file_info['file']);
+        }
+        if (is_string($file_info['file'])) {
+            $md = @date('YmdHis', filemtime($file_info['file']));
+        } else {
+            $md = @date('YmdHis');
+        }
+        $fc = gzcompress($fc);
+        $this->_put('/Length ' . strlen($fc));
+        $this->_put("/Params <</ModDate (D:$md)>>");
+        $this->_put('>>');
+        $this->_putstream($fc);
+        $this->_put('endobj');
+    }
+
+    /**
+     * Put file dictionnary.
+     *
+     * @return void
+     */
+    protected function putFileDictionary(): void
+    {
+        $this->_newobj();
+        $this->filesIndex = $this->n;
+        $this->_put('<<');
+        $s = '';
+        $files = $this->files;
+        usort($files, function ($a, $b) { // Sorting files in name order as PDF specs (if not, issue with Acrobat Reader when trying to download attachments)
+            return strcmp($a['name'], $b['name']);
+        });
+        foreach ($files as $info) {
+            $s .= sprintf('%s %s 0 R ', $this->_textstring($info['name']), $info['file_index']);
+        }
+        $this->_put(sprintf('/Names [%s]', $s));
+        $this->_put('>>');
+        $this->_put('endobj');
+    }
+
+    /**
+     * Put metadata descriptions.
+     *
+     * @return void
+     */
+    protected function putMetadataDescriptions(): void
+    {
+        $s = '<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>' . "\n";
+        $s .= '<x:xmpmeta xmlns:x="adobe:ns:meta/">' . "\n";
+        $s .= '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' . "\n";
+        $this->_newobj();
+        $this->descriptionIndex = $this->n;
+        foreach ($this->metaDataDescriptions as $i => $desc) {
+            $s .= $desc . "\n";
+        }
+        $s .= '</rdf:RDF>' . "\n";
+        $s .= '</x:xmpmeta>' . "\n";
+        $s .= '<?xpacket end="w"?>';
+        $this->_put('<<');
+        $this->_put('/Length ' . strlen($s));
+        $this->_put('/Type /Metadata');
+        $this->_put('/Subtype /XML');
+        $this->_put('>>');
+        $this->_putstream($s);
+        $this->_put('endobj');
+    }
+
+    /**
+     * Put resources including files and metadata descriptions.
+     *
+     * @return void
+     * @codingStandardsIgnoreStart
+     */
+    protected function _putresources(): void
+    {
+        parent::_putresources();
+
+        if (!empty($this->files)) {
+            $this->_putfiles();
+        }
+
+        $this->_putoutputintent();
+
+        if (!empty($this->metaDataDescriptions)) {
+            $this->putMetadataDescriptions();
+        }
+    }
+
+    /**
+     * Put output intent with ICC profile.
+     *
+     * @return void
+     * @codingStandardsIgnoreStart
+     */
+    protected function _putoutputintent(): void
+    {
+        $this->_newobj();
+        $this->_put('<<');
+        $this->_put('/Type /OutputIntent');
+        $this->_put('/S /GTS_PDFA1');
+        $this->_put('/OuputCondition (sRGB)');
+        $this->_put('/OutputConditionIdentifier (Custom)');
+        $this->_put('/DestOutputProfile ' . ($this->n + 1) . ' 0 R');
+        $this->_put('/Info (sRGB V4 ICC)');
+        $this->_put('>>');
+        $this->_put('endobj');
+        $this->outputIntentIndex = $this->n;
+
+        $icc = file_get_contents(ZugferdSettings::getFullIccProfileFilename());
+        $icc = gzcompress($icc);
+
+        $this->_newobj();
+        $this->_put('<<');
+        $this->_put('/Length ' . strlen($icc));
+        $this->_put('/N 3');
+        $this->_put('/Filter /FlateDecode');
+        $this->_put('>>');
+        $this->_putstream($icc);
+        $this->_put('endobj');
+    }
+
+    /**
+     * Put catalog node, including associated files.
+     *
+     * @return void
+     * @codingStandardsIgnoreStart
+     */
+    protected function _putcatalog(): void
+    {
+        parent::_putcatalog();
+
+        if (!empty($this->files)) {
+            if (is_array($this->files)) {
+                $files_ref_str = '';
+                foreach ($this->files as $file) {
+                    if ('' != $files_ref_str) {
+                        $files_ref_str .= ' ';
+                    }
+                    $files_ref_str .= sprintf('%s 0 R', $file['file_index']);
+                }
+                $this->_put(sprintf('/AF [%s]', $files_ref_str));
+            } else {
+                $this->_put(sprintf('/AF %s 0 R', $this->filesIndex));
+            }
+        }
+
+        if (0 != $this->descriptionIndex) {
+            $this->_put(sprintf('/Metadata %s 0 R', $this->descriptionIndex));
+        }
+
+        if (!empty($this->files)) {
+            $this->_put('/Names <<');
+            $this->_put('/EmbeddedFiles ');
+            $this->_put(sprintf('%s 0 R', $this->filesIndex));
+            $this->_put('>>');
+        }
+
+        if (0 != $this->outputIntentIndex) {
+            $this->_put(sprintf('/OutputIntents [%s 0 R]', $this->outputIntentIndex));
+        }
+
+        if ($this->openAttachmentPane) {
+            $this->_put('/PageMode /UseAttachments');
+        }
+    }
+
+    /**
+     * Put trailer including ID.
+     *
+     * @return void
+     * @codingStandardsIgnoreStart
+     */
+    protected function _puttrailer(): void
+    {
+        parent::_puttrailer();
+
+        $created_id = md5($this->generateMetadataString("created"));
+        $modified_id = md5($this->generateMetadataString("modified"));
+
+        $this->_put(sprintf('/ID [<%s><%s>]', $created_id, $modified_id));
+    }
+
+    /**
+     * Generate metadata string.
+     *
+     * @param string|null $dateType
+     * The type of the metadata date
+     * @return string
+     * @codingStandardsIgnoreStart
+     */
+    protected function generateMetadataString(?string $dateType = null)
+    {
+        $dateType = $dateType ?? "created";
+        $metaDataString = '';
+
+        if (isset($this->metaDataInfos['title'])) {
+            $metaDataString .= $this->metaDataInfos['title'];
+        }
+
+        if (isset($this->metaDataInfos['subject'])) {
+            $metaDataString .= $this->metaDataInfos['subject'];
+        }
+
+        if ($dateType == "modified" && isset($this->metaDataInfos['modifiedDate'])) {
+            $metaDataString .= $this->metaDataInfos['modifiedDate'];
+        }
+
+        if ($dateType == "created" && isset($this->metaDataInfos['createdDate'])) {
+            $metaDataString .= $this->metaDataInfos['createdDate'];
+        }
+
+        return $metaDataString;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdProfileResolver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdProfileResolver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdProfileResolver.php	(revision 8435)
@@ -0,0 +1,106 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use SimpleXMLElement;
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\exception\ZugferdUnknownProfileException;
+use horstoeko\zugferd\exception\ZugferdUnknownProfileIdException;
+use horstoeko\zugferd\exception\ZugferdUnknownXmlContentException;
+
+/**
+ * Class representing the profile resolver
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdProfileResolver
+{
+    /**
+     * Resolve profile id and profile definition by the content of $xmlContent
+     *
+     * @param string $xmlContent
+     * @return array
+     */
+    public static function resolve(string $xmlContent): array
+    {
+        $xmldocument = new SimpleXMLElement($xmlContent);
+        $typeelement = $xmldocument->xpath('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID');
+
+        if (!is_array($typeelement) || !isset($typeelement[0])) {
+            throw new ZugferdUnknownXmlContentException();
+        }
+
+        /**
+         * @var int $profile
+         * @var array $profiledef
+         */
+        foreach (ZugferdProfiles::PROFILEDEF as $profile => $profiledef) {
+            if ($typeelement[0] == $profiledef["contextparameter"]) {
+                return [$profile, $profiledef];
+            }
+        }
+
+        throw new ZugferdUnknownProfileException((string)$typeelement[0]);
+    }
+
+    /**
+     * Resolve profile id by the content of $xmlContent
+     *
+     * @param string $xmlContent
+     * @return int
+     */
+    public static function resolveProfileId(string $xmlContent): int
+    {
+        return static::resolve($xmlContent)[0];
+    }
+
+    /**
+     * Resolve profile definition by the content of $xmlContent
+     *
+     * @param string $xmlContent
+     * @return array
+     */
+    public static function resolveProfileDef(string $xmlContent): array
+    {
+        return static::resolve($xmlContent)[1];
+    }
+
+    /**
+     * Resolve profile id and profile definition by it's id
+     *
+     * @param integer $profileId
+     * @return array
+    */
+    public static function resolveById(int $profileId): array
+    {
+        if (!isset(ZugferdProfiles::PROFILEDEF[$profileId])) {
+            throw new ZugferdUnknownProfileIdException($profileId);
+        }
+
+        return [$profileId, ZugferdProfiles::PROFILEDEF[$profileId]];
+    }
+
+    /**
+     * Resolve profile profile definition by it's id
+     *
+     * @param int $profileId
+     * @return array
+     */
+    public static function resolveProfileDefById(int $profileId): array
+    {
+        $resolved = static::resolveById($profileId);
+
+        return $resolved[1];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdProfiles.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdProfiles.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdProfiles.php	(revision 8435)
@@ -0,0 +1,222 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+/**
+ * Class representing the document profiles
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdProfiles
+{
+    /**
+     * Internal constant that identifies the BASIC profile
+     */
+    const PROFILE_BASIC = 0;
+
+    /**
+     * Internal constant that identifies the BASIC WL profile
+     */
+    const PROFILE_BASICWL = 1;
+
+    /**
+     * Internal constant that identifies the EN16931 profile
+     */
+    const PROFILE_EN16931 = 2;
+
+    /**
+     * Internal constant that identifies the EXTENDED profile
+     */
+    const PROFILE_EXTENDED = 3;
+
+    /**
+     * Internal constant that identifies the XRECHNUNG profile (germany only)
+     */
+    const PROFILE_XRECHNUNG = 4;
+
+    /**
+     * Internal constant that identifies the XRECHNUNG profile version 2.0 (germany only)
+     */
+    const PROFILE_XRECHNUNG_2 = 5;
+
+    /**
+     * Internal constant that identifies the XRECHNUNG profile version 2.1 (germany only)
+     */
+    const PROFILE_XRECHNUNG_2_1 = 6;
+
+    /**
+     * Internal constant that identifies the XRECHNUNG profile version 2.2 (germany only)
+     */
+    const PROFILE_XRECHNUNG_2_2 = 7;
+
+    /**
+     * Internal constant that identifies the MINIMUM profile
+     */
+    const PROFILE_MINIMUM = 8;
+
+    /**
+     * Internal constant that identifies the XRECHNUNG profile version 2.3 (germany only)
+     */
+    const PROFILE_XRECHNUNG_2_3 = 9;
+
+    /**
+     * Internal constant that identifies the XRECHNUNG profile version 2.3 (germany only)
+     */
+    const PROFILE_XRECHNUNG_3 = 10;
+
+    /**
+     * The definitions of the several profiles
+     */
+    const PROFILEDEF = [
+        self::PROFILE_BASIC => [
+            'name' => 'basic',
+            'altname' => 'BASIC',
+            'description' => 'The BASIC profile is a subset of EN 16931-1 and can be used for simple VAT-compliant invoices.',
+            'contextparameter' => 'urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:basic',
+            'businessprocess' => null,
+            'attachmentfilename' => 'factur-x.xml',
+            'xmpname' => 'BASIC',
+            'xsdfilename' => 'FACTUR-X_BASIC.xsd',
+            'schematronfilename' => 'FACTUR-X_BASIC.sch',
+        ],
+        self::PROFILE_BASICWL => [
+            'name' => 'basicwl',
+            'altname' => 'BASIC WL',
+            'description' => 'The BASIC WL profile does not contain any invoice items and therefore cannot display any VAT-compliant ' .
+                'invoices. However, it contains all the information at document level that is required to post the invoice. ' .
+                'It is therefore a booking aid.',
+            'contextparameter' => 'urn:factur-x.eu:1p0:basicwl',
+            'businessprocess' => null,
+            'attachmentfilename' => 'factur-x.xml',
+            'xmpname' => 'BASIC WL',
+            'xsdfilename' => 'FACTUR-X_BASIC-WL.xsd',
+            'schematronfilename' => 'FACTUR-X_BASIC-WL.sch',
+        ],
+        self::PROFILE_EN16931 => [
+            'name' => 'en16931',
+            'altname' => 'EN 16931 (COMFORT)',
+            'description' => 'The EN 16931 (COMFORT) profile completely maps the EN 16931-1 and focuses on the core elements ' .
+                'of an electronic invoice.',
+            'contextparameter' => 'urn:cen.eu:en16931:2017',
+            'businessprocess' => null,
+            'attachmentfilename' => 'factur-x.xml',
+            'xmpname' => 'EN 16931',
+            'xsdfilename' => 'FACTUR-X_EN16931.xsd',
+            'schematronfilename' => 'FACTUR-X_EN16931.sch',
+        ],
+        self::PROFILE_EXTENDED => [
+            'name' => 'extended',
+            'altname' => 'EXTENDED',
+            'description' => 'The EXTENDED profile is an extension of EN 16931-1 to support more complex business processes (invoices ' .
+                'in which several deliveries / delivery locations are billed, structured payment conditions, further information at ' .
+                'item level to support warehousing, etc.)',
+            'contextparameter' => 'urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended',
+            'businessprocess' => null,
+            'attachmentfilename' => 'factur-x.xml',
+            'xmpname' => 'EXTENDED',
+            'xsdfilename' => 'FACTUR-X_EXTENDED.xsd',
+            'schematronfilename' => 'FACTUR-X_EXTENDED.sch',
+        ],
+        self::PROFILE_XRECHNUNG => [
+            'name' => 'en16931',
+            'altname' => 'XRECHNUNG',
+            'description' => 'The reference profile is based on the CIUS XRechnung, which is maintained by KoSIT. It represents an ' .
+                'extension of EN 16931-1 with its own business rules, the national German laws and regulations. It is therefore more ' .
+                'specific than the EN 16931 (COMFORT) profile.',
+            'contextparameter' => 'urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_1.2',
+            'businessprocess' => null,
+            'attachmentfilename' => 'xrechnung.xml',
+            'xmpname' => 'EN 16931',
+            'xsdfilename' => 'FACTUR-X_EN16931.xsd',
+            'schematronfilename' => 'FACTUR-X_EN16931.sch',
+        ],
+        self::PROFILE_XRECHNUNG_2 => [
+            'name' => 'en16931',
+            'altname' => 'XRECHNUNG',
+            'description' => 'The reference profile is based on the CIUS XRechnung, which is maintained by KoSIT. It represents an ' .
+                'extension of EN 16931-1 with its own business rules, the national German laws and regulations. It is therefore more ' .
+                'specific than the EN 16931 (COMFORT) profile.',
+            'contextparameter' => 'urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_2.0',
+            'businessprocess' => null,
+            'attachmentfilename' => 'xrechnung.xml',
+            'xmpname' => 'EN 16931',
+            'xsdfilename' => 'FACTUR-X_EN16931.xsd',
+            'schematronfilename' => 'FACTUR-X_EN16931.sch',
+        ],
+        self::PROFILE_XRECHNUNG_2_1 => [
+            'name' => 'en16931',
+            'altname' => 'XRECHNUNG',
+            'description' => 'The reference profile is based on the CIUS XRechnung, which is maintained by KoSIT. It represents an ' .
+                'extension of EN 16931-1 with its own business rules, the national German laws and regulations. It is therefore more ' .
+                'specific than the EN 16931 (COMFORT) profile.',
+            'contextparameter' => 'urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_2.1',
+            'businessprocess' => null,
+            'attachmentfilename' => 'xrechnung.xml',
+            'xmpname' => 'EN 16931',
+            'xsdfilename' => 'FACTUR-X_EN16931.xsd',
+            'schematronfilename' => 'FACTUR-X_EN16931.sch',
+        ],
+        self::PROFILE_XRECHNUNG_2_2 => [
+            'name' => 'en16931',
+            'altname' => 'XRECHNUNG',
+            'description' => 'The reference profile is based on the CIUS XRechnung, which is maintained by KoSIT. It represents an ' .
+                'extension of EN 16931-1 with its own business rules, the national German laws and regulations. It is therefore more ' .
+                'specific than the EN 16931 (COMFORT) profile.',
+            'contextparameter' => 'urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_2.2',
+            'businessprocess' => null,
+            'attachmentfilename' => 'xrechnung.xml',
+            'xmpname' => 'EN 16931',
+            'xsdfilename' => 'FACTUR-X_EN16931.xsd',
+            'schematronfilename' => 'FACTUR-X_EN16931.sch',
+        ],
+        self::PROFILE_MINIMUM => [
+            'name' => 'minimum',
+            'altname' => 'MINIMUM',
+            'description' => 'The MINIMUM profile includes the main information about the purchaser and vendor, the total invoice amount, and the total sales tax (VAT).' .
+                'Only the purchaser s reference can be given at item level. A breakdown of the sales tax (VAT) is not supported. It is therefore a booking aid.',
+            'contextparameter' => 'urn:factur-x.eu:1p0:minimum',
+            'businessprocess' => null,
+            'attachmentfilename' => 'factur-x.xml',
+            'xmpname' => 'MINIMUM',
+            'xsdfilename' => 'FACTUR-X_MINIMUM.xsd',
+            'schematronfilename' => 'FACTUR-X_MINIMUM.sch',
+        ],
+        self::PROFILE_XRECHNUNG_2_3 => [
+            'name' => 'en16931',
+            'altname' => 'XRECHNUNG',
+            'description' => 'The reference profile is based on the CIUS XRechnung, which is maintained by KoSIT. It represents an ' .
+                'extension of EN 16931-1 with its own business rules, the national German laws and regulations. It is therefore more ' .
+                'specific than the EN 16931 (COMFORT) profile.',
+            'contextparameter' => 'urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_2.3',
+            'businessprocess' => null,
+            'attachmentfilename' => 'xrechnung.xml',
+            'xmpname' => 'EN 16931',
+            'xsdfilename' => 'FACTUR-X_EN16931.xsd',
+            'schematronfilename' => 'FACTUR-X_EN16931.sch',
+        ],
+        self::PROFILE_XRECHNUNG_3 => [
+            'name' => 'en16931',
+            'altname' => 'XRECHNUNG',
+            'description' => 'The reference profile is based on the CIUS XRechnung, which is maintained by KoSIT. It represents an ' .
+                'extension of EN 16931-1 with its own business rules, the national German laws and regulations. It is therefore more ' .
+                'specific than the EN 16931 (COMFORT) profile.',
+            'contextparameter' => 'urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0',
+            'businessprocess' => 'urn:fdc:peppol.eu:2017:poacc:billing:01:1.0',
+            'attachmentfilename' => 'xrechnung.xml',
+            'xmpname' => 'EN 16931',
+            'xsdfilename' => 'FACTUR-X_EN16931.xsd',
+            'schematronfilename' => 'FACTUR-X_EN16931.sch',
+        ],
+    ];
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdSettings.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdSettings.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdSettings.php	(revision 8435)
@@ -0,0 +1,367 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use horstoeko\stringmanagement\PathUtils;
+
+/**
+ * Class representing the general settings
+ *
+ * @category Zugferd
+ * @package  zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdSettings
+{
+    /**
+     * The number of decimals for amount values
+     *
+     * @var integer
+     */
+    protected static $amountDecimals = 2;
+
+    /**
+     * The number of decimals for quantity values
+     *
+     * @var integer
+     */
+    protected static $quantityDecimals = 2;
+
+    /**
+     * The number of decimals for percent values
+     *
+     * @var integer
+     */
+    protected static $percentDecimals = 2;
+
+    /**
+     * The decimal separator
+     *
+     * @var string
+     */
+    protected static $decimalSeparator = ".";
+
+    /**
+     * The thousands seperator
+     *
+     * @var string
+     */
+    protected static $thousandsSeparator = "";
+
+    /**
+     * The filename of a ICC profile
+     *
+     * @var string
+     */
+    protected static $iccProfileFilename = "sRGB_v4_ICC.icc";
+
+    /**
+     * The filename of the XMP meta data
+     *
+     * @var string
+     */
+    protected static $xmpMetaDataFilename = "facturx_extension_schema.xmp";
+
+    /**
+     * Node paths which present a unit amount. Used for special amount formatting. See unitAmountDecimals property.
+     *
+     * @var array
+     */
+    protected static $specialDecimalPlacesMaps = [];
+
+    /**
+     * Get the number of decimals to use for amount values
+     *
+     * @return integer
+     */
+    public static function getAmountDecimals(): int
+    {
+        return static::$amountDecimals;
+    }
+
+    /**
+     * Set the number of decimals to use for amount values
+     *
+     * @param  integer $amountDecimals
+     * @return void
+     */
+    public static function setAmountDecimals(int $amountDecimals): void
+    {
+        static::$amountDecimals = $amountDecimals;
+    }
+
+    /**
+     * Get the number of decimals to use for amount values
+     *
+     * @return integer
+     */
+    public static function getQuantityDecimals(): int
+    {
+        return static::$quantityDecimals;
+    }
+
+    /**
+     * Set the number of decimals to use for quantity values
+     *
+     * @param  integer $quantityDecimals
+     * @return void
+     */
+    public static function setQuantityDecimals(int $quantityDecimals): void
+    {
+        static::$quantityDecimals = $quantityDecimals;
+    }
+
+    /**
+     * Get the number of decimals to use for percent values
+     *
+     * @return integer
+     */
+    public static function getPercentDecimals(): int
+    {
+        return static::$percentDecimals;
+    }
+
+    /**
+     * Set the number of decimals to use for percent values
+     *
+     * @param  integer $percentDecimals
+     * @return void
+     */
+    public static function setPercentDecimals(int $percentDecimals): void
+    {
+        static::$percentDecimals = $percentDecimals;
+    }
+
+    /**
+     * Get the decimal separator
+     *
+     * @return string
+     */
+    public static function getDecimalSeparator(): string
+    {
+        return static::$decimalSeparator;
+    }
+
+    /**
+     * Set the decimal separator
+     *
+     * @param  string $decimalSeparator
+     * @return void
+     */
+    public static function setDecimalSeparator(string $decimalSeparator): void
+    {
+        static::$decimalSeparator = $decimalSeparator;
+    }
+
+    /**
+     * Get the thousands separator
+     *
+     * @return string
+     */
+    public static function getThousandsSeparator(): string
+    {
+        return static::$thousandsSeparator;
+    }
+
+    /**
+     * Set the thousands separator
+     *
+     * @param  string $thousandsSeparator
+     * @return void
+     */
+    public static function setThousandsSeparator(string $thousandsSeparator): void
+    {
+        static::$thousandsSeparator = $thousandsSeparator;
+    }
+
+    /**
+     * Get the filename of the ICC Profile
+     *
+     * @return string
+     */
+    public static function getIccProfileFilename(): string
+    {
+        return static::$iccProfileFilename;
+    }
+
+    /**
+     * Set the filename of the ICC Profile
+     *
+     * @param  string $iccProfileFilename
+     * @return void
+     */
+    public static function setIccProfileFilename(string $iccProfileFilename): void
+    {
+        static::$iccProfileFilename = $iccProfileFilename;
+    }
+
+    /**
+     * Get the filename for the XMP meta data
+     *
+     * @return string
+     */
+    public static function getXmpMetaDataFilename(): string
+    {
+        return static::$xmpMetaDataFilename;
+    }
+
+    /**
+     * Set the filename for the XMP meta data
+     *
+     * @param string $xmpMetaDataFilename
+     * @return void
+     */
+    public static function setXmpMetaDataFilename(string $xmpMetaDataFilename): void
+    {
+        static::$xmpMetaDataFilename = $xmpMetaDataFilename;
+    }
+
+    /**
+     * Returns a list of node paths which have a special number of decimal places
+     *
+     * @return array
+     */
+    public static function getSpecialDecimalPlacesMaps(): array
+    {
+        return static::$specialDecimalPlacesMaps;
+    }
+
+    /**
+     * Get a specific map for node paths with a special number of decimal places. If not map
+     * is found then the default value is returns
+     *
+     * @param string $nodePath
+     * @param integer $defaultDecimalPlaces
+     * @return integer
+     */
+    public static function getSpecialDecimalPlacesMap(string $nodePath, int $defaultDecimalPlaces): int
+    {
+        $nodePath = preg_replace('@\[\d+\]@', '', $nodePath);
+        return static::$specialDecimalPlacesMaps[$nodePath] ?? $defaultDecimalPlaces;
+    }
+
+    /**
+     * Update the map of node paths which have a special number of decimal places
+     *
+     * @param array $specialDecimalPlacesMaps
+     * @return void
+     */
+    public static function setSpecialDecimalPlacesMaps(array $specialDecimalPlacesMaps): void
+    {
+        static::$specialDecimalPlacesMaps = $specialDecimalPlacesMaps;
+    }
+
+    /**
+     * Add a new map for a node path with a special number of decimal places
+     *
+     * @param string $nodePath
+     * @param integer $defaultDecimalPlaces
+     * @return void
+     */
+    public static function addSpecialDecimalPlacesMap(string $nodePath, int $defaultDecimalPlaces): void
+    {
+        $nodePath = preg_replace('@\[\d+\]@', '', $nodePath);
+        static::$specialDecimalPlacesMaps[$nodePath] = $defaultDecimalPlaces;
+    }
+
+    /**
+     * Set the number of decimals to use for unit single amount (unit prices) values
+     *
+     * @param  integer $amountDecimals
+     * @return void
+     */
+    public static function setUnitAmountDecimals(int $amountDecimals): void
+    {
+        ZugferdSettings::addSpecialDecimalPlacesMap('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount', $amountDecimals);
+        ZugferdSettings::addSpecialDecimalPlacesMap('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount', $amountDecimals);
+    }
+
+    /**
+     * Get root directory
+     *
+     * @return string
+     */
+    public static function getRootDirectory(): string
+    {
+        return PathUtils::combineAllPaths(dirname(__FILE__), "..");
+    }
+
+    /**
+     * Get the directory where all the sources are stored
+     *
+     * @return string
+     */
+    public static function getSourceDirectory(): string
+    {
+        return PathUtils::combineAllPaths(static::getRootDirectory(), "src");
+    }
+
+    /**
+     * Get the directory where all the assets are stored
+     *
+     * @return string
+     */
+    public static function getAssetDirectory(): string
+    {
+        return PathUtils::combineAllPaths(static::getSourceDirectory(), "assets");
+    }
+
+    /**
+     * Get the directory where all the assets are stored
+     *
+     * @return string
+     */
+    public static function getYamlDirectory(): string
+    {
+        return PathUtils::combineAllPaths(static::getSourceDirectory(), "yaml");
+    }
+
+    /**
+     * Get the directory where all the validation files are located
+     *
+     * @return string
+     */
+    public static function getValidationDirectory(): string
+    {
+        return PathUtils::combineAllPaths(static::getSourceDirectory(), "validation");
+    }
+
+    /**
+     * Get the directory where all the schema (XSD) files are located
+     *
+     * @return string
+     */
+    public static function getSchemaDirectory(): string
+    {
+        return PathUtils::combineAllPaths(static::getSourceDirectory(), "schema");
+    }
+
+    /**
+     * Get the full filename of the ICC profile to use
+     *
+     * @return string
+     */
+    public static function getFullIccProfileFilename(): string
+    {
+        return PathUtils::combinePathWithFile(static::getAssetDirectory(), static::$iccProfileFilename);
+    }
+
+    /**
+     * Get the full filename containg the XNP information to user
+     *
+     * @return string
+     */
+    public static function getFullXmpMetaDataFilename(): string
+    {
+        return PathUtils::combinePathWithFile(static::getAssetDirectory(), static::$xmpMetaDataFilename);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdXsdValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdXsdValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/ZugferdXsdValidator.php	(revision 8435)
@@ -0,0 +1,214 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd;
+
+use Exception;
+use DOMDocument;
+use LibXMLError;
+use horstoeko\stringmanagement\PathUtils;
+use horstoeko\zugferd\exception\ZugferdFileNotFoundException;
+use horstoeko\zugferd\ZugferdDocument;
+use horstoeko\zugferd\ZugferdSettings;
+use PhpParser\Node\Expr\Throw_;
+use Throwable;
+
+/**
+ * Class representing the validator against XSD for documents
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdXsdValidator
+{
+    /**
+     * The invoice document reference
+     *
+     * @var ZugferdDocument
+     */
+    private $document;
+
+    /**
+     * Internal error bag
+     *
+     * @var array
+     */
+    private $errorBag = [];
+
+    /**
+     * Constructor
+     *
+     * @codeCoverageIgnore
+     * @param ZugferdDocument $document
+     */
+    public function __construct(ZugferdDocument $document)
+    {
+        $this->document = $document;
+    }
+
+    /**
+     * Perform validation of document
+     *
+     * @return ZugferdXsdValidator
+     */
+    public function validate(): ZugferdXsdValidator
+    {
+        $this->clearErrorBag();
+        $this->initLibXml();
+
+        try {
+            if (!$this->getDocumentContentAsDomDocument()->schemaValidate($this->getDocumentXsdFilename())) {
+                $this->pushLibXmlErrorsToErrorBag();
+            }
+        } catch (Exception $exception) {
+            $this->addToErrorBag($exception);
+        } finally {
+            $this->finalizeLibXml();
+        }
+
+        return $this;
+    }
+
+    /**
+     * Returns true if validation passed otherwise false
+     *
+     * @return boolean
+     */
+    public function validationPased(): bool
+    {
+        return empty($this->errorBag);
+    }
+
+    /**
+     * Returns true if validation failed otherwise false
+     *
+     * @return boolean
+     */
+    public function validationFailed(): bool
+    {
+        return !$this->validationPased();
+    }
+
+    /**
+     * Returns an array of all validation errors
+     *
+     * @return array
+     */
+    public function validationErrors(): array
+    {
+        return $this->errorBag;
+    }
+
+    /**
+     * Initialize LibXML
+     *
+     * @return void
+     */
+    private function initLibXml(): void
+    {
+        libxml_use_internal_errors(true);
+    }
+
+    /**
+     * Finalize LibXML
+     *
+     * @return void
+     */
+    private function finalizeLibXml(): void
+    {
+        libxml_clear_errors();
+        libxml_use_internal_errors(false);
+    }
+
+    /**
+     * Get the content of the document
+     *
+     * @return string
+     */
+    private function getDocumentContent(): string
+    {
+        return $this->document->serializeAsXml();
+    }
+
+    /**
+     * Get the content of the document as a DOMDocument
+     *
+     * @return DOMDocument
+     */
+    private function getDocumentContentAsDomDocument(): DOMDocument
+    {
+        $doc = new DOMDocument();
+        $doc->loadXML($this->getDocumentContent());
+
+        return $doc;
+    }
+
+    /**
+     * Get the XSD file (schema definition) for the document
+     *
+     * @return string
+     */
+    private function getDocumentXsdFilename(): string
+    {
+        $xsdFilename = PathUtils::combineAllPaths(
+            ZugferdSettings::getSchemaDirectory(),
+            $this->document->getProfileDefinitionParameter('xsdfilename')
+        );
+
+        if (!file_exists($xsdFilename)) {
+            throw new ZugferdFileNotFoundException($xsdFilename);
+        }
+
+        return $xsdFilename;
+    }
+
+    /**
+     * Clear the internal error bag
+     *
+     * @return void
+     */
+    private function clearErrorBag(): void
+    {
+        $this->errorBag = [];
+    }
+
+    /**
+     * Add message to error bag
+     *
+     * @param string|Exception|Throwable|LibXMLError $error
+     * @return void
+     */
+    private function addToErrorBag($error): void
+    {
+        if (is_string($error)) {
+            $this->errorBag[] = $error;
+        } elseif ($error instanceof Exception) {
+            $this->errorBag[] = $error->getMessage();
+        } elseif ($error instanceof Throwable) {
+            $this->errorBag[] = $error->getMessage();
+        } elseif ($error instanceof LibXMLError) {
+            $this->errorBag[] = sprintf('[line %d] %s : %s', $error->line, $error->code, $error->message);
+        }
+    }
+
+    /**
+     * Pushes validation errors to error bag
+     *
+     * @return void
+     */
+    private function pushLibXmlErrorsToErrorBag(): void
+    {
+        foreach (libxml_get_errors() as $xmlError) {
+            $this->addToErrorBag($xmlError);
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/assets/facturx_extension_schema.xmp
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/assets/facturx_extension_schema.xmp	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/assets/facturx_extension_schema.xmp	(revision 8435)
@@ -0,0 +1,110 @@
+<!--
+PDFlib GmbH 2013-2014
+
+Sample FACTUR-X XMP with the required PDF/A extension schema description
+for the XMP properties of the FACTUR-X schema and the actual FACTUR-X properties.
+
+Schema name: FACTUR-X Schema
+Preferred schema namespace prefix: fx
+Schema namespace URI: urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#
+
+Notes on the Factur-X schema namespace URI:
+
+- The use of mixed upper/lowercase in "CrossIndustryDocument" conforms to
+  the Factur-X 1.0 specification. The PDF samples distributed with the
+  Factur-X 1.0 info package use all-lowercase spelling "crossindustrydocument"
+  which is not correct since it violates the Factur-X specification.
+
+- The required trailing "#" character is missing in the comment in the
+  Factur-X 1.0 extension schema description which is included in the Factur-X
+  specification, but it is correctly present in the actual XMP.
+
+
+-->
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+
+  <!-- The actual Factur-X properties; adjust if required -->  
+  <rdf:Description rdf:about="" xmlns:fx="urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#">
+     <fx:DocumentType>INVOICE</fx:DocumentType>
+     <fx:DocumentFileName>factur-x.xml</fx:DocumentFileName>
+     <fx:Version>1.0</fx:Version>
+  	 <fx:ConformanceLevel>BASIC</fx:ConformanceLevel>
+  </rdf:Description>
+  
+  <!-- PDF/A extension schema description for the Factur-X schema.
+     It is crucial for PDF/A-3 conformance. Don't touch! -->
+  <rdf:Description rdf:about=""
+		xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/"
+		xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#"
+		xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#">
+	 <pdfaExtension:schemas>
+		<rdf:Bag>
+		   <rdf:li rdf:parseType="Resource">
+			  <pdfaSchema:schema>Factur-X PDFA Extension Schema</pdfaSchema:schema>
+			  <pdfaSchema:namespaceURI>urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#</pdfaSchema:namespaceURI>
+			  <pdfaSchema:prefix>fx</pdfaSchema:prefix>
+			  <pdfaSchema:property>
+				 <rdf:Seq>
+					<rdf:li rdf:parseType="Resource">
+					   <pdfaProperty:name>DocumentFileName</pdfaProperty:name>
+					   <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+					   <pdfaProperty:category>external</pdfaProperty:category>
+					   <pdfaProperty:description>name of the embedded XML invoice file</pdfaProperty:description>
+					</rdf:li>
+					<rdf:li rdf:parseType="Resource">
+					   <pdfaProperty:name>DocumentType</pdfaProperty:name>
+					   <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+					   <pdfaProperty:category>external</pdfaProperty:category>
+					   <pdfaProperty:description>INVOICE</pdfaProperty:description>
+					</rdf:li>
+					<rdf:li rdf:parseType="Resource">
+					   <pdfaProperty:name>Version</pdfaProperty:name>
+					   <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+					   <pdfaProperty:category>external</pdfaProperty:category>
+					   <pdfaProperty:description>The actual version of the Factur-X XML schema</pdfaProperty:description>
+					</rdf:li>
+					<rdf:li rdf:parseType="Resource">
+					   <pdfaProperty:name>ConformanceLevel</pdfaProperty:name>
+					   <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+					   <pdfaProperty:category>external</pdfaProperty:category>
+					   <pdfaProperty:description>The conformance level of the embedded Factur-X data</pdfaProperty:description>
+					</rdf:li>
+				 </rdf:Seq>
+			  </pdfaSchema:property>
+		   </rdf:li>
+		</rdf:Bag>
+	 </pdfaExtension:schemas>
+  </rdf:Description>
+
+  <!-- PDF/A Metadata -->
+  <rdf:Description xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/" rdf:about="">
+      <pdfaid:part>3</pdfaid:part>
+      <pdfaid:conformance>B</pdfaid:conformance>
+  </rdf:Description>
+  <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="">
+      <dc:title>
+          <rdf:Alt>
+              <rdf:li xml:lang="x-default">FOURNISSEUR F: Invoice 2017-TEST-01</rdf:li>
+          </rdf:Alt>
+      </dc:title>
+      <dc:creator>
+          <rdf:Seq>
+              <rdf:li>FOURNISSEUR F</rdf:li>
+          </rdf:Seq>
+      </dc:creator>
+      <dc:description>
+          <rdf:Alt>
+              <rdf:li xml:lang="x-default">Factur-X Invoice 2017-TEST-01 dated 2017-10-31 issued by FOURNISSEUR F
+              </rdf:li>
+          </rdf:Alt>
+      </dc:description>
+  </rdf:Description>
+  <rdf:Description xmlns:pdf="http://ns.adobe.com/pdf/1.3/" rdf:about="">
+      <pdf:Producer>PyPDF2</pdf:Producer>
+  </rdf:Description>
+  <rdf:Description xmlns:xmp="http://ns.adobe.com/xap/1.0/" rdf:about="">
+      <xmp:CreatorTool>factur-x php lib by @GP</xmp:CreatorTool>
+      <xmp:CreateDate>2017-11-30T16:12:04+00:00</xmp:CreateDate>
+      <xmp:ModifyDate>2017-11-30T16:12:04+00:00</xmp:ModifyDate>
+  </rdf:Description>
+</rdf:RDF>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdAccountingAccountsClassificationTypes.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdAccountingAccountsClassificationTypes.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdAccountingAccountsClassificationTypes.php	(revision 8435)
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing Accounting Account classifications
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdAccountingAccountsClassificationTypes
+{
+    /**
+     * The code indicates a general chart of accounts
+     */
+    const GENERAL_ACCOUNT_CHART_OF_ACCOUNTS = '1';
+
+    /**
+     * The code indicates a cost chart of accounts
+     */
+    const COST_ACCOUNTING_CHART_OF_ACCOUNTS = '2';
+
+    /**
+     * The code indicates a budget chart of accounts
+     */
+    const BUDGETARY_ACCOUNT_CHART_OF_ACCOUNTS = '3';
+
+    /**
+     * The code indicates a payable chart of accounts
+     */
+    const PAYABLE_ACCOUNT_CHART_OF_ACCOUNTS = '4';
+
+    /**
+     * The code indicates a receivable chart of accounts
+     */
+    const RECEIVABLE_ACCOUNT_CHART_OF_ACCOUNTS = '5';
+
+    /**
+     * The code indicates a job chart of accounts
+     */
+    const JOB_ACCOUNT_CHART_OF_ACCOUNTS = '6';
+
+    /**
+     * The code indicates a building site chart of accounts
+     */
+    const BUILDING_SITE_ACCOUNT_CHART_OF_ACCOUNTS = '7';
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdAllowanceCodes.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdAllowanceCodes.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdAllowanceCodes.php	(revision 8435)
@@ -0,0 +1,117 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing the Allowance codes
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdAllowanceCodes
+{
+    /**
+     * Bonus for works ahead of schedule
+     */
+    const BONUS_FOR_WORKS_AHEAD_OF_SCHEDULE = "41";
+
+    /**
+     * Other bonus
+     */
+    const OTHER_BONUS = "42";
+
+    /**
+     * Manufacturerâs consumer discount
+     */
+    const MANUFACTURERS_CONSUMER_DISCOUNT = "60";
+
+    /**
+     * Due to military status
+     */
+    const DUE_TO_MILITARY_STATUS = "62";
+
+    /**
+     * Due to work accident
+     */
+    const DUE_TO_WORK_ACCIDENT = "63";
+
+    /**
+     * Special agreement
+     */
+    const SPECIAL_AGREEMENT = "64";
+
+    /**
+     * Production error discount
+     */
+    const PRODUCTION_ERROR_DISCOUNT = "65";
+
+    /**
+     * New outlet discount
+     */
+    const NEW_OUTLET_DISCOUNT = "66";
+
+    /**
+     * Sample discount
+     */
+    const SAMPLE_DISCOUNT = "67";
+
+    /**
+     * End-of-range discount
+     */
+    const ENDOFRANGE_DISCOUNT = "68";
+
+    /**
+     * Incoterm discount
+     */
+    const INCOTERM_DISCOUNT = "70";
+
+    /**
+     * Point of sales threshold allowance
+     */
+    const POINT_OF_SALES_THRESHOLD_ALLOWANCE = "71";
+
+    /**
+     * Material surcharge/deduction
+     */
+    const MATERIAL_SURCHARGE_DEDUCTION = "88";
+
+    /**
+     * Discount
+     */
+    const DISCOUNT = "95";
+
+    /**
+     * Special rebate
+     */
+    const SPECIAL_REBATE = "100";
+
+    /**
+     * Fixed long term
+     */
+    const FIXED_LONG_TERM = "102";
+
+    /**
+     * Temporary
+     */
+    const TEMPORARY = "103";
+
+    /**
+     * Standard
+     */
+    const STANDARD = "104";
+
+    /**
+     * Yearly turnover
+     */
+    const YEARLY_TURNOVER = "105";
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdChargeCodes.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdChargeCodes.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdChargeCodes.php	(revision 8435)
@@ -0,0 +1,907 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing the Charge codes
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdChargeCodes
+{
+    /**
+     * Advertising
+     */
+    const ADVERTISING = "AA";
+
+    /**
+     * Telecommunication
+     */
+    const TELECOMMUNICATION = "AAA";
+
+    /**
+     * Technical modification
+     */
+    const TECHNICAL_MODIFICATION = "AAC";
+
+    /**
+     * Job-order production
+     */
+    const JOBORDER_PRODUCTION = "AAD";
+
+    /**
+     * Outlays
+     */
+    const OUTLAYS = "AAE";
+
+    /**
+     * Off-premises
+     */
+    const OFFPREMISES = "AAF";
+
+    /**
+     * Additional processing
+     */
+    const ADDITIONAL_PROCESSING = "AAH";
+
+    /**
+     * Attesting
+     */
+    const ATTESTING = "AAI";
+
+    /**
+     * Acceptance
+     */
+    const ACCEPTANCE = "AAS";
+
+    /**
+     * Rush delivery
+     */
+    const RUSH_DELIVERY = "AAT";
+
+    /**
+     * Special construction
+     */
+    const SPECIAL_CONSTRUCTION = "AAV";
+
+    /**
+     * Airport facilities
+     */
+    const AIRPORT_FACILITIES = "AAY";
+
+    /**
+     * Concession
+     */
+    const CONCESSION = "AAZ";
+
+    /**
+     * Compulsory storage
+     */
+    const COMPULSORY_STORAGE = "ABA";
+
+    /**
+     * Fuel removal
+     */
+    const FUEL_REMOVAL = "ABB";
+
+    /**
+     * Into plane
+     */
+    const INTO_PLANE = "ABC";
+
+    /**
+     * Overtime
+     */
+    const OVERTIME = "ABD";
+
+    /**
+     * Tooling
+     */
+    const TOOLING = "ABF";
+
+    /**
+     * Miscellaneous
+     */
+    const MISCELLANEOUS = "ABK";
+
+    /**
+     * Additional packaging
+     */
+    const ADDITIONAL_PACKAGING = "ABL";
+
+    /**
+     * Dunnage
+     */
+    const DUNNAGE = "ABN";
+
+    /**
+     * Containerisation
+     */
+    const CONTAINERISATION = "ABR";
+
+    /**
+     * Carton packing
+     */
+    const CARTON_PACKING = "ABS";
+
+    /**
+     * Hessian wrapped
+     */
+    const HESSIAN_WRAPPED = "ABT";
+
+    /**
+     * Polyethylene wrap packing
+     */
+    const POLYETHYLENE_WRAP_PACKING = "ABU";
+
+    /**
+     * Miscellaneous treatment
+     */
+    const MISCELLANEOUS_TREATMENT = "ACF";
+
+    /**
+     * Enamelling treatment
+     */
+    const ENAMELLING_TREATMENT = "ACG";
+
+    /**
+     * Heat treatment
+     */
+    const HEAT_TREATMENT = "ACH";
+
+    /**
+     * Plating treatment
+     */
+    const PLATING_TREATMENT = "ACI";
+
+    /**
+     * Painting
+     */
+    const PAINTING = "ACJ";
+
+    /**
+     * Polishing
+     */
+    const POLISHING = "ACK";
+
+    /**
+     * Priming
+     */
+    const PRIMING = "ACL";
+
+    /**
+     * Preservation treatment
+     */
+    const PRESERVATION_TREATMENT = "ACM";
+
+    /**
+     * Fitting
+     */
+    const FITTING = "ACS";
+
+    /**
+     * Consolidation
+     */
+    const CONSOLIDATION = "ADC";
+
+    /**
+     * Bill of lading
+     */
+    const BILL_OF_LADING = "ADE";
+
+    /**
+     * Airbag
+     */
+    const AIRBAG = "ADJ";
+
+    /**
+     * Transfer
+     */
+    const TRANSFER = "ADK";
+
+    /**
+     * Slipsheet
+     */
+    const SLIPSHEET = "ADL";
+
+    /**
+     * Binding
+     */
+    const BINDING = "ADM";
+
+    /**
+     * Repair or replacement of broken returnable package
+     */
+    const REPAIR_OR_REPLACEMENT_OF_BROKEN_RETURNABLE_PACKAGE = "ADN";
+
+    /**
+     * Efficient logistics
+     */
+    const EFFICIENT_LOGISTICS = "ADO";
+
+    /**
+     * Merchandising
+     */
+    const MERCHANDISING = "ADP";
+
+    /**
+     * Product mix
+     */
+    const PRODUCT_MIX = "ADQ";
+
+    /**
+     * Other services
+     */
+    const OTHER_SERVICES = "ADR";
+
+    /**
+     * Pick-up
+     */
+    const PICKUP = "ADT";
+
+    /**
+     * Chronic illness
+     */
+    const CHRONIC_ILLNESS = "ADW";
+
+    /**
+     * New product introduction
+     */
+    const NEW_PRODUCT_INTRODUCTION = "ADY";
+
+    /**
+     * Direct delivery
+     */
+    const DIRECT_DELIVERY = "ADZ";
+
+    /**
+     * Diversion
+     */
+    const DIVERSION = "AEA";
+
+    /**
+     * Disconnect
+     */
+    const DISCONNECT = "AEB";
+
+    /**
+     * Distribution
+     */
+    const DISTRIBUTION = "AEC";
+
+    /**
+     * Handling of hazardous cargo
+     */
+    const HANDLING_OF_HAZARDOUS_CARGO = "AED";
+
+    /**
+     * Rents and leases
+     */
+    const RENTS_AND_LEASES = "AEF";
+
+    /**
+     * Location differential
+     */
+    const LOCATION_DIFFERENTIAL = "AEH";
+
+    /**
+     * Aircraft refueling
+     */
+    const AIRCRAFT_REFUELING = "AEI";
+
+    /**
+     * Fuel shipped into storage
+     */
+    const FUEL_SHIPPED_INTO_STORAGE = "AEJ";
+
+    /**
+     * Cash on delivery
+     */
+    const CASH_ON_DELIVERY = "AEK";
+
+    /**
+     * Small order processing service
+     */
+    const SMALL_ORDER_PROCESSING_SERVICE = "AEL";
+
+    /**
+     * Clerical or administrative services
+     */
+    const CLERICAL_OR_ADMINISTRATIVE_SERVICES = "AEM";
+
+    /**
+     * Guarantee
+     */
+    const GUARANTEE = "AEN";
+
+    /**
+     * Collection and recycling
+     */
+    const COLLECTION_AND_RECYCLING = "AEO";
+
+    /**
+     * Copyright fee collection
+     */
+    const COPYRIGHT_FEE_COLLECTION = "AEP";
+
+    /**
+     * Veterinary inspection service
+     */
+    const VETERINARY_INSPECTION_SERVICE = "AES";
+
+    /**
+     * Pensioner service
+     */
+    const PENSIONER_SERVICE = "AET";
+
+    /**
+     * Medicine free pass holder
+     */
+    const MEDICINE_FREE_PASS_HOLDER = "AEU";
+
+    /**
+     * Environmental protection service
+     */
+    const ENVIRONMENTAL_PROTECTION_SERVICE = "AEV";
+
+    /**
+     * Environmental clean-up service
+     */
+    const ENVIRONMENTAL_CLEANUP_SERVICE = "AEW";
+
+    /**
+     * National cheque processing service outside account area
+     */
+    const NATIONAL_CHEQUE_PROCESSING_SERVICE_OUTSIDE_ACCOUNT_AREA = "AEX";
+
+    /**
+     * National payment service outside account area
+     */
+    const NATIONAL_PAYMENT_SERVICE_OUTSIDE_ACCOUNT_AREA = "AEY";
+
+    /**
+     * National payment service within account area
+     */
+    const NATIONAL_PAYMENT_SERVICE_WITHIN_ACCOUNT_AREA = "AEZ";
+
+    /**
+     * Adjustments
+     */
+    const ADJUSTMENTS = "AJ";
+
+    /**
+     * Authentication
+     */
+    const AUTHENTICATION = "AU";
+
+    /**
+     * Cataloguing
+     */
+    const CATALOGUING = "CA";
+
+    /**
+     * Cartage
+     */
+    const CARTAGE = "CAB";
+
+    /**
+     * Certification
+     */
+    const CERTIFICATION = "CAD";
+
+    /**
+     * Certificate of conformance
+     */
+    const CERTIFICATE_OF_CONFORMANCE = "CAE";
+
+    /**
+     * Certificate of origin
+     */
+    const CERTIFICATE_OF_ORIGIN = "CAF";
+
+    /**
+     * Cutting
+     */
+    const CUTTING = "CAI";
+
+    /**
+     * Consular service
+     */
+    const CONSULAR_SERVICE = "CAJ";
+
+    /**
+     * Customer collection
+     */
+    const CUSTOMER_COLLECTION = "CAK";
+
+    /**
+     * Payroll payment service
+     */
+    const PAYROLL_PAYMENT_SERVICE = "CAL";
+
+    /**
+     * Cash transportation
+     */
+    const CASH_TRANSPORTATION = "CAM";
+
+    /**
+     * Home banking service
+     */
+    const HOME_BANKING_SERVICE = "CAN";
+
+    /**
+     * Bilateral agreement service
+     */
+    const BILATERAL_AGREEMENT_SERVICE = "CAO";
+
+    /**
+     * Insurance brokerage service
+     */
+    const INSURANCE_BROKERAGE_SERVICE = "CAP";
+
+    /**
+     * Cheque generation
+     */
+    const CHEQUE_GENERATION = "CAQ";
+
+    /**
+     * Preferential merchandising location
+     */
+    const PREFERENTIAL_MERCHANDISING_LOCATION = "CAR";
+
+    /**
+     * Crane
+     */
+    const CRANE = "CAS";
+
+    /**
+     * Special colour service
+     */
+    const SPECIAL_COLOUR_SERVICE = "CAT";
+
+    /**
+     * Sorting
+     */
+    const SORTING = "CAU";
+
+    /**
+     * Battery collection and recycling
+     */
+    const BATTERY_COLLECTION_AND_RECYCLING = "CAV";
+
+    /**
+     * Product take back fee
+     */
+    const PRODUCT_TAKE_BACK_FEE = "CAW";
+
+    /**
+     * Quality control released
+     */
+    const QUALITY_CONTROL_RELEASED = "CAX";
+
+    /**
+     * Quality control held
+     */
+    const QUALITY_CONTROL_HELD = "CAY";
+
+    /**
+     * Quality control embargo
+     */
+    const QUALITY_CONTROL_EMBARGO = "CAZ";
+
+    /**
+     * Car loading
+     */
+    const CAR_LOADING = "CD";
+
+    /**
+     * Cleaning
+     */
+    const CLEANING = "CG";
+
+    /**
+     * Cigarette stamping
+     */
+    const CIGARETTE_STAMPING = "CS";
+
+    /**
+     * Count and recount
+     */
+    const COUNT_AND_RECOUNT = "CT";
+
+    /**
+     * Layout/design
+     */
+    const LAYOUT_DESIGN = "DAB";
+
+    /**
+     * Assortment allowance
+     */
+    const ASSORTMENT_ALLOWANCE = "DAC";
+
+    /**
+     * Driver assigned unloading
+     */
+    const DRIVER_ASSIGNED_UNLOADING = "DAD";
+
+    /**
+     * Debtor bound
+     */
+    const DEBTOR_BOUND = "DAF";
+
+    /**
+     * Dealer allowance
+     */
+    const DEALER_ALLOWANCE = "DAG";
+
+    /**
+     * Allowance transferable to the consumer
+     */
+    const ALLOWANCE_TRANSFERABLE_TO_THE_CONSUMER = "DAH";
+
+    /**
+     * Growth of business
+     */
+    const GROWTH_OF_BUSINESS = "DAI";
+
+    /**
+     * Introduction allowance
+     */
+    const INTRODUCTION_ALLOWANCE = "DAJ";
+
+    /**
+     * Multi-buy promotion
+     */
+    const MULTIBUY_PROMOTION = "DAK";
+
+    /**
+     * Partnership
+     */
+    const PARTNERSHIP = "DAL";
+
+    /**
+     * Return handling
+     */
+    const RETURN_HANDLING = "DAM";
+
+    /**
+     * Minimum order not fulfilled charge
+     */
+    const MINIMUM_ORDER_NOT_FULFILLED_CHARGE = "DAN";
+
+    /**
+     * Point of sales threshold allowance
+     */
+    const POINT_OF_SALES_THRESHOLD_ALLOWANCE = "DAO";
+
+    /**
+     * Wholesaling discount
+     */
+    const WHOLESALING_DISCOUNT = "DAP";
+
+    /**
+     * Documentary credits transfer commission
+     */
+    const DOCUMENTARY_CREDITS_TRANSFER_COMMISSION = "DAQ";
+
+    /**
+     * Delivery
+     */
+    const DELIVERY = "DL";
+
+    /**
+     * Engraving
+     */
+    const ENGRAVING = "EG";
+
+    /**
+     * Expediting
+     */
+    const EXPEDITING = "EP";
+
+    /**
+     * Exchange rate guarantee
+     */
+    const EXCHANGE_RATE_GUARANTEE = "ER";
+
+    /**
+     * Fabrication
+     */
+    const FABRICATION = "FAA";
+
+    /**
+     * Freight equalization
+     */
+    const FREIGHT_EQUALIZATION = "FAB";
+
+    /**
+     * Freight extraordinary handling
+     */
+    const FREIGHT_EXTRAORDINARY_HANDLING = "FAC";
+
+    /**
+     * Freight service
+     */
+    const FREIGHT_SERVICE = "FC";
+
+    /**
+     * Filling/handling
+     */
+    const FILLING_HANDLING = "FH";
+
+    /**
+     * Financing
+     */
+    const FINANCING = "FI";
+
+    /**
+     * Grinding
+     */
+    const GRINDING = "GAA";
+
+    /**
+     * Hose
+     */
+    const HOSE = "HAA";
+
+    /**
+     * Handling
+     */
+    const HANDLING = "HD";
+
+    /**
+     * Hoisting and hauling
+     */
+    const HOISTING_AND_HAULING = "HH";
+
+    /**
+     * Installation
+     */
+    const INSTALLATION = "IAA";
+
+    /**
+     * Installation and warranty
+     */
+    const INSTALLATION_AND_WARRANTY = "IAB";
+
+    /**
+     * Inside delivery
+     */
+    const INSIDE_DELIVERY = "ID";
+
+    /**
+     * Inspection
+     */
+    const INSPECTION = "IF";
+
+    /**
+     * Installation and training
+     */
+    const INSTALLATION_AND_TRAINING = "IR";
+
+    /**
+     * Invoicing
+     */
+    const INVOICING = "IS";
+
+    /**
+     * Koshering
+     */
+    const KOSHERING = "KO";
+
+    /**
+     * Carrier count
+     */
+    const CARRIER_COUNT = "L1";
+
+    /**
+     * Labelling
+     */
+    const LABELLING = "LA";
+
+    /**
+     * Labour
+     */
+    const LABOUR = "LAA";
+
+    /**
+     * Repair and return
+     */
+    const REPAIR_AND_RETURN = "LAB";
+
+    /**
+     * Legalisation
+     */
+    const LEGALISATION = "LF";
+
+    /**
+     * Mounting
+     */
+    const MOUNTING = "MAE";
+
+    /**
+     * Mail invoice
+     */
+    const MAIL_INVOICE = "MI";
+
+    /**
+     * Mail invoice to each location
+     */
+    const MAIL_INVOICE_TO_EACH_LOCATION = "ML";
+
+    /**
+     * Non-returnable containers
+     */
+    const NONRETURNABLE_CONTAINERS = "NAA";
+
+    /**
+     * Outside cable connectors
+     */
+    const OUTSIDE_CABLE_CONNECTORS = "OA";
+
+    /**
+     * Invoice with shipment
+     */
+    const INVOICE_WITH_SHIPMENT = "PA";
+
+    /**
+     * Phosphatizing (steel treatment)
+     */
+    const PHOSPHATIZING_STEEL_TREATMENT = "PAA";
+
+    /**
+     * Packing
+     */
+    const PACKING = "PC";
+
+    /**
+     * Palletizing
+     */
+    const PALLETIZING = "PL";
+
+    /**
+     * Repacking
+     */
+    const REPACKING = "RAB";
+
+    /**
+     * Repair
+     */
+    const REPAIR = "RAC";
+
+    /**
+     * Returnable container
+     */
+    const RETURNABLE_CONTAINER = "RAD";
+
+    /**
+     * Restocking
+     */
+    const RESTOCKING = "RAF";
+
+    /**
+     * Re-delivery
+     */
+    const REDELIVERY = "RE";
+
+    /**
+     * Refurbishing
+     */
+    const REFURBISHING = "RF";
+
+    /**
+     * Rail wagon hire
+     */
+    const RAIL_WAGON_HIRE = "RH";
+
+    /**
+     * Loading
+     */
+    const LOADING = "RV";
+
+    /**
+     * Salvaging
+     */
+    const SALVAGING = "SA";
+
+    /**
+     * Shipping and handling
+     */
+    const SHIPPING_AND_HANDLING = "SAA";
+
+    /**
+     * Special packaging
+     */
+    const SPECIAL_PACKAGING = "SAD";
+
+    /**
+     * Stamping
+     */
+    const STAMPING = "SAE";
+
+    /**
+     * Consignee unload
+     */
+    const CONSIGNEE_UNLOAD = "SAI";
+
+    /**
+     * Shrink-wrap
+     */
+    const SHRINKWRAP = "SG";
+
+    /**
+     * Special handling
+     */
+    const SPECIAL_HANDLING = "SH";
+
+    /**
+     * Special finish
+     */
+    const SPECIAL_FINISH = "SM";
+
+    /**
+     * Set-up
+     */
+    const SETUP = "SU";
+
+    /**
+     * Tank renting
+     */
+    const TANK_RENTING = "TAB";
+
+    /**
+     * Testing
+     */
+    const TESTING = "TAC";
+
+    /**
+     * Transportation - third party billing
+     */
+    const TRANSPORTATION__THIRD_PARTY_BILLING = "TT";
+
+    /**
+     * Transportation by vendor
+     */
+    const TRANSPORTATION_BY_VENDOR = "TV";
+
+    /**
+     * Drop yard
+     */
+    const DROP_YARD = "V1";
+
+    /**
+     * Drop dock
+     */
+    const DROP_DOCK = "V2";
+
+    /**
+     * Warehousing
+     */
+    const WAREHOUSING = "WH";
+
+    /**
+     * Combine all same day shipment
+     */
+    const COMBINE_ALL_SAME_DAY_SHIPMENT = "XAA";
+
+    /**
+     * Split pick-up
+     */
+    const SPLIT_PICKUP = "YY";
+
+    /**
+     * Mutually defined
+     */
+    const MUTUALLY_DEFINED = "ZZZ";
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdCountryCodes.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdCountryCodes.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdCountryCodes.php	(revision 8435)
@@ -0,0 +1,1273 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing the Country Codes
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdCountryCodes
+{
+    /**
+     * Andorra
+     */
+    const ANDORRA = "AD";
+
+    /**
+     * United Arab Emirates (the)
+     */
+    const UNITED_ARAB_EMIRATES_THE = "AE";
+
+    /**
+     * Afghanistan
+     */
+    const AFGHANISTAN = "AF";
+
+    /**
+     * Antigua and Barbuda
+     */
+    const ANTIGUA_AND_BARBUDA = "AG";
+
+    /**
+     * Anguilla
+     */
+    const ANGUILLA = "AI";
+
+    /**
+     * Albania
+     */
+    const ALBANIA = "AL";
+
+    /**
+     * Armenia
+     */
+    const ARMENIA = "AM";
+
+    /**
+     * Angola
+     */
+    const ANGOLA = "AO";
+
+    /**
+     * Antarctica
+     */
+    const ANTARCTICA = "AQ";
+
+    /**
+     * Argentina
+     */
+    const ARGENTINA = "AR";
+
+    /**
+     * American Samoa
+     */
+    const AMERICAN_SAMOA = "AS";
+
+    /**
+     * Austria
+     */
+    const AUSTRIA = "AT";
+
+    /**
+     * Australia
+     */
+    const AUSTRALIA = "AU";
+
+    /**
+     * Aruba
+     */
+    const ARUBA = "AW";
+
+    /**
+     * Ã
+land Islands
+     */
+    const LAND_ISLANDS = "AX";
+
+    /**
+     * Azerbaijan
+     */
+    const AZERBAIJAN = "AZ";
+
+    /**
+     * Bosnia and Herzegovina
+     */
+    const BOSNIA_AND_HERZEGOVINA = "BA";
+
+    /**
+     * Barbados
+     */
+    const BARBADOS = "BB";
+
+    /**
+     * Bangladesh
+     */
+    const BANGLADESH = "BD";
+
+    /**
+     * Belgium
+     */
+    const BELGIUM = "BE";
+
+    /**
+     * Burkina Faso
+     */
+    const BURKINA_FASO = "BF";
+
+    /**
+     * Bulgaria
+     */
+    const BULGARIA = "BG";
+
+    /**
+     * Bahrain
+     */
+    const BAHRAIN = "BH";
+
+    /**
+     * Burundi
+     */
+    const BURUNDI = "BI";
+
+    /**
+     * Benin
+     */
+    const BENIN = "BJ";
+
+    /**
+     * Saint BarthÃ©lemy
+     */
+    const SAINT_BARTHLEMY = "BL";
+
+    /**
+     * Bermuda
+     */
+    const BERMUDA = "BM";
+
+    /**
+     * Brunei Darussalam
+     */
+    const BRUNEI_DARUSSALAM = "BN";
+
+    /**
+     * Bolivia (Plurinational State of)
+     */
+    const BOLIVIA_PLURINATIONAL_STATE_OF = "BO";
+
+    /**
+     * Bonaire, Sint Eustatius and Saba
+     */
+    const BONAIRE_SINT_EUSTATIUS_AND_SABA = "BQ";
+
+    /**
+     * Brazil
+     */
+    const BRAZIL = "BR";
+
+    /**
+     * Bahamas (the)
+     */
+    const BAHAMAS_THE = "BS";
+
+    /**
+     * Bhutan
+     */
+    const BHUTAN = "BT";
+
+    /**
+     * Bouvet Island
+     */
+    const BOUVET_ISLAND = "BV";
+
+    /**
+     * Botswana
+     */
+    const BOTSWANA = "BW";
+
+    /**
+     * Belarus
+     */
+    const BELARUS = "BY";
+
+    /**
+     * Belize
+     */
+    const BELIZE = "BZ";
+
+    /**
+     * Canada
+     */
+    const CANADA = "CA";
+
+    /**
+     * Cocos (Keeling) Islands (the)
+     */
+    const COCOS_KEELING_ISLANDS_THE = "CC";
+
+    /**
+     * Congo (the Democratic Republic of the)
+     */
+    const CONGO_THE_DEMOCRATIC_REPUBLIC_OF_THE = "CD";
+
+    /**
+     * Central African Republic (the)
+     */
+    const CENTRAL_AFRICAN_REPUBLIC_THE = "CF";
+
+    /**
+     * Congo (the)
+     */
+    const CONGO_THE = "CG";
+
+    /**
+     * Switzerland
+     */
+    const SWITZERLAND = "CH";
+
+    /**
+     * CÃŽte d'Ivoire
+     */
+    const CTE_DIVOIRE = "CI";
+
+    /**
+     * Cook Islands (the)
+     */
+    const COOK_ISLANDS_THE = "CK";
+
+    /**
+     * Chile
+     */
+    const CHILE = "CL";
+
+    /**
+     * Cameroon
+     */
+    const CAMEROON = "CM";
+
+    /**
+     * China
+     */
+    const CHINA = "CN";
+
+    /**
+     * Colombia
+     */
+    const COLOMBIA = "CO";
+
+    /**
+     * Costa Rica
+     */
+    const COSTA_RICA = "CR";
+
+    /**
+     * Cuba
+     */
+    const CUBA = "CU";
+
+    /**
+     * Cabo Verde
+     */
+    const CABO_VERDE = "CV";
+
+    /**
+     * CuraÃ§ao
+     */
+    const CURAAO = "CW";
+
+    /**
+     * Christmas Island
+     */
+    const CHRISTMAS_ISLAND = "CX";
+
+    /**
+     * Cyprus
+     */
+    const CYPRUS = "CY";
+
+    /**
+     * Czechia
+     */
+    const CZECHIA = "CZ";
+
+    /**
+     * Germany
+     */
+    const GERMANY = "DE";
+
+    /**
+     * Djibouti
+     */
+    const DJIBOUTI = "DJ";
+
+    /**
+     * Denmark
+     */
+    const DENMARK = "DK";
+
+    /**
+     * Dominica
+     */
+    const DOMINICA = "DM";
+
+    /**
+     * Dominican Republic (the)
+     */
+    const DOMINICAN_REPUBLIC_THE = "DO";
+
+    /**
+     * Algeria
+     */
+    const ALGERIA = "DZ";
+
+    /**
+     * Ecuador
+     */
+    const ECUADOR = "EC";
+
+    /**
+     * Estonia
+     */
+    const ESTONIA = "EE";
+
+    /**
+     * Egypt
+     */
+    const EGYPT = "EG";
+
+    /**
+     * Western Sahara*
+     */
+    const WESTERN_SAHARA = "EH";
+
+    /**
+     * Eritrea
+     */
+    const ERITREA = "ER";
+
+    /**
+     * Spain
+     */
+    const SPAIN = "ES";
+
+    /**
+     * Ethiopia
+     */
+    const ETHIOPIA = "ET";
+
+    /**
+     * Finland
+     */
+    const FINLAND = "FI";
+
+    /**
+     * Fiji
+     */
+    const FIJI = "FJ";
+
+    /**
+     * Falkland Islands (the) [Malvinas]
+     */
+    const FALKLAND_ISLANDS_THE_MALVINAS = "FK";
+
+    /**
+     * Micronesia (Federated States of)
+     */
+    const MICRONESIA_FEDERATED_STATES_OF = "FM";
+
+    /**
+     * Faroe Islands (the)
+     */
+    const FAROE_ISLANDS_THE = "FO";
+
+    /**
+     * France
+     */
+    const FRANCE = "FR";
+
+    /**
+     * Gabon
+     */
+    const GABON = "GA";
+
+    /**
+     * United Kingdom of Great Britain and Northern Ireland (the)
+     */
+    const UNITED_KINGDOM_OF_GREAT_BRITAIN_AND_NORTHERN_IRELAND_THE = "GB";
+
+    /**
+     * Grenada
+     */
+    const GRENADA = "GD";
+
+    /**
+     * Georgia
+     */
+    const GEORGIA = "GE";
+
+    /**
+     * French Guiana
+     */
+    const FRENCH_GUIANA = "GF";
+
+    /**
+     * Guernsey
+     */
+    const GUERNSEY = "GG";
+
+    /**
+     * Ghana
+     */
+    const GHANA = "GH";
+
+    /**
+     * Gibraltar
+     */
+    const GIBRALTAR = "GI";
+
+    /**
+     * Greenland
+     */
+    const GREENLAND = "GL";
+
+    /**
+     * Gambia (the)
+     */
+    const GAMBIA_THE = "GM";
+
+    /**
+     * Guinea
+     */
+    const GUINEA = "GN";
+
+    /**
+     * Guadeloupe
+     */
+    const GUADELOUPE = "GP";
+
+    /**
+     * Equatorial Guinea
+     */
+    const EQUATORIAL_GUINEA = "GQ";
+
+    /**
+     * Greece
+     */
+    const GREECE = "GR";
+
+    /**
+     * South Georgia and the South Sandwich Islands
+     */
+    const SOUTH_GEORGIA_AND_THE_SOUTH_SANDWICH_ISLANDS = "GS";
+
+    /**
+     * Guatemala
+     */
+    const GUATEMALA = "GT";
+
+    /**
+     * Guam
+     */
+    const GUAM = "GU";
+
+    /**
+     * Guinea-Bissau
+     */
+    const GUINEABISSAU = "GW";
+
+    /**
+     * Guyana
+     */
+    const GUYANA = "GY";
+
+    /**
+     * Hong Kong
+     */
+    const HONG_KONG = "HK";
+
+    /**
+     * Heard Island and McDonald Islands
+     */
+    const HEARD_ISLAND_AND_MCDONALD_ISLANDS = "HM";
+
+    /**
+     * Honduras
+     */
+    const HONDURAS = "HN";
+
+    /**
+     * Croatia
+     */
+    const CROATIA = "HR";
+
+    /**
+     * Haiti
+     */
+    const HAITI = "HT";
+
+    /**
+     * Hungary
+     */
+    const HUNGARY = "HU";
+
+    /**
+     * Indonesia
+     */
+    const INDONESIA = "ID";
+
+    /**
+     * Ireland
+     */
+    const IRELAND = "IE";
+
+    /**
+     * Israel
+     */
+    const ISRAEL = "IL";
+
+    /**
+     * Isle of Man
+     */
+    const ISLE_OF_MAN = "IM";
+
+    /**
+     * India
+     */
+    const INDIA = "IN";
+
+    /**
+     * British Indian Ocean Territory (the)
+     */
+    const BRITISH_INDIAN_OCEAN_TERRITORY_THE = "IO";
+
+    /**
+     * Iraq
+     */
+    const IRAQ = "IQ";
+
+    /**
+     * Iran (Islamic Republic of)
+     */
+    const IRAN_ISLAMIC_REPUBLIC_OF = "IR";
+
+    /**
+     * Iceland
+     */
+    const ICELAND = "IS";
+
+    /**
+     * Italy
+     */
+    const ITALY = "IT";
+
+    /**
+     * Jersey
+     */
+    const JERSEY = "JE";
+
+    /**
+     * Jamaica
+     */
+    const JAMAICA = "JM";
+
+    /**
+     * Jordan
+     */
+    const JORDAN = "JO";
+
+    /**
+     * Japan
+     */
+    const JAPAN = "JP";
+
+    /**
+     * Kenya
+     */
+    const KENYA = "KE";
+
+    /**
+     * Kyrgyzstan
+     */
+    const KYRGYZSTAN = "KG";
+
+    /**
+     * Cambodia
+     */
+    const CAMBODIA = "KH";
+
+    /**
+     * Kiribati
+     */
+    const KIRIBATI = "KI";
+
+    /**
+     * Comoros (the)
+     */
+    const COMOROS_THE = "KM";
+
+    /**
+     * Saint Kitts and Nevis
+     */
+    const SAINT_KITTS_AND_NEVIS = "KN";
+
+    /**
+     * Korea (the Democratic People's Republic of)
+     */
+    const KOREA_THE_DEMOCRATIC_PEOPLES_REPUBLIC_OF = "KP";
+
+    /**
+     * Korea (the Republic of)
+     */
+    const KOREA_THE_REPUBLIC_OF = "KR";
+
+    /**
+     * Kuwait
+     */
+    const KUWAIT = "KW";
+
+    /**
+     * Cayman Islands (the)
+     */
+    const CAYMAN_ISLANDS_THE = "KY";
+
+    /**
+     * Kazakhstan
+     */
+    const KAZAKHSTAN = "KZ";
+
+    /**
+     * Lao People's Democratic Republic (the)
+     */
+    const LAO_PEOPLES_DEMOCRATIC_REPUBLIC_THE = "LA";
+
+    /**
+     * Lebanon
+     */
+    const LEBANON = "LB";
+
+    /**
+     * Saint Lucia
+     */
+    const SAINT_LUCIA = "LC";
+
+    /**
+     * Liechtenstein
+     */
+    const LIECHTENSTEIN = "LI";
+
+    /**
+     * Sri Lanka
+     */
+    const SRI_LANKA = "LK";
+
+    /**
+     * Liberia
+     */
+    const LIBERIA = "LR";
+
+    /**
+     * Lesotho
+     */
+    const LESOTHO = "LS";
+
+    /**
+     * Lithuania
+     */
+    const LITHUANIA = "LT";
+
+    /**
+     * Luxembourg
+     */
+    const LUXEMBOURG = "LU";
+
+    /**
+     * Latvia
+     */
+    const LATVIA = "LV";
+
+    /**
+     * Libya
+     */
+    const LIBYA = "LY";
+
+    /**
+     * Morocco
+     */
+    const MOROCCO = "MA";
+
+    /**
+     * Monaco
+     */
+    const MONACO = "MC";
+
+    /**
+     * Moldova (the Republic of)
+     */
+    const MOLDOVA_THE_REPUBLIC_OF = "MD";
+
+    /**
+     * Montenegro
+     */
+    const MONTENEGRO = "ME";
+
+    /**
+     * Saint Martin (French part)
+     */
+    const SAINT_MARTIN_FRENCH_PART = "MF";
+
+    /**
+     * Madagascar
+     */
+    const MADAGASCAR = "MG";
+
+    /**
+     * Marshall Islands (the)
+     */
+    const MARSHALL_ISLANDS_THE = "MH";
+
+    /**
+     * North Macedonia
+     */
+    const NORTH_MACEDONIA = "MK";
+
+    /**
+     * Mali
+     */
+    const MALI = "ML";
+
+    /**
+     * Myanmar
+     */
+    const MYANMAR = "MM";
+
+    /**
+     * Mongolia
+     */
+    const MONGOLIA = "MN";
+
+    /**
+     * Macao
+     */
+    const MACAO = "MO";
+
+    /**
+     * Northern Mariana Islands (the)
+     */
+    const NORTHERN_MARIANA_ISLANDS_THE = "MP";
+
+    /**
+     * Martinique
+     */
+    const MARTINIQUE = "MQ";
+
+    /**
+     * Mauritania
+     */
+    const MAURITANIA = "MR";
+
+    /**
+     * Montserrat
+     */
+    const MONTSERRAT = "MS";
+
+    /**
+     * Malta
+     */
+    const MALTA = "MT";
+
+    /**
+     * Mauritius
+     */
+    const MAURITIUS = "MU";
+
+    /**
+     * Maldives
+     */
+    const MALDIVES = "MV";
+
+    /**
+     * Malawi
+     */
+    const MALAWI = "MW";
+
+    /**
+     * Mexico
+     */
+    const MEXICO = "MX";
+
+    /**
+     * Malaysia
+     */
+    const MALAYSIA = "MY";
+
+    /**
+     * Mozambique
+     */
+    const MOZAMBIQUE = "MZ";
+
+    /**
+     * Namibia
+     */
+    const NAMIBIA = "NA";
+
+    /**
+     * New Caledonia
+     */
+    const NEW_CALEDONIA = "NC";
+
+    /**
+     * Niger (the)
+     */
+    const NIGER_THE = "NE";
+
+    /**
+     * Norfolk Island
+     */
+    const NORFOLK_ISLAND = "NF";
+
+    /**
+     * Nigeria
+     */
+    const NIGERIA = "NG";
+
+    /**
+     * Nicaragua
+     */
+    const NICARAGUA = "NI";
+
+    /**
+     * Netherlands (the)
+     */
+    const NETHERLANDS_THE = "NL";
+
+    /**
+     * Norway
+     */
+    const NORWAY = "NO";
+
+    /**
+     * Nepal
+     */
+    const NEPAL = "NP";
+
+    /**
+     * Nauru
+     */
+    const NAURU = "NR";
+
+    /**
+     * Niue
+     */
+    const NIUE = "NU";
+
+    /**
+     * New Zealand
+     */
+    const NEW_ZEALAND = "NZ";
+
+    /**
+     * Oman
+     */
+    const OMAN = "OM";
+
+    /**
+     * Panama
+     */
+    const PANAMA = "PA";
+
+    /**
+     * Peru
+     */
+    const PERU = "PE";
+
+    /**
+     * French Polynesia
+     */
+    const FRENCH_POLYNESIA = "PF";
+
+    /**
+     * Papua New Guinea
+     */
+    const PAPUA_NEW_GUINEA = "PG";
+
+    /**
+     * Philippines (the)
+     */
+    const PHILIPPINES_THE = "PH";
+
+    /**
+     * Pakistan
+     */
+    const PAKISTAN = "PK";
+
+    /**
+     * Poland
+     */
+    const POLAND = "PL";
+
+    /**
+     * Saint Pierre and Miquelon
+     */
+    const SAINT_PIERRE_AND_MIQUELON = "PM";
+
+    /**
+     * Pitcairn
+     */
+    const PITCAIRN = "PN";
+
+    /**
+     * Puerto Rico
+     */
+    const PUERTO_RICO = "PR";
+
+    /**
+     * Palestine, State of
+     */
+    const PALESTINE_STATE_OF = "PS";
+
+    /**
+     * Portugal
+     */
+    const PORTUGAL = "PT";
+
+    /**
+     * Palau
+     */
+    const PALAU = "PW";
+
+    /**
+     * Paraguay
+     */
+    const PARAGUAY = "PY";
+
+    /**
+     * Qatar
+     */
+    const QATAR = "QA";
+
+    /**
+     * RÃ©union
+     */
+    const RUNION = "RE";
+
+    /**
+     * Romania
+     */
+    const ROMANIA = "RO";
+
+    /**
+     * Serbia
+     */
+    const SERBIA = "RS";
+
+    /**
+     * Russian Federation (the)
+     */
+    const RUSSIAN_FEDERATION_THE = "RU";
+
+    /**
+     * Rwanda
+     */
+    const RWANDA = "RW";
+
+    /**
+     * Saudi Arabia
+     */
+    const SAUDI_ARABIA = "SA";
+
+    /**
+     * Solomon Islands
+     */
+    const SOLOMON_ISLANDS = "SB";
+
+    /**
+     * Seychelles
+     */
+    const SEYCHELLES = "SC";
+
+    /**
+     * Sudan (the)
+     */
+    const SUDAN_THE = "SD";
+
+    /**
+     * Sweden
+     */
+    const SWEDEN = "SE";
+
+    /**
+     * Singapore
+     */
+    const SINGAPORE = "SG";
+
+    /**
+     * Saint Helena, Ascension and Tristan da Cunha
+     */
+    const SAINT_HELENA_ASCENSION_AND_TRISTAN_DA_CUNHA = "SH";
+
+    /**
+     * Slovenia
+     */
+    const SLOVENIA = "SI";
+
+    /**
+     * Svalbard and Jan Mayen
+     */
+    const SVALBARD_AND_JAN_MAYEN = "SJ";
+
+    /**
+     * Slovakia
+     */
+    const SLOVAKIA = "SK";
+
+    /**
+     * Sierra Leone
+     */
+    const SIERRA_LEONE = "SL";
+
+    /**
+     * San Marino
+     */
+    const SAN_MARINO = "SM";
+
+    /**
+     * Senegal
+     */
+    const SENEGAL = "SN";
+
+    /**
+     * Somalia
+     */
+    const SOMALIA = "SO";
+
+    /**
+     * Suriname
+     */
+    const SURINAME = "SR";
+
+    /**
+     * South Sudan
+     */
+    const SOUTH_SUDAN = "SS";
+
+    /**
+     * Sao Tome and Principe
+     */
+    const SAO_TOME_AND_PRINCIPE = "ST";
+
+    /**
+     * El Salvador
+     */
+    const EL_SALVADOR = "SV";
+
+    /**
+     * Sint Maarten (Dutch part)
+     */
+    const SINT_MAARTEN_DUTCH_PART = "SX";
+
+    /**
+     * Syrian Arab Republic (the)
+     */
+    const SYRIAN_ARAB_REPUBLIC_THE = "SY";
+
+    /**
+     * Eswatini
+     */
+    const ESWATINI = "SZ";
+
+    /**
+     * Turks and Caicos Islands (the)
+     */
+    const TURKS_AND_CAICOS_ISLANDS_THE = "TC";
+
+    /**
+     * Chad
+     */
+    const CHAD = "TD";
+
+    /**
+     * French Southern Territories (the)
+     */
+    const FRENCH_SOUTHERN_TERRITORIES_THE = "TF";
+
+    /**
+     * Togo
+     */
+    const TOGO = "TG";
+
+    /**
+     * Thailand
+     */
+    const THAILAND = "TH";
+
+    /**
+     * Tajikistan
+     */
+    const TAJIKISTAN = "TJ";
+
+    /**
+     * Tokelau
+     */
+    const TOKELAU = "TK";
+
+    /**
+     * Timor-Leste
+     */
+    const TIMORLESTE = "TL";
+
+    /**
+     * Turkmenistan
+     */
+    const TURKMENISTAN = "TM";
+
+    /**
+     * Tunisia
+     */
+    const TUNISIA = "TN";
+
+    /**
+     * Tonga
+     */
+    const TONGA = "TO";
+
+    /**
+     * Turkey
+     */
+    const TURKEY = "TR";
+
+    /**
+     * Trinidad and Tobago
+     */
+    const TRINIDAD_AND_TOBAGO = "TT";
+
+    /**
+     * Tuvalu
+     */
+    const TUVALU = "TV";
+
+    /**
+     * Taiwan (Province of China)
+     */
+    const TAIWAN_PROVINCE_OF_CHINA = "TW";
+
+    /**
+     * Tanzania, the United Republic of
+     */
+    const TANZANIA_THE_UNITED_REPUBLIC_OF = "TZ";
+
+    /**
+     * Ukraine
+     */
+    const UKRAINE = "UA";
+
+    /**
+     * Uganda
+     */
+    const UGANDA = "UG";
+
+    /**
+     * United States Minor Outlying Islands (the)
+     */
+    const UNITED_STATES_MINOR_OUTLYING_ISLANDS_THE = "UM";
+
+    /**
+     * United States of America (the)
+     */
+    const UNITED_STATES_OF_AMERICA_THE = "US";
+
+    /**
+     * Uruguay
+     */
+    const URUGUAY = "UY";
+
+    /**
+     * Uzbekistan
+     */
+    const UZBEKISTAN = "UZ";
+
+    /**
+     * Holy See (the)
+     */
+    const HOLY_SEE_THE = "VA";
+
+    /**
+     * Saint Vincent and the Grenadines
+     */
+    const SAINT_VINCENT_AND_THE_GRENADINES = "VC";
+
+    /**
+     * Venezuela (Bolivarian Republic of)
+     */
+    const VENEZUELA_BOLIVARIAN_REPUBLIC_OF = "VE";
+
+    /**
+     * Virgin Islands (British)
+     */
+    const VIRGIN_ISLANDS_BRITISH = "VG";
+
+    /**
+     * Virgin Islands (U.S.)
+     */
+    const VIRGIN_ISLANDS_US = "VI";
+
+    /**
+     * Viet Nam
+     */
+    const VIET_NAM = "VN";
+
+    /**
+     * Vanuatu
+     */
+    const VANUATU = "VU";
+
+    /**
+     * Wallis and Futuna
+     */
+    const WALLIS_AND_FUTUNA = "WF";
+
+    /**
+     * Samoa
+     */
+    const SAMOA = "WS";
+
+    /**
+     * Yemen
+     */
+    const YEMEN = "YE";
+
+    /**
+     * Mayotte
+     */
+    const MAYOTTE = "YT";
+
+    /**
+     * South Africa
+     */
+    const SOUTH_AFRICA = "ZA";
+
+    /**
+     * Zambia
+     */
+    const ZAMBIA = "ZM";
+
+    /**
+     * Zimbabwe
+     */
+    const ZIMBABWE = "ZW";
+
+    /**
+     * Kosovo
+     */
+    const KOSOVO = "1A";
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdCurrencyCodes.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdCurrencyCodes.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdCurrencyCodes.php	(revision 8435)
@@ -0,0 +1,917 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing the Currency Codes
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdCurrencyCodes
+{
+    /**
+     * UAE Dirham
+     */
+    const UAE_DIRHAM = "AED";
+
+    /**
+     * Afghani
+     */
+    const AFGHANI = "AFN";
+
+    /**
+     * Lek
+     */
+    const LEK = "ALL";
+
+    /**
+     * Armenian Dram
+     */
+    const ARMENIAN_DRAM = "AMD";
+
+    /**
+     * Netherlands Antillean Guilder
+     */
+    const NETHERLANDS_ANTILLEAN_GUILDER = "ANG";
+
+    /**
+     * Kwanza
+     */
+    const KWANZA = "AOA";
+
+    /**
+     * Argentine Peso
+     */
+    const ARGENTINE_PESO = "ARS";
+
+    /**
+     * Australian Dollar
+     */
+    const AUSTRALIAN_DOLLAR = "AUD";
+
+    /**
+     * Aruban Florin
+     */
+    const ARUBAN_FLORIN = "AWG";
+
+    /**
+     * Azerbaijan Manat
+     */
+    const AZERBAIJAN_MANAT = "AZN";
+
+    /**
+     * Convertible Mark
+     */
+    const CONVERTIBLE_MARK = "BAM";
+
+    /**
+     * Barbados Dollar
+     */
+    const BARBADOS_DOLLAR = "BBD";
+
+    /**
+     * Taka
+     */
+    const TAKA = "BDT";
+
+    /**
+     * Bulgarian Lev
+     */
+    const BULGARIAN_LEV = "BGN";
+
+    /**
+     * Bahraini Dinar
+     */
+    const BAHRAINI_DINAR = "BHD";
+
+    /**
+     * Burundi Franc
+     */
+    const BURUNDI_FRANC = "BIF";
+
+    /**
+     * Bermudian Dollar
+     */
+    const BERMUDIAN_DOLLAR = "BMD";
+
+    /**
+     * Brunei Dollar
+     */
+    const BRUNEI_DOLLAR = "BND";
+
+    /**
+     * Boliviano
+     */
+    const BOLIVIANO = "BOB";
+
+    /**
+     * Mvdol
+     */
+    const MVDOL = "BOV";
+
+    /**
+     * Brazilian Real
+     */
+    const BRAZILIAN_REAL = "BRL";
+
+    /**
+     * Bahamian Dollar
+     */
+    const BAHAMIAN_DOLLAR = "BSD";
+
+    /**
+     * Ngultrum
+     */
+    const NGULTRUM = "BTN";
+
+    /**
+     * Pula
+     */
+    const PULA = "BWP";
+
+    /**
+     * Belarusian Ruble
+     */
+    const BELARUSIAN_RUBLE = "BYN";
+
+    /**
+     * Belize Dollar
+     */
+    const BELIZE_DOLLAR = "BZD";
+
+    /**
+     * Canadian Dollar
+     */
+    const CANADIAN_DOLLAR = "CAD";
+
+    /**
+     * Congolese Franc
+     */
+    const CONGOLESE_FRANC = "CDF";
+
+    /**
+     * WIR Euro
+     */
+    const WIR_EURO = "CHE";
+
+    /**
+     * Swiss Franc
+     */
+    const SWISS_FRANC = "CHF";
+
+    /**
+     * WIR Franc
+     */
+    const WIR_FRANC = "CHW";
+
+    /**
+     * Unidad de Fomento
+     */
+    const UNIDAD_DE_FOMENTO = "CLF";
+
+    /**
+     * Chilean Peso
+     */
+    const CHILEAN_PESO = "CLP";
+
+    /**
+     * Yuan Renminbi
+     */
+    const YUAN_RENMINBI = "CNY";
+
+    /**
+     * Colombian Peso
+     */
+    const COLOMBIAN_PESO = "COP";
+
+    /**
+     * Unidad de Valor Real
+     */
+    const UNIDAD_DE_VALOR_REAL = "COU";
+
+    /**
+     * Costa Rican Colon
+     */
+    const COSTA_RICAN_COLON = "CRC";
+
+    /**
+     * Peso Convertible
+     */
+    const PESO_CONVERTIBLE = "CUC";
+
+    /**
+     * Cuban Peso
+     */
+    const CUBAN_PESO = "CUP";
+
+    /**
+     * Cabo Verde Escudo
+     */
+    const CABO_VERDE_ESCUDO = "CVE";
+
+    /**
+     * Czech Koruna
+     */
+    const CZECH_KORUNA = "CZK";
+
+    /**
+     * Djibouti Franc
+     */
+    const DJIBOUTI_FRANC = "DJF";
+
+    /**
+     * Danish Krone
+     */
+    const DANISH_KRONE = "DKK";
+
+    /**
+     * Dominican Peso
+     */
+    const DOMINICAN_PESO = "DOP";
+
+    /**
+     * Algerian Dinar
+     */
+    const ALGERIAN_DINAR = "DZD";
+
+    /**
+     * Egyptian Pound
+     */
+    const EGYPTIAN_POUND = "EGP";
+
+    /**
+     * Nakfa
+     */
+    const NAKFA = "ERN";
+
+    /**
+     * Ethiopian Birr
+     */
+    const ETHIOPIAN_BIRR = "ETB";
+
+    /**
+     * Euro
+     */
+    const EURO = "EUR";
+
+    /**
+     * Fiji Dollar
+     */
+    const FIJI_DOLLAR = "FJD";
+
+    /**
+     * Falkland Islands Pound
+     */
+    const FALKLAND_ISLANDS_POUND = "FKP";
+
+    /**
+     * Pound Sterling
+     */
+    const POUND_STERLING = "GBP";
+
+    /**
+     * Lari
+     */
+    const LARI = "GEL";
+
+    /**
+     * Ghana Cedi
+     */
+    const GHANA_CEDI = "GHS";
+
+    /**
+     * Gibraltar Pound
+     */
+    const GIBRALTAR_POUND = "GIP";
+
+    /**
+     * Dalasi
+     */
+    const DALASI = "GMD";
+
+    /**
+     * Guinean Franc
+     */
+    const GUINEAN_FRANC = "GNF";
+
+    /**
+     * Quetzal
+     */
+    const QUETZAL = "GTQ";
+
+    /**
+     * Guyana Dollar
+     */
+    const GUYANA_DOLLAR = "GYD";
+
+    /**
+     * Hong Kong Dollar
+     */
+    const HONG_KONG_DOLLAR = "HKD";
+
+    /**
+     * Lempira
+     */
+    const LEMPIRA = "HNL";
+
+    /**
+     * Kuna
+     */
+    const KUNA = "HRK";
+
+    /**
+     * Gourde
+     */
+    const GOURDE = "HTG";
+
+    /**
+     * Forint
+     */
+    const FORINT = "HUF";
+
+    /**
+     * Rupiah
+     */
+    const RUPIAH = "IDR";
+
+    /**
+     * New Israeli Sheqel
+     */
+    const NEW_ISRAELI_SHEQEL = "ILS";
+
+    /**
+     * Indian Rupee
+     */
+    const INDIAN_RUPEE = "INR";
+
+    /**
+     * Iraqi Dinar
+     */
+    const IRAQI_DINAR = "IQD";
+
+    /**
+     * Iranian Rial
+     */
+    const IRANIAN_RIAL = "IRR";
+
+    /**
+     * Iceland Krona
+     */
+    const ICELAND_KRONA = "ISK";
+
+    /**
+     * Jamaican Dollar
+     */
+    const JAMAICAN_DOLLAR = "JMD";
+
+    /**
+     * Jordanian Dinar
+     */
+    const JORDANIAN_DINAR = "JOD";
+
+    /**
+     * Yen
+     */
+    const YEN = "JPY";
+
+    /**
+     * Kenyan Shilling
+     */
+    const KENYAN_SHILLING = "KES";
+
+    /**
+     * Som
+     */
+    const SOM = "KGS";
+
+    /**
+     * Riel
+     */
+    const RIEL = "KHR";
+
+    /**
+     * Comorian Franc
+     */
+    const COMORIAN_FRANC = "KMF";
+
+    /**
+     * North Korean Won
+     */
+    const NORTH_KOREAN_WON = "KPW";
+
+    /**
+     * Won
+     */
+    const WON = "KRW";
+
+    /**
+     * Kuwaiti Dinar
+     */
+    const KUWAITI_DINAR = "KWD";
+
+    /**
+     * Cayman Islands Dollar
+     */
+    const CAYMAN_ISLANDS_DOLLAR = "KYD";
+
+    /**
+     * Tenge
+     */
+    const TENGE = "KZT";
+
+    /**
+     * Lao Kip
+     */
+    const LAO_KIP = "LAK";
+
+    /**
+     * Lebanese Pound
+     */
+    const LEBANESE_POUND = "LBP";
+
+    /**
+     * Sri Lanka Rupee
+     */
+    const SRI_LANKA_RUPEE = "LKR";
+
+    /**
+     * Liberian Dollar
+     */
+    const LIBERIAN_DOLLAR = "LRD";
+
+    /**
+     * Loti
+     */
+    const LOTI = "LSL";
+
+    /**
+     * Libyan Dinar
+     */
+    const LIBYAN_DINAR = "LYD";
+
+    /**
+     * Moroccan Dirham
+     */
+    const MOROCCAN_DIRHAM = "MAD";
+
+    /**
+     * Moldovan Leu
+     */
+    const MOLDOVAN_LEU = "MDL";
+
+    /**
+     * Malagasy Ariary
+     */
+    const MALAGASY_ARIARY = "MGA";
+
+    /**
+     * Denar
+     */
+    const DENAR = "MKD";
+
+    /**
+     * Kyat
+     */
+    const KYAT = "MMK";
+
+    /**
+     * Tugrik
+     */
+    const TUGRIK = "MNT";
+
+    /**
+     * Pataca
+     */
+    const PATACA = "MOP";
+
+    /**
+     * Ouguiya
+     */
+    const OUGUIYA = "MRU";
+
+    /**
+     * Mauritius Rupee
+     */
+    const MAURITIUS_RUPEE = "MUR";
+
+    /**
+     * Rufiyaa
+     */
+    const RUFIYAA = "MVR";
+
+    /**
+     * Malawi Kwacha
+     */
+    const MALAWI_KWACHA = "MWK";
+
+    /**
+     * Mexican Peso
+     */
+    const MEXICAN_PESO = "MXN";
+
+    /**
+     * Mexican Unidad de Inversion (UDI)
+     */
+    const MEXICAN_UNIDAD_DE_INVERSION_UDI = "MXV";
+
+    /**
+     * Malaysian Ringgit
+     */
+    const MALAYSIAN_RINGGIT = "MYR";
+
+    /**
+     * Mozambique Metical
+     */
+    const MOZAMBIQUE_METICAL = "MZN";
+
+    /**
+     * Namibia Dollar
+     */
+    const NAMIBIA_DOLLAR = "NAD";
+
+    /**
+     * Naira
+     */
+    const NAIRA = "NGN";
+
+    /**
+     * Cordoba Oro
+     */
+    const CORDOBA_ORO = "NIO";
+
+    /**
+     * Norwegian Krone
+     */
+    const NORWEGIAN_KRONE = "NOK";
+
+    /**
+     * Nepalese Rupee
+     */
+    const NEPALESE_RUPEE = "NPR";
+
+    /**
+     * New Zealand Dollar
+     */
+    const NEW_ZEALAND_DOLLAR = "NZD";
+
+    /**
+     * Rial Omani
+     */
+    const RIAL_OMANI = "OMR";
+
+    /**
+     * Balboa
+     */
+    const BALBOA = "PAB";
+
+    /**
+     * Sol
+     */
+    const SOL = "PEN";
+
+    /**
+     * Kina
+     */
+    const KINA = "PGK";
+
+    /**
+     * Philippine Peso
+     */
+    const PHILIPPINE_PESO = "PHP";
+
+    /**
+     * Pakistan Rupee
+     */
+    const PAKISTAN_RUPEE = "PKR";
+
+    /**
+     * Zloty
+     */
+    const ZLOTY = "PLN";
+
+    /**
+     * Guarani
+     */
+    const GUARANI = "PYG";
+
+    /**
+     * Qatari Rial
+     */
+    const QATARI_RIAL = "QAR";
+
+    /**
+     * Romanian Leu
+     */
+    const ROMANIAN_LEU = "RON";
+
+    /**
+     * Serbian Dinar
+     */
+    const SERBIAN_DINAR = "RSD";
+
+    /**
+     * Russian Ruble
+     */
+    const RUSSIAN_RUBLE = "RUB";
+
+    /**
+     * Rwanda Franc
+     */
+    const RWANDA_FRANC = "RWF";
+
+    /**
+     * Saudi Riyal
+     */
+    const SAUDI_RIYAL = "SAR";
+
+    /**
+     * Solomon Islands Dollar
+     */
+    const SOLOMON_ISLANDS_DOLLAR = "SBD";
+
+    /**
+     * Seychelles Rupee
+     */
+    const SEYCHELLES_RUPEE = "SCR";
+
+    /**
+     * Sudanese Pound
+     */
+    const SUDANESE_POUND = "SDG";
+
+    /**
+     * Swedish Krona
+     */
+    const SWEDISH_KRONA = "SEK";
+
+    /**
+     * Singapore Dollar
+     */
+    const SINGAPORE_DOLLAR = "SGD";
+
+    /**
+     * Saint Helena Pound
+     */
+    const SAINT_HELENA_POUND = "SHP";
+
+    /**
+     * Leone
+     */
+    const LEONE = "SLL";
+
+    /**
+     * Somali Shilling
+     */
+    const SOMALI_SHILLING = "SOS";
+
+    /**
+     * Surinam Dollar
+     */
+    const SURINAM_DOLLAR = "SRD";
+
+    /**
+     * South Sudanese Pound
+     */
+    const SOUTH_SUDANESE_POUND = "SSP";
+
+    /**
+     * Dobra
+     */
+    const DOBRA = "STN";
+
+    /**
+     * El Salvador Colon
+     */
+    const EL_SALVADOR_COLON = "SVC";
+
+    /**
+     * Syrian Pound
+     */
+    const SYRIAN_POUND = "SYP";
+
+    /**
+     * Lilangeni
+     */
+    const LILANGENI = "SZL";
+
+    /**
+     * Baht
+     */
+    const BAHT = "THB";
+
+    /**
+     * Somoni
+     */
+    const SOMONI = "TJS";
+
+    /**
+     * Turkmenistan New Manat
+     */
+    const TURKMENISTAN_NEW_MANAT = "TMT";
+
+    /**
+     * Tunisian Dinar
+     */
+    const TUNISIAN_DINAR = "TND";
+
+    /**
+     * Paâanga
+     */
+    const PAANGA = "TOP";
+
+    /**
+     * Turkish Lira
+     */
+    const TURKISH_LIRA = "TRY";
+
+    /**
+     * Trinidad and Tobago Dollar
+     */
+    const TRINIDAD_AND_TOBAGO_DOLLAR = "TTD";
+
+    /**
+     * New Taiwan Dollar
+     */
+    const NEW_TAIWAN_DOLLAR = "TWD";
+
+    /**
+     * Tanzanian Shilling
+     */
+    const TANZANIAN_SHILLING = "TZS";
+
+    /**
+     * Hryvnia
+     */
+    const HRYVNIA = "UAH";
+
+    /**
+     * Uganda Shilling
+     */
+    const UGANDA_SHILLING = "UGX";
+
+    /**
+     * US Dollar
+     */
+    const US_DOLLAR = "USD";
+
+    /**
+     * US Dollar (Next day)
+     */
+    const US_DOLLAR_NEXT_DAY = "USN";
+
+    /**
+     * Uruguay Peso en Unidades Indexadas (UI)
+     */
+    const URUGUAY_PESO_EN_UNIDADES_INDEXADAS_UI = "UYI";
+
+    /**
+     * Peso Uruguayo
+     */
+    const PESO_URUGUAYO = "UYU";
+
+    /**
+     * Unidad Previsional
+     */
+    const UNIDAD_PREVISIONAL = "UYW";
+
+    /**
+     * Uzbekistan Sum
+     */
+    const UZBEKISTAN_SUM = "UZS";
+
+    /**
+     * BolÃ­var Soberano
+     */
+    const BOLVAR_SOBERANO = "VES";
+
+    /**
+     * Dong
+     */
+    const DONG = "VND";
+
+    /**
+     * Vatu
+     */
+    const VATU = "VUV";
+
+    /**
+     * Tala
+     */
+    const TALA = "WST";
+
+    /**
+     * CFA Franc BEAC
+     */
+    const CFA_FRANC_BEAC = "XAF";
+
+    /**
+     * Silver
+     */
+    const SILVER = "XAG";
+
+    /**
+     * Gold
+     */
+    const GOLD = "XAU";
+
+    /**
+     * Bond Markets Unit European Composite Unit (EURCO)
+     */
+    const BOND_MARKETS_UNIT_EUROPEAN_COMPOSITE_UNIT_EURCO = "XBA";
+
+    /**
+     * Bond Markets Unit European Monetary Unit (E.M.U.-6)
+     */
+    const BOND_MARKETS_UNIT_EUROPEAN_MONETARY_UNIT_EMU6 = "XBB";
+
+    /**
+     * Bond Markets Unit European Unit of Account 9 (E.U.A.-9)
+     */
+    const BOND_MARKETS_UNIT_EUROPEAN_UNIT_OF_ACCOUNT_9_EUA9 = "XBC";
+
+    /**
+     * Bond Markets Unit European Unit of Account 17 (E.U.A.-17)
+     */
+    const BOND_MARKETS_UNIT_EUROPEAN_UNIT_OF_ACCOUNT_17_EUA17 = "XBD";
+
+    /**
+     * East Caribbean Dollar
+     */
+    const EAST_CARIBBEAN_DOLLAR = "XCD";
+
+    /**
+     * SDR (Special Drawing Right)
+     */
+    const SDR_SPECIAL_DRAWING_RIGHT = "XDR";
+
+    /**
+     * CFA Franc BCEAO
+     */
+    const CFA_FRANC_BCEAO = "XOF";
+
+    /**
+     * Palladium
+     */
+    const PALLADIUM = "XPD";
+
+    /**
+     * CFP Franc
+     */
+    const CFP_FRANC = "XPF";
+
+    /**
+     * Platinum
+     */
+    const PLATINUM = "XPT";
+
+    /**
+     * Sucre
+     */
+    const SUCRE = "XSU";
+
+    /**
+     * Codes specifically reserved for testing purposes
+     */
+    const CODES_SPECIFICALLY_RESERVED_FOR_TESTING_PURPOSES = "XTS";
+
+    /**
+     * ADB Unit of Account
+     */
+    const ADB_UNIT_OF_ACCOUNT = "XUA";
+
+    /**
+     * The codes assigned for transactions where no currency is involved
+     */
+    const THE_CODES_ASSIGNED_FOR_TRANSACTIONS_WHERE_NO_CURRENCY_IS_INVOLVED = "XXX";
+
+    /**
+     * Yemeni Rial
+     */
+    const YEMENI_RIAL = "YER";
+
+    /**
+     * Rand
+     */
+    const RAND = "ZAR";
+
+    /**
+     * Zambian Kwacha
+     */
+    const ZAMBIAN_KWACHA = "ZMW";
+
+    /**
+     * Zimbabwe Dollar
+     */
+    const ZIMBABWE_DOLLAR = "ZWL";
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdDutyTaxFeeCategories.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdDutyTaxFeeCategories.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdDutyTaxFeeCategories.php	(revision 8435)
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing the Duty or tax or fee categories
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdDutyTaxFeeCategories
+{
+    /**
+     * Standard rate
+     */
+    const STANDARD_RATE = "S";
+
+    /**
+     * Zero rated goods
+     */
+    const ZERO_RATED_GOODS = "Z";
+
+    /**
+     * Exempt from tax
+     */
+    const EXEMPT_FROM_TAX = "E";
+
+    /**
+     * VAT Reverse charge
+     */
+    const VAT_REVERSE_CHARGE = "AE";
+
+    /**
+     * VAT exempt for EEA intra-community supply of goods and services
+     */
+    const VAT_EXEMPT_FOR_EEA_INTRACOMMUNITY_SUPPLY_OF_GOODS_AND_SERVICES = "K";
+
+    /**
+     * Free export item, tax not charged
+     */
+    const FREE_EXPORT_ITEM_TAX_NOT_CHARGED = "G";
+
+    /**
+     * Service outside scope of tax
+     */
+    const SERVICE_OUTSIDE_SCOPE_OF_TAX = "O";
+
+    /**
+     * Canary Islands general indirect tax
+     */
+    const CANARY_ISLANDS_GENERAL_INDIRECT_TAX = "L";
+
+    /**
+     * Tax for production, services and importation in Ceuta and Melilla
+     */
+    const TAX_FOR_PRODUCTION_SERVICES_AND_IMPORTATION_IN_CEUTA_AND_MELILLA = "M";
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdElectronicAddressScheme.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdElectronicAddressScheme.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdElectronicAddressScheme.php	(revision 8435)
@@ -0,0 +1,478 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing EAS : Electronice Address Scheme
+ * For BT-34-1, BT-49-1
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   L. Ollivault
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+
+class ZugferdElectronicAddressScheme {
+    /**
+     * O.F.T.P. (ODETTE File Transfer Protocol)
+     */
+    const UNECE3155_AN = "AN";
+
+    /**
+     * X.400 address for mail text
+     */
+    const UNECE3155_AQ = "AQ";
+
+    /**
+     * AS2 exchange
+     */
+    const UNECE3155_AS = "AS";
+
+    /**
+     * File Transfer Protocol
+     */
+    const UNECE3155_AU = "AU";
+
+    /**
+     * Electronic mail (SMTP)
+     */
+    const UNECE3155_EM = "EM";
+
+    /**
+     * System Information et Repertoire des Entreprise et des Etablissements: SIRENE
+     */
+    const ICD_0002 = "0002";
+
+    /**
+     * Organisationsnummer
+     */
+    const ICD_0007 = "0007";
+
+    /**
+     * SIRET-CODE
+     */
+    const ICD_0009 = "0009";
+
+    /**
+     * LY-tunnus
+     */
+    const ICD_0037 = "0037";
+
+    /**
+     * Data Universal Numbering System (D-U-N-S Number)
+     */
+    const ICD_0060 = "0060";
+
+    /**
+     * EAN Location Code
+     */
+    const ICD_0088 = "0088";
+
+    /**
+     * DANISH CHAMBER OF COMMERCE Scheme (EDIRA compliant)
+     */
+    const ICD_0096 = "0096";
+
+    /**
+     * FTI - Ediforum Italia, (EDIRA compliant)
+     */
+    const ICD_0097 = "0097";
+
+    /**
+     * Vereniging van Kamers van Koophandel en Fabrieken in Nederland (Association of Chambers of Commerce and Industry in the Netherlands), Scheme (EDIRA compliant)
+     */
+    const ICD_0106 = "0106";
+
+    /**
+     * Directorates of the European Commission
+     */
+    const ICD_0130 = "0130";
+
+    /**
+     * SIA Object Identifiers
+     */
+    const ICD_0135 = "0135";
+
+    /**
+     * SECETI Object Identifiers
+     */
+    const ICD_0142 = "0142";
+
+    /**
+     * Australian Business Number (ABN) Scheme
+     */
+    const ICD_0151 = "0151";
+
+    /**
+     * NumÃ©ro d'identification suisse des enterprises (IDE), Swiss Unique Business Identification Number (UIDB)
+     */
+    const ICD_0183 = "0183";
+
+    /**
+     * DIGSTORG
+     */
+    const ICD_0184 = "0184";
+
+    /**
+     * Dutch Originator's Identification Number
+     */
+    const ICD_0190 = "0190";
+
+    /**
+     * Centre of Registers and Information Systems of the Ministry of Justice
+     */
+    const ICD_0191 = "0191";
+
+    /**
+     * Enhetsregisteret ved Bronnoysundregisterne
+     */
+    const ICD_0192 = "0192";
+
+    /**
+     * UBL.BE party identifier
+     */
+    const ICD_0193 = "0193";
+
+    /**
+     * KOIOS Open Technical Dictionary
+     */
+    const ICD_0194 = "0194";
+
+    /**
+     * Singapore UEN identifier
+     */
+    const ICD_0195 = "0195";
+
+    /**
+     * Kennitala - Iceland legal id for individuals and legal entities
+     */
+    const ICD_0196 = "0196";
+
+    /**
+     * ERSTORG
+     */
+    const ICD_0198 = "0198";
+
+    /**
+     * Legal Entity Identifier (LEI)
+     */
+    const ICD_0199 = "0199";
+
+    /**
+     * Legal entity code (Lithuania)
+     */
+    const ICD_0200 = "0200";
+
+    /**
+     * Codice Univoco UnitÃ  Organizzativa iPA
+     */
+    const ICD_0201 = "0201";
+
+    /**
+     * Indirizzo di Posta Elettronica Certificata
+     */
+    const ICD_0202 = "0202";
+
+    /**
+     * eDelivery Network Participant identifier
+     */
+    const ICD_0203 = "0203";
+
+    /**
+     * Leitweg-ID
+     */
+    const ICD_0204 = "0204";
+
+    /**
+     * Numero d'entreprise / ondernemingsnummer / Unternehmensnummer
+     */
+    const ICD_0208 = "0208";
+
+    /**
+     * GS1 identification keys
+     */
+    const ICD_0209 = "0209";
+
+    /**
+     * CODICE FISCALE
+     */
+    const ICD_0210 = "0210";
+
+    /**
+     * PARTITA IVA
+     */
+    const ICD_0211 = "0211";
+
+    /**
+     * Finnish Organization Identifier
+     */
+    const ICD_0212 = "0212";
+
+    /**
+     * Finnish Organization Value Add Tax Identifier
+     */
+    const ICD_0213 = "0213";
+
+    /**
+     * Danish Ministry of the Interior and Health
+     */
+    const PEPPOL_9901 = "9901";
+
+    /**
+     * The Danish Commerce and Companies Agency
+     */
+    const PEPPOL_9902 = "9902";
+
+    /**
+     * Danish Ministry of Taxation, Central Customs and Tax Administration
+     */
+    const PEPPOL_9904 = "9904";
+
+    /**
+     * Danish VANS providers
+     */
+    const PEPPOL_9905 = "9905";
+
+    /**
+     * Ufficio responsabile gestione partite IVA
+     */
+    const PEPPOL_9906 = "9906";
+
+    /**
+     * TAX Authority
+     */
+    const PEPPOL_9907 = "9907";
+
+    /**
+     * Hungary VAT number
+     */
+    const PEPPOL_9910 = "9910";
+
+    /**
+     * Business Registers Network
+     */
+    const PEPPOL_9913 = "9913";
+
+    /**
+     * Ãsterreichische Umsatzsteuer-Identifikationsnummer
+     */
+    const PEPPOL_9914 = "9914";
+
+    /**
+     * Ãsterreichisches Verwaltungs bzw. Organisationskennzeichen
+     */
+    const PEPPOL_9915 = "9915";
+
+    /**
+     * Kennitala - Iceland legal id for organizations and individuals
+     */
+    const PEPPOL_9917 = "9917";
+
+    /**
+     * SOCIETY FOR WORLDWIDE INTERBANK FINANCIAL, TELECOMMUNICATION S.W.I.F.T
+     */
+    const PEPPOL_9918 = "9918";
+
+    /**
+     * Kennziffer des Unternehmensregisters
+     */
+    const PEPPOL_9919 = "9919";
+
+    /**
+     * Agencia EspaÃ±ola de AdministraciÃ³n Tributaria
+     */
+    const PEPPOL_9920 = "9920";
+
+    /**
+     * Indice delle Pubbliche Amministrazioni
+     */
+    const PEPPOL_9921 = "9921";
+
+    /**
+     * Andorra VAT number
+     */
+    const PEPPOL_9922 = "9922";
+
+    /**
+     * Albania VAT number
+     */
+    const PEPPOL_9923 = "9923";
+
+    /**
+     * Bosnia and Herzegovina VAT number
+     */
+    const PEPPOL_9924 = "9924";
+
+    /**
+     * Belgium VAT number
+     */
+    const PEPPOL_9925 = "9925";
+
+    /**
+     * Bulgaria VAT number
+     */
+    const PEPPOL_9926 = "9926";
+
+    /**
+     * Switzerland VAT number
+     */
+    const PEPPOL_9927 = "9927";
+
+    /**
+     * Cyprus VAT number
+     */
+    const PEPPOL_9928 = "9928";
+
+    /**
+     * Czech Republic VAT number
+     */
+    const PEPPOL_9929 = "9929";
+
+    /**
+     * Germany VAT number
+     */
+    const PEPPOL_9930 = "9930";
+
+    /**
+     * Estonia VAT number
+     */
+    const PEPPOL_9931 = "9931";
+
+    /**
+     * United Kingdom VAT number
+     */
+    const PEPPOL_9932 = "9932";
+
+    /**
+     * Greece VAT number
+     */
+    const PEPPOL_9933 = "9933";
+
+    /**
+     * Croatia VAT number
+     */
+    const PEPPOL_9934 = "9934";
+
+    /**
+     * Ireland VAT number
+     */
+    const PEPPOL_9935 = "9935";
+
+    /**
+     * Liechtenstein VAT number
+     */
+    const PEPPOL_9936 = "9936";
+
+    /**
+     * Lithuania VAT number
+     */
+    const PEPPOL_9937 = "9937";
+
+    /**
+     * Luxemburg VAT number
+     */
+    const PEPPOL_9938 = "9938";
+
+    /**
+     * Latvia VAT number
+     */
+    const PEPPOL_9939 = "9939";
+
+    /**
+     * Monaco VAT number
+     */
+    const PEPPOL_9940 = "9940";
+
+    /**
+     * Montenegro VAT number
+     */
+    const PEPPOL_9941 = "9941";
+
+    /**
+     * Macedonia, the former Yugoslav Republic of VAT number
+     */
+    const PEPPOL_9942 = "9942";
+
+    /**
+     * Malta VAT number
+     */
+    const PEPPOL_9943 = "9943";
+
+    /**
+     * Netherlands VAT number
+     */
+    const PEPPOL_9944 = "9944";
+
+    /**
+     * Poland VAT number
+     */
+    const PEPPOL_9945 = "9945";
+
+    /**
+     * Portugal VAT number
+     */
+    const PEPPOL_9946 = "9946";
+
+    /**
+     * Romania VAT number
+     */
+    const PEPPOL_9947 = "9947";
+
+    /**
+     * Serbia VAT number
+     */
+    const PEPPOL_9948 = "9948";
+
+    /**
+     * Slovenia VAT number
+     */
+    const PEPPOL_9949 = "9949";
+
+    /**
+     * Slovakia VAT number
+     */
+    const PEPPOL_9950 = "9950";
+
+    /**
+     * San Marino VAT number
+     */
+    const PEPPOL_9951 = "9951";
+
+    /**
+     * Turkey VAT number
+     */
+    const PEPPOL_9952 = "9952";
+
+    /**
+     * Holy See (Vatican City State) VAT number
+     */
+    const PEPPOL_9953 = "9953";
+
+    /**
+     * Swedish VAT number
+     */
+    const PEPPOL_9955 = "9955";
+
+    /**
+     * Belgian Crossroad Bank of Enterprises
+     */
+    const PEPPOL_9956 = "9956";
+
+    /**
+     * French VAT number
+     */
+    const PEPPOL_9957 = "9957";
+
+    /**
+     * German Leitweg ID
+     */
+    const PEPPOL_9958 = "9958";
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdInvoiceType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdInvoiceType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdInvoiceType.php	(revision 8435)
@@ -0,0 +1,328 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing the different invoice types
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+
+class ZugferdInvoiceType
+{
+    /**
+     * Debit note related to goods or services (80)
+     * is an Invoice
+     */
+    public const DEBITNOTERELATEDTOGOODSSERVICES = "80";
+
+    /**
+     * Credit note related to goods or services (81)
+     * is a Credit Note
+     */
+    public const CREDITNOTERELATEDTOGOODSSERVICES = "81";
+
+    /**
+     * Metered services invoice (82)
+     * is an Invoice
+     */
+    public const METEREDSERVICESINVOICE = "82";
+
+    /**
+     * Credit note related to financial adjustments (83)
+     * is a Credit Note
+     */
+    public const CREDITNOTERELATEDTOFINANCIALADJUSTMENTS = "83";
+
+    /**
+     * Debit note related to financial adjustments (84)
+     * is an Invoice
+     */
+    public const DEBITNOTERELATEDTOFINANCIALADJUSTMENTS = "84";
+
+    /**
+     * Invoicing data sheet (130)
+     * is an Invoice
+     */
+    public const INVOICINGDATASHEET = "130";
+
+    /**
+     * Direct payment valuation (202)
+     * is an Invoice
+     */
+    public const DIRECTPAYMENTVALUATION = "202";
+
+    /**
+     * Provisional payment valuation (203)
+     * is an Invoice
+     */
+    public const PROVISIONALPAYMENTVALUATION = "203";
+
+    /**
+     * Payment valuation (204)
+     * is an Invoice
+     */
+    public const PAYMENTVALUATION = "204";
+
+    /**
+     * Interim application for payment (211)
+     * is an Invoice
+     */
+    public const INTERIMAPPLICATIONFORPAYMENT = "211";
+
+    /**
+     * Self billed credit note (261)
+     * is a Credit Note
+     *
+     * A document which indicates that the customer
+     * is claiming credit in a self billing environment
+     */
+    public const SELFBILLEDCREDITNOTE = "261";
+
+    /**
+     * Consolidated credit note - goods and services (262)
+     * is a Credit Note
+     */
+    public const CONSOLIDATEDCREDITNOTESGOODSERVICES = "262";
+
+    /**
+     * Price variation invoice (295)
+     * is an Invoice
+     */
+    public const PRICEVARIATIONINVOICE = "295";
+
+    /**
+     * Credit note for price variation (296)
+     * is a Credit Note
+     */
+    public const CREDITNOTEPRICEVARIATION = "296";
+
+    /**
+     * Delcredere credit note (308)
+     * is a Credit Note
+     */
+    public const DELCREDERECREDITNOTE = "308";
+
+    /**
+     * Proforma invoice (325)
+     * is an Invoice
+     */
+    public const PROFORMAINVOICE = "325";
+
+    /**
+     * Partial invoice (326)
+     * is an Invoice
+     *
+     * Teilrechnung
+     */
+    public const PARTIALINVOICE = "326";
+
+    /**
+     * Commercial invoice (380)
+     * is an Invoice
+     *
+     * This is the main invoice type
+     *
+     * Handelsrechnung
+     */
+    public const INVOICE = "380";
+
+    /**
+     * Credit note (381)
+     * is a Credit Note
+     *
+     * This is the main credit note type
+     *
+     * Gutschriftanzeige
+     */
+    public const CREDITNOTE = "381";
+
+    /**
+     * Debit note (383)
+     * is an Invoice
+     *
+     * Belastungsanzeige
+     */
+    public const DEBITNOTE = "383";
+
+    /**
+     * Corrected invoice (384)
+     * is an Invoice
+     *
+     * Rechnungskorrektur
+     */
+    public const CORRECTION = "384";
+
+    /**
+     * Consolidated invoice (385)
+     * is an Invoice
+     */
+    public const CONSOLIDATEDINVOICE = "385";
+
+    /**
+     * Prepayment invoice (386)
+     * is an Invoice
+     *
+     * Vorauszahlungsrechnung
+     * Eine Rechnung, die Vorauszahlung fÃŒr Produkte anfordert.
+     * Die darin enthaltenen BetrÃ€ge werden in der Schlussrechnung
+     * abgezogen.
+     *
+     * An invoice requesting prepayment for products.
+     * The amounts contained therein will be deducted from the final
+     * invoice.
+     */
+    public const PREPAYMENTINVOICE = "386";
+
+    /**
+     * Hire invoice (387)
+     * is an Invoice
+     */
+    public const HIREINVOICE = "387";
+
+    /**
+     * Tax invoice (388)
+     * is an Invoice
+     */
+    public const TAXINVOICE = "388";
+
+    /**
+     * Self-billed invoice (389)
+     * is an Invoice
+     *
+     * Gutschrift (Selbst ausgestellte Rechnung)
+     * Gutschrift im Gutschriftverfahren
+     *
+     * Eine Rechnung, die der Zahlungspflichtige selbst ausstellt
+     * anstelle des VerkÃ€ufers.
+     *
+     * An invoice that the debtor issues himself instead of the
+     * seller.
+     */
+    public const SELFBILLEDINVOICE = "389";
+
+    /**
+     * Delcredere invoice (390)
+     * is an Invoice
+     */
+    public const DELCREDEREINVOICE = "390";
+
+    /**
+     * Factored invoice (393)
+     * is an Invoice
+     */
+    public const FACTOREDINVOICE = "393";
+
+    /**
+     * Lease invoice (394)
+     * is an Invoice
+     */
+    public const LEASEINVOICE = "394";
+
+    /**
+     * Consignment invoice (395)
+     * is an Invoice
+     */
+    public const CONSIGNMENTINVOICE = "395";
+
+    /**
+     * Factored credit note (396)
+     * is a Credit Note
+     */
+    public const FACTOREDCREDITNOTE = "396";
+
+    /**
+     * Optical Character Reading (OCR) payment credit note (420)
+     * is a Credit Note
+     */
+    public const OCRPAYMENTCREDITNOTE = "420";
+
+    /**
+     * Debit advice (456)
+     * is an Invoice
+     */
+    public const DEBITADVICE = "456";
+
+    /**
+     * Reversal of debit (457)
+     * is an Invoice
+     */
+    public const REVERSALOFDEBIT = "457";
+
+    /**
+     * Reversal of credit (458)
+     * is a Credit Note
+     */
+    public const REVERSALOFCREDIT = "458";
+
+    /**
+     * Self billed debit note (527)
+     * is an Invoice
+     */
+    public const SELFBILLEDDEBITNOTE = "527";
+
+    /**
+     * Insurer's invoice (575)
+     * is an Invoice
+     */
+    public const INSURERSINVOICE = "575";
+
+    /**
+     * Forwarder's invoice (623)
+     * is an Invoice
+     */
+    public const FORWARDERSINVOICE = "623";
+
+    /**
+     * Port charges documents (633)
+     * is an Invoice
+     */
+    public const PORTCHARGESDOCUMENTS = "633";
+
+    /**
+     * Invoice information for accounting purposes (751)
+     * is an Invoice
+     *
+     * Buchungshilfe - KEINE Rechnung
+     *
+     * FÃŒr die Profile BASIC WL und MINIMUM darf ausschlieÃlich dieser
+     * Code 751 "Buchungshilfe - KEINE Rechnung" verwendet werden, da diese
+     * Profile in DE steuerrechtlich keine Rechnungen darstellen!
+     *
+     * For the BASIC WL and MINIMUM profiles only this code 751 "Booking
+     * aid - NO invoice" may be used, since these profiles do not represent
+     * invoices for tax purposes in DE!
+     */
+    public const INVOICEINFORMATION = "751";
+
+    /**
+     * Freight invoice (780)
+     * is an Invoice
+     */
+    public const FREIGHTINVOICE = "780";
+
+    /**
+     * Customs invoice (935)
+     * is an Invoice
+     */
+    public const CUSTOMSINVOICE = "935";
+
+    /**
+     * Corrected invoice (1380)
+     * is an Invoice
+     *
+     * Old ZUGFeRD variant, use Corrected Invoice (384) instead
+     */
+    public const CORRECTIONOLD = "1380";
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdItemTypeIdentificationCodes.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdItemTypeIdentificationCodes.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdItemTypeIdentificationCodes.php	(revision 8435)
@@ -0,0 +1,927 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing the Item type identification codes
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdItemTypeIdentificationCodes
+{
+    /**
+     * Product version number
+     */
+    const UNTDID_7143_AA = 'AA';
+
+    /**
+     * Assembly
+     */
+    const UNTDID_7143_AB = 'AB';
+
+    /**
+     * HIBC (Health Industry Bar Code)
+     */
+    const UNTDID_7143_AC = 'AC';
+
+    /**
+     * Cold roll number
+     */
+    const UNTDID_7143_AD = 'AD';
+
+    /**
+     * Hot roll number
+     */
+    const UNTDID_7143_AE = 'AE';
+
+    /**
+     * Slab number
+     */
+    const UNTDID_7143_AF = 'AF';
+
+    /**
+     * Software revision number
+     */
+    const UNTDID_7143_AG = 'AG';
+
+    /**
+     * UPC (Universal Product Code) Consumer package code (1-5-5)
+     */
+    const UNTDID_7143_AH = 'AH';
+
+    /**
+     * UPC (Universal Product Code) Consumer package code (1-5-5-
+     */
+    const UNTDID_7143_AI = 'AI';
+
+    /**
+     * Sample number
+     */
+    const UNTDID_7143_AJ = 'AJ';
+
+    /**
+     * Pack number
+     */
+    const UNTDID_7143_AK = 'AK';
+
+    /**
+     * UPC (Universal Product Code) Shipping container code (1-2-
+     */
+    const UNTDID_7143_AL = 'AL';
+
+    /**
+     * UPC (Universal Product Code)/EAN (European article number)
+     */
+    const UNTDID_7143_AM = 'AM';
+
+    /**
+     * UPC (Universal Product Code) suffix
+     */
+    const UNTDID_7143_AN = 'AN';
+
+    /**
+     * State label code
+     */
+    const UNTDID_7143_AO = 'AO';
+
+    /**
+     * Heat number
+     */
+    const UNTDID_7143_AP = 'AP';
+
+    /**
+     * Coupon number
+     */
+    const UNTDID_7143_AQ = 'AQ';
+
+    /**
+     * Resource number
+     */
+    const UNTDID_7143_AR = 'AR';
+
+    /**
+     * Work task number
+     */
+    const UNTDID_7143_AS = 'AS';
+
+    /**
+     * Price look up number
+     */
+    const UNTDID_7143_AT = 'AT';
+
+    /**
+     * NSN (North Atlantic Treaty Organization Stock Number)
+     */
+    const UNTDID_7143_AU = 'AU';
+
+    /**
+     * Refined product code
+     */
+    const UNTDID_7143_AV = 'AV';
+
+    /**
+     * Exhibit
+     */
+    const UNTDID_7143_AW = 'AW';
+
+    /**
+     * End item
+     */
+    const UNTDID_7143_AX = 'AX';
+
+    /**
+     * Federal supply classification
+     */
+    const UNTDID_7143_AY = 'AY';
+
+    /**
+     * Engineering data list
+     */
+    const UNTDID_7143_AZ = 'AZ';
+
+    /**
+     * Milestone event number
+     */
+    const UNTDID_7143_BA = 'BA';
+
+    /**
+     * Lot number
+     */
+    const UNTDID_7143_BB = 'BB';
+
+    /**
+     * National drug code 4-4-2 format
+     */
+    const UNTDID_7143_BC = 'BC';
+
+    /**
+     * National drug code 5-3-2 format
+     */
+    const UNTDID_7143_BD = 'BD';
+
+    /**
+     * National drug code 5-4-1 format
+     */
+    const UNTDID_7143_BE = 'BE';
+
+    /**
+     * National drug code 5-4-2 format
+     */
+    const UNTDID_7143_BF = 'BF';
+
+    /**
+     * National drug code
+     */
+    const UNTDID_7143_BG = 'BG';
+
+    /**
+     * Part number
+     */
+    const UNTDID_7143_BH = 'BH';
+
+    /**
+     * Local Stock Number (LSN)
+     */
+    const UNTDID_7143_BI = 'BI';
+
+    /**
+     * Next higher assembly number
+     */
+    const UNTDID_7143_BJ = 'BJ';
+
+    /**
+     * Data category
+     */
+    const UNTDID_7143_BK = 'BK';
+
+    /**
+     * Control number
+     */
+    const UNTDID_7143_BL = 'BL';
+
+    /**
+     * Special material identification code
+     */
+    const UNTDID_7143_BM = 'BM';
+
+    /**
+     * Locally assigned control number
+     */
+    const UNTDID_7143_BN = 'BN';
+
+    /**
+     * Buyer's colour
+     */
+    const UNTDID_7143_BO = 'BO';
+
+    /**
+     * Buyer's part number
+     */
+    const UNTDID_7143_BP = 'BP';
+
+    /**
+     * Variable measure product code
+     */
+    const UNTDID_7143_BQ = 'BQ';
+
+    /**
+     * Financial phase
+     */
+    const UNTDID_7143_BR = 'BR';
+
+    /**
+     * Contract breakdown
+     */
+    const UNTDID_7143_BS = 'BS';
+
+    /**
+     * Technical phase
+     */
+    const UNTDID_7143_BT = 'BT';
+
+    /**
+     * Dye lot number
+     */
+    const UNTDID_7143_BU = 'BU';
+
+    /**
+     * Daily statement of activities
+     */
+    const UNTDID_7143_BV = 'BV';
+
+    /**
+     * Periodical statement of activities within a bilaterally
+     */
+    const UNTDID_7143_BW = 'BW';
+
+    /**
+     * Calendar week statement of activities
+     */
+    const UNTDID_7143_BX = 'BX';
+
+    /**
+     * Calendar month statement of activities
+     */
+    const UNTDID_7143_BY = 'BY';
+
+    /**
+     * Original equipment number
+     */
+    const UNTDID_7143_BZ = 'BZ';
+
+    /**
+     * Industry commodity code
+     */
+    const UNTDID_7143_CC = 'CC';
+
+    /**
+     * Commodity grouping
+     */
+    const UNTDID_7143_CG = 'CG';
+
+    /**
+     * Colour number
+     */
+    const UNTDID_7143_CL = 'CL';
+
+    /**
+     * Contract number
+     */
+    const UNTDID_7143_CR = 'CR';
+
+    /**
+     * Customs article number
+     */
+    const UNTDID_7143_CV = 'CV';
+
+    /**
+     * Drawing revision number
+     */
+    const UNTDID_7143_DR = 'DR';
+
+    /**
+     * Drawing
+     */
+    const UNTDID_7143_DW = 'DW';
+
+    /**
+     * Engineering change level
+     */
+    const UNTDID_7143_EC = 'EC';
+
+    /**
+     * Material code
+     */
+    const UNTDID_7143_EF = 'EF';
+
+    /**
+     * International Article Numbering Association (EAN)
+     */
+    const UNTDID_7143_EN = 'EN';
+
+    /**
+     * Fish species
+     */
+    const UNTDID_7143_FS = 'FS';
+
+    /**
+     * Buyer's internal product group code
+     */
+    const UNTDID_7143_GB = 'GB';
+
+    /**
+     * National product group code
+     */
+    const UNTDID_7143_GN = 'GN';
+
+    /**
+     * General specification number
+     */
+    const UNTDID_7143_GS = 'GS';
+
+    /**
+     * Harmonised system
+     */
+    const UNTDID_7143_HS = 'HS';
+
+    /**
+     * ISBN (International Standard Book Number)
+     */
+    const UNTDID_7143_IB = 'IB';
+
+    /**
+     * Buyer's item number
+     */
+    const UNTDID_7143_IN = 'IN';
+
+    /**
+     * ISSN (International Standard Serial Number)
+     */
+    const UNTDID_7143_IS = 'IS';
+
+    /**
+     * Buyer's style number
+     */
+    const UNTDID_7143_IT = 'IT';
+
+    /**
+     * Buyer's size code
+     */
+    const UNTDID_7143_IZ = 'IZ';
+
+    /**
+     * Machine number
+     */
+    const UNTDID_7143_MA = 'MA';
+
+    /**
+     * Manufacturer's (producer's) article number
+     */
+    const UNTDID_7143_MF = 'MF';
+
+    /**
+     * Model number
+     */
+    const UNTDID_7143_MN = 'MN';
+
+    /**
+     * Product/service identification number
+     */
+    const UNTDID_7143_MP = 'MP';
+
+    /**
+     * Batch number
+     */
+    const UNTDID_7143_NB = 'NB';
+
+    /**
+     * Customer order number
+     */
+    const UNTDID_7143_ON = 'ON';
+
+    /**
+     * Part number description
+     */
+    const UNTDID_7143_PD = 'PD';
+
+    /**
+     * Purchaser's order line number
+     */
+    const UNTDID_7143_PL = 'PL';
+
+    /**
+     * Purchase order number
+     */
+    const UNTDID_7143_PO = 'PO';
+
+    /**
+     * Promotional variant number
+     */
+    const UNTDID_7143_PV = 'PV';
+
+    /**
+     * Buyer's qualifier for size
+     */
+    const UNTDID_7143_QS = 'QS';
+
+    /**
+     * Returnable container number
+     */
+    const UNTDID_7143_RC = 'RC';
+
+    /**
+     * Release number
+     */
+    const UNTDID_7143_RN = 'RN';
+
+    /**
+     * Run number
+     */
+    const UNTDID_7143_RU = 'RU';
+
+    /**
+     * Record keeping of model year
+     */
+    const UNTDID_7143_RY = 'RY';
+
+    /**
+     * Supplier's article number
+     */
+    const UNTDID_7143_SA = 'SA';
+
+    /**
+     * Standard group of products (mixed assortment)
+     */
+    const UNTDID_7143_SG = 'SG';
+
+    /**
+     * SKU (Stock keeping unit)
+     */
+    const UNTDID_7143_SK = 'SK';
+
+    /**
+     * Serial number
+     */
+    const UNTDID_7143_SN = 'SN';
+
+    /**
+     * RSK number
+     */
+    const UNTDID_7143_SRS = 'SRS';
+
+    /**
+     * IFLS (Institut Francais du Libre Service) 5 digit product
+     */
+    const UNTDID_7143_SRT = 'SRT';
+
+    /**
+     * IFLS (Institut Francais du Libre Service) 9 digit product
+     */
+    const UNTDID_7143_SRU = 'SRU';
+
+    /**
+     * GS1 Global Trade Item Number
+     */
+    const UNTDID_7143_SRV = 'SRV';
+
+    /**
+     * EDIS (Energy Data Identification System)
+     */
+    const UNTDID_7143_SRW = 'SRW';
+
+    /**
+     * Slaughter number
+     */
+    const UNTDID_7143_SRX = 'SRX';
+
+    /**
+     * Official animal number
+     */
+    const UNTDID_7143_SRY = 'SRY';
+
+    /**
+     * Harmonized tariff schedule
+     */
+    const UNTDID_7143_SRZ = 'SRZ';
+
+    /**
+     * Supplier's supplier article number
+     */
+    const UNTDID_7143_SS = 'SS';
+
+    /**
+     * 46 Level DOT Code
+     */
+    const UNTDID_7143_SSA = 'SSA';
+
+    /**
+     * Airline Tariff 6D
+     */
+    const UNTDID_7143_SSB = 'SSB';
+
+    /**
+     * Title 49 Code of Federal Regulations
+     */
+    const UNTDID_7143_SSC = 'SSC';
+
+    /**
+     * International Civil Aviation Administration code
+     */
+    const UNTDID_7143_SSD = 'SSD';
+
+    /**
+     * Hazardous Materials ID DOT
+     */
+    const UNTDID_7143_SSE = 'SSE';
+
+    /**
+     * Endorsement
+     */
+    const UNTDID_7143_SSF = 'SSF';
+
+    /**
+     * Air Force Regulation 71-4
+     */
+    const UNTDID_7143_SSG = 'SSG';
+
+    /**
+     * Breed
+     */
+    const UNTDID_7143_SSH = 'SSH';
+
+    /**
+     * Chemical Abstract Service (CAS) registry number
+     */
+    const UNTDID_7143_SSI = 'SSI';
+
+    /**
+     * Engine model designation
+     */
+    const UNTDID_7143_SSJ = 'SSJ';
+
+    /**
+     * Institutional Meat Purchase Specifications (IMPS) Number
+     */
+    const UNTDID_7143_SSK = 'SSK';
+
+    /**
+     * Price Look-Up code (PLU)
+     */
+    const UNTDID_7143_SSL = 'SSL';
+
+    /**
+     * International Maritime Organization (IMO) Code
+     */
+    const UNTDID_7143_SSM = 'SSM';
+
+    /**
+     * Bureau of Explosives 600-A (rail)
+     */
+    const UNTDID_7143_SSN = 'SSN';
+
+    /**
+     * United Nations Dangerous Goods List
+     */
+    const UNTDID_7143_SSO = 'SSO';
+
+    /**
+     * International Code of Botanical Nomenclature (ICBN)
+     */
+    const UNTDID_7143_SSP = 'SSP';
+
+    /**
+     * International Code of Zoological Nomenclature (ICZN)
+     */
+    const UNTDID_7143_SSQ = 'SSQ';
+
+    /**
+     * International Code of Nomenclature for Cultivated Plants
+     */
+    const UNTDID_7143_SSR = 'SSR';
+
+    /**
+     * Distributorâs article identifier
+     */
+    const UNTDID_7143_SSS = 'SSS';
+
+    /**
+     * Norwegian Classification system ENVA
+     */
+    const UNTDID_7143_SST = 'SST';
+
+    /**
+     * Supplier assigned classification
+     */
+    const UNTDID_7143_SSU = 'SSU';
+
+    /**
+     * Mexican classification system AMECE
+     */
+    const UNTDID_7143_SSV = 'SSV';
+
+    /**
+     * German classification system CCG
+     */
+    const UNTDID_7143_SSW = 'SSW';
+
+    /**
+     * Finnish classification system EANFIN
+     */
+    const UNTDID_7143_SSX = 'SSX';
+
+    /**
+     * Canadian classification system ICC
+     */
+    const UNTDID_7143_SSY = 'SSY';
+
+    /**
+     * French classification system IFLS5
+     */
+    const UNTDID_7143_SSZ = 'SSZ';
+
+    /**
+     * Style number
+     */
+    const UNTDID_7143_ST = 'ST';
+
+    /**
+     * Dutch classification system CBL
+     */
+    const UNTDID_7143_STA = 'STA';
+
+    /**
+     * Japanese classification system JICFS
+     */
+    const UNTDID_7143_STB = 'STB';
+
+    /**
+     * European Union dairy subsidy eligibility classification
+     */
+    const UNTDID_7143_STC = 'STC';
+
+    /**
+     * GS1 Spain classification system
+     */
+    const UNTDID_7143_STD = 'STD';
+
+    /**
+     * GS1 Poland classification system
+     */
+    const UNTDID_7143_STE = 'STE';
+
+    /**
+     * Federal Agency on Technical Regulating and Metrology of the
+     */
+    const UNTDID_7143_STF = 'STF';
+
+    /**
+     * Efficient Consumer Response (ECR) Austria classification
+     */
+    const UNTDID_7143_STG = 'STG';
+
+    /**
+     * GS1 Italy classification system
+     */
+    const UNTDID_7143_STH = 'STH';
+
+    /**
+     * CPV (Common Procurement Vocabulary)
+     */
+    const UNTDID_7143_STI = 'STI';
+
+    /**
+     * IFDA (International Foodservice Distributors Association)
+     */
+    const UNTDID_7143_STJ = 'STJ';
+
+    /**
+     * AHFS (American Hospital Formulary Service) pharmacologic -
+     */
+    const UNTDID_7143_STK = 'STK';
+
+    /**
+     * ATC (Anatomical Therapeutic Chemical) classification system
+     */
+    const UNTDID_7143_STL = 'STL';
+
+    /**
+     * CLADIMED (Classification des Dispositifs MÃ©dicaux)
+     */
+    const UNTDID_7143_STM = 'STM';
+
+    /**
+     * CMDR (Canadian Medical Device Regulations) classification
+     */
+    const UNTDID_7143_STN = 'STN';
+
+    /**
+     * CNDM (Classificazione Nazionale dei Dispositivi Medici)
+     */
+    const UNTDID_7143_STO = 'STO';
+
+    /**
+     * UK DM&D (Dictionary of Medicines & Devices) standard coding
+     */
+    const UNTDID_7143_STP = 'STP';
+
+    /**
+     * eCl@ss
+     */
+    const UNTDID_7143_STQ = 'STQ';
+
+    /**
+     * EDMA (European Diagnostic Manufacturers Association)
+     */
+    const UNTDID_7143_STR = 'STR';
+
+    /**
+     * EGAR (European Generic Article Register)
+     */
+    const UNTDID_7143_STS = 'STS';
+
+    /**
+     * GMDN (Global Medical Devices Nomenclature)
+     */
+    const UNTDID_7143_STT = 'STT';
+
+    /**
+     * GPI (Generic Product Identifier)
+     */
+    const UNTDID_7143_STU = 'STU';
+
+    /**
+     * HCPCS (Healthcare Common Procedure Coding System)
+     */
+    const UNTDID_7143_STV = 'STV';
+
+    /**
+     * ICPS (International Classification for Patient Safety)
+     */
+    const UNTDID_7143_STW = 'STW';
+
+    /**
+     * MedDRA (Medical Dictionary for Regulatory Activities)
+     */
+    const UNTDID_7143_STX = 'STX';
+
+    /**
+     * Medical Columbus
+     */
+    const UNTDID_7143_STY = 'STY';
+
+    /**
+     * NAPCS (North American Product Classification System)
+     */
+    const UNTDID_7143_STZ = 'STZ';
+
+    /**
+     * NHS (National Health Services) eClass
+     */
+    const UNTDID_7143_SUA = 'SUA';
+
+    /**
+     * US FDA (Food and Drug Administration) Product Code
+     */
+    const UNTDID_7143_SUB = 'SUB';
+
+    /**
+     * SNOMED CT (Systematized Nomenclature of Medicine-Clinical
+     */
+    const UNTDID_7143_SUC = 'SUC';
+
+    /**
+     * UMDNS (Universal Medical Device Nomenclature System)
+     */
+    const UNTDID_7143_SUD = 'SUD';
+
+    /**
+     * GS1 Global Returnable Asset Identifier, non-serialised
+     */
+    const UNTDID_7143_SUE = 'SUE';
+
+    /**
+     * IMEI
+     */
+    const UNTDID_7143_SUF = 'SUF';
+
+    /**
+     * Waste Type (EMSA)
+     */
+    const UNTDID_7143_SUG = 'SUG';
+
+    /**
+     * Ship's store classification type
+     */
+    const UNTDID_7143_SUH = 'SUH';
+
+    /**
+     * Emergency fire code
+     */
+    const UNTDID_7143_SUI = 'SUI';
+
+    /**
+     * Emergency spillage code
+     */
+    const UNTDID_7143_SUJ = 'SUJ';
+
+    /**
+     * IMDG packing group
+     */
+    const UNTDID_7143_SUK = 'SUK';
+
+    /**
+     * MARPOL Code IBC
+     */
+    const UNTDID_7143_SUL = 'SUL';
+
+    /**
+     * IMDG subsidiary risk class
+     */
+    const UNTDID_7143_SUM = 'SUM';
+
+    /**
+     * Transport group number
+     */
+    const UNTDID_7143_TG = 'TG';
+
+    /**
+     * Taxonomic Serial Number
+     */
+    const UNTDID_7143_TSN = 'TSN';
+
+    /**
+     * IMDG main hazard class
+     */
+    const UNTDID_7143_TSO = 'TSO';
+
+    /**
+     * EU Combined Nomenclature
+     */
+    const UNTDID_7143_TSP = 'TSP';
+
+    /**
+     * Therapeutic classification number
+     */
+    const UNTDID_7143_TSQ = 'TSQ';
+
+    /**
+     * European Waste Catalogue
+     */
+    const UNTDID_7143_TSR = 'TSR';
+
+    /**
+     * Price grouping code
+     */
+    const UNTDID_7143_TSS = 'TSS';
+
+    /**
+     * UNSPSC
+     */
+    const UNTDID_7143_TST = 'TST';
+
+    /**
+     * Ultimate customer's article number
+     */
+    const UNTDID_7143_UA = 'UA';
+
+    /**
+     * UPC (Universal product code)
+     */
+    const UNTDID_7143_UP = 'UP';
+
+    /**
+     * Vendor item number
+     */
+    const UNTDID_7143_VN = 'VN';
+
+    /**
+     * Vendor's (seller's) part number
+     */
+    const UNTDID_7143_VP = 'VP';
+
+    /**
+     * Vendor's supplemental item number
+     */
+    const UNTDID_7143_VS = 'VS';
+
+    /**
+     * Vendor specification number
+     */
+    const UNTDID_7143_VX = 'VX';
+
+    /**
+     * Mutually defined
+     */
+    const UNTDID_7143_ZZZ = 'ZZZ';
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdPaymentMeans.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdPaymentMeans.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdPaymentMeans.php	(revision 8435)
@@ -0,0 +1,437 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing the Payment means
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdPaymentMeans
+{
+    /**
+     * Instrument not defined
+     */
+    const UNTDID_4461_1 = '1';
+
+    /**
+     * Automated clearing house credit
+     */
+    const UNTDID_4461_2 = '2';
+
+    /**
+     * Automated clearing house debit
+     */
+    const UNTDID_4461_3 = '3';
+
+    /**
+     * ACH demand debit reversal
+     */
+    const UNTDID_4461_4 = '4';
+
+    /**
+     * ACH demand credit reversal
+     */
+    const UNTDID_4461_5 = '5';
+
+    /**
+     * ACH demand credit
+     */
+    const UNTDID_4461_6 = '6';
+
+    /**
+     * ACH demand debit
+     */
+    const UNTDID_4461_7 = '7';
+
+    /**
+     * Hold
+     */
+    const UNTDID_4461_8 = '8';
+
+    /**
+     * National or regional clearing
+     */
+    const UNTDID_4461_9 = '9';
+
+    /**
+     * In cash
+     */
+    const UNTDID_4461_10 = '10';
+
+    /**
+     * ACH savings credit reversal
+     */
+    const UNTDID_4461_11 = '11';
+
+    /**
+     * ACH savings debit reversal
+     */
+    const UNTDID_4461_12 = '12';
+
+    /**
+     * ACH savings credit
+     */
+    const UNTDID_4461_13 = '13';
+
+    /**
+     * ACH savings debit
+     */
+    const UNTDID_4461_14 = '14';
+
+    /**
+     * Bookentry credit
+     */
+    const UNTDID_4461_15 = '15';
+
+    /**
+     * Bookentry debit
+     */
+    const UNTDID_4461_16 = '16';
+
+    /**
+     * ACH demand cash concentration/disbursement (CCD) credit
+     */
+    const UNTDID_4461_17 = '17';
+
+    /**
+     * ACH demand cash concentration/disbursement (CCD) debit
+     */
+    const UNTDID_4461_18 = '18';
+
+    /**
+     * ACH demand corporate trade payment (CTP) credit
+     */
+    const UNTDID_4461_19 = '19';
+
+    /**
+     * Cheque
+     */
+    const UNTDID_4461_20 = '20';
+
+    /**
+     * Banker's draft
+     */
+    const UNTDID_4461_21 = '21';
+
+    /**
+     * Certified banker's draft
+     */
+    const UNTDID_4461_22 = '22';
+
+    /**
+     * Bank cheque (issued by a banking or similar establishment)
+     */
+    const UNTDID_4461_23 = '23';
+
+    /**
+     * Bill of exchange awaiting acceptance
+     */
+    const UNTDID_4461_24 = '24';
+
+    /**
+     * Certified cheque
+     */
+    const UNTDID_4461_25 = '25';
+
+    /**
+     * Local cheque
+     */
+    const UNTDID_4461_26 = '26';
+
+    /**
+     * ACH demand corporate trade payment (CTP) debit
+     */
+    const UNTDID_4461_27 = '27';
+
+    /**
+     * ACH demand corporate trade exchange (CTX) credit
+     */
+    const UNTDID_4461_28 = '28';
+
+    /**
+     * ACH demand corporate trade exchange (CTX) debit
+     */
+    const UNTDID_4461_29 = '29';
+
+    /**
+     * Credit transfer
+     */
+    const UNTDID_4461_30 = '30';
+
+    /**
+     * Debit transfer
+     */
+    const UNTDID_4461_31 = '31';
+
+    /**
+     * ACH demand cash concentration/disbursement plus (CCD+)
+     */
+    const UNTDID_4461_32 = '32';
+
+    /**
+     * ACH demand cash concentration/disbursement plus (CCD+)
+     */
+    const UNTDID_4461_33 = '33';
+
+    /**
+     * ACH prearranged payment and deposit (PPD)
+     */
+    const UNTDID_4461_34 = '34';
+
+    /**
+     * ACH savings cash concentration/disbursement (CCD) credit
+     */
+    const UNTDID_4461_35 = '35';
+
+    /**
+     * ACH savings cash concentration/disbursement (CCD) debit
+     */
+    const UNTDID_4461_36 = '36';
+
+    /**
+     * ACH savings corporate trade payment (CTP) credit
+     */
+    const UNTDID_4461_37 = '37';
+
+    /**
+     * ACH savings corporate trade payment (CTP) debit
+     */
+    const UNTDID_4461_38 = '38';
+
+    /**
+     * ACH savings corporate trade exchange (CTX) credit
+     */
+    const UNTDID_4461_39 = '39';
+
+    /**
+     * ACH savings corporate trade exchange (CTX) debit
+     */
+    const UNTDID_4461_40 = '40';
+
+    /**
+     * ACH savings cash concentration/disbursement plus (CCD+)
+     */
+    const UNTDID_4461_41 = '41';
+
+    /**
+     * Payment to bank account
+     */
+    const UNTDID_4461_42 = '42';
+
+    /**
+     * ACH savings cash concentration/disbursement plus (CCD+)
+     */
+    const UNTDID_4461_43 = '43';
+
+    /**
+     * Accepted bill of exchange
+     */
+    const UNTDID_4461_44 = '44';
+
+    /**
+     * Referenced home-banking credit transfer
+     */
+    const UNTDID_4461_45 = '45';
+
+    /**
+     * Interbank debit transfer
+     */
+    const UNTDID_4461_46 = '46';
+
+    /**
+     * Home-banking debit transfer
+     */
+    const UNTDID_4461_47 = '47';
+
+    /**
+     * Bank card
+     */
+    const UNTDID_4461_48 = '48';
+
+    /**
+     * Direct debit
+     */
+    const UNTDID_4461_49 = '49';
+
+    /**
+     * Payment by postgiro
+     */
+    const UNTDID_4461_50 = '50';
+
+    /**
+     * FR, norme 6 97-Telereglement CFONB (French Organisation for
+     */
+    const UNTDID_4461_51 = '51';
+
+    /**
+     * Urgent commercial payment
+     */
+    const UNTDID_4461_52 = '52';
+
+    /**
+     * Urgent Treasury Payment
+     */
+    const UNTDID_4461_53 = '53';
+
+    /**
+     * Credit card
+     */
+    const UNTDID_4461_54 = '54';
+
+    /**
+     * Debit card
+     */
+    const UNTDID_4461_55 = '55';
+
+    /**
+     * Bankgiro
+     */
+    const UNTDID_4461_56 = '56';
+
+    /**
+     * Standing agreement
+     */
+    const UNTDID_4461_57 = '57';
+
+    /**
+     * SEPA credit transfer
+     */
+    const UNTDID_4461_58 = '58';
+
+    /**
+     * SEPA direct debit
+     */
+    const UNTDID_4461_59 = '59';
+
+    /**
+     * Promissory note
+     */
+    const UNTDID_4461_60 = '60';
+
+    /**
+     * Promissory note signed by the debtor
+     */
+    const UNTDID_4461_61 = '61';
+
+    /**
+     * Promissory note signed by the debtor and endorsed by a bank
+     */
+    const UNTDID_4461_62 = '62';
+
+    /**
+     * Promissory note signed by the debtor and endorsed by a
+     */
+    const UNTDID_4461_63 = '63';
+
+    /**
+     * Promissory note signed by a bank
+     */
+    const UNTDID_4461_64 = '64';
+
+    /**
+     * Promissory note signed by a bank and endorsed by another
+     */
+    const UNTDID_4461_65 = '65';
+
+    /**
+     * Promissory note signed by a third party
+     */
+    const UNTDID_4461_66 = '66';
+
+    /**
+     * Promissory note signed by a third party and endorsed by a
+     */
+    const UNTDID_4461_67 = '67';
+
+    /**
+     * Online payment service
+     */
+    const UNTDID_4461_68 = '68';
+
+    /**
+     * Transfer Advice
+     */
+    const UNTDID_4461_69 = '69';
+
+    /**
+     * Bill drawn by the creditor on the debtor
+     */
+    const UNTDID_4461_70 = '70';
+
+    /**
+     * Bill drawn by the creditor on a bank
+     */
+    const UNTDID_4461_74 = '74';
+
+    /**
+     * Bill drawn by the creditor, endorsed by another bank
+     */
+    const UNTDID_4461_75 = '75';
+
+    /**
+     * Bill drawn by the creditor on a bank and endorsed by a
+     */
+    const UNTDID_4461_76 = '76';
+
+    /**
+     * Bill drawn by the creditor on a third party
+     */
+    const UNTDID_4461_77 = '77';
+
+    /**
+     * Bill drawn by creditor on third party, accepted and
+     */
+    const UNTDID_4461_78 = '78';
+
+    /**
+     * Not transferable banker's draft
+     */
+    const UNTDID_4461_91 = '91';
+
+    /**
+     * Not transferable local cheque
+     */
+    const UNTDID_4461_92 = '92';
+
+    /**
+     * Reference giro
+     */
+    const UNTDID_4461_93 = '93';
+
+    /**
+     * Urgent giro
+     */
+    const UNTDID_4461_94 = '94';
+
+    /**
+     * Free format giro
+     */
+    const UNTDID_4461_95 = '95';
+
+    /**
+     * Requested method for payment was not used
+     */
+    const UNTDID_4461_96 = '96';
+
+    /**
+     * Clearing between partners
+     */
+    const UNTDID_4461_97 = '97';
+
+    /**
+     * Mutually defined
+     */
+    const UNTDID_4461_ZZZ = 'ZZZ';
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdReferenceCodeQualifiers.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdReferenceCodeQualifiers.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdReferenceCodeQualifiers.php	(revision 8435)
@@ -0,0 +1,917 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing the Reference code qualifiers
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdReferenceCodeQualifiers
+{
+    /**
+     * UAE Dirham
+     */
+    const UAE_DIRHAM = "AED";
+
+    /**
+     * Afghani
+     */
+    const AFGHANI = "AFN";
+
+    /**
+     * Lek
+     */
+    const LEK = "ALL";
+
+    /**
+     * Armenian Dram
+     */
+    const ARMENIAN_DRAM = "AMD";
+
+    /**
+     * Netherlands Antillean Guilder
+     */
+    const NETHERLANDS_ANTILLEAN_GUILDER = "ANG";
+
+    /**
+     * Kwanza
+     */
+    const KWANZA = "AOA";
+
+    /**
+     * Argentine Peso
+     */
+    const ARGENTINE_PESO = "ARS";
+
+    /**
+     * Australian Dollar
+     */
+    const AUSTRALIAN_DOLLAR = "AUD";
+
+    /**
+     * Aruban Florin
+     */
+    const ARUBAN_FLORIN = "AWG";
+
+    /**
+     * Azerbaijan Manat
+     */
+    const AZERBAIJAN_MANAT = "AZN";
+
+    /**
+     * Convertible Mark
+     */
+    const CONVERTIBLE_MARK = "BAM";
+
+    /**
+     * Barbados Dollar
+     */
+    const BARBADOS_DOLLAR = "BBD";
+
+    /**
+     * Taka
+     */
+    const TAKA = "BDT";
+
+    /**
+     * Bulgarian Lev
+     */
+    const BULGARIAN_LEV = "BGN";
+
+    /**
+     * Bahraini Dinar
+     */
+    const BAHRAINI_DINAR = "BHD";
+
+    /**
+     * Burundi Franc
+     */
+    const BURUNDI_FRANC = "BIF";
+
+    /**
+     * Bermudian Dollar
+     */
+    const BERMUDIAN_DOLLAR = "BMD";
+
+    /**
+     * Brunei Dollar
+     */
+    const BRUNEI_DOLLAR = "BND";
+
+    /**
+     * Boliviano
+     */
+    const BOLIVIANO = "BOB";
+
+    /**
+     * Mvdol
+     */
+    const MVDOL = "BOV";
+
+    /**
+     * Brazilian Real
+     */
+    const BRAZILIAN_REAL = "BRL";
+
+    /**
+     * Bahamian Dollar
+     */
+    const BAHAMIAN_DOLLAR = "BSD";
+
+    /**
+     * Ngultrum
+     */
+    const NGULTRUM = "BTN";
+
+    /**
+     * Pula
+     */
+    const PULA = "BWP";
+
+    /**
+     * Belarusian Ruble
+     */
+    const BELARUSIAN_RUBLE = "BYN";
+
+    /**
+     * Belize Dollar
+     */
+    const BELIZE_DOLLAR = "BZD";
+
+    /**
+     * Canadian Dollar
+     */
+    const CANADIAN_DOLLAR = "CAD";
+
+    /**
+     * Congolese Franc
+     */
+    const CONGOLESE_FRANC = "CDF";
+
+    /**
+     * WIR Euro
+     */
+    const WIR_EURO = "CHE";
+
+    /**
+     * Swiss Franc
+     */
+    const SWISS_FRANC = "CHF";
+
+    /**
+     * WIR Franc
+     */
+    const WIR_FRANC = "CHW";
+
+    /**
+     * Unidad de Fomento
+     */
+    const UNIDAD_DE_FOMENTO = "CLF";
+
+    /**
+     * Chilean Peso
+     */
+    const CHILEAN_PESO = "CLP";
+
+    /**
+     * Yuan Renminbi
+     */
+    const YUAN_RENMINBI = "CNY";
+
+    /**
+     * Colombian Peso
+     */
+    const COLOMBIAN_PESO = "COP";
+
+    /**
+     * Unidad de Valor Real
+     */
+    const UNIDAD_DE_VALOR_REAL = "COU";
+
+    /**
+     * Costa Rican Colon
+     */
+    const COSTA_RICAN_COLON = "CRC";
+
+    /**
+     * Peso Convertible
+     */
+    const PESO_CONVERTIBLE = "CUC";
+
+    /**
+     * Cuban Peso
+     */
+    const CUBAN_PESO = "CUP";
+
+    /**
+     * Cabo Verde Escudo
+     */
+    const CABO_VERDE_ESCUDO = "CVE";
+
+    /**
+     * Czech Koruna
+     */
+    const CZECH_KORUNA = "CZK";
+
+    /**
+     * Djibouti Franc
+     */
+    const DJIBOUTI_FRANC = "DJF";
+
+    /**
+     * Danish Krone
+     */
+    const DANISH_KRONE = "DKK";
+
+    /**
+     * Dominican Peso
+     */
+    const DOMINICAN_PESO = "DOP";
+
+    /**
+     * Algerian Dinar
+     */
+    const ALGERIAN_DINAR = "DZD";
+
+    /**
+     * Egyptian Pound
+     */
+    const EGYPTIAN_POUND = "EGP";
+
+    /**
+     * Nakfa
+     */
+    const NAKFA = "ERN";
+
+    /**
+     * Ethiopian Birr
+     */
+    const ETHIOPIAN_BIRR = "ETB";
+
+    /**
+     * Euro
+     */
+    const EURO = "EUR";
+
+    /**
+     * Fiji Dollar
+     */
+    const FIJI_DOLLAR = "FJD";
+
+    /**
+     * Falkland Islands Pound
+     */
+    const FALKLAND_ISLANDS_POUND = "FKP";
+
+    /**
+     * Pound Sterling
+     */
+    const POUND_STERLING = "GBP";
+
+    /**
+     * Lari
+     */
+    const LARI = "GEL";
+
+    /**
+     * Ghana Cedi
+     */
+    const GHANA_CEDI = "GHS";
+
+    /**
+     * Gibraltar Pound
+     */
+    const GIBRALTAR_POUND = "GIP";
+
+    /**
+     * Dalasi
+     */
+    const DALASI = "GMD";
+
+    /**
+     * Guinean Franc
+     */
+    const GUINEAN_FRANC = "GNF";
+
+    /**
+     * Quetzal
+     */
+    const QUETZAL = "GTQ";
+
+    /**
+     * Guyana Dollar
+     */
+    const GUYANA_DOLLAR = "GYD";
+
+    /**
+     * Hong Kong Dollar
+     */
+    const HONG_KONG_DOLLAR = "HKD";
+
+    /**
+     * Lempira
+     */
+    const LEMPIRA = "HNL";
+
+    /**
+     * Kuna
+     */
+    const KUNA = "HRK";
+
+    /**
+     * Gourde
+     */
+    const GOURDE = "HTG";
+
+    /**
+     * Forint
+     */
+    const FORINT = "HUF";
+
+    /**
+     * Rupiah
+     */
+    const RUPIAH = "IDR";
+
+    /**
+     * New Israeli Sheqel
+     */
+    const NEW_ISRAELI_SHEQEL = "ILS";
+
+    /**
+     * Indian Rupee
+     */
+    const INDIAN_RUPEE = "INR";
+
+    /**
+     * Iraqi Dinar
+     */
+    const IRAQI_DINAR = "IQD";
+
+    /**
+     * Iranian Rial
+     */
+    const IRANIAN_RIAL = "IRR";
+
+    /**
+     * Iceland Krona
+     */
+    const ICELAND_KRONA = "ISK";
+
+    /**
+     * Jamaican Dollar
+     */
+    const JAMAICAN_DOLLAR = "JMD";
+
+    /**
+     * Jordanian Dinar
+     */
+    const JORDANIAN_DINAR = "JOD";
+
+    /**
+     * Yen
+     */
+    const YEN = "JPY";
+
+    /**
+     * Kenyan Shilling
+     */
+    const KENYAN_SHILLING = "KES";
+
+    /**
+     * Som
+     */
+    const SOM = "KGS";
+
+    /**
+     * Riel
+     */
+    const RIEL = "KHR";
+
+    /**
+     * Comorian Franc
+     */
+    const COMORIAN_FRANC = "KMF";
+
+    /**
+     * North Korean Won
+     */
+    const NORTH_KOREAN_WON = "KPW";
+
+    /**
+     * Won
+     */
+    const WON = "KRW";
+
+    /**
+     * Kuwaiti Dinar
+     */
+    const KUWAITI_DINAR = "KWD";
+
+    /**
+     * Cayman Islands Dollar
+     */
+    const CAYMAN_ISLANDS_DOLLAR = "KYD";
+
+    /**
+     * Tenge
+     */
+    const TENGE = "KZT";
+
+    /**
+     * Lao Kip
+     */
+    const LAO_KIP = "LAK";
+
+    /**
+     * Lebanese Pound
+     */
+    const LEBANESE_POUND = "LBP";
+
+    /**
+     * Sri Lanka Rupee
+     */
+    const SRI_LANKA_RUPEE = "LKR";
+
+    /**
+     * Liberian Dollar
+     */
+    const LIBERIAN_DOLLAR = "LRD";
+
+    /**
+     * Loti
+     */
+    const LOTI = "LSL";
+
+    /**
+     * Libyan Dinar
+     */
+    const LIBYAN_DINAR = "LYD";
+
+    /**
+     * Moroccan Dirham
+     */
+    const MOROCCAN_DIRHAM = "MAD";
+
+    /**
+     * Moldovan Leu
+     */
+    const MOLDOVAN_LEU = "MDL";
+
+    /**
+     * Malagasy Ariary
+     */
+    const MALAGASY_ARIARY = "MGA";
+
+    /**
+     * Denar
+     */
+    const DENAR = "MKD";
+
+    /**
+     * Kyat
+     */
+    const KYAT = "MMK";
+
+    /**
+     * Tugrik
+     */
+    const TUGRIK = "MNT";
+
+    /**
+     * Pataca
+     */
+    const PATACA = "MOP";
+
+    /**
+     * Ouguiya
+     */
+    const OUGUIYA = "MRU";
+
+    /**
+     * Mauritius Rupee
+     */
+    const MAURITIUS_RUPEE = "MUR";
+
+    /**
+     * Rufiyaa
+     */
+    const RUFIYAA = "MVR";
+
+    /**
+     * Malawi Kwacha
+     */
+    const MALAWI_KWACHA = "MWK";
+
+    /**
+     * Mexican Peso
+     */
+    const MEXICAN_PESO = "MXN";
+
+    /**
+     * Mexican Unidad de Inversion (UDI)
+     */
+    const MEXICAN_UNIDAD_DE_INVERSION_UDI = "MXV";
+
+    /**
+     * Malaysian Ringgit
+     */
+    const MALAYSIAN_RINGGIT = "MYR";
+
+    /**
+     * Mozambique Metical
+     */
+    const MOZAMBIQUE_METICAL = "MZN";
+
+    /**
+     * Namibia Dollar
+     */
+    const NAMIBIA_DOLLAR = "NAD";
+
+    /**
+     * Naira
+     */
+    const NAIRA = "NGN";
+
+    /**
+     * Cordoba Oro
+     */
+    const CORDOBA_ORO = "NIO";
+
+    /**
+     * Norwegian Krone
+     */
+    const NORWEGIAN_KRONE = "NOK";
+
+    /**
+     * Nepalese Rupee
+     */
+    const NEPALESE_RUPEE = "NPR";
+
+    /**
+     * New Zealand Dollar
+     */
+    const NEW_ZEALAND_DOLLAR = "NZD";
+
+    /**
+     * Rial Omani
+     */
+    const RIAL_OMANI = "OMR";
+
+    /**
+     * Balboa
+     */
+    const BALBOA = "PAB";
+
+    /**
+     * Sol
+     */
+    const SOL = "PEN";
+
+    /**
+     * Kina
+     */
+    const KINA = "PGK";
+
+    /**
+     * Philippine Peso
+     */
+    const PHILIPPINE_PESO = "PHP";
+
+    /**
+     * Pakistan Rupee
+     */
+    const PAKISTAN_RUPEE = "PKR";
+
+    /**
+     * Zloty
+     */
+    const ZLOTY = "PLN";
+
+    /**
+     * Guarani
+     */
+    const GUARANI = "PYG";
+
+    /**
+     * Qatari Rial
+     */
+    const QATARI_RIAL = "QAR";
+
+    /**
+     * Romanian Leu
+     */
+    const ROMANIAN_LEU = "RON";
+
+    /**
+     * Serbian Dinar
+     */
+    const SERBIAN_DINAR = "RSD";
+
+    /**
+     * Russian Ruble
+     */
+    const RUSSIAN_RUBLE = "RUB";
+
+    /**
+     * Rwanda Franc
+     */
+    const RWANDA_FRANC = "RWF";
+
+    /**
+     * Saudi Riyal
+     */
+    const SAUDI_RIYAL = "SAR";
+
+    /**
+     * Solomon Islands Dollar
+     */
+    const SOLOMON_ISLANDS_DOLLAR = "SBD";
+
+    /**
+     * Seychelles Rupee
+     */
+    const SEYCHELLES_RUPEE = "SCR";
+
+    /**
+     * Sudanese Pound
+     */
+    const SUDANESE_POUND = "SDG";
+
+    /**
+     * Swedish Krona
+     */
+    const SWEDISH_KRONA = "SEK";
+
+    /**
+     * Singapore Dollar
+     */
+    const SINGAPORE_DOLLAR = "SGD";
+
+    /**
+     * Saint Helena Pound
+     */
+    const SAINT_HELENA_POUND = "SHP";
+
+    /**
+     * Leone
+     */
+    const LEONE = "SLL";
+
+    /**
+     * Somali Shilling
+     */
+    const SOMALI_SHILLING = "SOS";
+
+    /**
+     * Surinam Dollar
+     */
+    const SURINAM_DOLLAR = "SRD";
+
+    /**
+     * South Sudanese Pound
+     */
+    const SOUTH_SUDANESE_POUND = "SSP";
+
+    /**
+     * Dobra
+     */
+    const DOBRA = "STN";
+
+    /**
+     * El Salvador Colon
+     */
+    const EL_SALVADOR_COLON = "SVC";
+
+    /**
+     * Syrian Pound
+     */
+    const SYRIAN_POUND = "SYP";
+
+    /**
+     * Lilangeni
+     */
+    const LILANGENI = "SZL";
+
+    /**
+     * Baht
+     */
+    const BAHT = "THB";
+
+    /**
+     * Somoni
+     */
+    const SOMONI = "TJS";
+
+    /**
+     * Turkmenistan New Manat
+     */
+    const TURKMENISTAN_NEW_MANAT = "TMT";
+
+    /**
+     * Tunisian Dinar
+     */
+    const TUNISIAN_DINAR = "TND";
+
+    /**
+     * Paâanga
+     */
+    const PAANGA = "TOP";
+
+    /**
+     * Turkish Lira
+     */
+    const TURKISH_LIRA = "TRY";
+
+    /**
+     * Trinidad and Tobago Dollar
+     */
+    const TRINIDAD_AND_TOBAGO_DOLLAR = "TTD";
+
+    /**
+     * New Taiwan Dollar
+     */
+    const NEW_TAIWAN_DOLLAR = "TWD";
+
+    /**
+     * Tanzanian Shilling
+     */
+    const TANZANIAN_SHILLING = "TZS";
+
+    /**
+     * Hryvnia
+     */
+    const HRYVNIA = "UAH";
+
+    /**
+     * Uganda Shilling
+     */
+    const UGANDA_SHILLING = "UGX";
+
+    /**
+     * US Dollar
+     */
+    const US_DOLLAR = "USD";
+
+    /**
+     * US Dollar (Next day)
+     */
+    const US_DOLLAR_NEXT_DAY = "USN";
+
+    /**
+     * Uruguay Peso en Unidades Indexadas (UI)
+     */
+    const URUGUAY_PESO_EN_UNIDADES_INDEXADAS_UI = "UYI";
+
+    /**
+     * Peso Uruguayo
+     */
+    const PESO_URUGUAYO = "UYU";
+
+    /**
+     * Unidad Previsional
+     */
+    const UNIDAD_PREVISIONAL = "UYW";
+
+    /**
+     * Uzbekistan Sum
+     */
+    const UZBEKISTAN_SUM = "UZS";
+
+    /**
+     * BolÃ­var Soberano
+     */
+    const BOLVAR_SOBERANO = "VES";
+
+    /**
+     * Dong
+     */
+    const DONG = "VND";
+
+    /**
+     * Vatu
+     */
+    const VATU = "VUV";
+
+    /**
+     * Tala
+     */
+    const TALA = "WST";
+
+    /**
+     * CFA Franc BEAC
+     */
+    const CFA_FRANC_BEAC = "XAF";
+
+    /**
+     * Silver
+     */
+    const SILVER = "XAG";
+
+    /**
+     * Gold
+     */
+    const GOLD = "XAU";
+
+    /**
+     * Bond Markets Unit European Composite Unit (EURCO)
+     */
+    const BOND_MARKETS_UNIT_EUROPEAN_COMPOSITE_UNIT_EURCO = "XBA";
+
+    /**
+     * Bond Markets Unit European Monetary Unit (E.M.U.-6)
+     */
+    const BOND_MARKETS_UNIT_EUROPEAN_MONETARY_UNIT_EMU6 = "XBB";
+
+    /**
+     * Bond Markets Unit European Unit of Account 9 (E.U.A.-9)
+     */
+    const BOND_MARKETS_UNIT_EUROPEAN_UNIT_OF_ACCOUNT_9_EUA9 = "XBC";
+
+    /**
+     * Bond Markets Unit European Unit of Account 17 (E.U.A.-17)
+     */
+    const BOND_MARKETS_UNIT_EUROPEAN_UNIT_OF_ACCOUNT_17_EUA17 = "XBD";
+
+    /**
+     * East Caribbean Dollar
+     */
+    const EAST_CARIBBEAN_DOLLAR = "XCD";
+
+    /**
+     * SDR (Special Drawing Right)
+     */
+    const SDR_SPECIAL_DRAWING_RIGHT = "XDR";
+
+    /**
+     * CFA Franc BCEAO
+     */
+    const CFA_FRANC_BCEAO = "XOF";
+
+    /**
+     * Palladium
+     */
+    const PALLADIUM = "XPD";
+
+    /**
+     * CFP Franc
+     */
+    const CFP_FRANC = "XPF";
+
+    /**
+     * Platinum
+     */
+    const PLATINUM = "XPT";
+
+    /**
+     * Sucre
+     */
+    const SUCRE = "XSU";
+
+    /**
+     * Codes specifically reserved for testing purposes
+     */
+    const CODES_SPECIFICALLY_RESERVED_FOR_TESTING_PURPOSES = "XTS";
+
+    /**
+     * ADB Unit of Account
+     */
+    const ADB_UNIT_OF_ACCOUNT = "XUA";
+
+    /**
+     * The codes assigned for transactions where no currency is involved
+     */
+    const THE_CODES_ASSIGNED_FOR_TRANSACTIONS_WHERE_NO_CURRENCY_IS_INVOLVED = "XXX";
+
+    /**
+     * Yemeni Rial
+     */
+    const YEMENI_RIAL = "YER";
+
+    /**
+     * Rand
+     */
+    const RAND = "ZAR";
+
+    /**
+     * Zambian Kwacha
+     */
+    const ZAMBIAN_KWACHA = "ZMW";
+
+    /**
+     * Zimbabwe Dollar
+     */
+    const ZIMBABWE_DOLLAR = "ZWL";
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdSchemeIdentifiers.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdSchemeIdentifiers.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdSchemeIdentifiers.php	(revision 8435)
@@ -0,0 +1,1080 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing the Electronic address scheme identifiers
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdSchemeIdentifiers
+{
+    /**
+     * System Information et Repertoire des Entreprise et des Etablissements:
+     * SIRENE
+     */
+    const ISO_6523_0002 = '0002';
+
+    /**
+     * Codification Numerique des Etablissments Financiers En Belgique
+     */
+    const ISO_6523_0003 = '0003';
+
+    /**
+     * NBS/OSI NETWORK
+     */
+    const ISO_6523_0004 = '0004';
+
+    /**
+     * USA FED GOV OSI NETWORK
+     */
+    const ISO_6523_0005 = '0005';
+
+    /**
+     * USA DOD OSI NETWORK
+     */
+    const ISO_6523_0006 = '0006';
+
+    /**
+     * Organisationsnummer
+     */
+    const ISO_6523_0007 = '0007';
+
+    /**
+     * LE NUMERO NATIONAL
+     */
+    const ISO_6523_0008 = '0008';
+
+    /**
+     * SIRET-CODE
+     */
+    const ISO_6523_0009 = '0009';
+
+    /**
+     * Organizational Identifiers for Structured Names under ISO 9541 Part 2
+     */
+    const ISO_6523_0010 = '0010';
+
+    /**
+     * International Code Designator for the Identification of OSI-based,
+     * Amateur Radio Organizations, Network Objects and Application Services.
+     */
+    const ISO_6523_0011 = '0011';
+
+    /**
+     * European Computer Manufacturers Association: ECMA
+     */
+    const ISO_6523_0012 = '0012';
+
+    /**
+     * VSA FTP CODE (FTP = File Transfer Protocol)
+     */
+    const ISO_6523_0013 = '0013';
+
+    /**
+     * NIST/OSI Implememts' Workshop
+     */
+    const ISO_6523_0014 = '0014';
+
+    /**
+     * Electronic Data Interchange: EDI
+     */
+    const ISO_6523_0015 = '0015';
+
+    /**
+     * EWOS Object Identifiers
+     */
+    const ISO_6523_0016 = '0016';
+
+    /**
+     * COMMON LANGUAGE
+     */
+    const ISO_6523_0017 = '0017';
+
+    /**
+     * SNA/OSI Network
+     */
+    const ISO_6523_0018 = '0018';
+
+    /**
+     * Air Transport Industry Services Communications Network
+     */
+    const ISO_6523_0019 = '0019';
+
+    /**
+     * European Laboratory for Particle Physics: CERN
+     */
+    const ISO_6523_0020 = '0020';
+
+    /**
+     * SOCIETY FOR WORLDWIDE INTERBANK FINANCIAL, TELECOMMUNICATION
+     * S.W.I.F.T.
+     */
+    const ISO_6523_0021 = '0021';
+
+    /**
+     * OSF Distributed Computing Object Identification
+     */
+    const ISO_6523_0022 = '0022';
+
+    /**
+     * Nordic University and Research Network: NORDUnet
+     */
+    const ISO_6523_0023 = '0023';
+
+    /**
+     * Digital Equipment Corporation: DEC
+     */
+    const ISO_6523_0024 = '0024';
+
+    /**
+     * OSI ASIA-OCEANIA WORKSHOP
+     */
+    const ISO_6523_0025 = '0025';
+
+    /**
+     * NATO ISO 6523 ICDE coding scheme
+     */
+    const ISO_6523_0026 = '0026';
+
+    /**
+     * Aeronautical Telecommunications Network (ATN)
+     */
+    const ISO_6523_0027 = '0027';
+
+    /**
+     * International Standard ISO 6523
+     */
+    const ISO_6523_0028 = '0028';
+
+    /**
+     * The All-Union Classifier of Enterprises and Organisations
+     */
+    const ISO_6523_0029 = '0029';
+
+    /**
+     * AT&T/OSI Network
+     */
+    const ISO_6523_0030 = '0030';
+
+    /**
+     * EDI Partner Identification Code
+     */
+    const ISO_6523_0031 = '0031';
+
+    /**
+     * Telecom Australia
+     */
+    const ISO_6523_0032 = '0032';
+
+    /**
+     * S G W OSI Internetwork
+     */
+    const ISO_6523_0033 = '0033';
+
+    /**
+     * Reuter Open Address Standard
+     */
+    const ISO_6523_0034 = '0034';
+
+    /**
+     * ISO 6523 - ICD
+     */
+    const ISO_6523_0035 = '0035';
+
+    /**
+     * TeleTrust Object Identifiers
+     */
+    const ISO_6523_0036 = '0036';
+
+    /**
+     * LY-tunnus
+     */
+    const ISO_6523_0037 = '0037';
+
+    /**
+     * The Australian GOSIP Network
+     */
+    const ISO_6523_0038 = '0038';
+
+    /**
+     * The OZ DOD OSI Network
+     */
+    const ISO_6523_0039 = '0039';
+
+    /**
+     * Unilever Group Companies
+     */
+    const ISO_6523_0040 = '0040';
+
+    /**
+     * Citicorp Global Information Network
+     */
+    const ISO_6523_0041 = '0041';
+
+    /**
+     * DBP Telekom Object Identifiers
+     */
+    const ISO_6523_0042 = '0042';
+
+    /**
+     * HydroNETT
+     */
+    const ISO_6523_0043 = '0043';
+
+    /**
+     * Thai Industrial Standards Institute (TISI)
+     */
+    const ISO_6523_0044 = '0044';
+
+    /**
+     * ICI Company Identification System
+     */
+    const ISO_6523_0045 = '0045';
+
+    /**
+     * FUNLOC
+     */
+    const ISO_6523_0046 = '0046';
+
+    /**
+     * BULL ODI/DSA/UNIX Network
+     */
+    const ISO_6523_0047 = '0047';
+
+    /**
+     * OSINZ
+     */
+    const ISO_6523_0048 = '0048';
+
+    /**
+     * Auckland Area Health
+     */
+    const ISO_6523_0049 = '0049';
+
+    /**
+     * Firmenich
+     */
+    const ISO_6523_0050 = '0050';
+
+    /**
+     * AGFA-DIS
+     */
+    const ISO_6523_0051 = '0051';
+
+    /**
+     * Society of Motion Picture and Television Engineers (SMPTE)
+     */
+    const ISO_6523_0052 = '0052';
+
+    /**
+     * Migros_Network M_NETOPZ
+     */
+    const ISO_6523_0053 = '0053';
+
+    /**
+     * ISO6523 - ICDPCR
+     */
+    const ISO_6523_0054 = '0054';
+
+    /**
+     * Energy Net
+     */
+    const ISO_6523_0055 = '0055';
+
+    /**
+     * Nokia Object Identifiers (NOI)
+     */
+    const ISO_6523_0056 = '0056';
+
+    /**
+     * Saint Gobain
+     */
+    const ISO_6523_0057 = '0057';
+
+    /**
+     * Siemens Corporate Network
+     */
+    const ISO_6523_0058 = '0058';
+
+    /**
+     * DANZNET
+     */
+    const ISO_6523_0059 = '0059';
+
+    /**
+     * Data Universal Numbering System (D-U-N-S Number)
+     */
+    const ISO_6523_0060 = '0060';
+
+    /**
+     * SOFFEX OSI
+     */
+    const ISO_6523_0061 = '0061';
+
+    /**
+     * KPN OVN
+     */
+    const ISO_6523_0062 = '0062';
+
+    /**
+     * ascomOSINet
+     */
+    const ISO_6523_0063 = '0063';
+
+    /**
+     * UTC: Uniforme Transport Code
+     */
+    const ISO_6523_0064 = '0064';
+
+    /**
+     * SOLVAY OSI CODING
+     */
+    const ISO_6523_0065 = '0065';
+
+    /**
+     * Roche Corporate Network
+     */
+    const ISO_6523_0066 = '0066';
+
+    /**
+     * ZellwegerOSINet
+     */
+    const ISO_6523_0067 = '0067';
+
+    /**
+     * Intel Corporation OSI
+     */
+    const ISO_6523_0068 = '0068';
+
+    /**
+     * SITA Object Identifier Tree
+     */
+    const ISO_6523_0069 = '0069';
+
+    /**
+     * DaimlerChrysler Corporate Network
+     */
+    const ISO_6523_0070 = '0070';
+
+    /**
+     * LEGO /OSI NETWORK
+     */
+    const ISO_6523_0071 = '0071';
+
+    /**
+     * NAVISTAR/OSI Network
+     */
+    const ISO_6523_0072 = '0072';
+
+    /**
+     * ICD Formatted ATM address
+     */
+    const ISO_6523_0073 = '0073';
+
+    /**
+     * ARINC
+     */
+    const ISO_6523_0074 = '0074';
+
+    /**
+     * Alcanet/Alcatel-Alsthom Corporate Network
+     */
+    const ISO_6523_0075 = '0075';
+
+    /**
+     * Sistema Italiano di Identificazione di ogetti gestito da UNINFO
+     */
+    const ISO_6523_0076 = '0076';
+
+    /**
+     * Sistema Italiano di Indirizzamento di Reti OSI Gestito da UNINFO
+     */
+    const ISO_6523_0077 = '0077';
+
+    /**
+     * Mitel terminal or switching equipment
+     */
+    const ISO_6523_0078 = '0078';
+
+    /**
+     * ATM Forum
+     */
+    const ISO_6523_0079 = '0079';
+
+    /**
+     * UK National Health Service Scheme, (EDIRA compliant)
+     */
+    const ISO_6523_0080 = '0080';
+
+    /**
+     * International NSAP
+     */
+    const ISO_6523_0081 = '0081';
+
+    /**
+     * Norwegian Telecommunications Authority's, NTA'S, EDI, identifier
+     * scheme (EDIRA compliant)
+     */
+    const ISO_6523_0082 = '0082';
+
+    /**
+     * Advanced Telecommunications Modules Limited, Corporate Network
+     */
+    const ISO_6523_0083 = '0083';
+
+    /**
+     * Athens Chamber of Commerce & Industry Scheme (EDIRA compliant)
+     */
+    const ISO_6523_0084 = '0084';
+
+    /**
+     * Swiss Chambers of Commerce Scheme (EDIRA) compliant
+     */
+    const ISO_6523_0085 = '0085';
+
+    /**
+     * United States Council for International Business (USCIB) Scheme,
+     * (EDIRA compliant)
+     */
+    const ISO_6523_0086 = '0086';
+
+    /**
+     * National Federation of Chambers of Commerce & Industry of Belgium,
+     * Scheme (EDIRA compliant)
+     */
+    const ISO_6523_0087 = '0087';
+
+    /**
+     * EAN Location Code
+     */
+    const ISO_6523_0088 = '0088';
+
+    /**
+     * The Association of British Chambers of Commerce Ltd. Scheme, (EDIRA
+     * compliant)
+     */
+    const ISO_6523_0089 = '0089';
+
+    /**
+     * Internet IP addressing - ISO 6523 ICD encoding
+     */
+    const ISO_6523_0090 = '0090';
+
+    /**
+     * Cisco Sysytems / OSI Network
+     */
+    const ISO_6523_0091 = '0091';
+
+    /**
+     * Revenue Canada Business Number Registration (EDIRA compliant)
+     */
+    const ISO_6523_0093 = '0093';
+
+    /**
+     * DEUTSCHER INDUSTRIE- UND HANDELSTAG (DIHT) Scheme (EDIRA compliant)
+     */
+    const ISO_6523_0094 = '0094';
+
+    /**
+     * Hewlett - Packard Company Internal AM Network
+     */
+    const ISO_6523_0095 = '0095';
+
+    /**
+     * DANISH CHAMBER OF COMMERCE Scheme (EDIRA compliant)
+     */
+    const ISO_6523_0096 = '0096';
+
+    /**
+     * FTI - Ediforum Italia, (EDIRA compliant)
+     */
+    const ISO_6523_0097 = '0097';
+
+    /**
+     * CHAMBER OF COMMERCE TEL AVIV-JAFFA Scheme (EDIRA compliant)
+     */
+    const ISO_6523_0098 = '0098';
+
+    /**
+     * Siemens Supervisory Systems Network
+     */
+    const ISO_6523_0099 = '0099';
+
+    /**
+     * PNG_ICD Scheme
+     */
+    const ISO_6523_0100 = '0100';
+
+    /**
+     * South African Code Allocation
+     */
+    const ISO_6523_0101 = '0101';
+
+    /**
+     * HEAG
+     */
+    const ISO_6523_0102 = '0102';
+
+    /**
+     * BT - ICD Coding System
+     */
+    const ISO_6523_0104 = '0104';
+
+    /**
+     * Portuguese Chamber of Commerce and Industry Scheme (EDIRA compliant)
+     */
+    const ISO_6523_0105 = '0105';
+
+    /**
+     * Vereniging van Kamers van Koophandel en Fabrieken in Nederland
+     * (Association of Chambers of Commerce and Industry in the Netherlands),
+     * Scheme (EDIRA compliant)
+     */
+    const ISO_6523_0106 = '0106';
+
+    /**
+     * Association of Swedish Chambers of Commerce and Industry Scheme (EDIRA
+     * compliant)
+     */
+    const ISO_6523_0107 = '0107';
+
+    /**
+     * Australian Chambers of Commerce and Industry Scheme (EDIRA compliant)
+     */
+    const ISO_6523_0108 = '0108';
+
+    /**
+     * BellSouth ICD AESA (ATM End System Address)
+     */
+    const ISO_6523_0109 = '0109';
+
+    /**
+     * Bell Atlantic
+     */
+    const ISO_6523_0110 = '0110';
+
+    /**
+     * Object Identifiers
+     */
+    const ISO_6523_0111 = '0111';
+
+    /**
+     * ISO register for Standards producing Organizations
+     */
+    const ISO_6523_0112 = '0112';
+
+    /**
+     * OriginNet
+     */
+    const ISO_6523_0113 = '0113';
+
+    /**
+     * Check Point Software Technologies
+     */
+    const ISO_6523_0114 = '0114';
+
+    /**
+     * Pacific Bell Data Communications Network
+     */
+    const ISO_6523_0115 = '0115';
+
+    /**
+     * PSS Object Identifiers
+     */
+    const ISO_6523_0116 = '0116';
+
+    /**
+     * STENTOR-ICD CODING SYSTEM
+     */
+    const ISO_6523_0117 = '0117';
+
+    /**
+     * ATM-Network ZN'96
+     */
+    const ISO_6523_0118 = '0118';
+
+    /**
+     * MCI / OSI Network
+     */
+    const ISO_6523_0119 = '0119';
+
+    /**
+     * Advantis
+     */
+    const ISO_6523_0120 = '0120';
+
+    /**
+     * Affable Software Data Interchange Codes
+     */
+    const ISO_6523_0121 = '0121';
+
+    /**
+     * BB-DATA GmbH
+     */
+    const ISO_6523_0122 = '0122';
+
+    /**
+     * BASF Company ATM-Network
+     */
+    const ISO_6523_0123 = '0123';
+
+    /**
+     * IOTA Identifiers for Organizations for Telecommunications Addressing
+     * using the ICD system format defined in ISO/IEC 8348
+     */
+    const ISO_6523_0124 = '0124';
+
+    /**
+     * Henkel Corporate Network (H-Net)
+     */
+    const ISO_6523_0125 = '0125';
+
+    /**
+     * GTE/OSI Network
+     */
+    const ISO_6523_0126 = '0126';
+
+    /**
+     * Dresdner Bank Corporate Network
+     */
+    const ISO_6523_0127 = '0127';
+
+    /**
+     * BCNR (Swiss Clearing Bank Number)
+     */
+    const ISO_6523_0128 = '0128';
+
+    /**
+     * BPI (Swiss Business Partner Identification) code
+     */
+    const ISO_6523_0129 = '0129';
+
+    /**
+     * Directorates of the European Commission
+     */
+    const ISO_6523_0130 = '0130';
+
+    /**
+     * Code for the Identification of National Organizations
+     */
+    const ISO_6523_0131 = '0131';
+
+    /**
+     * Certicom Object Identifiers
+     */
+    const ISO_6523_0132 = '0132';
+
+    /**
+     * TC68 OID
+     */
+    const ISO_6523_0133 = '0133';
+
+    /**
+     * Infonet Services Corporation
+     */
+    const ISO_6523_0134 = '0134';
+
+    /**
+     * SIA Object Identifiers
+     */
+    const ISO_6523_0135 = '0135';
+
+    /**
+     * Cable & Wireless Global ATM End-System Address Plan
+     */
+    const ISO_6523_0136 = '0136';
+
+    /**
+     * Global AESA scheme
+     */
+    const ISO_6523_0137 = '0137';
+
+    /**
+     * France Telecom ATM End System Address Plan
+     */
+    const ISO_6523_0138 = '0138';
+
+    /**
+     * Savvis Communications AESA:.
+     */
+    const ISO_6523_0139 = '0139';
+
+    /**
+     * Toshiba Organizations, Partners, And Suppliers' (TOPAS) Code
+     */
+    const ISO_6523_0140 = '0140';
+
+    /**
+     * NATO Commercial and Government Entity system
+     */
+    const ISO_6523_0141 = '0141';
+
+    /**
+     * SECETI Object Identifiers
+     */
+    const ISO_6523_0142 = '0142';
+
+    /**
+     * EINESTEINet AG
+     */
+    const ISO_6523_0143 = '0143';
+
+    /**
+     * DoDAAC (Department of Defense Activity Address Code)
+     */
+    const ISO_6523_0144 = '0144';
+
+    /**
+     * DGCP (Direction GÃ©nÃ©rale de la ComptabilitÃ© Publique)administrative
+     * accounting identification scheme
+     */
+    const ISO_6523_0145 = '0145';
+
+    /**
+     * DGI (Direction GÃ©nÃ©rale des Impots) code
+     */
+    const ISO_6523_0146 = '0146';
+
+    /**
+     * Standard Company Code
+     */
+    const ISO_6523_0147 = '0147';
+
+    /**
+     * ITU (International Telecommunications Union)Data Network
+     * Identification Codes (DNIC)
+     */
+    const ISO_6523_0148 = '0148';
+
+    /**
+     * Global Business Identifier
+     */
+    const ISO_6523_0149 = '0149';
+
+    /**
+     * Madge Networks Ltd- ICD ATM Addressing Scheme
+     */
+    const ISO_6523_0150 = '0150';
+
+    /**
+     * Australian Business Number (ABN) Scheme
+     */
+    const ISO_6523_0151 = '0151';
+
+    /**
+     * Edira Scheme Identifier Code
+     */
+    const ISO_6523_0152 = '0152';
+
+    /**
+     * Concert Global Network Services ICD AESA
+     */
+    const ISO_6523_0153 = '0153';
+
+    /**
+     * Identification number of economic subjects: (ICO)
+     */
+    const ISO_6523_0154 = '0154';
+
+    /**
+     * Global Crossing AESA (ATM End System Address)
+     */
+    const ISO_6523_0155 = '0155';
+
+    /**
+     * AUNA
+     */
+    const ISO_6523_0156 = '0156';
+
+    /**
+     * ATM interconnection with the Dutch KPN Telecom
+     */
+    const ISO_6523_0157 = '0157';
+
+    /**
+     * Identification number of economic subject (ICO) Act on State
+     * Statistics of 29 November 2'001, Â§ 27
+     */
+    const ISO_6523_0158 = '0158';
+
+    /**
+     * ACTALIS Object Identifiers
+     */
+    const ISO_6523_0159 = '0159';
+
+    /**
+     * GTIN - Global Trade Item Number
+     */
+    const ISO_6523_0160 = '0160';
+
+    /**
+     * ECCMA Open Technical Directory
+     */
+    const ISO_6523_0161 = '0161';
+
+    /**
+     * CEN/ISSS Object Identifier Scheme
+     */
+    const ISO_6523_0162 = '0162';
+
+    /**
+     * US-EPA Facility Identifier
+     */
+    const ISO_6523_0163 = '0163';
+
+    /**
+     * TELUS Corporation
+     */
+    const ISO_6523_0164 = '0164';
+
+    /**
+     * FIEIE Object identifiers
+     */
+    const ISO_6523_0165 = '0165';
+
+    /**
+     * Swissguide Identifier Scheme
+     */
+    const ISO_6523_0166 = '0166';
+
+    /**
+     * Priority Telecom ATM End System Address Plan
+     */
+    const ISO_6523_0167 = '0167';
+
+    /**
+     * Vodafone Ireland OSI Addressing
+     */
+    const ISO_6523_0168 = '0168';
+
+    /**
+     * Swiss Federal Business Identification Number. Central Business names
+     * Index (zefix) Identification Number
+     */
+    const ISO_6523_0169 = '0169';
+
+    /**
+     * Teikoku Company Code
+     */
+    const ISO_6523_0170 = '0170';
+
+    /**
+     * Luxembourg CP & CPS (Certification Policy and Certification Practice
+     * Statement) Index
+     */
+    const ISO_6523_0171 = '0171';
+
+    /**
+     * Project Group âLists of Propertiesâ (PROLISTÂ®)
+     */
+    const ISO_6523_0172 = '0172';
+
+    /**
+     * eCI@ss
+     */
+    const ISO_6523_0173 = '0173';
+
+    /**
+     * StepNexus
+     */
+    const ISO_6523_0174 = '0174';
+
+    /**
+     * Siemens AG
+     */
+    const ISO_6523_0175 = '0175';
+
+    /**
+     * Paradine GmbH
+     */
+    const ISO_6523_0176 = '0176';
+
+    /**
+     * Odette International Limited
+     */
+    const ISO_6523_0177 = '0177';
+
+    /**
+     * Route1 MobiNET
+     */
+    const ISO_6523_0178 = '0178';
+
+    /**
+     * Penango Object Identifiers
+     */
+    const ISO_6523_0179 = '0179';
+
+    /**
+     * Lithuanian military PKI
+     */
+    const ISO_6523_0180 = '0180';
+
+    /**
+     * NumÃ©ro d'identification suisse des enterprises (IDE), Swiss Unique
+     * Business Identification Number (UIDB)
+     */
+    const ISO_6523_0183 = '0183';
+
+    /**
+     * DIGSTORG
+     */
+    const ISO_6523_0184 = '0184';
+
+    /**
+     * Perceval Object Code
+     */
+    const ISO_6523_0185 = '0185';
+
+    /**
+     * TrustPoint Object Identifiers
+     */
+    const ISO_6523_0186 = '0186';
+
+    /**
+     * Amazon Unique Identification Scheme
+     */
+    const ISO_6523_0187 = '0187';
+
+    /**
+     * Corporate Number of The Social Security and Tax Number System
+     */
+    const ISO_6523_0188 = '0188';
+
+    /**
+     * European Business Identifier (EBID)
+     */
+    const ISO_6523_0189 = '0189';
+
+    /**
+     * Organisatie Indentificatie Nummer (OIN)
+     */
+    const ISO_6523_0190 = '0190';
+
+    /**
+     * Company Code (Estonia)
+     */
+    const ISO_6523_0191 = '0191';
+
+    /**
+     * Organisasjonsnummer
+     */
+    const ISO_6523_0192 = '0192';
+
+    /**
+     * UBL.BE Party Identifier
+     */
+    const ISO_6523_0193 = '0193';
+
+    /**
+     * KOIOS Open Technical Dictionary
+     */
+    const ISO_6523_0194 = '0194';
+
+    /**
+     * Singapore Nationwide E-lnvoice Framework
+     */
+    const ISO_6523_0195 = '0195';
+
+    /**
+     * Icelandic identifier - Ãslensk kennitala
+     */
+    const ISO_6523_0196 = '0196';
+
+    /**
+     * Name not known
+     */
+    const ISO_6523_0197 = '0197';
+
+    /**
+     * ERSTORG
+     */
+    const ISO_6523_0198 = '0198';
+
+    /**
+     * Legal Entity Identifier (LEI)
+     */
+    const ISO_6523_0199 = '0199';
+
+    /**
+     * Legal entity code (Lithuania)
+     */
+    const ISO_6523_0200 = '0200';
+
+    /**
+     * Codice Univoco UnitÃ  Organizzativa iPA
+     */
+    const ISO_6523_0201 = '0201';
+
+    /**
+     * Indirizzo di Posta Elettronica Certificata
+     */
+    const ISO_6523_0202 = '0202';
+
+    /**
+     * eDelivery Network Participant identifier
+     */
+    const ISO_6523_0203 = '0203';
+
+    /**
+     * Leitweg-ID
+     */
+    const ISO_6523_0204 = '0204';
+
+    /**
+     * CODDEST
+     */
+    const ISO_6523_0205 = '0205';
+
+    /**
+     * Registre du Commerce et de lâIndustrie : RCI
+     */ 
+    const ISO_6523_0206 = '0206';
+
+    /**
+     * PiLog Ontology Codification Identifier (POCI)
+     */
+    const ISO_6523_0207 = '0207';
+
+    /**
+     * Numero d'entreprise / ondernemingsnummer / Unternehmensnummer
+     */
+    const ISO_6523_0208 = '0208';
+
+    /**
+     * GS1 identification keys
+     */
+    const ISO_6523_0209 = '0209';
+
+    /**
+     * CODICE FISCALE
+     */
+    const ISO_6523_0210 = '0210';
+
+    /**
+     * PARTITA IVA
+     */
+    const ISO_6523_0211 = '0211';
+
+    /**
+     * Finnish Organization Identifier
+     */
+    const ISO_6523_0212 = '0212';
+    
+    /**
+     * Finnish Organization Value Add Tax Identifier
+     */
+    const ISO_6523_0213 = '0213';
+    
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdTextSubjectCodeQualifiers.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdTextSubjectCodeQualifiers.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdTextSubjectCodeQualifiers.php	(revision 8435)
@@ -0,0 +1,1937 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing the Text subject code qualifiers
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdTextSubjectCodeQualifiers
+{
+    /**
+     * Goods item description
+     */
+    const UNTDID_4451_AAA = 'AAA';
+
+    /**
+     * Payment term
+     */
+    const UNTDID_4451_AAB = 'AAB';
+
+    /**
+     * Dangerous goods additional information
+     */
+    const UNTDID_4451_AAC = 'AAC';
+
+    /**
+     * Dangerous goods technical name
+     */
+    const UNTDID_4451_AAD = 'AAD';
+
+    /**
+     * Acknowledgement description
+     */
+    const UNTDID_4451_AAE = 'AAE';
+
+    /**
+     * Rate additional information
+     */
+    const UNTDID_4451_AAF = 'AAF';
+
+    /**
+     * Party instructions
+     */
+    const UNTDID_4451_AAG = 'AAG';
+
+    /**
+     * General information
+     */
+    const UNTDID_4451_AAI = 'AAI';
+
+    /**
+     * Additional conditions of sale/purchase
+     */
+    const UNTDID_4451_AAJ = 'AAJ';
+
+    /**
+     * Price conditions
+     */
+    const UNTDID_4451_AAK = 'AAK';
+
+    /**
+     * Goods dimensions in characters
+     */
+    const UNTDID_4451_AAL = 'AAL';
+
+    /**
+     * Equipment re-usage restrictions
+     */
+    const UNTDID_4451_AAM = 'AAM';
+
+    /**
+     * Handling restriction
+     */
+    const UNTDID_4451_AAN = 'AAN';
+
+    /**
+     * Error description (free text)
+     */
+    const UNTDID_4451_AAO = 'AAO';
+
+    /**
+     * Response (free text)
+     */
+    const UNTDID_4451_AAP = 'AAP';
+
+    /**
+     * Package content's description
+     */
+    const UNTDID_4451_AAQ = 'AAQ';
+
+    /**
+     * Terms of delivery
+     */
+    const UNTDID_4451_AAR = 'AAR';
+
+    /**
+     * Bill of lading remarks
+     */
+    const UNTDID_4451_AAS = 'AAS';
+
+    /**
+     * Mode of settlement information
+     */
+    const UNTDID_4451_AAT = 'AAT';
+
+    /**
+     * Consignment invoice information
+     */
+    const UNTDID_4451_AAU = 'AAU';
+
+    /**
+     * Clearance invoice information
+     */
+    const UNTDID_4451_AAV = 'AAV';
+
+    /**
+     * Letter of credit information
+     */
+    const UNTDID_4451_AAW = 'AAW';
+
+    /**
+     * License information
+     */
+    const UNTDID_4451_AAX = 'AAX';
+
+    /**
+     * Certification statements
+     */
+    const UNTDID_4451_AAY = 'AAY';
+
+    /**
+     * Additional export information
+     */
+    const UNTDID_4451_AAZ = 'AAZ';
+
+    /**
+     * Tariff statements
+     */
+    const UNTDID_4451_ABA = 'ABA';
+
+    /**
+     * Medical history
+     */
+    const UNTDID_4451_ABB = 'ABB';
+
+    /**
+     * Conditions of sale or purchase
+     */
+    const UNTDID_4451_ABC = 'ABC';
+
+    /**
+     * Contract document type
+     */
+    const UNTDID_4451_ABD = 'ABD';
+
+    /**
+     * Additional terms and/or conditions (documentary credit)
+     */
+    const UNTDID_4451_ABE = 'ABE';
+
+    /**
+     * Instructions or information about standby documentary
+     */
+    const UNTDID_4451_ABF = 'ABF';
+
+    /**
+     * Instructions or information about partial shipment(s)
+     */
+    const UNTDID_4451_ABG = 'ABG';
+
+    /**
+     * Instructions or information about transhipment(s)
+     */
+    const UNTDID_4451_ABH = 'ABH';
+
+    /**
+     * Additional handling instructions documentary credit
+     */
+    const UNTDID_4451_ABI = 'ABI';
+
+    /**
+     * Domestic routing information
+     */
+    const UNTDID_4451_ABJ = 'ABJ';
+
+    /**
+     * Chargeable category of equipment
+     */
+    const UNTDID_4451_ABK = 'ABK';
+
+    /**
+     * Government information
+     */
+    const UNTDID_4451_ABL = 'ABL';
+
+    /**
+     * Onward routing information
+     */
+    const UNTDID_4451_ABM = 'ABM';
+
+    /**
+     * Accounting information
+     */
+    const UNTDID_4451_ABN = 'ABN';
+
+    /**
+     * Discrepancy information
+     */
+    const UNTDID_4451_ABO = 'ABO';
+
+    /**
+     * Confirmation instructions
+     */
+    const UNTDID_4451_ABP = 'ABP';
+
+    /**
+     * Method of issuance
+     */
+    const UNTDID_4451_ABQ = 'ABQ';
+
+    /**
+     * Documents delivery instructions
+     */
+    const UNTDID_4451_ABR = 'ABR';
+
+    /**
+     * Additional conditions
+     */
+    const UNTDID_4451_ABS = 'ABS';
+
+    /**
+     * Information/instructions about additional amounts covered
+     */
+    const UNTDID_4451_ABT = 'ABT';
+
+    /**
+     * Deferred payment termed additional
+     */
+    const UNTDID_4451_ABU = 'ABU';
+
+    /**
+     * Acceptance terms additional
+     */
+    const UNTDID_4451_ABV = 'ABV';
+
+    /**
+     * Negotiation terms additional
+     */
+    const UNTDID_4451_ABW = 'ABW';
+
+    /**
+     * Document name and documentary requirements
+     */
+    const UNTDID_4451_ABX = 'ABX';
+
+    /**
+     * Instructions/information about revolving documentary credit
+     */
+    const UNTDID_4451_ABZ = 'ABZ';
+
+    /**
+     * Documentary requirements
+     */
+    const UNTDID_4451_ACA = 'ACA';
+
+    /**
+     * Additional information
+     */
+    const UNTDID_4451_ACB = 'ACB';
+
+    /**
+     * Factor assignment clause
+     */
+    const UNTDID_4451_ACC = 'ACC';
+
+    /**
+     * Reason
+     */
+    const UNTDID_4451_ACD = 'ACD';
+
+    /**
+     * Dispute
+     */
+    const UNTDID_4451_ACE = 'ACE';
+
+    /**
+     * Additional attribute information
+     */
+    const UNTDID_4451_ACF = 'ACF';
+
+    /**
+     * Absence declaration
+     */
+    const UNTDID_4451_ACG = 'ACG';
+
+    /**
+     * Aggregation statement
+     */
+    const UNTDID_4451_ACH = 'ACH';
+
+    /**
+     * Compilation statement
+     */
+    const UNTDID_4451_ACI = 'ACI';
+
+    /**
+     * Definitional exception
+     */
+    const UNTDID_4451_ACJ = 'ACJ';
+
+    /**
+     * Privacy statement
+     */
+    const UNTDID_4451_ACK = 'ACK';
+
+    /**
+     * Quality statement
+     */
+    const UNTDID_4451_ACL = 'ACL';
+
+    /**
+     * Statistical description
+     */
+    const UNTDID_4451_ACM = 'ACM';
+
+    /**
+     * Statistical definition
+     */
+    const UNTDID_4451_ACN = 'ACN';
+
+    /**
+     * Statistical name
+     */
+    const UNTDID_4451_ACO = 'ACO';
+
+    /**
+     * Statistical title
+     */
+    const UNTDID_4451_ACP = 'ACP';
+
+    /**
+     * Off-dimension information
+     */
+    const UNTDID_4451_ACQ = 'ACQ';
+
+    /**
+     * Unexpected stops information
+     */
+    const UNTDID_4451_ACR = 'ACR';
+
+    /**
+     * Principles
+     */
+    const UNTDID_4451_ACS = 'ACS';
+
+    /**
+     * Terms and definition
+     */
+    const UNTDID_4451_ACT = 'ACT';
+
+    /**
+     * Segment name
+     */
+    const UNTDID_4451_ACU = 'ACU';
+
+    /**
+     * Simple data element name
+     */
+    const UNTDID_4451_ACV = 'ACV';
+
+    /**
+     * Scope
+     */
+    const UNTDID_4451_ACW = 'ACW';
+
+    /**
+     * Message type name
+     */
+    const UNTDID_4451_ACX = 'ACX';
+
+    /**
+     * Introduction
+     */
+    const UNTDID_4451_ACY = 'ACY';
+
+    /**
+     * Glossary
+     */
+    const UNTDID_4451_ACZ = 'ACZ';
+
+    /**
+     * Functional definition
+     */
+    const UNTDID_4451_ADA = 'ADA';
+
+    /**
+     * Examples
+     */
+    const UNTDID_4451_ADB = 'ADB';
+
+    /**
+     * Cover page
+     */
+    const UNTDID_4451_ADC = 'ADC';
+
+    /**
+     * Dependency (syntax) notes
+     */
+    const UNTDID_4451_ADD = 'ADD';
+
+    /**
+     * Code value name
+     */
+    const UNTDID_4451_ADE = 'ADE';
+
+    /**
+     * Code list name
+     */
+    const UNTDID_4451_ADF = 'ADF';
+
+    /**
+     * Clarification of usage
+     */
+    const UNTDID_4451_ADG = 'ADG';
+
+    /**
+     * Composite data element name
+     */
+    const UNTDID_4451_ADH = 'ADH';
+
+    /**
+     * Field of application
+     */
+    const UNTDID_4451_ADI = 'ADI';
+
+    /**
+     * Type of assets and liabilities
+     */
+    const UNTDID_4451_ADJ = 'ADJ';
+
+    /**
+     * Promotion information
+     */
+    const UNTDID_4451_ADK = 'ADK';
+
+    /**
+     * Meter condition
+     */
+    const UNTDID_4451_ADL = 'ADL';
+
+    /**
+     * Meter reading information
+     */
+    const UNTDID_4451_ADM = 'ADM';
+
+    /**
+     * Type of transaction reason
+     */
+    const UNTDID_4451_ADN = 'ADN';
+
+    /**
+     * Type of survey question
+     */
+    const UNTDID_4451_ADO = 'ADO';
+
+    /**
+     * Carrier's agent counter information
+     */
+    const UNTDID_4451_ADP = 'ADP';
+
+    /**
+     * Description of work item on equipment
+     */
+    const UNTDID_4451_ADQ = 'ADQ';
+
+    /**
+     * Message definition
+     */
+    const UNTDID_4451_ADR = 'ADR';
+
+    /**
+     * Booked item information
+     */
+    const UNTDID_4451_ADS = 'ADS';
+
+    /**
+     * Source of document
+     */
+    const UNTDID_4451_ADT = 'ADT';
+
+    /**
+     * Note
+     */
+    const UNTDID_4451_ADU = 'ADU';
+
+    /**
+     * Fixed part of segment clarification text
+     */
+    const UNTDID_4451_ADV = 'ADV';
+
+    /**
+     * Characteristics of goods
+     */
+    const UNTDID_4451_ADW = 'ADW';
+
+    /**
+     * Additional discharge instructions
+     */
+    const UNTDID_4451_ADX = 'ADX';
+
+    /**
+     * Container stripping instructions
+     */
+    const UNTDID_4451_ADY = 'ADY';
+
+    /**
+     * CSC (Container Safety Convention) plate information
+     */
+    const UNTDID_4451_ADZ = 'ADZ';
+
+    /**
+     * Cargo remarks
+     */
+    const UNTDID_4451_AEA = 'AEA';
+
+    /**
+     * Temperature control instructions
+     */
+    const UNTDID_4451_AEB = 'AEB';
+
+    /**
+     * Text refers to expected data
+     */
+    const UNTDID_4451_AEC = 'AEC';
+
+    /**
+     * Text refers to received data
+     */
+    const UNTDID_4451_AED = 'AED';
+
+    /**
+     * Section clarification text
+     */
+    const UNTDID_4451_AEE = 'AEE';
+
+    /**
+     * Information to the beneficiary
+     */
+    const UNTDID_4451_AEF = 'AEF';
+
+    /**
+     * Information to the applicant
+     */
+    const UNTDID_4451_AEG = 'AEG';
+
+    /**
+     * Instructions to the beneficiary
+     */
+    const UNTDID_4451_AEH = 'AEH';
+
+    /**
+     * Instructions to the applicant
+     */
+    const UNTDID_4451_AEI = 'AEI';
+
+    /**
+     * Controlled atmosphere
+     */
+    const UNTDID_4451_AEJ = 'AEJ';
+
+    /**
+     * Take off annotation
+     */
+    const UNTDID_4451_AEK = 'AEK';
+
+    /**
+     * Price variation narrative
+     */
+    const UNTDID_4451_AEL = 'AEL';
+
+    /**
+     * Documentary credit amendment instructions
+     */
+    const UNTDID_4451_AEM = 'AEM';
+
+    /**
+     * Standard method narrative
+     */
+    const UNTDID_4451_AEN = 'AEN';
+
+    /**
+     * Project narrative
+     */
+    const UNTDID_4451_AEO = 'AEO';
+
+    /**
+     * Radioactive goods, additional information
+     */
+    const UNTDID_4451_AEP = 'AEP';
+
+    /**
+     * Bank-to-bank information
+     */
+    const UNTDID_4451_AEQ = 'AEQ';
+
+    /**
+     * Reimbursement instructions
+     */
+    const UNTDID_4451_AER = 'AER';
+
+    /**
+     * Reason for amending a message
+     */
+    const UNTDID_4451_AES = 'AES';
+
+    /**
+     * Instructions to the paying and/or accepting and/or
+     */
+    const UNTDID_4451_AET = 'AET';
+
+    /**
+     * Interest instructions
+     */
+    const UNTDID_4451_AEU = 'AEU';
+
+    /**
+     * Agent commission
+     */
+    const UNTDID_4451_AEV = 'AEV';
+
+    /**
+     * Remitting bank instructions
+     */
+    const UNTDID_4451_AEW = 'AEW';
+
+    /**
+     * Instructions to the collecting bank
+     */
+    const UNTDID_4451_AEX = 'AEX';
+
+    /**
+     * Collection amount instructions
+     */
+    const UNTDID_4451_AEY = 'AEY';
+
+    /**
+     * Internal auditing information
+     */
+    const UNTDID_4451_AEZ = 'AEZ';
+
+    /**
+     * Constraint
+     */
+    const UNTDID_4451_AFA = 'AFA';
+
+    /**
+     * Comment
+     */
+    const UNTDID_4451_AFB = 'AFB';
+
+    /**
+     * Semantic note
+     */
+    const UNTDID_4451_AFC = 'AFC';
+
+    /**
+     * Help text
+     */
+    const UNTDID_4451_AFD = 'AFD';
+
+    /**
+     * Legend
+     */
+    const UNTDID_4451_AFE = 'AFE';
+
+    /**
+     * Batch code structure
+     */
+    const UNTDID_4451_AFF = 'AFF';
+
+    /**
+     * Product application
+     */
+    const UNTDID_4451_AFG = 'AFG';
+
+    /**
+     * Customer complaint
+     */
+    const UNTDID_4451_AFH = 'AFH';
+
+    /**
+     * Probable cause of fault
+     */
+    const UNTDID_4451_AFI = 'AFI';
+
+    /**
+     * Defect description
+     */
+    const UNTDID_4451_AFJ = 'AFJ';
+
+    /**
+     * Repair description
+     */
+    const UNTDID_4451_AFK = 'AFK';
+
+    /**
+     * Review comments
+     */
+    const UNTDID_4451_AFL = 'AFL';
+
+    /**
+     * Title
+     */
+    const UNTDID_4451_AFM = 'AFM';
+
+    /**
+     * Description of amount
+     */
+    const UNTDID_4451_AFN = 'AFN';
+
+    /**
+     * Responsibilities
+     */
+    const UNTDID_4451_AFO = 'AFO';
+
+    /**
+     * Supplier
+     */
+    const UNTDID_4451_AFP = 'AFP';
+
+    /**
+     * Purchase region
+     */
+    const UNTDID_4451_AFQ = 'AFQ';
+
+    /**
+     * Affiliation
+     */
+    const UNTDID_4451_AFR = 'AFR';
+
+    /**
+     * Borrower
+     */
+    const UNTDID_4451_AFS = 'AFS';
+
+    /**
+     * Line of business
+     */
+    const UNTDID_4451_AFT = 'AFT';
+
+    /**
+     * Financial institution
+     */
+    const UNTDID_4451_AFU = 'AFU';
+
+    /**
+     * Business founder
+     */
+    const UNTDID_4451_AFV = 'AFV';
+
+    /**
+     * Business history
+     */
+    const UNTDID_4451_AFW = 'AFW';
+
+    /**
+     * Banking arrangements
+     */
+    const UNTDID_4451_AFX = 'AFX';
+
+    /**
+     * Business origin
+     */
+    const UNTDID_4451_AFY = 'AFY';
+
+    /**
+     * Brand names' description
+     */
+    const UNTDID_4451_AFZ = 'AFZ';
+
+    /**
+     * Business financing details
+     */
+    const UNTDID_4451_AGA = 'AGA';
+
+    /**
+     * Competition
+     */
+    const UNTDID_4451_AGB = 'AGB';
+
+    /**
+     * Construction process details
+     */
+    const UNTDID_4451_AGC = 'AGC';
+
+    /**
+     * Construction specialty
+     */
+    const UNTDID_4451_AGD = 'AGD';
+
+    /**
+     * Contract information
+     */
+    const UNTDID_4451_AGE = 'AGE';
+
+    /**
+     * Corporate filing
+     */
+    const UNTDID_4451_AGF = 'AGF';
+
+    /**
+     * Customer information
+     */
+    const UNTDID_4451_AGG = 'AGG';
+
+    /**
+     * Copyright notice
+     */
+    const UNTDID_4451_AGH = 'AGH';
+
+    /**
+     * Contingent debt
+     */
+    const UNTDID_4451_AGI = 'AGI';
+
+    /**
+     * Conviction details
+     */
+    const UNTDID_4451_AGJ = 'AGJ';
+
+    /**
+     * Equipment
+     */
+    const UNTDID_4451_AGK = 'AGK';
+
+    /**
+     * Workforce description
+     */
+    const UNTDID_4451_AGL = 'AGL';
+
+    /**
+     * Exemption
+     */
+    const UNTDID_4451_AGM = 'AGM';
+
+    /**
+     * Future plans
+     */
+    const UNTDID_4451_AGN = 'AGN';
+
+    /**
+     * Interviewee conversation information
+     */
+    const UNTDID_4451_AGO = 'AGO';
+
+    /**
+     * Intangible asset
+     */
+    const UNTDID_4451_AGP = 'AGP';
+
+    /**
+     * Inventory
+     */
+    const UNTDID_4451_AGQ = 'AGQ';
+
+    /**
+     * Investment
+     */
+    const UNTDID_4451_AGR = 'AGR';
+
+    /**
+     * Intercompany relations information
+     */
+    const UNTDID_4451_AGS = 'AGS';
+
+    /**
+     * Joint venture
+     */
+    const UNTDID_4451_AGT = 'AGT';
+
+    /**
+     * Loan
+     */
+    const UNTDID_4451_AGU = 'AGU';
+
+    /**
+     * Long term debt
+     */
+    const UNTDID_4451_AGV = 'AGV';
+
+    /**
+     * Location
+     */
+    const UNTDID_4451_AGW = 'AGW';
+
+    /**
+     * Current legal structure
+     */
+    const UNTDID_4451_AGX = 'AGX';
+
+    /**
+     * Marital contract
+     */
+    const UNTDID_4451_AGY = 'AGY';
+
+    /**
+     * Marketing activities
+     */
+    const UNTDID_4451_AGZ = 'AGZ';
+
+    /**
+     * Merger
+     */
+    const UNTDID_4451_AHA = 'AHA';
+
+    /**
+     * Marketable securities
+     */
+    const UNTDID_4451_AHB = 'AHB';
+
+    /**
+     * Business debt
+     */
+    const UNTDID_4451_AHC = 'AHC';
+
+    /**
+     * Original legal structure
+     */
+    const UNTDID_4451_AHD = 'AHD';
+
+    /**
+     * Employee sharing arrangements
+     */
+    const UNTDID_4451_AHE = 'AHE';
+
+    /**
+     * Organization details
+     */
+    const UNTDID_4451_AHF = 'AHF';
+
+    /**
+     * Public record details
+     */
+    const UNTDID_4451_AHG = 'AHG';
+
+    /**
+     * Price range
+     */
+    const UNTDID_4451_AHH = 'AHH';
+
+    /**
+     * Qualifications
+     */
+    const UNTDID_4451_AHI = 'AHI';
+
+    /**
+     * Registered activity
+     */
+    const UNTDID_4451_AHJ = 'AHJ';
+
+    /**
+     * Criminal sentence
+     */
+    const UNTDID_4451_AHK = 'AHK';
+
+    /**
+     * Sales method
+     */
+    const UNTDID_4451_AHL = 'AHL';
+
+    /**
+     * Educational institution information
+     */
+    const UNTDID_4451_AHM = 'AHM';
+
+    /**
+     * Status details
+     */
+    const UNTDID_4451_AHN = 'AHN';
+
+    /**
+     * Sales
+     */
+    const UNTDID_4451_AHO = 'AHO';
+
+    /**
+     * Spouse information
+     */
+    const UNTDID_4451_AHP = 'AHP';
+
+    /**
+     * Educational degree information
+     */
+    const UNTDID_4451_AHQ = 'AHQ';
+
+    /**
+     * Shareholding information
+     */
+    const UNTDID_4451_AHR = 'AHR';
+
+    /**
+     * Sales territory
+     */
+    const UNTDID_4451_AHS = 'AHS';
+
+    /**
+     * Accountant's comments
+     */
+    const UNTDID_4451_AHT = 'AHT';
+
+    /**
+     * Exemption law location
+     */
+    const UNTDID_4451_AHU = 'AHU';
+
+    /**
+     * Share classifications
+     */
+    const UNTDID_4451_AHV = 'AHV';
+
+    /**
+     * Forecast
+     */
+    const UNTDID_4451_AHW = 'AHW';
+
+    /**
+     * Event location
+     */
+    const UNTDID_4451_AHX = 'AHX';
+
+    /**
+     * Facility occupancy
+     */
+    const UNTDID_4451_AHY = 'AHY';
+
+    /**
+     * Import and export details
+     */
+    const UNTDID_4451_AHZ = 'AHZ';
+
+    /**
+     * Additional facility information
+     */
+    const UNTDID_4451_AIA = 'AIA';
+
+    /**
+     * Inventory value
+     */
+    const UNTDID_4451_AIB = 'AIB';
+
+    /**
+     * Education
+     */
+    const UNTDID_4451_AIC = 'AIC';
+
+    /**
+     * Event
+     */
+    const UNTDID_4451_AID = 'AID';
+
+    /**
+     * Agent
+     */
+    const UNTDID_4451_AIE = 'AIE';
+
+    /**
+     * Domestically agreed financial statement details
+     */
+    const UNTDID_4451_AIF = 'AIF';
+
+    /**
+     * Other current asset description
+     */
+    const UNTDID_4451_AIG = 'AIG';
+
+    /**
+     * Other current liability description
+     */
+    const UNTDID_4451_AIH = 'AIH';
+
+    /**
+     * Former business activity
+     */
+    const UNTDID_4451_AII = 'AII';
+
+    /**
+     * Trade name use
+     */
+    const UNTDID_4451_AIJ = 'AIJ';
+
+    /**
+     * Signing authority
+     */
+    const UNTDID_4451_AIK = 'AIK';
+
+    /**
+     * Guarantee
+     */
+    const UNTDID_4451_AIL = 'AIL';
+
+    /**
+     * Holding company operation
+     */
+    const UNTDID_4451_AIM = 'AIM';
+
+    /**
+     * Consignment routing
+     */
+    const UNTDID_4451_AIN = 'AIN';
+
+    /**
+     * Letter of protest
+     */
+    const UNTDID_4451_AIO = 'AIO';
+
+    /**
+     * Question
+     */
+    const UNTDID_4451_AIP = 'AIP';
+
+    /**
+     * Party information
+     */
+    const UNTDID_4451_AIQ = 'AIQ';
+
+    /**
+     * Area boundaries description
+     */
+    const UNTDID_4451_AIR = 'AIR';
+
+    /**
+     * Advertisement information
+     */
+    const UNTDID_4451_AIS = 'AIS';
+
+    /**
+     * Financial statement details
+     */
+    const UNTDID_4451_AIT = 'AIT';
+
+    /**
+     * Access instructions
+     */
+    const UNTDID_4451_AIU = 'AIU';
+
+    /**
+     * Liquidity
+     */
+    const UNTDID_4451_AIV = 'AIV';
+
+    /**
+     * Credit line
+     */
+    const UNTDID_4451_AIW = 'AIW';
+
+    /**
+     * Warranty terms
+     */
+    const UNTDID_4451_AIX = 'AIX';
+
+    /**
+     * Division description
+     */
+    const UNTDID_4451_AIY = 'AIY';
+
+    /**
+     * Reporting instruction
+     */
+    const UNTDID_4451_AIZ = 'AIZ';
+
+    /**
+     * Examination result
+     */
+    const UNTDID_4451_AJA = 'AJA';
+
+    /**
+     * Laboratory result
+     */
+    const UNTDID_4451_AJB = 'AJB';
+
+    /**
+     * Allowance/charge information
+     */
+    const UNTDID_4451_ALC = 'ALC';
+
+    /**
+     * X-ray result
+     */
+    const UNTDID_4451_ALD = 'ALD';
+
+    /**
+     * Pathology result
+     */
+    const UNTDID_4451_ALE = 'ALE';
+
+    /**
+     * Intervention description
+     */
+    const UNTDID_4451_ALF = 'ALF';
+
+    /**
+     * Summary of admittance
+     */
+    const UNTDID_4451_ALG = 'ALG';
+
+    /**
+     * Medical treatment course detail
+     */
+    const UNTDID_4451_ALH = 'ALH';
+
+    /**
+     * Prognosis
+     */
+    const UNTDID_4451_ALI = 'ALI';
+
+    /**
+     * Instruction to patient
+     */
+    const UNTDID_4451_ALJ = 'ALJ';
+
+    /**
+     * Instruction to physician
+     */
+    const UNTDID_4451_ALK = 'ALK';
+
+    /**
+     * All documents
+     */
+    const UNTDID_4451_ALL = 'ALL';
+
+    /**
+     * Medicine treatment
+     */
+    const UNTDID_4451_ALM = 'ALM';
+
+    /**
+     * Medicine dosage and administration
+     */
+    const UNTDID_4451_ALN = 'ALN';
+
+    /**
+     * Availability of patient
+     */
+    const UNTDID_4451_ALO = 'ALO';
+
+    /**
+     * Reason for service request
+     */
+    const UNTDID_4451_ALP = 'ALP';
+
+    /**
+     * Purpose of service
+     */
+    const UNTDID_4451_ALQ = 'ALQ';
+
+    /**
+     * Arrival conditions
+     */
+    const UNTDID_4451_ARR = 'ARR';
+
+    /**
+     * Service requester's comment
+     */
+    const UNTDID_4451_ARS = 'ARS';
+
+    /**
+     * Authentication
+     */
+    const UNTDID_4451_AUT = 'AUT';
+
+    /**
+     * Requested location description
+     */
+    const UNTDID_4451_AUU = 'AUU';
+
+    /**
+     * Medicine administration condition
+     */
+    const UNTDID_4451_AUV = 'AUV';
+
+    /**
+     * Patient information
+     */
+    const UNTDID_4451_AUW = 'AUW';
+
+    /**
+     * Precautionary measure
+     */
+    const UNTDID_4451_AUX = 'AUX';
+
+    /**
+     * Service characteristic
+     */
+    const UNTDID_4451_AUY = 'AUY';
+
+    /**
+     * Planned event comment
+     */
+    const UNTDID_4451_AUZ = 'AUZ';
+
+    /**
+     * Expected delay comment
+     */
+    const UNTDID_4451_AVA = 'AVA';
+
+    /**
+     * Transport requirements comment
+     */
+    const UNTDID_4451_AVB = 'AVB';
+
+    /**
+     * Temporary approval condition
+     */
+    const UNTDID_4451_AVC = 'AVC';
+
+    /**
+     * Customs Valuation Information
+     */
+    const UNTDID_4451_AVD = 'AVD';
+
+    /**
+     * Value Added Tax (VAT) margin scheme
+     */
+    const UNTDID_4451_AVE = 'AVE';
+
+    /**
+     * Maritime Declaration of Health
+     */
+    const UNTDID_4451_AVF = 'AVF';
+
+    /**
+     * Passenger baggage information
+     */
+    const UNTDID_4451_BAG = 'BAG';
+
+    /**
+     * Maritime Declaration of Health
+     */
+    const UNTDID_4451_BAH = 'BAH';
+
+    /**
+     * Additional product information address
+     */
+    const UNTDID_4451_BAI = 'BAI';
+
+    /**
+     * Information to be printed on despatch advice
+     */
+    const UNTDID_4451_BAJ = 'BAJ';
+
+    /**
+     * Missing goods remarks
+     */
+    const UNTDID_4451_BAK = 'BAK';
+
+    /**
+     * Non-acceptance information
+     */
+    const UNTDID_4451_BAL = 'BAL';
+
+    /**
+     * Returns information
+     */
+    const UNTDID_4451_BAM = 'BAM';
+
+    /**
+     * Sub-line item information
+     */
+    const UNTDID_4451_BAN = 'BAN';
+
+    /**
+     * Test information
+     */
+    const UNTDID_4451_BAO = 'BAO';
+
+    /**
+     * External link
+     */
+    const UNTDID_4451_BAP = 'BAP';
+
+    /**
+     * VAT exemption reason
+     */
+    const UNTDID_4451_BAQ = 'BAQ';
+
+    /**
+     * Processing Instructions
+     */
+    const UNTDID_4451_BAR = 'BAR';
+
+    /**
+     * Relay Instructions
+     */
+    const UNTDID_4451_BAS = 'BAS';
+
+    /**
+     * Transport contract document clause
+     */
+    const UNTDID_4451_BLC = 'BLC';
+
+    /**
+     * Instruction to prepare the patient
+     */
+    const UNTDID_4451_BLD = 'BLD';
+
+    /**
+     * Medicine treatment comment
+     */
+    const UNTDID_4451_BLE = 'BLE';
+
+    /**
+     * Examination result comment
+     */
+    const UNTDID_4451_BLF = 'BLF';
+
+    /**
+     * Service request comment
+     */
+    const UNTDID_4451_BLG = 'BLG';
+
+    /**
+     * Prescription reason
+     */
+    const UNTDID_4451_BLH = 'BLH';
+
+    /**
+     * Prescription comment
+     */
+    const UNTDID_4451_BLI = 'BLI';
+
+    /**
+     * Clinical investigation comment
+     */
+    const UNTDID_4451_BLJ = 'BLJ';
+
+    /**
+     * Medicinal specification comment
+     */
+    const UNTDID_4451_BLK = 'BLK';
+
+    /**
+     * Economic contribution comment
+     */
+    const UNTDID_4451_BLL = 'BLL';
+
+    /**
+     * Status of a plan
+     */
+    const UNTDID_4451_BLM = 'BLM';
+
+    /**
+     * Random sample test information
+     */
+    const UNTDID_4451_BLN = 'BLN';
+
+    /**
+     * Period of time
+     */
+    const UNTDID_4451_BLO = 'BLO';
+
+    /**
+     * Legislation
+     */
+    const UNTDID_4451_BLP = 'BLP';
+
+    /**
+     * Security measures requested
+     */
+    const UNTDID_4451_BLQ = 'BLQ';
+
+    /**
+     * Transport contract document remark
+     */
+    const UNTDID_4451_BLR = 'BLR';
+
+    /**
+     * Previous port of call security information
+     */
+    const UNTDID_4451_BLS = 'BLS';
+
+    /**
+     * Security information
+     */
+    const UNTDID_4451_BLT = 'BLT';
+
+    /**
+     * Waste information
+     */
+    const UNTDID_4451_BLU = 'BLU';
+
+    /**
+     * B2C marketing information, short description
+     */
+    const UNTDID_4451_BLV = 'BLV';
+
+    /**
+     * B2B marketing information, long description
+     */
+    const UNTDID_4451_BLW = 'BLW';
+
+    /**
+     * B2C marketing information, long description
+     */
+    const UNTDID_4451_BLX = 'BLX';
+
+    /**
+     * Product ingredients
+     */
+    const UNTDID_4451_BLY = 'BLY';
+
+    /**
+     * Location short name
+     */
+    const UNTDID_4451_BLZ = 'BLZ';
+
+    /**
+     * Packaging material information
+     */
+    const UNTDID_4451_BMA = 'BMA';
+
+    /**
+     * Filler material information
+     */
+    const UNTDID_4451_BMB = 'BMB';
+
+    /**
+     * Ship-to-ship activity information
+     */
+    const UNTDID_4451_BMC = 'BMC';
+
+    /**
+     * Package material description
+     */
+    const UNTDID_4451_BMD = 'BMD';
+
+    /**
+     * Consumer level package marking
+     */
+    const UNTDID_4451_BME = 'BME';
+
+    /**
+     * Customs clearance instructions
+     */
+    const UNTDID_4451_CCI = 'CCI';
+
+    /**
+     * Customs clearance instructions export
+     */
+    const UNTDID_4451_CEX = 'CEX';
+
+    /**
+     * Change information
+     */
+    const UNTDID_4451_CHG = 'CHG';
+
+    /**
+     * Customs clearance instruction import
+     */
+    const UNTDID_4451_CIP = 'CIP';
+
+    /**
+     * Clearance place requested
+     */
+    const UNTDID_4451_CLP = 'CLP';
+
+    /**
+     * Loading remarks
+     */
+    const UNTDID_4451_CLR = 'CLR';
+
+    /**
+     * Order information
+     */
+    const UNTDID_4451_COI = 'COI';
+
+    /**
+     * Customer remarks
+     */
+    const UNTDID_4451_CUR = 'CUR';
+
+    /**
+     * Customs declaration information
+     */
+    const UNTDID_4451_CUS = 'CUS';
+
+    /**
+     * Damage remarks
+     */
+    const UNTDID_4451_DAR = 'DAR';
+
+    /**
+     * Document issuer declaration
+     */
+    const UNTDID_4451_DCL = 'DCL';
+
+    /**
+     * Delivery information
+     */
+    const UNTDID_4451_DEL = 'DEL';
+
+    /**
+     * Delivery instructions
+     */
+    const UNTDID_4451_DIN = 'DIN';
+
+    /**
+     * Documentation instructions
+     */
+    const UNTDID_4451_DOC = 'DOC';
+
+    /**
+     * Duty declaration
+     */
+    const UNTDID_4451_DUT = 'DUT';
+
+    /**
+     * Effective used routing
+     */
+    const UNTDID_4451_EUR = 'EUR';
+
+    /**
+     * First block to be printed on the transport contract
+     */
+    const UNTDID_4451_FBC = 'FBC';
+
+    /**
+     * Government bill of lading information
+     */
+    const UNTDID_4451_GBL = 'GBL';
+
+    /**
+     * Entire transaction set
+     */
+    const UNTDID_4451_GEN = 'GEN';
+
+    /**
+     * Further information concerning GGVS par. 7
+     */
+    const UNTDID_4451_GS7 = 'GS7';
+
+    /**
+     * Consignment handling instruction
+     */
+    const UNTDID_4451_HAN = 'HAN';
+
+    /**
+     * Hazard information
+     */
+    const UNTDID_4451_HAZ = 'HAZ';
+
+    /**
+     * Consignment information for consignee
+     */
+    const UNTDID_4451_ICN = 'ICN';
+
+    /**
+     * Insurance instructions
+     */
+    const UNTDID_4451_IIN = 'IIN';
+
+    /**
+     * Invoice mailing instructions
+     */
+    const UNTDID_4451_IMI = 'IMI';
+
+    /**
+     * Commercial invoice item description
+     */
+    const UNTDID_4451_IND = 'IND';
+
+    /**
+     * Insurance information
+     */
+    const UNTDID_4451_INS = 'INS';
+
+    /**
+     * Invoice instruction
+     */
+    const UNTDID_4451_INV = 'INV';
+
+    /**
+     * Information for railway purpose
+     */
+    const UNTDID_4451_IRP = 'IRP';
+
+    /**
+     * Inland transport details
+     */
+    const UNTDID_4451_ITR = 'ITR';
+
+    /**
+     * Testing instructions
+     */
+    const UNTDID_4451_ITS = 'ITS';
+
+    /**
+     * Location Alias
+     */
+    const UNTDID_4451_LAN = 'LAN';
+
+    /**
+     * Line item
+     */
+    const UNTDID_4451_LIN = 'LIN';
+
+    /**
+     * Loading instruction
+     */
+    const UNTDID_4451_LOI = 'LOI';
+
+    /**
+     * Miscellaneous charge order
+     */
+    const UNTDID_4451_MCO = 'MCO';
+
+    /**
+     * Maritime Declaration of Health
+     */
+    const UNTDID_4451_MDH = 'MDH';
+
+    /**
+     * Additional marks/numbers information
+     */
+    const UNTDID_4451_MKS = 'MKS';
+
+    /**
+     * Order instruction
+     */
+    const UNTDID_4451_ORI = 'ORI';
+
+    /**
+     * Other service information
+     */
+    const UNTDID_4451_OSI = 'OSI';
+
+    /**
+     * Packing/marking information
+     */
+    const UNTDID_4451_PAC = 'PAC';
+
+    /**
+     * Payment instructions information
+     */
+    const UNTDID_4451_PAI = 'PAI';
+
+    /**
+     * Payables information
+     */
+    const UNTDID_4451_PAY = 'PAY';
+
+    /**
+     * Packaging information
+     */
+    const UNTDID_4451_PKG = 'PKG';
+
+    /**
+     * Packaging terms information
+     */
+    const UNTDID_4451_PKT = 'PKT';
+
+    /**
+     * Payment detail/remittance information
+     */
+    const UNTDID_4451_PMD = 'PMD';
+
+    /**
+     * Payment information
+     */
+    const UNTDID_4451_PMT = 'PMT';
+
+    /**
+     * Product information
+     */
+    const UNTDID_4451_PRD = 'PRD';
+
+    /**
+     * Price calculation formula
+     */
+    const UNTDID_4451_PRF = 'PRF';
+
+    /**
+     * Priority information
+     */
+    const UNTDID_4451_PRI = 'PRI';
+
+    /**
+     * Purchasing information
+     */
+    const UNTDID_4451_PUR = 'PUR';
+
+    /**
+     * Quarantine instructions
+     */
+    const UNTDID_4451_QIN = 'QIN';
+
+    /**
+     * Quality demands/requirements
+     */
+    const UNTDID_4451_QQD = 'QQD';
+
+    /**
+     * Quotation instruction/information
+     */
+    const UNTDID_4451_QUT = 'QUT';
+
+    /**
+     * Risk and handling information
+     */
+    const UNTDID_4451_RAH = 'RAH';
+
+    /**
+     * Regulatory information
+     */
+    const UNTDID_4451_REG = 'REG';
+
+    /**
+     * Return to origin information
+     */
+    const UNTDID_4451_RET = 'RET';
+
+    /**
+     * Receivables
+     */
+    const UNTDID_4451_REV = 'REV';
+
+    /**
+     * Consignment route
+     */
+    const UNTDID_4451_RQR = 'RQR';
+
+    /**
+     * Safety information
+     */
+    const UNTDID_4451_SAF = 'SAF';
+
+    /**
+     * Consignment documentary instruction
+     */
+    const UNTDID_4451_SIC = 'SIC';
+
+    /**
+     * Special instructions
+     */
+    const UNTDID_4451_SIN = 'SIN';
+
+    /**
+     * Ship line requested
+     */
+    const UNTDID_4451_SLR = 'SLR';
+
+    /**
+     * Special permission for transport, generally
+     */
+    const UNTDID_4451_SPA = 'SPA';
+
+    /**
+     * Special permission concerning the goods to be transported
+     */
+    const UNTDID_4451_SPG = 'SPG';
+
+    /**
+     * Special handling
+     */
+    const UNTDID_4451_SPH = 'SPH';
+
+    /**
+     * Special permission concerning package
+     */
+    const UNTDID_4451_SPP = 'SPP';
+
+    /**
+     * Special permission concerning transport means
+     */
+    const UNTDID_4451_SPT = 'SPT';
+
+    /**
+     * Subsidiary risk number (IATA/DGR)
+     */
+    const UNTDID_4451_SRN = 'SRN';
+
+    /**
+     * Special service request
+     */
+    const UNTDID_4451_SSR = 'SSR';
+
+    /**
+     * Supplier remarks
+     */
+    const UNTDID_4451_SUR = 'SUR';
+
+    /**
+     * Consignment tariff
+     */
+    const UNTDID_4451_TCA = 'TCA';
+
+    /**
+     * Consignment transport
+     */
+    const UNTDID_4451_TDT = 'TDT';
+
+    /**
+     * Transportation information
+     */
+    const UNTDID_4451_TRA = 'TRA';
+
+    /**
+     * Requested tariff
+     */
+    const UNTDID_4451_TRR = 'TRR';
+
+    /**
+     * Tax declaration
+     */
+    const UNTDID_4451_TXD = 'TXD';
+
+    /**
+     * Warehouse instruction/information
+     */
+    const UNTDID_4451_WHI = 'WHI';
+
+    /**
+     * Mutually defined
+     */
+    const UNTDID_4451_ZZZ = 'ZZZ';
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdUnitCodes.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdUnitCodes.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdUnitCodes.php	(revision 8435)
@@ -0,0 +1,10603 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing the Unit codes
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdUnitCodes
+{
+    /**
+     * group
+     */
+    const REC20_GROUP = '10';
+
+    /**
+     * outfit
+     */
+    const REC20_OUTFIT = '11';
+
+    /**
+     * ration
+     */
+    const REC20_RATION = '13';
+
+    /**
+     * shot
+     */
+    const REC20_SHOT = '14';
+
+    /**
+     * stick, military
+     */
+    const REC20_STICK_MILITARY = '15';
+
+    /**
+     * twenty foot container
+     */
+    const REC20_TWENTY_FOOT_CONTAINER = '20';
+
+    /**
+     * forty foot container
+     */
+    const REC20_FORTY_FOOT_CONTAINER = '21';
+
+    /**
+     * decilitre per gram
+     */
+    const REC20_DECILITRE_PER_GRAM = '22';
+
+    /**
+     * gram per cubic centimetre
+     */
+    const REC20_GRAM_PER_CUBIC_CENTIMETRE = '23';
+
+    /**
+     * theoretical pound
+     */
+    const REC20_THEORETICAL_POUND = '24';
+
+    /**
+     * gram per square centimetre
+     */
+    const REC20_GRAM_PER_SQUARE_CENTIMETRE = '25';
+
+    /**
+     * theoretical ton
+     */
+    const REC20_THEORETICAL_TON = '27';
+
+    /**
+     * kilogram per square metre
+     */
+    const REC20_KILOGRAM_PER_SQUARE_METRE = '28';
+
+    /**
+     * kilopascal square metre per gram
+     */
+    const REC20_KILOPASCAL_SQUARE_METRE_PER_GRAM = '33';
+
+    /**
+     * kilopascal per millimetre
+     */
+    const REC20_KILOPASCAL_PER_MILLIMETRE = '34';
+
+    /**
+     * millilitre per square centimetre second
+     */
+    const REC20_MILLILITRE_PER_SQUARE_CENTIMETRE_SECOND = '35';
+
+    /**
+     * ounce per square foot
+     */
+    const REC20_OUNCE_PER_SQUARE_FOOT = '37';
+
+    /**
+     * ounce per square foot per 0,01inch
+     */
+    const REC20_OUNCE_PER_SQUARE_FOOT_PER_001INCH = '38';
+
+    /**
+     * millilitre per second
+     */
+    const REC20_MILLILITRE_PER_SECOND = '40';
+
+    /**
+     * millilitre per minute
+     */
+    const REC20_MILLILITRE_PER_MINUTE = '41';
+
+    /**
+     * sitas
+     */
+    const REC20_SITAS = '56';
+
+    /**
+     * mesh
+     */
+    const REC20_MESH = '57';
+
+    /**
+     * net kilogram
+     */
+    const REC20_NET_KILOGRAM = '58';
+
+    /**
+     * part per million
+     */
+    const REC20_PART_PER_MILLION = '59';
+
+    /**
+     * percent weight
+     */
+    const REC20_PERCENT_WEIGHT = '60';
+
+    /**
+     * part per billion (US)
+     */
+    const REC20_PART_PER_BILLION_US = '61';
+
+    /**
+     * millipascal
+     */
+    const REC20_MILLIPASCAL = '74';
+
+    /**
+     * milli-inch
+     */
+    const REC20_MILLIINCH = '77';
+
+    /**
+     * pound per square inch absolute
+     */
+    const REC20_POUND_PER_SQUARE_INCH_ABSOLUTE = '80';
+
+    /**
+     * henry
+     */
+    const REC20_HENRY = '81';
+
+    /**
+     * foot pound-force
+     */
+    const REC20_FOOT_POUNDFORCE = '85';
+
+    /**
+     * pound per cubic foot
+     */
+    const REC20_POUND_PER_CUBIC_FOOT = '87';
+
+    /**
+     * poise
+     */
+    const REC20_POISE = '89';
+
+    /**
+     * stokes
+     */
+    const REC20_STOKES = '91';
+
+    /**
+     * fixed rate
+     */
+    const REC20_FIXED_RATE = '1I';
+
+    /**
+     * radian per second
+     */
+    const REC20_RADIAN_PER_SECOND = '2A';
+
+    /**
+     * radian per second squared
+     */
+    const REC20_RADIAN_PER_SECOND_SQUARED = '2B';
+
+    /**
+     * roentgen
+     */
+    const REC20_ROENTGEN = '2C';
+
+    /**
+     * volt AC
+     */
+    const REC20_VOLT_AC = '2G';
+
+    /**
+     * volt DC
+     */
+    const REC20_VOLT_DC = '2H';
+
+    /**
+     * British thermal unit (international table) per hour
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_HOUR = '2I';
+
+    /**
+     * cubic centimetre per second
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_SECOND = '2J';
+
+    /**
+     * cubic foot per hour
+     */
+    const REC20_CUBIC_FOOT_PER_HOUR = '2K';
+
+    /**
+     * cubic foot per minute
+     */
+    const REC20_CUBIC_FOOT_PER_MINUTE = '2L';
+
+    /**
+     * centimetre per second
+     */
+    const REC20_CENTIMETRE_PER_SECOND = '2M';
+
+    /**
+     * decibel
+     */
+    const REC20_DECIBEL = '2N';
+
+    /**
+     * kilobyte
+     */
+    const REC20_KILOBYTE = '2P';
+
+    /**
+     * kilobecquerel
+     */
+    const REC20_KILOBECQUEREL = '2Q';
+
+    /**
+     * kilocurie
+     */
+    const REC20_KILOCURIE = '2R';
+
+    /**
+     * megagram
+     */
+    const REC20_MEGAGRAM = '2U';
+
+    /**
+     * metre per minute
+     */
+    const REC20_METRE_PER_MINUTE = '2X';
+
+    /**
+     * milliroentgen
+     */
+    const REC20_MILLIROENTGEN = '2Y';
+
+    /**
+     * millivolt
+     */
+    const REC20_MILLIVOLT = '2Z';
+
+    /**
+     * megajoule
+     */
+    const REC20_MEGAJOULE = '3B';
+
+    /**
+     * manmonth
+     */
+    const REC20_MANMONTH = '3C';
+
+    /**
+     * centistokes
+     */
+    const REC20_CENTISTOKES = '4C';
+
+    /**
+     * microlitre
+     */
+    const REC20_MICROLITRE = '4G';
+
+    /**
+     * micrometre (micron)
+     */
+    const REC20_MICROMETRE_MICRON = '4H';
+
+    /**
+     * milliampere
+     */
+    const REC20_MILLIAMPERE = '4K';
+
+    /**
+     * megabyte
+     */
+    const REC20_MEGABYTE = '4L';
+
+    /**
+     * milligram per hour
+     */
+    const REC20_MILLIGRAM_PER_HOUR = '4M';
+
+    /**
+     * megabecquerel
+     */
+    const REC20_MEGABECQUEREL = '4N';
+
+    /**
+     * microfarad
+     */
+    const REC20_MICROFARAD = '4O';
+
+    /**
+     * newton per metre
+     */
+    const REC20_NEWTON_PER_METRE = '4P';
+
+    /**
+     * ounce inch
+     */
+    const REC20_OUNCE_INCH = '4Q';
+
+    /**
+     * ounce foot
+     */
+    const REC20_OUNCE_FOOT = '4R';
+
+    /**
+     * picofarad
+     */
+    const REC20_PICOFARAD = '4T';
+
+    /**
+     * pound per hour
+     */
+    const REC20_POUND_PER_HOUR = '4U';
+
+    /**
+     * ton (US) per hour
+     */
+    const REC20_TON_US_PER_HOUR = '4W';
+
+    /**
+     * kilolitre per hour
+     */
+    const REC20_KILOLITRE_PER_HOUR = '4X';
+
+    /**
+     * barrel (US) per minute
+     */
+    const REC20_BARREL_US_PER_MINUTE = '5A';
+
+    /**
+     * batch
+     */
+    const REC20_BATCH = '5B';
+
+    /**
+     * MMSCF/day
+     */
+    const REC20_MMSCF_DAY = '5E';
+
+    /**
+     * hydraulic horse power
+     */
+    const REC20_HYDRAULIC_HORSE_POWER = '5J';
+
+    /**
+     * ampere square metre per joule second
+     */
+    const REC20_AMPERE_SQUARE_METRE_PER_JOULE_SECOND = 'A10';
+
+    /**
+     * angstrom
+     */
+    const REC20_ANGSTROM = 'A11';
+
+    /**
+     * astronomical unit
+     */
+    const REC20_ASTRONOMICAL_UNIT = 'A12';
+
+    /**
+     * attojoule
+     */
+    const REC20_ATTOJOULE = 'A13';
+
+    /**
+     * barn
+     */
+    const REC20_BARN = 'A14';
+
+    /**
+     * barn per electronvolt
+     */
+    const REC20_BARN_PER_ELECTRONVOLT = 'A15';
+
+    /**
+     * barn per steradian electronvolt
+     */
+    const REC20_BARN_PER_STERADIAN_ELECTRONVOLT = 'A16';
+
+    /**
+     * barn per steradian
+     */
+    const REC20_BARN_PER_STERADIAN = 'A17';
+
+    /**
+     * becquerel per kilogram
+     */
+    const REC20_BECQUEREL_PER_KILOGRAM = 'A18';
+
+    /**
+     * becquerel per cubic metre
+     */
+    const REC20_BECQUEREL_PER_CUBIC_METRE = 'A19';
+
+    /**
+     * ampere per centimetre
+     */
+    const REC20_AMPERE_PER_CENTIMETRE = 'A2';
+
+    /**
+     * British thermal unit (international table) per second square foot
+     * degree Rankine
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND_SQUARE_FOOT_DEGREE_RANKINE = 'A20';
+
+    /**
+     * British thermal unit (international table) per pound degree Rankine
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_POUND_DEGREE_RANKINE = 'A21';
+
+    /**
+     * British thermal unit (international table) per second foot degree
+     * Rankine
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND_FOOT_DEGREE_RANKINE = 'A22';
+
+    /**
+     * British thermal unit (international table) per hour square foot degree
+     * Rankine
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_HOUR_SQUARE_FOOT_DEGREE_RANKINE = 'A23';
+
+    /**
+     * candela per square metre
+     */
+    const REC20_CANDELA_PER_SQUARE_METRE = 'A24';
+
+    /**
+     * coulomb metre
+     */
+    const REC20_COULOMB_METRE = 'A26';
+
+    /**
+     * coulomb metre squared per volt
+     */
+    const REC20_COULOMB_METRE_SQUARED_PER_VOLT = 'A27';
+
+    /**
+     * coulomb per cubic centimetre
+     */
+    const REC20_COULOMB_PER_CUBIC_CENTIMETRE = 'A28';
+
+    /**
+     * coulomb per cubic metre
+     */
+    const REC20_COULOMB_PER_CUBIC_METRE = 'A29';
+
+    /**
+     * ampere per millimetre
+     */
+    const REC20_AMPERE_PER_MILLIMETRE = 'A3';
+
+    /**
+     * coulomb per cubic millimetre
+     */
+    const REC20_COULOMB_PER_CUBIC_MILLIMETRE = 'A30';
+
+    /**
+     * coulomb per kilogram second
+     */
+    const REC20_COULOMB_PER_KILOGRAM_SECOND = 'A31';
+
+    /**
+     * coulomb per mole
+     */
+    const REC20_COULOMB_PER_MOLE = 'A32';
+
+    /**
+     * coulomb per square centimetre
+     */
+    const REC20_COULOMB_PER_SQUARE_CENTIMETRE = 'A33';
+
+    /**
+     * coulomb per square metre
+     */
+    const REC20_COULOMB_PER_SQUARE_METRE = 'A34';
+
+    /**
+     * coulomb per square millimetre
+     */
+    const REC20_COULOMB_PER_SQUARE_MILLIMETRE = 'A35';
+
+    /**
+     * cubic centimetre per mole
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_MOLE = 'A36';
+
+    /**
+     * cubic decimetre per mole
+     */
+    const REC20_CUBIC_DECIMETRE_PER_MOLE = 'A37';
+
+    /**
+     * cubic metre per coulomb
+     */
+    const REC20_CUBIC_METRE_PER_COULOMB = 'A38';
+
+    /**
+     * cubic metre per kilogram
+     */
+    const REC20_CUBIC_METRE_PER_KILOGRAM = 'A39';
+
+    /**
+     * ampere per square centimetre
+     */
+    const REC20_AMPERE_PER_SQUARE_CENTIMETRE = 'A4';
+
+    /**
+     * cubic metre per mole
+     */
+    const REC20_CUBIC_METRE_PER_MOLE = 'A40';
+
+    /**
+     * ampere per square metre
+     */
+    const REC20_AMPERE_PER_SQUARE_METRE = 'A41';
+
+    /**
+     * curie per kilogram
+     */
+    const REC20_CURIE_PER_KILOGRAM = 'A42';
+
+    /**
+     * deadweight tonnage
+     */
+    const REC20_DEADWEIGHT_TONNAGE = 'A43';
+
+    /**
+     * decalitre
+     */
+    const REC20_DECALITRE = 'A44';
+
+    /**
+     * decametre
+     */
+    const REC20_DECAMETRE = 'A45';
+
+    /**
+     * decitex
+     */
+    const REC20_DECITEX = 'A47';
+
+    /**
+     * degree Rankine
+     */
+    const REC20_DEGREE_RANKINE = 'A48';
+
+    /**
+     * ampere square metre
+     */
+    const REC20_AMPERE_SQUARE_METRE = 'A5';
+
+    /**
+     * electronvolt
+     */
+    const REC20_ELECTRONVOLT = 'A53';
+
+    /**
+     * electronvolt per metre
+     */
+    const REC20_ELECTRONVOLT_PER_METRE = 'A54';
+
+    /**
+     * electronvolt square metre
+     */
+    const REC20_ELECTRONVOLT_SQUARE_METRE = 'A55';
+
+    /**
+     * electronvolt square metre per kilogram
+     */
+    const REC20_ELECTRONVOLT_SQUARE_METRE_PER_KILOGRAM = 'A56';
+
+    /**
+     * 8-part cloud cover
+     */
+    const REC20_8PART_CLOUD_COVER = 'A59';
+
+    /**
+     * ampere per square metre kelvin squared
+     */
+    const REC20_AMPERE_PER_SQUARE_METRE_KELVIN_SQUARED = 'A6';
+
+    /**
+     * exajoule
+     */
+    const REC20_EXAJOULE = 'A68';
+
+    /**
+     * farad per metre
+     */
+    const REC20_FARAD_PER_METRE = 'A69';
+
+    /**
+     * ampere per square millimetre
+     */
+    const REC20_AMPERE_PER_SQUARE_MILLIMETRE = 'A7';
+
+    /**
+     * femtojoule
+     */
+    const REC20_FEMTOJOULE = 'A70';
+
+    /**
+     * femtometre
+     */
+    const REC20_FEMTOMETRE = 'A71';
+
+    /**
+     * foot per second squared
+     */
+    const REC20_FOOT_PER_SECOND_SQUARED = 'A73';
+
+    /**
+     * foot pound-force per second
+     */
+    const REC20_FOOT_POUNDFORCE_PER_SECOND = 'A74';
+
+    /**
+     * freight ton
+     */
+    const REC20_FREIGHT_TON = 'A75';
+
+    /**
+     * gal
+     */
+    const REC20_GAL = 'A76';
+
+    /**
+     * ampere second
+     */
+    const REC20_AMPERE_SECOND = 'A8';
+
+    /**
+     * gigacoulomb per cubic metre
+     */
+    const REC20_GIGACOULOMB_PER_CUBIC_METRE = 'A84';
+
+    /**
+     * gigaelectronvolt
+     */
+    const REC20_GIGAELECTRONVOLT = 'A85';
+
+    /**
+     * gigahertz
+     */
+    const REC20_GIGAHERTZ = 'A86';
+
+    /**
+     * gigaohm
+     */
+    const REC20_GIGAOHM = 'A87';
+
+    /**
+     * gigaohm metre
+     */
+    const REC20_GIGAOHM_METRE = 'A88';
+
+    /**
+     * gigapascal
+     */
+    const REC20_GIGAPASCAL = 'A89';
+
+    /**
+     * rate
+     */
+    const REC20_RATE = 'A9';
+
+    /**
+     * gigawatt
+     */
+    const REC20_GIGAWATT = 'A90';
+
+    /**
+     * gon
+     */
+    const REC20_GON = 'A91';
+
+    /**
+     * gram per cubic metre
+     */
+    const REC20_GRAM_PER_CUBIC_METRE = 'A93';
+
+    /**
+     * gram per mole
+     */
+    const REC20_GRAM_PER_MOLE = 'A94';
+
+    /**
+     * gray
+     */
+    const REC20_GRAY = 'A95';
+
+    /**
+     * gray per second
+     */
+    const REC20_GRAY_PER_SECOND = 'A96';
+
+    /**
+     * hectopascal
+     */
+    const REC20_HECTOPASCAL = 'A97';
+
+    /**
+     * henry per metre
+     */
+    const REC20_HENRY_PER_METRE = 'A98';
+
+    /**
+     * bit
+     */
+    const REC20_BIT = 'A99';
+
+    /**
+     * ball
+     */
+    const REC20_BALL = 'AA';
+
+    /**
+     * bulk pack
+     */
+    const REC20_BULK_PACK = 'AB';
+
+    /**
+     * acre
+     */
+    const REC20_ACRE = 'ACR';
+
+    /**
+     * activity
+     */
+    const REC20_ACTIVITY = 'ACT';
+
+    /**
+     * byte
+     */
+    const REC20_BYTE = 'AD';
+
+    /**
+     * ampere per metre
+     */
+    const REC20_AMPERE_PER_METRE = 'AE';
+
+    /**
+     * additional minute
+     */
+    const REC20_ADDITIONAL_MINUTE = 'AH';
+
+    /**
+     * average minute per call
+     */
+    const REC20_AVERAGE_MINUTE_PER_CALL = 'AI';
+
+    /**
+     * fathom
+     */
+    const REC20_FATHOM = 'AK';
+
+    /**
+     * access line
+     */
+    const REC20_ACCESS_LINE = 'AL';
+
+    /**
+     * ampere hour
+     */
+    const REC20_AMPERE_HOUR = 'AMH';
+
+    /**
+     * ampere
+     */
+    const REC20_AMPERE = 'AMP';
+
+    /**
+     * year
+     */
+    const REC20_YEAR = 'ANN';
+
+    /**
+     * troy ounce or apothecary ounce
+     */
+    const REC20_TROY_OUNCE_OR_APOTHECARY_OUNCE = 'APZ';
+
+    /**
+     * anti-hemophilic factor (AHF) unit
+     */
+    const REC20_ANTIHEMOPHILIC_FACTOR_AHF_UNIT = 'AQ';
+
+    /**
+     * assortment
+     */
+    const REC20_ASSORTMENT = 'AS';
+
+    /**
+     * alcoholic strength by mass
+     */
+    const REC20_ALCOHOLIC_STRENGTH_BY_MASS = 'ASM';
+
+    /**
+     * alcoholic strength by volume
+     */
+    const REC20_ALCOHOLIC_STRENGTH_BY_VOLUME = 'ASU';
+
+    /**
+     * standard atmosphere
+     */
+    const REC20_STANDARD_ATMOSPHERE = 'ATM';
+
+    /**
+     * american wire gauge
+     */
+    const REC20_AMERICAN_WIRE_GAUGE = 'AWG';
+
+    /**
+     * assembly
+     */
+    const REC20_ASSEMBLY = 'AY';
+
+    /**
+     * British thermal unit (international table) per pound
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_POUND = 'AZ';
+
+    /**
+     * barrel (US) per day
+     */
+    const REC20_BARREL_US_PER_DAY = 'B1';
+
+    /**
+     * bit per second
+     */
+    const REC20_BIT_PER_SECOND = 'B10';
+
+    /**
+     * joule per kilogram kelvin
+     */
+    const REC20_JOULE_PER_KILOGRAM_KELVIN = 'B11';
+
+    /**
+     * joule per metre
+     */
+    const REC20_JOULE_PER_METRE = 'B12';
+
+    /**
+     * joule per square metre
+     */
+    const REC20_JOULE_PER_SQUARE_METRE = 'B13';
+
+    /**
+     * joule per metre to the fourth power
+     */
+    const REC20_JOULE_PER_METRE_TO_THE_FOURTH_POWER = 'B14';
+
+    /**
+     * joule per mole
+     */
+    const REC20_JOULE_PER_MOLE = 'B15';
+
+    /**
+     * joule per mole kelvin
+     */
+    const REC20_JOULE_PER_MOLE_KELVIN = 'B16';
+
+    /**
+     * credit
+     */
+    const REC20_CREDIT = 'B17';
+
+    /**
+     * joule second
+     */
+    const REC20_JOULE_SECOND = 'B18';
+
+    /**
+     * digit
+     */
+    const REC20_DIGIT = 'B19';
+
+    /**
+     * joule square metre per kilogram
+     */
+    const REC20_JOULE_SQUARE_METRE_PER_KILOGRAM = 'B20';
+
+    /**
+     * kelvin per watt
+     */
+    const REC20_KELVIN_PER_WATT = 'B21';
+
+    /**
+     * kiloampere
+     */
+    const REC20_KILOAMPERE = 'B22';
+
+    /**
+     * kiloampere per square metre
+     */
+    const REC20_KILOAMPERE_PER_SQUARE_METRE = 'B23';
+
+    /**
+     * kiloampere per metre
+     */
+    const REC20_KILOAMPERE_PER_METRE = 'B24';
+
+    /**
+     * kilobecquerel per kilogram
+     */
+    const REC20_KILOBECQUEREL_PER_KILOGRAM = 'B25';
+
+    /**
+     * kilocoulomb
+     */
+    const REC20_KILOCOULOMB = 'B26';
+
+    /**
+     * kilocoulomb per cubic metre
+     */
+    const REC20_KILOCOULOMB_PER_CUBIC_METRE = 'B27';
+
+    /**
+     * kilocoulomb per square metre
+     */
+    const REC20_KILOCOULOMB_PER_SQUARE_METRE = 'B28';
+
+    /**
+     * kiloelectronvolt
+     */
+    const REC20_KILOELECTRONVOLT = 'B29';
+
+    /**
+     * batting pound
+     */
+    const REC20_BATTING_POUND = 'B3';
+
+    /**
+     * gibibit
+     */
+    const REC20_GIBIBIT = 'B30';
+
+    /**
+     * kilogram metre per second
+     */
+    const REC20_KILOGRAM_METRE_PER_SECOND = 'B31';
+
+    /**
+     * kilogram metre squared
+     */
+    const REC20_KILOGRAM_METRE_SQUARED = 'B32';
+
+    /**
+     * kilogram metre squared per second
+     */
+    const REC20_KILOGRAM_METRE_SQUARED_PER_SECOND = 'B33';
+
+    /**
+     * kilogram per cubic decimetre
+     */
+    const REC20_KILOGRAM_PER_CUBIC_DECIMETRE = 'B34';
+
+    /**
+     * kilogram per litre
+     */
+    const REC20_KILOGRAM_PER_LITRE = 'B35';
+
+    /**
+     * barrel, imperial
+     */
+    const REC20_BARREL_IMPERIAL = 'B4';
+
+    /**
+     * kilojoule per kelvin
+     */
+    const REC20_KILOJOULE_PER_KELVIN = 'B41';
+
+    /**
+     * kilojoule per kilogram
+     */
+    const REC20_KILOJOULE_PER_KILOGRAM = 'B42';
+
+    /**
+     * kilojoule per kilogram kelvin
+     */
+    const REC20_KILOJOULE_PER_KILOGRAM_KELVIN = 'B43';
+
+    /**
+     * kilojoule per mole
+     */
+    const REC20_KILOJOULE_PER_MOLE = 'B44';
+
+    /**
+     * kilomole
+     */
+    const REC20_KILOMOLE = 'B45';
+
+    /**
+     * kilomole per cubic metre
+     */
+    const REC20_KILOMOLE_PER_CUBIC_METRE = 'B46';
+
+    /**
+     * kilonewton
+     */
+    const REC20_KILONEWTON = 'B47';
+
+    /**
+     * kilonewton metre
+     */
+    const REC20_KILONEWTON_METRE = 'B48';
+
+    /**
+     * kiloohm
+     */
+    const REC20_KILOOHM = 'B49';
+
+    /**
+     * kiloohm metre
+     */
+    const REC20_KILOOHM_METRE = 'B50';
+
+    /**
+     * kilosecond
+     */
+    const REC20_KILOSECOND = 'B52';
+
+    /**
+     * kilosiemens
+     */
+    const REC20_KILOSIEMENS = 'B53';
+
+    /**
+     * kilosiemens per metre
+     */
+    const REC20_KILOSIEMENS_PER_METRE = 'B54';
+
+    /**
+     * kilovolt per metre
+     */
+    const REC20_KILOVOLT_PER_METRE = 'B55';
+
+    /**
+     * kiloweber per metre
+     */
+    const REC20_KILOWEBER_PER_METRE = 'B56';
+
+    /**
+     * light year
+     */
+    const REC20_LIGHT_YEAR = 'B57';
+
+    /**
+     * litre per mole
+     */
+    const REC20_LITRE_PER_MOLE = 'B58';
+
+    /**
+     * lumen hour
+     */
+    const REC20_LUMEN_HOUR = 'B59';
+
+    /**
+     * lumen per square metre
+     */
+    const REC20_LUMEN_PER_SQUARE_METRE = 'B60';
+
+    /**
+     * lumen per watt
+     */
+    const REC20_LUMEN_PER_WATT = 'B61';
+
+    /**
+     * lumen second
+     */
+    const REC20_LUMEN_SECOND = 'B62';
+
+    /**
+     * lux hour
+     */
+    const REC20_LUX_HOUR = 'B63';
+
+    /**
+     * lux second
+     */
+    const REC20_LUX_SECOND = 'B64';
+
+    /**
+     * megaampere per square metre
+     */
+    const REC20_MEGAAMPERE_PER_SQUARE_METRE = 'B66';
+
+    /**
+     * megabecquerel per kilogram
+     */
+    const REC20_MEGABECQUEREL_PER_KILOGRAM = 'B67';
+
+    /**
+     * gigabit
+     */
+    const REC20_GIGABIT = 'B68';
+
+    /**
+     * megacoulomb per cubic metre
+     */
+    const REC20_MEGACOULOMB_PER_CUBIC_METRE = 'B69';
+
+    /**
+     * cycle
+     */
+    const REC20_CYCLE = 'B7';
+
+    /**
+     * megacoulomb per square metre
+     */
+    const REC20_MEGACOULOMB_PER_SQUARE_METRE = 'B70';
+
+    /**
+     * megaelectronvolt
+     */
+    const REC20_MEGAELECTRONVOLT = 'B71';
+
+    /**
+     * megagram per cubic metre
+     */
+    const REC20_MEGAGRAM_PER_CUBIC_METRE = 'B72';
+
+    /**
+     * meganewton
+     */
+    const REC20_MEGANEWTON = 'B73';
+
+    /**
+     * meganewton metre
+     */
+    const REC20_MEGANEWTON_METRE = 'B74';
+
+    /**
+     * megaohm
+     */
+    const REC20_MEGAOHM = 'B75';
+
+    /**
+     * megaohm metre
+     */
+    const REC20_MEGAOHM_METRE = 'B76';
+
+    /**
+     * megasiemens per metre
+     */
+    const REC20_MEGASIEMENS_PER_METRE = 'B77';
+
+    /**
+     * megavolt
+     */
+    const REC20_MEGAVOLT = 'B78';
+
+    /**
+     * megavolt per metre
+     */
+    const REC20_MEGAVOLT_PER_METRE = 'B79';
+
+    /**
+     * joule per cubic metre
+     */
+    const REC20_JOULE_PER_CUBIC_METRE = 'B8';
+
+    /**
+     * gigabit per second
+     */
+    const REC20_GIGABIT_PER_SECOND = 'B80';
+
+    /**
+     * reciprocal metre squared reciprocal second
+     */
+    const REC20_RECIPROCAL_METRE_SQUARED_RECIPROCAL_SECOND = 'B81';
+
+    /**
+     * inch per linear foot
+     */
+    const REC20_INCH_PER_LINEAR_FOOT = 'B82';
+
+    /**
+     * metre to the fourth power
+     */
+    const REC20_METRE_TO_THE_FOURTH_POWER = 'B83';
+
+    /**
+     * microampere
+     */
+    const REC20_MICROAMPERE = 'B84';
+
+    /**
+     * microbar
+     */
+    const REC20_MICROBAR = 'B85';
+
+    /**
+     * microcoulomb
+     */
+    const REC20_MICROCOULOMB = 'B86';
+
+    /**
+     * microcoulomb per cubic metre
+     */
+    const REC20_MICROCOULOMB_PER_CUBIC_METRE = 'B87';
+
+    /**
+     * microcoulomb per square metre
+     */
+    const REC20_MICROCOULOMB_PER_SQUARE_METRE = 'B88';
+
+    /**
+     * microfarad per metre
+     */
+    const REC20_MICROFARAD_PER_METRE = 'B89';
+
+    /**
+     * microhenry
+     */
+    const REC20_MICROHENRY = 'B90';
+
+    /**
+     * microhenry per metre
+     */
+    const REC20_MICROHENRY_PER_METRE = 'B91';
+
+    /**
+     * micronewton
+     */
+    const REC20_MICRONEWTON = 'B92';
+
+    /**
+     * micronewton metre
+     */
+    const REC20_MICRONEWTON_METRE = 'B93';
+
+    /**
+     * microohm
+     */
+    const REC20_MICROOHM = 'B94';
+
+    /**
+     * microohm metre
+     */
+    const REC20_MICROOHM_METRE = 'B95';
+
+    /**
+     * micropascal
+     */
+    const REC20_MICROPASCAL = 'B96';
+
+    /**
+     * microradian
+     */
+    const REC20_MICRORADIAN = 'B97';
+
+    /**
+     * microsecond
+     */
+    const REC20_MICROSECOND = 'B98';
+
+    /**
+     * microsiemens
+     */
+    const REC20_MICROSIEMENS = 'B99';
+
+    /**
+     * bar [unit of pressure]
+     */
+    const REC20_BAR_UNIT_OF_PRESSURE = 'BAR';
+
+    /**
+     * base box
+     */
+    const REC20_BASE_BOX = 'BB';
+
+    /**
+     * board foot
+     */
+    const REC20_BOARD_FOOT = 'BFT';
+
+    /**
+     * brake horse power
+     */
+    const REC20_BRAKE_HORSE_POWER = 'BHP';
+
+    /**
+     * billion (EUR)
+     */
+    const REC20_BILLION_EUR = 'BIL';
+
+    /**
+     * dry barrel (US)
+     */
+    const REC20_DRY_BARREL_US = 'BLD';
+
+    /**
+     * barrel (US)
+     */
+    const REC20_BARREL_US = 'BLL';
+
+    /**
+     * hundred board foot
+     */
+    const REC20_HUNDRED_BOARD_FOOT = 'BP';
+
+    /**
+     * beats per minute
+     */
+    const REC20_BEATS_PER_MINUTE = 'BPM';
+
+    /**
+     * becquerel
+     */
+    const REC20_BECQUEREL = 'BQL';
+
+    /**
+     * British thermal unit (international table)
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE = 'BTU';
+
+    /**
+     * bushel (US)
+     */
+    const REC20_BUSHEL_US = 'BUA';
+
+    /**
+     * bushel (UK)
+     */
+    const REC20_BUSHEL_UK = 'BUI';
+
+    /**
+     * call
+     */
+    const REC20_CALL = 'C0';
+
+    /**
+     * millifarad
+     */
+    const REC20_MILLIFARAD = 'C10';
+
+    /**
+     * milligal
+     */
+    const REC20_MILLIGAL = 'C11';
+
+    /**
+     * milligram per metre
+     */
+    const REC20_MILLIGRAM_PER_METRE = 'C12';
+
+    /**
+     * milligray
+     */
+    const REC20_MILLIGRAY = 'C13';
+
+    /**
+     * millihenry
+     */
+    const REC20_MILLIHENRY = 'C14';
+
+    /**
+     * millijoule
+     */
+    const REC20_MILLIJOULE = 'C15';
+
+    /**
+     * millimetre per second
+     */
+    const REC20_MILLIMETRE_PER_SECOND = 'C16';
+
+    /**
+     * millimetre squared per second
+     */
+    const REC20_MILLIMETRE_SQUARED_PER_SECOND = 'C17';
+
+    /**
+     * millimole
+     */
+    const REC20_MILLIMOLE = 'C18';
+
+    /**
+     * mole per kilogram
+     */
+    const REC20_MOLE_PER_KILOGRAM = 'C19';
+
+    /**
+     * millinewton
+     */
+    const REC20_MILLINEWTON = 'C20';
+
+    /**
+     * kibibit
+     */
+    const REC20_KIBIBIT = 'C21';
+
+    /**
+     * millinewton per metre
+     */
+    const REC20_MILLINEWTON_PER_METRE = 'C22';
+
+    /**
+     * milliohm metre
+     */
+    const REC20_MILLIOHM_METRE = 'C23';
+
+    /**
+     * millipascal second
+     */
+    const REC20_MILLIPASCAL_SECOND = 'C24';
+
+    /**
+     * milliradian
+     */
+    const REC20_MILLIRADIAN = 'C25';
+
+    /**
+     * millisecond
+     */
+    const REC20_MILLISECOND = 'C26';
+
+    /**
+     * millisiemens
+     */
+    const REC20_MILLISIEMENS = 'C27';
+
+    /**
+     * millisievert
+     */
+    const REC20_MILLISIEVERT = 'C28';
+
+    /**
+     * millitesla
+     */
+    const REC20_MILLITESLA = 'C29';
+
+    /**
+     * microvolt per metre
+     */
+    const REC20_MICROVOLT_PER_METRE = 'C3';
+
+    /**
+     * millivolt per metre
+     */
+    const REC20_MILLIVOLT_PER_METRE = 'C30';
+
+    /**
+     * milliwatt
+     */
+    const REC20_MILLIWATT = 'C31';
+
+    /**
+     * milliwatt per square metre
+     */
+    const REC20_MILLIWATT_PER_SQUARE_METRE = 'C32';
+
+    /**
+     * milliweber
+     */
+    const REC20_MILLIWEBER = 'C33';
+
+    /**
+     * mole
+     */
+    const REC20_MOLE = 'C34';
+
+    /**
+     * mole per cubic decimetre
+     */
+    const REC20_MOLE_PER_CUBIC_DECIMETRE = 'C35';
+
+    /**
+     * mole per cubic metre
+     */
+    const REC20_MOLE_PER_CUBIC_METRE = 'C36';
+
+    /**
+     * kilobit
+     */
+    const REC20_KILOBIT = 'C37';
+
+    /**
+     * mole per litre
+     */
+    const REC20_MOLE_PER_LITRE = 'C38';
+
+    /**
+     * nanoampere
+     */
+    const REC20_NANOAMPERE = 'C39';
+
+    /**
+     * nanocoulomb
+     */
+    const REC20_NANOCOULOMB = 'C40';
+
+    /**
+     * nanofarad
+     */
+    const REC20_NANOFARAD = 'C41';
+
+    /**
+     * nanofarad per metre
+     */
+    const REC20_NANOFARAD_PER_METRE = 'C42';
+
+    /**
+     * nanohenry
+     */
+    const REC20_NANOHENRY = 'C43';
+
+    /**
+     * nanohenry per metre
+     */
+    const REC20_NANOHENRY_PER_METRE = 'C44';
+
+    /**
+     * nanometre
+     */
+    const REC20_NANOMETRE = 'C45';
+
+    /**
+     * nanoohm metre
+     */
+    const REC20_NANOOHM_METRE = 'C46';
+
+    /**
+     * nanosecond
+     */
+    const REC20_NANOSECOND = 'C47';
+
+    /**
+     * nanotesla
+     */
+    const REC20_NANOTESLA = 'C48';
+
+    /**
+     * nanowatt
+     */
+    const REC20_NANOWATT = 'C49';
+
+    /**
+     * neper
+     */
+    const REC20_NEPER = 'C50';
+
+    /**
+     * neper per second
+     */
+    const REC20_NEPER_PER_SECOND = 'C51';
+
+    /**
+     * picometre
+     */
+    const REC20_PICOMETRE = 'C52';
+
+    /**
+     * newton metre second
+     */
+    const REC20_NEWTON_METRE_SECOND = 'C53';
+
+    /**
+     * newton metre squared per kilogram squared
+     */
+    const REC20_NEWTON_METRE_SQUARED_PER_KILOGRAM_SQUARED = 'C54';
+
+    /**
+     * newton per square metre
+     */
+    const REC20_NEWTON_PER_SQUARE_METRE = 'C55';
+
+    /**
+     * newton per square millimetre
+     */
+    const REC20_NEWTON_PER_SQUARE_MILLIMETRE = 'C56';
+
+    /**
+     * newton second
+     */
+    const REC20_NEWTON_SECOND = 'C57';
+
+    /**
+     * newton second per metre
+     */
+    const REC20_NEWTON_SECOND_PER_METRE = 'C58';
+
+    /**
+     * octave
+     */
+    const REC20_OCTAVE = 'C59';
+
+    /**
+     * ohm centimetre
+     */
+    const REC20_OHM_CENTIMETRE = 'C60';
+
+    /**
+     * ohm metre
+     */
+    const REC20_OHM_METRE = 'C61';
+
+    /**
+     * one
+     */
+    const REC20_ONE = 'C62';
+
+    /**
+     * parsec
+     */
+    const REC20_PARSEC = 'C63';
+
+    /**
+     * pascal per kelvin
+     */
+    const REC20_PASCAL_PER_KELVIN = 'C64';
+
+    /**
+     * pascal second
+     */
+    const REC20_PASCAL_SECOND = 'C65';
+
+    /**
+     * pascal second per cubic metre
+     */
+    const REC20_PASCAL_SECOND_PER_CUBIC_METRE = 'C66';
+
+    /**
+     * pascal second per metre
+     */
+    const REC20_PASCAL_SECOND_PER_METRE = 'C67';
+
+    /**
+     * petajoule
+     */
+    const REC20_PETAJOULE = 'C68';
+
+    /**
+     * phon
+     */
+    const REC20_PHON = 'C69';
+
+    /**
+     * centipoise
+     */
+    const REC20_CENTIPOISE = 'C7';
+
+    /**
+     * picoampere
+     */
+    const REC20_PICOAMPERE = 'C70';
+
+    /**
+     * picocoulomb
+     */
+    const REC20_PICOCOULOMB = 'C71';
+
+    /**
+     * picofarad per metre
+     */
+    const REC20_PICOFARAD_PER_METRE = 'C72';
+
+    /**
+     * picohenry
+     */
+    const REC20_PICOHENRY = 'C73';
+
+    /**
+     * kilobit per second
+     */
+    const REC20_KILOBIT_PER_SECOND = 'C74';
+
+    /**
+     * picowatt
+     */
+    const REC20_PICOWATT = 'C75';
+
+    /**
+     * picowatt per square metre
+     */
+    const REC20_PICOWATT_PER_SQUARE_METRE = 'C76';
+
+    /**
+     * pound-force
+     */
+    const REC20_POUNDFORCE = 'C78';
+
+    /**
+     * kilovolt ampere hour
+     */
+    const REC20_KILOVOLT_AMPERE_HOUR = 'C79';
+
+    /**
+     * millicoulomb per kilogram
+     */
+    const REC20_MILLICOULOMB_PER_KILOGRAM = 'C8';
+
+    /**
+     * rad
+     */
+    const REC20_RAD = 'C80';
+
+    /**
+     * radian
+     */
+    const REC20_RADIAN = 'C81';
+
+    /**
+     * radian square metre per mole
+     */
+    const REC20_RADIAN_SQUARE_METRE_PER_MOLE = 'C82';
+
+    /**
+     * radian square metre per kilogram
+     */
+    const REC20_RADIAN_SQUARE_METRE_PER_KILOGRAM = 'C83';
+
+    /**
+     * radian per metre
+     */
+    const REC20_RADIAN_PER_METRE = 'C84';
+
+    /**
+     * reciprocal angstrom
+     */
+    const REC20_RECIPROCAL_ANGSTROM = 'C85';
+
+    /**
+     * reciprocal cubic metre
+     */
+    const REC20_RECIPROCAL_CUBIC_METRE = 'C86';
+
+    /**
+     * reciprocal cubic metre per second
+     */
+    const REC20_RECIPROCAL_CUBIC_METRE_PER_SECOND = 'C87';
+
+    /**
+     * reciprocal electron volt per cubic metre
+     */
+    const REC20_RECIPROCAL_ELECTRON_VOLT_PER_CUBIC_METRE = 'C88';
+
+    /**
+     * reciprocal henry
+     */
+    const REC20_RECIPROCAL_HENRY = 'C89';
+
+    /**
+     * coil group
+     */
+    const REC20_COIL_GROUP = 'C9';
+
+    /**
+     * reciprocal joule per cubic metre
+     */
+    const REC20_RECIPROCAL_JOULE_PER_CUBIC_METRE = 'C90';
+
+    /**
+     * reciprocal kelvin or kelvin to the power minus one
+     */
+    const REC20_RECIPROCAL_KELVIN_OR_KELVIN_TO_THE_POWER_MINUS_ONE = 'C91';
+
+    /**
+     * reciprocal metre
+     */
+    const REC20_RECIPROCAL_METRE = 'C92';
+
+    /**
+     * reciprocal square metre
+     */
+    const REC20_RECIPROCAL_SQUARE_METRE = 'C93';
+
+    /**
+     * reciprocal minute
+     */
+    const REC20_RECIPROCAL_MINUTE = 'C94';
+
+    /**
+     * reciprocal mole
+     */
+    const REC20_RECIPROCAL_MOLE = 'C95';
+
+    /**
+     * reciprocal pascal or pascal to the power minus one
+     */
+    const REC20_RECIPROCAL_PASCAL_OR_PASCAL_TO_THE_POWER_MINUS_ONE = 'C96';
+
+    /**
+     * reciprocal second
+     */
+    const REC20_RECIPROCAL_SECOND = 'C97';
+
+    /**
+     * reciprocal second per metre squared
+     */
+    const REC20_RECIPROCAL_SECOND_PER_METRE_SQUARED = 'C99';
+
+    /**
+     * carrying capacity in metric ton
+     */
+    const REC20_CARRYING_CAPACITY_IN_METRIC_TON = 'CCT';
+
+    /**
+     * candela
+     */
+    const REC20_CANDELA = 'CDL';
+
+    /**
+     * degree Celsius
+     */
+    const REC20_DEGREE_CELSIUS = 'CEL';
+
+    /**
+     * hundred
+     */
+    const REC20_HUNDRED = 'CEN';
+
+    /**
+     * card
+     */
+    const REC20_CARD = 'CG';
+
+    /**
+     * centigram
+     */
+    const REC20_CENTIGRAM = 'CGM';
+
+    /**
+     * coulomb per kilogram
+     */
+    const REC20_COULOMB_PER_KILOGRAM = 'CKG';
+
+    /**
+     * hundred leave
+     */
+    const REC20_HUNDRED_LEAVE = 'CLF';
+
+    /**
+     * centilitre
+     */
+    const REC20_CENTILITRE = 'CLT';
+
+    /**
+     * square centimetre
+     */
+    const REC20_SQUARE_CENTIMETRE = 'CMK';
+
+    /**
+     * cubic centimetre
+     */
+    const REC20_CUBIC_CENTIMETRE = 'CMQ';
+
+    /**
+     * centimetre
+     */
+    const REC20_CENTIMETRE = 'CMT';
+
+    /**
+     * hundred pack
+     */
+    const REC20_HUNDRED_PACK = 'CNP';
+
+    /**
+     * cental (UK)
+     */
+    const REC20_CENTAL_UK = 'CNT';
+
+    /**
+     * coulomb
+     */
+    const REC20_COULOMB = 'COU';
+
+    /**
+     * content gram
+     */
+    const REC20_CONTENT_GRAM = 'CTG';
+
+    /**
+     * metric carat
+     */
+    const REC20_METRIC_CARAT = 'CTM';
+
+    /**
+     * content ton (metric)
+     */
+    const REC20_CONTENT_TON_METRIC = 'CTN';
+
+    /**
+     * curie
+     */
+    const REC20_CURIE = 'CUR';
+
+    /**
+     * hundred pound (cwt) / hundred weight (US)
+     */
+    const REC20_HUNDRED_POUND_CWT___HUNDRED_WEIGHT_US = 'CWA';
+
+    /**
+     * hundred weight (UK)
+     */
+    const REC20_HUNDRED_WEIGHT_UK = 'CWI';
+
+    /**
+     * kilowatt hour per hour
+     */
+    const REC20_KILOWATT_HOUR_PER_HOUR = 'D03';
+
+    /**
+     * lot  [unit of weight]
+     */
+    const REC20_LOT__UNIT_OF_WEIGHT = 'D04';
+
+    /**
+     * reciprocal second per steradian
+     */
+    const REC20_RECIPROCAL_SECOND_PER_STERADIAN = 'D1';
+
+    /**
+     * siemens per metre
+     */
+    const REC20_SIEMENS_PER_METRE = 'D10';
+
+    /**
+     * mebibit
+     */
+    const REC20_MEBIBIT = 'D11';
+
+    /**
+     * siemens square metre per mole
+     */
+    const REC20_SIEMENS_SQUARE_METRE_PER_MOLE = 'D12';
+
+    /**
+     * sievert
+     */
+    const REC20_SIEVERT = 'D13';
+
+    /**
+     * sone
+     */
+    const REC20_SONE = 'D15';
+
+    /**
+     * square centimetre per erg
+     */
+    const REC20_SQUARE_CENTIMETRE_PER_ERG = 'D16';
+
+    /**
+     * square centimetre per steradian erg
+     */
+    const REC20_SQUARE_CENTIMETRE_PER_STERADIAN_ERG = 'D17';
+
+    /**
+     * metre kelvin
+     */
+    const REC20_METRE_KELVIN = 'D18';
+
+    /**
+     * square metre kelvin per watt
+     */
+    const REC20_SQUARE_METRE_KELVIN_PER_WATT = 'D19';
+
+    /**
+     * reciprocal second per steradian metre squared
+     */
+    const REC20_RECIPROCAL_SECOND_PER_STERADIAN_METRE_SQUARED = 'D2';
+
+    /**
+     * square metre per joule
+     */
+    const REC20_SQUARE_METRE_PER_JOULE = 'D20';
+
+    /**
+     * square metre per kilogram
+     */
+    const REC20_SQUARE_METRE_PER_KILOGRAM = 'D21';
+
+    /**
+     * square metre per mole
+     */
+    const REC20_SQUARE_METRE_PER_MOLE = 'D22';
+
+    /**
+     * pen gram (protein)
+     */
+    const REC20_PEN_GRAM_PROTEIN = 'D23';
+
+    /**
+     * square metre per steradian
+     */
+    const REC20_SQUARE_METRE_PER_STERADIAN = 'D24';
+
+    /**
+     * square metre per steradian joule
+     */
+    const REC20_SQUARE_METRE_PER_STERADIAN_JOULE = 'D25';
+
+    /**
+     * square metre per volt second
+     */
+    const REC20_SQUARE_METRE_PER_VOLT_SECOND = 'D26';
+
+    /**
+     * steradian
+     */
+    const REC20_STERADIAN = 'D27';
+
+    /**
+     * terahertz
+     */
+    const REC20_TERAHERTZ = 'D29';
+
+    /**
+     * terajoule
+     */
+    const REC20_TERAJOULE = 'D30';
+
+    /**
+     * terawatt
+     */
+    const REC20_TERAWATT = 'D31';
+
+    /**
+     * terawatt hour
+     */
+    const REC20_TERAWATT_HOUR = 'D32';
+
+    /**
+     * tesla
+     */
+    const REC20_TESLA = 'D33';
+
+    /**
+     * tex
+     */
+    const REC20_TEX = 'D34';
+
+    /**
+     * megabit
+     */
+    const REC20_MEGABIT = 'D36';
+
+    /**
+     * tonne per cubic metre
+     */
+    const REC20_TONNE_PER_CUBIC_METRE = 'D41';
+
+    /**
+     * tropical year
+     */
+    const REC20_TROPICAL_YEAR = 'D42';
+
+    /**
+     * unified atomic mass unit
+     */
+    const REC20_UNIFIED_ATOMIC_MASS_UNIT = 'D43';
+
+    /**
+     * var
+     */
+    const REC20_VAR = 'D44';
+
+    /**
+     * volt squared per kelvin squared
+     */
+    const REC20_VOLT_SQUARED_PER_KELVIN_SQUARED = 'D45';
+
+    /**
+     * volt - ampere
+     */
+    const REC20_VOLT__AMPERE = 'D46';
+
+    /**
+     * volt per centimetre
+     */
+    const REC20_VOLT_PER_CENTIMETRE = 'D47';
+
+    /**
+     * volt per kelvin
+     */
+    const REC20_VOLT_PER_KELVIN = 'D48';
+
+    /**
+     * millivolt per kelvin
+     */
+    const REC20_MILLIVOLT_PER_KELVIN = 'D49';
+
+    /**
+     * kilogram per square centimetre
+     */
+    const REC20_KILOGRAM_PER_SQUARE_CENTIMETRE = 'D5';
+
+    /**
+     * volt per metre
+     */
+    const REC20_VOLT_PER_METRE = 'D50';
+
+    /**
+     * volt per millimetre
+     */
+    const REC20_VOLT_PER_MILLIMETRE = 'D51';
+
+    /**
+     * watt per kelvin
+     */
+    const REC20_WATT_PER_KELVIN = 'D52';
+
+    /**
+     * watt per metre kelvin
+     */
+    const REC20_WATT_PER_METRE_KELVIN = 'D53';
+
+    /**
+     * watt per square metre
+     */
+    const REC20_WATT_PER_SQUARE_METRE = 'D54';
+
+    /**
+     * watt per square metre kelvin
+     */
+    const REC20_WATT_PER_SQUARE_METRE_KELVIN = 'D55';
+
+    /**
+     * watt per square metre kelvin to the fourth power
+     */
+    const REC20_WATT_PER_SQUARE_METRE_KELVIN_TO_THE_FOURTH_POWER = 'D56';
+
+    /**
+     * watt per steradian
+     */
+    const REC20_WATT_PER_STERADIAN = 'D57';
+
+    /**
+     * watt per steradian square metre
+     */
+    const REC20_WATT_PER_STERADIAN_SQUARE_METRE = 'D58';
+
+    /**
+     * weber per metre
+     */
+    const REC20_WEBER_PER_METRE = 'D59';
+
+    /**
+     * roentgen per second
+     */
+    const REC20_ROENTGEN_PER_SECOND = 'D6';
+
+    /**
+     * weber per millimetre
+     */
+    const REC20_WEBER_PER_MILLIMETRE = 'D60';
+
+    /**
+     * minute [unit of angle]
+     */
+    const REC20_MINUTE_UNIT_OF_ANGLE = 'D61';
+
+    /**
+     * second [unit of angle]
+     */
+    const REC20_SECOND_UNIT_OF_ANGLE = 'D62';
+
+    /**
+     * book
+     */
+    const REC20_BOOK = 'D63';
+
+    /**
+     * round
+     */
+    const REC20_ROUND = 'D65';
+
+    /**
+     * number of words
+     */
+    const REC20_NUMBER_OF_WORDS = 'D68';
+
+    /**
+     * inch to the fourth power
+     */
+    const REC20_INCH_TO_THE_FOURTH_POWER = 'D69';
+
+    /**
+     * joule square metre
+     */
+    const REC20_JOULE_SQUARE_METRE = 'D73';
+
+    /**
+     * kilogram per mole
+     */
+    const REC20_KILOGRAM_PER_MOLE = 'D74';
+
+    /**
+     * megacoulomb
+     */
+    const REC20_MEGACOULOMB = 'D77';
+
+    /**
+     * megajoule per second
+     */
+    const REC20_MEGAJOULE_PER_SECOND = 'D78';
+
+    /**
+     * microwatt
+     */
+    const REC20_MICROWATT = 'D80';
+
+    /**
+     * microtesla
+     */
+    const REC20_MICROTESLA = 'D81';
+
+    /**
+     * microvolt
+     */
+    const REC20_MICROVOLT = 'D82';
+
+    /**
+     * millinewton metre
+     */
+    const REC20_MILLINEWTON_METRE = 'D83';
+
+    /**
+     * microwatt per square metre
+     */
+    const REC20_MICROWATT_PER_SQUARE_METRE = 'D85';
+
+    /**
+     * millicoulomb
+     */
+    const REC20_MILLICOULOMB = 'D86';
+
+    /**
+     * millimole per kilogram
+     */
+    const REC20_MILLIMOLE_PER_KILOGRAM = 'D87';
+
+    /**
+     * millicoulomb per cubic metre
+     */
+    const REC20_MILLICOULOMB_PER_CUBIC_METRE = 'D88';
+
+    /**
+     * millicoulomb per square metre
+     */
+    const REC20_MILLICOULOMB_PER_SQUARE_METRE = 'D89';
+
+    /**
+     * rem
+     */
+    const REC20_REM = 'D91';
+
+    /**
+     * second per cubic metre
+     */
+    const REC20_SECOND_PER_CUBIC_METRE = 'D93';
+
+    /**
+     * second per cubic metre radian
+     */
+    const REC20_SECOND_PER_CUBIC_METRE_RADIAN = 'D94';
+
+    /**
+     * joule per gram
+     */
+    const REC20_JOULE_PER_GRAM = 'D95';
+
+    /**
+     * decare
+     */
+    const REC20_DECARE = 'DAA';
+
+    /**
+     * ten day
+     */
+    const REC20_TEN_DAY = 'DAD';
+
+    /**
+     * day
+     */
+    const REC20_DAY = 'DAY';
+
+    /**
+     * dry pound
+     */
+    const REC20_DRY_POUND = 'DB';
+
+    /**
+     * degree [unit of angle]
+     */
+    const REC20_DEGREE_UNIT_OF_ANGLE = 'DD';
+
+    /**
+     * decade
+     */
+    const REC20_DECADE = 'DEC';
+
+    /**
+     * decigram
+     */
+    const REC20_DECIGRAM = 'DG';
+
+    /**
+     * decagram
+     */
+    const REC20_DECAGRAM = 'DJ';
+
+    /**
+     * decilitre
+     */
+    const REC20_DECILITRE = 'DLT';
+
+    /**
+     * cubic decametre
+     */
+    const REC20_CUBIC_DECAMETRE = 'DMA';
+
+    /**
+     * square decimetre
+     */
+    const REC20_SQUARE_DECIMETRE = 'DMK';
+
+    /**
+     * standard kilolitre
+     */
+    const REC20_STANDARD_KILOLITRE = 'DMO';
+
+    /**
+     * cubic decimetre
+     */
+    const REC20_CUBIC_DECIMETRE = 'DMQ';
+
+    /**
+     * decimetre
+     */
+    const REC20_DECIMETRE = 'DMT';
+
+    /**
+     * decinewton metre
+     */
+    const REC20_DECINEWTON_METRE = 'DN';
+
+    /**
+     * dozen piece
+     */
+    const REC20_DOZEN_PIECE = 'DPC';
+
+    /**
+     * dozen pair
+     */
+    const REC20_DOZEN_PAIR = 'DPR';
+
+    /**
+     * displacement tonnage
+     */
+    const REC20_DISPLACEMENT_TONNAGE = 'DPT';
+
+    /**
+     * dram (US)
+     */
+    const REC20_DRAM_US = 'DRA';
+
+    /**
+     * dram (UK)
+     */
+    const REC20_DRAM_UK = 'DRI';
+
+    /**
+     * dozen roll
+     */
+    const REC20_DOZEN_ROLL = 'DRL';
+
+    /**
+     * dry ton
+     */
+    const REC20_DRY_TON = 'DT';
+
+    /**
+     * decitonne
+     */
+    const REC20_DECITONNE = 'DTN';
+
+    /**
+     * pennyweight
+     */
+    const REC20_PENNYWEIGHT = 'DWT';
+
+    /**
+     * dozen
+     */
+    const REC20_DOZEN = 'DZN';
+
+    /**
+     * dozen pack
+     */
+    const REC20_DOZEN_PACK = 'DZP';
+
+    /**
+     * newton per square centimetre
+     */
+    const REC20_NEWTON_PER_SQUARE_CENTIMETRE = 'E01';
+
+    /**
+     * megawatt hour per hour
+     */
+    const REC20_MEGAWATT_HOUR_PER_HOUR = 'E07';
+
+    /**
+     * megawatt per hertz
+     */
+    const REC20_MEGAWATT_PER_HERTZ = 'E08';
+
+    /**
+     * milliampere hour
+     */
+    const REC20_MILLIAMPERE_HOUR = 'E09';
+
+    /**
+     * degree day
+     */
+    const REC20_DEGREE_DAY = 'E10';
+
+    /**
+     * mille
+     */
+    const REC20_MILLE = 'E12';
+
+    /**
+     * kilocalorie (international table)
+     */
+    const REC20_KILOCALORIE_INTERNATIONAL_TABLE = 'E14';
+
+    /**
+     * kilocalorie (thermochemical) per hour
+     */
+    const REC20_KILOCALORIE_THERMOCHEMICAL_PER_HOUR = 'E15';
+
+    /**
+     * million Btu(IT) per hour
+     */
+    const REC20_MILLION_BTUIT_PER_HOUR = 'E16';
+
+    /**
+     * cubic foot per second
+     */
+    const REC20_CUBIC_FOOT_PER_SECOND = 'E17';
+
+    /**
+     * tonne per hour
+     */
+    const REC20_TONNE_PER_HOUR = 'E18';
+
+    /**
+     * ping
+     */
+    const REC20_PING = 'E19';
+
+    /**
+     * megabit per second
+     */
+    const REC20_MEGABIT_PER_SECOND = 'E20';
+
+    /**
+     * shares
+     */
+    const REC20_SHARES = 'E21';
+
+    /**
+     * TEU
+     */
+    const REC20_TEU = 'E22';
+
+    /**
+     * tyre
+     */
+    const REC20_TYRE = 'E23';
+
+    /**
+     * active unit
+     */
+    const REC20_ACTIVE_UNIT = 'E25';
+
+    /**
+     * dose
+     */
+    const REC20_DOSE = 'E27';
+
+    /**
+     * air dry ton
+     */
+    const REC20_AIR_DRY_TON = 'E28';
+
+    /**
+     * strand
+     */
+    const REC20_STRAND = 'E30';
+
+    /**
+     * square metre per litre
+     */
+    const REC20_SQUARE_METRE_PER_LITRE = 'E31';
+
+    /**
+     * litre per hour
+     */
+    const REC20_LITRE_PER_HOUR = 'E32';
+
+    /**
+     * foot per thousand
+     */
+    const REC20_FOOT_PER_THOUSAND = 'E33';
+
+    /**
+     * gigabyte
+     */
+    const REC20_GIGABYTE = 'E34';
+
+    /**
+     * terabyte
+     */
+    const REC20_TERABYTE = 'E35';
+
+    /**
+     * petabyte
+     */
+    const REC20_PETABYTE = 'E36';
+
+    /**
+     * pixel
+     */
+    const REC20_PIXEL = 'E37';
+
+    /**
+     * megapixel
+     */
+    const REC20_MEGAPIXEL = 'E38';
+
+    /**
+     * dots per inch
+     */
+    const REC20_DOTS_PER_INCH = 'E39';
+
+    /**
+     * gross kilogram
+     */
+    const REC20_GROSS_KILOGRAM = 'E4';
+
+    /**
+     * part per hundred thousand
+     */
+    const REC20_PART_PER_HUNDRED_THOUSAND = 'E40';
+
+    /**
+     * kilogram-force per square millimetre
+     */
+    const REC20_KILOGRAMFORCE_PER_SQUARE_MILLIMETRE = 'E41';
+
+    /**
+     * kilogram-force per square centimetre
+     */
+    const REC20_KILOGRAMFORCE_PER_SQUARE_CENTIMETRE = 'E42';
+
+    /**
+     * joule per square centimetre
+     */
+    const REC20_JOULE_PER_SQUARE_CENTIMETRE = 'E43';
+
+    /**
+     * kilogram-force metre per square centimetre
+     */
+    const REC20_KILOGRAMFORCE_METRE_PER_SQUARE_CENTIMETRE = 'E44';
+
+    /**
+     * milliohm
+     */
+    const REC20_MILLIOHM = 'E45';
+
+    /**
+     * kilowatt hour per cubic metre
+     */
+    const REC20_KILOWATT_HOUR_PER_CUBIC_METRE = 'E46';
+
+    /**
+     * kilowatt hour per kelvin
+     */
+    const REC20_KILOWATT_HOUR_PER_KELVIN = 'E47';
+
+    /**
+     * service unit
+     */
+    const REC20_SERVICE_UNIT = 'E48';
+
+    /**
+     * working day
+     */
+    const REC20_WORKING_DAY = 'E49';
+
+    /**
+     * accounting unit
+     */
+    const REC20_ACCOUNTING_UNIT = 'E50';
+
+    /**
+     * job
+     */
+    const REC20_JOB = 'E51';
+
+    /**
+     * run foot
+     */
+    const REC20_RUN_FOOT = 'E52';
+
+    /**
+     * test
+     */
+    const REC20_TEST = 'E53';
+
+    /**
+     * trip
+     */
+    const REC20_TRIP = 'E54';
+
+    /**
+     * use
+     */
+    const REC20_USE = 'E55';
+
+    /**
+     * well
+     */
+    const REC20_WELL = 'E56';
+
+    /**
+     * zone
+     */
+    const REC20_ZONE = 'E57';
+
+    /**
+     * exabit per second
+     */
+    const REC20_EXABIT_PER_SECOND = 'E58';
+
+    /**
+     * exbibyte
+     */
+    const REC20_EXBIBYTE = 'E59';
+
+    /**
+     * pebibyte
+     */
+    const REC20_PEBIBYTE = 'E60';
+
+    /**
+     * tebibyte
+     */
+    const REC20_TEBIBYTE = 'E61';
+
+    /**
+     * gibibyte
+     */
+    const REC20_GIBIBYTE = 'E62';
+
+    /**
+     * mebibyte
+     */
+    const REC20_MEBIBYTE = 'E63';
+
+    /**
+     * kibibyte
+     */
+    const REC20_KIBIBYTE = 'E64';
+
+    /**
+     * exbibit per metre
+     */
+    const REC20_EXBIBIT_PER_METRE = 'E65';
+
+    /**
+     * exbibit per square metre
+     */
+    const REC20_EXBIBIT_PER_SQUARE_METRE = 'E66';
+
+    /**
+     * exbibit per cubic metre
+     */
+    const REC20_EXBIBIT_PER_CUBIC_METRE = 'E67';
+
+    /**
+     * gigabyte per second
+     */
+    const REC20_GIGABYTE_PER_SECOND = 'E68';
+
+    /**
+     * gibibit per metre
+     */
+    const REC20_GIBIBIT_PER_METRE = 'E69';
+
+    /**
+     * gibibit per square metre
+     */
+    const REC20_GIBIBIT_PER_SQUARE_METRE = 'E70';
+
+    /**
+     * gibibit per cubic metre
+     */
+    const REC20_GIBIBIT_PER_CUBIC_METRE = 'E71';
+
+    /**
+     * kibibit per metre
+     */
+    const REC20_KIBIBIT_PER_METRE = 'E72';
+
+    /**
+     * kibibit per square metre
+     */
+    const REC20_KIBIBIT_PER_SQUARE_METRE = 'E73';
+
+    /**
+     * kibibit per cubic metre
+     */
+    const REC20_KIBIBIT_PER_CUBIC_METRE = 'E74';
+
+    /**
+     * mebibit per metre
+     */
+    const REC20_MEBIBIT_PER_METRE = 'E75';
+
+    /**
+     * mebibit per square metre
+     */
+    const REC20_MEBIBIT_PER_SQUARE_METRE = 'E76';
+
+    /**
+     * mebibit per cubic metre
+     */
+    const REC20_MEBIBIT_PER_CUBIC_METRE = 'E77';
+
+    /**
+     * petabit
+     */
+    const REC20_PETABIT = 'E78';
+
+    /**
+     * petabit per second
+     */
+    const REC20_PETABIT_PER_SECOND = 'E79';
+
+    /**
+     * pebibit per metre
+     */
+    const REC20_PEBIBIT_PER_METRE = 'E80';
+
+    /**
+     * pebibit per square metre
+     */
+    const REC20_PEBIBIT_PER_SQUARE_METRE = 'E81';
+
+    /**
+     * pebibit per cubic metre
+     */
+    const REC20_PEBIBIT_PER_CUBIC_METRE = 'E82';
+
+    /**
+     * terabit
+     */
+    const REC20_TERABIT = 'E83';
+
+    /**
+     * terabit per second
+     */
+    const REC20_TERABIT_PER_SECOND = 'E84';
+
+    /**
+     * tebibit per metre
+     */
+    const REC20_TEBIBIT_PER_METRE = 'E85';
+
+    /**
+     * tebibit per cubic metre
+     */
+    const REC20_TEBIBIT_PER_CUBIC_METRE = 'E86';
+
+    /**
+     * tebibit per square metre
+     */
+    const REC20_TEBIBIT_PER_SQUARE_METRE = 'E87';
+
+    /**
+     * bit per metre
+     */
+    const REC20_BIT_PER_METRE = 'E88';
+
+    /**
+     * bit per square metre
+     */
+    const REC20_BIT_PER_SQUARE_METRE = 'E89';
+
+    /**
+     * reciprocal centimetre
+     */
+    const REC20_RECIPROCAL_CENTIMETRE = 'E90';
+
+    /**
+     * reciprocal day
+     */
+    const REC20_RECIPROCAL_DAY = 'E91';
+
+    /**
+     * cubic decimetre per hour
+     */
+    const REC20_CUBIC_DECIMETRE_PER_HOUR = 'E92';
+
+    /**
+     * kilogram per hour
+     */
+    const REC20_KILOGRAM_PER_HOUR = 'E93';
+
+    /**
+     * kilomole per second
+     */
+    const REC20_KILOMOLE_PER_SECOND = 'E94';
+
+    /**
+     * mole per second
+     */
+    const REC20_MOLE_PER_SECOND = 'E95';
+
+    /**
+     * degree per second
+     */
+    const REC20_DEGREE_PER_SECOND = 'E96';
+
+    /**
+     * millimetre per degree Celcius metre
+     */
+    const REC20_MILLIMETRE_PER_DEGREE_CELCIUS_METRE = 'E97';
+
+    /**
+     * degree Celsius per kelvin
+     */
+    const REC20_DEGREE_CELSIUS_PER_KELVIN = 'E98';
+
+    /**
+     * hectopascal per bar
+     */
+    const REC20_HECTOPASCAL_PER_BAR = 'E99';
+
+    /**
+     * each
+     */
+    const REC20_EACH = 'EA';
+
+    /**
+     * electronic mail box
+     */
+    const REC20_ELECTRONIC_MAIL_BOX = 'EB';
+
+    /**
+     * equivalent gallon
+     */
+    const REC20_EQUIVALENT_GALLON = 'EQ';
+
+    /**
+     * bit per cubic metre
+     */
+    const REC20_BIT_PER_CUBIC_METRE = 'F01';
+
+    /**
+     * kelvin per kelvin
+     */
+    const REC20_KELVIN_PER_KELVIN = 'F02';
+
+    /**
+     * kilopascal per bar
+     */
+    const REC20_KILOPASCAL_PER_BAR = 'F03';
+
+    /**
+     * millibar per bar
+     */
+    const REC20_MILLIBAR_PER_BAR = 'F04';
+
+    /**
+     * megapascal per bar
+     */
+    const REC20_MEGAPASCAL_PER_BAR = 'F05';
+
+    /**
+     * poise per bar
+     */
+    const REC20_POISE_PER_BAR = 'F06';
+
+    /**
+     * pascal per bar
+     */
+    const REC20_PASCAL_PER_BAR = 'F07';
+
+    /**
+     * milliampere per inch
+     */
+    const REC20_MILLIAMPERE_PER_INCH = 'F08';
+
+    /**
+     * kelvin per hour
+     */
+    const REC20_KELVIN_PER_HOUR = 'F10';
+
+    /**
+     * kelvin per minute
+     */
+    const REC20_KELVIN_PER_MINUTE = 'F11';
+
+    /**
+     * kelvin per second
+     */
+    const REC20_KELVIN_PER_SECOND = 'F12';
+
+    /**
+     * slug
+     */
+    const REC20_SLUG = 'F13';
+
+    /**
+     * gram per kelvin
+     */
+    const REC20_GRAM_PER_KELVIN = 'F14';
+
+    /**
+     * kilogram per kelvin
+     */
+    const REC20_KILOGRAM_PER_KELVIN = 'F15';
+
+    /**
+     * milligram per kelvin
+     */
+    const REC20_MILLIGRAM_PER_KELVIN = 'F16';
+
+    /**
+     * pound-force per foot
+     */
+    const REC20_POUNDFORCE_PER_FOOT = 'F17';
+
+    /**
+     * kilogram square centimetre
+     */
+    const REC20_KILOGRAM_SQUARE_CENTIMETRE = 'F18';
+
+    /**
+     * kilogram square millimetre
+     */
+    const REC20_KILOGRAM_SQUARE_MILLIMETRE = 'F19';
+
+    /**
+     * pound inch squared
+     */
+    const REC20_POUND_INCH_SQUARED = 'F20';
+
+    /**
+     * pound-force inch
+     */
+    const REC20_POUNDFORCE_INCH = 'F21';
+
+    /**
+     * pound-force foot per ampere
+     */
+    const REC20_POUNDFORCE_FOOT_PER_AMPERE = 'F22';
+
+    /**
+     * gram per cubic decimetre
+     */
+    const REC20_GRAM_PER_CUBIC_DECIMETRE = 'F23';
+
+    /**
+     * kilogram per kilomol
+     */
+    const REC20_KILOGRAM_PER_KILOMOL = 'F24';
+
+    /**
+     * gram per hertz
+     */
+    const REC20_GRAM_PER_HERTZ = 'F25';
+
+    /**
+     * gram per day
+     */
+    const REC20_GRAM_PER_DAY = 'F26';
+
+    /**
+     * gram per hour
+     */
+    const REC20_GRAM_PER_HOUR = 'F27';
+
+    /**
+     * gram per minute
+     */
+    const REC20_GRAM_PER_MINUTE = 'F28';
+
+    /**
+     * gram per second
+     */
+    const REC20_GRAM_PER_SECOND = 'F29';
+
+    /**
+     * kilogram per day
+     */
+    const REC20_KILOGRAM_PER_DAY = 'F30';
+
+    /**
+     * kilogram per minute
+     */
+    const REC20_KILOGRAM_PER_MINUTE = 'F31';
+
+    /**
+     * milligram per day
+     */
+    const REC20_MILLIGRAM_PER_DAY = 'F32';
+
+    /**
+     * milligram per minute
+     */
+    const REC20_MILLIGRAM_PER_MINUTE = 'F33';
+
+    /**
+     * milligram per second
+     */
+    const REC20_MILLIGRAM_PER_SECOND = 'F34';
+
+    /**
+     * gram per day kelvin
+     */
+    const REC20_GRAM_PER_DAY_KELVIN = 'F35';
+
+    /**
+     * gram per hour kelvin
+     */
+    const REC20_GRAM_PER_HOUR_KELVIN = 'F36';
+
+    /**
+     * gram per minute kelvin
+     */
+    const REC20_GRAM_PER_MINUTE_KELVIN = 'F37';
+
+    /**
+     * gram per second kelvin
+     */
+    const REC20_GRAM_PER_SECOND_KELVIN = 'F38';
+
+    /**
+     * kilogram per day kelvin
+     */
+    const REC20_KILOGRAM_PER_DAY_KELVIN = 'F39';
+
+    /**
+     * kilogram per hour kelvin
+     */
+    const REC20_KILOGRAM_PER_HOUR_KELVIN = 'F40';
+
+    /**
+     * kilogram per minute kelvin
+     */
+    const REC20_KILOGRAM_PER_MINUTE_KELVIN = 'F41';
+
+    /**
+     * kilogram per second kelvin
+     */
+    const REC20_KILOGRAM_PER_SECOND_KELVIN = 'F42';
+
+    /**
+     * milligram per day kelvin
+     */
+    const REC20_MILLIGRAM_PER_DAY_KELVIN = 'F43';
+
+    /**
+     * milligram per hour kelvin
+     */
+    const REC20_MILLIGRAM_PER_HOUR_KELVIN = 'F44';
+
+    /**
+     * milligram per minute kelvin
+     */
+    const REC20_MILLIGRAM_PER_MINUTE_KELVIN = 'F45';
+
+    /**
+     * milligram per second kelvin
+     */
+    const REC20_MILLIGRAM_PER_SECOND_KELVIN = 'F46';
+
+    /**
+     * newton per millimetre
+     */
+    const REC20_NEWTON_PER_MILLIMETRE = 'F47';
+
+    /**
+     * pound-force per inch
+     */
+    const REC20_POUNDFORCE_PER_INCH = 'F48';
+
+    /**
+     * rod [unit of distance]
+     */
+    const REC20_ROD_UNIT_OF_DISTANCE = 'F49';
+
+    /**
+     * micrometre per kelvin
+     */
+    const REC20_MICROMETRE_PER_KELVIN = 'F50';
+
+    /**
+     * centimetre per kelvin
+     */
+    const REC20_CENTIMETRE_PER_KELVIN = 'F51';
+
+    /**
+     * metre per kelvin
+     */
+    const REC20_METRE_PER_KELVIN = 'F52';
+
+    /**
+     * millimetre per kelvin
+     */
+    const REC20_MILLIMETRE_PER_KELVIN = 'F53';
+
+    /**
+     * milliohm per metre
+     */
+    const REC20_MILLIOHM_PER_METRE = 'F54';
+
+    /**
+     * ohm per mile (statute mile)
+     */
+    const REC20_OHM_PER_MILE_STATUTE_MILE = 'F55';
+
+    /**
+     * ohm per kilometre
+     */
+    const REC20_OHM_PER_KILOMETRE = 'F56';
+
+    /**
+     * milliampere per pound-force per square inch
+     */
+    const REC20_MILLIAMPERE_PER_POUNDFORCE_PER_SQUARE_INCH = 'F57';
+
+    /**
+     * reciprocal bar
+     */
+    const REC20_RECIPROCAL_BAR = 'F58';
+
+    /**
+     * milliampere per bar
+     */
+    const REC20_MILLIAMPERE_PER_BAR = 'F59';
+
+    /**
+     * degree Celsius per bar
+     */
+    const REC20_DEGREE_CELSIUS_PER_BAR = 'F60';
+
+    /**
+     * kelvin per bar
+     */
+    const REC20_KELVIN_PER_BAR = 'F61';
+
+    /**
+     * gram per day bar
+     */
+    const REC20_GRAM_PER_DAY_BAR = 'F62';
+
+    /**
+     * gram per hour bar
+     */
+    const REC20_GRAM_PER_HOUR_BAR = 'F63';
+
+    /**
+     * gram per minute bar
+     */
+    const REC20_GRAM_PER_MINUTE_BAR = 'F64';
+
+    /**
+     * gram per second bar
+     */
+    const REC20_GRAM_PER_SECOND_BAR = 'F65';
+
+    /**
+     * kilogram per day bar
+     */
+    const REC20_KILOGRAM_PER_DAY_BAR = 'F66';
+
+    /**
+     * kilogram per hour bar
+     */
+    const REC20_KILOGRAM_PER_HOUR_BAR = 'F67';
+
+    /**
+     * kilogram per minute bar
+     */
+    const REC20_KILOGRAM_PER_MINUTE_BAR = 'F68';
+
+    /**
+     * kilogram per second bar
+     */
+    const REC20_KILOGRAM_PER_SECOND_BAR = 'F69';
+
+    /**
+     * milligram per day bar
+     */
+    const REC20_MILLIGRAM_PER_DAY_BAR = 'F70';
+
+    /**
+     * milligram per hour bar
+     */
+    const REC20_MILLIGRAM_PER_HOUR_BAR = 'F71';
+
+    /**
+     * milligram per minute bar
+     */
+    const REC20_MILLIGRAM_PER_MINUTE_BAR = 'F72';
+
+    /**
+     * milligram per second bar
+     */
+    const REC20_MILLIGRAM_PER_SECOND_BAR = 'F73';
+
+    /**
+     * gram per bar
+     */
+    const REC20_GRAM_PER_BAR = 'F74';
+
+    /**
+     * milligram per bar
+     */
+    const REC20_MILLIGRAM_PER_BAR = 'F75';
+
+    /**
+     * milliampere per millimetre
+     */
+    const REC20_MILLIAMPERE_PER_MILLIMETRE = 'F76';
+
+    /**
+     * pascal second per kelvin
+     */
+    const REC20_PASCAL_SECOND_PER_KELVIN = 'F77';
+
+    /**
+     * inch of water
+     */
+    const REC20_INCH_OF_WATER = 'F78';
+
+    /**
+     * inch of mercury
+     */
+    const REC20_INCH_OF_MERCURY = 'F79';
+
+    /**
+     * water horse power
+     */
+    const REC20_WATER_HORSE_POWER = 'F80';
+
+    /**
+     * bar per kelvin
+     */
+    const REC20_BAR_PER_KELVIN = 'F81';
+
+    /**
+     * hectopascal per kelvin
+     */
+    const REC20_HECTOPASCAL_PER_KELVIN = 'F82';
+
+    /**
+     * kilopascal per kelvin
+     */
+    const REC20_KILOPASCAL_PER_KELVIN = 'F83';
+
+    /**
+     * millibar per kelvin
+     */
+    const REC20_MILLIBAR_PER_KELVIN = 'F84';
+
+    /**
+     * megapascal per kelvin
+     */
+    const REC20_MEGAPASCAL_PER_KELVIN = 'F85';
+
+    /**
+     * poise per kelvin
+     */
+    const REC20_POISE_PER_KELVIN = 'F86';
+
+    /**
+     * volt per litre minute
+     */
+    const REC20_VOLT_PER_LITRE_MINUTE = 'F87';
+
+    /**
+     * newton centimetre
+     */
+    const REC20_NEWTON_CENTIMETRE = 'F88';
+
+    /**
+     * newton metre per degree
+     */
+    const REC20_NEWTON_METRE_PER_DEGREE = 'F89';
+
+    /**
+     * newton metre per ampere
+     */
+    const REC20_NEWTON_METRE_PER_AMPERE = 'F90';
+
+    /**
+     * bar litre per second
+     */
+    const REC20_BAR_LITRE_PER_SECOND = 'F91';
+
+    /**
+     * bar cubic metre per second
+     */
+    const REC20_BAR_CUBIC_METRE_PER_SECOND = 'F92';
+
+    /**
+     * hectopascal litre per second
+     */
+    const REC20_HECTOPASCAL_LITRE_PER_SECOND = 'F93';
+
+    /**
+     * hectopascal cubic metre per second
+     */
+    const REC20_HECTOPASCAL_CUBIC_METRE_PER_SECOND = 'F94';
+
+    /**
+     * millibar litre per second
+     */
+    const REC20_MILLIBAR_LITRE_PER_SECOND = 'F95';
+
+    /**
+     * millibar cubic metre per second
+     */
+    const REC20_MILLIBAR_CUBIC_METRE_PER_SECOND = 'F96';
+
+    /**
+     * megapascal litre per second
+     */
+    const REC20_MEGAPASCAL_LITRE_PER_SECOND = 'F97';
+
+    /**
+     * megapascal cubic metre per second
+     */
+    const REC20_MEGAPASCAL_CUBIC_METRE_PER_SECOND = 'F98';
+
+    /**
+     * pascal litre per second
+     */
+    const REC20_PASCAL_LITRE_PER_SECOND = 'F99';
+
+    /**
+     * degree Fahrenheit
+     */
+    const REC20_DEGREE_FAHRENHEIT = 'FAH';
+
+    /**
+     * farad
+     */
+    const REC20_FARAD = 'FAR';
+
+    /**
+     * fibre metre
+     */
+    const REC20_FIBRE_METRE = 'FBM';
+
+    /**
+     * thousand cubic foot
+     */
+    const REC20_THOUSAND_CUBIC_FOOT = 'FC';
+
+    /**
+     * hundred cubic metre
+     */
+    const REC20_HUNDRED_CUBIC_METRE = 'FF';
+
+    /**
+     * micromole
+     */
+    const REC20_MICROMOLE = 'FH';
+
+    /**
+     * failures in time
+     */
+    const REC20_FAILURES_IN_TIME = 'FIT';
+
+    /**
+     * flake ton
+     */
+    const REC20_FLAKE_TON = 'FL';
+
+    /**
+     * foot
+     */
+    const REC20_FOOT = 'FOT';
+
+    /**
+     * pound per square foot
+     */
+    const REC20_POUND_PER_SQUARE_FOOT = 'FP';
+
+    /**
+     * foot per minute
+     */
+    const REC20_FOOT_PER_MINUTE = 'FR';
+
+    /**
+     * foot per second
+     */
+    const REC20_FOOT_PER_SECOND = 'FS';
+
+    /**
+     * square foot
+     */
+    const REC20_SQUARE_FOOT = 'FTK';
+
+    /**
+     * cubic foot
+     */
+    const REC20_CUBIC_FOOT = 'FTQ';
+
+    /**
+     * pascal cubic metre per second
+     */
+    const REC20_PASCAL_CUBIC_METRE_PER_SECOND = 'G01';
+
+    /**
+     * centimetre per bar
+     */
+    const REC20_CENTIMETRE_PER_BAR = 'G04';
+
+    /**
+     * metre per bar
+     */
+    const REC20_METRE_PER_BAR = 'G05';
+
+    /**
+     * millimetre per bar
+     */
+    const REC20_MILLIMETRE_PER_BAR = 'G06';
+
+    /**
+     * square inch per second
+     */
+    const REC20_SQUARE_INCH_PER_SECOND = 'G08';
+
+    /**
+     * square metre per second kelvin
+     */
+    const REC20_SQUARE_METRE_PER_SECOND_KELVIN = 'G09';
+
+    /**
+     * stokes per kelvin
+     */
+    const REC20_STOKES_PER_KELVIN = 'G10';
+
+    /**
+     * gram per cubic centimetre bar
+     */
+    const REC20_GRAM_PER_CUBIC_CENTIMETRE_BAR = 'G11';
+
+    /**
+     * gram per cubic decimetre bar
+     */
+    const REC20_GRAM_PER_CUBIC_DECIMETRE_BAR = 'G12';
+
+    /**
+     * gram per litre bar
+     */
+    const REC20_GRAM_PER_LITRE_BAR = 'G13';
+
+    /**
+     * gram per cubic metre bar
+     */
+    const REC20_GRAM_PER_CUBIC_METRE_BAR = 'G14';
+
+    /**
+     * gram per millilitre bar
+     */
+    const REC20_GRAM_PER_MILLILITRE_BAR = 'G15';
+
+    /**
+     * kilogram per cubic centimetre bar
+     */
+    const REC20_KILOGRAM_PER_CUBIC_CENTIMETRE_BAR = 'G16';
+
+    /**
+     * kilogram per litre bar
+     */
+    const REC20_KILOGRAM_PER_LITRE_BAR = 'G17';
+
+    /**
+     * kilogram per cubic metre bar
+     */
+    const REC20_KILOGRAM_PER_CUBIC_METRE_BAR = 'G18';
+
+    /**
+     * newton metre per kilogram
+     */
+    const REC20_NEWTON_METRE_PER_KILOGRAM = 'G19';
+
+    /**
+     * US gallon per minute
+     */
+    const REC20_US_GALLON_PER_MINUTE = 'G2';
+
+    /**
+     * pound-force foot per pound
+     */
+    const REC20_POUNDFORCE_FOOT_PER_POUND = 'G20';
+
+    /**
+     * cup [unit of volume]
+     */
+    const REC20_CUP_UNIT_OF_VOLUME = 'G21';
+
+    /**
+     * peck
+     */
+    const REC20_PECK = 'G23';
+
+    /**
+     * tablespoon (US)
+     */
+    const REC20_TABLESPOON_US = 'G24';
+
+    /**
+     * teaspoon (US)
+     */
+    const REC20_TEASPOON_US = 'G25';
+
+    /**
+     * stere
+     */
+    const REC20_STERE = 'G26';
+
+    /**
+     * cubic centimetre per kelvin
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_KELVIN = 'G27';
+
+    /**
+     * litre per kelvin
+     */
+    const REC20_LITRE_PER_KELVIN = 'G28';
+
+    /**
+     * cubic metre per kelvin
+     */
+    const REC20_CUBIC_METRE_PER_KELVIN = 'G29';
+
+    /**
+     * Imperial gallon per minute
+     */
+    const REC20_IMPERIAL_GALLON_PER_MINUTE = 'G3';
+
+    /**
+     * millilitre per kelvin
+     */
+    const REC20_MILLILITRE_PER_KELVIN = 'G30';
+
+    /**
+     * kilogram per cubic centimetre
+     */
+    const REC20_KILOGRAM_PER_CUBIC_CENTIMETRE = 'G31';
+
+    /**
+     * ounce (avoirdupois) per cubic yard
+     */
+    const REC20_OUNCE_AVOIRDUPOIS_PER_CUBIC_YARD = 'G32';
+
+    /**
+     * gram per cubic centimetre kelvin
+     */
+    const REC20_GRAM_PER_CUBIC_CENTIMETRE_KELVIN = 'G33';
+
+    /**
+     * gram per cubic decimetre kelvin
+     */
+    const REC20_GRAM_PER_CUBIC_DECIMETRE_KELVIN = 'G34';
+
+    /**
+     * gram per litre kelvin
+     */
+    const REC20_GRAM_PER_LITRE_KELVIN = 'G35';
+
+    /**
+     * gram per cubic metre kelvin
+     */
+    const REC20_GRAM_PER_CUBIC_METRE_KELVIN = 'G36';
+
+    /**
+     * gram per millilitre kelvin
+     */
+    const REC20_GRAM_PER_MILLILITRE_KELVIN = 'G37';
+
+    /**
+     * kilogram per cubic centimetre kelvin
+     */
+    const REC20_KILOGRAM_PER_CUBIC_CENTIMETRE_KELVIN = 'G38';
+
+    /**
+     * kilogram per litre kelvin
+     */
+    const REC20_KILOGRAM_PER_LITRE_KELVIN = 'G39';
+
+    /**
+     * kilogram per cubic metre kelvin
+     */
+    const REC20_KILOGRAM_PER_CUBIC_METRE_KELVIN = 'G40';
+
+    /**
+     * square metre per second bar
+     */
+    const REC20_SQUARE_METRE_PER_SECOND_BAR = 'G41';
+
+    /**
+     * microsiemens per centimetre
+     */
+    const REC20_MICROSIEMENS_PER_CENTIMETRE = 'G42';
+
+    /**
+     * microsiemens per metre
+     */
+    const REC20_MICROSIEMENS_PER_METRE = 'G43';
+
+    /**
+     * nanosiemens per centimetre
+     */
+    const REC20_NANOSIEMENS_PER_CENTIMETRE = 'G44';
+
+    /**
+     * nanosiemens per metre
+     */
+    const REC20_NANOSIEMENS_PER_METRE = 'G45';
+
+    /**
+     * stokes per bar
+     */
+    const REC20_STOKES_PER_BAR = 'G46';
+
+    /**
+     * cubic centimetre per day
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_DAY = 'G47';
+
+    /**
+     * cubic centimetre per hour
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_HOUR = 'G48';
+
+    /**
+     * cubic centimetre per minute
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_MINUTE = 'G49';
+
+    /**
+     * gallon (US) per hour
+     */
+    const REC20_GALLON_US_PER_HOUR = 'G50';
+
+    /**
+     * litre per second
+     */
+    const REC20_LITRE_PER_SECOND = 'G51';
+
+    /**
+     * cubic metre per day
+     */
+    const REC20_CUBIC_METRE_PER_DAY = 'G52';
+
+    /**
+     * cubic metre per minute
+     */
+    const REC20_CUBIC_METRE_PER_MINUTE = 'G53';
+
+    /**
+     * millilitre per day
+     */
+    const REC20_MILLILITRE_PER_DAY = 'G54';
+
+    /**
+     * millilitre per hour
+     */
+    const REC20_MILLILITRE_PER_HOUR = 'G55';
+
+    /**
+     * cubic inch per hour
+     */
+    const REC20_CUBIC_INCH_PER_HOUR = 'G56';
+
+    /**
+     * cubic inch per minute
+     */
+    const REC20_CUBIC_INCH_PER_MINUTE = 'G57';
+
+    /**
+     * cubic inch per second
+     */
+    const REC20_CUBIC_INCH_PER_SECOND = 'G58';
+
+    /**
+     * milliampere per litre minute
+     */
+    const REC20_MILLIAMPERE_PER_LITRE_MINUTE = 'G59';
+
+    /**
+     * volt per bar
+     */
+    const REC20_VOLT_PER_BAR = 'G60';
+
+    /**
+     * cubic centimetre per day kelvin
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_DAY_KELVIN = 'G61';
+
+    /**
+     * cubic centimetre per hour kelvin
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_HOUR_KELVIN = 'G62';
+
+    /**
+     * cubic centimetre per minute kelvin
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_MINUTE_KELVIN = 'G63';
+
+    /**
+     * cubic centimetre per second kelvin
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_SECOND_KELVIN = 'G64';
+
+    /**
+     * litre per day kelvin
+     */
+    const REC20_LITRE_PER_DAY_KELVIN = 'G65';
+
+    /**
+     * litre per hour kelvin
+     */
+    const REC20_LITRE_PER_HOUR_KELVIN = 'G66';
+
+    /**
+     * litre per minute kelvin
+     */
+    const REC20_LITRE_PER_MINUTE_KELVIN = 'G67';
+
+    /**
+     * litre per second kelvin
+     */
+    const REC20_LITRE_PER_SECOND_KELVIN = 'G68';
+
+    /**
+     * cubic metre per day kelvin
+     */
+    const REC20_CUBIC_METRE_PER_DAY_KELVIN = 'G69';
+
+    /**
+     * cubic metre per hour kelvin
+     */
+    const REC20_CUBIC_METRE_PER_HOUR_KELVIN = 'G70';
+
+    /**
+     * cubic metre per minute kelvin
+     */
+    const REC20_CUBIC_METRE_PER_MINUTE_KELVIN = 'G71';
+
+    /**
+     * cubic metre per second kelvin
+     */
+    const REC20_CUBIC_METRE_PER_SECOND_KELVIN = 'G72';
+
+    /**
+     * millilitre per day kelvin
+     */
+    const REC20_MILLILITRE_PER_DAY_KELVIN = 'G73';
+
+    /**
+     * millilitre per hour kelvin
+     */
+    const REC20_MILLILITRE_PER_HOUR_KELVIN = 'G74';
+
+    /**
+     * millilitre per minute kelvin
+     */
+    const REC20_MILLILITRE_PER_MINUTE_KELVIN = 'G75';
+
+    /**
+     * millilitre per second kelvin
+     */
+    const REC20_MILLILITRE_PER_SECOND_KELVIN = 'G76';
+
+    /**
+     * millimetre to the fourth power
+     */
+    const REC20_MILLIMETRE_TO_THE_FOURTH_POWER = 'G77';
+
+    /**
+     * cubic centimetre per day bar
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_DAY_BAR = 'G78';
+
+    /**
+     * cubic centimetre per hour bar
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_HOUR_BAR = 'G79';
+
+    /**
+     * cubic centimetre per minute bar
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_MINUTE_BAR = 'G80';
+
+    /**
+     * cubic centimetre per second bar
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_SECOND_BAR = 'G81';
+
+    /**
+     * litre per day bar
+     */
+    const REC20_LITRE_PER_DAY_BAR = 'G82';
+
+    /**
+     * litre per hour bar
+     */
+    const REC20_LITRE_PER_HOUR_BAR = 'G83';
+
+    /**
+     * litre per minute bar
+     */
+    const REC20_LITRE_PER_MINUTE_BAR = 'G84';
+
+    /**
+     * litre per second bar
+     */
+    const REC20_LITRE_PER_SECOND_BAR = 'G85';
+
+    /**
+     * cubic metre per day bar
+     */
+    const REC20_CUBIC_METRE_PER_DAY_BAR = 'G86';
+
+    /**
+     * cubic metre per hour bar
+     */
+    const REC20_CUBIC_METRE_PER_HOUR_BAR = 'G87';
+
+    /**
+     * cubic metre per minute bar
+     */
+    const REC20_CUBIC_METRE_PER_MINUTE_BAR = 'G88';
+
+    /**
+     * cubic metre per second bar
+     */
+    const REC20_CUBIC_METRE_PER_SECOND_BAR = 'G89';
+
+    /**
+     * millilitre per day bar
+     */
+    const REC20_MILLILITRE_PER_DAY_BAR = 'G90';
+
+    /**
+     * millilitre per hour bar
+     */
+    const REC20_MILLILITRE_PER_HOUR_BAR = 'G91';
+
+    /**
+     * millilitre per minute bar
+     */
+    const REC20_MILLILITRE_PER_MINUTE_BAR = 'G92';
+
+    /**
+     * millilitre per second bar
+     */
+    const REC20_MILLILITRE_PER_SECOND_BAR = 'G93';
+
+    /**
+     * cubic centimetre per bar
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_BAR = 'G94';
+
+    /**
+     * litre per bar
+     */
+    const REC20_LITRE_PER_BAR = 'G95';
+
+    /**
+     * cubic metre per bar
+     */
+    const REC20_CUBIC_METRE_PER_BAR = 'G96';
+
+    /**
+     * millilitre per bar
+     */
+    const REC20_MILLILITRE_PER_BAR = 'G97';
+
+    /**
+     * microhenry per kiloohm
+     */
+    const REC20_MICROHENRY_PER_KILOOHM = 'G98';
+
+    /**
+     * microhenry per ohm
+     */
+    const REC20_MICROHENRY_PER_OHM = 'G99';
+
+    /**
+     * gallon (US) per day
+     */
+    const REC20_GALLON_US_PER_DAY = 'GB';
+
+    /**
+     * gigabecquerel
+     */
+    const REC20_GIGABECQUEREL = 'GBQ';
+
+    /**
+     * gram, dry weight
+     */
+    const REC20_GRAM_DRY_WEIGHT = 'GDW';
+
+    /**
+     * pound per gallon (US)
+     */
+    const REC20_POUND_PER_GALLON_US = 'GE';
+
+    /**
+     * gram per metre (gram per 100 centimetres)
+     */
+    const REC20_GRAM_PER_METRE_GRAM_PER_100_CENTIMETRES = 'GF';
+
+    /**
+     * gram of fissile isotope
+     */
+    const REC20_GRAM_OF_FISSILE_ISOTOPE = 'GFI';
+
+    /**
+     * great gross
+     */
+    const REC20_GREAT_GROSS = 'GGR';
+
+    /**
+     * gill (US)
+     */
+    const REC20_GILL_US = 'GIA';
+
+    /**
+     * gram, including container
+     */
+    const REC20_GRAM_INCLUDING_CONTAINER = 'GIC';
+
+    /**
+     * gill (UK)
+     */
+    const REC20_GILL_UK = 'GII';
+
+    /**
+     * gram, including inner packaging
+     */
+    const REC20_GRAM_INCLUDING_INNER_PACKAGING = 'GIP';
+
+    /**
+     * gram per millilitre
+     */
+    const REC20_GRAM_PER_MILLILITRE = 'GJ';
+
+    /**
+     * gram per litre
+     */
+    const REC20_GRAM_PER_LITRE = 'GL';
+
+    /**
+     * dry gallon (US)
+     */
+    const REC20_DRY_GALLON_US = 'GLD';
+
+    /**
+     * gallon (UK)
+     */
+    const REC20_GALLON_UK = 'GLI';
+
+    /**
+     * gallon (US)
+     */
+    const REC20_GALLON_US = 'GLL';
+
+    /**
+     * gram per square metre
+     */
+    const REC20_GRAM_PER_SQUARE_METRE = 'GM';
+
+    /**
+     * milligram per square metre
+     */
+    const REC20_MILLIGRAM_PER_SQUARE_METRE = 'GO';
+
+    /**
+     * milligram per cubic metre
+     */
+    const REC20_MILLIGRAM_PER_CUBIC_METRE = 'GP';
+
+    /**
+     * microgram per cubic metre
+     */
+    const REC20_MICROGRAM_PER_CUBIC_METRE = 'GQ';
+
+    /**
+     * gram
+     */
+    const REC20_GRAM = 'GRM';
+
+    /**
+     * grain
+     */
+    const REC20_GRAIN = 'GRN';
+
+    /**
+     * gross
+     */
+    const REC20_GROSS = 'GRO';
+
+    /**
+     * gigajoule
+     */
+    const REC20_GIGAJOULE = 'GV';
+
+    /**
+     * gigawatt hour
+     */
+    const REC20_GIGAWATT_HOUR = 'GWH';
+
+    /**
+     * henry per kiloohm
+     */
+    const REC20_HENRY_PER_KILOOHM = 'H03';
+
+    /**
+     * henry per ohm
+     */
+    const REC20_HENRY_PER_OHM = 'H04';
+
+    /**
+     * millihenry per kiloohm
+     */
+    const REC20_MILLIHENRY_PER_KILOOHM = 'H05';
+
+    /**
+     * millihenry per ohm
+     */
+    const REC20_MILLIHENRY_PER_OHM = 'H06';
+
+    /**
+     * pascal second per bar
+     */
+    const REC20_PASCAL_SECOND_PER_BAR = 'H07';
+
+    /**
+     * microbecquerel
+     */
+    const REC20_MICROBECQUEREL = 'H08';
+
+    /**
+     * reciprocal year
+     */
+    const REC20_RECIPROCAL_YEAR = 'H09';
+
+    /**
+     * reciprocal hour
+     */
+    const REC20_RECIPROCAL_HOUR = 'H10';
+
+    /**
+     * reciprocal month
+     */
+    const REC20_RECIPROCAL_MONTH = 'H11';
+
+    /**
+     * degree Celsius per hour
+     */
+    const REC20_DEGREE_CELSIUS_PER_HOUR = 'H12';
+
+    /**
+     * degree Celsius per minute
+     */
+    const REC20_DEGREE_CELSIUS_PER_MINUTE = 'H13';
+
+    /**
+     * degree Celsius per second
+     */
+    const REC20_DEGREE_CELSIUS_PER_SECOND = 'H14';
+
+    /**
+     * square centimetre per gram
+     */
+    const REC20_SQUARE_CENTIMETRE_PER_GRAM = 'H15';
+
+    /**
+     * square decametre
+     */
+    const REC20_SQUARE_DECAMETRE = 'H16';
+
+    /**
+     * square hectometre
+     */
+    const REC20_SQUARE_HECTOMETRE = 'H18';
+
+    /**
+     * cubic hectometre
+     */
+    const REC20_CUBIC_HECTOMETRE = 'H19';
+
+    /**
+     * cubic kilometre
+     */
+    const REC20_CUBIC_KILOMETRE = 'H20';
+
+    /**
+     * blank
+     */
+    const REC20_BLANK = 'H21';
+
+    /**
+     * volt square inch per pound-force
+     */
+    const REC20_VOLT_SQUARE_INCH_PER_POUNDFORCE = 'H22';
+
+    /**
+     * volt per inch
+     */
+    const REC20_VOLT_PER_INCH = 'H23';
+
+    /**
+     * volt per microsecond
+     */
+    const REC20_VOLT_PER_MICROSECOND = 'H24';
+
+    /**
+     * percent per kelvin
+     */
+    const REC20_PERCENT_PER_KELVIN = 'H25';
+
+    /**
+     * ohm per metre
+     */
+    const REC20_OHM_PER_METRE = 'H26';
+
+    /**
+     * degree per metre
+     */
+    const REC20_DEGREE_PER_METRE = 'H27';
+
+    /**
+     * microfarad per kilometre
+     */
+    const REC20_MICROFARAD_PER_KILOMETRE = 'H28';
+
+    /**
+     * microgram per litre
+     */
+    const REC20_MICROGRAM_PER_LITRE = 'H29';
+
+    /**
+     * square micrometre (square micron)
+     */
+    const REC20_SQUARE_MICROMETRE_SQUARE_MICRON = 'H30';
+
+    /**
+     * ampere per kilogram
+     */
+    const REC20_AMPERE_PER_KILOGRAM = 'H31';
+
+    /**
+     * ampere squared second
+     */
+    const REC20_AMPERE_SQUARED_SECOND = 'H32';
+
+    /**
+     * farad per kilometre
+     */
+    const REC20_FARAD_PER_KILOMETRE = 'H33';
+
+    /**
+     * hertz metre
+     */
+    const REC20_HERTZ_METRE = 'H34';
+
+    /**
+     * kelvin metre per watt
+     */
+    const REC20_KELVIN_METRE_PER_WATT = 'H35';
+
+    /**
+     * megaohm per kilometre
+     */
+    const REC20_MEGAOHM_PER_KILOMETRE = 'H36';
+
+    /**
+     * megaohm per metre
+     */
+    const REC20_MEGAOHM_PER_METRE = 'H37';
+
+    /**
+     * megaampere
+     */
+    const REC20_MEGAAMPERE = 'H38';
+
+    /**
+     * megahertz kilometre
+     */
+    const REC20_MEGAHERTZ_KILOMETRE = 'H39';
+
+    /**
+     * newton per ampere
+     */
+    const REC20_NEWTON_PER_AMPERE = 'H40';
+
+    /**
+     * newton metre watt to the power minus 0,5
+     */
+    const REC20_NEWTON_METRE_WATT_TO_THE_POWER_MINUS_05 = 'H41';
+
+    /**
+     * pascal per metre
+     */
+    const REC20_PASCAL_PER_METRE = 'H42';
+
+    /**
+     * siemens per centimetre
+     */
+    const REC20_SIEMENS_PER_CENTIMETRE = 'H43';
+
+    /**
+     * teraohm
+     */
+    const REC20_TERAOHM = 'H44';
+
+    /**
+     * volt second per metre
+     */
+    const REC20_VOLT_SECOND_PER_METRE = 'H45';
+
+    /**
+     * volt per second
+     */
+    const REC20_VOLT_PER_SECOND = 'H46';
+
+    /**
+     * watt per cubic metre
+     */
+    const REC20_WATT_PER_CUBIC_METRE = 'H47';
+
+    /**
+     * attofarad
+     */
+    const REC20_ATTOFARAD = 'H48';
+
+    /**
+     * centimetre per hour
+     */
+    const REC20_CENTIMETRE_PER_HOUR = 'H49';
+
+    /**
+     * reciprocal cubic centimetre
+     */
+    const REC20_RECIPROCAL_CUBIC_CENTIMETRE = 'H50';
+
+    /**
+     * decibel per kilometre
+     */
+    const REC20_DECIBEL_PER_KILOMETRE = 'H51';
+
+    /**
+     * decibel per metre
+     */
+    const REC20_DECIBEL_PER_METRE = 'H52';
+
+    /**
+     * kilogram per bar
+     */
+    const REC20_KILOGRAM_PER_BAR = 'H53';
+
+    /**
+     * kilogram per cubic decimetre kelvin
+     */
+    const REC20_KILOGRAM_PER_CUBIC_DECIMETRE_KELVIN = 'H54';
+
+    /**
+     * kilogram per cubic decimetre bar
+     */
+    const REC20_KILOGRAM_PER_CUBIC_DECIMETRE_BAR = 'H55';
+
+    /**
+     * kilogram per square metre second
+     */
+    const REC20_KILOGRAM_PER_SQUARE_METRE_SECOND = 'H56';
+
+    /**
+     * inch per two pi radiant
+     */
+    const REC20_INCH_PER_TWO_PI_RADIANT = 'H57';
+
+    /**
+     * metre per volt second
+     */
+    const REC20_METRE_PER_VOLT_SECOND = 'H58';
+
+    /**
+     * square metre per newton
+     */
+    const REC20_SQUARE_METRE_PER_NEWTON = 'H59';
+
+    /**
+     * cubic metre per cubic metre
+     */
+    const REC20_CUBIC_METRE_PER_CUBIC_METRE = 'H60';
+
+    /**
+     * millisiemens per centimetre
+     */
+    const REC20_MILLISIEMENS_PER_CENTIMETRE = 'H61';
+
+    /**
+     * millivolt per minute
+     */
+    const REC20_MILLIVOLT_PER_MINUTE = 'H62';
+
+    /**
+     * milligram per square centimetre
+     */
+    const REC20_MILLIGRAM_PER_SQUARE_CENTIMETRE = 'H63';
+
+    /**
+     * milligram per gram
+     */
+    const REC20_MILLIGRAM_PER_GRAM = 'H64';
+
+    /**
+     * millilitre per cubic metre
+     */
+    const REC20_MILLILITRE_PER_CUBIC_METRE = 'H65';
+
+    /**
+     * millimetre per year
+     */
+    const REC20_MILLIMETRE_PER_YEAR = 'H66';
+
+    /**
+     * millimetre per hour
+     */
+    const REC20_MILLIMETRE_PER_HOUR = 'H67';
+
+    /**
+     * millimole per gram
+     */
+    const REC20_MILLIMOLE_PER_GRAM = 'H68';
+
+    /**
+     * picopascal per kilometre
+     */
+    const REC20_PICOPASCAL_PER_KILOMETRE = 'H69';
+
+    /**
+     * picosecond
+     */
+    const REC20_PICOSECOND = 'H70';
+
+    /**
+     * percent per month
+     */
+    const REC20_PERCENT_PER_MONTH = 'H71';
+
+    /**
+     * percent per hectobar
+     */
+    const REC20_PERCENT_PER_HECTOBAR = 'H72';
+
+    /**
+     * percent per decakelvin
+     */
+    const REC20_PERCENT_PER_DECAKELVIN = 'H73';
+
+    /**
+     * watt per metre
+     */
+    const REC20_WATT_PER_METRE = 'H74';
+
+    /**
+     * decapascal
+     */
+    const REC20_DECAPASCAL = 'H75';
+
+    /**
+     * gram per millimetre
+     */
+    const REC20_GRAM_PER_MILLIMETRE = 'H76';
+
+    /**
+     * module width
+     */
+    const REC20_MODULE_WIDTH = 'H77';
+
+    /**
+     * French gauge
+     */
+    const REC20_FRENCH_GAUGE = 'H79';
+
+    /**
+     * rack unit
+     */
+    const REC20_RACK_UNIT = 'H80';
+
+    /**
+     * millimetre per minute
+     */
+    const REC20_MILLIMETRE_PER_MINUTE = 'H81';
+
+    /**
+     * big point
+     */
+    const REC20_BIG_POINT = 'H82';
+
+    /**
+     * litre per kilogram
+     */
+    const REC20_LITRE_PER_KILOGRAM = 'H83';
+
+    /**
+     * gram millimetre
+     */
+    const REC20_GRAM_MILLIMETRE = 'H84';
+
+    /**
+     * reciprocal week
+     */
+    const REC20_RECIPROCAL_WEEK = 'H85';
+
+    /**
+     * piece
+     */
+    const REC20_PIECE = 'H87';
+
+    /**
+     * megaohm kilometre
+     */
+    const REC20_MEGAOHM_KILOMETRE = 'H88';
+
+    /**
+     * percent per ohm
+     */
+    const REC20_PERCENT_PER_OHM = 'H89';
+
+    /**
+     * percent per degree
+     */
+    const REC20_PERCENT_PER_DEGREE = 'H90';
+
+    /**
+     * percent per ten thousand
+     */
+    const REC20_PERCENT_PER_TEN_THOUSAND = 'H91';
+
+    /**
+     * percent per one hundred thousand
+     */
+    const REC20_PERCENT_PER_ONE_HUNDRED_THOUSAND = 'H92';
+
+    /**
+     * percent per hundred
+     */
+    const REC20_PERCENT_PER_HUNDRED = 'H93';
+
+    /**
+     * percent per thousand
+     */
+    const REC20_PERCENT_PER_THOUSAND = 'H94';
+
+    /**
+     * percent per volt
+     */
+    const REC20_PERCENT_PER_VOLT = 'H95';
+
+    /**
+     * percent per bar
+     */
+    const REC20_PERCENT_PER_BAR = 'H96';
+
+    /**
+     * percent per inch
+     */
+    const REC20_PERCENT_PER_INCH = 'H98';
+
+    /**
+     * percent per metre
+     */
+    const REC20_PERCENT_PER_METRE = 'H99';
+
+    /**
+     * hank
+     */
+    const REC20_HANK = 'HA';
+
+    /**
+     * hectobar
+     */
+    const REC20_HECTOBAR = 'HBA';
+
+    /**
+     * hundred boxes
+     */
+    const REC20_HUNDRED_BOXES = 'HBX';
+
+    /**
+     * hundred count
+     */
+    const REC20_HUNDRED_COUNT = 'HC';
+
+    /**
+     * hundred kilogram, dry weight
+     */
+    const REC20_HUNDRED_KILOGRAM_DRY_WEIGHT = 'HDW';
+
+    /**
+     * head
+     */
+    const REC20_HEAD = 'HEA';
+
+    /**
+     * hectogram
+     */
+    const REC20_HECTOGRAM = 'HGM';
+
+    /**
+     * hundred cubic foot
+     */
+    const REC20_HUNDRED_CUBIC_FOOT = 'HH';
+
+    /**
+     * hundred international unit
+     */
+    const REC20_HUNDRED_INTERNATIONAL_UNIT = 'HIU';
+
+    /**
+     * hundred kilogram, net mass
+     */
+    const REC20_HUNDRED_KILOGRAM_NET_MASS = 'HKM';
+
+    /**
+     * hectolitre
+     */
+    const REC20_HECTOLITRE = 'HLT';
+
+    /**
+     * mile per hour (statute mile)
+     */
+    const REC20_MILE_PER_HOUR_STATUTE_MILE = 'HM';
+
+    /**
+     * million cubic metre
+     */
+    const REC20_MILLION_CUBIC_METRE = 'HMQ';
+
+    /**
+     * hectometre
+     */
+    const REC20_HECTOMETRE = 'HMT';
+
+    /**
+     * hectolitre of pure alcohol
+     */
+    const REC20_HECTOLITRE_OF_PURE_ALCOHOL = 'HPA';
+
+    /**
+     * hertz
+     */
+    const REC20_HERTZ = 'HTZ';
+
+    /**
+     * hour
+     */
+    const REC20_HOUR = 'HUR';
+
+    /**
+     * inch pound (pound inch)
+     */
+    const REC20_INCH_POUND_POUND_INCH = 'IA';
+
+    /**
+     * person
+     */
+    const REC20_PERSON = 'IE';
+
+    /**
+     * inch
+     */
+    const REC20_INCH = 'INH';
+
+    /**
+     * square inch
+     */
+    const REC20_SQUARE_INCH = 'INK';
+
+    /**
+     * cubic inch
+     */
+    const REC20_CUBIC_INCH = 'INQ';
+
+    /**
+     * international sugar degree
+     */
+    const REC20_INTERNATIONAL_SUGAR_DEGREE = 'ISD';
+
+    /**
+     * inch per second
+     */
+    const REC20_INCH_PER_SECOND = 'IU';
+
+    /**
+     * international unit per gram
+     */
+    const REC20_INTERNATIONAL_UNIT_PER_GRAM = 'IUG';
+
+    /**
+     * inch per second squared
+     */
+    const REC20_INCH_PER_SECOND_SQUARED = 'IV';
+
+    /**
+     * percent per millimetre
+     */
+    const REC20_PERCENT_PER_MILLIMETRE = 'J10';
+
+    /**
+     * per mille per psi
+     */
+    const REC20_PER_MILLE_PER_PSI = 'J12';
+
+    /**
+     * degree API
+     */
+    const REC20_DEGREE_API = 'J13';
+
+    /**
+     * degree Baume (origin scale)
+     */
+    const REC20_DEGREE_BAUME_ORIGIN_SCALE = 'J14';
+
+    /**
+     * degree Baume (US heavy)
+     */
+    const REC20_DEGREE_BAUME_US_HEAVY = 'J15';
+
+    /**
+     * degree Baume (US light)
+     */
+    const REC20_DEGREE_BAUME_US_LIGHT = 'J16';
+
+    /**
+     * degree Balling
+     */
+    const REC20_DEGREE_BALLING = 'J17';
+
+    /**
+     * degree Brix
+     */
+    const REC20_DEGREE_BRIX = 'J18';
+
+    /**
+     * degree Fahrenheit hour square foot per British thermal unit
+     * (thermochemical)
+     */
+    const REC20_DEGREE_FAHRENHEIT_HOUR_SQUARE_FOOT_PER_BRITISH_THERMAL_UNIT_THERMOCHEMICAL = 'J19';
+
+    /**
+     * joule per kilogram
+     */
+    const REC20_JOULE_PER_KILOGRAM = 'J2';
+
+    /**
+     * degree Fahrenheit per kelvin
+     */
+    const REC20_DEGREE_FAHRENHEIT_PER_KELVIN = 'J20';
+
+    /**
+     * degree Fahrenheit per bar
+     */
+    const REC20_DEGREE_FAHRENHEIT_PER_BAR = 'J21';
+
+    /**
+     * degree Fahrenheit hour square foot per British thermal unit
+     * (international table)
+     */
+    const REC20_DEGREE_FAHRENHEIT_HOUR_SQUARE_FOOT_PER_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE = 'J22';
+
+    /**
+     * degree Fahrenheit per hour
+     */
+    const REC20_DEGREE_FAHRENHEIT_PER_HOUR = 'J23';
+
+    /**
+     * degree Fahrenheit per minute
+     */
+    const REC20_DEGREE_FAHRENHEIT_PER_MINUTE = 'J24';
+
+    /**
+     * degree Fahrenheit per second
+     */
+    const REC20_DEGREE_FAHRENHEIT_PER_SECOND = 'J25';
+
+    /**
+     * reciprocal degree Fahrenheit
+     */
+    const REC20_RECIPROCAL_DEGREE_FAHRENHEIT = 'J26';
+
+    /**
+     * degree Oechsle
+     */
+    const REC20_DEGREE_OECHSLE = 'J27';
+
+    /**
+     * degree Rankine per hour
+     */
+    const REC20_DEGREE_RANKINE_PER_HOUR = 'J28';
+
+    /**
+     * degree Rankine per minute
+     */
+    const REC20_DEGREE_RANKINE_PER_MINUTE = 'J29';
+
+    /**
+     * degree Rankine per second
+     */
+    const REC20_DEGREE_RANKINE_PER_SECOND = 'J30';
+
+    /**
+     * degree Twaddell
+     */
+    const REC20_DEGREE_TWADDELL = 'J31';
+
+    /**
+     * micropoise
+     */
+    const REC20_MICROPOISE = 'J32';
+
+    /**
+     * microgram per kilogram
+     */
+    const REC20_MICROGRAM_PER_KILOGRAM = 'J33';
+
+    /**
+     * microgram per cubic metre kelvin
+     */
+    const REC20_MICROGRAM_PER_CUBIC_METRE_KELVIN = 'J34';
+
+    /**
+     * microgram per cubic metre bar
+     */
+    const REC20_MICROGRAM_PER_CUBIC_METRE_BAR = 'J35';
+
+    /**
+     * microlitre per litre
+     */
+    const REC20_MICROLITRE_PER_LITRE = 'J36';
+
+    /**
+     * baud
+     */
+    const REC20_BAUD = 'J38';
+
+    /**
+     * British thermal unit (mean)
+     */
+    const REC20_BRITISH_THERMAL_UNIT_MEAN = 'J39';
+
+    /**
+     * British thermal unit (international table) foot per hourÂ square foot
+     * degree Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_FOOT_PER_HOURSQUARE_FOOT_DEGREE_FAHRENHEIT = 'J40';
+
+    /**
+     * British thermal unit (international table) inch per hour squareÂ foot
+     * degree Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_INCH_PER_HOUR_SQUAREFOOT_DEGREE_FAHRENHEIT = 'J41';
+
+    /**
+     * British thermal unit (international table) inch per second
+     * squareÂ foot degree Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_INCH_PER_SECOND_SQUAREFOOT_DEGREE_FAHRENHEIT = 'J42';
+
+    /**
+     * British thermal unit (international table) per pound degree Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_POUND_DEGREE_FAHRENHEIT = 'J43';
+
+    /**
+     * British thermal unit (international table) per minute
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_MINUTE = 'J44';
+
+    /**
+     * British thermal unit (international table) per second
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND = 'J45';
+
+    /**
+     * British thermal unit (thermochemical) foot per hour squareÂ foot
+     * degree Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_FOOT_PER_HOUR_SQUAREFOOT_DEGREE_FAHRENHEIT = 'J46';
+
+    /**
+     * British thermal unit (thermochemical) per hour
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_HOUR = 'J47';
+
+    /**
+     * British thermal unit (thermochemical) inch per hour squareÂ foot
+     * degree Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH_PER_HOUR_SQUAREFOOT_DEGREE_FAHRENHEIT = 'J48';
+
+    /**
+     * British thermal unit (thermochemical) inch per secondÂ square foot
+     * degree Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH_PER_SECONDSQUARE_FOOT_DEGREE_FAHRENHEIT = 'J49';
+
+    /**
+     * British thermal unit (thermochemical) per pound degree Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_POUND_DEGREE_FAHRENHEIT = 'J50';
+
+    /**
+     * British thermal unit (thermochemical) per minute
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_MINUTE = 'J51';
+
+    /**
+     * British thermal unit (thermochemical) per second
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SECOND = 'J52';
+
+    /**
+     * coulomb square metre per kilogram
+     */
+    const REC20_COULOMB_SQUARE_METRE_PER_KILOGRAM = 'J53';
+
+    /**
+     * megabaud
+     */
+    const REC20_MEGABAUD = 'J54';
+
+    /**
+     * watt second
+     */
+    const REC20_WATT_SECOND = 'J55';
+
+    /**
+     * bar per bar
+     */
+    const REC20_BAR_PER_BAR = 'J56';
+
+    /**
+     * barrel (UK petroleum)
+     */
+    const REC20_BARREL_UK_PETROLEUM = 'J57';
+
+    /**
+     * barrel (UK petroleum) per minute
+     */
+    const REC20_BARREL_UK_PETROLEUM_PER_MINUTE = 'J58';
+
+    /**
+     * barrel (UK petroleum) per day
+     */
+    const REC20_BARREL_UK_PETROLEUM_PER_DAY = 'J59';
+
+    /**
+     * barrel (UK petroleum) per hour
+     */
+    const REC20_BARREL_UK_PETROLEUM_PER_HOUR = 'J60';
+
+    /**
+     * barrel (UK petroleum) per second
+     */
+    const REC20_BARREL_UK_PETROLEUM_PER_SECOND = 'J61';
+
+    /**
+     * barrel (US petroleum) per hour
+     */
+    const REC20_BARREL_US_PETROLEUM_PER_HOUR = 'J62';
+
+    /**
+     * barrel (US petroleum) per second
+     */
+    const REC20_BARREL_US_PETROLEUM_PER_SECOND = 'J63';
+
+    /**
+     * bushel (UK) per day
+     */
+    const REC20_BUSHEL_UK_PER_DAY = 'J64';
+
+    /**
+     * bushel (UK) per hour
+     */
+    const REC20_BUSHEL_UK_PER_HOUR = 'J65';
+
+    /**
+     * bushel (UK) per minute
+     */
+    const REC20_BUSHEL_UK_PER_MINUTE = 'J66';
+
+    /**
+     * bushel (UK) per second
+     */
+    const REC20_BUSHEL_UK_PER_SECOND = 'J67';
+
+    /**
+     * bushel (US dry) per day
+     */
+    const REC20_BUSHEL_US_DRY_PER_DAY = 'J68';
+
+    /**
+     * bushel (US dry) per hour
+     */
+    const REC20_BUSHEL_US_DRY_PER_HOUR = 'J69';
+
+    /**
+     * bushel (US dry) per minute
+     */
+    const REC20_BUSHEL_US_DRY_PER_MINUTE = 'J70';
+
+    /**
+     * bushel (US dry) per second
+     */
+    const REC20_BUSHEL_US_DRY_PER_SECOND = 'J71';
+
+    /**
+     * centinewton metre
+     */
+    const REC20_CENTINEWTON_METRE = 'J72';
+
+    /**
+     * centipoise per kelvin
+     */
+    const REC20_CENTIPOISE_PER_KELVIN = 'J73';
+
+    /**
+     * centipoise per bar
+     */
+    const REC20_CENTIPOISE_PER_BAR = 'J74';
+
+    /**
+     * calorie (mean)
+     */
+    const REC20_CALORIE_MEAN = 'J75';
+
+    /**
+     * calorie (international table) per gram degree Celsius
+     */
+    const REC20_CALORIE_INTERNATIONAL_TABLE_PER_GRAM_DEGREE_CELSIUS = 'J76';
+
+    /**
+     * calorie (thermochemical) per centimetre second degree Celsius
+     */
+    const REC20_CALORIE_THERMOCHEMICAL_PER_CENTIMETRE_SECOND_DEGREE_CELSIUS = 'J78';
+
+    /**
+     * calorie (thermochemical) per gram degree Celsius
+     */
+    const REC20_CALORIE_THERMOCHEMICAL_PER_GRAM_DEGREE_CELSIUS = 'J79';
+
+    /**
+     * calorie (thermochemical) per minute
+     */
+    const REC20_CALORIE_THERMOCHEMICAL_PER_MINUTE = 'J81';
+
+    /**
+     * calorie (thermochemical) per second
+     */
+    const REC20_CALORIE_THERMOCHEMICAL_PER_SECOND = 'J82';
+
+    /**
+     * clo
+     */
+    const REC20_CLO = 'J83';
+
+    /**
+     * centimetre per second kelvin
+     */
+    const REC20_CENTIMETRE_PER_SECOND_KELVIN = 'J84';
+
+    /**
+     * centimetre per second bar
+     */
+    const REC20_CENTIMETRE_PER_SECOND_BAR = 'J85';
+
+    /**
+     * cubic centimetre per cubic metre
+     */
+    const REC20_CUBIC_CENTIMETRE_PER_CUBIC_METRE = 'J87';
+
+    /**
+     * cubic decimetre per day
+     */
+    const REC20_CUBIC_DECIMETRE_PER_DAY = 'J90';
+
+    /**
+     * cubic decimetre per cubic metre
+     */
+    const REC20_CUBIC_DECIMETRE_PER_CUBIC_METRE = 'J91';
+
+    /**
+     * cubic decimetre per minute
+     */
+    const REC20_CUBIC_DECIMETRE_PER_MINUTE = 'J92';
+
+    /**
+     * cubic decimetre per second
+     */
+    const REC20_CUBIC_DECIMETRE_PER_SECOND = 'J93';
+
+    /**
+     * ounce (UK fluid) per day
+     */
+    const REC20_OUNCE_UK_FLUID_PER_DAY = 'J95';
+
+    /**
+     * ounce (UK fluid) per hour
+     */
+    const REC20_OUNCE_UK_FLUID_PER_HOUR = 'J96';
+
+    /**
+     * ounce (UK fluid) per minute
+     */
+    const REC20_OUNCE_UK_FLUID_PER_MINUTE = 'J97';
+
+    /**
+     * ounce (UK fluid) per second
+     */
+    const REC20_OUNCE_UK_FLUID_PER_SECOND = 'J98';
+
+    /**
+     * ounce (US fluid) per day
+     */
+    const REC20_OUNCE_US_FLUID_PER_DAY = 'J99';
+
+    /**
+     * joule per kelvin
+     */
+    const REC20_JOULE_PER_KELVIN = 'JE';
+
+    /**
+     * megajoule per kilogram
+     */
+    const REC20_MEGAJOULE_PER_KILOGRAM = 'JK';
+
+    /**
+     * megajoule per cubic metre
+     */
+    const REC20_MEGAJOULE_PER_CUBIC_METRE = 'JM';
+
+    /**
+     * pipeline joint
+     */
+    const REC20_PIPELINE_JOINT = 'JNT';
+
+    /**
+     * joule
+     */
+    const REC20_JOULE = 'JOU';
+
+    /**
+     * hundred metre
+     */
+    const REC20_HUNDRED_METRE = 'JPS';
+
+    /**
+     * number of jewels
+     */
+    const REC20_NUMBER_OF_JEWELS = 'JWL';
+
+    /**
+     * kilowatt demand
+     */
+    const REC20_KILOWATT_DEMAND = 'K1';
+
+    /**
+     * ounce (US fluid) per hour
+     */
+    const REC20_OUNCE_US_FLUID_PER_HOUR = 'K10';
+
+    /**
+     * ounce (US fluid) per minute
+     */
+    const REC20_OUNCE_US_FLUID_PER_MINUTE = 'K11';
+
+    /**
+     * ounce (US fluid) per second
+     */
+    const REC20_OUNCE_US_FLUID_PER_SECOND = 'K12';
+
+    /**
+     * foot per degree Fahrenheit
+     */
+    const REC20_FOOT_PER_DEGREE_FAHRENHEIT = 'K13';
+
+    /**
+     * foot per hour
+     */
+    const REC20_FOOT_PER_HOUR = 'K14';
+
+    /**
+     * foot pound-force per hour
+     */
+    const REC20_FOOT_POUNDFORCE_PER_HOUR = 'K15';
+
+    /**
+     * foot pound-force per minute
+     */
+    const REC20_FOOT_POUNDFORCE_PER_MINUTE = 'K16';
+
+    /**
+     * foot per psi
+     */
+    const REC20_FOOT_PER_PSI = 'K17';
+
+    /**
+     * foot per second degree Fahrenheit
+     */
+    const REC20_FOOT_PER_SECOND_DEGREE_FAHRENHEIT = 'K18';
+
+    /**
+     * foot per second psi
+     */
+    const REC20_FOOT_PER_SECOND_PSI = 'K19';
+
+    /**
+     * kilovolt ampere reactive demand
+     */
+    const REC20_KILOVOLT_AMPERE_REACTIVE_DEMAND = 'K2';
+
+    /**
+     * reciprocal cubic foot
+     */
+    const REC20_RECIPROCAL_CUBIC_FOOT = 'K20';
+
+    /**
+     * cubic foot per degree Fahrenheit
+     */
+    const REC20_CUBIC_FOOT_PER_DEGREE_FAHRENHEIT = 'K21';
+
+    /**
+     * cubic foot per day
+     */
+    const REC20_CUBIC_FOOT_PER_DAY = 'K22';
+
+    /**
+     * cubic foot per psi
+     */
+    const REC20_CUBIC_FOOT_PER_PSI = 'K23';
+
+    /**
+     * gallon (UK) per day
+     */
+    const REC20_GALLON_UK_PER_DAY = 'K26';
+
+    /**
+     * gallon (UK) per hour
+     */
+    const REC20_GALLON_UK_PER_HOUR = 'K27';
+
+    /**
+     * gallon (UK) per second
+     */
+    const REC20_GALLON_UK_PER_SECOND = 'K28';
+
+    /**
+     * kilovolt ampere reactive hour
+     */
+    const REC20_KILOVOLT_AMPERE_REACTIVE_HOUR = 'K3';
+
+    /**
+     * gallon (US liquid) per second
+     */
+    const REC20_GALLON_US_LIQUID_PER_SECOND = 'K30';
+
+    /**
+     * gram-force per square centimetre
+     */
+    const REC20_GRAMFORCE_PER_SQUARE_CENTIMETRE = 'K31';
+
+    /**
+     * gill (UK) per day
+     */
+    const REC20_GILL_UK_PER_DAY = 'K32';
+
+    /**
+     * gill (UK) per hour
+     */
+    const REC20_GILL_UK_PER_HOUR = 'K33';
+
+    /**
+     * gill (UK) per minute
+     */
+    const REC20_GILL_UK_PER_MINUTE = 'K34';
+
+    /**
+     * gill (UK) per second
+     */
+    const REC20_GILL_UK_PER_SECOND = 'K35';
+
+    /**
+     * gill (US) per day
+     */
+    const REC20_GILL_US_PER_DAY = 'K36';
+
+    /**
+     * gill (US) per hour
+     */
+    const REC20_GILL_US_PER_HOUR = 'K37';
+
+    /**
+     * gill (US) per minute
+     */
+    const REC20_GILL_US_PER_MINUTE = 'K38';
+
+    /**
+     * gill (US) per second
+     */
+    const REC20_GILL_US_PER_SECOND = 'K39';
+
+    /**
+     * standard acceleration of free fall
+     */
+    const REC20_STANDARD_ACCELERATION_OF_FREE_FALL = 'K40';
+
+    /**
+     * grain per gallon (US)
+     */
+    const REC20_GRAIN_PER_GALLON_US = 'K41';
+
+    /**
+     * horsepower (boiler)
+     */
+    const REC20_HORSEPOWER_BOILER = 'K42';
+
+    /**
+     * horsepower (electric)
+     */
+    const REC20_HORSEPOWER_ELECTRIC = 'K43';
+
+    /**
+     * inch per degree Fahrenheit
+     */
+    const REC20_INCH_PER_DEGREE_FAHRENHEIT = 'K45';
+
+    /**
+     * inch per psi
+     */
+    const REC20_INCH_PER_PSI = 'K46';
+
+    /**
+     * inch per second degree Fahrenheit
+     */
+    const REC20_INCH_PER_SECOND_DEGREE_FAHRENHEIT = 'K47';
+
+    /**
+     * inch per second psi
+     */
+    const REC20_INCH_PER_SECOND_PSI = 'K48';
+
+    /**
+     * reciprocal cubic inch
+     */
+    const REC20_RECIPROCAL_CUBIC_INCH = 'K49';
+
+    /**
+     * kilobaud
+     */
+    const REC20_KILOBAUD = 'K50';
+
+    /**
+     * kilocalorie (mean)
+     */
+    const REC20_KILOCALORIE_MEAN = 'K51';
+
+    /**
+     * kilocalorie (international table) per hour metre degree Celsius
+     */
+    const REC20_KILOCALORIE_INTERNATIONAL_TABLE_PER_HOUR_METRE_DEGREE_CELSIUS = 'K52';
+
+    /**
+     * kilocalorie (thermochemical)
+     */
+    const REC20_KILOCALORIE_THERMOCHEMICAL = 'K53';
+
+    /**
+     * kilocalorie (thermochemical) per minute
+     */
+    const REC20_KILOCALORIE_THERMOCHEMICAL_PER_MINUTE = 'K54';
+
+    /**
+     * kilocalorie (thermochemical) per second
+     */
+    const REC20_KILOCALORIE_THERMOCHEMICAL_PER_SECOND = 'K55';
+
+    /**
+     * kilomole per hour
+     */
+    const REC20_KILOMOLE_PER_HOUR = 'K58';
+
+    /**
+     * kilomole per cubic metre kelvin
+     */
+    const REC20_KILOMOLE_PER_CUBIC_METRE_KELVIN = 'K59';
+
+    /**
+     * kilolitre
+     */
+    const REC20_KILOLITRE = 'K6';
+
+    /**
+     * kilomole per cubic metre bar
+     */
+    const REC20_KILOMOLE_PER_CUBIC_METRE_BAR = 'K60';
+
+    /**
+     * kilomole per minute
+     */
+    const REC20_KILOMOLE_PER_MINUTE = 'K61';
+
+    /**
+     * litre per litre
+     */
+    const REC20_LITRE_PER_LITRE = 'K62';
+
+    /**
+     * reciprocal litre
+     */
+    const REC20_RECIPROCAL_LITRE = 'K63';
+
+    /**
+     * pound (avoirdupois) per degree Fahrenheit
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_DEGREE_FAHRENHEIT = 'K64';
+
+    /**
+     * pound (avoirdupois) square foot
+     */
+    const REC20_POUND_AVOIRDUPOIS_SQUARE_FOOT = 'K65';
+
+    /**
+     * pound (avoirdupois) per day
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_DAY = 'K66';
+
+    /**
+     * pound per foot hour
+     */
+    const REC20_POUND_PER_FOOT_HOUR = 'K67';
+
+    /**
+     * pound per foot second
+     */
+    const REC20_POUND_PER_FOOT_SECOND = 'K68';
+
+    /**
+     * pound (avoirdupois) per cubic foot degree Fahrenheit
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_CUBIC_FOOT_DEGREE_FAHRENHEIT = 'K69';
+
+    /**
+     * pound (avoirdupois) per cubic foot psi
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_CUBIC_FOOT_PSI = 'K70';
+
+    /**
+     * pound (avoirdupois) per gallon (UK)
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_GALLON_UK = 'K71';
+
+    /**
+     * pound (avoirdupois) per hour degree Fahrenheit
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_HOUR_DEGREE_FAHRENHEIT = 'K73';
+
+    /**
+     * pound (avoirdupois) per hour psi
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_HOUR_PSI = 'K74';
+
+    /**
+     * pound (avoirdupois) per cubic inch degree Fahrenheit
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_CUBIC_INCH_DEGREE_FAHRENHEIT = 'K75';
+
+    /**
+     * pound (avoirdupois) per cubic inch psi
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_CUBIC_INCH_PSI = 'K76';
+
+    /**
+     * pound (avoirdupois) per psi
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_PSI = 'K77';
+
+    /**
+     * pound (avoirdupois) per minute
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_MINUTE = 'K78';
+
+    /**
+     * pound (avoirdupois) per minute degree Fahrenheit
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_MINUTE_DEGREE_FAHRENHEIT = 'K79';
+
+    /**
+     * pound (avoirdupois) per minute psi
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_MINUTE_PSI = 'K80';
+
+    /**
+     * pound (avoirdupois) per second
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_SECOND = 'K81';
+
+    /**
+     * pound (avoirdupois) per second degree Fahrenheit
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_SECOND_DEGREE_FAHRENHEIT = 'K82';
+
+    /**
+     * pound (avoirdupois) per second psi
+     */
+    const REC20_POUND_AVOIRDUPOIS_PER_SECOND_PSI = 'K83';
+
+    /**
+     * pound per cubic yard
+     */
+    const REC20_POUND_PER_CUBIC_YARD = 'K84';
+
+    /**
+     * pound-force per square foot
+     */
+    const REC20_POUNDFORCE_PER_SQUARE_FOOT = 'K85';
+
+    /**
+     * pound-force per square inch degree Fahrenheit
+     */
+    const REC20_POUNDFORCE_PER_SQUARE_INCH_DEGREE_FAHRENHEIT = 'K86';
+
+    /**
+     * psi cubic inch per second
+     */
+    const REC20_PSI_CUBIC_INCH_PER_SECOND = 'K87';
+
+    /**
+     * psi litre per second
+     */
+    const REC20_PSI_LITRE_PER_SECOND = 'K88';
+
+    /**
+     * psi cubic metre per second
+     */
+    const REC20_PSI_CUBIC_METRE_PER_SECOND = 'K89';
+
+    /**
+     * psi cubic yard per second
+     */
+    const REC20_PSI_CUBIC_YARD_PER_SECOND = 'K90';
+
+    /**
+     * pound-force second per square foot
+     */
+    const REC20_POUNDFORCE_SECOND_PER_SQUARE_FOOT = 'K91';
+
+    /**
+     * pound-force second per square inch
+     */
+    const REC20_POUNDFORCE_SECOND_PER_SQUARE_INCH = 'K92';
+
+    /**
+     * reciprocal psi
+     */
+    const REC20_RECIPROCAL_PSI = 'K93';
+
+    /**
+     * quart (UK liquid) per day
+     */
+    const REC20_QUART_UK_LIQUID_PER_DAY = 'K94';
+
+    /**
+     * quart (UK liquid) per hour
+     */
+    const REC20_QUART_UK_LIQUID_PER_HOUR = 'K95';
+
+    /**
+     * quart (UK liquid) per minute
+     */
+    const REC20_QUART_UK_LIQUID_PER_MINUTE = 'K96';
+
+    /**
+     * quart (UK liquid) per second
+     */
+    const REC20_QUART_UK_LIQUID_PER_SECOND = 'K97';
+
+    /**
+     * quart (US liquid) per day
+     */
+    const REC20_QUART_US_LIQUID_PER_DAY = 'K98';
+
+    /**
+     * quart (US liquid) per hour
+     */
+    const REC20_QUART_US_LIQUID_PER_HOUR = 'K99';
+
+    /**
+     * cake
+     */
+    const REC20_CAKE = 'KA';
+
+    /**
+     * katal
+     */
+    const REC20_KATAL = 'KAT';
+
+    /**
+     * kilocharacter
+     */
+    const REC20_KILOCHARACTER = 'KB';
+
+    /**
+     * kilobar
+     */
+    const REC20_KILOBAR = 'KBA';
+
+    /**
+     * kilogram of choline chloride
+     */
+    const REC20_KILOGRAM_OF_CHOLINE_CHLORIDE = 'KCC';
+
+    /**
+     * kilogram drained net weight
+     */
+    const REC20_KILOGRAM_DRAINED_NET_WEIGHT = 'KDW';
+
+    /**
+     * kelvin
+     */
+    const REC20_KELVIN = 'KEL';
+
+    /**
+     * kilogram
+     */
+    const REC20_KILOGRAM = 'KGM';
+
+    /**
+     * kilogram per second
+     */
+    const REC20_KILOGRAM_PER_SECOND = 'KGS';
+
+    /**
+     * kilogram of hydrogen peroxide
+     */
+    const REC20_KILOGRAM_OF_HYDROGEN_PEROXIDE = 'KHY';
+
+    /**
+     * kilohertz
+     */
+    const REC20_KILOHERTZ = 'KHZ';
+
+    /**
+     * kilogram per millimetre width
+     */
+    const REC20_KILOGRAM_PER_MILLIMETRE_WIDTH = 'KI';
+
+    /**
+     * kilogram, including container
+     */
+    const REC20_KILOGRAM_INCLUDING_CONTAINER = 'KIC';
+
+    /**
+     * kilogram, including inner packaging
+     */
+    const REC20_KILOGRAM_INCLUDING_INNER_PACKAGING = 'KIP';
+
+    /**
+     * kilosegment
+     */
+    const REC20_KILOSEGMENT = 'KJ';
+
+    /**
+     * kilojoule
+     */
+    const REC20_KILOJOULE = 'KJO';
+
+    /**
+     * kilogram per metre
+     */
+    const REC20_KILOGRAM_PER_METRE = 'KL';
+
+    /**
+     * lactic dry material percentage
+     */
+    const REC20_LACTIC_DRY_MATERIAL_PERCENTAGE = 'KLK';
+
+    /**
+     * kilolux
+     */
+    const REC20_KILOLUX = 'KLX';
+
+    /**
+     * kilogram of methylamine
+     */
+    const REC20_KILOGRAM_OF_METHYLAMINE = 'KMA';
+
+    /**
+     * kilometre per hour
+     */
+    const REC20_KILOMETRE_PER_HOUR = 'KMH';
+
+    /**
+     * square kilometre
+     */
+    const REC20_SQUARE_KILOMETRE = 'KMK';
+
+    /**
+     * kilogram per cubic metre
+     */
+    const REC20_KILOGRAM_PER_CUBIC_METRE = 'KMQ';
+
+    /**
+     * kilometre
+     */
+    const REC20_KILOMETRE = 'KMT';
+
+    /**
+     * kilogram of nitrogen
+     */
+    const REC20_KILOGRAM_OF_NITROGEN = 'KNI';
+
+    /**
+     * kilonewton per square metre
+     */
+    const REC20_KILONEWTON_PER_SQUARE_METRE = 'KNM';
+
+    /**
+     * kilogram named substance
+     */
+    const REC20_KILOGRAM_NAMED_SUBSTANCE = 'KNS';
+
+    /**
+     * knot
+     */
+    const REC20_KNOT = 'KNT';
+
+    /**
+     * milliequivalence caustic potash per gram of product
+     */
+    const REC20_MILLIEQUIVALENCE_CAUSTIC_POTASH_PER_GRAM_OF_PRODUCT = 'KO';
+
+    /**
+     * kilopascal
+     */
+    const REC20_KILOPASCAL = 'KPA';
+
+    /**
+     * kilogram of potassium hydroxide (caustic potash)
+     */
+    const REC20_KILOGRAM_OF_POTASSIUM_HYDROXIDE_CAUSTIC_POTASH = 'KPH';
+
+    /**
+     * kilogram of potassium oxide
+     */
+    const REC20_KILOGRAM_OF_POTASSIUM_OXIDE = 'KPO';
+
+    /**
+     * kilogram of phosphorus pentoxide (phosphoric anhydride)
+     */
+    const REC20_KILOGRAM_OF_PHOSPHORUS_PENTOXIDE_PHOSPHORIC_ANHYDRIDE = 'KPP';
+
+    /**
+     * kiloroentgen
+     */
+    const REC20_KILOROENTGEN = 'KR';
+
+    /**
+     * kilogram of substance 90 % dry
+     */
+    const REC20_KILOGRAM_OF_SUBSTANCE_90__DRY = 'KSD';
+
+    /**
+     * kilogram of sodium hydroxide (caustic soda)
+     */
+    const REC20_KILOGRAM_OF_SODIUM_HYDROXIDE_CAUSTIC_SODA = 'KSH';
+
+    /**
+     * kit
+     */
+    const REC20_KIT = 'KT';
+
+    /**
+     * kilotonne
+     */
+    const REC20_KILOTONNE = 'KTN';
+
+    /**
+     * kilogram of uranium
+     */
+    const REC20_KILOGRAM_OF_URANIUM = 'KUR';
+
+    /**
+     * kilovolt - ampere
+     */
+    const REC20_KILOVOLT__AMPERE = 'KVA';
+
+    /**
+     * kilovar
+     */
+    const REC20_KILOVAR = 'KVR';
+
+    /**
+     * kilovolt
+     */
+    const REC20_KILOVOLT = 'KVT';
+
+    /**
+     * kilogram per millimetre
+     */
+    const REC20_KILOGRAM_PER_MILLIMETRE = 'KW';
+
+    /**
+     * kilowatt hour
+     */
+    const REC20_KILOWATT_HOUR = 'KWH';
+
+    /**
+     * Kilowatt hour per normalized cubic metre
+     */
+    const REC20_KILOWATT_HOUR_PER_NORMALIZED_CUBIC_METRE = 'KWN';
+
+    /**
+     * kilogram of tungsten trioxide
+     */
+    const REC20_KILOGRAM_OF_TUNGSTEN_TRIOXIDE = 'KWO';
+
+    /**
+     * Kilowatt hour per standard cubic metre
+     */
+    const REC20_KILOWATT_HOUR_PER_STANDARD_CUBIC_METRE = 'KWS';
+
+    /**
+     * kilowatt
+     */
+    const REC20_KILOWATT = 'KWT';
+
+    /**
+     * millilitre per kilogram
+     */
+    const REC20_MILLILITRE_PER_KILOGRAM = 'KX';
+
+    /**
+     * quart (US liquid) per minute
+     */
+    const REC20_QUART_US_LIQUID_PER_MINUTE = 'L10';
+
+    /**
+     * quart (US liquid) per second
+     */
+    const REC20_QUART_US_LIQUID_PER_SECOND = 'L11';
+
+    /**
+     * metre per second kelvin
+     */
+    const REC20_METRE_PER_SECOND_KELVIN = 'L12';
+
+    /**
+     * metre per second bar
+     */
+    const REC20_METRE_PER_SECOND_BAR = 'L13';
+
+    /**
+     * square metre hour degree Celsius per kilocalorie (international table)
+     */
+    const REC20_SQUARE_METRE_HOUR_DEGREE_CELSIUS_PER_KILOCALORIE_INTERNATIONAL_TABLE = 'L14';
+
+    /**
+     * millipascal second per kelvin
+     */
+    const REC20_MILLIPASCAL_SECOND_PER_KELVIN = 'L15';
+
+    /**
+     * millipascal second per bar
+     */
+    const REC20_MILLIPASCAL_SECOND_PER_BAR = 'L16';
+
+    /**
+     * milligram per cubic metre kelvin
+     */
+    const REC20_MILLIGRAM_PER_CUBIC_METRE_KELVIN = 'L17';
+
+    /**
+     * milligram per cubic metre bar
+     */
+    const REC20_MILLIGRAM_PER_CUBIC_METRE_BAR = 'L18';
+
+    /**
+     * millilitre per litre
+     */
+    const REC20_MILLILITRE_PER_LITRE = 'L19';
+
+    /**
+     * litre per minute
+     */
+    const REC20_LITRE_PER_MINUTE = 'L2';
+
+    /**
+     * reciprocal cubic millimetre
+     */
+    const REC20_RECIPROCAL_CUBIC_MILLIMETRE = 'L20';
+
+    /**
+     * cubic millimetre per cubic metre
+     */
+    const REC20_CUBIC_MILLIMETRE_PER_CUBIC_METRE = 'L21';
+
+    /**
+     * mole per hour
+     */
+    const REC20_MOLE_PER_HOUR = 'L23';
+
+    /**
+     * mole per kilogram kelvin
+     */
+    const REC20_MOLE_PER_KILOGRAM_KELVIN = 'L24';
+
+    /**
+     * mole per kilogram bar
+     */
+    const REC20_MOLE_PER_KILOGRAM_BAR = 'L25';
+
+    /**
+     * mole per litre kelvin
+     */
+    const REC20_MOLE_PER_LITRE_KELVIN = 'L26';
+
+    /**
+     * mole per litre bar
+     */
+    const REC20_MOLE_PER_LITRE_BAR = 'L27';
+
+    /**
+     * mole per cubic metre kelvin
+     */
+    const REC20_MOLE_PER_CUBIC_METRE_KELVIN = 'L28';
+
+    /**
+     * mole per cubic metre bar
+     */
+    const REC20_MOLE_PER_CUBIC_METRE_BAR = 'L29';
+
+    /**
+     * mole per minute
+     */
+    const REC20_MOLE_PER_MINUTE = 'L30';
+
+    /**
+     * milliroentgen aequivalent men
+     */
+    const REC20_MILLIROENTGEN_AEQUIVALENT_MEN = 'L31';
+
+    /**
+     * nanogram per kilogram
+     */
+    const REC20_NANOGRAM_PER_KILOGRAM = 'L32';
+
+    /**
+     * ounce (avoirdupois) per day
+     */
+    const REC20_OUNCE_AVOIRDUPOIS_PER_DAY = 'L33';
+
+    /**
+     * ounce (avoirdupois) per hour
+     */
+    const REC20_OUNCE_AVOIRDUPOIS_PER_HOUR = 'L34';
+
+    /**
+     * ounce (avoirdupois) per minute
+     */
+    const REC20_OUNCE_AVOIRDUPOIS_PER_MINUTE = 'L35';
+
+    /**
+     * ounce (avoirdupois) per second
+     */
+    const REC20_OUNCE_AVOIRDUPOIS_PER_SECOND = 'L36';
+
+    /**
+     * ounce (avoirdupois) per gallon (UK)
+     */
+    const REC20_OUNCE_AVOIRDUPOIS_PER_GALLON_UK = 'L37';
+
+    /**
+     * ounce (avoirdupois) per gallon (US)
+     */
+    const REC20_OUNCE_AVOIRDUPOIS_PER_GALLON_US = 'L38';
+
+    /**
+     * ounce (avoirdupois) per cubic inch
+     */
+    const REC20_OUNCE_AVOIRDUPOIS_PER_CUBIC_INCH = 'L39';
+
+    /**
+     * ounce (avoirdupois)-force
+     */
+    const REC20_OUNCE_AVOIRDUPOISFORCE = 'L40';
+
+    /**
+     * ounce (avoirdupois)-force inch
+     */
+    const REC20_OUNCE_AVOIRDUPOISFORCE_INCH = 'L41';
+
+    /**
+     * picosiemens per metre
+     */
+    const REC20_PICOSIEMENS_PER_METRE = 'L42';
+
+    /**
+     * peck (UK)
+     */
+    const REC20_PECK_UK = 'L43';
+
+    /**
+     * peck (UK) per day
+     */
+    const REC20_PECK_UK_PER_DAY = 'L44';
+
+    /**
+     * peck (UK) per hour
+     */
+    const REC20_PECK_UK_PER_HOUR = 'L45';
+
+    /**
+     * peck (UK) per minute
+     */
+    const REC20_PECK_UK_PER_MINUTE = 'L46';
+
+    /**
+     * peck (UK) per second
+     */
+    const REC20_PECK_UK_PER_SECOND = 'L47';
+
+    /**
+     * peck (US dry) per day
+     */
+    const REC20_PECK_US_DRY_PER_DAY = 'L48';
+
+    /**
+     * peck (US dry) per hour
+     */
+    const REC20_PECK_US_DRY_PER_HOUR = 'L49';
+
+    /**
+     * peck (US dry) per minute
+     */
+    const REC20_PECK_US_DRY_PER_MINUTE = 'L50';
+
+    /**
+     * peck (US dry) per second
+     */
+    const REC20_PECK_US_DRY_PER_SECOND = 'L51';
+
+    /**
+     * psi per psi
+     */
+    const REC20_PSI_PER_PSI = 'L52';
+
+    /**
+     * pint (UK) per day
+     */
+    const REC20_PINT_UK_PER_DAY = 'L53';
+
+    /**
+     * pint (UK) per hour
+     */
+    const REC20_PINT_UK_PER_HOUR = 'L54';
+
+    /**
+     * pint (UK) per minute
+     */
+    const REC20_PINT_UK_PER_MINUTE = 'L55';
+
+    /**
+     * pint (UK) per second
+     */
+    const REC20_PINT_UK_PER_SECOND = 'L56';
+
+    /**
+     * pint (US liquid) per day
+     */
+    const REC20_PINT_US_LIQUID_PER_DAY = 'L57';
+
+    /**
+     * pint (US liquid) per hour
+     */
+    const REC20_PINT_US_LIQUID_PER_HOUR = 'L58';
+
+    /**
+     * pint (US liquid) per minute
+     */
+    const REC20_PINT_US_LIQUID_PER_MINUTE = 'L59';
+
+    /**
+     * pint (US liquid) per second
+     */
+    const REC20_PINT_US_LIQUID_PER_SECOND = 'L60';
+
+    /**
+     * slug per day
+     */
+    const REC20_SLUG_PER_DAY = 'L63';
+
+    /**
+     * slug per foot second
+     */
+    const REC20_SLUG_PER_FOOT_SECOND = 'L64';
+
+    /**
+     * slug per cubic foot
+     */
+    const REC20_SLUG_PER_CUBIC_FOOT = 'L65';
+
+    /**
+     * slug per hour
+     */
+    const REC20_SLUG_PER_HOUR = 'L66';
+
+    /**
+     * slug per minute
+     */
+    const REC20_SLUG_PER_MINUTE = 'L67';
+
+    /**
+     * slug per second
+     */
+    const REC20_SLUG_PER_SECOND = 'L68';
+
+    /**
+     * tonne per kelvin
+     */
+    const REC20_TONNE_PER_KELVIN = 'L69';
+
+    /**
+     * tonne per bar
+     */
+    const REC20_TONNE_PER_BAR = 'L70';
+
+    /**
+     * tonne per day
+     */
+    const REC20_TONNE_PER_DAY = 'L71';
+
+    /**
+     * tonne per day kelvin
+     */
+    const REC20_TONNE_PER_DAY_KELVIN = 'L72';
+
+    /**
+     * tonne per day bar
+     */
+    const REC20_TONNE_PER_DAY_BAR = 'L73';
+
+    /**
+     * tonne per hour kelvin
+     */
+    const REC20_TONNE_PER_HOUR_KELVIN = 'L74';
+
+    /**
+     * tonne per hour bar
+     */
+    const REC20_TONNE_PER_HOUR_BAR = 'L75';
+
+    /**
+     * tonne per cubic metre kelvin
+     */
+    const REC20_TONNE_PER_CUBIC_METRE_KELVIN = 'L76';
+
+    /**
+     * tonne per cubic metre bar
+     */
+    const REC20_TONNE_PER_CUBIC_METRE_BAR = 'L77';
+
+    /**
+     * tonne per minute
+     */
+    const REC20_TONNE_PER_MINUTE = 'L78';
+
+    /**
+     * tonne per minute kelvin
+     */
+    const REC20_TONNE_PER_MINUTE_KELVIN = 'L79';
+
+    /**
+     * tonne per minute bar
+     */
+    const REC20_TONNE_PER_MINUTE_BAR = 'L80';
+
+    /**
+     * tonne per second
+     */
+    const REC20_TONNE_PER_SECOND = 'L81';
+
+    /**
+     * tonne per second kelvin
+     */
+    const REC20_TONNE_PER_SECOND_KELVIN = 'L82';
+
+    /**
+     * tonne per second bar
+     */
+    const REC20_TONNE_PER_SECOND_BAR = 'L83';
+
+    /**
+     * ton (UK shipping)
+     */
+    const REC20_TON_UK_SHIPPING = 'L84';
+
+    /**
+     * ton long per day
+     */
+    const REC20_TON_LONG_PER_DAY = 'L85';
+
+    /**
+     * ton (US shipping)
+     */
+    const REC20_TON_US_SHIPPING = 'L86';
+
+    /**
+     * ton short per degree Fahrenheit
+     */
+    const REC20_TON_SHORT_PER_DEGREE_FAHRENHEIT = 'L87';
+
+    /**
+     * ton short per day
+     */
+    const REC20_TON_SHORT_PER_DAY = 'L88';
+
+    /**
+     * ton short per hour degree Fahrenheit
+     */
+    const REC20_TON_SHORT_PER_HOUR_DEGREE_FAHRENHEIT = 'L89';
+
+    /**
+     * ton short per hour psi
+     */
+    const REC20_TON_SHORT_PER_HOUR_PSI = 'L90';
+
+    /**
+     * ton short per psi
+     */
+    const REC20_TON_SHORT_PER_PSI = 'L91';
+
+    /**
+     * ton (UK long) per cubic yard
+     */
+    const REC20_TON_UK_LONG_PER_CUBIC_YARD = 'L92';
+
+    /**
+     * ton (US short) per cubic yard
+     */
+    const REC20_TON_US_SHORT_PER_CUBIC_YARD = 'L93';
+
+    /**
+     * ton-force (US short)
+     */
+    const REC20_TONFORCE_US_SHORT = 'L94';
+
+    /**
+     * common year
+     */
+    const REC20_COMMON_YEAR = 'L95';
+
+    /**
+     * sidereal year
+     */
+    const REC20_SIDEREAL_YEAR = 'L96';
+
+    /**
+     * yard per degree Fahrenheit
+     */
+    const REC20_YARD_PER_DEGREE_FAHRENHEIT = 'L98';
+
+    /**
+     * yard per psi
+     */
+    const REC20_YARD_PER_PSI = 'L99';
+
+    /**
+     * pound per cubic inch
+     */
+    const REC20_POUND_PER_CUBIC_INCH = 'LA';
+
+    /**
+     * lactose excess percentage
+     */
+    const REC20_LACTOSE_EXCESS_PERCENTAGE = 'LAC';
+
+    /**
+     * pound
+     */
+    const REC20_POUND = 'LBR';
+
+    /**
+     * troy pound (US)
+     */
+    const REC20_TROY_POUND_US = 'LBT';
+
+    /**
+     * litre per day
+     */
+    const REC20_LITRE_PER_DAY = 'LD';
+
+    /**
+     * leaf
+     */
+    const REC20_LEAF = 'LEF';
+
+    /**
+     * linear foot
+     */
+    const REC20_LINEAR_FOOT = 'LF';
+
+    /**
+     * labour hour
+     */
+    const REC20_LABOUR_HOUR = 'LH';
+
+    /**
+     * link
+     */
+    const REC20_LINK = 'LK';
+
+    /**
+     * linear metre
+     */
+    const REC20_LINEAR_METRE = 'LM';
+
+    /**
+     * length
+     */
+    const REC20_LENGTH = 'LN';
+
+    /**
+     * lot  [unit of procurement]
+     */
+    const REC20_LOT__UNIT_OF_PROCUREMENT = 'LO';
+
+    /**
+     * liquid pound
+     */
+    const REC20_LIQUID_POUND = 'LP';
+
+    /**
+     * litre of pure alcohol
+     */
+    const REC20_LITRE_OF_PURE_ALCOHOL = 'LPA';
+
+    /**
+     * layer
+     */
+    const REC20_LAYER = 'LR';
+
+    /**
+     * lump sum
+     */
+    const REC20_LUMP_SUM = 'LS';
+
+    /**
+     * ton (UK) or long ton (US)
+     */
+    const REC20_TON_UK_OR_LONG_TON_US = 'LTN';
+
+    /**
+     * litre
+     */
+    const REC20_LITRE = 'LTR';
+
+    /**
+     * metric ton, lubricating oil
+     */
+    const REC20_METRIC_TON_LUBRICATING_OIL = 'LUB';
+
+    /**
+     * lumen
+     */
+    const REC20_LUMEN = 'LUM';
+
+    /**
+     * lux
+     */
+    const REC20_LUX = 'LUX';
+
+    /**
+     * linear yard
+     */
+    const REC20_LINEAR_YARD = 'LY';
+
+    /**
+     * milligram per litre
+     */
+    const REC20_MILLIGRAM_PER_LITRE = 'M1';
+
+    /**
+     * reciprocal cubic yard
+     */
+    const REC20_RECIPROCAL_CUBIC_YARD = 'M10';
+
+    /**
+     * cubic yard per degree Fahrenheit
+     */
+    const REC20_CUBIC_YARD_PER_DEGREE_FAHRENHEIT = 'M11';
+
+    /**
+     * cubic yard per day
+     */
+    const REC20_CUBIC_YARD_PER_DAY = 'M12';
+
+    /**
+     * cubic yard per hour
+     */
+    const REC20_CUBIC_YARD_PER_HOUR = 'M13';
+
+    /**
+     * cubic yard per psi
+     */
+    const REC20_CUBIC_YARD_PER_PSI = 'M14';
+
+    /**
+     * cubic yard per minute
+     */
+    const REC20_CUBIC_YARD_PER_MINUTE = 'M15';
+
+    /**
+     * cubic yard per second
+     */
+    const REC20_CUBIC_YARD_PER_SECOND = 'M16';
+
+    /**
+     * kilohertz metre
+     */
+    const REC20_KILOHERTZ_METRE = 'M17';
+
+    /**
+     * gigahertz metre
+     */
+    const REC20_GIGAHERTZ_METRE = 'M18';
+
+    /**
+     * Beaufort
+     */
+    const REC20_BEAUFORT = 'M19';
+
+    /**
+     * reciprocal megakelvin or megakelvin to the power minus one
+     */
+    const REC20_RECIPROCAL_MEGAKELVIN_OR_MEGAKELVIN_TO_THE_POWER_MINUS_ONE = 'M20';
+
+    /**
+     * reciprocal kilovolt - ampere reciprocal hour
+     */
+    const REC20_RECIPROCAL_KILOVOLT__AMPERE_RECIPROCAL_HOUR = 'M21';
+
+    /**
+     * millilitre per square centimetre minute
+     */
+    const REC20_MILLILITRE_PER_SQUARE_CENTIMETRE_MINUTE = 'M22';
+
+    /**
+     * newton per centimetre
+     */
+    const REC20_NEWTON_PER_CENTIMETRE = 'M23';
+
+    /**
+     * ohm kilometre
+     */
+    const REC20_OHM_KILOMETRE = 'M24';
+
+    /**
+     * percent per degree Celsius
+     */
+    const REC20_PERCENT_PER_DEGREE_CELSIUS = 'M25';
+
+    /**
+     * gigaohm per metre
+     */
+    const REC20_GIGAOHM_PER_METRE = 'M26';
+
+    /**
+     * megahertz metre
+     */
+    const REC20_MEGAHERTZ_METRE = 'M27';
+
+    /**
+     * kilogram per kilogram
+     */
+    const REC20_KILOGRAM_PER_KILOGRAM = 'M29';
+
+    /**
+     * reciprocal volt - ampere reciprocal second
+     */
+    const REC20_RECIPROCAL_VOLT__AMPERE_RECIPROCAL_SECOND = 'M30';
+
+    /**
+     * kilogram per kilometre
+     */
+    const REC20_KILOGRAM_PER_KILOMETRE = 'M31';
+
+    /**
+     * pascal second per litre
+     */
+    const REC20_PASCAL_SECOND_PER_LITRE = 'M32';
+
+    /**
+     * millimole per litre
+     */
+    const REC20_MILLIMOLE_PER_LITRE = 'M33';
+
+    /**
+     * newton metre per square metre
+     */
+    const REC20_NEWTON_METRE_PER_SQUARE_METRE = 'M34';
+
+    /**
+     * millivolt - ampere
+     */
+    const REC20_MILLIVOLT__AMPERE = 'M35';
+
+    /**
+     * 30-day month
+     */
+    const REC20_30DAY_MONTH = 'M36';
+
+    /**
+     * actual/360
+     */
+    const REC20_ACTUAL_360 = 'M37';
+
+    /**
+     * kilometre per second squared
+     */
+    const REC20_KILOMETRE_PER_SECOND_SQUARED = 'M38';
+
+    /**
+     * centimetre per second squared
+     */
+    const REC20_CENTIMETRE_PER_SECOND_SQUARED = 'M39';
+
+    /**
+     * monetary value
+     */
+    const REC20_MONETARY_VALUE = 'M4';
+
+    /**
+     * yard per second squared
+     */
+    const REC20_YARD_PER_SECOND_SQUARED = 'M40';
+
+    /**
+     * millimetre per second squared
+     */
+    const REC20_MILLIMETRE_PER_SECOND_SQUARED = 'M41';
+
+    /**
+     * mile (statute mile) per second squared
+     */
+    const REC20_MILE_STATUTE_MILE_PER_SECOND_SQUARED = 'M42';
+
+    /**
+     * mil
+     */
+    const REC20_MIL = 'M43';
+
+    /**
+     * revolution
+     */
+    const REC20_REVOLUTION = 'M44';
+
+    /**
+     * degree [unit of angle] per second squared
+     */
+    const REC20_DEGREE_UNIT_OF_ANGLE_PER_SECOND_SQUARED = 'M45';
+
+    /**
+     * revolution per minute
+     */
+    const REC20_REVOLUTION_PER_MINUTE = 'M46';
+
+    /**
+     * circular mil
+     */
+    const REC20_CIRCULAR_MIL = 'M47';
+
+    /**
+     * square mile (based on U.S. survey foot)
+     */
+    const REC20_SQUARE_MILE_BASED_ON_US_SURVEY_FOOT = 'M48';
+
+    /**
+     * chain (based on U.S. survey foot)
+     */
+    const REC20_CHAIN_BASED_ON_US_SURVEY_FOOT = 'M49';
+
+    /**
+     * microcurie
+     */
+    const REC20_MICROCURIE = 'M5';
+
+    /**
+     * furlong
+     */
+    const REC20_FURLONG = 'M50';
+
+    /**
+     * foot (U.S. survey)
+     */
+    const REC20_FOOT_US_SURVEY = 'M51';
+
+    /**
+     * mile (based on U.S. survey foot)
+     */
+    const REC20_MILE_BASED_ON_US_SURVEY_FOOT = 'M52';
+
+    /**
+     * metre per pascal
+     */
+    const REC20_METRE_PER_PASCAL = 'M53';
+
+    /**
+     * metre per radiant
+     */
+    const REC20_METRE_PER_RADIANT = 'M55';
+
+    /**
+     * shake
+     */
+    const REC20_SHAKE = 'M56';
+
+    /**
+     * mile per minute
+     */
+    const REC20_MILE_PER_MINUTE = 'M57';
+
+    /**
+     * mile per second
+     */
+    const REC20_MILE_PER_SECOND = 'M58';
+
+    /**
+     * metre per second pascal
+     */
+    const REC20_METRE_PER_SECOND_PASCAL = 'M59';
+
+    /**
+     * metre per hour
+     */
+    const REC20_METRE_PER_HOUR = 'M60';
+
+    /**
+     * inch per year
+     */
+    const REC20_INCH_PER_YEAR = 'M61';
+
+    /**
+     * kilometre per second
+     */
+    const REC20_KILOMETRE_PER_SECOND = 'M62';
+
+    /**
+     * inch per minute
+     */
+    const REC20_INCH_PER_MINUTE = 'M63';
+
+    /**
+     * yard per second
+     */
+    const REC20_YARD_PER_SECOND = 'M64';
+
+    /**
+     * yard per minute
+     */
+    const REC20_YARD_PER_MINUTE = 'M65';
+
+    /**
+     * yard per hour
+     */
+    const REC20_YARD_PER_HOUR = 'M66';
+
+    /**
+     * acre-foot (based on U.S. survey foot)
+     */
+    const REC20_ACREFOOT_BASED_ON_US_SURVEY_FOOT = 'M67';
+
+    /**
+     * cord (128 ft3)
+     */
+    const REC20_CORD_128_FT3 = 'M68';
+
+    /**
+     * cubic mile (UK statute)
+     */
+    const REC20_CUBIC_MILE_UK_STATUTE = 'M69';
+
+    /**
+     * micro-inch
+     */
+    const REC20_MICROINCH = 'M7';
+
+    /**
+     * ton, register
+     */
+    const REC20_TON_REGISTER = 'M70';
+
+    /**
+     * cubic metre per pascal
+     */
+    const REC20_CUBIC_METRE_PER_PASCAL = 'M71';
+
+    /**
+     * bel
+     */
+    const REC20_BEL = 'M72';
+
+    /**
+     * kilogram per cubic metre pascal
+     */
+    const REC20_KILOGRAM_PER_CUBIC_METRE_PASCAL = 'M73';
+
+    /**
+     * kilogram per pascal
+     */
+    const REC20_KILOGRAM_PER_PASCAL = 'M74';
+
+    /**
+     * kilopound-force
+     */
+    const REC20_KILOPOUNDFORCE = 'M75';
+
+    /**
+     * poundal
+     */
+    const REC20_POUNDAL = 'M76';
+
+    /**
+     * kilogram metre per second squared
+     */
+    const REC20_KILOGRAM_METRE_PER_SECOND_SQUARED = 'M77';
+
+    /**
+     * pond
+     */
+    const REC20_POND = 'M78';
+
+    /**
+     * square foot per hour
+     */
+    const REC20_SQUARE_FOOT_PER_HOUR = 'M79';
+
+    /**
+     * stokes per pascal
+     */
+    const REC20_STOKES_PER_PASCAL = 'M80';
+
+    /**
+     * square centimetre per second
+     */
+    const REC20_SQUARE_CENTIMETRE_PER_SECOND = 'M81';
+
+    /**
+     * square metre per second pascal
+     */
+    const REC20_SQUARE_METRE_PER_SECOND_PASCAL = 'M82';
+
+    /**
+     * denier
+     */
+    const REC20_DENIER = 'M83';
+
+    /**
+     * pound per yard
+     */
+    const REC20_POUND_PER_YARD = 'M84';
+
+    /**
+     * ton, assay
+     */
+    const REC20_TON_ASSAY = 'M85';
+
+    /**
+     * pfund
+     */
+    const REC20_PFUND = 'M86';
+
+    /**
+     * kilogram per second pascal
+     */
+    const REC20_KILOGRAM_PER_SECOND_PASCAL = 'M87';
+
+    /**
+     * tonne per month
+     */
+    const REC20_TONNE_PER_MONTH = 'M88';
+
+    /**
+     * tonne per year
+     */
+    const REC20_TONNE_PER_YEAR = 'M89';
+
+    /**
+     * million Btu per 1000 cubic foot
+     */
+    const REC20_MILLION_BTU_PER_1000_CUBIC_FOOT = 'M9';
+
+    /**
+     * kilopound per hour
+     */
+    const REC20_KILOPOUND_PER_HOUR = 'M90';
+
+    /**
+     * pound per pound
+     */
+    const REC20_POUND_PER_POUND = 'M91';
+
+    /**
+     * pound-force foot
+     */
+    const REC20_POUNDFORCE_FOOT = 'M92';
+
+    /**
+     * newton metre per radian
+     */
+    const REC20_NEWTON_METRE_PER_RADIAN = 'M93';
+
+    /**
+     * kilogram metre
+     */
+    const REC20_KILOGRAM_METRE = 'M94';
+
+    /**
+     * poundal foot
+     */
+    const REC20_POUNDAL_FOOT = 'M95';
+
+    /**
+     * poundal inch
+     */
+    const REC20_POUNDAL_INCH = 'M96';
+
+    /**
+     * dyne metre
+     */
+    const REC20_DYNE_METRE = 'M97';
+
+    /**
+     * kilogram centimetre per second
+     */
+    const REC20_KILOGRAM_CENTIMETRE_PER_SECOND = 'M98';
+
+    /**
+     * gram centimetre per second
+     */
+    const REC20_GRAM_CENTIMETRE_PER_SECOND = 'M99';
+
+    /**
+     * megavolt ampere reactive hour
+     */
+    const REC20_MEGAVOLT_AMPERE_REACTIVE_HOUR = 'MAH';
+
+    /**
+     * megalitre
+     */
+    const REC20_MEGALITRE = 'MAL';
+
+    /**
+     * megametre
+     */
+    const REC20_MEGAMETRE = 'MAM';
+
+    /**
+     * megavar
+     */
+    const REC20_MEGAVAR = 'MAR';
+
+    /**
+     * megawatt
+     */
+    const REC20_MEGAWATT = 'MAW';
+
+    /**
+     * thousand standard brick equivalent
+     */
+    const REC20_THOUSAND_STANDARD_BRICK_EQUIVALENT = 'MBE';
+
+    /**
+     * thousand board foot
+     */
+    const REC20_THOUSAND_BOARD_FOOT = 'MBF';
+
+    /**
+     * millibar
+     */
+    const REC20_MILLIBAR = 'MBR';
+
+    /**
+     * microgram
+     */
+    const REC20_MICROGRAM = 'MC';
+
+    /**
+     * millicurie
+     */
+    const REC20_MILLICURIE = 'MCU';
+
+    /**
+     * air dry metric ton
+     */
+    const REC20_AIR_DRY_METRIC_TON = 'MD';
+
+    /**
+     * milligram
+     */
+    const REC20_MILLIGRAM = 'MGM';
+
+    /**
+     * megahertz
+     */
+    const REC20_MEGAHERTZ = 'MHZ';
+
+    /**
+     * square mile (statute mile)
+     */
+    const REC20_SQUARE_MILE_STATUTE_MILE = 'MIK';
+
+    /**
+     * thousand
+     */
+    const REC20_THOUSAND = 'MIL';
+
+    /**
+     * minute [unit of time]
+     */
+    const REC20_MINUTE_UNIT_OF_TIME = 'MIN';
+
+    /**
+     * million
+     */
+    const REC20_MILLION = 'MIO';
+
+    /**
+     * million international unit
+     */
+    const REC20_MILLION_INTERNATIONAL_UNIT = 'MIU';
+
+    /**
+     * milliard
+     */
+    const REC20_MILLIARD = 'MLD';
+
+    /**
+     * millilitre
+     */
+    const REC20_MILLILITRE = 'MLT';
+
+    /**
+     * square millimetre
+     */
+    const REC20_SQUARE_MILLIMETRE = 'MMK';
+
+    /**
+     * cubic millimetre
+     */
+    const REC20_CUBIC_MILLIMETRE = 'MMQ';
+
+    /**
+     * millimetre
+     */
+    const REC20_MILLIMETRE = 'MMT';
+
+    /**
+     * kilogram, dry weight
+     */
+    const REC20_KILOGRAM_DRY_WEIGHT = 'MND';
+
+    /**
+     * month
+     */
+    const REC20_MONTH = 'MON';
+
+    /**
+     * megapascal
+     */
+    const REC20_MEGAPASCAL = 'MPA';
+
+    /**
+     * cubic metre per hour
+     */
+    const REC20_CUBIC_METRE_PER_HOUR = 'MQH';
+
+    /**
+     * cubic metre per second
+     */
+    const REC20_CUBIC_METRE_PER_SECOND = 'MQS';
+
+    /**
+     * metre per second squared
+     */
+    const REC20_METRE_PER_SECOND_SQUARED = 'MSK';
+
+    /**
+     * square metre
+     */
+    const REC20_SQUARE_METRE = 'MTK';
+
+    /**
+     * cubic metre
+     */
+    const REC20_CUBIC_METRE = 'MTQ';
+
+    /**
+     * metre
+     */
+    const REC20_METRE = 'MTR';
+
+    /**
+     * metre per second
+     */
+    const REC20_METRE_PER_SECOND = 'MTS';
+
+    /**
+     * megavolt - ampere
+     */
+    const REC20_MEGAVOLT__AMPERE = 'MVA';
+
+    /**
+     * megawatt hour (1000Â kW.h)
+     */
+    const REC20_MEGAWATT_HOUR_1000KWH = 'MWH';
+
+    /**
+     * pen calorie
+     */
+    const REC20_PEN_CALORIE = 'N1';
+
+    /**
+     * pound foot per second
+     */
+    const REC20_POUND_FOOT_PER_SECOND = 'N10';
+
+    /**
+     * pound inch per second
+     */
+    const REC20_POUND_INCH_PER_SECOND = 'N11';
+
+    /**
+     * Pferdestaerke
+     */
+    const REC20_PFERDESTAERKE = 'N12';
+
+    /**
+     * centimetre of mercury (0 ÂºC)
+     */
+    const REC20_CENTIMETRE_OF_MERCURY_0_C = 'N13';
+
+    /**
+     * centimetre of water (4 ÂºC)
+     */
+    const REC20_CENTIMETRE_OF_WATER_4_C = 'N14';
+
+    /**
+     * foot of water (39.2 ÂºF)
+     */
+    const REC20_FOOT_OF_WATER_392_F = 'N15';
+
+    /**
+     * inch of mercury (32 ÂºF)
+     */
+    const REC20_INCH_OF_MERCURY_32_F = 'N16';
+
+    /**
+     * inch of mercury (60 ÂºF)
+     */
+    const REC20_INCH_OF_MERCURY_60_F = 'N17';
+
+    /**
+     * inch of water (39.2 ÂºF)
+     */
+    const REC20_INCH_OF_WATER_392_F = 'N18';
+
+    /**
+     * inch of water (60 ÂºF)
+     */
+    const REC20_INCH_OF_WATER_60_F = 'N19';
+
+    /**
+     * kip per square inch
+     */
+    const REC20_KIP_PER_SQUARE_INCH = 'N20';
+
+    /**
+     * poundal per square foot
+     */
+    const REC20_POUNDAL_PER_SQUARE_FOOT = 'N21';
+
+    /**
+     * ounce (avoirdupois) per square inch
+     */
+    const REC20_OUNCE_AVOIRDUPOIS_PER_SQUARE_INCH = 'N22';
+
+    /**
+     * conventional metre of water
+     */
+    const REC20_CONVENTIONAL_METRE_OF_WATER = 'N23';
+
+    /**
+     * gram per square millimetre
+     */
+    const REC20_GRAM_PER_SQUARE_MILLIMETRE = 'N24';
+
+    /**
+     * pound per square yard
+     */
+    const REC20_POUND_PER_SQUARE_YARD = 'N25';
+
+    /**
+     * poundal per square inch
+     */
+    const REC20_POUNDAL_PER_SQUARE_INCH = 'N26';
+
+    /**
+     * foot to the fourth power
+     */
+    const REC20_FOOT_TO_THE_FOURTH_POWER = 'N27';
+
+    /**
+     * cubic decimetre per kilogram
+     */
+    const REC20_CUBIC_DECIMETRE_PER_KILOGRAM = 'N28';
+
+    /**
+     * cubic foot per pound
+     */
+    const REC20_CUBIC_FOOT_PER_POUND = 'N29';
+
+    /**
+     * print point
+     */
+    const REC20_PRINT_POINT = 'N3';
+
+    /**
+     * cubic inch per pound
+     */
+    const REC20_CUBIC_INCH_PER_POUND = 'N30';
+
+    /**
+     * kilonewton per metre
+     */
+    const REC20_KILONEWTON_PER_METRE = 'N31';
+
+    /**
+     * poundal per inch
+     */
+    const REC20_POUNDAL_PER_INCH = 'N32';
+
+    /**
+     * pound-force per yard
+     */
+    const REC20_POUNDFORCE_PER_YARD = 'N33';
+
+    /**
+     * poundal second per square foot
+     */
+    const REC20_POUNDAL_SECOND_PER_SQUARE_FOOT = 'N34';
+
+    /**
+     * poise per pascal
+     */
+    const REC20_POISE_PER_PASCAL = 'N35';
+
+    /**
+     * newton second per square metre
+     */
+    const REC20_NEWTON_SECOND_PER_SQUARE_METRE = 'N36';
+
+    /**
+     * kilogram per metre second
+     */
+    const REC20_KILOGRAM_PER_METRE_SECOND = 'N37';
+
+    /**
+     * kilogram per metre minute
+     */
+    const REC20_KILOGRAM_PER_METRE_MINUTE = 'N38';
+
+    /**
+     * kilogram per metre day
+     */
+    const REC20_KILOGRAM_PER_METRE_DAY = 'N39';
+
+    /**
+     * kilogram per metre hour
+     */
+    const REC20_KILOGRAM_PER_METRE_HOUR = 'N40';
+
+    /**
+     * gram per centimetre second
+     */
+    const REC20_GRAM_PER_CENTIMETRE_SECOND = 'N41';
+
+    /**
+     * poundal second per square inch
+     */
+    const REC20_POUNDAL_SECOND_PER_SQUARE_INCH = 'N42';
+
+    /**
+     * pound per foot minute
+     */
+    const REC20_POUND_PER_FOOT_MINUTE = 'N43';
+
+    /**
+     * pound per foot day
+     */
+    const REC20_POUND_PER_FOOT_DAY = 'N44';
+
+    /**
+     * cubic metre per second pascal
+     */
+    const REC20_CUBIC_METRE_PER_SECOND_PASCAL = 'N45';
+
+    /**
+     * foot poundal
+     */
+    const REC20_FOOT_POUNDAL = 'N46';
+
+    /**
+     * inch poundal
+     */
+    const REC20_INCH_POUNDAL = 'N47';
+
+    /**
+     * watt per square centimetre
+     */
+    const REC20_WATT_PER_SQUARE_CENTIMETRE = 'N48';
+
+    /**
+     * watt per square inch
+     */
+    const REC20_WATT_PER_SQUARE_INCH = 'N49';
+
+    /**
+     * British thermal unit (international table) per square foot hour
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_FOOT_HOUR = 'N50';
+
+    /**
+     * British thermal unit (thermochemical) per square foot hour
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT_HOUR = 'N51';
+
+    /**
+     * British thermal unit (thermochemical) per square foot minute
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT_MINUTE = 'N52';
+
+    /**
+     * British thermal unit (international table) per square foot second
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_FOOT_SECOND = 'N53';
+
+    /**
+     * British thermal unit (thermochemical) per square foot second
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT_SECOND = 'N54';
+
+    /**
+     * British thermal unit (international table) per square inch second
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_INCH_SECOND = 'N55';
+
+    /**
+     * calorie (thermochemical) per square centimetre minute
+     */
+    const REC20_CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE_MINUTE = 'N56';
+
+    /**
+     * calorie (thermochemical) per square centimetre second
+     */
+    const REC20_CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE_SECOND = 'N57';
+
+    /**
+     * British thermal unit (international table) per cubic foot
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_CUBIC_FOOT = 'N58';
+
+    /**
+     * British thermal unit (thermochemical) per cubic foot
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_CUBIC_FOOT = 'N59';
+
+    /**
+     * British thermal unit (international table) per degree Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_DEGREE_FAHRENHEIT = 'N60';
+
+    /**
+     * British thermal unit (thermochemical) per degree Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_DEGREE_FAHRENHEIT = 'N61';
+
+    /**
+     * British thermal unit (international table) per degree Rankine
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_DEGREE_RANKINE = 'N62';
+
+    /**
+     * British thermal unit (thermochemical) per degree Rankine
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_DEGREE_RANKINE = 'N63';
+
+    /**
+     * British thermal unit (thermochemical) per pound degree Rankine
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_POUND_DEGREE_RANKINE = 'N64';
+
+    /**
+     * kilocalorie (international table) per gram kelvin
+     */
+    const REC20_KILOCALORIE_INTERNATIONAL_TABLE_PER_GRAM_KELVIN = 'N65';
+
+    /**
+     * British thermal unit (39 ÂºF)
+     */
+    const REC20_BRITISH_THERMAL_UNIT_39_F = 'N66';
+
+    /**
+     * British thermal unit (59 ÂºF)
+     */
+    const REC20_BRITISH_THERMAL_UNIT_59_F = 'N67';
+
+    /**
+     * British thermal unit (60 ÂºF)
+     */
+    const REC20_BRITISH_THERMAL_UNIT_60_F = 'N68';
+
+    /**
+     * calorie (20 ÂºC)
+     */
+    const REC20_CALORIE_20_C = 'N69';
+
+    /**
+     * quad (1015 BtuIT)
+     */
+    const REC20_QUAD_1015_BTUIT = 'N70';
+
+    /**
+     * therm (EC)
+     */
+    const REC20_THERM_EC = 'N71';
+
+    /**
+     * therm (U.S.)
+     */
+    const REC20_THERM_US = 'N72';
+
+    /**
+     * British thermal unit (thermochemical) per pound
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_POUND = 'N73';
+
+    /**
+     * British thermal unit (international table) per hour square foot degree
+     * Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = 'N74';
+
+    /**
+     * British thermal unit (thermochemical) per hour square foot degree
+     * Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = 'N75';
+
+    /**
+     * British thermal unit (international table) per second square foot
+     * degree Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND_SQUARE_FOOT_DEGREE_FAHRENHEIT = 'N76';
+
+    /**
+     * British thermal unit (thermochemical) per second square foot degree
+     * Fahrenheit
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SECOND_SQUARE_FOOT_DEGREE_FAHRENHEIT = 'N77';
+
+    /**
+     * kilowatt per square metre kelvin
+     */
+    const REC20_KILOWATT_PER_SQUARE_METRE_KELVIN = 'N78';
+
+    /**
+     * kelvin per pascal
+     */
+    const REC20_KELVIN_PER_PASCAL = 'N79';
+
+    /**
+     * watt per metre degree Celsius
+     */
+    const REC20_WATT_PER_METRE_DEGREE_CELSIUS = 'N80';
+
+    /**
+     * kilowatt per metre kelvin
+     */
+    const REC20_KILOWATT_PER_METRE_KELVIN = 'N81';
+
+    /**
+     * kilowatt per metre degree Celsius
+     */
+    const REC20_KILOWATT_PER_METRE_DEGREE_CELSIUS = 'N82';
+
+    /**
+     * metre per degree Celcius metre
+     */
+    const REC20_METRE_PER_DEGREE_CELCIUS_METRE = 'N83';
+
+    /**
+     * degree Fahrenheit hour per British thermal unit (international table)
+     */
+    const REC20_DEGREE_FAHRENHEIT_HOUR_PER_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE = 'N84';
+
+    /**
+     * degree Fahrenheit hour per British thermal unit (thermochemical)
+     */
+    const REC20_DEGREE_FAHRENHEIT_HOUR_PER_BRITISH_THERMAL_UNIT_THERMOCHEMICAL = 'N85';
+
+    /**
+     * degree Fahrenheit second per British thermal unit (international
+     * table)
+     */
+    const REC20_DEGREE_FAHRENHEIT_SECOND_PER_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE = 'N86';
+
+    /**
+     * degree Fahrenheit second per British thermal unit (thermochemical)
+     */
+    const REC20_DEGREE_FAHRENHEIT_SECOND_PER_BRITISH_THERMAL_UNIT_THERMOCHEMICAL = 'N87';
+
+    /**
+     * degree Fahrenheit hour square foot per British thermal unit
+     * (international table) inch
+     */
+    const REC20_DEGREE_FAHRENHEIT_HOUR_SQUARE_FOOT_PER_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_INCH = 'N88';
+
+    /**
+     * degree Fahrenheit hour square foot per British thermal unit
+     * (thermochemical) inch
+     */
+    const REC20_DEGREE_FAHRENHEIT_HOUR_SQUARE_FOOT_PER_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH = 'N89';
+
+    /**
+     * kilofarad
+     */
+    const REC20_KILOFARAD = 'N90';
+
+    /**
+     * reciprocal joule
+     */
+    const REC20_RECIPROCAL_JOULE = 'N91';
+
+    /**
+     * picosiemens
+     */
+    const REC20_PICOSIEMENS = 'N92';
+
+    /**
+     * ampere per pascal
+     */
+    const REC20_AMPERE_PER_PASCAL = 'N93';
+
+    /**
+     * franklin
+     */
+    const REC20_FRANKLIN = 'N94';
+
+    /**
+     * ampere minute
+     */
+    const REC20_AMPERE_MINUTE = 'N95';
+
+    /**
+     * biot
+     */
+    const REC20_BIOT = 'N96';
+
+    /**
+     * gilbert
+     */
+    const REC20_GILBERT = 'N97';
+
+    /**
+     * volt per pascal
+     */
+    const REC20_VOLT_PER_PASCAL = 'N98';
+
+    /**
+     * picovolt
+     */
+    const REC20_PICOVOLT = 'N99';
+
+    /**
+     * milligram per kilogram
+     */
+    const REC20_MILLIGRAM_PER_KILOGRAM = 'NA';
+
+    /**
+     * number of articles
+     */
+    const REC20_NUMBER_OF_ARTICLES = 'NAR';
+
+    /**
+     * number of cells
+     */
+    const REC20_NUMBER_OF_CELLS = 'NCL';
+
+    /**
+     * newton
+     */
+    const REC20_NEWTON = 'NEW';
+
+    /**
+     * message
+     */
+    const REC20_MESSAGE = 'NF';
+
+    /**
+     * nil
+     */
+    const REC20_NIL = 'NIL';
+
+    /**
+     * number of international units
+     */
+    const REC20_NUMBER_OF_INTERNATIONAL_UNITS = 'NIU';
+
+    /**
+     * load
+     */
+    const REC20_LOAD = 'NL';
+
+    /**
+     * Normalised cubic metre
+     */
+    const REC20_NORMALISED_CUBIC_METRE = 'NM3';
+
+    /**
+     * nautical mile
+     */
+    const REC20_NAUTICAL_MILE = 'NMI';
+
+    /**
+     * number of packs
+     */
+    const REC20_NUMBER_OF_PACKS = 'NMP';
+
+    /**
+     * number of parts
+     */
+    const REC20_NUMBER_OF_PARTS = 'NPT';
+
+    /**
+     * net ton
+     */
+    const REC20_NET_TON = 'NT';
+
+    /**
+     * newton metre
+     */
+    const REC20_NEWTON_METRE = 'NU';
+
+    /**
+     * part per thousand
+     */
+    const REC20_PART_PER_THOUSAND = 'NX';
+
+    /**
+     * panel
+     */
+    const REC20_PANEL = 'OA';
+
+    /**
+     * ozone depletion equivalent
+     */
+    const REC20_OZONE_DEPLETION_EQUIVALENT = 'ODE';
+
+    /**
+     * ODS Grams
+     */
+    const REC20_ODS_GRAMS = 'ODG';
+
+    /**
+     * ODS Kilograms
+     */
+    const REC20_ODS_KILOGRAMS = 'ODK';
+
+    /**
+     * ODS Milligrams
+     */
+    const REC20_ODS_MILLIGRAMS = 'ODM';
+
+    /**
+     * ohm
+     */
+    const REC20_OHM = 'OHM';
+
+    /**
+     * ounce per square yard
+     */
+    const REC20_OUNCE_PER_SQUARE_YARD = 'ON';
+
+    /**
+     * ounce (avoirdupois)
+     */
+    const REC20_OUNCE_AVOIRDUPOIS = 'ONZ';
+
+    /**
+     * oscillations per minute
+     */
+    const REC20_OSCILLATIONS_PER_MINUTE = 'OPM';
+
+    /**
+     * overtime hour
+     */
+    const REC20_OVERTIME_HOUR = 'OT';
+
+    /**
+     * fluid ounce (US)
+     */
+    const REC20_FLUID_OUNCE_US = 'OZA';
+
+    /**
+     * fluid ounce (UK)
+     */
+    const REC20_FLUID_OUNCE_UK = 'OZI';
+
+    /**
+     * percent
+     */
+    const REC20_PERCENT = 'P1';
+
+    /**
+     * coulomb per metre
+     */
+    const REC20_COULOMB_PER_METRE = 'P10';
+
+    /**
+     * kiloweber
+     */
+    const REC20_KILOWEBER = 'P11';
+
+    /**
+     * gamma
+     */
+    const REC20_GAMMA = 'P12';
+
+    /**
+     * kilotesla
+     */
+    const REC20_KILOTESLA = 'P13';
+
+    /**
+     * joule per second
+     */
+    const REC20_JOULE_PER_SECOND = 'P14';
+
+    /**
+     * joule per minute
+     */
+    const REC20_JOULE_PER_MINUTE = 'P15';
+
+    /**
+     * joule per hour
+     */
+    const REC20_JOULE_PER_HOUR = 'P16';
+
+    /**
+     * joule per day
+     */
+    const REC20_JOULE_PER_DAY = 'P17';
+
+    /**
+     * kilojoule per second
+     */
+    const REC20_KILOJOULE_PER_SECOND = 'P18';
+
+    /**
+     * kilojoule per minute
+     */
+    const REC20_KILOJOULE_PER_MINUTE = 'P19';
+
+    /**
+     * pound per foot
+     */
+    const REC20_POUND_PER_FOOT = 'P2';
+
+    /**
+     * kilojoule per hour
+     */
+    const REC20_KILOJOULE_PER_HOUR = 'P20';
+
+    /**
+     * kilojoule per day
+     */
+    const REC20_KILOJOULE_PER_DAY = 'P21';
+
+    /**
+     * nanoohm
+     */
+    const REC20_NANOOHM = 'P22';
+
+    /**
+     * ohm circular-mil per foot
+     */
+    const REC20_OHM_CIRCULARMIL_PER_FOOT = 'P23';
+
+    /**
+     * kilohenry
+     */
+    const REC20_KILOHENRY = 'P24';
+
+    /**
+     * lumen per square foot
+     */
+    const REC20_LUMEN_PER_SQUARE_FOOT = 'P25';
+
+    /**
+     * phot
+     */
+    const REC20_PHOT = 'P26';
+
+    /**
+     * footcandle
+     */
+    const REC20_FOOTCANDLE = 'P27';
+
+    /**
+     * candela per square inch
+     */
+    const REC20_CANDELA_PER_SQUARE_INCH = 'P28';
+
+    /**
+     * footlambert
+     */
+    const REC20_FOOTLAMBERT = 'P29';
+
+    /**
+     * lambert
+     */
+    const REC20_LAMBERT = 'P30';
+
+    /**
+     * stilb
+     */
+    const REC20_STILB = 'P31';
+
+    /**
+     * candela per square foot
+     */
+    const REC20_CANDELA_PER_SQUARE_FOOT = 'P32';
+
+    /**
+     * kilocandela
+     */
+    const REC20_KILOCANDELA = 'P33';
+
+    /**
+     * millicandela
+     */
+    const REC20_MILLICANDELA = 'P34';
+
+    /**
+     * Hefner-Kerze
+     */
+    const REC20_HEFNERKERZE = 'P35';
+
+    /**
+     * international candle
+     */
+    const REC20_INTERNATIONAL_CANDLE = 'P36';
+
+    /**
+     * British thermal unit (international table) per square foot
+     */
+    const REC20_BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_FOOT = 'P37';
+
+    /**
+     * British thermal unit (thermochemical) per square foot
+     */
+    const REC20_BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT = 'P38';
+
+    /**
+     * calorie (thermochemical) per square centimetre
+     */
+    const REC20_CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE = 'P39';
+
+    /**
+     * langley
+     */
+    const REC20_LANGLEY = 'P40';
+
+    /**
+     * decade (logarithmic)
+     */
+    const REC20_DECADE_LOGARITHMIC = 'P41';
+
+    /**
+     * pascal squared second
+     */
+    const REC20_PASCAL_SQUARED_SECOND = 'P42';
+
+    /**
+     * bel per metre
+     */
+    const REC20_BEL_PER_METRE = 'P43';
+
+    /**
+     * pound mole
+     */
+    const REC20_POUND_MOLE = 'P44';
+
+    /**
+     * pound mole per second
+     */
+    const REC20_POUND_MOLE_PER_SECOND = 'P45';
+
+    /**
+     * pound mole per minute
+     */
+    const REC20_POUND_MOLE_PER_MINUTE = 'P46';
+
+    /**
+     * kilomole per kilogram
+     */
+    const REC20_KILOMOLE_PER_KILOGRAM = 'P47';
+
+    /**
+     * pound mole per pound
+     */
+    const REC20_POUND_MOLE_PER_POUND = 'P48';
+
+    /**
+     * newton square metre per ampere
+     */
+    const REC20_NEWTON_SQUARE_METRE_PER_AMPERE = 'P49';
+
+    /**
+     * five pack
+     */
+    const REC20_FIVE_PACK = 'P5';
+
+    /**
+     * weber metre
+     */
+    const REC20_WEBER_METRE = 'P50';
+
+    /**
+     * mol per kilogram pascal
+     */
+    const REC20_MOL_PER_KILOGRAM_PASCAL = 'P51';
+
+    /**
+     * mol per cubic metre pascal
+     */
+    const REC20_MOL_PER_CUBIC_METRE_PASCAL = 'P52';
+
+    /**
+     * unit pole
+     */
+    const REC20_UNIT_POLE = 'P53';
+
+    /**
+     * milligray per second
+     */
+    const REC20_MILLIGRAY_PER_SECOND = 'P54';
+
+    /**
+     * microgray per second
+     */
+    const REC20_MICROGRAY_PER_SECOND = 'P55';
+
+    /**
+     * nanogray per second
+     */
+    const REC20_NANOGRAY_PER_SECOND = 'P56';
+
+    /**
+     * gray per minute
+     */
+    const REC20_GRAY_PER_MINUTE = 'P57';
+
+    /**
+     * milligray per minute
+     */
+    const REC20_MILLIGRAY_PER_MINUTE = 'P58';
+
+    /**
+     * microgray per minute
+     */
+    const REC20_MICROGRAY_PER_MINUTE = 'P59';
+
+    /**
+     * nanogray per minute
+     */
+    const REC20_NANOGRAY_PER_MINUTE = 'P60';
+
+    /**
+     * gray per hour
+     */
+    const REC20_GRAY_PER_HOUR = 'P61';
+
+    /**
+     * milligray per hour
+     */
+    const REC20_MILLIGRAY_PER_HOUR = 'P62';
+
+    /**
+     * microgray per hour
+     */
+    const REC20_MICROGRAY_PER_HOUR = 'P63';
+
+    /**
+     * nanogray per hour
+     */
+    const REC20_NANOGRAY_PER_HOUR = 'P64';
+
+    /**
+     * sievert per second
+     */
+    const REC20_SIEVERT_PER_SECOND = 'P65';
+
+    /**
+     * millisievert per second
+     */
+    const REC20_MILLISIEVERT_PER_SECOND = 'P66';
+
+    /**
+     * microsievert per second
+     */
+    const REC20_MICROSIEVERT_PER_SECOND = 'P67';
+
+    /**
+     * nanosievert per second
+     */
+    const REC20_NANOSIEVERT_PER_SECOND = 'P68';
+
+    /**
+     * rem per second
+     */
+    const REC20_REM_PER_SECOND = 'P69';
+
+    /**
+     * sievert per hour
+     */
+    const REC20_SIEVERT_PER_HOUR = 'P70';
+
+    /**
+     * millisievert per hour
+     */
+    const REC20_MILLISIEVERT_PER_HOUR = 'P71';
+
+    /**
+     * microsievert per hour
+     */
+    const REC20_MICROSIEVERT_PER_HOUR = 'P72';
+
+    /**
+     * nanosievert per hour
+     */
+    const REC20_NANOSIEVERT_PER_HOUR = 'P73';
+
+    /**
+     * sievert per minute
+     */
+    const REC20_SIEVERT_PER_MINUTE = 'P74';
+
+    /**
+     * millisievert per minute
+     */
+    const REC20_MILLISIEVERT_PER_MINUTE = 'P75';
+
+    /**
+     * microsievert per minute
+     */
+    const REC20_MICROSIEVERT_PER_MINUTE = 'P76';
+
+    /**
+     * nanosievert per minute
+     */
+    const REC20_NANOSIEVERT_PER_MINUTE = 'P77';
+
+    /**
+     * reciprocal square inch
+     */
+    const REC20_RECIPROCAL_SQUARE_INCH = 'P78';
+
+    /**
+     * pascal square metre per kilogram
+     */
+    const REC20_PASCAL_SQUARE_METRE_PER_KILOGRAM = 'P79';
+
+    /**
+     * millipascal per metre
+     */
+    const REC20_MILLIPASCAL_PER_METRE = 'P80';
+
+    /**
+     * kilopascal per metre
+     */
+    const REC20_KILOPASCAL_PER_METRE = 'P81';
+
+    /**
+     * hectopascal per metre
+     */
+    const REC20_HECTOPASCAL_PER_METRE = 'P82';
+
+    /**
+     * standard atmosphere per metre
+     */
+    const REC20_STANDARD_ATMOSPHERE_PER_METRE = 'P83';
+
+    /**
+     * technical atmosphere per metre
+     */
+    const REC20_TECHNICAL_ATMOSPHERE_PER_METRE = 'P84';
+
+    /**
+     * torr per metre
+     */
+    const REC20_TORR_PER_METRE = 'P85';
+
+    /**
+     * psi per inch
+     */
+    const REC20_PSI_PER_INCH = 'P86';
+
+    /**
+     * cubic metre per second square metre
+     */
+    const REC20_CUBIC_METRE_PER_SECOND_SQUARE_METRE = 'P87';
+
+    /**
+     * rhe
+     */
+    const REC20_RHE = 'P88';
+
+    /**
+     * pound-force foot per inch
+     */
+    const REC20_POUNDFORCE_FOOT_PER_INCH = 'P89';
+
+    /**
+     * pound-force inch per inch
+     */
+    const REC20_POUNDFORCE_INCH_PER_INCH = 'P90';
+
+    /**
+     * perm (0 ÂºC)
+     */
+    const REC20_PERM_0_C = 'P91';
+
+    /**
+     * perm (23 ÂºC)
+     */
+    const REC20_PERM_23_C = 'P92';
+
+    /**
+     * byte per second
+     */
+    const REC20_BYTE_PER_SECOND = 'P93';
+
+    /**
+     * kilobyte per second
+     */
+    const REC20_KILOBYTE_PER_SECOND = 'P94';
+
+    /**
+     * megabyte per second
+     */
+    const REC20_MEGABYTE_PER_SECOND = 'P95';
+
+    /**
+     * reciprocal volt
+     */
+    const REC20_RECIPROCAL_VOLT = 'P96';
+
+    /**
+     * reciprocal radian
+     */
+    const REC20_RECIPROCAL_RADIAN = 'P97';
+
+    /**
+     * pascal to the power sum of stoichiometric numbers
+     */
+    const REC20_PASCAL_TO_THE_POWER_SUM_OF_STOICHIOMETRIC_NUMBERS = 'P98';
+
+    /**
+     * mole per cubiv metre to the power sum of stoichiometric numbers
+     */
+    const REC20_MOLE_PER_CUBIV_METRE_TO_THE_POWER_SUM_OF_STOICHIOMETRIC_NUMBERS = 'P99';
+
+    /**
+     * pascal
+     */
+    const REC20_PASCAL = 'PAL';
+
+    /**
+     * pad
+     */
+    const REC20_PAD = 'PD';
+
+    /**
+     * proof litre
+     */
+    const REC20_PROOF_LITRE = 'PFL';
+
+    /**
+     * proof gallon
+     */
+    const REC20_PROOF_GALLON = 'PGL';
+
+    /**
+     * pitch
+     */
+    const REC20_PITCH = 'PI';
+
+    /**
+     * degree Plato
+     */
+    const REC20_DEGREE_PLATO = 'PLA';
+
+    /**
+     * pound per inch of length
+     */
+    const REC20_POUND_PER_INCH_OF_LENGTH = 'PO';
+
+    /**
+     * page per inch
+     */
+    const REC20_PAGE_PER_INCH = 'PQ';
+
+    /**
+     * pair
+     */
+    const REC20_PAIR = 'PR';
+
+    /**
+     * pound-force per square inch
+     */
+    const REC20_POUNDFORCE_PER_SQUARE_INCH = 'PS';
+
+    /**
+     * dry pint (US)
+     */
+    const REC20_DRY_PINT_US = 'PTD';
+
+    /**
+     * pint (UK)
+     */
+    const REC20_PINT_UK = 'PTI';
+
+    /**
+     * liquid pint (US)
+     */
+    const REC20_LIQUID_PINT_US = 'PTL';
+
+    /**
+     * portion
+     */
+    const REC20_PORTION = 'PTN';
+
+    /**
+     * joule per tesla
+     */
+    const REC20_JOULE_PER_TESLA = 'Q10';
+
+    /**
+     * erlang
+     */
+    const REC20_ERLANG = 'Q11';
+
+    /**
+     * octet
+     */
+    const REC20_OCTET = 'Q12';
+
+    /**
+     * octet per second
+     */
+    const REC20_OCTET_PER_SECOND = 'Q13';
+
+    /**
+     * shannon
+     */
+    const REC20_SHANNON = 'Q14';
+
+    /**
+     * hartley
+     */
+    const REC20_HARTLEY = 'Q15';
+
+    /**
+     * natural unit of information
+     */
+    const REC20_NATURAL_UNIT_OF_INFORMATION = 'Q16';
+
+    /**
+     * shannon per second
+     */
+    const REC20_SHANNON_PER_SECOND = 'Q17';
+
+    /**
+     * hartley per second
+     */
+    const REC20_HARTLEY_PER_SECOND = 'Q18';
+
+    /**
+     * natural unit of information per second
+     */
+    const REC20_NATURAL_UNIT_OF_INFORMATION_PER_SECOND = 'Q19';
+
+    /**
+     * second per kilogramm
+     */
+    const REC20_SECOND_PER_KILOGRAMM = 'Q20';
+
+    /**
+     * watt square metre
+     */
+    const REC20_WATT_SQUARE_METRE = 'Q21';
+
+    /**
+     * second per radian cubic metre
+     */
+    const REC20_SECOND_PER_RADIAN_CUBIC_METRE = 'Q22';
+
+    /**
+     * weber to the power minus one
+     */
+    const REC20_WEBER_TO_THE_POWER_MINUS_ONE = 'Q23';
+
+    /**
+     * reciprocal inch
+     */
+    const REC20_RECIPROCAL_INCH = 'Q24';
+
+    /**
+     * dioptre
+     */
+    const REC20_DIOPTRE = 'Q25';
+
+    /**
+     * one per one
+     */
+    const REC20_ONE_PER_ONE = 'Q26';
+
+    /**
+     * newton metre per metre
+     */
+    const REC20_NEWTON_METRE_PER_METRE = 'Q27';
+
+    /**
+     * kilogram per square metre pascal second
+     */
+    const REC20_KILOGRAM_PER_SQUARE_METRE_PASCAL_SECOND = 'Q28';
+
+    /**
+     * microgram per hectogram
+     */
+    const REC20_MICROGRAM_PER_HECTOGRAM = 'Q29';
+
+    /**
+     * pH (potential of Hydrogen)
+     */
+    const REC20_PH_POTENTIAL_OF_HYDROGEN = 'Q30';
+
+    /**
+     * kilojoule per gram
+     */
+    const REC20_KILOJOULE_PER_GRAM = 'Q31';
+
+    /**
+     * femtolitre
+     */
+    const REC20_FEMTOLITRE = 'Q32';
+
+    /**
+     * picolitre
+     */
+    const REC20_PICOLITRE = 'Q33';
+
+    /**
+     * nanolitre
+     */
+    const REC20_NANOLITRE = 'Q34';
+
+    /**
+     * megawatts per minute
+     */
+    const REC20_MEGAWATTS_PER_MINUTE = 'Q35';
+
+    /**
+     * square metre per cubic metre
+     */
+    const REC20_SQUARE_METRE_PER_CUBIC_METRE = 'Q36';
+
+    /**
+     * Standard cubic metre per day
+     */
+    const REC20_STANDARD_CUBIC_METRE_PER_DAY = 'Q37';
+
+    /**
+     * Standard cubic metre per hour
+     */
+    const REC20_STANDARD_CUBIC_METRE_PER_HOUR = 'Q38';
+
+    /**
+     * Normalized cubic metre per day
+     */
+    const REC20_NORMALIZED_CUBIC_METRE_PER_DAY = 'Q39';
+
+    /**
+     * Normalized cubic metre per hour
+     */
+    const REC20_NORMALIZED_CUBIC_METRE_PER_HOUR = 'Q40';
+
+    /**
+     * Joule per normalised cubic metre
+     */
+    const REC20_JOULE_PER_NORMALISED_CUBIC_METRE = 'Q41';
+
+    /**
+     * Joule per standard cubic metre
+     */
+    const REC20_JOULE_PER_STANDARD_CUBIC_METRE = 'Q42';
+
+    /**
+     * meal
+     */
+    const REC20_MEAL = 'Q3';
+
+    /**
+     * page - facsimile
+     */
+    const REC20_PAGE__FACSIMILE = 'QA';
+
+    /**
+     * quarter (of a year)
+     */
+    const REC20_QUARTER_OF_A_YEAR = 'QAN';
+
+    /**
+     * page - hardcopy
+     */
+    const REC20_PAGE__HARDCOPY = 'QB';
+
+    /**
+     * quire
+     */
+    const REC20_QUIRE = 'QR';
+
+    /**
+     * dry quart (US)
+     */
+    const REC20_DRY_QUART_US = 'QTD';
+
+    /**
+     * quart (UK)
+     */
+    const REC20_QUART_UK = 'QTI';
+
+    /**
+     * liquid quart (US)
+     */
+    const REC20_LIQUID_QUART_US = 'QTL';
+
+    /**
+     * quarter (UK)
+     */
+    const REC20_QUARTER_UK = 'QTR';
+
+    /**
+     * pica
+     */
+    const REC20_PICA = 'R1';
+
+    /**
+     * thousand cubic metre
+     */
+    const REC20_THOUSAND_CUBIC_METRE = 'R9';
+
+    /**
+     * running or operating hour
+     */
+    const REC20_RUNNING_OR_OPERATING_HOUR = 'RH';
+
+    /**
+     * ream
+     */
+    const REC20_REAM = 'RM';
+
+    /**
+     * room
+     */
+    const REC20_ROOM = 'ROM';
+
+    /**
+     * pound per ream
+     */
+    const REC20_POUND_PER_REAM = 'RP';
+
+    /**
+     * revolutions per minute
+     */
+    const REC20_REVOLUTIONS_PER_MINUTE = 'RPM';
+
+    /**
+     * revolutions per second
+     */
+    const REC20_REVOLUTIONS_PER_SECOND = 'RPS';
+
+    /**
+     * revenue ton mile
+     */
+    const REC20_REVENUE_TON_MILE = 'RT';
+
+    /**
+     * square foot per second
+     */
+    const REC20_SQUARE_FOOT_PER_SECOND = 'S3';
+
+    /**
+     * square metre per second
+     */
+    const REC20_SQUARE_METRE_PER_SECOND = 'S4';
+
+    /**
+     * half year (6 months)
+     */
+    const REC20_HALF_YEAR_6_MONTHS = 'SAN';
+
+    /**
+     * score
+     */
+    const REC20_SCORE = 'SCO';
+
+    /**
+     * scruple
+     */
+    const REC20_SCRUPLE = 'SCR';
+
+    /**
+     * second [unit of time]
+     */
+    const REC20_SECOND_UNIT_OF_TIME = 'SEC';
+
+    /**
+     * set
+     */
+    const REC20_SET = 'SET';
+
+    /**
+     * segment
+     */
+    const REC20_SEGMENT = 'SG';
+
+    /**
+     * siemens
+     */
+    const REC20_SIEMENS = 'SIE';
+
+    /**
+     * Standard cubic metre
+     */
+    const REC20_STANDARD_CUBIC_METRE = 'SM3';
+
+    /**
+     * mile (statute mile)
+     */
+    const REC20_MILE_STATUTE_MILE = 'SMI';
+
+    /**
+     * square
+     */
+    const REC20_SQUARE = 'SQ';
+
+    /**
+     * square, roofing
+     */
+    const REC20_SQUARE_ROOFING = 'SQR';
+
+    /**
+     * strip
+     */
+    const REC20_STRIP = 'SR';
+
+    /**
+     * stick
+     */
+    const REC20_STICK = 'STC';
+
+    /**
+     * stone (UK)
+     */
+    const REC20_STONE_UK = 'STI';
+
+    /**
+     * stick, cigarette
+     */
+    const REC20_STICK_CIGARETTE = 'STK';
+
+    /**
+     * standard litre
+     */
+    const REC20_STANDARD_LITRE = 'STL';
+
+    /**
+     * ton (US) or short ton (UK/US)
+     */
+    const REC20_TON_US_OR_SHORT_TON_UK_US = 'STN';
+
+    /**
+     * straw
+     */
+    const REC20_STRAW = 'STW';
+
+    /**
+     * skein
+     */
+    const REC20_SKEIN = 'SW';
+
+    /**
+     * shipment
+     */
+    const REC20_SHIPMENT = 'SX';
+
+    /**
+     * syringe
+     */
+    const REC20_SYRINGE = 'SYR';
+
+    /**
+     * telecommunication line in service
+     */
+    const REC20_TELECOMMUNICATION_LINE_IN_SERVICE = 'T0';
+
+    /**
+     * thousand piece
+     */
+    const REC20_THOUSAND_PIECE = 'T3';
+
+    /**
+     * kiloampere hour (thousand ampere hour)
+     */
+    const REC20_KILOAMPERE_HOUR_THOUSAND_AMPERE_HOUR = 'TAH';
+
+    /**
+     * total acid number
+     */
+    const REC20_TOTAL_ACID_NUMBER = 'TAN';
+
+    /**
+     * thousand square inch
+     */
+    const REC20_THOUSAND_SQUARE_INCH = 'TI';
+
+    /**
+     * metric ton, including container
+     */
+    const REC20_METRIC_TON_INCLUDING_CONTAINER = 'TIC';
+
+    /**
+     * metric ton, including inner packaging
+     */
+    const REC20_METRIC_TON_INCLUDING_INNER_PACKAGING = 'TIP';
+
+    /**
+     * tonne kilometre
+     */
+    const REC20_TONNE_KILOMETRE = 'TKM';
+
+    /**
+     * kilogram of imported meat, less offal
+     */
+    const REC20_KILOGRAM_OF_IMPORTED_MEAT_LESS_OFFAL = 'TMS';
+
+    /**
+     * tonne (metric ton)
+     */
+    const REC20_TONNE_METRIC_TON = 'TNE';
+
+    /**
+     * ten pack
+     */
+    const REC20_TEN_PACK = 'TP';
+
+    /**
+     * teeth per inch
+     */
+    const REC20_TEETH_PER_INCH = 'TPI';
+
+    /**
+     * ten pair
+     */
+    const REC20_TEN_PAIR = 'TPR';
+
+    /**
+     * thousand cubic metre per day
+     */
+    const REC20_THOUSAND_CUBIC_METRE_PER_DAY = 'TQD';
+
+    /**
+     * trillion (EUR)
+     */
+    const REC20_TRILLION_EUR = 'TRL';
+
+    /**
+     * ten set
+     */
+    const REC20_TEN_SET = 'TST';
+
+    /**
+     * ten thousand sticks
+     */
+    const REC20_TEN_THOUSAND_STICKS = 'TTS';
+
+    /**
+     * treatment
+     */
+    const REC20_TREATMENT = 'U1';
+
+    /**
+     * tablet
+     */
+    const REC20_TABLET = 'U2';
+
+    /**
+     * telecommunication line in service average
+     */
+    const REC20_TELECOMMUNICATION_LINE_IN_SERVICE_AVERAGE = 'UB';
+
+    /**
+     * telecommunication port
+     */
+    const REC20_TELECOMMUNICATION_PORT = 'UC';
+
+    /**
+     * volt - ampere per kilogram
+     */
+    const REC20_VOLT__AMPERE_PER_KILOGRAM = 'VA';
+
+    /**
+     * volt
+     */
+    const REC20_VOLT = 'VLT';
+
+    /**
+     * percent volume
+     */
+    const REC20_PERCENT_VOLUME = 'VP';
+
+    /**
+     * wet kilo
+     */
+    const REC20_WET_KILO = 'W2';
+
+    /**
+     * watt per kilogram
+     */
+    const REC20_WATT_PER_KILOGRAM = 'WA';
+
+    /**
+     * wet pound
+     */
+    const REC20_WET_POUND = 'WB';
+
+    /**
+     * cord
+     */
+    const REC20_CORD = 'WCD';
+
+    /**
+     * wet ton
+     */
+    const REC20_WET_TON = 'WE';
+
+    /**
+     * weber
+     */
+    const REC20_WEBER = 'WEB';
+
+    /**
+     * week
+     */
+    const REC20_WEEK = 'WEE';
+
+    /**
+     * wine gallon
+     */
+    const REC20_WINE_GALLON = 'WG';
+
+    /**
+     * watt hour
+     */
+    const REC20_WATT_HOUR = 'WHR';
+
+    /**
+     * working month
+     */
+    const REC20_WORKING_MONTH = 'WM';
+
+    /**
+     * standard
+     */
+    const REC20_STANDARD = 'WSD';
+
+    /**
+     * watt
+     */
+    const REC20_WATT = 'WTT';
+
+    /**
+     * Gunter's chain
+     */
+    const REC20_GUNTERS_CHAIN = 'X1';
+
+    /**
+     * square yard
+     */
+    const REC20_SQUARE_YARD = 'YDK';
+
+    /**
+     * cubic yard
+     */
+    const REC20_CUBIC_YARD = 'YDQ';
+
+    /**
+     * yard
+     */
+    const REC20_YARD = 'YRD';
+
+    /**
+     * hanging container
+     */
+    const REC20_HANGING_CONTAINER = 'Z11';
+
+    /**
+     * page
+     */
+    const REC20_PAGE = 'ZP';
+
+    /**
+     * mutually defined
+     */
+    const REC20_MUTUALLY_DEFINED = 'ZZ';
+
+    /**
+     * Drum, steel
+     */
+    const REC21_DRUM_STEEL = 'X1A';
+
+    /**
+     * Drum, aluminium
+     */
+    const REC21_DRUM_ALUMINIUM = 'X1B';
+
+    /**
+     * Drum, plywood
+     */
+    const REC21_DRUM_PLYWOOD = 'X1D';
+
+    /**
+     * Container, flexible
+     */
+    const REC21_CONTAINER_FLEXIBLE = 'X1F';
+
+    /**
+     * Drum, fibre
+     */
+    const REC21_DRUM_FIBRE = 'X1G';
+
+    /**
+     * Drum, wooden
+     */
+    const REC21_DRUM_WOODEN = 'X1W';
+
+    /**
+     * Barrel, wooden
+     */
+    const REC21_BARREL_WOODEN = 'X2C';
+
+    /**
+     * Jerrican, steel
+     */
+    const REC21_JERRICAN_STEEL = 'X3A';
+
+    /**
+     * Jerrican, plastic
+     */
+    const REC21_JERRICAN_PLASTIC = 'X3H';
+
+    /**
+     * Bag, super bulk
+     */
+    const REC21_BAG_SUPER_BULK = 'X43';
+
+    /**
+     * Bag, polybag
+     */
+    const REC21_BAG_POLYBAG = 'X44';
+
+    /**
+     * Box, steel
+     */
+    const REC21_BOX_STEEL = 'X4A';
+
+    /**
+     * Box, aluminium
+     */
+    const REC21_BOX_ALUMINIUM = 'X4B';
+
+    /**
+     * Box, natural wood
+     */
+    const REC21_BOX_NATURAL_WOOD = 'X4C';
+
+    /**
+     * Box, plywood
+     */
+    const REC21_BOX_PLYWOOD = 'X4D';
+
+    /**
+     * Box, reconstituted wood
+     */
+    const REC21_BOX_RECONSTITUTED_WOOD = 'X4F';
+
+    /**
+     * Box, fibreboard
+     */
+    const REC21_BOX_FIBREBOARD = 'X4G';
+
+    /**
+     * Box, plastic
+     */
+    const REC21_BOX_PLASTIC = 'X4H';
+
+    /**
+     * Bag, woven plastic
+     */
+    const REC21_BAG_WOVEN_PLASTIC = 'X5H';
+
+    /**
+     * Bag, textile
+     */
+    const REC21_BAG_TEXTILE = 'X5L';
+
+    /**
+     * Bag, paper
+     */
+    const REC21_BAG_PAPER = 'X5M';
+
+    /**
+     * Composite packaging, plastic receptacle
+     */
+    const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE = 'X6H';
+
+    /**
+     * Composite packaging, glass receptacle
+     */
+    const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE = 'X6P';
+
+    /**
+     * Case, car
+     */
+    const REC21_CASE_CAR = 'X7A';
+
+    /**
+     * Case, wooden
+     */
+    const REC21_CASE_WOODEN = 'X7B';
+
+    /**
+     * Pallet, wooden
+     */
+    const REC21_PALLET_WOODEN = 'X8A';
+
+    /**
+     * Crate, wooden
+     */
+    const REC21_CRATE_WOODEN = 'X8B';
+
+    /**
+     * Bundle, wooden
+     */
+    const REC21_BUNDLE_WOODEN = 'X8C';
+
+    /**
+     * Intermediate bulk container, rigid plastic
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC = 'XAA';
+
+    /**
+     * Receptacle, fibre
+     */
+    const REC21_RECEPTACLE_FIBRE = 'XAB';
+
+    /**
+     * Receptacle, paper
+     */
+    const REC21_RECEPTACLE_PAPER = 'XAC';
+
+    /**
+     * Receptacle, wooden
+     */
+    const REC21_RECEPTACLE_WOODEN = 'XAD';
+
+    /**
+     * Aerosol
+     */
+    const REC21_AEROSOL = 'XAE';
+
+    /**
+     * Pallet, modular, collars 80cms * 60cms
+     */
+    const REC21_PALLET_MODULAR_COLLARS_80CMS__60CMS = 'XAF';
+
+    /**
+     * Pallet, shrinkwrapped
+     */
+    const REC21_PALLET_SHRINKWRAPPED = 'XAG';
+
+    /**
+     * Pallet, 100cms * 110cms
+     */
+    const REC21_PALLET_100CMS__110CMS = 'XAH';
+
+    /**
+     * Clamshell
+     */
+    const REC21_CLAMSHELL = 'XAI';
+
+    /**
+     * Cone
+     */
+    const REC21_CONE = 'XAJ';
+
+    /**
+     * Ball
+     */
+    const REC21_BALL = 'XAL';
+
+    /**
+     * Ampoule, non-protected
+     */
+    const REC21_AMPOULE_NONPROTECTED = 'XAM';
+
+    /**
+     * Ampoule, protected
+     */
+    const REC21_AMPOULE_PROTECTED = 'XAP';
+
+    /**
+     * Atomizer
+     */
+    const REC21_ATOMIZER = 'XAT';
+
+    /**
+     * Capsule
+     */
+    const REC21_CAPSULE = 'XAV';
+
+    /**
+     * Belt
+     */
+    const REC21_BELT = 'XB4';
+
+    /**
+     * Barrel
+     */
+    const REC21_BARREL = 'XBA';
+
+    /**
+     * Bobbin
+     */
+    const REC21_BOBBIN = 'XBB';
+
+    /**
+     * Bottlecrate / bottlerack
+     */
+    const REC21_BOTTLECRATE___BOTTLERACK = 'XBC';
+
+    /**
+     * Board
+     */
+    const REC21_BOARD = 'XBD';
+
+    /**
+     * Bundle
+     */
+    const REC21_BUNDLE = 'XBE';
+
+    /**
+     * Balloon, non-protected
+     */
+    const REC21_BALLOON_NONPROTECTED = 'XBF';
+
+    /**
+     * Bag
+     */
+    const REC21_BAG = 'XBG';
+
+    /**
+     * Bunch
+     */
+    const REC21_BUNCH = 'XBH';
+
+    /**
+     * Bin
+     */
+    const REC21_BIN = 'XBI';
+
+    /**
+     * Bucket
+     */
+    const REC21_BUCKET = 'XBJ';
+
+    /**
+     * Basket
+     */
+    const REC21_BASKET = 'XBK';
+
+    /**
+     * Bale, compressed
+     */
+    const REC21_BALE_COMPRESSED = 'XBL';
+
+    /**
+     * Basin
+     */
+    const REC21_BASIN = 'XBM';
+
+    /**
+     * Bale, non-compressed
+     */
+    const REC21_BALE_NONCOMPRESSED = 'XBN';
+
+    /**
+     * Bottle, non-protected, cylindrical
+     */
+    const REC21_BOTTLE_NONPROTECTED_CYLINDRICAL = 'XBO';
+
+    /**
+     * Balloon, protected
+     */
+    const REC21_BALLOON_PROTECTED = 'XBP';
+
+    /**
+     * Bottle, protected cylindrical
+     */
+    const REC21_BOTTLE_PROTECTED_CYLINDRICAL = 'XBQ';
+
+    /**
+     * Bar
+     */
+    const REC21_BAR = 'XBR';
+
+    /**
+     * Bottle, non-protected, bulbous
+     */
+    const REC21_BOTTLE_NONPROTECTED_BULBOUS = 'XBS';
+
+    /**
+     * Bolt
+     */
+    const REC21_BOLT = 'XBT';
+
+    /**
+     * Butt
+     */
+    const REC21_BUTT = 'XBU';
+
+    /**
+     * Bottle, protected bulbous
+     */
+    const REC21_BOTTLE_PROTECTED_BULBOUS = 'XBV';
+
+    /**
+     * Box, for liquids
+     */
+    const REC21_BOX_FOR_LIQUIDS = 'XBW';
+
+    /**
+     * Box
+     */
+    const REC21_BOX = 'XBX';
+
+    /**
+     * Board, in bundle/bunch/truss
+     */
+    const REC21_BOARD_IN_BUNDLE_BUNCH_TRUSS = 'XBY';
+
+    /**
+     * Bars, in bundle/bunch/truss
+     */
+    const REC21_BARS_IN_BUNDLE_BUNCH_TRUSS = 'XBZ';
+
+    /**
+     * Can, rectangular
+     */
+    const REC21_CAN_RECTANGULAR = 'XCA';
+
+    /**
+     * Crate, beer
+     */
+    const REC21_CRATE_BEER = 'XCB';
+
+    /**
+     * Churn
+     */
+    const REC21_CHURN = 'XCC';
+
+    /**
+     * Can, with handle and spout
+     */
+    const REC21_CAN_WITH_HANDLE_AND_SPOUT = 'XCD';
+
+    /**
+     * Creel
+     */
+    const REC21_CREEL = 'XCE';
+
+    /**
+     * Coffer
+     */
+    const REC21_COFFER = 'XCF';
+
+    /**
+     * Cage
+     */
+    const REC21_CAGE = 'XCG';
+
+    /**
+     * Chest
+     */
+    const REC21_CHEST = 'XCH';
+
+    /**
+     * Canister
+     */
+    const REC21_CANISTER = 'XCI';
+
+    /**
+     * Coffin
+     */
+    const REC21_COFFIN = 'XCJ';
+
+    /**
+     * Cask
+     */
+    const REC21_CASK = 'XCK';
+
+    /**
+     * Coil
+     */
+    const REC21_COIL = 'XCL';
+
+    /**
+     * Card
+     */
+    const REC21_CARD = 'XCM';
+
+    /**
+     * Container, not otherwise specified as transport equipment
+     */
+    const REC21_CONTAINER_NOT_OTHERWISE_SPECIFIED_AS_TRANSPORT_EQUIPMENT = 'XCN';
+
+    /**
+     * Carboy, non-protected
+     */
+    const REC21_CARBOY_NONPROTECTED = 'XCO';
+
+    /**
+     * Carboy, protected
+     */
+    const REC21_CARBOY_PROTECTED = 'XCP';
+
+    /**
+     * Cartridge
+     */
+    const REC21_CARTRIDGE = 'XCQ';
+
+    /**
+     * Crate
+     */
+    const REC21_CRATE = 'XCR';
+
+    /**
+     * Case
+     */
+    const REC21_CASE = 'XCS';
+
+    /**
+     * Carton
+     */
+    const REC21_CARTON = 'XCT';
+
+    /**
+     * Cup
+     */
+    const REC21_CUP = 'XCU';
+
+    /**
+     * Cover
+     */
+    const REC21_COVER = 'XCV';
+
+    /**
+     * Cage, roll
+     */
+    const REC21_CAGE_ROLL = 'XCW';
+
+    /**
+     * Can, cylindrical
+     */
+    const REC21_CAN_CYLINDRICAL = 'XCX';
+
+    /**
+     * Cylinder
+     */
+    const REC21_CYLINDER = 'XCY';
+
+    /**
+     * Canvas
+     */
+    const REC21_CANVAS = 'XCZ';
+
+    /**
+     * Crate, multiple layer, plastic
+     */
+    const REC21_CRATE_MULTIPLE_LAYER_PLASTIC = 'XDA';
+
+    /**
+     * Crate, multiple layer, wooden
+     */
+    const REC21_CRATE_MULTIPLE_LAYER_WOODEN = 'XDB';
+
+    /**
+     * Crate, multiple layer, cardboard
+     */
+    const REC21_CRATE_MULTIPLE_LAYER_CARDBOARD = 'XDC';
+
+    /**
+     * Cage, Commonwealth Handling Equipment Pool  (CHEP)
+     */
+    const REC21_CAGE_COMMONWEALTH_HANDLING_EQUIPMENT_POOL__CHEP = 'XDG';
+
+    /**
+     * Box, Commonwealth Handling Equipment Pool (CHEP), Eurobox
+     */
+    const REC21_BOX_COMMONWEALTH_HANDLING_EQUIPMENT_POOL_CHEP_EUROBOX = 'XDH';
+
+    /**
+     * Drum, iron
+     */
+    const REC21_DRUM_IRON = 'XDI';
+
+    /**
+     * Demijohn, non-protected
+     */
+    const REC21_DEMIJOHN_NONPROTECTED = 'XDJ';
+
+    /**
+     * Crate, bulk, cardboard
+     */
+    const REC21_CRATE_BULK_CARDBOARD = 'XDK';
+
+    /**
+     * Crate, bulk, plastic
+     */
+    const REC21_CRATE_BULK_PLASTIC = 'XDL';
+
+    /**
+     * Crate, bulk, wooden
+     */
+    const REC21_CRATE_BULK_WOODEN = 'XDM';
+
+    /**
+     * Dispenser
+     */
+    const REC21_DISPENSER = 'XDN';
+
+    /**
+     * Demijohn, protected
+     */
+    const REC21_DEMIJOHN_PROTECTED = 'XDP';
+
+    /**
+     * Drum
+     */
+    const REC21_DRUM = 'XDR';
+
+    /**
+     * Tray, one layer no cover, plastic
+     */
+    const REC21_TRAY_ONE_LAYER_NO_COVER_PLASTIC = 'XDS';
+
+    /**
+     * Tray, one layer no cover, wooden
+     */
+    const REC21_TRAY_ONE_LAYER_NO_COVER_WOODEN = 'XDT';
+
+    /**
+     * Tray, one layer no cover, polystyrene
+     */
+    const REC21_TRAY_ONE_LAYER_NO_COVER_POLYSTYRENE = 'XDU';
+
+    /**
+     * Tray, one layer no cover, cardboard
+     */
+    const REC21_TRAY_ONE_LAYER_NO_COVER_CARDBOARD = 'XDV';
+
+    /**
+     * Tray, two layers no cover, plastic tray
+     */
+    const REC21_TRAY_TWO_LAYERS_NO_COVER_PLASTIC_TRAY = 'XDW';
+
+    /**
+     * Tray, two layers no cover, wooden
+     */
+    const REC21_TRAY_TWO_LAYERS_NO_COVER_WOODEN = 'XDX';
+
+    /**
+     * Tray, two layers no cover, cardboard
+     */
+    const REC21_TRAY_TWO_LAYERS_NO_COVER_CARDBOARD = 'XDY';
+
+    /**
+     * Bag, plastic
+     */
+    const REC21_BAG_PLASTIC = 'XEC';
+
+    /**
+     * Case, with pallet base
+     */
+    const REC21_CASE_WITH_PALLET_BASE = 'XED';
+
+    /**
+     * Case, with pallet base, wooden
+     */
+    const REC21_CASE_WITH_PALLET_BASE_WOODEN = 'XEE';
+
+    /**
+     * Case, with pallet base, cardboard
+     */
+    const REC21_CASE_WITH_PALLET_BASE_CARDBOARD = 'XEF';
+
+    /**
+     * Case, with pallet base, plastic
+     */
+    const REC21_CASE_WITH_PALLET_BASE_PLASTIC = 'XEG';
+
+    /**
+     * Case, with pallet base, metal
+     */
+    const REC21_CASE_WITH_PALLET_BASE_METAL = 'XEH';
+
+    /**
+     * Case, isothermic
+     */
+    const REC21_CASE_ISOTHERMIC = 'XEI';
+
+    /**
+     * Envelope
+     */
+    const REC21_ENVELOPE = 'XEN';
+
+    /**
+     * Flexibag
+     */
+    const REC21_FLEXIBAG = 'XFB';
+
+    /**
+     * Crate, fruit
+     */
+    const REC21_CRATE_FRUIT = 'XFC';
+
+    /**
+     * Crate, framed
+     */
+    const REC21_CRATE_FRAMED = 'XFD';
+
+    /**
+     * Flexitank
+     */
+    const REC21_FLEXITANK = 'XFE';
+
+    /**
+     * Firkin
+     */
+    const REC21_FIRKIN = 'XFI';
+
+    /**
+     * Flask
+     */
+    const REC21_FLASK = 'XFL';
+
+    /**
+     * Footlocker
+     */
+    const REC21_FOOTLOCKER = 'XFO';
+
+    /**
+     * Filmpack
+     */
+    const REC21_FILMPACK = 'XFP';
+
+    /**
+     * Frame
+     */
+    const REC21_FRAME = 'XFR';
+
+    /**
+     * Foodtainer
+     */
+    const REC21_FOODTAINER = 'XFT';
+
+    /**
+     * Cart, flatbed
+     */
+    const REC21_CART_FLATBED = 'XFW';
+
+    /**
+     * Bag, flexible container
+     */
+    const REC21_BAG_FLEXIBLE_CONTAINER = 'XFX';
+
+    /**
+     * Bottle, gas
+     */
+    const REC21_BOTTLE_GAS = 'XGB';
+
+    /**
+     * Girder
+     */
+    const REC21_GIRDER = 'XGI';
+
+    /**
+     * Container, gallon
+     */
+    const REC21_CONTAINER_GALLON = 'XGL';
+
+    /**
+     * Receptacle, glass
+     */
+    const REC21_RECEPTACLE_GLASS = 'XGR';
+
+    /**
+     * Tray, containing horizontally stacked flat items
+     */
+    const REC21_TRAY_CONTAINING_HORIZONTALLY_STACKED_FLAT_ITEMS = 'XGU';
+
+    /**
+     * Bag, gunny
+     */
+    const REC21_BAG_GUNNY = 'XGY';
+
+    /**
+     * Girders, in bundle/bunch/truss
+     */
+    const REC21_GIRDERS_IN_BUNDLE_BUNCH_TRUSS = 'XGZ';
+
+    /**
+     * Basket, with handle, plastic
+     */
+    const REC21_BASKET_WITH_HANDLE_PLASTIC = 'XHA';
+
+    /**
+     * Basket, with handle, wooden
+     */
+    const REC21_BASKET_WITH_HANDLE_WOODEN = 'XHB';
+
+    /**
+     * Basket, with handle, cardboard
+     */
+    const REC21_BASKET_WITH_HANDLE_CARDBOARD = 'XHC';
+
+    /**
+     * Hogshead
+     */
+    const REC21_HOGSHEAD = 'XHG';
+
+    /**
+     * Hanger
+     */
+    const REC21_HANGER = 'XHN';
+
+    /**
+     * Hamper
+     */
+    const REC21_HAMPER = 'XHR';
+
+    /**
+     * Package, display, wooden
+     */
+    const REC21_PACKAGE_DISPLAY_WOODEN = 'XIA';
+
+    /**
+     * Package, display, cardboard
+     */
+    const REC21_PACKAGE_DISPLAY_CARDBOARD = 'XIB';
+
+    /**
+     * Package, display, plastic
+     */
+    const REC21_PACKAGE_DISPLAY_PLASTIC = 'XIC';
+
+    /**
+     * Package, display, metal
+     */
+    const REC21_PACKAGE_DISPLAY_METAL = 'XID';
+
+    /**
+     * Package, show
+     */
+    const REC21_PACKAGE_SHOW = 'XIE';
+
+    /**
+     * Package, flow
+     */
+    const REC21_PACKAGE_FLOW = 'XIF';
+
+    /**
+     * Package, paper wrapped
+     */
+    const REC21_PACKAGE_PAPER_WRAPPED = 'XIG';
+
+    /**
+     * Drum, plastic
+     */
+    const REC21_DRUM_PLASTIC = 'XIH';
+
+    /**
+     * Package, cardboard, with bottle grip-holes
+     */
+    const REC21_PACKAGE_CARDBOARD_WITH_BOTTLE_GRIPHOLES = 'XIK';
+
+    /**
+     * Tray, rigid, lidded stackable (CEN TS 14482:2002)
+     */
+    const REC21_TRAY_RIGID_LIDDED_STACKABLE_CEN_TS_144822002 = 'XIL';
+
+    /**
+     * Ingot
+     */
+    const REC21_INGOT = 'XIN';
+
+    /**
+     * Ingots, in bundle/bunch/truss
+     */
+    const REC21_INGOTS_IN_BUNDLE_BUNCH_TRUSS = 'XIZ';
+
+    /**
+     * Bag, jumbo
+     */
+    const REC21_BAG_JUMBO = 'XJB';
+
+    /**
+     * Jerrican, rectangular
+     */
+    const REC21_JERRICAN_RECTANGULAR = 'XJC';
+
+    /**
+     * Jug
+     */
+    const REC21_JUG = 'XJG';
+
+    /**
+     * Jar
+     */
+    const REC21_JAR = 'XJR';
+
+    /**
+     * Jutebag
+     */
+    const REC21_JUTEBAG = 'XJT';
+
+    /**
+     * Jerrican, cylindrical
+     */
+    const REC21_JERRICAN_CYLINDRICAL = 'XJY';
+
+    /**
+     * Keg
+     */
+    const REC21_KEG = 'XKG';
+
+    /**
+     * Kit
+     */
+    const REC21_KIT = 'XKI';
+
+    /**
+     * Luggage
+     */
+    const REC21_LUGGAGE = 'XLE';
+
+    /**
+     * Log
+     */
+    const REC21_LOG = 'XLG';
+
+    /**
+     * Lot
+     */
+    const REC21_LOT = 'XLT';
+
+    /**
+     * Lug
+     */
+    const REC21_LUG = 'XLU';
+
+    /**
+     * Liftvan
+     */
+    const REC21_LIFTVAN = 'XLV';
+
+    /**
+     * Logs, in bundle/bunch/truss
+     */
+    const REC21_LOGS_IN_BUNDLE_BUNCH_TRUSS = 'XLZ';
+
+    /**
+     * Crate, metal
+     */
+    const REC21_CRATE_METAL = 'XMA';
+
+    /**
+     * Bag, multiply
+     */
+    const REC21_BAG_MULTIPLY = 'XMB';
+
+    /**
+     * Crate, milk
+     */
+    const REC21_CRATE_MILK = 'XMC';
+
+    /**
+     * Container, metal
+     */
+    const REC21_CONTAINER_METAL = 'XME';
+
+    /**
+     * Receptacle, metal
+     */
+    const REC21_RECEPTACLE_METAL = 'XMR';
+
+    /**
+     * Sack, multi-wall
+     */
+    const REC21_SACK_MULTIWALL = 'XMS';
+
+    /**
+     * Mat
+     */
+    const REC21_MAT = 'XMT';
+
+    /**
+     * Receptacle, plastic wrapped
+     */
+    const REC21_RECEPTACLE_PLASTIC_WRAPPED = 'XMW';
+
+    /**
+     * Matchbox
+     */
+    const REC21_MATCHBOX = 'XMX';
+
+    /**
+     * Not available
+     */
+    const REC21_NOT_AVAILABLE = 'XNA';
+
+    /**
+     * Unpacked or unpackaged
+     */
+    const REC21_UNPACKED_OR_UNPACKAGED = 'XNE';
+
+    /**
+     * Unpacked or unpackaged, single unit
+     */
+    const REC21_UNPACKED_OR_UNPACKAGED_SINGLE_UNIT = 'XNF';
+
+    /**
+     * Unpacked or unpackaged, multiple units
+     */
+    const REC21_UNPACKED_OR_UNPACKAGED_MULTIPLE_UNITS = 'XNG';
+
+    /**
+     * Nest
+     */
+    const REC21_NEST = 'XNS';
+
+    /**
+     * Net
+     */
+    const REC21_NET = 'XNT';
+
+    /**
+     * Net, tube, plastic
+     */
+    const REC21_NET_TUBE_PLASTIC = 'XNU';
+
+    /**
+     * Net, tube, textile
+     */
+    const REC21_NET_TUBE_TEXTILE = 'XNV';
+
+    /**
+     * Pallet, CHEP 40 cm x 60 cm
+     */
+    const REC21_PALLET_CHEP_40_CM_X_60_CM = 'XOA';
+
+    /**
+     * Pallet, CHEP 80 cm x 120 cm
+     */
+    const REC21_PALLET_CHEP_80_CM_X_120_CM = 'XOB';
+
+    /**
+     * Pallet, CHEP 100 cm x 120 cm
+     */
+    const REC21_PALLET_CHEP_100_CM_X_120_CM = 'XOC';
+
+    /**
+     * Pallet, AS 4068-1993
+     */
+    const REC21_PALLET_AS_40681993 = 'XOD';
+
+    /**
+     * Pallet, ISO T11
+     */
+    const REC21_PALLET_ISO_T11 = 'XOE';
+
+    /**
+     * Platform, unspecified weight or dimension
+     */
+    const REC21_PLATFORM_UNSPECIFIED_WEIGHT_OR_DIMENSION = 'XOF';
+
+    /**
+     * Block
+     */
+    const REC21_BLOCK = 'XOK';
+
+    /**
+     * Octabin
+     */
+    const REC21_OCTABIN = 'XOT';
+
+    /**
+     * Container, outer
+     */
+    const REC21_CONTAINER_OUTER = 'XOU';
+
+    /**
+     * Pan
+     */
+    const REC21_PAN = 'XP2';
+
+    /**
+     * Packet
+     */
+    const REC21_PACKET = 'XPA';
+
+    /**
+     * Pallet, box Combined open-ended box and pallet
+     */
+    const REC21_PALLET_BOX_COMBINED_OPENENDED_BOX_AND_PALLET = 'XPB';
+
+    /**
+     * Parcel
+     */
+    const REC21_PARCEL = 'XPC';
+
+    /**
+     * Pallet, modular, collars 80cms * 100cms
+     */
+    const REC21_PALLET_MODULAR_COLLARS_80CMS__100CMS = 'XPD';
+
+    /**
+     * Pallet, modular, collars 80cms * 120cms
+     */
+    const REC21_PALLET_MODULAR_COLLARS_80CMS__120CMS = 'XPE';
+
+    /**
+     * Pen
+     */
+    const REC21_PEN = 'XPF';
+
+    /**
+     * Plate
+     */
+    const REC21_PLATE = 'XPG';
+
+    /**
+     * Pitcher
+     */
+    const REC21_PITCHER = 'XPH';
+
+    /**
+     * Pipe
+     */
+    const REC21_PIPE = 'XPI';
+
+    /**
+     * Punnet
+     */
+    const REC21_PUNNET = 'XPJ';
+
+    /**
+     * Package
+     */
+    const REC21_PACKAGE = 'XPK';
+
+    /**
+     * Pail
+     */
+    const REC21_PAIL = 'XPL';
+
+    /**
+     * Plank
+     */
+    const REC21_PLANK = 'XPN';
+
+    /**
+     * Pouch
+     */
+    const REC21_POUCH = 'XPO';
+
+    /**
+     * Piece
+     */
+    const REC21_PIECE = 'XPP';
+
+    /**
+     * Receptacle, plastic
+     */
+    const REC21_RECEPTACLE_PLASTIC = 'XPR';
+
+    /**
+     * Pot
+     */
+    const REC21_POT = 'XPT';
+
+    /**
+     * Tray
+     */
+    const REC21_TRAY = 'XPU';
+
+    /**
+     * Pipes, in bundle/bunch/truss
+     */
+    const REC21_PIPES_IN_BUNDLE_BUNCH_TRUSS = 'XPV';
+
+    /**
+     * Pallet
+     */
+    const REC21_PALLET = 'XPX';
+
+    /**
+     * Plates, in bundle/bunch/truss
+     */
+    const REC21_PLATES_IN_BUNDLE_BUNCH_TRUSS = 'XPY';
+
+    /**
+     * Planks, in bundle/bunch/truss
+     */
+    const REC21_PLANKS_IN_BUNDLE_BUNCH_TRUSS = 'XPZ';
+
+    /**
+     * Drum, steel, non-removable head
+     */
+    const REC21_DRUM_STEEL_NONREMOVABLE_HEAD = 'XQA';
+
+    /**
+     * Drum, steel, removable head
+     */
+    const REC21_DRUM_STEEL_REMOVABLE_HEAD = 'XQB';
+
+    /**
+     * Drum, aluminium, non-removable head
+     */
+    const REC21_DRUM_ALUMINIUM_NONREMOVABLE_HEAD = 'XQC';
+
+    /**
+     * Drum, aluminium, removable head
+     */
+    const REC21_DRUM_ALUMINIUM_REMOVABLE_HEAD = 'XQD';
+
+    /**
+     * Drum, plastic, non-removable head
+     */
+    const REC21_DRUM_PLASTIC_NONREMOVABLE_HEAD = 'XQF';
+
+    /**
+     * Drum, plastic, removable head
+     */
+    const REC21_DRUM_PLASTIC_REMOVABLE_HEAD = 'XQG';
+
+    /**
+     * Barrel, wooden, bung type
+     */
+    const REC21_BARREL_WOODEN_BUNG_TYPE = 'XQH';
+
+    /**
+     * Barrel, wooden, removable head
+     */
+    const REC21_BARREL_WOODEN_REMOVABLE_HEAD = 'XQJ';
+
+    /**
+     * Jerrican, steel, non-removable head
+     */
+    const REC21_JERRICAN_STEEL_NONREMOVABLE_HEAD = 'XQK';
+
+    /**
+     * Jerrican, steel, removable head
+     */
+    const REC21_JERRICAN_STEEL_REMOVABLE_HEAD = 'XQL';
+
+    /**
+     * Jerrican, plastic, non-removable head
+     */
+    const REC21_JERRICAN_PLASTIC_NONREMOVABLE_HEAD = 'XQM';
+
+    /**
+     * Jerrican, plastic, removable head
+     */
+    const REC21_JERRICAN_PLASTIC_REMOVABLE_HEAD = 'XQN';
+
+    /**
+     * Box, wooden, natural wood, ordinary
+     */
+    const REC21_BOX_WOODEN_NATURAL_WOOD_ORDINARY = 'XQP';
+
+    /**
+     * Box, wooden, natural wood, with sift proof walls
+     */
+    const REC21_BOX_WOODEN_NATURAL_WOOD_WITH_SIFT_PROOF_WALLS = 'XQQ';
+
+    /**
+     * Box, plastic, expanded
+     */
+    const REC21_BOX_PLASTIC_EXPANDED = 'XQR';
+
+    /**
+     * Box, plastic, solid
+     */
+    const REC21_BOX_PLASTIC_SOLID = 'XQS';
+
+    /**
+     * Rod
+     */
+    const REC21_ROD = 'XRD';
+
+    /**
+     * Ring
+     */
+    const REC21_RING = 'XRG';
+
+    /**
+     * Rack, clothing hanger
+     */
+    const REC21_RACK_CLOTHING_HANGER = 'XRJ';
+
+    /**
+     * Rack
+     */
+    const REC21_RACK = 'XRK';
+
+    /**
+     * Reel
+     */
+    const REC21_REEL = 'XRL';
+
+    /**
+     * Roll
+     */
+    const REC21_ROLL = 'XRO';
+
+    /**
+     * Rednet
+     */
+    const REC21_REDNET = 'XRT';
+
+    /**
+     * Rods, in bundle/bunch/truss
+     */
+    const REC21_RODS_IN_BUNDLE_BUNCH_TRUSS = 'XRZ';
+
+    /**
+     * Sack
+     */
+    const REC21_SACK = 'XSA';
+
+    /**
+     * Slab
+     */
+    const REC21_SLAB = 'XSB';
+
+    /**
+     * Crate, shallow
+     */
+    const REC21_CRATE_SHALLOW = 'XSC';
+
+    /**
+     * Spindle
+     */
+    const REC21_SPINDLE = 'XSD';
+
+    /**
+     * Sea-chest
+     */
+    const REC21_SEACHEST = 'XSE';
+
+    /**
+     * Sachet
+     */
+    const REC21_SACHET = 'XSH';
+
+    /**
+     * Skid
+     */
+    const REC21_SKID = 'XSI';
+
+    /**
+     * Case, skeleton
+     */
+    const REC21_CASE_SKELETON = 'XSK';
+
+    /**
+     * Slipsheet
+     */
+    const REC21_SLIPSHEET = 'XSL';
+
+    /**
+     * Sheetmetal
+     */
+    const REC21_SHEETMETAL = 'XSM';
+
+    /**
+     * Spool
+     */
+    const REC21_SPOOL = 'XSO';
+
+    /**
+     * Sheet, plastic wrapping
+     */
+    const REC21_SHEET_PLASTIC_WRAPPING = 'XSP';
+
+    /**
+     * Case, steel
+     */
+    const REC21_CASE_STEEL = 'XSS';
+
+    /**
+     * Sheet
+     */
+    const REC21_SHEET = 'XST';
+
+    /**
+     * Suitcase
+     */
+    const REC21_SUITCASE = 'XSU';
+
+    /**
+     * Envelope, steel
+     */
+    const REC21_ENVELOPE_STEEL = 'XSV';
+
+    /**
+     * Shrinkwrapped
+     */
+    const REC21_SHRINKWRAPPED = 'XSW';
+
+    /**
+     * Sleeve
+     */
+    const REC21_SLEEVE = 'XSY';
+
+    /**
+     * Sheets, in bundle/bunch/truss
+     */
+    const REC21_SHEETS_IN_BUNDLE_BUNCH_TRUSS = 'XSZ';
+
+    /**
+     * Tablet
+     */
+    const REC21_TABLET = 'XT1';
+
+    /**
+     * Tub
+     */
+    const REC21_TUB = 'XTB';
+
+    /**
+     * Tea-chest
+     */
+    const REC21_TEACHEST = 'XTC';
+
+    /**
+     * Tube, collapsible
+     */
+    const REC21_TUBE_COLLAPSIBLE = 'XTD';
+
+    /**
+     * Tyre
+     */
+    const REC21_TYRE = 'XTE';
+
+    /**
+     * Tank container, generic
+     */
+    const REC21_TANK_CONTAINER_GENERIC = 'XTG';
+
+    /**
+     * Tierce
+     */
+    const REC21_TIERCE = 'XTI';
+
+    /**
+     * Tank, rectangular
+     */
+    const REC21_TANK_RECTANGULAR = 'XTK';
+
+    /**
+     * Tub, with lid
+     */
+    const REC21_TUB_WITH_LID = 'XTL';
+
+    /**
+     * Tin
+     */
+    const REC21_TIN = 'XTN';
+
+    /**
+     * Tun
+     */
+    const REC21_TUN = 'XTO';
+
+    /**
+     * Trunk
+     */
+    const REC21_TRUNK = 'XTR';
+
+    /**
+     * Truss
+     */
+    const REC21_TRUSS = 'XTS';
+
+    /**
+     * Bag, tote
+     */
+    const REC21_BAG_TOTE = 'XTT';
+
+    /**
+     * Tube
+     */
+    const REC21_TUBE = 'XTU';
+
+    /**
+     * Tube, with nozzle
+     */
+    const REC21_TUBE_WITH_NOZZLE = 'XTV';
+
+    /**
+     * Pallet, triwall
+     */
+    const REC21_PALLET_TRIWALL = 'XTW';
+
+    /**
+     * Tank, cylindrical
+     */
+    const REC21_TANK_CYLINDRICAL = 'XTY';
+
+    /**
+     * Tubes, in bundle/bunch/truss
+     */
+    const REC21_TUBES_IN_BUNDLE_BUNCH_TRUSS = 'XTZ';
+
+    /**
+     * Uncaged
+     */
+    const REC21_UNCAGED = 'XUC';
+
+    /**
+     * Unit
+     */
+    const REC21_UNIT = 'XUN';
+
+    /**
+     * Vat
+     */
+    const REC21_VAT = 'XVA';
+
+    /**
+     * Bulk, gas (at 1031 mbar and 15Â°C)
+     */
+    const REC21_BULK_GAS_AT_1031_MBAR_AND_15C = 'XVG';
+
+    /**
+     * Vial
+     */
+    const REC21_VIAL = 'XVI';
+
+    /**
+     * Vanpack
+     */
+    const REC21_VANPACK = 'XVK';
+
+    /**
+     * Bulk, liquid
+     */
+    const REC21_BULK_LIQUID = 'XVL';
+
+    /**
+     * Bulk, solid, large particles (ânodulesâ)
+     */
+    const REC21_BULK_SOLID_LARGE_PARTICLES_NODULES = 'XVO';
+
+    /**
+     * Vacuum-packed
+     */
+    const REC21_VACUUMPACKED = 'XVP';
+
+    /**
+     * Bulk, liquefied gas (at abnormal temperature/pressure)
+     */
+    const REC21_BULK_LIQUEFIED_GAS_AT_ABNORMAL_TEMPERATURE_PRESSURE = 'XVQ';
+
+    /**
+     * Vehicle
+     */
+    const REC21_VEHICLE = 'XVN';
+
+    /**
+     * Bulk, solid, granular particles (âgrainsâ)
+     */
+    const REC21_BULK_SOLID_GRANULAR_PARTICLES_GRAINS = 'XVR';
+
+    /**
+     * Bulk, scrap metal
+     */
+    const REC21_BULK_SCRAP_METAL = 'XVS';
+
+    /**
+     * Bulk, solid, fine particles (âpowdersâ)
+     */
+    const REC21_BULK_SOLID_FINE_PARTICLES_POWDERS = 'XVY';
+
+    /**
+     * Intermediate bulk container
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER = 'XWA';
+
+    /**
+     * Wickerbottle
+     */
+    const REC21_WICKERBOTTLE = 'XWB';
+
+    /**
+     * Intermediate bulk container, steel
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_STEEL = 'XWC';
+
+    /**
+     * Intermediate bulk container, aluminium
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_ALUMINIUM = 'XWD';
+
+    /**
+     * Intermediate bulk container, metal
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_METAL = 'XWF';
+
+    /**
+     * Intermediate bulk container, steel, pressurised > 10 kpa
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_STEEL_PRESSURISED__10_KPA = 'XWG';
+
+    /**
+     * Intermediate bulk container, aluminium, pressurised > 10 kpa
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_ALUMINIUM_PRESSURISED__10_KPA = 'XWH';
+
+    /**
+     * Intermediate bulk container, metal, pressure 10 kpa
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_METAL_PRESSURE_10_KPA = 'XWJ';
+
+    /**
+     * Intermediate bulk container, steel, liquid
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_STEEL_LIQUID = 'XWK';
+
+    /**
+     * Intermediate bulk container, aluminium, liquid
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_ALUMINIUM_LIQUID = 'XWL';
+
+    /**
+     * Intermediate bulk container, metal, liquid
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_METAL_LIQUID = 'XWM';
+
+    /**
+     * Intermediate bulk container, woven plastic, without coat/liner
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_WOVEN_PLASTIC_WITHOUT_COAT_LINER = 'XWN';
+
+    /**
+     * Intermediate bulk container, woven plastic, coated
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_WOVEN_PLASTIC_COATED = 'XWP';
+
+    /**
+     * Intermediate bulk container, woven plastic, with liner
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_WOVEN_PLASTIC_WITH_LINER = 'XWQ';
+
+    /**
+     * Intermediate bulk container, woven plastic, coated and liner
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_WOVEN_PLASTIC_COATED_AND_LINER = 'XWR';
+
+    /**
+     * Intermediate bulk container, plastic film
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_PLASTIC_FILM = 'XWS';
+
+    /**
+     * Intermediate bulk container, textile with out coat/liner
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_TEXTILE_WITH_OUT_COAT_LINER = 'XWT';
+
+    /**
+     * Intermediate bulk container, natural wood, with inner liner
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_NATURAL_WOOD_WITH_INNER_LINER = 'XWU';
+
+    /**
+     * Intermediate bulk container, textile, coated
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_TEXTILE_COATED = 'XWV';
+
+    /**
+     * Intermediate bulk container, textile, with liner
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_TEXTILE_WITH_LINER = 'XWW';
+
+    /**
+     * Intermediate bulk container, textile, coated and liner
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_TEXTILE_COATED_AND_LINER = 'XWX';
+
+    /**
+     * Intermediate bulk container, plywood, with inner liner
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_PLYWOOD_WITH_INNER_LINER = 'XWY';
+
+    /**
+     * Intermediate bulk container, reconstituted wood, with inner liner
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_RECONSTITUTED_WOOD_WITH_INNER_LINER = 'XWZ';
+
+    /**
+     * Bag, woven plastic, without inner coat/liner
+     */
+    const REC21_BAG_WOVEN_PLASTIC_WITHOUT_INNER_COAT_LINER = 'XXA';
+
+    /**
+     * Bag, woven plastic, sift proof
+     */
+    const REC21_BAG_WOVEN_PLASTIC_SIFT_PROOF = 'XXB';
+
+    /**
+     * Bag, woven plastic, water resistant
+     */
+    const REC21_BAG_WOVEN_PLASTIC_WATER_RESISTANT = 'XXC';
+
+    /**
+     * Bag, plastics film
+     */
+    const REC21_BAG_PLASTICS_FILM = 'XXD';
+
+    /**
+     * Bag, textile, without inner coat/liner
+     */
+    const REC21_BAG_TEXTILE_WITHOUT_INNER_COAT_LINER = 'XXF';
+
+    /**
+     * Bag, textile, sift proof
+     */
+    const REC21_BAG_TEXTILE_SIFT_PROOF = 'XXG';
+
+    /**
+     * Bag, textile, water resistant
+     */
+    const REC21_BAG_TEXTILE_WATER_RESISTANT = 'XXH';
+
+    /**
+     * Bag, paper, multi-wall
+     */
+    const REC21_BAG_PAPER_MULTIWALL = 'XXJ';
+
+    /**
+     * Bag, paper, multi-wall, water resistant
+     */
+    const REC21_BAG_PAPER_MULTIWALL_WATER_RESISTANT = 'XXK';
+
+    /**
+     * Composite packaging, plastic receptacle in steel drum
+     */
+    const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_STEEL_DRUM = 'XYA';
+
+    /**
+     * Composite packaging, plastic receptacle in steel crate box
+     */
+    const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_STEEL_CRATE_BOX = 'XYB';
+
+    /**
+     * Composite packaging, plastic receptacle in aluminium drum
+     */
+    const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_ALUMINIUM_DRUM = 'XYC';
+
+    /**
+     * Composite packaging, plastic receptacle in aluminium crate
+     */
+    const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_ALUMINIUM_CRATE = 'XYD';
+
+    /**
+     * Composite packaging, plastic receptacle in wooden box
+     */
+    const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_WOODEN_BOX = 'XYF';
+
+    /**
+     * Composite packaging, plastic receptacle in plywood drum
+     */
+    const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_PLYWOOD_DRUM = 'XYG';
+
+    /**
+     * Composite packaging, plastic receptacle in plywood box
+     */
+    const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_PLYWOOD_BOX = 'XYH';
+
+    /**
+     * Composite packaging, plastic receptacle in fibre drum
+     */
+    const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_FIBRE_DRUM = 'XYJ';
+
+    /**
+     * Composite packaging, plastic receptacle in fibreboard box
+     */
+    const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_FIBREBOARD_BOX = 'XYK';
+
+    /**
+     * Composite packaging, plastic receptacle in plastic drum
+     */
+    const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_PLASTIC_DRUM = 'XYL';
+
+    /**
+     * Composite packaging, plastic receptacle in solid plastic box
+     */
+    const REC21_COMPOSITE_PACKAGING_PLASTIC_RECEPTACLE_IN_SOLID_PLASTIC_BOX = 'XYM';
+
+    /**
+     * Composite packaging, glass receptacle in steel drum
+     */
+    const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_STEEL_DRUM = 'XYN';
+
+    /**
+     * Composite packaging, glass receptacle in steel crate box
+     */
+    const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_STEEL_CRATE_BOX = 'XYP';
+
+    /**
+     * Composite packaging, glass receptacle in aluminium drum
+     */
+    const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_ALUMINIUM_DRUM = 'XYQ';
+
+    /**
+     * Composite packaging, glass receptacle in aluminium crate
+     */
+    const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_ALUMINIUM_CRATE = 'XYR';
+
+    /**
+     * Composite packaging, glass receptacle in wooden box
+     */
+    const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_WOODEN_BOX = 'XYS';
+
+    /**
+     * Composite packaging, glass receptacle in plywood drum
+     */
+    const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_PLYWOOD_DRUM = 'XYT';
+
+    /**
+     * Composite packaging, glass receptacle in wickerwork hamper
+     */
+    const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_WICKERWORK_HAMPER = 'XYV';
+
+    /**
+     * Composite packaging, glass receptacle in fibre drum
+     */
+    const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_FIBRE_DRUM = 'XYW';
+
+    /**
+     * Composite packaging, glass receptacle in fibreboard box
+     */
+    const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_FIBREBOARD_BOX = 'XYX';
+
+    /**
+     * Composite packaging, glass receptacle in expandable plastic pack
+     */
+    const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_EXPANDABLE_PLASTIC_PACK = 'XYY';
+
+    /**
+     * Composite packaging, glass receptacle in solid plastic pack
+     */
+    const REC21_COMPOSITE_PACKAGING_GLASS_RECEPTACLE_IN_SOLID_PLASTIC_PACK = 'XYZ';
+
+    /**
+     * Intermediate bulk container, paper, multi-wall
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_PAPER_MULTIWALL = 'XZA';
+
+    /**
+     * Bag, large
+     */
+    const REC21_BAG_LARGE = 'XZB';
+
+    /**
+     * Intermediate bulk container, paper, multi-wall, water resistant
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_PAPER_MULTIWALL_WATER_RESISTANT = 'XZC';
+
+    /**
+     * Intermediate bulk container, rigid plastic, with structural equipment,
+     * solids
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_WITH_STRUCTURAL_EQUIPMENT_SOLIDS = 'XZD';
+
+    /**
+     * Intermediate bulk container, rigid plastic, freestanding, solids
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_FREESTANDING_SOLIDS = 'XZF';
+
+    /**
+     * Intermediate bulk container, rigid plastic, with structural equipment,
+     * pressurised
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_WITH_STRUCTURAL_EQUIPMENT_PRESSURISED = 'XZG';
+
+    /**
+     * Intermediate bulk container, rigid plastic, freestanding, pressurised
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_FREESTANDING_PRESSURISED = 'XZH';
+
+    /**
+     * Intermediate bulk container, rigid plastic, with structural equipment,
+     * liquids
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_WITH_STRUCTURAL_EQUIPMENT_LIQUIDS = 'XZJ';
+
+    /**
+     * Intermediate bulk container, rigid plastic, freestanding, liquids
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_RIGID_PLASTIC_FREESTANDING_LIQUIDS = 'XZK';
+
+    /**
+     * Intermediate bulk container, composite, rigid plastic, solids
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_RIGID_PLASTIC_SOLIDS = 'XZL';
+
+    /**
+     * Intermediate bulk container, composite, flexible plastic, solids
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_FLEXIBLE_PLASTIC_SOLIDS = 'XZM';
+
+    /**
+     * Intermediate bulk container, composite, rigid plastic, pressurised
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_RIGID_PLASTIC_PRESSURISED = 'XZN';
+
+    /**
+     * Intermediate bulk container, composite, flexible plastic, pressurised
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_FLEXIBLE_PLASTIC_PRESSURISED = 'XZP';
+
+    /**
+     * Intermediate bulk container, composite, rigid plastic, liquids
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_RIGID_PLASTIC_LIQUIDS = 'XZQ';
+
+    /**
+     * Intermediate bulk container, composite, flexible plastic, liquids
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE_FLEXIBLE_PLASTIC_LIQUIDS = 'XZR';
+
+    /**
+     * Intermediate bulk container, composite
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_COMPOSITE = 'XZS';
+
+    /**
+     * Intermediate bulk container, fibreboard
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_FIBREBOARD = 'XZT';
+
+    /**
+     * Intermediate bulk container, flexible
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_FLEXIBLE = 'XZU';
+
+    /**
+     * Intermediate bulk container, metal, other than steel
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_METAL_OTHER_THAN_STEEL = 'XZV';
+
+    /**
+     * Intermediate bulk container, natural wood
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_NATURAL_WOOD = 'XZW';
+
+    /**
+     * Intermediate bulk container, plywood
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_PLYWOOD = 'XZX';
+
+    /**
+     * Intermediate bulk container, reconstituted wood
+     */
+    const REC21_INTERMEDIATE_BULK_CONTAINER_RECONSTITUTED_WOOD = 'XZY';
+
+    /**
+     * Mutually defined
+     */
+    const REC21_MUTUALLY_DEFINED = 'XZZ';
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdVATExemptionReasonCode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdVATExemptionReasonCode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/codelists/ZugferdVATExemptionReasonCode.php	(revision 8435)
@@ -0,0 +1,431 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\codelists;
+
+/**
+ * Class representing CEF VATEX â VAT exemption reason code
+ * For BT-121
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   L. Ollivault
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+
+class ZugferdVATExemptionReasonCode
+{
+    /**
+     * VATEX-EU-79-C
+     * Exempt based on article 79, point c of Council Directive 2006/112/EC
+     * Context of exemption: Exemptions relating to repayment of expenditures.
+     */
+    const VATEXEU79C = "VATEX-EU-79-C";
+
+    /**
+     * VATEX-EU-132
+     * Exempt based on article 132 of Council Directive 2006/112/EC
+     * Context of exemption: Exemptions for certain activities in public interest.
+     */
+    const VATEXEU132 = "VATEX-EU-132";
+
+    /**
+     * VATEX-EU-132-1A
+     * Exempt based on article 132, section 1 (a) of Council Directive 2006/112/EC
+     * Context of exemption: The supply by the public postal services of services other than passenger transport and telecommunications services, and the supply of goods incidental thereto.
+     */
+    const VATEXEU1321A = "VATEX-EU-132-1A";
+
+    /**
+     * VATEX-EU-132-1B
+     * Exempt based on article 132, section 1 (b) of Council Directive 2006/112/EC
+     * Context of exemption: Hospital and medical care and closely related activities undertaken by bodies governed by public law or, under social conditions comparable with those applicable to bodies governed by public law, by hospitals, centres for medical treatment or diagnosis and other duly recognised establishments of a similar nature.
+     */
+    const VATEXEU1321B = "VATEX-EU-132-1B";
+
+    /**
+     * VATEX-EU-132-1C
+     * Exempt based on article 132, section 1 (c) of Council Directive 2006/112/EC
+     * Context of exemption: The provision of medical care in the exercise of the medical and paramedical professions as defined by the Member State concerned.
+     */
+    const VATEXEU1321C = "VATEX-EU-132-1C";
+
+    /**
+     * VATEX-EU-132-1D
+     * Exempt based on article 132, section 1 (d) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of human organs, blood and milk.
+     */
+    const VATEXEU1321D = "VATEX-EU-132-1D";
+
+    /**
+     * VATEX-EU-132-1E
+     * Exempt based on article 132, section 1 (e) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of services by dental technicians in their professional capacity and the supply of dental prostheses by dentists and dental technicians.
+     */
+    const VATEXEU1321E = "VATEX-EU-132-1E";
+
+    /**
+     * VATEX-EU-132-1F
+     * Exempt based on article 132, section 1 (f) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of services by independent groups of persons, who are carrying on an activity which is exempt from VAT or in relation to which they are not taxable persons, for the purpose of rendering their members the services directly necessary for the exercise of that activity, where those groups merely claim from their members exact reimbursement of their share of the joint expenses, provided that such exemption is not likely to cause distortion of competition.
+     */
+    const VATEXEU1321F = "VATEX-EU-132-1F";
+
+    /**
+     * VATEX-EU-132-1G
+     * Exempt based on article 132, section 1 (g) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of services and of goods closely linked to welfare and social security work, including those supplied by old people's homes, by bodies governed by public law or by other bodies recognised by the Member State concerned as being devoted to social wellbeing.
+     */
+    const VATEXEU1321G = "VATEX-EU-132-1G";
+
+    /**
+     * VATEX-EU-132-1H
+     * Exempt based on article 132, section 1 (h) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of services and of goods closely linked to the protection of children and young persons by bodies governed by public law or by other organisations recognised by the Member State concerned as being devoted to social wellbeing.
+     */
+    const VATEXEU1321H = "VATEX-EU-132-1H";
+
+    /**
+     * VATEX-EU-132-1I
+     * Exempt based on article 132, section 1 (i) of Council Directive 2006/112/EC
+     * Context of exemption: The provision of children's or young people's education, school or university education, vocational training or retraining, including the supply of services and of goods closely related thereto, by bodies governed by public law having such as their aim or by other organisations recognised by the Member State concerned as having similar objects.
+     */
+    const VATEXEU1321I = "VATEX-EU-132-1I";
+
+    /**
+     * VATEX-EU-132-1J
+     * Exempt based on article 132, section 1 (j) of Council Directive 2006/112/EC
+     * Context of exemption: Tuition given privately by teachers and covering school or university education.
+     */
+    const VATEXEU1321J = "VATEX-EU-132-1J";
+
+    /**
+     * VATEX-EU-132-1K
+     * Exempt based on article 132, section 1 (k) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of staff by religious or philosophical institutions for the purpose of the activities referred to in points (b), (g), (h) and (i) and with a view to spiritual welfare.
+     */
+    const VATEXEU1321K = "VATEX-EU-132-1K";
+
+    /**
+     * VATEX-EU-132-1L
+     * Exempt based on article 132, section 1 (l) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of services, and the supply of goods closely linked thereto, to their members in their common interest in return for a subscription fixed in accordance with their rules by non-profitmaking organisations with aims of a political, trade-union, religious, patriotic, philosophical, philanthropic or civic nature, provided that this exemption is not likely to cause distortion of competition.
+     */
+    const VATEXEU1321L = "VATEX-EU-132-1L";
+
+    /**
+     * VATEX-EU-132-1M
+     * Exempt based on article 132, section 1 (m) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of certain services closely linked to sport or physical education by non-profit-making organisations to persons taking part in sport or physical education.
+     */
+    const VATEXEU1321M = "VATEX-EU-132-1M";
+
+    /**
+     * VATEX-EU-132-1N
+     * Exempt based on article 132, section 1 (n) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of certain cultural services, and the supply of goods closely linked thereto, by bodies governed by public law or by other cultural bodies recognised by the Member State concerned.
+     */
+    const VATEXEU1321N = "VATEX-EU-132-1N";
+
+    /**
+     * VATEX-EU-132-1O
+     * Exempt based on article 132, section 1 (o) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of services and goods, by organisations whose activities are exempt pursuant to points (b), (g), (h), (i), (l), (m) and (n), in connection with fund-raising events organised exclusively for their own benefit, provided that exemption is not likely to cause distortion of competition.
+     */
+    const VATEXEU1321O = "VATEX-EU-132-1O";
+
+    /**
+     * VATEX-EU-132-1P
+     * Exempt based on article 132, section 1 (p) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of transport services for sick or injured persons in vehicles specially designed for the purpose, by duly authorised bodies.
+     */
+    const VATEXEU1321P = "VATEX-EU-132-1P";
+
+    /**
+     * VATEX-EU-132-1Q
+     * Exempt based on article 132, section 1 (q) of Council Directive 2006/112/EC
+     * Context of exemption: The activities, other than those of a commercial nature, carried out by public radio and television bodies.
+     */
+    const VATEXEU1321Q = "VATEX-EU-132-1Q";
+
+    /**
+     * VATEX-EU-143
+     * Exempt based on article 143 of Council Directive 2006/112/EC
+     * Context of exemption: Exemptions on importation.
+     */
+    const VATEXEU143 = "VATEX-EU-143";
+
+    /**
+     * VATEX-EU-143-1A
+     * Exempt based on article 143, section 1 (a) of Council Directive 2006/112/EC
+     * Context of exemption: The final importation of goods of which the supply by a taxable person would in all circumstances be exempt within their respective territory.
+     */
+    const VATEX_EU_143_1A = "VATEX-EU-143-1A";
+
+    /**
+     * VATEX-EU-143-1B
+     * Exempt based on article 143, section 1 (b) of Council Directive 2006/112/EC
+     * Context of exemption: The final importation of goods governed by Council Directives 69/169/EEC (1), 83/181/EEC (2) and 2006/79/EC (3).
+     */
+    const VATEX_EU_143_1B = "VATEX-EU-143-1B";
+
+    /**
+     * VATEX-EU-143-1C
+     * Exempt based on article 143, section 1 (c) of Council Directive 2006/112/EC
+     * Context of exemption: The final importation of goods, in free circulation from a third territory forming part of the Community customs territory, which would be entitled to exemption under point (b) if they had been imported within the meaning of the first paragraph of Article 30.
+     */
+    const VATEX_EU_143_1C = "VATEX-EU-143-1C";
+
+    /**
+     * VATEX-EU-143-1D
+     * Exempt based on article 143, section 1 (d) of Council Directive 2006/112/EC
+     * Context of exemption: The importation of goods dispatched or transported from a third territory or a third country into a Member State other than that in which the dispatch or transport of goods ends, where the supply of such goods by the importer designated or recognised under Article 201 as liable for payment of VAT is exempt under Article 138.
+     */
+    const VATEX_EU_143_1D = "VATEX-EU-143-1D";
+
+    /**
+     * VATEX-EU-143-1E
+     * Exempt based on article 143, section 1 (e) of Council Directive 2006/112/EC
+     * Context of exemption: The reimportation, by the person who exported them, of goods in the state in which they were exported, where those goods are exempt from customs duties.
+     */
+    const VATEX_EU_143_1E = "VATEX-EU-143-1E";
+
+    /**
+     * VATEX-EU-143-1F
+     * Exempt based on article 143, section 1 (f) of Council Directive 2006/112/EC
+     * Context of exemption: The importation, under diplomatic and consular arrangements, of goods which are exempt from customs duties.
+     */
+    const VATEX_EU_143_1F = "VATEX-EU-143-1F";
+
+    /**
+     * VATEX-EU-143-1FA
+     * Exempt based on article 143, section 1 (fa) of Council Directive 2006/112/EC
+     * Context of exemption: The importation of goods by the European Community, the European Atomic Energy Community, the European Central Bank or the European Investment Bank, or by the bodies set up by the Communities to which the Protocol of 8 April 1965 on the privileges and immunities of the European Communities applies, within the limits and under the conditions of that Protocol and the agreements for its implementation or the headquarters agreements, in so far as it does not lead to distortion of  competition;
+     */
+    const VATEX_EU_143_1FA = "VATEX-EU-143-1FA";
+
+    /**
+     * VATEX-EU-143-1G
+     * Exempt based on article 143, section 1 (g) of Council Directive 2006/112/EC
+     * Context of exemption: The importation of goods by international bodies, other than those referred to in point (fa), recognised as such by the public authorities of the host Member State, or by members of such bodies, within the limits and under the conditions laid down by the international conventions establishing the bodies or by headquarters agreements;
+     */
+    const VATEX_EU_143_1G = "VATEX-EU-143-1G";
+
+    /**
+     * VATEX-EU-143-1H
+     * Exempt based on article 143, section 1 (h) of Council Directive 2006/112/EC
+     * Context of exemption: The importation of goods, into Member States party to the North Atlantic Treaty, by the armed forces of other States party to that Treaty for the use of those forces or the civilian staff accompanying them or for supplying their messes or canteens where such forces take part in the common defence effort.
+     */
+    const VATEX_EU_143_1H = "VATEX-EU-143-1H";
+
+    /**
+     * VATEX-EU-143-1I
+     * Exempt based on article 143, section 1 (i) of Council Directive 2006/112/EC
+     * Context of exemption: The importation of goods by the armed forces of the United Kingdom stationed in the island of Cyprus pursuant to the Treaty of Establishment concerning the Republic of Cyprus, dated 16 August 1960, which are for the use of those forces or the civilian staff accompanying them or for supplying their messes or canteens.
+     */
+    const VATEX_EU_143_1I = "VATEX-EU-143-1I";
+
+    /**
+     * VATEX-EU-143-1J
+     * Exempt based on article 143, section 1 (j) of Council Directive 2006/112/EC
+     * Context of exemption: The importation into ports, by sea fishing undertakings, of their catches, unprocessed or after undergoing preservation for marketing but before being supplied.
+     */
+    const VATEX_EU_143_1J = "VATEX-EU-143-1J";
+
+    /**
+     * VATEX-EU-143-1K
+     * Exempt based on article 143, section 1 (k) of Council Directive 2006/112/EC
+     * Context of exemption: The importation of gold by central banks.
+     */
+    const VATEX_EU_143_1K = "VATEX-EU-143-1K";
+
+    /**
+     * VATEX-EU-143-1L
+     * Exempt based on article 143, section 1 (l) of Council Directive 2006/112/EC
+     * Context of exemption: The importation of gas through a natural gas system or any network connected to such a system or fed in from a vessel transporting gas into a natural gas system or any upstream pipeline network, of electricity or of heat or cooling energy through heating or cooling networks.
+     */
+    const VATEX_EU_143_1L = "VATEX-EU-143-1L";
+
+    /**
+     * VATEX-EU-148
+     * Exempt based on article 148 of Council Directive 2006/112/EC
+     * Context of exemption: Exemptions related to international transport.
+     */
+    const VATEX_EU_148 = "VATEX-EU-148";
+
+    /**
+     * VATEX-EU-148-A
+     * Exempt based on article 148, section (a) of Council Directive 2006/112/EC
+     * Context of exemption: Fuel supplies for commercial international transport vessels.
+     */
+    const VATEX_EU_148_A = "VATEX-EU-148-A";
+
+    /**
+     * VATEX-EU-148-B
+     * Exempt based on article 148, section (b) of Council Directive 2006/112/EC
+     * Context of exemption: Fuel supplies for fighting ships in international transport.
+     */
+    const VATEX_EU_148_B = "VATEX-EU-148-B";
+
+    /**
+     * VATEX-EU-148-C
+     * Exempt based on article 148, section (c) of Council Directive 2006/112/EC
+     * Context of exemption: Maintenance, modification, chartering and hiring of international transport vessels.
+     */
+    const VATEX_EU_148_C = "VATEX-EU-148-C";
+
+    /**
+     * VATEX-EU-148-D
+     * Exempt based on article 148, section (d) of Council Directive 2006/112/EC
+     * Context of exemption: Services directly linked to the exportation or importation of goods, including transportation and ancillary services, such as loading, unloading, handling, storage and warehousing.
+     */
+    const VATEX_EU_148_D = "VATEX-EU-148-D";
+
+    /**
+     * VATEX-EU-148-E
+     * Exempt based on article 148, section (e) of Council Directive 2006/112/EC
+     * Context of exemption: Services directly linked to the exportation or importation of goods, including transportation and ancillary services, such as loading, unloading, handling, storage and warehousing, supplied by intermediaries, including customs agents, and which are performed on behalf of the exporter or importer.
+     */
+    const VATEX_EU_148_E = "VATEX-EU-148-E";
+
+    /**
+     * VATEX-EU-148-F
+     * Exempt based on article 148, section (f) of Council Directive 2006/112/EC
+     * Context of exemption: Maintenance, repair, etc., of aircraft used for commercial international transport.
+     */
+    const VATEX_EU_148_F = "VATEX-EU-148-F";
+
+    /**
+     * VATEX-EU-148-G
+     * Exempt based on article 148, section (g) of Council Directive 2006/112/EC
+     * Context of exemption: Supplies of goods or services to be used or consumed on board commercial international transport vessels or aircraft, and the supply of goods or services directly connected with the supplies referred to above, up to the amount of the exemption applicable to such supplies.
+     */
+    const VATEX_EU_148_G = "VATEX-EU-148-G";
+
+    /**
+     * VATEX-EU-151
+     * Exempt based on article 151 of Council Directive 2006/112/EC
+     * Context of exemption: Exemptions for final importation of certain goods.
+     */
+    const VATEX_EU_151 = "VATEX-EU-151";
+
+    /**
+     * VATEX-EU-151-1A
+     * Exempt based on article 151, section 1 (a) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of goods or services under diplomatic and consular arrangements.
+     */
+    const VATEX_EU_151_1A = "VATEX-EU-151-1A";
+
+    /**
+     * VATEX-EU-151-1AA
+     * Exempt based on article 151, section 1 (aa) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of goods or services to the European Community, the European Atomic Energy Community, the European Central Bank or the European Investment Bank, or to the bodies set up by the Communities to which the Protocol of 8 April 1965 on the privileges and immunities of the European Communities applies, within the limits and under the conditions of that Protocol and the agreements for its implementation or the headquarters agreements, in so far as it does not lead to distortion of competition.
+     */
+    const VATEX_EU_151_1AA = "VATEX-EU-151-1AA";
+
+    /**
+     * VATEX-EU-151-1B
+     * Exempt based on article 151, section 1 (b) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of goods or services to international bodies, other than those referred to in point (aa), recognised as such by the public authorities of the host Member States, and to members of such bodies, within the limits and under the conditions laid down by the international conventions establishing the bodies or by headquarters agreements.
+     */
+    const VATEX_EU_151_1B = "VATEX-EU-151-1B";
+
+    /**
+     * VATEX-EU-151-1C
+     * Exempt based on article 151, section 1 (c) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of goods or services within a Member State which is a party to the North Atlantic Treaty, intended either for the armed forces of other States party to that Treaty for the use of those forces, or of the civilian staff accompanying them, or for supplying their messes or canteens when such forces take part in the common defence effort.
+     */
+    const VATEX_EU_151_1C = "VATEX-EU-151-1C";
+
+    /**
+     * VATEX-EU-151-1D
+     * Exempt based on article 151, section 1 (d) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of goods or services to another Member State, intended for the armed forces of any State which is a party to the North Atlantic Treaty, other than the Member State of destination itself, for the use of those forces, or of the civilian staff accompanying them, or for supplying their messes or canteens when such forces take part in the common defence effort.
+     */
+    const VATEX_EU_151_1D = "VATEX-EU-151-1D";
+
+    /**
+     * VATEX-EU-151-1E
+     * Exempt based on article 151, section 1 (e) of Council Directive 2006/112/EC
+     * Context of exemption: The supply of goods or services to the armed forces of the United Kingdom stationed in the island of Cyprus pursuant to the Treaty of Establishment concerning the Republic of Cyprus, dated 16 August 1960, which are for the use of those forces, or of the civilian staff accompanying them, or for supplying their messes or canteens.
+     */
+    const VATEX_EU_151_1E = "VATEX-EU-151-1E";
+
+    /**
+     * VATEX-EU-309
+     * Exempt based on article 309 of Council Directive 2006/112/EC
+     * Context of exemption: Travel agents performed outside of EU.
+     */
+    const VATEX_EU_309 = "VATEX-EU-309";
+
+    /**
+     * VATEX-EU-AE
+     * Reverse charge
+     * Supports EN 16931-1 rule BR-AE-10
+     * Only use with VAT category code AE
+     */
+    const VATEX_EU_AE = "VATEX-EU-AE";
+
+    /**
+     * VATEX-EU-D
+     * Intra-Community acquisition from second hand means of transport
+     * Second-hand means of transport - Indication that VAT has been paid according to the relevant transitional arrangements
+     * Only use with VAT category code E
+     */
+    const VATEX_EU_D = "VATEX-EU-D";
+
+    /**
+     * VATEX-EU-F
+     * Intra-Community acquisition of second hand goods
+     * Second-hand goods - Indication that the VAT margin scheme for second-hand goods has been applied.
+     * Only use with VAT category code E
+     */
+    const VATEX_EU_F = "VATEX-EU-F";
+
+    /**
+     * VATEX-EU-G
+     * Export outside the EU
+     * Supports EN 16931-1 rule BR-G-10
+     * Only use with VAT category code G
+     */
+    const VATEX_EU_G = "VATEX-EU-G";
+
+    /**
+     * VATEX-EU-I
+     * Intra-Community acquisition of works of art
+     * Works of art - Indication that the VAT margin scheme for works of art has been applied.
+     * Only use with VAT category code E
+     */
+    const VATEX_EU_I = "VATEX-EU-I";
+
+    /**
+     * VATEX-EU-IC
+     * Intra-Community supply
+     * Supports EN 16931-1 rule BR-IC-10
+     * Only use with VAT category code K
+     */
+    const VATEX_EU_IC = "VATEX-EU-IC";
+
+    /**
+     * VATEX-EU-J
+     * Intra-Community acquisition of collectors items and antiques
+     * Collectors' items and antiques - Indication that the VAT margin scheme for collectorâs items and antiques has been applied.
+     * Only use with VAT category code E
+     */
+    const VATEX_EU_J = "VATEX-EU-J";
+
+    /**
+     * VATEX-EU-O
+     * Not subject to VAT
+     * Supports EN 16931-1 rule BR-O-10
+     * Only use with VAT category code O
+     */
+    const VATEX_EU_O = "VATEX-EU-O";
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/AllowanceChargeReasonCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/AllowanceChargeReasonCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/AllowanceChargeReasonCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\qdt;
+
+/**
+ * Class representing AllowanceChargeReasonCodeType
+ *
+ * XSD Type: AllowanceChargeReasonCodeType
+ */
+class AllowanceChargeReasonCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/CountryIDType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/CountryIDType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/CountryIDType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\qdt;
+
+/**
+ * Class representing CountryIDType
+ *
+ * XSD Type: CountryIDType
+ */
+class CountryIDType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/CurrencyCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/CurrencyCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/CurrencyCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\qdt;
+
+/**
+ * Class representing CurrencyCodeType
+ *
+ * XSD Type: CurrencyCodeType
+ */
+class CurrencyCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/DocumentCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/DocumentCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/DocumentCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\qdt;
+
+/**
+ * Class representing DocumentCodeType
+ *
+ * XSD Type: DocumentCodeType
+ */
+class DocumentCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\qdt;
+
+/**
+ * Class representing FormattedDateTimeType
+ *
+ * XSD Type: FormattedDateTimeType
+ */
+class FormattedDateTimeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType\DateTimeStringAType $dateTimeString
+     */
+    private $dateTimeString = null;
+
+    /**
+     * Gets as dateTimeString
+     *
+     * @return \horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType\DateTimeStringAType
+     */
+    public function getDateTimeString()
+    {
+        return $this->dateTimeString;
+    }
+
+    /**
+     * Sets a new dateTimeString
+     *
+     * @param  \horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType\DateTimeStringAType $dateTimeString
+     * @return self
+     */
+    public function setDateTimeString(\horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType\DateTimeStringAType $dateTimeString)
+    {
+        $this->dateTimeString = $dateTimeString;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType/DateTimeStringAType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType/DateTimeStringAType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/FormattedDateTimeType/DateTimeStringAType.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType;
+
+/**
+ * Class representing DateTimeStringAType
+ */
+class DateTimeStringAType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $format
+     */
+    private $format = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as format
+     *
+     * @return string
+     */
+    public function getFormat()
+    {
+        return $this->format;
+    }
+
+    /**
+     * Sets a new format
+     *
+     * @param  string $format
+     * @return self
+     */
+    public function setFormat($format)
+    {
+        $this->format = $format;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/PaymentMeansCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/PaymentMeansCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/PaymentMeansCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\qdt;
+
+/**
+ * Class representing PaymentMeansCodeType
+ *
+ * XSD Type: PaymentMeansCodeType
+ */
+class PaymentMeansCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxCategoryCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxCategoryCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxCategoryCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\qdt;
+
+/**
+ * Class representing TaxCategoryCodeType
+ *
+ * XSD Type: TaxCategoryCodeType
+ */
+class TaxCategoryCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxTypeCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxTypeCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/TaxTypeCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\qdt;
+
+/**
+ * Class representing TaxTypeCodeType
+ *
+ * XSD Type: TaxTypeCodeType
+ */
+class TaxTypeCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/TimeReferenceCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/TimeReferenceCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/qdt/TimeReferenceCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\qdt;
+
+/**
+ * Class representing TimeReferenceCodeType
+ *
+ * XSD Type: TimeReferenceCodeType
+ */
+class TimeReferenceCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/CreditorFinancialAccountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/CreditorFinancialAccountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/CreditorFinancialAccountType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing CreditorFinancialAccountType
+ *
+ * XSD Type: CreditorFinancialAccountType
+ */
+class CreditorFinancialAccountType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $iBANID
+     */
+    private $iBANID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $proprietaryID
+     */
+    private $proprietaryID = null;
+
+    /**
+     * Gets as iBANID
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getIBANID()
+    {
+        return $this->iBANID;
+    }
+
+    /**
+     * Sets a new iBANID
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $iBANID
+     * @return self
+     */
+    public function setIBANID(\horstoeko\zugferd\entities\basic\udt\IDType $iBANID)
+    {
+        $this->iBANID = $iBANID;
+        return $this;
+    }
+
+    /**
+     * Gets as proprietaryID
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getProprietaryID()
+    {
+        return $this->proprietaryID;
+    }
+
+    /**
+     * Sets a new proprietaryID
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $proprietaryID
+     * @return self
+     */
+    public function setProprietaryID(\horstoeko\zugferd\entities\basic\udt\IDType $proprietaryID)
+    {
+        $this->proprietaryID = $proprietaryID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/DebtorFinancialAccountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/DebtorFinancialAccountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/DebtorFinancialAccountType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing DebtorFinancialAccountType
+ *
+ * XSD Type: DebtorFinancialAccountType
+ */
+class DebtorFinancialAccountType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $iBANID
+     */
+    private $iBANID = null;
+
+    /**
+     * Gets as iBANID
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getIBANID()
+    {
+        return $this->iBANID;
+    }
+
+    /**
+     * Sets a new iBANID
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $iBANID
+     * @return self
+     */
+    public function setIBANID(\horstoeko\zugferd\entities\basic\udt\IDType $iBANID)
+    {
+        $this->iBANID = $iBANID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentContextParameterType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentContextParameterType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentContextParameterType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing DocumentContextParameterType
+ *
+ * XSD Type: DocumentContextParameterType
+ */
+class DocumentContextParameterType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\basic\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentLineDocumentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentLineDocumentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/DocumentLineDocumentType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing DocumentLineDocumentType
+ *
+ * XSD Type: DocumentLineDocumentType
+ */
+class DocumentLineDocumentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $lineID
+     */
+    private $lineID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\NoteType $includedNote
+     */
+    private $includedNote = null;
+
+    /**
+     * Gets as lineID
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getLineID()
+    {
+        return $this->lineID;
+    }
+
+    /**
+     * Sets a new lineID
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $lineID
+     * @return self
+     */
+    public function setLineID(\horstoeko\zugferd\entities\basic\udt\IDType $lineID)
+    {
+        $this->lineID = $lineID;
+        return $this;
+    }
+
+    /**
+     * Gets as includedNote
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\NoteType
+     */
+    public function getIncludedNote()
+    {
+        return $this->includedNote;
+    }
+
+    /**
+     * Sets a new includedNote
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\NoteType $includedNote
+     * @return self
+     */
+    public function setIncludedNote(\horstoeko\zugferd\entities\basic\ram\NoteType $includedNote)
+    {
+        $this->includedNote = $includedNote;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentContextType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentContextType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentContextType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing ExchangedDocumentContextType
+ *
+ * XSD Type: ExchangedDocumentContextType
+ */
+class ExchangedDocumentContextType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter
+     */
+    private $businessProcessSpecifiedDocumentContextParameter = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter
+     */
+    private $guidelineSpecifiedDocumentContextParameter = null;
+
+    /**
+     * Gets as businessProcessSpecifiedDocumentContextParameter
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\DocumentContextParameterType
+     */
+    public function getBusinessProcessSpecifiedDocumentContextParameter()
+    {
+        return $this->businessProcessSpecifiedDocumentContextParameter;
+    }
+
+    /**
+     * Sets a new businessProcessSpecifiedDocumentContextParameter
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter
+     * @return self
+     */
+    public function setBusinessProcessSpecifiedDocumentContextParameter(\horstoeko\zugferd\entities\basic\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter)
+    {
+        $this->businessProcessSpecifiedDocumentContextParameter = $businessProcessSpecifiedDocumentContextParameter;
+        return $this;
+    }
+
+    /**
+     * Gets as guidelineSpecifiedDocumentContextParameter
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\DocumentContextParameterType
+     */
+    public function getGuidelineSpecifiedDocumentContextParameter()
+    {
+        return $this->guidelineSpecifiedDocumentContextParameter;
+    }
+
+    /**
+     * Sets a new guidelineSpecifiedDocumentContextParameter
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter
+     * @return self
+     */
+    public function setGuidelineSpecifiedDocumentContextParameter(\horstoeko\zugferd\entities\basic\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter)
+    {
+        $this->guidelineSpecifiedDocumentContextParameter = $guidelineSpecifiedDocumentContextParameter;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/ExchangedDocumentType.php	(revision 8435)
@@ -0,0 +1,156 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing ExchangedDocumentType
+ *
+ * XSD Type: ExchangedDocumentType
+ */
+class ExchangedDocumentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\DateTimeType $issueDateTime
+     */
+    private $issueDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\NoteType[] $includedNote
+     */
+    private $includedNote = [
+        
+    ];
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\basic\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as issueDateTime
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\DateTimeType
+     */
+    public function getIssueDateTime()
+    {
+        return $this->issueDateTime;
+    }
+
+    /**
+     * Sets a new issueDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\DateTimeType $issueDateTime
+     * @return self
+     */
+    public function setIssueDateTime(\horstoeko\zugferd\entities\basic\udt\DateTimeType $issueDateTime)
+    {
+        $this->issueDateTime = $issueDateTime;
+        return $this;
+    }
+
+    /**
+     * Adds as includedNote
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basic\ram\NoteType $includedNote
+     */
+    public function addToIncludedNote(\horstoeko\zugferd\entities\basic\ram\NoteType $includedNote)
+    {
+        $this->includedNote[] = $includedNote;
+        return $this;
+    }
+
+    /**
+     * isset includedNote
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetIncludedNote($index)
+    {
+        return isset($this->includedNote[$index]);
+    }
+
+    /**
+     * unset includedNote
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetIncludedNote($index)
+    {
+        unset($this->includedNote[$index]);
+    }
+
+    /**
+     * Gets as includedNote
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\NoteType[]
+     */
+    public function getIncludedNote()
+    {
+        return $this->includedNote;
+    }
+
+    /**
+     * Sets a new includedNote
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\NoteType[] $includedNote
+     * @return self
+     */
+    public function setIncludedNote(array $includedNote)
+    {
+        $this->includedNote = $includedNote;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeAgreementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeAgreementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeAgreementType.php	(revision 8435)
@@ -0,0 +1,174 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing HeaderTradeAgreementType
+ *
+ * XSD Type: HeaderTradeAgreementType
+ */
+class HeaderTradeAgreementType
+{
+
+    /**
+     * @var string $buyerReference
+     */
+    private $buyerReference = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradePartyType $sellerTradeParty
+     */
+    private $sellerTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradePartyType $buyerTradeParty
+     */
+    private $buyerTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradePartyType $sellerTaxRepresentativeTradeParty
+     */
+    private $sellerTaxRepresentativeTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     */
+    private $buyerOrderReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $contractReferencedDocument
+     */
+    private $contractReferencedDocument = null;
+
+    /**
+     * Gets as buyerReference
+     *
+     * @return string
+     */
+    public function getBuyerReference()
+    {
+        return $this->buyerReference;
+    }
+
+    /**
+     * Sets a new buyerReference
+     *
+     * @param  string $buyerReference
+     * @return self
+     */
+    public function setBuyerReference($buyerReference)
+    {
+        $this->buyerReference = $buyerReference;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradePartyType
+     */
+    public function getSellerTradeParty()
+    {
+        return $this->sellerTradeParty;
+    }
+
+    /**
+     * Sets a new sellerTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradePartyType $sellerTradeParty
+     * @return self
+     */
+    public function setSellerTradeParty(\horstoeko\zugferd\entities\basic\ram\TradePartyType $sellerTradeParty)
+    {
+        $this->sellerTradeParty = $sellerTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradePartyType
+     */
+    public function getBuyerTradeParty()
+    {
+        return $this->buyerTradeParty;
+    }
+
+    /**
+     * Sets a new buyerTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradePartyType $buyerTradeParty
+     * @return self
+     */
+    public function setBuyerTradeParty(\horstoeko\zugferd\entities\basic\ram\TradePartyType $buyerTradeParty)
+    {
+        $this->buyerTradeParty = $buyerTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerTaxRepresentativeTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradePartyType
+     */
+    public function getSellerTaxRepresentativeTradeParty()
+    {
+        return $this->sellerTaxRepresentativeTradeParty;
+    }
+
+    /**
+     * Sets a new sellerTaxRepresentativeTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradePartyType $sellerTaxRepresentativeTradeParty
+     * @return self
+     */
+    public function setSellerTaxRepresentativeTradeParty(\horstoeko\zugferd\entities\basic\ram\TradePartyType $sellerTaxRepresentativeTradeParty)
+    {
+        $this->sellerTaxRepresentativeTradeParty = $sellerTaxRepresentativeTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerOrderReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType
+     */
+    public function getBuyerOrderReferencedDocument()
+    {
+        return $this->buyerOrderReferencedDocument;
+    }
+
+    /**
+     * Sets a new buyerOrderReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     * @return self
+     */
+    public function setBuyerOrderReferencedDocument(\horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $buyerOrderReferencedDocument)
+    {
+        $this->buyerOrderReferencedDocument = $buyerOrderReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as contractReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType
+     */
+    public function getContractReferencedDocument()
+    {
+        return $this->contractReferencedDocument;
+    }
+
+    /**
+     * Sets a new contractReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $contractReferencedDocument
+     * @return self
+     */
+    public function setContractReferencedDocument(\horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $contractReferencedDocument)
+    {
+        $this->contractReferencedDocument = $contractReferencedDocument;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeDeliveryType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeDeliveryType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeDeliveryType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing HeaderTradeDeliveryType
+ *
+ * XSD Type: HeaderTradeDeliveryType
+ */
+class HeaderTradeDeliveryType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradePartyType $shipToTradeParty
+     */
+    private $shipToTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\SupplyChainEventType $actualDeliverySupplyChainEvent
+     */
+    private $actualDeliverySupplyChainEvent = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $despatchAdviceReferencedDocument
+     */
+    private $despatchAdviceReferencedDocument = null;
+
+    /**
+     * Gets as shipToTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradePartyType
+     */
+    public function getShipToTradeParty()
+    {
+        return $this->shipToTradeParty;
+    }
+
+    /**
+     * Sets a new shipToTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradePartyType $shipToTradeParty
+     * @return self
+     */
+    public function setShipToTradeParty(\horstoeko\zugferd\entities\basic\ram\TradePartyType $shipToTradeParty)
+    {
+        $this->shipToTradeParty = $shipToTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as actualDeliverySupplyChainEvent
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\SupplyChainEventType
+     */
+    public function getActualDeliverySupplyChainEvent()
+    {
+        return $this->actualDeliverySupplyChainEvent;
+    }
+
+    /**
+     * Sets a new actualDeliverySupplyChainEvent
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\SupplyChainEventType $actualDeliverySupplyChainEvent
+     * @return self
+     */
+    public function setActualDeliverySupplyChainEvent(\horstoeko\zugferd\entities\basic\ram\SupplyChainEventType $actualDeliverySupplyChainEvent)
+    {
+        $this->actualDeliverySupplyChainEvent = $actualDeliverySupplyChainEvent;
+        return $this;
+    }
+
+    /**
+     * Gets as despatchAdviceReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType
+     */
+    public function getDespatchAdviceReferencedDocument()
+    {
+        return $this->despatchAdviceReferencedDocument;
+    }
+
+    /**
+     * Sets a new despatchAdviceReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $despatchAdviceReferencedDocument
+     * @return self
+     */
+    public function setDespatchAdviceReferencedDocument(\horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $despatchAdviceReferencedDocument)
+    {
+        $this->despatchAdviceReferencedDocument = $despatchAdviceReferencedDocument;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeSettlementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeSettlementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/HeaderTradeSettlementType.php	(revision 8435)
@@ -0,0 +1,435 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing HeaderTradeSettlementType
+ *
+ * XSD Type: HeaderTradeSettlementType
+ */
+class HeaderTradeSettlementType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $creditorReferenceID
+     */
+    private $creditorReferenceID = null;
+
+    /**
+     * @var string $paymentReference
+     */
+    private $paymentReference = null;
+
+    /**
+     * @var string $taxCurrencyCode
+     */
+    private $taxCurrencyCode = null;
+
+    /**
+     * @var string $invoiceCurrencyCode
+     */
+    private $invoiceCurrencyCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradePartyType $payeeTradeParty
+     */
+    private $payeeTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans
+     */
+    private $specifiedTradeSettlementPaymentMeans = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradeTaxType[] $applicableTradeTax
+     */
+    private $applicableTradeTax = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     */
+    private $billingSpecifiedPeriod = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     */
+    private $specifiedTradeAllowanceCharge = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradePaymentTermsType $specifiedTradePaymentTerms
+     */
+    private $specifiedTradePaymentTerms = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation
+     */
+    private $specifiedTradeSettlementHeaderMonetarySummation = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $invoiceReferencedDocument
+     */
+    private $invoiceReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount
+     */
+    private $receivableSpecifiedTradeAccountingAccount = null;
+
+    /**
+     * Gets as creditorReferenceID
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getCreditorReferenceID()
+    {
+        return $this->creditorReferenceID;
+    }
+
+    /**
+     * Sets a new creditorReferenceID
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $creditorReferenceID
+     * @return self
+     */
+    public function setCreditorReferenceID(\horstoeko\zugferd\entities\basic\udt\IDType $creditorReferenceID)
+    {
+        $this->creditorReferenceID = $creditorReferenceID;
+        return $this;
+    }
+
+    /**
+     * Gets as paymentReference
+     *
+     * @return string
+     */
+    public function getPaymentReference()
+    {
+        return $this->paymentReference;
+    }
+
+    /**
+     * Sets a new paymentReference
+     *
+     * @param  string $paymentReference
+     * @return self
+     */
+    public function setPaymentReference($paymentReference)
+    {
+        $this->paymentReference = $paymentReference;
+        return $this;
+    }
+
+    /**
+     * Gets as taxCurrencyCode
+     *
+     * @return string
+     */
+    public function getTaxCurrencyCode()
+    {
+        return $this->taxCurrencyCode;
+    }
+
+    /**
+     * Sets a new taxCurrencyCode
+     *
+     * @param  string $taxCurrencyCode
+     * @return self
+     */
+    public function setTaxCurrencyCode($taxCurrencyCode)
+    {
+        $this->taxCurrencyCode = $taxCurrencyCode;
+        return $this;
+    }
+
+    /**
+     * Gets as invoiceCurrencyCode
+     *
+     * @return string
+     */
+    public function getInvoiceCurrencyCode()
+    {
+        return $this->invoiceCurrencyCode;
+    }
+
+    /**
+     * Sets a new invoiceCurrencyCode
+     *
+     * @param  string $invoiceCurrencyCode
+     * @return self
+     */
+    public function setInvoiceCurrencyCode($invoiceCurrencyCode)
+    {
+        $this->invoiceCurrencyCode = $invoiceCurrencyCode;
+        return $this;
+    }
+
+    /**
+     * Gets as payeeTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradePartyType
+     */
+    public function getPayeeTradeParty()
+    {
+        return $this->payeeTradeParty;
+    }
+
+    /**
+     * Sets a new payeeTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradePartyType $payeeTradeParty
+     * @return self
+     */
+    public function setPayeeTradeParty(\horstoeko\zugferd\entities\basic\ram\TradePartyType $payeeTradeParty)
+    {
+        $this->payeeTradeParty = $payeeTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeSettlementPaymentMeans
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradeSettlementPaymentMeansType
+     */
+    public function getSpecifiedTradeSettlementPaymentMeans()
+    {
+        return $this->specifiedTradeSettlementPaymentMeans;
+    }
+
+    /**
+     * Sets a new specifiedTradeSettlementPaymentMeans
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans
+     * @return self
+     */
+    public function setSpecifiedTradeSettlementPaymentMeans(\horstoeko\zugferd\entities\basic\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans)
+    {
+        $this->specifiedTradeSettlementPaymentMeans = $specifiedTradeSettlementPaymentMeans;
+        return $this;
+    }
+
+    /**
+     * Adds as applicableTradeTax
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeTaxType $applicableTradeTax
+     */
+    public function addToApplicableTradeTax(\horstoeko\zugferd\entities\basic\ram\TradeTaxType $applicableTradeTax)
+    {
+        $this->applicableTradeTax[] = $applicableTradeTax;
+        return $this;
+    }
+
+    /**
+     * isset applicableTradeTax
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetApplicableTradeTax($index)
+    {
+        return isset($this->applicableTradeTax[$index]);
+    }
+
+    /**
+     * unset applicableTradeTax
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetApplicableTradeTax($index)
+    {
+        unset($this->applicableTradeTax[$index]);
+    }
+
+    /**
+     * Gets as applicableTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradeTaxType[]
+     */
+    public function getApplicableTradeTax()
+    {
+        return $this->applicableTradeTax;
+    }
+
+    /**
+     * Sets a new applicableTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeTaxType[] $applicableTradeTax
+     * @return self
+     */
+    public function setApplicableTradeTax(array $applicableTradeTax)
+    {
+        $this->applicableTradeTax = $applicableTradeTax;
+        return $this;
+    }
+
+    /**
+     * Gets as billingSpecifiedPeriod
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\SpecifiedPeriodType
+     */
+    public function getBillingSpecifiedPeriod()
+    {
+        return $this->billingSpecifiedPeriod;
+    }
+
+    /**
+     * Sets a new billingSpecifiedPeriod
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     * @return self
+     */
+    public function setBillingSpecifiedPeriod(\horstoeko\zugferd\entities\basic\ram\SpecifiedPeriodType $billingSpecifiedPeriod)
+    {
+        $this->billingSpecifiedPeriod = $billingSpecifiedPeriod;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTradeAllowanceCharge
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge
+     */
+    public function addToSpecifiedTradeAllowanceCharge(\horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge[] = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTradeAllowanceCharge($index)
+    {
+        return isset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * unset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTradeAllowanceCharge($index)
+    {
+        unset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * Gets as specifiedTradeAllowanceCharge
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType[]
+     */
+    public function getSpecifiedTradeAllowanceCharge()
+    {
+        return $this->specifiedTradeAllowanceCharge;
+    }
+
+    /**
+     * Sets a new specifiedTradeAllowanceCharge
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     * @return self
+     */
+    public function setSpecifiedTradeAllowanceCharge(array $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradePaymentTerms
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradePaymentTermsType
+     */
+    public function getSpecifiedTradePaymentTerms()
+    {
+        return $this->specifiedTradePaymentTerms;
+    }
+
+    /**
+     * Sets a new specifiedTradePaymentTerms
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradePaymentTermsType $specifiedTradePaymentTerms
+     * @return self
+     */
+    public function setSpecifiedTradePaymentTerms(\horstoeko\zugferd\entities\basic\ram\TradePaymentTermsType $specifiedTradePaymentTerms)
+    {
+        $this->specifiedTradePaymentTerms = $specifiedTradePaymentTerms;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeSettlementHeaderMonetarySummation
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradeSettlementHeaderMonetarySummationType
+     */
+    public function getSpecifiedTradeSettlementHeaderMonetarySummation()
+    {
+        return $this->specifiedTradeSettlementHeaderMonetarySummation;
+    }
+
+    /**
+     * Sets a new specifiedTradeSettlementHeaderMonetarySummation
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation
+     * @return self
+     */
+    public function setSpecifiedTradeSettlementHeaderMonetarySummation(\horstoeko\zugferd\entities\basic\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation)
+    {
+        $this->specifiedTradeSettlementHeaderMonetarySummation = $specifiedTradeSettlementHeaderMonetarySummation;
+        return $this;
+    }
+
+    /**
+     * Gets as invoiceReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType
+     */
+    public function getInvoiceReferencedDocument()
+    {
+        return $this->invoiceReferencedDocument;
+    }
+
+    /**
+     * Sets a new invoiceReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $invoiceReferencedDocument
+     * @return self
+     */
+    public function setInvoiceReferencedDocument(\horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType $invoiceReferencedDocument)
+    {
+        $this->invoiceReferencedDocument = $invoiceReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as receivableSpecifiedTradeAccountingAccount
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradeAccountingAccountType
+     */
+    public function getReceivableSpecifiedTradeAccountingAccount()
+    {
+        return $this->receivableSpecifiedTradeAccountingAccount;
+    }
+
+    /**
+     * Sets a new receivableSpecifiedTradeAccountingAccount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount
+     * @return self
+     */
+    public function setReceivableSpecifiedTradeAccountingAccount(\horstoeko\zugferd\entities\basic\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount)
+    {
+        $this->receivableSpecifiedTradeAccountingAccount = $receivableSpecifiedTradeAccountingAccount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/LegalOrganizationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/LegalOrganizationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/LegalOrganizationType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing LegalOrganizationType
+ *
+ * XSD Type: LegalOrganizationType
+ */
+class LegalOrganizationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $tradingBusinessName
+     */
+    private $tradingBusinessName = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\basic\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as tradingBusinessName
+     *
+     * @return string
+     */
+    public function getTradingBusinessName()
+    {
+        return $this->tradingBusinessName;
+    }
+
+    /**
+     * Sets a new tradingBusinessName
+     *
+     * @param  string $tradingBusinessName
+     * @return self
+     */
+    public function setTradingBusinessName($tradingBusinessName)
+    {
+        $this->tradingBusinessName = $tradingBusinessName;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeAgreementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeAgreementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeAgreementType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing LineTradeAgreementType
+ *
+ * XSD Type: LineTradeAgreementType
+ */
+class LineTradeAgreementType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradePriceType $grossPriceProductTradePrice
+     */
+    private $grossPriceProductTradePrice = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradePriceType $netPriceProductTradePrice
+     */
+    private $netPriceProductTradePrice = null;
+
+    /**
+     * Gets as grossPriceProductTradePrice
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradePriceType
+     */
+    public function getGrossPriceProductTradePrice()
+    {
+        return $this->grossPriceProductTradePrice;
+    }
+
+    /**
+     * Sets a new grossPriceProductTradePrice
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradePriceType $grossPriceProductTradePrice
+     * @return self
+     */
+    public function setGrossPriceProductTradePrice(\horstoeko\zugferd\entities\basic\ram\TradePriceType $grossPriceProductTradePrice)
+    {
+        $this->grossPriceProductTradePrice = $grossPriceProductTradePrice;
+        return $this;
+    }
+
+    /**
+     * Gets as netPriceProductTradePrice
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradePriceType
+     */
+    public function getNetPriceProductTradePrice()
+    {
+        return $this->netPriceProductTradePrice;
+    }
+
+    /**
+     * Sets a new netPriceProductTradePrice
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradePriceType $netPriceProductTradePrice
+     * @return self
+     */
+    public function setNetPriceProductTradePrice(\horstoeko\zugferd\entities\basic\ram\TradePriceType $netPriceProductTradePrice)
+    {
+        $this->netPriceProductTradePrice = $netPriceProductTradePrice;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeDeliveryType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeDeliveryType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeDeliveryType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing LineTradeDeliveryType
+ *
+ * XSD Type: LineTradeDeliveryType
+ */
+class LineTradeDeliveryType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\QuantityType $billedQuantity
+     */
+    private $billedQuantity = null;
+
+    /**
+     * Gets as billedQuantity
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\QuantityType
+     */
+    public function getBilledQuantity()
+    {
+        return $this->billedQuantity;
+    }
+
+    /**
+     * Sets a new billedQuantity
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\QuantityType $billedQuantity
+     * @return self
+     */
+    public function setBilledQuantity(\horstoeko\zugferd\entities\basic\udt\QuantityType $billedQuantity)
+    {
+        $this->billedQuantity = $billedQuantity;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeSettlementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeSettlementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/LineTradeSettlementType.php	(revision 8435)
@@ -0,0 +1,156 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing LineTradeSettlementType
+ *
+ * XSD Type: LineTradeSettlementType
+ */
+class LineTradeSettlementType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradeTaxType $applicableTradeTax
+     */
+    private $applicableTradeTax = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     */
+    private $billingSpecifiedPeriod = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     */
+    private $specifiedTradeAllowanceCharge = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradeSettlementLineMonetarySummationType $specifiedTradeSettlementLineMonetarySummation
+     */
+    private $specifiedTradeSettlementLineMonetarySummation = null;
+
+    /**
+     * Gets as applicableTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradeTaxType
+     */
+    public function getApplicableTradeTax()
+    {
+        return $this->applicableTradeTax;
+    }
+
+    /**
+     * Sets a new applicableTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeTaxType $applicableTradeTax
+     * @return self
+     */
+    public function setApplicableTradeTax(\horstoeko\zugferd\entities\basic\ram\TradeTaxType $applicableTradeTax)
+    {
+        $this->applicableTradeTax = $applicableTradeTax;
+        return $this;
+    }
+
+    /**
+     * Gets as billingSpecifiedPeriod
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\SpecifiedPeriodType
+     */
+    public function getBillingSpecifiedPeriod()
+    {
+        return $this->billingSpecifiedPeriod;
+    }
+
+    /**
+     * Sets a new billingSpecifiedPeriod
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     * @return self
+     */
+    public function setBillingSpecifiedPeriod(\horstoeko\zugferd\entities\basic\ram\SpecifiedPeriodType $billingSpecifiedPeriod)
+    {
+        $this->billingSpecifiedPeriod = $billingSpecifiedPeriod;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTradeAllowanceCharge
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge
+     */
+    public function addToSpecifiedTradeAllowanceCharge(\horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge[] = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTradeAllowanceCharge($index)
+    {
+        return isset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * unset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTradeAllowanceCharge($index)
+    {
+        unset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * Gets as specifiedTradeAllowanceCharge
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType[]
+     */
+    public function getSpecifiedTradeAllowanceCharge()
+    {
+        return $this->specifiedTradeAllowanceCharge;
+    }
+
+    /**
+     * Sets a new specifiedTradeAllowanceCharge
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     * @return self
+     */
+    public function setSpecifiedTradeAllowanceCharge(array $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeSettlementLineMonetarySummation
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradeSettlementLineMonetarySummationType
+     */
+    public function getSpecifiedTradeSettlementLineMonetarySummation()
+    {
+        return $this->specifiedTradeSettlementLineMonetarySummation;
+    }
+
+    /**
+     * Sets a new specifiedTradeSettlementLineMonetarySummation
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeSettlementLineMonetarySummationType $specifiedTradeSettlementLineMonetarySummation
+     * @return self
+     */
+    public function setSpecifiedTradeSettlementLineMonetarySummation(\horstoeko\zugferd\entities\basic\ram\TradeSettlementLineMonetarySummationType $specifiedTradeSettlementLineMonetarySummation)
+    {
+        $this->specifiedTradeSettlementLineMonetarySummation = $specifiedTradeSettlementLineMonetarySummation;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/NoteType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/NoteType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/NoteType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing NoteType
+ *
+ * XSD Type: NoteType
+ */
+class NoteType
+{
+
+    /**
+     * @var string $content
+     */
+    private $content = null;
+
+    /**
+     * @var string $subjectCode
+     */
+    private $subjectCode = null;
+
+    /**
+     * Gets as content
+     *
+     * @return string
+     */
+    public function getContent()
+    {
+        return $this->content;
+    }
+
+    /**
+     * Sets a new content
+     *
+     * @param  string $content
+     * @return self
+     */
+    public function setContent($content)
+    {
+        $this->content = $content;
+        return $this;
+    }
+
+    /**
+     * Gets as subjectCode
+     *
+     * @return string
+     */
+    public function getSubjectCode()
+    {
+        return $this->subjectCode;
+    }
+
+    /**
+     * Sets a new subjectCode
+     *
+     * @param  string $subjectCode
+     * @return self
+     */
+    public function setSubjectCode($subjectCode)
+    {
+        $this->subjectCode = $subjectCode;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/ReferencedDocumentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/ReferencedDocumentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/ReferencedDocumentType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing ReferencedDocumentType
+ *
+ * XSD Type: ReferencedDocumentType
+ */
+class ReferencedDocumentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $issuerAssignedID
+     */
+    private $issuerAssignedID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType $formattedIssueDateTime
+     */
+    private $formattedIssueDateTime = null;
+
+    /**
+     * Gets as issuerAssignedID
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getIssuerAssignedID()
+    {
+        return $this->issuerAssignedID;
+    }
+
+    /**
+     * Sets a new issuerAssignedID
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $issuerAssignedID
+     * @return self
+     */
+    public function setIssuerAssignedID(\horstoeko\zugferd\entities\basic\udt\IDType $issuerAssignedID)
+    {
+        $this->issuerAssignedID = $issuerAssignedID;
+        return $this;
+    }
+
+    /**
+     * Gets as formattedIssueDateTime
+     *
+     * @return \horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType
+     */
+    public function getFormattedIssueDateTime()
+    {
+        return $this->formattedIssueDateTime;
+    }
+
+    /**
+     * Sets a new formattedIssueDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType $formattedIssueDateTime
+     * @return self
+     */
+    public function setFormattedIssueDateTime(\horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType $formattedIssueDateTime)
+    {
+        $this->formattedIssueDateTime = $formattedIssueDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/SpecifiedPeriodType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/SpecifiedPeriodType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/SpecifiedPeriodType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing SpecifiedPeriodType
+ *
+ * XSD Type: SpecifiedPeriodType
+ */
+class SpecifiedPeriodType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\DateTimeType $startDateTime
+     */
+    private $startDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\DateTimeType $endDateTime
+     */
+    private $endDateTime = null;
+
+    /**
+     * Gets as startDateTime
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\DateTimeType
+     */
+    public function getStartDateTime()
+    {
+        return $this->startDateTime;
+    }
+
+    /**
+     * Sets a new startDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\DateTimeType $startDateTime
+     * @return self
+     */
+    public function setStartDateTime(\horstoeko\zugferd\entities\basic\udt\DateTimeType $startDateTime)
+    {
+        $this->startDateTime = $startDateTime;
+        return $this;
+    }
+
+    /**
+     * Gets as endDateTime
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\DateTimeType
+     */
+    public function getEndDateTime()
+    {
+        return $this->endDateTime;
+    }
+
+    /**
+     * Sets a new endDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\DateTimeType $endDateTime
+     * @return self
+     */
+    public function setEndDateTime(\horstoeko\zugferd\entities\basic\udt\DateTimeType $endDateTime)
+    {
+        $this->endDateTime = $endDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainEventType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainEventType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainEventType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing SupplyChainEventType
+ *
+ * XSD Type: SupplyChainEventType
+ */
+class SupplyChainEventType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\DateTimeType $occurrenceDateTime
+     */
+    private $occurrenceDateTime = null;
+
+    /**
+     * Gets as occurrenceDateTime
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\DateTimeType
+     */
+    public function getOccurrenceDateTime()
+    {
+        return $this->occurrenceDateTime;
+    }
+
+    /**
+     * Sets a new occurrenceDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\DateTimeType $occurrenceDateTime
+     * @return self
+     */
+    public function setOccurrenceDateTime(\horstoeko\zugferd\entities\basic\udt\DateTimeType $occurrenceDateTime)
+    {
+        $this->occurrenceDateTime = $occurrenceDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeLineItemType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeLineItemType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeLineItemType.php	(revision 8435)
@@ -0,0 +1,147 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing SupplyChainTradeLineItemType
+ *
+ * XSD Type: SupplyChainTradeLineItemType
+ */
+class SupplyChainTradeLineItemType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\DocumentLineDocumentType $associatedDocumentLineDocument
+     */
+    private $associatedDocumentLineDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradeProductType $specifiedTradeProduct
+     */
+    private $specifiedTradeProduct = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\LineTradeAgreementType $specifiedLineTradeAgreement
+     */
+    private $specifiedLineTradeAgreement = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\LineTradeDeliveryType $specifiedLineTradeDelivery
+     */
+    private $specifiedLineTradeDelivery = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\LineTradeSettlementType $specifiedLineTradeSettlement
+     */
+    private $specifiedLineTradeSettlement = null;
+
+    /**
+     * Gets as associatedDocumentLineDocument
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\DocumentLineDocumentType
+     */
+    public function getAssociatedDocumentLineDocument()
+    {
+        return $this->associatedDocumentLineDocument;
+    }
+
+    /**
+     * Sets a new associatedDocumentLineDocument
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\DocumentLineDocumentType $associatedDocumentLineDocument
+     * @return self
+     */
+    public function setAssociatedDocumentLineDocument(\horstoeko\zugferd\entities\basic\ram\DocumentLineDocumentType $associatedDocumentLineDocument)
+    {
+        $this->associatedDocumentLineDocument = $associatedDocumentLineDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeProduct
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradeProductType
+     */
+    public function getSpecifiedTradeProduct()
+    {
+        return $this->specifiedTradeProduct;
+    }
+
+    /**
+     * Sets a new specifiedTradeProduct
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeProductType $specifiedTradeProduct
+     * @return self
+     */
+    public function setSpecifiedTradeProduct(\horstoeko\zugferd\entities\basic\ram\TradeProductType $specifiedTradeProduct)
+    {
+        $this->specifiedTradeProduct = $specifiedTradeProduct;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLineTradeAgreement
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\LineTradeAgreementType
+     */
+    public function getSpecifiedLineTradeAgreement()
+    {
+        return $this->specifiedLineTradeAgreement;
+    }
+
+    /**
+     * Sets a new specifiedLineTradeAgreement
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\LineTradeAgreementType $specifiedLineTradeAgreement
+     * @return self
+     */
+    public function setSpecifiedLineTradeAgreement(\horstoeko\zugferd\entities\basic\ram\LineTradeAgreementType $specifiedLineTradeAgreement)
+    {
+        $this->specifiedLineTradeAgreement = $specifiedLineTradeAgreement;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLineTradeDelivery
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\LineTradeDeliveryType
+     */
+    public function getSpecifiedLineTradeDelivery()
+    {
+        return $this->specifiedLineTradeDelivery;
+    }
+
+    /**
+     * Sets a new specifiedLineTradeDelivery
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\LineTradeDeliveryType $specifiedLineTradeDelivery
+     * @return self
+     */
+    public function setSpecifiedLineTradeDelivery(\horstoeko\zugferd\entities\basic\ram\LineTradeDeliveryType $specifiedLineTradeDelivery)
+    {
+        $this->specifiedLineTradeDelivery = $specifiedLineTradeDelivery;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLineTradeSettlement
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\LineTradeSettlementType
+     */
+    public function getSpecifiedLineTradeSettlement()
+    {
+        return $this->specifiedLineTradeSettlement;
+    }
+
+    /**
+     * Sets a new specifiedLineTradeSettlement
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\LineTradeSettlementType $specifiedLineTradeSettlement
+     * @return self
+     */
+    public function setSpecifiedLineTradeSettlement(\horstoeko\zugferd\entities\basic\ram\LineTradeSettlementType $specifiedLineTradeSettlement)
+    {
+        $this->specifiedLineTradeSettlement = $specifiedLineTradeSettlement;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeTransactionType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeTransactionType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/SupplyChainTradeTransactionType.php	(revision 8435)
@@ -0,0 +1,156 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing SupplyChainTradeTransactionType
+ *
+ * XSD Type: SupplyChainTradeTransactionType
+ */
+class SupplyChainTradeTransactionType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\SupplyChainTradeLineItemType[] $includedSupplyChainTradeLineItem
+     */
+    private $includedSupplyChainTradeLineItem = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement
+     */
+    private $applicableHeaderTradeAgreement = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery
+     */
+    private $applicableHeaderTradeDelivery = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement
+     */
+    private $applicableHeaderTradeSettlement = null;
+
+    /**
+     * Adds as includedSupplyChainTradeLineItem
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basic\ram\SupplyChainTradeLineItemType $includedSupplyChainTradeLineItem
+     */
+    public function addToIncludedSupplyChainTradeLineItem(\horstoeko\zugferd\entities\basic\ram\SupplyChainTradeLineItemType $includedSupplyChainTradeLineItem)
+    {
+        $this->includedSupplyChainTradeLineItem[] = $includedSupplyChainTradeLineItem;
+        return $this;
+    }
+
+    /**
+     * isset includedSupplyChainTradeLineItem
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetIncludedSupplyChainTradeLineItem($index)
+    {
+        return isset($this->includedSupplyChainTradeLineItem[$index]);
+    }
+
+    /**
+     * unset includedSupplyChainTradeLineItem
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetIncludedSupplyChainTradeLineItem($index)
+    {
+        unset($this->includedSupplyChainTradeLineItem[$index]);
+    }
+
+    /**
+     * Gets as includedSupplyChainTradeLineItem
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\SupplyChainTradeLineItemType[]
+     */
+    public function getIncludedSupplyChainTradeLineItem()
+    {
+        return $this->includedSupplyChainTradeLineItem;
+    }
+
+    /**
+     * Sets a new includedSupplyChainTradeLineItem
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\SupplyChainTradeLineItemType[] $includedSupplyChainTradeLineItem
+     * @return self
+     */
+    public function setIncludedSupplyChainTradeLineItem(array $includedSupplyChainTradeLineItem)
+    {
+        $this->includedSupplyChainTradeLineItem = $includedSupplyChainTradeLineItem;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableHeaderTradeAgreement
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\HeaderTradeAgreementType
+     */
+    public function getApplicableHeaderTradeAgreement()
+    {
+        return $this->applicableHeaderTradeAgreement;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeAgreement
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement
+     * @return self
+     */
+    public function setApplicableHeaderTradeAgreement(\horstoeko\zugferd\entities\basic\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement)
+    {
+        $this->applicableHeaderTradeAgreement = $applicableHeaderTradeAgreement;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableHeaderTradeDelivery
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\HeaderTradeDeliveryType
+     */
+    public function getApplicableHeaderTradeDelivery()
+    {
+        return $this->applicableHeaderTradeDelivery;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeDelivery
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery
+     * @return self
+     */
+    public function setApplicableHeaderTradeDelivery(\horstoeko\zugferd\entities\basic\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery)
+    {
+        $this->applicableHeaderTradeDelivery = $applicableHeaderTradeDelivery;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableHeaderTradeSettlement
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\HeaderTradeSettlementType
+     */
+    public function getApplicableHeaderTradeSettlement()
+    {
+        return $this->applicableHeaderTradeSettlement;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeSettlement
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement
+     * @return self
+     */
+    public function setApplicableHeaderTradeSettlement(\horstoeko\zugferd\entities\basic\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement)
+    {
+        $this->applicableHeaderTradeSettlement = $applicableHeaderTradeSettlement;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TaxRegistrationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TaxRegistrationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TaxRegistrationType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing TaxRegistrationType
+ *
+ * XSD Type: TaxRegistrationType
+ */
+class TaxRegistrationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\basic\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAccountingAccountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAccountingAccountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAccountingAccountType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing TradeAccountingAccountType
+ *
+ * XSD Type: TradeAccountingAccountType
+ */
+class TradeAccountingAccountType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\basic\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAddressType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAddressType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAddressType.php	(revision 8435)
@@ -0,0 +1,201 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing TradeAddressType
+ *
+ * XSD Type: TradeAddressType
+ */
+class TradeAddressType
+{
+
+    /**
+     * @var string $postcodeCode
+     */
+    private $postcodeCode = null;
+
+    /**
+     * @var string $lineOne
+     */
+    private $lineOne = null;
+
+    /**
+     * @var string $lineTwo
+     */
+    private $lineTwo = null;
+
+    /**
+     * @var string $lineThree
+     */
+    private $lineThree = null;
+
+    /**
+     * @var string $cityName
+     */
+    private $cityName = null;
+
+    /**
+     * @var string $countryID
+     */
+    private $countryID = null;
+
+    /**
+     * @var string $countrySubDivisionName
+     */
+    private $countrySubDivisionName = null;
+
+    /**
+     * Gets as postcodeCode
+     *
+     * @return string
+     */
+    public function getPostcodeCode()
+    {
+        return $this->postcodeCode;
+    }
+
+    /**
+     * Sets a new postcodeCode
+     *
+     * @param  string $postcodeCode
+     * @return self
+     */
+    public function setPostcodeCode($postcodeCode)
+    {
+        $this->postcodeCode = $postcodeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as lineOne
+     *
+     * @return string
+     */
+    public function getLineOne()
+    {
+        return $this->lineOne;
+    }
+
+    /**
+     * Sets a new lineOne
+     *
+     * @param  string $lineOne
+     * @return self
+     */
+    public function setLineOne($lineOne)
+    {
+        $this->lineOne = $lineOne;
+        return $this;
+    }
+
+    /**
+     * Gets as lineTwo
+     *
+     * @return string
+     */
+    public function getLineTwo()
+    {
+        return $this->lineTwo;
+    }
+
+    /**
+     * Sets a new lineTwo
+     *
+     * @param  string $lineTwo
+     * @return self
+     */
+    public function setLineTwo($lineTwo)
+    {
+        $this->lineTwo = $lineTwo;
+        return $this;
+    }
+
+    /**
+     * Gets as lineThree
+     *
+     * @return string
+     */
+    public function getLineThree()
+    {
+        return $this->lineThree;
+    }
+
+    /**
+     * Sets a new lineThree
+     *
+     * @param  string $lineThree
+     * @return self
+     */
+    public function setLineThree($lineThree)
+    {
+        $this->lineThree = $lineThree;
+        return $this;
+    }
+
+    /**
+     * Gets as cityName
+     *
+     * @return string
+     */
+    public function getCityName()
+    {
+        return $this->cityName;
+    }
+
+    /**
+     * Sets a new cityName
+     *
+     * @param  string $cityName
+     * @return self
+     */
+    public function setCityName($cityName)
+    {
+        $this->cityName = $cityName;
+        return $this;
+    }
+
+    /**
+     * Gets as countryID
+     *
+     * @return string
+     */
+    public function getCountryID()
+    {
+        return $this->countryID;
+    }
+
+    /**
+     * Sets a new countryID
+     *
+     * @param  string $countryID
+     * @return self
+     */
+    public function setCountryID($countryID)
+    {
+        $this->countryID = $countryID;
+        return $this;
+    }
+
+    /**
+     * Gets as countrySubDivisionName
+     *
+     * @return string
+     */
+    public function getCountrySubDivisionName()
+    {
+        return $this->countrySubDivisionName;
+    }
+
+    /**
+     * Sets a new countrySubDivisionName
+     *
+     * @param  string $countrySubDivisionName
+     * @return self
+     */
+    public function setCountrySubDivisionName($countrySubDivisionName)
+    {
+        $this->countrySubDivisionName = $countrySubDivisionName;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAllowanceChargeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAllowanceChargeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeAllowanceChargeType.php	(revision 8435)
@@ -0,0 +1,201 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing TradeAllowanceChargeType
+ *
+ * XSD Type: TradeAllowanceChargeType
+ */
+class TradeAllowanceChargeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IndicatorType $chargeIndicator
+     */
+    private $chargeIndicator = null;
+
+    /**
+     * @var float $calculationPercent
+     */
+    private $calculationPercent = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType $basisAmount
+     */
+    private $basisAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType $actualAmount
+     */
+    private $actualAmount = null;
+
+    /**
+     * @var string $reasonCode
+     */
+    private $reasonCode = null;
+
+    /**
+     * @var string $reason
+     */
+    private $reason = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradeTaxType $categoryTradeTax
+     */
+    private $categoryTradeTax = null;
+
+    /**
+     * Gets as chargeIndicator
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IndicatorType
+     */
+    public function getChargeIndicator()
+    {
+        return $this->chargeIndicator;
+    }
+
+    /**
+     * Sets a new chargeIndicator
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IndicatorType $chargeIndicator
+     * @return self
+     */
+    public function setChargeIndicator(\horstoeko\zugferd\entities\basic\udt\IndicatorType $chargeIndicator)
+    {
+        $this->chargeIndicator = $chargeIndicator;
+        return $this;
+    }
+
+    /**
+     * Gets as calculationPercent
+     *
+     * @return float
+     */
+    public function getCalculationPercent()
+    {
+        return $this->calculationPercent;
+    }
+
+    /**
+     * Sets a new calculationPercent
+     *
+     * @param  float $calculationPercent
+     * @return self
+     */
+    public function setCalculationPercent($calculationPercent)
+    {
+        $this->calculationPercent = $calculationPercent;
+        return $this;
+    }
+
+    /**
+     * Gets as basisAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType
+     */
+    public function getBasisAmount()
+    {
+        return $this->basisAmount;
+    }
+
+    /**
+     * Sets a new basisAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $basisAmount
+     * @return self
+     */
+    public function setBasisAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $basisAmount)
+    {
+        $this->basisAmount = $basisAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as actualAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType
+     */
+    public function getActualAmount()
+    {
+        return $this->actualAmount;
+    }
+
+    /**
+     * Sets a new actualAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $actualAmount
+     * @return self
+     */
+    public function setActualAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $actualAmount)
+    {
+        $this->actualAmount = $actualAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as reasonCode
+     *
+     * @return string
+     */
+    public function getReasonCode()
+    {
+        return $this->reasonCode;
+    }
+
+    /**
+     * Sets a new reasonCode
+     *
+     * @param  string $reasonCode
+     * @return self
+     */
+    public function setReasonCode($reasonCode)
+    {
+        $this->reasonCode = $reasonCode;
+        return $this;
+    }
+
+    /**
+     * Gets as reason
+     *
+     * @return string
+     */
+    public function getReason()
+    {
+        return $this->reason;
+    }
+
+    /**
+     * Sets a new reason
+     *
+     * @param  string $reason
+     * @return self
+     */
+    public function setReason($reason)
+    {
+        $this->reason = $reason;
+        return $this;
+    }
+
+    /**
+     * Gets as categoryTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradeTaxType
+     */
+    public function getCategoryTradeTax()
+    {
+        return $this->categoryTradeTax;
+    }
+
+    /**
+     * Sets a new categoryTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeTaxType $categoryTradeTax
+     * @return self
+     */
+    public function setCategoryTradeTax(\horstoeko\zugferd\entities\basic\ram\TradeTaxType $categoryTradeTax)
+    {
+        $this->categoryTradeTax = $categoryTradeTax;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePartyType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePartyType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePartyType.php	(revision 8435)
@@ -0,0 +1,309 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing TradePartyType
+ *
+ * XSD Type: TradePartyType
+ */
+class TradePartyType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType[] $iD
+     */
+    private $iD = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType[] $globalID
+     */
+    private $globalID = [
+        
+    ];
+
+    /**
+     * @var string $name
+     */
+    private $name = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\LegalOrganizationType $specifiedLegalOrganization
+     */
+    private $specifiedLegalOrganization = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradeAddressType $postalTradeAddress
+     */
+    private $postalTradeAddress = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\UniversalCommunicationType $uRIUniversalCommunication
+     */
+    private $uRIUniversalCommunication = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TaxRegistrationType[] $specifiedTaxRegistration
+     */
+    private $specifiedTaxRegistration = [
+        
+    ];
+
+    /**
+     * Adds as iD
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $iD
+     */
+    public function addToID(\horstoeko\zugferd\entities\basic\udt\IDType $iD)
+    {
+        $this->iD[] = $iD;
+        return $this;
+    }
+
+    /**
+     * isset iD
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetID($index)
+    {
+        return isset($this->iD[$index]);
+    }
+
+    /**
+     * unset iD
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetID($index)
+    {
+        unset($this->iD[$index]);
+    }
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType[]
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType[] $iD
+     * @return self
+     */
+    public function setID(array $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Adds as globalID
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $globalID
+     */
+    public function addToGlobalID(\horstoeko\zugferd\entities\basic\udt\IDType $globalID)
+    {
+        $this->globalID[] = $globalID;
+        return $this;
+    }
+
+    /**
+     * isset globalID
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetGlobalID($index)
+    {
+        return isset($this->globalID[$index]);
+    }
+
+    /**
+     * unset globalID
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetGlobalID($index)
+    {
+        unset($this->globalID[$index]);
+    }
+
+    /**
+     * Gets as globalID
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType[]
+     */
+    public function getGlobalID()
+    {
+        return $this->globalID;
+    }
+
+    /**
+     * Sets a new globalID
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType[] $globalID
+     * @return self
+     */
+    public function setGlobalID(array $globalID)
+    {
+        $this->globalID = $globalID;
+        return $this;
+    }
+
+    /**
+     * Gets as name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLegalOrganization
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\LegalOrganizationType
+     */
+    public function getSpecifiedLegalOrganization()
+    {
+        return $this->specifiedLegalOrganization;
+    }
+
+    /**
+     * Sets a new specifiedLegalOrganization
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\LegalOrganizationType $specifiedLegalOrganization
+     * @return self
+     */
+    public function setSpecifiedLegalOrganization(\horstoeko\zugferd\entities\basic\ram\LegalOrganizationType $specifiedLegalOrganization)
+    {
+        $this->specifiedLegalOrganization = $specifiedLegalOrganization;
+        return $this;
+    }
+
+    /**
+     * Gets as postalTradeAddress
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradeAddressType
+     */
+    public function getPostalTradeAddress()
+    {
+        return $this->postalTradeAddress;
+    }
+
+    /**
+     * Sets a new postalTradeAddress
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeAddressType $postalTradeAddress
+     * @return self
+     */
+    public function setPostalTradeAddress(\horstoeko\zugferd\entities\basic\ram\TradeAddressType $postalTradeAddress)
+    {
+        $this->postalTradeAddress = $postalTradeAddress;
+        return $this;
+    }
+
+    /**
+     * Gets as uRIUniversalCommunication
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\UniversalCommunicationType
+     */
+    public function getURIUniversalCommunication()
+    {
+        return $this->uRIUniversalCommunication;
+    }
+
+    /**
+     * Sets a new uRIUniversalCommunication
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\UniversalCommunicationType $uRIUniversalCommunication
+     * @return self
+     */
+    public function setURIUniversalCommunication(\horstoeko\zugferd\entities\basic\ram\UniversalCommunicationType $uRIUniversalCommunication)
+    {
+        $this->uRIUniversalCommunication = $uRIUniversalCommunication;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTaxRegistration
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basic\ram\TaxRegistrationType $specifiedTaxRegistration
+     */
+    public function addToSpecifiedTaxRegistration(\horstoeko\zugferd\entities\basic\ram\TaxRegistrationType $specifiedTaxRegistration)
+    {
+        $this->specifiedTaxRegistration[] = $specifiedTaxRegistration;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTaxRegistration
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTaxRegistration($index)
+    {
+        return isset($this->specifiedTaxRegistration[$index]);
+    }
+
+    /**
+     * unset specifiedTaxRegistration
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTaxRegistration($index)
+    {
+        unset($this->specifiedTaxRegistration[$index]);
+    }
+
+    /**
+     * Gets as specifiedTaxRegistration
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TaxRegistrationType[]
+     */
+    public function getSpecifiedTaxRegistration()
+    {
+        return $this->specifiedTaxRegistration;
+    }
+
+    /**
+     * Sets a new specifiedTaxRegistration
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TaxRegistrationType[] $specifiedTaxRegistration
+     * @return self
+     */
+    public function setSpecifiedTaxRegistration(array $specifiedTaxRegistration)
+    {
+        $this->specifiedTaxRegistration = $specifiedTaxRegistration;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePaymentTermsType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePaymentTermsType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePaymentTermsType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing TradePaymentTermsType
+ *
+ * XSD Type: TradePaymentTermsType
+ */
+class TradePaymentTermsType
+{
+
+    /**
+     * @var string $description
+     */
+    private $description = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\DateTimeType $dueDateDateTime
+     */
+    private $dueDateDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $directDebitMandateID
+     */
+    private $directDebitMandateID = null;
+
+    /**
+     * Gets as description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Sets a new description
+     *
+     * @param  string $description
+     * @return self
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Gets as dueDateDateTime
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\DateTimeType
+     */
+    public function getDueDateDateTime()
+    {
+        return $this->dueDateDateTime;
+    }
+
+    /**
+     * Sets a new dueDateDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\DateTimeType $dueDateDateTime
+     * @return self
+     */
+    public function setDueDateDateTime(\horstoeko\zugferd\entities\basic\udt\DateTimeType $dueDateDateTime)
+    {
+        $this->dueDateDateTime = $dueDateDateTime;
+        return $this;
+    }
+
+    /**
+     * Gets as directDebitMandateID
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getDirectDebitMandateID()
+    {
+        return $this->directDebitMandateID;
+    }
+
+    /**
+     * Sets a new directDebitMandateID
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $directDebitMandateID
+     * @return self
+     */
+    public function setDirectDebitMandateID(\horstoeko\zugferd\entities\basic\udt\IDType $directDebitMandateID)
+    {
+        $this->directDebitMandateID = $directDebitMandateID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePriceType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePriceType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradePriceType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing TradePriceType
+ *
+ * XSD Type: TradePriceType
+ */
+class TradePriceType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType $chargeAmount
+     */
+    private $chargeAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\QuantityType $basisQuantity
+     */
+    private $basisQuantity = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType $appliedTradeAllowanceCharge
+     */
+    private $appliedTradeAllowanceCharge = null;
+
+    /**
+     * Gets as chargeAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType
+     */
+    public function getChargeAmount()
+    {
+        return $this->chargeAmount;
+    }
+
+    /**
+     * Sets a new chargeAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $chargeAmount
+     * @return self
+     */
+    public function setChargeAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $chargeAmount)
+    {
+        $this->chargeAmount = $chargeAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as basisQuantity
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\QuantityType
+     */
+    public function getBasisQuantity()
+    {
+        return $this->basisQuantity;
+    }
+
+    /**
+     * Sets a new basisQuantity
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\QuantityType $basisQuantity
+     * @return self
+     */
+    public function setBasisQuantity(\horstoeko\zugferd\entities\basic\udt\QuantityType $basisQuantity)
+    {
+        $this->basisQuantity = $basisQuantity;
+        return $this;
+    }
+
+    /**
+     * Gets as appliedTradeAllowanceCharge
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType
+     */
+    public function getAppliedTradeAllowanceCharge()
+    {
+        return $this->appliedTradeAllowanceCharge;
+    }
+
+    /**
+     * Sets a new appliedTradeAllowanceCharge
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType $appliedTradeAllowanceCharge
+     * @return self
+     */
+    public function setAppliedTradeAllowanceCharge(\horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType $appliedTradeAllowanceCharge)
+    {
+        $this->appliedTradeAllowanceCharge = $appliedTradeAllowanceCharge;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeProductType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeProductType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeProductType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing TradeProductType
+ *
+ * XSD Type: TradeProductType
+ */
+class TradeProductType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $globalID
+     */
+    private $globalID = null;
+
+    /**
+     * @var string $name
+     */
+    private $name = null;
+
+    /**
+     * Gets as globalID
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getGlobalID()
+    {
+        return $this->globalID;
+    }
+
+    /**
+     * Sets a new globalID
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $globalID
+     * @return self
+     */
+    public function setGlobalID(\horstoeko\zugferd\entities\basic\udt\IDType $globalID)
+    {
+        $this->globalID = $globalID;
+        return $this;
+    }
+
+    /**
+     * Gets as name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementHeaderMonetarySummationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementHeaderMonetarySummationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementHeaderMonetarySummationType.php	(revision 8435)
@@ -0,0 +1,264 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing TradeSettlementHeaderMonetarySummationType
+ *
+ * XSD Type: TradeSettlementHeaderMonetarySummationType
+ */
+class TradeSettlementHeaderMonetarySummationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType $lineTotalAmount
+     */
+    private $lineTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType $chargeTotalAmount
+     */
+    private $chargeTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType $allowanceTotalAmount
+     */
+    private $allowanceTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType $taxBasisTotalAmount
+     */
+    private $taxBasisTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType[] $taxTotalAmount
+     */
+    private $taxTotalAmount = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType $grandTotalAmount
+     */
+    private $grandTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType $totalPrepaidAmount
+     */
+    private $totalPrepaidAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType $duePayableAmount
+     */
+    private $duePayableAmount = null;
+
+    /**
+     * Gets as lineTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType
+     */
+    public function getLineTotalAmount()
+    {
+        return $this->lineTotalAmount;
+    }
+
+    /**
+     * Sets a new lineTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $lineTotalAmount
+     * @return self
+     */
+    public function setLineTotalAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $lineTotalAmount)
+    {
+        $this->lineTotalAmount = $lineTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as chargeTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType
+     */
+    public function getChargeTotalAmount()
+    {
+        return $this->chargeTotalAmount;
+    }
+
+    /**
+     * Sets a new chargeTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $chargeTotalAmount
+     * @return self
+     */
+    public function setChargeTotalAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $chargeTotalAmount)
+    {
+        $this->chargeTotalAmount = $chargeTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as allowanceTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType
+     */
+    public function getAllowanceTotalAmount()
+    {
+        return $this->allowanceTotalAmount;
+    }
+
+    /**
+     * Sets a new allowanceTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $allowanceTotalAmount
+     * @return self
+     */
+    public function setAllowanceTotalAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $allowanceTotalAmount)
+    {
+        $this->allowanceTotalAmount = $allowanceTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as taxBasisTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType
+     */
+    public function getTaxBasisTotalAmount()
+    {
+        return $this->taxBasisTotalAmount;
+    }
+
+    /**
+     * Sets a new taxBasisTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $taxBasisTotalAmount
+     * @return self
+     */
+    public function setTaxBasisTotalAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $taxBasisTotalAmount)
+    {
+        $this->taxBasisTotalAmount = $taxBasisTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Adds as taxTotalAmount
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $taxTotalAmount
+     */
+    public function addToTaxTotalAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $taxTotalAmount)
+    {
+        $this->taxTotalAmount[] = $taxTotalAmount;
+        return $this;
+    }
+
+    /**
+     * isset taxTotalAmount
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetTaxTotalAmount($index)
+    {
+        return isset($this->taxTotalAmount[$index]);
+    }
+
+    /**
+     * unset taxTotalAmount
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetTaxTotalAmount($index)
+    {
+        unset($this->taxTotalAmount[$index]);
+    }
+
+    /**
+     * Gets as taxTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType[]
+     */
+    public function getTaxTotalAmount()
+    {
+        return $this->taxTotalAmount;
+    }
+
+    /**
+     * Sets a new taxTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType[] $taxTotalAmount
+     * @return self
+     */
+    public function setTaxTotalAmount(array $taxTotalAmount)
+    {
+        $this->taxTotalAmount = $taxTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as grandTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType
+     */
+    public function getGrandTotalAmount()
+    {
+        return $this->grandTotalAmount;
+    }
+
+    /**
+     * Sets a new grandTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $grandTotalAmount
+     * @return self
+     */
+    public function setGrandTotalAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $grandTotalAmount)
+    {
+        $this->grandTotalAmount = $grandTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as totalPrepaidAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType
+     */
+    public function getTotalPrepaidAmount()
+    {
+        return $this->totalPrepaidAmount;
+    }
+
+    /**
+     * Sets a new totalPrepaidAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $totalPrepaidAmount
+     * @return self
+     */
+    public function setTotalPrepaidAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $totalPrepaidAmount)
+    {
+        $this->totalPrepaidAmount = $totalPrepaidAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as duePayableAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType
+     */
+    public function getDuePayableAmount()
+    {
+        return $this->duePayableAmount;
+    }
+
+    /**
+     * Sets a new duePayableAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $duePayableAmount
+     * @return self
+     */
+    public function setDuePayableAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $duePayableAmount)
+    {
+        $this->duePayableAmount = $duePayableAmount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementLineMonetarySummationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementLineMonetarySummationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementLineMonetarySummationType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing TradeSettlementLineMonetarySummationType
+ *
+ * XSD Type: TradeSettlementLineMonetarySummationType
+ */
+class TradeSettlementLineMonetarySummationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType $lineTotalAmount
+     */
+    private $lineTotalAmount = null;
+
+    /**
+     * Gets as lineTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType
+     */
+    public function getLineTotalAmount()
+    {
+        return $this->lineTotalAmount;
+    }
+
+    /**
+     * Sets a new lineTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $lineTotalAmount
+     * @return self
+     */
+    public function setLineTotalAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $lineTotalAmount)
+    {
+        $this->lineTotalAmount = $lineTotalAmount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementPaymentMeansType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementPaymentMeansType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeSettlementPaymentMeansType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing TradeSettlementPaymentMeansType
+ *
+ * XSD Type: TradeSettlementPaymentMeansType
+ */
+class TradeSettlementPaymentMeansType
+{
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\DebtorFinancialAccountType $payerPartyDebtorFinancialAccount
+     */
+    private $payerPartyDebtorFinancialAccount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\CreditorFinancialAccountType $payeePartyCreditorFinancialAccount
+     */
+    private $payeePartyCreditorFinancialAccount = null;
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as payerPartyDebtorFinancialAccount
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\DebtorFinancialAccountType
+     */
+    public function getPayerPartyDebtorFinancialAccount()
+    {
+        return $this->payerPartyDebtorFinancialAccount;
+    }
+
+    /**
+     * Sets a new payerPartyDebtorFinancialAccount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\DebtorFinancialAccountType $payerPartyDebtorFinancialAccount
+     * @return self
+     */
+    public function setPayerPartyDebtorFinancialAccount(\horstoeko\zugferd\entities\basic\ram\DebtorFinancialAccountType $payerPartyDebtorFinancialAccount)
+    {
+        $this->payerPartyDebtorFinancialAccount = $payerPartyDebtorFinancialAccount;
+        return $this;
+    }
+
+    /**
+     * Gets as payeePartyCreditorFinancialAccount
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\CreditorFinancialAccountType
+     */
+    public function getPayeePartyCreditorFinancialAccount()
+    {
+        return $this->payeePartyCreditorFinancialAccount;
+    }
+
+    /**
+     * Sets a new payeePartyCreditorFinancialAccount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\CreditorFinancialAccountType $payeePartyCreditorFinancialAccount
+     * @return self
+     */
+    public function setPayeePartyCreditorFinancialAccount(\horstoeko\zugferd\entities\basic\ram\CreditorFinancialAccountType $payeePartyCreditorFinancialAccount)
+    {
+        $this->payeePartyCreditorFinancialAccount = $payeePartyCreditorFinancialAccount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeTaxType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeTaxType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/TradeTaxType.php	(revision 8435)
@@ -0,0 +1,228 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing TradeTaxType
+ *
+ * XSD Type: TradeTaxType
+ */
+class TradeTaxType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType $calculatedAmount
+     */
+    private $calculatedAmount = null;
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var string $exemptionReason
+     */
+    private $exemptionReason = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\AmountType $basisAmount
+     */
+    private $basisAmount = null;
+
+    /**
+     * @var string $categoryCode
+     */
+    private $categoryCode = null;
+
+    /**
+     * @var string $exemptionReasonCode
+     */
+    private $exemptionReasonCode = null;
+
+    /**
+     * @var string $dueDateTypeCode
+     */
+    private $dueDateTypeCode = null;
+
+    /**
+     * @var float $rateApplicablePercent
+     */
+    private $rateApplicablePercent = null;
+
+    /**
+     * Gets as calculatedAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType
+     */
+    public function getCalculatedAmount()
+    {
+        return $this->calculatedAmount;
+    }
+
+    /**
+     * Sets a new calculatedAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $calculatedAmount
+     * @return self
+     */
+    public function setCalculatedAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $calculatedAmount)
+    {
+        $this->calculatedAmount = $calculatedAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as exemptionReason
+     *
+     * @return string
+     */
+    public function getExemptionReason()
+    {
+        return $this->exemptionReason;
+    }
+
+    /**
+     * Sets a new exemptionReason
+     *
+     * @param  string $exemptionReason
+     * @return self
+     */
+    public function setExemptionReason($exemptionReason)
+    {
+        $this->exemptionReason = $exemptionReason;
+        return $this;
+    }
+
+    /**
+     * Gets as basisAmount
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\AmountType
+     */
+    public function getBasisAmount()
+    {
+        return $this->basisAmount;
+    }
+
+    /**
+     * Sets a new basisAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\AmountType $basisAmount
+     * @return self
+     */
+    public function setBasisAmount(\horstoeko\zugferd\entities\basic\udt\AmountType $basisAmount)
+    {
+        $this->basisAmount = $basisAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as categoryCode
+     *
+     * @return string
+     */
+    public function getCategoryCode()
+    {
+        return $this->categoryCode;
+    }
+
+    /**
+     * Sets a new categoryCode
+     *
+     * @param  string $categoryCode
+     * @return self
+     */
+    public function setCategoryCode($categoryCode)
+    {
+        $this->categoryCode = $categoryCode;
+        return $this;
+    }
+
+    /**
+     * Gets as exemptionReasonCode
+     *
+     * @return string
+     */
+    public function getExemptionReasonCode()
+    {
+        return $this->exemptionReasonCode;
+    }
+
+    /**
+     * Sets a new exemptionReasonCode
+     *
+     * @param  string $exemptionReasonCode
+     * @return self
+     */
+    public function setExemptionReasonCode($exemptionReasonCode)
+    {
+        $this->exemptionReasonCode = $exemptionReasonCode;
+        return $this;
+    }
+
+    /**
+     * Gets as dueDateTypeCode
+     *
+     * @return string
+     */
+    public function getDueDateTypeCode()
+    {
+        return $this->dueDateTypeCode;
+    }
+
+    /**
+     * Sets a new dueDateTypeCode
+     *
+     * @param  string $dueDateTypeCode
+     * @return self
+     */
+    public function setDueDateTypeCode($dueDateTypeCode)
+    {
+        $this->dueDateTypeCode = $dueDateTypeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as rateApplicablePercent
+     *
+     * @return float
+     */
+    public function getRateApplicablePercent()
+    {
+        return $this->rateApplicablePercent;
+    }
+
+    /**
+     * Sets a new rateApplicablePercent
+     *
+     * @param  float $rateApplicablePercent
+     * @return self
+     */
+    public function setRateApplicablePercent($rateApplicablePercent)
+    {
+        $this->rateApplicablePercent = $rateApplicablePercent;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/UniversalCommunicationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/UniversalCommunicationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/ram/UniversalCommunicationType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\ram;
+
+/**
+ * Class representing UniversalCommunicationType
+ *
+ * XSD Type: UniversalCommunicationType
+ */
+class UniversalCommunicationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\IDType $uRIID
+     */
+    private $uRIID = null;
+
+    /**
+     * Gets as uRIID
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\IDType
+     */
+    public function getURIID()
+    {
+        return $this->uRIID;
+    }
+
+    /**
+     * Sets a new uRIID
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\IDType $uRIID
+     * @return self
+     */
+    public function setURIID(\horstoeko\zugferd\entities\basic\udt\IDType $uRIID)
+    {
+        $this->uRIID = $uRIID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/rsm/CrossIndustryInvoice.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/rsm/CrossIndustryInvoice.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/rsm/CrossIndustryInvoice.php	(revision 8435)
@@ -0,0 +1,12 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\rsm;
+
+/**
+ * Class representing CrossIndustryInvoice
+ */
+class CrossIndustryInvoice extends CrossIndustryInvoiceType
+{
+
+
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/rsm/CrossIndustryInvoiceType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/rsm/CrossIndustryInvoiceType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/rsm/CrossIndustryInvoiceType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\rsm;
+
+/**
+ * Class representing CrossIndustryInvoiceType
+ *
+ * XSD Type: CrossIndustryInvoiceType
+ */
+class CrossIndustryInvoiceType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\ExchangedDocumentContextType $exchangedDocumentContext
+     */
+    private $exchangedDocumentContext = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\ExchangedDocumentType $exchangedDocument
+     */
+    private $exchangedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction
+     */
+    private $supplyChainTradeTransaction = null;
+
+    /**
+     * Gets as exchangedDocumentContext
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\ExchangedDocumentContextType
+     */
+    public function getExchangedDocumentContext()
+    {
+        return $this->exchangedDocumentContext;
+    }
+
+    /**
+     * Sets a new exchangedDocumentContext
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\ExchangedDocumentContextType $exchangedDocumentContext
+     * @return self
+     */
+    public function setExchangedDocumentContext(\horstoeko\zugferd\entities\basic\ram\ExchangedDocumentContextType $exchangedDocumentContext)
+    {
+        $this->exchangedDocumentContext = $exchangedDocumentContext;
+        return $this;
+    }
+
+    /**
+     * Gets as exchangedDocument
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\ExchangedDocumentType
+     */
+    public function getExchangedDocument()
+    {
+        return $this->exchangedDocument;
+    }
+
+    /**
+     * Sets a new exchangedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\ExchangedDocumentType $exchangedDocument
+     * @return self
+     */
+    public function setExchangedDocument(\horstoeko\zugferd\entities\basic\ram\ExchangedDocumentType $exchangedDocument)
+    {
+        $this->exchangedDocument = $exchangedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as supplyChainTradeTransaction
+     *
+     * @return \horstoeko\zugferd\entities\basic\ram\SupplyChainTradeTransactionType
+     */
+    public function getSupplyChainTradeTransaction()
+    {
+        return $this->supplyChainTradeTransaction;
+    }
+
+    /**
+     * Sets a new supplyChainTradeTransaction
+     *
+     * @param  \horstoeko\zugferd\entities\basic\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction
+     * @return self
+     */
+    public function setSupplyChainTradeTransaction(\horstoeko\zugferd\entities\basic\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction)
+    {
+        $this->supplyChainTradeTransaction = $supplyChainTradeTransaction;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/AmountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/AmountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/AmountType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\udt;
+
+/**
+ * Class representing AmountType
+ *
+ * XSD Type: AmountType
+ */
+class AmountType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $currencyID
+     */
+    private $currencyID = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as currencyID
+     *
+     * @return string
+     */
+    public function getCurrencyID()
+    {
+        return $this->currencyID;
+    }
+
+    /**
+     * Sets a new currencyID
+     *
+     * @param  string $currencyID
+     * @return self
+     */
+    public function setCurrencyID($currencyID)
+    {
+        $this->currencyID = $currencyID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/CodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/CodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/CodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\udt;
+
+/**
+ * Class representing CodeType
+ *
+ * XSD Type: CodeType
+ */
+class CodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\udt;
+
+/**
+ * Class representing DateTimeType
+ *
+ * XSD Type: DateTimeType
+ */
+class DateTimeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basic\udt\DateTimeType\DateTimeStringAType $dateTimeString
+     */
+    private $dateTimeString = null;
+
+    /**
+     * Gets as dateTimeString
+     *
+     * @return \horstoeko\zugferd\entities\basic\udt\DateTimeType\DateTimeStringAType
+     */
+    public function getDateTimeString()
+    {
+        return $this->dateTimeString;
+    }
+
+    /**
+     * Sets a new dateTimeString
+     *
+     * @param  \horstoeko\zugferd\entities\basic\udt\DateTimeType\DateTimeStringAType $dateTimeString
+     * @return self
+     */
+    public function setDateTimeString(\horstoeko\zugferd\entities\basic\udt\DateTimeType\DateTimeStringAType $dateTimeString)
+    {
+        $this->dateTimeString = $dateTimeString;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType/DateTimeStringAType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType/DateTimeStringAType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/DateTimeType/DateTimeStringAType.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\udt\DateTimeType;
+
+/**
+ * Class representing DateTimeStringAType
+ */
+class DateTimeStringAType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $format
+     */
+    private $format = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as format
+     *
+     * @return string
+     */
+    public function getFormat()
+    {
+        return $this->format;
+    }
+
+    /**
+     * Sets a new format
+     *
+     * @param  string $format
+     * @return self
+     */
+    public function setFormat($format)
+    {
+        $this->format = $format;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/IDType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/IDType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/IDType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\udt;
+
+/**
+ * Class representing IDType
+ *
+ * XSD Type: IDType
+ */
+class IDType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $schemeID
+     */
+    private $schemeID = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as schemeID
+     *
+     * @return string
+     */
+    public function getSchemeID()
+    {
+        return $this->schemeID;
+    }
+
+    /**
+     * Sets a new schemeID
+     *
+     * @param  string $schemeID
+     * @return self
+     */
+    public function setSchemeID($schemeID)
+    {
+        $this->schemeID = $schemeID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/IndicatorType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/IndicatorType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/IndicatorType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\udt;
+
+/**
+ * Class representing IndicatorType
+ *
+ * XSD Type: IndicatorType
+ */
+class IndicatorType
+{
+
+    /**
+     * @var bool $indicator
+     */
+    private $indicator = null;
+
+    /**
+     * Gets as indicator
+     *
+     * @return bool
+     */
+    public function getIndicator()
+    {
+        return $this->indicator;
+    }
+
+    /**
+     * Sets a new indicator
+     *
+     * @param  bool $indicator
+     * @return self
+     */
+    public function setIndicator($indicator)
+    {
+        $this->indicator = $indicator;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/PercentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/PercentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/PercentType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\udt;
+
+/**
+ * Class representing PercentType
+ *
+ * XSD Type: PercentType
+ */
+class PercentType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/QuantityType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/QuantityType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/QuantityType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\udt;
+
+/**
+ * Class representing QuantityType
+ *
+ * XSD Type: QuantityType
+ */
+class QuantityType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $unitCode
+     */
+    private $unitCode = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as unitCode
+     *
+     * @return string
+     */
+    public function getUnitCode()
+    {
+        return $this->unitCode;
+    }
+
+    /**
+     * Sets a new unitCode
+     *
+     * @param  string $unitCode
+     * @return self
+     */
+    public function setUnitCode($unitCode)
+    {
+        $this->unitCode = $unitCode;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/TextType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/TextType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basic/udt/TextType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basic\udt;
+
+/**
+ * Class representing TextType
+ *
+ * XSD Type: TextType
+ */
+class TextType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/AllowanceChargeReasonCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/AllowanceChargeReasonCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/AllowanceChargeReasonCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\qdt;
+
+/**
+ * Class representing AllowanceChargeReasonCodeType
+ *
+ * XSD Type: AllowanceChargeReasonCodeType
+ */
+class AllowanceChargeReasonCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CountryIDType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CountryIDType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CountryIDType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\qdt;
+
+/**
+ * Class representing CountryIDType
+ *
+ * XSD Type: CountryIDType
+ */
+class CountryIDType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CurrencyCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CurrencyCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/CurrencyCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\qdt;
+
+/**
+ * Class representing CurrencyCodeType
+ *
+ * XSD Type: CurrencyCodeType
+ */
+class CurrencyCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/DocumentCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/DocumentCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/DocumentCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\qdt;
+
+/**
+ * Class representing DocumentCodeType
+ *
+ * XSD Type: DocumentCodeType
+ */
+class DocumentCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\qdt;
+
+/**
+ * Class representing FormattedDateTimeType
+ *
+ * XSD Type: FormattedDateTimeType
+ */
+class FormattedDateTimeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType\DateTimeStringAType $dateTimeString
+     */
+    private $dateTimeString = null;
+
+    /**
+     * Gets as dateTimeString
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType\DateTimeStringAType
+     */
+    public function getDateTimeString()
+    {
+        return $this->dateTimeString;
+    }
+
+    /**
+     * Sets a new dateTimeString
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType\DateTimeStringAType $dateTimeString
+     * @return self
+     */
+    public function setDateTimeString(\horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType\DateTimeStringAType $dateTimeString)
+    {
+        $this->dateTimeString = $dateTimeString;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType/DateTimeStringAType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType/DateTimeStringAType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/FormattedDateTimeType/DateTimeStringAType.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType;
+
+/**
+ * Class representing DateTimeStringAType
+ */
+class DateTimeStringAType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $format
+     */
+    private $format = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as format
+     *
+     * @return string
+     */
+    public function getFormat()
+    {
+        return $this->format;
+    }
+
+    /**
+     * Sets a new format
+     *
+     * @param  string $format
+     * @return self
+     */
+    public function setFormat($format)
+    {
+        $this->format = $format;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/PaymentMeansCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/PaymentMeansCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/PaymentMeansCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\qdt;
+
+/**
+ * Class representing PaymentMeansCodeType
+ *
+ * XSD Type: PaymentMeansCodeType
+ */
+class PaymentMeansCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxCategoryCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxCategoryCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxCategoryCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\qdt;
+
+/**
+ * Class representing TaxCategoryCodeType
+ *
+ * XSD Type: TaxCategoryCodeType
+ */
+class TaxCategoryCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxTypeCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxTypeCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TaxTypeCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\qdt;
+
+/**
+ * Class representing TaxTypeCodeType
+ *
+ * XSD Type: TaxTypeCodeType
+ */
+class TaxTypeCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TimeReferenceCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TimeReferenceCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/qdt/TimeReferenceCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\qdt;
+
+/**
+ * Class representing TimeReferenceCodeType
+ *
+ * XSD Type: TimeReferenceCodeType
+ */
+class TimeReferenceCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/CreditorFinancialAccountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/CreditorFinancialAccountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/CreditorFinancialAccountType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing CreditorFinancialAccountType
+ *
+ * XSD Type: CreditorFinancialAccountType
+ */
+class CreditorFinancialAccountType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType $iBANID
+     */
+    private $iBANID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType $proprietaryID
+     */
+    private $proprietaryID = null;
+
+    /**
+     * Gets as iBANID
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType
+     */
+    public function getIBANID()
+    {
+        return $this->iBANID;
+    }
+
+    /**
+     * Sets a new iBANID
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $iBANID
+     * @return self
+     */
+    public function setIBANID(\horstoeko\zugferd\entities\basicwl\udt\IDType $iBANID)
+    {
+        $this->iBANID = $iBANID;
+        return $this;
+    }
+
+    /**
+     * Gets as proprietaryID
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType
+     */
+    public function getProprietaryID()
+    {
+        return $this->proprietaryID;
+    }
+
+    /**
+     * Sets a new proprietaryID
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $proprietaryID
+     * @return self
+     */
+    public function setProprietaryID(\horstoeko\zugferd\entities\basicwl\udt\IDType $proprietaryID)
+    {
+        $this->proprietaryID = $proprietaryID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/DebtorFinancialAccountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/DebtorFinancialAccountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/DebtorFinancialAccountType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing DebtorFinancialAccountType
+ *
+ * XSD Type: DebtorFinancialAccountType
+ */
+class DebtorFinancialAccountType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType $iBANID
+     */
+    private $iBANID = null;
+
+    /**
+     * Gets as iBANID
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType
+     */
+    public function getIBANID()
+    {
+        return $this->iBANID;
+    }
+
+    /**
+     * Sets a new iBANID
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $iBANID
+     * @return self
+     */
+    public function setIBANID(\horstoeko\zugferd\entities\basicwl\udt\IDType $iBANID)
+    {
+        $this->iBANID = $iBANID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/DocumentContextParameterType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/DocumentContextParameterType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/DocumentContextParameterType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing DocumentContextParameterType
+ *
+ * XSD Type: DocumentContextParameterType
+ */
+class DocumentContextParameterType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\basicwl\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentContextType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentContextType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentContextType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing ExchangedDocumentContextType
+ *
+ * XSD Type: ExchangedDocumentContextType
+ */
+class ExchangedDocumentContextType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter
+     */
+    private $businessProcessSpecifiedDocumentContextParameter = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter
+     */
+    private $guidelineSpecifiedDocumentContextParameter = null;
+
+    /**
+     * Gets as businessProcessSpecifiedDocumentContextParameter
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\DocumentContextParameterType
+     */
+    public function getBusinessProcessSpecifiedDocumentContextParameter()
+    {
+        return $this->businessProcessSpecifiedDocumentContextParameter;
+    }
+
+    /**
+     * Sets a new businessProcessSpecifiedDocumentContextParameter
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter
+     * @return self
+     */
+    public function setBusinessProcessSpecifiedDocumentContextParameter(\horstoeko\zugferd\entities\basicwl\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter)
+    {
+        $this->businessProcessSpecifiedDocumentContextParameter = $businessProcessSpecifiedDocumentContextParameter;
+        return $this;
+    }
+
+    /**
+     * Gets as guidelineSpecifiedDocumentContextParameter
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\DocumentContextParameterType
+     */
+    public function getGuidelineSpecifiedDocumentContextParameter()
+    {
+        return $this->guidelineSpecifiedDocumentContextParameter;
+    }
+
+    /**
+     * Sets a new guidelineSpecifiedDocumentContextParameter
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter
+     * @return self
+     */
+    public function setGuidelineSpecifiedDocumentContextParameter(\horstoeko\zugferd\entities\basicwl\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter)
+    {
+        $this->guidelineSpecifiedDocumentContextParameter = $guidelineSpecifiedDocumentContextParameter;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ExchangedDocumentType.php	(revision 8435)
@@ -0,0 +1,156 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing ExchangedDocumentType
+ *
+ * XSD Type: ExchangedDocumentType
+ */
+class ExchangedDocumentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\DateTimeType $issueDateTime
+     */
+    private $issueDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\NoteType[] $includedNote
+     */
+    private $includedNote = [
+        
+    ];
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\basicwl\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as issueDateTime
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\DateTimeType
+     */
+    public function getIssueDateTime()
+    {
+        return $this->issueDateTime;
+    }
+
+    /**
+     * Sets a new issueDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\DateTimeType $issueDateTime
+     * @return self
+     */
+    public function setIssueDateTime(\horstoeko\zugferd\entities\basicwl\udt\DateTimeType $issueDateTime)
+    {
+        $this->issueDateTime = $issueDateTime;
+        return $this;
+    }
+
+    /**
+     * Adds as includedNote
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\NoteType $includedNote
+     */
+    public function addToIncludedNote(\horstoeko\zugferd\entities\basicwl\ram\NoteType $includedNote)
+    {
+        $this->includedNote[] = $includedNote;
+        return $this;
+    }
+
+    /**
+     * isset includedNote
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetIncludedNote($index)
+    {
+        return isset($this->includedNote[$index]);
+    }
+
+    /**
+     * unset includedNote
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetIncludedNote($index)
+    {
+        unset($this->includedNote[$index]);
+    }
+
+    /**
+     * Gets as includedNote
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\NoteType[]
+     */
+    public function getIncludedNote()
+    {
+        return $this->includedNote;
+    }
+
+    /**
+     * Sets a new includedNote
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\NoteType[] $includedNote
+     * @return self
+     */
+    public function setIncludedNote(array $includedNote)
+    {
+        $this->includedNote = $includedNote;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeAgreementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeAgreementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeAgreementType.php	(revision 8435)
@@ -0,0 +1,174 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing HeaderTradeAgreementType
+ *
+ * XSD Type: HeaderTradeAgreementType
+ */
+class HeaderTradeAgreementType
+{
+
+    /**
+     * @var string $buyerReference
+     */
+    private $buyerReference = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TradePartyType $sellerTradeParty
+     */
+    private $sellerTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TradePartyType $buyerTradeParty
+     */
+    private $buyerTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TradePartyType $sellerTaxRepresentativeTradeParty
+     */
+    private $sellerTaxRepresentativeTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     */
+    private $buyerOrderReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $contractReferencedDocument
+     */
+    private $contractReferencedDocument = null;
+
+    /**
+     * Gets as buyerReference
+     *
+     * @return string
+     */
+    public function getBuyerReference()
+    {
+        return $this->buyerReference;
+    }
+
+    /**
+     * Sets a new buyerReference
+     *
+     * @param  string $buyerReference
+     * @return self
+     */
+    public function setBuyerReference($buyerReference)
+    {
+        $this->buyerReference = $buyerReference;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TradePartyType
+     */
+    public function getSellerTradeParty()
+    {
+        return $this->sellerTradeParty;
+    }
+
+    /**
+     * Sets a new sellerTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradePartyType $sellerTradeParty
+     * @return self
+     */
+    public function setSellerTradeParty(\horstoeko\zugferd\entities\basicwl\ram\TradePartyType $sellerTradeParty)
+    {
+        $this->sellerTradeParty = $sellerTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TradePartyType
+     */
+    public function getBuyerTradeParty()
+    {
+        return $this->buyerTradeParty;
+    }
+
+    /**
+     * Sets a new buyerTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradePartyType $buyerTradeParty
+     * @return self
+     */
+    public function setBuyerTradeParty(\horstoeko\zugferd\entities\basicwl\ram\TradePartyType $buyerTradeParty)
+    {
+        $this->buyerTradeParty = $buyerTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerTaxRepresentativeTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TradePartyType
+     */
+    public function getSellerTaxRepresentativeTradeParty()
+    {
+        return $this->sellerTaxRepresentativeTradeParty;
+    }
+
+    /**
+     * Sets a new sellerTaxRepresentativeTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradePartyType $sellerTaxRepresentativeTradeParty
+     * @return self
+     */
+    public function setSellerTaxRepresentativeTradeParty(\horstoeko\zugferd\entities\basicwl\ram\TradePartyType $sellerTaxRepresentativeTradeParty)
+    {
+        $this->sellerTaxRepresentativeTradeParty = $sellerTaxRepresentativeTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerOrderReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType
+     */
+    public function getBuyerOrderReferencedDocument()
+    {
+        return $this->buyerOrderReferencedDocument;
+    }
+
+    /**
+     * Sets a new buyerOrderReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     * @return self
+     */
+    public function setBuyerOrderReferencedDocument(\horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $buyerOrderReferencedDocument)
+    {
+        $this->buyerOrderReferencedDocument = $buyerOrderReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as contractReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType
+     */
+    public function getContractReferencedDocument()
+    {
+        return $this->contractReferencedDocument;
+    }
+
+    /**
+     * Sets a new contractReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $contractReferencedDocument
+     * @return self
+     */
+    public function setContractReferencedDocument(\horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $contractReferencedDocument)
+    {
+        $this->contractReferencedDocument = $contractReferencedDocument;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeDeliveryType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeDeliveryType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeDeliveryType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing HeaderTradeDeliveryType
+ *
+ * XSD Type: HeaderTradeDeliveryType
+ */
+class HeaderTradeDeliveryType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TradePartyType $shipToTradeParty
+     */
+    private $shipToTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\SupplyChainEventType $actualDeliverySupplyChainEvent
+     */
+    private $actualDeliverySupplyChainEvent = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $despatchAdviceReferencedDocument
+     */
+    private $despatchAdviceReferencedDocument = null;
+
+    /**
+     * Gets as shipToTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TradePartyType
+     */
+    public function getShipToTradeParty()
+    {
+        return $this->shipToTradeParty;
+    }
+
+    /**
+     * Sets a new shipToTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradePartyType $shipToTradeParty
+     * @return self
+     */
+    public function setShipToTradeParty(\horstoeko\zugferd\entities\basicwl\ram\TradePartyType $shipToTradeParty)
+    {
+        $this->shipToTradeParty = $shipToTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as actualDeliverySupplyChainEvent
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\SupplyChainEventType
+     */
+    public function getActualDeliverySupplyChainEvent()
+    {
+        return $this->actualDeliverySupplyChainEvent;
+    }
+
+    /**
+     * Sets a new actualDeliverySupplyChainEvent
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\SupplyChainEventType $actualDeliverySupplyChainEvent
+     * @return self
+     */
+    public function setActualDeliverySupplyChainEvent(\horstoeko\zugferd\entities\basicwl\ram\SupplyChainEventType $actualDeliverySupplyChainEvent)
+    {
+        $this->actualDeliverySupplyChainEvent = $actualDeliverySupplyChainEvent;
+        return $this;
+    }
+
+    /**
+     * Gets as despatchAdviceReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType
+     */
+    public function getDespatchAdviceReferencedDocument()
+    {
+        return $this->despatchAdviceReferencedDocument;
+    }
+
+    /**
+     * Sets a new despatchAdviceReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $despatchAdviceReferencedDocument
+     * @return self
+     */
+    public function setDespatchAdviceReferencedDocument(\horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $despatchAdviceReferencedDocument)
+    {
+        $this->despatchAdviceReferencedDocument = $despatchAdviceReferencedDocument;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeSettlementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeSettlementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/HeaderTradeSettlementType.php	(revision 8435)
@@ -0,0 +1,435 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing HeaderTradeSettlementType
+ *
+ * XSD Type: HeaderTradeSettlementType
+ */
+class HeaderTradeSettlementType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType $creditorReferenceID
+     */
+    private $creditorReferenceID = null;
+
+    /**
+     * @var string $paymentReference
+     */
+    private $paymentReference = null;
+
+    /**
+     * @var string $taxCurrencyCode
+     */
+    private $taxCurrencyCode = null;
+
+    /**
+     * @var string $invoiceCurrencyCode
+     */
+    private $invoiceCurrencyCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TradePartyType $payeeTradeParty
+     */
+    private $payeeTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans
+     */
+    private $specifiedTradeSettlementPaymentMeans = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TradeTaxType[] $applicableTradeTax
+     */
+    private $applicableTradeTax = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     */
+    private $billingSpecifiedPeriod = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     */
+    private $specifiedTradeAllowanceCharge = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TradePaymentTermsType $specifiedTradePaymentTerms
+     */
+    private $specifiedTradePaymentTerms = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation
+     */
+    private $specifiedTradeSettlementHeaderMonetarySummation = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $invoiceReferencedDocument
+     */
+    private $invoiceReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount
+     */
+    private $receivableSpecifiedTradeAccountingAccount = null;
+
+    /**
+     * Gets as creditorReferenceID
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType
+     */
+    public function getCreditorReferenceID()
+    {
+        return $this->creditorReferenceID;
+    }
+
+    /**
+     * Sets a new creditorReferenceID
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $creditorReferenceID
+     * @return self
+     */
+    public function setCreditorReferenceID(\horstoeko\zugferd\entities\basicwl\udt\IDType $creditorReferenceID)
+    {
+        $this->creditorReferenceID = $creditorReferenceID;
+        return $this;
+    }
+
+    /**
+     * Gets as paymentReference
+     *
+     * @return string
+     */
+    public function getPaymentReference()
+    {
+        return $this->paymentReference;
+    }
+
+    /**
+     * Sets a new paymentReference
+     *
+     * @param  string $paymentReference
+     * @return self
+     */
+    public function setPaymentReference($paymentReference)
+    {
+        $this->paymentReference = $paymentReference;
+        return $this;
+    }
+
+    /**
+     * Gets as taxCurrencyCode
+     *
+     * @return string
+     */
+    public function getTaxCurrencyCode()
+    {
+        return $this->taxCurrencyCode;
+    }
+
+    /**
+     * Sets a new taxCurrencyCode
+     *
+     * @param  string $taxCurrencyCode
+     * @return self
+     */
+    public function setTaxCurrencyCode($taxCurrencyCode)
+    {
+        $this->taxCurrencyCode = $taxCurrencyCode;
+        return $this;
+    }
+
+    /**
+     * Gets as invoiceCurrencyCode
+     *
+     * @return string
+     */
+    public function getInvoiceCurrencyCode()
+    {
+        return $this->invoiceCurrencyCode;
+    }
+
+    /**
+     * Sets a new invoiceCurrencyCode
+     *
+     * @param  string $invoiceCurrencyCode
+     * @return self
+     */
+    public function setInvoiceCurrencyCode($invoiceCurrencyCode)
+    {
+        $this->invoiceCurrencyCode = $invoiceCurrencyCode;
+        return $this;
+    }
+
+    /**
+     * Gets as payeeTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TradePartyType
+     */
+    public function getPayeeTradeParty()
+    {
+        return $this->payeeTradeParty;
+    }
+
+    /**
+     * Sets a new payeeTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradePartyType $payeeTradeParty
+     * @return self
+     */
+    public function setPayeeTradeParty(\horstoeko\zugferd\entities\basicwl\ram\TradePartyType $payeeTradeParty)
+    {
+        $this->payeeTradeParty = $payeeTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeSettlementPaymentMeans
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TradeSettlementPaymentMeansType
+     */
+    public function getSpecifiedTradeSettlementPaymentMeans()
+    {
+        return $this->specifiedTradeSettlementPaymentMeans;
+    }
+
+    /**
+     * Sets a new specifiedTradeSettlementPaymentMeans
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans
+     * @return self
+     */
+    public function setSpecifiedTradeSettlementPaymentMeans(\horstoeko\zugferd\entities\basicwl\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans)
+    {
+        $this->specifiedTradeSettlementPaymentMeans = $specifiedTradeSettlementPaymentMeans;
+        return $this;
+    }
+
+    /**
+     * Adds as applicableTradeTax
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradeTaxType $applicableTradeTax
+     */
+    public function addToApplicableTradeTax(\horstoeko\zugferd\entities\basicwl\ram\TradeTaxType $applicableTradeTax)
+    {
+        $this->applicableTradeTax[] = $applicableTradeTax;
+        return $this;
+    }
+
+    /**
+     * isset applicableTradeTax
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetApplicableTradeTax($index)
+    {
+        return isset($this->applicableTradeTax[$index]);
+    }
+
+    /**
+     * unset applicableTradeTax
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetApplicableTradeTax($index)
+    {
+        unset($this->applicableTradeTax[$index]);
+    }
+
+    /**
+     * Gets as applicableTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TradeTaxType[]
+     */
+    public function getApplicableTradeTax()
+    {
+        return $this->applicableTradeTax;
+    }
+
+    /**
+     * Sets a new applicableTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradeTaxType[] $applicableTradeTax
+     * @return self
+     */
+    public function setApplicableTradeTax(array $applicableTradeTax)
+    {
+        $this->applicableTradeTax = $applicableTradeTax;
+        return $this;
+    }
+
+    /**
+     * Gets as billingSpecifiedPeriod
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\SpecifiedPeriodType
+     */
+    public function getBillingSpecifiedPeriod()
+    {
+        return $this->billingSpecifiedPeriod;
+    }
+
+    /**
+     * Sets a new billingSpecifiedPeriod
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     * @return self
+     */
+    public function setBillingSpecifiedPeriod(\horstoeko\zugferd\entities\basicwl\ram\SpecifiedPeriodType $billingSpecifiedPeriod)
+    {
+        $this->billingSpecifiedPeriod = $billingSpecifiedPeriod;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTradeAllowanceCharge
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge
+     */
+    public function addToSpecifiedTradeAllowanceCharge(\horstoeko\zugferd\entities\basicwl\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge[] = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTradeAllowanceCharge($index)
+    {
+        return isset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * unset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTradeAllowanceCharge($index)
+    {
+        unset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * Gets as specifiedTradeAllowanceCharge
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TradeAllowanceChargeType[]
+     */
+    public function getSpecifiedTradeAllowanceCharge()
+    {
+        return $this->specifiedTradeAllowanceCharge;
+    }
+
+    /**
+     * Sets a new specifiedTradeAllowanceCharge
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     * @return self
+     */
+    public function setSpecifiedTradeAllowanceCharge(array $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradePaymentTerms
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TradePaymentTermsType
+     */
+    public function getSpecifiedTradePaymentTerms()
+    {
+        return $this->specifiedTradePaymentTerms;
+    }
+
+    /**
+     * Sets a new specifiedTradePaymentTerms
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradePaymentTermsType $specifiedTradePaymentTerms
+     * @return self
+     */
+    public function setSpecifiedTradePaymentTerms(\horstoeko\zugferd\entities\basicwl\ram\TradePaymentTermsType $specifiedTradePaymentTerms)
+    {
+        $this->specifiedTradePaymentTerms = $specifiedTradePaymentTerms;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeSettlementHeaderMonetarySummation
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TradeSettlementHeaderMonetarySummationType
+     */
+    public function getSpecifiedTradeSettlementHeaderMonetarySummation()
+    {
+        return $this->specifiedTradeSettlementHeaderMonetarySummation;
+    }
+
+    /**
+     * Sets a new specifiedTradeSettlementHeaderMonetarySummation
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation
+     * @return self
+     */
+    public function setSpecifiedTradeSettlementHeaderMonetarySummation(\horstoeko\zugferd\entities\basicwl\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation)
+    {
+        $this->specifiedTradeSettlementHeaderMonetarySummation = $specifiedTradeSettlementHeaderMonetarySummation;
+        return $this;
+    }
+
+    /**
+     * Gets as invoiceReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType
+     */
+    public function getInvoiceReferencedDocument()
+    {
+        return $this->invoiceReferencedDocument;
+    }
+
+    /**
+     * Sets a new invoiceReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $invoiceReferencedDocument
+     * @return self
+     */
+    public function setInvoiceReferencedDocument(\horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType $invoiceReferencedDocument)
+    {
+        $this->invoiceReferencedDocument = $invoiceReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as receivableSpecifiedTradeAccountingAccount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TradeAccountingAccountType
+     */
+    public function getReceivableSpecifiedTradeAccountingAccount()
+    {
+        return $this->receivableSpecifiedTradeAccountingAccount;
+    }
+
+    /**
+     * Sets a new receivableSpecifiedTradeAccountingAccount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount
+     * @return self
+     */
+    public function setReceivableSpecifiedTradeAccountingAccount(\horstoeko\zugferd\entities\basicwl\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount)
+    {
+        $this->receivableSpecifiedTradeAccountingAccount = $receivableSpecifiedTradeAccountingAccount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/LegalOrganizationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/LegalOrganizationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/LegalOrganizationType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing LegalOrganizationType
+ *
+ * XSD Type: LegalOrganizationType
+ */
+class LegalOrganizationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $tradingBusinessName
+     */
+    private $tradingBusinessName = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\basicwl\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as tradingBusinessName
+     *
+     * @return string
+     */
+    public function getTradingBusinessName()
+    {
+        return $this->tradingBusinessName;
+    }
+
+    /**
+     * Sets a new tradingBusinessName
+     *
+     * @param  string $tradingBusinessName
+     * @return self
+     */
+    public function setTradingBusinessName($tradingBusinessName)
+    {
+        $this->tradingBusinessName = $tradingBusinessName;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/NoteType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/NoteType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/NoteType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing NoteType
+ *
+ * XSD Type: NoteType
+ */
+class NoteType
+{
+
+    /**
+     * @var string $content
+     */
+    private $content = null;
+
+    /**
+     * @var string $subjectCode
+     */
+    private $subjectCode = null;
+
+    /**
+     * Gets as content
+     *
+     * @return string
+     */
+    public function getContent()
+    {
+        return $this->content;
+    }
+
+    /**
+     * Sets a new content
+     *
+     * @param  string $content
+     * @return self
+     */
+    public function setContent($content)
+    {
+        $this->content = $content;
+        return $this;
+    }
+
+    /**
+     * Gets as subjectCode
+     *
+     * @return string
+     */
+    public function getSubjectCode()
+    {
+        return $this->subjectCode;
+    }
+
+    /**
+     * Sets a new subjectCode
+     *
+     * @param  string $subjectCode
+     * @return self
+     */
+    public function setSubjectCode($subjectCode)
+    {
+        $this->subjectCode = $subjectCode;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ReferencedDocumentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ReferencedDocumentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/ReferencedDocumentType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing ReferencedDocumentType
+ *
+ * XSD Type: ReferencedDocumentType
+ */
+class ReferencedDocumentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType $issuerAssignedID
+     */
+    private $issuerAssignedID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType $formattedIssueDateTime
+     */
+    private $formattedIssueDateTime = null;
+
+    /**
+     * Gets as issuerAssignedID
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType
+     */
+    public function getIssuerAssignedID()
+    {
+        return $this->issuerAssignedID;
+    }
+
+    /**
+     * Sets a new issuerAssignedID
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $issuerAssignedID
+     * @return self
+     */
+    public function setIssuerAssignedID(\horstoeko\zugferd\entities\basicwl\udt\IDType $issuerAssignedID)
+    {
+        $this->issuerAssignedID = $issuerAssignedID;
+        return $this;
+    }
+
+    /**
+     * Gets as formattedIssueDateTime
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType
+     */
+    public function getFormattedIssueDateTime()
+    {
+        return $this->formattedIssueDateTime;
+    }
+
+    /**
+     * Sets a new formattedIssueDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType $formattedIssueDateTime
+     * @return self
+     */
+    public function setFormattedIssueDateTime(\horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType $formattedIssueDateTime)
+    {
+        $this->formattedIssueDateTime = $formattedIssueDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SpecifiedPeriodType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SpecifiedPeriodType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SpecifiedPeriodType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing SpecifiedPeriodType
+ *
+ * XSD Type: SpecifiedPeriodType
+ */
+class SpecifiedPeriodType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\DateTimeType $startDateTime
+     */
+    private $startDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\DateTimeType $endDateTime
+     */
+    private $endDateTime = null;
+
+    /**
+     * Gets as startDateTime
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\DateTimeType
+     */
+    public function getStartDateTime()
+    {
+        return $this->startDateTime;
+    }
+
+    /**
+     * Sets a new startDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\DateTimeType $startDateTime
+     * @return self
+     */
+    public function setStartDateTime(\horstoeko\zugferd\entities\basicwl\udt\DateTimeType $startDateTime)
+    {
+        $this->startDateTime = $startDateTime;
+        return $this;
+    }
+
+    /**
+     * Gets as endDateTime
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\DateTimeType
+     */
+    public function getEndDateTime()
+    {
+        return $this->endDateTime;
+    }
+
+    /**
+     * Sets a new endDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\DateTimeType $endDateTime
+     * @return self
+     */
+    public function setEndDateTime(\horstoeko\zugferd\entities\basicwl\udt\DateTimeType $endDateTime)
+    {
+        $this->endDateTime = $endDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainEventType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainEventType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainEventType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing SupplyChainEventType
+ *
+ * XSD Type: SupplyChainEventType
+ */
+class SupplyChainEventType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\DateTimeType $occurrenceDateTime
+     */
+    private $occurrenceDateTime = null;
+
+    /**
+     * Gets as occurrenceDateTime
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\DateTimeType
+     */
+    public function getOccurrenceDateTime()
+    {
+        return $this->occurrenceDateTime;
+    }
+
+    /**
+     * Sets a new occurrenceDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\DateTimeType $occurrenceDateTime
+     * @return self
+     */
+    public function setOccurrenceDateTime(\horstoeko\zugferd\entities\basicwl\udt\DateTimeType $occurrenceDateTime)
+    {
+        $this->occurrenceDateTime = $occurrenceDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainTradeTransactionType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainTradeTransactionType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/SupplyChainTradeTransactionType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing SupplyChainTradeTransactionType
+ *
+ * XSD Type: SupplyChainTradeTransactionType
+ */
+class SupplyChainTradeTransactionType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement
+     */
+    private $applicableHeaderTradeAgreement = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery
+     */
+    private $applicableHeaderTradeDelivery = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement
+     */
+    private $applicableHeaderTradeSettlement = null;
+
+    /**
+     * Gets as applicableHeaderTradeAgreement
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\HeaderTradeAgreementType
+     */
+    public function getApplicableHeaderTradeAgreement()
+    {
+        return $this->applicableHeaderTradeAgreement;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeAgreement
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement
+     * @return self
+     */
+    public function setApplicableHeaderTradeAgreement(\horstoeko\zugferd\entities\basicwl\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement)
+    {
+        $this->applicableHeaderTradeAgreement = $applicableHeaderTradeAgreement;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableHeaderTradeDelivery
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\HeaderTradeDeliveryType
+     */
+    public function getApplicableHeaderTradeDelivery()
+    {
+        return $this->applicableHeaderTradeDelivery;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeDelivery
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery
+     * @return self
+     */
+    public function setApplicableHeaderTradeDelivery(\horstoeko\zugferd\entities\basicwl\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery)
+    {
+        $this->applicableHeaderTradeDelivery = $applicableHeaderTradeDelivery;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableHeaderTradeSettlement
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\HeaderTradeSettlementType
+     */
+    public function getApplicableHeaderTradeSettlement()
+    {
+        return $this->applicableHeaderTradeSettlement;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeSettlement
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement
+     * @return self
+     */
+    public function setApplicableHeaderTradeSettlement(\horstoeko\zugferd\entities\basicwl\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement)
+    {
+        $this->applicableHeaderTradeSettlement = $applicableHeaderTradeSettlement;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TaxRegistrationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TaxRegistrationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TaxRegistrationType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing TaxRegistrationType
+ *
+ * XSD Type: TaxRegistrationType
+ */
+class TaxRegistrationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\basicwl\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAccountingAccountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAccountingAccountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAccountingAccountType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing TradeAccountingAccountType
+ *
+ * XSD Type: TradeAccountingAccountType
+ */
+class TradeAccountingAccountType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\basicwl\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAddressType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAddressType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAddressType.php	(revision 8435)
@@ -0,0 +1,201 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing TradeAddressType
+ *
+ * XSD Type: TradeAddressType
+ */
+class TradeAddressType
+{
+
+    /**
+     * @var string $postcodeCode
+     */
+    private $postcodeCode = null;
+
+    /**
+     * @var string $lineOne
+     */
+    private $lineOne = null;
+
+    /**
+     * @var string $lineTwo
+     */
+    private $lineTwo = null;
+
+    /**
+     * @var string $lineThree
+     */
+    private $lineThree = null;
+
+    /**
+     * @var string $cityName
+     */
+    private $cityName = null;
+
+    /**
+     * @var string $countryID
+     */
+    private $countryID = null;
+
+    /**
+     * @var string $countrySubDivisionName
+     */
+    private $countrySubDivisionName = null;
+
+    /**
+     * Gets as postcodeCode
+     *
+     * @return string
+     */
+    public function getPostcodeCode()
+    {
+        return $this->postcodeCode;
+    }
+
+    /**
+     * Sets a new postcodeCode
+     *
+     * @param  string $postcodeCode
+     * @return self
+     */
+    public function setPostcodeCode($postcodeCode)
+    {
+        $this->postcodeCode = $postcodeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as lineOne
+     *
+     * @return string
+     */
+    public function getLineOne()
+    {
+        return $this->lineOne;
+    }
+
+    /**
+     * Sets a new lineOne
+     *
+     * @param  string $lineOne
+     * @return self
+     */
+    public function setLineOne($lineOne)
+    {
+        $this->lineOne = $lineOne;
+        return $this;
+    }
+
+    /**
+     * Gets as lineTwo
+     *
+     * @return string
+     */
+    public function getLineTwo()
+    {
+        return $this->lineTwo;
+    }
+
+    /**
+     * Sets a new lineTwo
+     *
+     * @param  string $lineTwo
+     * @return self
+     */
+    public function setLineTwo($lineTwo)
+    {
+        $this->lineTwo = $lineTwo;
+        return $this;
+    }
+
+    /**
+     * Gets as lineThree
+     *
+     * @return string
+     */
+    public function getLineThree()
+    {
+        return $this->lineThree;
+    }
+
+    /**
+     * Sets a new lineThree
+     *
+     * @param  string $lineThree
+     * @return self
+     */
+    public function setLineThree($lineThree)
+    {
+        $this->lineThree = $lineThree;
+        return $this;
+    }
+
+    /**
+     * Gets as cityName
+     *
+     * @return string
+     */
+    public function getCityName()
+    {
+        return $this->cityName;
+    }
+
+    /**
+     * Sets a new cityName
+     *
+     * @param  string $cityName
+     * @return self
+     */
+    public function setCityName($cityName)
+    {
+        $this->cityName = $cityName;
+        return $this;
+    }
+
+    /**
+     * Gets as countryID
+     *
+     * @return string
+     */
+    public function getCountryID()
+    {
+        return $this->countryID;
+    }
+
+    /**
+     * Sets a new countryID
+     *
+     * @param  string $countryID
+     * @return self
+     */
+    public function setCountryID($countryID)
+    {
+        $this->countryID = $countryID;
+        return $this;
+    }
+
+    /**
+     * Gets as countrySubDivisionName
+     *
+     * @return string
+     */
+    public function getCountrySubDivisionName()
+    {
+        return $this->countrySubDivisionName;
+    }
+
+    /**
+     * Sets a new countrySubDivisionName
+     *
+     * @param  string $countrySubDivisionName
+     * @return self
+     */
+    public function setCountrySubDivisionName($countrySubDivisionName)
+    {
+        $this->countrySubDivisionName = $countrySubDivisionName;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAllowanceChargeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAllowanceChargeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeAllowanceChargeType.php	(revision 8435)
@@ -0,0 +1,201 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing TradeAllowanceChargeType
+ *
+ * XSD Type: TradeAllowanceChargeType
+ */
+class TradeAllowanceChargeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IndicatorType $chargeIndicator
+     */
+    private $chargeIndicator = null;
+
+    /**
+     * @var float $calculationPercent
+     */
+    private $calculationPercent = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\AmountType $basisAmount
+     */
+    private $basisAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\AmountType $actualAmount
+     */
+    private $actualAmount = null;
+
+    /**
+     * @var string $reasonCode
+     */
+    private $reasonCode = null;
+
+    /**
+     * @var string $reason
+     */
+    private $reason = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TradeTaxType $categoryTradeTax
+     */
+    private $categoryTradeTax = null;
+
+    /**
+     * Gets as chargeIndicator
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IndicatorType
+     */
+    public function getChargeIndicator()
+    {
+        return $this->chargeIndicator;
+    }
+
+    /**
+     * Sets a new chargeIndicator
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IndicatorType $chargeIndicator
+     * @return self
+     */
+    public function setChargeIndicator(\horstoeko\zugferd\entities\basicwl\udt\IndicatorType $chargeIndicator)
+    {
+        $this->chargeIndicator = $chargeIndicator;
+        return $this;
+    }
+
+    /**
+     * Gets as calculationPercent
+     *
+     * @return float
+     */
+    public function getCalculationPercent()
+    {
+        return $this->calculationPercent;
+    }
+
+    /**
+     * Sets a new calculationPercent
+     *
+     * @param  float $calculationPercent
+     * @return self
+     */
+    public function setCalculationPercent($calculationPercent)
+    {
+        $this->calculationPercent = $calculationPercent;
+        return $this;
+    }
+
+    /**
+     * Gets as basisAmount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\AmountType
+     */
+    public function getBasisAmount()
+    {
+        return $this->basisAmount;
+    }
+
+    /**
+     * Sets a new basisAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\AmountType $basisAmount
+     * @return self
+     */
+    public function setBasisAmount(\horstoeko\zugferd\entities\basicwl\udt\AmountType $basisAmount)
+    {
+        $this->basisAmount = $basisAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as actualAmount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\AmountType
+     */
+    public function getActualAmount()
+    {
+        return $this->actualAmount;
+    }
+
+    /**
+     * Sets a new actualAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\AmountType $actualAmount
+     * @return self
+     */
+    public function setActualAmount(\horstoeko\zugferd\entities\basicwl\udt\AmountType $actualAmount)
+    {
+        $this->actualAmount = $actualAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as reasonCode
+     *
+     * @return string
+     */
+    public function getReasonCode()
+    {
+        return $this->reasonCode;
+    }
+
+    /**
+     * Sets a new reasonCode
+     *
+     * @param  string $reasonCode
+     * @return self
+     */
+    public function setReasonCode($reasonCode)
+    {
+        $this->reasonCode = $reasonCode;
+        return $this;
+    }
+
+    /**
+     * Gets as reason
+     *
+     * @return string
+     */
+    public function getReason()
+    {
+        return $this->reason;
+    }
+
+    /**
+     * Sets a new reason
+     *
+     * @param  string $reason
+     * @return self
+     */
+    public function setReason($reason)
+    {
+        $this->reason = $reason;
+        return $this;
+    }
+
+    /**
+     * Gets as categoryTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TradeTaxType
+     */
+    public function getCategoryTradeTax()
+    {
+        return $this->categoryTradeTax;
+    }
+
+    /**
+     * Sets a new categoryTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradeTaxType $categoryTradeTax
+     * @return self
+     */
+    public function setCategoryTradeTax(\horstoeko\zugferd\entities\basicwl\ram\TradeTaxType $categoryTradeTax)
+    {
+        $this->categoryTradeTax = $categoryTradeTax;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePartyType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePartyType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePartyType.php	(revision 8435)
@@ -0,0 +1,309 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing TradePartyType
+ *
+ * XSD Type: TradePartyType
+ */
+class TradePartyType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType[] $iD
+     */
+    private $iD = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType[] $globalID
+     */
+    private $globalID = [
+        
+    ];
+
+    /**
+     * @var string $name
+     */
+    private $name = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\LegalOrganizationType $specifiedLegalOrganization
+     */
+    private $specifiedLegalOrganization = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TradeAddressType $postalTradeAddress
+     */
+    private $postalTradeAddress = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\UniversalCommunicationType $uRIUniversalCommunication
+     */
+    private $uRIUniversalCommunication = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\TaxRegistrationType[] $specifiedTaxRegistration
+     */
+    private $specifiedTaxRegistration = [
+        
+    ];
+
+    /**
+     * Adds as iD
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $iD
+     */
+    public function addToID(\horstoeko\zugferd\entities\basicwl\udt\IDType $iD)
+    {
+        $this->iD[] = $iD;
+        return $this;
+    }
+
+    /**
+     * isset iD
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetID($index)
+    {
+        return isset($this->iD[$index]);
+    }
+
+    /**
+     * unset iD
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetID($index)
+    {
+        unset($this->iD[$index]);
+    }
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType[]
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType[] $iD
+     * @return self
+     */
+    public function setID(array $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Adds as globalID
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $globalID
+     */
+    public function addToGlobalID(\horstoeko\zugferd\entities\basicwl\udt\IDType $globalID)
+    {
+        $this->globalID[] = $globalID;
+        return $this;
+    }
+
+    /**
+     * isset globalID
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetGlobalID($index)
+    {
+        return isset($this->globalID[$index]);
+    }
+
+    /**
+     * unset globalID
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetGlobalID($index)
+    {
+        unset($this->globalID[$index]);
+    }
+
+    /**
+     * Gets as globalID
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType[]
+     */
+    public function getGlobalID()
+    {
+        return $this->globalID;
+    }
+
+    /**
+     * Sets a new globalID
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType[] $globalID
+     * @return self
+     */
+    public function setGlobalID(array $globalID)
+    {
+        $this->globalID = $globalID;
+        return $this;
+    }
+
+    /**
+     * Gets as name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLegalOrganization
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\LegalOrganizationType
+     */
+    public function getSpecifiedLegalOrganization()
+    {
+        return $this->specifiedLegalOrganization;
+    }
+
+    /**
+     * Sets a new specifiedLegalOrganization
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\LegalOrganizationType $specifiedLegalOrganization
+     * @return self
+     */
+    public function setSpecifiedLegalOrganization(\horstoeko\zugferd\entities\basicwl\ram\LegalOrganizationType $specifiedLegalOrganization)
+    {
+        $this->specifiedLegalOrganization = $specifiedLegalOrganization;
+        return $this;
+    }
+
+    /**
+     * Gets as postalTradeAddress
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TradeAddressType
+     */
+    public function getPostalTradeAddress()
+    {
+        return $this->postalTradeAddress;
+    }
+
+    /**
+     * Sets a new postalTradeAddress
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TradeAddressType $postalTradeAddress
+     * @return self
+     */
+    public function setPostalTradeAddress(\horstoeko\zugferd\entities\basicwl\ram\TradeAddressType $postalTradeAddress)
+    {
+        $this->postalTradeAddress = $postalTradeAddress;
+        return $this;
+    }
+
+    /**
+     * Gets as uRIUniversalCommunication
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\UniversalCommunicationType
+     */
+    public function getURIUniversalCommunication()
+    {
+        return $this->uRIUniversalCommunication;
+    }
+
+    /**
+     * Sets a new uRIUniversalCommunication
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\UniversalCommunicationType $uRIUniversalCommunication
+     * @return self
+     */
+    public function setURIUniversalCommunication(\horstoeko\zugferd\entities\basicwl\ram\UniversalCommunicationType $uRIUniversalCommunication)
+    {
+        $this->uRIUniversalCommunication = $uRIUniversalCommunication;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTaxRegistration
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TaxRegistrationType $specifiedTaxRegistration
+     */
+    public function addToSpecifiedTaxRegistration(\horstoeko\zugferd\entities\basicwl\ram\TaxRegistrationType $specifiedTaxRegistration)
+    {
+        $this->specifiedTaxRegistration[] = $specifiedTaxRegistration;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTaxRegistration
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTaxRegistration($index)
+    {
+        return isset($this->specifiedTaxRegistration[$index]);
+    }
+
+    /**
+     * unset specifiedTaxRegistration
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTaxRegistration($index)
+    {
+        unset($this->specifiedTaxRegistration[$index]);
+    }
+
+    /**
+     * Gets as specifiedTaxRegistration
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\TaxRegistrationType[]
+     */
+    public function getSpecifiedTaxRegistration()
+    {
+        return $this->specifiedTaxRegistration;
+    }
+
+    /**
+     * Sets a new specifiedTaxRegistration
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\TaxRegistrationType[] $specifiedTaxRegistration
+     * @return self
+     */
+    public function setSpecifiedTaxRegistration(array $specifiedTaxRegistration)
+    {
+        $this->specifiedTaxRegistration = $specifiedTaxRegistration;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePaymentTermsType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePaymentTermsType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradePaymentTermsType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing TradePaymentTermsType
+ *
+ * XSD Type: TradePaymentTermsType
+ */
+class TradePaymentTermsType
+{
+
+    /**
+     * @var string $description
+     */
+    private $description = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\DateTimeType $dueDateDateTime
+     */
+    private $dueDateDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType $directDebitMandateID
+     */
+    private $directDebitMandateID = null;
+
+    /**
+     * Gets as description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Sets a new description
+     *
+     * @param  string $description
+     * @return self
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Gets as dueDateDateTime
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\DateTimeType
+     */
+    public function getDueDateDateTime()
+    {
+        return $this->dueDateDateTime;
+    }
+
+    /**
+     * Sets a new dueDateDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\DateTimeType $dueDateDateTime
+     * @return self
+     */
+    public function setDueDateDateTime(\horstoeko\zugferd\entities\basicwl\udt\DateTimeType $dueDateDateTime)
+    {
+        $this->dueDateDateTime = $dueDateDateTime;
+        return $this;
+    }
+
+    /**
+     * Gets as directDebitMandateID
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType
+     */
+    public function getDirectDebitMandateID()
+    {
+        return $this->directDebitMandateID;
+    }
+
+    /**
+     * Sets a new directDebitMandateID
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $directDebitMandateID
+     * @return self
+     */
+    public function setDirectDebitMandateID(\horstoeko\zugferd\entities\basicwl\udt\IDType $directDebitMandateID)
+    {
+        $this->directDebitMandateID = $directDebitMandateID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementHeaderMonetarySummationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementHeaderMonetarySummationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementHeaderMonetarySummationType.php	(revision 8435)
@@ -0,0 +1,264 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing TradeSettlementHeaderMonetarySummationType
+ *
+ * XSD Type: TradeSettlementHeaderMonetarySummationType
+ */
+class TradeSettlementHeaderMonetarySummationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\AmountType $lineTotalAmount
+     */
+    private $lineTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\AmountType $chargeTotalAmount
+     */
+    private $chargeTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\AmountType $allowanceTotalAmount
+     */
+    private $allowanceTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\AmountType $taxBasisTotalAmount
+     */
+    private $taxBasisTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\AmountType[] $taxTotalAmount
+     */
+    private $taxTotalAmount = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\AmountType $grandTotalAmount
+     */
+    private $grandTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\AmountType $totalPrepaidAmount
+     */
+    private $totalPrepaidAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\AmountType $duePayableAmount
+     */
+    private $duePayableAmount = null;
+
+    /**
+     * Gets as lineTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\AmountType
+     */
+    public function getLineTotalAmount()
+    {
+        return $this->lineTotalAmount;
+    }
+
+    /**
+     * Sets a new lineTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\AmountType $lineTotalAmount
+     * @return self
+     */
+    public function setLineTotalAmount(\horstoeko\zugferd\entities\basicwl\udt\AmountType $lineTotalAmount)
+    {
+        $this->lineTotalAmount = $lineTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as chargeTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\AmountType
+     */
+    public function getChargeTotalAmount()
+    {
+        return $this->chargeTotalAmount;
+    }
+
+    /**
+     * Sets a new chargeTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\AmountType $chargeTotalAmount
+     * @return self
+     */
+    public function setChargeTotalAmount(\horstoeko\zugferd\entities\basicwl\udt\AmountType $chargeTotalAmount)
+    {
+        $this->chargeTotalAmount = $chargeTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as allowanceTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\AmountType
+     */
+    public function getAllowanceTotalAmount()
+    {
+        return $this->allowanceTotalAmount;
+    }
+
+    /**
+     * Sets a new allowanceTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\AmountType $allowanceTotalAmount
+     * @return self
+     */
+    public function setAllowanceTotalAmount(\horstoeko\zugferd\entities\basicwl\udt\AmountType $allowanceTotalAmount)
+    {
+        $this->allowanceTotalAmount = $allowanceTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as taxBasisTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\AmountType
+     */
+    public function getTaxBasisTotalAmount()
+    {
+        return $this->taxBasisTotalAmount;
+    }
+
+    /**
+     * Sets a new taxBasisTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\AmountType $taxBasisTotalAmount
+     * @return self
+     */
+    public function setTaxBasisTotalAmount(\horstoeko\zugferd\entities\basicwl\udt\AmountType $taxBasisTotalAmount)
+    {
+        $this->taxBasisTotalAmount = $taxBasisTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Adds as taxTotalAmount
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\AmountType $taxTotalAmount
+     */
+    public function addToTaxTotalAmount(\horstoeko\zugferd\entities\basicwl\udt\AmountType $taxTotalAmount)
+    {
+        $this->taxTotalAmount[] = $taxTotalAmount;
+        return $this;
+    }
+
+    /**
+     * isset taxTotalAmount
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetTaxTotalAmount($index)
+    {
+        return isset($this->taxTotalAmount[$index]);
+    }
+
+    /**
+     * unset taxTotalAmount
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetTaxTotalAmount($index)
+    {
+        unset($this->taxTotalAmount[$index]);
+    }
+
+    /**
+     * Gets as taxTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\AmountType[]
+     */
+    public function getTaxTotalAmount()
+    {
+        return $this->taxTotalAmount;
+    }
+
+    /**
+     * Sets a new taxTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\AmountType[] $taxTotalAmount
+     * @return self
+     */
+    public function setTaxTotalAmount(array $taxTotalAmount)
+    {
+        $this->taxTotalAmount = $taxTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as grandTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\AmountType
+     */
+    public function getGrandTotalAmount()
+    {
+        return $this->grandTotalAmount;
+    }
+
+    /**
+     * Sets a new grandTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\AmountType $grandTotalAmount
+     * @return self
+     */
+    public function setGrandTotalAmount(\horstoeko\zugferd\entities\basicwl\udt\AmountType $grandTotalAmount)
+    {
+        $this->grandTotalAmount = $grandTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as totalPrepaidAmount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\AmountType
+     */
+    public function getTotalPrepaidAmount()
+    {
+        return $this->totalPrepaidAmount;
+    }
+
+    /**
+     * Sets a new totalPrepaidAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\AmountType $totalPrepaidAmount
+     * @return self
+     */
+    public function setTotalPrepaidAmount(\horstoeko\zugferd\entities\basicwl\udt\AmountType $totalPrepaidAmount)
+    {
+        $this->totalPrepaidAmount = $totalPrepaidAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as duePayableAmount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\AmountType
+     */
+    public function getDuePayableAmount()
+    {
+        return $this->duePayableAmount;
+    }
+
+    /**
+     * Sets a new duePayableAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\AmountType $duePayableAmount
+     * @return self
+     */
+    public function setDuePayableAmount(\horstoeko\zugferd\entities\basicwl\udt\AmountType $duePayableAmount)
+    {
+        $this->duePayableAmount = $duePayableAmount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementPaymentMeansType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementPaymentMeansType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeSettlementPaymentMeansType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing TradeSettlementPaymentMeansType
+ *
+ * XSD Type: TradeSettlementPaymentMeansType
+ */
+class TradeSettlementPaymentMeansType
+{
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\DebtorFinancialAccountType $payerPartyDebtorFinancialAccount
+     */
+    private $payerPartyDebtorFinancialAccount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\CreditorFinancialAccountType $payeePartyCreditorFinancialAccount
+     */
+    private $payeePartyCreditorFinancialAccount = null;
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as payerPartyDebtorFinancialAccount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\DebtorFinancialAccountType
+     */
+    public function getPayerPartyDebtorFinancialAccount()
+    {
+        return $this->payerPartyDebtorFinancialAccount;
+    }
+
+    /**
+     * Sets a new payerPartyDebtorFinancialAccount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\DebtorFinancialAccountType $payerPartyDebtorFinancialAccount
+     * @return self
+     */
+    public function setPayerPartyDebtorFinancialAccount(\horstoeko\zugferd\entities\basicwl\ram\DebtorFinancialAccountType $payerPartyDebtorFinancialAccount)
+    {
+        $this->payerPartyDebtorFinancialAccount = $payerPartyDebtorFinancialAccount;
+        return $this;
+    }
+
+    /**
+     * Gets as payeePartyCreditorFinancialAccount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\CreditorFinancialAccountType
+     */
+    public function getPayeePartyCreditorFinancialAccount()
+    {
+        return $this->payeePartyCreditorFinancialAccount;
+    }
+
+    /**
+     * Sets a new payeePartyCreditorFinancialAccount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\CreditorFinancialAccountType $payeePartyCreditorFinancialAccount
+     * @return self
+     */
+    public function setPayeePartyCreditorFinancialAccount(\horstoeko\zugferd\entities\basicwl\ram\CreditorFinancialAccountType $payeePartyCreditorFinancialAccount)
+    {
+        $this->payeePartyCreditorFinancialAccount = $payeePartyCreditorFinancialAccount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeTaxType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeTaxType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/TradeTaxType.php	(revision 8435)
@@ -0,0 +1,228 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing TradeTaxType
+ *
+ * XSD Type: TradeTaxType
+ */
+class TradeTaxType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\AmountType $calculatedAmount
+     */
+    private $calculatedAmount = null;
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var string $exemptionReason
+     */
+    private $exemptionReason = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\AmountType $basisAmount
+     */
+    private $basisAmount = null;
+
+    /**
+     * @var string $categoryCode
+     */
+    private $categoryCode = null;
+
+    /**
+     * @var string $exemptionReasonCode
+     */
+    private $exemptionReasonCode = null;
+
+    /**
+     * @var string $dueDateTypeCode
+     */
+    private $dueDateTypeCode = null;
+
+    /**
+     * @var float $rateApplicablePercent
+     */
+    private $rateApplicablePercent = null;
+
+    /**
+     * Gets as calculatedAmount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\AmountType
+     */
+    public function getCalculatedAmount()
+    {
+        return $this->calculatedAmount;
+    }
+
+    /**
+     * Sets a new calculatedAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\AmountType $calculatedAmount
+     * @return self
+     */
+    public function setCalculatedAmount(\horstoeko\zugferd\entities\basicwl\udt\AmountType $calculatedAmount)
+    {
+        $this->calculatedAmount = $calculatedAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as exemptionReason
+     *
+     * @return string
+     */
+    public function getExemptionReason()
+    {
+        return $this->exemptionReason;
+    }
+
+    /**
+     * Sets a new exemptionReason
+     *
+     * @param  string $exemptionReason
+     * @return self
+     */
+    public function setExemptionReason($exemptionReason)
+    {
+        $this->exemptionReason = $exemptionReason;
+        return $this;
+    }
+
+    /**
+     * Gets as basisAmount
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\AmountType
+     */
+    public function getBasisAmount()
+    {
+        return $this->basisAmount;
+    }
+
+    /**
+     * Sets a new basisAmount
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\AmountType $basisAmount
+     * @return self
+     */
+    public function setBasisAmount(\horstoeko\zugferd\entities\basicwl\udt\AmountType $basisAmount)
+    {
+        $this->basisAmount = $basisAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as categoryCode
+     *
+     * @return string
+     */
+    public function getCategoryCode()
+    {
+        return $this->categoryCode;
+    }
+
+    /**
+     * Sets a new categoryCode
+     *
+     * @param  string $categoryCode
+     * @return self
+     */
+    public function setCategoryCode($categoryCode)
+    {
+        $this->categoryCode = $categoryCode;
+        return $this;
+    }
+
+    /**
+     * Gets as exemptionReasonCode
+     *
+     * @return string
+     */
+    public function getExemptionReasonCode()
+    {
+        return $this->exemptionReasonCode;
+    }
+
+    /**
+     * Sets a new exemptionReasonCode
+     *
+     * @param  string $exemptionReasonCode
+     * @return self
+     */
+    public function setExemptionReasonCode($exemptionReasonCode)
+    {
+        $this->exemptionReasonCode = $exemptionReasonCode;
+        return $this;
+    }
+
+    /**
+     * Gets as dueDateTypeCode
+     *
+     * @return string
+     */
+    public function getDueDateTypeCode()
+    {
+        return $this->dueDateTypeCode;
+    }
+
+    /**
+     * Sets a new dueDateTypeCode
+     *
+     * @param  string $dueDateTypeCode
+     * @return self
+     */
+    public function setDueDateTypeCode($dueDateTypeCode)
+    {
+        $this->dueDateTypeCode = $dueDateTypeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as rateApplicablePercent
+     *
+     * @return float
+     */
+    public function getRateApplicablePercent()
+    {
+        return $this->rateApplicablePercent;
+    }
+
+    /**
+     * Sets a new rateApplicablePercent
+     *
+     * @param  float $rateApplicablePercent
+     * @return self
+     */
+    public function setRateApplicablePercent($rateApplicablePercent)
+    {
+        $this->rateApplicablePercent = $rateApplicablePercent;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/UniversalCommunicationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/UniversalCommunicationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/ram/UniversalCommunicationType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\ram;
+
+/**
+ * Class representing UniversalCommunicationType
+ *
+ * XSD Type: UniversalCommunicationType
+ */
+class UniversalCommunicationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\IDType $uRIID
+     */
+    private $uRIID = null;
+
+    /**
+     * Gets as uRIID
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\IDType
+     */
+    public function getURIID()
+    {
+        return $this->uRIID;
+    }
+
+    /**
+     * Sets a new uRIID
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\IDType $uRIID
+     * @return self
+     */
+    public function setURIID(\horstoeko\zugferd\entities\basicwl\udt\IDType $uRIID)
+    {
+        $this->uRIID = $uRIID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/rsm/CrossIndustryInvoice.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/rsm/CrossIndustryInvoice.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/rsm/CrossIndustryInvoice.php	(revision 8435)
@@ -0,0 +1,12 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\rsm;
+
+/**
+ * Class representing CrossIndustryInvoice
+ */
+class CrossIndustryInvoice extends CrossIndustryInvoiceType
+{
+
+
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/rsm/CrossIndustryInvoiceType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/rsm/CrossIndustryInvoiceType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/rsm/CrossIndustryInvoiceType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\rsm;
+
+/**
+ * Class representing CrossIndustryInvoiceType
+ *
+ * XSD Type: CrossIndustryInvoiceType
+ */
+class CrossIndustryInvoiceType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentContextType $exchangedDocumentContext
+     */
+    private $exchangedDocumentContext = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentType $exchangedDocument
+     */
+    private $exchangedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction
+     */
+    private $supplyChainTradeTransaction = null;
+
+    /**
+     * Gets as exchangedDocumentContext
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentContextType
+     */
+    public function getExchangedDocumentContext()
+    {
+        return $this->exchangedDocumentContext;
+    }
+
+    /**
+     * Sets a new exchangedDocumentContext
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentContextType $exchangedDocumentContext
+     * @return self
+     */
+    public function setExchangedDocumentContext(\horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentContextType $exchangedDocumentContext)
+    {
+        $this->exchangedDocumentContext = $exchangedDocumentContext;
+        return $this;
+    }
+
+    /**
+     * Gets as exchangedDocument
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentType
+     */
+    public function getExchangedDocument()
+    {
+        return $this->exchangedDocument;
+    }
+
+    /**
+     * Sets a new exchangedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentType $exchangedDocument
+     * @return self
+     */
+    public function setExchangedDocument(\horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentType $exchangedDocument)
+    {
+        $this->exchangedDocument = $exchangedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as supplyChainTradeTransaction
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\ram\SupplyChainTradeTransactionType
+     */
+    public function getSupplyChainTradeTransaction()
+    {
+        return $this->supplyChainTradeTransaction;
+    }
+
+    /**
+     * Sets a new supplyChainTradeTransaction
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction
+     * @return self
+     */
+    public function setSupplyChainTradeTransaction(\horstoeko\zugferd\entities\basicwl\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction)
+    {
+        $this->supplyChainTradeTransaction = $supplyChainTradeTransaction;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/AmountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/AmountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/AmountType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\udt;
+
+/**
+ * Class representing AmountType
+ *
+ * XSD Type: AmountType
+ */
+class AmountType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $currencyID
+     */
+    private $currencyID = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as currencyID
+     *
+     * @return string
+     */
+    public function getCurrencyID()
+    {
+        return $this->currencyID;
+    }
+
+    /**
+     * Sets a new currencyID
+     *
+     * @param  string $currencyID
+     * @return self
+     */
+    public function setCurrencyID($currencyID)
+    {
+        $this->currencyID = $currencyID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/CodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/CodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/CodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\udt;
+
+/**
+ * Class representing CodeType
+ *
+ * XSD Type: CodeType
+ */
+class CodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\udt;
+
+/**
+ * Class representing DateTimeType
+ *
+ * XSD Type: DateTimeType
+ */
+class DateTimeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\basicwl\udt\DateTimeType\DateTimeStringAType $dateTimeString
+     */
+    private $dateTimeString = null;
+
+    /**
+     * Gets as dateTimeString
+     *
+     * @return \horstoeko\zugferd\entities\basicwl\udt\DateTimeType\DateTimeStringAType
+     */
+    public function getDateTimeString()
+    {
+        return $this->dateTimeString;
+    }
+
+    /**
+     * Sets a new dateTimeString
+     *
+     * @param  \horstoeko\zugferd\entities\basicwl\udt\DateTimeType\DateTimeStringAType $dateTimeString
+     * @return self
+     */
+    public function setDateTimeString(\horstoeko\zugferd\entities\basicwl\udt\DateTimeType\DateTimeStringAType $dateTimeString)
+    {
+        $this->dateTimeString = $dateTimeString;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType/DateTimeStringAType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType/DateTimeStringAType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/DateTimeType/DateTimeStringAType.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\udt\DateTimeType;
+
+/**
+ * Class representing DateTimeStringAType
+ */
+class DateTimeStringAType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $format
+     */
+    private $format = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as format
+     *
+     * @return string
+     */
+    public function getFormat()
+    {
+        return $this->format;
+    }
+
+    /**
+     * Sets a new format
+     *
+     * @param  string $format
+     * @return self
+     */
+    public function setFormat($format)
+    {
+        $this->format = $format;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/IDType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/IDType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/IDType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\udt;
+
+/**
+ * Class representing IDType
+ *
+ * XSD Type: IDType
+ */
+class IDType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $schemeID
+     */
+    private $schemeID = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as schemeID
+     *
+     * @return string
+     */
+    public function getSchemeID()
+    {
+        return $this->schemeID;
+    }
+
+    /**
+     * Sets a new schemeID
+     *
+     * @param  string $schemeID
+     * @return self
+     */
+    public function setSchemeID($schemeID)
+    {
+        $this->schemeID = $schemeID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/IndicatorType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/IndicatorType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/IndicatorType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\udt;
+
+/**
+ * Class representing IndicatorType
+ *
+ * XSD Type: IndicatorType
+ */
+class IndicatorType
+{
+
+    /**
+     * @var bool $indicator
+     */
+    private $indicator = null;
+
+    /**
+     * Gets as indicator
+     *
+     * @return bool
+     */
+    public function getIndicator()
+    {
+        return $this->indicator;
+    }
+
+    /**
+     * Sets a new indicator
+     *
+     * @param  bool $indicator
+     * @return self
+     */
+    public function setIndicator($indicator)
+    {
+        $this->indicator = $indicator;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/PercentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/PercentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/PercentType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\udt;
+
+/**
+ * Class representing PercentType
+ *
+ * XSD Type: PercentType
+ */
+class PercentType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/TextType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/TextType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/basicwl/udt/TextType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\basicwl\udt;
+
+/**
+ * Class representing TextType
+ *
+ * XSD Type: TextType
+ */
+class TextType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/AllowanceChargeReasonCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/AllowanceChargeReasonCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/AllowanceChargeReasonCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\qdt;
+
+/**
+ * Class representing AllowanceChargeReasonCodeType
+ *
+ * XSD Type: AllowanceChargeReasonCodeType
+ */
+class AllowanceChargeReasonCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/CountryIDType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/CountryIDType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/CountryIDType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\qdt;
+
+/**
+ * Class representing CountryIDType
+ *
+ * XSD Type: CountryIDType
+ */
+class CountryIDType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/CurrencyCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/CurrencyCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/CurrencyCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\qdt;
+
+/**
+ * Class representing CurrencyCodeType
+ *
+ * XSD Type: CurrencyCodeType
+ */
+class CurrencyCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/DocumentCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/DocumentCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/DocumentCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\qdt;
+
+/**
+ * Class representing DocumentCodeType
+ *
+ * XSD Type: DocumentCodeType
+ */
+class DocumentCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\qdt;
+
+/**
+ * Class representing FormattedDateTimeType
+ *
+ * XSD Type: FormattedDateTimeType
+ */
+class FormattedDateTimeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType\DateTimeStringAType $dateTimeString
+     */
+    private $dateTimeString = null;
+
+    /**
+     * Gets as dateTimeString
+     *
+     * @return \horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType\DateTimeStringAType
+     */
+    public function getDateTimeString()
+    {
+        return $this->dateTimeString;
+    }
+
+    /**
+     * Sets a new dateTimeString
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType\DateTimeStringAType $dateTimeString
+     * @return self
+     */
+    public function setDateTimeString(\horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType\DateTimeStringAType $dateTimeString)
+    {
+        $this->dateTimeString = $dateTimeString;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType/DateTimeStringAType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType/DateTimeStringAType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/FormattedDateTimeType/DateTimeStringAType.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType;
+
+/**
+ * Class representing DateTimeStringAType
+ */
+class DateTimeStringAType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $format
+     */
+    private $format = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as format
+     *
+     * @return string
+     */
+    public function getFormat()
+    {
+        return $this->format;
+    }
+
+    /**
+     * Sets a new format
+     *
+     * @param  string $format
+     * @return self
+     */
+    public function setFormat($format)
+    {
+        $this->format = $format;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/PaymentMeansCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/PaymentMeansCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/PaymentMeansCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\qdt;
+
+/**
+ * Class representing PaymentMeansCodeType
+ *
+ * XSD Type: PaymentMeansCodeType
+ */
+class PaymentMeansCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/ReferenceCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/ReferenceCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/ReferenceCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\qdt;
+
+/**
+ * Class representing ReferenceCodeType
+ *
+ * XSD Type: ReferenceCodeType
+ */
+class ReferenceCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxCategoryCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxCategoryCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxCategoryCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\qdt;
+
+/**
+ * Class representing TaxCategoryCodeType
+ *
+ * XSD Type: TaxCategoryCodeType
+ */
+class TaxCategoryCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxTypeCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxTypeCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TaxTypeCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\qdt;
+
+/**
+ * Class representing TaxTypeCodeType
+ *
+ * XSD Type: TaxTypeCodeType
+ */
+class TaxTypeCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TimeReferenceCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TimeReferenceCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/qdt/TimeReferenceCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\qdt;
+
+/**
+ * Class representing TimeReferenceCodeType
+ *
+ * XSD Type: TimeReferenceCodeType
+ */
+class TimeReferenceCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialAccountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialAccountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialAccountType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing CreditorFinancialAccountType
+ *
+ * XSD Type: CreditorFinancialAccountType
+ */
+class CreditorFinancialAccountType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $iBANID
+     */
+    private $iBANID = null;
+
+    /**
+     * @var string $accountName
+     */
+    private $accountName = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $proprietaryID
+     */
+    private $proprietaryID = null;
+
+    /**
+     * Gets as iBANID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getIBANID()
+    {
+        return $this->iBANID;
+    }
+
+    /**
+     * Sets a new iBANID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $iBANID
+     * @return self
+     */
+    public function setIBANID(\horstoeko\zugferd\entities\en16931\udt\IDType $iBANID)
+    {
+        $this->iBANID = $iBANID;
+        return $this;
+    }
+
+    /**
+     * Gets as accountName
+     *
+     * @return string
+     */
+    public function getAccountName()
+    {
+        return $this->accountName;
+    }
+
+    /**
+     * Sets a new accountName
+     *
+     * @param  string $accountName
+     * @return self
+     */
+    public function setAccountName($accountName)
+    {
+        $this->accountName = $accountName;
+        return $this;
+    }
+
+    /**
+     * Gets as proprietaryID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getProprietaryID()
+    {
+        return $this->proprietaryID;
+    }
+
+    /**
+     * Sets a new proprietaryID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $proprietaryID
+     * @return self
+     */
+    public function setProprietaryID(\horstoeko\zugferd\entities\en16931\udt\IDType $proprietaryID)
+    {
+        $this->proprietaryID = $proprietaryID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialInstitutionType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialInstitutionType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/CreditorFinancialInstitutionType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing CreditorFinancialInstitutionType
+ *
+ * XSD Type: CreditorFinancialInstitutionType
+ */
+class CreditorFinancialInstitutionType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $bICID
+     */
+    private $bICID = null;
+
+    /**
+     * Gets as bICID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getBICID()
+    {
+        return $this->bICID;
+    }
+
+    /**
+     * Sets a new bICID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $bICID
+     * @return self
+     */
+    public function setBICID(\horstoeko\zugferd\entities\en16931\udt\IDType $bICID)
+    {
+        $this->bICID = $bICID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/DebtorFinancialAccountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/DebtorFinancialAccountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/DebtorFinancialAccountType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing DebtorFinancialAccountType
+ *
+ * XSD Type: DebtorFinancialAccountType
+ */
+class DebtorFinancialAccountType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $iBANID
+     */
+    private $iBANID = null;
+
+    /**
+     * Gets as iBANID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getIBANID()
+    {
+        return $this->iBANID;
+    }
+
+    /**
+     * Sets a new iBANID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $iBANID
+     * @return self
+     */
+    public function setIBANID(\horstoeko\zugferd\entities\en16931\udt\IDType $iBANID)
+    {
+        $this->iBANID = $iBANID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentContextParameterType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentContextParameterType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentContextParameterType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing DocumentContextParameterType
+ *
+ * XSD Type: DocumentContextParameterType
+ */
+class DocumentContextParameterType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\en16931\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentLineDocumentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentLineDocumentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/DocumentLineDocumentType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing DocumentLineDocumentType
+ *
+ * XSD Type: DocumentLineDocumentType
+ */
+class DocumentLineDocumentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $lineID
+     */
+    private $lineID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\NoteType $includedNote
+     */
+    private $includedNote = null;
+
+    /**
+     * Gets as lineID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getLineID()
+    {
+        return $this->lineID;
+    }
+
+    /**
+     * Sets a new lineID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $lineID
+     * @return self
+     */
+    public function setLineID(\horstoeko\zugferd\entities\en16931\udt\IDType $lineID)
+    {
+        $this->lineID = $lineID;
+        return $this;
+    }
+
+    /**
+     * Gets as includedNote
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\NoteType
+     */
+    public function getIncludedNote()
+    {
+        return $this->includedNote;
+    }
+
+    /**
+     * Sets a new includedNote
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\NoteType $includedNote
+     * @return self
+     */
+    public function setIncludedNote(\horstoeko\zugferd\entities\en16931\ram\NoteType $includedNote)
+    {
+        $this->includedNote = $includedNote;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentContextType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentContextType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentContextType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing ExchangedDocumentContextType
+ *
+ * XSD Type: ExchangedDocumentContextType
+ */
+class ExchangedDocumentContextType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter
+     */
+    private $businessProcessSpecifiedDocumentContextParameter = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter
+     */
+    private $guidelineSpecifiedDocumentContextParameter = null;
+
+    /**
+     * Gets as businessProcessSpecifiedDocumentContextParameter
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\DocumentContextParameterType
+     */
+    public function getBusinessProcessSpecifiedDocumentContextParameter()
+    {
+        return $this->businessProcessSpecifiedDocumentContextParameter;
+    }
+
+    /**
+     * Sets a new businessProcessSpecifiedDocumentContextParameter
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter
+     * @return self
+     */
+    public function setBusinessProcessSpecifiedDocumentContextParameter(\horstoeko\zugferd\entities\en16931\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter)
+    {
+        $this->businessProcessSpecifiedDocumentContextParameter = $businessProcessSpecifiedDocumentContextParameter;
+        return $this;
+    }
+
+    /**
+     * Gets as guidelineSpecifiedDocumentContextParameter
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\DocumentContextParameterType
+     */
+    public function getGuidelineSpecifiedDocumentContextParameter()
+    {
+        return $this->guidelineSpecifiedDocumentContextParameter;
+    }
+
+    /**
+     * Sets a new guidelineSpecifiedDocumentContextParameter
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter
+     * @return self
+     */
+    public function setGuidelineSpecifiedDocumentContextParameter(\horstoeko\zugferd\entities\en16931\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter)
+    {
+        $this->guidelineSpecifiedDocumentContextParameter = $guidelineSpecifiedDocumentContextParameter;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ExchangedDocumentType.php	(revision 8435)
@@ -0,0 +1,156 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing ExchangedDocumentType
+ *
+ * XSD Type: ExchangedDocumentType
+ */
+class ExchangedDocumentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\DateTimeType $issueDateTime
+     */
+    private $issueDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\NoteType[] $includedNote
+     */
+    private $includedNote = [
+        
+    ];
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\en16931\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as issueDateTime
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\DateTimeType
+     */
+    public function getIssueDateTime()
+    {
+        return $this->issueDateTime;
+    }
+
+    /**
+     * Sets a new issueDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\DateTimeType $issueDateTime
+     * @return self
+     */
+    public function setIssueDateTime(\horstoeko\zugferd\entities\en16931\udt\DateTimeType $issueDateTime)
+    {
+        $this->issueDateTime = $issueDateTime;
+        return $this;
+    }
+
+    /**
+     * Adds as includedNote
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\en16931\ram\NoteType $includedNote
+     */
+    public function addToIncludedNote(\horstoeko\zugferd\entities\en16931\ram\NoteType $includedNote)
+    {
+        $this->includedNote[] = $includedNote;
+        return $this;
+    }
+
+    /**
+     * isset includedNote
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetIncludedNote($index)
+    {
+        return isset($this->includedNote[$index]);
+    }
+
+    /**
+     * unset includedNote
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetIncludedNote($index)
+    {
+        unset($this->includedNote[$index]);
+    }
+
+    /**
+     * Gets as includedNote
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\NoteType[]
+     */
+    public function getIncludedNote()
+    {
+        return $this->includedNote;
+    }
+
+    /**
+     * Sets a new includedNote
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\NoteType[] $includedNote
+     * @return self
+     */
+    public function setIncludedNote(array $includedNote)
+    {
+        $this->includedNote = $includedNote;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeAgreementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeAgreementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeAgreementType.php	(revision 8435)
@@ -0,0 +1,291 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing HeaderTradeAgreementType
+ *
+ * XSD Type: HeaderTradeAgreementType
+ */
+class HeaderTradeAgreementType
+{
+
+    /**
+     * @var string $buyerReference
+     */
+    private $buyerReference = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradePartyType $sellerTradeParty
+     */
+    private $sellerTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradePartyType $buyerTradeParty
+     */
+    private $buyerTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradePartyType $sellerTaxRepresentativeTradeParty
+     */
+    private $sellerTaxRepresentativeTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $sellerOrderReferencedDocument
+     */
+    private $sellerOrderReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     */
+    private $buyerOrderReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $contractReferencedDocument
+     */
+    private $contractReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType[] $additionalReferencedDocument
+     */
+    private $additionalReferencedDocument = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ProcuringProjectType $specifiedProcuringProject
+     */
+    private $specifiedProcuringProject = null;
+
+    /**
+     * Gets as buyerReference
+     *
+     * @return string
+     */
+    public function getBuyerReference()
+    {
+        return $this->buyerReference;
+    }
+
+    /**
+     * Sets a new buyerReference
+     *
+     * @param  string $buyerReference
+     * @return self
+     */
+    public function setBuyerReference($buyerReference)
+    {
+        $this->buyerReference = $buyerReference;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradePartyType
+     */
+    public function getSellerTradeParty()
+    {
+        return $this->sellerTradeParty;
+    }
+
+    /**
+     * Sets a new sellerTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradePartyType $sellerTradeParty
+     * @return self
+     */
+    public function setSellerTradeParty(\horstoeko\zugferd\entities\en16931\ram\TradePartyType $sellerTradeParty)
+    {
+        $this->sellerTradeParty = $sellerTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradePartyType
+     */
+    public function getBuyerTradeParty()
+    {
+        return $this->buyerTradeParty;
+    }
+
+    /**
+     * Sets a new buyerTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradePartyType $buyerTradeParty
+     * @return self
+     */
+    public function setBuyerTradeParty(\horstoeko\zugferd\entities\en16931\ram\TradePartyType $buyerTradeParty)
+    {
+        $this->buyerTradeParty = $buyerTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerTaxRepresentativeTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradePartyType
+     */
+    public function getSellerTaxRepresentativeTradeParty()
+    {
+        return $this->sellerTaxRepresentativeTradeParty;
+    }
+
+    /**
+     * Sets a new sellerTaxRepresentativeTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradePartyType $sellerTaxRepresentativeTradeParty
+     * @return self
+     */
+    public function setSellerTaxRepresentativeTradeParty(\horstoeko\zugferd\entities\en16931\ram\TradePartyType $sellerTaxRepresentativeTradeParty)
+    {
+        $this->sellerTaxRepresentativeTradeParty = $sellerTaxRepresentativeTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerOrderReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+     */
+    public function getSellerOrderReferencedDocument()
+    {
+        return $this->sellerOrderReferencedDocument;
+    }
+
+    /**
+     * Sets a new sellerOrderReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $sellerOrderReferencedDocument
+     * @return self
+     */
+    public function setSellerOrderReferencedDocument(\horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $sellerOrderReferencedDocument)
+    {
+        $this->sellerOrderReferencedDocument = $sellerOrderReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerOrderReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+     */
+    public function getBuyerOrderReferencedDocument()
+    {
+        return $this->buyerOrderReferencedDocument;
+    }
+
+    /**
+     * Sets a new buyerOrderReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     * @return self
+     */
+    public function setBuyerOrderReferencedDocument(\horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $buyerOrderReferencedDocument)
+    {
+        $this->buyerOrderReferencedDocument = $buyerOrderReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as contractReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+     */
+    public function getContractReferencedDocument()
+    {
+        return $this->contractReferencedDocument;
+    }
+
+    /**
+     * Sets a new contractReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $contractReferencedDocument
+     * @return self
+     */
+    public function setContractReferencedDocument(\horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $contractReferencedDocument)
+    {
+        $this->contractReferencedDocument = $contractReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Adds as additionalReferencedDocument
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $additionalReferencedDocument
+     */
+    public function addToAdditionalReferencedDocument(\horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $additionalReferencedDocument)
+    {
+        $this->additionalReferencedDocument[] = $additionalReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * isset additionalReferencedDocument
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetAdditionalReferencedDocument($index)
+    {
+        return isset($this->additionalReferencedDocument[$index]);
+    }
+
+    /**
+     * unset additionalReferencedDocument
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetAdditionalReferencedDocument($index)
+    {
+        unset($this->additionalReferencedDocument[$index]);
+    }
+
+    /**
+     * Gets as additionalReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType[]
+     */
+    public function getAdditionalReferencedDocument()
+    {
+        return $this->additionalReferencedDocument;
+    }
+
+    /**
+     * Sets a new additionalReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType[] $additionalReferencedDocument
+     * @return self
+     */
+    public function setAdditionalReferencedDocument(array $additionalReferencedDocument)
+    {
+        $this->additionalReferencedDocument = $additionalReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedProcuringProject
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ProcuringProjectType
+     */
+    public function getSpecifiedProcuringProject()
+    {
+        return $this->specifiedProcuringProject;
+    }
+
+    /**
+     * Sets a new specifiedProcuringProject
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ProcuringProjectType $specifiedProcuringProject
+     * @return self
+     */
+    public function setSpecifiedProcuringProject(\horstoeko\zugferd\entities\en16931\ram\ProcuringProjectType $specifiedProcuringProject)
+    {
+        $this->specifiedProcuringProject = $specifiedProcuringProject;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeDeliveryType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeDeliveryType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeDeliveryType.php	(revision 8435)
@@ -0,0 +1,120 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing HeaderTradeDeliveryType
+ *
+ * XSD Type: HeaderTradeDeliveryType
+ */
+class HeaderTradeDeliveryType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradePartyType $shipToTradeParty
+     */
+    private $shipToTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\SupplyChainEventType $actualDeliverySupplyChainEvent
+     */
+    private $actualDeliverySupplyChainEvent = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $despatchAdviceReferencedDocument
+     */
+    private $despatchAdviceReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $receivingAdviceReferencedDocument
+     */
+    private $receivingAdviceReferencedDocument = null;
+
+    /**
+     * Gets as shipToTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradePartyType
+     */
+    public function getShipToTradeParty()
+    {
+        return $this->shipToTradeParty;
+    }
+
+    /**
+     * Sets a new shipToTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradePartyType $shipToTradeParty
+     * @return self
+     */
+    public function setShipToTradeParty(\horstoeko\zugferd\entities\en16931\ram\TradePartyType $shipToTradeParty)
+    {
+        $this->shipToTradeParty = $shipToTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as actualDeliverySupplyChainEvent
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\SupplyChainEventType
+     */
+    public function getActualDeliverySupplyChainEvent()
+    {
+        return $this->actualDeliverySupplyChainEvent;
+    }
+
+    /**
+     * Sets a new actualDeliverySupplyChainEvent
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\SupplyChainEventType $actualDeliverySupplyChainEvent
+     * @return self
+     */
+    public function setActualDeliverySupplyChainEvent(\horstoeko\zugferd\entities\en16931\ram\SupplyChainEventType $actualDeliverySupplyChainEvent)
+    {
+        $this->actualDeliverySupplyChainEvent = $actualDeliverySupplyChainEvent;
+        return $this;
+    }
+
+    /**
+     * Gets as despatchAdviceReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+     */
+    public function getDespatchAdviceReferencedDocument()
+    {
+        return $this->despatchAdviceReferencedDocument;
+    }
+
+    /**
+     * Sets a new despatchAdviceReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $despatchAdviceReferencedDocument
+     * @return self
+     */
+    public function setDespatchAdviceReferencedDocument(\horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $despatchAdviceReferencedDocument)
+    {
+        $this->despatchAdviceReferencedDocument = $despatchAdviceReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as receivingAdviceReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+     */
+    public function getReceivingAdviceReferencedDocument()
+    {
+        return $this->receivingAdviceReferencedDocument;
+    }
+
+    /**
+     * Sets a new receivingAdviceReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $receivingAdviceReferencedDocument
+     * @return self
+     */
+    public function setReceivingAdviceReferencedDocument(\horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $receivingAdviceReferencedDocument)
+    {
+        $this->receivingAdviceReferencedDocument = $receivingAdviceReferencedDocument;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeSettlementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeSettlementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/HeaderTradeSettlementType.php	(revision 8435)
@@ -0,0 +1,435 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing HeaderTradeSettlementType
+ *
+ * XSD Type: HeaderTradeSettlementType
+ */
+class HeaderTradeSettlementType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $creditorReferenceID
+     */
+    private $creditorReferenceID = null;
+
+    /**
+     * @var string $paymentReference
+     */
+    private $paymentReference = null;
+
+    /**
+     * @var string $taxCurrencyCode
+     */
+    private $taxCurrencyCode = null;
+
+    /**
+     * @var string $invoiceCurrencyCode
+     */
+    private $invoiceCurrencyCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradePartyType $payeeTradeParty
+     */
+    private $payeeTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans
+     */
+    private $specifiedTradeSettlementPaymentMeans = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeTaxType[] $applicableTradeTax
+     */
+    private $applicableTradeTax = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     */
+    private $billingSpecifiedPeriod = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     */
+    private $specifiedTradeAllowanceCharge = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradePaymentTermsType $specifiedTradePaymentTerms
+     */
+    private $specifiedTradePaymentTerms = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation
+     */
+    private $specifiedTradeSettlementHeaderMonetarySummation = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $invoiceReferencedDocument
+     */
+    private $invoiceReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount
+     */
+    private $receivableSpecifiedTradeAccountingAccount = null;
+
+    /**
+     * Gets as creditorReferenceID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getCreditorReferenceID()
+    {
+        return $this->creditorReferenceID;
+    }
+
+    /**
+     * Sets a new creditorReferenceID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $creditorReferenceID
+     * @return self
+     */
+    public function setCreditorReferenceID(\horstoeko\zugferd\entities\en16931\udt\IDType $creditorReferenceID)
+    {
+        $this->creditorReferenceID = $creditorReferenceID;
+        return $this;
+    }
+
+    /**
+     * Gets as paymentReference
+     *
+     * @return string
+     */
+    public function getPaymentReference()
+    {
+        return $this->paymentReference;
+    }
+
+    /**
+     * Sets a new paymentReference
+     *
+     * @param  string $paymentReference
+     * @return self
+     */
+    public function setPaymentReference($paymentReference)
+    {
+        $this->paymentReference = $paymentReference;
+        return $this;
+    }
+
+    /**
+     * Gets as taxCurrencyCode
+     *
+     * @return string
+     */
+    public function getTaxCurrencyCode()
+    {
+        return $this->taxCurrencyCode;
+    }
+
+    /**
+     * Sets a new taxCurrencyCode
+     *
+     * @param  string $taxCurrencyCode
+     * @return self
+     */
+    public function setTaxCurrencyCode($taxCurrencyCode)
+    {
+        $this->taxCurrencyCode = $taxCurrencyCode;
+        return $this;
+    }
+
+    /**
+     * Gets as invoiceCurrencyCode
+     *
+     * @return string
+     */
+    public function getInvoiceCurrencyCode()
+    {
+        return $this->invoiceCurrencyCode;
+    }
+
+    /**
+     * Sets a new invoiceCurrencyCode
+     *
+     * @param  string $invoiceCurrencyCode
+     * @return self
+     */
+    public function setInvoiceCurrencyCode($invoiceCurrencyCode)
+    {
+        $this->invoiceCurrencyCode = $invoiceCurrencyCode;
+        return $this;
+    }
+
+    /**
+     * Gets as payeeTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradePartyType
+     */
+    public function getPayeeTradeParty()
+    {
+        return $this->payeeTradeParty;
+    }
+
+    /**
+     * Sets a new payeeTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradePartyType $payeeTradeParty
+     * @return self
+     */
+    public function setPayeeTradeParty(\horstoeko\zugferd\entities\en16931\ram\TradePartyType $payeeTradeParty)
+    {
+        $this->payeeTradeParty = $payeeTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeSettlementPaymentMeans
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeSettlementPaymentMeansType
+     */
+    public function getSpecifiedTradeSettlementPaymentMeans()
+    {
+        return $this->specifiedTradeSettlementPaymentMeans;
+    }
+
+    /**
+     * Sets a new specifiedTradeSettlementPaymentMeans
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans
+     * @return self
+     */
+    public function setSpecifiedTradeSettlementPaymentMeans(\horstoeko\zugferd\entities\en16931\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans)
+    {
+        $this->specifiedTradeSettlementPaymentMeans = $specifiedTradeSettlementPaymentMeans;
+        return $this;
+    }
+
+    /**
+     * Adds as applicableTradeTax
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeTaxType $applicableTradeTax
+     */
+    public function addToApplicableTradeTax(\horstoeko\zugferd\entities\en16931\ram\TradeTaxType $applicableTradeTax)
+    {
+        $this->applicableTradeTax[] = $applicableTradeTax;
+        return $this;
+    }
+
+    /**
+     * isset applicableTradeTax
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetApplicableTradeTax($index)
+    {
+        return isset($this->applicableTradeTax[$index]);
+    }
+
+    /**
+     * unset applicableTradeTax
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetApplicableTradeTax($index)
+    {
+        unset($this->applicableTradeTax[$index]);
+    }
+
+    /**
+     * Gets as applicableTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeTaxType[]
+     */
+    public function getApplicableTradeTax()
+    {
+        return $this->applicableTradeTax;
+    }
+
+    /**
+     * Sets a new applicableTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeTaxType[] $applicableTradeTax
+     * @return self
+     */
+    public function setApplicableTradeTax(array $applicableTradeTax)
+    {
+        $this->applicableTradeTax = $applicableTradeTax;
+        return $this;
+    }
+
+    /**
+     * Gets as billingSpecifiedPeriod
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType
+     */
+    public function getBillingSpecifiedPeriod()
+    {
+        return $this->billingSpecifiedPeriod;
+    }
+
+    /**
+     * Sets a new billingSpecifiedPeriod
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     * @return self
+     */
+    public function setBillingSpecifiedPeriod(\horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType $billingSpecifiedPeriod)
+    {
+        $this->billingSpecifiedPeriod = $billingSpecifiedPeriod;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTradeAllowanceCharge
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge
+     */
+    public function addToSpecifiedTradeAllowanceCharge(\horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge[] = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTradeAllowanceCharge($index)
+    {
+        return isset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * unset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTradeAllowanceCharge($index)
+    {
+        unset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * Gets as specifiedTradeAllowanceCharge
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType[]
+     */
+    public function getSpecifiedTradeAllowanceCharge()
+    {
+        return $this->specifiedTradeAllowanceCharge;
+    }
+
+    /**
+     * Sets a new specifiedTradeAllowanceCharge
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     * @return self
+     */
+    public function setSpecifiedTradeAllowanceCharge(array $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradePaymentTerms
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradePaymentTermsType
+     */
+    public function getSpecifiedTradePaymentTerms()
+    {
+        return $this->specifiedTradePaymentTerms;
+    }
+
+    /**
+     * Sets a new specifiedTradePaymentTerms
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradePaymentTermsType $specifiedTradePaymentTerms
+     * @return self
+     */
+    public function setSpecifiedTradePaymentTerms(\horstoeko\zugferd\entities\en16931\ram\TradePaymentTermsType $specifiedTradePaymentTerms)
+    {
+        $this->specifiedTradePaymentTerms = $specifiedTradePaymentTerms;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeSettlementHeaderMonetarySummation
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeSettlementHeaderMonetarySummationType
+     */
+    public function getSpecifiedTradeSettlementHeaderMonetarySummation()
+    {
+        return $this->specifiedTradeSettlementHeaderMonetarySummation;
+    }
+
+    /**
+     * Sets a new specifiedTradeSettlementHeaderMonetarySummation
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation
+     * @return self
+     */
+    public function setSpecifiedTradeSettlementHeaderMonetarySummation(\horstoeko\zugferd\entities\en16931\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation)
+    {
+        $this->specifiedTradeSettlementHeaderMonetarySummation = $specifiedTradeSettlementHeaderMonetarySummation;
+        return $this;
+    }
+
+    /**
+     * Gets as invoiceReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+     */
+    public function getInvoiceReferencedDocument()
+    {
+        return $this->invoiceReferencedDocument;
+    }
+
+    /**
+     * Sets a new invoiceReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $invoiceReferencedDocument
+     * @return self
+     */
+    public function setInvoiceReferencedDocument(\horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $invoiceReferencedDocument)
+    {
+        $this->invoiceReferencedDocument = $invoiceReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as receivableSpecifiedTradeAccountingAccount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType
+     */
+    public function getReceivableSpecifiedTradeAccountingAccount()
+    {
+        return $this->receivableSpecifiedTradeAccountingAccount;
+    }
+
+    /**
+     * Sets a new receivableSpecifiedTradeAccountingAccount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount
+     * @return self
+     */
+    public function setReceivableSpecifiedTradeAccountingAccount(\horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount)
+    {
+        $this->receivableSpecifiedTradeAccountingAccount = $receivableSpecifiedTradeAccountingAccount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/LegalOrganizationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/LegalOrganizationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/LegalOrganizationType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing LegalOrganizationType
+ *
+ * XSD Type: LegalOrganizationType
+ */
+class LegalOrganizationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $tradingBusinessName
+     */
+    private $tradingBusinessName = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\en16931\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as tradingBusinessName
+     *
+     * @return string
+     */
+    public function getTradingBusinessName()
+    {
+        return $this->tradingBusinessName;
+    }
+
+    /**
+     * Sets a new tradingBusinessName
+     *
+     * @param  string $tradingBusinessName
+     * @return self
+     */
+    public function setTradingBusinessName($tradingBusinessName)
+    {
+        $this->tradingBusinessName = $tradingBusinessName;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeAgreementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeAgreementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeAgreementType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing LineTradeAgreementType
+ *
+ * XSD Type: LineTradeAgreementType
+ */
+class LineTradeAgreementType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     */
+    private $buyerOrderReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradePriceType $grossPriceProductTradePrice
+     */
+    private $grossPriceProductTradePrice = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradePriceType $netPriceProductTradePrice
+     */
+    private $netPriceProductTradePrice = null;
+
+    /**
+     * Gets as buyerOrderReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+     */
+    public function getBuyerOrderReferencedDocument()
+    {
+        return $this->buyerOrderReferencedDocument;
+    }
+
+    /**
+     * Sets a new buyerOrderReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     * @return self
+     */
+    public function setBuyerOrderReferencedDocument(\horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $buyerOrderReferencedDocument)
+    {
+        $this->buyerOrderReferencedDocument = $buyerOrderReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as grossPriceProductTradePrice
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradePriceType
+     */
+    public function getGrossPriceProductTradePrice()
+    {
+        return $this->grossPriceProductTradePrice;
+    }
+
+    /**
+     * Sets a new grossPriceProductTradePrice
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradePriceType $grossPriceProductTradePrice
+     * @return self
+     */
+    public function setGrossPriceProductTradePrice(\horstoeko\zugferd\entities\en16931\ram\TradePriceType $grossPriceProductTradePrice)
+    {
+        $this->grossPriceProductTradePrice = $grossPriceProductTradePrice;
+        return $this;
+    }
+
+    /**
+     * Gets as netPriceProductTradePrice
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradePriceType
+     */
+    public function getNetPriceProductTradePrice()
+    {
+        return $this->netPriceProductTradePrice;
+    }
+
+    /**
+     * Sets a new netPriceProductTradePrice
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradePriceType $netPriceProductTradePrice
+     * @return self
+     */
+    public function setNetPriceProductTradePrice(\horstoeko\zugferd\entities\en16931\ram\TradePriceType $netPriceProductTradePrice)
+    {
+        $this->netPriceProductTradePrice = $netPriceProductTradePrice;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeDeliveryType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeDeliveryType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeDeliveryType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing LineTradeDeliveryType
+ *
+ * XSD Type: LineTradeDeliveryType
+ */
+class LineTradeDeliveryType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\QuantityType $billedQuantity
+     */
+    private $billedQuantity = null;
+
+    /**
+     * Gets as billedQuantity
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\QuantityType
+     */
+    public function getBilledQuantity()
+    {
+        return $this->billedQuantity;
+    }
+
+    /**
+     * Sets a new billedQuantity
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\QuantityType $billedQuantity
+     * @return self
+     */
+    public function setBilledQuantity(\horstoeko\zugferd\entities\en16931\udt\QuantityType $billedQuantity)
+    {
+        $this->billedQuantity = $billedQuantity;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeSettlementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeSettlementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/LineTradeSettlementType.php	(revision 8435)
@@ -0,0 +1,210 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing LineTradeSettlementType
+ *
+ * XSD Type: LineTradeSettlementType
+ */
+class LineTradeSettlementType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeTaxType $applicableTradeTax
+     */
+    private $applicableTradeTax = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     */
+    private $billingSpecifiedPeriod = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     */
+    private $specifiedTradeAllowanceCharge = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeSettlementLineMonetarySummationType $specifiedTradeSettlementLineMonetarySummation
+     */
+    private $specifiedTradeSettlementLineMonetarySummation = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $additionalReferencedDocument
+     */
+    private $additionalReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount
+     */
+    private $receivableSpecifiedTradeAccountingAccount = null;
+
+    /**
+     * Gets as applicableTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeTaxType
+     */
+    public function getApplicableTradeTax()
+    {
+        return $this->applicableTradeTax;
+    }
+
+    /**
+     * Sets a new applicableTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeTaxType $applicableTradeTax
+     * @return self
+     */
+    public function setApplicableTradeTax(\horstoeko\zugferd\entities\en16931\ram\TradeTaxType $applicableTradeTax)
+    {
+        $this->applicableTradeTax = $applicableTradeTax;
+        return $this;
+    }
+
+    /**
+     * Gets as billingSpecifiedPeriod
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType
+     */
+    public function getBillingSpecifiedPeriod()
+    {
+        return $this->billingSpecifiedPeriod;
+    }
+
+    /**
+     * Sets a new billingSpecifiedPeriod
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     * @return self
+     */
+    public function setBillingSpecifiedPeriod(\horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType $billingSpecifiedPeriod)
+    {
+        $this->billingSpecifiedPeriod = $billingSpecifiedPeriod;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTradeAllowanceCharge
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge
+     */
+    public function addToSpecifiedTradeAllowanceCharge(\horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge[] = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTradeAllowanceCharge($index)
+    {
+        return isset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * unset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTradeAllowanceCharge($index)
+    {
+        unset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * Gets as specifiedTradeAllowanceCharge
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType[]
+     */
+    public function getSpecifiedTradeAllowanceCharge()
+    {
+        return $this->specifiedTradeAllowanceCharge;
+    }
+
+    /**
+     * Sets a new specifiedTradeAllowanceCharge
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     * @return self
+     */
+    public function setSpecifiedTradeAllowanceCharge(array $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeSettlementLineMonetarySummation
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeSettlementLineMonetarySummationType
+     */
+    public function getSpecifiedTradeSettlementLineMonetarySummation()
+    {
+        return $this->specifiedTradeSettlementLineMonetarySummation;
+    }
+
+    /**
+     * Sets a new specifiedTradeSettlementLineMonetarySummation
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeSettlementLineMonetarySummationType $specifiedTradeSettlementLineMonetarySummation
+     * @return self
+     */
+    public function setSpecifiedTradeSettlementLineMonetarySummation(\horstoeko\zugferd\entities\en16931\ram\TradeSettlementLineMonetarySummationType $specifiedTradeSettlementLineMonetarySummation)
+    {
+        $this->specifiedTradeSettlementLineMonetarySummation = $specifiedTradeSettlementLineMonetarySummation;
+        return $this;
+    }
+
+    /**
+     * Gets as additionalReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+     */
+    public function getAdditionalReferencedDocument()
+    {
+        return $this->additionalReferencedDocument;
+    }
+
+    /**
+     * Sets a new additionalReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $additionalReferencedDocument
+     * @return self
+     */
+    public function setAdditionalReferencedDocument(\horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType $additionalReferencedDocument)
+    {
+        $this->additionalReferencedDocument = $additionalReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as receivableSpecifiedTradeAccountingAccount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType
+     */
+    public function getReceivableSpecifiedTradeAccountingAccount()
+    {
+        return $this->receivableSpecifiedTradeAccountingAccount;
+    }
+
+    /**
+     * Sets a new receivableSpecifiedTradeAccountingAccount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount
+     * @return self
+     */
+    public function setReceivableSpecifiedTradeAccountingAccount(\horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount)
+    {
+        $this->receivableSpecifiedTradeAccountingAccount = $receivableSpecifiedTradeAccountingAccount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/NoteType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/NoteType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/NoteType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing NoteType
+ *
+ * XSD Type: NoteType
+ */
+class NoteType
+{
+
+    /**
+     * @var string $content
+     */
+    private $content = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\CodeType $subjectCode
+     */
+    private $subjectCode = null;
+
+    /**
+     * Gets as content
+     *
+     * @return string
+     */
+    public function getContent()
+    {
+        return $this->content;
+    }
+
+    /**
+     * Sets a new content
+     *
+     * @param  string $content
+     * @return self
+     */
+    public function setContent($content)
+    {
+        $this->content = $content;
+        return $this;
+    }
+
+    /**
+     * Gets as subjectCode
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\CodeType
+     */
+    public function getSubjectCode()
+    {
+        return $this->subjectCode;
+    }
+
+    /**
+     * Sets a new subjectCode
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\CodeType $subjectCode
+     * @return self
+     */
+    public function setSubjectCode(\horstoeko\zugferd\entities\en16931\udt\CodeType $subjectCode)
+    {
+        $this->subjectCode = $subjectCode;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProcuringProjectType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProcuringProjectType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProcuringProjectType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing ProcuringProjectType
+ *
+ * XSD Type: ProcuringProjectType
+ */
+class ProcuringProjectType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $name
+     */
+    private $name = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\en16931\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductCharacteristicType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductCharacteristicType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductCharacteristicType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing ProductCharacteristicType
+ *
+ * XSD Type: ProductCharacteristicType
+ */
+class ProductCharacteristicType
+{
+
+    /**
+     * @var string $description
+     */
+    private $description = null;
+
+    /**
+     * @var string $value
+     */
+    private $value = null;
+
+    /**
+     * Gets as description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Sets a new description
+     *
+     * @param  string $description
+     * @return self
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Gets as value
+     *
+     * @return string
+     */
+    public function getValue()
+    {
+        return $this->value;
+    }
+
+    /**
+     * Sets a new value
+     *
+     * @param  string $value
+     * @return self
+     */
+    public function setValue($value)
+    {
+        $this->value = $value;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductClassificationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductClassificationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ProductClassificationType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing ProductClassificationType
+ *
+ * XSD Type: ProductClassificationType
+ */
+class ProductClassificationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\CodeType $classCode
+     */
+    private $classCode = null;
+
+    /**
+     * Gets as classCode
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\CodeType
+     */
+    public function getClassCode()
+    {
+        return $this->classCode;
+    }
+
+    /**
+     * Sets a new classCode
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\CodeType $classCode
+     * @return self
+     */
+    public function setClassCode(\horstoeko\zugferd\entities\en16931\udt\CodeType $classCode)
+    {
+        $this->classCode = $classCode;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ReferencedDocumentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ReferencedDocumentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/ReferencedDocumentType.php	(revision 8435)
@@ -0,0 +1,228 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing ReferencedDocumentType
+ *
+ * XSD Type: ReferencedDocumentType
+ */
+class ReferencedDocumentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $issuerAssignedID
+     */
+    private $issuerAssignedID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $uRIID
+     */
+    private $uRIID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $lineID
+     */
+    private $lineID = null;
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var string $name
+     */
+    private $name = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\BinaryObjectType $attachmentBinaryObject
+     */
+    private $attachmentBinaryObject = null;
+
+    /**
+     * @var string $referenceTypeCode
+     */
+    private $referenceTypeCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType $formattedIssueDateTime
+     */
+    private $formattedIssueDateTime = null;
+
+    /**
+     * Gets as issuerAssignedID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getIssuerAssignedID()
+    {
+        return $this->issuerAssignedID;
+    }
+
+    /**
+     * Sets a new issuerAssignedID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $issuerAssignedID
+     * @return self
+     */
+    public function setIssuerAssignedID(\horstoeko\zugferd\entities\en16931\udt\IDType $issuerAssignedID)
+    {
+        $this->issuerAssignedID = $issuerAssignedID;
+        return $this;
+    }
+
+    /**
+     * Gets as uRIID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getURIID()
+    {
+        return $this->uRIID;
+    }
+
+    /**
+     * Sets a new uRIID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $uRIID
+     * @return self
+     */
+    public function setURIID(\horstoeko\zugferd\entities\en16931\udt\IDType $uRIID)
+    {
+        $this->uRIID = $uRIID;
+        return $this;
+    }
+
+    /**
+     * Gets as lineID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getLineID()
+    {
+        return $this->lineID;
+    }
+
+    /**
+     * Sets a new lineID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $lineID
+     * @return self
+     */
+    public function setLineID(\horstoeko\zugferd\entities\en16931\udt\IDType $lineID)
+    {
+        $this->lineID = $lineID;
+        return $this;
+    }
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+
+    /**
+     * Gets as attachmentBinaryObject
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\BinaryObjectType
+     */
+    public function getAttachmentBinaryObject()
+    {
+        return $this->attachmentBinaryObject;
+    }
+
+    /**
+     * Sets a new attachmentBinaryObject
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\BinaryObjectType $attachmentBinaryObject
+     * @return self
+     */
+    public function setAttachmentBinaryObject(\horstoeko\zugferd\entities\en16931\udt\BinaryObjectType $attachmentBinaryObject)
+    {
+        $this->attachmentBinaryObject = $attachmentBinaryObject;
+        return $this;
+    }
+
+    /**
+     * Gets as referenceTypeCode
+     *
+     * @return string
+     */
+    public function getReferenceTypeCode()
+    {
+        return $this->referenceTypeCode;
+    }
+
+    /**
+     * Sets a new referenceTypeCode
+     *
+     * @param  string $referenceTypeCode
+     * @return self
+     */
+    public function setReferenceTypeCode($referenceTypeCode)
+    {
+        $this->referenceTypeCode = $referenceTypeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as formattedIssueDateTime
+     *
+     * @return \horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType
+     */
+    public function getFormattedIssueDateTime()
+    {
+        return $this->formattedIssueDateTime;
+    }
+
+    /**
+     * Sets a new formattedIssueDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType $formattedIssueDateTime
+     * @return self
+     */
+    public function setFormattedIssueDateTime(\horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType $formattedIssueDateTime)
+    {
+        $this->formattedIssueDateTime = $formattedIssueDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/SpecifiedPeriodType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/SpecifiedPeriodType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/SpecifiedPeriodType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing SpecifiedPeriodType
+ *
+ * XSD Type: SpecifiedPeriodType
+ */
+class SpecifiedPeriodType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\DateTimeType $startDateTime
+     */
+    private $startDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\DateTimeType $endDateTime
+     */
+    private $endDateTime = null;
+
+    /**
+     * Gets as startDateTime
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\DateTimeType
+     */
+    public function getStartDateTime()
+    {
+        return $this->startDateTime;
+    }
+
+    /**
+     * Sets a new startDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\DateTimeType $startDateTime
+     * @return self
+     */
+    public function setStartDateTime(\horstoeko\zugferd\entities\en16931\udt\DateTimeType $startDateTime)
+    {
+        $this->startDateTime = $startDateTime;
+        return $this;
+    }
+
+    /**
+     * Gets as endDateTime
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\DateTimeType
+     */
+    public function getEndDateTime()
+    {
+        return $this->endDateTime;
+    }
+
+    /**
+     * Sets a new endDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\DateTimeType $endDateTime
+     * @return self
+     */
+    public function setEndDateTime(\horstoeko\zugferd\entities\en16931\udt\DateTimeType $endDateTime)
+    {
+        $this->endDateTime = $endDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainEventType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainEventType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainEventType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing SupplyChainEventType
+ *
+ * XSD Type: SupplyChainEventType
+ */
+class SupplyChainEventType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\DateTimeType $occurrenceDateTime
+     */
+    private $occurrenceDateTime = null;
+
+    /**
+     * Gets as occurrenceDateTime
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\DateTimeType
+     */
+    public function getOccurrenceDateTime()
+    {
+        return $this->occurrenceDateTime;
+    }
+
+    /**
+     * Sets a new occurrenceDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\DateTimeType $occurrenceDateTime
+     * @return self
+     */
+    public function setOccurrenceDateTime(\horstoeko\zugferd\entities\en16931\udt\DateTimeType $occurrenceDateTime)
+    {
+        $this->occurrenceDateTime = $occurrenceDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeLineItemType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeLineItemType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeLineItemType.php	(revision 8435)
@@ -0,0 +1,147 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing SupplyChainTradeLineItemType
+ *
+ * XSD Type: SupplyChainTradeLineItemType
+ */
+class SupplyChainTradeLineItemType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\DocumentLineDocumentType $associatedDocumentLineDocument
+     */
+    private $associatedDocumentLineDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeProductType $specifiedTradeProduct
+     */
+    private $specifiedTradeProduct = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\LineTradeAgreementType $specifiedLineTradeAgreement
+     */
+    private $specifiedLineTradeAgreement = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\LineTradeDeliveryType $specifiedLineTradeDelivery
+     */
+    private $specifiedLineTradeDelivery = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\LineTradeSettlementType $specifiedLineTradeSettlement
+     */
+    private $specifiedLineTradeSettlement = null;
+
+    /**
+     * Gets as associatedDocumentLineDocument
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\DocumentLineDocumentType
+     */
+    public function getAssociatedDocumentLineDocument()
+    {
+        return $this->associatedDocumentLineDocument;
+    }
+
+    /**
+     * Sets a new associatedDocumentLineDocument
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\DocumentLineDocumentType $associatedDocumentLineDocument
+     * @return self
+     */
+    public function setAssociatedDocumentLineDocument(\horstoeko\zugferd\entities\en16931\ram\DocumentLineDocumentType $associatedDocumentLineDocument)
+    {
+        $this->associatedDocumentLineDocument = $associatedDocumentLineDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeProduct
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeProductType
+     */
+    public function getSpecifiedTradeProduct()
+    {
+        return $this->specifiedTradeProduct;
+    }
+
+    /**
+     * Sets a new specifiedTradeProduct
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeProductType $specifiedTradeProduct
+     * @return self
+     */
+    public function setSpecifiedTradeProduct(\horstoeko\zugferd\entities\en16931\ram\TradeProductType $specifiedTradeProduct)
+    {
+        $this->specifiedTradeProduct = $specifiedTradeProduct;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLineTradeAgreement
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\LineTradeAgreementType
+     */
+    public function getSpecifiedLineTradeAgreement()
+    {
+        return $this->specifiedLineTradeAgreement;
+    }
+
+    /**
+     * Sets a new specifiedLineTradeAgreement
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\LineTradeAgreementType $specifiedLineTradeAgreement
+     * @return self
+     */
+    public function setSpecifiedLineTradeAgreement(\horstoeko\zugferd\entities\en16931\ram\LineTradeAgreementType $specifiedLineTradeAgreement)
+    {
+        $this->specifiedLineTradeAgreement = $specifiedLineTradeAgreement;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLineTradeDelivery
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\LineTradeDeliveryType
+     */
+    public function getSpecifiedLineTradeDelivery()
+    {
+        return $this->specifiedLineTradeDelivery;
+    }
+
+    /**
+     * Sets a new specifiedLineTradeDelivery
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\LineTradeDeliveryType $specifiedLineTradeDelivery
+     * @return self
+     */
+    public function setSpecifiedLineTradeDelivery(\horstoeko\zugferd\entities\en16931\ram\LineTradeDeliveryType $specifiedLineTradeDelivery)
+    {
+        $this->specifiedLineTradeDelivery = $specifiedLineTradeDelivery;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLineTradeSettlement
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\LineTradeSettlementType
+     */
+    public function getSpecifiedLineTradeSettlement()
+    {
+        return $this->specifiedLineTradeSettlement;
+    }
+
+    /**
+     * Sets a new specifiedLineTradeSettlement
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\LineTradeSettlementType $specifiedLineTradeSettlement
+     * @return self
+     */
+    public function setSpecifiedLineTradeSettlement(\horstoeko\zugferd\entities\en16931\ram\LineTradeSettlementType $specifiedLineTradeSettlement)
+    {
+        $this->specifiedLineTradeSettlement = $specifiedLineTradeSettlement;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeTransactionType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeTransactionType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/SupplyChainTradeTransactionType.php	(revision 8435)
@@ -0,0 +1,156 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing SupplyChainTradeTransactionType
+ *
+ * XSD Type: SupplyChainTradeTransactionType
+ */
+class SupplyChainTradeTransactionType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeLineItemType[] $includedSupplyChainTradeLineItem
+     */
+    private $includedSupplyChainTradeLineItem = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement
+     */
+    private $applicableHeaderTradeAgreement = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery
+     */
+    private $applicableHeaderTradeDelivery = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement
+     */
+    private $applicableHeaderTradeSettlement = null;
+
+    /**
+     * Adds as includedSupplyChainTradeLineItem
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeLineItemType $includedSupplyChainTradeLineItem
+     */
+    public function addToIncludedSupplyChainTradeLineItem(\horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeLineItemType $includedSupplyChainTradeLineItem)
+    {
+        $this->includedSupplyChainTradeLineItem[] = $includedSupplyChainTradeLineItem;
+        return $this;
+    }
+
+    /**
+     * isset includedSupplyChainTradeLineItem
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetIncludedSupplyChainTradeLineItem($index)
+    {
+        return isset($this->includedSupplyChainTradeLineItem[$index]);
+    }
+
+    /**
+     * unset includedSupplyChainTradeLineItem
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetIncludedSupplyChainTradeLineItem($index)
+    {
+        unset($this->includedSupplyChainTradeLineItem[$index]);
+    }
+
+    /**
+     * Gets as includedSupplyChainTradeLineItem
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeLineItemType[]
+     */
+    public function getIncludedSupplyChainTradeLineItem()
+    {
+        return $this->includedSupplyChainTradeLineItem;
+    }
+
+    /**
+     * Sets a new includedSupplyChainTradeLineItem
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeLineItemType[] $includedSupplyChainTradeLineItem
+     * @return self
+     */
+    public function setIncludedSupplyChainTradeLineItem(array $includedSupplyChainTradeLineItem)
+    {
+        $this->includedSupplyChainTradeLineItem = $includedSupplyChainTradeLineItem;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableHeaderTradeAgreement
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\HeaderTradeAgreementType
+     */
+    public function getApplicableHeaderTradeAgreement()
+    {
+        return $this->applicableHeaderTradeAgreement;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeAgreement
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement
+     * @return self
+     */
+    public function setApplicableHeaderTradeAgreement(\horstoeko\zugferd\entities\en16931\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement)
+    {
+        $this->applicableHeaderTradeAgreement = $applicableHeaderTradeAgreement;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableHeaderTradeDelivery
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\HeaderTradeDeliveryType
+     */
+    public function getApplicableHeaderTradeDelivery()
+    {
+        return $this->applicableHeaderTradeDelivery;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeDelivery
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery
+     * @return self
+     */
+    public function setApplicableHeaderTradeDelivery(\horstoeko\zugferd\entities\en16931\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery)
+    {
+        $this->applicableHeaderTradeDelivery = $applicableHeaderTradeDelivery;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableHeaderTradeSettlement
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\HeaderTradeSettlementType
+     */
+    public function getApplicableHeaderTradeSettlement()
+    {
+        return $this->applicableHeaderTradeSettlement;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeSettlement
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement
+     * @return self
+     */
+    public function setApplicableHeaderTradeSettlement(\horstoeko\zugferd\entities\en16931\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement)
+    {
+        $this->applicableHeaderTradeSettlement = $applicableHeaderTradeSettlement;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TaxRegistrationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TaxRegistrationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TaxRegistrationType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TaxRegistrationType
+ *
+ * XSD Type: TaxRegistrationType
+ */
+class TaxRegistrationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\en16931\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAccountingAccountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAccountingAccountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAccountingAccountType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradeAccountingAccountType
+ *
+ * XSD Type: TradeAccountingAccountType
+ */
+class TradeAccountingAccountType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\en16931\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAddressType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAddressType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAddressType.php	(revision 8435)
@@ -0,0 +1,201 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradeAddressType
+ *
+ * XSD Type: TradeAddressType
+ */
+class TradeAddressType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\CodeType $postcodeCode
+     */
+    private $postcodeCode = null;
+
+    /**
+     * @var string $lineOne
+     */
+    private $lineOne = null;
+
+    /**
+     * @var string $lineTwo
+     */
+    private $lineTwo = null;
+
+    /**
+     * @var string $lineThree
+     */
+    private $lineThree = null;
+
+    /**
+     * @var string $cityName
+     */
+    private $cityName = null;
+
+    /**
+     * @var string $countryID
+     */
+    private $countryID = null;
+
+    /**
+     * @var string $countrySubDivisionName
+     */
+    private $countrySubDivisionName = null;
+
+    /**
+     * Gets as postcodeCode
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\CodeType
+     */
+    public function getPostcodeCode()
+    {
+        return $this->postcodeCode;
+    }
+
+    /**
+     * Sets a new postcodeCode
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\CodeType $postcodeCode
+     * @return self
+     */
+    public function setPostcodeCode(\horstoeko\zugferd\entities\en16931\udt\CodeType $postcodeCode)
+    {
+        $this->postcodeCode = $postcodeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as lineOne
+     *
+     * @return string
+     */
+    public function getLineOne()
+    {
+        return $this->lineOne;
+    }
+
+    /**
+     * Sets a new lineOne
+     *
+     * @param  string $lineOne
+     * @return self
+     */
+    public function setLineOne($lineOne)
+    {
+        $this->lineOne = $lineOne;
+        return $this;
+    }
+
+    /**
+     * Gets as lineTwo
+     *
+     * @return string
+     */
+    public function getLineTwo()
+    {
+        return $this->lineTwo;
+    }
+
+    /**
+     * Sets a new lineTwo
+     *
+     * @param  string $lineTwo
+     * @return self
+     */
+    public function setLineTwo($lineTwo)
+    {
+        $this->lineTwo = $lineTwo;
+        return $this;
+    }
+
+    /**
+     * Gets as lineThree
+     *
+     * @return string
+     */
+    public function getLineThree()
+    {
+        return $this->lineThree;
+    }
+
+    /**
+     * Sets a new lineThree
+     *
+     * @param  string $lineThree
+     * @return self
+     */
+    public function setLineThree($lineThree)
+    {
+        $this->lineThree = $lineThree;
+        return $this;
+    }
+
+    /**
+     * Gets as cityName
+     *
+     * @return string
+     */
+    public function getCityName()
+    {
+        return $this->cityName;
+    }
+
+    /**
+     * Sets a new cityName
+     *
+     * @param  string $cityName
+     * @return self
+     */
+    public function setCityName($cityName)
+    {
+        $this->cityName = $cityName;
+        return $this;
+    }
+
+    /**
+     * Gets as countryID
+     *
+     * @return string
+     */
+    public function getCountryID()
+    {
+        return $this->countryID;
+    }
+
+    /**
+     * Sets a new countryID
+     *
+     * @param  string $countryID
+     * @return self
+     */
+    public function setCountryID($countryID)
+    {
+        $this->countryID = $countryID;
+        return $this;
+    }
+
+    /**
+     * Gets as countrySubDivisionName
+     *
+     * @return string
+     */
+    public function getCountrySubDivisionName()
+    {
+        return $this->countrySubDivisionName;
+    }
+
+    /**
+     * Sets a new countrySubDivisionName
+     *
+     * @param  string $countrySubDivisionName
+     * @return self
+     */
+    public function setCountrySubDivisionName($countrySubDivisionName)
+    {
+        $this->countrySubDivisionName = $countrySubDivisionName;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAllowanceChargeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAllowanceChargeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeAllowanceChargeType.php	(revision 8435)
@@ -0,0 +1,201 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradeAllowanceChargeType
+ *
+ * XSD Type: TradeAllowanceChargeType
+ */
+class TradeAllowanceChargeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IndicatorType $chargeIndicator
+     */
+    private $chargeIndicator = null;
+
+    /**
+     * @var float $calculationPercent
+     */
+    private $calculationPercent = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $basisAmount
+     */
+    private $basisAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $actualAmount
+     */
+    private $actualAmount = null;
+
+    /**
+     * @var string $reasonCode
+     */
+    private $reasonCode = null;
+
+    /**
+     * @var string $reason
+     */
+    private $reason = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeTaxType $categoryTradeTax
+     */
+    private $categoryTradeTax = null;
+
+    /**
+     * Gets as chargeIndicator
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IndicatorType
+     */
+    public function getChargeIndicator()
+    {
+        return $this->chargeIndicator;
+    }
+
+    /**
+     * Sets a new chargeIndicator
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IndicatorType $chargeIndicator
+     * @return self
+     */
+    public function setChargeIndicator(\horstoeko\zugferd\entities\en16931\udt\IndicatorType $chargeIndicator)
+    {
+        $this->chargeIndicator = $chargeIndicator;
+        return $this;
+    }
+
+    /**
+     * Gets as calculationPercent
+     *
+     * @return float
+     */
+    public function getCalculationPercent()
+    {
+        return $this->calculationPercent;
+    }
+
+    /**
+     * Sets a new calculationPercent
+     *
+     * @param  float $calculationPercent
+     * @return self
+     */
+    public function setCalculationPercent($calculationPercent)
+    {
+        $this->calculationPercent = $calculationPercent;
+        return $this;
+    }
+
+    /**
+     * Gets as basisAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getBasisAmount()
+    {
+        return $this->basisAmount;
+    }
+
+    /**
+     * Sets a new basisAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $basisAmount
+     * @return self
+     */
+    public function setBasisAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $basisAmount)
+    {
+        $this->basisAmount = $basisAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as actualAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getActualAmount()
+    {
+        return $this->actualAmount;
+    }
+
+    /**
+     * Sets a new actualAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $actualAmount
+     * @return self
+     */
+    public function setActualAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $actualAmount)
+    {
+        $this->actualAmount = $actualAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as reasonCode
+     *
+     * @return string
+     */
+    public function getReasonCode()
+    {
+        return $this->reasonCode;
+    }
+
+    /**
+     * Sets a new reasonCode
+     *
+     * @param  string $reasonCode
+     * @return self
+     */
+    public function setReasonCode($reasonCode)
+    {
+        $this->reasonCode = $reasonCode;
+        return $this;
+    }
+
+    /**
+     * Gets as reason
+     *
+     * @return string
+     */
+    public function getReason()
+    {
+        return $this->reason;
+    }
+
+    /**
+     * Sets a new reason
+     *
+     * @param  string $reason
+     * @return self
+     */
+    public function setReason($reason)
+    {
+        $this->reason = $reason;
+        return $this;
+    }
+
+    /**
+     * Gets as categoryTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeTaxType
+     */
+    public function getCategoryTradeTax()
+    {
+        return $this->categoryTradeTax;
+    }
+
+    /**
+     * Sets a new categoryTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeTaxType $categoryTradeTax
+     * @return self
+     */
+    public function setCategoryTradeTax(\horstoeko\zugferd\entities\en16931\ram\TradeTaxType $categoryTradeTax)
+    {
+        $this->categoryTradeTax = $categoryTradeTax;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeContactType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeContactType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeContactType.php	(revision 8435)
@@ -0,0 +1,120 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradeContactType
+ *
+ * XSD Type: TradeContactType
+ */
+class TradeContactType
+{
+
+    /**
+     * @var string $personName
+     */
+    private $personName = null;
+
+    /**
+     * @var string $departmentName
+     */
+    private $departmentName = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType $telephoneUniversalCommunication
+     */
+    private $telephoneUniversalCommunication = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType $emailURIUniversalCommunication
+     */
+    private $emailURIUniversalCommunication = null;
+
+    /**
+     * Gets as personName
+     *
+     * @return string
+     */
+    public function getPersonName()
+    {
+        return $this->personName;
+    }
+
+    /**
+     * Sets a new personName
+     *
+     * @param  string $personName
+     * @return self
+     */
+    public function setPersonName($personName)
+    {
+        $this->personName = $personName;
+        return $this;
+    }
+
+    /**
+     * Gets as departmentName
+     *
+     * @return string
+     */
+    public function getDepartmentName()
+    {
+        return $this->departmentName;
+    }
+
+    /**
+     * Sets a new departmentName
+     *
+     * @param  string $departmentName
+     * @return self
+     */
+    public function setDepartmentName($departmentName)
+    {
+        $this->departmentName = $departmentName;
+        return $this;
+    }
+
+    /**
+     * Gets as telephoneUniversalCommunication
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType
+     */
+    public function getTelephoneUniversalCommunication()
+    {
+        return $this->telephoneUniversalCommunication;
+    }
+
+    /**
+     * Sets a new telephoneUniversalCommunication
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType $telephoneUniversalCommunication
+     * @return self
+     */
+    public function setTelephoneUniversalCommunication(\horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType $telephoneUniversalCommunication)
+    {
+        $this->telephoneUniversalCommunication = $telephoneUniversalCommunication;
+        return $this;
+    }
+
+    /**
+     * Gets as emailURIUniversalCommunication
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType
+     */
+    public function getEmailURIUniversalCommunication()
+    {
+        return $this->emailURIUniversalCommunication;
+    }
+
+    /**
+     * Sets a new emailURIUniversalCommunication
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType $emailURIUniversalCommunication
+     * @return self
+     */
+    public function setEmailURIUniversalCommunication(\horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType $emailURIUniversalCommunication)
+    {
+        $this->emailURIUniversalCommunication = $emailURIUniversalCommunication;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeCountryType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeCountryType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeCountryType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradeCountryType
+ *
+ * XSD Type: TradeCountryType
+ */
+class TradeCountryType
+{
+
+    /**
+     * @var string $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return string
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  string $iD
+     * @return self
+     */
+    public function setID($iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePartyType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePartyType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePartyType.php	(revision 8435)
@@ -0,0 +1,363 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradePartyType
+ *
+ * XSD Type: TradePartyType
+ */
+class TradePartyType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType[] $iD
+     */
+    private $iD = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType[] $globalID
+     */
+    private $globalID = [
+        
+    ];
+
+    /**
+     * @var string $name
+     */
+    private $name = null;
+
+    /**
+     * @var string $description
+     */
+    private $description = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\LegalOrganizationType $specifiedLegalOrganization
+     */
+    private $specifiedLegalOrganization = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeContactType $definedTradeContact
+     */
+    private $definedTradeContact = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeAddressType $postalTradeAddress
+     */
+    private $postalTradeAddress = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType $uRIUniversalCommunication
+     */
+    private $uRIUniversalCommunication = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TaxRegistrationType[] $specifiedTaxRegistration
+     */
+    private $specifiedTaxRegistration = [
+        
+    ];
+
+    /**
+     * Adds as iD
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     */
+    public function addToID(\horstoeko\zugferd\entities\en16931\udt\IDType $iD)
+    {
+        $this->iD[] = $iD;
+        return $this;
+    }
+
+    /**
+     * isset iD
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetID($index)
+    {
+        return isset($this->iD[$index]);
+    }
+
+    /**
+     * unset iD
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetID($index)
+    {
+        unset($this->iD[$index]);
+    }
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType[]
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType[] $iD
+     * @return self
+     */
+    public function setID(array $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Adds as globalID
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $globalID
+     */
+    public function addToGlobalID(\horstoeko\zugferd\entities\en16931\udt\IDType $globalID)
+    {
+        $this->globalID[] = $globalID;
+        return $this;
+    }
+
+    /**
+     * isset globalID
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetGlobalID($index)
+    {
+        return isset($this->globalID[$index]);
+    }
+
+    /**
+     * unset globalID
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetGlobalID($index)
+    {
+        unset($this->globalID[$index]);
+    }
+
+    /**
+     * Gets as globalID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType[]
+     */
+    public function getGlobalID()
+    {
+        return $this->globalID;
+    }
+
+    /**
+     * Sets a new globalID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType[] $globalID
+     * @return self
+     */
+    public function setGlobalID(array $globalID)
+    {
+        $this->globalID = $globalID;
+        return $this;
+    }
+
+    /**
+     * Gets as name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+
+    /**
+     * Gets as description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Sets a new description
+     *
+     * @param  string $description
+     * @return self
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLegalOrganization
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\LegalOrganizationType
+     */
+    public function getSpecifiedLegalOrganization()
+    {
+        return $this->specifiedLegalOrganization;
+    }
+
+    /**
+     * Sets a new specifiedLegalOrganization
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\LegalOrganizationType $specifiedLegalOrganization
+     * @return self
+     */
+    public function setSpecifiedLegalOrganization(\horstoeko\zugferd\entities\en16931\ram\LegalOrganizationType $specifiedLegalOrganization)
+    {
+        $this->specifiedLegalOrganization = $specifiedLegalOrganization;
+        return $this;
+    }
+
+    /**
+     * Gets as definedTradeContact
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeContactType
+     */
+    public function getDefinedTradeContact()
+    {
+        return $this->definedTradeContact;
+    }
+
+    /**
+     * Sets a new definedTradeContact
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeContactType $definedTradeContact
+     * @return self
+     */
+    public function setDefinedTradeContact(\horstoeko\zugferd\entities\en16931\ram\TradeContactType $definedTradeContact)
+    {
+        $this->definedTradeContact = $definedTradeContact;
+        return $this;
+    }
+
+    /**
+     * Gets as postalTradeAddress
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeAddressType
+     */
+    public function getPostalTradeAddress()
+    {
+        return $this->postalTradeAddress;
+    }
+
+    /**
+     * Sets a new postalTradeAddress
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeAddressType $postalTradeAddress
+     * @return self
+     */
+    public function setPostalTradeAddress(\horstoeko\zugferd\entities\en16931\ram\TradeAddressType $postalTradeAddress)
+    {
+        $this->postalTradeAddress = $postalTradeAddress;
+        return $this;
+    }
+
+    /**
+     * Gets as uRIUniversalCommunication
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType
+     */
+    public function getURIUniversalCommunication()
+    {
+        return $this->uRIUniversalCommunication;
+    }
+
+    /**
+     * Sets a new uRIUniversalCommunication
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType $uRIUniversalCommunication
+     * @return self
+     */
+    public function setURIUniversalCommunication(\horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType $uRIUniversalCommunication)
+    {
+        $this->uRIUniversalCommunication = $uRIUniversalCommunication;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTaxRegistration
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TaxRegistrationType $specifiedTaxRegistration
+     */
+    public function addToSpecifiedTaxRegistration(\horstoeko\zugferd\entities\en16931\ram\TaxRegistrationType $specifiedTaxRegistration)
+    {
+        $this->specifiedTaxRegistration[] = $specifiedTaxRegistration;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTaxRegistration
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTaxRegistration($index)
+    {
+        return isset($this->specifiedTaxRegistration[$index]);
+    }
+
+    /**
+     * unset specifiedTaxRegistration
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTaxRegistration($index)
+    {
+        unset($this->specifiedTaxRegistration[$index]);
+    }
+
+    /**
+     * Gets as specifiedTaxRegistration
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TaxRegistrationType[]
+     */
+    public function getSpecifiedTaxRegistration()
+    {
+        return $this->specifiedTaxRegistration;
+    }
+
+    /**
+     * Sets a new specifiedTaxRegistration
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TaxRegistrationType[] $specifiedTaxRegistration
+     * @return self
+     */
+    public function setSpecifiedTaxRegistration(array $specifiedTaxRegistration)
+    {
+        $this->specifiedTaxRegistration = $specifiedTaxRegistration;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePaymentTermsType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePaymentTermsType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePaymentTermsType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradePaymentTermsType
+ *
+ * XSD Type: TradePaymentTermsType
+ */
+class TradePaymentTermsType
+{
+
+    /**
+     * @var string $description
+     */
+    private $description = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\DateTimeType $dueDateDateTime
+     */
+    private $dueDateDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $directDebitMandateID
+     */
+    private $directDebitMandateID = null;
+
+    /**
+     * Gets as description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Sets a new description
+     *
+     * @param  string $description
+     * @return self
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Gets as dueDateDateTime
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\DateTimeType
+     */
+    public function getDueDateDateTime()
+    {
+        return $this->dueDateDateTime;
+    }
+
+    /**
+     * Sets a new dueDateDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\DateTimeType $dueDateDateTime
+     * @return self
+     */
+    public function setDueDateDateTime(\horstoeko\zugferd\entities\en16931\udt\DateTimeType $dueDateDateTime)
+    {
+        $this->dueDateDateTime = $dueDateDateTime;
+        return $this;
+    }
+
+    /**
+     * Gets as directDebitMandateID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getDirectDebitMandateID()
+    {
+        return $this->directDebitMandateID;
+    }
+
+    /**
+     * Sets a new directDebitMandateID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $directDebitMandateID
+     * @return self
+     */
+    public function setDirectDebitMandateID(\horstoeko\zugferd\entities\en16931\udt\IDType $directDebitMandateID)
+    {
+        $this->directDebitMandateID = $directDebitMandateID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePriceType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePriceType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradePriceType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradePriceType
+ *
+ * XSD Type: TradePriceType
+ */
+class TradePriceType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $chargeAmount
+     */
+    private $chargeAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\QuantityType $basisQuantity
+     */
+    private $basisQuantity = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType $appliedTradeAllowanceCharge
+     */
+    private $appliedTradeAllowanceCharge = null;
+
+    /**
+     * Gets as chargeAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getChargeAmount()
+    {
+        return $this->chargeAmount;
+    }
+
+    /**
+     * Sets a new chargeAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $chargeAmount
+     * @return self
+     */
+    public function setChargeAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $chargeAmount)
+    {
+        $this->chargeAmount = $chargeAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as basisQuantity
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\QuantityType
+     */
+    public function getBasisQuantity()
+    {
+        return $this->basisQuantity;
+    }
+
+    /**
+     * Sets a new basisQuantity
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\QuantityType $basisQuantity
+     * @return self
+     */
+    public function setBasisQuantity(\horstoeko\zugferd\entities\en16931\udt\QuantityType $basisQuantity)
+    {
+        $this->basisQuantity = $basisQuantity;
+        return $this;
+    }
+
+    /**
+     * Gets as appliedTradeAllowanceCharge
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType
+     */
+    public function getAppliedTradeAllowanceCharge()
+    {
+        return $this->appliedTradeAllowanceCharge;
+    }
+
+    /**
+     * Sets a new appliedTradeAllowanceCharge
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType $appliedTradeAllowanceCharge
+     * @return self
+     */
+    public function setAppliedTradeAllowanceCharge(\horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType $appliedTradeAllowanceCharge)
+    {
+        $this->appliedTradeAllowanceCharge = $appliedTradeAllowanceCharge;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeProductType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeProductType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeProductType.php	(revision 8435)
@@ -0,0 +1,300 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradeProductType
+ *
+ * XSD Type: TradeProductType
+ */
+class TradeProductType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $globalID
+     */
+    private $globalID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $sellerAssignedID
+     */
+    private $sellerAssignedID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $buyerAssignedID
+     */
+    private $buyerAssignedID = null;
+
+    /**
+     * @var string $name
+     */
+    private $name = null;
+
+    /**
+     * @var string $description
+     */
+    private $description = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ProductCharacteristicType[] $applicableProductCharacteristic
+     */
+    private $applicableProductCharacteristic = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ProductClassificationType[] $designatedProductClassification
+     */
+    private $designatedProductClassification = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeCountryType $originTradeCountry
+     */
+    private $originTradeCountry = null;
+
+    /**
+     * Gets as globalID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getGlobalID()
+    {
+        return $this->globalID;
+    }
+
+    /**
+     * Sets a new globalID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $globalID
+     * @return self
+     */
+    public function setGlobalID(\horstoeko\zugferd\entities\en16931\udt\IDType $globalID)
+    {
+        $this->globalID = $globalID;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerAssignedID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getSellerAssignedID()
+    {
+        return $this->sellerAssignedID;
+    }
+
+    /**
+     * Sets a new sellerAssignedID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $sellerAssignedID
+     * @return self
+     */
+    public function setSellerAssignedID(\horstoeko\zugferd\entities\en16931\udt\IDType $sellerAssignedID)
+    {
+        $this->sellerAssignedID = $sellerAssignedID;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerAssignedID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getBuyerAssignedID()
+    {
+        return $this->buyerAssignedID;
+    }
+
+    /**
+     * Sets a new buyerAssignedID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $buyerAssignedID
+     * @return self
+     */
+    public function setBuyerAssignedID(\horstoeko\zugferd\entities\en16931\udt\IDType $buyerAssignedID)
+    {
+        $this->buyerAssignedID = $buyerAssignedID;
+        return $this;
+    }
+
+    /**
+     * Gets as name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+
+    /**
+     * Gets as description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Sets a new description
+     *
+     * @param  string $description
+     * @return self
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Adds as applicableProductCharacteristic
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ProductCharacteristicType $applicableProductCharacteristic
+     */
+    public function addToApplicableProductCharacteristic(\horstoeko\zugferd\entities\en16931\ram\ProductCharacteristicType $applicableProductCharacteristic)
+    {
+        $this->applicableProductCharacteristic[] = $applicableProductCharacteristic;
+        return $this;
+    }
+
+    /**
+     * isset applicableProductCharacteristic
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetApplicableProductCharacteristic($index)
+    {
+        return isset($this->applicableProductCharacteristic[$index]);
+    }
+
+    /**
+     * unset applicableProductCharacteristic
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetApplicableProductCharacteristic($index)
+    {
+        unset($this->applicableProductCharacteristic[$index]);
+    }
+
+    /**
+     * Gets as applicableProductCharacteristic
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ProductCharacteristicType[]
+     */
+    public function getApplicableProductCharacteristic()
+    {
+        return $this->applicableProductCharacteristic;
+    }
+
+    /**
+     * Sets a new applicableProductCharacteristic
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ProductCharacteristicType[] $applicableProductCharacteristic
+     * @return self
+     */
+    public function setApplicableProductCharacteristic(array $applicableProductCharacteristic)
+    {
+        $this->applicableProductCharacteristic = $applicableProductCharacteristic;
+        return $this;
+    }
+
+    /**
+     * Adds as designatedProductClassification
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ProductClassificationType $designatedProductClassification
+     */
+    public function addToDesignatedProductClassification(\horstoeko\zugferd\entities\en16931\ram\ProductClassificationType $designatedProductClassification)
+    {
+        $this->designatedProductClassification[] = $designatedProductClassification;
+        return $this;
+    }
+
+    /**
+     * isset designatedProductClassification
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetDesignatedProductClassification($index)
+    {
+        return isset($this->designatedProductClassification[$index]);
+    }
+
+    /**
+     * unset designatedProductClassification
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetDesignatedProductClassification($index)
+    {
+        unset($this->designatedProductClassification[$index]);
+    }
+
+    /**
+     * Gets as designatedProductClassification
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ProductClassificationType[]
+     */
+    public function getDesignatedProductClassification()
+    {
+        return $this->designatedProductClassification;
+    }
+
+    /**
+     * Sets a new designatedProductClassification
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ProductClassificationType[] $designatedProductClassification
+     * @return self
+     */
+    public function setDesignatedProductClassification(array $designatedProductClassification)
+    {
+        $this->designatedProductClassification = $designatedProductClassification;
+        return $this;
+    }
+
+    /**
+     * Gets as originTradeCountry
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeCountryType
+     */
+    public function getOriginTradeCountry()
+    {
+        return $this->originTradeCountry;
+    }
+
+    /**
+     * Sets a new originTradeCountry
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeCountryType $originTradeCountry
+     * @return self
+     */
+    public function setOriginTradeCountry(\horstoeko\zugferd\entities\en16931\ram\TradeCountryType $originTradeCountry)
+    {
+        $this->originTradeCountry = $originTradeCountry;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementFinancialCardType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementFinancialCardType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementFinancialCardType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradeSettlementFinancialCardType
+ *
+ * XSD Type: TradeSettlementFinancialCardType
+ */
+class TradeSettlementFinancialCardType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $cardholderName
+     */
+    private $cardholderName = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\en16931\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as cardholderName
+     *
+     * @return string
+     */
+    public function getCardholderName()
+    {
+        return $this->cardholderName;
+    }
+
+    /**
+     * Sets a new cardholderName
+     *
+     * @param  string $cardholderName
+     * @return self
+     */
+    public function setCardholderName($cardholderName)
+    {
+        $this->cardholderName = $cardholderName;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementHeaderMonetarySummationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementHeaderMonetarySummationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementHeaderMonetarySummationType.php	(revision 8435)
@@ -0,0 +1,291 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradeSettlementHeaderMonetarySummationType
+ *
+ * XSD Type: TradeSettlementHeaderMonetarySummationType
+ */
+class TradeSettlementHeaderMonetarySummationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $lineTotalAmount
+     */
+    private $lineTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $chargeTotalAmount
+     */
+    private $chargeTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $allowanceTotalAmount
+     */
+    private $allowanceTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $taxBasisTotalAmount
+     */
+    private $taxBasisTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType[] $taxTotalAmount
+     */
+    private $taxTotalAmount = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $roundingAmount
+     */
+    private $roundingAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $grandTotalAmount
+     */
+    private $grandTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $totalPrepaidAmount
+     */
+    private $totalPrepaidAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $duePayableAmount
+     */
+    private $duePayableAmount = null;
+
+    /**
+     * Gets as lineTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getLineTotalAmount()
+    {
+        return $this->lineTotalAmount;
+    }
+
+    /**
+     * Sets a new lineTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $lineTotalAmount
+     * @return self
+     */
+    public function setLineTotalAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $lineTotalAmount)
+    {
+        $this->lineTotalAmount = $lineTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as chargeTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getChargeTotalAmount()
+    {
+        return $this->chargeTotalAmount;
+    }
+
+    /**
+     * Sets a new chargeTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $chargeTotalAmount
+     * @return self
+     */
+    public function setChargeTotalAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $chargeTotalAmount)
+    {
+        $this->chargeTotalAmount = $chargeTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as allowanceTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getAllowanceTotalAmount()
+    {
+        return $this->allowanceTotalAmount;
+    }
+
+    /**
+     * Sets a new allowanceTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $allowanceTotalAmount
+     * @return self
+     */
+    public function setAllowanceTotalAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $allowanceTotalAmount)
+    {
+        $this->allowanceTotalAmount = $allowanceTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as taxBasisTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getTaxBasisTotalAmount()
+    {
+        return $this->taxBasisTotalAmount;
+    }
+
+    /**
+     * Sets a new taxBasisTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $taxBasisTotalAmount
+     * @return self
+     */
+    public function setTaxBasisTotalAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $taxBasisTotalAmount)
+    {
+        $this->taxBasisTotalAmount = $taxBasisTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Adds as taxTotalAmount
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $taxTotalAmount
+     */
+    public function addToTaxTotalAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $taxTotalAmount)
+    {
+        $this->taxTotalAmount[] = $taxTotalAmount;
+        return $this;
+    }
+
+    /**
+     * isset taxTotalAmount
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetTaxTotalAmount($index)
+    {
+        return isset($this->taxTotalAmount[$index]);
+    }
+
+    /**
+     * unset taxTotalAmount
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetTaxTotalAmount($index)
+    {
+        unset($this->taxTotalAmount[$index]);
+    }
+
+    /**
+     * Gets as taxTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType[]
+     */
+    public function getTaxTotalAmount()
+    {
+        return $this->taxTotalAmount;
+    }
+
+    /**
+     * Sets a new taxTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType[] $taxTotalAmount
+     * @return self
+     */
+    public function setTaxTotalAmount(array $taxTotalAmount)
+    {
+        $this->taxTotalAmount = $taxTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as roundingAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getRoundingAmount()
+    {
+        return $this->roundingAmount;
+    }
+
+    /**
+     * Sets a new roundingAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $roundingAmount
+     * @return self
+     */
+    public function setRoundingAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $roundingAmount)
+    {
+        $this->roundingAmount = $roundingAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as grandTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getGrandTotalAmount()
+    {
+        return $this->grandTotalAmount;
+    }
+
+    /**
+     * Sets a new grandTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $grandTotalAmount
+     * @return self
+     */
+    public function setGrandTotalAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $grandTotalAmount)
+    {
+        $this->grandTotalAmount = $grandTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as totalPrepaidAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getTotalPrepaidAmount()
+    {
+        return $this->totalPrepaidAmount;
+    }
+
+    /**
+     * Sets a new totalPrepaidAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $totalPrepaidAmount
+     * @return self
+     */
+    public function setTotalPrepaidAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $totalPrepaidAmount)
+    {
+        $this->totalPrepaidAmount = $totalPrepaidAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as duePayableAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getDuePayableAmount()
+    {
+        return $this->duePayableAmount;
+    }
+
+    /**
+     * Sets a new duePayableAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $duePayableAmount
+     * @return self
+     */
+    public function setDuePayableAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $duePayableAmount)
+    {
+        $this->duePayableAmount = $duePayableAmount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementLineMonetarySummationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementLineMonetarySummationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementLineMonetarySummationType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradeSettlementLineMonetarySummationType
+ *
+ * XSD Type: TradeSettlementLineMonetarySummationType
+ */
+class TradeSettlementLineMonetarySummationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $lineTotalAmount
+     */
+    private $lineTotalAmount = null;
+
+    /**
+     * Gets as lineTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getLineTotalAmount()
+    {
+        return $this->lineTotalAmount;
+    }
+
+    /**
+     * Sets a new lineTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $lineTotalAmount
+     * @return self
+     */
+    public function setLineTotalAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $lineTotalAmount)
+    {
+        $this->lineTotalAmount = $lineTotalAmount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementPaymentMeansType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementPaymentMeansType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeSettlementPaymentMeansType.php	(revision 8435)
@@ -0,0 +1,174 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradeSettlementPaymentMeansType
+ *
+ * XSD Type: TradeSettlementPaymentMeansType
+ */
+class TradeSettlementPaymentMeansType
+{
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var string $information
+     */
+    private $information = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\TradeSettlementFinancialCardType $applicableTradeSettlementFinancialCard
+     */
+    private $applicableTradeSettlementFinancialCard = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\DebtorFinancialAccountType $payerPartyDebtorFinancialAccount
+     */
+    private $payerPartyDebtorFinancialAccount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\CreditorFinancialAccountType $payeePartyCreditorFinancialAccount
+     */
+    private $payeePartyCreditorFinancialAccount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\CreditorFinancialInstitutionType $payeeSpecifiedCreditorFinancialInstitution
+     */
+    private $payeeSpecifiedCreditorFinancialInstitution = null;
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as information
+     *
+     * @return string
+     */
+    public function getInformation()
+    {
+        return $this->information;
+    }
+
+    /**
+     * Sets a new information
+     *
+     * @param  string $information
+     * @return self
+     */
+    public function setInformation($information)
+    {
+        $this->information = $information;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableTradeSettlementFinancialCard
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\TradeSettlementFinancialCardType
+     */
+    public function getApplicableTradeSettlementFinancialCard()
+    {
+        return $this->applicableTradeSettlementFinancialCard;
+    }
+
+    /**
+     * Sets a new applicableTradeSettlementFinancialCard
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\TradeSettlementFinancialCardType $applicableTradeSettlementFinancialCard
+     * @return self
+     */
+    public function setApplicableTradeSettlementFinancialCard(\horstoeko\zugferd\entities\en16931\ram\TradeSettlementFinancialCardType $applicableTradeSettlementFinancialCard)
+    {
+        $this->applicableTradeSettlementFinancialCard = $applicableTradeSettlementFinancialCard;
+        return $this;
+    }
+
+    /**
+     * Gets as payerPartyDebtorFinancialAccount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\DebtorFinancialAccountType
+     */
+    public function getPayerPartyDebtorFinancialAccount()
+    {
+        return $this->payerPartyDebtorFinancialAccount;
+    }
+
+    /**
+     * Sets a new payerPartyDebtorFinancialAccount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\DebtorFinancialAccountType $payerPartyDebtorFinancialAccount
+     * @return self
+     */
+    public function setPayerPartyDebtorFinancialAccount(\horstoeko\zugferd\entities\en16931\ram\DebtorFinancialAccountType $payerPartyDebtorFinancialAccount)
+    {
+        $this->payerPartyDebtorFinancialAccount = $payerPartyDebtorFinancialAccount;
+        return $this;
+    }
+
+    /**
+     * Gets as payeePartyCreditorFinancialAccount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\CreditorFinancialAccountType
+     */
+    public function getPayeePartyCreditorFinancialAccount()
+    {
+        return $this->payeePartyCreditorFinancialAccount;
+    }
+
+    /**
+     * Sets a new payeePartyCreditorFinancialAccount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\CreditorFinancialAccountType $payeePartyCreditorFinancialAccount
+     * @return self
+     */
+    public function setPayeePartyCreditorFinancialAccount(\horstoeko\zugferd\entities\en16931\ram\CreditorFinancialAccountType $payeePartyCreditorFinancialAccount)
+    {
+        $this->payeePartyCreditorFinancialAccount = $payeePartyCreditorFinancialAccount;
+        return $this;
+    }
+
+    /**
+     * Gets as payeeSpecifiedCreditorFinancialInstitution
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\CreditorFinancialInstitutionType
+     */
+    public function getPayeeSpecifiedCreditorFinancialInstitution()
+    {
+        return $this->payeeSpecifiedCreditorFinancialInstitution;
+    }
+
+    /**
+     * Sets a new payeeSpecifiedCreditorFinancialInstitution
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\CreditorFinancialInstitutionType $payeeSpecifiedCreditorFinancialInstitution
+     * @return self
+     */
+    public function setPayeeSpecifiedCreditorFinancialInstitution(\horstoeko\zugferd\entities\en16931\ram\CreditorFinancialInstitutionType $payeeSpecifiedCreditorFinancialInstitution)
+    {
+        $this->payeeSpecifiedCreditorFinancialInstitution = $payeeSpecifiedCreditorFinancialInstitution;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeTaxType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeTaxType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/TradeTaxType.php	(revision 8435)
@@ -0,0 +1,255 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing TradeTaxType
+ *
+ * XSD Type: TradeTaxType
+ */
+class TradeTaxType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $calculatedAmount
+     */
+    private $calculatedAmount = null;
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var string $exemptionReason
+     */
+    private $exemptionReason = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\AmountType $basisAmount
+     */
+    private $basisAmount = null;
+
+    /**
+     * @var string $categoryCode
+     */
+    private $categoryCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\CodeType $exemptionReasonCode
+     */
+    private $exemptionReasonCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\DateType $taxPointDate
+     */
+    private $taxPointDate = null;
+
+    /**
+     * @var string $dueDateTypeCode
+     */
+    private $dueDateTypeCode = null;
+
+    /**
+     * @var float $rateApplicablePercent
+     */
+    private $rateApplicablePercent = null;
+
+    /**
+     * Gets as calculatedAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getCalculatedAmount()
+    {
+        return $this->calculatedAmount;
+    }
+
+    /**
+     * Sets a new calculatedAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $calculatedAmount
+     * @return self
+     */
+    public function setCalculatedAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $calculatedAmount)
+    {
+        $this->calculatedAmount = $calculatedAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as exemptionReason
+     *
+     * @return string
+     */
+    public function getExemptionReason()
+    {
+        return $this->exemptionReason;
+    }
+
+    /**
+     * Sets a new exemptionReason
+     *
+     * @param  string $exemptionReason
+     * @return self
+     */
+    public function setExemptionReason($exemptionReason)
+    {
+        $this->exemptionReason = $exemptionReason;
+        return $this;
+    }
+
+    /**
+     * Gets as basisAmount
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\AmountType
+     */
+    public function getBasisAmount()
+    {
+        return $this->basisAmount;
+    }
+
+    /**
+     * Sets a new basisAmount
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\AmountType $basisAmount
+     * @return self
+     */
+    public function setBasisAmount(\horstoeko\zugferd\entities\en16931\udt\AmountType $basisAmount)
+    {
+        $this->basisAmount = $basisAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as categoryCode
+     *
+     * @return string
+     */
+    public function getCategoryCode()
+    {
+        return $this->categoryCode;
+    }
+
+    /**
+     * Sets a new categoryCode
+     *
+     * @param  string $categoryCode
+     * @return self
+     */
+    public function setCategoryCode($categoryCode)
+    {
+        $this->categoryCode = $categoryCode;
+        return $this;
+    }
+
+    /**
+     * Gets as exemptionReasonCode
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\CodeType
+     */
+    public function getExemptionReasonCode()
+    {
+        return $this->exemptionReasonCode;
+    }
+
+    /**
+     * Sets a new exemptionReasonCode
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\CodeType $exemptionReasonCode
+     * @return self
+     */
+    public function setExemptionReasonCode(\horstoeko\zugferd\entities\en16931\udt\CodeType $exemptionReasonCode)
+    {
+        $this->exemptionReasonCode = $exemptionReasonCode;
+        return $this;
+    }
+
+    /**
+     * Gets as taxPointDate
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\DateType
+     */
+    public function getTaxPointDate()
+    {
+        return $this->taxPointDate;
+    }
+
+    /**
+     * Sets a new taxPointDate
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\DateType $taxPointDate
+     * @return self
+     */
+    public function setTaxPointDate(\horstoeko\zugferd\entities\en16931\udt\DateType $taxPointDate)
+    {
+        $this->taxPointDate = $taxPointDate;
+        return $this;
+    }
+
+    /**
+     * Gets as dueDateTypeCode
+     *
+     * @return string
+     */
+    public function getDueDateTypeCode()
+    {
+        return $this->dueDateTypeCode;
+    }
+
+    /**
+     * Sets a new dueDateTypeCode
+     *
+     * @param  string $dueDateTypeCode
+     * @return self
+     */
+    public function setDueDateTypeCode($dueDateTypeCode)
+    {
+        $this->dueDateTypeCode = $dueDateTypeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as rateApplicablePercent
+     *
+     * @return float
+     */
+    public function getRateApplicablePercent()
+    {
+        return $this->rateApplicablePercent;
+    }
+
+    /**
+     * Sets a new rateApplicablePercent
+     *
+     * @param  float $rateApplicablePercent
+     * @return self
+     */
+    public function setRateApplicablePercent($rateApplicablePercent)
+    {
+        $this->rateApplicablePercent = $rateApplicablePercent;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/UniversalCommunicationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/UniversalCommunicationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/ram/UniversalCommunicationType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\ram;
+
+/**
+ * Class representing UniversalCommunicationType
+ *
+ * XSD Type: UniversalCommunicationType
+ */
+class UniversalCommunicationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\IDType $uRIID
+     */
+    private $uRIID = null;
+
+    /**
+     * @var string $completeNumber
+     */
+    private $completeNumber = null;
+
+    /**
+     * Gets as uRIID
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\IDType
+     */
+    public function getURIID()
+    {
+        return $this->uRIID;
+    }
+
+    /**
+     * Sets a new uRIID
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\IDType $uRIID
+     * @return self
+     */
+    public function setURIID(\horstoeko\zugferd\entities\en16931\udt\IDType $uRIID)
+    {
+        $this->uRIID = $uRIID;
+        return $this;
+    }
+
+    /**
+     * Gets as completeNumber
+     *
+     * @return string
+     */
+    public function getCompleteNumber()
+    {
+        return $this->completeNumber;
+    }
+
+    /**
+     * Sets a new completeNumber
+     *
+     * @param  string $completeNumber
+     * @return self
+     */
+    public function setCompleteNumber($completeNumber)
+    {
+        $this->completeNumber = $completeNumber;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/rsm/CrossIndustryInvoice.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/rsm/CrossIndustryInvoice.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/rsm/CrossIndustryInvoice.php	(revision 8435)
@@ -0,0 +1,12 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\rsm;
+
+/**
+ * Class representing CrossIndustryInvoice
+ */
+class CrossIndustryInvoice extends CrossIndustryInvoiceType
+{
+
+
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/rsm/CrossIndustryInvoiceType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/rsm/CrossIndustryInvoiceType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/rsm/CrossIndustryInvoiceType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\rsm;
+
+/**
+ * Class representing CrossIndustryInvoiceType
+ *
+ * XSD Type: CrossIndustryInvoiceType
+ */
+class CrossIndustryInvoiceType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentContextType $exchangedDocumentContext
+     */
+    private $exchangedDocumentContext = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentType $exchangedDocument
+     */
+    private $exchangedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction
+     */
+    private $supplyChainTradeTransaction = null;
+
+    /**
+     * Gets as exchangedDocumentContext
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentContextType
+     */
+    public function getExchangedDocumentContext()
+    {
+        return $this->exchangedDocumentContext;
+    }
+
+    /**
+     * Sets a new exchangedDocumentContext
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentContextType $exchangedDocumentContext
+     * @return self
+     */
+    public function setExchangedDocumentContext(\horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentContextType $exchangedDocumentContext)
+    {
+        $this->exchangedDocumentContext = $exchangedDocumentContext;
+        return $this;
+    }
+
+    /**
+     * Gets as exchangedDocument
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentType
+     */
+    public function getExchangedDocument()
+    {
+        return $this->exchangedDocument;
+    }
+
+    /**
+     * Sets a new exchangedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentType $exchangedDocument
+     * @return self
+     */
+    public function setExchangedDocument(\horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentType $exchangedDocument)
+    {
+        $this->exchangedDocument = $exchangedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as supplyChainTradeTransaction
+     *
+     * @return \horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeTransactionType
+     */
+    public function getSupplyChainTradeTransaction()
+    {
+        return $this->supplyChainTradeTransaction;
+    }
+
+    /**
+     * Sets a new supplyChainTradeTransaction
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction
+     * @return self
+     */
+    public function setSupplyChainTradeTransaction(\horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction)
+    {
+        $this->supplyChainTradeTransaction = $supplyChainTradeTransaction;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/AmountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/AmountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/AmountType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\udt;
+
+/**
+ * Class representing AmountType
+ *
+ * XSD Type: AmountType
+ */
+class AmountType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $currencyID
+     */
+    private $currencyID = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as currencyID
+     *
+     * @return string
+     */
+    public function getCurrencyID()
+    {
+        return $this->currencyID;
+    }
+
+    /**
+     * Sets a new currencyID
+     *
+     * @param  string $currencyID
+     * @return self
+     */
+    public function setCurrencyID($currencyID)
+    {
+        $this->currencyID = $currencyID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/BinaryObjectType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/BinaryObjectType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/BinaryObjectType.php	(revision 8435)
@@ -0,0 +1,105 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\udt;
+
+/**
+ * Class representing BinaryObjectType
+ *
+ * XSD Type: BinaryObjectType
+ */
+class BinaryObjectType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $mimeCode
+     */
+    private $mimeCode = null;
+
+    /**
+     * @var string $filename
+     */
+    private $filename = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as mimeCode
+     *
+     * @return string
+     */
+    public function getMimeCode()
+    {
+        return $this->mimeCode;
+    }
+
+    /**
+     * Sets a new mimeCode
+     *
+     * @param  string $mimeCode
+     * @return self
+     */
+    public function setMimeCode($mimeCode)
+    {
+        $this->mimeCode = $mimeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as filename
+     *
+     * @return string
+     */
+    public function getFilename()
+    {
+        return $this->filename;
+    }
+
+    /**
+     * Sets a new filename
+     *
+     * @param  string $filename
+     * @return self
+     */
+    public function setFilename($filename)
+    {
+        $this->filename = $filename;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/CodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/CodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/CodeType.php	(revision 8435)
@@ -0,0 +1,105 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\udt;
+
+/**
+ * Class representing CodeType
+ *
+ * XSD Type: CodeType
+ */
+class CodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $listID
+     */
+    private $listID = null;
+
+    /**
+     * @var string $listVersionID
+     */
+    private $listVersionID = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as listID
+     *
+     * @return string
+     */
+    public function getListID()
+    {
+        return $this->listID;
+    }
+
+    /**
+     * Sets a new listID
+     *
+     * @param  string $listID
+     * @return self
+     */
+    public function setListID($listID)
+    {
+        $this->listID = $listID;
+        return $this;
+    }
+
+    /**
+     * Gets as listVersionID
+     *
+     * @return string
+     */
+    public function getListVersionID()
+    {
+        return $this->listVersionID;
+    }
+
+    /**
+     * Sets a new listVersionID
+     *
+     * @param  string $listVersionID
+     * @return self
+     */
+    public function setListVersionID($listVersionID)
+    {
+        $this->listVersionID = $listVersionID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\udt;
+
+/**
+ * Class representing DateTimeType
+ *
+ * XSD Type: DateTimeType
+ */
+class DateTimeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\DateTimeType\DateTimeStringAType $dateTimeString
+     */
+    private $dateTimeString = null;
+
+    /**
+     * Gets as dateTimeString
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\DateTimeType\DateTimeStringAType
+     */
+    public function getDateTimeString()
+    {
+        return $this->dateTimeString;
+    }
+
+    /**
+     * Sets a new dateTimeString
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\DateTimeType\DateTimeStringAType $dateTimeString
+     * @return self
+     */
+    public function setDateTimeString(\horstoeko\zugferd\entities\en16931\udt\DateTimeType\DateTimeStringAType $dateTimeString)
+    {
+        $this->dateTimeString = $dateTimeString;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType/DateTimeStringAType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType/DateTimeStringAType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateTimeType/DateTimeStringAType.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\udt\DateTimeType;
+
+/**
+ * Class representing DateTimeStringAType
+ */
+class DateTimeStringAType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $format
+     */
+    private $format = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as format
+     *
+     * @return string
+     */
+    public function getFormat()
+    {
+        return $this->format;
+    }
+
+    /**
+     * Sets a new format
+     *
+     * @param  string $format
+     * @return self
+     */
+    public function setFormat($format)
+    {
+        $this->format = $format;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\udt;
+
+/**
+ * Class representing DateType
+ *
+ * XSD Type: DateType
+ */
+class DateType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\en16931\udt\DateType\DateStringAType $dateString
+     */
+    private $dateString = null;
+
+    /**
+     * Gets as dateString
+     *
+     * @return \horstoeko\zugferd\entities\en16931\udt\DateType\DateStringAType
+     */
+    public function getDateString()
+    {
+        return $this->dateString;
+    }
+
+    /**
+     * Sets a new dateString
+     *
+     * @param  \horstoeko\zugferd\entities\en16931\udt\DateType\DateStringAType $dateString
+     * @return self
+     */
+    public function setDateString(\horstoeko\zugferd\entities\en16931\udt\DateType\DateStringAType $dateString)
+    {
+        $this->dateString = $dateString;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType/DateStringAType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType/DateStringAType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/DateType/DateStringAType.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\udt\DateType;
+
+/**
+ * Class representing DateStringAType
+ */
+class DateStringAType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $format
+     */
+    private $format = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as format
+     *
+     * @return string
+     */
+    public function getFormat()
+    {
+        return $this->format;
+    }
+
+    /**
+     * Sets a new format
+     *
+     * @param  string $format
+     * @return self
+     */
+    public function setFormat($format)
+    {
+        $this->format = $format;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/IDType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/IDType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/IDType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\udt;
+
+/**
+ * Class representing IDType
+ *
+ * XSD Type: IDType
+ */
+class IDType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $schemeID
+     */
+    private $schemeID = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as schemeID
+     *
+     * @return string
+     */
+    public function getSchemeID()
+    {
+        return $this->schemeID;
+    }
+
+    /**
+     * Sets a new schemeID
+     *
+     * @param  string $schemeID
+     * @return self
+     */
+    public function setSchemeID($schemeID)
+    {
+        $this->schemeID = $schemeID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/IndicatorType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/IndicatorType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/IndicatorType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\udt;
+
+/**
+ * Class representing IndicatorType
+ *
+ * XSD Type: IndicatorType
+ */
+class IndicatorType
+{
+
+    /**
+     * @var bool $indicator
+     */
+    private $indicator = null;
+
+    /**
+     * Gets as indicator
+     *
+     * @return bool
+     */
+    public function getIndicator()
+    {
+        return $this->indicator;
+    }
+
+    /**
+     * Sets a new indicator
+     *
+     * @param  bool $indicator
+     * @return self
+     */
+    public function setIndicator($indicator)
+    {
+        $this->indicator = $indicator;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/PercentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/PercentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/PercentType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\udt;
+
+/**
+ * Class representing PercentType
+ *
+ * XSD Type: PercentType
+ */
+class PercentType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/QuantityType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/QuantityType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/QuantityType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\udt;
+
+/**
+ * Class representing QuantityType
+ *
+ * XSD Type: QuantityType
+ */
+class QuantityType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $unitCode
+     */
+    private $unitCode = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as unitCode
+     *
+     * @return string
+     */
+    public function getUnitCode()
+    {
+        return $this->unitCode;
+    }
+
+    /**
+     * Sets a new unitCode
+     *
+     * @param  string $unitCode
+     * @return self
+     */
+    public function setUnitCode($unitCode)
+    {
+        $this->unitCode = $unitCode;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/TextType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/TextType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/en16931/udt/TextType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\en16931\udt;
+
+/**
+ * Class representing TextType
+ *
+ * XSD Type: TextType
+ */
+class TextType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/AccountingAccountTypeCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/AccountingAccountTypeCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/AccountingAccountTypeCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing AccountingAccountTypeCodeType
+ *
+ * XSD Type: AccountingAccountTypeCodeType
+ */
+class AccountingAccountTypeCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/AllowanceChargeReasonCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/AllowanceChargeReasonCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/AllowanceChargeReasonCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing AllowanceChargeReasonCodeType
+ *
+ * XSD Type: AllowanceChargeReasonCodeType
+ */
+class AllowanceChargeReasonCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/ContactTypeCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/ContactTypeCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/ContactTypeCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing ContactTypeCodeType
+ *
+ * XSD Type: ContactTypeCodeType
+ */
+class ContactTypeCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/CountryIDType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/CountryIDType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/CountryIDType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing CountryIDType
+ *
+ * XSD Type: CountryIDType
+ */
+class CountryIDType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/CurrencyCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/CurrencyCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/CurrencyCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing CurrencyCodeType
+ *
+ * XSD Type: CurrencyCodeType
+ */
+class CurrencyCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/DeliveryTermsCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/DeliveryTermsCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/DeliveryTermsCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing DeliveryTermsCodeType
+ *
+ * XSD Type: DeliveryTermsCodeType
+ */
+class DeliveryTermsCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/DocumentCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/DocumentCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/DocumentCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing DocumentCodeType
+ *
+ * XSD Type: DocumentCodeType
+ */
+class DocumentCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing FormattedDateTimeType
+ *
+ * XSD Type: FormattedDateTimeType
+ */
+class FormattedDateTimeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType\DateTimeStringAType $dateTimeString
+     */
+    private $dateTimeString = null;
+
+    /**
+     * Gets as dateTimeString
+     *
+     * @return \horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType\DateTimeStringAType
+     */
+    public function getDateTimeString()
+    {
+        return $this->dateTimeString;
+    }
+
+    /**
+     * Sets a new dateTimeString
+     *
+     * @param  \horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType\DateTimeStringAType $dateTimeString
+     * @return self
+     */
+    public function setDateTimeString(\horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType\DateTimeStringAType $dateTimeString)
+    {
+        $this->dateTimeString = $dateTimeString;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType/DateTimeStringAType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType/DateTimeStringAType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/FormattedDateTimeType/DateTimeStringAType.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType;
+
+/**
+ * Class representing DateTimeStringAType
+ */
+class DateTimeStringAType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $format
+     */
+    private $format = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as format
+     *
+     * @return string
+     */
+    public function getFormat()
+    {
+        return $this->format;
+    }
+
+    /**
+     * Sets a new format
+     *
+     * @param  string $format
+     * @return self
+     */
+    public function setFormat($format)
+    {
+        $this->format = $format;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/LineStatusCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/LineStatusCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/LineStatusCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing LineStatusCodeType
+ *
+ * XSD Type: LineStatusCodeType
+ */
+class LineStatusCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/PartyRoleCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/PartyRoleCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/PartyRoleCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing PartyRoleCodeType
+ *
+ * XSD Type: PartyRoleCodeType
+ */
+class PartyRoleCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/PaymentMeansCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/PaymentMeansCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/PaymentMeansCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing PaymentMeansCodeType
+ *
+ * XSD Type: PaymentMeansCodeType
+ */
+class PaymentMeansCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/ReferenceCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/ReferenceCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/ReferenceCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing ReferenceCodeType
+ *
+ * XSD Type: ReferenceCodeType
+ */
+class ReferenceCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxCategoryCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxCategoryCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxCategoryCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing TaxCategoryCodeType
+ *
+ * XSD Type: TaxCategoryCodeType
+ */
+class TaxCategoryCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxTypeCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxTypeCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/TaxTypeCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing TaxTypeCodeType
+ *
+ * XSD Type: TaxTypeCodeType
+ */
+class TaxTypeCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/TimeReferenceCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/TimeReferenceCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/TimeReferenceCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing TimeReferenceCodeType
+ *
+ * XSD Type: TimeReferenceCodeType
+ */
+class TimeReferenceCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/TransportModeCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/TransportModeCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/qdt/TransportModeCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\qdt;
+
+/**
+ * Class representing TransportModeCodeType
+ *
+ * XSD Type: TransportModeCodeType
+ */
+class TransportModeCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/AdvancePaymentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/AdvancePaymentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/AdvancePaymentType.php	(revision 8435)
@@ -0,0 +1,129 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing AdvancePaymentType
+ *
+ * XSD Type: AdvancePaymentType
+ */
+class AdvancePaymentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $paidAmount
+     */
+    private $paidAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType $formattedReceivedDateTime
+     */
+    private $formattedReceivedDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeTaxType[] $includedTradeTax
+     */
+    private $includedTradeTax = [
+        
+    ];
+
+    /**
+     * Gets as paidAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getPaidAmount()
+    {
+        return $this->paidAmount;
+    }
+
+    /**
+     * Sets a new paidAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $paidAmount
+     * @return self
+     */
+    public function setPaidAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $paidAmount)
+    {
+        $this->paidAmount = $paidAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as formattedReceivedDateTime
+     *
+     * @return \horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType
+     */
+    public function getFormattedReceivedDateTime()
+    {
+        return $this->formattedReceivedDateTime;
+    }
+
+    /**
+     * Sets a new formattedReceivedDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType $formattedReceivedDateTime
+     * @return self
+     */
+    public function setFormattedReceivedDateTime(\horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType $formattedReceivedDateTime)
+    {
+        $this->formattedReceivedDateTime = $formattedReceivedDateTime;
+        return $this;
+    }
+
+    /**
+     * Adds as includedTradeTax
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeTaxType $includedTradeTax
+     */
+    public function addToIncludedTradeTax(\horstoeko\zugferd\entities\extended\ram\TradeTaxType $includedTradeTax)
+    {
+        $this->includedTradeTax[] = $includedTradeTax;
+        return $this;
+    }
+
+    /**
+     * isset includedTradeTax
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetIncludedTradeTax($index)
+    {
+        return isset($this->includedTradeTax[$index]);
+    }
+
+    /**
+     * unset includedTradeTax
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetIncludedTradeTax($index)
+    {
+        unset($this->includedTradeTax[$index]);
+    }
+
+    /**
+     * Gets as includedTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeTaxType[]
+     */
+    public function getIncludedTradeTax()
+    {
+        return $this->includedTradeTax;
+    }
+
+    /**
+     * Sets a new includedTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeTaxType[] $includedTradeTax
+     * @return self
+     */
+    public function setIncludedTradeTax(array $includedTradeTax)
+    {
+        $this->includedTradeTax = $includedTradeTax;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialAccountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialAccountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialAccountType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing CreditorFinancialAccountType
+ *
+ * XSD Type: CreditorFinancialAccountType
+ */
+class CreditorFinancialAccountType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $iBANID
+     */
+    private $iBANID = null;
+
+    /**
+     * @var string $accountName
+     */
+    private $accountName = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $proprietaryID
+     */
+    private $proprietaryID = null;
+
+    /**
+     * Gets as iBANID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getIBANID()
+    {
+        return $this->iBANID;
+    }
+
+    /**
+     * Sets a new iBANID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $iBANID
+     * @return self
+     */
+    public function setIBANID(\horstoeko\zugferd\entities\extended\udt\IDType $iBANID)
+    {
+        $this->iBANID = $iBANID;
+        return $this;
+    }
+
+    /**
+     * Gets as accountName
+     *
+     * @return string
+     */
+    public function getAccountName()
+    {
+        return $this->accountName;
+    }
+
+    /**
+     * Sets a new accountName
+     *
+     * @param  string $accountName
+     * @return self
+     */
+    public function setAccountName($accountName)
+    {
+        $this->accountName = $accountName;
+        return $this;
+    }
+
+    /**
+     * Gets as proprietaryID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getProprietaryID()
+    {
+        return $this->proprietaryID;
+    }
+
+    /**
+     * Sets a new proprietaryID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $proprietaryID
+     * @return self
+     */
+    public function setProprietaryID(\horstoeko\zugferd\entities\extended\udt\IDType $proprietaryID)
+    {
+        $this->proprietaryID = $proprietaryID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialInstitutionType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialInstitutionType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/CreditorFinancialInstitutionType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing CreditorFinancialInstitutionType
+ *
+ * XSD Type: CreditorFinancialInstitutionType
+ */
+class CreditorFinancialInstitutionType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $bICID
+     */
+    private $bICID = null;
+
+    /**
+     * Gets as bICID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getBICID()
+    {
+        return $this->bICID;
+    }
+
+    /**
+     * Sets a new bICID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $bICID
+     * @return self
+     */
+    public function setBICID(\horstoeko\zugferd\entities\extended\udt\IDType $bICID)
+    {
+        $this->bICID = $bICID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/DebtorFinancialAccountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/DebtorFinancialAccountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/DebtorFinancialAccountType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing DebtorFinancialAccountType
+ *
+ * XSD Type: DebtorFinancialAccountType
+ */
+class DebtorFinancialAccountType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $iBANID
+     */
+    private $iBANID = null;
+
+    /**
+     * Gets as iBANID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getIBANID()
+    {
+        return $this->iBANID;
+    }
+
+    /**
+     * Sets a new iBANID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $iBANID
+     * @return self
+     */
+    public function setIBANID(\horstoeko\zugferd\entities\extended\udt\IDType $iBANID)
+    {
+        $this->iBANID = $iBANID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentContextParameterType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentContextParameterType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentContextParameterType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing DocumentContextParameterType
+ *
+ * XSD Type: DocumentContextParameterType
+ */
+class DocumentContextParameterType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\extended\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentLineDocumentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentLineDocumentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/DocumentLineDocumentType.php	(revision 8435)
@@ -0,0 +1,183 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing DocumentLineDocumentType
+ *
+ * XSD Type: DocumentLineDocumentType
+ */
+class DocumentLineDocumentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $lineID
+     */
+    private $lineID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $parentLineID
+     */
+    private $parentLineID = null;
+
+    /**
+     * @var string $lineStatusCode
+     */
+    private $lineStatusCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\CodeType $lineStatusReasonCode
+     */
+    private $lineStatusReasonCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\NoteType[] $includedNote
+     */
+    private $includedNote = [
+        
+    ];
+
+    /**
+     * Gets as lineID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getLineID()
+    {
+        return $this->lineID;
+    }
+
+    /**
+     * Sets a new lineID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $lineID
+     * @return self
+     */
+    public function setLineID(\horstoeko\zugferd\entities\extended\udt\IDType $lineID)
+    {
+        $this->lineID = $lineID;
+        return $this;
+    }
+
+    /**
+     * Gets as parentLineID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getParentLineID()
+    {
+        return $this->parentLineID;
+    }
+
+    /**
+     * Sets a new parentLineID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $parentLineID
+     * @return self
+     */
+    public function setParentLineID(\horstoeko\zugferd\entities\extended\udt\IDType $parentLineID)
+    {
+        $this->parentLineID = $parentLineID;
+        return $this;
+    }
+
+    /**
+     * Gets as lineStatusCode
+     *
+     * @return string
+     */
+    public function getLineStatusCode()
+    {
+        return $this->lineStatusCode;
+    }
+
+    /**
+     * Sets a new lineStatusCode
+     *
+     * @param  string $lineStatusCode
+     * @return self
+     */
+    public function setLineStatusCode($lineStatusCode)
+    {
+        $this->lineStatusCode = $lineStatusCode;
+        return $this;
+    }
+
+    /**
+     * Gets as lineStatusReasonCode
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\CodeType
+     */
+    public function getLineStatusReasonCode()
+    {
+        return $this->lineStatusReasonCode;
+    }
+
+    /**
+     * Sets a new lineStatusReasonCode
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\CodeType $lineStatusReasonCode
+     * @return self
+     */
+    public function setLineStatusReasonCode(\horstoeko\zugferd\entities\extended\udt\CodeType $lineStatusReasonCode)
+    {
+        $this->lineStatusReasonCode = $lineStatusReasonCode;
+        return $this;
+    }
+
+    /**
+     * Adds as includedNote
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\NoteType $includedNote
+     */
+    public function addToIncludedNote(\horstoeko\zugferd\entities\extended\ram\NoteType $includedNote)
+    {
+        $this->includedNote[] = $includedNote;
+        return $this;
+    }
+
+    /**
+     * isset includedNote
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetIncludedNote($index)
+    {
+        return isset($this->includedNote[$index]);
+    }
+
+    /**
+     * unset includedNote
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetIncludedNote($index)
+    {
+        unset($this->includedNote[$index]);
+    }
+
+    /**
+     * Gets as includedNote
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\NoteType[]
+     */
+    public function getIncludedNote()
+    {
+        return $this->includedNote;
+    }
+
+    /**
+     * Sets a new includedNote
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\NoteType[] $includedNote
+     * @return self
+     */
+    public function setIncludedNote(array $includedNote)
+    {
+        $this->includedNote = $includedNote;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentContextType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentContextType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentContextType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing ExchangedDocumentContextType
+ *
+ * XSD Type: ExchangedDocumentContextType
+ */
+class ExchangedDocumentContextType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IndicatorType $testIndicator
+     */
+    private $testIndicator = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter
+     */
+    private $businessProcessSpecifiedDocumentContextParameter = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter
+     */
+    private $guidelineSpecifiedDocumentContextParameter = null;
+
+    /**
+     * Gets as testIndicator
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IndicatorType
+     */
+    public function getTestIndicator()
+    {
+        return $this->testIndicator;
+    }
+
+    /**
+     * Sets a new testIndicator
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IndicatorType $testIndicator
+     * @return self
+     */
+    public function setTestIndicator(\horstoeko\zugferd\entities\extended\udt\IndicatorType $testIndicator)
+    {
+        $this->testIndicator = $testIndicator;
+        return $this;
+    }
+
+    /**
+     * Gets as businessProcessSpecifiedDocumentContextParameter
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\DocumentContextParameterType
+     */
+    public function getBusinessProcessSpecifiedDocumentContextParameter()
+    {
+        return $this->businessProcessSpecifiedDocumentContextParameter;
+    }
+
+    /**
+     * Sets a new businessProcessSpecifiedDocumentContextParameter
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter
+     * @return self
+     */
+    public function setBusinessProcessSpecifiedDocumentContextParameter(\horstoeko\zugferd\entities\extended\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter)
+    {
+        $this->businessProcessSpecifiedDocumentContextParameter = $businessProcessSpecifiedDocumentContextParameter;
+        return $this;
+    }
+
+    /**
+     * Gets as guidelineSpecifiedDocumentContextParameter
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\DocumentContextParameterType
+     */
+    public function getGuidelineSpecifiedDocumentContextParameter()
+    {
+        return $this->guidelineSpecifiedDocumentContextParameter;
+    }
+
+    /**
+     * Sets a new guidelineSpecifiedDocumentContextParameter
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter
+     * @return self
+     */
+    public function setGuidelineSpecifiedDocumentContextParameter(\horstoeko\zugferd\entities\extended\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter)
+    {
+        $this->guidelineSpecifiedDocumentContextParameter = $guidelineSpecifiedDocumentContextParameter;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ExchangedDocumentType.php	(revision 8435)
@@ -0,0 +1,300 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing ExchangedDocumentType
+ *
+ * XSD Type: ExchangedDocumentType
+ */
+class ExchangedDocumentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $name
+     */
+    private $name = null;
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\DateTimeType $issueDateTime
+     */
+    private $issueDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IndicatorType $copyIndicator
+     */
+    private $copyIndicator = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType[] $languageID
+     */
+    private $languageID = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\NoteType[] $includedNote
+     */
+    private $includedNote = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType $effectiveSpecifiedPeriod
+     */
+    private $effectiveSpecifiedPeriod = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\extended\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as issueDateTime
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\DateTimeType
+     */
+    public function getIssueDateTime()
+    {
+        return $this->issueDateTime;
+    }
+
+    /**
+     * Sets a new issueDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\DateTimeType $issueDateTime
+     * @return self
+     */
+    public function setIssueDateTime(\horstoeko\zugferd\entities\extended\udt\DateTimeType $issueDateTime)
+    {
+        $this->issueDateTime = $issueDateTime;
+        return $this;
+    }
+
+    /**
+     * Gets as copyIndicator
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IndicatorType
+     */
+    public function getCopyIndicator()
+    {
+        return $this->copyIndicator;
+    }
+
+    /**
+     * Sets a new copyIndicator
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IndicatorType $copyIndicator
+     * @return self
+     */
+    public function setCopyIndicator(\horstoeko\zugferd\entities\extended\udt\IndicatorType $copyIndicator)
+    {
+        $this->copyIndicator = $copyIndicator;
+        return $this;
+    }
+
+    /**
+     * Adds as languageID
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $languageID
+     */
+    public function addToLanguageID(\horstoeko\zugferd\entities\extended\udt\IDType $languageID)
+    {
+        $this->languageID[] = $languageID;
+        return $this;
+    }
+
+    /**
+     * isset languageID
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetLanguageID($index)
+    {
+        return isset($this->languageID[$index]);
+    }
+
+    /**
+     * unset languageID
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetLanguageID($index)
+    {
+        unset($this->languageID[$index]);
+    }
+
+    /**
+     * Gets as languageID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType[]
+     */
+    public function getLanguageID()
+    {
+        return $this->languageID;
+    }
+
+    /**
+     * Sets a new languageID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType[] $languageID
+     * @return self
+     */
+    public function setLanguageID(array $languageID)
+    {
+        $this->languageID = $languageID;
+        return $this;
+    }
+
+    /**
+     * Adds as includedNote
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\NoteType $includedNote
+     */
+    public function addToIncludedNote(\horstoeko\zugferd\entities\extended\ram\NoteType $includedNote)
+    {
+        $this->includedNote[] = $includedNote;
+        return $this;
+    }
+
+    /**
+     * isset includedNote
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetIncludedNote($index)
+    {
+        return isset($this->includedNote[$index]);
+    }
+
+    /**
+     * unset includedNote
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetIncludedNote($index)
+    {
+        unset($this->includedNote[$index]);
+    }
+
+    /**
+     * Gets as includedNote
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\NoteType[]
+     */
+    public function getIncludedNote()
+    {
+        return $this->includedNote;
+    }
+
+    /**
+     * Sets a new includedNote
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\NoteType[] $includedNote
+     * @return self
+     */
+    public function setIncludedNote(array $includedNote)
+    {
+        $this->includedNote = $includedNote;
+        return $this;
+    }
+
+    /**
+     * Gets as effectiveSpecifiedPeriod
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType
+     */
+    public function getEffectiveSpecifiedPeriod()
+    {
+        return $this->effectiveSpecifiedPeriod;
+    }
+
+    /**
+     * Sets a new effectiveSpecifiedPeriod
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType $effectiveSpecifiedPeriod
+     * @return self
+     */
+    public function setEffectiveSpecifiedPeriod(\horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType $effectiveSpecifiedPeriod)
+    {
+        $this->effectiveSpecifiedPeriod = $effectiveSpecifiedPeriod;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeAgreementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeAgreementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeAgreementType.php	(revision 8435)
@@ -0,0 +1,516 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing HeaderTradeAgreementType
+ *
+ * XSD Type: HeaderTradeAgreementType
+ */
+class HeaderTradeAgreementType
+{
+
+    /**
+     * @var string $buyerReference
+     */
+    private $buyerReference = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $sellerTradeParty
+     */
+    private $sellerTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $buyerTradeParty
+     */
+    private $buyerTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $salesAgentTradeParty
+     */
+    private $salesAgentTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $buyerTaxRepresentativeTradeParty
+     */
+    private $buyerTaxRepresentativeTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $sellerTaxRepresentativeTradeParty
+     */
+    private $sellerTaxRepresentativeTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $productEndUserTradeParty
+     */
+    private $productEndUserTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeDeliveryTermsType $applicableTradeDeliveryTerms
+     */
+    private $applicableTradeDeliveryTerms = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $sellerOrderReferencedDocument
+     */
+    private $sellerOrderReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     */
+    private $buyerOrderReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $quotationReferencedDocument
+     */
+    private $quotationReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $contractReferencedDocument
+     */
+    private $contractReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[] $additionalReferencedDocument
+     */
+    private $additionalReferencedDocument = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $buyerAgentTradeParty
+     */
+    private $buyerAgentTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ProcuringProjectType $specifiedProcuringProject
+     */
+    private $specifiedProcuringProject = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[] $ultimateCustomerOrderReferencedDocument
+     */
+    private $ultimateCustomerOrderReferencedDocument = [
+        
+    ];
+
+    /**
+     * Gets as buyerReference
+     *
+     * @return string
+     */
+    public function getBuyerReference()
+    {
+        return $this->buyerReference;
+    }
+
+    /**
+     * Sets a new buyerReference
+     *
+     * @param  string $buyerReference
+     * @return self
+     */
+    public function setBuyerReference($buyerReference)
+    {
+        $this->buyerReference = $buyerReference;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getSellerTradeParty()
+    {
+        return $this->sellerTradeParty;
+    }
+
+    /**
+     * Sets a new sellerTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $sellerTradeParty
+     * @return self
+     */
+    public function setSellerTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $sellerTradeParty)
+    {
+        $this->sellerTradeParty = $sellerTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getBuyerTradeParty()
+    {
+        return $this->buyerTradeParty;
+    }
+
+    /**
+     * Sets a new buyerTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $buyerTradeParty
+     * @return self
+     */
+    public function setBuyerTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $buyerTradeParty)
+    {
+        $this->buyerTradeParty = $buyerTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as salesAgentTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getSalesAgentTradeParty()
+    {
+        return $this->salesAgentTradeParty;
+    }
+
+    /**
+     * Sets a new salesAgentTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $salesAgentTradeParty
+     * @return self
+     */
+    public function setSalesAgentTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $salesAgentTradeParty)
+    {
+        $this->salesAgentTradeParty = $salesAgentTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerTaxRepresentativeTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getBuyerTaxRepresentativeTradeParty()
+    {
+        return $this->buyerTaxRepresentativeTradeParty;
+    }
+
+    /**
+     * Sets a new buyerTaxRepresentativeTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $buyerTaxRepresentativeTradeParty
+     * @return self
+     */
+    public function setBuyerTaxRepresentativeTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $buyerTaxRepresentativeTradeParty)
+    {
+        $this->buyerTaxRepresentativeTradeParty = $buyerTaxRepresentativeTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerTaxRepresentativeTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getSellerTaxRepresentativeTradeParty()
+    {
+        return $this->sellerTaxRepresentativeTradeParty;
+    }
+
+    /**
+     * Sets a new sellerTaxRepresentativeTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $sellerTaxRepresentativeTradeParty
+     * @return self
+     */
+    public function setSellerTaxRepresentativeTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $sellerTaxRepresentativeTradeParty)
+    {
+        $this->sellerTaxRepresentativeTradeParty = $sellerTaxRepresentativeTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as productEndUserTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getProductEndUserTradeParty()
+    {
+        return $this->productEndUserTradeParty;
+    }
+
+    /**
+     * Sets a new productEndUserTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $productEndUserTradeParty
+     * @return self
+     */
+    public function setProductEndUserTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $productEndUserTradeParty)
+    {
+        $this->productEndUserTradeParty = $productEndUserTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableTradeDeliveryTerms
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeDeliveryTermsType
+     */
+    public function getApplicableTradeDeliveryTerms()
+    {
+        return $this->applicableTradeDeliveryTerms;
+    }
+
+    /**
+     * Sets a new applicableTradeDeliveryTerms
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeDeliveryTermsType $applicableTradeDeliveryTerms
+     * @return self
+     */
+    public function setApplicableTradeDeliveryTerms(\horstoeko\zugferd\entities\extended\ram\TradeDeliveryTermsType $applicableTradeDeliveryTerms)
+    {
+        $this->applicableTradeDeliveryTerms = $applicableTradeDeliveryTerms;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerOrderReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getSellerOrderReferencedDocument()
+    {
+        return $this->sellerOrderReferencedDocument;
+    }
+
+    /**
+     * Sets a new sellerOrderReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $sellerOrderReferencedDocument
+     * @return self
+     */
+    public function setSellerOrderReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $sellerOrderReferencedDocument)
+    {
+        $this->sellerOrderReferencedDocument = $sellerOrderReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerOrderReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getBuyerOrderReferencedDocument()
+    {
+        return $this->buyerOrderReferencedDocument;
+    }
+
+    /**
+     * Sets a new buyerOrderReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     * @return self
+     */
+    public function setBuyerOrderReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $buyerOrderReferencedDocument)
+    {
+        $this->buyerOrderReferencedDocument = $buyerOrderReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as quotationReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getQuotationReferencedDocument()
+    {
+        return $this->quotationReferencedDocument;
+    }
+
+    /**
+     * Sets a new quotationReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $quotationReferencedDocument
+     * @return self
+     */
+    public function setQuotationReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $quotationReferencedDocument)
+    {
+        $this->quotationReferencedDocument = $quotationReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as contractReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getContractReferencedDocument()
+    {
+        return $this->contractReferencedDocument;
+    }
+
+    /**
+     * Sets a new contractReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $contractReferencedDocument
+     * @return self
+     */
+    public function setContractReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $contractReferencedDocument)
+    {
+        $this->contractReferencedDocument = $contractReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Adds as additionalReferencedDocument
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $additionalReferencedDocument
+     */
+    public function addToAdditionalReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $additionalReferencedDocument)
+    {
+        $this->additionalReferencedDocument[] = $additionalReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * isset additionalReferencedDocument
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetAdditionalReferencedDocument($index)
+    {
+        return isset($this->additionalReferencedDocument[$index]);
+    }
+
+    /**
+     * unset additionalReferencedDocument
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetAdditionalReferencedDocument($index)
+    {
+        unset($this->additionalReferencedDocument[$index]);
+    }
+
+    /**
+     * Gets as additionalReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[]
+     */
+    public function getAdditionalReferencedDocument()
+    {
+        return $this->additionalReferencedDocument;
+    }
+
+    /**
+     * Sets a new additionalReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[] $additionalReferencedDocument
+     * @return self
+     */
+    public function setAdditionalReferencedDocument(array $additionalReferencedDocument)
+    {
+        $this->additionalReferencedDocument = $additionalReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerAgentTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getBuyerAgentTradeParty()
+    {
+        return $this->buyerAgentTradeParty;
+    }
+
+    /**
+     * Sets a new buyerAgentTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $buyerAgentTradeParty
+     * @return self
+     */
+    public function setBuyerAgentTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $buyerAgentTradeParty)
+    {
+        $this->buyerAgentTradeParty = $buyerAgentTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedProcuringProject
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ProcuringProjectType
+     */
+    public function getSpecifiedProcuringProject()
+    {
+        return $this->specifiedProcuringProject;
+    }
+
+    /**
+     * Sets a new specifiedProcuringProject
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ProcuringProjectType $specifiedProcuringProject
+     * @return self
+     */
+    public function setSpecifiedProcuringProject(\horstoeko\zugferd\entities\extended\ram\ProcuringProjectType $specifiedProcuringProject)
+    {
+        $this->specifiedProcuringProject = $specifiedProcuringProject;
+        return $this;
+    }
+
+    /**
+     * Adds as ultimateCustomerOrderReferencedDocument
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $ultimateCustomerOrderReferencedDocument
+     */
+    public function addToUltimateCustomerOrderReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $ultimateCustomerOrderReferencedDocument)
+    {
+        $this->ultimateCustomerOrderReferencedDocument[] = $ultimateCustomerOrderReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * isset ultimateCustomerOrderReferencedDocument
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetUltimateCustomerOrderReferencedDocument($index)
+    {
+        return isset($this->ultimateCustomerOrderReferencedDocument[$index]);
+    }
+
+    /**
+     * unset ultimateCustomerOrderReferencedDocument
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetUltimateCustomerOrderReferencedDocument($index)
+    {
+        unset($this->ultimateCustomerOrderReferencedDocument[$index]);
+    }
+
+    /**
+     * Gets as ultimateCustomerOrderReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[]
+     */
+    public function getUltimateCustomerOrderReferencedDocument()
+    {
+        return $this->ultimateCustomerOrderReferencedDocument;
+    }
+
+    /**
+     * Sets a new ultimateCustomerOrderReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[] $ultimateCustomerOrderReferencedDocument
+     * @return self
+     */
+    public function setUltimateCustomerOrderReferencedDocument(array $ultimateCustomerOrderReferencedDocument)
+    {
+        $this->ultimateCustomerOrderReferencedDocument = $ultimateCustomerOrderReferencedDocument;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeDeliveryType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeDeliveryType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeDeliveryType.php	(revision 8435)
@@ -0,0 +1,262 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing HeaderTradeDeliveryType
+ *
+ * XSD Type: HeaderTradeDeliveryType
+ */
+class HeaderTradeDeliveryType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType[] $relatedSupplyChainConsignment
+     */
+    private $relatedSupplyChainConsignment = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $shipToTradeParty
+     */
+    private $shipToTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $ultimateShipToTradeParty
+     */
+    private $ultimateShipToTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $shipFromTradeParty
+     */
+    private $shipFromTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\SupplyChainEventType $actualDeliverySupplyChainEvent
+     */
+    private $actualDeliverySupplyChainEvent = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $despatchAdviceReferencedDocument
+     */
+    private $despatchAdviceReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $receivingAdviceReferencedDocument
+     */
+    private $receivingAdviceReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $deliveryNoteReferencedDocument
+     */
+    private $deliveryNoteReferencedDocument = null;
+
+    /**
+     * Adds as specifiedLogisticsTransportMovement
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType $specifiedLogisticsTransportMovement
+     */
+    public function addToRelatedSupplyChainConsignment(\horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType $specifiedLogisticsTransportMovement)
+    {
+        $this->relatedSupplyChainConsignment[] = $specifiedLogisticsTransportMovement;
+        return $this;
+    }
+
+    /**
+     * isset relatedSupplyChainConsignment
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetRelatedSupplyChainConsignment($index)
+    {
+        return isset($this->relatedSupplyChainConsignment[$index]);
+    }
+
+    /**
+     * unset relatedSupplyChainConsignment
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetRelatedSupplyChainConsignment($index)
+    {
+        unset($this->relatedSupplyChainConsignment[$index]);
+    }
+
+    /**
+     * Gets as relatedSupplyChainConsignment
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType[]
+     */
+    public function getRelatedSupplyChainConsignment()
+    {
+        return $this->relatedSupplyChainConsignment;
+    }
+
+    /**
+     * Sets a new relatedSupplyChainConsignment
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType[] $relatedSupplyChainConsignment
+     * @return self
+     */
+    public function setRelatedSupplyChainConsignment(array $relatedSupplyChainConsignment)
+    {
+        $this->relatedSupplyChainConsignment = $relatedSupplyChainConsignment;
+        return $this;
+    }
+
+    /**
+     * Gets as shipToTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getShipToTradeParty()
+    {
+        return $this->shipToTradeParty;
+    }
+
+    /**
+     * Sets a new shipToTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $shipToTradeParty
+     * @return self
+     */
+    public function setShipToTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $shipToTradeParty)
+    {
+        $this->shipToTradeParty = $shipToTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as ultimateShipToTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getUltimateShipToTradeParty()
+    {
+        return $this->ultimateShipToTradeParty;
+    }
+
+    /**
+     * Sets a new ultimateShipToTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $ultimateShipToTradeParty
+     * @return self
+     */
+    public function setUltimateShipToTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $ultimateShipToTradeParty)
+    {
+        $this->ultimateShipToTradeParty = $ultimateShipToTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as shipFromTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getShipFromTradeParty()
+    {
+        return $this->shipFromTradeParty;
+    }
+
+    /**
+     * Sets a new shipFromTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $shipFromTradeParty
+     * @return self
+     */
+    public function setShipFromTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $shipFromTradeParty)
+    {
+        $this->shipFromTradeParty = $shipFromTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as actualDeliverySupplyChainEvent
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\SupplyChainEventType
+     */
+    public function getActualDeliverySupplyChainEvent()
+    {
+        return $this->actualDeliverySupplyChainEvent;
+    }
+
+    /**
+     * Sets a new actualDeliverySupplyChainEvent
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\SupplyChainEventType $actualDeliverySupplyChainEvent
+     * @return self
+     */
+    public function setActualDeliverySupplyChainEvent(\horstoeko\zugferd\entities\extended\ram\SupplyChainEventType $actualDeliverySupplyChainEvent)
+    {
+        $this->actualDeliverySupplyChainEvent = $actualDeliverySupplyChainEvent;
+        return $this;
+    }
+
+    /**
+     * Gets as despatchAdviceReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getDespatchAdviceReferencedDocument()
+    {
+        return $this->despatchAdviceReferencedDocument;
+    }
+
+    /**
+     * Sets a new despatchAdviceReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $despatchAdviceReferencedDocument
+     * @return self
+     */
+    public function setDespatchAdviceReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $despatchAdviceReferencedDocument)
+    {
+        $this->despatchAdviceReferencedDocument = $despatchAdviceReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as receivingAdviceReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getReceivingAdviceReferencedDocument()
+    {
+        return $this->receivingAdviceReferencedDocument;
+    }
+
+    /**
+     * Sets a new receivingAdviceReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $receivingAdviceReferencedDocument
+     * @return self
+     */
+    public function setReceivingAdviceReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $receivingAdviceReferencedDocument)
+    {
+        $this->receivingAdviceReferencedDocument = $receivingAdviceReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as deliveryNoteReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getDeliveryNoteReferencedDocument()
+    {
+        return $this->deliveryNoteReferencedDocument;
+    }
+
+    /**
+     * Sets a new deliveryNoteReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $deliveryNoteReferencedDocument
+     * @return self
+     */
+    public function setDeliveryNoteReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $deliveryNoteReferencedDocument)
+    {
+        $this->deliveryNoteReferencedDocument = $deliveryNoteReferencedDocument;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeSettlementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeSettlementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/HeaderTradeSettlementType.php	(revision 8435)
@@ -0,0 +1,804 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing HeaderTradeSettlementType
+ *
+ * XSD Type: HeaderTradeSettlementType
+ */
+class HeaderTradeSettlementType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $creditorReferenceID
+     */
+    private $creditorReferenceID = null;
+
+    /**
+     * @var string $paymentReference
+     */
+    private $paymentReference = null;
+
+    /**
+     * @var string $taxCurrencyCode
+     */
+    private $taxCurrencyCode = null;
+
+    /**
+     * @var string $invoiceCurrencyCode
+     */
+    private $invoiceCurrencyCode = null;
+
+    /**
+     * @var string $invoiceIssuerReference
+     */
+    private $invoiceIssuerReference = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $invoicerTradeParty
+     */
+    private $invoicerTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $invoiceeTradeParty
+     */
+    private $invoiceeTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $payeeTradeParty
+     */
+    private $payeeTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $payerTradeParty
+     */
+    private $payerTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeCurrencyExchangeType $taxApplicableTradeCurrencyExchange
+     */
+    private $taxApplicableTradeCurrencyExchange = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeSettlementPaymentMeansType[] $specifiedTradeSettlementPaymentMeans
+     */
+    private $specifiedTradeSettlementPaymentMeans = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeTaxType[] $applicableTradeTax
+     */
+    private $applicableTradeTax = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     */
+    private $billingSpecifiedPeriod = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     */
+    private $specifiedTradeAllowanceCharge = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\LogisticsServiceChargeType[] $specifiedLogisticsServiceCharge
+     */
+    private $specifiedLogisticsServiceCharge = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePaymentTermsType[] $specifiedTradePaymentTerms
+     */
+    private $specifiedTradePaymentTerms = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation
+     */
+    private $specifiedTradeSettlementHeaderMonetarySummation = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $invoiceReferencedDocument
+     */
+    private $invoiceReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType[] $receivableSpecifiedTradeAccountingAccount
+     */
+    private $receivableSpecifiedTradeAccountingAccount = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\AdvancePaymentType[] $specifiedAdvancePayment
+     */
+    private $specifiedAdvancePayment = [
+        
+    ];
+
+    /**
+     * Gets as creditorReferenceID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getCreditorReferenceID()
+    {
+        return $this->creditorReferenceID;
+    }
+
+    /**
+     * Sets a new creditorReferenceID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $creditorReferenceID
+     * @return self
+     */
+    public function setCreditorReferenceID(\horstoeko\zugferd\entities\extended\udt\IDType $creditorReferenceID)
+    {
+        $this->creditorReferenceID = $creditorReferenceID;
+        return $this;
+    }
+
+    /**
+     * Gets as paymentReference
+     *
+     * @return string
+     */
+    public function getPaymentReference()
+    {
+        return $this->paymentReference;
+    }
+
+    /**
+     * Sets a new paymentReference
+     *
+     * @param  string $paymentReference
+     * @return self
+     */
+    public function setPaymentReference($paymentReference)
+    {
+        $this->paymentReference = $paymentReference;
+        return $this;
+    }
+
+    /**
+     * Gets as taxCurrencyCode
+     *
+     * @return string
+     */
+    public function getTaxCurrencyCode()
+    {
+        return $this->taxCurrencyCode;
+    }
+
+    /**
+     * Sets a new taxCurrencyCode
+     *
+     * @param  string $taxCurrencyCode
+     * @return self
+     */
+    public function setTaxCurrencyCode($taxCurrencyCode)
+    {
+        $this->taxCurrencyCode = $taxCurrencyCode;
+        return $this;
+    }
+
+    /**
+     * Gets as invoiceCurrencyCode
+     *
+     * @return string
+     */
+    public function getInvoiceCurrencyCode()
+    {
+        return $this->invoiceCurrencyCode;
+    }
+
+    /**
+     * Sets a new invoiceCurrencyCode
+     *
+     * @param  string $invoiceCurrencyCode
+     * @return self
+     */
+    public function setInvoiceCurrencyCode($invoiceCurrencyCode)
+    {
+        $this->invoiceCurrencyCode = $invoiceCurrencyCode;
+        return $this;
+    }
+
+    /**
+     * Gets as invoiceIssuerReference
+     *
+     * @return string
+     */
+    public function getInvoiceIssuerReference()
+    {
+        return $this->invoiceIssuerReference;
+    }
+
+    /**
+     * Sets a new invoiceIssuerReference
+     *
+     * @param  string $invoiceIssuerReference
+     * @return self
+     */
+    public function setInvoiceIssuerReference($invoiceIssuerReference)
+    {
+        $this->invoiceIssuerReference = $invoiceIssuerReference;
+        return $this;
+    }
+
+    /**
+     * Gets as invoicerTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getInvoicerTradeParty()
+    {
+        return $this->invoicerTradeParty;
+    }
+
+    /**
+     * Sets a new invoicerTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $invoicerTradeParty
+     * @return self
+     */
+    public function setInvoicerTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $invoicerTradeParty)
+    {
+        $this->invoicerTradeParty = $invoicerTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as invoiceeTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getInvoiceeTradeParty()
+    {
+        return $this->invoiceeTradeParty;
+    }
+
+    /**
+     * Sets a new invoiceeTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $invoiceeTradeParty
+     * @return self
+     */
+    public function setInvoiceeTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $invoiceeTradeParty)
+    {
+        $this->invoiceeTradeParty = $invoiceeTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as payeeTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getPayeeTradeParty()
+    {
+        return $this->payeeTradeParty;
+    }
+
+    /**
+     * Sets a new payeeTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $payeeTradeParty
+     * @return self
+     */
+    public function setPayeeTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $payeeTradeParty)
+    {
+        $this->payeeTradeParty = $payeeTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as payerTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getPayerTradeParty()
+    {
+        return $this->payerTradeParty;
+    }
+
+    /**
+     * Sets a new payerTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $payerTradeParty
+     * @return self
+     */
+    public function setPayerTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $payerTradeParty)
+    {
+        $this->payerTradeParty = $payerTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as taxApplicableTradeCurrencyExchange
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeCurrencyExchangeType
+     */
+    public function getTaxApplicableTradeCurrencyExchange()
+    {
+        return $this->taxApplicableTradeCurrencyExchange;
+    }
+
+    /**
+     * Sets a new taxApplicableTradeCurrencyExchange
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeCurrencyExchangeType $taxApplicableTradeCurrencyExchange
+     * @return self
+     */
+    public function setTaxApplicableTradeCurrencyExchange(\horstoeko\zugferd\entities\extended\ram\TradeCurrencyExchangeType $taxApplicableTradeCurrencyExchange)
+    {
+        $this->taxApplicableTradeCurrencyExchange = $taxApplicableTradeCurrencyExchange;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTradeSettlementPaymentMeans
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans
+     */
+    public function addToSpecifiedTradeSettlementPaymentMeans(\horstoeko\zugferd\entities\extended\ram\TradeSettlementPaymentMeansType $specifiedTradeSettlementPaymentMeans)
+    {
+        $this->specifiedTradeSettlementPaymentMeans[] = $specifiedTradeSettlementPaymentMeans;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTradeSettlementPaymentMeans
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTradeSettlementPaymentMeans($index)
+    {
+        return isset($this->specifiedTradeSettlementPaymentMeans[$index]);
+    }
+
+    /**
+     * unset specifiedTradeSettlementPaymentMeans
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTradeSettlementPaymentMeans($index)
+    {
+        unset($this->specifiedTradeSettlementPaymentMeans[$index]);
+    }
+
+    /**
+     * Gets as specifiedTradeSettlementPaymentMeans
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeSettlementPaymentMeansType[]
+     */
+    public function getSpecifiedTradeSettlementPaymentMeans()
+    {
+        return $this->specifiedTradeSettlementPaymentMeans;
+    }
+
+    /**
+     * Sets a new specifiedTradeSettlementPaymentMeans
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeSettlementPaymentMeansType[] $specifiedTradeSettlementPaymentMeans
+     * @return self
+     */
+    public function setSpecifiedTradeSettlementPaymentMeans(array $specifiedTradeSettlementPaymentMeans)
+    {
+        $this->specifiedTradeSettlementPaymentMeans = $specifiedTradeSettlementPaymentMeans;
+        return $this;
+    }
+
+    /**
+     * Adds as applicableTradeTax
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeTaxType $applicableTradeTax
+     */
+    public function addToApplicableTradeTax(\horstoeko\zugferd\entities\extended\ram\TradeTaxType $applicableTradeTax)
+    {
+        $this->applicableTradeTax[] = $applicableTradeTax;
+        return $this;
+    }
+
+    /**
+     * isset applicableTradeTax
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetApplicableTradeTax($index)
+    {
+        return isset($this->applicableTradeTax[$index]);
+    }
+
+    /**
+     * unset applicableTradeTax
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetApplicableTradeTax($index)
+    {
+        unset($this->applicableTradeTax[$index]);
+    }
+
+    /**
+     * Gets as applicableTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeTaxType[]
+     */
+    public function getApplicableTradeTax()
+    {
+        return $this->applicableTradeTax;
+    }
+
+    /**
+     * Sets a new applicableTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeTaxType[] $applicableTradeTax
+     * @return self
+     */
+    public function setApplicableTradeTax(array $applicableTradeTax)
+    {
+        $this->applicableTradeTax = $applicableTradeTax;
+        return $this;
+    }
+
+    /**
+     * Gets as billingSpecifiedPeriod
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType
+     */
+    public function getBillingSpecifiedPeriod()
+    {
+        return $this->billingSpecifiedPeriod;
+    }
+
+    /**
+     * Sets a new billingSpecifiedPeriod
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     * @return self
+     */
+    public function setBillingSpecifiedPeriod(\horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType $billingSpecifiedPeriod)
+    {
+        $this->billingSpecifiedPeriod = $billingSpecifiedPeriod;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTradeAllowanceCharge
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge
+     */
+    public function addToSpecifiedTradeAllowanceCharge(\horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge[] = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTradeAllowanceCharge($index)
+    {
+        return isset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * unset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTradeAllowanceCharge($index)
+    {
+        unset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * Gets as specifiedTradeAllowanceCharge
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType[]
+     */
+    public function getSpecifiedTradeAllowanceCharge()
+    {
+        return $this->specifiedTradeAllowanceCharge;
+    }
+
+    /**
+     * Sets a new specifiedTradeAllowanceCharge
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     * @return self
+     */
+    public function setSpecifiedTradeAllowanceCharge(array $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedLogisticsServiceCharge
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\LogisticsServiceChargeType $specifiedLogisticsServiceCharge
+     */
+    public function addToSpecifiedLogisticsServiceCharge(\horstoeko\zugferd\entities\extended\ram\LogisticsServiceChargeType $specifiedLogisticsServiceCharge)
+    {
+        $this->specifiedLogisticsServiceCharge[] = $specifiedLogisticsServiceCharge;
+        return $this;
+    }
+
+    /**
+     * isset specifiedLogisticsServiceCharge
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedLogisticsServiceCharge($index)
+    {
+        return isset($this->specifiedLogisticsServiceCharge[$index]);
+    }
+
+    /**
+     * unset specifiedLogisticsServiceCharge
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedLogisticsServiceCharge($index)
+    {
+        unset($this->specifiedLogisticsServiceCharge[$index]);
+    }
+
+    /**
+     * Gets as specifiedLogisticsServiceCharge
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\LogisticsServiceChargeType[]
+     */
+    public function getSpecifiedLogisticsServiceCharge()
+    {
+        return $this->specifiedLogisticsServiceCharge;
+    }
+
+    /**
+     * Sets a new specifiedLogisticsServiceCharge
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\LogisticsServiceChargeType[] $specifiedLogisticsServiceCharge
+     * @return self
+     */
+    public function setSpecifiedLogisticsServiceCharge(array $specifiedLogisticsServiceCharge)
+    {
+        $this->specifiedLogisticsServiceCharge = $specifiedLogisticsServiceCharge;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTradePaymentTerms
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePaymentTermsType $specifiedTradePaymentTerms
+     */
+    public function addToSpecifiedTradePaymentTerms(\horstoeko\zugferd\entities\extended\ram\TradePaymentTermsType $specifiedTradePaymentTerms)
+    {
+        $this->specifiedTradePaymentTerms[] = $specifiedTradePaymentTerms;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTradePaymentTerms
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTradePaymentTerms($index)
+    {
+        return isset($this->specifiedTradePaymentTerms[$index]);
+    }
+
+    /**
+     * unset specifiedTradePaymentTerms
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTradePaymentTerms($index)
+    {
+        unset($this->specifiedTradePaymentTerms[$index]);
+    }
+
+    /**
+     * Gets as specifiedTradePaymentTerms
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePaymentTermsType[]
+     */
+    public function getSpecifiedTradePaymentTerms()
+    {
+        return $this->specifiedTradePaymentTerms;
+    }
+
+    /**
+     * Sets a new specifiedTradePaymentTerms
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePaymentTermsType[] $specifiedTradePaymentTerms
+     * @return self
+     */
+    public function setSpecifiedTradePaymentTerms(array $specifiedTradePaymentTerms)
+    {
+        $this->specifiedTradePaymentTerms = $specifiedTradePaymentTerms;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeSettlementHeaderMonetarySummation
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeSettlementHeaderMonetarySummationType
+     */
+    public function getSpecifiedTradeSettlementHeaderMonetarySummation()
+    {
+        return $this->specifiedTradeSettlementHeaderMonetarySummation;
+    }
+
+    /**
+     * Sets a new specifiedTradeSettlementHeaderMonetarySummation
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation
+     * @return self
+     */
+    public function setSpecifiedTradeSettlementHeaderMonetarySummation(\horstoeko\zugferd\entities\extended\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation)
+    {
+        $this->specifiedTradeSettlementHeaderMonetarySummation = $specifiedTradeSettlementHeaderMonetarySummation;
+        return $this;
+    }
+
+    /**
+     * Gets as invoiceReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getInvoiceReferencedDocument()
+    {
+        return $this->invoiceReferencedDocument;
+    }
+
+    /**
+     * Sets a new invoiceReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $invoiceReferencedDocument
+     * @return self
+     */
+    public function setInvoiceReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $invoiceReferencedDocument)
+    {
+        $this->invoiceReferencedDocument = $invoiceReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Adds as receivableSpecifiedTradeAccountingAccount
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount
+     */
+    public function addToReceivableSpecifiedTradeAccountingAccount(\horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount)
+    {
+        $this->receivableSpecifiedTradeAccountingAccount[] = $receivableSpecifiedTradeAccountingAccount;
+        return $this;
+    }
+
+    /**
+     * isset receivableSpecifiedTradeAccountingAccount
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetReceivableSpecifiedTradeAccountingAccount($index)
+    {
+        return isset($this->receivableSpecifiedTradeAccountingAccount[$index]);
+    }
+
+    /**
+     * unset receivableSpecifiedTradeAccountingAccount
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetReceivableSpecifiedTradeAccountingAccount($index)
+    {
+        unset($this->receivableSpecifiedTradeAccountingAccount[$index]);
+    }
+
+    /**
+     * Gets as receivableSpecifiedTradeAccountingAccount
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType[]
+     */
+    public function getReceivableSpecifiedTradeAccountingAccount()
+    {
+        return $this->receivableSpecifiedTradeAccountingAccount;
+    }
+
+    /**
+     * Sets a new receivableSpecifiedTradeAccountingAccount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType[] $receivableSpecifiedTradeAccountingAccount
+     * @return self
+     */
+    public function setReceivableSpecifiedTradeAccountingAccount(array $receivableSpecifiedTradeAccountingAccount)
+    {
+        $this->receivableSpecifiedTradeAccountingAccount = $receivableSpecifiedTradeAccountingAccount;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedAdvancePayment
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\AdvancePaymentType $specifiedAdvancePayment
+     */
+    public function addToSpecifiedAdvancePayment(\horstoeko\zugferd\entities\extended\ram\AdvancePaymentType $specifiedAdvancePayment)
+    {
+        $this->specifiedAdvancePayment[] = $specifiedAdvancePayment;
+        return $this;
+    }
+
+    /**
+     * isset specifiedAdvancePayment
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedAdvancePayment($index)
+    {
+        return isset($this->specifiedAdvancePayment[$index]);
+    }
+
+    /**
+     * unset specifiedAdvancePayment
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedAdvancePayment($index)
+    {
+        unset($this->specifiedAdvancePayment[$index]);
+    }
+
+    /**
+     * Gets as specifiedAdvancePayment
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\AdvancePaymentType[]
+     */
+    public function getSpecifiedAdvancePayment()
+    {
+        return $this->specifiedAdvancePayment;
+    }
+
+    /**
+     * Sets a new specifiedAdvancePayment
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\AdvancePaymentType[] $specifiedAdvancePayment
+     * @return self
+     */
+    public function setSpecifiedAdvancePayment(array $specifiedAdvancePayment)
+    {
+        $this->specifiedAdvancePayment = $specifiedAdvancePayment;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LegalOrganizationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LegalOrganizationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LegalOrganizationType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing LegalOrganizationType
+ *
+ * XSD Type: LegalOrganizationType
+ */
+class LegalOrganizationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $tradingBusinessName
+     */
+    private $tradingBusinessName = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeAddressType $postalTradeAddress
+     */
+    private $postalTradeAddress = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\extended\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as tradingBusinessName
+     *
+     * @return string
+     */
+    public function getTradingBusinessName()
+    {
+        return $this->tradingBusinessName;
+    }
+
+    /**
+     * Sets a new tradingBusinessName
+     *
+     * @param  string $tradingBusinessName
+     * @return self
+     */
+    public function setTradingBusinessName($tradingBusinessName)
+    {
+        $this->tradingBusinessName = $tradingBusinessName;
+        return $this;
+    }
+
+    /**
+     * Gets as postalTradeAddress
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeAddressType
+     */
+    public function getPostalTradeAddress()
+    {
+        return $this->postalTradeAddress;
+    }
+
+    /**
+     * Sets a new postalTradeAddress
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeAddressType $postalTradeAddress
+     * @return self
+     */
+    public function setPostalTradeAddress(\horstoeko\zugferd\entities\extended\ram\TradeAddressType $postalTradeAddress)
+    {
+        $this->postalTradeAddress = $postalTradeAddress;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeAgreementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeAgreementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeAgreementType.php	(revision 8435)
@@ -0,0 +1,273 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing LineTradeAgreementType
+ *
+ * XSD Type: LineTradeAgreementType
+ */
+class LineTradeAgreementType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     */
+    private $buyerOrderReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $quotationReferencedDocument
+     */
+    private $quotationReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $contractReferencedDocument
+     */
+    private $contractReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[] $additionalReferencedDocument
+     */
+    private $additionalReferencedDocument = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePriceType $grossPriceProductTradePrice
+     */
+    private $grossPriceProductTradePrice = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePriceType $netPriceProductTradePrice
+     */
+    private $netPriceProductTradePrice = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[] $ultimateCustomerOrderReferencedDocument
+     */
+    private $ultimateCustomerOrderReferencedDocument = [
+        
+    ];
+
+    /**
+     * Gets as buyerOrderReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getBuyerOrderReferencedDocument()
+    {
+        return $this->buyerOrderReferencedDocument;
+    }
+
+    /**
+     * Sets a new buyerOrderReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     * @return self
+     */
+    public function setBuyerOrderReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $buyerOrderReferencedDocument)
+    {
+        $this->buyerOrderReferencedDocument = $buyerOrderReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as quotationReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getQuotationReferencedDocument()
+    {
+        return $this->quotationReferencedDocument;
+    }
+
+    /**
+     * Sets a new quotationReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $quotationReferencedDocument
+     * @return self
+     */
+    public function setQuotationReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $quotationReferencedDocument)
+    {
+        $this->quotationReferencedDocument = $quotationReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as contractReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getContractReferencedDocument()
+    {
+        return $this->contractReferencedDocument;
+    }
+
+    /**
+     * Sets a new contractReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $contractReferencedDocument
+     * @return self
+     */
+    public function setContractReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $contractReferencedDocument)
+    {
+        $this->contractReferencedDocument = $contractReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Adds as additionalReferencedDocument
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $additionalReferencedDocument
+     */
+    public function addToAdditionalReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $additionalReferencedDocument)
+    {
+        $this->additionalReferencedDocument[] = $additionalReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * isset additionalReferencedDocument
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetAdditionalReferencedDocument($index)
+    {
+        return isset($this->additionalReferencedDocument[$index]);
+    }
+
+    /**
+     * unset additionalReferencedDocument
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetAdditionalReferencedDocument($index)
+    {
+        unset($this->additionalReferencedDocument[$index]);
+    }
+
+    /**
+     * Gets as additionalReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[]
+     */
+    public function getAdditionalReferencedDocument()
+    {
+        return $this->additionalReferencedDocument;
+    }
+
+    /**
+     * Sets a new additionalReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[] $additionalReferencedDocument
+     * @return self
+     */
+    public function setAdditionalReferencedDocument(array $additionalReferencedDocument)
+    {
+        $this->additionalReferencedDocument = $additionalReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as grossPriceProductTradePrice
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePriceType
+     */
+    public function getGrossPriceProductTradePrice()
+    {
+        return $this->grossPriceProductTradePrice;
+    }
+
+    /**
+     * Sets a new grossPriceProductTradePrice
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePriceType $grossPriceProductTradePrice
+     * @return self
+     */
+    public function setGrossPriceProductTradePrice(\horstoeko\zugferd\entities\extended\ram\TradePriceType $grossPriceProductTradePrice)
+    {
+        $this->grossPriceProductTradePrice = $grossPriceProductTradePrice;
+        return $this;
+    }
+
+    /**
+     * Gets as netPriceProductTradePrice
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePriceType
+     */
+    public function getNetPriceProductTradePrice()
+    {
+        return $this->netPriceProductTradePrice;
+    }
+
+    /**
+     * Sets a new netPriceProductTradePrice
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePriceType $netPriceProductTradePrice
+     * @return self
+     */
+    public function setNetPriceProductTradePrice(\horstoeko\zugferd\entities\extended\ram\TradePriceType $netPriceProductTradePrice)
+    {
+        $this->netPriceProductTradePrice = $netPriceProductTradePrice;
+        return $this;
+    }
+
+    /**
+     * Adds as ultimateCustomerOrderReferencedDocument
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $ultimateCustomerOrderReferencedDocument
+     */
+    public function addToUltimateCustomerOrderReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $ultimateCustomerOrderReferencedDocument)
+    {
+        $this->ultimateCustomerOrderReferencedDocument[] = $ultimateCustomerOrderReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * isset ultimateCustomerOrderReferencedDocument
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetUltimateCustomerOrderReferencedDocument($index)
+    {
+        return isset($this->ultimateCustomerOrderReferencedDocument[$index]);
+    }
+
+    /**
+     * unset ultimateCustomerOrderReferencedDocument
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetUltimateCustomerOrderReferencedDocument($index)
+    {
+        unset($this->ultimateCustomerOrderReferencedDocument[$index]);
+    }
+
+    /**
+     * Gets as ultimateCustomerOrderReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[]
+     */
+    public function getUltimateCustomerOrderReferencedDocument()
+    {
+        return $this->ultimateCustomerOrderReferencedDocument;
+    }
+
+    /**
+     * Sets a new ultimateCustomerOrderReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[] $ultimateCustomerOrderReferencedDocument
+     * @return self
+     */
+    public function setUltimateCustomerOrderReferencedDocument(array $ultimateCustomerOrderReferencedDocument)
+    {
+        $this->ultimateCustomerOrderReferencedDocument = $ultimateCustomerOrderReferencedDocument;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeDeliveryType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeDeliveryType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeDeliveryType.php	(revision 8435)
@@ -0,0 +1,255 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing LineTradeDeliveryType
+ *
+ * XSD Type: LineTradeDeliveryType
+ */
+class LineTradeDeliveryType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\QuantityType $billedQuantity
+     */
+    private $billedQuantity = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\QuantityType $chargeFreeQuantity
+     */
+    private $chargeFreeQuantity = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\QuantityType $packageQuantity
+     */
+    private $packageQuantity = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $shipToTradeParty
+     */
+    private $shipToTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $ultimateShipToTradeParty
+     */
+    private $ultimateShipToTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\SupplyChainEventType $actualDeliverySupplyChainEvent
+     */
+    private $actualDeliverySupplyChainEvent = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $despatchAdviceReferencedDocument
+     */
+    private $despatchAdviceReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $receivingAdviceReferencedDocument
+     */
+    private $receivingAdviceReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $deliveryNoteReferencedDocument
+     */
+    private $deliveryNoteReferencedDocument = null;
+
+    /**
+     * Gets as billedQuantity
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\QuantityType
+     */
+    public function getBilledQuantity()
+    {
+        return $this->billedQuantity;
+    }
+
+    /**
+     * Sets a new billedQuantity
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\QuantityType $billedQuantity
+     * @return self
+     */
+    public function setBilledQuantity(\horstoeko\zugferd\entities\extended\udt\QuantityType $billedQuantity)
+    {
+        $this->billedQuantity = $billedQuantity;
+        return $this;
+    }
+
+    /**
+     * Gets as chargeFreeQuantity
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\QuantityType
+     */
+    public function getChargeFreeQuantity()
+    {
+        return $this->chargeFreeQuantity;
+    }
+
+    /**
+     * Sets a new chargeFreeQuantity
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\QuantityType $chargeFreeQuantity
+     * @return self
+     */
+    public function setChargeFreeQuantity(\horstoeko\zugferd\entities\extended\udt\QuantityType $chargeFreeQuantity)
+    {
+        $this->chargeFreeQuantity = $chargeFreeQuantity;
+        return $this;
+    }
+
+    /**
+     * Gets as packageQuantity
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\QuantityType
+     */
+    public function getPackageQuantity()
+    {
+        return $this->packageQuantity;
+    }
+
+    /**
+     * Sets a new packageQuantity
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\QuantityType $packageQuantity
+     * @return self
+     */
+    public function setPackageQuantity(\horstoeko\zugferd\entities\extended\udt\QuantityType $packageQuantity)
+    {
+        $this->packageQuantity = $packageQuantity;
+        return $this;
+    }
+
+    /**
+     * Gets as shipToTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getShipToTradeParty()
+    {
+        return $this->shipToTradeParty;
+    }
+
+    /**
+     * Sets a new shipToTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $shipToTradeParty
+     * @return self
+     */
+    public function setShipToTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $shipToTradeParty)
+    {
+        $this->shipToTradeParty = $shipToTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as ultimateShipToTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getUltimateShipToTradeParty()
+    {
+        return $this->ultimateShipToTradeParty;
+    }
+
+    /**
+     * Sets a new ultimateShipToTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $ultimateShipToTradeParty
+     * @return self
+     */
+    public function setUltimateShipToTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $ultimateShipToTradeParty)
+    {
+        $this->ultimateShipToTradeParty = $ultimateShipToTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as actualDeliverySupplyChainEvent
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\SupplyChainEventType
+     */
+    public function getActualDeliverySupplyChainEvent()
+    {
+        return $this->actualDeliverySupplyChainEvent;
+    }
+
+    /**
+     * Sets a new actualDeliverySupplyChainEvent
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\SupplyChainEventType $actualDeliverySupplyChainEvent
+     * @return self
+     */
+    public function setActualDeliverySupplyChainEvent(\horstoeko\zugferd\entities\extended\ram\SupplyChainEventType $actualDeliverySupplyChainEvent)
+    {
+        $this->actualDeliverySupplyChainEvent = $actualDeliverySupplyChainEvent;
+        return $this;
+    }
+
+    /**
+     * Gets as despatchAdviceReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getDespatchAdviceReferencedDocument()
+    {
+        return $this->despatchAdviceReferencedDocument;
+    }
+
+    /**
+     * Sets a new despatchAdviceReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $despatchAdviceReferencedDocument
+     * @return self
+     */
+    public function setDespatchAdviceReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $despatchAdviceReferencedDocument)
+    {
+        $this->despatchAdviceReferencedDocument = $despatchAdviceReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as receivingAdviceReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getReceivingAdviceReferencedDocument()
+    {
+        return $this->receivingAdviceReferencedDocument;
+    }
+
+    /**
+     * Sets a new receivingAdviceReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $receivingAdviceReferencedDocument
+     * @return self
+     */
+    public function setReceivingAdviceReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $receivingAdviceReferencedDocument)
+    {
+        $this->receivingAdviceReferencedDocument = $receivingAdviceReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as deliveryNoteReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getDeliveryNoteReferencedDocument()
+    {
+        return $this->deliveryNoteReferencedDocument;
+    }
+
+    /**
+     * Sets a new deliveryNoteReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $deliveryNoteReferencedDocument
+     * @return self
+     */
+    public function setDeliveryNoteReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $deliveryNoteReferencedDocument)
+    {
+        $this->deliveryNoteReferencedDocument = $deliveryNoteReferencedDocument;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeSettlementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeSettlementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LineTradeSettlementType.php	(revision 8435)
@@ -0,0 +1,309 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing LineTradeSettlementType
+ *
+ * XSD Type: LineTradeSettlementType
+ */
+class LineTradeSettlementType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeTaxType[] $applicableTradeTax
+     */
+    private $applicableTradeTax = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     */
+    private $billingSpecifiedPeriod = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     */
+    private $specifiedTradeAllowanceCharge = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeSettlementLineMonetarySummationType $specifiedTradeSettlementLineMonetarySummation
+     */
+    private $specifiedTradeSettlementLineMonetarySummation = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $invoiceReferencedDocument
+     */
+    private $invoiceReferencedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[] $additionalReferencedDocument
+     */
+    private $additionalReferencedDocument = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount
+     */
+    private $receivableSpecifiedTradeAccountingAccount = null;
+
+    /**
+     * Adds as applicableTradeTax
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeTaxType $applicableTradeTax
+     */
+    public function addToApplicableTradeTax(\horstoeko\zugferd\entities\extended\ram\TradeTaxType $applicableTradeTax)
+    {
+        $this->applicableTradeTax[] = $applicableTradeTax;
+        return $this;
+    }
+
+    /**
+     * isset applicableTradeTax
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetApplicableTradeTax($index)
+    {
+        return isset($this->applicableTradeTax[$index]);
+    }
+
+    /**
+     * unset applicableTradeTax
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetApplicableTradeTax($index)
+    {
+        unset($this->applicableTradeTax[$index]);
+    }
+
+    /**
+     * Gets as applicableTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeTaxType[]
+     */
+    public function getApplicableTradeTax()
+    {
+        return $this->applicableTradeTax;
+    }
+
+    /**
+     * Sets a new applicableTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeTaxType[] $applicableTradeTax
+     * @return self
+     */
+    public function setApplicableTradeTax(array $applicableTradeTax)
+    {
+        $this->applicableTradeTax = $applicableTradeTax;
+        return $this;
+    }
+
+    /**
+     * Gets as billingSpecifiedPeriod
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType
+     */
+    public function getBillingSpecifiedPeriod()
+    {
+        return $this->billingSpecifiedPeriod;
+    }
+
+    /**
+     * Sets a new billingSpecifiedPeriod
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType $billingSpecifiedPeriod
+     * @return self
+     */
+    public function setBillingSpecifiedPeriod(\horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType $billingSpecifiedPeriod)
+    {
+        $this->billingSpecifiedPeriod = $billingSpecifiedPeriod;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTradeAllowanceCharge
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge
+     */
+    public function addToSpecifiedTradeAllowanceCharge(\horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge[] = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTradeAllowanceCharge($index)
+    {
+        return isset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * unset specifiedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTradeAllowanceCharge($index)
+    {
+        unset($this->specifiedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * Gets as specifiedTradeAllowanceCharge
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType[]
+     */
+    public function getSpecifiedTradeAllowanceCharge()
+    {
+        return $this->specifiedTradeAllowanceCharge;
+    }
+
+    /**
+     * Sets a new specifiedTradeAllowanceCharge
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType[] $specifiedTradeAllowanceCharge
+     * @return self
+     */
+    public function setSpecifiedTradeAllowanceCharge(array $specifiedTradeAllowanceCharge)
+    {
+        $this->specifiedTradeAllowanceCharge = $specifiedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeSettlementLineMonetarySummation
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeSettlementLineMonetarySummationType
+     */
+    public function getSpecifiedTradeSettlementLineMonetarySummation()
+    {
+        return $this->specifiedTradeSettlementLineMonetarySummation;
+    }
+
+    /**
+     * Sets a new specifiedTradeSettlementLineMonetarySummation
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeSettlementLineMonetarySummationType $specifiedTradeSettlementLineMonetarySummation
+     * @return self
+     */
+    public function setSpecifiedTradeSettlementLineMonetarySummation(\horstoeko\zugferd\entities\extended\ram\TradeSettlementLineMonetarySummationType $specifiedTradeSettlementLineMonetarySummation)
+    {
+        $this->specifiedTradeSettlementLineMonetarySummation = $specifiedTradeSettlementLineMonetarySummation;
+        return $this;
+    }
+
+    /**
+     * Gets as invoiceReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+     */
+    public function getInvoiceReferencedDocument()
+    {
+        return $this->invoiceReferencedDocument;
+    }
+
+    /**
+     * Sets a new invoiceReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $invoiceReferencedDocument
+     * @return self
+     */
+    public function setInvoiceReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $invoiceReferencedDocument)
+    {
+        $this->invoiceReferencedDocument = $invoiceReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Adds as additionalReferencedDocument
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $additionalReferencedDocument
+     */
+    public function addToAdditionalReferencedDocument(\horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType $additionalReferencedDocument)
+    {
+        $this->additionalReferencedDocument[] = $additionalReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * isset additionalReferencedDocument
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetAdditionalReferencedDocument($index)
+    {
+        return isset($this->additionalReferencedDocument[$index]);
+    }
+
+    /**
+     * unset additionalReferencedDocument
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetAdditionalReferencedDocument($index)
+    {
+        unset($this->additionalReferencedDocument[$index]);
+    }
+
+    /**
+     * Gets as additionalReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[]
+     */
+    public function getAdditionalReferencedDocument()
+    {
+        return $this->additionalReferencedDocument;
+    }
+
+    /**
+     * Sets a new additionalReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType[] $additionalReferencedDocument
+     * @return self
+     */
+    public function setAdditionalReferencedDocument(array $additionalReferencedDocument)
+    {
+        $this->additionalReferencedDocument = $additionalReferencedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as receivableSpecifiedTradeAccountingAccount
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType
+     */
+    public function getReceivableSpecifiedTradeAccountingAccount()
+    {
+        return $this->receivableSpecifiedTradeAccountingAccount;
+    }
+
+    /**
+     * Sets a new receivableSpecifiedTradeAccountingAccount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount
+     * @return self
+     */
+    public function setReceivableSpecifiedTradeAccountingAccount(\horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType $receivableSpecifiedTradeAccountingAccount)
+    {
+        $this->receivableSpecifiedTradeAccountingAccount = $receivableSpecifiedTradeAccountingAccount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsServiceChargeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsServiceChargeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsServiceChargeType.php	(revision 8435)
@@ -0,0 +1,129 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing LogisticsServiceChargeType
+ *
+ * XSD Type: LogisticsServiceChargeType
+ */
+class LogisticsServiceChargeType
+{
+
+    /**
+     * @var string $description
+     */
+    private $description = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $appliedAmount
+     */
+    private $appliedAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeTaxType[] $appliedTradeTax
+     */
+    private $appliedTradeTax = [
+        
+    ];
+
+    /**
+     * Gets as description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Sets a new description
+     *
+     * @param  string $description
+     * @return self
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Gets as appliedAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getAppliedAmount()
+    {
+        return $this->appliedAmount;
+    }
+
+    /**
+     * Sets a new appliedAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $appliedAmount
+     * @return self
+     */
+    public function setAppliedAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $appliedAmount)
+    {
+        $this->appliedAmount = $appliedAmount;
+        return $this;
+    }
+
+    /**
+     * Adds as appliedTradeTax
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeTaxType $appliedTradeTax
+     */
+    public function addToAppliedTradeTax(\horstoeko\zugferd\entities\extended\ram\TradeTaxType $appliedTradeTax)
+    {
+        $this->appliedTradeTax[] = $appliedTradeTax;
+        return $this;
+    }
+
+    /**
+     * isset appliedTradeTax
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetAppliedTradeTax($index)
+    {
+        return isset($this->appliedTradeTax[$index]);
+    }
+
+    /**
+     * unset appliedTradeTax
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetAppliedTradeTax($index)
+    {
+        unset($this->appliedTradeTax[$index]);
+    }
+
+    /**
+     * Gets as appliedTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeTaxType[]
+     */
+    public function getAppliedTradeTax()
+    {
+        return $this->appliedTradeTax;
+    }
+
+    /**
+     * Sets a new appliedTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeTaxType[] $appliedTradeTax
+     * @return self
+     */
+    public function setAppliedTradeTax(array $appliedTradeTax)
+    {
+        $this->appliedTradeTax = $appliedTradeTax;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsTransportMovementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsTransportMovementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/LogisticsTransportMovementType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing LogisticsTransportMovementType
+ *
+ * XSD Type: LogisticsTransportMovementType
+ */
+class LogisticsTransportMovementType
+{
+
+    /**
+     * @var string $modeCode
+     */
+    private $modeCode = null;
+
+    /**
+     * Gets as modeCode
+     *
+     * @return string
+     */
+    public function getModeCode()
+    {
+        return $this->modeCode;
+    }
+
+    /**
+     * Sets a new modeCode
+     *
+     * @param  string $modeCode
+     * @return self
+     */
+    public function setModeCode($modeCode)
+    {
+        $this->modeCode = $modeCode;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/NoteType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/NoteType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/NoteType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing NoteType
+ *
+ * XSD Type: NoteType
+ */
+class NoteType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\CodeType $contentCode
+     */
+    private $contentCode = null;
+
+    /**
+     * @var string $content
+     */
+    private $content = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\CodeType $subjectCode
+     */
+    private $subjectCode = null;
+
+    /**
+     * Gets as contentCode
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\CodeType
+     */
+    public function getContentCode()
+    {
+        return $this->contentCode;
+    }
+
+    /**
+     * Sets a new contentCode
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\CodeType $contentCode
+     * @return self
+     */
+    public function setContentCode(\horstoeko\zugferd\entities\extended\udt\CodeType $contentCode)
+    {
+        $this->contentCode = $contentCode;
+        return $this;
+    }
+
+    /**
+     * Gets as content
+     *
+     * @return string
+     */
+    public function getContent()
+    {
+        return $this->content;
+    }
+
+    /**
+     * Sets a new content
+     *
+     * @param  string $content
+     * @return self
+     */
+    public function setContent($content)
+    {
+        $this->content = $content;
+        return $this;
+    }
+
+    /**
+     * Gets as subjectCode
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\CodeType
+     */
+    public function getSubjectCode()
+    {
+        return $this->subjectCode;
+    }
+
+    /**
+     * Sets a new subjectCode
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\CodeType $subjectCode
+     * @return self
+     */
+    public function setSubjectCode(\horstoeko\zugferd\entities\extended\udt\CodeType $subjectCode)
+    {
+        $this->subjectCode = $subjectCode;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ProcuringProjectType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ProcuringProjectType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ProcuringProjectType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing ProcuringProjectType
+ *
+ * XSD Type: ProcuringProjectType
+ */
+class ProcuringProjectType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $name
+     */
+    private $name = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\extended\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ProductCharacteristicType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ProductCharacteristicType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ProductCharacteristicType.php	(revision 8435)
@@ -0,0 +1,120 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing ProductCharacteristicType
+ *
+ * XSD Type: ProductCharacteristicType
+ */
+class ProductCharacteristicType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\CodeType $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var string $description
+     */
+    private $description = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\MeasureType $valueMeasure
+     */
+    private $valueMeasure = null;
+
+    /**
+     * @var string $value
+     */
+    private $value = null;
+
+    /**
+     * Gets as typeCode
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\CodeType
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\CodeType $typeCode
+     * @return self
+     */
+    public function setTypeCode(\horstoeko\zugferd\entities\extended\udt\CodeType $typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Sets a new description
+     *
+     * @param  string $description
+     * @return self
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Gets as valueMeasure
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\MeasureType
+     */
+    public function getValueMeasure()
+    {
+        return $this->valueMeasure;
+    }
+
+    /**
+     * Sets a new valueMeasure
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\MeasureType $valueMeasure
+     * @return self
+     */
+    public function setValueMeasure(\horstoeko\zugferd\entities\extended\udt\MeasureType $valueMeasure)
+    {
+        $this->valueMeasure = $valueMeasure;
+        return $this;
+    }
+
+    /**
+     * Gets as value
+     *
+     * @return string
+     */
+    public function getValue()
+    {
+        return $this->value;
+    }
+
+    /**
+     * Sets a new value
+     *
+     * @param  string $value
+     * @return self
+     */
+    public function setValue($value)
+    {
+        $this->value = $value;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ProductClassificationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ProductClassificationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ProductClassificationType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing ProductClassificationType
+ *
+ * XSD Type: ProductClassificationType
+ */
+class ProductClassificationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\CodeType $classCode
+     */
+    private $classCode = null;
+
+    /**
+     * @var string $className
+     */
+    private $className = null;
+
+    /**
+     * Gets as classCode
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\CodeType
+     */
+    public function getClassCode()
+    {
+        return $this->classCode;
+    }
+
+    /**
+     * Sets a new classCode
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\CodeType $classCode
+     * @return self
+     */
+    public function setClassCode(\horstoeko\zugferd\entities\extended\udt\CodeType $classCode)
+    {
+        $this->classCode = $classCode;
+        return $this;
+    }
+
+    /**
+     * Gets as className
+     *
+     * @return string
+     */
+    public function getClassName()
+    {
+        return $this->className;
+    }
+
+    /**
+     * Sets a new className
+     *
+     * @param  string $className
+     * @return self
+     */
+    public function setClassName($className)
+    {
+        $this->className = $className;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedDocumentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedDocumentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedDocumentType.php	(revision 8435)
@@ -0,0 +1,264 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing ReferencedDocumentType
+ *
+ * XSD Type: ReferencedDocumentType
+ */
+class ReferencedDocumentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $issuerAssignedID
+     */
+    private $issuerAssignedID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $uRIID
+     */
+    private $uRIID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $lineID
+     */
+    private $lineID = null;
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var string[] $name
+     */
+    private $name = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\BinaryObjectType $attachmentBinaryObject
+     */
+    private $attachmentBinaryObject = null;
+
+    /**
+     * @var string $referenceTypeCode
+     */
+    private $referenceTypeCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType $formattedIssueDateTime
+     */
+    private $formattedIssueDateTime = null;
+
+    /**
+     * Gets as issuerAssignedID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getIssuerAssignedID()
+    {
+        return $this->issuerAssignedID;
+    }
+
+    /**
+     * Sets a new issuerAssignedID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $issuerAssignedID
+     * @return self
+     */
+    public function setIssuerAssignedID(\horstoeko\zugferd\entities\extended\udt\IDType $issuerAssignedID)
+    {
+        $this->issuerAssignedID = $issuerAssignedID;
+        return $this;
+    }
+
+    /**
+     * Gets as uRIID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getURIID()
+    {
+        return $this->uRIID;
+    }
+
+    /**
+     * Sets a new uRIID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $uRIID
+     * @return self
+     */
+    public function setURIID(\horstoeko\zugferd\entities\extended\udt\IDType $uRIID)
+    {
+        $this->uRIID = $uRIID;
+        return $this;
+    }
+
+    /**
+     * Gets as lineID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getLineID()
+    {
+        return $this->lineID;
+    }
+
+    /**
+     * Sets a new lineID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $lineID
+     * @return self
+     */
+    public function setLineID(\horstoeko\zugferd\entities\extended\udt\IDType $lineID)
+    {
+        $this->lineID = $lineID;
+        return $this;
+    }
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Adds as name
+     *
+     * @return self
+     * @param  string $name
+     */
+    public function addToName($name)
+    {
+        $this->name[] = $name;
+        return $this;
+    }
+
+    /**
+     * isset name
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetName($index)
+    {
+        return isset($this->name[$index]);
+    }
+
+    /**
+     * unset name
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetName($index)
+    {
+        unset($this->name[$index]);
+    }
+
+    /**
+     * Gets as name
+     *
+     * @return string[]
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName(array $name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+
+    /**
+     * Gets as attachmentBinaryObject
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\BinaryObjectType
+     */
+    public function getAttachmentBinaryObject()
+    {
+        return $this->attachmentBinaryObject;
+    }
+
+    /**
+     * Sets a new attachmentBinaryObject
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\BinaryObjectType $attachmentBinaryObject
+     * @return self
+     */
+    public function setAttachmentBinaryObject(\horstoeko\zugferd\entities\extended\udt\BinaryObjectType $attachmentBinaryObject)
+    {
+        $this->attachmentBinaryObject = $attachmentBinaryObject;
+        return $this;
+    }
+
+    /**
+     * Gets as referenceTypeCode
+     *
+     * @return string
+     */
+    public function getReferenceTypeCode()
+    {
+        return $this->referenceTypeCode;
+    }
+
+    /**
+     * Sets a new referenceTypeCode
+     *
+     * @param  string $referenceTypeCode
+     * @return self
+     */
+    public function setReferenceTypeCode($referenceTypeCode)
+    {
+        $this->referenceTypeCode = $referenceTypeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as formattedIssueDateTime
+     *
+     * @return \horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType
+     */
+    public function getFormattedIssueDateTime()
+    {
+        return $this->formattedIssueDateTime;
+    }
+
+    /**
+     * Sets a new formattedIssueDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType $formattedIssueDateTime
+     * @return self
+     */
+    public function setFormattedIssueDateTime(\horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType $formattedIssueDateTime)
+    {
+        $this->formattedIssueDateTime = $formattedIssueDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedProductType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedProductType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/ReferencedProductType.php	(revision 8435)
@@ -0,0 +1,264 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing ReferencedProductType
+ *
+ * XSD Type: ReferencedProductType
+ */
+class ReferencedProductType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType[] $globalID
+     */
+    private $globalID = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $sellerAssignedID
+     */
+    private $sellerAssignedID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $buyerAssignedID
+     */
+    private $buyerAssignedID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $industryAssignedID
+     */
+    private $industryAssignedID = null;
+
+    /**
+     * @var string $name
+     */
+    private $name = null;
+
+    /**
+     * @var string $description
+     */
+    private $description = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\QuantityType $unitQuantity
+     */
+    private $unitQuantity = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\extended\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Adds as globalID
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $globalID
+     */
+    public function addToGlobalID(\horstoeko\zugferd\entities\extended\udt\IDType $globalID)
+    {
+        $this->globalID[] = $globalID;
+        return $this;
+    }
+
+    /**
+     * isset globalID
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetGlobalID($index)
+    {
+        return isset($this->globalID[$index]);
+    }
+
+    /**
+     * unset globalID
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetGlobalID($index)
+    {
+        unset($this->globalID[$index]);
+    }
+
+    /**
+     * Gets as globalID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType[]
+     */
+    public function getGlobalID()
+    {
+        return $this->globalID;
+    }
+
+    /**
+     * Sets a new globalID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType[] $globalID
+     * @return self
+     */
+    public function setGlobalID(array $globalID)
+    {
+        $this->globalID = $globalID;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerAssignedID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getSellerAssignedID()
+    {
+        return $this->sellerAssignedID;
+    }
+
+    /**
+     * Sets a new sellerAssignedID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $sellerAssignedID
+     * @return self
+     */
+    public function setSellerAssignedID(\horstoeko\zugferd\entities\extended\udt\IDType $sellerAssignedID)
+    {
+        $this->sellerAssignedID = $sellerAssignedID;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerAssignedID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getBuyerAssignedID()
+    {
+        return $this->buyerAssignedID;
+    }
+
+    /**
+     * Sets a new buyerAssignedID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $buyerAssignedID
+     * @return self
+     */
+    public function setBuyerAssignedID(\horstoeko\zugferd\entities\extended\udt\IDType $buyerAssignedID)
+    {
+        $this->buyerAssignedID = $buyerAssignedID;
+        return $this;
+    }
+
+    /**
+     * Gets as industryAssignedID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getIndustryAssignedID()
+    {
+        return $this->industryAssignedID;
+    }
+
+    /**
+     * Sets a new industryAssignedID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $industryAssignedID
+     * @return self
+     */
+    public function setIndustryAssignedID(\horstoeko\zugferd\entities\extended\udt\IDType $industryAssignedID)
+    {
+        $this->industryAssignedID = $industryAssignedID;
+        return $this;
+    }
+
+    /**
+     * Gets as name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+
+    /**
+     * Gets as description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Sets a new description
+     *
+     * @param  string $description
+     * @return self
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Gets as unitQuantity
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\QuantityType
+     */
+    public function getUnitQuantity()
+    {
+        return $this->unitQuantity;
+    }
+
+    /**
+     * Sets a new unitQuantity
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\QuantityType $unitQuantity
+     * @return self
+     */
+    public function setUnitQuantity(\horstoeko\zugferd\entities\extended\udt\QuantityType $unitQuantity)
+    {
+        $this->unitQuantity = $unitQuantity;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SpecifiedPeriodType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SpecifiedPeriodType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SpecifiedPeriodType.php	(revision 8435)
@@ -0,0 +1,120 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing SpecifiedPeriodType
+ *
+ * XSD Type: SpecifiedPeriodType
+ */
+class SpecifiedPeriodType
+{
+
+    /**
+     * @var string $description
+     */
+    private $description = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\DateTimeType $startDateTime
+     */
+    private $startDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\DateTimeType $endDateTime
+     */
+    private $endDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\DateTimeType $completeDateTime
+     */
+    private $completeDateTime = null;
+
+    /**
+     * Gets as description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Sets a new description
+     *
+     * @param  string $description
+     * @return self
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Gets as startDateTime
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\DateTimeType
+     */
+    public function getStartDateTime()
+    {
+        return $this->startDateTime;
+    }
+
+    /**
+     * Sets a new startDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\DateTimeType $startDateTime
+     * @return self
+     */
+    public function setStartDateTime(\horstoeko\zugferd\entities\extended\udt\DateTimeType $startDateTime)
+    {
+        $this->startDateTime = $startDateTime;
+        return $this;
+    }
+
+    /**
+     * Gets as endDateTime
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\DateTimeType
+     */
+    public function getEndDateTime()
+    {
+        return $this->endDateTime;
+    }
+
+    /**
+     * Sets a new endDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\DateTimeType $endDateTime
+     * @return self
+     */
+    public function setEndDateTime(\horstoeko\zugferd\entities\extended\udt\DateTimeType $endDateTime)
+    {
+        $this->endDateTime = $endDateTime;
+        return $this;
+    }
+
+    /**
+     * Gets as completeDateTime
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\DateTimeType
+     */
+    public function getCompleteDateTime()
+    {
+        return $this->completeDateTime;
+    }
+
+    /**
+     * Sets a new completeDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\DateTimeType $completeDateTime
+     * @return self
+     */
+    public function setCompleteDateTime(\horstoeko\zugferd\entities\extended\udt\DateTimeType $completeDateTime)
+    {
+        $this->completeDateTime = $completeDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainConsignmentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainConsignmentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainConsignmentType.php	(revision 8435)
@@ -0,0 +1,75 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing SupplyChainConsignmentType
+ *
+ * XSD Type: SupplyChainConsignmentType
+ */
+class SupplyChainConsignmentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType[] $specifiedLogisticsTransportMovement
+     */
+    private $specifiedLogisticsTransportMovement = [
+        
+    ];
+
+    /**
+     * Adds as specifiedLogisticsTransportMovement
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType $specifiedLogisticsTransportMovement
+     */
+    public function addToSpecifiedLogisticsTransportMovement(\horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType $specifiedLogisticsTransportMovement)
+    {
+        $this->specifiedLogisticsTransportMovement[] = $specifiedLogisticsTransportMovement;
+        return $this;
+    }
+
+    /**
+     * isset specifiedLogisticsTransportMovement
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedLogisticsTransportMovement($index)
+    {
+        return isset($this->specifiedLogisticsTransportMovement[$index]);
+    }
+
+    /**
+     * unset specifiedLogisticsTransportMovement
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedLogisticsTransportMovement($index)
+    {
+        unset($this->specifiedLogisticsTransportMovement[$index]);
+    }
+
+    /**
+     * Gets as specifiedLogisticsTransportMovement
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType[]
+     */
+    public function getSpecifiedLogisticsTransportMovement()
+    {
+        return $this->specifiedLogisticsTransportMovement;
+    }
+
+    /**
+     * Sets a new specifiedLogisticsTransportMovement
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType[] $specifiedLogisticsTransportMovement
+     * @return self
+     */
+    public function setSpecifiedLogisticsTransportMovement(array $specifiedLogisticsTransportMovement)
+    {
+        $this->specifiedLogisticsTransportMovement = $specifiedLogisticsTransportMovement;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainEventType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainEventType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainEventType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing SupplyChainEventType
+ *
+ * XSD Type: SupplyChainEventType
+ */
+class SupplyChainEventType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\DateTimeType $occurrenceDateTime
+     */
+    private $occurrenceDateTime = null;
+
+    /**
+     * Gets as occurrenceDateTime
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\DateTimeType
+     */
+    public function getOccurrenceDateTime()
+    {
+        return $this->occurrenceDateTime;
+    }
+
+    /**
+     * Sets a new occurrenceDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\DateTimeType $occurrenceDateTime
+     * @return self
+     */
+    public function setOccurrenceDateTime(\horstoeko\zugferd\entities\extended\udt\DateTimeType $occurrenceDateTime)
+    {
+        $this->occurrenceDateTime = $occurrenceDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeLineItemType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeLineItemType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeLineItemType.php	(revision 8435)
@@ -0,0 +1,147 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing SupplyChainTradeLineItemType
+ *
+ * XSD Type: SupplyChainTradeLineItemType
+ */
+class SupplyChainTradeLineItemType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\DocumentLineDocumentType $associatedDocumentLineDocument
+     */
+    private $associatedDocumentLineDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeProductType $specifiedTradeProduct
+     */
+    private $specifiedTradeProduct = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\LineTradeAgreementType $specifiedLineTradeAgreement
+     */
+    private $specifiedLineTradeAgreement = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\LineTradeDeliveryType $specifiedLineTradeDelivery
+     */
+    private $specifiedLineTradeDelivery = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\LineTradeSettlementType $specifiedLineTradeSettlement
+     */
+    private $specifiedLineTradeSettlement = null;
+
+    /**
+     * Gets as associatedDocumentLineDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\DocumentLineDocumentType
+     */
+    public function getAssociatedDocumentLineDocument()
+    {
+        return $this->associatedDocumentLineDocument;
+    }
+
+    /**
+     * Sets a new associatedDocumentLineDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\DocumentLineDocumentType $associatedDocumentLineDocument
+     * @return self
+     */
+    public function setAssociatedDocumentLineDocument(\horstoeko\zugferd\entities\extended\ram\DocumentLineDocumentType $associatedDocumentLineDocument)
+    {
+        $this->associatedDocumentLineDocument = $associatedDocumentLineDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeProduct
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeProductType
+     */
+    public function getSpecifiedTradeProduct()
+    {
+        return $this->specifiedTradeProduct;
+    }
+
+    /**
+     * Sets a new specifiedTradeProduct
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeProductType $specifiedTradeProduct
+     * @return self
+     */
+    public function setSpecifiedTradeProduct(\horstoeko\zugferd\entities\extended\ram\TradeProductType $specifiedTradeProduct)
+    {
+        $this->specifiedTradeProduct = $specifiedTradeProduct;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLineTradeAgreement
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\LineTradeAgreementType
+     */
+    public function getSpecifiedLineTradeAgreement()
+    {
+        return $this->specifiedLineTradeAgreement;
+    }
+
+    /**
+     * Sets a new specifiedLineTradeAgreement
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\LineTradeAgreementType $specifiedLineTradeAgreement
+     * @return self
+     */
+    public function setSpecifiedLineTradeAgreement(\horstoeko\zugferd\entities\extended\ram\LineTradeAgreementType $specifiedLineTradeAgreement)
+    {
+        $this->specifiedLineTradeAgreement = $specifiedLineTradeAgreement;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLineTradeDelivery
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\LineTradeDeliveryType
+     */
+    public function getSpecifiedLineTradeDelivery()
+    {
+        return $this->specifiedLineTradeDelivery;
+    }
+
+    /**
+     * Sets a new specifiedLineTradeDelivery
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\LineTradeDeliveryType $specifiedLineTradeDelivery
+     * @return self
+     */
+    public function setSpecifiedLineTradeDelivery(\horstoeko\zugferd\entities\extended\ram\LineTradeDeliveryType $specifiedLineTradeDelivery)
+    {
+        $this->specifiedLineTradeDelivery = $specifiedLineTradeDelivery;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLineTradeSettlement
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\LineTradeSettlementType
+     */
+    public function getSpecifiedLineTradeSettlement()
+    {
+        return $this->specifiedLineTradeSettlement;
+    }
+
+    /**
+     * Sets a new specifiedLineTradeSettlement
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\LineTradeSettlementType $specifiedLineTradeSettlement
+     * @return self
+     */
+    public function setSpecifiedLineTradeSettlement(\horstoeko\zugferd\entities\extended\ram\LineTradeSettlementType $specifiedLineTradeSettlement)
+    {
+        $this->specifiedLineTradeSettlement = $specifiedLineTradeSettlement;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeTransactionType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeTransactionType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/SupplyChainTradeTransactionType.php	(revision 8435)
@@ -0,0 +1,156 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing SupplyChainTradeTransactionType
+ *
+ * XSD Type: SupplyChainTradeTransactionType
+ */
+class SupplyChainTradeTransactionType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\SupplyChainTradeLineItemType[] $includedSupplyChainTradeLineItem
+     */
+    private $includedSupplyChainTradeLineItem = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement
+     */
+    private $applicableHeaderTradeAgreement = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery
+     */
+    private $applicableHeaderTradeDelivery = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement
+     */
+    private $applicableHeaderTradeSettlement = null;
+
+    /**
+     * Adds as includedSupplyChainTradeLineItem
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\SupplyChainTradeLineItemType $includedSupplyChainTradeLineItem
+     */
+    public function addToIncludedSupplyChainTradeLineItem(\horstoeko\zugferd\entities\extended\ram\SupplyChainTradeLineItemType $includedSupplyChainTradeLineItem)
+    {
+        $this->includedSupplyChainTradeLineItem[] = $includedSupplyChainTradeLineItem;
+        return $this;
+    }
+
+    /**
+     * isset includedSupplyChainTradeLineItem
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetIncludedSupplyChainTradeLineItem($index)
+    {
+        return isset($this->includedSupplyChainTradeLineItem[$index]);
+    }
+
+    /**
+     * unset includedSupplyChainTradeLineItem
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetIncludedSupplyChainTradeLineItem($index)
+    {
+        unset($this->includedSupplyChainTradeLineItem[$index]);
+    }
+
+    /**
+     * Gets as includedSupplyChainTradeLineItem
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\SupplyChainTradeLineItemType[]
+     */
+    public function getIncludedSupplyChainTradeLineItem()
+    {
+        return $this->includedSupplyChainTradeLineItem;
+    }
+
+    /**
+     * Sets a new includedSupplyChainTradeLineItem
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\SupplyChainTradeLineItemType[] $includedSupplyChainTradeLineItem
+     * @return self
+     */
+    public function setIncludedSupplyChainTradeLineItem(array $includedSupplyChainTradeLineItem)
+    {
+        $this->includedSupplyChainTradeLineItem = $includedSupplyChainTradeLineItem;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableHeaderTradeAgreement
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\HeaderTradeAgreementType
+     */
+    public function getApplicableHeaderTradeAgreement()
+    {
+        return $this->applicableHeaderTradeAgreement;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeAgreement
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement
+     * @return self
+     */
+    public function setApplicableHeaderTradeAgreement(\horstoeko\zugferd\entities\extended\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement)
+    {
+        $this->applicableHeaderTradeAgreement = $applicableHeaderTradeAgreement;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableHeaderTradeDelivery
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\HeaderTradeDeliveryType
+     */
+    public function getApplicableHeaderTradeDelivery()
+    {
+        return $this->applicableHeaderTradeDelivery;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeDelivery
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery
+     * @return self
+     */
+    public function setApplicableHeaderTradeDelivery(\horstoeko\zugferd\entities\extended\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery)
+    {
+        $this->applicableHeaderTradeDelivery = $applicableHeaderTradeDelivery;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableHeaderTradeSettlement
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\HeaderTradeSettlementType
+     */
+    public function getApplicableHeaderTradeSettlement()
+    {
+        return $this->applicableHeaderTradeSettlement;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeSettlement
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement
+     * @return self
+     */
+    public function setApplicableHeaderTradeSettlement(\horstoeko\zugferd\entities\extended\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement)
+    {
+        $this->applicableHeaderTradeSettlement = $applicableHeaderTradeSettlement;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TaxRegistrationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TaxRegistrationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TaxRegistrationType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TaxRegistrationType
+ *
+ * XSD Type: TaxRegistrationType
+ */
+class TaxRegistrationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\extended\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAccountingAccountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAccountingAccountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAccountingAccountType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeAccountingAccountType
+ *
+ * XSD Type: TradeAccountingAccountType
+ */
+class TradeAccountingAccountType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\extended\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAddressType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAddressType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAddressType.php	(revision 8435)
@@ -0,0 +1,237 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeAddressType
+ *
+ * XSD Type: TradeAddressType
+ */
+class TradeAddressType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\CodeType $postcodeCode
+     */
+    private $postcodeCode = null;
+
+    /**
+     * @var string $lineOne
+     */
+    private $lineOne = null;
+
+    /**
+     * @var string $lineTwo
+     */
+    private $lineTwo = null;
+
+    /**
+     * @var string $lineThree
+     */
+    private $lineThree = null;
+
+    /**
+     * @var string $cityName
+     */
+    private $cityName = null;
+
+    /**
+     * @var string $countryID
+     */
+    private $countryID = null;
+
+    /**
+     * @var string[] $countrySubDivisionName
+     */
+    private $countrySubDivisionName = [
+        
+    ];
+
+    /**
+     * Gets as postcodeCode
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\CodeType
+     */
+    public function getPostcodeCode()
+    {
+        return $this->postcodeCode;
+    }
+
+    /**
+     * Sets a new postcodeCode
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\CodeType $postcodeCode
+     * @return self
+     */
+    public function setPostcodeCode(\horstoeko\zugferd\entities\extended\udt\CodeType $postcodeCode)
+    {
+        $this->postcodeCode = $postcodeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as lineOne
+     *
+     * @return string
+     */
+    public function getLineOne()
+    {
+        return $this->lineOne;
+    }
+
+    /**
+     * Sets a new lineOne
+     *
+     * @param  string $lineOne
+     * @return self
+     */
+    public function setLineOne($lineOne)
+    {
+        $this->lineOne = $lineOne;
+        return $this;
+    }
+
+    /**
+     * Gets as lineTwo
+     *
+     * @return string
+     */
+    public function getLineTwo()
+    {
+        return $this->lineTwo;
+    }
+
+    /**
+     * Sets a new lineTwo
+     *
+     * @param  string $lineTwo
+     * @return self
+     */
+    public function setLineTwo($lineTwo)
+    {
+        $this->lineTwo = $lineTwo;
+        return $this;
+    }
+
+    /**
+     * Gets as lineThree
+     *
+     * @return string
+     */
+    public function getLineThree()
+    {
+        return $this->lineThree;
+    }
+
+    /**
+     * Sets a new lineThree
+     *
+     * @param  string $lineThree
+     * @return self
+     */
+    public function setLineThree($lineThree)
+    {
+        $this->lineThree = $lineThree;
+        return $this;
+    }
+
+    /**
+     * Gets as cityName
+     *
+     * @return string
+     */
+    public function getCityName()
+    {
+        return $this->cityName;
+    }
+
+    /**
+     * Sets a new cityName
+     *
+     * @param  string $cityName
+     * @return self
+     */
+    public function setCityName($cityName)
+    {
+        $this->cityName = $cityName;
+        return $this;
+    }
+
+    /**
+     * Gets as countryID
+     *
+     * @return string
+     */
+    public function getCountryID()
+    {
+        return $this->countryID;
+    }
+
+    /**
+     * Sets a new countryID
+     *
+     * @param  string $countryID
+     * @return self
+     */
+    public function setCountryID($countryID)
+    {
+        $this->countryID = $countryID;
+        return $this;
+    }
+
+    /**
+     * Adds as countrySubDivisionName
+     *
+     * @return self
+     * @param  string $countrySubDivisionName
+     */
+    public function addToCountrySubDivisionName($countrySubDivisionName)
+    {
+        $this->countrySubDivisionName[] = $countrySubDivisionName;
+        return $this;
+    }
+
+    /**
+     * isset countrySubDivisionName
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetCountrySubDivisionName($index)
+    {
+        return isset($this->countrySubDivisionName[$index]);
+    }
+
+    /**
+     * unset countrySubDivisionName
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetCountrySubDivisionName($index)
+    {
+        unset($this->countrySubDivisionName[$index]);
+    }
+
+    /**
+     * Gets as countrySubDivisionName
+     *
+     * @return string[]
+     */
+    public function getCountrySubDivisionName()
+    {
+        return $this->countrySubDivisionName;
+    }
+
+    /**
+     * Sets a new countrySubDivisionName
+     *
+     * @param  string $countrySubDivisionName
+     * @return self
+     */
+    public function setCountrySubDivisionName(array $countrySubDivisionName)
+    {
+        $this->countrySubDivisionName = $countrySubDivisionName;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAllowanceChargeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAllowanceChargeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeAllowanceChargeType.php	(revision 8435)
@@ -0,0 +1,255 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeAllowanceChargeType
+ *
+ * XSD Type: TradeAllowanceChargeType
+ */
+class TradeAllowanceChargeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IndicatorType $chargeIndicator
+     */
+    private $chargeIndicator = null;
+
+    /**
+     * @var float $sequenceNumeric
+     */
+    private $sequenceNumeric = null;
+
+    /**
+     * @var float $calculationPercent
+     */
+    private $calculationPercent = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $basisAmount
+     */
+    private $basisAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\QuantityType $basisQuantity
+     */
+    private $basisQuantity = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $actualAmount
+     */
+    private $actualAmount = null;
+
+    /**
+     * @var string $reasonCode
+     */
+    private $reasonCode = null;
+
+    /**
+     * @var string $reason
+     */
+    private $reason = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeTaxType $categoryTradeTax
+     */
+    private $categoryTradeTax = null;
+
+    /**
+     * Gets as chargeIndicator
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IndicatorType
+     */
+    public function getChargeIndicator()
+    {
+        return $this->chargeIndicator;
+    }
+
+    /**
+     * Sets a new chargeIndicator
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IndicatorType $chargeIndicator
+     * @return self
+     */
+    public function setChargeIndicator(\horstoeko\zugferd\entities\extended\udt\IndicatorType $chargeIndicator)
+    {
+        $this->chargeIndicator = $chargeIndicator;
+        return $this;
+    }
+
+    /**
+     * Gets as sequenceNumeric
+     *
+     * @return float
+     */
+    public function getSequenceNumeric()
+    {
+        return $this->sequenceNumeric;
+    }
+
+    /**
+     * Sets a new sequenceNumeric
+     *
+     * @param  float $sequenceNumeric
+     * @return self
+     */
+    public function setSequenceNumeric($sequenceNumeric)
+    {
+        $this->sequenceNumeric = $sequenceNumeric;
+        return $this;
+    }
+
+    /**
+     * Gets as calculationPercent
+     *
+     * @return float
+     */
+    public function getCalculationPercent()
+    {
+        return $this->calculationPercent;
+    }
+
+    /**
+     * Sets a new calculationPercent
+     *
+     * @param  float $calculationPercent
+     * @return self
+     */
+    public function setCalculationPercent($calculationPercent)
+    {
+        $this->calculationPercent = $calculationPercent;
+        return $this;
+    }
+
+    /**
+     * Gets as basisAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getBasisAmount()
+    {
+        return $this->basisAmount;
+    }
+
+    /**
+     * Sets a new basisAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $basisAmount
+     * @return self
+     */
+    public function setBasisAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $basisAmount)
+    {
+        $this->basisAmount = $basisAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as basisQuantity
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\QuantityType
+     */
+    public function getBasisQuantity()
+    {
+        return $this->basisQuantity;
+    }
+
+    /**
+     * Sets a new basisQuantity
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\QuantityType $basisQuantity
+     * @return self
+     */
+    public function setBasisQuantity(\horstoeko\zugferd\entities\extended\udt\QuantityType $basisQuantity)
+    {
+        $this->basisQuantity = $basisQuantity;
+        return $this;
+    }
+
+    /**
+     * Gets as actualAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getActualAmount()
+    {
+        return $this->actualAmount;
+    }
+
+    /**
+     * Sets a new actualAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $actualAmount
+     * @return self
+     */
+    public function setActualAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $actualAmount)
+    {
+        $this->actualAmount = $actualAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as reasonCode
+     *
+     * @return string
+     */
+    public function getReasonCode()
+    {
+        return $this->reasonCode;
+    }
+
+    /**
+     * Sets a new reasonCode
+     *
+     * @param  string $reasonCode
+     * @return self
+     */
+    public function setReasonCode($reasonCode)
+    {
+        $this->reasonCode = $reasonCode;
+        return $this;
+    }
+
+    /**
+     * Gets as reason
+     *
+     * @return string
+     */
+    public function getReason()
+    {
+        return $this->reason;
+    }
+
+    /**
+     * Sets a new reason
+     *
+     * @param  string $reason
+     * @return self
+     */
+    public function setReason($reason)
+    {
+        $this->reason = $reason;
+        return $this;
+    }
+
+    /**
+     * Gets as categoryTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeTaxType
+     */
+    public function getCategoryTradeTax()
+    {
+        return $this->categoryTradeTax;
+    }
+
+    /**
+     * Sets a new categoryTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeTaxType $categoryTradeTax
+     * @return self
+     */
+    public function setCategoryTradeTax(\horstoeko\zugferd\entities\extended\ram\TradeTaxType $categoryTradeTax)
+    {
+        $this->categoryTradeTax = $categoryTradeTax;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeContactType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeContactType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeContactType.php	(revision 8435)
@@ -0,0 +1,174 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeContactType
+ *
+ * XSD Type: TradeContactType
+ */
+class TradeContactType
+{
+
+    /**
+     * @var string $personName
+     */
+    private $personName = null;
+
+    /**
+     * @var string $departmentName
+     */
+    private $departmentName = null;
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType $telephoneUniversalCommunication
+     */
+    private $telephoneUniversalCommunication = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType $faxUniversalCommunication
+     */
+    private $faxUniversalCommunication = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType $emailURIUniversalCommunication
+     */
+    private $emailURIUniversalCommunication = null;
+
+    /**
+     * Gets as personName
+     *
+     * @return string
+     */
+    public function getPersonName()
+    {
+        return $this->personName;
+    }
+
+    /**
+     * Sets a new personName
+     *
+     * @param  string $personName
+     * @return self
+     */
+    public function setPersonName($personName)
+    {
+        $this->personName = $personName;
+        return $this;
+    }
+
+    /**
+     * Gets as departmentName
+     *
+     * @return string
+     */
+    public function getDepartmentName()
+    {
+        return $this->departmentName;
+    }
+
+    /**
+     * Sets a new departmentName
+     *
+     * @param  string $departmentName
+     * @return self
+     */
+    public function setDepartmentName($departmentName)
+    {
+        $this->departmentName = $departmentName;
+        return $this;
+    }
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as telephoneUniversalCommunication
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType
+     */
+    public function getTelephoneUniversalCommunication()
+    {
+        return $this->telephoneUniversalCommunication;
+    }
+
+    /**
+     * Sets a new telephoneUniversalCommunication
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType $telephoneUniversalCommunication
+     * @return self
+     */
+    public function setTelephoneUniversalCommunication(\horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType $telephoneUniversalCommunication)
+    {
+        $this->telephoneUniversalCommunication = $telephoneUniversalCommunication;
+        return $this;
+    }
+
+    /**
+     * Gets as faxUniversalCommunication
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType
+     */
+    public function getFaxUniversalCommunication()
+    {
+        return $this->faxUniversalCommunication;
+    }
+
+    /**
+     * Sets a new faxUniversalCommunication
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType $faxUniversalCommunication
+     * @return self
+     */
+    public function setFaxUniversalCommunication(\horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType $faxUniversalCommunication)
+    {
+        $this->faxUniversalCommunication = $faxUniversalCommunication;
+        return $this;
+    }
+
+    /**
+     * Gets as emailURIUniversalCommunication
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType
+     */
+    public function getEmailURIUniversalCommunication()
+    {
+        return $this->emailURIUniversalCommunication;
+    }
+
+    /**
+     * Sets a new emailURIUniversalCommunication
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType $emailURIUniversalCommunication
+     * @return self
+     */
+    public function setEmailURIUniversalCommunication(\horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType $emailURIUniversalCommunication)
+    {
+        $this->emailURIUniversalCommunication = $emailURIUniversalCommunication;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCountryType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCountryType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCountryType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeCountryType
+ *
+ * XSD Type: TradeCountryType
+ */
+class TradeCountryType
+{
+
+    /**
+     * @var string $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return string
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  string $iD
+     * @return self
+     */
+    public function setID($iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCurrencyExchangeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCurrencyExchangeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeCurrencyExchangeType.php	(revision 8435)
@@ -0,0 +1,121 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeCurrencyExchangeType
+ *
+ * XSD Type: TradeCurrencyExchangeType
+ */
+class TradeCurrencyExchangeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\qdt\CurrencyCodeType $sourceCurrencyCode $sourceCurrencyCode
+     */
+    private $sourceCurrencyCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\qdt\CurrencyCodeType $sourceCurrencyCode $targetCurrencyCode
+     */
+    private $targetCurrencyCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\RateType $conversionRate
+     */
+    private $conversionRate = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\DateTimeType $conversionRateDateTime
+     */
+    private $conversionRateDateTime = null;
+
+    /**
+     * Gets as sourceCurrencyCode
+     *
+     * @return \horstoeko\zugferd\entities\extended\qdt\CurrencyCodeType
+
+     */
+    public function getSourceCurrencyCode()
+    {
+        return $this->sourceCurrencyCode;
+    }
+
+    /**
+     * Sets a new sourceCurrencyCode
+     *
+     * @param  \horstoeko\zugferd\entities\extended\qdt\CurrencyCodeType $sourceCurrencyCode
+     * @return self
+     */
+    public function setSourceCurrencyCode($sourceCurrencyCode)
+    {
+        $this->sourceCurrencyCode = $sourceCurrencyCode;
+        return $this;
+    }
+
+    /**
+     * Gets as targetCurrencyCode
+     *
+     * @return \horstoeko\zugferd\entities\extended\qdt\CurrencyCodeType $sourceCurrencyCode
+     */
+    public function getTargetCurrencyCode()
+    {
+        return $this->targetCurrencyCode;
+    }
+
+    /**
+     * Sets a new targetCurrencyCode
+     *
+     * @param  \horstoeko\zugferd\entities\extended\qdt\CurrencyCodeType $sourceCurrencyCode $targetCurrencyCode
+     * @return self
+     */
+    public function setTargetCurrencyCode($targetCurrencyCode)
+    {
+        $this->targetCurrencyCode = $targetCurrencyCode;
+        return $this;
+    }
+
+    /**
+     * Gets as conversionRate
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\RateType
+     */
+    public function getConversionRate()
+    {
+        return $this->conversionRate;
+    }
+
+    /**
+     * Sets a new conversionRate
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\RateType $conversionRate
+     * @return self
+     */
+    public function setConversionRate($conversionRate)
+    {
+        $this->conversionRate = $conversionRate;
+        return $this;
+    }
+
+    /**
+     * Gets as conversionRateDateTime
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\DateTimeType
+     */
+    public function getConversionRateDateTime()
+    {
+        return $this->conversionRateDateTime;
+    }
+
+    /**
+     * Sets a new conversionRateDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\DateTimeType $conversionRateDateTime
+     * @return self
+     */
+    public function setConversionRateDateTime(\horstoeko\zugferd\entities\extended\udt\DateTimeType $conversionRateDateTime)
+    {
+        $this->conversionRateDateTime = $conversionRateDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeDeliveryTermsType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeDeliveryTermsType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeDeliveryTermsType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeDeliveryTermsType
+ *
+ * XSD Type: TradeDeliveryTermsType
+ */
+class TradeDeliveryTermsType
+{
+
+    /**
+     * @var string $deliveryTypeCode
+     */
+    private $deliveryTypeCode = null;
+
+    /**
+     * Gets as deliveryTypeCode
+     *
+     * @return string
+     */
+    public function getDeliveryTypeCode()
+    {
+        return $this->deliveryTypeCode;
+    }
+
+    /**
+     * Sets a new deliveryTypeCode
+     *
+     * @param  string $deliveryTypeCode
+     * @return self
+     */
+    public function setDeliveryTypeCode($deliveryTypeCode)
+    {
+        $this->deliveryTypeCode = $deliveryTypeCode;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePartyType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePartyType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePartyType.php	(revision 8435)
@@ -0,0 +1,426 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradePartyType
+ *
+ * XSD Type: TradePartyType
+ */
+class TradePartyType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType[] $iD
+     */
+    private $iD = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType[] $globalID
+     */
+    private $globalID = [
+        
+    ];
+
+    /**
+     * @var string $name
+     */
+    private $name = null;
+
+    /**
+     * @var string $roleCode
+     */
+    private $roleCode = null;
+
+    /**
+     * @var string $description
+     */
+    private $description = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\LegalOrganizationType $specifiedLegalOrganization
+     */
+    private $specifiedLegalOrganization = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeContactType[] $definedTradeContact
+     */
+    private $definedTradeContact = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeAddressType $postalTradeAddress
+     */
+    private $postalTradeAddress = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType $uRIUniversalCommunication
+     */
+    private $uRIUniversalCommunication = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TaxRegistrationType[] $specifiedTaxRegistration
+     */
+    private $specifiedTaxRegistration = [
+        
+    ];
+
+    /**
+     * Adds as iD
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     */
+    public function addToID(\horstoeko\zugferd\entities\extended\udt\IDType $iD)
+    {
+        $this->iD[] = $iD;
+        return $this;
+    }
+
+    /**
+     * isset iD
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetID($index)
+    {
+        return isset($this->iD[$index]);
+    }
+
+    /**
+     * unset iD
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetID($index)
+    {
+        unset($this->iD[$index]);
+    }
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType[]
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType[] $iD
+     * @return self
+     */
+    public function setID(array $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Adds as globalID
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $globalID
+     */
+    public function addToGlobalID(\horstoeko\zugferd\entities\extended\udt\IDType $globalID)
+    {
+        $this->globalID[] = $globalID;
+        return $this;
+    }
+
+    /**
+     * isset globalID
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetGlobalID($index)
+    {
+        return isset($this->globalID[$index]);
+    }
+
+    /**
+     * unset globalID
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetGlobalID($index)
+    {
+        unset($this->globalID[$index]);
+    }
+
+    /**
+     * Gets as globalID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType[]
+     */
+    public function getGlobalID()
+    {
+        return $this->globalID;
+    }
+
+    /**
+     * Sets a new globalID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType[] $globalID
+     * @return self
+     */
+    public function setGlobalID(array $globalID)
+    {
+        $this->globalID = $globalID;
+        return $this;
+    }
+
+    /**
+     * Gets as name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+
+    /**
+     * Gets as roleCode
+     *
+     * @return string
+     */
+    public function getRoleCode()
+    {
+        return $this->roleCode;
+    }
+
+    /**
+     * Sets a new roleCode
+     *
+     * @param  string $roleCode
+     * @return self
+     */
+    public function setRoleCode($roleCode)
+    {
+        $this->roleCode = $roleCode;
+        return $this;
+    }
+
+    /**
+     * Gets as description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Sets a new description
+     *
+     * @param  string $description
+     * @return self
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLegalOrganization
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\LegalOrganizationType
+     */
+    public function getSpecifiedLegalOrganization()
+    {
+        return $this->specifiedLegalOrganization;
+    }
+
+    /**
+     * Sets a new specifiedLegalOrganization
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\LegalOrganizationType $specifiedLegalOrganization
+     * @return self
+     */
+    public function setSpecifiedLegalOrganization(\horstoeko\zugferd\entities\extended\ram\LegalOrganizationType $specifiedLegalOrganization)
+    {
+        $this->specifiedLegalOrganization = $specifiedLegalOrganization;
+        return $this;
+    }
+
+    /**
+     * Adds as definedTradeContact
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeContactType $definedTradeContact
+     */
+    public function addToDefinedTradeContact(\horstoeko\zugferd\entities\extended\ram\TradeContactType $definedTradeContact)
+    {
+        $this->definedTradeContact[] = $definedTradeContact;
+        return $this;
+    }
+
+    /**
+     * isset definedTradeContact
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetDefinedTradeContact($index)
+    {
+        return isset($this->definedTradeContact[$index]);
+    }
+
+    /**
+     * unset definedTradeContact
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetDefinedTradeContact($index)
+    {
+        unset($this->definedTradeContact[$index]);
+    }
+
+    /**
+     * Gets as definedTradeContact
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeContactType[]
+     */
+    public function getDefinedTradeContact()
+    {
+        return $this->definedTradeContact;
+    }
+
+    /**
+     * Sets a new definedTradeContact
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeContactType[] $definedTradeContact
+     * @return self
+     */
+    public function setDefinedTradeContact(array $definedTradeContact)
+    {
+        $this->definedTradeContact = $definedTradeContact;
+        return $this;
+    }
+
+    /**
+     * Gets as postalTradeAddress
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeAddressType
+     */
+    public function getPostalTradeAddress()
+    {
+        return $this->postalTradeAddress;
+    }
+
+    /**
+     * Sets a new postalTradeAddress
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeAddressType $postalTradeAddress
+     * @return self
+     */
+    public function setPostalTradeAddress(\horstoeko\zugferd\entities\extended\ram\TradeAddressType $postalTradeAddress)
+    {
+        $this->postalTradeAddress = $postalTradeAddress;
+        return $this;
+    }
+
+    /**
+     * Gets as uRIUniversalCommunication
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType
+     */
+    public function getURIUniversalCommunication()
+    {
+        return $this->uRIUniversalCommunication;
+    }
+
+    /**
+     * Sets a new uRIUniversalCommunication
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType $uRIUniversalCommunication
+     * @return self
+     */
+    public function setURIUniversalCommunication(\horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType $uRIUniversalCommunication)
+    {
+        $this->uRIUniversalCommunication = $uRIUniversalCommunication;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTaxRegistration
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\TaxRegistrationType $specifiedTaxRegistration
+     */
+    public function addToSpecifiedTaxRegistration(\horstoeko\zugferd\entities\extended\ram\TaxRegistrationType $specifiedTaxRegistration)
+    {
+        $this->specifiedTaxRegistration[] = $specifiedTaxRegistration;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTaxRegistration
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTaxRegistration($index)
+    {
+        return isset($this->specifiedTaxRegistration[$index]);
+    }
+
+    /**
+     * unset specifiedTaxRegistration
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTaxRegistration($index)
+    {
+        unset($this->specifiedTaxRegistration[$index]);
+    }
+
+    /**
+     * Gets as specifiedTaxRegistration
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TaxRegistrationType[]
+     */
+    public function getSpecifiedTaxRegistration()
+    {
+        return $this->specifiedTaxRegistration;
+    }
+
+    /**
+     * Sets a new specifiedTaxRegistration
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TaxRegistrationType[] $specifiedTaxRegistration
+     * @return self
+     */
+    public function setSpecifiedTaxRegistration(array $specifiedTaxRegistration)
+    {
+        $this->specifiedTaxRegistration = $specifiedTaxRegistration;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentDiscountTermsType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentDiscountTermsType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentDiscountTermsType.php	(revision 8435)
@@ -0,0 +1,147 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradePaymentDiscountTermsType
+ *
+ * XSD Type: TradePaymentDiscountTermsType
+ */
+class TradePaymentDiscountTermsType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\DateTimeType $basisDateTime
+     */
+    private $basisDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\MeasureType $basisPeriodMeasure
+     */
+    private $basisPeriodMeasure = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $basisAmount
+     */
+    private $basisAmount = null;
+
+    /**
+     * @var float $calculationPercent
+     */
+    private $calculationPercent = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $actualDiscountAmount
+     */
+    private $actualDiscountAmount = null;
+
+    /**
+     * Gets as basisDateTime
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\DateTimeType
+     */
+    public function getBasisDateTime()
+    {
+        return $this->basisDateTime;
+    }
+
+    /**
+     * Sets a new basisDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\DateTimeType $basisDateTime
+     * @return self
+     */
+    public function setBasisDateTime(\horstoeko\zugferd\entities\extended\udt\DateTimeType $basisDateTime)
+    {
+        $this->basisDateTime = $basisDateTime;
+        return $this;
+    }
+
+    /**
+     * Gets as basisPeriodMeasure
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\MeasureType
+     */
+    public function getBasisPeriodMeasure()
+    {
+        return $this->basisPeriodMeasure;
+    }
+
+    /**
+     * Sets a new basisPeriodMeasure
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\MeasureType $basisPeriodMeasure
+     * @return self
+     */
+    public function setBasisPeriodMeasure(\horstoeko\zugferd\entities\extended\udt\MeasureType $basisPeriodMeasure)
+    {
+        $this->basisPeriodMeasure = $basisPeriodMeasure;
+        return $this;
+    }
+
+    /**
+     * Gets as basisAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getBasisAmount()
+    {
+        return $this->basisAmount;
+    }
+
+    /**
+     * Sets a new basisAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $basisAmount
+     * @return self
+     */
+    public function setBasisAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $basisAmount)
+    {
+        $this->basisAmount = $basisAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as calculationPercent
+     *
+     * @return float
+     */
+    public function getCalculationPercent()
+    {
+        return $this->calculationPercent;
+    }
+
+    /**
+     * Sets a new calculationPercent
+     *
+     * @param  float $calculationPercent
+     * @return self
+     */
+    public function setCalculationPercent($calculationPercent)
+    {
+        $this->calculationPercent = $calculationPercent;
+        return $this;
+    }
+
+    /**
+     * Gets as actualDiscountAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getActualDiscountAmount()
+    {
+        return $this->actualDiscountAmount;
+    }
+
+    /**
+     * Sets a new actualDiscountAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $actualDiscountAmount
+     * @return self
+     */
+    public function setActualDiscountAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $actualDiscountAmount)
+    {
+        $this->actualDiscountAmount = $actualDiscountAmount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentPenaltyTermsType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentPenaltyTermsType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentPenaltyTermsType.php	(revision 8435)
@@ -0,0 +1,147 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradePaymentPenaltyTermsType
+ *
+ * XSD Type: TradePaymentPenaltyTermsType
+ */
+class TradePaymentPenaltyTermsType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\DateTimeType $basisDateTime
+     */
+    private $basisDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\MeasureType $basisPeriodMeasure
+     */
+    private $basisPeriodMeasure = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $basisAmount
+     */
+    private $basisAmount = null;
+
+    /**
+     * @var float $calculationPercent
+     */
+    private $calculationPercent = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $actualPenaltyAmount
+     */
+    private $actualPenaltyAmount = null;
+
+    /**
+     * Gets as basisDateTime
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\DateTimeType
+     */
+    public function getBasisDateTime()
+    {
+        return $this->basisDateTime;
+    }
+
+    /**
+     * Sets a new basisDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\DateTimeType $basisDateTime
+     * @return self
+     */
+    public function setBasisDateTime(\horstoeko\zugferd\entities\extended\udt\DateTimeType $basisDateTime)
+    {
+        $this->basisDateTime = $basisDateTime;
+        return $this;
+    }
+
+    /**
+     * Gets as basisPeriodMeasure
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\MeasureType
+     */
+    public function getBasisPeriodMeasure()
+    {
+        return $this->basisPeriodMeasure;
+    }
+
+    /**
+     * Sets a new basisPeriodMeasure
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\MeasureType $basisPeriodMeasure
+     * @return self
+     */
+    public function setBasisPeriodMeasure(\horstoeko\zugferd\entities\extended\udt\MeasureType $basisPeriodMeasure)
+    {
+        $this->basisPeriodMeasure = $basisPeriodMeasure;
+        return $this;
+    }
+
+    /**
+     * Gets as basisAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getBasisAmount()
+    {
+        return $this->basisAmount;
+    }
+
+    /**
+     * Sets a new basisAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $basisAmount
+     * @return self
+     */
+    public function setBasisAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $basisAmount)
+    {
+        $this->basisAmount = $basisAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as calculationPercent
+     *
+     * @return float
+     */
+    public function getCalculationPercent()
+    {
+        return $this->calculationPercent;
+    }
+
+    /**
+     * Sets a new calculationPercent
+     *
+     * @param  float $calculationPercent
+     * @return self
+     */
+    public function setCalculationPercent($calculationPercent)
+    {
+        $this->calculationPercent = $calculationPercent;
+        return $this;
+    }
+
+    /**
+     * Gets as actualPenaltyAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getActualPenaltyAmount()
+    {
+        return $this->actualPenaltyAmount;
+    }
+
+    /**
+     * Sets a new actualPenaltyAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $actualPenaltyAmount
+     * @return self
+     */
+    public function setActualPenaltyAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $actualPenaltyAmount)
+    {
+        $this->actualPenaltyAmount = $actualPenaltyAmount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentTermsType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentTermsType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePaymentTermsType.php	(revision 8435)
@@ -0,0 +1,201 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradePaymentTermsType
+ *
+ * XSD Type: TradePaymentTermsType
+ */
+class TradePaymentTermsType
+{
+
+    /**
+     * @var string $description
+     */
+    private $description = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\DateTimeType $dueDateDateTime
+     */
+    private $dueDateDateTime = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $directDebitMandateID
+     */
+    private $directDebitMandateID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $partialPaymentAmount
+     */
+    private $partialPaymentAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePaymentPenaltyTermsType $applicableTradePaymentPenaltyTerms
+     */
+    private $applicableTradePaymentPenaltyTerms = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePaymentDiscountTermsType $applicableTradePaymentDiscountTerms
+     */
+    private $applicableTradePaymentDiscountTerms = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType $payeeTradeParty
+     */
+    private $payeeTradeParty = null;
+
+    /**
+     * Gets as description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Sets a new description
+     *
+     * @param  string $description
+     * @return self
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Gets as dueDateDateTime
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\DateTimeType
+     */
+    public function getDueDateDateTime()
+    {
+        return $this->dueDateDateTime;
+    }
+
+    /**
+     * Sets a new dueDateDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\DateTimeType $dueDateDateTime
+     * @return self
+     */
+    public function setDueDateDateTime(\horstoeko\zugferd\entities\extended\udt\DateTimeType $dueDateDateTime)
+    {
+        $this->dueDateDateTime = $dueDateDateTime;
+        return $this;
+    }
+
+    /**
+     * Gets as directDebitMandateID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getDirectDebitMandateID()
+    {
+        return $this->directDebitMandateID;
+    }
+
+    /**
+     * Sets a new directDebitMandateID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $directDebitMandateID
+     * @return self
+     */
+    public function setDirectDebitMandateID(\horstoeko\zugferd\entities\extended\udt\IDType $directDebitMandateID)
+    {
+        $this->directDebitMandateID = $directDebitMandateID;
+        return $this;
+    }
+
+    /**
+     * Gets as partialPaymentAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getPartialPaymentAmount()
+    {
+        return $this->partialPaymentAmount;
+    }
+
+    /**
+     * Sets a new partialPaymentAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $partialPaymentAmount
+     * @return self
+     */
+    public function setPartialPaymentAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $partialPaymentAmount)
+    {
+        $this->partialPaymentAmount = $partialPaymentAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableTradePaymentPenaltyTerms
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePaymentPenaltyTermsType
+     */
+    public function getApplicableTradePaymentPenaltyTerms()
+    {
+        return $this->applicableTradePaymentPenaltyTerms;
+    }
+
+    /**
+     * Sets a new applicableTradePaymentPenaltyTerms
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePaymentPenaltyTermsType $applicableTradePaymentPenaltyTerms
+     * @return self
+     */
+    public function setApplicableTradePaymentPenaltyTerms(\horstoeko\zugferd\entities\extended\ram\TradePaymentPenaltyTermsType $applicableTradePaymentPenaltyTerms)
+    {
+        $this->applicableTradePaymentPenaltyTerms = $applicableTradePaymentPenaltyTerms;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableTradePaymentDiscountTerms
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePaymentDiscountTermsType
+     */
+    public function getApplicableTradePaymentDiscountTerms()
+    {
+        return $this->applicableTradePaymentDiscountTerms;
+    }
+
+    /**
+     * Sets a new applicableTradePaymentDiscountTerms
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePaymentDiscountTermsType $applicableTradePaymentDiscountTerms
+     * @return self
+     */
+    public function setApplicableTradePaymentDiscountTerms(\horstoeko\zugferd\entities\extended\ram\TradePaymentDiscountTermsType $applicableTradePaymentDiscountTerms)
+    {
+        $this->applicableTradePaymentDiscountTerms = $applicableTradePaymentDiscountTerms;
+        return $this;
+    }
+
+    /**
+     * Gets as payeeTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradePartyType
+     */
+    public function getPayeeTradeParty()
+    {
+        return $this->payeeTradeParty;
+    }
+
+    /**
+     * Sets a new payeeTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradePartyType $payeeTradeParty
+     * @return self
+     */
+    public function setPayeeTradeParty(\horstoeko\zugferd\entities\extended\ram\TradePartyType $payeeTradeParty)
+    {
+        $this->payeeTradeParty = $payeeTradeParty;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePriceType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePriceType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradePriceType.php	(revision 8435)
@@ -0,0 +1,156 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradePriceType
+ *
+ * XSD Type: TradePriceType
+ */
+class TradePriceType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $chargeAmount
+     */
+    private $chargeAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\QuantityType $basisQuantity
+     */
+    private $basisQuantity = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType[] $appliedTradeAllowanceCharge
+     */
+    private $appliedTradeAllowanceCharge = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeTaxType $includedTradeTax
+     */
+    private $includedTradeTax = null;
+
+    /**
+     * Gets as chargeAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getChargeAmount()
+    {
+        return $this->chargeAmount;
+    }
+
+    /**
+     * Sets a new chargeAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $chargeAmount
+     * @return self
+     */
+    public function setChargeAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $chargeAmount)
+    {
+        $this->chargeAmount = $chargeAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as basisQuantity
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\QuantityType
+     */
+    public function getBasisQuantity()
+    {
+        return $this->basisQuantity;
+    }
+
+    /**
+     * Sets a new basisQuantity
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\QuantityType $basisQuantity
+     * @return self
+     */
+    public function setBasisQuantity(\horstoeko\zugferd\entities\extended\udt\QuantityType $basisQuantity)
+    {
+        $this->basisQuantity = $basisQuantity;
+        return $this;
+    }
+
+    /**
+     * Adds as appliedTradeAllowanceCharge
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType $appliedTradeAllowanceCharge
+     */
+    public function addToAppliedTradeAllowanceCharge(\horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType $appliedTradeAllowanceCharge)
+    {
+        $this->appliedTradeAllowanceCharge[] = $appliedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * isset appliedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetAppliedTradeAllowanceCharge($index)
+    {
+        return isset($this->appliedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * unset appliedTradeAllowanceCharge
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetAppliedTradeAllowanceCharge($index)
+    {
+        unset($this->appliedTradeAllowanceCharge[$index]);
+    }
+
+    /**
+     * Gets as appliedTradeAllowanceCharge
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType[]
+     */
+    public function getAppliedTradeAllowanceCharge()
+    {
+        return $this->appliedTradeAllowanceCharge;
+    }
+
+    /**
+     * Sets a new appliedTradeAllowanceCharge
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType[] $appliedTradeAllowanceCharge
+     * @return self
+     */
+    public function setAppliedTradeAllowanceCharge(array $appliedTradeAllowanceCharge)
+    {
+        $this->appliedTradeAllowanceCharge = $appliedTradeAllowanceCharge;
+        return $this;
+    }
+
+    /**
+     * Gets as includedTradeTax
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeTaxType
+     */
+    public function getIncludedTradeTax()
+    {
+        return $this->includedTradeTax;
+    }
+
+    /**
+     * Sets a new includedTradeTax
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeTaxType $includedTradeTax
+     * @return self
+     */
+    public function setIncludedTradeTax(\horstoeko\zugferd\entities\extended\ram\TradeTaxType $includedTradeTax)
+    {
+        $this->includedTradeTax = $includedTradeTax;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductInstanceType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductInstanceType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductInstanceType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeProductInstanceType
+ *
+ * XSD Type: TradeProductInstanceType
+ */
+class TradeProductInstanceType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $batchID
+     */
+    private $batchID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $supplierAssignedSerialID
+     */
+    private $supplierAssignedSerialID = null;
+
+    /**
+     * Gets as batchID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getBatchID()
+    {
+        return $this->batchID;
+    }
+
+    /**
+     * Sets a new batchID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $batchID
+     * @return self
+     */
+    public function setBatchID(\horstoeko\zugferd\entities\extended\udt\IDType $batchID)
+    {
+        $this->batchID = $batchID;
+        return $this;
+    }
+
+    /**
+     * Gets as supplierAssignedSerialID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getSupplierAssignedSerialID()
+    {
+        return $this->supplierAssignedSerialID;
+    }
+
+    /**
+     * Sets a new supplierAssignedSerialID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $supplierAssignedSerialID
+     * @return self
+     */
+    public function setSupplierAssignedSerialID(\horstoeko\zugferd\entities\extended\udt\IDType $supplierAssignedSerialID)
+    {
+        $this->supplierAssignedSerialID = $supplierAssignedSerialID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeProductType.php	(revision 8435)
@@ -0,0 +1,453 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeProductType
+ *
+ * XSD Type: TradeProductType
+ */
+class TradeProductType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $globalID
+     */
+    private $globalID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $sellerAssignedID
+     */
+    private $sellerAssignedID = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $buyerAssignedID
+     */
+    private $buyerAssignedID = null;
+
+    /**
+     * @var string $name
+     */
+    private $name = null;
+
+    /**
+     * @var string $description
+     */
+    private $description = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ProductCharacteristicType[] $applicableProductCharacteristic
+     */
+    private $applicableProductCharacteristic = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ProductClassificationType[] $designatedProductClassification
+     */
+    private $designatedProductClassification = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeProductInstanceType[] $individualTradeProductInstance
+     */
+    private $individualTradeProductInstance = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeCountryType $originTradeCountry
+     */
+    private $originTradeCountry = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ReferencedProductType[] $includedReferencedProduct
+     */
+    private $includedReferencedProduct = [
+        
+    ];
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\extended\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as globalID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getGlobalID()
+    {
+        return $this->globalID;
+    }
+
+    /**
+     * Sets a new globalID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $globalID
+     * @return self
+     */
+    public function setGlobalID(\horstoeko\zugferd\entities\extended\udt\IDType $globalID)
+    {
+        $this->globalID = $globalID;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerAssignedID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getSellerAssignedID()
+    {
+        return $this->sellerAssignedID;
+    }
+
+    /**
+     * Sets a new sellerAssignedID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $sellerAssignedID
+     * @return self
+     */
+    public function setSellerAssignedID(\horstoeko\zugferd\entities\extended\udt\IDType $sellerAssignedID)
+    {
+        $this->sellerAssignedID = $sellerAssignedID;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerAssignedID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getBuyerAssignedID()
+    {
+        return $this->buyerAssignedID;
+    }
+
+    /**
+     * Sets a new buyerAssignedID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $buyerAssignedID
+     * @return self
+     */
+    public function setBuyerAssignedID(\horstoeko\zugferd\entities\extended\udt\IDType $buyerAssignedID)
+    {
+        $this->buyerAssignedID = $buyerAssignedID;
+        return $this;
+    }
+
+    /**
+     * Gets as name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+
+    /**
+     * Gets as description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     * Sets a new description
+     *
+     * @param  string $description
+     * @return self
+     */
+    public function setDescription($description)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
+    /**
+     * Adds as applicableProductCharacteristic
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\ProductCharacteristicType $applicableProductCharacteristic
+     */
+    public function addToApplicableProductCharacteristic(\horstoeko\zugferd\entities\extended\ram\ProductCharacteristicType $applicableProductCharacteristic)
+    {
+        $this->applicableProductCharacteristic[] = $applicableProductCharacteristic;
+        return $this;
+    }
+
+    /**
+     * isset applicableProductCharacteristic
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetApplicableProductCharacteristic($index)
+    {
+        return isset($this->applicableProductCharacteristic[$index]);
+    }
+
+    /**
+     * unset applicableProductCharacteristic
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetApplicableProductCharacteristic($index)
+    {
+        unset($this->applicableProductCharacteristic[$index]);
+    }
+
+    /**
+     * Gets as applicableProductCharacteristic
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ProductCharacteristicType[]
+     */
+    public function getApplicableProductCharacteristic()
+    {
+        return $this->applicableProductCharacteristic;
+    }
+
+    /**
+     * Sets a new applicableProductCharacteristic
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ProductCharacteristicType[] $applicableProductCharacteristic
+     * @return self
+     */
+    public function setApplicableProductCharacteristic(array $applicableProductCharacteristic)
+    {
+        $this->applicableProductCharacteristic = $applicableProductCharacteristic;
+        return $this;
+    }
+
+    /**
+     * Adds as designatedProductClassification
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\ProductClassificationType $designatedProductClassification
+     */
+    public function addToDesignatedProductClassification(\horstoeko\zugferd\entities\extended\ram\ProductClassificationType $designatedProductClassification)
+    {
+        $this->designatedProductClassification[] = $designatedProductClassification;
+        return $this;
+    }
+
+    /**
+     * isset designatedProductClassification
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetDesignatedProductClassification($index)
+    {
+        return isset($this->designatedProductClassification[$index]);
+    }
+
+    /**
+     * unset designatedProductClassification
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetDesignatedProductClassification($index)
+    {
+        unset($this->designatedProductClassification[$index]);
+    }
+
+    /**
+     * Gets as designatedProductClassification
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ProductClassificationType[]
+     */
+    public function getDesignatedProductClassification()
+    {
+        return $this->designatedProductClassification;
+    }
+
+    /**
+     * Sets a new designatedProductClassification
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ProductClassificationType[] $designatedProductClassification
+     * @return self
+     */
+    public function setDesignatedProductClassification(array $designatedProductClassification)
+    {
+        $this->designatedProductClassification = $designatedProductClassification;
+        return $this;
+    }
+
+    /**
+     * Adds as individualTradeProductInstance
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeProductInstanceType $individualTradeProductInstance
+     */
+    public function addToIndividualTradeProductInstance(\horstoeko\zugferd\entities\extended\ram\TradeProductInstanceType $individualTradeProductInstance)
+    {
+        $this->individualTradeProductInstance[] = $individualTradeProductInstance;
+        return $this;
+    }
+
+    /**
+     * isset individualTradeProductInstance
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetIndividualTradeProductInstance($index)
+    {
+        return isset($this->individualTradeProductInstance[$index]);
+    }
+
+    /**
+     * unset individualTradeProductInstance
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetIndividualTradeProductInstance($index)
+    {
+        unset($this->individualTradeProductInstance[$index]);
+    }
+
+    /**
+     * Gets as individualTradeProductInstance
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeProductInstanceType[]
+     */
+    public function getIndividualTradeProductInstance()
+    {
+        return $this->individualTradeProductInstance;
+    }
+
+    /**
+     * Sets a new individualTradeProductInstance
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeProductInstanceType[] $individualTradeProductInstance
+     * @return self
+     */
+    public function setIndividualTradeProductInstance(array $individualTradeProductInstance)
+    {
+        $this->individualTradeProductInstance = $individualTradeProductInstance;
+        return $this;
+    }
+
+    /**
+     * Gets as originTradeCountry
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeCountryType
+     */
+    public function getOriginTradeCountry()
+    {
+        return $this->originTradeCountry;
+    }
+
+    /**
+     * Sets a new originTradeCountry
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeCountryType $originTradeCountry
+     * @return self
+     */
+    public function setOriginTradeCountry(\horstoeko\zugferd\entities\extended\ram\TradeCountryType $originTradeCountry)
+    {
+        $this->originTradeCountry = $originTradeCountry;
+        return $this;
+    }
+
+    /**
+     * Adds as includedReferencedProduct
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedProductType $includedReferencedProduct
+     */
+    public function addToIncludedReferencedProduct(\horstoeko\zugferd\entities\extended\ram\ReferencedProductType $includedReferencedProduct)
+    {
+        $this->includedReferencedProduct[] = $includedReferencedProduct;
+        return $this;
+    }
+
+    /**
+     * isset includedReferencedProduct
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetIncludedReferencedProduct($index)
+    {
+        return isset($this->includedReferencedProduct[$index]);
+    }
+
+    /**
+     * unset includedReferencedProduct
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetIncludedReferencedProduct($index)
+    {
+        unset($this->includedReferencedProduct[$index]);
+    }
+
+    /**
+     * Gets as includedReferencedProduct
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ReferencedProductType[]
+     */
+    public function getIncludedReferencedProduct()
+    {
+        return $this->includedReferencedProduct;
+    }
+
+    /**
+     * Sets a new includedReferencedProduct
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ReferencedProductType[] $includedReferencedProduct
+     * @return self
+     */
+    public function setIncludedReferencedProduct(array $includedReferencedProduct)
+    {
+        $this->includedReferencedProduct = $includedReferencedProduct;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementFinancialCardType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementFinancialCardType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementFinancialCardType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeSettlementFinancialCardType
+ *
+ * XSD Type: TradeSettlementFinancialCardType
+ */
+class TradeSettlementFinancialCardType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $cardholderName
+     */
+    private $cardholderName = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\extended\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as cardholderName
+     *
+     * @return string
+     */
+    public function getCardholderName()
+    {
+        return $this->cardholderName;
+    }
+
+    /**
+     * Sets a new cardholderName
+     *
+     * @param  string $cardholderName
+     * @return self
+     */
+    public function setCardholderName($cardholderName)
+    {
+        $this->cardholderName = $cardholderName;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementHeaderMonetarySummationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementHeaderMonetarySummationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementHeaderMonetarySummationType.php	(revision 8435)
@@ -0,0 +1,363 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeSettlementHeaderMonetarySummationType
+ *
+ * XSD Type: TradeSettlementHeaderMonetarySummationType
+ */
+class TradeSettlementHeaderMonetarySummationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $lineTotalAmount
+     */
+    private $lineTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $chargeTotalAmount
+     */
+    private $chargeTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $allowanceTotalAmount
+     */
+    private $allowanceTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType[] $taxBasisTotalAmount
+     */
+    private $taxBasisTotalAmount = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType[] $taxTotalAmount
+     */
+    private $taxTotalAmount = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $roundingAmount
+     */
+    private $roundingAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType[] $grandTotalAmount
+     */
+    private $grandTotalAmount = [
+        
+    ];
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $totalPrepaidAmount
+     */
+    private $totalPrepaidAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $duePayableAmount
+     */
+    private $duePayableAmount = null;
+
+    /**
+     * Gets as lineTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getLineTotalAmount()
+    {
+        return $this->lineTotalAmount;
+    }
+
+    /**
+     * Sets a new lineTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $lineTotalAmount
+     * @return self
+     */
+    public function setLineTotalAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $lineTotalAmount)
+    {
+        $this->lineTotalAmount = $lineTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as chargeTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getChargeTotalAmount()
+    {
+        return $this->chargeTotalAmount;
+    }
+
+    /**
+     * Sets a new chargeTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $chargeTotalAmount
+     * @return self
+     */
+    public function setChargeTotalAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $chargeTotalAmount)
+    {
+        $this->chargeTotalAmount = $chargeTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as allowanceTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getAllowanceTotalAmount()
+    {
+        return $this->allowanceTotalAmount;
+    }
+
+    /**
+     * Sets a new allowanceTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $allowanceTotalAmount
+     * @return self
+     */
+    public function setAllowanceTotalAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $allowanceTotalAmount)
+    {
+        $this->allowanceTotalAmount = $allowanceTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Adds as taxBasisTotalAmount
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $taxBasisTotalAmount
+     */
+    public function addToTaxBasisTotalAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $taxBasisTotalAmount)
+    {
+        $this->taxBasisTotalAmount[] = $taxBasisTotalAmount;
+        return $this;
+    }
+
+    /**
+     * isset taxBasisTotalAmount
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetTaxBasisTotalAmount($index)
+    {
+        return isset($this->taxBasisTotalAmount[$index]);
+    }
+
+    /**
+     * unset taxBasisTotalAmount
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetTaxBasisTotalAmount($index)
+    {
+        unset($this->taxBasisTotalAmount[$index]);
+    }
+
+    /**
+     * Gets as taxBasisTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType[]
+     */
+    public function getTaxBasisTotalAmount()
+    {
+        return $this->taxBasisTotalAmount;
+    }
+
+    /**
+     * Sets a new taxBasisTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType[] $taxBasisTotalAmount
+     * @return self
+     */
+    public function setTaxBasisTotalAmount(array $taxBasisTotalAmount)
+    {
+        $this->taxBasisTotalAmount = $taxBasisTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Adds as taxTotalAmount
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $taxTotalAmount
+     */
+    public function addToTaxTotalAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $taxTotalAmount)
+    {
+        $this->taxTotalAmount[] = $taxTotalAmount;
+        return $this;
+    }
+
+    /**
+     * isset taxTotalAmount
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetTaxTotalAmount($index)
+    {
+        return isset($this->taxTotalAmount[$index]);
+    }
+
+    /**
+     * unset taxTotalAmount
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetTaxTotalAmount($index)
+    {
+        unset($this->taxTotalAmount[$index]);
+    }
+
+    /**
+     * Gets as taxTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType[]
+     */
+    public function getTaxTotalAmount()
+    {
+        return $this->taxTotalAmount;
+    }
+
+    /**
+     * Sets a new taxTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType[] $taxTotalAmount
+     * @return self
+     */
+    public function setTaxTotalAmount(array $taxTotalAmount)
+    {
+        $this->taxTotalAmount = $taxTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as roundingAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getRoundingAmount()
+    {
+        return $this->roundingAmount;
+    }
+
+    /**
+     * Sets a new roundingAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $roundingAmount
+     * @return self
+     */
+    public function setRoundingAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $roundingAmount)
+    {
+        $this->roundingAmount = $roundingAmount;
+        return $this;
+    }
+
+    /**
+     * Adds as grandTotalAmount
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $grandTotalAmount
+     */
+    public function addToGrandTotalAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $grandTotalAmount)
+    {
+        $this->grandTotalAmount[] = $grandTotalAmount;
+        return $this;
+    }
+
+    /**
+     * isset grandTotalAmount
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetGrandTotalAmount($index)
+    {
+        return isset($this->grandTotalAmount[$index]);
+    }
+
+    /**
+     * unset grandTotalAmount
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetGrandTotalAmount($index)
+    {
+        unset($this->grandTotalAmount[$index]);
+    }
+
+    /**
+     * Gets as grandTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType[]
+     */
+    public function getGrandTotalAmount()
+    {
+        return $this->grandTotalAmount;
+    }
+
+    /**
+     * Sets a new grandTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType[] $grandTotalAmount
+     * @return self
+     */
+    public function setGrandTotalAmount(array $grandTotalAmount)
+    {
+        $this->grandTotalAmount = $grandTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as totalPrepaidAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getTotalPrepaidAmount()
+    {
+        return $this->totalPrepaidAmount;
+    }
+
+    /**
+     * Sets a new totalPrepaidAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $totalPrepaidAmount
+     * @return self
+     */
+    public function setTotalPrepaidAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $totalPrepaidAmount)
+    {
+        $this->totalPrepaidAmount = $totalPrepaidAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as duePayableAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getDuePayableAmount()
+    {
+        return $this->duePayableAmount;
+    }
+
+    /**
+     * Sets a new duePayableAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $duePayableAmount
+     * @return self
+     */
+    public function setDuePayableAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $duePayableAmount)
+    {
+        $this->duePayableAmount = $duePayableAmount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementLineMonetarySummationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementLineMonetarySummationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementLineMonetarySummationType.php	(revision 8435)
@@ -0,0 +1,174 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeSettlementLineMonetarySummationType
+ *
+ * XSD Type: TradeSettlementLineMonetarySummationType
+ */
+class TradeSettlementLineMonetarySummationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $lineTotalAmount
+     */
+    private $lineTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $chargeTotalAmount
+     */
+    private $chargeTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $allowanceTotalAmount
+     */
+    private $allowanceTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $taxTotalAmount
+     */
+    private $taxTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $grandTotalAmount
+     */
+    private $grandTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $totalAllowanceChargeAmount
+     */
+    private $totalAllowanceChargeAmount = null;
+
+    /**
+     * Gets as lineTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getLineTotalAmount()
+    {
+        return $this->lineTotalAmount;
+    }
+
+    /**
+     * Sets a new lineTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $lineTotalAmount
+     * @return self
+     */
+    public function setLineTotalAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $lineTotalAmount)
+    {
+        $this->lineTotalAmount = $lineTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as chargeTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getChargeTotalAmount()
+    {
+        return $this->chargeTotalAmount;
+    }
+
+    /**
+     * Sets a new chargeTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $chargeTotalAmount
+     * @return self
+     */
+    public function setChargeTotalAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $chargeTotalAmount)
+    {
+        $this->chargeTotalAmount = $chargeTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as allowanceTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getAllowanceTotalAmount()
+    {
+        return $this->allowanceTotalAmount;
+    }
+
+    /**
+     * Sets a new allowanceTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $allowanceTotalAmount
+     * @return self
+     */
+    public function setAllowanceTotalAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $allowanceTotalAmount)
+    {
+        $this->allowanceTotalAmount = $allowanceTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as taxTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getTaxTotalAmount()
+    {
+        return $this->taxTotalAmount;
+    }
+
+    /**
+     * Sets a new taxTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $taxTotalAmount
+     * @return self
+     */
+    public function setTaxTotalAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $taxTotalAmount)
+    {
+        $this->taxTotalAmount = $taxTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as grandTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getGrandTotalAmount()
+    {
+        return $this->grandTotalAmount;
+    }
+
+    /**
+     * Sets a new grandTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $grandTotalAmount
+     * @return self
+     */
+    public function setGrandTotalAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $grandTotalAmount)
+    {
+        $this->grandTotalAmount = $grandTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as totalAllowanceChargeAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getTotalAllowanceChargeAmount()
+    {
+        return $this->totalAllowanceChargeAmount;
+    }
+
+    /**
+     * Sets a new totalAllowanceChargeAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $totalAllowanceChargeAmount
+     * @return self
+     */
+    public function setTotalAllowanceChargeAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $totalAllowanceChargeAmount)
+    {
+        $this->totalAllowanceChargeAmount = $totalAllowanceChargeAmount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementPaymentMeansType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementPaymentMeansType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeSettlementPaymentMeansType.php	(revision 8435)
@@ -0,0 +1,174 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeSettlementPaymentMeansType
+ *
+ * XSD Type: TradeSettlementPaymentMeansType
+ */
+class TradeSettlementPaymentMeansType
+{
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var string $information
+     */
+    private $information = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\TradeSettlementFinancialCardType $applicableTradeSettlementFinancialCard
+     */
+    private $applicableTradeSettlementFinancialCard = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\DebtorFinancialAccountType $payerPartyDebtorFinancialAccount
+     */
+    private $payerPartyDebtorFinancialAccount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\CreditorFinancialAccountType $payeePartyCreditorFinancialAccount
+     */
+    private $payeePartyCreditorFinancialAccount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\CreditorFinancialInstitutionType $payeeSpecifiedCreditorFinancialInstitution
+     */
+    private $payeeSpecifiedCreditorFinancialInstitution = null;
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as information
+     *
+     * @return string
+     */
+    public function getInformation()
+    {
+        return $this->information;
+    }
+
+    /**
+     * Sets a new information
+     *
+     * @param  string $information
+     * @return self
+     */
+    public function setInformation($information)
+    {
+        $this->information = $information;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableTradeSettlementFinancialCard
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\TradeSettlementFinancialCardType
+     */
+    public function getApplicableTradeSettlementFinancialCard()
+    {
+        return $this->applicableTradeSettlementFinancialCard;
+    }
+
+    /**
+     * Sets a new applicableTradeSettlementFinancialCard
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\TradeSettlementFinancialCardType $applicableTradeSettlementFinancialCard
+     * @return self
+     */
+    public function setApplicableTradeSettlementFinancialCard(\horstoeko\zugferd\entities\extended\ram\TradeSettlementFinancialCardType $applicableTradeSettlementFinancialCard)
+    {
+        $this->applicableTradeSettlementFinancialCard = $applicableTradeSettlementFinancialCard;
+        return $this;
+    }
+
+    /**
+     * Gets as payerPartyDebtorFinancialAccount
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\DebtorFinancialAccountType
+     */
+    public function getPayerPartyDebtorFinancialAccount()
+    {
+        return $this->payerPartyDebtorFinancialAccount;
+    }
+
+    /**
+     * Sets a new payerPartyDebtorFinancialAccount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\DebtorFinancialAccountType $payerPartyDebtorFinancialAccount
+     * @return self
+     */
+    public function setPayerPartyDebtorFinancialAccount(\horstoeko\zugferd\entities\extended\ram\DebtorFinancialAccountType $payerPartyDebtorFinancialAccount)
+    {
+        $this->payerPartyDebtorFinancialAccount = $payerPartyDebtorFinancialAccount;
+        return $this;
+    }
+
+    /**
+     * Gets as payeePartyCreditorFinancialAccount
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\CreditorFinancialAccountType
+     */
+    public function getPayeePartyCreditorFinancialAccount()
+    {
+        return $this->payeePartyCreditorFinancialAccount;
+    }
+
+    /**
+     * Sets a new payeePartyCreditorFinancialAccount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\CreditorFinancialAccountType $payeePartyCreditorFinancialAccount
+     * @return self
+     */
+    public function setPayeePartyCreditorFinancialAccount(\horstoeko\zugferd\entities\extended\ram\CreditorFinancialAccountType $payeePartyCreditorFinancialAccount)
+    {
+        $this->payeePartyCreditorFinancialAccount = $payeePartyCreditorFinancialAccount;
+        return $this;
+    }
+
+    /**
+     * Gets as payeeSpecifiedCreditorFinancialInstitution
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\CreditorFinancialInstitutionType
+     */
+    public function getPayeeSpecifiedCreditorFinancialInstitution()
+    {
+        return $this->payeeSpecifiedCreditorFinancialInstitution;
+    }
+
+    /**
+     * Sets a new payeeSpecifiedCreditorFinancialInstitution
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\CreditorFinancialInstitutionType $payeeSpecifiedCreditorFinancialInstitution
+     * @return self
+     */
+    public function setPayeeSpecifiedCreditorFinancialInstitution(\horstoeko\zugferd\entities\extended\ram\CreditorFinancialInstitutionType $payeeSpecifiedCreditorFinancialInstitution)
+    {
+        $this->payeeSpecifiedCreditorFinancialInstitution = $payeeSpecifiedCreditorFinancialInstitution;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeTaxType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeTaxType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/TradeTaxType.php	(revision 8435)
@@ -0,0 +1,309 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing TradeTaxType
+ *
+ * XSD Type: TradeTaxType
+ */
+class TradeTaxType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $calculatedAmount
+     */
+    private $calculatedAmount = null;
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var string $exemptionReason
+     */
+    private $exemptionReason = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $basisAmount
+     */
+    private $basisAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $lineTotalBasisAmount
+     */
+    private $lineTotalBasisAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\AmountType $allowanceChargeBasisAmount
+     */
+    private $allowanceChargeBasisAmount = null;
+
+    /**
+     * @var string $categoryCode
+     */
+    private $categoryCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\CodeType $exemptionReasonCode
+     */
+    private $exemptionReasonCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\DateType $taxPointDate
+     */
+    private $taxPointDate = null;
+
+    /**
+     * @var string $dueDateTypeCode
+     */
+    private $dueDateTypeCode = null;
+
+    /**
+     * @var float $rateApplicablePercent
+     */
+    private $rateApplicablePercent = null;
+
+    /**
+     * Gets as calculatedAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getCalculatedAmount()
+    {
+        return $this->calculatedAmount;
+    }
+
+    /**
+     * Sets a new calculatedAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $calculatedAmount
+     * @return self
+     */
+    public function setCalculatedAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $calculatedAmount)
+    {
+        $this->calculatedAmount = $calculatedAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as exemptionReason
+     *
+     * @return string
+     */
+    public function getExemptionReason()
+    {
+        return $this->exemptionReason;
+    }
+
+    /**
+     * Sets a new exemptionReason
+     *
+     * @param  string $exemptionReason
+     * @return self
+     */
+    public function setExemptionReason($exemptionReason)
+    {
+        $this->exemptionReason = $exemptionReason;
+        return $this;
+    }
+
+    /**
+     * Gets as basisAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getBasisAmount()
+    {
+        return $this->basisAmount;
+    }
+
+    /**
+     * Sets a new basisAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $basisAmount
+     * @return self
+     */
+    public function setBasisAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $basisAmount)
+    {
+        $this->basisAmount = $basisAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as lineTotalBasisAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getLineTotalBasisAmount()
+    {
+        return $this->lineTotalBasisAmount;
+    }
+
+    /**
+     * Sets a new lineTotalBasisAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $lineTotalBasisAmount
+     * @return self
+     */
+    public function setLineTotalBasisAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $lineTotalBasisAmount)
+    {
+        $this->lineTotalBasisAmount = $lineTotalBasisAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as allowanceChargeBasisAmount
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\AmountType
+     */
+    public function getAllowanceChargeBasisAmount()
+    {
+        return $this->allowanceChargeBasisAmount;
+    }
+
+    /**
+     * Sets a new allowanceChargeBasisAmount
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\AmountType $allowanceChargeBasisAmount
+     * @return self
+     */
+    public function setAllowanceChargeBasisAmount(\horstoeko\zugferd\entities\extended\udt\AmountType $allowanceChargeBasisAmount)
+    {
+        $this->allowanceChargeBasisAmount = $allowanceChargeBasisAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as categoryCode
+     *
+     * @return string
+     */
+    public function getCategoryCode()
+    {
+        return $this->categoryCode;
+    }
+
+    /**
+     * Sets a new categoryCode
+     *
+     * @param  string $categoryCode
+     * @return self
+     */
+    public function setCategoryCode($categoryCode)
+    {
+        $this->categoryCode = $categoryCode;
+        return $this;
+    }
+
+    /**
+     * Gets as exemptionReasonCode
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\CodeType
+     */
+    public function getExemptionReasonCode()
+    {
+        return $this->exemptionReasonCode;
+    }
+
+    /**
+     * Sets a new exemptionReasonCode
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\CodeType $exemptionReasonCode
+     * @return self
+     */
+    public function setExemptionReasonCode(\horstoeko\zugferd\entities\extended\udt\CodeType $exemptionReasonCode)
+    {
+        $this->exemptionReasonCode = $exemptionReasonCode;
+        return $this;
+    }
+
+    /**
+     * Gets as taxPointDate
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\DateType
+     */
+    public function getTaxPointDate()
+    {
+        return $this->taxPointDate;
+    }
+
+    /**
+     * Sets a new taxPointDate
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\DateType $taxPointDate
+     * @return self
+     */
+    public function setTaxPointDate(\horstoeko\zugferd\entities\extended\udt\DateType $taxPointDate)
+    {
+        $this->taxPointDate = $taxPointDate;
+        return $this;
+    }
+
+    /**
+     * Gets as dueDateTypeCode
+     *
+     * @return string
+     */
+    public function getDueDateTypeCode()
+    {
+        return $this->dueDateTypeCode;
+    }
+
+    /**
+     * Sets a new dueDateTypeCode
+     *
+     * @param  string $dueDateTypeCode
+     * @return self
+     */
+    public function setDueDateTypeCode($dueDateTypeCode)
+    {
+        $this->dueDateTypeCode = $dueDateTypeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as rateApplicablePercent
+     *
+     * @return float
+     */
+    public function getRateApplicablePercent()
+    {
+        return $this->rateApplicablePercent;
+    }
+
+    /**
+     * Sets a new rateApplicablePercent
+     *
+     * @param  float $rateApplicablePercent
+     * @return self
+     */
+    public function setRateApplicablePercent($rateApplicablePercent)
+    {
+        $this->rateApplicablePercent = $rateApplicablePercent;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/UniversalCommunicationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/UniversalCommunicationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/ram/UniversalCommunicationType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\ram;
+
+/**
+ * Class representing UniversalCommunicationType
+ *
+ * XSD Type: UniversalCommunicationType
+ */
+class UniversalCommunicationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\IDType $uRIID
+     */
+    private $uRIID = null;
+
+    /**
+     * @var string $completeNumber
+     */
+    private $completeNumber = null;
+
+    /**
+     * Gets as uRIID
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\IDType
+     */
+    public function getURIID()
+    {
+        return $this->uRIID;
+    }
+
+    /**
+     * Sets a new uRIID
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\IDType $uRIID
+     * @return self
+     */
+    public function setURIID(\horstoeko\zugferd\entities\extended\udt\IDType $uRIID)
+    {
+        $this->uRIID = $uRIID;
+        return $this;
+    }
+
+    /**
+     * Gets as completeNumber
+     *
+     * @return string
+     */
+    public function getCompleteNumber()
+    {
+        return $this->completeNumber;
+    }
+
+    /**
+     * Sets a new completeNumber
+     *
+     * @param  string $completeNumber
+     * @return self
+     */
+    public function setCompleteNumber($completeNumber)
+    {
+        $this->completeNumber = $completeNumber;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/rsm/CrossIndustryInvoice.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/rsm/CrossIndustryInvoice.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/rsm/CrossIndustryInvoice.php	(revision 8435)
@@ -0,0 +1,12 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\rsm;
+
+/**
+ * Class representing CrossIndustryInvoice
+ */
+class CrossIndustryInvoice extends CrossIndustryInvoiceType
+{
+
+
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/rsm/CrossIndustryInvoiceType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/rsm/CrossIndustryInvoiceType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/rsm/CrossIndustryInvoiceType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\rsm;
+
+/**
+ * Class representing CrossIndustryInvoiceType
+ *
+ * XSD Type: CrossIndustryInvoiceType
+ */
+class CrossIndustryInvoiceType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ExchangedDocumentContextType $exchangedDocumentContext
+     */
+    private $exchangedDocumentContext = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\ExchangedDocumentType $exchangedDocument
+     */
+    private $exchangedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction
+     */
+    private $supplyChainTradeTransaction = null;
+
+    /**
+     * Gets as exchangedDocumentContext
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ExchangedDocumentContextType
+     */
+    public function getExchangedDocumentContext()
+    {
+        return $this->exchangedDocumentContext;
+    }
+
+    /**
+     * Sets a new exchangedDocumentContext
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ExchangedDocumentContextType $exchangedDocumentContext
+     * @return self
+     */
+    public function setExchangedDocumentContext(\horstoeko\zugferd\entities\extended\ram\ExchangedDocumentContextType $exchangedDocumentContext)
+    {
+        $this->exchangedDocumentContext = $exchangedDocumentContext;
+        return $this;
+    }
+
+    /**
+     * Gets as exchangedDocument
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\ExchangedDocumentType
+     */
+    public function getExchangedDocument()
+    {
+        return $this->exchangedDocument;
+    }
+
+    /**
+     * Sets a new exchangedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\ExchangedDocumentType $exchangedDocument
+     * @return self
+     */
+    public function setExchangedDocument(\horstoeko\zugferd\entities\extended\ram\ExchangedDocumentType $exchangedDocument)
+    {
+        $this->exchangedDocument = $exchangedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as supplyChainTradeTransaction
+     *
+     * @return \horstoeko\zugferd\entities\extended\ram\SupplyChainTradeTransactionType
+     */
+    public function getSupplyChainTradeTransaction()
+    {
+        return $this->supplyChainTradeTransaction;
+    }
+
+    /**
+     * Sets a new supplyChainTradeTransaction
+     *
+     * @param  \horstoeko\zugferd\entities\extended\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction
+     * @return self
+     */
+    public function setSupplyChainTradeTransaction(\horstoeko\zugferd\entities\extended\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction)
+    {
+        $this->supplyChainTradeTransaction = $supplyChainTradeTransaction;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/AmountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/AmountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/AmountType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt;
+
+/**
+ * Class representing AmountType
+ *
+ * XSD Type: AmountType
+ */
+class AmountType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $currencyID
+     */
+    private $currencyID = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as currencyID
+     *
+     * @return string
+     */
+    public function getCurrencyID()
+    {
+        return $this->currencyID;
+    }
+
+    /**
+     * Sets a new currencyID
+     *
+     * @param  string $currencyID
+     * @return self
+     */
+    public function setCurrencyID($currencyID)
+    {
+        $this->currencyID = $currencyID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/BinaryObjectType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/BinaryObjectType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/BinaryObjectType.php	(revision 8435)
@@ -0,0 +1,105 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt;
+
+/**
+ * Class representing BinaryObjectType
+ *
+ * XSD Type: BinaryObjectType
+ */
+class BinaryObjectType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $mimeCode
+     */
+    private $mimeCode = null;
+
+    /**
+     * @var string $filename
+     */
+    private $filename = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as mimeCode
+     *
+     * @return string
+     */
+    public function getMimeCode()
+    {
+        return $this->mimeCode;
+    }
+
+    /**
+     * Sets a new mimeCode
+     *
+     * @param  string $mimeCode
+     * @return self
+     */
+    public function setMimeCode($mimeCode)
+    {
+        $this->mimeCode = $mimeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as filename
+     *
+     * @return string
+     */
+    public function getFilename()
+    {
+        return $this->filename;
+    }
+
+    /**
+     * Sets a new filename
+     *
+     * @param  string $filename
+     * @return self
+     */
+    public function setFilename($filename)
+    {
+        $this->filename = $filename;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/CodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/CodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/CodeType.php	(revision 8435)
@@ -0,0 +1,105 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt;
+
+/**
+ * Class representing CodeType
+ *
+ * XSD Type: CodeType
+ */
+class CodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $listID
+     */
+    private $listID = null;
+
+    /**
+     * @var string $listVersionID
+     */
+    private $listVersionID = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as listID
+     *
+     * @return string
+     */
+    public function getListID()
+    {
+        return $this->listID;
+    }
+
+    /**
+     * Sets a new listID
+     *
+     * @param  string $listID
+     * @return self
+     */
+    public function setListID($listID)
+    {
+        $this->listID = $listID;
+        return $this;
+    }
+
+    /**
+     * Gets as listVersionID
+     *
+     * @return string
+     */
+    public function getListVersionID()
+    {
+        return $this->listVersionID;
+    }
+
+    /**
+     * Sets a new listVersionID
+     *
+     * @param  string $listVersionID
+     * @return self
+     */
+    public function setListVersionID($listVersionID)
+    {
+        $this->listVersionID = $listVersionID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt;
+
+/**
+ * Class representing DateTimeType
+ *
+ * XSD Type: DateTimeType
+ */
+class DateTimeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\DateTimeType\DateTimeStringAType $dateTimeString
+     */
+    private $dateTimeString = null;
+
+    /**
+     * Gets as dateTimeString
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\DateTimeType\DateTimeStringAType
+     */
+    public function getDateTimeString()
+    {
+        return $this->dateTimeString;
+    }
+
+    /**
+     * Sets a new dateTimeString
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\DateTimeType\DateTimeStringAType $dateTimeString
+     * @return self
+     */
+    public function setDateTimeString(\horstoeko\zugferd\entities\extended\udt\DateTimeType\DateTimeStringAType $dateTimeString)
+    {
+        $this->dateTimeString = $dateTimeString;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType/DateTimeStringAType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType/DateTimeStringAType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/DateTimeType/DateTimeStringAType.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt\DateTimeType;
+
+/**
+ * Class representing DateTimeStringAType
+ */
+class DateTimeStringAType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $format
+     */
+    private $format = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as format
+     *
+     * @return string
+     */
+    public function getFormat()
+    {
+        return $this->format;
+    }
+
+    /**
+     * Sets a new format
+     *
+     * @param  string $format
+     * @return self
+     */
+    public function setFormat($format)
+    {
+        $this->format = $format;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/DateType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/DateType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/DateType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt;
+
+/**
+ * Class representing DateType
+ *
+ * XSD Type: DateType
+ */
+class DateType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\extended\udt\DateType\DateStringAType $dateString
+     */
+    private $dateString = null;
+
+    /**
+     * Gets as dateString
+     *
+     * @return \horstoeko\zugferd\entities\extended\udt\DateType\DateStringAType
+     */
+    public function getDateString()
+    {
+        return $this->dateString;
+    }
+
+    /**
+     * Sets a new dateString
+     *
+     * @param  \horstoeko\zugferd\entities\extended\udt\DateType\DateStringAType $dateString
+     * @return self
+     */
+    public function setDateString(\horstoeko\zugferd\entities\extended\udt\DateType\DateStringAType $dateString)
+    {
+        $this->dateString = $dateString;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/DateType/DateStringAType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/DateType/DateStringAType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/DateType/DateStringAType.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt\DateType;
+
+/**
+ * Class representing DateStringAType
+ */
+class DateStringAType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $format
+     */
+    private $format = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as format
+     *
+     * @return string
+     */
+    public function getFormat()
+    {
+        return $this->format;
+    }
+
+    /**
+     * Sets a new format
+     *
+     * @param  string $format
+     * @return self
+     */
+    public function setFormat($format)
+    {
+        $this->format = $format;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/IDType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/IDType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/IDType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt;
+
+/**
+ * Class representing IDType
+ *
+ * XSD Type: IDType
+ */
+class IDType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $schemeID
+     */
+    private $schemeID = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as schemeID
+     *
+     * @return string
+     */
+    public function getSchemeID()
+    {
+        return $this->schemeID;
+    }
+
+    /**
+     * Sets a new schemeID
+     *
+     * @param  string $schemeID
+     * @return self
+     */
+    public function setSchemeID($schemeID)
+    {
+        $this->schemeID = $schemeID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/IndicatorType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/IndicatorType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/IndicatorType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt;
+
+/**
+ * Class representing IndicatorType
+ *
+ * XSD Type: IndicatorType
+ */
+class IndicatorType
+{
+
+    /**
+     * @var bool $indicator
+     */
+    private $indicator = null;
+
+    /**
+     * Gets as indicator
+     *
+     * @return bool
+     */
+    public function getIndicator()
+    {
+        return $this->indicator;
+    }
+
+    /**
+     * Sets a new indicator
+     *
+     * @param  bool $indicator
+     * @return self
+     */
+    public function setIndicator($indicator)
+    {
+        $this->indicator = $indicator;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/MeasureType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/MeasureType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/MeasureType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt;
+
+/**
+ * Class representing MeasureType
+ *
+ * XSD Type: MeasureType
+ */
+class MeasureType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $unitCode
+     */
+    private $unitCode = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as unitCode
+     *
+     * @return string
+     */
+    public function getUnitCode()
+    {
+        return $this->unitCode;
+    }
+
+    /**
+     * Sets a new unitCode
+     *
+     * @param  string $unitCode
+     * @return self
+     */
+    public function setUnitCode($unitCode)
+    {
+        $this->unitCode = $unitCode;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/NumericType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/NumericType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/NumericType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt;
+
+/**
+ * Class representing NumericType
+ *
+ * XSD Type: NumericType
+ */
+class NumericType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/PercentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/PercentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/PercentType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt;
+
+/**
+ * Class representing PercentType
+ *
+ * XSD Type: PercentType
+ */
+class PercentType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/QuantityType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/QuantityType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/QuantityType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt;
+
+/**
+ * Class representing QuantityType
+ *
+ * XSD Type: QuantityType
+ */
+class QuantityType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $unitCode
+     */
+    private $unitCode = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as unitCode
+     *
+     * @return string
+     */
+    public function getUnitCode()
+    {
+        return $this->unitCode;
+    }
+
+    /**
+     * Sets a new unitCode
+     *
+     * @param  string $unitCode
+     * @return self
+     */
+    public function setUnitCode($unitCode)
+    {
+        $this->unitCode = $unitCode;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/RateType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/RateType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/RateType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt;
+
+/**
+ * Class representing RateType
+ *
+ * XSD Type: RateType
+ */
+class RateType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/TextType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/TextType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/extended/udt/TextType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\extended\udt;
+
+/**
+ * Class representing TextType
+ *
+ * XSD Type: TextType
+ */
+class TextType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/qdt/CountryIDType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/qdt/CountryIDType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/qdt/CountryIDType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\qdt;
+
+/**
+ * Class representing CountryIDType
+ *
+ * XSD Type: CountryIDType
+ */
+class CountryIDType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/qdt/CurrencyCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/qdt/CurrencyCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/qdt/CurrencyCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\qdt;
+
+/**
+ * Class representing CurrencyCodeType
+ *
+ * XSD Type: CurrencyCodeType
+ */
+class CurrencyCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/qdt/DocumentCodeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/qdt/DocumentCodeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/qdt/DocumentCodeType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\qdt;
+
+/**
+ * Class representing DocumentCodeType
+ *
+ * XSD Type: DocumentCodeType
+ */
+class DocumentCodeType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/DocumentContextParameterType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/DocumentContextParameterType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/DocumentContextParameterType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\ram;
+
+/**
+ * Class representing DocumentContextParameterType
+ *
+ * XSD Type: DocumentContextParameterType
+ */
+class DocumentContextParameterType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\minimum\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\minimum\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentContextType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentContextType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentContextType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\ram;
+
+/**
+ * Class representing ExchangedDocumentContextType
+ *
+ * XSD Type: ExchangedDocumentContextType
+ */
+class ExchangedDocumentContextType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter
+     */
+    private $businessProcessSpecifiedDocumentContextParameter = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter
+     */
+    private $guidelineSpecifiedDocumentContextParameter = null;
+
+    /**
+     * Gets as businessProcessSpecifiedDocumentContextParameter
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\DocumentContextParameterType
+     */
+    public function getBusinessProcessSpecifiedDocumentContextParameter()
+    {
+        return $this->businessProcessSpecifiedDocumentContextParameter;
+    }
+
+    /**
+     * Sets a new businessProcessSpecifiedDocumentContextParameter
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter
+     * @return self
+     */
+    public function setBusinessProcessSpecifiedDocumentContextParameter(?\horstoeko\zugferd\entities\minimum\ram\DocumentContextParameterType $businessProcessSpecifiedDocumentContextParameter = null)
+    {
+        $this->businessProcessSpecifiedDocumentContextParameter = $businessProcessSpecifiedDocumentContextParameter;
+        return $this;
+    }
+
+    /**
+     * Gets as guidelineSpecifiedDocumentContextParameter
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\DocumentContextParameterType
+     */
+    public function getGuidelineSpecifiedDocumentContextParameter()
+    {
+        return $this->guidelineSpecifiedDocumentContextParameter;
+    }
+
+    /**
+     * Sets a new guidelineSpecifiedDocumentContextParameter
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter
+     * @return self
+     */
+    public function setGuidelineSpecifiedDocumentContextParameter(\horstoeko\zugferd\entities\minimum\ram\DocumentContextParameterType $guidelineSpecifiedDocumentContextParameter)
+    {
+        $this->guidelineSpecifiedDocumentContextParameter = $guidelineSpecifiedDocumentContextParameter;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/ExchangedDocumentType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\ram;
+
+/**
+ * Class representing ExchangedDocumentType
+ *
+ * XSD Type: ExchangedDocumentType
+ */
+class ExchangedDocumentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * @var string $typeCode
+     */
+    private $typeCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\udt\DateTimeType $issueDateTime
+     */
+    private $issueDateTime = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\minimum\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\minimum\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+
+    /**
+     * Gets as typeCode
+     *
+     * @return string
+     */
+    public function getTypeCode()
+    {
+        return $this->typeCode;
+    }
+
+    /**
+     * Sets a new typeCode
+     *
+     * @param  string $typeCode
+     * @return self
+     */
+    public function setTypeCode($typeCode)
+    {
+        $this->typeCode = $typeCode;
+        return $this;
+    }
+
+    /**
+     * Gets as issueDateTime
+     *
+     * @return \horstoeko\zugferd\entities\minimum\udt\DateTimeType
+     */
+    public function getIssueDateTime()
+    {
+        return $this->issueDateTime;
+    }
+
+    /**
+     * Sets a new issueDateTime
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\udt\DateTimeType $issueDateTime
+     * @return self
+     */
+    public function setIssueDateTime(\horstoeko\zugferd\entities\minimum\udt\DateTimeType $issueDateTime)
+    {
+        $this->issueDateTime = $issueDateTime;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeAgreementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeAgreementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeAgreementType.php	(revision 8435)
@@ -0,0 +1,120 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\ram;
+
+/**
+ * Class representing HeaderTradeAgreementType
+ *
+ * XSD Type: HeaderTradeAgreementType
+ */
+class HeaderTradeAgreementType
+{
+
+    /**
+     * @var string $buyerReference
+     */
+    private $buyerReference = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\TradePartyType $sellerTradeParty
+     */
+    private $sellerTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\TradePartyType $buyerTradeParty
+     */
+    private $buyerTradeParty = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     */
+    private $buyerOrderReferencedDocument = null;
+
+    /**
+     * Gets as buyerReference
+     *
+     * @return string
+     */
+    public function getBuyerReference()
+    {
+        return $this->buyerReference;
+    }
+
+    /**
+     * Sets a new buyerReference
+     *
+     * @param  string $buyerReference
+     * @return self
+     */
+    public function setBuyerReference($buyerReference)
+    {
+        $this->buyerReference = $buyerReference;
+        return $this;
+    }
+
+    /**
+     * Gets as sellerTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\TradePartyType
+     */
+    public function getSellerTradeParty()
+    {
+        return $this->sellerTradeParty;
+    }
+
+    /**
+     * Sets a new sellerTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\TradePartyType $sellerTradeParty
+     * @return self
+     */
+    public function setSellerTradeParty(\horstoeko\zugferd\entities\minimum\ram\TradePartyType $sellerTradeParty)
+    {
+        $this->sellerTradeParty = $sellerTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerTradeParty
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\TradePartyType
+     */
+    public function getBuyerTradeParty()
+    {
+        return $this->buyerTradeParty;
+    }
+
+    /**
+     * Sets a new buyerTradeParty
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\TradePartyType $buyerTradeParty
+     * @return self
+     */
+    public function setBuyerTradeParty(\horstoeko\zugferd\entities\minimum\ram\TradePartyType $buyerTradeParty)
+    {
+        $this->buyerTradeParty = $buyerTradeParty;
+        return $this;
+    }
+
+    /**
+     * Gets as buyerOrderReferencedDocument
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\ReferencedDocumentType
+     */
+    public function getBuyerOrderReferencedDocument()
+    {
+        return $this->buyerOrderReferencedDocument;
+    }
+
+    /**
+     * Sets a new buyerOrderReferencedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\ReferencedDocumentType $buyerOrderReferencedDocument
+     * @return self
+     */
+    public function setBuyerOrderReferencedDocument(?\horstoeko\zugferd\entities\minimum\ram\ReferencedDocumentType $buyerOrderReferencedDocument = null)
+    {
+        $this->buyerOrderReferencedDocument = $buyerOrderReferencedDocument;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeDeliveryType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeDeliveryType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeDeliveryType.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\ram;
+
+/**
+ * Class representing HeaderTradeDeliveryType
+ *
+ * XSD Type: HeaderTradeDeliveryType
+ */
+class HeaderTradeDeliveryType
+{
+
+
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeSettlementType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeSettlementType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/HeaderTradeSettlementType.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\ram;
+
+/**
+ * Class representing HeaderTradeSettlementType
+ *
+ * XSD Type: HeaderTradeSettlementType
+ */
+class HeaderTradeSettlementType
+{
+
+    /**
+     * @var string $invoiceCurrencyCode
+     */
+    private $invoiceCurrencyCode = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation
+     */
+    private $specifiedTradeSettlementHeaderMonetarySummation = null;
+
+    /**
+     * Gets as invoiceCurrencyCode
+     *
+     * @return string
+     */
+    public function getInvoiceCurrencyCode()
+    {
+        return $this->invoiceCurrencyCode;
+    }
+
+    /**
+     * Sets a new invoiceCurrencyCode
+     *
+     * @param  string $invoiceCurrencyCode
+     * @return self
+     */
+    public function setInvoiceCurrencyCode($invoiceCurrencyCode)
+    {
+        $this->invoiceCurrencyCode = $invoiceCurrencyCode;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedTradeSettlementHeaderMonetarySummation
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\TradeSettlementHeaderMonetarySummationType
+     */
+    public function getSpecifiedTradeSettlementHeaderMonetarySummation()
+    {
+        return $this->specifiedTradeSettlementHeaderMonetarySummation;
+    }
+
+    /**
+     * Sets a new specifiedTradeSettlementHeaderMonetarySummation
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation
+     * @return self
+     */
+    public function setSpecifiedTradeSettlementHeaderMonetarySummation(\horstoeko\zugferd\entities\minimum\ram\TradeSettlementHeaderMonetarySummationType $specifiedTradeSettlementHeaderMonetarySummation)
+    {
+        $this->specifiedTradeSettlementHeaderMonetarySummation = $specifiedTradeSettlementHeaderMonetarySummation;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/LegalOrganizationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/LegalOrganizationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/LegalOrganizationType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\ram;
+
+/**
+ * Class representing LegalOrganizationType
+ *
+ * XSD Type: LegalOrganizationType
+ */
+class LegalOrganizationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\minimum\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\udt\IDType $iD
+     * @return self
+     */
+    public function setID(?\horstoeko\zugferd\entities\minimum\udt\IDType $iD = null)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/ReferencedDocumentType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/ReferencedDocumentType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/ReferencedDocumentType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\ram;
+
+/**
+ * Class representing ReferencedDocumentType
+ *
+ * XSD Type: ReferencedDocumentType
+ */
+class ReferencedDocumentType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\udt\IDType $issuerAssignedID
+     */
+    private $issuerAssignedID = null;
+
+    /**
+     * Gets as issuerAssignedID
+     *
+     * @return \horstoeko\zugferd\entities\minimum\udt\IDType
+     */
+    public function getIssuerAssignedID()
+    {
+        return $this->issuerAssignedID;
+    }
+
+    /**
+     * Sets a new issuerAssignedID
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\udt\IDType $issuerAssignedID
+     * @return self
+     */
+    public function setIssuerAssignedID(\horstoeko\zugferd\entities\minimum\udt\IDType $issuerAssignedID)
+    {
+        $this->issuerAssignedID = $issuerAssignedID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/SupplyChainTradeTransactionType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/SupplyChainTradeTransactionType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/SupplyChainTradeTransactionType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\ram;
+
+/**
+ * Class representing SupplyChainTradeTransactionType
+ *
+ * XSD Type: SupplyChainTradeTransactionType
+ */
+class SupplyChainTradeTransactionType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement
+     */
+    private $applicableHeaderTradeAgreement = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery
+     */
+    private $applicableHeaderTradeDelivery = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement
+     */
+    private $applicableHeaderTradeSettlement = null;
+
+    /**
+     * Gets as applicableHeaderTradeAgreement
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\HeaderTradeAgreementType
+     */
+    public function getApplicableHeaderTradeAgreement()
+    {
+        return $this->applicableHeaderTradeAgreement;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeAgreement
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement
+     * @return self
+     */
+    public function setApplicableHeaderTradeAgreement(\horstoeko\zugferd\entities\minimum\ram\HeaderTradeAgreementType $applicableHeaderTradeAgreement)
+    {
+        $this->applicableHeaderTradeAgreement = $applicableHeaderTradeAgreement;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableHeaderTradeDelivery
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\HeaderTradeDeliveryType
+     */
+    public function getApplicableHeaderTradeDelivery()
+    {
+        return $this->applicableHeaderTradeDelivery;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeDelivery
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery
+     * @return self
+     */
+    public function setApplicableHeaderTradeDelivery(\horstoeko\zugferd\entities\minimum\ram\HeaderTradeDeliveryType $applicableHeaderTradeDelivery)
+    {
+        $this->applicableHeaderTradeDelivery = $applicableHeaderTradeDelivery;
+        return $this;
+    }
+
+    /**
+     * Gets as applicableHeaderTradeSettlement
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\HeaderTradeSettlementType
+     */
+    public function getApplicableHeaderTradeSettlement()
+    {
+        return $this->applicableHeaderTradeSettlement;
+    }
+
+    /**
+     * Sets a new applicableHeaderTradeSettlement
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement
+     * @return self
+     */
+    public function setApplicableHeaderTradeSettlement(\horstoeko\zugferd\entities\minimum\ram\HeaderTradeSettlementType $applicableHeaderTradeSettlement)
+    {
+        $this->applicableHeaderTradeSettlement = $applicableHeaderTradeSettlement;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/TaxRegistrationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/TaxRegistrationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/TaxRegistrationType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\ram;
+
+/**
+ * Class representing TaxRegistrationType
+ *
+ * XSD Type: TaxRegistrationType
+ */
+class TaxRegistrationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\udt\IDType $iD
+     */
+    private $iD = null;
+
+    /**
+     * Gets as iD
+     *
+     * @return \horstoeko\zugferd\entities\minimum\udt\IDType
+     */
+    public function getID()
+    {
+        return $this->iD;
+    }
+
+    /**
+     * Sets a new iD
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\udt\IDType $iD
+     * @return self
+     */
+    public function setID(\horstoeko\zugferd\entities\minimum\udt\IDType $iD)
+    {
+        $this->iD = $iD;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeAddressType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeAddressType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeAddressType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\ram;
+
+/**
+ * Class representing TradeAddressType
+ *
+ * XSD Type: TradeAddressType
+ */
+class TradeAddressType
+{
+
+    /**
+     * @var string $countryID
+     */
+    private $countryID = null;
+
+    /**
+     * Gets as countryID
+     *
+     * @return string
+     */
+    public function getCountryID()
+    {
+        return $this->countryID;
+    }
+
+    /**
+     * Sets a new countryID
+     *
+     * @param  string $countryID
+     * @return self
+     */
+    public function setCountryID($countryID)
+    {
+        $this->countryID = $countryID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradePartyType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradePartyType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradePartyType.php	(revision 8435)
@@ -0,0 +1,156 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\ram;
+
+/**
+ * Class representing TradePartyType
+ *
+ * XSD Type: TradePartyType
+ */
+class TradePartyType
+{
+
+    /**
+     * @var string $name
+     */
+    private $name = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\LegalOrganizationType $specifiedLegalOrganization
+     */
+    private $specifiedLegalOrganization = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\TradeAddressType $postalTradeAddress
+     */
+    private $postalTradeAddress = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\TaxRegistrationType[] $specifiedTaxRegistration
+     */
+    private $specifiedTaxRegistration = [
+        
+    ];
+
+    /**
+     * Gets as name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Sets a new name
+     *
+     * @param  string $name
+     * @return self
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+        return $this;
+    }
+
+    /**
+     * Gets as specifiedLegalOrganization
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\LegalOrganizationType
+     */
+    public function getSpecifiedLegalOrganization()
+    {
+        return $this->specifiedLegalOrganization;
+    }
+
+    /**
+     * Sets a new specifiedLegalOrganization
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\LegalOrganizationType $specifiedLegalOrganization
+     * @return self
+     */
+    public function setSpecifiedLegalOrganization(?\horstoeko\zugferd\entities\minimum\ram\LegalOrganizationType $specifiedLegalOrganization = null)
+    {
+        $this->specifiedLegalOrganization = $specifiedLegalOrganization;
+        return $this;
+    }
+
+    /**
+     * Gets as postalTradeAddress
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\TradeAddressType
+     */
+    public function getPostalTradeAddress()
+    {
+        return $this->postalTradeAddress;
+    }
+
+    /**
+     * Sets a new postalTradeAddress
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\TradeAddressType $postalTradeAddress
+     * @return self
+     */
+    public function setPostalTradeAddress(?\horstoeko\zugferd\entities\minimum\ram\TradeAddressType $postalTradeAddress = null)
+    {
+        $this->postalTradeAddress = $postalTradeAddress;
+        return $this;
+    }
+
+    /**
+     * Adds as specifiedTaxRegistration
+     *
+     * @return self
+     * @param  \horstoeko\zugferd\entities\minimum\ram\TaxRegistrationType $specifiedTaxRegistration
+     */
+    public function addToSpecifiedTaxRegistration(\horstoeko\zugferd\entities\minimum\ram\TaxRegistrationType $specifiedTaxRegistration)
+    {
+        $this->specifiedTaxRegistration[] = $specifiedTaxRegistration;
+        return $this;
+    }
+
+    /**
+     * isset specifiedTaxRegistration
+     *
+     * @param  int|string $index
+     * @return bool
+     */
+    public function issetSpecifiedTaxRegistration($index)
+    {
+        return isset($this->specifiedTaxRegistration[$index]);
+    }
+
+    /**
+     * unset specifiedTaxRegistration
+     *
+     * @param  int|string $index
+     * @return void
+     */
+    public function unsetSpecifiedTaxRegistration($index)
+    {
+        unset($this->specifiedTaxRegistration[$index]);
+    }
+
+    /**
+     * Gets as specifiedTaxRegistration
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\TaxRegistrationType[]
+     */
+    public function getSpecifiedTaxRegistration()
+    {
+        return $this->specifiedTaxRegistration;
+    }
+
+    /**
+     * Sets a new specifiedTaxRegistration
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\TaxRegistrationType[] $specifiedTaxRegistration
+     * @return self
+     */
+    public function setSpecifiedTaxRegistration(array $specifiedTaxRegistration = null)
+    {
+        $this->specifiedTaxRegistration = $specifiedTaxRegistration;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeSettlementHeaderMonetarySummationType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeSettlementHeaderMonetarySummationType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/ram/TradeSettlementHeaderMonetarySummationType.php	(revision 8435)
@@ -0,0 +1,120 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\ram;
+
+/**
+ * Class representing TradeSettlementHeaderMonetarySummationType
+ *
+ * XSD Type: TradeSettlementHeaderMonetarySummationType
+ */
+class TradeSettlementHeaderMonetarySummationType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\udt\AmountType $taxBasisTotalAmount
+     */
+    private $taxBasisTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\udt\AmountType $taxTotalAmount
+     */
+    private $taxTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\udt\AmountType $grandTotalAmount
+     */
+    private $grandTotalAmount = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\udt\AmountType $duePayableAmount
+     */
+    private $duePayableAmount = null;
+
+    /**
+     * Gets as taxBasisTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\minimum\udt\AmountType
+     */
+    public function getTaxBasisTotalAmount()
+    {
+        return $this->taxBasisTotalAmount;
+    }
+
+    /**
+     * Sets a new taxBasisTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\udt\AmountType $taxBasisTotalAmount
+     * @return self
+     */
+    public function setTaxBasisTotalAmount(\horstoeko\zugferd\entities\minimum\udt\AmountType $taxBasisTotalAmount)
+    {
+        $this->taxBasisTotalAmount = $taxBasisTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as taxTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\minimum\udt\AmountType
+     */
+    public function getTaxTotalAmount()
+    {
+        return $this->taxTotalAmount;
+    }
+
+    /**
+     * Sets a new taxTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\udt\AmountType $taxTotalAmount
+     * @return self
+     */
+    public function setTaxTotalAmount(?\horstoeko\zugferd\entities\minimum\udt\AmountType $taxTotalAmount = null)
+    {
+        $this->taxTotalAmount = $taxTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as grandTotalAmount
+     *
+     * @return \horstoeko\zugferd\entities\minimum\udt\AmountType
+     */
+    public function getGrandTotalAmount()
+    {
+        return $this->grandTotalAmount;
+    }
+
+    /**
+     * Sets a new grandTotalAmount
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\udt\AmountType $grandTotalAmount
+     * @return self
+     */
+    public function setGrandTotalAmount(\horstoeko\zugferd\entities\minimum\udt\AmountType $grandTotalAmount)
+    {
+        $this->grandTotalAmount = $grandTotalAmount;
+        return $this;
+    }
+
+    /**
+     * Gets as duePayableAmount
+     *
+     * @return \horstoeko\zugferd\entities\minimum\udt\AmountType
+     */
+    public function getDuePayableAmount()
+    {
+        return $this->duePayableAmount;
+    }
+
+    /**
+     * Sets a new duePayableAmount
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\udt\AmountType $duePayableAmount
+     * @return self
+     */
+    public function setDuePayableAmount(\horstoeko\zugferd\entities\minimum\udt\AmountType $duePayableAmount)
+    {
+        $this->duePayableAmount = $duePayableAmount;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/rsm/CrossIndustryInvoice.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/rsm/CrossIndustryInvoice.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/rsm/CrossIndustryInvoice.php	(revision 8435)
@@ -0,0 +1,12 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\rsm;
+
+/**
+ * Class representing CrossIndustryInvoice
+ */
+class CrossIndustryInvoice extends CrossIndustryInvoiceType
+{
+
+
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/rsm/CrossIndustryInvoiceType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/rsm/CrossIndustryInvoiceType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/rsm/CrossIndustryInvoiceType.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\rsm;
+
+/**
+ * Class representing CrossIndustryInvoiceType
+ *
+ * XSD Type: CrossIndustryInvoiceType
+ */
+class CrossIndustryInvoiceType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentContextType $exchangedDocumentContext
+     */
+    private $exchangedDocumentContext = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentType $exchangedDocument
+     */
+    private $exchangedDocument = null;
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction
+     */
+    private $supplyChainTradeTransaction = null;
+
+    /**
+     * Gets as exchangedDocumentContext
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentContextType
+     */
+    public function getExchangedDocumentContext()
+    {
+        return $this->exchangedDocumentContext;
+    }
+
+    /**
+     * Sets a new exchangedDocumentContext
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentContextType $exchangedDocumentContext
+     * @return self
+     */
+    public function setExchangedDocumentContext(\horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentContextType $exchangedDocumentContext)
+    {
+        $this->exchangedDocumentContext = $exchangedDocumentContext;
+        return $this;
+    }
+
+    /**
+     * Gets as exchangedDocument
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentType
+     */
+    public function getExchangedDocument()
+    {
+        return $this->exchangedDocument;
+    }
+
+    /**
+     * Sets a new exchangedDocument
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentType $exchangedDocument
+     * @return self
+     */
+    public function setExchangedDocument(\horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentType $exchangedDocument)
+    {
+        $this->exchangedDocument = $exchangedDocument;
+        return $this;
+    }
+
+    /**
+     * Gets as supplyChainTradeTransaction
+     *
+     * @return \horstoeko\zugferd\entities\minimum\ram\SupplyChainTradeTransactionType
+     */
+    public function getSupplyChainTradeTransaction()
+    {
+        return $this->supplyChainTradeTransaction;
+    }
+
+    /**
+     * Sets a new supplyChainTradeTransaction
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction
+     * @return self
+     */
+    public function setSupplyChainTradeTransaction(\horstoeko\zugferd\entities\minimum\ram\SupplyChainTradeTransactionType $supplyChainTradeTransaction)
+    {
+        $this->supplyChainTradeTransaction = $supplyChainTradeTransaction;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/AmountType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/AmountType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/AmountType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\udt;
+
+/**
+ * Class representing AmountType
+ *
+ * XSD Type: AmountType
+ */
+class AmountType
+{
+
+    /**
+     * @var float $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $currencyID
+     */
+    private $currencyID = null;
+
+    /**
+     * Construct
+     *
+     * @param float $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  float $value
+     * @return float
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as currencyID
+     *
+     * @return string
+     */
+    public function getCurrencyID()
+    {
+        return $this->currencyID;
+    }
+
+    /**
+     * Sets a new currencyID
+     *
+     * @param  string $currencyID
+     * @return self
+     */
+    public function setCurrencyID($currencyID)
+    {
+        $this->currencyID = $currencyID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\udt;
+
+/**
+ * Class representing DateTimeType
+ *
+ * XSD Type: DateTimeType
+ */
+class DateTimeType
+{
+
+    /**
+     * @var \horstoeko\zugferd\entities\minimum\udt\DateTimeType\DateTimeStringAType $dateTimeString
+     */
+    private $dateTimeString = null;
+
+    /**
+     * Gets as dateTimeString
+     *
+     * @return \horstoeko\zugferd\entities\minimum\udt\DateTimeType\DateTimeStringAType
+     */
+    public function getDateTimeString()
+    {
+        return $this->dateTimeString;
+    }
+
+    /**
+     * Sets a new dateTimeString
+     *
+     * @param  \horstoeko\zugferd\entities\minimum\udt\DateTimeType\DateTimeStringAType $dateTimeString
+     * @return self
+     */
+    public function setDateTimeString(?\horstoeko\zugferd\entities\minimum\udt\DateTimeType\DateTimeStringAType $dateTimeString = null)
+    {
+        $this->dateTimeString = $dateTimeString;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType/DateTimeStringAType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType/DateTimeStringAType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/DateTimeType/DateTimeStringAType.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\udt\DateTimeType;
+
+/**
+ * Class representing DateTimeStringAType
+ */
+class DateTimeStringAType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $format
+     */
+    private $format = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as format
+     *
+     * @return string
+     */
+    public function getFormat()
+    {
+        return $this->format;
+    }
+
+    /**
+     * Sets a new format
+     *
+     * @param  string $format
+     * @return self
+     */
+    public function setFormat($format)
+    {
+        $this->format = $format;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/IDType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/IDType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/IDType.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\udt;
+
+/**
+ * Class representing IDType
+ *
+ * XSD Type: IDType
+ */
+class IDType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * @var string $schemeID
+     */
+    private $schemeID = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+
+    /**
+     * Gets as schemeID
+     *
+     * @return string
+     */
+    public function getSchemeID()
+    {
+        return $this->schemeID;
+    }
+
+    /**
+     * Sets a new schemeID
+     *
+     * @param  string $schemeID
+     * @return self
+     */
+    public function setSchemeID($schemeID)
+    {
+        $this->schemeID = $schemeID;
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/TextType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/TextType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/entities/minimum/udt/TextType.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+namespace horstoeko\zugferd\entities\minimum\udt;
+
+/**
+ * Class representing TextType
+ *
+ * XSD Type: TextType
+ */
+class TextType
+{
+
+    /**
+     * @var string $__value
+     */
+    private $__value = null;
+
+    /**
+     * Construct
+     *
+     * @param string $value
+     */
+    public function __construct($value)
+    {
+        $this->value($value);
+    }
+
+    /**
+     * Gets or sets the inner value
+     *
+     * @param  string $value
+     * @return string
+     */
+    public function value()
+    {
+        if ($args = func_get_args()) {
+            $this->__value = $args[0];
+        }
+        return $this->__value;
+    }
+
+    /**
+     * Gets a string value
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return strval($this->__value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdFileNotFoundException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdFileNotFoundException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdFileNotFoundException.php	(revision 8435)
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\exception;
+
+use Exception;
+
+/**
+ * Class representing an exception for missing a file
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdFileNotFoundException extends Exception
+{
+    /**
+     * The context of the type element
+     *
+     * @var string
+     */
+    private $filePath = "";
+
+    /**
+     * Constructor
+     *
+     * @param string $filePath
+     */
+    public function __construct(string $filePath)
+    {
+        $this->filePath = $filePath;
+
+        parent::__construct($this->buildMessage());
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function __toString()
+    {
+        return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
+    }
+
+    /**
+     * Build the message
+     *
+     * @return string
+     */
+    private function buildMessage(): string
+    {
+        return sprintf("The filer %s is missing", $this->filePath);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdFileNotReadableException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdFileNotReadableException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdFileNotReadableException.php	(revision 8435)
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\exception;
+
+use Exception;
+
+/**
+ * Class representing an exception for non-readable a file
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdFileNotReadableException extends Exception
+{
+    /**
+     * The context of the type element
+     *
+     * @var string
+     */
+    private $filePath = "";
+
+    /**
+     * Constructor
+     *
+     * @param string $filePath
+     */
+    public function __construct(string $filePath)
+    {
+        $this->filePath = $filePath;
+
+        parent::__construct($this->buildMessage());
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function __toString()
+    {
+        return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
+    }
+
+    /**
+     * Build the message
+     *
+     * @return string
+     */
+    private function buildMessage(): string
+    {
+        return sprintf("The filer %s is not readable", $this->filePath);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownDateFormatException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownDateFormatException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownDateFormatException.php	(revision 8435)
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\exception;
+
+/**
+ * Class representing an exception for unknown date formates
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdUnknownDateFormatException extends \Exception
+{
+    /**
+     * The context of the type element
+     *
+     * @var string
+     */
+    private $dateFormat = "";
+
+    /**
+     * Constructor
+     *
+     * @param string $dateFormat
+     */
+    public function __construct(string $dateFormat)
+    {
+        $this->dateFormat = $dateFormat;
+
+        parent::__construct($this->buildMessage());
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function __toString()
+    {
+        return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
+    }
+
+    /**
+     * Build the message
+     *
+     * @return string
+     */
+    private function buildMessage(): string
+    {
+        return sprintf("The date format identifier %s is unknown or not supported", $this->dateFormat);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileException.php	(revision 8435)
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\exception;
+
+use Exception;
+
+/**
+ * Class representing an exception for unknown profile
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdUnknownProfileException extends Exception
+{
+    /**
+     * The context of the type element
+     *
+     * @var string
+     */
+    private $contextElement = "";
+
+    /**
+     * Constructor
+     *
+     * @param string $contextElement
+     */
+    public function __construct(string $contextElement)
+    {
+        $this->contextElement = $contextElement;
+
+        parent::__construct($this->buildMessage());
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function __toString()
+    {
+        return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
+    }
+
+    /**
+     * Build the message
+     *
+     * @return string
+     */
+    private function buildMessage(): string
+    {
+        return sprintf("A context parameter was found, but the content of \"%s\" is not a valid profile", $this->contextElement);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileIdException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileIdException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileIdException.php	(revision 8435)
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\exception;
+
+use Exception;
+
+/**
+ * Class representing an exception for unknown profile id
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdUnknownProfileIdException extends Exception
+{
+    /**
+     * The context of the type element
+     *
+     * @var string
+     */
+    private $profileId = 0;
+
+    /**
+     * Constructor
+     *
+     * @param integer $profileId
+     */
+    public function __construct(int $profileId)
+    {
+        $this->profileId = $profileId;
+
+        parent::__construct($this->buildMessage());
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function __toString()
+    {
+        return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
+    }
+
+    /**
+     * Build the message
+     *
+     * @return string
+     */
+    private function buildMessage(): string
+    {
+        return sprintf("The profile id %s is uknown", $this->profileId);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileParameterException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileParameterException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownProfileParameterException.php	(revision 8435)
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\exception;
+
+use Exception;
+
+/**
+ * Class representing an exception for unknown profile parameter
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdUnknownProfileParameterException extends Exception
+{
+    /**
+     * The context of the type element
+     *
+     * @var string
+     */
+    private $profileParameter = "";
+
+    /**
+     * Constructor
+     *
+     * @param string $profileParameter
+     */
+    public function __construct(string $profileParameter)
+    {
+        $this->profileParameter = $profileParameter;
+
+        parent::__construct($this->buildMessage());
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function __toString()
+    {
+        return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
+    }
+
+    /**
+     * Build the message
+     *
+     * @return string
+     */
+    private function buildMessage(): string
+    {
+        return sprintf("The profile parameter %s is uknown", $this->profileParameter);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownXmlContentException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownXmlContentException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/exception/ZugferdUnknownXmlContentException.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\exception;
+
+use Exception;
+use Throwable;
+
+/**
+ * Class representing an exception for unknown profile
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdUnknownXmlContentException extends Exception
+{
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        parent::__construct($this->buildMessage());
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function __toString()
+    {
+        return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
+    }
+
+    /**
+     * Build the message
+     *
+     * @return string
+     */
+    private function buildMessage(): string
+    {
+        return "The XML does not match the requirements for an XML in CII-Syntax";
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/jms/ZugferdTypesHandler.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/jms/ZugferdTypesHandler.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/jms/ZugferdTypesHandler.php	(revision 8435)
@@ -0,0 +1,253 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\jms;
+
+use DOMElement;
+use DOMText;
+use horstoeko\zugferd\ZugferdSettings;
+use JMS\Serializer\Context;
+use JMS\Serializer\GraphNavigator;
+use JMS\Serializer\Handler\SubscribingHandlerInterface;
+use JMS\Serializer\XmlSerializationVisitor;
+
+/**
+ * Class representing a collection of serialization handlers for amount formatting and so on
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdTypesHandler implements SubscribingHandlerInterface
+{
+    /**
+     * Return format:
+     *
+     *      array(
+     *          array(
+     *              'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+     *              'format' => 'json',
+     *              'type' => 'DateTime',
+     *              'method' => 'serializeDateTimeToJson',
+     *          ),
+     *      )
+     *
+     * @return array
+     */
+    public static function getSubscribingMethods()
+    {
+        return [
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\minimum\udt\AmountType',
+                'method' => 'serializeAmountType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\basic\udt\AmountType',
+                'method' => 'serializeAmountType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\basicwl\udt\AmountType',
+                'method' => 'serializeAmountType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\en16931\udt\AmountType',
+                'method' => 'serializeAmountType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\extended\udt\AmountType',
+                'method' => 'serializeAmountType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\basic\udt\QuantityType',
+                'method' => 'serializeQuantityType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\basicwl\udt\QuantityType',
+                'method' => 'serializeQuantityType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\en16931\udt\QuantityType',
+                'method' => 'serializeQuantityType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\extended\udt\QuantityType',
+                'method' => 'serializeQuantityType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\basic\udt\PercentType',
+                'method' => 'serializePercentType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\basicwl\udt\PercentType',
+                'method' => 'serializePercentType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\en16931\udt\PercentType',
+                'method' => 'serializePercentType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\extended\udt\PercentType',
+                'method' => 'serializePercentType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\basic\udt\IndicatorType',
+                'method' => 'serializeIndicatorType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\basicwl\udt\IndicatorType',
+                'method' => 'serializeIndicatorType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\en16931\udt\IndicatorType',
+                'method' => 'serializeIndicatorType'
+            ],
+            [
+                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                'format' => 'xml',
+                'type' => 'horstoeko\zugferd\entities\extended\udt\IndicatorType',
+                'method' => 'serializeIndicatorType'
+            ],
+        ];
+    }
+
+    /**
+     * Serialize Anount type
+     * The amounts will be serialized (by default) with a precission of 2 digits
+     *
+     * @param  XmlSerializationVisitor $visitor
+     * @param  mixed                   $data
+     * @param  array                   $type
+     * @param  Context                 $context
+     * @return DOMText|false
+     */
+    public function serializeAmountType(XmlSerializationVisitor $visitor, $data, array $type, Context $context)
+    {
+        $node = $visitor->getDocument()->createTextNode(
+            number_format(
+                $data->value(),
+                ZugferdSettings::getSpecialDecimalPlacesMap($visitor->getCurrentNode()->getNodePath(), ZugferdSettings::getAmountDecimals()),
+                ZugferdSettings::getDecimalSeparator(),
+                ZugferdSettings::getThousandsSeparator()
+            )
+        );
+
+        if ($data->getCurrencyID() != null) {
+            $attr = $visitor->getDocument()->createAttribute("currencyID");
+            $attr->value = $data->getCurrencyID();
+            $visitor->getCurrentNode()->appendChild($attr);
+        }
+
+        return $node;
+    }
+
+    /**
+     * Serialize quantity type
+     * The quantity will be serialized (by default) with a precission of 2 digits
+     *
+     * @param  XmlSerializationVisitor $visitor
+     * @param  mixed                   $data
+     * @param  array                   $type
+     * @param  Context                 $context
+     * @return DOMText|false
+     */
+    public function serializeQuantityType(XmlSerializationVisitor $visitor, $data, array $type, Context $context)
+    {
+        $node = $visitor->getDocument()->createTextNode(
+            number_format(
+                $data->value(),
+                ZugferdSettings::getSpecialDecimalPlacesMap($visitor->getCurrentNode()->getNodePath(), ZugferdSettings::getQuantityDecimals()),
+                ZugferdSettings::getDecimalSeparator(),
+                ZugferdSettings::getThousandsSeparator()
+            )
+        );
+
+        if ($data->getUnitCode() != null) {
+            $attr = $visitor->getDocument()->createAttribute("unitCode");
+            $attr->value = $data->getUnitCode();
+            $visitor->getCurrentNode()->appendChild($attr);
+        }
+
+        return $node;
+    }
+
+    /**
+     * Serialize a percantage value
+     * The valze will be serialized (by default) with a precission of 2 digits
+     *
+     * @param  XmlSerializationVisitor $visitor
+     * @param  mixed                   $data
+     * @param  array                   $type
+     * @param  Context                 $context
+     * @return DOMText|false
+     */
+    public function serializePercentType(XmlSerializationVisitor $visitor, $data, array $type, Context $context)
+    {
+        $node = $visitor->getDocument()->createTextNode(
+            number_format(
+                $data->value(),
+                ZugferdSettings::getSpecialDecimalPlacesMap($visitor->getCurrentNode()->getNodePath(), ZugferdSettings::getPercentDecimals()),
+                ZugferdSettings::getDecimalSeparator(),
+                ZugferdSettings::getThousandsSeparator()
+            )
+        );
+
+        return $node;
+    }
+
+    /**
+     * Serialize a inditcator
+     * False and true values will be serialized correctly (false won't be serialized
+     * in the default implementation)
+     *
+     * @param  XmlSerializationVisitor $visitor
+     * @param  mixed                   $data
+     * @param  array                   $type
+     * @param  Context                 $context
+     * @return DOMElement|false
+     */
+    public function serializeIndicatorType(XmlSerializationVisitor $visitor, $data, array $type, Context $context)
+    {
+        $node = $visitor->getDocument()->createElement('udt:Indicator', $data->getIndicator() == false ? 'false' : 'true');
+        return $node;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptor.php	(revision 8435)
@@ -0,0 +1,1142 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\quick;
+
+use DateTime;
+use horstoeko\stringmanagement\StringUtils;
+use horstoeko\zugferd\ZugferdDocumentBuilder;
+use horstoeko\zugferd\codelists\ZugferdInvoiceType;
+use horstoeko\zugferd\codelists\ZugferdPaymentMeans;
+use horstoeko\zugferd\ZugferdProfiles;
+
+/**
+ * Class representing the document descriptor for outgoing documents.
+ * Creating them in a simple and common way in EN16931 profile
+ * This class is slightly inspired by the invoicedescriptor of the
+ * __https://github.com/stephanstapel/ZUGFeRD-csharp__ project
+ * This class contains only basic functionality
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdQuickDescriptor extends ZugferdDocumentBuilder
+{
+    private const VT_TAXCATEGORY = 0;
+    private const VT_TAXTYPE = 1;
+    private const VT_TAXPERCENT = 2;
+    private const VT_LINETOTALBASISAMOUNT = 3;
+    private const VT_ALLOWANCEAMOUNT = 4;
+    private const VT_CHARGEAMOUNT = 5;
+    private const VT_ALLOWANCECHARGEAMOUNT = 6;
+    private const VT_BASISAMOUNT = 7;
+    private const VT_CALCULATEDAMOUNT = 8;
+    private const VT_LOGSERVICECHARGE = 9;
+
+    /**
+     * Used for internal vat summation
+     *
+     * @var array
+     */
+    protected $vatBreakdown = [];
+
+    /**
+     * Internal storage for the prepaid amount. Will be used
+     * in summation calculation
+     *
+     * @var float
+     */
+    protected $totalPrepaidAmount = 0.0;
+
+    /**
+     * Returns the profile of the descriptor
+     *
+     * @return integer
+     */
+    protected static function getProfile(): int
+    {
+        return ZugferdProfiles::PROFILE_EN16931;
+    }
+
+    /**
+     * Creates a new ZugferdDocumentBuilder with profile EN16931
+     *
+     * @codeCoverageIgnore
+     *
+     * @return ZugferdQuickDescriptor
+     */
+    public static function doCreateNew(): ZugferdQuickDescriptor
+    {
+        return static::createNew(static::getProfile());
+    }
+
+    /**
+     * @inheritDoc
+     *
+     * @return void
+     */
+    protected function onBeforeGetContent()
+    {
+        $this->doCalcTotals();
+    }
+
+    /**
+     * Create a new invoice
+     *
+     * @param  string      $invoiceNo
+     * The document no issued by the seller
+     * @param  \DateTime   $invoiceDate
+     * The date when the document was issued by the seller
+     * @param  string      $currency
+     * The code for the invoice currency
+     * @param  string|null $invoiceNoReferenceq
+     * Intended use for payment. If null the number of the invoice is used
+     * @return ZugferdQuickDescriptor
+     */
+    public function doCreateInvoice(string $invoiceNo, \DateTime $invoiceDate, string $currency, ?string $invoiceNoReferenceq = null): ZugferdQuickDescriptor
+    {
+        $this->setDocumentInformation($invoiceNo, ZugferdInvoiceType::INVOICE, $invoiceDate, $currency);
+        $this->setDocumentGeneralPaymentInformation(null, $invoiceNoReferenceq ?? $invoiceNo);
+        return $this;
+    }
+
+    /**
+     * Create a new credit memo
+     *
+     * @param  string    $creditMemoNo
+     * The document no issued by the seller
+     * @param  \DateTime $invoiceDate
+     * The date when the document was issued by the seller
+     * @param  string    $currency
+     * The code for the invoice currency
+     * @param  string    $creditMemoNoReference
+     * Intended use for refund. If null the number of the credit memo is used
+     * @return ZugferdQuickDescriptor
+     */
+    public function doCreateCreditMemo(string $creditMemoNo, \DateTime $invoiceDate, string $currency, string $creditMemoNoReference = ""): ZugferdQuickDescriptor
+    {
+        $this->setDocumentInformation($creditMemoNo, ZugferdInvoiceType::CREDITNOTE, $invoiceDate, $currency);
+        $this->setDocumentGeneralPaymentInformation(null, StringUtils::stringIsNullOrEmpty($creditMemoNoReference) ? $creditMemoNo : $creditMemoNoReference);
+        return $this;
+    }
+
+    /**
+     * Add a payment term
+     *
+     * @param  string        $description
+     * A text description of the payment terms that apply to the payment amount due (including a
+     * description of possible penalties). Note: This element can contain multiple lines and
+     * multiple conditions.
+     * @param  DateTime|null $dueDate
+     * The date by which payment is due Note: The payment due date reflects the net payment due
+     * date. In the case of partial payments, this indicates the first due date of a net payment.
+     * The corresponding description of more complex payment terms can be given in BT-20.
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetPaymentTerms(string $description, ?DateTime $dueDate = null): ZugferdQuickDescriptor
+    {
+        $this->addDocumentPaymentTerm($description, $dueDate);
+        return $this;
+    }
+
+    /**
+     * Set payment means to "direct debit"
+     *
+     * If $isSEPA is true code __31__ wil be useed for payment means code.
+     * If $isSEPA is false code __59__ wil be useed for payment means code.
+     *
+     * @param  boolean $isSEPA
+     * Is it a SEPA transaction or not
+     * @param  string  $buyerIban
+     * Direct debit: ID of the account to be debited
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetPaymentMeansForDebitTransfer(bool $isSEPA, string $buyerIban): ZugferdQuickDescriptor
+    {
+        $this->addDocumentPaymentMean($isSEPA === false ? ZugferdPaymentMeans::UNTDID_4461_31 : ZugferdPaymentMeans::UNTDID_4461_59, null, null, null, null, $buyerIban, null, null, null, null);
+        return $this;
+    }
+
+    /**
+     * Set payment means to "debit transfer"
+     *
+     * If $isSEPA is true code __58__ wil be useed for payment means code.
+     * If $isSEPA is false code __30__ wil be useed for payment means code.
+     *
+     * @param  boolean     $isSEPA
+     * Is it a SEPA transaction or not
+     * @param  string      $payeeIban
+     * Transfer: A unique identifier for the financial account held with a payment service provider to which
+     * the payment should be made, e.g. Use an IBAN (in the case of a SEPA payment) for a national ProprietaryID
+     * account number
+     * @param  string|null $payeeAccountName
+     * The name of the payment account held with a payment service provider to which the payment should be made.
+     * Information only required if different from the name of the payee / seller
+     * @param  string|null $payeePropId
+     * National account number (not for SEPA)
+     * @param  string|null $payeeBic
+     * Seller's banking institution, An identifier for the payment service provider with whom the payment account
+     * is managed, such as the BIC or a national bank code, if required. No identification scheme is to be used.
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetPaymentMeansForCreditTransfer(bool $isSEPA, string $payeeIban, ?string $payeeAccountName = null, ?string $payeePropId = null, ?string $payeeBic = null): ZugferdQuickDescriptor
+    {
+        $this->addDocumentPaymentMean($isSEPA === false ? ZugferdPaymentMeans::UNTDID_4461_30 : ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, $payeeIban, $payeeAccountName, $payeePropId, $payeeBic);
+        return $this;
+    }
+
+    /**
+     * Set payment means to "Bank Card"
+     *
+     * @param  string $cardType
+     * The type of the card
+     * @param  string $cardId
+     * The primary account number (PAN) to which the card used for payment belongs. In accordance with card
+     * payment security standards, an invoice should never contain a full payment card master account number.
+     * The following specification of the PCI Security Standards Council currently applies: The first 6 and
+     * last 4 digits at most are to be displayed
+     * @param  string $cardHolderName
+     * Name of the payment card holder
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetPaymentMeansForBankCard(string $cardType, string $cardId, string $cardHolderName): ZugferdQuickDescriptor
+    {
+        $this->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_48, null, $cardType, $cardId, $cardHolderName, null, null, null, null, null);
+        return $this;
+    }
+
+    /**
+     * Set payment means to "Credit Card"
+     *
+     * @param  string $cardType
+     * The type of the card
+     * @param  string $cardId
+     * The primary account number (PAN) to which the card used for payment belongs. In accordance with card
+     * payment security standards, an invoice should never contain a full payment card master account number.
+     * The following specification of the PCI Security Standards Council currently applies: The first 6 and
+     * last 4 digits at most are to be displayed
+     * @param  string $cardHolderName
+     * Name of the payment card holder
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetPaymentMeansForCreditCard(string $cardType, string $cardId, string $cardHolderName): ZugferdQuickDescriptor
+    {
+        $this->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_54, null, $cardType, $cardId, $cardHolderName, null, null, null, null, null);
+        return $this;
+    }
+
+    /**
+     * Set payment means to "Debit Card"
+     *
+     * @param  string $cardType
+     * The type of the card
+     * @param  string $cardId
+     * The primary account number (PAN) to which the card used for payment belongs. In accordance with card
+     * payment security standards, an invoice should never contain a full payment card master account number.
+     * The following specification of the PCI Security Standards Council currently applies: The first 6 and
+     * last 4 digits at most are to be displayed
+     * @param  string $cardHolderName
+     * Name of the payment card holder
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetPaymentMeansForDebitCard(string $cardType, string $cardId, string $cardHolderName): ZugferdQuickDescriptor
+    {
+        $this->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_55, null, $cardType, $cardId, $cardHolderName, null, null, null, null, null);
+        return $this;
+    }
+
+    /**
+     * Add note to the document
+     *
+     * @param  string      $note
+     * Free text on the invoice
+     * @param  string|null $subjectCode
+     * Code to qualify the free text for the invoice
+     * @param  string|null $contentCode
+     * Free text at document level
+     * @return ZugferdQuickDescriptor
+     */
+    public function doAddNote(string $note, ?string $subjectCode = null, ?string $contentCode = null): ZugferdQuickDescriptor
+    {
+        $this->addDocumentNote($note, $contentCode, $subjectCode);
+        return $this;
+    }
+
+    /**
+     * Set details of the related buyer order
+     *
+     * @param  string   $orderNo
+     * An identifier issued by the buyer for a referenced order (order number)
+     * @param  DateTime $orderDate
+     * Date of order
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetBuyerOrderReferenceDocument(string $orderNo, DateTime $orderDate): ZugferdQuickDescriptor
+    {
+        $this->setDocumentBuyerOrderReferencedDocument($orderNo, $orderDate);
+        return $this;
+    }
+
+    /**
+     * Set information about billing documents that provide evidence of claims made in the bill
+     *
+     * __Notes__
+     *  - The documents justifying the invoice can be used to reference a document number, which should be
+     *    known to the recipient, as well as an external document (referenced by a URL) or an embedded document (such
+     *    as a timesheet as a PDF file). The option of linking to an external document is e.g. required when it comes
+     *    to large attachments and / or sensitive information, e.g. for personal services, which must be separated
+     *    from the bill
+     *  - Use ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument and
+     *    ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument to seek between multiple additional referenced
+     *    documents
+     *
+     * @param  string        $issuerAssignedID
+     * The identifier of the tender or lot to which the invoice relates, or an identifier specified by the seller for
+     * an object on which the invoice is based, or an identifier of the document on which the invoice is based.
+     * @param  DateTime|null $issueDateTime
+     * Document date
+     * @param  string|null   $typeCode
+     * Type of referenced document (See codelist UNTDID 1001)
+     *  - Code 916 "reference paper" is used to reference the identification of the document on which the invoice is based
+     *  - Code 50 "Price / sales catalog response" is used to reference the tender or the lot
+     *  - Code 130 "invoice data sheet" is used to reference an identifier for an object specified by the seller.
+     * @param  string|null   $name
+     * A description of the document, e.g. Hourly billing, usage or consumption report, etc.
+     * @param  string|null   $referenceTypeCode
+     * The identifier for the identification scheme of the identifier of the item invoiced. If it is not clear to the
+     * recipient which scheme is used for the identifier, an identifier of the scheme should be used, which must be selected
+     * from UNTDID 1153 in accordance with the code list entries.
+     * @param  string|null   $filename
+     * Contains a file name of an attachment document embedded as a binary object
+     * @return ZugferdQuickDescriptor
+     */
+    public function doAddAdditionalReferencedDocument(string $issuerAssignedID, ?DateTime $issueDateTime = null, ?string $typeCode = null, ?string $name = null, ?string $referenceTypeCode = null, ?string $filename = null): ZugferdQuickDescriptor
+    {
+        $this->addDocumentAdditionalReferencedDocument($issuerAssignedID, $typeCode, null, $name, $referenceTypeCode, $issueDateTime, $filename);
+        return $this;
+    }
+
+    /**
+     * Set detailed information on the associated delivery note
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  string   $deliveryNoteNo
+     * Delivery receipt number
+     * @param  DateTime $deliveryNoteDate
+     * Delivery receipt date
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetDeliveryNoteReferenceDocument(string $deliveryNoteNo, DateTime $deliveryNoteDate): ZugferdQuickDescriptor
+    {
+        $this->setDocumentDeliveryNoteReferencedDocument($deliveryNoteNo, $deliveryNoteDate);
+        return $this;
+    }
+
+    /**
+     * Set a Reference to the previous invoice
+     *
+     * __Note__: To be used if:
+     *  - a previous invoice is corrected
+     *  - reference is made to previous partial invoices from a final invoice
+     *  - Reference is made to previous invoices for advance payments from a final invoice
+     *
+     * @param  string        $id
+     * Number of the previous invoice
+     * @param  DateTime|null $issueDateTime
+     * Date of the previous invoice
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetInvoiceReferencedDocument(string $id, ?DateTime $issueDateTime = null): ZugferdQuickDescriptor
+    {
+        $this->setDocumentInvoiceReferencedDocument($id, $issueDateTime);
+        return $this;
+    }
+
+    /**
+     * Set Details of a project reference
+     *
+     * @param  string $id
+     * Project Data
+     * @param  string $name
+     * Project Name
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetSpecifiedProcuringProject(string $id, string $name): ZugferdQuickDescriptor
+    {
+        $this->setDocumentProcuringProject($id, $name);
+        return $this;
+    }
+
+    /**
+     * Detailed information about the buyer (service recipient)
+     *
+     * @param  string      $name
+     * The full name of the buyer
+     * @param  string      $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string      $city
+     * Usual name of the city or municipality in which the buyers address is located
+     * @param  string      $street
+     * The main line in the buyers address. This is usually the street name and house number or
+     * the post office box
+     * @param  string      $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  string      $buyerReference
+     * An identifier assigned by the buyer and used for internal routing
+     * @param  string      $id
+     * An identifier of the buyer. In many systems, buyer identification is key information. Multiple buyer IDs can be
+     * assigned or specified. They can be differentiated by using different identification schemes. If no scheme is given,
+     * it should be known to the buyer and buyer, e.g. a previously exchanged, seller-assigned identifier of the buyer
+     * @param  string|null $globalID
+     * The buyers's identifier identification scheme is an identifier uniquely assigned to a buyer by a
+     * global registration organization.
+     * @param  string|null $globalIDscheme
+     * If the identifier is used for the identification scheme, it must be selected from the entries in
+     * the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetBuyer(string $name, string $postcode, string $city, string $street, string $country, ?string $buyerReference = null, ?string $id = null, ?string $globalID = null, ?string $globalIDscheme = null): ZugferdQuickDescriptor
+    {
+        $this->setDocumentBuyer($name, $id);
+        $this->setDocumentBuyerAddress($street, null, null, $postcode, $city, $country, null);
+        $this->addDocumentBuyerGlobalId($globalID, $globalIDscheme);
+        if ($buyerReference != null) {
+            $this->setDocumentBuyerReference($buyerReference);
+        }
+        return $this;
+    }
+
+    /**
+     * Set contact of the buyer party
+     *
+     * @param  string      $name
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $orgunit
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $emailAddress
+     * Detailed information on the buyer's phone number
+     * @param  string|null $phoneno
+     * Detailed information on the buyer's phone number
+     * @param  string|null $faxno
+     * Detailed information on the buyer's fax number
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetBuyerContact(string $name, ?string $orgunit = null, ?string $emailAddress = null, ?string $phoneno = null, ?string $faxno = null): ZugferdQuickDescriptor
+    {
+        $this->setDocumentBuyerContact($name, $orgunit, $phoneno, $faxno, $emailAddress);
+        return $this;
+    }
+
+    /**
+     * Add detailed information on the buyers's tax information
+     *
+     * The local identification (defined by the buyer's address) of the buyer for tax purposes or a reference that enables the buyer
+     * to indicate his reporting status for tax purposes The sales tax identification number of the buyer
+     * Note: This information may affect how the buyer the invoice settled (such as in relation to social security contributions). So
+     * e.g. In some countries, if the buyer is not reported for tax, the buyer will withhold the tax amount and pay it on behalf of the
+     * buyer. Sales tax number with a prefixed country code. A supplier registered as subject to VAT must provide his sales tax
+     * identification number, unless he uses a tax agent.
+     *
+     * @param  string $no
+     * Tax number of the buyers
+     * @param  string $schemeID
+     * Tax number of the buyers or sales tax identification number of the (FC = Tax number, VA = Sales tax number)
+     * @return ZugferdQuickDescriptor
+     */
+    public function doAddBuyerTaxRegistration(string $no, string $schemeID): ZugferdQuickDescriptor
+    {
+        $this->addDocumentBuyerTaxRegistration($no, $schemeID);
+        return $this;
+    }
+
+    /**
+     * Set Buyers electronic communication information
+     *
+     * @param  string $uri
+     * @param  string $uriScheme
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetBuyerElectronicCommunication(string $uri, string $uriScheme = "EM"): ZugferdQuickDescriptor
+    {
+        $this->setDocumentBuyerCommunication($uriScheme, $uri);
+        return $this;
+    }
+
+    /**
+     * Detailed information about the seller (=service provider)
+     *
+     * @param  string      $name
+     * The full formal name under which the seller is registered in the
+     * National Register of Legal Entities, Taxable Person or otherwise acting as person(s)
+     * @param  string      $postcode
+     * Identifier for a group of properties, such as a zip code
+     * @param  string      $city
+     * Usual name of the city or municipality in which the seller's address is located
+     * @param  string      $street
+     * The main line in the sellers address. This is usually the street name and house number or
+     * the post office box
+     * @param  string      $country
+     * Code used to identify the country. If no tax agent is specified, this is the country in which the sales tax
+     * is due. The lists of approved countries are maintained by the EN ISO 3166-1 Maintenance Agency âCodes for the
+     * representation of names of countries and their subdivisionsâ
+     * @param  string|null $id
+     * An identifier of the seller. In many systems, seller identification
+     * is key information. Multiple seller IDs can be assigned or specified. They can be differentiated
+     * by using different identification schemes. If no scheme is given, it should be known to the buyer
+     * and seller, e.g. a previously exchanged, buyer-assigned identifier of the seller
+     * @param  string|null $globalID
+     * The seller's identifier identification scheme is an identifier uniquely assigned to a seller by a
+     * global registration organization.
+     * @param  string|null $globalIDscheme
+     * If the identifier is used for the identification scheme, it must be selected from the entries in
+     * the list published by the ISO / IEC 6523 Maintenance Agency.
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetSeller(string $name, string $postcode, string $city, string $street, string $country, ?string $id = null, ?string $globalID = null, ?string $globalIDscheme = null): ZugferdQuickDescriptor
+    {
+        $this->setDocumentSeller($name, $id);
+        $this->setDocumentSellerAddress($street, null, null, $postcode, $city, $country, null);
+        $this->addDocumentSellerGlobalId($globalID, $globalIDscheme);
+        return $this;
+    }
+
+    /**
+     * Set contact of the seller party
+     *
+     * @param  string      $name
+     * Contact point for a legal entity, such as a personal name of the contact person
+     * @param  string|null $orgunit
+     * Contact point for a legal entity, such as a name of the department or office
+     * @param  string|null $emailAddress
+     * Detailed information on the seller's phone number
+     * @param  string|null $phoneno
+     * Detailed information on the seller's phone number
+     * @param  string|null $faxno
+     * Detailed information on the seller's fax number
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetSellerContact(string $name, ?string $orgunit = null, ?string $emailAddress = null, ?string $phoneno = null, ?string $faxno = null): ZugferdQuickDescriptor
+    {
+        $this->setDocumentSellerContact($name, $orgunit, $phoneno, $faxno, $emailAddress);
+        return $this;
+    }
+
+    /**
+     * Add detailed information on the seller's tax information
+     *
+     * The local identification (defined by the seller's address) of the seller for tax purposes or a reference that enables the seller
+     * to indicate his reporting status for tax purposes The sales tax identification number of the seller
+     * Note: This information may affect how the buyer the invoice settled (such as in relation to social security contributions). So
+     * e.g. In some countries, if the seller is not reported for tax, the buyer will withhold the tax amount and pay it on behalf of the
+     * seller. Sales tax number with a prefixed country code. A supplier registered as subject to VAT must provide his sales tax
+     * identification number, unless he uses a tax agent.
+     *
+     * @param  string $no
+     * Tax number of the seller
+     * @param  string $schemeID
+     * Tax number of the seller or sales tax identification number of the (FC = Tax number, VA = Sales tax number)
+     * @return ZugferdQuickDescriptor
+     */
+    public function doAddSellerTaxRegistration(string $no, string $schemeID): ZugferdQuickDescriptor
+    {
+        $this->addDocumentSellerTaxRegistration($no, $schemeID);
+        return $this;
+    }
+
+    /**
+     * Set Sellers electronic communication information
+     *
+     * @param  string $uri
+     * @param  string $uriScheme
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetSellerElectronicCommunication(string $uri, string $uriScheme = "EM"): ZugferdQuickDescriptor
+    {
+        $this->setDocumentSellerCommunication($uriScheme, $uri);
+        return $this;
+    }
+
+    /**
+     * Add a new text position
+     *
+     * @param  string $lineId
+     * A unique identifier for the relevant item within the invoice (item number)
+     * @param  string $comment
+     * A free text that contains unstructured information that is relevant to the invoice item
+     * @return ZugferdQuickDescriptor
+     */
+    public function doAddTradeLineCommentItem(string $lineId, string $comment): ZugferdQuickDescriptor
+    {
+        $this->addNewTextPosition($lineId);
+        $this->setDocumentPositionNote($comment);
+        return $this;
+    }
+
+    /**
+     * Adds a new position (line) to document
+     *
+     * @param  string $lineId
+     * A unique identifier for the relevant item within the invoice (item number)
+     * @param  string $productName
+     * A name of the item (item name)
+     * @param  float  $unitPrice
+     * Net price of the item
+     * @param  float  $quantity
+     * The quantity of individual items (goods or services) billed in the relevant line
+     * @param  string $unitCode
+     * The unit of measure applicable to the amount billed. Note: The unit of measurement must be taken from the
+     * lists from UN / ECE Recommendation No. 20 "Codes for Units of Measure Used in International Trade" and
+     * UN / ECE Recommendation No. 21 "Codes for Passengers, Types of Cargo, Packages and Packaging Materials
+     * (with Complementary Codes for Package Names)" using the UN / ECE Rec No. 20 Intro 2.a) can be selected.
+     * It should be noted that in most cases it is not necessary for buyers and sellers to fully implement these
+     * lists in their software. Sellers only need to support the entities necessary for their goods and services;
+     * Buyers only need to verify that the units used in the invoice match those in other documents (such as in
+     * Contracts, catalogs, orders and shipping notifications) match the units used.
+     * @param  float  $allowanceChargeAmount
+     * The surcharge/discount amount excluding sales tax. If negative then its an allowance, if positive then
+     * it's a charge
+     * @param  string $allowanceChargeReason
+     * The reason given in text form for the invoice item discount/surcharge
+     * @param  string $taxCategoryCode
+     * Coded description of a sales tax category
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  string $taxTypeCode
+     * In EN 16931 only the tax type âsales taxâ with the code âVATâ is supported. Should other types of tax be
+     * specified, such as an insurance tax or a mineral oil tax the EXTENDED profile must be used. The code for
+     * the tax type must then be taken from the code list UNTDID 5153.
+     * @param  float  $taxPercent
+     * The VAT rate applicable to the item invoiced and expressed as a percentage. Note: The code of the sales
+     * tax category and the category-specific sales tax rate  must correspond to one another. The value to be
+     * given is the percentage. For example, the value 20 is given for 20% (and not 0.2)
+     * @return ZugferdQuickDescriptor
+     */
+    public function doAddTradeLineItem(string $lineId, string $productName, float $unitPrice, float $quantity, string $unitCode, float $allowanceChargeAmount, string $allowanceChargeReason, string $taxCategoryCode, string $taxTypeCode, float $taxPercent): ZugferdQuickDescriptor
+    {
+        $hasChargeAmountIsAllowance = $allowanceChargeAmount != 0.0;
+        $allowanceChargeAmountIsAllowance = $allowanceChargeAmount < 0.0;
+        $allowanceAmount = $allowanceChargeAmountIsAllowance === true ? abs($allowanceChargeAmount) : 0.0;
+        $chargeAmount = $allowanceChargeAmountIsAllowance === false ? abs($allowanceChargeAmount) : 0.0;
+        $allowanceChargeAmount = abs($allowanceChargeAmount);
+        $lineTotalAmount = round($unitPrice * $quantity + $chargeAmount - $allowanceAmount, 2);
+
+        $this->addNewPosition($lineId);
+        $this->setDocumentPositionProductDetails($productName);
+        $this->setDocumentPositionNetPrice($unitPrice);
+        $this->setDocumentPositionQuantity($quantity, $unitCode);
+        $this->addDocumentPositionTax($taxCategoryCode, $taxTypeCode, $taxPercent);
+        $this->setDocumentPositionLineSummation($lineTotalAmount);
+
+        if ($hasChargeAmountIsAllowance == true) {
+            $this->addDocumentPositionAllowanceCharge($allowanceChargeAmount, $allowanceChargeAmountIsAllowance === false, null, null, null, $allowanceChargeReason);
+        }
+
+        $this->addToInternalVatBuffer(
+            $taxCategoryCode,
+            $taxTypeCode,
+            $taxPercent,
+            $lineTotalAmount,
+            0.0,
+            0.0,
+            0.0
+        );
+
+        return $this;
+    }
+
+    /**
+     * Add detailed information on the free text on the position
+     *
+     * @param  string $content
+     * A free text that contains unstructured information that is relevant to the invoice item
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetDocumentPositionNote(string $content): ZugferdQuickDescriptor
+    {
+        $this->setDocumentPositionNote($content);
+
+        return $this;
+    }
+
+    /**
+     * Adds a new position (line) to document with a surcharge amount
+     *
+     * @param string $lineId
+     * A unique identifier for the relevant item within the invoice (item number)
+     * @param string $productName
+     * A name of the item (item name)
+     * @param float  $unitPrice
+     * Net price of the item
+     * @param float  $chargeAmount
+     * The surcharge amount excluding sales tax
+     * @param string $chargeReason
+     * The reason given in text form for the invoice item discount/surcharge
+     *
+     * @param  float  $quantity
+     * The quantity of individual items (goods or services) billed in the relevant line
+     * @param  string $unitCode
+     * The unit of measure applicable to the amount billed. Note: The unit of measurement must be taken from the
+     * lists from UN / ECE Recommendation No. 20 "Codes for Units of Measure Used in International Trade" and
+     * UN / ECE Recommendation No. 21 "Codes for Passengers, Types of Cargo, Packages and Packaging Materials
+     * (with Complementary Codes for Package Names)" using the UN / ECE Rec No. 20 Intro 2.a) can be selected.
+     * It should be noted that in most cases it is not necessary for buyers and sellers to fully implement these
+     * lists in their software. Sellers only need to support the entities necessary for their goods and services;
+     * Buyers only need to verify that the units used in the invoice match those in other documents (such as in
+     * Contracts, catalogs, orders and shipping notifications) match the units used.
+     * @param  string $taxCategoryCode
+     * Coded description of a sales tax category
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  string $taxTypeCode
+     * In EN 16931 only the tax type âsales taxâ with the code âVATâ is supported. Should other types of tax be
+     * specified, such as an insurance tax or a mineral oil tax the EXTENDED profile must be used. The code for
+     * the tax type must then be taken from the code list UNTDID 5153.
+     * @param  float  $taxPercent
+     * The VAT rate applicable to the item invoiced and expressed as a percentage. Note: The code of the sales
+     * tax category and the category-specific sales tax rate  must correspond to one another. The value to be
+     * given is the percentage. For example, the value 20 is given for 20% (and not 0.2)
+     * @return ZugferdQuickDescriptor
+     */
+    public function doAddTradeLineItemWithSurcharge(string $lineId, string $productName, float $unitPrice, float $chargeAmount, string $chargeReason, float $quantity, string $unitCode, string $taxCategoryCode, string $taxTypeCode, float $taxPercent): ZugferdQuickDescriptor
+    {
+        $this->doAddTradeLineItem($lineId, $productName, $unitPrice, $quantity, $unitCode, abs($chargeAmount), $chargeReason, $taxCategoryCode, $taxTypeCode, $taxPercent);
+        return $this;
+    }
+
+    /**
+     * Adds a new position (line) to document with a surcharge amount
+     *
+     * @param  string $lineId
+     * A unique identifier for the relevant item within the invoice (item number)
+     * @param  string $productName
+     * A name of the item (item name)
+     * @param  float  $unitPrice
+     * Net price of the item
+     * @param  float  $discountAmount
+     * The discount amount excluding sales tax
+     * @param  string $discountReason
+     * The reason given in text form for the invoice item discount/surcharge
+     * @param  float  $quantity
+     * The quantity of individual items (goods or services) billed in the relevant line
+     * @param  string $unitCode
+     * The unit of measure applicable to the amount billed. Note: The unit of measurement must be taken from the
+     * lists from UN / ECE Recommendation No. 20 "Codes for Units of Measure Used in International Trade" and
+     * UN / ECE Recommendation No. 21 "Codes for Passengers, Types of Cargo, Packages and Packaging Materials
+     * (with Complementary Codes for Package Names)" using the UN / ECE Rec No. 20 Intro 2.a) can be selected.
+     * It should be noted that in most cases it is not necessary for buyers and sellers to fully implement these
+     * lists in their software. Sellers only need to support the entities necessary for their goods and services;
+     * Buyers only need to verify that the units used in the invoice match those in other documents (such as in
+     * Contracts, catalogs, orders and shipping notifications) match the units used.
+     * @param  string $taxCategoryCode
+     * Coded description of a sales tax category
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  string $taxTypeCode
+     * In EN 16931 only the tax type âsales taxâ with the code âVATâ is supported. Should other types of tax be
+     * specified, such as an insurance tax or a mineral oil tax the EXTENDED profile must be used. The code for
+     * the tax type must then be taken from the code list UNTDID 5153.
+     * @param  float  $taxPercent
+     * The VAT rate applicable to the item invoiced and expressed as a percentage. Note: The code of the sales
+     * tax category and the category-specific sales tax rate  must correspond to one another. The value to be
+     * given is the percentage. For example, the value 20 is given for 20% (and not 0.2)
+     * @return ZugferdQuickDescriptor
+     */
+    public function doAddTradeLineItemWithDiscount(string $lineId, string $productName, float $unitPrice, float $discountAmount, string $discountReason, float $quantity, string $unitCode, string $taxCategoryCode, string $taxTypeCode, float $taxPercent): ZugferdQuickDescriptor
+    {
+        $this->doAddTradeLineItem($lineId, $productName, $unitPrice, $quantity, $unitCode, -abs($discountAmount), $discountReason, $taxCategoryCode, $taxTypeCode, $taxPercent);
+        return $this;
+    }
+
+    /**
+     * Add a logistical service fees (On document level)
+     *
+     * __Notes__
+     *  - This is only available in the EXTENDED profile
+     *
+     * @param  float  $amount
+     * Amount of the service fee
+     * @param  string $description
+     * Identification of the service fee
+     * @param  string $taxTypeCode
+     * Coded description of a sales tax category. Note: Fixed value = "VAT"
+     * @param  string $taxCategoryCode
+     * Coded description of a sales tax category
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  float  $taxPercent
+     * The sales tax rate, expressed as the percentage applicable to the sales tax category in
+     * question. Note: The code of the sales tax category and the category-specific sales tax rate
+     * must correspond to one another. The value to be given is the percentage. For example, the
+     * value 20 is given for 20% (and not 0.2)
+     * @return ZugferdQuickDescriptor
+     */
+    public function doAddLogisticsServiceCharge(float $amount, string $description, string $taxTypeCode, string $taxCategoryCode, float $taxPercent): ZugferdQuickDescriptor
+    {
+        $this->addDocumentLogisticsServiceCharge($description, $amount, [$taxTypeCode], [$taxCategoryCode], [$taxPercent]);
+
+        $this->addToInternalVatBuffer(
+            $taxCategoryCode,
+            $taxTypeCode,
+            $taxPercent,
+            0.0,
+            0.0,
+            0.0,
+            $amount
+        );
+
+        return $this;
+    }
+
+    /**
+     * Add information about surcharges and charges applicable to the bill as a whole, Deductions,
+     * such as for withheld taxes may also be specified in this group
+     *
+     * @param  float  $actualAmount
+     * Amount of the surcharge or discount at document level
+     * @param  string $reason
+     * @param  string $taxCategoryCode
+     * @param  string $taxTypeCode
+     * @param  float  $taxPercent
+     * @return ZugferdQuickDescriptor
+     */
+    public function doAddTradeAllowanceCharge(float $actualAmount, string $reason, string $taxCategoryCode, string $taxTypeCode, float $taxPercent): ZugferdQuickDescriptor
+    {
+        if ($actualAmount == 0.0) {
+            return $this;
+        }
+
+        $allowanceChargeAmountIsAllowance = $actualAmount < 0.0;
+        $allowanceAmount = $allowanceChargeAmountIsAllowance === true ? abs($actualAmount) : 0.0;
+        $chargeAmount = $allowanceChargeAmountIsAllowance === false ? abs($actualAmount) : 0.0;
+
+        $this->addDocumentAllowanceCharge(abs($actualAmount), $allowanceChargeAmountIsAllowance == false, $taxCategoryCode, $taxTypeCode, $taxPercent, null, null, null, null, null, null, $reason);
+
+        $this->addToInternalVatBuffer(
+            $taxCategoryCode,
+            $taxTypeCode,
+            $taxPercent,
+            0.0,
+            $chargeAmount,
+            $allowanceAmount,
+            0.0
+        );
+
+        return $this;
+    }
+
+    /**
+     * Add a VAT breakdown (at document level)
+     *
+     * @param  float       $basisAmount
+     * Tax base amount, Each sales tax breakdown must show a category-specific tax base amount.
+     * @param  float       $percent
+     * The sales tax rate, expressed as the percentage applicable to the sales tax category in
+     * question. Note: The code of the sales tax category and the category-specific sales tax rate
+     * must correspond to one another. The value to be given is the percentage. For example, the
+     * value 20 is given for 20% (and not 0.2)
+     * @param  string      $categoryCode
+     * Coded description of a sales tax category
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  string|null $typeCode
+     * Coded description of a sales tax category. Note: Fixed value = "VAT"
+     * @param  float|null  $allowanceChargeBasisAmount
+     * Total amount of surcharges and deductions of the tax rate at document level
+     * @param  string|null $exemptionReasonCode
+     * Reason given in code form for the exemption of the amount from VAT. Note: Code list issued
+     * and maintained by the Connecting Europe Facility.
+     * @param  string|null $exemptionReason
+     * Reason for tax exemption (free text)
+     * @return ZugferdQuickDescriptor
+     */
+    public function doAddApplicableTradeTax(float $basisAmount, float $percent, string $categoryCode, ?string $typeCode = null, ?float $allowanceChargeBasisAmount = null, ?string $exemptionReasonCode = null, ?string $exemptionReason = null): ZugferdQuickDescriptor
+    {
+        $this->addDocumentTax($categoryCode, $typeCode ?? "VAT", $basisAmount, round(0.01 * $percent * $basisAmount, 2), $percent, $exemptionReason, $exemptionReasonCode);
+        return $this;
+    }
+
+    /**
+     * Add a VAT breakdown (at document level)
+     *
+     * @param  float       $basisAmount
+     * Tax base amount, Each sales tax breakdown must show a category-specific tax base amount.
+     * @param  float       $calculatedAmount
+     * The total amount to be paid for the relevant VAT category. Note: Calculated by multiplying
+     * the amount to be taxed according to the sales tax category by the sales tax rate applicable
+     * for the sales tax category concerned
+     * @param  string      $categoryCode
+     * Coded description of a sales tax category
+     *
+     * The following entries from UNTDID 5305 are used (details in brackets):
+     *  - Standard rate (sales tax is due according to the normal procedure)
+     *  - Goods to be taxed according to the zero rate (sales tax is charged with a percentage of zero)
+     *  - Tax exempt (USt./IGIC/IPSI)
+     *  - Reversal of the tax liability (the rules for reversing the tax liability at USt./IGIC/IPSI apply)
+     *  - VAT exempt for intra-community deliveries of goods (USt./IGIC/IPSI not levied due to rules on intra-community deliveries)
+     *  - Free export item, tax not levied (VAT / IGIC/IPSI not levied due to export outside the EU)
+     *  - Services outside the tax scope (sales are not subject to VAT / IGIC/IPSI)
+     *  - Canary Islands general indirect tax (IGIC tax applies)
+     *  - IPSI (tax for Ceuta / Melilla) applies.
+     *
+     * The codes for the VAT category are as follows:
+     *  - S = sales tax is due at the normal rate
+     *  - Z = goods to be taxed according to the zero rate
+     *  - E = tax exempt
+     *  - AE = reversal of tax liability
+     *  - K = VAT is not shown for intra-community deliveries
+     *  - G = tax not levied due to export outside the EU
+     *  - O = Outside the tax scope
+     *  - L = IGIC (Canary Islands)
+     *  - M = IPSI (Ceuta / Melilla)
+     * @param  string|null $typeCode
+     * Coded description of a sales tax category. Note: Fixed value = "VAT"
+     * @param  float|null  $allowanceChargeBasisAmount
+     * Total amount of surcharges and deductions of the tax rate at document level
+     * @param  string|null $exemptionReasonCode
+     * Reason given in code form for the exemption of the amount from VAT. Note: Code list issued
+     * and maintained by the Connecting Europe Facility.
+     * @param  string|null $exemptionReason
+     * Reason for tax exemption (free text)
+     * @return ZugferdQuickDescriptor
+     */
+    public function doAddApplicableTradeTax2(float $basisAmount, float $calculatedAmount, string $categoryCode, ?string $typeCode = null, ?float $allowanceChargeBasisAmount = null, ?string $exemptionReasonCode = null, ?string $exemptionReason = null): ZugferdQuickDescriptor
+    {
+        $this->addDocumentTax($categoryCode, $typeCode ?? "VAT", $basisAmount, $calculatedAmount, round($calculatedAmount * 100.0 / $basisAmount, 2), $exemptionReason, $exemptionReasonCode);
+        return $this;
+    }
+
+    /**
+     * Sets the prepaid amount
+     *
+     * @param  float $totalPrepaidAmount
+     * @return ZugferdQuickDescriptor
+     */
+    public function doSetPrepaidAmount(float $totalPrepaidAmount = 0.0): ZugferdQuickDescriptor
+    {
+        $this->totalPrepaidAmount = $totalPrepaidAmount;
+        return $this;
+    }
+
+    /**
+     * Writes the vat breakdowns and the summation of the document
+     *
+     * @return ZugferdQuickDescriptor
+     */
+    protected function doCalcTotals(): ZugferdQuickDescriptor
+    {
+        $this->writeVatBreakDown();
+        $this->setDocumentSummation(
+            $this->summarizeVatTableElement(self::VT_BASISAMOUNT) + $this->summarizeVatTableElement(self::VT_CALCULATEDAMOUNT),
+            $this->summarizeVatTableElement(self::VT_BASISAMOUNT) + $this->summarizeVatTableElement(self::VT_CALCULATEDAMOUNT) - $this->totalPrepaidAmount,
+            $this->summarizeVatTableElement(self::VT_LINETOTALBASISAMOUNT),
+            $this->summarizeVatTableElement(self::VT_CHARGEAMOUNT) + $this->summarizeVatTableElement(self::VT_LOGSERVICECHARGE),
+            $this->summarizeVatTableElement(self::VT_ALLOWANCEAMOUNT),
+            $this->summarizeVatTableElement(self::VT_BASISAMOUNT),
+            $this->summarizeVatTableElement(self::VT_CALCULATEDAMOUNT),
+            0.0,
+            $this->totalPrepaidAmount
+        );
+        return $this;
+    }
+
+    /**
+     * Insert into internal vat table for later using, e.g. when creating
+     * the vat breakdown
+     *
+     * @param  string $taxCategoryCode
+     * @param  string $taxTypeCode
+     * @param  float  $taxPercent
+     * @param  float  $lineTotalAmount
+     * @param  float  $chargeAmount
+     * @param  float  $allowanceAmount
+     * @return void
+     */
+    protected function addToInternalVatBuffer(string $taxCategoryCode, string $taxTypeCode, float $taxPercent, float $lineTotalAmount, float $chargeAmount, float $allowanceAmount, float $logisticServiceCharge)
+    {
+        $vatGroup = md5($taxCategoryCode . "_" . $taxTypeCode . "_" . number_format($taxPercent, 10, '_', '__'));
+
+        if (!isset($this->vatBreakdown[$vatGroup])) {
+            $this->vatBreakdown[$vatGroup] = [
+                self::VT_TAXCATEGORY => $taxCategoryCode,
+                self::VT_TAXTYPE => $taxTypeCode,
+                self::VT_TAXPERCENT => $taxPercent,
+                self::VT_LINETOTALBASISAMOUNT => 0.0,
+                self::VT_ALLOWANCEAMOUNT => 0.0,
+                self::VT_CHARGEAMOUNT => 0.0,
+                self::VT_ALLOWANCECHARGEAMOUNT => 0.0,
+                self::VT_CALCULATEDAMOUNT => 0.0,
+                self::VT_LOGSERVICECHARGE => 0.0
+            ];
+        }
+
+        $this->vatBreakdown[$vatGroup][self::VT_LINETOTALBASISAMOUNT] += $lineTotalAmount;
+        $this->vatBreakdown[$vatGroup][self::VT_ALLOWANCEAMOUNT] += $allowanceAmount;
+        $this->vatBreakdown[$vatGroup][self::VT_CHARGEAMOUNT] += $chargeAmount;
+        $this->vatBreakdown[$vatGroup][self::VT_LOGSERVICECHARGE] += $logisticServiceCharge;
+        $this->vatBreakdown[$vatGroup][self::VT_ALLOWANCECHARGEAMOUNT] =
+            $this->vatBreakdown[$vatGroup][self::VT_CHARGEAMOUNT] -
+            $this->vatBreakdown[$vatGroup][self::VT_ALLOWANCEAMOUNT] +
+            $this->vatBreakdown[$vatGroup][self::VT_LOGSERVICECHARGE];
+        $this->vatBreakdown[$vatGroup][self::VT_BASISAMOUNT] =
+            $this->vatBreakdown[$vatGroup][self::VT_LINETOTALBASISAMOUNT] +
+            $this->vatBreakdown[$vatGroup][self::VT_ALLOWANCECHARGEAMOUNT];
+        $this->vatBreakdown[$vatGroup][self::VT_CALCULATEDAMOUNT] =
+            round(
+                $this->vatBreakdown[$vatGroup][self::VT_BASISAMOUNT] *
+                    $this->vatBreakdown[$vatGroup][self::VT_TAXPERCENT] / 100.0,
+                2
+            );
+    }
+
+    /**
+     * Writes the document vat breakdown from the internal vat buffer
+     *
+     * @return void
+     */
+    protected function writeVatBreakDown(): void
+    {
+        foreach ($this->vatBreakdown as $item) {
+            $this->addDocumentTax(
+                $item[self::VT_TAXCATEGORY],
+                $item[self::VT_TAXTYPE],
+                $item[self::VT_BASISAMOUNT],
+                $item[self::VT_CALCULATEDAMOUNT],
+                $item[self::VT_TAXPERCENT],
+                null,
+                null,
+                $item[self::VT_LINETOTALBASISAMOUNT],
+                $item[self::VT_ALLOWANCECHARGEAMOUNT]
+            );
+        }
+    }
+
+    /**
+     * Summarizes an array element in the internal vat table
+     *
+     * @param  integer $index
+     * @return float
+     */
+    protected function summarizeVatTableElement(int $index): float
+    {
+        $sum = 0.0;
+
+        foreach ($this->vatBreakdown as $item) {
+            $sum += $item[$index];
+        }
+
+        return $sum;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorEn16931.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorEn16931.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorEn16931.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\quick;
+
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\quick\ZugferdQuickDescriptor;
+
+/**
+ * Class representing the document descriptor for outgoing documents in EN16931 profile
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdQuickDescriptorEn16931 extends ZugferdQuickDescriptor
+{
+    /**
+     * @inheritDoc
+     */
+    protected static function getProfile(): int
+    {
+        return ZugferdProfiles::PROFILE_EN16931;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorExtended.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorExtended.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorExtended.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\quick;
+
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\quick\ZugferdQuickDescriptor;
+
+/**
+ * Class representing the document descriptor for outgoing documents in EXTENDED profile
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdQuickDescriptorExtended extends ZugferdQuickDescriptor
+{
+    /**
+     * @inheritDoc
+     */
+    protected static function getProfile(): int
+    {
+        return ZugferdProfiles::PROFILE_EXTENDED;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\quick;
+
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\quick\ZugferdQuickDescriptor;
+
+/**
+ * Class representing the document descriptor for outgoing documents in XRECHNUNG profile
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdQuickDescriptorXRechnung extends ZugferdQuickDescriptor
+{
+    /**
+     * @inheritDoc
+     */
+    protected static function getProfile(): int
+    {
+        return ZugferdProfiles::PROFILE_XRECHNUNG;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung2.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung2.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung2.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\quick;
+
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\quick\ZugferdQuickDescriptor;
+
+/**
+ * Class representing the document descriptor for outgoing documents in XRECHNUNG 2.x profile
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdQuickDescriptorXRechnung2 extends ZugferdQuickDescriptor
+{
+    /**
+     * @inheritDoc
+     */
+    protected static function getProfile(): int
+    {
+        return ZugferdProfiles::PROFILE_XRECHNUNG_2_3;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung3.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung3.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/quick/ZugferdQuickDescriptorXRechnung3.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * This file is a part of horstoeko/zugferd.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace horstoeko\zugferd\quick;
+
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\quick\ZugferdQuickDescriptor;
+
+/**
+ * Class representing the document descriptor for outgoing documents in XRECHNUNG 2.x profile
+ *
+ * @category Zugferd
+ * @package  Zugferd
+ * @author   D. Erling <horstoeko@erling.com.de>
+ * @license  https://opensource.org/licenses/MIT MIT
+ * @link     https://github.com/horstoeko/zugferd
+ */
+class ZugferdQuickDescriptorXRechnung3 extends ZugferdQuickDescriptor
+{
+    /**
+     * @inheritDoc
+     */
+    protected static function getProfile(): int
+    {
+        return ZugferdProfiles::PROFILE_XRECHNUNG_3;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL.xsd	(revision 8435)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
+    elementFormDefault="qualified">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" schemaLocation="FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" schemaLocation="FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:element name="CrossIndustryInvoice" type="rsm:CrossIndustryInvoiceType"/>
+  <xs:complexType name="CrossIndustryInvoiceType">
+    <xs:sequence>
+      <xs:element name="ExchangedDocumentContext" type="ram:ExchangedDocumentContextType"/>
+      <xs:element name="ExchangedDocument" type="ram:ExchangedDocumentType"/>
+      <xs:element name="SupplyChainTradeTransaction" type="ram:SupplyChainTradeTransactionType"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd	(revision 8435)
@@ -0,0 +1,792 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    elementFormDefault="qualified"
+    version="100.D16B">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:simpleType name="AllowanceChargeReasonCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AA"/>
+      <xs:enumeration value="AAA"/>
+      <xs:enumeration value="AAC"/>
+      <xs:enumeration value="AAD"/>
+      <xs:enumeration value="AAE"/>
+      <xs:enumeration value="AAF"/>
+      <xs:enumeration value="AAH"/>
+      <xs:enumeration value="AAI"/>
+      <xs:enumeration value="AAS"/>
+      <xs:enumeration value="AAT"/>
+      <xs:enumeration value="AAV"/>
+      <xs:enumeration value="AAY"/>
+      <xs:enumeration value="AAZ"/>
+      <xs:enumeration value="ABA"/>
+      <xs:enumeration value="ABB"/>
+      <xs:enumeration value="ABC"/>
+      <xs:enumeration value="ABD"/>
+      <xs:enumeration value="ABF"/>
+      <xs:enumeration value="ABK"/>
+      <xs:enumeration value="ABL"/>
+      <xs:enumeration value="ABN"/>
+      <xs:enumeration value="ABR"/>
+      <xs:enumeration value="ABS"/>
+      <xs:enumeration value="ABT"/>
+      <xs:enumeration value="ABU"/>
+      <xs:enumeration value="ACF"/>
+      <xs:enumeration value="ACG"/>
+      <xs:enumeration value="ACH"/>
+      <xs:enumeration value="ACI"/>
+      <xs:enumeration value="ACJ"/>
+      <xs:enumeration value="ACK"/>
+      <xs:enumeration value="ACL"/>
+      <xs:enumeration value="ACM"/>
+      <xs:enumeration value="ACS"/>
+      <xs:enumeration value="ADC"/>
+      <xs:enumeration value="ADE"/>
+      <xs:enumeration value="ADJ"/>
+      <xs:enumeration value="ADK"/>
+      <xs:enumeration value="ADL"/>
+      <xs:enumeration value="ADM"/>
+      <xs:enumeration value="ADN"/>
+      <xs:enumeration value="ADO"/>
+      <xs:enumeration value="ADP"/>
+      <xs:enumeration value="ADQ"/>
+      <xs:enumeration value="ADR"/>
+      <xs:enumeration value="ADT"/>
+      <xs:enumeration value="ADW"/>
+      <xs:enumeration value="ADY"/>
+      <xs:enumeration value="ADZ"/>
+      <xs:enumeration value="AEA"/>
+      <xs:enumeration value="AEB"/>
+      <xs:enumeration value="AEC"/>
+      <xs:enumeration value="AED"/>
+      <xs:enumeration value="AEF"/>
+      <xs:enumeration value="AEH"/>
+      <xs:enumeration value="AEI"/>
+      <xs:enumeration value="AEJ"/>
+      <xs:enumeration value="AEK"/>
+      <xs:enumeration value="AEL"/>
+      <xs:enumeration value="AEM"/>
+      <xs:enumeration value="AEN"/>
+      <xs:enumeration value="AEO"/>
+      <xs:enumeration value="AEP"/>
+      <xs:enumeration value="AES"/>
+      <xs:enumeration value="AET"/>
+      <xs:enumeration value="AEU"/>
+      <xs:enumeration value="AEV"/>
+      <xs:enumeration value="AEW"/>
+      <xs:enumeration value="AEX"/>
+      <xs:enumeration value="AEY"/>
+      <xs:enumeration value="AEZ"/>
+      <xs:enumeration value="AJ"/>
+      <xs:enumeration value="AU"/>
+      <xs:enumeration value="CA"/>
+      <xs:enumeration value="CAB"/>
+      <xs:enumeration value="CAD"/>
+      <xs:enumeration value="CAE"/>
+      <xs:enumeration value="CAF"/>
+      <xs:enumeration value="CAI"/>
+      <xs:enumeration value="CAJ"/>
+      <xs:enumeration value="CAK"/>
+      <xs:enumeration value="CAL"/>
+      <xs:enumeration value="CAM"/>
+      <xs:enumeration value="CAN"/>
+      <xs:enumeration value="CAO"/>
+      <xs:enumeration value="CAP"/>
+      <xs:enumeration value="CAQ"/>
+      <xs:enumeration value="CAR"/>
+      <xs:enumeration value="CAS"/>
+      <xs:enumeration value="CAT"/>
+      <xs:enumeration value="CAU"/>
+      <xs:enumeration value="CAV"/>
+      <xs:enumeration value="CAW"/>
+      <xs:enumeration value="CAX"/>
+      <xs:enumeration value="CAY"/>
+      <xs:enumeration value="CAZ"/>
+      <xs:enumeration value="CD"/>
+      <xs:enumeration value="CG"/>
+      <xs:enumeration value="CS"/>
+      <xs:enumeration value="CT"/>
+      <xs:enumeration value="DAB"/>
+      <xs:enumeration value="DAC"/>
+      <xs:enumeration value="DAD"/>
+      <xs:enumeration value="DAF"/>
+      <xs:enumeration value="DAG"/>
+      <xs:enumeration value="DAH"/>
+      <xs:enumeration value="DAI"/>
+      <xs:enumeration value="DAJ"/>
+      <xs:enumeration value="DAK"/>
+      <xs:enumeration value="DAL"/>
+      <xs:enumeration value="DAM"/>
+      <xs:enumeration value="DAN"/>
+      <xs:enumeration value="DAO"/>
+      <xs:enumeration value="DAP"/>
+      <xs:enumeration value="DAQ"/>
+      <xs:enumeration value="DL"/>
+      <xs:enumeration value="EG"/>
+      <xs:enumeration value="EP"/>
+      <xs:enumeration value="ER"/>
+      <xs:enumeration value="FAA"/>
+      <xs:enumeration value="FAB"/>
+      <xs:enumeration value="FAC"/>
+      <xs:enumeration value="FC"/>
+      <xs:enumeration value="FH"/>
+      <xs:enumeration value="FI"/>
+      <xs:enumeration value="GAA"/>
+      <xs:enumeration value="HAA"/>
+      <xs:enumeration value="HD"/>
+      <xs:enumeration value="HH"/>
+      <xs:enumeration value="IAA"/>
+      <xs:enumeration value="IAB"/>
+      <xs:enumeration value="ID"/>
+      <xs:enumeration value="IF"/>
+      <xs:enumeration value="IR"/>
+      <xs:enumeration value="IS"/>
+      <xs:enumeration value="KO"/>
+      <xs:enumeration value="L1"/>
+      <xs:enumeration value="LA"/>
+      <xs:enumeration value="LAA"/>
+      <xs:enumeration value="LAB"/>
+      <xs:enumeration value="LF"/>
+      <xs:enumeration value="MAE"/>
+      <xs:enumeration value="MI"/>
+      <xs:enumeration value="ML"/>
+      <xs:enumeration value="NAA"/>
+      <xs:enumeration value="OA"/>
+      <xs:enumeration value="PA"/>
+      <xs:enumeration value="PAA"/>
+      <xs:enumeration value="PC"/>
+      <xs:enumeration value="PL"/>
+      <xs:enumeration value="RAB"/>
+      <xs:enumeration value="RAC"/>
+      <xs:enumeration value="RAD"/>
+      <xs:enumeration value="RAF"/>
+      <xs:enumeration value="RE"/>
+      <xs:enumeration value="RF"/>
+      <xs:enumeration value="RH"/>
+      <xs:enumeration value="RV"/>
+      <xs:enumeration value="SA"/>
+      <xs:enumeration value="SAA"/>
+      <xs:enumeration value="SAD"/>
+      <xs:enumeration value="SAE"/>
+      <xs:enumeration value="SAI"/>
+      <xs:enumeration value="SG"/>
+      <xs:enumeration value="SH"/>
+      <xs:enumeration value="SM"/>
+      <xs:enumeration value="SU"/>
+      <xs:enumeration value="TAB"/>
+      <xs:enumeration value="TAC"/>
+      <xs:enumeration value="TT"/>
+      <xs:enumeration value="TV"/>
+      <xs:enumeration value="V1"/>
+      <xs:enumeration value="V2"/>
+      <xs:enumeration value="WH"/>
+      <xs:enumeration value="XAA"/>
+      <xs:enumeration value="YY"/>
+      <xs:enumeration value="ZZZ"/>
+      <xs:enumeration value="41"/>
+      <xs:enumeration value="42"/>
+      <xs:enumeration value="60"/>
+      <xs:enumeration value="62"/>
+      <xs:enumeration value="63"/>
+      <xs:enumeration value="64"/>
+      <xs:enumeration value="65"/>
+      <xs:enumeration value="66"/>
+      <xs:enumeration value="67"/>
+      <xs:enumeration value="68"/>
+      <xs:enumeration value="70"/>
+      <xs:enumeration value="71"/>
+      <xs:enumeration value="88"/>
+      <xs:enumeration value="95"/>
+      <xs:enumeration value="100"/>
+      <xs:enumeration value="102"/>
+      <xs:enumeration value="103"/>
+      <xs:enumeration value="104"/>
+      <xs:enumeration value="105"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="AllowanceChargeReasonCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:AllowanceChargeReasonCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="CountryIDContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="1A"/>
+      <xs:enumeration value="AD"/>
+      <xs:enumeration value="AE"/>
+      <xs:enumeration value="AF"/>
+      <xs:enumeration value="AG"/>
+      <xs:enumeration value="AI"/>
+      <xs:enumeration value="AL"/>
+      <xs:enumeration value="AM"/>
+      <xs:enumeration value="AO"/>
+      <xs:enumeration value="AQ"/>
+      <xs:enumeration value="AR"/>
+      <xs:enumeration value="AS"/>
+      <xs:enumeration value="AT"/>
+      <xs:enumeration value="AU"/>
+      <xs:enumeration value="AW"/>
+      <xs:enumeration value="AX"/>
+      <xs:enumeration value="AZ"/>
+      <xs:enumeration value="BA"/>
+      <xs:enumeration value="BB"/>
+      <xs:enumeration value="BD"/>
+      <xs:enumeration value="BE"/>
+      <xs:enumeration value="BF"/>
+      <xs:enumeration value="BG"/>
+      <xs:enumeration value="BH"/>
+      <xs:enumeration value="BI"/>
+      <xs:enumeration value="BJ"/>
+      <xs:enumeration value="BL"/>
+      <xs:enumeration value="BM"/>
+      <xs:enumeration value="BN"/>
+      <xs:enumeration value="BO"/>
+      <xs:enumeration value="BQ"/>
+      <xs:enumeration value="BR"/>
+      <xs:enumeration value="BS"/>
+      <xs:enumeration value="BT"/>
+      <xs:enumeration value="BV"/>
+      <xs:enumeration value="BW"/>
+      <xs:enumeration value="BY"/>
+      <xs:enumeration value="BZ"/>
+      <xs:enumeration value="CA"/>
+      <xs:enumeration value="CC"/>
+      <xs:enumeration value="CD"/>
+      <xs:enumeration value="CF"/>
+      <xs:enumeration value="CG"/>
+      <xs:enumeration value="CH"/>
+      <xs:enumeration value="CI"/>
+      <xs:enumeration value="CK"/>
+      <xs:enumeration value="CL"/>
+      <xs:enumeration value="CM"/>
+      <xs:enumeration value="CN"/>
+      <xs:enumeration value="CO"/>
+      <xs:enumeration value="CR"/>
+      <xs:enumeration value="CU"/>
+      <xs:enumeration value="CV"/>
+      <xs:enumeration value="CW"/>
+      <xs:enumeration value="CX"/>
+      <xs:enumeration value="CY"/>
+      <xs:enumeration value="CZ"/>
+      <xs:enumeration value="DE"/>
+      <xs:enumeration value="DJ"/>
+      <xs:enumeration value="DK"/>
+      <xs:enumeration value="DM"/>
+      <xs:enumeration value="DO"/>
+      <xs:enumeration value="DZ"/>
+      <xs:enumeration value="EC"/>
+      <xs:enumeration value="EE"/>
+      <xs:enumeration value="EG"/>
+      <xs:enumeration value="EH"/>
+      <xs:enumeration value="ER"/>
+      <xs:enumeration value="ES"/>
+      <xs:enumeration value="ET"/>
+      <xs:enumeration value="FI"/>
+      <xs:enumeration value="FJ"/>
+      <xs:enumeration value="FK"/>
+      <xs:enumeration value="FM"/>
+      <xs:enumeration value="FO"/>
+      <xs:enumeration value="FR"/>
+      <xs:enumeration value="GA"/>
+      <xs:enumeration value="GB"/>
+      <xs:enumeration value="GD"/>
+      <xs:enumeration value="GE"/>
+      <xs:enumeration value="GF"/>
+      <xs:enumeration value="GG"/>
+      <xs:enumeration value="GH"/>
+      <xs:enumeration value="GI"/>
+      <xs:enumeration value="GL"/>
+      <xs:enumeration value="GM"/>
+      <xs:enumeration value="GN"/>
+      <xs:enumeration value="GP"/>
+      <xs:enumeration value="GQ"/>
+      <xs:enumeration value="GR"/>
+      <xs:enumeration value="GS"/>
+      <xs:enumeration value="GT"/>
+      <xs:enumeration value="GU"/>
+      <xs:enumeration value="GW"/>
+      <xs:enumeration value="GY"/>
+      <xs:enumeration value="HK"/>
+      <xs:enumeration value="HM"/>
+      <xs:enumeration value="HN"/>
+      <xs:enumeration value="HR"/>
+      <xs:enumeration value="HT"/>
+      <xs:enumeration value="HU"/>
+      <xs:enumeration value="ID"/>
+      <xs:enumeration value="IE"/>
+      <xs:enumeration value="IL"/>
+      <xs:enumeration value="IM"/>
+      <xs:enumeration value="IN"/>
+      <xs:enumeration value="IO"/>
+      <xs:enumeration value="IQ"/>
+      <xs:enumeration value="IR"/>
+      <xs:enumeration value="IS"/>
+      <xs:enumeration value="IT"/>
+      <xs:enumeration value="JE"/>
+      <xs:enumeration value="JM"/>
+      <xs:enumeration value="JO"/>
+      <xs:enumeration value="JP"/>
+      <xs:enumeration value="KE"/>
+      <xs:enumeration value="KG"/>
+      <xs:enumeration value="KH"/>
+      <xs:enumeration value="KI"/>
+      <xs:enumeration value="KM"/>
+      <xs:enumeration value="KN"/>
+      <xs:enumeration value="KP"/>
+      <xs:enumeration value="KR"/>
+      <xs:enumeration value="KW"/>
+      <xs:enumeration value="KY"/>
+      <xs:enumeration value="KZ"/>
+      <xs:enumeration value="LA"/>
+      <xs:enumeration value="LB"/>
+      <xs:enumeration value="LC"/>
+      <xs:enumeration value="LI"/>
+      <xs:enumeration value="LK"/>
+      <xs:enumeration value="LR"/>
+      <xs:enumeration value="LS"/>
+      <xs:enumeration value="LT"/>
+      <xs:enumeration value="LU"/>
+      <xs:enumeration value="LV"/>
+      <xs:enumeration value="LY"/>
+      <xs:enumeration value="MA"/>
+      <xs:enumeration value="MC"/>
+      <xs:enumeration value="MD"/>
+      <xs:enumeration value="ME"/>
+      <xs:enumeration value="MF"/>
+      <xs:enumeration value="MG"/>
+      <xs:enumeration value="MH"/>
+      <xs:enumeration value="MK"/>
+      <xs:enumeration value="ML"/>
+      <xs:enumeration value="MM"/>
+      <xs:enumeration value="MN"/>
+      <xs:enumeration value="MO"/>
+      <xs:enumeration value="MP"/>
+      <xs:enumeration value="MQ"/>
+      <xs:enumeration value="MR"/>
+      <xs:enumeration value="MS"/>
+      <xs:enumeration value="MT"/>
+      <xs:enumeration value="MU"/>
+      <xs:enumeration value="MV"/>
+      <xs:enumeration value="MW"/>
+      <xs:enumeration value="MX"/>
+      <xs:enumeration value="MY"/>
+      <xs:enumeration value="MZ"/>
+      <xs:enumeration value="NA"/>
+      <xs:enumeration value="NC"/>
+      <xs:enumeration value="NE"/>
+      <xs:enumeration value="NF"/>
+      <xs:enumeration value="NG"/>
+      <xs:enumeration value="NI"/>
+      <xs:enumeration value="NL"/>
+      <xs:enumeration value="NO"/>
+      <xs:enumeration value="NP"/>
+      <xs:enumeration value="NR"/>
+      <xs:enumeration value="NU"/>
+      <xs:enumeration value="NZ"/>
+      <xs:enumeration value="OM"/>
+      <xs:enumeration value="PA"/>
+      <xs:enumeration value="PE"/>
+      <xs:enumeration value="PF"/>
+      <xs:enumeration value="PG"/>
+      <xs:enumeration value="PH"/>
+      <xs:enumeration value="PK"/>
+      <xs:enumeration value="PL"/>
+      <xs:enumeration value="PM"/>
+      <xs:enumeration value="PN"/>
+      <xs:enumeration value="PR"/>
+      <xs:enumeration value="PS"/>
+      <xs:enumeration value="PT"/>
+      <xs:enumeration value="PW"/>
+      <xs:enumeration value="PY"/>
+      <xs:enumeration value="QA"/>
+      <xs:enumeration value="RE"/>
+      <xs:enumeration value="RO"/>
+      <xs:enumeration value="RS"/>
+      <xs:enumeration value="RU"/>
+      <xs:enumeration value="RW"/>
+      <xs:enumeration value="SA"/>
+      <xs:enumeration value="SB"/>
+      <xs:enumeration value="SC"/>
+      <xs:enumeration value="SD"/>
+      <xs:enumeration value="SE"/>
+      <xs:enumeration value="SG"/>
+      <xs:enumeration value="SH"/>
+      <xs:enumeration value="SI"/>
+      <xs:enumeration value="SJ"/>
+      <xs:enumeration value="SK"/>
+      <xs:enumeration value="SL"/>
+      <xs:enumeration value="SM"/>
+      <xs:enumeration value="SN"/>
+      <xs:enumeration value="SO"/>
+      <xs:enumeration value="SR"/>
+      <xs:enumeration value="SS"/>
+      <xs:enumeration value="ST"/>
+      <xs:enumeration value="SV"/>
+      <xs:enumeration value="SX"/>
+      <xs:enumeration value="SY"/>
+      <xs:enumeration value="SZ"/>
+      <xs:enumeration value="TC"/>
+      <xs:enumeration value="TD"/>
+      <xs:enumeration value="TF"/>
+      <xs:enumeration value="TG"/>
+      <xs:enumeration value="TH"/>
+      <xs:enumeration value="TJ"/>
+      <xs:enumeration value="TK"/>
+      <xs:enumeration value="TL"/>
+      <xs:enumeration value="TM"/>
+      <xs:enumeration value="TN"/>
+      <xs:enumeration value="TO"/>
+      <xs:enumeration value="TR"/>
+      <xs:enumeration value="TT"/>
+      <xs:enumeration value="TV"/>
+      <xs:enumeration value="TW"/>
+      <xs:enumeration value="TZ"/>
+      <xs:enumeration value="UA"/>
+      <xs:enumeration value="UG"/>
+      <xs:enumeration value="UM"/>
+      <xs:enumeration value="US"/>
+      <xs:enumeration value="UY"/>
+      <xs:enumeration value="UZ"/>
+      <xs:enumeration value="VA"/>
+      <xs:enumeration value="VC"/>
+      <xs:enumeration value="VE"/>
+      <xs:enumeration value="VG"/>
+      <xs:enumeration value="VI"/>
+      <xs:enumeration value="VN"/>
+      <xs:enumeration value="VU"/>
+      <xs:enumeration value="WF"/>
+      <xs:enumeration value="WS"/>
+      <xs:enumeration value="XI"/>
+      <xs:enumeration value="YE"/>
+      <xs:enumeration value="YT"/>
+      <xs:enumeration value="ZA"/>
+      <xs:enumeration value="ZM"/>
+      <xs:enumeration value="ZW"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="CountryIDType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:CountryIDContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="CurrencyCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AED"/>
+      <xs:enumeration value="AFN"/>
+      <xs:enumeration value="ALL"/>
+      <xs:enumeration value="AMD"/>
+      <xs:enumeration value="ANG"/>
+      <xs:enumeration value="AOA"/>
+      <xs:enumeration value="ARS"/>
+      <xs:enumeration value="AUD"/>
+      <xs:enumeration value="AWG"/>
+      <xs:enumeration value="AZN"/>
+      <xs:enumeration value="BAM"/>
+      <xs:enumeration value="BBD"/>
+      <xs:enumeration value="BDT"/>
+      <xs:enumeration value="BGN"/>
+      <xs:enumeration value="BHD"/>
+      <xs:enumeration value="BIF"/>
+      <xs:enumeration value="BMD"/>
+      <xs:enumeration value="BND"/>
+      <xs:enumeration value="BOB"/>
+      <xs:enumeration value="BOV"/>
+      <xs:enumeration value="BRL"/>
+      <xs:enumeration value="BSD"/>
+      <xs:enumeration value="BTN"/>
+      <xs:enumeration value="BWP"/>
+      <xs:enumeration value="BYN"/>
+      <xs:enumeration value="BZD"/>
+      <xs:enumeration value="CAD"/>
+      <xs:enumeration value="CDF"/>
+      <xs:enumeration value="CHE"/>
+      <xs:enumeration value="CHF"/>
+      <xs:enumeration value="CHW"/>
+      <xs:enumeration value="CLF"/>
+      <xs:enumeration value="CLP"/>
+      <xs:enumeration value="CNY"/>
+      <xs:enumeration value="COP"/>
+      <xs:enumeration value="COU"/>
+      <xs:enumeration value="CRC"/>
+      <xs:enumeration value="CUC"/>
+      <xs:enumeration value="CUP"/>
+      <xs:enumeration value="CVE"/>
+      <xs:enumeration value="CZK"/>
+      <xs:enumeration value="DJF"/>
+      <xs:enumeration value="DKK"/>
+      <xs:enumeration value="DOP"/>
+      <xs:enumeration value="DZD"/>
+      <xs:enumeration value="EGP"/>
+      <xs:enumeration value="ERN"/>
+      <xs:enumeration value="ETB"/>
+      <xs:enumeration value="EUR"/>
+      <xs:enumeration value="FJD"/>
+      <xs:enumeration value="FKP"/>
+      <xs:enumeration value="GBP"/>
+      <xs:enumeration value="GEL"/>
+      <xs:enumeration value="GHS"/>
+      <xs:enumeration value="GIP"/>
+      <xs:enumeration value="GMD"/>
+      <xs:enumeration value="GNF"/>
+      <xs:enumeration value="GTQ"/>
+      <xs:enumeration value="GYD"/>
+      <xs:enumeration value="HKD"/>
+      <xs:enumeration value="HNL"/>
+      <xs:enumeration value="HRK"/>
+      <xs:enumeration value="HTG"/>
+      <xs:enumeration value="HUF"/>
+      <xs:enumeration value="IDR"/>
+      <xs:enumeration value="ILS"/>
+      <xs:enumeration value="INR"/>
+      <xs:enumeration value="IQD"/>
+      <xs:enumeration value="IRR"/>
+      <xs:enumeration value="ISK"/>
+      <xs:enumeration value="JMD"/>
+      <xs:enumeration value="JOD"/>
+      <xs:enumeration value="JPY"/>
+      <xs:enumeration value="KES"/>
+      <xs:enumeration value="KGS"/>
+      <xs:enumeration value="KHR"/>
+      <xs:enumeration value="KMF"/>
+      <xs:enumeration value="KPW"/>
+      <xs:enumeration value="KRW"/>
+      <xs:enumeration value="KWD"/>
+      <xs:enumeration value="KYD"/>
+      <xs:enumeration value="KZT"/>
+      <xs:enumeration value="LAK"/>
+      <xs:enumeration value="LBP"/>
+      <xs:enumeration value="LKR"/>
+      <xs:enumeration value="LRD"/>
+      <xs:enumeration value="LSL"/>
+      <xs:enumeration value="LYD"/>
+      <xs:enumeration value="MAD"/>
+      <xs:enumeration value="MDL"/>
+      <xs:enumeration value="MGA"/>
+      <xs:enumeration value="MKD"/>
+      <xs:enumeration value="MMK"/>
+      <xs:enumeration value="MNT"/>
+      <xs:enumeration value="MOP"/>
+      <xs:enumeration value="MRU"/>
+      <xs:enumeration value="MUR"/>
+      <xs:enumeration value="MVR"/>
+      <xs:enumeration value="MWK"/>
+      <xs:enumeration value="MXN"/>
+      <xs:enumeration value="MXV"/>
+      <xs:enumeration value="MYR"/>
+      <xs:enumeration value="MZN"/>
+      <xs:enumeration value="NAD"/>
+      <xs:enumeration value="NGN"/>
+      <xs:enumeration value="NIO"/>
+      <xs:enumeration value="NOK"/>
+      <xs:enumeration value="NPR"/>
+      <xs:enumeration value="NZD"/>
+      <xs:enumeration value="OMR"/>
+      <xs:enumeration value="PAB"/>
+      <xs:enumeration value="PEN"/>
+      <xs:enumeration value="PGK"/>
+      <xs:enumeration value="PHP"/>
+      <xs:enumeration value="PKR"/>
+      <xs:enumeration value="PLN"/>
+      <xs:enumeration value="PYG"/>
+      <xs:enumeration value="QAR"/>
+      <xs:enumeration value="RON"/>
+      <xs:enumeration value="RSD"/>
+      <xs:enumeration value="RUB"/>
+      <xs:enumeration value="RWF"/>
+      <xs:enumeration value="SAR"/>
+      <xs:enumeration value="SBD"/>
+      <xs:enumeration value="SCR"/>
+      <xs:enumeration value="SDG"/>
+      <xs:enumeration value="SEK"/>
+      <xs:enumeration value="SGD"/>
+      <xs:enumeration value="SHP"/>
+      <xs:enumeration value="SLL"/>
+      <xs:enumeration value="SOS"/>
+      <xs:enumeration value="SRD"/>
+      <xs:enumeration value="SSP"/>
+      <xs:enumeration value="STN"/>
+      <xs:enumeration value="SVC"/>
+      <xs:enumeration value="SYP"/>
+      <xs:enumeration value="SZL"/>
+      <xs:enumeration value="THB"/>
+      <xs:enumeration value="TJS"/>
+      <xs:enumeration value="TMT"/>
+      <xs:enumeration value="TND"/>
+      <xs:enumeration value="TOP"/>
+      <xs:enumeration value="TRY"/>
+      <xs:enumeration value="TTD"/>
+      <xs:enumeration value="TWD"/>
+      <xs:enumeration value="TZS"/>
+      <xs:enumeration value="UAH"/>
+      <xs:enumeration value="UGX"/>
+      <xs:enumeration value="USD"/>
+      <xs:enumeration value="USN"/>
+      <xs:enumeration value="UYI"/>
+      <xs:enumeration value="UYU"/>
+      <xs:enumeration value="UYW"/>
+      <xs:enumeration value="UZS"/>
+      <xs:enumeration value="VES"/>
+      <xs:enumeration value="VND"/>
+      <xs:enumeration value="VUV"/>
+      <xs:enumeration value="WST"/>
+      <xs:enumeration value="XAF"/>
+      <xs:enumeration value="XAG"/>
+      <xs:enumeration value="XAU"/>
+      <xs:enumeration value="XBA"/>
+      <xs:enumeration value="XBB"/>
+      <xs:enumeration value="XBC"/>
+      <xs:enumeration value="XBD"/>
+      <xs:enumeration value="XCD"/>
+      <xs:enumeration value="XDR"/>
+      <xs:enumeration value="XOF"/>
+      <xs:enumeration value="XPD"/>
+      <xs:enumeration value="XPF"/>
+      <xs:enumeration value="XPT"/>
+      <xs:enumeration value="XSU"/>
+      <xs:enumeration value="XTS"/>
+      <xs:enumeration value="XUA"/>
+      <xs:enumeration value="XXX"/>
+      <xs:enumeration value="YER"/>
+      <xs:enumeration value="ZAR"/>
+      <xs:enumeration value="ZMW"/>
+      <xs:enumeration value="ZWL"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="CurrencyCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:CurrencyCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="DocumentCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="80"/>
+      <xs:enumeration value="81"/>
+      <xs:enumeration value="82"/>
+      <xs:enumeration value="83"/>
+      <xs:enumeration value="84"/>
+      <xs:enumeration value="130"/>
+      <xs:enumeration value="202"/>
+      <xs:enumeration value="203"/>
+      <xs:enumeration value="204"/>
+      <xs:enumeration value="211"/>
+      <xs:enumeration value="261"/>
+      <xs:enumeration value="262"/>
+      <xs:enumeration value="295"/>
+      <xs:enumeration value="296"/>
+      <xs:enumeration value="308"/>
+      <xs:enumeration value="325"/>
+      <xs:enumeration value="326"/>
+      <xs:enumeration value="380"/>
+      <xs:enumeration value="381"/>
+      <xs:enumeration value="383"/>
+      <xs:enumeration value="384"/>
+      <xs:enumeration value="385"/>
+      <xs:enumeration value="386"/>
+      <xs:enumeration value="387"/>
+      <xs:enumeration value="388"/>
+      <xs:enumeration value="389"/>
+      <xs:enumeration value="390"/>
+      <xs:enumeration value="393"/>
+      <xs:enumeration value="394"/>
+      <xs:enumeration value="395"/>
+      <xs:enumeration value="396"/>
+      <xs:enumeration value="420"/>
+      <xs:enumeration value="456"/>
+      <xs:enumeration value="457"/>
+      <xs:enumeration value="458"/>
+      <xs:enumeration value="527"/>
+      <xs:enumeration value="575"/>
+      <xs:enumeration value="623"/>
+      <xs:enumeration value="633"/>
+      <xs:enumeration value="751"/>
+      <xs:enumeration value="780"/>
+      <xs:enumeration value="875"/>
+      <xs:enumeration value="876"/>
+      <xs:enumeration value="877"/>
+      <xs:enumeration value="935"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="DocumentCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:DocumentCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="FormattedDateTimeFormatContentType">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:complexType name="FormattedDateTimeType">
+    <xs:sequence>
+      <xs:element name="DateTimeString">
+        <xs:complexType>
+          <xs:simpleContent>
+            <xs:extension base="xs:string">
+              <xs:attribute name="format" type="qdt:FormattedDateTimeFormatContentType" use="required"/>
+            </xs:extension>
+          </xs:simpleContent>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:simpleType name="PaymentMeansCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="10"/>
+      <xs:enumeration value="20"/>
+      <xs:enumeration value="30"/>
+      <xs:enumeration value="42"/>
+      <xs:enumeration value="48"/>
+      <xs:enumeration value="49"/>
+      <xs:enumeration value="57"/>
+      <xs:enumeration value="58"/>
+      <xs:enumeration value="59"/>
+      <xs:enumeration value="97"/>
+      <xs:enumeration value="ZZZ"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="PaymentMeansCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:PaymentMeansCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="TaxCategoryCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AE"/>
+      <xs:enumeration value="E"/>
+      <xs:enumeration value="G"/>
+      <xs:enumeration value="K"/>
+      <xs:enumeration value="L"/>
+      <xs:enumeration value="M"/>
+      <xs:enumeration value="O"/>
+      <xs:enumeration value="S"/>
+      <xs:enumeration value="Z"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="TaxCategoryCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:TaxCategoryCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="TaxTypeCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="VAT"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="TaxTypeCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:TaxTypeCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="TimeReferenceCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="5"/>
+      <xs:enumeration value="29"/>
+      <xs:enumeration value="72"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="TimeReferenceCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:TimeReferenceCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd	(revision 8435)
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    elementFormDefault="qualified">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" schemaLocation="FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:complexType name="CreditorFinancialAccountType">
+    <xs:sequence>
+      <xs:element name="IBANID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="ProprietaryID" type="udt:IDType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DebtorFinancialAccountType">
+    <xs:sequence>
+      <xs:element name="IBANID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DocumentContextParameterType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ExchangedDocumentContextType">
+    <xs:sequence>
+      <xs:element name="BusinessProcessSpecifiedDocumentContextParameter" type="ram:DocumentContextParameterType" minOccurs="0"/>
+      <xs:element name="GuidelineSpecifiedDocumentContextParameter" type="ram:DocumentContextParameterType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ExchangedDocumentType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+      <xs:element name="TypeCode" type="qdt:DocumentCodeType"/>
+      <xs:element name="IssueDateTime" type="udt:DateTimeType"/>
+      <xs:element name="IncludedNote" type="ram:NoteType" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeAgreementType">
+    <xs:sequence>
+      <xs:element name="BuyerReference" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="SellerTradeParty" type="ram:TradePartyType"/>
+      <xs:element name="BuyerTradeParty" type="ram:TradePartyType"/>
+      <xs:element name="SellerTaxRepresentativeTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="BuyerOrderReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="ContractReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeDeliveryType">
+    <xs:sequence>
+      <xs:element name="ShipToTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="ActualDeliverySupplyChainEvent" type="ram:SupplyChainEventType" minOccurs="0"/>
+      <xs:element name="DespatchAdviceReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeSettlementType">
+    <xs:sequence>
+      <xs:element name="CreditorReferenceID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="PaymentReference" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="TaxCurrencyCode" type="qdt:CurrencyCodeType" minOccurs="0"/>
+      <xs:element name="InvoiceCurrencyCode" type="qdt:CurrencyCodeType"/>
+      <xs:element name="PayeeTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeSettlementPaymentMeans" type="ram:TradeSettlementPaymentMeansType" minOccurs="0"/>
+      <xs:element name="ApplicableTradeTax" type="ram:TradeTaxType" maxOccurs="unbounded"/>
+      <xs:element name="BillingSpecifiedPeriod" type="ram:SpecifiedPeriodType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeAllowanceCharge" type="ram:TradeAllowanceChargeType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="SpecifiedTradePaymentTerms" type="ram:TradePaymentTermsType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeSettlementHeaderMonetarySummation" type="ram:TradeSettlementHeaderMonetarySummationType"/>
+      <xs:element name="InvoiceReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="ReceivableSpecifiedTradeAccountingAccount" type="ram:TradeAccountingAccountType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LegalOrganizationType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="TradingBusinessName" type="udt:TextType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="NoteType">
+    <xs:sequence>
+      <xs:element name="Content" type="udt:TextType"/>
+      <xs:element name="SubjectCode" type="udt:CodeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ReferencedDocumentType">
+    <xs:sequence>
+      <xs:element name="IssuerAssignedID" type="udt:IDType"/>
+      <xs:element name="FormattedIssueDateTime" type="qdt:FormattedDateTimeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SpecifiedPeriodType">
+    <xs:sequence>
+      <xs:element name="StartDateTime" type="udt:DateTimeType" minOccurs="0"/>
+      <xs:element name="EndDateTime" type="udt:DateTimeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SupplyChainEventType">
+    <xs:sequence>
+      <xs:element name="OccurrenceDateTime" type="udt:DateTimeType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SupplyChainTradeTransactionType">
+    <xs:sequence>
+      <xs:element name="ApplicableHeaderTradeAgreement" type="ram:HeaderTradeAgreementType"/>
+      <xs:element name="ApplicableHeaderTradeDelivery" type="ram:HeaderTradeDeliveryType"/>
+      <xs:element name="ApplicableHeaderTradeSettlement" type="ram:HeaderTradeSettlementType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TaxRegistrationType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeAccountingAccountType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeAddressType">
+    <xs:sequence>
+      <xs:element name="PostcodeCode" type="udt:CodeType" minOccurs="0"/>
+      <xs:element name="LineOne" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="LineTwo" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="LineThree" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="CityName" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="CountryID" type="qdt:CountryIDType"/>
+      <xs:element name="CountrySubDivisionName" type="udt:TextType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeAllowanceChargeType">
+    <xs:sequence>
+      <xs:element name="ChargeIndicator" type="udt:IndicatorType"/>
+      <xs:element name="CalculationPercent" type="udt:PercentType" minOccurs="0"/>
+      <xs:element name="BasisAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="ActualAmount" type="udt:AmountType"/>
+      <xs:element name="ReasonCode" type="qdt:AllowanceChargeReasonCodeType" minOccurs="0"/>
+      <xs:element name="Reason" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="CategoryTradeTax" type="ram:TradeTaxType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePartyType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="GlobalID" type="udt:IDType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="Name" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="SpecifiedLegalOrganization" type="ram:LegalOrganizationType" minOccurs="0"/>
+      <xs:element name="PostalTradeAddress" type="ram:TradeAddressType" minOccurs="0"/>
+      <xs:element name="URIUniversalCommunication" type="ram:UniversalCommunicationType" minOccurs="0"/>
+      <xs:element name="SpecifiedTaxRegistration" type="ram:TaxRegistrationType" minOccurs="0" maxOccurs="2"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePaymentTermsType">
+    <xs:sequence>
+      <xs:element name="Description" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="DueDateDateTime" type="udt:DateTimeType" minOccurs="0"/>
+      <xs:element name="DirectDebitMandateID" type="udt:IDType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementHeaderMonetarySummationType">
+    <xs:sequence>
+      <xs:element name="LineTotalAmount" type="udt:AmountType"/>
+      <xs:element name="ChargeTotalAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="AllowanceTotalAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="TaxBasisTotalAmount" type="udt:AmountType"/>
+      <xs:element name="TaxTotalAmount" type="udt:AmountType" minOccurs="0" maxOccurs="2"/>
+      <xs:element name="GrandTotalAmount" type="udt:AmountType"/>
+      <xs:element name="TotalPrepaidAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="DuePayableAmount" type="udt:AmountType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementPaymentMeansType">
+    <xs:sequence>
+      <xs:element name="TypeCode" type="qdt:PaymentMeansCodeType"/>
+      <xs:element name="PayerPartyDebtorFinancialAccount" type="ram:DebtorFinancialAccountType" minOccurs="0"/>
+      <xs:element name="PayeePartyCreditorFinancialAccount" type="ram:CreditorFinancialAccountType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeTaxType">
+    <xs:sequence>
+      <xs:element name="CalculatedAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="TypeCode" type="qdt:TaxTypeCodeType"/>
+      <xs:element name="ExemptionReason" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="BasisAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="CategoryCode" type="qdt:TaxCategoryCodeType"/>
+      <xs:element name="ExemptionReasonCode" type="udt:CodeType" minOccurs="0"/>
+      <xs:element name="DueDateTypeCode" type="qdt:TimeReferenceCodeType" minOccurs="0"/>
+      <xs:element name="RateApplicablePercent" type="udt:PercentType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="UniversalCommunicationType">
+    <xs:sequence>
+      <xs:element name="URIID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC-WL_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd	(revision 8435)
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    targetNamespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    elementFormDefault="qualified"
+    version="100.D16B">
+  <xs:complexType name="AmountType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal">
+        <xs:attribute name="currencyID" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="CodeType">
+    <xs:simpleContent>
+      <xs:extension base="xs:token"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="DateTimeType">
+    <xs:choice>
+      <xs:element name="DateTimeString">
+        <xs:complexType>
+          <xs:simpleContent>
+            <xs:extension base="xs:string">
+              <xs:attribute name="format" type="xs:string" use="required"/>
+            </xs:extension>
+          </xs:simpleContent>
+        </xs:complexType>
+      </xs:element>
+    </xs:choice>
+  </xs:complexType>
+  <xs:complexType name="IDType">
+    <xs:simpleContent>
+      <xs:extension base="xs:token">
+        <xs:attribute name="schemeID" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="IndicatorType">
+    <xs:choice>
+      <xs:element name="Indicator" type="xs:boolean"/>
+    </xs:choice>
+  </xs:complexType>
+  <xs:complexType name="PercentType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="TextType">
+    <xs:simpleContent>
+      <xs:extension base="xs:string"/>
+    </xs:simpleContent>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC.xsd	(revision 8435)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
+    elementFormDefault="qualified">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" schemaLocation="FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" schemaLocation="FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:element name="CrossIndustryInvoice" type="rsm:CrossIndustryInvoiceType"/>
+  <xs:complexType name="CrossIndustryInvoiceType">
+    <xs:sequence>
+      <xs:element name="ExchangedDocumentContext" type="ram:ExchangedDocumentContextType"/>
+      <xs:element name="ExchangedDocument" type="ram:ExchangedDocumentType"/>
+      <xs:element name="SupplyChainTradeTransaction" type="ram:SupplyChainTradeTransactionType"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd	(revision 8435)
@@ -0,0 +1,792 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    elementFormDefault="qualified"
+    version="100.D16B">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:simpleType name="AllowanceChargeReasonCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AA"/>
+      <xs:enumeration value="AAA"/>
+      <xs:enumeration value="AAC"/>
+      <xs:enumeration value="AAD"/>
+      <xs:enumeration value="AAE"/>
+      <xs:enumeration value="AAF"/>
+      <xs:enumeration value="AAH"/>
+      <xs:enumeration value="AAI"/>
+      <xs:enumeration value="AAS"/>
+      <xs:enumeration value="AAT"/>
+      <xs:enumeration value="AAV"/>
+      <xs:enumeration value="AAY"/>
+      <xs:enumeration value="AAZ"/>
+      <xs:enumeration value="ABA"/>
+      <xs:enumeration value="ABB"/>
+      <xs:enumeration value="ABC"/>
+      <xs:enumeration value="ABD"/>
+      <xs:enumeration value="ABF"/>
+      <xs:enumeration value="ABK"/>
+      <xs:enumeration value="ABL"/>
+      <xs:enumeration value="ABN"/>
+      <xs:enumeration value="ABR"/>
+      <xs:enumeration value="ABS"/>
+      <xs:enumeration value="ABT"/>
+      <xs:enumeration value="ABU"/>
+      <xs:enumeration value="ACF"/>
+      <xs:enumeration value="ACG"/>
+      <xs:enumeration value="ACH"/>
+      <xs:enumeration value="ACI"/>
+      <xs:enumeration value="ACJ"/>
+      <xs:enumeration value="ACK"/>
+      <xs:enumeration value="ACL"/>
+      <xs:enumeration value="ACM"/>
+      <xs:enumeration value="ACS"/>
+      <xs:enumeration value="ADC"/>
+      <xs:enumeration value="ADE"/>
+      <xs:enumeration value="ADJ"/>
+      <xs:enumeration value="ADK"/>
+      <xs:enumeration value="ADL"/>
+      <xs:enumeration value="ADM"/>
+      <xs:enumeration value="ADN"/>
+      <xs:enumeration value="ADO"/>
+      <xs:enumeration value="ADP"/>
+      <xs:enumeration value="ADQ"/>
+      <xs:enumeration value="ADR"/>
+      <xs:enumeration value="ADT"/>
+      <xs:enumeration value="ADW"/>
+      <xs:enumeration value="ADY"/>
+      <xs:enumeration value="ADZ"/>
+      <xs:enumeration value="AEA"/>
+      <xs:enumeration value="AEB"/>
+      <xs:enumeration value="AEC"/>
+      <xs:enumeration value="AED"/>
+      <xs:enumeration value="AEF"/>
+      <xs:enumeration value="AEH"/>
+      <xs:enumeration value="AEI"/>
+      <xs:enumeration value="AEJ"/>
+      <xs:enumeration value="AEK"/>
+      <xs:enumeration value="AEL"/>
+      <xs:enumeration value="AEM"/>
+      <xs:enumeration value="AEN"/>
+      <xs:enumeration value="AEO"/>
+      <xs:enumeration value="AEP"/>
+      <xs:enumeration value="AES"/>
+      <xs:enumeration value="AET"/>
+      <xs:enumeration value="AEU"/>
+      <xs:enumeration value="AEV"/>
+      <xs:enumeration value="AEW"/>
+      <xs:enumeration value="AEX"/>
+      <xs:enumeration value="AEY"/>
+      <xs:enumeration value="AEZ"/>
+      <xs:enumeration value="AJ"/>
+      <xs:enumeration value="AU"/>
+      <xs:enumeration value="CA"/>
+      <xs:enumeration value="CAB"/>
+      <xs:enumeration value="CAD"/>
+      <xs:enumeration value="CAE"/>
+      <xs:enumeration value="CAF"/>
+      <xs:enumeration value="CAI"/>
+      <xs:enumeration value="CAJ"/>
+      <xs:enumeration value="CAK"/>
+      <xs:enumeration value="CAL"/>
+      <xs:enumeration value="CAM"/>
+      <xs:enumeration value="CAN"/>
+      <xs:enumeration value="CAO"/>
+      <xs:enumeration value="CAP"/>
+      <xs:enumeration value="CAQ"/>
+      <xs:enumeration value="CAR"/>
+      <xs:enumeration value="CAS"/>
+      <xs:enumeration value="CAT"/>
+      <xs:enumeration value="CAU"/>
+      <xs:enumeration value="CAV"/>
+      <xs:enumeration value="CAW"/>
+      <xs:enumeration value="CAX"/>
+      <xs:enumeration value="CAY"/>
+      <xs:enumeration value="CAZ"/>
+      <xs:enumeration value="CD"/>
+      <xs:enumeration value="CG"/>
+      <xs:enumeration value="CS"/>
+      <xs:enumeration value="CT"/>
+      <xs:enumeration value="DAB"/>
+      <xs:enumeration value="DAC"/>
+      <xs:enumeration value="DAD"/>
+      <xs:enumeration value="DAF"/>
+      <xs:enumeration value="DAG"/>
+      <xs:enumeration value="DAH"/>
+      <xs:enumeration value="DAI"/>
+      <xs:enumeration value="DAJ"/>
+      <xs:enumeration value="DAK"/>
+      <xs:enumeration value="DAL"/>
+      <xs:enumeration value="DAM"/>
+      <xs:enumeration value="DAN"/>
+      <xs:enumeration value="DAO"/>
+      <xs:enumeration value="DAP"/>
+      <xs:enumeration value="DAQ"/>
+      <xs:enumeration value="DL"/>
+      <xs:enumeration value="EG"/>
+      <xs:enumeration value="EP"/>
+      <xs:enumeration value="ER"/>
+      <xs:enumeration value="FAA"/>
+      <xs:enumeration value="FAB"/>
+      <xs:enumeration value="FAC"/>
+      <xs:enumeration value="FC"/>
+      <xs:enumeration value="FH"/>
+      <xs:enumeration value="FI"/>
+      <xs:enumeration value="GAA"/>
+      <xs:enumeration value="HAA"/>
+      <xs:enumeration value="HD"/>
+      <xs:enumeration value="HH"/>
+      <xs:enumeration value="IAA"/>
+      <xs:enumeration value="IAB"/>
+      <xs:enumeration value="ID"/>
+      <xs:enumeration value="IF"/>
+      <xs:enumeration value="IR"/>
+      <xs:enumeration value="IS"/>
+      <xs:enumeration value="KO"/>
+      <xs:enumeration value="L1"/>
+      <xs:enumeration value="LA"/>
+      <xs:enumeration value="LAA"/>
+      <xs:enumeration value="LAB"/>
+      <xs:enumeration value="LF"/>
+      <xs:enumeration value="MAE"/>
+      <xs:enumeration value="MI"/>
+      <xs:enumeration value="ML"/>
+      <xs:enumeration value="NAA"/>
+      <xs:enumeration value="OA"/>
+      <xs:enumeration value="PA"/>
+      <xs:enumeration value="PAA"/>
+      <xs:enumeration value="PC"/>
+      <xs:enumeration value="PL"/>
+      <xs:enumeration value="RAB"/>
+      <xs:enumeration value="RAC"/>
+      <xs:enumeration value="RAD"/>
+      <xs:enumeration value="RAF"/>
+      <xs:enumeration value="RE"/>
+      <xs:enumeration value="RF"/>
+      <xs:enumeration value="RH"/>
+      <xs:enumeration value="RV"/>
+      <xs:enumeration value="SA"/>
+      <xs:enumeration value="SAA"/>
+      <xs:enumeration value="SAD"/>
+      <xs:enumeration value="SAE"/>
+      <xs:enumeration value="SAI"/>
+      <xs:enumeration value="SG"/>
+      <xs:enumeration value="SH"/>
+      <xs:enumeration value="SM"/>
+      <xs:enumeration value="SU"/>
+      <xs:enumeration value="TAB"/>
+      <xs:enumeration value="TAC"/>
+      <xs:enumeration value="TT"/>
+      <xs:enumeration value="TV"/>
+      <xs:enumeration value="V1"/>
+      <xs:enumeration value="V2"/>
+      <xs:enumeration value="WH"/>
+      <xs:enumeration value="XAA"/>
+      <xs:enumeration value="YY"/>
+      <xs:enumeration value="ZZZ"/>
+      <xs:enumeration value="41"/>
+      <xs:enumeration value="42"/>
+      <xs:enumeration value="60"/>
+      <xs:enumeration value="62"/>
+      <xs:enumeration value="63"/>
+      <xs:enumeration value="64"/>
+      <xs:enumeration value="65"/>
+      <xs:enumeration value="66"/>
+      <xs:enumeration value="67"/>
+      <xs:enumeration value="68"/>
+      <xs:enumeration value="70"/>
+      <xs:enumeration value="71"/>
+      <xs:enumeration value="88"/>
+      <xs:enumeration value="95"/>
+      <xs:enumeration value="100"/>
+      <xs:enumeration value="102"/>
+      <xs:enumeration value="103"/>
+      <xs:enumeration value="104"/>
+      <xs:enumeration value="105"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="AllowanceChargeReasonCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:AllowanceChargeReasonCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="CountryIDContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="1A"/>
+      <xs:enumeration value="AD"/>
+      <xs:enumeration value="AE"/>
+      <xs:enumeration value="AF"/>
+      <xs:enumeration value="AG"/>
+      <xs:enumeration value="AI"/>
+      <xs:enumeration value="AL"/>
+      <xs:enumeration value="AM"/>
+      <xs:enumeration value="AO"/>
+      <xs:enumeration value="AQ"/>
+      <xs:enumeration value="AR"/>
+      <xs:enumeration value="AS"/>
+      <xs:enumeration value="AT"/>
+      <xs:enumeration value="AU"/>
+      <xs:enumeration value="AW"/>
+      <xs:enumeration value="AX"/>
+      <xs:enumeration value="AZ"/>
+      <xs:enumeration value="BA"/>
+      <xs:enumeration value="BB"/>
+      <xs:enumeration value="BD"/>
+      <xs:enumeration value="BE"/>
+      <xs:enumeration value="BF"/>
+      <xs:enumeration value="BG"/>
+      <xs:enumeration value="BH"/>
+      <xs:enumeration value="BI"/>
+      <xs:enumeration value="BJ"/>
+      <xs:enumeration value="BL"/>
+      <xs:enumeration value="BM"/>
+      <xs:enumeration value="BN"/>
+      <xs:enumeration value="BO"/>
+      <xs:enumeration value="BQ"/>
+      <xs:enumeration value="BR"/>
+      <xs:enumeration value="BS"/>
+      <xs:enumeration value="BT"/>
+      <xs:enumeration value="BV"/>
+      <xs:enumeration value="BW"/>
+      <xs:enumeration value="BY"/>
+      <xs:enumeration value="BZ"/>
+      <xs:enumeration value="CA"/>
+      <xs:enumeration value="CC"/>
+      <xs:enumeration value="CD"/>
+      <xs:enumeration value="CF"/>
+      <xs:enumeration value="CG"/>
+      <xs:enumeration value="CH"/>
+      <xs:enumeration value="CI"/>
+      <xs:enumeration value="CK"/>
+      <xs:enumeration value="CL"/>
+      <xs:enumeration value="CM"/>
+      <xs:enumeration value="CN"/>
+      <xs:enumeration value="CO"/>
+      <xs:enumeration value="CR"/>
+      <xs:enumeration value="CU"/>
+      <xs:enumeration value="CV"/>
+      <xs:enumeration value="CW"/>
+      <xs:enumeration value="CX"/>
+      <xs:enumeration value="CY"/>
+      <xs:enumeration value="CZ"/>
+      <xs:enumeration value="DE"/>
+      <xs:enumeration value="DJ"/>
+      <xs:enumeration value="DK"/>
+      <xs:enumeration value="DM"/>
+      <xs:enumeration value="DO"/>
+      <xs:enumeration value="DZ"/>
+      <xs:enumeration value="EC"/>
+      <xs:enumeration value="EE"/>
+      <xs:enumeration value="EG"/>
+      <xs:enumeration value="EH"/>
+      <xs:enumeration value="ER"/>
+      <xs:enumeration value="ES"/>
+      <xs:enumeration value="ET"/>
+      <xs:enumeration value="FI"/>
+      <xs:enumeration value="FJ"/>
+      <xs:enumeration value="FK"/>
+      <xs:enumeration value="FM"/>
+      <xs:enumeration value="FO"/>
+      <xs:enumeration value="FR"/>
+      <xs:enumeration value="GA"/>
+      <xs:enumeration value="GB"/>
+      <xs:enumeration value="GD"/>
+      <xs:enumeration value="GE"/>
+      <xs:enumeration value="GF"/>
+      <xs:enumeration value="GG"/>
+      <xs:enumeration value="GH"/>
+      <xs:enumeration value="GI"/>
+      <xs:enumeration value="GL"/>
+      <xs:enumeration value="GM"/>
+      <xs:enumeration value="GN"/>
+      <xs:enumeration value="GP"/>
+      <xs:enumeration value="GQ"/>
+      <xs:enumeration value="GR"/>
+      <xs:enumeration value="GS"/>
+      <xs:enumeration value="GT"/>
+      <xs:enumeration value="GU"/>
+      <xs:enumeration value="GW"/>
+      <xs:enumeration value="GY"/>
+      <xs:enumeration value="HK"/>
+      <xs:enumeration value="HM"/>
+      <xs:enumeration value="HN"/>
+      <xs:enumeration value="HR"/>
+      <xs:enumeration value="HT"/>
+      <xs:enumeration value="HU"/>
+      <xs:enumeration value="ID"/>
+      <xs:enumeration value="IE"/>
+      <xs:enumeration value="IL"/>
+      <xs:enumeration value="IM"/>
+      <xs:enumeration value="IN"/>
+      <xs:enumeration value="IO"/>
+      <xs:enumeration value="IQ"/>
+      <xs:enumeration value="IR"/>
+      <xs:enumeration value="IS"/>
+      <xs:enumeration value="IT"/>
+      <xs:enumeration value="JE"/>
+      <xs:enumeration value="JM"/>
+      <xs:enumeration value="JO"/>
+      <xs:enumeration value="JP"/>
+      <xs:enumeration value="KE"/>
+      <xs:enumeration value="KG"/>
+      <xs:enumeration value="KH"/>
+      <xs:enumeration value="KI"/>
+      <xs:enumeration value="KM"/>
+      <xs:enumeration value="KN"/>
+      <xs:enumeration value="KP"/>
+      <xs:enumeration value="KR"/>
+      <xs:enumeration value="KW"/>
+      <xs:enumeration value="KY"/>
+      <xs:enumeration value="KZ"/>
+      <xs:enumeration value="LA"/>
+      <xs:enumeration value="LB"/>
+      <xs:enumeration value="LC"/>
+      <xs:enumeration value="LI"/>
+      <xs:enumeration value="LK"/>
+      <xs:enumeration value="LR"/>
+      <xs:enumeration value="LS"/>
+      <xs:enumeration value="LT"/>
+      <xs:enumeration value="LU"/>
+      <xs:enumeration value="LV"/>
+      <xs:enumeration value="LY"/>
+      <xs:enumeration value="MA"/>
+      <xs:enumeration value="MC"/>
+      <xs:enumeration value="MD"/>
+      <xs:enumeration value="ME"/>
+      <xs:enumeration value="MF"/>
+      <xs:enumeration value="MG"/>
+      <xs:enumeration value="MH"/>
+      <xs:enumeration value="MK"/>
+      <xs:enumeration value="ML"/>
+      <xs:enumeration value="MM"/>
+      <xs:enumeration value="MN"/>
+      <xs:enumeration value="MO"/>
+      <xs:enumeration value="MP"/>
+      <xs:enumeration value="MQ"/>
+      <xs:enumeration value="MR"/>
+      <xs:enumeration value="MS"/>
+      <xs:enumeration value="MT"/>
+      <xs:enumeration value="MU"/>
+      <xs:enumeration value="MV"/>
+      <xs:enumeration value="MW"/>
+      <xs:enumeration value="MX"/>
+      <xs:enumeration value="MY"/>
+      <xs:enumeration value="MZ"/>
+      <xs:enumeration value="NA"/>
+      <xs:enumeration value="NC"/>
+      <xs:enumeration value="NE"/>
+      <xs:enumeration value="NF"/>
+      <xs:enumeration value="NG"/>
+      <xs:enumeration value="NI"/>
+      <xs:enumeration value="NL"/>
+      <xs:enumeration value="NO"/>
+      <xs:enumeration value="NP"/>
+      <xs:enumeration value="NR"/>
+      <xs:enumeration value="NU"/>
+      <xs:enumeration value="NZ"/>
+      <xs:enumeration value="OM"/>
+      <xs:enumeration value="PA"/>
+      <xs:enumeration value="PE"/>
+      <xs:enumeration value="PF"/>
+      <xs:enumeration value="PG"/>
+      <xs:enumeration value="PH"/>
+      <xs:enumeration value="PK"/>
+      <xs:enumeration value="PL"/>
+      <xs:enumeration value="PM"/>
+      <xs:enumeration value="PN"/>
+      <xs:enumeration value="PR"/>
+      <xs:enumeration value="PS"/>
+      <xs:enumeration value="PT"/>
+      <xs:enumeration value="PW"/>
+      <xs:enumeration value="PY"/>
+      <xs:enumeration value="QA"/>
+      <xs:enumeration value="RE"/>
+      <xs:enumeration value="RO"/>
+      <xs:enumeration value="RS"/>
+      <xs:enumeration value="RU"/>
+      <xs:enumeration value="RW"/>
+      <xs:enumeration value="SA"/>
+      <xs:enumeration value="SB"/>
+      <xs:enumeration value="SC"/>
+      <xs:enumeration value="SD"/>
+      <xs:enumeration value="SE"/>
+      <xs:enumeration value="SG"/>
+      <xs:enumeration value="SH"/>
+      <xs:enumeration value="SI"/>
+      <xs:enumeration value="SJ"/>
+      <xs:enumeration value="SK"/>
+      <xs:enumeration value="SL"/>
+      <xs:enumeration value="SM"/>
+      <xs:enumeration value="SN"/>
+      <xs:enumeration value="SO"/>
+      <xs:enumeration value="SR"/>
+      <xs:enumeration value="SS"/>
+      <xs:enumeration value="ST"/>
+      <xs:enumeration value="SV"/>
+      <xs:enumeration value="SX"/>
+      <xs:enumeration value="SY"/>
+      <xs:enumeration value="SZ"/>
+      <xs:enumeration value="TC"/>
+      <xs:enumeration value="TD"/>
+      <xs:enumeration value="TF"/>
+      <xs:enumeration value="TG"/>
+      <xs:enumeration value="TH"/>
+      <xs:enumeration value="TJ"/>
+      <xs:enumeration value="TK"/>
+      <xs:enumeration value="TL"/>
+      <xs:enumeration value="TM"/>
+      <xs:enumeration value="TN"/>
+      <xs:enumeration value="TO"/>
+      <xs:enumeration value="TR"/>
+      <xs:enumeration value="TT"/>
+      <xs:enumeration value="TV"/>
+      <xs:enumeration value="TW"/>
+      <xs:enumeration value="TZ"/>
+      <xs:enumeration value="UA"/>
+      <xs:enumeration value="UG"/>
+      <xs:enumeration value="UM"/>
+      <xs:enumeration value="US"/>
+      <xs:enumeration value="UY"/>
+      <xs:enumeration value="UZ"/>
+      <xs:enumeration value="VA"/>
+      <xs:enumeration value="VC"/>
+      <xs:enumeration value="VE"/>
+      <xs:enumeration value="VG"/>
+      <xs:enumeration value="VI"/>
+      <xs:enumeration value="VN"/>
+      <xs:enumeration value="VU"/>
+      <xs:enumeration value="WF"/>
+      <xs:enumeration value="WS"/>
+      <xs:enumeration value="XI"/>
+      <xs:enumeration value="YE"/>
+      <xs:enumeration value="YT"/>
+      <xs:enumeration value="ZA"/>
+      <xs:enumeration value="ZM"/>
+      <xs:enumeration value="ZW"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="CountryIDType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:CountryIDContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="CurrencyCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AED"/>
+      <xs:enumeration value="AFN"/>
+      <xs:enumeration value="ALL"/>
+      <xs:enumeration value="AMD"/>
+      <xs:enumeration value="ANG"/>
+      <xs:enumeration value="AOA"/>
+      <xs:enumeration value="ARS"/>
+      <xs:enumeration value="AUD"/>
+      <xs:enumeration value="AWG"/>
+      <xs:enumeration value="AZN"/>
+      <xs:enumeration value="BAM"/>
+      <xs:enumeration value="BBD"/>
+      <xs:enumeration value="BDT"/>
+      <xs:enumeration value="BGN"/>
+      <xs:enumeration value="BHD"/>
+      <xs:enumeration value="BIF"/>
+      <xs:enumeration value="BMD"/>
+      <xs:enumeration value="BND"/>
+      <xs:enumeration value="BOB"/>
+      <xs:enumeration value="BOV"/>
+      <xs:enumeration value="BRL"/>
+      <xs:enumeration value="BSD"/>
+      <xs:enumeration value="BTN"/>
+      <xs:enumeration value="BWP"/>
+      <xs:enumeration value="BYN"/>
+      <xs:enumeration value="BZD"/>
+      <xs:enumeration value="CAD"/>
+      <xs:enumeration value="CDF"/>
+      <xs:enumeration value="CHE"/>
+      <xs:enumeration value="CHF"/>
+      <xs:enumeration value="CHW"/>
+      <xs:enumeration value="CLF"/>
+      <xs:enumeration value="CLP"/>
+      <xs:enumeration value="CNY"/>
+      <xs:enumeration value="COP"/>
+      <xs:enumeration value="COU"/>
+      <xs:enumeration value="CRC"/>
+      <xs:enumeration value="CUC"/>
+      <xs:enumeration value="CUP"/>
+      <xs:enumeration value="CVE"/>
+      <xs:enumeration value="CZK"/>
+      <xs:enumeration value="DJF"/>
+      <xs:enumeration value="DKK"/>
+      <xs:enumeration value="DOP"/>
+      <xs:enumeration value="DZD"/>
+      <xs:enumeration value="EGP"/>
+      <xs:enumeration value="ERN"/>
+      <xs:enumeration value="ETB"/>
+      <xs:enumeration value="EUR"/>
+      <xs:enumeration value="FJD"/>
+      <xs:enumeration value="FKP"/>
+      <xs:enumeration value="GBP"/>
+      <xs:enumeration value="GEL"/>
+      <xs:enumeration value="GHS"/>
+      <xs:enumeration value="GIP"/>
+      <xs:enumeration value="GMD"/>
+      <xs:enumeration value="GNF"/>
+      <xs:enumeration value="GTQ"/>
+      <xs:enumeration value="GYD"/>
+      <xs:enumeration value="HKD"/>
+      <xs:enumeration value="HNL"/>
+      <xs:enumeration value="HRK"/>
+      <xs:enumeration value="HTG"/>
+      <xs:enumeration value="HUF"/>
+      <xs:enumeration value="IDR"/>
+      <xs:enumeration value="ILS"/>
+      <xs:enumeration value="INR"/>
+      <xs:enumeration value="IQD"/>
+      <xs:enumeration value="IRR"/>
+      <xs:enumeration value="ISK"/>
+      <xs:enumeration value="JMD"/>
+      <xs:enumeration value="JOD"/>
+      <xs:enumeration value="JPY"/>
+      <xs:enumeration value="KES"/>
+      <xs:enumeration value="KGS"/>
+      <xs:enumeration value="KHR"/>
+      <xs:enumeration value="KMF"/>
+      <xs:enumeration value="KPW"/>
+      <xs:enumeration value="KRW"/>
+      <xs:enumeration value="KWD"/>
+      <xs:enumeration value="KYD"/>
+      <xs:enumeration value="KZT"/>
+      <xs:enumeration value="LAK"/>
+      <xs:enumeration value="LBP"/>
+      <xs:enumeration value="LKR"/>
+      <xs:enumeration value="LRD"/>
+      <xs:enumeration value="LSL"/>
+      <xs:enumeration value="LYD"/>
+      <xs:enumeration value="MAD"/>
+      <xs:enumeration value="MDL"/>
+      <xs:enumeration value="MGA"/>
+      <xs:enumeration value="MKD"/>
+      <xs:enumeration value="MMK"/>
+      <xs:enumeration value="MNT"/>
+      <xs:enumeration value="MOP"/>
+      <xs:enumeration value="MRU"/>
+      <xs:enumeration value="MUR"/>
+      <xs:enumeration value="MVR"/>
+      <xs:enumeration value="MWK"/>
+      <xs:enumeration value="MXN"/>
+      <xs:enumeration value="MXV"/>
+      <xs:enumeration value="MYR"/>
+      <xs:enumeration value="MZN"/>
+      <xs:enumeration value="NAD"/>
+      <xs:enumeration value="NGN"/>
+      <xs:enumeration value="NIO"/>
+      <xs:enumeration value="NOK"/>
+      <xs:enumeration value="NPR"/>
+      <xs:enumeration value="NZD"/>
+      <xs:enumeration value="OMR"/>
+      <xs:enumeration value="PAB"/>
+      <xs:enumeration value="PEN"/>
+      <xs:enumeration value="PGK"/>
+      <xs:enumeration value="PHP"/>
+      <xs:enumeration value="PKR"/>
+      <xs:enumeration value="PLN"/>
+      <xs:enumeration value="PYG"/>
+      <xs:enumeration value="QAR"/>
+      <xs:enumeration value="RON"/>
+      <xs:enumeration value="RSD"/>
+      <xs:enumeration value="RUB"/>
+      <xs:enumeration value="RWF"/>
+      <xs:enumeration value="SAR"/>
+      <xs:enumeration value="SBD"/>
+      <xs:enumeration value="SCR"/>
+      <xs:enumeration value="SDG"/>
+      <xs:enumeration value="SEK"/>
+      <xs:enumeration value="SGD"/>
+      <xs:enumeration value="SHP"/>
+      <xs:enumeration value="SLL"/>
+      <xs:enumeration value="SOS"/>
+      <xs:enumeration value="SRD"/>
+      <xs:enumeration value="SSP"/>
+      <xs:enumeration value="STN"/>
+      <xs:enumeration value="SVC"/>
+      <xs:enumeration value="SYP"/>
+      <xs:enumeration value="SZL"/>
+      <xs:enumeration value="THB"/>
+      <xs:enumeration value="TJS"/>
+      <xs:enumeration value="TMT"/>
+      <xs:enumeration value="TND"/>
+      <xs:enumeration value="TOP"/>
+      <xs:enumeration value="TRY"/>
+      <xs:enumeration value="TTD"/>
+      <xs:enumeration value="TWD"/>
+      <xs:enumeration value="TZS"/>
+      <xs:enumeration value="UAH"/>
+      <xs:enumeration value="UGX"/>
+      <xs:enumeration value="USD"/>
+      <xs:enumeration value="USN"/>
+      <xs:enumeration value="UYI"/>
+      <xs:enumeration value="UYU"/>
+      <xs:enumeration value="UYW"/>
+      <xs:enumeration value="UZS"/>
+      <xs:enumeration value="VES"/>
+      <xs:enumeration value="VND"/>
+      <xs:enumeration value="VUV"/>
+      <xs:enumeration value="WST"/>
+      <xs:enumeration value="XAF"/>
+      <xs:enumeration value="XAG"/>
+      <xs:enumeration value="XAU"/>
+      <xs:enumeration value="XBA"/>
+      <xs:enumeration value="XBB"/>
+      <xs:enumeration value="XBC"/>
+      <xs:enumeration value="XBD"/>
+      <xs:enumeration value="XCD"/>
+      <xs:enumeration value="XDR"/>
+      <xs:enumeration value="XOF"/>
+      <xs:enumeration value="XPD"/>
+      <xs:enumeration value="XPF"/>
+      <xs:enumeration value="XPT"/>
+      <xs:enumeration value="XSU"/>
+      <xs:enumeration value="XTS"/>
+      <xs:enumeration value="XUA"/>
+      <xs:enumeration value="XXX"/>
+      <xs:enumeration value="YER"/>
+      <xs:enumeration value="ZAR"/>
+      <xs:enumeration value="ZMW"/>
+      <xs:enumeration value="ZWL"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="CurrencyCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:CurrencyCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="DocumentCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="80"/>
+      <xs:enumeration value="81"/>
+      <xs:enumeration value="82"/>
+      <xs:enumeration value="83"/>
+      <xs:enumeration value="84"/>
+      <xs:enumeration value="130"/>
+      <xs:enumeration value="202"/>
+      <xs:enumeration value="203"/>
+      <xs:enumeration value="204"/>
+      <xs:enumeration value="211"/>
+      <xs:enumeration value="261"/>
+      <xs:enumeration value="262"/>
+      <xs:enumeration value="295"/>
+      <xs:enumeration value="296"/>
+      <xs:enumeration value="308"/>
+      <xs:enumeration value="325"/>
+      <xs:enumeration value="326"/>
+      <xs:enumeration value="380"/>
+      <xs:enumeration value="381"/>
+      <xs:enumeration value="383"/>
+      <xs:enumeration value="384"/>
+      <xs:enumeration value="385"/>
+      <xs:enumeration value="386"/>
+      <xs:enumeration value="387"/>
+      <xs:enumeration value="388"/>
+      <xs:enumeration value="389"/>
+      <xs:enumeration value="390"/>
+      <xs:enumeration value="393"/>
+      <xs:enumeration value="394"/>
+      <xs:enumeration value="395"/>
+      <xs:enumeration value="396"/>
+      <xs:enumeration value="420"/>
+      <xs:enumeration value="456"/>
+      <xs:enumeration value="457"/>
+      <xs:enumeration value="458"/>
+      <xs:enumeration value="527"/>
+      <xs:enumeration value="575"/>
+      <xs:enumeration value="623"/>
+      <xs:enumeration value="633"/>
+      <xs:enumeration value="751"/>
+      <xs:enumeration value="780"/>
+      <xs:enumeration value="875"/>
+      <xs:enumeration value="876"/>
+      <xs:enumeration value="877"/>
+      <xs:enumeration value="935"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="DocumentCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:DocumentCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="FormattedDateTimeFormatContentType">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:complexType name="FormattedDateTimeType">
+    <xs:sequence>
+      <xs:element name="DateTimeString">
+        <xs:complexType>
+          <xs:simpleContent>
+            <xs:extension base="xs:string">
+              <xs:attribute name="format" type="qdt:FormattedDateTimeFormatContentType" use="required"/>
+            </xs:extension>
+          </xs:simpleContent>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:simpleType name="PaymentMeansCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="10"/>
+      <xs:enumeration value="20"/>
+      <xs:enumeration value="30"/>
+      <xs:enumeration value="42"/>
+      <xs:enumeration value="48"/>
+      <xs:enumeration value="49"/>
+      <xs:enumeration value="57"/>
+      <xs:enumeration value="58"/>
+      <xs:enumeration value="59"/>
+      <xs:enumeration value="97"/>
+      <xs:enumeration value="ZZZ"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="PaymentMeansCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:PaymentMeansCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="TaxCategoryCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AE"/>
+      <xs:enumeration value="E"/>
+      <xs:enumeration value="G"/>
+      <xs:enumeration value="K"/>
+      <xs:enumeration value="L"/>
+      <xs:enumeration value="M"/>
+      <xs:enumeration value="O"/>
+      <xs:enumeration value="S"/>
+      <xs:enumeration value="Z"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="TaxCategoryCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:TaxCategoryCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="TaxTypeCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="VAT"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="TaxTypeCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:TaxTypeCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="TimeReferenceCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="5"/>
+      <xs:enumeration value="29"/>
+      <xs:enumeration value="72"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="TimeReferenceCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:TimeReferenceCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd	(revision 8435)
@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    elementFormDefault="qualified">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" schemaLocation="FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:complexType name="CreditorFinancialAccountType">
+    <xs:sequence>
+      <xs:element name="IBANID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="ProprietaryID" type="udt:IDType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DebtorFinancialAccountType">
+    <xs:sequence>
+      <xs:element name="IBANID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DocumentContextParameterType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DocumentLineDocumentType">
+    <xs:sequence>
+      <xs:element name="LineID" type="udt:IDType"/>
+      <xs:element name="IncludedNote" type="ram:NoteType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ExchangedDocumentContextType">
+    <xs:sequence>
+      <xs:element name="BusinessProcessSpecifiedDocumentContextParameter" type="ram:DocumentContextParameterType" minOccurs="0"/>
+      <xs:element name="GuidelineSpecifiedDocumentContextParameter" type="ram:DocumentContextParameterType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ExchangedDocumentType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+      <xs:element name="TypeCode" type="qdt:DocumentCodeType"/>
+      <xs:element name="IssueDateTime" type="udt:DateTimeType"/>
+      <xs:element name="IncludedNote" type="ram:NoteType" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeAgreementType">
+    <xs:sequence>
+      <xs:element name="BuyerReference" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="SellerTradeParty" type="ram:TradePartyType"/>
+      <xs:element name="BuyerTradeParty" type="ram:TradePartyType"/>
+      <xs:element name="SellerTaxRepresentativeTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="BuyerOrderReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="ContractReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeDeliveryType">
+    <xs:sequence>
+      <xs:element name="ShipToTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="ActualDeliverySupplyChainEvent" type="ram:SupplyChainEventType" minOccurs="0"/>
+      <xs:element name="DespatchAdviceReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeSettlementType">
+    <xs:sequence>
+      <xs:element name="CreditorReferenceID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="PaymentReference" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="TaxCurrencyCode" type="qdt:CurrencyCodeType" minOccurs="0"/>
+      <xs:element name="InvoiceCurrencyCode" type="qdt:CurrencyCodeType"/>
+      <xs:element name="PayeeTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeSettlementPaymentMeans" type="ram:TradeSettlementPaymentMeansType" minOccurs="0"/>
+      <xs:element name="ApplicableTradeTax" type="ram:TradeTaxType" maxOccurs="unbounded"/>
+      <xs:element name="BillingSpecifiedPeriod" type="ram:SpecifiedPeriodType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeAllowanceCharge" type="ram:TradeAllowanceChargeType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="SpecifiedTradePaymentTerms" type="ram:TradePaymentTermsType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeSettlementHeaderMonetarySummation" type="ram:TradeSettlementHeaderMonetarySummationType"/>
+      <xs:element name="InvoiceReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="ReceivableSpecifiedTradeAccountingAccount" type="ram:TradeAccountingAccountType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LegalOrganizationType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="TradingBusinessName" type="udt:TextType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LineTradeAgreementType">
+    <xs:sequence>
+      <xs:element name="GrossPriceProductTradePrice" type="ram:TradePriceType" minOccurs="0"/>
+      <xs:element name="NetPriceProductTradePrice" type="ram:TradePriceType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LineTradeDeliveryType">
+    <xs:sequence>
+      <xs:element name="BilledQuantity" type="udt:QuantityType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LineTradeSettlementType">
+    <xs:sequence>
+      <xs:element name="ApplicableTradeTax" type="ram:TradeTaxType"/>
+      <xs:element name="BillingSpecifiedPeriod" type="ram:SpecifiedPeriodType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeAllowanceCharge" type="ram:TradeAllowanceChargeType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="SpecifiedTradeSettlementLineMonetarySummation" type="ram:TradeSettlementLineMonetarySummationType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="NoteType">
+    <xs:sequence>
+      <xs:element name="Content" type="udt:TextType"/>
+      <xs:element name="SubjectCode" type="udt:CodeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ReferencedDocumentType">
+    <xs:sequence>
+      <xs:element name="IssuerAssignedID" type="udt:IDType"/>
+      <xs:element name="FormattedIssueDateTime" type="qdt:FormattedDateTimeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SpecifiedPeriodType">
+    <xs:sequence>
+      <xs:element name="StartDateTime" type="udt:DateTimeType" minOccurs="0"/>
+      <xs:element name="EndDateTime" type="udt:DateTimeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SupplyChainEventType">
+    <xs:sequence>
+      <xs:element name="OccurrenceDateTime" type="udt:DateTimeType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SupplyChainTradeLineItemType">
+    <xs:sequence>
+      <xs:element name="AssociatedDocumentLineDocument" type="ram:DocumentLineDocumentType"/>
+      <xs:element name="SpecifiedTradeProduct" type="ram:TradeProductType"/>
+      <xs:element name="SpecifiedLineTradeAgreement" type="ram:LineTradeAgreementType"/>
+      <xs:element name="SpecifiedLineTradeDelivery" type="ram:LineTradeDeliveryType"/>
+      <xs:element name="SpecifiedLineTradeSettlement" type="ram:LineTradeSettlementType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SupplyChainTradeTransactionType">
+    <xs:sequence>
+      <xs:element name="IncludedSupplyChainTradeLineItem" type="ram:SupplyChainTradeLineItemType" maxOccurs="unbounded"/>
+      <xs:element name="ApplicableHeaderTradeAgreement" type="ram:HeaderTradeAgreementType"/>
+      <xs:element name="ApplicableHeaderTradeDelivery" type="ram:HeaderTradeDeliveryType"/>
+      <xs:element name="ApplicableHeaderTradeSettlement" type="ram:HeaderTradeSettlementType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TaxRegistrationType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeAccountingAccountType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeAddressType">
+    <xs:sequence>
+      <xs:element name="PostcodeCode" type="udt:CodeType" minOccurs="0"/>
+      <xs:element name="LineOne" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="LineTwo" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="LineThree" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="CityName" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="CountryID" type="qdt:CountryIDType"/>
+      <xs:element name="CountrySubDivisionName" type="udt:TextType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeAllowanceChargeType">
+    <xs:sequence>
+      <xs:element name="ChargeIndicator" type="udt:IndicatorType"/>
+      <xs:element name="CalculationPercent" type="udt:PercentType" minOccurs="0"/>
+      <xs:element name="BasisAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="ActualAmount" type="udt:AmountType"/>
+      <xs:element name="ReasonCode" type="qdt:AllowanceChargeReasonCodeType" minOccurs="0"/>
+      <xs:element name="Reason" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="CategoryTradeTax" type="ram:TradeTaxType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePartyType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="GlobalID" type="udt:IDType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="Name" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="SpecifiedLegalOrganization" type="ram:LegalOrganizationType" minOccurs="0"/>
+      <xs:element name="PostalTradeAddress" type="ram:TradeAddressType" minOccurs="0"/>
+      <xs:element name="URIUniversalCommunication" type="ram:UniversalCommunicationType" minOccurs="0"/>
+      <xs:element name="SpecifiedTaxRegistration" type="ram:TaxRegistrationType" minOccurs="0" maxOccurs="2"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePaymentTermsType">
+    <xs:sequence>
+      <xs:element name="Description" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="DueDateDateTime" type="udt:DateTimeType" minOccurs="0"/>
+      <xs:element name="DirectDebitMandateID" type="udt:IDType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePriceType">
+    <xs:sequence>
+      <xs:element name="ChargeAmount" type="udt:AmountType"/>
+      <xs:element name="BasisQuantity" type="udt:QuantityType" minOccurs="0"/>
+      <xs:element name="AppliedTradeAllowanceCharge" type="ram:TradeAllowanceChargeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeProductType">
+    <xs:sequence>
+      <xs:element name="GlobalID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="Name" type="udt:TextType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementHeaderMonetarySummationType">
+    <xs:sequence>
+      <xs:element name="LineTotalAmount" type="udt:AmountType"/>
+      <xs:element name="ChargeTotalAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="AllowanceTotalAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="TaxBasisTotalAmount" type="udt:AmountType"/>
+      <xs:element name="TaxTotalAmount" type="udt:AmountType" minOccurs="0" maxOccurs="2"/>
+      <xs:element name="GrandTotalAmount" type="udt:AmountType"/>
+      <xs:element name="TotalPrepaidAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="DuePayableAmount" type="udt:AmountType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementLineMonetarySummationType">
+    <xs:sequence>
+      <xs:element name="LineTotalAmount" type="udt:AmountType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementPaymentMeansType">
+    <xs:sequence>
+      <xs:element name="TypeCode" type="qdt:PaymentMeansCodeType"/>
+      <xs:element name="PayerPartyDebtorFinancialAccount" type="ram:DebtorFinancialAccountType" minOccurs="0"/>
+      <xs:element name="PayeePartyCreditorFinancialAccount" type="ram:CreditorFinancialAccountType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeTaxType">
+    <xs:sequence>
+      <xs:element name="CalculatedAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="TypeCode" type="qdt:TaxTypeCodeType"/>
+      <xs:element name="ExemptionReason" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="BasisAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="CategoryCode" type="qdt:TaxCategoryCodeType"/>
+      <xs:element name="ExemptionReasonCode" type="udt:CodeType" minOccurs="0"/>
+      <xs:element name="DueDateTypeCode" type="qdt:TimeReferenceCodeType" minOccurs="0"/>
+      <xs:element name="RateApplicablePercent" type="udt:PercentType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="UniversalCommunicationType">
+    <xs:sequence>
+      <xs:element name="URIID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd	(revision 8435)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    targetNamespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    elementFormDefault="qualified"
+    version="100.D16B">
+  <xs:complexType name="AmountType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal">
+        <xs:attribute name="currencyID" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="CodeType">
+    <xs:simpleContent>
+      <xs:extension base="xs:token"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="DateTimeType">
+    <xs:choice>
+      <xs:element name="DateTimeString">
+        <xs:complexType>
+          <xs:simpleContent>
+            <xs:extension base="xs:string">
+              <xs:attribute name="format" type="xs:string" use="required"/>
+            </xs:extension>
+          </xs:simpleContent>
+        </xs:complexType>
+      </xs:element>
+    </xs:choice>
+  </xs:complexType>
+  <xs:complexType name="IDType">
+    <xs:simpleContent>
+      <xs:extension base="xs:token">
+        <xs:attribute name="schemeID" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="IndicatorType">
+    <xs:choice>
+      <xs:element name="Indicator" type="xs:boolean"/>
+    </xs:choice>
+  </xs:complexType>
+  <xs:complexType name="PercentType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="QuantityType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal">
+        <xs:attribute name="unitCode" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="TextType">
+    <xs:simpleContent>
+      <xs:extension base="xs:string"/>
+    </xs:simpleContent>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931.xsd	(revision 8435)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
+    elementFormDefault="qualified">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" schemaLocation="FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" schemaLocation="FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:element name="CrossIndustryInvoice" type="rsm:CrossIndustryInvoiceType"/>
+  <xs:complexType name="CrossIndustryInvoiceType">
+    <xs:sequence>
+      <xs:element name="ExchangedDocumentContext" type="ram:ExchangedDocumentContextType"/>
+      <xs:element name="ExchangedDocument" type="ram:ExchangedDocumentType"/>
+      <xs:element name="SupplyChainTradeTransaction" type="ram:SupplyChainTradeTransactionType"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd	(revision 8435)
@@ -0,0 +1,1745 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    elementFormDefault="qualified"
+    version="100.D16B">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:simpleType name="AllowanceChargeReasonCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AA"/>
+      <xs:enumeration value="AAA"/>
+      <xs:enumeration value="AAC"/>
+      <xs:enumeration value="AAD"/>
+      <xs:enumeration value="AAE"/>
+      <xs:enumeration value="AAF"/>
+      <xs:enumeration value="AAH"/>
+      <xs:enumeration value="AAI"/>
+      <xs:enumeration value="AAS"/>
+      <xs:enumeration value="AAT"/>
+      <xs:enumeration value="AAV"/>
+      <xs:enumeration value="AAY"/>
+      <xs:enumeration value="AAZ"/>
+      <xs:enumeration value="ABA"/>
+      <xs:enumeration value="ABB"/>
+      <xs:enumeration value="ABC"/>
+      <xs:enumeration value="ABD"/>
+      <xs:enumeration value="ABF"/>
+      <xs:enumeration value="ABK"/>
+      <xs:enumeration value="ABL"/>
+      <xs:enumeration value="ABN"/>
+      <xs:enumeration value="ABR"/>
+      <xs:enumeration value="ABS"/>
+      <xs:enumeration value="ABT"/>
+      <xs:enumeration value="ABU"/>
+      <xs:enumeration value="ACF"/>
+      <xs:enumeration value="ACG"/>
+      <xs:enumeration value="ACH"/>
+      <xs:enumeration value="ACI"/>
+      <xs:enumeration value="ACJ"/>
+      <xs:enumeration value="ACK"/>
+      <xs:enumeration value="ACL"/>
+      <xs:enumeration value="ACM"/>
+      <xs:enumeration value="ACS"/>
+      <xs:enumeration value="ADC"/>
+      <xs:enumeration value="ADE"/>
+      <xs:enumeration value="ADJ"/>
+      <xs:enumeration value="ADK"/>
+      <xs:enumeration value="ADL"/>
+      <xs:enumeration value="ADM"/>
+      <xs:enumeration value="ADN"/>
+      <xs:enumeration value="ADO"/>
+      <xs:enumeration value="ADP"/>
+      <xs:enumeration value="ADQ"/>
+      <xs:enumeration value="ADR"/>
+      <xs:enumeration value="ADT"/>
+      <xs:enumeration value="ADW"/>
+      <xs:enumeration value="ADY"/>
+      <xs:enumeration value="ADZ"/>
+      <xs:enumeration value="AEA"/>
+      <xs:enumeration value="AEB"/>
+      <xs:enumeration value="AEC"/>
+      <xs:enumeration value="AED"/>
+      <xs:enumeration value="AEF"/>
+      <xs:enumeration value="AEH"/>
+      <xs:enumeration value="AEI"/>
+      <xs:enumeration value="AEJ"/>
+      <xs:enumeration value="AEK"/>
+      <xs:enumeration value="AEL"/>
+      <xs:enumeration value="AEM"/>
+      <xs:enumeration value="AEN"/>
+      <xs:enumeration value="AEO"/>
+      <xs:enumeration value="AEP"/>
+      <xs:enumeration value="AES"/>
+      <xs:enumeration value="AET"/>
+      <xs:enumeration value="AEU"/>
+      <xs:enumeration value="AEV"/>
+      <xs:enumeration value="AEW"/>
+      <xs:enumeration value="AEX"/>
+      <xs:enumeration value="AEY"/>
+      <xs:enumeration value="AEZ"/>
+      <xs:enumeration value="AJ"/>
+      <xs:enumeration value="AU"/>
+      <xs:enumeration value="CA"/>
+      <xs:enumeration value="CAB"/>
+      <xs:enumeration value="CAD"/>
+      <xs:enumeration value="CAE"/>
+      <xs:enumeration value="CAF"/>
+      <xs:enumeration value="CAI"/>
+      <xs:enumeration value="CAJ"/>
+      <xs:enumeration value="CAK"/>
+      <xs:enumeration value="CAL"/>
+      <xs:enumeration value="CAM"/>
+      <xs:enumeration value="CAN"/>
+      <xs:enumeration value="CAO"/>
+      <xs:enumeration value="CAP"/>
+      <xs:enumeration value="CAQ"/>
+      <xs:enumeration value="CAR"/>
+      <xs:enumeration value="CAS"/>
+      <xs:enumeration value="CAT"/>
+      <xs:enumeration value="CAU"/>
+      <xs:enumeration value="CAV"/>
+      <xs:enumeration value="CAW"/>
+      <xs:enumeration value="CAX"/>
+      <xs:enumeration value="CAY"/>
+      <xs:enumeration value="CAZ"/>
+      <xs:enumeration value="CD"/>
+      <xs:enumeration value="CG"/>
+      <xs:enumeration value="CS"/>
+      <xs:enumeration value="CT"/>
+      <xs:enumeration value="DAB"/>
+      <xs:enumeration value="DAC"/>
+      <xs:enumeration value="DAD"/>
+      <xs:enumeration value="DAF"/>
+      <xs:enumeration value="DAG"/>
+      <xs:enumeration value="DAH"/>
+      <xs:enumeration value="DAI"/>
+      <xs:enumeration value="DAJ"/>
+      <xs:enumeration value="DAK"/>
+      <xs:enumeration value="DAL"/>
+      <xs:enumeration value="DAM"/>
+      <xs:enumeration value="DAN"/>
+      <xs:enumeration value="DAO"/>
+      <xs:enumeration value="DAP"/>
+      <xs:enumeration value="DAQ"/>
+      <xs:enumeration value="DL"/>
+      <xs:enumeration value="EG"/>
+      <xs:enumeration value="EP"/>
+      <xs:enumeration value="ER"/>
+      <xs:enumeration value="FAA"/>
+      <xs:enumeration value="FAB"/>
+      <xs:enumeration value="FAC"/>
+      <xs:enumeration value="FC"/>
+      <xs:enumeration value="FH"/>
+      <xs:enumeration value="FI"/>
+      <xs:enumeration value="GAA"/>
+      <xs:enumeration value="HAA"/>
+      <xs:enumeration value="HD"/>
+      <xs:enumeration value="HH"/>
+      <xs:enumeration value="IAA"/>
+      <xs:enumeration value="IAB"/>
+      <xs:enumeration value="ID"/>
+      <xs:enumeration value="IF"/>
+      <xs:enumeration value="IR"/>
+      <xs:enumeration value="IS"/>
+      <xs:enumeration value="KO"/>
+      <xs:enumeration value="L1"/>
+      <xs:enumeration value="LA"/>
+      <xs:enumeration value="LAA"/>
+      <xs:enumeration value="LAB"/>
+      <xs:enumeration value="LF"/>
+      <xs:enumeration value="MAE"/>
+      <xs:enumeration value="MI"/>
+      <xs:enumeration value="ML"/>
+      <xs:enumeration value="NAA"/>
+      <xs:enumeration value="OA"/>
+      <xs:enumeration value="PA"/>
+      <xs:enumeration value="PAA"/>
+      <xs:enumeration value="PC"/>
+      <xs:enumeration value="PL"/>
+      <xs:enumeration value="RAB"/>
+      <xs:enumeration value="RAC"/>
+      <xs:enumeration value="RAD"/>
+      <xs:enumeration value="RAF"/>
+      <xs:enumeration value="RE"/>
+      <xs:enumeration value="RF"/>
+      <xs:enumeration value="RH"/>
+      <xs:enumeration value="RV"/>
+      <xs:enumeration value="SA"/>
+      <xs:enumeration value="SAA"/>
+      <xs:enumeration value="SAD"/>
+      <xs:enumeration value="SAE"/>
+      <xs:enumeration value="SAI"/>
+      <xs:enumeration value="SG"/>
+      <xs:enumeration value="SH"/>
+      <xs:enumeration value="SM"/>
+      <xs:enumeration value="SU"/>
+      <xs:enumeration value="TAB"/>
+      <xs:enumeration value="TAC"/>
+      <xs:enumeration value="TT"/>
+      <xs:enumeration value="TV"/>
+      <xs:enumeration value="V1"/>
+      <xs:enumeration value="V2"/>
+      <xs:enumeration value="WH"/>
+      <xs:enumeration value="XAA"/>
+      <xs:enumeration value="YY"/>
+      <xs:enumeration value="ZZZ"/>
+      <xs:enumeration value="41"/>
+      <xs:enumeration value="42"/>
+      <xs:enumeration value="60"/>
+      <xs:enumeration value="62"/>
+      <xs:enumeration value="63"/>
+      <xs:enumeration value="64"/>
+      <xs:enumeration value="65"/>
+      <xs:enumeration value="66"/>
+      <xs:enumeration value="67"/>
+      <xs:enumeration value="68"/>
+      <xs:enumeration value="70"/>
+      <xs:enumeration value="71"/>
+      <xs:enumeration value="88"/>
+      <xs:enumeration value="95"/>
+      <xs:enumeration value="100"/>
+      <xs:enumeration value="102"/>
+      <xs:enumeration value="103"/>
+      <xs:enumeration value="104"/>
+      <xs:enumeration value="105"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="AllowanceChargeReasonCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:AllowanceChargeReasonCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="CountryIDContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="1A"/>
+      <xs:enumeration value="AD"/>
+      <xs:enumeration value="AE"/>
+      <xs:enumeration value="AF"/>
+      <xs:enumeration value="AG"/>
+      <xs:enumeration value="AI"/>
+      <xs:enumeration value="AL"/>
+      <xs:enumeration value="AM"/>
+      <xs:enumeration value="AO"/>
+      <xs:enumeration value="AQ"/>
+      <xs:enumeration value="AR"/>
+      <xs:enumeration value="AS"/>
+      <xs:enumeration value="AT"/>
+      <xs:enumeration value="AU"/>
+      <xs:enumeration value="AW"/>
+      <xs:enumeration value="AX"/>
+      <xs:enumeration value="AZ"/>
+      <xs:enumeration value="BA"/>
+      <xs:enumeration value="BB"/>
+      <xs:enumeration value="BD"/>
+      <xs:enumeration value="BE"/>
+      <xs:enumeration value="BF"/>
+      <xs:enumeration value="BG"/>
+      <xs:enumeration value="BH"/>
+      <xs:enumeration value="BI"/>
+      <xs:enumeration value="BJ"/>
+      <xs:enumeration value="BL"/>
+      <xs:enumeration value="BM"/>
+      <xs:enumeration value="BN"/>
+      <xs:enumeration value="BO"/>
+      <xs:enumeration value="BQ"/>
+      <xs:enumeration value="BR"/>
+      <xs:enumeration value="BS"/>
+      <xs:enumeration value="BT"/>
+      <xs:enumeration value="BV"/>
+      <xs:enumeration value="BW"/>
+      <xs:enumeration value="BY"/>
+      <xs:enumeration value="BZ"/>
+      <xs:enumeration value="CA"/>
+      <xs:enumeration value="CC"/>
+      <xs:enumeration value="CD"/>
+      <xs:enumeration value="CF"/>
+      <xs:enumeration value="CG"/>
+      <xs:enumeration value="CH"/>
+      <xs:enumeration value="CI"/>
+      <xs:enumeration value="CK"/>
+      <xs:enumeration value="CL"/>
+      <xs:enumeration value="CM"/>
+      <xs:enumeration value="CN"/>
+      <xs:enumeration value="CO"/>
+      <xs:enumeration value="CR"/>
+      <xs:enumeration value="CU"/>
+      <xs:enumeration value="CV"/>
+      <xs:enumeration value="CW"/>
+      <xs:enumeration value="CX"/>
+      <xs:enumeration value="CY"/>
+      <xs:enumeration value="CZ"/>
+      <xs:enumeration value="DE"/>
+      <xs:enumeration value="DJ"/>
+      <xs:enumeration value="DK"/>
+      <xs:enumeration value="DM"/>
+      <xs:enumeration value="DO"/>
+      <xs:enumeration value="DZ"/>
+      <xs:enumeration value="EC"/>
+      <xs:enumeration value="EE"/>
+      <xs:enumeration value="EG"/>
+      <xs:enumeration value="EH"/>
+      <xs:enumeration value="ER"/>
+      <xs:enumeration value="ES"/>
+      <xs:enumeration value="ET"/>
+      <xs:enumeration value="FI"/>
+      <xs:enumeration value="FJ"/>
+      <xs:enumeration value="FK"/>
+      <xs:enumeration value="FM"/>
+      <xs:enumeration value="FO"/>
+      <xs:enumeration value="FR"/>
+      <xs:enumeration value="GA"/>
+      <xs:enumeration value="GB"/>
+      <xs:enumeration value="GD"/>
+      <xs:enumeration value="GE"/>
+      <xs:enumeration value="GF"/>
+      <xs:enumeration value="GG"/>
+      <xs:enumeration value="GH"/>
+      <xs:enumeration value="GI"/>
+      <xs:enumeration value="GL"/>
+      <xs:enumeration value="GM"/>
+      <xs:enumeration value="GN"/>
+      <xs:enumeration value="GP"/>
+      <xs:enumeration value="GQ"/>
+      <xs:enumeration value="GR"/>
+      <xs:enumeration value="GS"/>
+      <xs:enumeration value="GT"/>
+      <xs:enumeration value="GU"/>
+      <xs:enumeration value="GW"/>
+      <xs:enumeration value="GY"/>
+      <xs:enumeration value="HK"/>
+      <xs:enumeration value="HM"/>
+      <xs:enumeration value="HN"/>
+      <xs:enumeration value="HR"/>
+      <xs:enumeration value="HT"/>
+      <xs:enumeration value="HU"/>
+      <xs:enumeration value="ID"/>
+      <xs:enumeration value="IE"/>
+      <xs:enumeration value="IL"/>
+      <xs:enumeration value="IM"/>
+      <xs:enumeration value="IN"/>
+      <xs:enumeration value="IO"/>
+      <xs:enumeration value="IQ"/>
+      <xs:enumeration value="IR"/>
+      <xs:enumeration value="IS"/>
+      <xs:enumeration value="IT"/>
+      <xs:enumeration value="JE"/>
+      <xs:enumeration value="JM"/>
+      <xs:enumeration value="JO"/>
+      <xs:enumeration value="JP"/>
+      <xs:enumeration value="KE"/>
+      <xs:enumeration value="KG"/>
+      <xs:enumeration value="KH"/>
+      <xs:enumeration value="KI"/>
+      <xs:enumeration value="KM"/>
+      <xs:enumeration value="KN"/>
+      <xs:enumeration value="KP"/>
+      <xs:enumeration value="KR"/>
+      <xs:enumeration value="KW"/>
+      <xs:enumeration value="KY"/>
+      <xs:enumeration value="KZ"/>
+      <xs:enumeration value="LA"/>
+      <xs:enumeration value="LB"/>
+      <xs:enumeration value="LC"/>
+      <xs:enumeration value="LI"/>
+      <xs:enumeration value="LK"/>
+      <xs:enumeration value="LR"/>
+      <xs:enumeration value="LS"/>
+      <xs:enumeration value="LT"/>
+      <xs:enumeration value="LU"/>
+      <xs:enumeration value="LV"/>
+      <xs:enumeration value="LY"/>
+      <xs:enumeration value="MA"/>
+      <xs:enumeration value="MC"/>
+      <xs:enumeration value="MD"/>
+      <xs:enumeration value="ME"/>
+      <xs:enumeration value="MF"/>
+      <xs:enumeration value="MG"/>
+      <xs:enumeration value="MH"/>
+      <xs:enumeration value="MK"/>
+      <xs:enumeration value="ML"/>
+      <xs:enumeration value="MM"/>
+      <xs:enumeration value="MN"/>
+      <xs:enumeration value="MO"/>
+      <xs:enumeration value="MP"/>
+      <xs:enumeration value="MQ"/>
+      <xs:enumeration value="MR"/>
+      <xs:enumeration value="MS"/>
+      <xs:enumeration value="MT"/>
+      <xs:enumeration value="MU"/>
+      <xs:enumeration value="MV"/>
+      <xs:enumeration value="MW"/>
+      <xs:enumeration value="MX"/>
+      <xs:enumeration value="MY"/>
+      <xs:enumeration value="MZ"/>
+      <xs:enumeration value="NA"/>
+      <xs:enumeration value="NC"/>
+      <xs:enumeration value="NE"/>
+      <xs:enumeration value="NF"/>
+      <xs:enumeration value="NG"/>
+      <xs:enumeration value="NI"/>
+      <xs:enumeration value="NL"/>
+      <xs:enumeration value="NO"/>
+      <xs:enumeration value="NP"/>
+      <xs:enumeration value="NR"/>
+      <xs:enumeration value="NU"/>
+      <xs:enumeration value="NZ"/>
+      <xs:enumeration value="OM"/>
+      <xs:enumeration value="PA"/>
+      <xs:enumeration value="PE"/>
+      <xs:enumeration value="PF"/>
+      <xs:enumeration value="PG"/>
+      <xs:enumeration value="PH"/>
+      <xs:enumeration value="PK"/>
+      <xs:enumeration value="PL"/>
+      <xs:enumeration value="PM"/>
+      <xs:enumeration value="PN"/>
+      <xs:enumeration value="PR"/>
+      <xs:enumeration value="PS"/>
+      <xs:enumeration value="PT"/>
+      <xs:enumeration value="PW"/>
+      <xs:enumeration value="PY"/>
+      <xs:enumeration value="QA"/>
+      <xs:enumeration value="RE"/>
+      <xs:enumeration value="RO"/>
+      <xs:enumeration value="RS"/>
+      <xs:enumeration value="RU"/>
+      <xs:enumeration value="RW"/>
+      <xs:enumeration value="SA"/>
+      <xs:enumeration value="SB"/>
+      <xs:enumeration value="SC"/>
+      <xs:enumeration value="SD"/>
+      <xs:enumeration value="SE"/>
+      <xs:enumeration value="SG"/>
+      <xs:enumeration value="SH"/>
+      <xs:enumeration value="SI"/>
+      <xs:enumeration value="SJ"/>
+      <xs:enumeration value="SK"/>
+      <xs:enumeration value="SL"/>
+      <xs:enumeration value="SM"/>
+      <xs:enumeration value="SN"/>
+      <xs:enumeration value="SO"/>
+      <xs:enumeration value="SR"/>
+      <xs:enumeration value="SS"/>
+      <xs:enumeration value="ST"/>
+      <xs:enumeration value="SV"/>
+      <xs:enumeration value="SX"/>
+      <xs:enumeration value="SY"/>
+      <xs:enumeration value="SZ"/>
+      <xs:enumeration value="TC"/>
+      <xs:enumeration value="TD"/>
+      <xs:enumeration value="TF"/>
+      <xs:enumeration value="TG"/>
+      <xs:enumeration value="TH"/>
+      <xs:enumeration value="TJ"/>
+      <xs:enumeration value="TK"/>
+      <xs:enumeration value="TL"/>
+      <xs:enumeration value="TM"/>
+      <xs:enumeration value="TN"/>
+      <xs:enumeration value="TO"/>
+      <xs:enumeration value="TR"/>
+      <xs:enumeration value="TT"/>
+      <xs:enumeration value="TV"/>
+      <xs:enumeration value="TW"/>
+      <xs:enumeration value="TZ"/>
+      <xs:enumeration value="UA"/>
+      <xs:enumeration value="UG"/>
+      <xs:enumeration value="UM"/>
+      <xs:enumeration value="US"/>
+      <xs:enumeration value="UY"/>
+      <xs:enumeration value="UZ"/>
+      <xs:enumeration value="VA"/>
+      <xs:enumeration value="VC"/>
+      <xs:enumeration value="VE"/>
+      <xs:enumeration value="VG"/>
+      <xs:enumeration value="VI"/>
+      <xs:enumeration value="VN"/>
+      <xs:enumeration value="VU"/>
+      <xs:enumeration value="WF"/>
+      <xs:enumeration value="WS"/>
+      <xs:enumeration value="XI"/>
+      <xs:enumeration value="YE"/>
+      <xs:enumeration value="YT"/>
+      <xs:enumeration value="ZA"/>
+      <xs:enumeration value="ZM"/>
+      <xs:enumeration value="ZW"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="CountryIDType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:CountryIDContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="CurrencyCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AED"/>
+      <xs:enumeration value="AFN"/>
+      <xs:enumeration value="ALL"/>
+      <xs:enumeration value="AMD"/>
+      <xs:enumeration value="ANG"/>
+      <xs:enumeration value="AOA"/>
+      <xs:enumeration value="ARS"/>
+      <xs:enumeration value="AUD"/>
+      <xs:enumeration value="AWG"/>
+      <xs:enumeration value="AZN"/>
+      <xs:enumeration value="BAM"/>
+      <xs:enumeration value="BBD"/>
+      <xs:enumeration value="BDT"/>
+      <xs:enumeration value="BGN"/>
+      <xs:enumeration value="BHD"/>
+      <xs:enumeration value="BIF"/>
+      <xs:enumeration value="BMD"/>
+      <xs:enumeration value="BND"/>
+      <xs:enumeration value="BOB"/>
+      <xs:enumeration value="BOV"/>
+      <xs:enumeration value="BRL"/>
+      <xs:enumeration value="BSD"/>
+      <xs:enumeration value="BTN"/>
+      <xs:enumeration value="BWP"/>
+      <xs:enumeration value="BYN"/>
+      <xs:enumeration value="BZD"/>
+      <xs:enumeration value="CAD"/>
+      <xs:enumeration value="CDF"/>
+      <xs:enumeration value="CHE"/>
+      <xs:enumeration value="CHF"/>
+      <xs:enumeration value="CHW"/>
+      <xs:enumeration value="CLF"/>
+      <xs:enumeration value="CLP"/>
+      <xs:enumeration value="CNY"/>
+      <xs:enumeration value="COP"/>
+      <xs:enumeration value="COU"/>
+      <xs:enumeration value="CRC"/>
+      <xs:enumeration value="CUC"/>
+      <xs:enumeration value="CUP"/>
+      <xs:enumeration value="CVE"/>
+      <xs:enumeration value="CZK"/>
+      <xs:enumeration value="DJF"/>
+      <xs:enumeration value="DKK"/>
+      <xs:enumeration value="DOP"/>
+      <xs:enumeration value="DZD"/>
+      <xs:enumeration value="EGP"/>
+      <xs:enumeration value="ERN"/>
+      <xs:enumeration value="ETB"/>
+      <xs:enumeration value="EUR"/>
+      <xs:enumeration value="FJD"/>
+      <xs:enumeration value="FKP"/>
+      <xs:enumeration value="GBP"/>
+      <xs:enumeration value="GEL"/>
+      <xs:enumeration value="GHS"/>
+      <xs:enumeration value="GIP"/>
+      <xs:enumeration value="GMD"/>
+      <xs:enumeration value="GNF"/>
+      <xs:enumeration value="GTQ"/>
+      <xs:enumeration value="GYD"/>
+      <xs:enumeration value="HKD"/>
+      <xs:enumeration value="HNL"/>
+      <xs:enumeration value="HRK"/>
+      <xs:enumeration value="HTG"/>
+      <xs:enumeration value="HUF"/>
+      <xs:enumeration value="IDR"/>
+      <xs:enumeration value="ILS"/>
+      <xs:enumeration value="INR"/>
+      <xs:enumeration value="IQD"/>
+      <xs:enumeration value="IRR"/>
+      <xs:enumeration value="ISK"/>
+      <xs:enumeration value="JMD"/>
+      <xs:enumeration value="JOD"/>
+      <xs:enumeration value="JPY"/>
+      <xs:enumeration value="KES"/>
+      <xs:enumeration value="KGS"/>
+      <xs:enumeration value="KHR"/>
+      <xs:enumeration value="KMF"/>
+      <xs:enumeration value="KPW"/>
+      <xs:enumeration value="KRW"/>
+      <xs:enumeration value="KWD"/>
+      <xs:enumeration value="KYD"/>
+      <xs:enumeration value="KZT"/>
+      <xs:enumeration value="LAK"/>
+      <xs:enumeration value="LBP"/>
+      <xs:enumeration value="LKR"/>
+      <xs:enumeration value="LRD"/>
+      <xs:enumeration value="LSL"/>
+      <xs:enumeration value="LYD"/>
+      <xs:enumeration value="MAD"/>
+      <xs:enumeration value="MDL"/>
+      <xs:enumeration value="MGA"/>
+      <xs:enumeration value="MKD"/>
+      <xs:enumeration value="MMK"/>
+      <xs:enumeration value="MNT"/>
+      <xs:enumeration value="MOP"/>
+      <xs:enumeration value="MRU"/>
+      <xs:enumeration value="MUR"/>
+      <xs:enumeration value="MVR"/>
+      <xs:enumeration value="MWK"/>
+      <xs:enumeration value="MXN"/>
+      <xs:enumeration value="MXV"/>
+      <xs:enumeration value="MYR"/>
+      <xs:enumeration value="MZN"/>
+      <xs:enumeration value="NAD"/>
+      <xs:enumeration value="NGN"/>
+      <xs:enumeration value="NIO"/>
+      <xs:enumeration value="NOK"/>
+      <xs:enumeration value="NPR"/>
+      <xs:enumeration value="NZD"/>
+      <xs:enumeration value="OMR"/>
+      <xs:enumeration value="PAB"/>
+      <xs:enumeration value="PEN"/>
+      <xs:enumeration value="PGK"/>
+      <xs:enumeration value="PHP"/>
+      <xs:enumeration value="PKR"/>
+      <xs:enumeration value="PLN"/>
+      <xs:enumeration value="PYG"/>
+      <xs:enumeration value="QAR"/>
+      <xs:enumeration value="RON"/>
+      <xs:enumeration value="RSD"/>
+      <xs:enumeration value="RUB"/>
+      <xs:enumeration value="RWF"/>
+      <xs:enumeration value="SAR"/>
+      <xs:enumeration value="SBD"/>
+      <xs:enumeration value="SCR"/>
+      <xs:enumeration value="SDG"/>
+      <xs:enumeration value="SEK"/>
+      <xs:enumeration value="SGD"/>
+      <xs:enumeration value="SHP"/>
+      <xs:enumeration value="SLL"/>
+      <xs:enumeration value="SOS"/>
+      <xs:enumeration value="SRD"/>
+      <xs:enumeration value="SSP"/>
+      <xs:enumeration value="STN"/>
+      <xs:enumeration value="SVC"/>
+      <xs:enumeration value="SYP"/>
+      <xs:enumeration value="SZL"/>
+      <xs:enumeration value="THB"/>
+      <xs:enumeration value="TJS"/>
+      <xs:enumeration value="TMT"/>
+      <xs:enumeration value="TND"/>
+      <xs:enumeration value="TOP"/>
+      <xs:enumeration value="TRY"/>
+      <xs:enumeration value="TTD"/>
+      <xs:enumeration value="TWD"/>
+      <xs:enumeration value="TZS"/>
+      <xs:enumeration value="UAH"/>
+      <xs:enumeration value="UGX"/>
+      <xs:enumeration value="USD"/>
+      <xs:enumeration value="USN"/>
+      <xs:enumeration value="UYI"/>
+      <xs:enumeration value="UYU"/>
+      <xs:enumeration value="UYW"/>
+      <xs:enumeration value="UZS"/>
+      <xs:enumeration value="VES"/>
+      <xs:enumeration value="VND"/>
+      <xs:enumeration value="VUV"/>
+      <xs:enumeration value="WST"/>
+      <xs:enumeration value="XAF"/>
+      <xs:enumeration value="XAG"/>
+      <xs:enumeration value="XAU"/>
+      <xs:enumeration value="XBA"/>
+      <xs:enumeration value="XBB"/>
+      <xs:enumeration value="XBC"/>
+      <xs:enumeration value="XBD"/>
+      <xs:enumeration value="XCD"/>
+      <xs:enumeration value="XDR"/>
+      <xs:enumeration value="XOF"/>
+      <xs:enumeration value="XPD"/>
+      <xs:enumeration value="XPF"/>
+      <xs:enumeration value="XPT"/>
+      <xs:enumeration value="XSU"/>
+      <xs:enumeration value="XTS"/>
+      <xs:enumeration value="XUA"/>
+      <xs:enumeration value="XXX"/>
+      <xs:enumeration value="YER"/>
+      <xs:enumeration value="ZAR"/>
+      <xs:enumeration value="ZMW"/>
+      <xs:enumeration value="ZWL"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="CurrencyCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:CurrencyCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="DocumentCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="50"/>
+      <xs:enumeration value="80"/>
+      <xs:enumeration value="81"/>
+      <xs:enumeration value="82"/>
+      <xs:enumeration value="83"/>
+      <xs:enumeration value="84"/>
+      <xs:enumeration value="130"/>
+      <xs:enumeration value="202"/>
+      <xs:enumeration value="203"/>
+      <xs:enumeration value="204"/>
+      <xs:enumeration value="211"/>
+      <xs:enumeration value="261"/>
+      <xs:enumeration value="262"/>
+      <xs:enumeration value="295"/>
+      <xs:enumeration value="296"/>
+      <xs:enumeration value="308"/>
+      <xs:enumeration value="325"/>
+      <xs:enumeration value="326"/>
+      <xs:enumeration value="380"/>
+      <xs:enumeration value="381"/>
+      <xs:enumeration value="383"/>
+      <xs:enumeration value="384"/>
+      <xs:enumeration value="385"/>
+      <xs:enumeration value="386"/>
+      <xs:enumeration value="387"/>
+      <xs:enumeration value="388"/>
+      <xs:enumeration value="389"/>
+      <xs:enumeration value="390"/>
+      <xs:enumeration value="393"/>
+      <xs:enumeration value="394"/>
+      <xs:enumeration value="395"/>
+      <xs:enumeration value="396"/>
+      <xs:enumeration value="420"/>
+      <xs:enumeration value="456"/>
+      <xs:enumeration value="457"/>
+      <xs:enumeration value="458"/>
+      <xs:enumeration value="527"/>
+      <xs:enumeration value="575"/>
+      <xs:enumeration value="623"/>
+      <xs:enumeration value="633"/>
+      <xs:enumeration value="751"/>
+      <xs:enumeration value="780"/>
+      <xs:enumeration value="875"/>
+      <xs:enumeration value="876"/>
+      <xs:enumeration value="877"/>
+      <xs:enumeration value="916"/>
+      <xs:enumeration value="935"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="DocumentCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:DocumentCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="FormattedDateTimeFormatContentType">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:complexType name="FormattedDateTimeType">
+    <xs:sequence>
+      <xs:element name="DateTimeString">
+        <xs:complexType>
+          <xs:simpleContent>
+            <xs:extension base="xs:string">
+              <xs:attribute name="format" type="qdt:FormattedDateTimeFormatContentType" use="required"/>
+            </xs:extension>
+          </xs:simpleContent>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:simpleType name="PaymentMeansCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="1"/>
+      <xs:enumeration value="2"/>
+      <xs:enumeration value="3"/>
+      <xs:enumeration value="4"/>
+      <xs:enumeration value="5"/>
+      <xs:enumeration value="6"/>
+      <xs:enumeration value="7"/>
+      <xs:enumeration value="8"/>
+      <xs:enumeration value="9"/>
+      <xs:enumeration value="10"/>
+      <xs:enumeration value="11"/>
+      <xs:enumeration value="12"/>
+      <xs:enumeration value="13"/>
+      <xs:enumeration value="14"/>
+      <xs:enumeration value="15"/>
+      <xs:enumeration value="16"/>
+      <xs:enumeration value="17"/>
+      <xs:enumeration value="18"/>
+      <xs:enumeration value="19"/>
+      <xs:enumeration value="20"/>
+      <xs:enumeration value="21"/>
+      <xs:enumeration value="22"/>
+      <xs:enumeration value="23"/>
+      <xs:enumeration value="24"/>
+      <xs:enumeration value="25"/>
+      <xs:enumeration value="26"/>
+      <xs:enumeration value="27"/>
+      <xs:enumeration value="28"/>
+      <xs:enumeration value="29"/>
+      <xs:enumeration value="30"/>
+      <xs:enumeration value="31"/>
+      <xs:enumeration value="32"/>
+      <xs:enumeration value="33"/>
+      <xs:enumeration value="34"/>
+      <xs:enumeration value="35"/>
+      <xs:enumeration value="36"/>
+      <xs:enumeration value="37"/>
+      <xs:enumeration value="38"/>
+      <xs:enumeration value="39"/>
+      <xs:enumeration value="40"/>
+      <xs:enumeration value="41"/>
+      <xs:enumeration value="42"/>
+      <xs:enumeration value="43"/>
+      <xs:enumeration value="44"/>
+      <xs:enumeration value="45"/>
+      <xs:enumeration value="46"/>
+      <xs:enumeration value="47"/>
+      <xs:enumeration value="48"/>
+      <xs:enumeration value="49"/>
+      <xs:enumeration value="50"/>
+      <xs:enumeration value="51"/>
+      <xs:enumeration value="52"/>
+      <xs:enumeration value="53"/>
+      <xs:enumeration value="54"/>
+      <xs:enumeration value="55"/>
+      <xs:enumeration value="56"/>
+      <xs:enumeration value="57"/>
+      <xs:enumeration value="58"/>
+      <xs:enumeration value="59"/>
+      <xs:enumeration value="60"/>
+      <xs:enumeration value="61"/>
+      <xs:enumeration value="62"/>
+      <xs:enumeration value="63"/>
+      <xs:enumeration value="64"/>
+      <xs:enumeration value="65"/>
+      <xs:enumeration value="66"/>
+      <xs:enumeration value="67"/>
+      <xs:enumeration value="68"/>
+      <xs:enumeration value="69"/>
+      <xs:enumeration value="70"/>
+      <xs:enumeration value="74"/>
+      <xs:enumeration value="75"/>
+      <xs:enumeration value="76"/>
+      <xs:enumeration value="77"/>
+      <xs:enumeration value="78"/>
+      <xs:enumeration value="91"/>
+      <xs:enumeration value="92"/>
+      <xs:enumeration value="93"/>
+      <xs:enumeration value="94"/>
+      <xs:enumeration value="95"/>
+      <xs:enumeration value="96"/>
+      <xs:enumeration value="97"/>
+      <xs:enumeration value="ZZZ"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="PaymentMeansCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:PaymentMeansCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="ReferenceCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AAA"/>
+      <xs:enumeration value="AAB"/>
+      <xs:enumeration value="AAC"/>
+      <xs:enumeration value="AAD"/>
+      <xs:enumeration value="AAE"/>
+      <xs:enumeration value="AAF"/>
+      <xs:enumeration value="AAG"/>
+      <xs:enumeration value="AAH"/>
+      <xs:enumeration value="AAI"/>
+      <xs:enumeration value="AAJ"/>
+      <xs:enumeration value="AAK"/>
+      <xs:enumeration value="AAL"/>
+      <xs:enumeration value="AAM"/>
+      <xs:enumeration value="AAN"/>
+      <xs:enumeration value="AAO"/>
+      <xs:enumeration value="AAP"/>
+      <xs:enumeration value="AAQ"/>
+      <xs:enumeration value="AAR"/>
+      <xs:enumeration value="AAS"/>
+      <xs:enumeration value="AAT"/>
+      <xs:enumeration value="AAU"/>
+      <xs:enumeration value="AAV"/>
+      <xs:enumeration value="AAW"/>
+      <xs:enumeration value="AAX"/>
+      <xs:enumeration value="AAY"/>
+      <xs:enumeration value="AAZ"/>
+      <xs:enumeration value="ABA"/>
+      <xs:enumeration value="ABB"/>
+      <xs:enumeration value="ABC"/>
+      <xs:enumeration value="ABD"/>
+      <xs:enumeration value="ABE"/>
+      <xs:enumeration value="ABF"/>
+      <xs:enumeration value="ABG"/>
+      <xs:enumeration value="ABH"/>
+      <xs:enumeration value="ABI"/>
+      <xs:enumeration value="ABJ"/>
+      <xs:enumeration value="ABK"/>
+      <xs:enumeration value="ABL"/>
+      <xs:enumeration value="ABM"/>
+      <xs:enumeration value="ABN"/>
+      <xs:enumeration value="ABO"/>
+      <xs:enumeration value="ABP"/>
+      <xs:enumeration value="ABQ"/>
+      <xs:enumeration value="ABR"/>
+      <xs:enumeration value="ABS"/>
+      <xs:enumeration value="ABT"/>
+      <xs:enumeration value="ABU"/>
+      <xs:enumeration value="ABV"/>
+      <xs:enumeration value="ABW"/>
+      <xs:enumeration value="ABX"/>
+      <xs:enumeration value="ABY"/>
+      <xs:enumeration value="ABZ"/>
+      <xs:enumeration value="AC"/>
+      <xs:enumeration value="ACA"/>
+      <xs:enumeration value="ACB"/>
+      <xs:enumeration value="ACC"/>
+      <xs:enumeration value="ACD"/>
+      <xs:enumeration value="ACE"/>
+      <xs:enumeration value="ACF"/>
+      <xs:enumeration value="ACG"/>
+      <xs:enumeration value="ACH"/>
+      <xs:enumeration value="ACI"/>
+      <xs:enumeration value="ACJ"/>
+      <xs:enumeration value="ACK"/>
+      <xs:enumeration value="ACL"/>
+      <xs:enumeration value="ACN"/>
+      <xs:enumeration value="ACO"/>
+      <xs:enumeration value="ACP"/>
+      <xs:enumeration value="ACQ"/>
+      <xs:enumeration value="ACR"/>
+      <xs:enumeration value="ACT"/>
+      <xs:enumeration value="ACU"/>
+      <xs:enumeration value="ACV"/>
+      <xs:enumeration value="ACW"/>
+      <xs:enumeration value="ACX"/>
+      <xs:enumeration value="ACY"/>
+      <xs:enumeration value="ACZ"/>
+      <xs:enumeration value="ADA"/>
+      <xs:enumeration value="ADB"/>
+      <xs:enumeration value="ADC"/>
+      <xs:enumeration value="ADD"/>
+      <xs:enumeration value="ADE"/>
+      <xs:enumeration value="ADF"/>
+      <xs:enumeration value="ADG"/>
+      <xs:enumeration value="ADI"/>
+      <xs:enumeration value="ADJ"/>
+      <xs:enumeration value="ADK"/>
+      <xs:enumeration value="ADL"/>
+      <xs:enumeration value="ADM"/>
+      <xs:enumeration value="ADN"/>
+      <xs:enumeration value="ADO"/>
+      <xs:enumeration value="ADP"/>
+      <xs:enumeration value="ADQ"/>
+      <xs:enumeration value="ADT"/>
+      <xs:enumeration value="ADU"/>
+      <xs:enumeration value="ADV"/>
+      <xs:enumeration value="ADW"/>
+      <xs:enumeration value="ADX"/>
+      <xs:enumeration value="ADY"/>
+      <xs:enumeration value="ADZ"/>
+      <xs:enumeration value="AE"/>
+      <xs:enumeration value="AEA"/>
+      <xs:enumeration value="AEB"/>
+      <xs:enumeration value="AEC"/>
+      <xs:enumeration value="AED"/>
+      <xs:enumeration value="AEE"/>
+      <xs:enumeration value="AEF"/>
+      <xs:enumeration value="AEG"/>
+      <xs:enumeration value="AEH"/>
+      <xs:enumeration value="AEI"/>
+      <xs:enumeration value="AEJ"/>
+      <xs:enumeration value="AEK"/>
+      <xs:enumeration value="AEL"/>
+      <xs:enumeration value="AEM"/>
+      <xs:enumeration value="AEN"/>
+      <xs:enumeration value="AEO"/>
+      <xs:enumeration value="AEP"/>
+      <xs:enumeration value="AEQ"/>
+      <xs:enumeration value="AER"/>
+      <xs:enumeration value="AES"/>
+      <xs:enumeration value="AET"/>
+      <xs:enumeration value="AEU"/>
+      <xs:enumeration value="AEV"/>
+      <xs:enumeration value="AEW"/>
+      <xs:enumeration value="AEX"/>
+      <xs:enumeration value="AEY"/>
+      <xs:enumeration value="AEZ"/>
+      <xs:enumeration value="AF"/>
+      <xs:enumeration value="AFA"/>
+      <xs:enumeration value="AFB"/>
+      <xs:enumeration value="AFC"/>
+      <xs:enumeration value="AFD"/>
+      <xs:enumeration value="AFE"/>
+      <xs:enumeration value="AFF"/>
+      <xs:enumeration value="AFG"/>
+      <xs:enumeration value="AFH"/>
+      <xs:enumeration value="AFI"/>
+      <xs:enumeration value="AFJ"/>
+      <xs:enumeration value="AFK"/>
+      <xs:enumeration value="AFL"/>
+      <xs:enumeration value="AFM"/>
+      <xs:enumeration value="AFN"/>
+      <xs:enumeration value="AFO"/>
+      <xs:enumeration value="AFP"/>
+      <xs:enumeration value="AFQ"/>
+      <xs:enumeration value="AFR"/>
+      <xs:enumeration value="AFS"/>
+      <xs:enumeration value="AFT"/>
+      <xs:enumeration value="AFU"/>
+      <xs:enumeration value="AFV"/>
+      <xs:enumeration value="AFW"/>
+      <xs:enumeration value="AFX"/>
+      <xs:enumeration value="AFY"/>
+      <xs:enumeration value="AFZ"/>
+      <xs:enumeration value="AGA"/>
+      <xs:enumeration value="AGB"/>
+      <xs:enumeration value="AGC"/>
+      <xs:enumeration value="AGD"/>
+      <xs:enumeration value="AGE"/>
+      <xs:enumeration value="AGF"/>
+      <xs:enumeration value="AGG"/>
+      <xs:enumeration value="AGH"/>
+      <xs:enumeration value="AGI"/>
+      <xs:enumeration value="AGJ"/>
+      <xs:enumeration value="AGK"/>
+      <xs:enumeration value="AGL"/>
+      <xs:enumeration value="AGM"/>
+      <xs:enumeration value="AGN"/>
+      <xs:enumeration value="AGO"/>
+      <xs:enumeration value="AGP"/>
+      <xs:enumeration value="AGQ"/>
+      <xs:enumeration value="AGR"/>
+      <xs:enumeration value="AGS"/>
+      <xs:enumeration value="AGT"/>
+      <xs:enumeration value="AGU"/>
+      <xs:enumeration value="AGV"/>
+      <xs:enumeration value="AGW"/>
+      <xs:enumeration value="AGX"/>
+      <xs:enumeration value="AGY"/>
+      <xs:enumeration value="AGZ"/>
+      <xs:enumeration value="AHA"/>
+      <xs:enumeration value="AHB"/>
+      <xs:enumeration value="AHC"/>
+      <xs:enumeration value="AHD"/>
+      <xs:enumeration value="AHE"/>
+      <xs:enumeration value="AHF"/>
+      <xs:enumeration value="AHG"/>
+      <xs:enumeration value="AHH"/>
+      <xs:enumeration value="AHI"/>
+      <xs:enumeration value="AHJ"/>
+      <xs:enumeration value="AHK"/>
+      <xs:enumeration value="AHL"/>
+      <xs:enumeration value="AHM"/>
+      <xs:enumeration value="AHN"/>
+      <xs:enumeration value="AHO"/>
+      <xs:enumeration value="AHP"/>
+      <xs:enumeration value="AHQ"/>
+      <xs:enumeration value="AHR"/>
+      <xs:enumeration value="AHS"/>
+      <xs:enumeration value="AHT"/>
+      <xs:enumeration value="AHU"/>
+      <xs:enumeration value="AHV"/>
+      <xs:enumeration value="AHX"/>
+      <xs:enumeration value="AHY"/>
+      <xs:enumeration value="AHZ"/>
+      <xs:enumeration value="AIA"/>
+      <xs:enumeration value="AIB"/>
+      <xs:enumeration value="AIC"/>
+      <xs:enumeration value="AID"/>
+      <xs:enumeration value="AIE"/>
+      <xs:enumeration value="AIF"/>
+      <xs:enumeration value="AIG"/>
+      <xs:enumeration value="AIH"/>
+      <xs:enumeration value="AII"/>
+      <xs:enumeration value="AIJ"/>
+      <xs:enumeration value="AIK"/>
+      <xs:enumeration value="AIL"/>
+      <xs:enumeration value="AIM"/>
+      <xs:enumeration value="AIN"/>
+      <xs:enumeration value="AIO"/>
+      <xs:enumeration value="AIP"/>
+      <xs:enumeration value="AIQ"/>
+      <xs:enumeration value="AIR"/>
+      <xs:enumeration value="AIS"/>
+      <xs:enumeration value="AIT"/>
+      <xs:enumeration value="AIU"/>
+      <xs:enumeration value="AIV"/>
+      <xs:enumeration value="AIW"/>
+      <xs:enumeration value="AIX"/>
+      <xs:enumeration value="AIY"/>
+      <xs:enumeration value="AIZ"/>
+      <xs:enumeration value="AJA"/>
+      <xs:enumeration value="AJB"/>
+      <xs:enumeration value="AJC"/>
+      <xs:enumeration value="AJD"/>
+      <xs:enumeration value="AJE"/>
+      <xs:enumeration value="AJF"/>
+      <xs:enumeration value="AJG"/>
+      <xs:enumeration value="AJH"/>
+      <xs:enumeration value="AJI"/>
+      <xs:enumeration value="AJJ"/>
+      <xs:enumeration value="AJK"/>
+      <xs:enumeration value="AJL"/>
+      <xs:enumeration value="AJM"/>
+      <xs:enumeration value="AJN"/>
+      <xs:enumeration value="AJO"/>
+      <xs:enumeration value="AJP"/>
+      <xs:enumeration value="AJQ"/>
+      <xs:enumeration value="AJR"/>
+      <xs:enumeration value="AJS"/>
+      <xs:enumeration value="AJT"/>
+      <xs:enumeration value="AJU"/>
+      <xs:enumeration value="AJV"/>
+      <xs:enumeration value="AJW"/>
+      <xs:enumeration value="AJX"/>
+      <xs:enumeration value="AJY"/>
+      <xs:enumeration value="AJZ"/>
+      <xs:enumeration value="AKA"/>
+      <xs:enumeration value="AKB"/>
+      <xs:enumeration value="AKC"/>
+      <xs:enumeration value="AKD"/>
+      <xs:enumeration value="AKE"/>
+      <xs:enumeration value="AKF"/>
+      <xs:enumeration value="AKG"/>
+      <xs:enumeration value="AKH"/>
+      <xs:enumeration value="AKI"/>
+      <xs:enumeration value="AKJ"/>
+      <xs:enumeration value="AKK"/>
+      <xs:enumeration value="AKL"/>
+      <xs:enumeration value="AKM"/>
+      <xs:enumeration value="AKN"/>
+      <xs:enumeration value="AKO"/>
+      <xs:enumeration value="AKP"/>
+      <xs:enumeration value="AKQ"/>
+      <xs:enumeration value="AKR"/>
+      <xs:enumeration value="AKS"/>
+      <xs:enumeration value="AKT"/>
+      <xs:enumeration value="AKU"/>
+      <xs:enumeration value="AKV"/>
+      <xs:enumeration value="AKW"/>
+      <xs:enumeration value="AKX"/>
+      <xs:enumeration value="AKY"/>
+      <xs:enumeration value="AKZ"/>
+      <xs:enumeration value="ALA"/>
+      <xs:enumeration value="ALB"/>
+      <xs:enumeration value="ALC"/>
+      <xs:enumeration value="ALD"/>
+      <xs:enumeration value="ALE"/>
+      <xs:enumeration value="ALF"/>
+      <xs:enumeration value="ALG"/>
+      <xs:enumeration value="ALH"/>
+      <xs:enumeration value="ALI"/>
+      <xs:enumeration value="ALJ"/>
+      <xs:enumeration value="ALK"/>
+      <xs:enumeration value="ALL"/>
+      <xs:enumeration value="ALM"/>
+      <xs:enumeration value="ALN"/>
+      <xs:enumeration value="ALO"/>
+      <xs:enumeration value="ALP"/>
+      <xs:enumeration value="ALQ"/>
+      <xs:enumeration value="ALR"/>
+      <xs:enumeration value="ALS"/>
+      <xs:enumeration value="ALT"/>
+      <xs:enumeration value="ALU"/>
+      <xs:enumeration value="ALV"/>
+      <xs:enumeration value="ALW"/>
+      <xs:enumeration value="ALX"/>
+      <xs:enumeration value="ALY"/>
+      <xs:enumeration value="ALZ"/>
+      <xs:enumeration value="AMA"/>
+      <xs:enumeration value="AMB"/>
+      <xs:enumeration value="AMC"/>
+      <xs:enumeration value="AMD"/>
+      <xs:enumeration value="AME"/>
+      <xs:enumeration value="AMF"/>
+      <xs:enumeration value="AMG"/>
+      <xs:enumeration value="AMH"/>
+      <xs:enumeration value="AMI"/>
+      <xs:enumeration value="AMJ"/>
+      <xs:enumeration value="AMK"/>
+      <xs:enumeration value="AML"/>
+      <xs:enumeration value="AMM"/>
+      <xs:enumeration value="AMN"/>
+      <xs:enumeration value="AMO"/>
+      <xs:enumeration value="AMP"/>
+      <xs:enumeration value="AMQ"/>
+      <xs:enumeration value="AMR"/>
+      <xs:enumeration value="AMS"/>
+      <xs:enumeration value="AMT"/>
+      <xs:enumeration value="AMU"/>
+      <xs:enumeration value="AMV"/>
+      <xs:enumeration value="AMW"/>
+      <xs:enumeration value="AMX"/>
+      <xs:enumeration value="AMY"/>
+      <xs:enumeration value="AMZ"/>
+      <xs:enumeration value="ANA"/>
+      <xs:enumeration value="ANB"/>
+      <xs:enumeration value="ANC"/>
+      <xs:enumeration value="AND"/>
+      <xs:enumeration value="ANE"/>
+      <xs:enumeration value="ANF"/>
+      <xs:enumeration value="ANG"/>
+      <xs:enumeration value="ANH"/>
+      <xs:enumeration value="ANI"/>
+      <xs:enumeration value="ANJ"/>
+      <xs:enumeration value="ANK"/>
+      <xs:enumeration value="ANL"/>
+      <xs:enumeration value="ANM"/>
+      <xs:enumeration value="ANN"/>
+      <xs:enumeration value="ANO"/>
+      <xs:enumeration value="ANP"/>
+      <xs:enumeration value="ANQ"/>
+      <xs:enumeration value="ANR"/>
+      <xs:enumeration value="ANS"/>
+      <xs:enumeration value="ANT"/>
+      <xs:enumeration value="ANU"/>
+      <xs:enumeration value="ANV"/>
+      <xs:enumeration value="ANW"/>
+      <xs:enumeration value="ANX"/>
+      <xs:enumeration value="ANY"/>
+      <xs:enumeration value="AOA"/>
+      <xs:enumeration value="AOD"/>
+      <xs:enumeration value="AOE"/>
+      <xs:enumeration value="AOF"/>
+      <xs:enumeration value="AOG"/>
+      <xs:enumeration value="AOH"/>
+      <xs:enumeration value="AOI"/>
+      <xs:enumeration value="AOJ"/>
+      <xs:enumeration value="AOK"/>
+      <xs:enumeration value="AOL"/>
+      <xs:enumeration value="AOM"/>
+      <xs:enumeration value="AON"/>
+      <xs:enumeration value="AOO"/>
+      <xs:enumeration value="AOP"/>
+      <xs:enumeration value="AOQ"/>
+      <xs:enumeration value="AOR"/>
+      <xs:enumeration value="AOS"/>
+      <xs:enumeration value="AOT"/>
+      <xs:enumeration value="AOU"/>
+      <xs:enumeration value="AOV"/>
+      <xs:enumeration value="AOW"/>
+      <xs:enumeration value="AOX"/>
+      <xs:enumeration value="AOY"/>
+      <xs:enumeration value="AOZ"/>
+      <xs:enumeration value="AP"/>
+      <xs:enumeration value="APA"/>
+      <xs:enumeration value="APB"/>
+      <xs:enumeration value="APC"/>
+      <xs:enumeration value="APD"/>
+      <xs:enumeration value="APE"/>
+      <xs:enumeration value="APF"/>
+      <xs:enumeration value="APG"/>
+      <xs:enumeration value="APH"/>
+      <xs:enumeration value="API"/>
+      <xs:enumeration value="APJ"/>
+      <xs:enumeration value="APK"/>
+      <xs:enumeration value="APL"/>
+      <xs:enumeration value="APM"/>
+      <xs:enumeration value="APN"/>
+      <xs:enumeration value="APO"/>
+      <xs:enumeration value="APP"/>
+      <xs:enumeration value="APQ"/>
+      <xs:enumeration value="APR"/>
+      <xs:enumeration value="APS"/>
+      <xs:enumeration value="APT"/>
+      <xs:enumeration value="APU"/>
+      <xs:enumeration value="APV"/>
+      <xs:enumeration value="APW"/>
+      <xs:enumeration value="APX"/>
+      <xs:enumeration value="APY"/>
+      <xs:enumeration value="APZ"/>
+      <xs:enumeration value="AQA"/>
+      <xs:enumeration value="AQB"/>
+      <xs:enumeration value="AQC"/>
+      <xs:enumeration value="AQD"/>
+      <xs:enumeration value="AQE"/>
+      <xs:enumeration value="AQF"/>
+      <xs:enumeration value="AQG"/>
+      <xs:enumeration value="AQH"/>
+      <xs:enumeration value="AQI"/>
+      <xs:enumeration value="AQJ"/>
+      <xs:enumeration value="AQK"/>
+      <xs:enumeration value="AQL"/>
+      <xs:enumeration value="AQM"/>
+      <xs:enumeration value="AQN"/>
+      <xs:enumeration value="AQO"/>
+      <xs:enumeration value="AQP"/>
+      <xs:enumeration value="AQQ"/>
+      <xs:enumeration value="AQR"/>
+      <xs:enumeration value="AQS"/>
+      <xs:enumeration value="AQT"/>
+      <xs:enumeration value="AQU"/>
+      <xs:enumeration value="AQV"/>
+      <xs:enumeration value="AQW"/>
+      <xs:enumeration value="AQX"/>
+      <xs:enumeration value="AQY"/>
+      <xs:enumeration value="AQZ"/>
+      <xs:enumeration value="ARA"/>
+      <xs:enumeration value="ARB"/>
+      <xs:enumeration value="ARC"/>
+      <xs:enumeration value="ARD"/>
+      <xs:enumeration value="ARE"/>
+      <xs:enumeration value="ARF"/>
+      <xs:enumeration value="ARG"/>
+      <xs:enumeration value="ARH"/>
+      <xs:enumeration value="ARI"/>
+      <xs:enumeration value="ARJ"/>
+      <xs:enumeration value="ARK"/>
+      <xs:enumeration value="ARL"/>
+      <xs:enumeration value="ARM"/>
+      <xs:enumeration value="ARN"/>
+      <xs:enumeration value="ARO"/>
+      <xs:enumeration value="ARP"/>
+      <xs:enumeration value="ARQ"/>
+      <xs:enumeration value="ARR"/>
+      <xs:enumeration value="ARS"/>
+      <xs:enumeration value="ART"/>
+      <xs:enumeration value="ARU"/>
+      <xs:enumeration value="ARV"/>
+      <xs:enumeration value="ARW"/>
+      <xs:enumeration value="ARX"/>
+      <xs:enumeration value="ARY"/>
+      <xs:enumeration value="ARZ"/>
+      <xs:enumeration value="ASA"/>
+      <xs:enumeration value="ASB"/>
+      <xs:enumeration value="ASC"/>
+      <xs:enumeration value="ASD"/>
+      <xs:enumeration value="ASE"/>
+      <xs:enumeration value="ASF"/>
+      <xs:enumeration value="ASG"/>
+      <xs:enumeration value="ASH"/>
+      <xs:enumeration value="ASI"/>
+      <xs:enumeration value="ASJ"/>
+      <xs:enumeration value="ASK"/>
+      <xs:enumeration value="ASL"/>
+      <xs:enumeration value="ASM"/>
+      <xs:enumeration value="ASN"/>
+      <xs:enumeration value="ASO"/>
+      <xs:enumeration value="ASP"/>
+      <xs:enumeration value="ASQ"/>
+      <xs:enumeration value="ASR"/>
+      <xs:enumeration value="ASS"/>
+      <xs:enumeration value="AST"/>
+      <xs:enumeration value="ASU"/>
+      <xs:enumeration value="ASV"/>
+      <xs:enumeration value="ASW"/>
+      <xs:enumeration value="ASX"/>
+      <xs:enumeration value="ASY"/>
+      <xs:enumeration value="ASZ"/>
+      <xs:enumeration value="ATA"/>
+      <xs:enumeration value="ATB"/>
+      <xs:enumeration value="ATC"/>
+      <xs:enumeration value="ATD"/>
+      <xs:enumeration value="ATE"/>
+      <xs:enumeration value="ATF"/>
+      <xs:enumeration value="ATG"/>
+      <xs:enumeration value="ATH"/>
+      <xs:enumeration value="ATI"/>
+      <xs:enumeration value="ATJ"/>
+      <xs:enumeration value="ATK"/>
+      <xs:enumeration value="ATL"/>
+      <xs:enumeration value="ATM"/>
+      <xs:enumeration value="ATN"/>
+      <xs:enumeration value="ATO"/>
+      <xs:enumeration value="ATP"/>
+      <xs:enumeration value="ATQ"/>
+      <xs:enumeration value="ATR"/>
+      <xs:enumeration value="ATS"/>
+      <xs:enumeration value="ATT"/>
+      <xs:enumeration value="ATU"/>
+      <xs:enumeration value="ATV"/>
+      <xs:enumeration value="ATW"/>
+      <xs:enumeration value="ATX"/>
+      <xs:enumeration value="ATY"/>
+      <xs:enumeration value="ATZ"/>
+      <xs:enumeration value="AU"/>
+      <xs:enumeration value="AUA"/>
+      <xs:enumeration value="AUB"/>
+      <xs:enumeration value="AUC"/>
+      <xs:enumeration value="AUD"/>
+      <xs:enumeration value="AUE"/>
+      <xs:enumeration value="AUF"/>
+      <xs:enumeration value="AUG"/>
+      <xs:enumeration value="AUH"/>
+      <xs:enumeration value="AUI"/>
+      <xs:enumeration value="AUJ"/>
+      <xs:enumeration value="AUK"/>
+      <xs:enumeration value="AUL"/>
+      <xs:enumeration value="AUM"/>
+      <xs:enumeration value="AUN"/>
+      <xs:enumeration value="AUO"/>
+      <xs:enumeration value="AUP"/>
+      <xs:enumeration value="AUQ"/>
+      <xs:enumeration value="AUR"/>
+      <xs:enumeration value="AUS"/>
+      <xs:enumeration value="AUT"/>
+      <xs:enumeration value="AUU"/>
+      <xs:enumeration value="AUV"/>
+      <xs:enumeration value="AUW"/>
+      <xs:enumeration value="AUX"/>
+      <xs:enumeration value="AUY"/>
+      <xs:enumeration value="AUZ"/>
+      <xs:enumeration value="AV"/>
+      <xs:enumeration value="AVA"/>
+      <xs:enumeration value="AVB"/>
+      <xs:enumeration value="AVC"/>
+      <xs:enumeration value="AVD"/>
+      <xs:enumeration value="AVE"/>
+      <xs:enumeration value="AVF"/>
+      <xs:enumeration value="AVG"/>
+      <xs:enumeration value="AVH"/>
+      <xs:enumeration value="AVI"/>
+      <xs:enumeration value="AVJ"/>
+      <xs:enumeration value="AVK"/>
+      <xs:enumeration value="AVL"/>
+      <xs:enumeration value="AVM"/>
+      <xs:enumeration value="AVN"/>
+      <xs:enumeration value="AVO"/>
+      <xs:enumeration value="AVP"/>
+      <xs:enumeration value="AVQ"/>
+      <xs:enumeration value="AVR"/>
+      <xs:enumeration value="AVS"/>
+      <xs:enumeration value="AVT"/>
+      <xs:enumeration value="AVU"/>
+      <xs:enumeration value="AVV"/>
+      <xs:enumeration value="AVW"/>
+      <xs:enumeration value="AVX"/>
+      <xs:enumeration value="AVY"/>
+      <xs:enumeration value="AVZ"/>
+      <xs:enumeration value="AWA"/>
+      <xs:enumeration value="AWB"/>
+      <xs:enumeration value="AWC"/>
+      <xs:enumeration value="AWD"/>
+      <xs:enumeration value="AWE"/>
+      <xs:enumeration value="AWF"/>
+      <xs:enumeration value="AWG"/>
+      <xs:enumeration value="AWH"/>
+      <xs:enumeration value="AWI"/>
+      <xs:enumeration value="AWJ"/>
+      <xs:enumeration value="AWK"/>
+      <xs:enumeration value="AWL"/>
+      <xs:enumeration value="AWM"/>
+      <xs:enumeration value="AWN"/>
+      <xs:enumeration value="AWO"/>
+      <xs:enumeration value="AWP"/>
+      <xs:enumeration value="AWQ"/>
+      <xs:enumeration value="AWR"/>
+      <xs:enumeration value="AWS"/>
+      <xs:enumeration value="AWT"/>
+      <xs:enumeration value="AWU"/>
+      <xs:enumeration value="AWV"/>
+      <xs:enumeration value="AWW"/>
+      <xs:enumeration value="AWX"/>
+      <xs:enumeration value="AWY"/>
+      <xs:enumeration value="AWZ"/>
+      <xs:enumeration value="AXA"/>
+      <xs:enumeration value="AXB"/>
+      <xs:enumeration value="AXC"/>
+      <xs:enumeration value="AXD"/>
+      <xs:enumeration value="AXE"/>
+      <xs:enumeration value="AXF"/>
+      <xs:enumeration value="AXG"/>
+      <xs:enumeration value="AXH"/>
+      <xs:enumeration value="AXI"/>
+      <xs:enumeration value="AXJ"/>
+      <xs:enumeration value="AXK"/>
+      <xs:enumeration value="AXL"/>
+      <xs:enumeration value="AXM"/>
+      <xs:enumeration value="AXN"/>
+      <xs:enumeration value="AXO"/>
+      <xs:enumeration value="AXP"/>
+      <xs:enumeration value="AXQ"/>
+      <xs:enumeration value="AXR"/>
+      <xs:enumeration value="AXS"/>
+      <xs:enumeration value="BA"/>
+      <xs:enumeration value="BC"/>
+      <xs:enumeration value="BD"/>
+      <xs:enumeration value="BE"/>
+      <xs:enumeration value="BH"/>
+      <xs:enumeration value="BM"/>
+      <xs:enumeration value="BN"/>
+      <xs:enumeration value="BO"/>
+      <xs:enumeration value="BR"/>
+      <xs:enumeration value="BT"/>
+      <xs:enumeration value="BTP"/>
+      <xs:enumeration value="BW"/>
+      <xs:enumeration value="CAS"/>
+      <xs:enumeration value="CAT"/>
+      <xs:enumeration value="CAU"/>
+      <xs:enumeration value="CAV"/>
+      <xs:enumeration value="CAW"/>
+      <xs:enumeration value="CAX"/>
+      <xs:enumeration value="CAY"/>
+      <xs:enumeration value="CAZ"/>
+      <xs:enumeration value="CBA"/>
+      <xs:enumeration value="CBB"/>
+      <xs:enumeration value="CD"/>
+      <xs:enumeration value="CEC"/>
+      <xs:enumeration value="CED"/>
+      <xs:enumeration value="CFE"/>
+      <xs:enumeration value="CFF"/>
+      <xs:enumeration value="CFO"/>
+      <xs:enumeration value="CG"/>
+      <xs:enumeration value="CH"/>
+      <xs:enumeration value="CK"/>
+      <xs:enumeration value="CKN"/>
+      <xs:enumeration value="CM"/>
+      <xs:enumeration value="CMR"/>
+      <xs:enumeration value="CN"/>
+      <xs:enumeration value="CNO"/>
+      <xs:enumeration value="COF"/>
+      <xs:enumeration value="CP"/>
+      <xs:enumeration value="CR"/>
+      <xs:enumeration value="CRN"/>
+      <xs:enumeration value="CS"/>
+      <xs:enumeration value="CST"/>
+      <xs:enumeration value="CT"/>
+      <xs:enumeration value="CU"/>
+      <xs:enumeration value="CV"/>
+      <xs:enumeration value="CW"/>
+      <xs:enumeration value="CZ"/>
+      <xs:enumeration value="DA"/>
+      <xs:enumeration value="DAN"/>
+      <xs:enumeration value="DB"/>
+      <xs:enumeration value="DI"/>
+      <xs:enumeration value="DL"/>
+      <xs:enumeration value="DM"/>
+      <xs:enumeration value="DQ"/>
+      <xs:enumeration value="DR"/>
+      <xs:enumeration value="EA"/>
+      <xs:enumeration value="EB"/>
+      <xs:enumeration value="ED"/>
+      <xs:enumeration value="EE"/>
+      <xs:enumeration value="EEP"/>
+      <xs:enumeration value="EI"/>
+      <xs:enumeration value="EN"/>
+      <xs:enumeration value="EQ"/>
+      <xs:enumeration value="ER"/>
+      <xs:enumeration value="ERN"/>
+      <xs:enumeration value="ET"/>
+      <xs:enumeration value="EX"/>
+      <xs:enumeration value="FC"/>
+      <xs:enumeration value="FF"/>
+      <xs:enumeration value="FI"/>
+      <xs:enumeration value="FLW"/>
+      <xs:enumeration value="FN"/>
+      <xs:enumeration value="FO"/>
+      <xs:enumeration value="FS"/>
+      <xs:enumeration value="FT"/>
+      <xs:enumeration value="FV"/>
+      <xs:enumeration value="FX"/>
+      <xs:enumeration value="GA"/>
+      <xs:enumeration value="GC"/>
+      <xs:enumeration value="GD"/>
+      <xs:enumeration value="GDN"/>
+      <xs:enumeration value="GN"/>
+      <xs:enumeration value="HS"/>
+      <xs:enumeration value="HWB"/>
+      <xs:enumeration value="IA"/>
+      <xs:enumeration value="IB"/>
+      <xs:enumeration value="ICA"/>
+      <xs:enumeration value="ICE"/>
+      <xs:enumeration value="ICO"/>
+      <xs:enumeration value="II"/>
+      <xs:enumeration value="IL"/>
+      <xs:enumeration value="INB"/>
+      <xs:enumeration value="INN"/>
+      <xs:enumeration value="INO"/>
+      <xs:enumeration value="IP"/>
+      <xs:enumeration value="IS"/>
+      <xs:enumeration value="IT"/>
+      <xs:enumeration value="IV"/>
+      <xs:enumeration value="JB"/>
+      <xs:enumeration value="JE"/>
+      <xs:enumeration value="LA"/>
+      <xs:enumeration value="LAN"/>
+      <xs:enumeration value="LAR"/>
+      <xs:enumeration value="LB"/>
+      <xs:enumeration value="LC"/>
+      <xs:enumeration value="LI"/>
+      <xs:enumeration value="LO"/>
+      <xs:enumeration value="LRC"/>
+      <xs:enumeration value="LS"/>
+      <xs:enumeration value="MA"/>
+      <xs:enumeration value="MB"/>
+      <xs:enumeration value="MF"/>
+      <xs:enumeration value="MG"/>
+      <xs:enumeration value="MH"/>
+      <xs:enumeration value="MR"/>
+      <xs:enumeration value="MRN"/>
+      <xs:enumeration value="MS"/>
+      <xs:enumeration value="MSS"/>
+      <xs:enumeration value="MWB"/>
+      <xs:enumeration value="NA"/>
+      <xs:enumeration value="NF"/>
+      <xs:enumeration value="OH"/>
+      <xs:enumeration value="OI"/>
+      <xs:enumeration value="ON"/>
+      <xs:enumeration value="OP"/>
+      <xs:enumeration value="OR"/>
+      <xs:enumeration value="PB"/>
+      <xs:enumeration value="PC"/>
+      <xs:enumeration value="PD"/>
+      <xs:enumeration value="PE"/>
+      <xs:enumeration value="PF"/>
+      <xs:enumeration value="PI"/>
+      <xs:enumeration value="PK"/>
+      <xs:enumeration value="PL"/>
+      <xs:enumeration value="POR"/>
+      <xs:enumeration value="PP"/>
+      <xs:enumeration value="PQ"/>
+      <xs:enumeration value="PR"/>
+      <xs:enumeration value="PS"/>
+      <xs:enumeration value="PW"/>
+      <xs:enumeration value="PY"/>
+      <xs:enumeration value="RA"/>
+      <xs:enumeration value="RC"/>
+      <xs:enumeration value="RCN"/>
+      <xs:enumeration value="RE"/>
+      <xs:enumeration value="REN"/>
+      <xs:enumeration value="RF"/>
+      <xs:enumeration value="RR"/>
+      <xs:enumeration value="RT"/>
+      <xs:enumeration value="SA"/>
+      <xs:enumeration value="SB"/>
+      <xs:enumeration value="SD"/>
+      <xs:enumeration value="SE"/>
+      <xs:enumeration value="SEA"/>
+      <xs:enumeration value="SF"/>
+      <xs:enumeration value="SH"/>
+      <xs:enumeration value="SI"/>
+      <xs:enumeration value="SM"/>
+      <xs:enumeration value="SN"/>
+      <xs:enumeration value="SP"/>
+      <xs:enumeration value="SQ"/>
+      <xs:enumeration value="SRN"/>
+      <xs:enumeration value="SS"/>
+      <xs:enumeration value="STA"/>
+      <xs:enumeration value="SW"/>
+      <xs:enumeration value="SZ"/>
+      <xs:enumeration value="TB"/>
+      <xs:enumeration value="TCR"/>
+      <xs:enumeration value="TE"/>
+      <xs:enumeration value="TF"/>
+      <xs:enumeration value="TI"/>
+      <xs:enumeration value="TIN"/>
+      <xs:enumeration value="TL"/>
+      <xs:enumeration value="TN"/>
+      <xs:enumeration value="TP"/>
+      <xs:enumeration value="UAR"/>
+      <xs:enumeration value="UC"/>
+      <xs:enumeration value="UCN"/>
+      <xs:enumeration value="UN"/>
+      <xs:enumeration value="UO"/>
+      <xs:enumeration value="URI"/>
+      <xs:enumeration value="VA"/>
+      <xs:enumeration value="VC"/>
+      <xs:enumeration value="VGR"/>
+      <xs:enumeration value="VM"/>
+      <xs:enumeration value="VN"/>
+      <xs:enumeration value="VON"/>
+      <xs:enumeration value="VOR"/>
+      <xs:enumeration value="VP"/>
+      <xs:enumeration value="VR"/>
+      <xs:enumeration value="VS"/>
+      <xs:enumeration value="VT"/>
+      <xs:enumeration value="VV"/>
+      <xs:enumeration value="WE"/>
+      <xs:enumeration value="WM"/>
+      <xs:enumeration value="WN"/>
+      <xs:enumeration value="WR"/>
+      <xs:enumeration value="WS"/>
+      <xs:enumeration value="WY"/>
+      <xs:enumeration value="XA"/>
+      <xs:enumeration value="XC"/>
+      <xs:enumeration value="XP"/>
+      <xs:enumeration value="ZZZ"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="ReferenceCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:ReferenceCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="TaxCategoryCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AE"/>
+      <xs:enumeration value="E"/>
+      <xs:enumeration value="G"/>
+      <xs:enumeration value="K"/>
+      <xs:enumeration value="L"/>
+      <xs:enumeration value="M"/>
+      <xs:enumeration value="O"/>
+      <xs:enumeration value="S"/>
+      <xs:enumeration value="Z"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="TaxCategoryCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:TaxCategoryCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="TaxTypeCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AAA"/>
+      <xs:enumeration value="AAB"/>
+      <xs:enumeration value="AAC"/>
+      <xs:enumeration value="AAD"/>
+      <xs:enumeration value="AAE"/>
+      <xs:enumeration value="AAF"/>
+      <xs:enumeration value="AAG"/>
+      <xs:enumeration value="AAH"/>
+      <xs:enumeration value="AAI"/>
+      <xs:enumeration value="AAJ"/>
+      <xs:enumeration value="AAK"/>
+      <xs:enumeration value="AAL"/>
+      <xs:enumeration value="AAM"/>
+      <xs:enumeration value="ADD"/>
+      <xs:enumeration value="BOL"/>
+      <xs:enumeration value="CAP"/>
+      <xs:enumeration value="CAR"/>
+      <xs:enumeration value="COC"/>
+      <xs:enumeration value="CST"/>
+      <xs:enumeration value="CUD"/>
+      <xs:enumeration value="CVD"/>
+      <xs:enumeration value="ENV"/>
+      <xs:enumeration value="EXC"/>
+      <xs:enumeration value="EXP"/>
+      <xs:enumeration value="FET"/>
+      <xs:enumeration value="FRE"/>
+      <xs:enumeration value="GCN"/>
+      <xs:enumeration value="GST"/>
+      <xs:enumeration value="ILL"/>
+      <xs:enumeration value="IMP"/>
+      <xs:enumeration value="IND"/>
+      <xs:enumeration value="LAC"/>
+      <xs:enumeration value="LCN"/>
+      <xs:enumeration value="LDP"/>
+      <xs:enumeration value="LOC"/>
+      <xs:enumeration value="LST"/>
+      <xs:enumeration value="MCA"/>
+      <xs:enumeration value="MCD"/>
+      <xs:enumeration value="OTH"/>
+      <xs:enumeration value="PDB"/>
+      <xs:enumeration value="PDC"/>
+      <xs:enumeration value="PRF"/>
+      <xs:enumeration value="SCN"/>
+      <xs:enumeration value="SSS"/>
+      <xs:enumeration value="STT"/>
+      <xs:enumeration value="SUP"/>
+      <xs:enumeration value="SUR"/>
+      <xs:enumeration value="SWT"/>
+      <xs:enumeration value="TAC"/>
+      <xs:enumeration value="TOT"/>
+      <xs:enumeration value="TOX"/>
+      <xs:enumeration value="TTA"/>
+      <xs:enumeration value="VAD"/>
+      <xs:enumeration value="VAT"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="TaxTypeCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:TaxTypeCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="TimeReferenceCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="5"/>
+      <xs:enumeration value="29"/>
+      <xs:enumeration value="72"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="TimeReferenceCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:TimeReferenceCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd	(revision 8435)
@@ -0,0 +1,318 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    elementFormDefault="qualified">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" schemaLocation="FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:complexType name="CreditorFinancialAccountType">
+    <xs:sequence>
+      <xs:element name="IBANID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="AccountName" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="ProprietaryID" type="udt:IDType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="CreditorFinancialInstitutionType">
+    <xs:sequence>
+      <xs:element name="BICID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DebtorFinancialAccountType">
+    <xs:sequence>
+      <xs:element name="IBANID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DocumentContextParameterType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DocumentLineDocumentType">
+    <xs:sequence>
+      <xs:element name="LineID" type="udt:IDType"/>
+      <xs:element name="IncludedNote" type="ram:NoteType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ExchangedDocumentContextType">
+    <xs:sequence>
+      <xs:element name="BusinessProcessSpecifiedDocumentContextParameter" type="ram:DocumentContextParameterType" minOccurs="0"/>
+      <xs:element name="GuidelineSpecifiedDocumentContextParameter" type="ram:DocumentContextParameterType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ExchangedDocumentType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+      <xs:element name="TypeCode" type="qdt:DocumentCodeType"/>
+      <xs:element name="IssueDateTime" type="udt:DateTimeType"/>
+      <xs:element name="IncludedNote" type="ram:NoteType" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeAgreementType">
+    <xs:sequence>
+      <xs:element name="BuyerReference" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="SellerTradeParty" type="ram:TradePartyType"/>
+      <xs:element name="BuyerTradeParty" type="ram:TradePartyType"/>
+      <xs:element name="SellerTaxRepresentativeTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="SellerOrderReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="BuyerOrderReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="ContractReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="AdditionalReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="SpecifiedProcuringProject" type="ram:ProcuringProjectType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeDeliveryType">
+    <xs:sequence>
+      <xs:element name="ShipToTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="ActualDeliverySupplyChainEvent" type="ram:SupplyChainEventType" minOccurs="0"/>
+      <xs:element name="DespatchAdviceReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="ReceivingAdviceReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeSettlementType">
+    <xs:sequence>
+      <xs:element name="CreditorReferenceID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="PaymentReference" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="TaxCurrencyCode" type="qdt:CurrencyCodeType" minOccurs="0"/>
+      <xs:element name="InvoiceCurrencyCode" type="qdt:CurrencyCodeType"/>
+      <xs:element name="PayeeTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeSettlementPaymentMeans" type="ram:TradeSettlementPaymentMeansType" minOccurs="0"/>
+      <xs:element name="ApplicableTradeTax" type="ram:TradeTaxType" maxOccurs="unbounded"/>
+      <xs:element name="BillingSpecifiedPeriod" type="ram:SpecifiedPeriodType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeAllowanceCharge" type="ram:TradeAllowanceChargeType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="SpecifiedTradePaymentTerms" type="ram:TradePaymentTermsType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeSettlementHeaderMonetarySummation" type="ram:TradeSettlementHeaderMonetarySummationType"/>
+      <xs:element name="InvoiceReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="ReceivableSpecifiedTradeAccountingAccount" type="ram:TradeAccountingAccountType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LegalOrganizationType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="TradingBusinessName" type="udt:TextType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LineTradeAgreementType">
+    <xs:sequence>
+      <xs:element name="BuyerOrderReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="GrossPriceProductTradePrice" type="ram:TradePriceType" minOccurs="0"/>
+      <xs:element name="NetPriceProductTradePrice" type="ram:TradePriceType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LineTradeDeliveryType">
+    <xs:sequence>
+      <xs:element name="BilledQuantity" type="udt:QuantityType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LineTradeSettlementType">
+    <xs:sequence>
+      <xs:element name="ApplicableTradeTax" type="ram:TradeTaxType"/>
+      <xs:element name="BillingSpecifiedPeriod" type="ram:SpecifiedPeriodType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeAllowanceCharge" type="ram:TradeAllowanceChargeType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="SpecifiedTradeSettlementLineMonetarySummation" type="ram:TradeSettlementLineMonetarySummationType"/>
+      <xs:element name="AdditionalReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="ReceivableSpecifiedTradeAccountingAccount" type="ram:TradeAccountingAccountType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="NoteType">
+    <xs:sequence>
+      <xs:element name="Content" type="udt:TextType"/>
+      <xs:element name="SubjectCode" type="udt:CodeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ProcuringProjectType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+      <xs:element name="Name" type="udt:TextType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ProductCharacteristicType">
+    <xs:sequence>
+      <xs:element name="Description" type="udt:TextType"/>
+      <xs:element name="Value" type="udt:TextType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ProductClassificationType">
+    <xs:sequence>
+      <xs:element name="ClassCode" type="udt:CodeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ReferencedDocumentType">
+    <xs:sequence>
+      <xs:element name="IssuerAssignedID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="URIID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="LineID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="TypeCode" type="qdt:DocumentCodeType" minOccurs="0"/>
+      <xs:element name="Name" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="AttachmentBinaryObject" type="udt:BinaryObjectType" minOccurs="0"/>
+      <xs:element name="ReferenceTypeCode" type="qdt:ReferenceCodeType" minOccurs="0"/>
+      <xs:element name="FormattedIssueDateTime" type="qdt:FormattedDateTimeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SpecifiedPeriodType">
+    <xs:sequence>
+      <xs:element name="StartDateTime" type="udt:DateTimeType" minOccurs="0"/>
+      <xs:element name="EndDateTime" type="udt:DateTimeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SupplyChainEventType">
+    <xs:sequence>
+      <xs:element name="OccurrenceDateTime" type="udt:DateTimeType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SupplyChainTradeLineItemType">
+    <xs:sequence>
+      <xs:element name="AssociatedDocumentLineDocument" type="ram:DocumentLineDocumentType"/>
+      <xs:element name="SpecifiedTradeProduct" type="ram:TradeProductType"/>
+      <xs:element name="SpecifiedLineTradeAgreement" type="ram:LineTradeAgreementType"/>
+      <xs:element name="SpecifiedLineTradeDelivery" type="ram:LineTradeDeliveryType"/>
+      <xs:element name="SpecifiedLineTradeSettlement" type="ram:LineTradeSettlementType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SupplyChainTradeTransactionType">
+    <xs:sequence>
+      <xs:element name="IncludedSupplyChainTradeLineItem" type="ram:SupplyChainTradeLineItemType" maxOccurs="unbounded"/>
+      <xs:element name="ApplicableHeaderTradeAgreement" type="ram:HeaderTradeAgreementType"/>
+      <xs:element name="ApplicableHeaderTradeDelivery" type="ram:HeaderTradeDeliveryType"/>
+      <xs:element name="ApplicableHeaderTradeSettlement" type="ram:HeaderTradeSettlementType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TaxRegistrationType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeAccountingAccountType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeAddressType">
+    <xs:sequence>
+      <xs:element name="PostcodeCode" type="udt:CodeType" minOccurs="0"/>
+      <xs:element name="LineOne" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="LineTwo" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="LineThree" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="CityName" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="CountryID" type="qdt:CountryIDType"/>
+      <xs:element name="CountrySubDivisionName" type="udt:TextType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeAllowanceChargeType">
+    <xs:sequence>
+      <xs:element name="ChargeIndicator" type="udt:IndicatorType"/>
+      <xs:element name="CalculationPercent" type="udt:PercentType" minOccurs="0"/>
+      <xs:element name="BasisAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="ActualAmount" type="udt:AmountType"/>
+      <xs:element name="ReasonCode" type="qdt:AllowanceChargeReasonCodeType" minOccurs="0"/>
+      <xs:element name="Reason" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="CategoryTradeTax" type="ram:TradeTaxType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeContactType">
+    <xs:sequence>
+      <xs:element name="PersonName" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="DepartmentName" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="TelephoneUniversalCommunication" type="ram:UniversalCommunicationType" minOccurs="0"/>
+      <xs:element name="EmailURIUniversalCommunication" type="ram:UniversalCommunicationType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeCountryType">
+    <xs:sequence>
+      <xs:element name="ID" type="qdt:CountryIDType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePartyType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="GlobalID" type="udt:IDType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="Name" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="Description" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="SpecifiedLegalOrganization" type="ram:LegalOrganizationType" minOccurs="0"/>
+      <xs:element name="DefinedTradeContact" type="ram:TradeContactType" minOccurs="0"/>
+      <xs:element name="PostalTradeAddress" type="ram:TradeAddressType" minOccurs="0"/>
+      <xs:element name="URIUniversalCommunication" type="ram:UniversalCommunicationType" minOccurs="0"/>
+      <xs:element name="SpecifiedTaxRegistration" type="ram:TaxRegistrationType" minOccurs="0" maxOccurs="2"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePaymentTermsType">
+    <xs:sequence>
+      <xs:element name="Description" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="DueDateDateTime" type="udt:DateTimeType" minOccurs="0"/>
+      <xs:element name="DirectDebitMandateID" type="udt:IDType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePriceType">
+    <xs:sequence>
+      <xs:element name="ChargeAmount" type="udt:AmountType"/>
+      <xs:element name="BasisQuantity" type="udt:QuantityType" minOccurs="0"/>
+      <xs:element name="AppliedTradeAllowanceCharge" type="ram:TradeAllowanceChargeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeProductType">
+    <xs:sequence>
+      <xs:element name="GlobalID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="SellerAssignedID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="BuyerAssignedID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="Name" type="udt:TextType"/>
+      <xs:element name="Description" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="ApplicableProductCharacteristic" type="ram:ProductCharacteristicType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="DesignatedProductClassification" type="ram:ProductClassificationType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="OriginTradeCountry" type="ram:TradeCountryType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementFinancialCardType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+      <xs:element name="CardholderName" type="udt:TextType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementHeaderMonetarySummationType">
+    <xs:sequence>
+      <xs:element name="LineTotalAmount" type="udt:AmountType"/>
+      <xs:element name="ChargeTotalAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="AllowanceTotalAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="TaxBasisTotalAmount" type="udt:AmountType"/>
+      <xs:element name="TaxTotalAmount" type="udt:AmountType" minOccurs="0" maxOccurs="2"/>
+      <xs:element name="RoundingAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="GrandTotalAmount" type="udt:AmountType"/>
+      <xs:element name="TotalPrepaidAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="DuePayableAmount" type="udt:AmountType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementLineMonetarySummationType">
+    <xs:sequence>
+      <xs:element name="LineTotalAmount" type="udt:AmountType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementPaymentMeansType">
+    <xs:sequence>
+      <xs:element name="TypeCode" type="qdt:PaymentMeansCodeType"/>
+      <xs:element name="Information" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="ApplicableTradeSettlementFinancialCard" type="ram:TradeSettlementFinancialCardType" minOccurs="0"/>
+      <xs:element name="PayerPartyDebtorFinancialAccount" type="ram:DebtorFinancialAccountType" minOccurs="0"/>
+      <xs:element name="PayeePartyCreditorFinancialAccount" type="ram:CreditorFinancialAccountType" minOccurs="0"/>
+      <xs:element name="PayeeSpecifiedCreditorFinancialInstitution" type="ram:CreditorFinancialInstitutionType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeTaxType">
+    <xs:sequence>
+      <xs:element name="CalculatedAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="TypeCode" type="qdt:TaxTypeCodeType"/>
+      <xs:element name="ExemptionReason" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="BasisAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="CategoryCode" type="qdt:TaxCategoryCodeType"/>
+      <xs:element name="ExemptionReasonCode" type="udt:CodeType" minOccurs="0"/>
+      <xs:element name="TaxPointDate" type="udt:DateType" minOccurs="0"/>
+      <xs:element name="DueDateTypeCode" type="qdt:TimeReferenceCodeType" minOccurs="0"/>
+      <xs:element name="RateApplicablePercent" type="udt:PercentType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="UniversalCommunicationType">
+    <xs:sequence>
+      <xs:element name="URIID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="CompleteNumber" type="udt:TextType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd	(revision 8435)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    targetNamespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    elementFormDefault="qualified"
+    version="100.D16B">
+  <xs:complexType name="AmountType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal">
+        <xs:attribute name="currencyID" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="BinaryObjectType">
+    <xs:simpleContent>
+      <xs:extension base="xs:base64Binary">
+        <xs:attribute name="mimeCode" type="xs:token" use="required"/>
+        <xs:attribute name="filename" type="xs:string" use="required"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="CodeType">
+    <xs:simpleContent>
+      <xs:extension base="xs:token">
+        <xs:attribute name="listID" type="xs:token" use="optional"/>
+        <xs:attribute name="listVersionID" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="DateTimeType">
+    <xs:choice>
+      <xs:element name="DateTimeString">
+        <xs:complexType>
+          <xs:simpleContent>
+            <xs:extension base="xs:string">
+              <xs:attribute name="format" type="xs:string" use="required"/>
+            </xs:extension>
+          </xs:simpleContent>
+        </xs:complexType>
+      </xs:element>
+    </xs:choice>
+  </xs:complexType>
+  <xs:complexType name="DateType">
+    <xs:choice>
+      <xs:element name="DateString">
+        <xs:complexType>
+          <xs:simpleContent>
+            <xs:extension base="xs:string">
+              <xs:attribute name="format" type="xs:string" use="required"/>
+            </xs:extension>
+          </xs:simpleContent>
+        </xs:complexType>
+      </xs:element>
+    </xs:choice>
+  </xs:complexType>
+  <xs:complexType name="IDType">
+    <xs:simpleContent>
+      <xs:extension base="xs:token">
+        <xs:attribute name="schemeID" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="IndicatorType">
+    <xs:choice>
+      <xs:element name="Indicator" type="xs:boolean"/>
+    </xs:choice>
+  </xs:complexType>
+  <xs:complexType name="PercentType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="QuantityType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal">
+        <xs:attribute name="unitCode" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="TextType">
+    <xs:simpleContent>
+      <xs:extension base="xs:string"/>
+    </xs:simpleContent>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED.xsd	(revision 8435)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
+    elementFormDefault="qualified">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" schemaLocation="FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" schemaLocation="FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:element name="CrossIndustryInvoice" type="rsm:CrossIndustryInvoiceType"/>
+  <xs:complexType name="CrossIndustryInvoiceType">
+    <xs:sequence>
+      <xs:element name="ExchangedDocumentContext" type="ram:ExchangedDocumentContextType"/>
+      <xs:element name="ExchangedDocument" type="ram:ExchangedDocumentType"/>
+      <xs:element name="SupplyChainTradeTransaction" type="ram:SupplyChainTradeTransactionType"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd	(revision 8435)
@@ -0,0 +1,2575 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    elementFormDefault="qualified"
+    version="100.D16B">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:simpleType name="AccountingAccountTypeCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="1"/>
+      <xs:enumeration value="2"/>
+      <xs:enumeration value="3"/>
+      <xs:enumeration value="4"/>
+      <xs:enumeration value="5"/>
+      <xs:enumeration value="6"/>
+      <xs:enumeration value="7"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="AccountingAccountTypeCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:AccountingAccountTypeCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="AllowanceChargeReasonCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AA"/>
+      <xs:enumeration value="AAA"/>
+      <xs:enumeration value="AAC"/>
+      <xs:enumeration value="AAD"/>
+      <xs:enumeration value="AAE"/>
+      <xs:enumeration value="AAF"/>
+      <xs:enumeration value="AAH"/>
+      <xs:enumeration value="AAI"/>
+      <xs:enumeration value="AAS"/>
+      <xs:enumeration value="AAT"/>
+      <xs:enumeration value="AAV"/>
+      <xs:enumeration value="AAY"/>
+      <xs:enumeration value="AAZ"/>
+      <xs:enumeration value="ABA"/>
+      <xs:enumeration value="ABB"/>
+      <xs:enumeration value="ABC"/>
+      <xs:enumeration value="ABD"/>
+      <xs:enumeration value="ABF"/>
+      <xs:enumeration value="ABK"/>
+      <xs:enumeration value="ABL"/>
+      <xs:enumeration value="ABN"/>
+      <xs:enumeration value="ABR"/>
+      <xs:enumeration value="ABS"/>
+      <xs:enumeration value="ABT"/>
+      <xs:enumeration value="ABU"/>
+      <xs:enumeration value="ACF"/>
+      <xs:enumeration value="ACG"/>
+      <xs:enumeration value="ACH"/>
+      <xs:enumeration value="ACI"/>
+      <xs:enumeration value="ACJ"/>
+      <xs:enumeration value="ACK"/>
+      <xs:enumeration value="ACL"/>
+      <xs:enumeration value="ACM"/>
+      <xs:enumeration value="ACS"/>
+      <xs:enumeration value="ADC"/>
+      <xs:enumeration value="ADE"/>
+      <xs:enumeration value="ADJ"/>
+      <xs:enumeration value="ADK"/>
+      <xs:enumeration value="ADL"/>
+      <xs:enumeration value="ADM"/>
+      <xs:enumeration value="ADN"/>
+      <xs:enumeration value="ADO"/>
+      <xs:enumeration value="ADP"/>
+      <xs:enumeration value="ADQ"/>
+      <xs:enumeration value="ADR"/>
+      <xs:enumeration value="ADT"/>
+      <xs:enumeration value="ADW"/>
+      <xs:enumeration value="ADY"/>
+      <xs:enumeration value="ADZ"/>
+      <xs:enumeration value="AEA"/>
+      <xs:enumeration value="AEB"/>
+      <xs:enumeration value="AEC"/>
+      <xs:enumeration value="AED"/>
+      <xs:enumeration value="AEF"/>
+      <xs:enumeration value="AEH"/>
+      <xs:enumeration value="AEI"/>
+      <xs:enumeration value="AEJ"/>
+      <xs:enumeration value="AEK"/>
+      <xs:enumeration value="AEL"/>
+      <xs:enumeration value="AEM"/>
+      <xs:enumeration value="AEN"/>
+      <xs:enumeration value="AEO"/>
+      <xs:enumeration value="AEP"/>
+      <xs:enumeration value="AES"/>
+      <xs:enumeration value="AET"/>
+      <xs:enumeration value="AEU"/>
+      <xs:enumeration value="AEV"/>
+      <xs:enumeration value="AEW"/>
+      <xs:enumeration value="AEX"/>
+      <xs:enumeration value="AEY"/>
+      <xs:enumeration value="AEZ"/>
+      <xs:enumeration value="AJ"/>
+      <xs:enumeration value="AU"/>
+      <xs:enumeration value="CA"/>
+      <xs:enumeration value="CAB"/>
+      <xs:enumeration value="CAD"/>
+      <xs:enumeration value="CAE"/>
+      <xs:enumeration value="CAF"/>
+      <xs:enumeration value="CAI"/>
+      <xs:enumeration value="CAJ"/>
+      <xs:enumeration value="CAK"/>
+      <xs:enumeration value="CAL"/>
+      <xs:enumeration value="CAM"/>
+      <xs:enumeration value="CAN"/>
+      <xs:enumeration value="CAO"/>
+      <xs:enumeration value="CAP"/>
+      <xs:enumeration value="CAQ"/>
+      <xs:enumeration value="CAR"/>
+      <xs:enumeration value="CAS"/>
+      <xs:enumeration value="CAT"/>
+      <xs:enumeration value="CAU"/>
+      <xs:enumeration value="CAV"/>
+      <xs:enumeration value="CAW"/>
+      <xs:enumeration value="CAX"/>
+      <xs:enumeration value="CAY"/>
+      <xs:enumeration value="CAZ"/>
+      <xs:enumeration value="CD"/>
+      <xs:enumeration value="CG"/>
+      <xs:enumeration value="CS"/>
+      <xs:enumeration value="CT"/>
+      <xs:enumeration value="DAB"/>
+      <xs:enumeration value="DAC"/>
+      <xs:enumeration value="DAD"/>
+      <xs:enumeration value="DAF"/>
+      <xs:enumeration value="DAG"/>
+      <xs:enumeration value="DAH"/>
+      <xs:enumeration value="DAI"/>
+      <xs:enumeration value="DAJ"/>
+      <xs:enumeration value="DAK"/>
+      <xs:enumeration value="DAL"/>
+      <xs:enumeration value="DAM"/>
+      <xs:enumeration value="DAN"/>
+      <xs:enumeration value="DAO"/>
+      <xs:enumeration value="DAP"/>
+      <xs:enumeration value="DAQ"/>
+      <xs:enumeration value="DL"/>
+      <xs:enumeration value="EG"/>
+      <xs:enumeration value="EP"/>
+      <xs:enumeration value="ER"/>
+      <xs:enumeration value="FAA"/>
+      <xs:enumeration value="FAB"/>
+      <xs:enumeration value="FAC"/>
+      <xs:enumeration value="FC"/>
+      <xs:enumeration value="FH"/>
+      <xs:enumeration value="FI"/>
+      <xs:enumeration value="GAA"/>
+      <xs:enumeration value="HAA"/>
+      <xs:enumeration value="HD"/>
+      <xs:enumeration value="HH"/>
+      <xs:enumeration value="IAA"/>
+      <xs:enumeration value="IAB"/>
+      <xs:enumeration value="ID"/>
+      <xs:enumeration value="IF"/>
+      <xs:enumeration value="IR"/>
+      <xs:enumeration value="IS"/>
+      <xs:enumeration value="KO"/>
+      <xs:enumeration value="L1"/>
+      <xs:enumeration value="LA"/>
+      <xs:enumeration value="LAA"/>
+      <xs:enumeration value="LAB"/>
+      <xs:enumeration value="LF"/>
+      <xs:enumeration value="MAE"/>
+      <xs:enumeration value="MI"/>
+      <xs:enumeration value="ML"/>
+      <xs:enumeration value="NAA"/>
+      <xs:enumeration value="OA"/>
+      <xs:enumeration value="PA"/>
+      <xs:enumeration value="PAA"/>
+      <xs:enumeration value="PC"/>
+      <xs:enumeration value="PL"/>
+      <xs:enumeration value="RAB"/>
+      <xs:enumeration value="RAC"/>
+      <xs:enumeration value="RAD"/>
+      <xs:enumeration value="RAF"/>
+      <xs:enumeration value="RE"/>
+      <xs:enumeration value="RF"/>
+      <xs:enumeration value="RH"/>
+      <xs:enumeration value="RV"/>
+      <xs:enumeration value="SA"/>
+      <xs:enumeration value="SAA"/>
+      <xs:enumeration value="SAD"/>
+      <xs:enumeration value="SAE"/>
+      <xs:enumeration value="SAI"/>
+      <xs:enumeration value="SG"/>
+      <xs:enumeration value="SH"/>
+      <xs:enumeration value="SM"/>
+      <xs:enumeration value="SU"/>
+      <xs:enumeration value="TAB"/>
+      <xs:enumeration value="TAC"/>
+      <xs:enumeration value="TT"/>
+      <xs:enumeration value="TV"/>
+      <xs:enumeration value="V1"/>
+      <xs:enumeration value="V2"/>
+      <xs:enumeration value="WH"/>
+      <xs:enumeration value="XAA"/>
+      <xs:enumeration value="YY"/>
+      <xs:enumeration value="ZZZ"/>
+      <xs:enumeration value="41"/>
+      <xs:enumeration value="42"/>
+      <xs:enumeration value="60"/>
+      <xs:enumeration value="62"/>
+      <xs:enumeration value="63"/>
+      <xs:enumeration value="64"/>
+      <xs:enumeration value="65"/>
+      <xs:enumeration value="66"/>
+      <xs:enumeration value="67"/>
+      <xs:enumeration value="68"/>
+      <xs:enumeration value="70"/>
+      <xs:enumeration value="71"/>
+      <xs:enumeration value="88"/>
+      <xs:enumeration value="95"/>
+      <xs:enumeration value="100"/>
+      <xs:enumeration value="102"/>
+      <xs:enumeration value="103"/>
+      <xs:enumeration value="104"/>
+      <xs:enumeration value="105"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="AllowanceChargeReasonCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:AllowanceChargeReasonCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="ContactTypeCodeContentType">
+    <xs:restriction base="xs:token"/>
+  </xs:simpleType>
+  <xs:complexType name="ContactTypeCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:ContactTypeCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="CountryIDContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="1A"/>
+      <xs:enumeration value="AD"/>
+      <xs:enumeration value="AE"/>
+      <xs:enumeration value="AF"/>
+      <xs:enumeration value="AG"/>
+      <xs:enumeration value="AI"/>
+      <xs:enumeration value="AL"/>
+      <xs:enumeration value="AM"/>
+      <xs:enumeration value="AO"/>
+      <xs:enumeration value="AQ"/>
+      <xs:enumeration value="AR"/>
+      <xs:enumeration value="AS"/>
+      <xs:enumeration value="AT"/>
+      <xs:enumeration value="AU"/>
+      <xs:enumeration value="AW"/>
+      <xs:enumeration value="AX"/>
+      <xs:enumeration value="AZ"/>
+      <xs:enumeration value="BA"/>
+      <xs:enumeration value="BB"/>
+      <xs:enumeration value="BD"/>
+      <xs:enumeration value="BE"/>
+      <xs:enumeration value="BF"/>
+      <xs:enumeration value="BG"/>
+      <xs:enumeration value="BH"/>
+      <xs:enumeration value="BI"/>
+      <xs:enumeration value="BJ"/>
+      <xs:enumeration value="BL"/>
+      <xs:enumeration value="BM"/>
+      <xs:enumeration value="BN"/>
+      <xs:enumeration value="BO"/>
+      <xs:enumeration value="BQ"/>
+      <xs:enumeration value="BR"/>
+      <xs:enumeration value="BS"/>
+      <xs:enumeration value="BT"/>
+      <xs:enumeration value="BV"/>
+      <xs:enumeration value="BW"/>
+      <xs:enumeration value="BY"/>
+      <xs:enumeration value="BZ"/>
+      <xs:enumeration value="CA"/>
+      <xs:enumeration value="CC"/>
+      <xs:enumeration value="CD"/>
+      <xs:enumeration value="CF"/>
+      <xs:enumeration value="CG"/>
+      <xs:enumeration value="CH"/>
+      <xs:enumeration value="CI"/>
+      <xs:enumeration value="CK"/>
+      <xs:enumeration value="CL"/>
+      <xs:enumeration value="CM"/>
+      <xs:enumeration value="CN"/>
+      <xs:enumeration value="CO"/>
+      <xs:enumeration value="CR"/>
+      <xs:enumeration value="CU"/>
+      <xs:enumeration value="CV"/>
+      <xs:enumeration value="CW"/>
+      <xs:enumeration value="CX"/>
+      <xs:enumeration value="CY"/>
+      <xs:enumeration value="CZ"/>
+      <xs:enumeration value="DE"/>
+      <xs:enumeration value="DJ"/>
+      <xs:enumeration value="DK"/>
+      <xs:enumeration value="DM"/>
+      <xs:enumeration value="DO"/>
+      <xs:enumeration value="DZ"/>
+      <xs:enumeration value="EC"/>
+      <xs:enumeration value="EE"/>
+      <xs:enumeration value="EG"/>
+      <xs:enumeration value="EH"/>
+      <xs:enumeration value="ER"/>
+      <xs:enumeration value="ES"/>
+      <xs:enumeration value="ET"/>
+      <xs:enumeration value="FI"/>
+      <xs:enumeration value="FJ"/>
+      <xs:enumeration value="FK"/>
+      <xs:enumeration value="FM"/>
+      <xs:enumeration value="FO"/>
+      <xs:enumeration value="FR"/>
+      <xs:enumeration value="GA"/>
+      <xs:enumeration value="GB"/>
+      <xs:enumeration value="GD"/>
+      <xs:enumeration value="GE"/>
+      <xs:enumeration value="GF"/>
+      <xs:enumeration value="GG"/>
+      <xs:enumeration value="GH"/>
+      <xs:enumeration value="GI"/>
+      <xs:enumeration value="GL"/>
+      <xs:enumeration value="GM"/>
+      <xs:enumeration value="GN"/>
+      <xs:enumeration value="GP"/>
+      <xs:enumeration value="GQ"/>
+      <xs:enumeration value="GR"/>
+      <xs:enumeration value="GS"/>
+      <xs:enumeration value="GT"/>
+      <xs:enumeration value="GU"/>
+      <xs:enumeration value="GW"/>
+      <xs:enumeration value="GY"/>
+      <xs:enumeration value="HK"/>
+      <xs:enumeration value="HM"/>
+      <xs:enumeration value="HN"/>
+      <xs:enumeration value="HR"/>
+      <xs:enumeration value="HT"/>
+      <xs:enumeration value="HU"/>
+      <xs:enumeration value="ID"/>
+      <xs:enumeration value="IE"/>
+      <xs:enumeration value="IL"/>
+      <xs:enumeration value="IM"/>
+      <xs:enumeration value="IN"/>
+      <xs:enumeration value="IO"/>
+      <xs:enumeration value="IQ"/>
+      <xs:enumeration value="IR"/>
+      <xs:enumeration value="IS"/>
+      <xs:enumeration value="IT"/>
+      <xs:enumeration value="JE"/>
+      <xs:enumeration value="JM"/>
+      <xs:enumeration value="JO"/>
+      <xs:enumeration value="JP"/>
+      <xs:enumeration value="KE"/>
+      <xs:enumeration value="KG"/>
+      <xs:enumeration value="KH"/>
+      <xs:enumeration value="KI"/>
+      <xs:enumeration value="KM"/>
+      <xs:enumeration value="KN"/>
+      <xs:enumeration value="KP"/>
+      <xs:enumeration value="KR"/>
+      <xs:enumeration value="KW"/>
+      <xs:enumeration value="KY"/>
+      <xs:enumeration value="KZ"/>
+      <xs:enumeration value="LA"/>
+      <xs:enumeration value="LB"/>
+      <xs:enumeration value="LC"/>
+      <xs:enumeration value="LI"/>
+      <xs:enumeration value="LK"/>
+      <xs:enumeration value="LR"/>
+      <xs:enumeration value="LS"/>
+      <xs:enumeration value="LT"/>
+      <xs:enumeration value="LU"/>
+      <xs:enumeration value="LV"/>
+      <xs:enumeration value="LY"/>
+      <xs:enumeration value="MA"/>
+      <xs:enumeration value="MC"/>
+      <xs:enumeration value="MD"/>
+      <xs:enumeration value="ME"/>
+      <xs:enumeration value="MF"/>
+      <xs:enumeration value="MG"/>
+      <xs:enumeration value="MH"/>
+      <xs:enumeration value="MK"/>
+      <xs:enumeration value="ML"/>
+      <xs:enumeration value="MM"/>
+      <xs:enumeration value="MN"/>
+      <xs:enumeration value="MO"/>
+      <xs:enumeration value="MP"/>
+      <xs:enumeration value="MQ"/>
+      <xs:enumeration value="MR"/>
+      <xs:enumeration value="MS"/>
+      <xs:enumeration value="MT"/>
+      <xs:enumeration value="MU"/>
+      <xs:enumeration value="MV"/>
+      <xs:enumeration value="MW"/>
+      <xs:enumeration value="MX"/>
+      <xs:enumeration value="MY"/>
+      <xs:enumeration value="MZ"/>
+      <xs:enumeration value="NA"/>
+      <xs:enumeration value="NC"/>
+      <xs:enumeration value="NE"/>
+      <xs:enumeration value="NF"/>
+      <xs:enumeration value="NG"/>
+      <xs:enumeration value="NI"/>
+      <xs:enumeration value="NL"/>
+      <xs:enumeration value="NO"/>
+      <xs:enumeration value="NP"/>
+      <xs:enumeration value="NR"/>
+      <xs:enumeration value="NU"/>
+      <xs:enumeration value="NZ"/>
+      <xs:enumeration value="OM"/>
+      <xs:enumeration value="PA"/>
+      <xs:enumeration value="PE"/>
+      <xs:enumeration value="PF"/>
+      <xs:enumeration value="PG"/>
+      <xs:enumeration value="PH"/>
+      <xs:enumeration value="PK"/>
+      <xs:enumeration value="PL"/>
+      <xs:enumeration value="PM"/>
+      <xs:enumeration value="PN"/>
+      <xs:enumeration value="PR"/>
+      <xs:enumeration value="PS"/>
+      <xs:enumeration value="PT"/>
+      <xs:enumeration value="PW"/>
+      <xs:enumeration value="PY"/>
+      <xs:enumeration value="QA"/>
+      <xs:enumeration value="RE"/>
+      <xs:enumeration value="RO"/>
+      <xs:enumeration value="RS"/>
+      <xs:enumeration value="RU"/>
+      <xs:enumeration value="RW"/>
+      <xs:enumeration value="SA"/>
+      <xs:enumeration value="SB"/>
+      <xs:enumeration value="SC"/>
+      <xs:enumeration value="SD"/>
+      <xs:enumeration value="SE"/>
+      <xs:enumeration value="SG"/>
+      <xs:enumeration value="SH"/>
+      <xs:enumeration value="SI"/>
+      <xs:enumeration value="SJ"/>
+      <xs:enumeration value="SK"/>
+      <xs:enumeration value="SL"/>
+      <xs:enumeration value="SM"/>
+      <xs:enumeration value="SN"/>
+      <xs:enumeration value="SO"/>
+      <xs:enumeration value="SR"/>
+      <xs:enumeration value="SS"/>
+      <xs:enumeration value="ST"/>
+      <xs:enumeration value="SV"/>
+      <xs:enumeration value="SX"/>
+      <xs:enumeration value="SY"/>
+      <xs:enumeration value="SZ"/>
+      <xs:enumeration value="TC"/>
+      <xs:enumeration value="TD"/>
+      <xs:enumeration value="TF"/>
+      <xs:enumeration value="TG"/>
+      <xs:enumeration value="TH"/>
+      <xs:enumeration value="TJ"/>
+      <xs:enumeration value="TK"/>
+      <xs:enumeration value="TL"/>
+      <xs:enumeration value="TM"/>
+      <xs:enumeration value="TN"/>
+      <xs:enumeration value="TO"/>
+      <xs:enumeration value="TR"/>
+      <xs:enumeration value="TT"/>
+      <xs:enumeration value="TV"/>
+      <xs:enumeration value="TW"/>
+      <xs:enumeration value="TZ"/>
+      <xs:enumeration value="UA"/>
+      <xs:enumeration value="UG"/>
+      <xs:enumeration value="UM"/>
+      <xs:enumeration value="US"/>
+      <xs:enumeration value="UY"/>
+      <xs:enumeration value="UZ"/>
+      <xs:enumeration value="VA"/>
+      <xs:enumeration value="VC"/>
+      <xs:enumeration value="VE"/>
+      <xs:enumeration value="VG"/>
+      <xs:enumeration value="VI"/>
+      <xs:enumeration value="VN"/>
+      <xs:enumeration value="VU"/>
+      <xs:enumeration value="WF"/>
+      <xs:enumeration value="WS"/>
+      <xs:enumeration value="XI"/>
+      <xs:enumeration value="YE"/>
+      <xs:enumeration value="YT"/>
+      <xs:enumeration value="ZA"/>
+      <xs:enumeration value="ZM"/>
+      <xs:enumeration value="ZW"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="CountryIDType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:CountryIDContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="CurrencyCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AED"/>
+      <xs:enumeration value="AFN"/>
+      <xs:enumeration value="ALL"/>
+      <xs:enumeration value="AMD"/>
+      <xs:enumeration value="ANG"/>
+      <xs:enumeration value="AOA"/>
+      <xs:enumeration value="ARS"/>
+      <xs:enumeration value="AUD"/>
+      <xs:enumeration value="AWG"/>
+      <xs:enumeration value="AZN"/>
+      <xs:enumeration value="BAM"/>
+      <xs:enumeration value="BBD"/>
+      <xs:enumeration value="BDT"/>
+      <xs:enumeration value="BGN"/>
+      <xs:enumeration value="BHD"/>
+      <xs:enumeration value="BIF"/>
+      <xs:enumeration value="BMD"/>
+      <xs:enumeration value="BND"/>
+      <xs:enumeration value="BOB"/>
+      <xs:enumeration value="BOV"/>
+      <xs:enumeration value="BRL"/>
+      <xs:enumeration value="BSD"/>
+      <xs:enumeration value="BTN"/>
+      <xs:enumeration value="BWP"/>
+      <xs:enumeration value="BYN"/>
+      <xs:enumeration value="BZD"/>
+      <xs:enumeration value="CAD"/>
+      <xs:enumeration value="CDF"/>
+      <xs:enumeration value="CHE"/>
+      <xs:enumeration value="CHF"/>
+      <xs:enumeration value="CHW"/>
+      <xs:enumeration value="CLF"/>
+      <xs:enumeration value="CLP"/>
+      <xs:enumeration value="CNY"/>
+      <xs:enumeration value="COP"/>
+      <xs:enumeration value="COU"/>
+      <xs:enumeration value="CRC"/>
+      <xs:enumeration value="CUC"/>
+      <xs:enumeration value="CUP"/>
+      <xs:enumeration value="CVE"/>
+      <xs:enumeration value="CZK"/>
+      <xs:enumeration value="DJF"/>
+      <xs:enumeration value="DKK"/>
+      <xs:enumeration value="DOP"/>
+      <xs:enumeration value="DZD"/>
+      <xs:enumeration value="EGP"/>
+      <xs:enumeration value="ERN"/>
+      <xs:enumeration value="ETB"/>
+      <xs:enumeration value="EUR"/>
+      <xs:enumeration value="FJD"/>
+      <xs:enumeration value="FKP"/>
+      <xs:enumeration value="GBP"/>
+      <xs:enumeration value="GEL"/>
+      <xs:enumeration value="GHS"/>
+      <xs:enumeration value="GIP"/>
+      <xs:enumeration value="GMD"/>
+      <xs:enumeration value="GNF"/>
+      <xs:enumeration value="GTQ"/>
+      <xs:enumeration value="GYD"/>
+      <xs:enumeration value="HKD"/>
+      <xs:enumeration value="HNL"/>
+      <xs:enumeration value="HRK"/>
+      <xs:enumeration value="HTG"/>
+      <xs:enumeration value="HUF"/>
+      <xs:enumeration value="IDR"/>
+      <xs:enumeration value="ILS"/>
+      <xs:enumeration value="INR"/>
+      <xs:enumeration value="IQD"/>
+      <xs:enumeration value="IRR"/>
+      <xs:enumeration value="ISK"/>
+      <xs:enumeration value="JMD"/>
+      <xs:enumeration value="JOD"/>
+      <xs:enumeration value="JPY"/>
+      <xs:enumeration value="KES"/>
+      <xs:enumeration value="KGS"/>
+      <xs:enumeration value="KHR"/>
+      <xs:enumeration value="KMF"/>
+      <xs:enumeration value="KPW"/>
+      <xs:enumeration value="KRW"/>
+      <xs:enumeration value="KWD"/>
+      <xs:enumeration value="KYD"/>
+      <xs:enumeration value="KZT"/>
+      <xs:enumeration value="LAK"/>
+      <xs:enumeration value="LBP"/>
+      <xs:enumeration value="LKR"/>
+      <xs:enumeration value="LRD"/>
+      <xs:enumeration value="LSL"/>
+      <xs:enumeration value="LYD"/>
+      <xs:enumeration value="MAD"/>
+      <xs:enumeration value="MDL"/>
+      <xs:enumeration value="MGA"/>
+      <xs:enumeration value="MKD"/>
+      <xs:enumeration value="MMK"/>
+      <xs:enumeration value="MNT"/>
+      <xs:enumeration value="MOP"/>
+      <xs:enumeration value="MRU"/>
+      <xs:enumeration value="MUR"/>
+      <xs:enumeration value="MVR"/>
+      <xs:enumeration value="MWK"/>
+      <xs:enumeration value="MXN"/>
+      <xs:enumeration value="MXV"/>
+      <xs:enumeration value="MYR"/>
+      <xs:enumeration value="MZN"/>
+      <xs:enumeration value="NAD"/>
+      <xs:enumeration value="NGN"/>
+      <xs:enumeration value="NIO"/>
+      <xs:enumeration value="NOK"/>
+      <xs:enumeration value="NPR"/>
+      <xs:enumeration value="NZD"/>
+      <xs:enumeration value="OMR"/>
+      <xs:enumeration value="PAB"/>
+      <xs:enumeration value="PEN"/>
+      <xs:enumeration value="PGK"/>
+      <xs:enumeration value="PHP"/>
+      <xs:enumeration value="PKR"/>
+      <xs:enumeration value="PLN"/>
+      <xs:enumeration value="PYG"/>
+      <xs:enumeration value="QAR"/>
+      <xs:enumeration value="RON"/>
+      <xs:enumeration value="RSD"/>
+      <xs:enumeration value="RUB"/>
+      <xs:enumeration value="RWF"/>
+      <xs:enumeration value="SAR"/>
+      <xs:enumeration value="SBD"/>
+      <xs:enumeration value="SCR"/>
+      <xs:enumeration value="SDG"/>
+      <xs:enumeration value="SEK"/>
+      <xs:enumeration value="SGD"/>
+      <xs:enumeration value="SHP"/>
+      <xs:enumeration value="SLL"/>
+      <xs:enumeration value="SOS"/>
+      <xs:enumeration value="SRD"/>
+      <xs:enumeration value="SSP"/>
+      <xs:enumeration value="STN"/>
+      <xs:enumeration value="SVC"/>
+      <xs:enumeration value="SYP"/>
+      <xs:enumeration value="SZL"/>
+      <xs:enumeration value="THB"/>
+      <xs:enumeration value="TJS"/>
+      <xs:enumeration value="TMT"/>
+      <xs:enumeration value="TND"/>
+      <xs:enumeration value="TOP"/>
+      <xs:enumeration value="TRY"/>
+      <xs:enumeration value="TTD"/>
+      <xs:enumeration value="TWD"/>
+      <xs:enumeration value="TZS"/>
+      <xs:enumeration value="UAH"/>
+      <xs:enumeration value="UGX"/>
+      <xs:enumeration value="USD"/>
+      <xs:enumeration value="USN"/>
+      <xs:enumeration value="UYI"/>
+      <xs:enumeration value="UYU"/>
+      <xs:enumeration value="UYW"/>
+      <xs:enumeration value="UZS"/>
+      <xs:enumeration value="VES"/>
+      <xs:enumeration value="VND"/>
+      <xs:enumeration value="VUV"/>
+      <xs:enumeration value="WST"/>
+      <xs:enumeration value="XAF"/>
+      <xs:enumeration value="XAG"/>
+      <xs:enumeration value="XAU"/>
+      <xs:enumeration value="XBA"/>
+      <xs:enumeration value="XBB"/>
+      <xs:enumeration value="XBC"/>
+      <xs:enumeration value="XBD"/>
+      <xs:enumeration value="XCD"/>
+      <xs:enumeration value="XDR"/>
+      <xs:enumeration value="XOF"/>
+      <xs:enumeration value="XPD"/>
+      <xs:enumeration value="XPF"/>
+      <xs:enumeration value="XPT"/>
+      <xs:enumeration value="XSU"/>
+      <xs:enumeration value="XTS"/>
+      <xs:enumeration value="XUA"/>
+      <xs:enumeration value="XXX"/>
+      <xs:enumeration value="YER"/>
+      <xs:enumeration value="ZAR"/>
+      <xs:enumeration value="ZMW"/>
+      <xs:enumeration value="ZWL"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="CurrencyCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:CurrencyCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="DeliveryTermsCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="1"/>
+      <xs:enumeration value="2"/>
+      <xs:enumeration value="CFR"/>
+      <xs:enumeration value="CIF"/>
+      <xs:enumeration value="CIP"/>
+      <xs:enumeration value="CPT"/>
+      <xs:enumeration value="DAP"/>
+      <xs:enumeration value="DAT"/>
+      <xs:enumeration value="DDP"/>
+      <xs:enumeration value="EXW"/>
+      <xs:enumeration value="FAS"/>
+      <xs:enumeration value="FCA"/>
+      <xs:enumeration value="FOB"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="DeliveryTermsCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:DeliveryTermsCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="DocumentCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="1"/>
+      <xs:enumeration value="2"/>
+      <xs:enumeration value="3"/>
+      <xs:enumeration value="4"/>
+      <xs:enumeration value="5"/>
+      <xs:enumeration value="6"/>
+      <xs:enumeration value="7"/>
+      <xs:enumeration value="8"/>
+      <xs:enumeration value="9"/>
+      <xs:enumeration value="10"/>
+      <xs:enumeration value="11"/>
+      <xs:enumeration value="12"/>
+      <xs:enumeration value="13"/>
+      <xs:enumeration value="14"/>
+      <xs:enumeration value="15"/>
+      <xs:enumeration value="16"/>
+      <xs:enumeration value="17"/>
+      <xs:enumeration value="18"/>
+      <xs:enumeration value="19"/>
+      <xs:enumeration value="20"/>
+      <xs:enumeration value="21"/>
+      <xs:enumeration value="22"/>
+      <xs:enumeration value="23"/>
+      <xs:enumeration value="24"/>
+      <xs:enumeration value="25"/>
+      <xs:enumeration value="26"/>
+      <xs:enumeration value="27"/>
+      <xs:enumeration value="28"/>
+      <xs:enumeration value="29"/>
+      <xs:enumeration value="30"/>
+      <xs:enumeration value="31"/>
+      <xs:enumeration value="32"/>
+      <xs:enumeration value="33"/>
+      <xs:enumeration value="34"/>
+      <xs:enumeration value="35"/>
+      <xs:enumeration value="36"/>
+      <xs:enumeration value="37"/>
+      <xs:enumeration value="38"/>
+      <xs:enumeration value="39"/>
+      <xs:enumeration value="40"/>
+      <xs:enumeration value="41"/>
+      <xs:enumeration value="42"/>
+      <xs:enumeration value="43"/>
+      <xs:enumeration value="44"/>
+      <xs:enumeration value="45"/>
+      <xs:enumeration value="46"/>
+      <xs:enumeration value="47"/>
+      <xs:enumeration value="48"/>
+      <xs:enumeration value="49"/>
+      <xs:enumeration value="50"/>
+      <xs:enumeration value="51"/>
+      <xs:enumeration value="52"/>
+      <xs:enumeration value="53"/>
+      <xs:enumeration value="54"/>
+      <xs:enumeration value="55"/>
+      <xs:enumeration value="56"/>
+      <xs:enumeration value="57"/>
+      <xs:enumeration value="58"/>
+      <xs:enumeration value="59"/>
+      <xs:enumeration value="60"/>
+      <xs:enumeration value="61"/>
+      <xs:enumeration value="62"/>
+      <xs:enumeration value="63"/>
+      <xs:enumeration value="64"/>
+      <xs:enumeration value="65"/>
+      <xs:enumeration value="66"/>
+      <xs:enumeration value="67"/>
+      <xs:enumeration value="68"/>
+      <xs:enumeration value="69"/>
+      <xs:enumeration value="70"/>
+      <xs:enumeration value="71"/>
+      <xs:enumeration value="72"/>
+      <xs:enumeration value="73"/>
+      <xs:enumeration value="74"/>
+      <xs:enumeration value="75"/>
+      <xs:enumeration value="76"/>
+      <xs:enumeration value="77"/>
+      <xs:enumeration value="78"/>
+      <xs:enumeration value="79"/>
+      <xs:enumeration value="80"/>
+      <xs:enumeration value="81"/>
+      <xs:enumeration value="82"/>
+      <xs:enumeration value="83"/>
+      <xs:enumeration value="84"/>
+      <xs:enumeration value="85"/>
+      <xs:enumeration value="86"/>
+      <xs:enumeration value="87"/>
+      <xs:enumeration value="88"/>
+      <xs:enumeration value="89"/>
+      <xs:enumeration value="90"/>
+      <xs:enumeration value="91"/>
+      <xs:enumeration value="92"/>
+      <xs:enumeration value="93"/>
+      <xs:enumeration value="94"/>
+      <xs:enumeration value="95"/>
+      <xs:enumeration value="96"/>
+      <xs:enumeration value="97"/>
+      <xs:enumeration value="98"/>
+      <xs:enumeration value="99"/>
+      <xs:enumeration value="100"/>
+      <xs:enumeration value="101"/>
+      <xs:enumeration value="102"/>
+      <xs:enumeration value="103"/>
+      <xs:enumeration value="104"/>
+      <xs:enumeration value="105"/>
+      <xs:enumeration value="106"/>
+      <xs:enumeration value="107"/>
+      <xs:enumeration value="108"/>
+      <xs:enumeration value="109"/>
+      <xs:enumeration value="110"/>
+      <xs:enumeration value="111"/>
+      <xs:enumeration value="112"/>
+      <xs:enumeration value="113"/>
+      <xs:enumeration value="114"/>
+      <xs:enumeration value="115"/>
+      <xs:enumeration value="116"/>
+      <xs:enumeration value="117"/>
+      <xs:enumeration value="118"/>
+      <xs:enumeration value="119"/>
+      <xs:enumeration value="120"/>
+      <xs:enumeration value="121"/>
+      <xs:enumeration value="122"/>
+      <xs:enumeration value="123"/>
+      <xs:enumeration value="124"/>
+      <xs:enumeration value="125"/>
+      <xs:enumeration value="126"/>
+      <xs:enumeration value="127"/>
+      <xs:enumeration value="128"/>
+      <xs:enumeration value="129"/>
+      <xs:enumeration value="130"/>
+      <xs:enumeration value="131"/>
+      <xs:enumeration value="132"/>
+      <xs:enumeration value="133"/>
+      <xs:enumeration value="134"/>
+      <xs:enumeration value="135"/>
+      <xs:enumeration value="136"/>
+      <xs:enumeration value="137"/>
+      <xs:enumeration value="138"/>
+      <xs:enumeration value="139"/>
+      <xs:enumeration value="140"/>
+      <xs:enumeration value="141"/>
+      <xs:enumeration value="142"/>
+      <xs:enumeration value="143"/>
+      <xs:enumeration value="144"/>
+      <xs:enumeration value="145"/>
+      <xs:enumeration value="146"/>
+      <xs:enumeration value="147"/>
+      <xs:enumeration value="148"/>
+      <xs:enumeration value="149"/>
+      <xs:enumeration value="150"/>
+      <xs:enumeration value="151"/>
+      <xs:enumeration value="152"/>
+      <xs:enumeration value="153"/>
+      <xs:enumeration value="154"/>
+      <xs:enumeration value="155"/>
+      <xs:enumeration value="156"/>
+      <xs:enumeration value="157"/>
+      <xs:enumeration value="158"/>
+      <xs:enumeration value="159"/>
+      <xs:enumeration value="160"/>
+      <xs:enumeration value="161"/>
+      <xs:enumeration value="162"/>
+      <xs:enumeration value="163"/>
+      <xs:enumeration value="164"/>
+      <xs:enumeration value="165"/>
+      <xs:enumeration value="166"/>
+      <xs:enumeration value="167"/>
+      <xs:enumeration value="168"/>
+      <xs:enumeration value="169"/>
+      <xs:enumeration value="170"/>
+      <xs:enumeration value="171"/>
+      <xs:enumeration value="172"/>
+      <xs:enumeration value="173"/>
+      <xs:enumeration value="174"/>
+      <xs:enumeration value="175"/>
+      <xs:enumeration value="176"/>
+      <xs:enumeration value="177"/>
+      <xs:enumeration value="178"/>
+      <xs:enumeration value="179"/>
+      <xs:enumeration value="180"/>
+      <xs:enumeration value="181"/>
+      <xs:enumeration value="182"/>
+      <xs:enumeration value="183"/>
+      <xs:enumeration value="184"/>
+      <xs:enumeration value="185"/>
+      <xs:enumeration value="186"/>
+      <xs:enumeration value="187"/>
+      <xs:enumeration value="188"/>
+      <xs:enumeration value="189"/>
+      <xs:enumeration value="190"/>
+      <xs:enumeration value="191"/>
+      <xs:enumeration value="192"/>
+      <xs:enumeration value="193"/>
+      <xs:enumeration value="194"/>
+      <xs:enumeration value="195"/>
+      <xs:enumeration value="196"/>
+      <xs:enumeration value="197"/>
+      <xs:enumeration value="198"/>
+      <xs:enumeration value="199"/>
+      <xs:enumeration value="200"/>
+      <xs:enumeration value="201"/>
+      <xs:enumeration value="202"/>
+      <xs:enumeration value="203"/>
+      <xs:enumeration value="204"/>
+      <xs:enumeration value="205"/>
+      <xs:enumeration value="206"/>
+      <xs:enumeration value="207"/>
+      <xs:enumeration value="208"/>
+      <xs:enumeration value="209"/>
+      <xs:enumeration value="210"/>
+      <xs:enumeration value="211"/>
+      <xs:enumeration value="212"/>
+      <xs:enumeration value="213"/>
+      <xs:enumeration value="214"/>
+      <xs:enumeration value="215"/>
+      <xs:enumeration value="216"/>
+      <xs:enumeration value="217"/>
+      <xs:enumeration value="218"/>
+      <xs:enumeration value="219"/>
+      <xs:enumeration value="220"/>
+      <xs:enumeration value="221"/>
+      <xs:enumeration value="222"/>
+      <xs:enumeration value="223"/>
+      <xs:enumeration value="224"/>
+      <xs:enumeration value="225"/>
+      <xs:enumeration value="226"/>
+      <xs:enumeration value="227"/>
+      <xs:enumeration value="228"/>
+      <xs:enumeration value="229"/>
+      <xs:enumeration value="230"/>
+      <xs:enumeration value="231"/>
+      <xs:enumeration value="232"/>
+      <xs:enumeration value="233"/>
+      <xs:enumeration value="234"/>
+      <xs:enumeration value="235"/>
+      <xs:enumeration value="236"/>
+      <xs:enumeration value="237"/>
+      <xs:enumeration value="238"/>
+      <xs:enumeration value="239"/>
+      <xs:enumeration value="240"/>
+      <xs:enumeration value="241"/>
+      <xs:enumeration value="242"/>
+      <xs:enumeration value="243"/>
+      <xs:enumeration value="244"/>
+      <xs:enumeration value="245"/>
+      <xs:enumeration value="246"/>
+      <xs:enumeration value="247"/>
+      <xs:enumeration value="248"/>
+      <xs:enumeration value="249"/>
+      <xs:enumeration value="250"/>
+      <xs:enumeration value="251"/>
+      <xs:enumeration value="252"/>
+      <xs:enumeration value="253"/>
+      <xs:enumeration value="254"/>
+      <xs:enumeration value="255"/>
+      <xs:enumeration value="256"/>
+      <xs:enumeration value="257"/>
+      <xs:enumeration value="258"/>
+      <xs:enumeration value="259"/>
+      <xs:enumeration value="260"/>
+      <xs:enumeration value="261"/>
+      <xs:enumeration value="262"/>
+      <xs:enumeration value="263"/>
+      <xs:enumeration value="264"/>
+      <xs:enumeration value="265"/>
+      <xs:enumeration value="266"/>
+      <xs:enumeration value="267"/>
+      <xs:enumeration value="268"/>
+      <xs:enumeration value="269"/>
+      <xs:enumeration value="270"/>
+      <xs:enumeration value="271"/>
+      <xs:enumeration value="272"/>
+      <xs:enumeration value="273"/>
+      <xs:enumeration value="274"/>
+      <xs:enumeration value="275"/>
+      <xs:enumeration value="276"/>
+      <xs:enumeration value="277"/>
+      <xs:enumeration value="278"/>
+      <xs:enumeration value="279"/>
+      <xs:enumeration value="280"/>
+      <xs:enumeration value="281"/>
+      <xs:enumeration value="282"/>
+      <xs:enumeration value="283"/>
+      <xs:enumeration value="284"/>
+      <xs:enumeration value="285"/>
+      <xs:enumeration value="286"/>
+      <xs:enumeration value="287"/>
+      <xs:enumeration value="288"/>
+      <xs:enumeration value="289"/>
+      <xs:enumeration value="290"/>
+      <xs:enumeration value="291"/>
+      <xs:enumeration value="292"/>
+      <xs:enumeration value="293"/>
+      <xs:enumeration value="294"/>
+      <xs:enumeration value="295"/>
+      <xs:enumeration value="296"/>
+      <xs:enumeration value="297"/>
+      <xs:enumeration value="298"/>
+      <xs:enumeration value="299"/>
+      <xs:enumeration value="300"/>
+      <xs:enumeration value="301"/>
+      <xs:enumeration value="302"/>
+      <xs:enumeration value="303"/>
+      <xs:enumeration value="304"/>
+      <xs:enumeration value="305"/>
+      <xs:enumeration value="306"/>
+      <xs:enumeration value="307"/>
+      <xs:enumeration value="308"/>
+      <xs:enumeration value="309"/>
+      <xs:enumeration value="310"/>
+      <xs:enumeration value="311"/>
+      <xs:enumeration value="312"/>
+      <xs:enumeration value="313"/>
+      <xs:enumeration value="314"/>
+      <xs:enumeration value="315"/>
+      <xs:enumeration value="316"/>
+      <xs:enumeration value="317"/>
+      <xs:enumeration value="318"/>
+      <xs:enumeration value="319"/>
+      <xs:enumeration value="320"/>
+      <xs:enumeration value="321"/>
+      <xs:enumeration value="322"/>
+      <xs:enumeration value="323"/>
+      <xs:enumeration value="324"/>
+      <xs:enumeration value="325"/>
+      <xs:enumeration value="326"/>
+      <xs:enumeration value="327"/>
+      <xs:enumeration value="328"/>
+      <xs:enumeration value="329"/>
+      <xs:enumeration value="330"/>
+      <xs:enumeration value="331"/>
+      <xs:enumeration value="332"/>
+      <xs:enumeration value="333"/>
+      <xs:enumeration value="334"/>
+      <xs:enumeration value="335"/>
+      <xs:enumeration value="336"/>
+      <xs:enumeration value="337"/>
+      <xs:enumeration value="338"/>
+      <xs:enumeration value="339"/>
+      <xs:enumeration value="340"/>
+      <xs:enumeration value="341"/>
+      <xs:enumeration value="342"/>
+      <xs:enumeration value="343"/>
+      <xs:enumeration value="344"/>
+      <xs:enumeration value="345"/>
+      <xs:enumeration value="346"/>
+      <xs:enumeration value="347"/>
+      <xs:enumeration value="348"/>
+      <xs:enumeration value="349"/>
+      <xs:enumeration value="350"/>
+      <xs:enumeration value="351"/>
+      <xs:enumeration value="352"/>
+      <xs:enumeration value="353"/>
+      <xs:enumeration value="354"/>
+      <xs:enumeration value="355"/>
+      <xs:enumeration value="356"/>
+      <xs:enumeration value="357"/>
+      <xs:enumeration value="358"/>
+      <xs:enumeration value="359"/>
+      <xs:enumeration value="360"/>
+      <xs:enumeration value="361"/>
+      <xs:enumeration value="362"/>
+      <xs:enumeration value="363"/>
+      <xs:enumeration value="364"/>
+      <xs:enumeration value="365"/>
+      <xs:enumeration value="366"/>
+      <xs:enumeration value="367"/>
+      <xs:enumeration value="368"/>
+      <xs:enumeration value="369"/>
+      <xs:enumeration value="370"/>
+      <xs:enumeration value="371"/>
+      <xs:enumeration value="372"/>
+      <xs:enumeration value="373"/>
+      <xs:enumeration value="374"/>
+      <xs:enumeration value="375"/>
+      <xs:enumeration value="376"/>
+      <xs:enumeration value="377"/>
+      <xs:enumeration value="378"/>
+      <xs:enumeration value="379"/>
+      <xs:enumeration value="380"/>
+      <xs:enumeration value="381"/>
+      <xs:enumeration value="382"/>
+      <xs:enumeration value="383"/>
+      <xs:enumeration value="384"/>
+      <xs:enumeration value="385"/>
+      <xs:enumeration value="386"/>
+      <xs:enumeration value="387"/>
+      <xs:enumeration value="388"/>
+      <xs:enumeration value="389"/>
+      <xs:enumeration value="390"/>
+      <xs:enumeration value="391"/>
+      <xs:enumeration value="392"/>
+      <xs:enumeration value="393"/>
+      <xs:enumeration value="394"/>
+      <xs:enumeration value="395"/>
+      <xs:enumeration value="396"/>
+      <xs:enumeration value="397"/>
+      <xs:enumeration value="398"/>
+      <xs:enumeration value="399"/>
+      <xs:enumeration value="400"/>
+      <xs:enumeration value="401"/>
+      <xs:enumeration value="402"/>
+      <xs:enumeration value="403"/>
+      <xs:enumeration value="404"/>
+      <xs:enumeration value="405"/>
+      <xs:enumeration value="406"/>
+      <xs:enumeration value="407"/>
+      <xs:enumeration value="408"/>
+      <xs:enumeration value="409"/>
+      <xs:enumeration value="410"/>
+      <xs:enumeration value="411"/>
+      <xs:enumeration value="412"/>
+      <xs:enumeration value="413"/>
+      <xs:enumeration value="414"/>
+      <xs:enumeration value="415"/>
+      <xs:enumeration value="416"/>
+      <xs:enumeration value="417"/>
+      <xs:enumeration value="418"/>
+      <xs:enumeration value="419"/>
+      <xs:enumeration value="420"/>
+      <xs:enumeration value="421"/>
+      <xs:enumeration value="422"/>
+      <xs:enumeration value="423"/>
+      <xs:enumeration value="424"/>
+      <xs:enumeration value="425"/>
+      <xs:enumeration value="426"/>
+      <xs:enumeration value="427"/>
+      <xs:enumeration value="428"/>
+      <xs:enumeration value="429"/>
+      <xs:enumeration value="430"/>
+      <xs:enumeration value="431"/>
+      <xs:enumeration value="432"/>
+      <xs:enumeration value="433"/>
+      <xs:enumeration value="434"/>
+      <xs:enumeration value="435"/>
+      <xs:enumeration value="436"/>
+      <xs:enumeration value="437"/>
+      <xs:enumeration value="438"/>
+      <xs:enumeration value="439"/>
+      <xs:enumeration value="440"/>
+      <xs:enumeration value="441"/>
+      <xs:enumeration value="442"/>
+      <xs:enumeration value="443"/>
+      <xs:enumeration value="444"/>
+      <xs:enumeration value="445"/>
+      <xs:enumeration value="446"/>
+      <xs:enumeration value="447"/>
+      <xs:enumeration value="448"/>
+      <xs:enumeration value="449"/>
+      <xs:enumeration value="450"/>
+      <xs:enumeration value="451"/>
+      <xs:enumeration value="452"/>
+      <xs:enumeration value="453"/>
+      <xs:enumeration value="454"/>
+      <xs:enumeration value="455"/>
+      <xs:enumeration value="456"/>
+      <xs:enumeration value="457"/>
+      <xs:enumeration value="458"/>
+      <xs:enumeration value="459"/>
+      <xs:enumeration value="460"/>
+      <xs:enumeration value="461"/>
+      <xs:enumeration value="462"/>
+      <xs:enumeration value="463"/>
+      <xs:enumeration value="464"/>
+      <xs:enumeration value="465"/>
+      <xs:enumeration value="466"/>
+      <xs:enumeration value="467"/>
+      <xs:enumeration value="468"/>
+      <xs:enumeration value="469"/>
+      <xs:enumeration value="470"/>
+      <xs:enumeration value="481"/>
+      <xs:enumeration value="482"/>
+      <xs:enumeration value="483"/>
+      <xs:enumeration value="484"/>
+      <xs:enumeration value="485"/>
+      <xs:enumeration value="486"/>
+      <xs:enumeration value="487"/>
+      <xs:enumeration value="488"/>
+      <xs:enumeration value="489"/>
+      <xs:enumeration value="490"/>
+      <xs:enumeration value="491"/>
+      <xs:enumeration value="493"/>
+      <xs:enumeration value="494"/>
+      <xs:enumeration value="495"/>
+      <xs:enumeration value="496"/>
+      <xs:enumeration value="497"/>
+      <xs:enumeration value="498"/>
+      <xs:enumeration value="499"/>
+      <xs:enumeration value="520"/>
+      <xs:enumeration value="521"/>
+      <xs:enumeration value="522"/>
+      <xs:enumeration value="523"/>
+      <xs:enumeration value="524"/>
+      <xs:enumeration value="525"/>
+      <xs:enumeration value="526"/>
+      <xs:enumeration value="527"/>
+      <xs:enumeration value="528"/>
+      <xs:enumeration value="529"/>
+      <xs:enumeration value="530"/>
+      <xs:enumeration value="531"/>
+      <xs:enumeration value="532"/>
+      <xs:enumeration value="533"/>
+      <xs:enumeration value="534"/>
+      <xs:enumeration value="535"/>
+      <xs:enumeration value="536"/>
+      <xs:enumeration value="537"/>
+      <xs:enumeration value="538"/>
+      <xs:enumeration value="539"/>
+      <xs:enumeration value="550"/>
+      <xs:enumeration value="551"/>
+      <xs:enumeration value="552"/>
+      <xs:enumeration value="553"/>
+      <xs:enumeration value="554"/>
+      <xs:enumeration value="575"/>
+      <xs:enumeration value="576"/>
+      <xs:enumeration value="577"/>
+      <xs:enumeration value="578"/>
+      <xs:enumeration value="579"/>
+      <xs:enumeration value="580"/>
+      <xs:enumeration value="581"/>
+      <xs:enumeration value="582"/>
+      <xs:enumeration value="583"/>
+      <xs:enumeration value="584"/>
+      <xs:enumeration value="585"/>
+      <xs:enumeration value="586"/>
+      <xs:enumeration value="587"/>
+      <xs:enumeration value="588"/>
+      <xs:enumeration value="589"/>
+      <xs:enumeration value="610"/>
+      <xs:enumeration value="621"/>
+      <xs:enumeration value="622"/>
+      <xs:enumeration value="623"/>
+      <xs:enumeration value="624"/>
+      <xs:enumeration value="625"/>
+      <xs:enumeration value="626"/>
+      <xs:enumeration value="627"/>
+      <xs:enumeration value="628"/>
+      <xs:enumeration value="629"/>
+      <xs:enumeration value="630"/>
+      <xs:enumeration value="631"/>
+      <xs:enumeration value="632"/>
+      <xs:enumeration value="633"/>
+      <xs:enumeration value="634"/>
+      <xs:enumeration value="635"/>
+      <xs:enumeration value="636"/>
+      <xs:enumeration value="637"/>
+      <xs:enumeration value="638"/>
+      <xs:enumeration value="639"/>
+      <xs:enumeration value="640"/>
+      <xs:enumeration value="641"/>
+      <xs:enumeration value="642"/>
+      <xs:enumeration value="643"/>
+      <xs:enumeration value="644"/>
+      <xs:enumeration value="645"/>
+      <xs:enumeration value="646"/>
+      <xs:enumeration value="647"/>
+      <xs:enumeration value="648"/>
+      <xs:enumeration value="649"/>
+      <xs:enumeration value="650"/>
+      <xs:enumeration value="651"/>
+      <xs:enumeration value="652"/>
+      <xs:enumeration value="653"/>
+      <xs:enumeration value="654"/>
+      <xs:enumeration value="655"/>
+      <xs:enumeration value="656"/>
+      <xs:enumeration value="657"/>
+      <xs:enumeration value="658"/>
+      <xs:enumeration value="659"/>
+      <xs:enumeration value="700"/>
+      <xs:enumeration value="701"/>
+      <xs:enumeration value="702"/>
+      <xs:enumeration value="703"/>
+      <xs:enumeration value="704"/>
+      <xs:enumeration value="705"/>
+      <xs:enumeration value="706"/>
+      <xs:enumeration value="707"/>
+      <xs:enumeration value="708"/>
+      <xs:enumeration value="709"/>
+      <xs:enumeration value="710"/>
+      <xs:enumeration value="711"/>
+      <xs:enumeration value="712"/>
+      <xs:enumeration value="713"/>
+      <xs:enumeration value="714"/>
+      <xs:enumeration value="715"/>
+      <xs:enumeration value="716"/>
+      <xs:enumeration value="717"/>
+      <xs:enumeration value="718"/>
+      <xs:enumeration value="719"/>
+      <xs:enumeration value="720"/>
+      <xs:enumeration value="721"/>
+      <xs:enumeration value="722"/>
+      <xs:enumeration value="723"/>
+      <xs:enumeration value="724"/>
+      <xs:enumeration value="725"/>
+      <xs:enumeration value="726"/>
+      <xs:enumeration value="727"/>
+      <xs:enumeration value="728"/>
+      <xs:enumeration value="729"/>
+      <xs:enumeration value="730"/>
+      <xs:enumeration value="731"/>
+      <xs:enumeration value="732"/>
+      <xs:enumeration value="733"/>
+      <xs:enumeration value="734"/>
+      <xs:enumeration value="735"/>
+      <xs:enumeration value="736"/>
+      <xs:enumeration value="737"/>
+      <xs:enumeration value="738"/>
+      <xs:enumeration value="739"/>
+      <xs:enumeration value="740"/>
+      <xs:enumeration value="741"/>
+      <xs:enumeration value="742"/>
+      <xs:enumeration value="743"/>
+      <xs:enumeration value="744"/>
+      <xs:enumeration value="745"/>
+      <xs:enumeration value="746"/>
+      <xs:enumeration value="747"/>
+      <xs:enumeration value="748"/>
+      <xs:enumeration value="749"/>
+      <xs:enumeration value="750"/>
+      <xs:enumeration value="751"/>
+      <xs:enumeration value="752"/>
+      <xs:enumeration value="753"/>
+      <xs:enumeration value="754"/>
+      <xs:enumeration value="755"/>
+      <xs:enumeration value="756"/>
+      <xs:enumeration value="757"/>
+      <xs:enumeration value="758"/>
+      <xs:enumeration value="759"/>
+      <xs:enumeration value="760"/>
+      <xs:enumeration value="761"/>
+      <xs:enumeration value="762"/>
+      <xs:enumeration value="763"/>
+      <xs:enumeration value="764"/>
+      <xs:enumeration value="765"/>
+      <xs:enumeration value="766"/>
+      <xs:enumeration value="767"/>
+      <xs:enumeration value="768"/>
+      <xs:enumeration value="769"/>
+      <xs:enumeration value="770"/>
+      <xs:enumeration value="771"/>
+      <xs:enumeration value="772"/>
+      <xs:enumeration value="773"/>
+      <xs:enumeration value="774"/>
+      <xs:enumeration value="775"/>
+      <xs:enumeration value="776"/>
+      <xs:enumeration value="777"/>
+      <xs:enumeration value="778"/>
+      <xs:enumeration value="779"/>
+      <xs:enumeration value="780"/>
+      <xs:enumeration value="781"/>
+      <xs:enumeration value="782"/>
+      <xs:enumeration value="783"/>
+      <xs:enumeration value="784"/>
+      <xs:enumeration value="785"/>
+      <xs:enumeration value="786"/>
+      <xs:enumeration value="787"/>
+      <xs:enumeration value="788"/>
+      <xs:enumeration value="789"/>
+      <xs:enumeration value="790"/>
+      <xs:enumeration value="791"/>
+      <xs:enumeration value="792"/>
+      <xs:enumeration value="793"/>
+      <xs:enumeration value="794"/>
+      <xs:enumeration value="795"/>
+      <xs:enumeration value="796"/>
+      <xs:enumeration value="797"/>
+      <xs:enumeration value="798"/>
+      <xs:enumeration value="799"/>
+      <xs:enumeration value="810"/>
+      <xs:enumeration value="811"/>
+      <xs:enumeration value="812"/>
+      <xs:enumeration value="813"/>
+      <xs:enumeration value="814"/>
+      <xs:enumeration value="815"/>
+      <xs:enumeration value="816"/>
+      <xs:enumeration value="817"/>
+      <xs:enumeration value="818"/>
+      <xs:enumeration value="819"/>
+      <xs:enumeration value="820"/>
+      <xs:enumeration value="821"/>
+      <xs:enumeration value="822"/>
+      <xs:enumeration value="823"/>
+      <xs:enumeration value="824"/>
+      <xs:enumeration value="825"/>
+      <xs:enumeration value="826"/>
+      <xs:enumeration value="827"/>
+      <xs:enumeration value="828"/>
+      <xs:enumeration value="829"/>
+      <xs:enumeration value="830"/>
+      <xs:enumeration value="831"/>
+      <xs:enumeration value="832"/>
+      <xs:enumeration value="833"/>
+      <xs:enumeration value="834"/>
+      <xs:enumeration value="835"/>
+      <xs:enumeration value="836"/>
+      <xs:enumeration value="837"/>
+      <xs:enumeration value="838"/>
+      <xs:enumeration value="839"/>
+      <xs:enumeration value="840"/>
+      <xs:enumeration value="841"/>
+      <xs:enumeration value="842"/>
+      <xs:enumeration value="843"/>
+      <xs:enumeration value="844"/>
+      <xs:enumeration value="845"/>
+      <xs:enumeration value="846"/>
+      <xs:enumeration value="847"/>
+      <xs:enumeration value="848"/>
+      <xs:enumeration value="849"/>
+      <xs:enumeration value="850"/>
+      <xs:enumeration value="851"/>
+      <xs:enumeration value="852"/>
+      <xs:enumeration value="853"/>
+      <xs:enumeration value="854"/>
+      <xs:enumeration value="855"/>
+      <xs:enumeration value="856"/>
+      <xs:enumeration value="857"/>
+      <xs:enumeration value="858"/>
+      <xs:enumeration value="859"/>
+      <xs:enumeration value="860"/>
+      <xs:enumeration value="861"/>
+      <xs:enumeration value="862"/>
+      <xs:enumeration value="863"/>
+      <xs:enumeration value="864"/>
+      <xs:enumeration value="865"/>
+      <xs:enumeration value="866"/>
+      <xs:enumeration value="867"/>
+      <xs:enumeration value="868"/>
+      <xs:enumeration value="869"/>
+      <xs:enumeration value="870"/>
+      <xs:enumeration value="871"/>
+      <xs:enumeration value="872"/>
+      <xs:enumeration value="873"/>
+      <xs:enumeration value="874"/>
+      <xs:enumeration value="875"/>
+      <xs:enumeration value="876"/>
+      <xs:enumeration value="877"/>
+      <xs:enumeration value="878"/>
+      <xs:enumeration value="879"/>
+      <xs:enumeration value="890"/>
+      <xs:enumeration value="891"/>
+      <xs:enumeration value="892"/>
+      <xs:enumeration value="893"/>
+      <xs:enumeration value="894"/>
+      <xs:enumeration value="895"/>
+      <xs:enumeration value="896"/>
+      <xs:enumeration value="901"/>
+      <xs:enumeration value="910"/>
+      <xs:enumeration value="911"/>
+      <xs:enumeration value="913"/>
+      <xs:enumeration value="914"/>
+      <xs:enumeration value="915"/>
+      <xs:enumeration value="916"/>
+      <xs:enumeration value="917"/>
+      <xs:enumeration value="925"/>
+      <xs:enumeration value="926"/>
+      <xs:enumeration value="927"/>
+      <xs:enumeration value="929"/>
+      <xs:enumeration value="930"/>
+      <xs:enumeration value="931"/>
+      <xs:enumeration value="932"/>
+      <xs:enumeration value="933"/>
+      <xs:enumeration value="934"/>
+      <xs:enumeration value="935"/>
+      <xs:enumeration value="936"/>
+      <xs:enumeration value="937"/>
+      <xs:enumeration value="938"/>
+      <xs:enumeration value="940"/>
+      <xs:enumeration value="941"/>
+      <xs:enumeration value="950"/>
+      <xs:enumeration value="951"/>
+      <xs:enumeration value="952"/>
+      <xs:enumeration value="953"/>
+      <xs:enumeration value="954"/>
+      <xs:enumeration value="955"/>
+      <xs:enumeration value="960"/>
+      <xs:enumeration value="961"/>
+      <xs:enumeration value="962"/>
+      <xs:enumeration value="963"/>
+      <xs:enumeration value="964"/>
+      <xs:enumeration value="965"/>
+      <xs:enumeration value="966"/>
+      <xs:enumeration value="970"/>
+      <xs:enumeration value="971"/>
+      <xs:enumeration value="972"/>
+      <xs:enumeration value="974"/>
+      <xs:enumeration value="975"/>
+      <xs:enumeration value="976"/>
+      <xs:enumeration value="977"/>
+      <xs:enumeration value="978"/>
+      <xs:enumeration value="979"/>
+      <xs:enumeration value="990"/>
+      <xs:enumeration value="991"/>
+      <xs:enumeration value="995"/>
+      <xs:enumeration value="996"/>
+      <xs:enumeration value="998"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="DocumentCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:DocumentCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="FormattedDateTimeFormatContentType">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:complexType name="FormattedDateTimeType">
+    <xs:sequence>
+      <xs:element name="DateTimeString">
+        <xs:complexType>
+          <xs:simpleContent>
+            <xs:extension base="xs:string">
+              <xs:attribute name="format" type="qdt:FormattedDateTimeFormatContentType" use="required"/>
+            </xs:extension>
+          </xs:simpleContent>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:simpleType name="LineStatusCodeContentType">
+    <xs:restriction base="xs:token"/>
+  </xs:simpleType>
+  <xs:complexType name="LineStatusCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:LineStatusCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="PartyRoleCodeContentType">
+    <xs:restriction base="xs:token"/>
+  </xs:simpleType>
+  <xs:complexType name="PartyRoleCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:PartyRoleCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="PaymentMeansCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="1"/>
+      <xs:enumeration value="2"/>
+      <xs:enumeration value="3"/>
+      <xs:enumeration value="4"/>
+      <xs:enumeration value="5"/>
+      <xs:enumeration value="6"/>
+      <xs:enumeration value="7"/>
+      <xs:enumeration value="8"/>
+      <xs:enumeration value="9"/>
+      <xs:enumeration value="10"/>
+      <xs:enumeration value="11"/>
+      <xs:enumeration value="12"/>
+      <xs:enumeration value="13"/>
+      <xs:enumeration value="14"/>
+      <xs:enumeration value="15"/>
+      <xs:enumeration value="16"/>
+      <xs:enumeration value="17"/>
+      <xs:enumeration value="18"/>
+      <xs:enumeration value="19"/>
+      <xs:enumeration value="20"/>
+      <xs:enumeration value="21"/>
+      <xs:enumeration value="22"/>
+      <xs:enumeration value="23"/>
+      <xs:enumeration value="24"/>
+      <xs:enumeration value="25"/>
+      <xs:enumeration value="26"/>
+      <xs:enumeration value="27"/>
+      <xs:enumeration value="28"/>
+      <xs:enumeration value="29"/>
+      <xs:enumeration value="30"/>
+      <xs:enumeration value="31"/>
+      <xs:enumeration value="32"/>
+      <xs:enumeration value="33"/>
+      <xs:enumeration value="34"/>
+      <xs:enumeration value="35"/>
+      <xs:enumeration value="36"/>
+      <xs:enumeration value="37"/>
+      <xs:enumeration value="38"/>
+      <xs:enumeration value="39"/>
+      <xs:enumeration value="40"/>
+      <xs:enumeration value="41"/>
+      <xs:enumeration value="42"/>
+      <xs:enumeration value="43"/>
+      <xs:enumeration value="44"/>
+      <xs:enumeration value="45"/>
+      <xs:enumeration value="46"/>
+      <xs:enumeration value="47"/>
+      <xs:enumeration value="48"/>
+      <xs:enumeration value="49"/>
+      <xs:enumeration value="50"/>
+      <xs:enumeration value="51"/>
+      <xs:enumeration value="52"/>
+      <xs:enumeration value="53"/>
+      <xs:enumeration value="54"/>
+      <xs:enumeration value="55"/>
+      <xs:enumeration value="56"/>
+      <xs:enumeration value="57"/>
+      <xs:enumeration value="58"/>
+      <xs:enumeration value="59"/>
+      <xs:enumeration value="60"/>
+      <xs:enumeration value="61"/>
+      <xs:enumeration value="62"/>
+      <xs:enumeration value="63"/>
+      <xs:enumeration value="64"/>
+      <xs:enumeration value="65"/>
+      <xs:enumeration value="66"/>
+      <xs:enumeration value="67"/>
+      <xs:enumeration value="68"/>
+      <xs:enumeration value="69"/>
+      <xs:enumeration value="70"/>
+      <xs:enumeration value="74"/>
+      <xs:enumeration value="75"/>
+      <xs:enumeration value="76"/>
+      <xs:enumeration value="77"/>
+      <xs:enumeration value="78"/>
+      <xs:enumeration value="91"/>
+      <xs:enumeration value="92"/>
+      <xs:enumeration value="93"/>
+      <xs:enumeration value="94"/>
+      <xs:enumeration value="95"/>
+      <xs:enumeration value="96"/>
+      <xs:enumeration value="97"/>
+      <xs:enumeration value="ZZZ"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="PaymentMeansCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:PaymentMeansCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="ReferenceCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AAA"/>
+      <xs:enumeration value="AAB"/>
+      <xs:enumeration value="AAC"/>
+      <xs:enumeration value="AAD"/>
+      <xs:enumeration value="AAE"/>
+      <xs:enumeration value="AAF"/>
+      <xs:enumeration value="AAG"/>
+      <xs:enumeration value="AAH"/>
+      <xs:enumeration value="AAI"/>
+      <xs:enumeration value="AAJ"/>
+      <xs:enumeration value="AAK"/>
+      <xs:enumeration value="AAL"/>
+      <xs:enumeration value="AAM"/>
+      <xs:enumeration value="AAN"/>
+      <xs:enumeration value="AAO"/>
+      <xs:enumeration value="AAP"/>
+      <xs:enumeration value="AAQ"/>
+      <xs:enumeration value="AAR"/>
+      <xs:enumeration value="AAS"/>
+      <xs:enumeration value="AAT"/>
+      <xs:enumeration value="AAU"/>
+      <xs:enumeration value="AAV"/>
+      <xs:enumeration value="AAW"/>
+      <xs:enumeration value="AAX"/>
+      <xs:enumeration value="AAY"/>
+      <xs:enumeration value="AAZ"/>
+      <xs:enumeration value="ABA"/>
+      <xs:enumeration value="ABB"/>
+      <xs:enumeration value="ABC"/>
+      <xs:enumeration value="ABD"/>
+      <xs:enumeration value="ABE"/>
+      <xs:enumeration value="ABF"/>
+      <xs:enumeration value="ABG"/>
+      <xs:enumeration value="ABH"/>
+      <xs:enumeration value="ABI"/>
+      <xs:enumeration value="ABJ"/>
+      <xs:enumeration value="ABK"/>
+      <xs:enumeration value="ABL"/>
+      <xs:enumeration value="ABM"/>
+      <xs:enumeration value="ABN"/>
+      <xs:enumeration value="ABO"/>
+      <xs:enumeration value="ABP"/>
+      <xs:enumeration value="ABQ"/>
+      <xs:enumeration value="ABR"/>
+      <xs:enumeration value="ABS"/>
+      <xs:enumeration value="ABT"/>
+      <xs:enumeration value="ABU"/>
+      <xs:enumeration value="ABV"/>
+      <xs:enumeration value="ABW"/>
+      <xs:enumeration value="ABX"/>
+      <xs:enumeration value="ABY"/>
+      <xs:enumeration value="ABZ"/>
+      <xs:enumeration value="AC"/>
+      <xs:enumeration value="ACA"/>
+      <xs:enumeration value="ACB"/>
+      <xs:enumeration value="ACC"/>
+      <xs:enumeration value="ACD"/>
+      <xs:enumeration value="ACE"/>
+      <xs:enumeration value="ACF"/>
+      <xs:enumeration value="ACG"/>
+      <xs:enumeration value="ACH"/>
+      <xs:enumeration value="ACI"/>
+      <xs:enumeration value="ACJ"/>
+      <xs:enumeration value="ACK"/>
+      <xs:enumeration value="ACL"/>
+      <xs:enumeration value="ACN"/>
+      <xs:enumeration value="ACO"/>
+      <xs:enumeration value="ACP"/>
+      <xs:enumeration value="ACQ"/>
+      <xs:enumeration value="ACR"/>
+      <xs:enumeration value="ACT"/>
+      <xs:enumeration value="ACU"/>
+      <xs:enumeration value="ACV"/>
+      <xs:enumeration value="ACW"/>
+      <xs:enumeration value="ACX"/>
+      <xs:enumeration value="ACY"/>
+      <xs:enumeration value="ACZ"/>
+      <xs:enumeration value="ADA"/>
+      <xs:enumeration value="ADB"/>
+      <xs:enumeration value="ADC"/>
+      <xs:enumeration value="ADD"/>
+      <xs:enumeration value="ADE"/>
+      <xs:enumeration value="ADF"/>
+      <xs:enumeration value="ADG"/>
+      <xs:enumeration value="ADI"/>
+      <xs:enumeration value="ADJ"/>
+      <xs:enumeration value="ADK"/>
+      <xs:enumeration value="ADL"/>
+      <xs:enumeration value="ADM"/>
+      <xs:enumeration value="ADN"/>
+      <xs:enumeration value="ADO"/>
+      <xs:enumeration value="ADP"/>
+      <xs:enumeration value="ADQ"/>
+      <xs:enumeration value="ADT"/>
+      <xs:enumeration value="ADU"/>
+      <xs:enumeration value="ADV"/>
+      <xs:enumeration value="ADW"/>
+      <xs:enumeration value="ADX"/>
+      <xs:enumeration value="ADY"/>
+      <xs:enumeration value="ADZ"/>
+      <xs:enumeration value="AE"/>
+      <xs:enumeration value="AEA"/>
+      <xs:enumeration value="AEB"/>
+      <xs:enumeration value="AEC"/>
+      <xs:enumeration value="AED"/>
+      <xs:enumeration value="AEE"/>
+      <xs:enumeration value="AEF"/>
+      <xs:enumeration value="AEG"/>
+      <xs:enumeration value="AEH"/>
+      <xs:enumeration value="AEI"/>
+      <xs:enumeration value="AEJ"/>
+      <xs:enumeration value="AEK"/>
+      <xs:enumeration value="AEL"/>
+      <xs:enumeration value="AEM"/>
+      <xs:enumeration value="AEN"/>
+      <xs:enumeration value="AEO"/>
+      <xs:enumeration value="AEP"/>
+      <xs:enumeration value="AEQ"/>
+      <xs:enumeration value="AER"/>
+      <xs:enumeration value="AES"/>
+      <xs:enumeration value="AET"/>
+      <xs:enumeration value="AEU"/>
+      <xs:enumeration value="AEV"/>
+      <xs:enumeration value="AEW"/>
+      <xs:enumeration value="AEX"/>
+      <xs:enumeration value="AEY"/>
+      <xs:enumeration value="AEZ"/>
+      <xs:enumeration value="AF"/>
+      <xs:enumeration value="AFA"/>
+      <xs:enumeration value="AFB"/>
+      <xs:enumeration value="AFC"/>
+      <xs:enumeration value="AFD"/>
+      <xs:enumeration value="AFE"/>
+      <xs:enumeration value="AFF"/>
+      <xs:enumeration value="AFG"/>
+      <xs:enumeration value="AFH"/>
+      <xs:enumeration value="AFI"/>
+      <xs:enumeration value="AFJ"/>
+      <xs:enumeration value="AFK"/>
+      <xs:enumeration value="AFL"/>
+      <xs:enumeration value="AFM"/>
+      <xs:enumeration value="AFN"/>
+      <xs:enumeration value="AFO"/>
+      <xs:enumeration value="AFP"/>
+      <xs:enumeration value="AFQ"/>
+      <xs:enumeration value="AFR"/>
+      <xs:enumeration value="AFS"/>
+      <xs:enumeration value="AFT"/>
+      <xs:enumeration value="AFU"/>
+      <xs:enumeration value="AFV"/>
+      <xs:enumeration value="AFW"/>
+      <xs:enumeration value="AFX"/>
+      <xs:enumeration value="AFY"/>
+      <xs:enumeration value="AFZ"/>
+      <xs:enumeration value="AGA"/>
+      <xs:enumeration value="AGB"/>
+      <xs:enumeration value="AGC"/>
+      <xs:enumeration value="AGD"/>
+      <xs:enumeration value="AGE"/>
+      <xs:enumeration value="AGF"/>
+      <xs:enumeration value="AGG"/>
+      <xs:enumeration value="AGH"/>
+      <xs:enumeration value="AGI"/>
+      <xs:enumeration value="AGJ"/>
+      <xs:enumeration value="AGK"/>
+      <xs:enumeration value="AGL"/>
+      <xs:enumeration value="AGM"/>
+      <xs:enumeration value="AGN"/>
+      <xs:enumeration value="AGO"/>
+      <xs:enumeration value="AGP"/>
+      <xs:enumeration value="AGQ"/>
+      <xs:enumeration value="AGR"/>
+      <xs:enumeration value="AGS"/>
+      <xs:enumeration value="AGT"/>
+      <xs:enumeration value="AGU"/>
+      <xs:enumeration value="AGV"/>
+      <xs:enumeration value="AGW"/>
+      <xs:enumeration value="AGX"/>
+      <xs:enumeration value="AGY"/>
+      <xs:enumeration value="AGZ"/>
+      <xs:enumeration value="AHA"/>
+      <xs:enumeration value="AHB"/>
+      <xs:enumeration value="AHC"/>
+      <xs:enumeration value="AHD"/>
+      <xs:enumeration value="AHE"/>
+      <xs:enumeration value="AHF"/>
+      <xs:enumeration value="AHG"/>
+      <xs:enumeration value="AHH"/>
+      <xs:enumeration value="AHI"/>
+      <xs:enumeration value="AHJ"/>
+      <xs:enumeration value="AHK"/>
+      <xs:enumeration value="AHL"/>
+      <xs:enumeration value="AHM"/>
+      <xs:enumeration value="AHN"/>
+      <xs:enumeration value="AHO"/>
+      <xs:enumeration value="AHP"/>
+      <xs:enumeration value="AHQ"/>
+      <xs:enumeration value="AHR"/>
+      <xs:enumeration value="AHS"/>
+      <xs:enumeration value="AHT"/>
+      <xs:enumeration value="AHU"/>
+      <xs:enumeration value="AHV"/>
+      <xs:enumeration value="AHX"/>
+      <xs:enumeration value="AHY"/>
+      <xs:enumeration value="AHZ"/>
+      <xs:enumeration value="AIA"/>
+      <xs:enumeration value="AIB"/>
+      <xs:enumeration value="AIC"/>
+      <xs:enumeration value="AID"/>
+      <xs:enumeration value="AIE"/>
+      <xs:enumeration value="AIF"/>
+      <xs:enumeration value="AIG"/>
+      <xs:enumeration value="AIH"/>
+      <xs:enumeration value="AII"/>
+      <xs:enumeration value="AIJ"/>
+      <xs:enumeration value="AIK"/>
+      <xs:enumeration value="AIL"/>
+      <xs:enumeration value="AIM"/>
+      <xs:enumeration value="AIN"/>
+      <xs:enumeration value="AIO"/>
+      <xs:enumeration value="AIP"/>
+      <xs:enumeration value="AIQ"/>
+      <xs:enumeration value="AIR"/>
+      <xs:enumeration value="AIS"/>
+      <xs:enumeration value="AIT"/>
+      <xs:enumeration value="AIU"/>
+      <xs:enumeration value="AIV"/>
+      <xs:enumeration value="AIW"/>
+      <xs:enumeration value="AIX"/>
+      <xs:enumeration value="AIY"/>
+      <xs:enumeration value="AIZ"/>
+      <xs:enumeration value="AJA"/>
+      <xs:enumeration value="AJB"/>
+      <xs:enumeration value="AJC"/>
+      <xs:enumeration value="AJD"/>
+      <xs:enumeration value="AJE"/>
+      <xs:enumeration value="AJF"/>
+      <xs:enumeration value="AJG"/>
+      <xs:enumeration value="AJH"/>
+      <xs:enumeration value="AJI"/>
+      <xs:enumeration value="AJJ"/>
+      <xs:enumeration value="AJK"/>
+      <xs:enumeration value="AJL"/>
+      <xs:enumeration value="AJM"/>
+      <xs:enumeration value="AJN"/>
+      <xs:enumeration value="AJO"/>
+      <xs:enumeration value="AJP"/>
+      <xs:enumeration value="AJQ"/>
+      <xs:enumeration value="AJR"/>
+      <xs:enumeration value="AJS"/>
+      <xs:enumeration value="AJT"/>
+      <xs:enumeration value="AJU"/>
+      <xs:enumeration value="AJV"/>
+      <xs:enumeration value="AJW"/>
+      <xs:enumeration value="AJX"/>
+      <xs:enumeration value="AJY"/>
+      <xs:enumeration value="AJZ"/>
+      <xs:enumeration value="AKA"/>
+      <xs:enumeration value="AKB"/>
+      <xs:enumeration value="AKC"/>
+      <xs:enumeration value="AKD"/>
+      <xs:enumeration value="AKE"/>
+      <xs:enumeration value="AKF"/>
+      <xs:enumeration value="AKG"/>
+      <xs:enumeration value="AKH"/>
+      <xs:enumeration value="AKI"/>
+      <xs:enumeration value="AKJ"/>
+      <xs:enumeration value="AKK"/>
+      <xs:enumeration value="AKL"/>
+      <xs:enumeration value="AKM"/>
+      <xs:enumeration value="AKN"/>
+      <xs:enumeration value="AKO"/>
+      <xs:enumeration value="AKP"/>
+      <xs:enumeration value="AKQ"/>
+      <xs:enumeration value="AKR"/>
+      <xs:enumeration value="AKS"/>
+      <xs:enumeration value="AKT"/>
+      <xs:enumeration value="AKU"/>
+      <xs:enumeration value="AKV"/>
+      <xs:enumeration value="AKW"/>
+      <xs:enumeration value="AKX"/>
+      <xs:enumeration value="AKY"/>
+      <xs:enumeration value="AKZ"/>
+      <xs:enumeration value="ALA"/>
+      <xs:enumeration value="ALB"/>
+      <xs:enumeration value="ALC"/>
+      <xs:enumeration value="ALD"/>
+      <xs:enumeration value="ALE"/>
+      <xs:enumeration value="ALF"/>
+      <xs:enumeration value="ALG"/>
+      <xs:enumeration value="ALH"/>
+      <xs:enumeration value="ALI"/>
+      <xs:enumeration value="ALJ"/>
+      <xs:enumeration value="ALK"/>
+      <xs:enumeration value="ALL"/>
+      <xs:enumeration value="ALM"/>
+      <xs:enumeration value="ALN"/>
+      <xs:enumeration value="ALO"/>
+      <xs:enumeration value="ALP"/>
+      <xs:enumeration value="ALQ"/>
+      <xs:enumeration value="ALR"/>
+      <xs:enumeration value="ALS"/>
+      <xs:enumeration value="ALT"/>
+      <xs:enumeration value="ALU"/>
+      <xs:enumeration value="ALV"/>
+      <xs:enumeration value="ALW"/>
+      <xs:enumeration value="ALX"/>
+      <xs:enumeration value="ALY"/>
+      <xs:enumeration value="ALZ"/>
+      <xs:enumeration value="AMA"/>
+      <xs:enumeration value="AMB"/>
+      <xs:enumeration value="AMC"/>
+      <xs:enumeration value="AMD"/>
+      <xs:enumeration value="AME"/>
+      <xs:enumeration value="AMF"/>
+      <xs:enumeration value="AMG"/>
+      <xs:enumeration value="AMH"/>
+      <xs:enumeration value="AMI"/>
+      <xs:enumeration value="AMJ"/>
+      <xs:enumeration value="AMK"/>
+      <xs:enumeration value="AML"/>
+      <xs:enumeration value="AMM"/>
+      <xs:enumeration value="AMN"/>
+      <xs:enumeration value="AMO"/>
+      <xs:enumeration value="AMP"/>
+      <xs:enumeration value="AMQ"/>
+      <xs:enumeration value="AMR"/>
+      <xs:enumeration value="AMS"/>
+      <xs:enumeration value="AMT"/>
+      <xs:enumeration value="AMU"/>
+      <xs:enumeration value="AMV"/>
+      <xs:enumeration value="AMW"/>
+      <xs:enumeration value="AMX"/>
+      <xs:enumeration value="AMY"/>
+      <xs:enumeration value="AMZ"/>
+      <xs:enumeration value="ANA"/>
+      <xs:enumeration value="ANB"/>
+      <xs:enumeration value="ANC"/>
+      <xs:enumeration value="AND"/>
+      <xs:enumeration value="ANE"/>
+      <xs:enumeration value="ANF"/>
+      <xs:enumeration value="ANG"/>
+      <xs:enumeration value="ANH"/>
+      <xs:enumeration value="ANI"/>
+      <xs:enumeration value="ANJ"/>
+      <xs:enumeration value="ANK"/>
+      <xs:enumeration value="ANL"/>
+      <xs:enumeration value="ANM"/>
+      <xs:enumeration value="ANN"/>
+      <xs:enumeration value="ANO"/>
+      <xs:enumeration value="ANP"/>
+      <xs:enumeration value="ANQ"/>
+      <xs:enumeration value="ANR"/>
+      <xs:enumeration value="ANS"/>
+      <xs:enumeration value="ANT"/>
+      <xs:enumeration value="ANU"/>
+      <xs:enumeration value="ANV"/>
+      <xs:enumeration value="ANW"/>
+      <xs:enumeration value="ANX"/>
+      <xs:enumeration value="ANY"/>
+      <xs:enumeration value="AOA"/>
+      <xs:enumeration value="AOD"/>
+      <xs:enumeration value="AOE"/>
+      <xs:enumeration value="AOF"/>
+      <xs:enumeration value="AOG"/>
+      <xs:enumeration value="AOH"/>
+      <xs:enumeration value="AOI"/>
+      <xs:enumeration value="AOJ"/>
+      <xs:enumeration value="AOK"/>
+      <xs:enumeration value="AOL"/>
+      <xs:enumeration value="AOM"/>
+      <xs:enumeration value="AON"/>
+      <xs:enumeration value="AOO"/>
+      <xs:enumeration value="AOP"/>
+      <xs:enumeration value="AOQ"/>
+      <xs:enumeration value="AOR"/>
+      <xs:enumeration value="AOS"/>
+      <xs:enumeration value="AOT"/>
+      <xs:enumeration value="AOU"/>
+      <xs:enumeration value="AOV"/>
+      <xs:enumeration value="AOW"/>
+      <xs:enumeration value="AOX"/>
+      <xs:enumeration value="AOY"/>
+      <xs:enumeration value="AOZ"/>
+      <xs:enumeration value="AP"/>
+      <xs:enumeration value="APA"/>
+      <xs:enumeration value="APB"/>
+      <xs:enumeration value="APC"/>
+      <xs:enumeration value="APD"/>
+      <xs:enumeration value="APE"/>
+      <xs:enumeration value="APF"/>
+      <xs:enumeration value="APG"/>
+      <xs:enumeration value="APH"/>
+      <xs:enumeration value="API"/>
+      <xs:enumeration value="APJ"/>
+      <xs:enumeration value="APK"/>
+      <xs:enumeration value="APL"/>
+      <xs:enumeration value="APM"/>
+      <xs:enumeration value="APN"/>
+      <xs:enumeration value="APO"/>
+      <xs:enumeration value="APP"/>
+      <xs:enumeration value="APQ"/>
+      <xs:enumeration value="APR"/>
+      <xs:enumeration value="APS"/>
+      <xs:enumeration value="APT"/>
+      <xs:enumeration value="APU"/>
+      <xs:enumeration value="APV"/>
+      <xs:enumeration value="APW"/>
+      <xs:enumeration value="APX"/>
+      <xs:enumeration value="APY"/>
+      <xs:enumeration value="APZ"/>
+      <xs:enumeration value="AQA"/>
+      <xs:enumeration value="AQB"/>
+      <xs:enumeration value="AQC"/>
+      <xs:enumeration value="AQD"/>
+      <xs:enumeration value="AQE"/>
+      <xs:enumeration value="AQF"/>
+      <xs:enumeration value="AQG"/>
+      <xs:enumeration value="AQH"/>
+      <xs:enumeration value="AQI"/>
+      <xs:enumeration value="AQJ"/>
+      <xs:enumeration value="AQK"/>
+      <xs:enumeration value="AQL"/>
+      <xs:enumeration value="AQM"/>
+      <xs:enumeration value="AQN"/>
+      <xs:enumeration value="AQO"/>
+      <xs:enumeration value="AQP"/>
+      <xs:enumeration value="AQQ"/>
+      <xs:enumeration value="AQR"/>
+      <xs:enumeration value="AQS"/>
+      <xs:enumeration value="AQT"/>
+      <xs:enumeration value="AQU"/>
+      <xs:enumeration value="AQV"/>
+      <xs:enumeration value="AQW"/>
+      <xs:enumeration value="AQX"/>
+      <xs:enumeration value="AQY"/>
+      <xs:enumeration value="AQZ"/>
+      <xs:enumeration value="ARA"/>
+      <xs:enumeration value="ARB"/>
+      <xs:enumeration value="ARC"/>
+      <xs:enumeration value="ARD"/>
+      <xs:enumeration value="ARE"/>
+      <xs:enumeration value="ARF"/>
+      <xs:enumeration value="ARG"/>
+      <xs:enumeration value="ARH"/>
+      <xs:enumeration value="ARI"/>
+      <xs:enumeration value="ARJ"/>
+      <xs:enumeration value="ARK"/>
+      <xs:enumeration value="ARL"/>
+      <xs:enumeration value="ARM"/>
+      <xs:enumeration value="ARN"/>
+      <xs:enumeration value="ARO"/>
+      <xs:enumeration value="ARP"/>
+      <xs:enumeration value="ARQ"/>
+      <xs:enumeration value="ARR"/>
+      <xs:enumeration value="ARS"/>
+      <xs:enumeration value="ART"/>
+      <xs:enumeration value="ARU"/>
+      <xs:enumeration value="ARV"/>
+      <xs:enumeration value="ARW"/>
+      <xs:enumeration value="ARX"/>
+      <xs:enumeration value="ARY"/>
+      <xs:enumeration value="ARZ"/>
+      <xs:enumeration value="ASA"/>
+      <xs:enumeration value="ASB"/>
+      <xs:enumeration value="ASC"/>
+      <xs:enumeration value="ASD"/>
+      <xs:enumeration value="ASE"/>
+      <xs:enumeration value="ASF"/>
+      <xs:enumeration value="ASG"/>
+      <xs:enumeration value="ASH"/>
+      <xs:enumeration value="ASI"/>
+      <xs:enumeration value="ASJ"/>
+      <xs:enumeration value="ASK"/>
+      <xs:enumeration value="ASL"/>
+      <xs:enumeration value="ASM"/>
+      <xs:enumeration value="ASN"/>
+      <xs:enumeration value="ASO"/>
+      <xs:enumeration value="ASP"/>
+      <xs:enumeration value="ASQ"/>
+      <xs:enumeration value="ASR"/>
+      <xs:enumeration value="ASS"/>
+      <xs:enumeration value="AST"/>
+      <xs:enumeration value="ASU"/>
+      <xs:enumeration value="ASV"/>
+      <xs:enumeration value="ASW"/>
+      <xs:enumeration value="ASX"/>
+      <xs:enumeration value="ASY"/>
+      <xs:enumeration value="ASZ"/>
+      <xs:enumeration value="ATA"/>
+      <xs:enumeration value="ATB"/>
+      <xs:enumeration value="ATC"/>
+      <xs:enumeration value="ATD"/>
+      <xs:enumeration value="ATE"/>
+      <xs:enumeration value="ATF"/>
+      <xs:enumeration value="ATG"/>
+      <xs:enumeration value="ATH"/>
+      <xs:enumeration value="ATI"/>
+      <xs:enumeration value="ATJ"/>
+      <xs:enumeration value="ATK"/>
+      <xs:enumeration value="ATL"/>
+      <xs:enumeration value="ATM"/>
+      <xs:enumeration value="ATN"/>
+      <xs:enumeration value="ATO"/>
+      <xs:enumeration value="ATP"/>
+      <xs:enumeration value="ATQ"/>
+      <xs:enumeration value="ATR"/>
+      <xs:enumeration value="ATS"/>
+      <xs:enumeration value="ATT"/>
+      <xs:enumeration value="ATU"/>
+      <xs:enumeration value="ATV"/>
+      <xs:enumeration value="ATW"/>
+      <xs:enumeration value="ATX"/>
+      <xs:enumeration value="ATY"/>
+      <xs:enumeration value="ATZ"/>
+      <xs:enumeration value="AU"/>
+      <xs:enumeration value="AUA"/>
+      <xs:enumeration value="AUB"/>
+      <xs:enumeration value="AUC"/>
+      <xs:enumeration value="AUD"/>
+      <xs:enumeration value="AUE"/>
+      <xs:enumeration value="AUF"/>
+      <xs:enumeration value="AUG"/>
+      <xs:enumeration value="AUH"/>
+      <xs:enumeration value="AUI"/>
+      <xs:enumeration value="AUJ"/>
+      <xs:enumeration value="AUK"/>
+      <xs:enumeration value="AUL"/>
+      <xs:enumeration value="AUM"/>
+      <xs:enumeration value="AUN"/>
+      <xs:enumeration value="AUO"/>
+      <xs:enumeration value="AUP"/>
+      <xs:enumeration value="AUQ"/>
+      <xs:enumeration value="AUR"/>
+      <xs:enumeration value="AUS"/>
+      <xs:enumeration value="AUT"/>
+      <xs:enumeration value="AUU"/>
+      <xs:enumeration value="AUV"/>
+      <xs:enumeration value="AUW"/>
+      <xs:enumeration value="AUX"/>
+      <xs:enumeration value="AUY"/>
+      <xs:enumeration value="AUZ"/>
+      <xs:enumeration value="AV"/>
+      <xs:enumeration value="AVA"/>
+      <xs:enumeration value="AVB"/>
+      <xs:enumeration value="AVC"/>
+      <xs:enumeration value="AVD"/>
+      <xs:enumeration value="AVE"/>
+      <xs:enumeration value="AVF"/>
+      <xs:enumeration value="AVG"/>
+      <xs:enumeration value="AVH"/>
+      <xs:enumeration value="AVI"/>
+      <xs:enumeration value="AVJ"/>
+      <xs:enumeration value="AVK"/>
+      <xs:enumeration value="AVL"/>
+      <xs:enumeration value="AVM"/>
+      <xs:enumeration value="AVN"/>
+      <xs:enumeration value="AVO"/>
+      <xs:enumeration value="AVP"/>
+      <xs:enumeration value="AVQ"/>
+      <xs:enumeration value="AVR"/>
+      <xs:enumeration value="AVS"/>
+      <xs:enumeration value="AVT"/>
+      <xs:enumeration value="AVU"/>
+      <xs:enumeration value="AVV"/>
+      <xs:enumeration value="AVW"/>
+      <xs:enumeration value="AVX"/>
+      <xs:enumeration value="AVY"/>
+      <xs:enumeration value="AVZ"/>
+      <xs:enumeration value="AWA"/>
+      <xs:enumeration value="AWB"/>
+      <xs:enumeration value="AWC"/>
+      <xs:enumeration value="AWD"/>
+      <xs:enumeration value="AWE"/>
+      <xs:enumeration value="AWF"/>
+      <xs:enumeration value="AWG"/>
+      <xs:enumeration value="AWH"/>
+      <xs:enumeration value="AWI"/>
+      <xs:enumeration value="AWJ"/>
+      <xs:enumeration value="AWK"/>
+      <xs:enumeration value="AWL"/>
+      <xs:enumeration value="AWM"/>
+      <xs:enumeration value="AWN"/>
+      <xs:enumeration value="AWO"/>
+      <xs:enumeration value="AWP"/>
+      <xs:enumeration value="AWQ"/>
+      <xs:enumeration value="AWR"/>
+      <xs:enumeration value="AWS"/>
+      <xs:enumeration value="AWT"/>
+      <xs:enumeration value="AWU"/>
+      <xs:enumeration value="AWV"/>
+      <xs:enumeration value="AWW"/>
+      <xs:enumeration value="AWX"/>
+      <xs:enumeration value="AWY"/>
+      <xs:enumeration value="AWZ"/>
+      <xs:enumeration value="AXA"/>
+      <xs:enumeration value="AXB"/>
+      <xs:enumeration value="AXC"/>
+      <xs:enumeration value="AXD"/>
+      <xs:enumeration value="AXE"/>
+      <xs:enumeration value="AXF"/>
+      <xs:enumeration value="AXG"/>
+      <xs:enumeration value="AXH"/>
+      <xs:enumeration value="AXI"/>
+      <xs:enumeration value="AXJ"/>
+      <xs:enumeration value="AXK"/>
+      <xs:enumeration value="AXL"/>
+      <xs:enumeration value="AXM"/>
+      <xs:enumeration value="AXN"/>
+      <xs:enumeration value="AXO"/>
+      <xs:enumeration value="AXP"/>
+      <xs:enumeration value="AXQ"/>
+      <xs:enumeration value="AXR"/>
+      <xs:enumeration value="AXS"/>
+      <xs:enumeration value="BA"/>
+      <xs:enumeration value="BC"/>
+      <xs:enumeration value="BD"/>
+      <xs:enumeration value="BE"/>
+      <xs:enumeration value="BH"/>
+      <xs:enumeration value="BM"/>
+      <xs:enumeration value="BN"/>
+      <xs:enumeration value="BO"/>
+      <xs:enumeration value="BR"/>
+      <xs:enumeration value="BT"/>
+      <xs:enumeration value="BTP"/>
+      <xs:enumeration value="BW"/>
+      <xs:enumeration value="CAS"/>
+      <xs:enumeration value="CAT"/>
+      <xs:enumeration value="CAU"/>
+      <xs:enumeration value="CAV"/>
+      <xs:enumeration value="CAW"/>
+      <xs:enumeration value="CAX"/>
+      <xs:enumeration value="CAY"/>
+      <xs:enumeration value="CAZ"/>
+      <xs:enumeration value="CBA"/>
+      <xs:enumeration value="CBB"/>
+      <xs:enumeration value="CD"/>
+      <xs:enumeration value="CEC"/>
+      <xs:enumeration value="CED"/>
+      <xs:enumeration value="CFE"/>
+      <xs:enumeration value="CFF"/>
+      <xs:enumeration value="CFO"/>
+      <xs:enumeration value="CG"/>
+      <xs:enumeration value="CH"/>
+      <xs:enumeration value="CK"/>
+      <xs:enumeration value="CKN"/>
+      <xs:enumeration value="CM"/>
+      <xs:enumeration value="CMR"/>
+      <xs:enumeration value="CN"/>
+      <xs:enumeration value="CNO"/>
+      <xs:enumeration value="COF"/>
+      <xs:enumeration value="CP"/>
+      <xs:enumeration value="CR"/>
+      <xs:enumeration value="CRN"/>
+      <xs:enumeration value="CS"/>
+      <xs:enumeration value="CST"/>
+      <xs:enumeration value="CT"/>
+      <xs:enumeration value="CU"/>
+      <xs:enumeration value="CV"/>
+      <xs:enumeration value="CW"/>
+      <xs:enumeration value="CZ"/>
+      <xs:enumeration value="DA"/>
+      <xs:enumeration value="DAN"/>
+      <xs:enumeration value="DB"/>
+      <xs:enumeration value="DI"/>
+      <xs:enumeration value="DL"/>
+      <xs:enumeration value="DM"/>
+      <xs:enumeration value="DQ"/>
+      <xs:enumeration value="DR"/>
+      <xs:enumeration value="EA"/>
+      <xs:enumeration value="EB"/>
+      <xs:enumeration value="ED"/>
+      <xs:enumeration value="EE"/>
+      <xs:enumeration value="EEP"/>
+      <xs:enumeration value="EI"/>
+      <xs:enumeration value="EN"/>
+      <xs:enumeration value="EQ"/>
+      <xs:enumeration value="ER"/>
+      <xs:enumeration value="ERN"/>
+      <xs:enumeration value="ET"/>
+      <xs:enumeration value="EX"/>
+      <xs:enumeration value="FC"/>
+      <xs:enumeration value="FF"/>
+      <xs:enumeration value="FI"/>
+      <xs:enumeration value="FLW"/>
+      <xs:enumeration value="FN"/>
+      <xs:enumeration value="FO"/>
+      <xs:enumeration value="FS"/>
+      <xs:enumeration value="FT"/>
+      <xs:enumeration value="FV"/>
+      <xs:enumeration value="FX"/>
+      <xs:enumeration value="GA"/>
+      <xs:enumeration value="GC"/>
+      <xs:enumeration value="GD"/>
+      <xs:enumeration value="GDN"/>
+      <xs:enumeration value="GN"/>
+      <xs:enumeration value="HS"/>
+      <xs:enumeration value="HWB"/>
+      <xs:enumeration value="IA"/>
+      <xs:enumeration value="IB"/>
+      <xs:enumeration value="ICA"/>
+      <xs:enumeration value="ICE"/>
+      <xs:enumeration value="ICO"/>
+      <xs:enumeration value="II"/>
+      <xs:enumeration value="IL"/>
+      <xs:enumeration value="INB"/>
+      <xs:enumeration value="INN"/>
+      <xs:enumeration value="INO"/>
+      <xs:enumeration value="IP"/>
+      <xs:enumeration value="IS"/>
+      <xs:enumeration value="IT"/>
+      <xs:enumeration value="IV"/>
+      <xs:enumeration value="JB"/>
+      <xs:enumeration value="JE"/>
+      <xs:enumeration value="LA"/>
+      <xs:enumeration value="LAN"/>
+      <xs:enumeration value="LAR"/>
+      <xs:enumeration value="LB"/>
+      <xs:enumeration value="LC"/>
+      <xs:enumeration value="LI"/>
+      <xs:enumeration value="LO"/>
+      <xs:enumeration value="LRC"/>
+      <xs:enumeration value="LS"/>
+      <xs:enumeration value="MA"/>
+      <xs:enumeration value="MB"/>
+      <xs:enumeration value="MF"/>
+      <xs:enumeration value="MG"/>
+      <xs:enumeration value="MH"/>
+      <xs:enumeration value="MR"/>
+      <xs:enumeration value="MRN"/>
+      <xs:enumeration value="MS"/>
+      <xs:enumeration value="MSS"/>
+      <xs:enumeration value="MWB"/>
+      <xs:enumeration value="NA"/>
+      <xs:enumeration value="NF"/>
+      <xs:enumeration value="OH"/>
+      <xs:enumeration value="OI"/>
+      <xs:enumeration value="ON"/>
+      <xs:enumeration value="OP"/>
+      <xs:enumeration value="OR"/>
+      <xs:enumeration value="PB"/>
+      <xs:enumeration value="PC"/>
+      <xs:enumeration value="PD"/>
+      <xs:enumeration value="PE"/>
+      <xs:enumeration value="PF"/>
+      <xs:enumeration value="PI"/>
+      <xs:enumeration value="PK"/>
+      <xs:enumeration value="PL"/>
+      <xs:enumeration value="POR"/>
+      <xs:enumeration value="PP"/>
+      <xs:enumeration value="PQ"/>
+      <xs:enumeration value="PR"/>
+      <xs:enumeration value="PS"/>
+      <xs:enumeration value="PW"/>
+      <xs:enumeration value="PY"/>
+      <xs:enumeration value="RA"/>
+      <xs:enumeration value="RC"/>
+      <xs:enumeration value="RCN"/>
+      <xs:enumeration value="RE"/>
+      <xs:enumeration value="REN"/>
+      <xs:enumeration value="RF"/>
+      <xs:enumeration value="RR"/>
+      <xs:enumeration value="RT"/>
+      <xs:enumeration value="SA"/>
+      <xs:enumeration value="SB"/>
+      <xs:enumeration value="SD"/>
+      <xs:enumeration value="SE"/>
+      <xs:enumeration value="SEA"/>
+      <xs:enumeration value="SF"/>
+      <xs:enumeration value="SH"/>
+      <xs:enumeration value="SI"/>
+      <xs:enumeration value="SM"/>
+      <xs:enumeration value="SN"/>
+      <xs:enumeration value="SP"/>
+      <xs:enumeration value="SQ"/>
+      <xs:enumeration value="SRN"/>
+      <xs:enumeration value="SS"/>
+      <xs:enumeration value="STA"/>
+      <xs:enumeration value="SW"/>
+      <xs:enumeration value="SZ"/>
+      <xs:enumeration value="TB"/>
+      <xs:enumeration value="TCR"/>
+      <xs:enumeration value="TE"/>
+      <xs:enumeration value="TF"/>
+      <xs:enumeration value="TI"/>
+      <xs:enumeration value="TIN"/>
+      <xs:enumeration value="TL"/>
+      <xs:enumeration value="TN"/>
+      <xs:enumeration value="TP"/>
+      <xs:enumeration value="UAR"/>
+      <xs:enumeration value="UC"/>
+      <xs:enumeration value="UCN"/>
+      <xs:enumeration value="UN"/>
+      <xs:enumeration value="UO"/>
+      <xs:enumeration value="URI"/>
+      <xs:enumeration value="VA"/>
+      <xs:enumeration value="VC"/>
+      <xs:enumeration value="VGR"/>
+      <xs:enumeration value="VM"/>
+      <xs:enumeration value="VN"/>
+      <xs:enumeration value="VON"/>
+      <xs:enumeration value="VOR"/>
+      <xs:enumeration value="VP"/>
+      <xs:enumeration value="VR"/>
+      <xs:enumeration value="VS"/>
+      <xs:enumeration value="VT"/>
+      <xs:enumeration value="VV"/>
+      <xs:enumeration value="WE"/>
+      <xs:enumeration value="WM"/>
+      <xs:enumeration value="WN"/>
+      <xs:enumeration value="WR"/>
+      <xs:enumeration value="WS"/>
+      <xs:enumeration value="WY"/>
+      <xs:enumeration value="XA"/>
+      <xs:enumeration value="XC"/>
+      <xs:enumeration value="XP"/>
+      <xs:enumeration value="ZZZ"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="ReferenceCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:ReferenceCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="TaxCategoryCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="A"/>
+      <xs:enumeration value="AA"/>
+      <xs:enumeration value="AB"/>
+      <xs:enumeration value="AC"/>
+      <xs:enumeration value="AD"/>
+      <xs:enumeration value="AE"/>
+      <xs:enumeration value="B"/>
+      <xs:enumeration value="C"/>
+      <xs:enumeration value="D"/>
+      <xs:enumeration value="E"/>
+      <xs:enumeration value="F"/>
+      <xs:enumeration value="G"/>
+      <xs:enumeration value="H"/>
+      <xs:enumeration value="I"/>
+      <xs:enumeration value="J"/>
+      <xs:enumeration value="K"/>
+      <xs:enumeration value="L"/>
+      <xs:enumeration value="M"/>
+      <xs:enumeration value="O"/>
+      <xs:enumeration value="S"/>
+      <xs:enumeration value="Z"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="TaxCategoryCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:TaxCategoryCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="TaxTypeCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AAA"/>
+      <xs:enumeration value="AAB"/>
+      <xs:enumeration value="AAC"/>
+      <xs:enumeration value="AAD"/>
+      <xs:enumeration value="AAE"/>
+      <xs:enumeration value="AAF"/>
+      <xs:enumeration value="AAG"/>
+      <xs:enumeration value="AAH"/>
+      <xs:enumeration value="AAI"/>
+      <xs:enumeration value="AAJ"/>
+      <xs:enumeration value="AAK"/>
+      <xs:enumeration value="AAL"/>
+      <xs:enumeration value="AAM"/>
+      <xs:enumeration value="ADD"/>
+      <xs:enumeration value="BOL"/>
+      <xs:enumeration value="CAP"/>
+      <xs:enumeration value="CAR"/>
+      <xs:enumeration value="COC"/>
+      <xs:enumeration value="CST"/>
+      <xs:enumeration value="CUD"/>
+      <xs:enumeration value="CVD"/>
+      <xs:enumeration value="ENV"/>
+      <xs:enumeration value="EXC"/>
+      <xs:enumeration value="EXP"/>
+      <xs:enumeration value="FET"/>
+      <xs:enumeration value="FRE"/>
+      <xs:enumeration value="GCN"/>
+      <xs:enumeration value="GST"/>
+      <xs:enumeration value="ILL"/>
+      <xs:enumeration value="IMP"/>
+      <xs:enumeration value="IND"/>
+      <xs:enumeration value="LAC"/>
+      <xs:enumeration value="LCN"/>
+      <xs:enumeration value="LDP"/>
+      <xs:enumeration value="LOC"/>
+      <xs:enumeration value="LST"/>
+      <xs:enumeration value="MCA"/>
+      <xs:enumeration value="MCD"/>
+      <xs:enumeration value="OTH"/>
+      <xs:enumeration value="PDB"/>
+      <xs:enumeration value="PDC"/>
+      <xs:enumeration value="PRF"/>
+      <xs:enumeration value="SCN"/>
+      <xs:enumeration value="SSS"/>
+      <xs:enumeration value="STT"/>
+      <xs:enumeration value="SUP"/>
+      <xs:enumeration value="SUR"/>
+      <xs:enumeration value="SWT"/>
+      <xs:enumeration value="TAC"/>
+      <xs:enumeration value="TOT"/>
+      <xs:enumeration value="TOX"/>
+      <xs:enumeration value="TTA"/>
+      <xs:enumeration value="VAD"/>
+      <xs:enumeration value="VAT"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="TaxTypeCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:TaxTypeCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="TimeReferenceCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="5"/>
+      <xs:enumeration value="29"/>
+      <xs:enumeration value="72"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="TimeReferenceCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:TimeReferenceCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="TransportModeCodeContentType">
+    <xs:restriction base="xs:token"/>
+  </xs:simpleType>
+  <xs:complexType name="TransportModeCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:TransportModeCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd	(revision 8435)
@@ -0,0 +1,458 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    elementFormDefault="qualified">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" schemaLocation="FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:complexType name="AdvancePaymentType">
+    <xs:sequence>
+      <xs:element name="PaidAmount" type="udt:AmountType"/>
+      <xs:element name="FormattedReceivedDateTime" type="qdt:FormattedDateTimeType" minOccurs="0"/>
+      <xs:element name="IncludedTradeTax" type="ram:TradeTaxType" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="CreditorFinancialAccountType">
+    <xs:sequence>
+      <xs:element name="IBANID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="AccountName" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="ProprietaryID" type="udt:IDType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="CreditorFinancialInstitutionType">
+    <xs:sequence>
+      <xs:element name="BICID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DebtorFinancialAccountType">
+    <xs:sequence>
+      <xs:element name="IBANID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DocumentContextParameterType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DocumentLineDocumentType">
+    <xs:sequence>
+      <xs:element name="LineID" type="udt:IDType"/>
+      <xs:element name="ParentLineID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="LineStatusCode" type="qdt:LineStatusCodeType" minOccurs="0"/>
+      <xs:element name="LineStatusReasonCode" type="udt:CodeType" minOccurs="0"/>
+      <xs:element name="IncludedNote" type="ram:NoteType" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ExchangedDocumentContextType">
+    <xs:sequence>
+      <xs:element name="TestIndicator" type="udt:IndicatorType" minOccurs="0"/>
+      <xs:element name="BusinessProcessSpecifiedDocumentContextParameter" type="ram:DocumentContextParameterType" minOccurs="0"/>
+      <xs:element name="GuidelineSpecifiedDocumentContextParameter" type="ram:DocumentContextParameterType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ExchangedDocumentType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+      <xs:element name="Name" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="TypeCode" type="qdt:DocumentCodeType"/>
+      <xs:element name="IssueDateTime" type="udt:DateTimeType"/>
+      <xs:element name="CopyIndicator" type="udt:IndicatorType" minOccurs="0"/>
+      <xs:element name="LanguageID" type="udt:IDType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="IncludedNote" type="ram:NoteType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="EffectiveSpecifiedPeriod" type="ram:SpecifiedPeriodType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeAgreementType">
+    <xs:sequence>
+      <xs:element name="BuyerReference" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="SellerTradeParty" type="ram:TradePartyType"/>
+      <xs:element name="BuyerTradeParty" type="ram:TradePartyType"/>
+      <xs:element name="SalesAgentTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="BuyerTaxRepresentativeTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="SellerTaxRepresentativeTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="ProductEndUserTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="ApplicableTradeDeliveryTerms" type="ram:TradeDeliveryTermsType" minOccurs="0"/>
+      <xs:element name="SellerOrderReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="BuyerOrderReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="QuotationReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="ContractReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="AdditionalReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="BuyerAgentTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="SpecifiedProcuringProject" type="ram:ProcuringProjectType" minOccurs="0"/>
+      <xs:element name="UltimateCustomerOrderReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeDeliveryType">
+    <xs:sequence>
+      <xs:element name="RelatedSupplyChainConsignment" type="ram:SupplyChainConsignmentType" minOccurs="0"/>
+      <xs:element name="ShipToTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="UltimateShipToTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="ShipFromTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="ActualDeliverySupplyChainEvent" type="ram:SupplyChainEventType" minOccurs="0"/>
+      <xs:element name="DespatchAdviceReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="ReceivingAdviceReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="DeliveryNoteReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeSettlementType">
+    <xs:sequence>
+      <xs:element name="CreditorReferenceID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="PaymentReference" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="TaxCurrencyCode" type="qdt:CurrencyCodeType" minOccurs="0"/>
+      <xs:element name="InvoiceCurrencyCode" type="qdt:CurrencyCodeType"/>
+      <xs:element name="InvoiceIssuerReference" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="InvoicerTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="InvoiceeTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="PayeeTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="PayerTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="TaxApplicableTradeCurrencyExchange" type="ram:TradeCurrencyExchangeType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeSettlementPaymentMeans" type="ram:TradeSettlementPaymentMeansType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="ApplicableTradeTax" type="ram:TradeTaxType" maxOccurs="unbounded"/>
+      <xs:element name="BillingSpecifiedPeriod" type="ram:SpecifiedPeriodType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeAllowanceCharge" type="ram:TradeAllowanceChargeType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="SpecifiedLogisticsServiceCharge" type="ram:LogisticsServiceChargeType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="SpecifiedTradePaymentTerms" type="ram:TradePaymentTermsType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="SpecifiedTradeSettlementHeaderMonetarySummation" type="ram:TradeSettlementHeaderMonetarySummationType"/>
+      <xs:element name="InvoiceReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="ReceivableSpecifiedTradeAccountingAccount" type="ram:TradeAccountingAccountType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="SpecifiedAdvancePayment" type="ram:AdvancePaymentType" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LegalOrganizationType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="TradingBusinessName" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="PostalTradeAddress" type="ram:TradeAddressType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LineTradeAgreementType">
+    <xs:sequence>
+      <xs:element name="BuyerOrderReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="QuotationReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="ContractReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="AdditionalReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="GrossPriceProductTradePrice" type="ram:TradePriceType" minOccurs="0"/>
+      <xs:element name="NetPriceProductTradePrice" type="ram:TradePriceType"/>
+      <xs:element name="UltimateCustomerOrderReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LineTradeDeliveryType">
+    <xs:sequence>
+      <xs:element name="BilledQuantity" type="udt:QuantityType"/>
+      <xs:element name="ChargeFreeQuantity" type="udt:QuantityType" minOccurs="0"/>
+      <xs:element name="PackageQuantity" type="udt:QuantityType" minOccurs="0"/>
+      <xs:element name="ShipToTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="UltimateShipToTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+      <xs:element name="ActualDeliverySupplyChainEvent" type="ram:SupplyChainEventType" minOccurs="0"/>
+      <xs:element name="DespatchAdviceReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="ReceivingAdviceReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="DeliveryNoteReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LineTradeSettlementType">
+    <xs:sequence>
+      <xs:element name="ApplicableTradeTax" type="ram:TradeTaxType" maxOccurs="unbounded"/>
+      <xs:element name="BillingSpecifiedPeriod" type="ram:SpecifiedPeriodType" minOccurs="0"/>
+      <xs:element name="SpecifiedTradeAllowanceCharge" type="ram:TradeAllowanceChargeType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="SpecifiedTradeSettlementLineMonetarySummation" type="ram:TradeSettlementLineMonetarySummationType"/>
+      <xs:element name="InvoiceReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+      <xs:element name="AdditionalReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="ReceivableSpecifiedTradeAccountingAccount" type="ram:TradeAccountingAccountType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LogisticsServiceChargeType">
+    <xs:sequence>
+      <xs:element name="Description" type="udt:TextType"/>
+      <xs:element name="AppliedAmount" type="udt:AmountType"/>
+      <xs:element name="AppliedTradeTax" type="ram:TradeTaxType" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LogisticsTransportMovementType">
+    <xs:sequence>
+      <xs:element name="ModeCode" type="qdt:TransportModeCodeType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="NoteType">
+    <xs:sequence>
+      <xs:element name="ContentCode" type="udt:CodeType" minOccurs="0"/>
+      <xs:element name="Content" type="udt:TextType"/>
+      <xs:element name="SubjectCode" type="udt:CodeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ProcuringProjectType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+      <xs:element name="Name" type="udt:TextType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ProductCharacteristicType">
+    <xs:sequence>
+      <xs:element name="TypeCode" type="udt:CodeType" minOccurs="0"/>
+      <xs:element name="Description" type="udt:TextType"/>
+      <xs:element name="ValueMeasure" type="udt:MeasureType" minOccurs="0"/>
+      <xs:element name="Value" type="udt:TextType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ProductClassificationType">
+    <xs:sequence>
+      <xs:element name="ClassCode" type="udt:CodeType" minOccurs="0"/>
+      <xs:element name="ClassName" type="udt:TextType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ReferencedDocumentType">
+    <xs:sequence>
+      <xs:element name="IssuerAssignedID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="URIID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="LineID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="TypeCode" type="qdt:DocumentCodeType" minOccurs="0"/>
+      <xs:element name="Name" type="udt:TextType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="AttachmentBinaryObject" type="udt:BinaryObjectType" minOccurs="0"/>
+      <xs:element name="ReferenceTypeCode" type="qdt:ReferenceCodeType" minOccurs="0"/>
+      <xs:element name="FormattedIssueDateTime" type="qdt:FormattedDateTimeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ReferencedProductType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="GlobalID" type="udt:IDType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="SellerAssignedID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="BuyerAssignedID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="IndustryAssignedID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="Name" type="udt:TextType"/>
+      <xs:element name="Description" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="UnitQuantity" type="udt:QuantityType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SpecifiedPeriodType">
+    <xs:sequence>
+      <xs:element name="Description" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="StartDateTime" type="udt:DateTimeType" minOccurs="0"/>
+      <xs:element name="EndDateTime" type="udt:DateTimeType" minOccurs="0"/>
+      <xs:element name="CompleteDateTime" type="udt:DateTimeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SupplyChainConsignmentType">
+    <xs:sequence>
+      <xs:element name="SpecifiedLogisticsTransportMovement" type="ram:LogisticsTransportMovementType" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SupplyChainEventType">
+    <xs:sequence>
+      <xs:element name="OccurrenceDateTime" type="udt:DateTimeType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SupplyChainTradeLineItemType">
+    <xs:sequence>
+      <xs:element name="AssociatedDocumentLineDocument" type="ram:DocumentLineDocumentType"/>
+      <xs:element name="SpecifiedTradeProduct" type="ram:TradeProductType"/>
+      <xs:element name="SpecifiedLineTradeAgreement" type="ram:LineTradeAgreementType"/>
+      <xs:element name="SpecifiedLineTradeDelivery" type="ram:LineTradeDeliveryType"/>
+      <xs:element name="SpecifiedLineTradeSettlement" type="ram:LineTradeSettlementType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SupplyChainTradeTransactionType">
+    <xs:sequence>
+      <xs:element name="IncludedSupplyChainTradeLineItem" type="ram:SupplyChainTradeLineItemType" maxOccurs="unbounded"/>
+      <xs:element name="ApplicableHeaderTradeAgreement" type="ram:HeaderTradeAgreementType"/>
+      <xs:element name="ApplicableHeaderTradeDelivery" type="ram:HeaderTradeDeliveryType"/>
+      <xs:element name="ApplicableHeaderTradeSettlement" type="ram:HeaderTradeSettlementType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TaxRegistrationType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeAccountingAccountType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+      <xs:element name="TypeCode" type="qdt:AccountingAccountTypeCodeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeAddressType">
+    <xs:sequence>
+      <xs:element name="PostcodeCode" type="udt:CodeType" minOccurs="0"/>
+      <xs:element name="LineOne" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="LineTwo" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="LineThree" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="CityName" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="CountryID" type="qdt:CountryIDType"/>
+      <xs:element name="CountrySubDivisionName" type="udt:TextType" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeAllowanceChargeType">
+    <xs:sequence>
+      <xs:element name="ChargeIndicator" type="udt:IndicatorType"/>
+      <xs:element name="SequenceNumeric" type="udt:NumericType" minOccurs="0"/>
+      <xs:element name="CalculationPercent" type="udt:PercentType" minOccurs="0"/>
+      <xs:element name="BasisAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="BasisQuantity" type="udt:QuantityType" minOccurs="0"/>
+      <xs:element name="ActualAmount" type="udt:AmountType"/>
+      <xs:element name="ReasonCode" type="qdt:AllowanceChargeReasonCodeType" minOccurs="0"/>
+      <xs:element name="Reason" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="CategoryTradeTax" type="ram:TradeTaxType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeContactType">
+    <xs:sequence>
+      <xs:element name="PersonName" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="DepartmentName" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="TypeCode" type="qdt:ContactTypeCodeType" minOccurs="0"/>
+      <xs:element name="TelephoneUniversalCommunication" type="ram:UniversalCommunicationType" minOccurs="0"/>
+      <xs:element name="FaxUniversalCommunication" type="ram:UniversalCommunicationType" minOccurs="0"/>
+      <xs:element name="EmailURIUniversalCommunication" type="ram:UniversalCommunicationType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeCountryType">
+    <xs:sequence>
+      <xs:element name="ID" type="qdt:CountryIDType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeCurrencyExchangeType">
+    <xs:sequence>
+      <xs:element name="SourceCurrencyCode" type="qdt:CurrencyCodeType"/>
+      <xs:element name="TargetCurrencyCode" type="qdt:CurrencyCodeType"/>
+      <xs:element name="ConversionRate" type="udt:RateType"/>
+      <xs:element name="ConversionRateDateTime" type="udt:DateTimeType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeDeliveryTermsType">
+    <xs:sequence>
+      <xs:element name="DeliveryTypeCode" type="qdt:DeliveryTermsCodeType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePartyType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="GlobalID" type="udt:IDType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="Name" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="RoleCode" type="qdt:PartyRoleCodeType" minOccurs="0"/>
+      <xs:element name="Description" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="SpecifiedLegalOrganization" type="ram:LegalOrganizationType" minOccurs="0"/>
+      <xs:element name="DefinedTradeContact" type="ram:TradeContactType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="PostalTradeAddress" type="ram:TradeAddressType" minOccurs="0"/>
+      <xs:element name="URIUniversalCommunication" type="ram:UniversalCommunicationType" minOccurs="0"/>
+      <xs:element name="SpecifiedTaxRegistration" type="ram:TaxRegistrationType" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePaymentDiscountTermsType">
+    <xs:sequence>
+      <xs:element name="BasisDateTime" type="udt:DateTimeType" minOccurs="0"/>
+      <xs:element name="BasisPeriodMeasure" type="udt:MeasureType" minOccurs="0"/>
+      <xs:element name="BasisAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="CalculationPercent" type="udt:PercentType" minOccurs="0"/>
+      <xs:element name="ActualDiscountAmount" type="udt:AmountType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePaymentPenaltyTermsType">
+    <xs:sequence>
+      <xs:element name="BasisDateTime" type="udt:DateTimeType" minOccurs="0"/>
+      <xs:element name="BasisPeriodMeasure" type="udt:MeasureType" minOccurs="0"/>
+      <xs:element name="BasisAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="CalculationPercent" type="udt:PercentType" minOccurs="0"/>
+      <xs:element name="ActualPenaltyAmount" type="udt:AmountType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePaymentTermsType">
+    <xs:sequence>
+      <xs:element name="Description" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="DueDateDateTime" type="udt:DateTimeType" minOccurs="0"/>
+      <xs:element name="DirectDebitMandateID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="PartialPaymentAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="ApplicableTradePaymentPenaltyTerms" type="ram:TradePaymentPenaltyTermsType" minOccurs="0"/>
+      <xs:element name="ApplicableTradePaymentDiscountTerms" type="ram:TradePaymentDiscountTermsType" minOccurs="0"/>
+      <xs:element name="PayeeTradeParty" type="ram:TradePartyType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePriceType">
+    <xs:sequence>
+      <xs:element name="ChargeAmount" type="udt:AmountType"/>
+      <xs:element name="BasisQuantity" type="udt:QuantityType" minOccurs="0"/>
+      <xs:element name="AppliedTradeAllowanceCharge" type="ram:TradeAllowanceChargeType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="IncludedTradeTax" type="ram:TradeTaxType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeProductInstanceType">
+    <xs:sequence>
+      <xs:element name="BatchID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="SupplierAssignedSerialID" type="udt:IDType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeProductType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="GlobalID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="SellerAssignedID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="BuyerAssignedID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="Name" type="udt:TextType"/>
+      <xs:element name="Description" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="ApplicableProductCharacteristic" type="ram:ProductCharacteristicType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="DesignatedProductClassification" type="ram:ProductClassificationType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="IndividualTradeProductInstance" type="ram:TradeProductInstanceType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="OriginTradeCountry" type="ram:TradeCountryType" minOccurs="0"/>
+      <xs:element name="IncludedReferencedProduct" type="ram:ReferencedProductType" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementFinancialCardType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+      <xs:element name="CardholderName" type="udt:TextType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementHeaderMonetarySummationType">
+    <xs:sequence>
+      <xs:element name="LineTotalAmount" type="udt:AmountType"/>
+      <xs:element name="ChargeTotalAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="AllowanceTotalAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="TaxBasisTotalAmount" type="udt:AmountType" maxOccurs="2"/>
+      <xs:element name="TaxTotalAmount" type="udt:AmountType" minOccurs="0" maxOccurs="2"/>
+      <xs:element name="RoundingAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="GrandTotalAmount" type="udt:AmountType" maxOccurs="2"/>
+      <xs:element name="TotalPrepaidAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="DuePayableAmount" type="udt:AmountType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementLineMonetarySummationType">
+    <xs:sequence>
+      <xs:element name="LineTotalAmount" type="udt:AmountType"/>
+      <xs:element name="ChargeTotalAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="AllowanceTotalAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="TaxTotalAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="GrandTotalAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="TotalAllowanceChargeAmount" type="udt:AmountType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementPaymentMeansType">
+    <xs:sequence>
+      <xs:element name="TypeCode" type="qdt:PaymentMeansCodeType"/>
+      <xs:element name="Information" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="ApplicableTradeSettlementFinancialCard" type="ram:TradeSettlementFinancialCardType" minOccurs="0"/>
+      <xs:element name="PayerPartyDebtorFinancialAccount" type="ram:DebtorFinancialAccountType" minOccurs="0"/>
+      <xs:element name="PayeePartyCreditorFinancialAccount" type="ram:CreditorFinancialAccountType" minOccurs="0"/>
+      <xs:element name="PayeeSpecifiedCreditorFinancialInstitution" type="ram:CreditorFinancialInstitutionType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeTaxType">
+    <xs:sequence>
+      <xs:element name="CalculatedAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="TypeCode" type="qdt:TaxTypeCodeType" minOccurs="0"/>
+      <xs:element name="ExemptionReason" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="BasisAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="LineTotalBasisAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="AllowanceChargeBasisAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="CategoryCode" type="qdt:TaxCategoryCodeType"/>
+      <xs:element name="ExemptionReasonCode" type="udt:CodeType" minOccurs="0"/>
+      <xs:element name="TaxPointDate" type="udt:DateType" minOccurs="0"/>
+      <xs:element name="DueDateTypeCode" type="qdt:TimeReferenceCodeType" minOccurs="0"/>
+      <xs:element name="RateApplicablePercent" type="udt:PercentType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="UniversalCommunicationType">
+    <xs:sequence>
+      <xs:element name="URIID" type="udt:IDType" minOccurs="0"/>
+      <xs:element name="CompleteNumber" type="udt:TextType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd	(revision 8435)
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    targetNamespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    elementFormDefault="qualified"
+    version="100.D16B">
+  <xs:complexType name="AmountType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal">
+        <xs:attribute name="currencyID" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="BinaryObjectType">
+    <xs:simpleContent>
+      <xs:extension base="xs:base64Binary">
+        <xs:attribute name="mimeCode" type="xs:token" use="required"/>
+        <xs:attribute name="filename" type="xs:string" use="required"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="CodeType">
+    <xs:simpleContent>
+      <xs:extension base="xs:token">
+        <xs:attribute name="listID" type="xs:token" use="optional"/>
+        <xs:attribute name="listVersionID" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="DateTimeType">
+    <xs:choice>
+      <xs:element name="DateTimeString">
+        <xs:complexType>
+          <xs:simpleContent>
+            <xs:extension base="xs:string">
+              <xs:attribute name="format" type="xs:string" use="required"/>
+            </xs:extension>
+          </xs:simpleContent>
+        </xs:complexType>
+      </xs:element>
+    </xs:choice>
+  </xs:complexType>
+  <xs:complexType name="DateType">
+    <xs:choice>
+      <xs:element name="DateString">
+        <xs:complexType>
+          <xs:simpleContent>
+            <xs:extension base="xs:string">
+              <xs:attribute name="format" type="xs:string" use="required"/>
+            </xs:extension>
+          </xs:simpleContent>
+        </xs:complexType>
+      </xs:element>
+    </xs:choice>
+  </xs:complexType>
+  <xs:complexType name="IDType">
+    <xs:simpleContent>
+      <xs:extension base="xs:token">
+        <xs:attribute name="schemeID" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="IndicatorType">
+    <xs:choice>
+      <xs:element name="Indicator" type="xs:boolean"/>
+    </xs:choice>
+  </xs:complexType>
+  <xs:complexType name="MeasureType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal">
+        <xs:attribute name="unitCode" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="NumericType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="PercentType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="QuantityType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal">
+        <xs:attribute name="unitCode" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="RateType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="TextType">
+    <xs:simpleContent>
+      <xs:extension base="xs:string"/>
+    </xs:simpleContent>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM.xsd	(revision 8435)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
+    elementFormDefault="qualified">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" schemaLocation="FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" schemaLocation="FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:element name="CrossIndustryInvoice" type="rsm:CrossIndustryInvoiceType"/>
+  <xs:complexType name="CrossIndustryInvoiceType">
+    <xs:sequence>
+      <xs:element name="ExchangedDocumentContext" type="ram:ExchangedDocumentContextType"/>
+      <xs:element name="ExchangedDocument" type="ram:ExchangedDocumentType"/>
+      <xs:element name="SupplyChainTradeTransaction" type="ram:SupplyChainTradeTransactionType"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd	(revision 8435)
@@ -0,0 +1,511 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    elementFormDefault="qualified"
+    version="100.D16B">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:simpleType name="CountryIDContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="1A"/>
+      <xs:enumeration value="AD"/>
+      <xs:enumeration value="AE"/>
+      <xs:enumeration value="AF"/>
+      <xs:enumeration value="AG"/>
+      <xs:enumeration value="AI"/>
+      <xs:enumeration value="AL"/>
+      <xs:enumeration value="AM"/>
+      <xs:enumeration value="AO"/>
+      <xs:enumeration value="AQ"/>
+      <xs:enumeration value="AR"/>
+      <xs:enumeration value="AS"/>
+      <xs:enumeration value="AT"/>
+      <xs:enumeration value="AU"/>
+      <xs:enumeration value="AW"/>
+      <xs:enumeration value="AX"/>
+      <xs:enumeration value="AZ"/>
+      <xs:enumeration value="BA"/>
+      <xs:enumeration value="BB"/>
+      <xs:enumeration value="BD"/>
+      <xs:enumeration value="BE"/>
+      <xs:enumeration value="BF"/>
+      <xs:enumeration value="BG"/>
+      <xs:enumeration value="BH"/>
+      <xs:enumeration value="BI"/>
+      <xs:enumeration value="BJ"/>
+      <xs:enumeration value="BL"/>
+      <xs:enumeration value="BM"/>
+      <xs:enumeration value="BN"/>
+      <xs:enumeration value="BO"/>
+      <xs:enumeration value="BQ"/>
+      <xs:enumeration value="BR"/>
+      <xs:enumeration value="BS"/>
+      <xs:enumeration value="BT"/>
+      <xs:enumeration value="BV"/>
+      <xs:enumeration value="BW"/>
+      <xs:enumeration value="BY"/>
+      <xs:enumeration value="BZ"/>
+      <xs:enumeration value="CA"/>
+      <xs:enumeration value="CC"/>
+      <xs:enumeration value="CD"/>
+      <xs:enumeration value="CF"/>
+      <xs:enumeration value="CG"/>
+      <xs:enumeration value="CH"/>
+      <xs:enumeration value="CI"/>
+      <xs:enumeration value="CK"/>
+      <xs:enumeration value="CL"/>
+      <xs:enumeration value="CM"/>
+      <xs:enumeration value="CN"/>
+      <xs:enumeration value="CO"/>
+      <xs:enumeration value="CR"/>
+      <xs:enumeration value="CU"/>
+      <xs:enumeration value="CV"/>
+      <xs:enumeration value="CW"/>
+      <xs:enumeration value="CX"/>
+      <xs:enumeration value="CY"/>
+      <xs:enumeration value="CZ"/>
+      <xs:enumeration value="DE"/>
+      <xs:enumeration value="DJ"/>
+      <xs:enumeration value="DK"/>
+      <xs:enumeration value="DM"/>
+      <xs:enumeration value="DO"/>
+      <xs:enumeration value="DZ"/>
+      <xs:enumeration value="EC"/>
+      <xs:enumeration value="EE"/>
+      <xs:enumeration value="EG"/>
+      <xs:enumeration value="EH"/>
+      <xs:enumeration value="ER"/>
+      <xs:enumeration value="ES"/>
+      <xs:enumeration value="ET"/>
+      <xs:enumeration value="FI"/>
+      <xs:enumeration value="FJ"/>
+      <xs:enumeration value="FK"/>
+      <xs:enumeration value="FM"/>
+      <xs:enumeration value="FO"/>
+      <xs:enumeration value="FR"/>
+      <xs:enumeration value="GA"/>
+      <xs:enumeration value="GB"/>
+      <xs:enumeration value="GD"/>
+      <xs:enumeration value="GE"/>
+      <xs:enumeration value="GF"/>
+      <xs:enumeration value="GG"/>
+      <xs:enumeration value="GH"/>
+      <xs:enumeration value="GI"/>
+      <xs:enumeration value="GL"/>
+      <xs:enumeration value="GM"/>
+      <xs:enumeration value="GN"/>
+      <xs:enumeration value="GP"/>
+      <xs:enumeration value="GQ"/>
+      <xs:enumeration value="GR"/>
+      <xs:enumeration value="GS"/>
+      <xs:enumeration value="GT"/>
+      <xs:enumeration value="GU"/>
+      <xs:enumeration value="GW"/>
+      <xs:enumeration value="GY"/>
+      <xs:enumeration value="HK"/>
+      <xs:enumeration value="HM"/>
+      <xs:enumeration value="HN"/>
+      <xs:enumeration value="HR"/>
+      <xs:enumeration value="HT"/>
+      <xs:enumeration value="HU"/>
+      <xs:enumeration value="ID"/>
+      <xs:enumeration value="IE"/>
+      <xs:enumeration value="IL"/>
+      <xs:enumeration value="IM"/>
+      <xs:enumeration value="IN"/>
+      <xs:enumeration value="IO"/>
+      <xs:enumeration value="IQ"/>
+      <xs:enumeration value="IR"/>
+      <xs:enumeration value="IS"/>
+      <xs:enumeration value="IT"/>
+      <xs:enumeration value="JE"/>
+      <xs:enumeration value="JM"/>
+      <xs:enumeration value="JO"/>
+      <xs:enumeration value="JP"/>
+      <xs:enumeration value="KE"/>
+      <xs:enumeration value="KG"/>
+      <xs:enumeration value="KH"/>
+      <xs:enumeration value="KI"/>
+      <xs:enumeration value="KM"/>
+      <xs:enumeration value="KN"/>
+      <xs:enumeration value="KP"/>
+      <xs:enumeration value="KR"/>
+      <xs:enumeration value="KW"/>
+      <xs:enumeration value="KY"/>
+      <xs:enumeration value="KZ"/>
+      <xs:enumeration value="LA"/>
+      <xs:enumeration value="LB"/>
+      <xs:enumeration value="LC"/>
+      <xs:enumeration value="LI"/>
+      <xs:enumeration value="LK"/>
+      <xs:enumeration value="LR"/>
+      <xs:enumeration value="LS"/>
+      <xs:enumeration value="LT"/>
+      <xs:enumeration value="LU"/>
+      <xs:enumeration value="LV"/>
+      <xs:enumeration value="LY"/>
+      <xs:enumeration value="MA"/>
+      <xs:enumeration value="MC"/>
+      <xs:enumeration value="MD"/>
+      <xs:enumeration value="ME"/>
+      <xs:enumeration value="MF"/>
+      <xs:enumeration value="MG"/>
+      <xs:enumeration value="MH"/>
+      <xs:enumeration value="MK"/>
+      <xs:enumeration value="ML"/>
+      <xs:enumeration value="MM"/>
+      <xs:enumeration value="MN"/>
+      <xs:enumeration value="MO"/>
+      <xs:enumeration value="MP"/>
+      <xs:enumeration value="MQ"/>
+      <xs:enumeration value="MR"/>
+      <xs:enumeration value="MS"/>
+      <xs:enumeration value="MT"/>
+      <xs:enumeration value="MU"/>
+      <xs:enumeration value="MV"/>
+      <xs:enumeration value="MW"/>
+      <xs:enumeration value="MX"/>
+      <xs:enumeration value="MY"/>
+      <xs:enumeration value="MZ"/>
+      <xs:enumeration value="NA"/>
+      <xs:enumeration value="NC"/>
+      <xs:enumeration value="NE"/>
+      <xs:enumeration value="NF"/>
+      <xs:enumeration value="NG"/>
+      <xs:enumeration value="NI"/>
+      <xs:enumeration value="NL"/>
+      <xs:enumeration value="NO"/>
+      <xs:enumeration value="NP"/>
+      <xs:enumeration value="NR"/>
+      <xs:enumeration value="NU"/>
+      <xs:enumeration value="NZ"/>
+      <xs:enumeration value="OM"/>
+      <xs:enumeration value="PA"/>
+      <xs:enumeration value="PE"/>
+      <xs:enumeration value="PF"/>
+      <xs:enumeration value="PG"/>
+      <xs:enumeration value="PH"/>
+      <xs:enumeration value="PK"/>
+      <xs:enumeration value="PL"/>
+      <xs:enumeration value="PM"/>
+      <xs:enumeration value="PN"/>
+      <xs:enumeration value="PR"/>
+      <xs:enumeration value="PS"/>
+      <xs:enumeration value="PT"/>
+      <xs:enumeration value="PW"/>
+      <xs:enumeration value="PY"/>
+      <xs:enumeration value="QA"/>
+      <xs:enumeration value="RE"/>
+      <xs:enumeration value="RO"/>
+      <xs:enumeration value="RS"/>
+      <xs:enumeration value="RU"/>
+      <xs:enumeration value="RW"/>
+      <xs:enumeration value="SA"/>
+      <xs:enumeration value="SB"/>
+      <xs:enumeration value="SC"/>
+      <xs:enumeration value="SD"/>
+      <xs:enumeration value="SE"/>
+      <xs:enumeration value="SG"/>
+      <xs:enumeration value="SH"/>
+      <xs:enumeration value="SI"/>
+      <xs:enumeration value="SJ"/>
+      <xs:enumeration value="SK"/>
+      <xs:enumeration value="SL"/>
+      <xs:enumeration value="SM"/>
+      <xs:enumeration value="SN"/>
+      <xs:enumeration value="SO"/>
+      <xs:enumeration value="SR"/>
+      <xs:enumeration value="SS"/>
+      <xs:enumeration value="ST"/>
+      <xs:enumeration value="SV"/>
+      <xs:enumeration value="SX"/>
+      <xs:enumeration value="SY"/>
+      <xs:enumeration value="SZ"/>
+      <xs:enumeration value="TC"/>
+      <xs:enumeration value="TD"/>
+      <xs:enumeration value="TF"/>
+      <xs:enumeration value="TG"/>
+      <xs:enumeration value="TH"/>
+      <xs:enumeration value="TJ"/>
+      <xs:enumeration value="TK"/>
+      <xs:enumeration value="TL"/>
+      <xs:enumeration value="TM"/>
+      <xs:enumeration value="TN"/>
+      <xs:enumeration value="TO"/>
+      <xs:enumeration value="TR"/>
+      <xs:enumeration value="TT"/>
+      <xs:enumeration value="TV"/>
+      <xs:enumeration value="TW"/>
+      <xs:enumeration value="TZ"/>
+      <xs:enumeration value="UA"/>
+      <xs:enumeration value="UG"/>
+      <xs:enumeration value="UM"/>
+      <xs:enumeration value="US"/>
+      <xs:enumeration value="UY"/>
+      <xs:enumeration value="UZ"/>
+      <xs:enumeration value="VA"/>
+      <xs:enumeration value="VC"/>
+      <xs:enumeration value="VE"/>
+      <xs:enumeration value="VG"/>
+      <xs:enumeration value="VI"/>
+      <xs:enumeration value="VN"/>
+      <xs:enumeration value="VU"/>
+      <xs:enumeration value="WF"/>
+      <xs:enumeration value="WS"/>
+      <xs:enumeration value="XI"/>
+      <xs:enumeration value="YE"/>
+      <xs:enumeration value="YT"/>
+      <xs:enumeration value="ZA"/>
+      <xs:enumeration value="ZM"/>
+      <xs:enumeration value="ZW"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="CountryIDType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:CountryIDContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="CurrencyCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="AED"/>
+      <xs:enumeration value="AFN"/>
+      <xs:enumeration value="ALL"/>
+      <xs:enumeration value="AMD"/>
+      <xs:enumeration value="ANG"/>
+      <xs:enumeration value="AOA"/>
+      <xs:enumeration value="ARS"/>
+      <xs:enumeration value="AUD"/>
+      <xs:enumeration value="AWG"/>
+      <xs:enumeration value="AZN"/>
+      <xs:enumeration value="BAM"/>
+      <xs:enumeration value="BBD"/>
+      <xs:enumeration value="BDT"/>
+      <xs:enumeration value="BGN"/>
+      <xs:enumeration value="BHD"/>
+      <xs:enumeration value="BIF"/>
+      <xs:enumeration value="BMD"/>
+      <xs:enumeration value="BND"/>
+      <xs:enumeration value="BOB"/>
+      <xs:enumeration value="BOV"/>
+      <xs:enumeration value="BRL"/>
+      <xs:enumeration value="BSD"/>
+      <xs:enumeration value="BTN"/>
+      <xs:enumeration value="BWP"/>
+      <xs:enumeration value="BYN"/>
+      <xs:enumeration value="BZD"/>
+      <xs:enumeration value="CAD"/>
+      <xs:enumeration value="CDF"/>
+      <xs:enumeration value="CHE"/>
+      <xs:enumeration value="CHF"/>
+      <xs:enumeration value="CHW"/>
+      <xs:enumeration value="CLF"/>
+      <xs:enumeration value="CLP"/>
+      <xs:enumeration value="CNY"/>
+      <xs:enumeration value="COP"/>
+      <xs:enumeration value="COU"/>
+      <xs:enumeration value="CRC"/>
+      <xs:enumeration value="CUC"/>
+      <xs:enumeration value="CUP"/>
+      <xs:enumeration value="CVE"/>
+      <xs:enumeration value="CZK"/>
+      <xs:enumeration value="DJF"/>
+      <xs:enumeration value="DKK"/>
+      <xs:enumeration value="DOP"/>
+      <xs:enumeration value="DZD"/>
+      <xs:enumeration value="EGP"/>
+      <xs:enumeration value="ERN"/>
+      <xs:enumeration value="ETB"/>
+      <xs:enumeration value="EUR"/>
+      <xs:enumeration value="FJD"/>
+      <xs:enumeration value="FKP"/>
+      <xs:enumeration value="GBP"/>
+      <xs:enumeration value="GEL"/>
+      <xs:enumeration value="GHS"/>
+      <xs:enumeration value="GIP"/>
+      <xs:enumeration value="GMD"/>
+      <xs:enumeration value="GNF"/>
+      <xs:enumeration value="GTQ"/>
+      <xs:enumeration value="GYD"/>
+      <xs:enumeration value="HKD"/>
+      <xs:enumeration value="HNL"/>
+      <xs:enumeration value="HRK"/>
+      <xs:enumeration value="HTG"/>
+      <xs:enumeration value="HUF"/>
+      <xs:enumeration value="IDR"/>
+      <xs:enumeration value="ILS"/>
+      <xs:enumeration value="INR"/>
+      <xs:enumeration value="IQD"/>
+      <xs:enumeration value="IRR"/>
+      <xs:enumeration value="ISK"/>
+      <xs:enumeration value="JMD"/>
+      <xs:enumeration value="JOD"/>
+      <xs:enumeration value="JPY"/>
+      <xs:enumeration value="KES"/>
+      <xs:enumeration value="KGS"/>
+      <xs:enumeration value="KHR"/>
+      <xs:enumeration value="KMF"/>
+      <xs:enumeration value="KPW"/>
+      <xs:enumeration value="KRW"/>
+      <xs:enumeration value="KWD"/>
+      <xs:enumeration value="KYD"/>
+      <xs:enumeration value="KZT"/>
+      <xs:enumeration value="LAK"/>
+      <xs:enumeration value="LBP"/>
+      <xs:enumeration value="LKR"/>
+      <xs:enumeration value="LRD"/>
+      <xs:enumeration value="LSL"/>
+      <xs:enumeration value="LYD"/>
+      <xs:enumeration value="MAD"/>
+      <xs:enumeration value="MDL"/>
+      <xs:enumeration value="MGA"/>
+      <xs:enumeration value="MKD"/>
+      <xs:enumeration value="MMK"/>
+      <xs:enumeration value="MNT"/>
+      <xs:enumeration value="MOP"/>
+      <xs:enumeration value="MRU"/>
+      <xs:enumeration value="MUR"/>
+      <xs:enumeration value="MVR"/>
+      <xs:enumeration value="MWK"/>
+      <xs:enumeration value="MXN"/>
+      <xs:enumeration value="MXV"/>
+      <xs:enumeration value="MYR"/>
+      <xs:enumeration value="MZN"/>
+      <xs:enumeration value="NAD"/>
+      <xs:enumeration value="NGN"/>
+      <xs:enumeration value="NIO"/>
+      <xs:enumeration value="NOK"/>
+      <xs:enumeration value="NPR"/>
+      <xs:enumeration value="NZD"/>
+      <xs:enumeration value="OMR"/>
+      <xs:enumeration value="PAB"/>
+      <xs:enumeration value="PEN"/>
+      <xs:enumeration value="PGK"/>
+      <xs:enumeration value="PHP"/>
+      <xs:enumeration value="PKR"/>
+      <xs:enumeration value="PLN"/>
+      <xs:enumeration value="PYG"/>
+      <xs:enumeration value="QAR"/>
+      <xs:enumeration value="RON"/>
+      <xs:enumeration value="RSD"/>
+      <xs:enumeration value="RUB"/>
+      <xs:enumeration value="RWF"/>
+      <xs:enumeration value="SAR"/>
+      <xs:enumeration value="SBD"/>
+      <xs:enumeration value="SCR"/>
+      <xs:enumeration value="SDG"/>
+      <xs:enumeration value="SEK"/>
+      <xs:enumeration value="SGD"/>
+      <xs:enumeration value="SHP"/>
+      <xs:enumeration value="SLL"/>
+      <xs:enumeration value="SOS"/>
+      <xs:enumeration value="SRD"/>
+      <xs:enumeration value="SSP"/>
+      <xs:enumeration value="STN"/>
+      <xs:enumeration value="SVC"/>
+      <xs:enumeration value="SYP"/>
+      <xs:enumeration value="SZL"/>
+      <xs:enumeration value="THB"/>
+      <xs:enumeration value="TJS"/>
+      <xs:enumeration value="TMT"/>
+      <xs:enumeration value="TND"/>
+      <xs:enumeration value="TOP"/>
+      <xs:enumeration value="TRY"/>
+      <xs:enumeration value="TTD"/>
+      <xs:enumeration value="TWD"/>
+      <xs:enumeration value="TZS"/>
+      <xs:enumeration value="UAH"/>
+      <xs:enumeration value="UGX"/>
+      <xs:enumeration value="USD"/>
+      <xs:enumeration value="USN"/>
+      <xs:enumeration value="UYI"/>
+      <xs:enumeration value="UYU"/>
+      <xs:enumeration value="UYW"/>
+      <xs:enumeration value="UZS"/>
+      <xs:enumeration value="VES"/>
+      <xs:enumeration value="VND"/>
+      <xs:enumeration value="VUV"/>
+      <xs:enumeration value="WST"/>
+      <xs:enumeration value="XAF"/>
+      <xs:enumeration value="XAG"/>
+      <xs:enumeration value="XAU"/>
+      <xs:enumeration value="XBA"/>
+      <xs:enumeration value="XBB"/>
+      <xs:enumeration value="XBC"/>
+      <xs:enumeration value="XBD"/>
+      <xs:enumeration value="XCD"/>
+      <xs:enumeration value="XDR"/>
+      <xs:enumeration value="XOF"/>
+      <xs:enumeration value="XPD"/>
+      <xs:enumeration value="XPF"/>
+      <xs:enumeration value="XPT"/>
+      <xs:enumeration value="XSU"/>
+      <xs:enumeration value="XTS"/>
+      <xs:enumeration value="XUA"/>
+      <xs:enumeration value="XXX"/>
+      <xs:enumeration value="YER"/>
+      <xs:enumeration value="ZAR"/>
+      <xs:enumeration value="ZMW"/>
+      <xs:enumeration value="ZWL"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="CurrencyCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:CurrencyCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:simpleType name="DocumentCodeContentType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="80"/>
+      <xs:enumeration value="81"/>
+      <xs:enumeration value="82"/>
+      <xs:enumeration value="83"/>
+      <xs:enumeration value="84"/>
+      <xs:enumeration value="130"/>
+      <xs:enumeration value="202"/>
+      <xs:enumeration value="203"/>
+      <xs:enumeration value="204"/>
+      <xs:enumeration value="211"/>
+      <xs:enumeration value="261"/>
+      <xs:enumeration value="262"/>
+      <xs:enumeration value="295"/>
+      <xs:enumeration value="296"/>
+      <xs:enumeration value="308"/>
+      <xs:enumeration value="325"/>
+      <xs:enumeration value="326"/>
+      <xs:enumeration value="380"/>
+      <xs:enumeration value="381"/>
+      <xs:enumeration value="383"/>
+      <xs:enumeration value="384"/>
+      <xs:enumeration value="385"/>
+      <xs:enumeration value="386"/>
+      <xs:enumeration value="387"/>
+      <xs:enumeration value="388"/>
+      <xs:enumeration value="389"/>
+      <xs:enumeration value="390"/>
+      <xs:enumeration value="393"/>
+      <xs:enumeration value="394"/>
+      <xs:enumeration value="395"/>
+      <xs:enumeration value="396"/>
+      <xs:enumeration value="420"/>
+      <xs:enumeration value="456"/>
+      <xs:enumeration value="457"/>
+      <xs:enumeration value="458"/>
+      <xs:enumeration value="527"/>
+      <xs:enumeration value="575"/>
+      <xs:enumeration value="623"/>
+      <xs:enumeration value="633"/>
+      <xs:enumeration value="751"/>
+      <xs:enumeration value="780"/>
+      <xs:enumeration value="875"/>
+      <xs:enumeration value="876"/>
+      <xs:enumeration value="877"/>
+      <xs:enumeration value="935"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="DocumentCodeType">
+    <xs:simpleContent>
+      <xs:extension base="qdt:DocumentCodeContentType"/>
+    </xs:simpleContent>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd	(revision 8435)
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    targetNamespace="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    elementFormDefault="qualified">
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" schemaLocation="FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd"/>
+  <xs:import namespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" schemaLocation="FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd"/>
+  <xs:complexType name="DocumentContextParameterType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ExchangedDocumentContextType">
+    <xs:sequence>
+      <xs:element name="BusinessProcessSpecifiedDocumentContextParameter" type="ram:DocumentContextParameterType" minOccurs="0"/>
+      <xs:element name="GuidelineSpecifiedDocumentContextParameter" type="ram:DocumentContextParameterType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ExchangedDocumentType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+      <xs:element name="TypeCode" type="qdt:DocumentCodeType"/>
+      <xs:element name="IssueDateTime" type="udt:DateTimeType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeAgreementType">
+    <xs:sequence>
+      <xs:element name="BuyerReference" type="udt:TextType" minOccurs="0"/>
+      <xs:element name="SellerTradeParty" type="ram:TradePartyType"/>
+      <xs:element name="BuyerTradeParty" type="ram:TradePartyType"/>
+      <xs:element name="BuyerOrderReferencedDocument" type="ram:ReferencedDocumentType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HeaderTradeDeliveryType"/>
+  <xs:complexType name="HeaderTradeSettlementType">
+    <xs:sequence>
+      <xs:element name="InvoiceCurrencyCode" type="qdt:CurrencyCodeType"/>
+      <xs:element name="SpecifiedTradeSettlementHeaderMonetarySummation" type="ram:TradeSettlementHeaderMonetarySummationType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LegalOrganizationType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ReferencedDocumentType">
+    <xs:sequence>
+      <xs:element name="IssuerAssignedID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SupplyChainTradeTransactionType">
+    <xs:sequence>
+      <xs:element name="ApplicableHeaderTradeAgreement" type="ram:HeaderTradeAgreementType"/>
+      <xs:element name="ApplicableHeaderTradeDelivery" type="ram:HeaderTradeDeliveryType"/>
+      <xs:element name="ApplicableHeaderTradeSettlement" type="ram:HeaderTradeSettlementType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TaxRegistrationType">
+    <xs:sequence>
+      <xs:element name="ID" type="udt:IDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeAddressType">
+    <xs:sequence>
+      <xs:element name="CountryID" type="qdt:CountryIDType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradePartyType">
+    <xs:sequence>
+      <xs:element name="Name" type="udt:TextType"/>
+      <xs:element name="SpecifiedLegalOrganization" type="ram:LegalOrganizationType" minOccurs="0"/>
+      <xs:element name="PostalTradeAddress" type="ram:TradeAddressType" minOccurs="0"/>
+      <xs:element name="SpecifiedTaxRegistration" type="ram:TaxRegistrationType" minOccurs="0" maxOccurs="2"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TradeSettlementHeaderMonetarySummationType">
+    <xs:sequence>
+      <xs:element name="TaxBasisTotalAmount" type="udt:AmountType"/>
+      <xs:element name="TaxTotalAmount" type="udt:AmountType" minOccurs="0"/>
+      <xs:element name="GrandTotalAmount" type="udt:AmountType"/>
+      <xs:element name="DuePayableAmount" type="udt:AmountType"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/FACTUR-X_MINIMUM_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd	(revision 8435)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    targetNamespace="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
+    elementFormDefault="qualified"
+    version="100.D16B">
+  <xs:complexType name="AmountType">
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal">
+        <xs:attribute name="currencyID" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="DateTimeType">
+    <xs:choice>
+      <xs:element name="DateTimeString">
+        <xs:complexType>
+          <xs:simpleContent>
+            <xs:extension base="xs:string">
+              <xs:attribute name="format" type="xs:string" use="required"/>
+            </xs:extension>
+          </xs:simpleContent>
+        </xs:complexType>
+      </xs:element>
+    </xs:choice>
+  </xs:complexType>
+  <xs:complexType name="IDType">
+    <xs:simpleContent>
+      <xs:extension base="xs:token">
+        <xs:attribute name="schemeID" type="xs:token" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="TextType">
+    <xs:simpleContent>
+      <xs:extension base="xs:string"/>
+    </xs:simpleContent>
+  </xs:complexType>
+</xs:schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/EN16931-CII-validation.xslt
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/EN16931-CII-validation.xslt	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/EN16931-CII-validation.xslt	(revision 8435)
@@ -0,0 +1,11333 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+
+    Licensed under European Union Public Licence (EUPL) version 1.2.
+
+-->
+<xsl:stylesheet xmlns:svrl="http://purl.oclc.org/dsdl/svrl" xmlns:ccts="urn:un:unece:uncefact:documentation:standard:CoreComponentsTechnicalSpecification:2" xmlns:iso="http://purl.oclc.org/dsdl/schematron" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:saxon="http://saxon.sf.net/" xmlns:schold="http://www.ascc.net/xml/schematron" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
+    <!--Implementers: please note that overriding process-prolog or process-root is 
+    the preferred method for meta-stylesheets to use where possible. -->
+    <xsl:param name="archiveDirParameter"/>
+    <xsl:param name="archiveNameParameter"/>
+    <xsl:param name="fileNameParameter"/>
+    <xsl:param name="fileDirParameter"/>
+    <xsl:variable name="document-uri">
+        <xsl:value-of select="document-uri(/)"/>
+    </xsl:variable>
+    <!--PHASES-->
+    <!--PROLOG-->
+    <xsl:output indent="yes" method="xml" omit-xml-declaration="no" standalone="yes"/>
+    <!--XSD TYPES FOR XSLT2-->
+    <!--KEYS AND FUNCTIONS-->
+    <!--DEFAULT RULES-->
+    <!--MODE: SCHEMATRON-SELECT-FULL-PATH-->
+    <!--This mode can be used to generate an ugly though full XPath for locators-->
+    <xsl:template match="*" mode="schematron-select-full-path">
+        <xsl:apply-templates mode="schematron-get-full-path" select="."/>
+    </xsl:template>
+    <!--MODE: SCHEMATRON-FULL-PATH-->
+    <!--This mode can be used to generate an ugly though full XPath for locators-->
+    <xsl:template match="*" mode="schematron-get-full-path">
+        <xsl:apply-templates mode="schematron-get-full-path" select="parent::*"/>
+        <xsl:text>/</xsl:text>
+        <xsl:choose>
+            <xsl:when test="namespace-uri()=''">
+                <xsl:value-of select="name()"/>
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:text>*:</xsl:text>
+                <xsl:value-of select="local-name()"/>
+                <xsl:text>[namespace-uri()='</xsl:text>
+                <xsl:value-of select="namespace-uri()"/>
+                <xsl:text>']</xsl:text>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:variable name="preceding" select="count(preceding-sibling::*[local-name()=local-name(current())                                   and namespace-uri() = namespace-uri(current())])"/>
+        <xsl:text>[</xsl:text>
+        <xsl:value-of select="1+ $preceding"/>
+        <xsl:text>]</xsl:text>
+    </xsl:template>
+    <xsl:template match="@*" mode="schematron-get-full-path">
+        <xsl:apply-templates mode="schematron-get-full-path" select="parent::*"/>
+        <xsl:text>/</xsl:text>
+        <xsl:choose>
+            <xsl:when test="namespace-uri()=''">@<xsl:value-of select="name()"/>
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:text>@*[local-name()='</xsl:text>
+                <xsl:value-of select="local-name()"/>
+                <xsl:text>' and namespace-uri()='</xsl:text>
+                <xsl:value-of select="namespace-uri()"/>
+                <xsl:text>']</xsl:text>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+    <!--MODE: SCHEMATRON-FULL-PATH-2-->
+    <!--This mode can be used to generate prefixed XPath for humans-->
+    <xsl:template match="node() | @*" mode="schematron-get-full-path-2">
+        <xsl:for-each select="ancestor-or-self::*">
+            <xsl:text>/</xsl:text>
+            <xsl:value-of select="name(.)"/>
+            <xsl:if test="preceding-sibling::*[name(.)=name(current())]">
+                <xsl:text>[</xsl:text>
+                <xsl:value-of select="count(preceding-sibling::*[name(.)=name(current())])+1"/>
+                <xsl:text>]</xsl:text>
+            </xsl:if>
+        </xsl:for-each>
+        <xsl:if test="not(self::*)">
+            <xsl:text/>/@<xsl:value-of select="name(.)"/>
+        </xsl:if>
+    </xsl:template>
+    <!--MODE: SCHEMATRON-FULL-PATH-3-->
+    <!--This mode can be used to generate prefixed XPath for humans 
+	(Top-level element has index)-->
+    <xsl:template match="node() | @*" mode="schematron-get-full-path-3">
+        <xsl:for-each select="ancestor-or-self::*">
+            <xsl:text>/</xsl:text>
+            <xsl:value-of select="name(.)"/>
+            <xsl:if test="parent::*">
+                <xsl:text>[</xsl:text>
+                <xsl:value-of select="count(preceding-sibling::*[name(.)=name(current())])+1"/>
+                <xsl:text>]</xsl:text>
+            </xsl:if>
+        </xsl:for-each>
+        <xsl:if test="not(self::*)">
+            <xsl:text/>/@<xsl:value-of select="name(.)"/>
+        </xsl:if>
+    </xsl:template>
+    <!--MODE: GENERATE-ID-FROM-PATH -->
+    <xsl:template match="/" mode="generate-id-from-path"/>
+    <xsl:template match="text()" mode="generate-id-from-path">
+        <xsl:apply-templates mode="generate-id-from-path" select="parent::*"/>
+        <xsl:value-of select="concat('.text-', 1+count(preceding-sibling::text()), '-')"/>
+    </xsl:template>
+    <xsl:template match="comment()" mode="generate-id-from-path">
+        <xsl:apply-templates mode="generate-id-from-path" select="parent::*"/>
+        <xsl:value-of select="concat('.comment-', 1+count(preceding-sibling::comment()), '-')"/>
+    </xsl:template>
+    <xsl:template match="processing-instruction()" mode="generate-id-from-path">
+        <xsl:apply-templates mode="generate-id-from-path" select="parent::*"/>
+        <xsl:value-of select="concat('.processing-instruction-', 1+count(preceding-sibling::processing-instruction()), '-')"/>
+    </xsl:template>
+    <xsl:template match="@*" mode="generate-id-from-path">
+        <xsl:apply-templates mode="generate-id-from-path" select="parent::*"/>
+        <xsl:value-of select="concat('.@', name())"/>
+    </xsl:template>
+    <xsl:template match="*" mode="generate-id-from-path" priority="-0.5">
+        <xsl:apply-templates mode="generate-id-from-path" select="parent::*"/>
+        <xsl:text>.</xsl:text>
+        <xsl:value-of select="concat('.',name(),'-',1+count(preceding-sibling::*[name()=name(current())]),'-')"/>
+    </xsl:template>
+    <!--MODE: GENERATE-ID-2 -->
+    <xsl:template match="/" mode="generate-id-2">U</xsl:template>
+    <xsl:template match="*" mode="generate-id-2" priority="2">
+        <xsl:text>U</xsl:text>
+        <xsl:number count="*" level="multiple"/>
+    </xsl:template>
+    <xsl:template match="node()" mode="generate-id-2">
+        <xsl:text>U.</xsl:text>
+        <xsl:number count="*" level="multiple"/>
+        <xsl:text>n</xsl:text>
+        <xsl:number count="node()"/>
+    </xsl:template>
+    <xsl:template match="@*" mode="generate-id-2">
+        <xsl:text>U.</xsl:text>
+        <xsl:number count="*" level="multiple"/>
+        <xsl:text>_</xsl:text>
+        <xsl:value-of select="string-length(local-name(.))"/>
+        <xsl:text>_</xsl:text>
+        <xsl:value-of select="translate(name(),':','.')"/>
+    </xsl:template>
+    <!--Strip characters-->
+    <xsl:template match="text()" priority="-1"/>
+    <!--SCHEMA SETUP-->
+    <xsl:template match="/">
+        <svrl:schematron-output schemaVersion="" title="EN16931 model bound to CII">
+            <xsl:comment>
+                <xsl:value-of select="$archiveDirParameter"/>  Â 
+                <xsl:value-of select="$archiveNameParameter"/> Â 
+                <xsl:value-of select="$fileNameParameter"/> Â 
+                <xsl:value-of select="$fileDirParameter"/>
+            </xsl:comment>
+            <svrl:ns-prefix-in-attribute-values prefix="rsm" uri="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"/>
+            <svrl:ns-prefix-in-attribute-values prefix="ccts" uri="urn:un:unece:uncefact:documentation:standard:CoreComponentsTechnicalSpecification:2"/>
+            <svrl:ns-prefix-in-attribute-values prefix="udt" uri="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"/>
+            <svrl:ns-prefix-in-attribute-values prefix="qdt" uri="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"/>
+            <svrl:ns-prefix-in-attribute-values prefix="ram" uri="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"/>
+            <svrl:ns-prefix-in-attribute-values prefix="xs" uri="http://www.w3.org/2001/XMLSchema"/>
+            <svrl:active-pattern>
+                <xsl:attribute name="document">
+                    <xsl:value-of select="document-uri(/)"/>
+                </xsl:attribute>
+                <xsl:attribute name="id">EN16931-CII-Model</xsl:attribute>
+                <xsl:attribute name="name">EN16931-CII-Model</xsl:attribute>
+                <xsl:apply-templates/>
+            </svrl:active-pattern>
+            <xsl:apply-templates mode="M10" select="/"/>
+            <svrl:active-pattern>
+                <xsl:attribute name="document">
+                    <xsl:value-of select="document-uri(/)"/>
+                </xsl:attribute>
+                <xsl:attribute name="id">EN16931-CII-Syntax</xsl:attribute>
+                <xsl:attribute name="name">EN16931-CII-Syntax</xsl:attribute>
+                <xsl:apply-templates/>
+            </svrl:active-pattern>
+            <xsl:apply-templates mode="M11" select="/"/>
+            <svrl:active-pattern>
+                <xsl:attribute name="document">
+                    <xsl:value-of select="document-uri(/)"/>
+                </xsl:attribute>
+                <xsl:attribute name="id">EN16931-Codes</xsl:attribute>
+                <xsl:attribute name="name">EN16931-Codes</xsl:attribute>
+                <xsl:apply-templates/>
+            </svrl:active-pattern>
+            <xsl:apply-templates mode="M12" select="/"/>
+        </svrl:schematron-output>
+    </xsl:template>
+    <!--SCHEMATRON PATTERNS-->
+    <svrl:text>EN16931 model bound to CII</svrl:text>
+    <!--PATTERN EN16931-CII-Model-->
+    <!--RULE -->
+    <xsl:template match="//ram:AdditionalReferencedDocument" mode="M10" priority="1057">
+        <svrl:fired-rule context="//ram:AdditionalReferencedDocument"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:IssuerAssignedID!='')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:IssuerAssignedID!='')">
+                    <xsl:attribute name="id">BR-52</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-52]-Each Additional supporting document (BG-24) shall contain a Supporting document reference (BT-122).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:ApplicableTradeSettlementFinancialCard" mode="M10" priority="1056">
+        <svrl:fired-rule context="//ram:ApplicableTradeSettlementFinancialCard"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(ram:ID)&lt;=6 and string-length(ram:ID)>=4"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(ram:ID)&lt;=6 and string-length(ram:ID)>=4">
+                    <xsl:attribute name="id">BR-51</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-51]-The last 4 to 6 digits of the Payment card primary account number (BT-87) shall be present if Payment card information (BG-18) is provided in the Invoice.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeSettlementPaymentMeans[ram:TypeCode='30' or ram:TypeCode='58']/ram:PayerPartyDebtorFinancialAccount" mode="M10" priority="1055">
+        <svrl:fired-rule context="//ram:SpecifiedTradeSettlementPaymentMeans[ram:TypeCode='30' or ram:TypeCode='58']/ram:PayerPartyDebtorFinancialAccount"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:IBANID) or (ram:ProprietaryID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:IBANID) or (ram:ProprietaryID)">
+                    <xsl:attribute name="id">BR-50</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-50]-A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:IBANID) or (ram:ProprietaryID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:IBANID) or (ram:ProprietaryID)">
+                    <xsl:attribute name="id">BR-61</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-61]-If the Payment means type code (BT-81) means SEPA credit transfer, Local credit transfer or Non-SEPA international credit transfer, the Payment account identifier (BT-84) shall be present.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery" mode="M10" priority="1054">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:ShipToTradeParty/ram:PostalTradeAddress and ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID!='') or not (ram:ShipToTradeParty/ram:PostalTradeAddress)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:ShipToTradeParty/ram:PostalTradeAddress and ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID!='') or not (ram:ShipToTradeParty/ram:PostalTradeAddress)">
+                    <xsl:attribute name="id">BR-57</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-57]-Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]" mode="M10" priority="1053">
+        <svrl:fired-rule context="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:ActualAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:ActualAmount)">
+                    <xsl:attribute name="id">BR-31</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-31]-Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:CategoryTradeTax[upper-case(ram:TypeCode) = 'VAT']/ram:CategoryCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:CategoryTradeTax[upper-case(ram:TypeCode) = 'VAT']/ram:CategoryCode)">
+                    <xsl:attribute name="id">BR-32</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-32]-Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:Reason) or (ram:ReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:Reason) or (ram:ReasonCode)">
+                    <xsl:attribute name="id">BR-33</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-33]-Each Document level allowance (BG-20) shall have a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="true()"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="true()">
+                    <xsl:attribute name="id">BR-CO-05</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-05]-Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:Reason) or (ram:ReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:Reason) or (ram:ReasonCode)">
+                    <xsl:attribute name="id">BR-CO-21</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-21]-Each Document level allowance (BG-20) shall contain a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98), or both.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:ActualAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:ActualAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-01</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-01]-The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:BasisAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:BasisAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-02</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-02]-The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]" mode="M10" priority="1052">
+        <svrl:fired-rule context="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:ActualAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:ActualAmount)">
+                    <xsl:attribute name="id">BR-36</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-36]-Each Document level charge (BG-21) shall have a Document level charge amount (BT-99). </svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:CategoryTradeTax[upper-case(ram:TypeCode) = 'VAT']/ram:CategoryCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:CategoryTradeTax[upper-case(ram:TypeCode) = 'VAT']/ram:CategoryCode)">
+                    <xsl:attribute name="id">BR-37</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-37]-Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:Reason) or (ram:ReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:Reason) or (ram:ReasonCode)">
+                    <xsl:attribute name="id">BR-38</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-38]-Each Document level charge (BG-21) shall have a Document level charge reason (BT-104) or a Document level charge reason code (BT-105).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="true()"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="true()">
+                    <xsl:attribute name="id">BR-CO-06</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-06]-Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge. </svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:Reason) or (ram:ReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:Reason) or (ram:ReasonCode)">
+                    <xsl:attribute name="id">BR-CO-22</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-22]-Each Document level charge (BG-21) shall contain a Document level charge reason (BT-104) or a Document level charge reason code (BT-105), or both.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:ActualAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:ActualAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-05</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-05]-The allowed maximum number of decimals for the Document level charge amount (BT-92) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:BasisAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:BasisAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-06</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-06]-The allowed maximum number of decimals for the Document level charge base amount (BT-93) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeSettlementHeaderMonetarySummation" mode="M10" priority="1051">
+        <svrl:fired-rule context="//ram:SpecifiedTradeSettlementHeaderMonetarySummation"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:LineTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:LineTotalAmount)">
+                    <xsl:attribute name="id">BR-12</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-12]-An Invoice shall have the Sum of Invoice line net amount (BT-106). </svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:TaxBasisTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:TaxBasisTotalAmount)">
+                    <xsl:attribute name="id">BR-13</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-13]-An Invoice shall have the Invoice total amount without VAT (BT-109).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:GrandTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:GrandTotalAmount)">
+                    <xsl:attribute name="id">BR-14</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-14]-An Invoice shall have the Invoice total amount with VAT (BT-112).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:DuePayableAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:DuePayableAmount)">
+                    <xsl:attribute name="id">BR-15</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-15]-An Invoice shall have the Amount due for payment (BT-115).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) or (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and (ram:TaxTotalAmount/@currencyID = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) and not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) or (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and (ram:TaxTotalAmount/@currencyID = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) and not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode))">
+                    <xsl:attribute name="id">BR-53</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-53]-If the VAT accounting currency code (BT-6) is present, then the Invoice total VAT amount in accounting currency (BT-111) shall be provided.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:LineTotalAmount = (round(sum(../../ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount) * 10 * 10)div 100)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:LineTotalAmount = (round(sum(../../ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount) * 10 * 10)div 100)">
+                    <xsl:attribute name="id">BR-CO-10</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-10]-Sum of Invoice line net amount (BT-106) = Î£ Invoice line net amount (BT-131).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()])and not (ram:AllowanceTotalAmount)) or ram:AllowanceTotalAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:ActualAmount)* 10 * 10 ) div 100)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()])and not (ram:AllowanceTotalAmount)) or ram:AllowanceTotalAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:ActualAmount)* 10 * 10 ) div 100)">
+                    <xsl:attribute name="id">BR-CO-11</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-11]-Sum of allowances on document level (BT-107) = Î£ Document level allowance amount (BT-92).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()])and not (ram:ChargeTotalAmount)) or ram:ChargeTotalAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:ActualAmount)* 10 * 10 ) div 100) "/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()])and not (ram:ChargeTotalAmount)) or ram:ChargeTotalAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:ActualAmount)* 10 * 10 ) div 100)">
+                    <xsl:attribute name="id">BR-CO-12</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-12]-Sum of charges on document level (BT-108) = Î£ Document level charge amount (BT-99).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) - xs:decimal(ram:AllowanceTotalAmount) + xs:decimal(ram:ChargeTotalAmount)) *10 * 10) div 100) or      ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) - xs:decimal(ram:AllowanceTotalAmount)) *10 * 10) div 100)  and not (ram:ChargeTotalAmount)) or      ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) + xs:decimal(ram:ChargeTotalAmount)) *10 * 10) div 100)  and not (ram:AllowanceTotalAmount)) or      ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount))  *10 * 10) div 100) and not (ram:ChargeTotalAmount) and not (ram:AllowanceTotalAmount))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) - xs:decimal(ram:AllowanceTotalAmount) + xs:decimal(ram:ChargeTotalAmount)) *10 * 10) div 100) or ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) - xs:decimal(ram:AllowanceTotalAmount)) *10 * 10) div 100) and not (ram:ChargeTotalAmount)) or ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) + xs:decimal(ram:ChargeTotalAmount)) *10 * 10) div 100) and not (ram:AllowanceTotalAmount)) or ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount)) *10 * 10) div 100) and not (ram:ChargeTotalAmount) and not (ram:AllowanceTotalAmount))">
+                    <xsl:attribute name="id">BR-CO-13</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-13]-Invoice total amount without VAT (BT-109) = Î£ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:GrandTotalAmount = round(     ram:TaxBasisTotalAmount*100 + ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]*100 +0)      div 100) or     ((ram:GrandTotalAmount = ram:TaxBasisTotalAmount) and not (ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:GrandTotalAmount = round( ram:TaxBasisTotalAmount*100 + ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]*100 +0) div 100) or ((ram:GrandTotalAmount = ram:TaxBasisTotalAmount) and not (ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]))">
+                    <xsl:attribute name="id">BR-CO-15</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-15]-Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) - xs:decimal(ram:TotalPrepaidAmount) + xs:decimal(ram:RoundingAmount)) or      ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) + xs:decimal(ram:RoundingAmount)) and not (xs:decimal(ram:TotalPrepaidAmount))) or      ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) - xs:decimal(ram:TotalPrepaidAmount)) and not (xs:decimal(ram:RoundingAmount))) or      ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount)) and not (xs:decimal(ram:TotalPrepaidAmount)) and not (xs:decimal(ram:RoundingAmount)))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) - xs:decimal(ram:TotalPrepaidAmount) + xs:decimal(ram:RoundingAmount)) or ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) + xs:decimal(ram:RoundingAmount)) and not (xs:decimal(ram:TotalPrepaidAmount))) or ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) - xs:decimal(ram:TotalPrepaidAmount)) and not (xs:decimal(ram:RoundingAmount))) or ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount)) and not (xs:decimal(ram:TotalPrepaidAmount)) and not (xs:decimal(ram:RoundingAmount)))">
+                    <xsl:attribute name="id">BR-CO-16</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-16]-Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:LineTotalAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:LineTotalAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-09</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-09]-The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:AllowanceTotalAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:AllowanceTotalAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-10</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-10]-The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:ChargeTotalAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:ChargeTotalAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-11</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-11]-The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:TaxBasisTotalAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:TaxBasisTotalAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-12</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-12]-The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:GrandTotalAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:GrandTotalAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-14</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-14]-The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode and . = round(. * 100) div 100) or not (@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode)]"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode and . = round(. * 100) div 100) or not (@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode)]">
+                    <xsl:attribute name="id">BR-DEC-13</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-13]-The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and . = round(. * 100) div 100) or not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode)]"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and . = round(. * 100) div 100) or not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode)]">
+                    <xsl:attribute name="id">BR-DEC-15</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-15]-The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:TotalPrepaidAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:TotalPrepaidAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-16</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-16]-The allowed maximum number of decimals for the Paid amount (BT-113) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:RoundingAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:RoundingAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-17</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-17]-The allowed maximum number of decimals for the Rounding amount (BT-114) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:DuePayableAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:DuePayableAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-18</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-18]-The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice" mode="M10" priority="1050">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID != '')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID != '')">
+                    <xsl:attribute name="id">BR-01</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-01]-An Invoice shall have a Specification identifier (BT-24).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(rsm:ExchangedDocument/ram:ID !='')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(rsm:ExchangedDocument/ram:ID !='')">
+                    <xsl:attribute name="id">BR-02</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-02]-An Invoice shall have an Invoice number (BT-1).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString[@format='102']!='')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString[@format='102']!='')">
+                    <xsl:attribute name="id">BR-03</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-03]-An Invoice shall have an Invoice issue date (BT-2).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(rsm:ExchangedDocument/ram:TypeCode!='')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(rsm:ExchangedDocument/ram:TypeCode!='')">
+                    <xsl:attribute name="id">BR-04</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-04]-An Invoice shall have an Invoice type code (BT-3).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode!='')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode!='')">
+                    <xsl:attribute name="id">BR-05</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-05]-An Invoice shall have an Invoice currency code (BT-5).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name!='')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name!='')">
+                    <xsl:attribute name="id">BR-06</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-06]-An Invoice shall contain the Seller name (BT-27).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name!='')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name!='')">
+                    <xsl:attribute name="id">BR-07</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-07]-An Invoice shall contain the Buyer name (BT-44).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress">
+                    <xsl:attribute name="id">BR-08</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-08]-An Invoice shall contain the Seller postal address (BG-5).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID!=''"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID!=''">
+                    <xsl:attribute name="id">BR-09</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-09]-The Seller postal address (BG-5) shall contain a Seller country code (BT-40).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress">
+                    <xsl:attribute name="id">BR-10</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-10]-An Invoice shall contain the Buyer postal address (BG-8).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID!=''"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID!=''">
+                    <xsl:attribute name="id">BR-11</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-11]-The Buyer postal address shall contain a Buyer country code (BT-55).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="//ram:IncludedSupplyChainTradeLineItem"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="//ram:IncludedSupplyChainTradeLineItem">
+                    <xsl:attribute name="id">BR-16</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-16]-An Invoice shall have at least one Invoice line (BG-25).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!='' or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!='' or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication)">
+                    <xsl:attribute name="id">BR-62</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-62]-The Seller electronic address (BT-34) shall have a Scheme identifier.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!='' or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!='' or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication)">
+                    <xsl:attribute name="id">BR-63</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-63]-The Buyer electronic address (BT-49) shall have a Scheme identifier.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(number(//ram:DuePayableAmount) > 0 and ((//ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime) or (//ram:SpecifiedTradePaymentTerms/ram:Description))) or not(number(//ram:DuePayableAmount)>0)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(number(//ram:DuePayableAmount) > 0 and ((//ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime) or (//ram:SpecifiedTradePaymentTerms/ram:Description))) or not(number(//ram:DuePayableAmount)>0)">
+                    <xsl:attribute name="id">BR-CO-25</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-25]-In case the Amount due for payment (BT-115) is positive, either the Payment due date (BT-9) or the Payment terms (BT-20) shall be present.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='S']) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='S'])) >=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='S'])) and      ((count(//ram:CategoryTradeTax[ram:CategoryCode='S']) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='S'])) >=2 or not (//ram:CategoryTradeTax[ram:CategoryCode='S']))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='S']) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='S'])) >=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='S'])) and ((count(//ram:CategoryTradeTax[ram:CategoryCode='S']) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='S'])) >=2 or not (//ram:CategoryTradeTax[ram:CategoryCode='S']))">
+                    <xsl:attribute name="id">BR-S-01</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-S-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is "Standard rated" shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "Standard rated".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='Z'])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='Z'])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode='Z'])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='Z'])=1 and (exists(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='Z']) or exists(//ram:CategoryTradeTax[ram:CategoryCode='Z'])))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='Z'])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='Z'])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode='Z'])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='Z'])=1 and (exists(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='Z']) or exists(//ram:CategoryTradeTax[ram:CategoryCode='Z'])))">
+                    <xsl:attribute name="id">BR-Z-01</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-Z-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is "Zero rated" shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Zero rated".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='E'])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='E'])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode='E'])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='E'])=1 and (exists(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='E']) or exists(//ram:CategoryTradeTax[ram:CategoryCode='E'])))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='E'])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='E'])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode='E'])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='E'])=1 and (exists(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='E']) or exists(//ram:CategoryTradeTax[ram:CategoryCode='E'])))">
+                    <xsl:attribute name="id">BR-E-01</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-E-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is "Exempt from VAT" shall contain exactly one VAT breakdown (BG-23) with the VAT category code (BT-118) equal to "Exempt from VAT".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='AE'])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='AE'])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode='AE'])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='AE'])=1 and (exists(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='AE']) or exists(//ram:CategoryTradeTax[ram:CategoryCode='AE'])))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='AE'])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='AE'])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode='AE'])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='AE'])=1 and (exists(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='AE']) or exists(//ram:CategoryTradeTax[ram:CategoryCode='AE'])))">
+                    <xsl:attribute name="id">BR-AE-01</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-AE-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is "Reverse charge" shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "VAT reverse charge".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='K'])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='K'])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode='K'])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='K'])=1 and (exists(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='K']) or exists(//ram:CategoryTradeTax[ram:CategoryCode='K'])))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='K'])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='K'])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode='K'])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='K'])=1 and (exists(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='K']) or exists(//ram:CategoryTradeTax[ram:CategoryCode='K'])))">
+                    <xsl:attribute name="id">BR-IC-01</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IC-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is "Intra-community supply" shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Intra-community supply".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='G'])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='G'])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode='G'])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='G'])=1 and (exists(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='G']) or exists(//ram:CategoryTradeTax[ram:CategoryCode='G'])))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='G'])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='G'])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode='G'])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='G'])=1 and (exists(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='G']) or exists(//ram:CategoryTradeTax[ram:CategoryCode='G'])))">
+                    <xsl:attribute name="id">BR-G-01</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-G-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is "Export outside the EU" shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Export outside the EU".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='O']) or (      count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='O'])=1 and      (exists(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='O']) or     exists(//ram:CategoryTradeTax[ram:CategoryCode='O'])))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='O']) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='O'])=1 and (exists(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='O']) or exists(//ram:CategoryTradeTax[ram:CategoryCode='O'])))">
+                    <xsl:attribute name="id">BR-O-01</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is "Not subject to VAT" shall contain exactly one VAT breakdown group (BG-23) with the VAT category code (BT-118) equal to "Not subject to VAT".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='L']) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='L'])) >=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='L'])) and      ((count(//ram:CategoryTradeTax[ram:CategoryCode='L']) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='L'])) >=2 or not (//ram:CategoryTradeTax[ram:CategoryCode='L']))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='L']) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='L'])) >=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='L'])) and ((count(//ram:CategoryTradeTax[ram:CategoryCode='L']) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='L'])) >=2 or not (//ram:CategoryTradeTax[ram:CategoryCode='L']))">
+                    <xsl:attribute name="id">BR-AF-01</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IG-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is "IGIC" shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "IGIC".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='M']) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='M'])) >=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='M'])) and      ((count(//ram:CategoryTradeTax[ram:CategoryCode='M']) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='M'])) >=2 or not (//ram:CategoryTradeTax[ram:CategoryCode='M']))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='M']) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='M'])) >=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='M'])) and ((count(//ram:CategoryTradeTax[ram:CategoryCode='M']) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='M'])) >=2 or not (//ram:CategoryTradeTax[ram:CategoryCode='M']))">
+                    <xsl:attribute name="id">BR-AG-01</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IP-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is "IPSI" shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "IPSI".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:IncludedSupplyChainTradeLineItem" mode="M10" priority="1049">
+        <svrl:fired-rule context="//ram:IncludedSupplyChainTradeLineItem"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:AssociatedDocumentLineDocument/ram:LineID!='')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:AssociatedDocumentLineDocument/ram:LineID!='')">
+                    <xsl:attribute name="id">BR-21</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-21]-Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity)">
+                    <xsl:attribute name="id">BR-22</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-22]-Each Invoice line (BG-25) shall have an Invoiced quantity (BT-129).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity/@unitCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity/@unitCode)">
+                    <xsl:attribute name="id">BR-23</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-23]-An Invoice line (BG-25) shall have an Invoiced quantity unit of measure code (BT-130).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)">
+                    <xsl:attribute name="id">BR-24</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-24]-Each Invoice line (BG-25) shall have an Invoice line net amount (BT-131).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:SpecifiedTradeProduct/ram:Name!='')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:SpecifiedTradeProduct/ram:Name!='')">
+                    <xsl:attribute name="id">BR-25</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-25]-Each Invoice line (BG-25) shall contain the Item name (BT-153).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount)">
+                    <xsl:attribute name="id">BR-26</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-26]-Each Invoice line (BG-25) shall contain the Item net price (BT-146).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount) >= 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount) >= 0">
+                    <xsl:attribute name="id">BR-27</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-27]-The Item net price (BT-146) shall NOT be negative.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount >= 0) or not(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount >= 0) or not(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount)">
+                    <xsl:attribute name="id">BR-28</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-28]-The Item gross price (BT-148) shall NOT be negative.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:SpecifiedTradeProduct/ram:GlobalID/@schemeID!='' or not (ram:SpecifiedTradeProduct/ram:GlobalID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:SpecifiedTradeProduct/ram:GlobalID/@schemeID!='' or not (ram:SpecifiedTradeProduct/ram:GlobalID)">
+                    <xsl:attribute name="id">BR-64</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-64]-The Item standard identifier (BT-157) shall have a Scheme identifier.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode/@listID!='') or not (ram:SpecifiedTradeProduct/ram:DesignatedProductClassification)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode/@listID!='') or not (ram:SpecifiedTradeProduct/ram:DesignatedProductClassification)">
+                    <xsl:attribute name="id">BR-65</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-65]-The Item classification identifier (BT-158) shall have a Scheme identifier.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[upper-case(ram:TypeCode) = 'VAT']/ram:CategoryCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[upper-case(ram:TypeCode) = 'VAT']/ram:CategoryCode)">
+                    <xsl:attribute name="id">BR-CO-04</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-04]-Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+                    <xsl:attribute name="id">BR-CO-18</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-18]-An Invoice shall at least have one VAT breakdown group (BG-23).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:SpecifiedTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:SpecifiedTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-23</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-23]-The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = false()]" mode="M10" priority="1048">
+        <svrl:fired-rule context="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = false()]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:ActualAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:ActualAmount)">
+                    <xsl:attribute name="id">BR-41</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-41]-Each Invoice line allowance (BG-27) shall have an Invoice line allowance amount (BT-136).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:Reason) or (ram:ReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:Reason) or (ram:ReasonCode)">
+                    <xsl:attribute name="id">BR-42</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-42]-Each Invoice line allowance (BG-27) shall have an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="true()"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="true()">
+                    <xsl:attribute name="id">BR-CO-07</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-07]-Invoice line allowance reason code (BT-140) and Invoice line allowance reason (BT-139) shall indicate the same type of allowance reason.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:Reason) or (ram:ReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:Reason) or (ram:ReasonCode)">
+                    <xsl:attribute name="id">BR-CO-23</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-23]-Each Invoice line allowance (BG-27) shall contain an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140), or both.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:ActualAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:ActualAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-24</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-24]-The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:BasisAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:BasisAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-25</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-25]-The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = true()]" mode="M10" priority="1047">
+        <svrl:fired-rule context="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = true()]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:ActualAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:ActualAmount)">
+                    <xsl:attribute name="id">BR-43</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-43]-Each Invoice line charge (BG-28) shall have an Invoice line charge amount (BT-141).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:Reason) or (ram:ReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:Reason) or (ram:ReasonCode)">
+                    <xsl:attribute name="id">BR-44</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-44]-Each Invoice line charge (BG-28) shall have an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="true()"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="true()">
+                    <xsl:attribute name="id">BR-CO-08</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-08]-Invoice line charge reason code (BT-145) and Invoice line charge reason (BT144) shall indicate the same type of charge reason.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:Reason) or (ram:ReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:Reason) or (ram:ReasonCode)">
+                    <xsl:attribute name="id">BR-CO-24</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-24]-Each Invoice line charge (BG-28) shall contain an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145), or both.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:ActualAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:ActualAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-27</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-27]-The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:BasisAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:BasisAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-28</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-28]-The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod" mode="M10" priority="1046">
+        <svrl:fired-rule context="//ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:EndDateTime/udt:DateTimeString[@format = '102']) >= (ram:StartDateTime/udt:DateTimeString[@format = '102']) or not (ram:EndDateTime) or not (ram:StartDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:EndDateTime/udt:DateTimeString[@format = '102']) >= (ram:StartDateTime/udt:DateTimeString[@format = '102']) or not (ram:EndDateTime) or not (ram:StartDateTime)">
+                    <xsl:attribute name="id">BR-30</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-30]-If both Invoice line period start date (BT-134) and Invoice line period end date (BT-135) are given then the Invoice line period end date (BT-135) shall be later or equal to the Invoice line period start date (BT-134).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:StartDateTime) or (ram:EndDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:StartDateTime) or (ram:EndDateTime)">
+                    <xsl:attribute name="id">BR-CO-20</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-20]-If Invoice line period (BG-26) is used, the Invoice line period start date (BT-134) or the Invoice line period end date (BT-135) shall be filled, or both.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod" mode="M10" priority="1045">
+        <svrl:fired-rule context="//ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:EndDateTime/udt:DateTimeString[@format = '102']) >= (ram:StartDateTime/udt:DateTimeString[@format = '102']) or not (ram:EndDateTime) or not (ram:StartDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:EndDateTime/udt:DateTimeString[@format = '102']) >= (ram:StartDateTime/udt:DateTimeString[@format = '102']) or not (ram:EndDateTime) or not (ram:StartDateTime)">
+                    <xsl:attribute name="id">BR-29</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-29]-If both Invoicing period start date (BT-73) and Invoicing period end date (BT-74) are given then the Invoicing period end date (BT-74) shall be later or equal to the Invoicing period start date (BT-73).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:StartDateTime) or (ram:EndDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:StartDateTime) or (ram:EndDateTime)">
+                    <xsl:attribute name="id">BR-CO-19</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-19]-If Invoicing period (BG-14) is used, the Invoicing period start date (BT-73) or the Invoicing period end date (BT-74) shall be filled, or both.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:ApplicableProductCharacteristic" mode="M10" priority="1044">
+        <svrl:fired-rule context="//ram:ApplicableProductCharacteristic"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:Description) and (ram:Value)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:Description) and (ram:Value)">
+                    <xsl:attribute name="id">BR-54</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-54]-Each Item attribute (BG-32) shall contain an Item attribute name (BT-160) and an Item attribute value (BT-161).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:PayeeTradeParty" mode="M10" priority="1043">
+        <svrl:fired-rule context="//ram:PayeeTradeParty"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:Name) and (not(ram:Name = ../ram:SellerTradeParty/ram:Name) and not(ram:ID = ../ram:SellerTradeParty/ram:ID) and not(ram:SpecifiedLegalOrganization/ram:ID = ../ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:Name) and (not(ram:Name = ../ram:SellerTradeParty/ram:Name) and not(ram:ID = ../ram:SellerTradeParty/ram:ID) and not(ram:SpecifiedLegalOrganization/ram:ID = ../ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID))">
+                    <xsl:attribute name="id">BR-17</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-17]-The Payee name (BT-59) shall be provided in the Invoice, if the Payee (BG-10) is different from the Seller (BG-4).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeSettlementPaymentMeans" mode="M10" priority="1042">
+        <svrl:fired-rule context="//ram:SpecifiedTradeSettlementPaymentMeans"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:TypeCode)">
+                    <xsl:attribute name="id">BR-49</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-49]-A Payment instruction (BG-16) shall specify the Payment means type code (BT-81).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:PayeePartyCreditorFinancialAccount/ram:IBANID) or (ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID) or (not(ram:PayeePartyCreditorFinancialAccount/ram:IBANID) and not(ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:PayeePartyCreditorFinancialAccount/ram:IBANID) or (ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID) or (not(ram:PayeePartyCreditorFinancialAccount/ram:IBANID) and not(ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID))">
+                    <xsl:attribute name="id">BR-CO-27</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-27]- Either the IBAN or a Proprietary ID (BT-84) shall be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument" mode="M10" priority="1041">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:IssuerAssignedID!='')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:IssuerAssignedID!='')">
+                    <xsl:attribute name="id">BR-55</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-55]-Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SellerTradeParty" mode="M10" priority="1040">
+        <svrl:fired-rule context="//ram:SellerTradeParty"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:ID) or (ram:GlobalID) or (ram:SpecifiedLegalOrganization/ram:ID) or (ram:SpecifiedTaxRegistration/ram:ID[@schemeID='VA'])"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:ID) or (ram:GlobalID) or (ram:SpecifiedLegalOrganization/ram:ID) or (ram:SpecifiedTaxRegistration/ram:ID[@schemeID='VA'])">
+                    <xsl:attribute name="id">BR-CO-26</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-26]-In order for the buyer to automatically identify a supplier, the Seller identifier (BT-29), the Seller legal registration identifier (BT-30) and/or the Seller VAT identifier (BT-31) shall be present.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SellerTaxRepresentativeTradeParty" mode="M10" priority="1039">
+        <svrl:fired-rule context="//ram:SellerTaxRepresentativeTradeParty"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:Name)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:Name)">
+                    <xsl:attribute name="id">BR-18</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-18]-The Seller tax representative name (BT-62) shall be provided in the Invoice, if the Seller (BG-4) has a Seller tax representative party (BG-11).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:PostalTradeAddress)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:PostalTradeAddress)">
+                    <xsl:attribute name="id">BR-19</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-19]-The Seller tax representative postal address (BG-12) shall be provided in the Invoice, if the Seller (BG-4) has a Seller tax representative party (BG-11).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:PostalTradeAddress/ram:CountryID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:PostalTradeAddress/ram:CountryID)">
+                    <xsl:attribute name="id">BR-20</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-20]-The Seller tax representative postal address (BG-12) shall contain a Tax representative country code (BT-69), if the Seller (BG-4) has a Seller tax representative party (BG-11).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:SpecifiedTaxRegistration/ram:ID[@schemeID='VA']!='')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:SpecifiedTaxRegistration/ram:ID[@schemeID='VA']!='')">
+                    <xsl:attribute name="id">BR-56</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-56]-Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]" mode="M10" priority="1038">
+        <svrl:fired-rule context="//ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test=". = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount)*10*10)div 100) "/>
+            <xsl:otherwise>
+                <svrl:failed-assert test=". = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount)*10*10)div 100)">
+                    <xsl:attribute name="id">BR-CO-14</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-14]-Invoice total VAT amount (BT-110) = Î£ VAT category tax amount (BT-117).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTaxRegistration/ram:ID[@schemeID='VA']" mode="M10" priority="1037">
+        <svrl:fired-rule context="//ram:SpecifiedTaxRegistration/ram:ID[@schemeID='VA']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="contains(' EL AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BL BJ BM BN BO BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW ', concat(' ', substring(.,1,2), ' '))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="contains(' EL AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BL BJ BM BN BO BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW ', concat(' ', substring(.,1,2), ' '))">
+                    <xsl:attribute name="id">BR-CO-09</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-09]-The Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) shall have a prefix in accordance with ISO code ISO 3166-1 alpha-2 by which the country of issue may be identified. Nevertheless, Greece may use the prefix âELâ.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = 'AE'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1036">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = 'AE'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'AE']/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='AE']/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='AE']/ram:ActualAmount)*10*10)div 100)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'AE']/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='AE']/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='AE']/ram:ActualAmount)*10*10)div 100)">
+                    <xsl:attribute name="id">BR-AE-08</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-AE-08]-In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Reverse charge" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are "Reverse charge".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="../ram:CalculatedAmount = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="../ram:CalculatedAmount = 0">
+                    <xsl:attribute name="id">BR-AE-09</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-AE-09]-The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Reverse charge" shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                    <xsl:attribute name="id">BR-AE-10</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-AE-10]-A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Reverse charge" shall have a VAT exemption reason code (BT-121), meaning "Reverse charge" or the VAT exemption reason text (BT-120) "Reverse charge" (or the equivalent standard text in another language).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'AE'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1035">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'AE'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                    <xsl:attribute name="id">BR-AE-03</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-AE-03]-An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Reverse charge" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-AE-06</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-AE-06]-In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Reverse charge" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'AE'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1034">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'AE'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                    <xsl:attribute name="id">BR-AE-04</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-AE-04]-An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Reverse charge" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-AE-07</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-AE-07]-In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Reverse charge" the Document level charge VAT rate (BT-103) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'AE'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1033">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'AE'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                    <xsl:attribute name="id">BR-AE-02</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-AE-02]-An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Reverse charge" shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-AE-05</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-AE-05]-In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Reverse charge" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'L'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1032">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'L'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'L' and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='L' and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='L' and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'L' and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='L' and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='L' and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)">
+                    <xsl:attribute name="id">BR-AF-08</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IG-08]-For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "IGIC", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is "IGIC" and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="true()"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="true()">
+                    <xsl:attribute name="id">BR-AF-09</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IG-09]-The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IGIC" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)">
+                    <xsl:attribute name="id">BR-AF-10</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IG-10]-A VAT Breakdown (BG-23) with VAT Category code (BT-118) "IGIC" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'L'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1031">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'L'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-AF-02</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IG-02]-An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IGIC" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent > 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent > 0">
+                    <xsl:attribute name="id">BR-AF-05</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IG-05]-In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IGIC" the invoiced item VAT rate (BT-152) shall be greater than 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'L'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1030">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'L'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-AF-03</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IG-03]-An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IGIC" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent > 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent > 0">
+                    <xsl:attribute name="id">BR-AF-06</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IG-06]-In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IGIC" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'L'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1029">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'L'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-AF-04</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IG-04]-An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IGIC" shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent > 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent > 0">
+                    <xsl:attribute name="id">BR-AF-07</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IG-07]-In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IGIC" the Document level charge VAT rate (BT-103) shall be 0 (zero) or greater than zero.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'M'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1028">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'M'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'M' and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='M' and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='M' and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'M' and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='M' and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='M' and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)">
+                    <xsl:attribute name="id">BR-AG-08</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IP-08]-For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "IPSI", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is "IPSI" and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="true()"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="true()">
+                    <xsl:attribute name="id">BR-AG-09</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IP-09]-The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IPSI" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)">
+                    <xsl:attribute name="id">BR-AG-10</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IP-10]-A VAT Breakdown (BG-23) with VAT Category code (BT-118) "IPSI" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120). </svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'M'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1027">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'M'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-AG-02</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IP-02]-An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IPSI" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent > 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent > 0">
+                    <xsl:attribute name="id">BR-AG-05</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IP-05]-In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IPSI" the Invoiced item VAT rate (BT-152) shall be 0 (zero) or greater than zero.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'M'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1026">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'M'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-AG-03</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IP-03]-An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IPSI" shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent > 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent > 0">
+                    <xsl:attribute name="id">BR-AG-06</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IP-06]-In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IPSI" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'M'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1025">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'M'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-AG-04</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IP-04]-An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IPSI" shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent > 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent > 0">
+                    <xsl:attribute name="id">BR-AG-07</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IP-07]-In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IPSI" the Document level charge VAT rate (BT-103) shall be 0 (zero) or greater than zero.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = 'E'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1024">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = 'E'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'E']/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='E']/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='E']/ram:ActualAmount)*10*10)div 100)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'E']/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='E']/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='E']/ram:ActualAmount)*10*10)div 100)">
+                    <xsl:attribute name="id">BR-E-08</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-E-08]-In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Exempt from VAT" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are "Exempt from VAT".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="../ram:CalculatedAmount = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="../ram:CalculatedAmount = 0">
+                    <xsl:attribute name="id">BR-E-09</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-E-09]-The VAT category tax amount (BT-117) In a VAT breakdown (BG-23) where the VAT category code (BT-118) equals "Exempt from VAT" shall equal 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                    <xsl:attribute name="id">BR-E-10</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-E-10]-A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Exempt from VAT" shall have a VAT exemption reason code (BT-121) or a VAT exemption reason text (BT-120).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'E'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1023">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'E'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-E-03</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-E-03]-An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Exempt from VAT" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-E-06</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-E-06]-In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Exempt from VAT", the Document level allowance VAT rate (BT-96) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'E'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1022">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'E'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-E-04</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-E-04]-An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Exempt from VAT" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-E-07</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-E-07]-In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Exempt from VAT", the Document level charge VAT rate (BT-103) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'E'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1021">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'E'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-E-02</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-E-02]-An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Exempt from VAT" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-E-05</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-E-05]-In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Exempt from VAT", the Invoiced item VAT rate (BT-152) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = 'G'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1020">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = 'G'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'G']/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='G']/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='G']/ram:ActualAmount)*10*10)div 100)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'G']/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='G']/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='G']/ram:ActualAmount)*10*10)div 100)">
+                    <xsl:attribute name="id">BR-G-08</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-G-08]-In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Export outside the EU" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are "Export outside the EU".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="../ram:CalculatedAmount = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="../ram:CalculatedAmount = 0">
+                    <xsl:attribute name="id">BR-G-09</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-G-09]-The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Export outside the EU" shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                    <xsl:attribute name="id">BR-G-10</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-G-10]-A VAT Breakdown (BG-23) with the VAT Category code (BT-118) "Export outside the EU" shall have a VAT exemption reason code (BT-121), meaning "Export outside the EU" or the VAT exemption reason text (BT-120) "Export outside the EU" (or the equivalent standard text in another language).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'G'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1019">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'G'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'])"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'])">
+                    <xsl:attribute name="id">BR-G-03</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-G-03]-An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Export outside the EU" shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-G-06</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-G-06]-In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Export outside the EU" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'G'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1018">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'G'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'])"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'])">
+                    <xsl:attribute name="id">BR-G-04</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-G-04]-An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Export outside the EU" shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-G-07</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-G-07]-In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Export outside the EU" the Document level charge VAT rate (BT-103) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'G'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1017">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'G'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'])"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'])">
+                    <xsl:attribute name="id">BR-G-02</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-G-02]-An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Export outside the EU" shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-G-05</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-G-05]-In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Export outside the EU" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.= 'K'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1016">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.= 'K'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'K']/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='K']/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='K']/ram:ActualAmount)*10*10)div 100)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'K']/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='K']/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='K']/ram:ActualAmount)*10*10)div 100)">
+                    <xsl:attribute name="id">BR-IC-08</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IC-08]-In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are "Intra-community supply".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="../ram:CalculatedAmount = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="../ram:CalculatedAmount = 0">
+                    <xsl:attribute name="id">BR-IC-09</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IC-09]-The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                    <xsl:attribute name="id">BR-IC-10</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IC-10]-A VAT Breakdown (BG-23) with the VAT Category code (BT-118) "Intra-community supply" shall have a VAT exemption reason code (BT-121), meaning "Intra-community supply" or the VAT exemption reason text (BT-120) "Intra-community supply" (or the equivalent standard text in another language).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString) or (../../ram:BillingSpecifiedPeriod/ram:StartDateTime) or (../../ram:BillingSpecifiedPeriod/ram:EndDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString) or (../../ram:BillingSpecifiedPeriod/ram:StartDateTime) or (../../ram:BillingSpecifiedPeriod/ram:EndDateTime)">
+                    <xsl:attribute name="id">BR-IC-11</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IC-11]-In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the Actual delivery date (BT-72) or the Invoicing period (BG-14) shall not be blank.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID">
+                    <xsl:attribute name="id">BR-IC-12</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IC-12]-In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the Deliver to country code (BT-80) shall not be blank.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'K'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1015">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'K'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-IC-03</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IC-03]-An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Intra-community supply" shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-IC-06</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IC-06]-In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Intra-community supply" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'K'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1014">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'K'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-IC-04</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IC-04]-An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Intra-community supply" shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-IC-07</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IC-07]-In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Intra-community supply" the Document level charge VAT rate (BT-103) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'K'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1013">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'K'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-IC-02</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IC-02]-An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Intra-community supply" shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-IC-05</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-IC-05]-In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Intracommunity supply" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'O'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1012">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'O'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'O']/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='O']/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='O']/ram:ActualAmount)*10*10)div 100)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'O']/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='O']/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='O']/ram:ActualAmount)*10*10)div 100)">
+                    <xsl:attribute name="id">BR-O-08</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-08]-In a VAT breakdown (BG-23) where the VAT category code (BT-118) is " Not subject to VAT" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are "Not subject to VAT".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:CalculatedAmount = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:CalculatedAmount = 0">
+                    <xsl:attribute name="id">BR-O-09</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-09]-The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Not subject to VAT" shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:ExemptionReason) or (ram:ExemptionReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:ExemptionReason) or (ram:ExemptionReasonCode)">
+                    <xsl:attribute name="id">BR-O-10</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-10]-A VAT Breakdown (BG-23) with VAT Category code (BT-118) " Not subject to VAT" shall have a VAT exemption reason code (BT-121), meaning " Not subject to VAT" or a VAT exemption reason text (BT-120) " Not subject to VAT" (or the equivalent standard text in another language).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(//ram:ApplicableTradeTax[ram:CategoryCode != 'O'])"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(//ram:ApplicableTradeTax[ram:CategoryCode != 'O'])">
+                    <xsl:attribute name="id">BR-O-11</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-11]-An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain other VAT breakdown groups (BG-23).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(//ram:ApplicableTradeTax[ram:CategoryCode != 'O'])"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(//ram:ApplicableTradeTax[ram:CategoryCode != 'O'])">
+                    <xsl:attribute name="id">BR-O-12</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-12]-An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is not "Not subject to VAT".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(//ram:CategoryTradeTax[ram:CategoryCode != 'O'])"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(//ram:CategoryTradeTax[ram:CategoryCode != 'O'])">
+                    <xsl:attribute name="id">BR-O-13</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-13]-An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain Document level allowances (BG-20) where Document level allowance VAT category code (BT-95) is not "Not subject to VAT".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(//ram:CategoryTradeTax[ram:CategoryCode != 'O'])"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(//ram:CategoryTradeTax[ram:CategoryCode != 'O'])">
+                    <xsl:attribute name="id">BR-O-14</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-14]-An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain Document level charges (BG-21) where Document level charge VAT category code (BT-102) is not "Not subject to VAT".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'O'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1011">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'O'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'])"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'])">
+                    <xsl:attribute name="id">BR-O-03</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-03]-An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Not subject to VAT" shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-48).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RateApplicablePercent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RateApplicablePercent)">
+                    <xsl:attribute name="id">BR-O-06</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-06]-A Document level allowance (BG-20) where VAT category code (BT-95) is "Not subject to VAT" shall not contain a Document level allowance VAT rate (BT-96).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'O'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1010">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'O'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'])"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'])">
+                    <xsl:attribute name="id">BR-O-04</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-04]-An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Not subject to VAT" shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-48).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RateApplicablePercent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RateApplicablePercent)">
+                    <xsl:attribute name="id">BR-O-07</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-07]-A Document level charge (BG-21) where the VAT category code (BT-102) is "Not subject to VAT" shall not contain a Document level charge VAT rate (BT-103).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'O'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1009">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'O'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'])"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA'])">
+                    <xsl:attribute name="id">BR-O-02</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-02]-An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Not subject to VAT" shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-48).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RateApplicablePercent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RateApplicablePercent)">
+                    <xsl:attribute name="id">BR-O-05</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-O-05]-An Invoice line (BG-25) where the VAT category code (BT-151) is "Not subject to VAT" shall not contain an Invoiced item VAT rate (BT-152).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.='S']" mode="M10" priority="1008">
+        <svrl:fired-rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.='S']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="every $rate in ../ram:RateApplicablePercent/xs:decimal(.) satisfies (../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'S' and ram:ApplicableTradeTax/xs:decimal(ram:RateApplicablePercent) =$rate]/ram:SpecifiedTradeSettlementLineMonetarySummation/xs:decimal(ram:LineTotalAmount)) * 10 * 10) div 100 + round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='S' and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate]/xs:decimal(ram:ActualAmount)) * 10 * 10) div 100 - round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='S' and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate]/xs:decimal(ram:ActualAmount)) * 10 * 10) div 100))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="every $rate in ../ram:RateApplicablePercent/xs:decimal(.) satisfies (../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'S' and ram:ApplicableTradeTax/xs:decimal(ram:RateApplicablePercent) =$rate]/ram:SpecifiedTradeSettlementLineMonetarySummation/xs:decimal(ram:LineTotalAmount)) * 10 * 10) div 100 + round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='S' and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate]/xs:decimal(ram:ActualAmount)) * 10 * 10) div 100 - round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='S' and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate]/xs:decimal(ram:ActualAmount)) * 10 * 10) div 100))">
+                    <xsl:attribute name="id">BR-S-08</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-S-08]-For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "Standard rated", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is "Standard rated" and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="abs(xs:decimal(../ram:CalculatedAmount)) = round(abs(xs:decimal(../ram:BasisAmount)) * ../ram:RateApplicablePercent) div 100 +0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="abs(xs:decimal(../ram:CalculatedAmount)) = round(abs(xs:decimal(../ram:BasisAmount)) * ../ram:RateApplicablePercent) div 100 +0">
+                    <xsl:attribute name="id">BR-S-09</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-S-09]-The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Standard rated" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)">
+                    <xsl:attribute name="id">BR-S-10</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-S-10]-A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Standard rate" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'S'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1007">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'S'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-S-02</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-S-02]-An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Standard rated" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent > 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent > 0">
+                    <xsl:attribute name="id">BR-S-05</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-S-05]-In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Standard rated" the Invoiced item VAT rate (BT-152) shall be greater than zero.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'S'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1006">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'S'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-S-03</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-S-03]-An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Standard rated" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent > 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent > 0">
+                    <xsl:attribute name="id">BR-S-06</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-S-06]-In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Standard rated" the Document level allowance VAT rate (BT-96) shall be greater than zero.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'S'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1005">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'S'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-S-04</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-S-04]-An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Standard rated" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent > 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent > 0">
+                    <xsl:attribute name="id">BR-S-07</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-S-07]-In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Standard rated" the Document level charge VAT rate (BT-103) shall be greater than zero.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = 'Z']" mode="M10" priority="1004">
+        <svrl:fired-rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = 'Z']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'Z']/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='Z']/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='Z']/ram:ActualAmount)*10*10)div 100)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'Z']/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='Z']/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='Z']/ram:ActualAmount)*10*10)div 100)">
+                    <xsl:attribute name="id">BR-Z-08</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-Z-08]-In a VAT breakdown (BG-23) where VAT category code (BT-118) is "Zero rated" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amount (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are "Zero rated".</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="../ram:CalculatedAmount = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="../ram:CalculatedAmount = 0">
+                    <xsl:attribute name="id">BR-Z-09</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-Z-09]-The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Zero rated" shall equal 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)">
+                    <xsl:attribute name="id">BR-Z-10</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-Z-10]-A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Zero rated" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'Z'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1003">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=false()]/ram:CategoryTradeTax[ram:CategoryCode = 'Z'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-Z-03</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-Z-03]-An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Zero rated" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-Z-06</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-Z-06]-In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Zero rated" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'Z'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1002">
+        <svrl:fired-rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:CategoryTradeTax[ram:CategoryCode = 'Z'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-Z-04</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-Z-04]-An Invoice that contains a Document level charge where the Document level charge VAT category code (BT-102) is "Zero rated" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-Z-07</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-Z-07]-In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Zero rated" the Document level charge VAT rate (BT-103) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'Z'][upper-case(ram:TypeCode) = 'VAT']" mode="M10" priority="1001">
+        <svrl:fired-rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = 'Z'][upper-case(ram:TypeCode) = 'VAT']"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = ('VA', 'FC')] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = 'VA']">
+                    <xsl:attribute name="id">BR-Z-02</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-Z-02]-An Invoice that contains an Invoice line where the Invoiced item VAT category code (BT-151) is "Zero rated" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:RateApplicablePercent = 0"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:RateApplicablePercent = 0">
+                    <xsl:attribute name="id">BR-Z-05</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-Z-05]-In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Zero rated" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax" mode="M10" priority="1000">
+        <svrl:fired-rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:BasisAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:BasisAmount)">
+                    <xsl:attribute name="id">BR-45</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-45]-Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:CalculatedAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:CalculatedAmount)">
+                    <xsl:attribute name="id">BR-46</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-46]-Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(.[upper-case(ram:TypeCode) = 'VAT']/ram:CategoryCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(.[upper-case(ram:TypeCode) = 'VAT']/ram:CategoryCode)">
+                    <xsl:attribute name="id">BR-47</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-47]-Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118).</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(.[upper-case(ram:TypeCode) = 'VAT']/ram:RateApplicablePercent) or (.[upper-case(ram:TypeCode) = 'VAT']/ram:CategoryCode = 'O')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(.[upper-case(ram:TypeCode) = 'VAT']/ram:RateApplicablePercent) or (.[upper-case(ram:TypeCode) = 'VAT']/ram:CategoryCode = 'O')">
+                    <xsl:attribute name="id">BR-48</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-48]-Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((//ram:TaxPointDate) and not(//ram:DueDateTypeCode)) or (not (//ram:TaxPointDate) and (//ram:DueDateTypeCode)) or (not (//ram:TaxPointDate) and not (//ram:DueDateTypeCode))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((//ram:TaxPointDate) and not(//ram:DueDateTypeCode)) or (not (//ram:TaxPointDate) and (//ram:DueDateTypeCode)) or (not (//ram:TaxPointDate) and not (//ram:DueDateTypeCode))">
+                    <xsl:attribute name="id">BR-CO-03</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-03]-Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="ram:CalculatedAmount = round(ram:BasisAmount * .[upper-case(ram:TypeCode) = 'VAT']/ram:RateApplicablePercent) div 100 +0 or not (.[upper-case(ram:TypeCode) = 'VAT']/ram:RateApplicablePercent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="ram:CalculatedAmount = round(ram:BasisAmount * .[upper-case(ram:TypeCode) = 'VAT']/ram:RateApplicablePercent) div 100 +0 or not (.[upper-case(ram:TypeCode) = 'VAT']/ram:RateApplicablePercent)">
+                    <xsl:attribute name="id">BR-CO-17</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CO-17]-VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:BasisAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:BasisAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-19</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-19]-The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="string-length(substring-after(ram:CalculatedAmount,'.'))&lt;=2"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="string-length(substring-after(ram:CalculatedAmount,'.'))&lt;=2">
+                    <xsl:attribute name="id">BR-DEC-20</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-DEC-20]-The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <xsl:template match="text()" mode="M10" priority="-1"/>
+    <xsl:template match="@*|node()" mode="M10" priority="-2">
+        <xsl:apply-templates mode="M10" select="*"/>
+    </xsl:template>
+    <!--PATTERN EN16931-CII-Syntax-->
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext" mode="M11" priority="1025">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTransactionID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTransactionID)">
+                    <xsl:attribute name="id">CII-SR-001</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-001] - SpecifiedTransactionID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TestIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TestIndicator)">
+                    <xsl:attribute name="id">CII-SR-002</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-002] - TestIndicator should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(count(ram:BusinessProcessSpecifiedDocumentContextParameter) &lt;= 1)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(count(ram:BusinessProcessSpecifiedDocumentContextParameter) &lt;= 1)">
+                    <xsl:attribute name="id">CII-SR-003</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-003] - BusinessProcessSpecifiedDocumentContextParameter should exist maximum once</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BIMSpecifiedDocumentContextParameter)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BIMSpecifiedDocumentContextParameter)">
+                    <xsl:attribute name="id">CII-SR-006</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-006] - BIMSpecifiedDocumentContextParameter should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ScenarioSpecifiedDocumentContextParameter)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ScenarioSpecifiedDocumentContextParameter)">
+                    <xsl:attribute name="id">CII-SR-007</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-007] - ScenarioSpecifiedDocumentContextParameter should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicationSpecifiedDocumentContextParameter)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicationSpecifiedDocumentContextParameter)">
+                    <xsl:attribute name="id">CII-SR-008</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-008] - ApplicationSpecifiedDocumentContextParameter should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="count(ram:GuidelineSpecifiedDocumentContextParameter) = 1"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="count(ram:GuidelineSpecifiedDocumentContextParameter) = 1">
+                    <xsl:attribute name="id">CII-SR-009</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-009] - GuidelineSpecifiedDocumentContextParameter must exist exactly once</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="count(ram:GuidelineSpecifiedDocumentContextParameter/ram:ID) = 1"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="count(ram:GuidelineSpecifiedDocumentContextParameter/ram:ID) = 1">
+                    <xsl:attribute name="id">CII-SR-010</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-010] - ID must exist exactly once</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SubsetSpecifiedDocumentContextParameter)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SubsetSpecifiedDocumentContextParameter)">
+                    <xsl:attribute name="id">CII-SR-011</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-011] - SubsetSpecifiedDocumentContextParameter should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:MessageStandardSpecifiedDocumentContextParameter)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:MessageStandardSpecifiedDocumentContextParameter)">
+                    <xsl:attribute name="id">CII-SR-012</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-012] - MessageStandardSpecifiedDocumentContextParameter should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument" mode="M11" priority="1024">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:Name)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:Name)">
+                    <xsl:attribute name="id">CII-SR-013</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-013] - Name should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="count(ram:TypeCode) = 1"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="count(ram:TypeCode) = 1">
+                    <xsl:attribute name="id">CII-SR-014</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-014] - TypeCode must exist exactly once</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IssueDateTime/udt:DateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IssueDateTime/udt:DateTime)">
+                    <xsl:attribute name="id">CII-SR-015</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-015] - DateTime should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CopyIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CopyIndicator)">
+                    <xsl:attribute name="id">CII-SR-016</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-016] - CopyIndicator should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:Purpose)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:Purpose)">
+                    <xsl:attribute name="id">CII-SR-017</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-017] - Purpose should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ControlRequirementIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ControlRequirementIndicator)">
+                    <xsl:attribute name="id">CII-SR-018</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-018] - ControlRequirementIndicator should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:LanguageID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:LanguageID)">
+                    <xsl:attribute name="id">CII-SR-019</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-019] - LanguageID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PurposeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PurposeCode)">
+                    <xsl:attribute name="id">CII-SR-020</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-020] - PurposeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RevisionDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RevisionDateTime)">
+                    <xsl:attribute name="id">CII-SR-021</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-021] - RevisionDateTime should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:VersionID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:VersionID)">
+                    <xsl:attribute name="id">CII-SR-022</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-022] - VersionID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GlobalID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GlobalID)">
+                    <xsl:attribute name="id">CII-SR-023</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-023] - GlobalID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RevisionID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RevisionID)">
+                    <xsl:attribute name="id">CII-SR-024</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-024] - RevisionID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PreviousRevisionID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PreviousRevisionID)">
+                    <xsl:attribute name="id">CII-SR-025</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-025] - PreviousRevisionID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CategoryCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CategoryCode)">
+                    <xsl:attribute name="id">CII-SR-026</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-026] - CategoryCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IncludedNote/ram:Subject)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IncludedNote/ram:Subject)">
+                    <xsl:attribute name="id">CII-SR-027</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-027] - Subject should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IncludedNote/ram:ContentCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IncludedNote/ram:ContentCode)">
+                    <xsl:attribute name="id">CII-SR-028</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-028] - ContentCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IncludedNote/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IncludedNote/ram:ID)">
+                    <xsl:attribute name="id">CII-SR-032</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-032] - ID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:EffectiveSpecifiedPeriod)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:EffectiveSpecifiedPeriod)">
+                    <xsl:attribute name="id">CII-SR-033</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-033] - EffectiveSpecifiedPeriod should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IssuerTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IssuerTradeParty)">
+                    <xsl:attribute name="id">CII-SR-034</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-034] - IssuerTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote" mode="M11" priority="1023">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="count(ram:Content) &lt;= 1"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="count(ram:Content) &lt;= 1">
+                    <xsl:attribute name="id">CII-SR-030</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-030] - Content should exist maximum once</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem" mode="M11" priority="1022">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DescriptionCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DescriptionCode)">
+                    <xsl:attribute name="id">CII-SR-035</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-035] - DescriptionCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ParentLineID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ParentLineID)">
+                    <xsl:attribute name="id">CII-SR-036</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-036] - ParentLineID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:LineStatusCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:LineStatusCode)">
+                    <xsl:attribute name="id">CII-SR-037</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-037] - LineStatusCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:LineStatusReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:LineStatusReasonCode)">
+                    <xsl:attribute name="id">CII-SR-038</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-038] - LineStatusReasonCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="count(ram:IncludedNote) &lt;= 1"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="count(ram:IncludedNote) &lt;= 1">
+                    <xsl:attribute name="id">CII-SR-039</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-039] - IncludedNote should exist maximum once</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="count(ram:IncludedNote/ram:Content) &lt;= 1"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="count(ram:IncludedNote/ram:Content) &lt;= 1">
+                    <xsl:attribute name="id">CII-SR-040</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-040] - Content should exist maximum once</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IncludedNote/ram:SubjectCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IncludedNote/ram:SubjectCode)">
+                    <xsl:attribute name="id">CII-SR-041</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-041] - SubjectCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IncludedNote/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IncludedNote/ram:ID)">
+                    <xsl:attribute name="id">CII-SR-042</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-042] - ID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IncludedNote/ram:Subject)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IncludedNote/ram:Subject)">
+                    <xsl:attribute name="id">CII-SR-043</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-043] - CategoryCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IncludedNote/ram:ContentCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IncludedNote/ram:ContentCode)">
+                    <xsl:attribute name="id">CII-SR-044</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-044] - Subject should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IncludedSubordinateTradeLineItem)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IncludedSubordinateTradeLineItem)">
+                    <xsl:attribute name="id">CII-SR-221</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-221] - IncludedSubordinateTradeLineItem should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct" mode="M11" priority="1021">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ID)">
+                    <xsl:attribute name="id">CII-SR-045</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-045] - ID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GlobalID) or (ram:GlobalID/@schemeID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GlobalID) or (ram:GlobalID/@schemeID)">
+                    <xsl:attribute name="id">CII-SR-046</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-046] - schemeID must be present if GlobalID is present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ManufacturerAssignedID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ManufacturerAssignedID)">
+                    <xsl:attribute name="id">CII-SR-048</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-048] - ManufacturerAssignedID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TradeName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TradeName)">
+                    <xsl:attribute name="id">CII-SR-049</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-049] - TradeName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-050</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-050] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetWeightMeasure)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetWeightMeasure)">
+                    <xsl:attribute name="id">CII-SR-051</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-051] - NetWeightMeasure should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossWeightMeasure)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossWeightMeasure)">
+                    <xsl:attribute name="id">CII-SR-052</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-052] - GrossWeightMeasure should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ProductGroupID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ProductGroupID)">
+                    <xsl:attribute name="id">CII-SR-053</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-053] - ProductGroupID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:EndItemTypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:EndItemTypeCode)">
+                    <xsl:attribute name="id">CII-SR-054</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-054] - EndItemTypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:EndItemName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:EndItemName)">
+                    <xsl:attribute name="id">CII-SR-055</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-055] - EndItemName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:AreaDensityMeasure)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:AreaDensityMeasure)">
+                    <xsl:attribute name="id">CII-SR-056</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-056] - AreaDensityMeasure should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:UseDescription)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:UseDescription)">
+                    <xsl:attribute name="id">CII-SR-057</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-057] - UseDescription should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BrandName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BrandName)">
+                    <xsl:attribute name="id">CII-SR-058</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-058] - BrandName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SubBrandName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SubBrandName)">
+                    <xsl:attribute name="id">CII-SR-059</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-059] - SubBrandName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DrainedNetWeightMeasure)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DrainedNetWeightMeasure)">
+                    <xsl:attribute name="id">CII-SR-060</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-060] - DrainedNetWeightMeasure should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:VariableMeasureIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:VariableMeasureIndicator)">
+                    <xsl:attribute name="id">CII-SR-061</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-061] - VariableMeasureIndicator should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ColourCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ColourCode)">
+                    <xsl:attribute name="id">CII-SR-062</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-062] - ColourCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ColourDescription)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ColourDescription)">
+                    <xsl:attribute name="id">CII-SR-063</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-063] - ColourDescription should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:Designation)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:Designation)">
+                    <xsl:attribute name="id">CII-SR-064</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-064] - Designation should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:FormattedCancellationAnnouncedLaunchDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:FormattedCancellationAnnouncedLaunchDateTime)">
+                    <xsl:attribute name="id">CII-SR-065</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-065] - FormattedCancellationAnnouncedLaunchDateTime should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:FormattedLatestProductDataChangeDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:FormattedLatestProductDataChangeDateTime)">
+                    <xsl:attribute name="id">CII-SR-066</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-066] - FormattedLatestProductDataChangeDateTime should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableProductCharacteristic/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableProductCharacteristic/ram:ID)">
+                    <xsl:attribute name="id">CII-SR-067</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-067] - ID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableProductCharacteristic/ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableProductCharacteristic/ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-068</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-068] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableProductCharacteristic/ram:ValueMeasure)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableProductCharacteristic/ram:ValueMeasure)">
+                    <xsl:attribute name="id">CII-SR-070</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-070] - ValueMeasure should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableProductCharacteristic/ram:MeasurementMethodCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableProductCharacteristic/ram:MeasurementMethodCode)">
+                    <xsl:attribute name="id">CII-SR-071</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-071] - MeasurementMethodCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableProductCharacteristic/ram:ValueCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableProductCharacteristic/ram:ValueCode)">
+                    <xsl:attribute name="id">CII-SR-073</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-073] - ValueCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableProductCharacteristic/ram:ValueDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableProductCharacteristic/ram:ValueDateTime)">
+                    <xsl:attribute name="id">CII-SR-074</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-074] - ValueDateTime should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableProductCharacteristic/ram:ValueIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableProductCharacteristic/ram:ValueIndicator)">
+                    <xsl:attribute name="id">CII-SR-075</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-075] - ValueIndicator should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableProductCharacteristic/ram:ContentTypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableProductCharacteristic/ram:ContentTypeCode)">
+                    <xsl:attribute name="id">CII-SR-076</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-076] - ContentTypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableProductCharacteristic/ram:ValueSpecifiedBinaryFile)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableProductCharacteristic/ram:ValueSpecifiedBinaryFile)">
+                    <xsl:attribute name="id">CII-SR-077</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-077] - ValueSpecifiedBinaryFile should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableProductCharacteristic/ram:ApplicableProductCharacteristicCondition)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableProductCharacteristic/ram:ApplicableProductCharacteristicCondition)">
+                    <xsl:attribute name="id">CII-SR-078</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-078] - ApplicableProductCharacteristicCondition should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableProductCharacteristic/ram:ApplicableReferencedStandard)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableProductCharacteristic/ram:ApplicableReferencedStandard)">
+                    <xsl:attribute name="id">CII-SR-079</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-079] - ApplicableReferencedStandard should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableMaterialGoodsCharacteristic)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableMaterialGoodsCharacteristic)">
+                    <xsl:attribute name="id">CII-SR-080</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-080] - ApplicableMaterialGoodsCharacteristic should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DesignatedProductClassification/ram:SystemID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DesignatedProductClassification/ram:SystemID)">
+                    <xsl:attribute name="id">CII-SR-081</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-081] - SystemID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DesignatedProductClassification/ram:SystemName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DesignatedProductClassification/ram:SystemName)">
+                    <xsl:attribute name="id">CII-SR-082</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-082] - SystemName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DesignatedProductClassification/ram:ClassName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DesignatedProductClassification/ram:ClassName)">
+                    <xsl:attribute name="id">CII-SR-083</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-083] - ClassName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DesignatedProductClassification/ram:SubClassCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DesignatedProductClassification/ram:SubClassCode)">
+                    <xsl:attribute name="id">CII-SR-084</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-084] - SubClassCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DesignatedProductClassification/ram:ClassProductCharacteristic)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DesignatedProductClassification/ram:ClassProductCharacteristic)">
+                    <xsl:attribute name="id">CII-SR-085</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-085] - ClassProductCharacteristic should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DesignatedProductClassification/ram:ApplicableReferencedStandard)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DesignatedProductClassification/ram:ApplicableReferencedStandard)">
+                    <xsl:attribute name="id">CII-SR-086</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-086] - ApplicableReferencedStandard should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IndividualTradeProductInstance)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IndividualTradeProductInstance)">
+                    <xsl:attribute name="id">CII-SR-087</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-087] - IndividualTradeProductInstance should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CertificationEvidenceReferenceReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CertificationEvidenceReferenceReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-088</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-088] - CertificationEvidenceReferenceReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:InspectionReferenceReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:InspectionReferenceReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-089</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-089] - InspectionReferenceReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not (ram:OriginTradeCountry) or (count(ram:OriginTradeCountry/ram:ID) =1)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not (ram:OriginTradeCountry) or (count(ram:OriginTradeCountry/ram:ID) =1)">
+                    <xsl:attribute name="id">CII-SR-090</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-090] - ID should exist maximum once.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:OriginTradeCountry/ram:Name)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:OriginTradeCountry/ram:Name)">
+                    <xsl:attribute name="id">CII-SR-091</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-091] - Name should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:OriginTradeCountry/ram:SubordinateTradeCountrySubDivision)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:OriginTradeCountry/ram:SubordinateTradeCountrySubDivision)">
+                    <xsl:attribute name="id">CII-SR-092</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-092] - SubordinateTradeCountrySubDivision should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:LinearSpatialDimension)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:LinearSpatialDimension)">
+                    <xsl:attribute name="id">CII-SR-093</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-093] - LinearSpatialDimension should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:MinimumLinearSpatialDimension)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:MinimumLinearSpatialDimension)">
+                    <xsl:attribute name="id">CII-SR-094</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-094] - MinimumLinearSpatialDimension should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:MaximumLinearSpatialDimension)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:MaximumLinearSpatialDimension)">
+                    <xsl:attribute name="id">CII-SR-095</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-095] - MaximumLinearSpatialDimension should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ManufacturerTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ManufacturerTradeParty)">
+                    <xsl:attribute name="id">CII-SR-096</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-096] - ManufacturerTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PresentationSpecifiedBinaryFile)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PresentationSpecifiedBinaryFile)">
+                    <xsl:attribute name="id">CII-SR-097</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-097] - PresentationSpecifiedBinaryFile should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:MSDSReferenceReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:MSDSReferenceReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-098</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-098] - MSDSReferenceReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:AdditionalReferenceReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:AdditionalReferenceReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-099</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-099] - AdditionalReferenceReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:LegalRightsOwnerTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:LegalRightsOwnerTradeParty)">
+                    <xsl:attribute name="id">CII-SR-100</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-100] - LegalRightsOwnerTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BrandOwnerTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BrandOwnerTradeParty)">
+                    <xsl:attribute name="id">CII-SR-101</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-101] - BrandOwnerTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IncludedReferencedProduct)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IncludedReferencedProduct)">
+                    <xsl:attribute name="id">CII-SR-102</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-102] - IncludedReferencedProduct should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:InformationNote)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:InformationNote)">
+                    <xsl:attribute name="id">CII-SR-103</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-103] - InformationNote should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic" mode="M11" priority="1020">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(count(ram:Description) =1)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(count(ram:Description) =1)">
+                    <xsl:attribute name="id">CII-SR-069</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-069] - Description should exist maximum once.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(count(ram:Value) =1)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(count(ram:Value) =1)">
+                    <xsl:attribute name="id">CII-SR-072</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-072] - Value should exist maximum once.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement" mode="M11" priority="1019">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerReference)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerReference)">
+                    <xsl:attribute name="id">CII-SR-104</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-104] - BuyerReference should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerRequisitionerTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerRequisitionerTradeParty)">
+                    <xsl:attribute name="id">CII-SR-105</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-105] - BuyerRequisitionerTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableTradeDeliveryTerms)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableTradeDeliveryTerms)">
+                    <xsl:attribute name="id">CII-SR-106</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-106] - ApplicableTradeDeliveryTerms should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerOrderReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerOrderReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-107</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-107] - SellerOrderReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID)">
+                    <xsl:attribute name="id">CII-SR-108</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-108] - IssuerAssignedID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:QuotationReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:QuotationReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-109</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-109] - QuotationReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ContractReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ContractReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-110</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-110] - ContractReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DemandForecastReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DemandForecastReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-111</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-111] - DemandForecastReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PromotionalDealReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PromotionalDealReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-112</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-112] - PromotionalDealReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:AdditionalReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:AdditionalReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-113</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-113] - AdditionalReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-114</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-114] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:MinimumQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:MinimumQuantity)">
+                    <xsl:attribute name="id">CII-SR-115</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-115] - MinimumQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:MaximumQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:MaximumQuantity)">
+                    <xsl:attribute name="id">CII-SR-116</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-116] - MaximumQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:ChangeReason)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:ChangeReason)">
+                    <xsl:attribute name="id">CII-SR-117</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-117] - ChangeReason should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:OrderUnitConversionFactorNumeric)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:OrderUnitConversionFactorNumeric)">
+                    <xsl:attribute name="id">CII-SR-118</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-118] - OrderUnitConversionFactorNumeric should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="count(ram:NetPriceProductTradePrice/ram:ChargeAmount) = 1"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="count(ram:NetPriceProductTradePrice/ram:ChargeAmount) = 1">
+                    <xsl:attribute name="id">CII-SR-439</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-439] - ChargeAmount should exist maximum once</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ChargeIndicator[udt:Indicator=false()] and ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualAmount) or (not (ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ChargeIndicator) and not (ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualAmount))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ChargeIndicator[udt:Indicator=false()] and ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualAmount) or (not (ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ChargeIndicator) and not (ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualAmount))">
+                    <xsl:attribute name="id">CII-SR-119</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-119] - Only allowances on price a price should be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ID)">
+                    <xsl:attribute name="id">CII-SR-120</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-120] - ID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:SequenceNumeric)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:SequenceNumeric)">
+                    <xsl:attribute name="id">CII-SR-121</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-121] - SequenceNumeric should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CalculationPercent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CalculationPercent)">
+                    <xsl:attribute name="id">CII-SR-122</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-122] - CalculationPercent should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:BasisAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:BasisAmount)">
+                    <xsl:attribute name="id">CII-SR-123</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-123] - BasisAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:BasisQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:BasisQuantity)">
+                    <xsl:attribute name="id">CII-SR-124</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-124] - BasisQuantityshould not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:PrepaidIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:PrepaidIndicator)">
+                    <xsl:attribute name="id">CII-SR-125</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-125] - PrepaidIndicator should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:UnitBasisAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:UnitBasisAmount)">
+                    <xsl:attribute name="id">CII-SR-126</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-126] - UnitBasisAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ReasonCode)">
+                    <xsl:attribute name="id">CII-SR-127</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-127] - ReasonCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:Reason)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:Reason)">
+                    <xsl:attribute name="id">CII-SR-128</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-128] - Reason should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-129</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-129] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CategoryTradeTax)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CategoryTradeTax)">
+                    <xsl:attribute name="id">CII-SR-130</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-130] - CategoryTradeTax should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange)">
+                    <xsl:attribute name="id">CII-SR-131</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-131] - ActualTradeCurrencyExchange should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="count(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualAmount) &lt;= 1"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="count(ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualAmount) &lt;= 1">
+                    <xsl:attribute name="id">CII-SR-440</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-440] - ActualAmount should exist maximum once</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:IncludedTradeTax)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:IncludedTradeTax)">
+                    <xsl:attribute name="id">CII-SR-445</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-445] - IncludedTradeTax should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:ValiditySpecifiedPeriod)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:ValiditySpecifiedPeriod)">
+                    <xsl:attribute name="id">CII-SR-132</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-132] - ValiditySpecifiedPeriod should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:DeliveryTradeLocation)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:DeliveryTradeLocation)">
+                    <xsl:attribute name="id">CII-SR-133</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-133] - DeliveryTradeLocation should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:TradeComparisonReferencePrice)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:TradeComparisonReferencePrice)">
+                    <xsl:attribute name="id">CII-SR-134</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-134] - TradeComparisonReferencePrice should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossPriceProductTradePrice/ram:AssociatedReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossPriceProductTradePrice/ram:AssociatedReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-135</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-135] - AssociatedReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetPriceProductTradePrice/ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetPriceProductTradePrice/ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-136</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-136] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetPriceProductTradePrice/ram:MinimumQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetPriceProductTradePrice/ram:MinimumQuantity)">
+                    <xsl:attribute name="id">CII-SR-138</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-138] - MinimumQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetPriceProductTradePrice/ram:MaximumQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetPriceProductTradePrice/ram:MaximumQuantity)">
+                    <xsl:attribute name="id">CII-SR-139</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-139] - MaximumQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetPriceProductTradePrice/ram:ChangeReason)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetPriceProductTradePrice/ram:ChangeReason)">
+                    <xsl:attribute name="id">CII-SR-140</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-140] - ChangeReason should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetPriceProductTradePrice/ram:OrderUnitConversionFactorNumeric)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetPriceProductTradePrice/ram:OrderUnitConversionFactorNumeric)">
+                    <xsl:attribute name="id">CII-SR-141</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-141] - OrderUnitConversionFactorNumeric should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetPriceProductTradePrice/ram:AppliedTradeAllowanceCharge)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetPriceProductTradePrice/ram:AppliedTradeAllowanceCharge)">
+                    <xsl:attribute name="id">CII-SR-142</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-142] - AppliedTradeAllowanceCharge should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetPriceProductTradePrice/ram:IncludedTradeTax)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetPriceProductTradePrice/ram:IncludedTradeTax)">
+                    <xsl:attribute name="id">CII-SR-446</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-446] - IncludedTradeTax should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetPriceProductTradePrice/ram:ValiditySpecifiedPeriod)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetPriceProductTradePrice/ram:ValiditySpecifiedPeriod)">
+                    <xsl:attribute name="id">CII-SR-143</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-143] - ValiditySpecifiedPeriod should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetPriceProductTradePrice/ram:DeliveryTradeLocation)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetPriceProductTradePrice/ram:DeliveryTradeLocation)">
+                    <xsl:attribute name="id">CII-SR-144</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-144] - DeliveryTradeLocation should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetPriceProductTradePrice/ram:TradeComparisonReferencePrice)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetPriceProductTradePrice/ram:TradeComparisonReferencePrice)">
+                    <xsl:attribute name="id">CII-SR-145</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-145] - TradeComparisonReferencePrice should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetPriceProductTradePrice/ram:AssociatedReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetPriceProductTradePrice/ram:AssociatedReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-146</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-146] - AssociatedReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="count(ram:NetPriceProductTradePrice/ram:ChargeAmount) &lt;= 1"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="count(ram:NetPriceProductTradePrice/ram:ChargeAmount) &lt;= 1">
+                    <xsl:attribute name="id">CII-SR-441</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-441] - ChargeAmount should exist maximum once</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RequisitionerReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RequisitionerReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-147</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-147] - RequisitionerReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ItemSellerTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ItemSellerTradeParty)">
+                    <xsl:attribute name="id">CII-SR-148</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-148] - ItemSellerTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ItemBuyerTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ItemBuyerTradeParty)">
+                    <xsl:attribute name="id">CII-SR-149</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-149] - ItemBuyerTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IncludedSpecifiedMarketplace)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IncludedSpecifiedMarketplace)">
+                    <xsl:attribute name="id">CII-SR-150</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-150] - IncludedSpecifiedMarketplace should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:UltimateCustomerOrderReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:UltimateCustomerOrderReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-447</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-447] - UltimateCustomerOrderReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery" mode="M11" priority="1018">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RequestedQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RequestedQuantity)">
+                    <xsl:attribute name="id">CII-SR-151</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-151] - RequestedQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ReceivedQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ReceivedQuantity)">
+                    <xsl:attribute name="id">CII-SR-152</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-152] - ReceivedQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ChargeFreeQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ChargeFreeQuantity)">
+                    <xsl:attribute name="id">CII-SR-153</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-153] - ChargeFreeQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PackageQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PackageQuantity)">
+                    <xsl:attribute name="id">CII-SR-154</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-154] - PackageQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ProductUnitQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ProductUnitQuantity)">
+                    <xsl:attribute name="id">CII-SR-155</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-155] - ProductUnitQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PerPackageUnitQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PerPackageUnitQuantity)">
+                    <xsl:attribute name="id">CII-SR-156</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-156] - PerPackageUnitQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetWeightMeasure)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetWeightMeasure)">
+                    <xsl:attribute name="id">CII-SR-157</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-157] - NetWeightMeasure should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossWeightMeasure)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossWeightMeasure)">
+                    <xsl:attribute name="id">CII-SR-158</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-158] - GrossWeightMeasure should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TheoreticalWeightMeasure)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TheoreticalWeightMeasure)">
+                    <xsl:attribute name="id">CII-SR-159</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-159] - TheoreticalWeightMeasure should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DespatchedQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DespatchedQuantity)">
+                    <xsl:attribute name="id">CII-SR-160</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-160] - DespatchedQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedDeliveryAdjustment)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedDeliveryAdjustment)">
+                    <xsl:attribute name="id">CII-SR-161</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-161] - SpecifiedDeliveryAdjustment should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IncludedSupplyChainPackaging)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IncludedSupplyChainPackaging)">
+                    <xsl:attribute name="id">CII-SR-162</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-162] - IncludedSupplyChainPackaging should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RelatedSupplyChainConsignment)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RelatedSupplyChainConsignment)">
+                    <xsl:attribute name="id">CII-SR-163</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-163] - RelatedSupplyChainConsignment should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ShipToTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ShipToTradeParty)">
+                    <xsl:attribute name="id">CII-SR-164</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-164] - ShipToTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:UltimateShipToTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:UltimateShipToTradeParty)">
+                    <xsl:attribute name="id">CII-SR-165</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-165] - UltimateShipToTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ShipFromTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ShipFromTradeParty)">
+                    <xsl:attribute name="id">CII-SR-166</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-166] - ShipFromTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualDespatchSupplyChainEvent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualDespatchSupplyChainEvent)">
+                    <xsl:attribute name="id">CII-SR-167</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-167] - ActualDespatchSupplyChainEvent should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualPickUpSupplyChainEvent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualPickUpSupplyChainEvent)">
+                    <xsl:attribute name="id">CII-SR-168</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-168] - ActualPickUpSupplyChainEvent should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualReceiptSupplyChainEvent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualReceiptSupplyChainEvent)">
+                    <xsl:attribute name="id">CII-SR-169</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-169] - RequestedDeliverySupplyChainEvent should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualDeliverySupplyChainEvent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualDeliverySupplyChainEvent)">
+                    <xsl:attribute name="id">CII-SR-170</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-170] - ActualDeliverySupplyChainEvent should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RequestedQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RequestedQuantity)">
+                    <xsl:attribute name="id">CII-SR-171</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-171] - ActualReceiptSupplyChainEvent should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:AdditionalReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:AdditionalReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-172</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-172] - AdditionalReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DespatchAdviceReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DespatchAdviceReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-173</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-173] - DespatchAdviceReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ReceivingAdviceReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ReceivingAdviceReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-174</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-174] - ReceivingAdviceReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DeliveryNoteReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DeliveryNoteReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-175</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-175] - DeliveryNoteReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ConsumptionReportReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ConsumptionReportReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-176</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-176] - ConsumptionReportReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PackingListReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PackingListReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-177</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-177] - RequestedQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement" mode="M11" priority="1017">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PaymentReference)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PaymentReference)">
+                    <xsl:attribute name="id">CII-SR-178</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-178] - PaymentReference should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:InvoiceIssuerReference)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:InvoiceIssuerReference)">
+                    <xsl:attribute name="id">CII-SR-179</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-179] - InvoiceIssuerReference should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TotalAdjustmentAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TotalAdjustmentAmount)">
+                    <xsl:attribute name="id">CII-SR-180</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-180] - TotalAdjustmentAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DiscountIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DiscountIndicator)">
+                    <xsl:attribute name="id">CII-SR-181</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-181] - DiscountIndicator should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableTradeTax/ram:CalculatedAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableTradeTax/ram:CalculatedAmount)">
+                    <xsl:attribute name="id">CII-SR-182</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-182] - CalculatedAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator/udt:IndicatorString)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator/udt:IndicatorString)">
+                    <xsl:attribute name="id">CII-SR-183</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-183] - IndicatorString should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:ID)">
+                    <xsl:attribute name="id">CII-SR-184</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-184] - ID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:SequenceNumeric)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:SequenceNumeric)">
+                    <xsl:attribute name="id">CII-SR-185</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-185] - SequenceNumeric should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent/@format)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent/@format)">
+                    <xsl:attribute name="id">CII-SR-186</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-186] - @format should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity)">
+                    <xsl:attribute name="id">CII-SR-187</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-187] - BasisQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:PrepaidIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:PrepaidIndicator)">
+                    <xsl:attribute name="id">CII-SR-188</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-188] - PrepaidIndicator should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:UnitBasisAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:UnitBasisAmount)">
+                    <xsl:attribute name="id">CII-SR-189</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-189] - UnitBasisAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-190</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-190] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax)">
+                    <xsl:attribute name="id">CII-SR-191</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-191] - CategoryTradeTax should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange)">
+                    <xsl:attribute name="id">CII-SR-192</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-192] - ActualTradeCurrencyExchange should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:ID)">
+                    <xsl:attribute name="id">CII-SR-193</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-193] - ID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SubtotalCalculatedTradeTax)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SubtotalCalculatedTradeTax)">
+                    <xsl:attribute name="id">CII-SR-194</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-194] - SubtotalCalculatedTradeTax should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedLogisticsServiceCharge)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedLogisticsServiceCharge)">
+                    <xsl:attribute name="id">CII-SR-195</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-195] - SpecifiedLogisticsServiceCharge should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradePaymentTerms)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradePaymentTerms)">
+                    <xsl:attribute name="id">CII-SR-196</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-196] - SpecifiedTradePaymentTerms should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:ChargeTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:ChargeTotalAmount)">
+                    <xsl:attribute name="id">CII-SR-197</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-197] - ChargeTotalAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:AllowanceTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:AllowanceTotalAmount)">
+                    <xsl:attribute name="id">CII-SR-198</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-198] - AllowanceTotalAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TaxBasisTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TaxBasisTotalAmount)">
+                    <xsl:attribute name="id">CII-SR-199</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-199] - TaxBasisTotalAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TaxTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TaxTotalAmount)">
+                    <xsl:attribute name="id">CII-SR-200</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-200] - TaxTotalAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:GrandTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:GrandTotalAmount)">
+                    <xsl:attribute name="id">CII-SR-201</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-201] - GrandTotalAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:InformationAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:InformationAmount)">
+                    <xsl:attribute name="id">CII-SR-202</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-202] - InformationAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalAllowanceChargeAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalAllowanceChargeAmount)">
+                    <xsl:attribute name="id">CII-SR-203</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-203] - TotalAllowanceChargeAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalRetailValueInformationAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalRetailValueInformationAmount)">
+                    <xsl:attribute name="id">CII-SR-204</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-204] - TotalRetailValueInformationAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:GrossLineTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:GrossLineTotalAmount)">
+                    <xsl:attribute name="id">CII-SR-205</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-205] - GrossLineTotalAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:NetLineTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:NetLineTotalAmount)">
+                    <xsl:attribute name="id">CII-SR-206</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-206] - NetLineTotalAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:NetIncludingTaxesLineTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:NetIncludingTaxesLineTotalAmount)">
+                    <xsl:attribute name="id">CII-SR-207</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-207] - NetIncludingTaxesLineTotalAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:ProductWeightLossInformationAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementLineMonetarySummation/ram:ProductWeightLossInformationAmount)">
+                    <xsl:attribute name="id">CII-SR-208</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-208] - ProductWeightLossInformationAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedFinancialAdjustment)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedFinancialAdjustment)">
+                    <xsl:attribute name="id">CII-SR-209</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-209] - SpecifiedFinancialAdjustment should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:InvoiceReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:InvoiceReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-210</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-210] - InvoiceReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayableSpecifiedTradeAccountingAccount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayableSpecifiedTradeAccountingAccount)">
+                    <xsl:attribute name="id">CII-SR-212</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-212] - PayableSpecifiedTradeAccountingAccount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:SetTriggerCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:SetTriggerCode)">
+                    <xsl:attribute name="id">CII-SR-213</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-213] - SetTriggerCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-214</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-214] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:AmountTypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:AmountTypeCode)">
+                    <xsl:attribute name="id">CII-SR-215</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-215] - AmountTypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:Name)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:Name)">
+                    <xsl:attribute name="id">CII-SR-216</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-216] - Name should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:CostReferenceDimensionPattern)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:CostReferenceDimensionPattern)">
+                    <xsl:attribute name="id">CII-SR-217</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-217] - CostReferenceDimensionPattern should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PurchaseSpecifiedTradeAccountingAccount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PurchaseSpecifiedTradeAccountingAccount)">
+                    <xsl:attribute name="id">CII-SR-218</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-218] - PurchaseSpecifiedTradeAccountingAccount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SalesSpecifiedTradeAccountingAccount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SalesSpecifiedTradeAccountingAccount)">
+                    <xsl:attribute name="id">CII-SR-219</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-219] - SalesSpecifiedTradeAccountingAccount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementFinancialCard)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementFinancialCard)">
+                    <xsl:attribute name="id">CII-SR-220</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-220] - SpecifiedTradeSettlementFinancialCard should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement" mode="M11" priority="1016">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:Reference)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:Reference)">
+                    <xsl:attribute name="id">CII-SR-442</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-442] - Reference should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:RoleCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:RoleCode)">
+                    <xsl:attribute name="id">CII-SR-222</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-222] - RoleCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode)">
+                    <xsl:attribute name="id">CII-SR-223</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-223] - LegalClassificationCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:Name)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:Name)">
+                    <xsl:attribute name="id">CII-SR-224</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-224] - Name should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress)">
+                    <xsl:attribute name="id">CII-SR-225</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-225] - PostalTradeAddress should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration)">
+                    <xsl:attribute name="id">CII-SR-226</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-226] - RoleCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:ID)">
+                    <xsl:attribute name="id">CII-SR-227</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-227] - ID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-228</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-228] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:JobTitle)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:JobTitle)">
+                    <xsl:attribute name="id">CII-SR-229</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-229] - JobTitle should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:Responsibility)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:Responsibility)">
+                    <xsl:attribute name="id">CII-SR-230</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-230] - Responsibility should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonID)">
+                    <xsl:attribute name="id">CII-SR-231</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-231] - PersonID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID)">
+                    <xsl:attribute name="id">CII-SR-232</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-232] - URIID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode)">
+                    <xsl:attribute name="id">CII-SR-233</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-233] - ChannelCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-234</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-234] - DirectTelephoneUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-235</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-235] - MobileTelephoneUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-236</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-236] - FaxUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode)">
+                    <xsl:attribute name="id">CII-SR-237</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-237] - ChannelCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber)">
+                    <xsl:attribute name="id">CII-SR-238</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-238] - CompleteNumber should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-239</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-239] - TelexUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-240</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-240] - VOIPUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-241</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-241] - InstantMessagingUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote)">
+                    <xsl:attribute name="id">CII-SR-242</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-242] - SpecifiedNote should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson)">
+                    <xsl:attribute name="id">CII-SR-243</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-243] - SpecifiedContactPerson should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:URIUniversalCommunication/ram:ChannelCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:URIUniversalCommunication/ram:ChannelCode)">
+                    <xsl:attribute name="id">CII-SR-244</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-244] - ChannelCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber)">
+                    <xsl:attribute name="id">CII-SR-245</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-245] - CompleteNumber should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax)">
+                    <xsl:attribute name="id">CII-SR-246</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-246] - AssociatedRegisteredTax should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:EndPointURIUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:EndPointURIUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-247</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-247] - EndPointURIUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile)">
+                    <xsl:attribute name="id">CII-SR-248</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-248] - LogoAssociatedSpecifiedBinaryFile should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:RoleCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:RoleCode)">
+                    <xsl:attribute name="id">CII-SR-249</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-249] - RoleCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:Description)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:Description)">
+                    <xsl:attribute name="id">CII-SR-250</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-250] - Description should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode)">
+                    <xsl:attribute name="id">CII-SR-251</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-251] - LegalClassificationCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:Name)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:Name)">
+                    <xsl:attribute name="id">CII-SR-252</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-252] - Name should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress)">
+                    <xsl:attribute name="id">CII-SR-254</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-254] - PostalTradeAddress should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration)">
+                    <xsl:attribute name="id">CII-SR-255</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-255] - AuthorizedLegalRegistration should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:ID)">
+                    <xsl:attribute name="id">CII-SR-256</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-256] - ID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-257</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-257] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:JobTitle)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:JobTitle)">
+                    <xsl:attribute name="id">CII-SR-258</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-258] - JobTitle should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:Responsibility)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:Responsibility)">
+                    <xsl:attribute name="id">CII-SR-259</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-259] - Responsibility should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonID)">
+                    <xsl:attribute name="id">CII-SR-260</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-260] - PersonID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID)">
+                    <xsl:attribute name="id">CII-SR-261</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-261] - URIID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode)">
+                    <xsl:attribute name="id">CII-SR-262</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-262] - ChannelCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-263</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-263] - DirectTelephoneUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-264</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-264] - MobileTelephoneUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-265</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-265] - FaxUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode)">
+                    <xsl:attribute name="id">CII-SR-266</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-266] - ChannelCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber)">
+                    <xsl:attribute name="id">CII-SR-267</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-267] - CompleteNumber should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-268</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-268] - TelexUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-269</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-269] - VOIPUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-270</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-270] - InstantMessagingUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote)">
+                    <xsl:attribute name="id">CII-SR-271</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-271] - SpecifiedNote should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson)">
+                    <xsl:attribute name="id">CII-SR-272</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-272] - SpecifiedContactPerson should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:ChannelCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:ChannelCode)">
+                    <xsl:attribute name="id">CII-SR-273</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-273] - ChannelCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber)">
+                    <xsl:attribute name="id">CII-SR-274</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-274] - CompleteNumber should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax)">
+                    <xsl:attribute name="id">CII-SR-275</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-275] - AssociatedRegisteredTax should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:EndPointURIUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:EndPointURIUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-276</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-276] - EndPointURIUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile)">
+                    <xsl:attribute name="id">CII-SR-277</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-277] - LogoAssociatedSpecifiedBinaryFile should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SalesAgentTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SalesAgentTradeParty)">
+                    <xsl:attribute name="id">CII-SR-278</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-278] - SalesAgentTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerRequisitionerTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerRequisitionerTradeParty)">
+                    <xsl:attribute name="id">CII-SR-279</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-279] - BuyerRequisitionerTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerAssignedAccountantTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerAssignedAccountantTradeParty)">
+                    <xsl:attribute name="id">CII-SR-280</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-280] - BuyerAssignedAccountantTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerAssignedAccountantTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerAssignedAccountantTradeParty)">
+                    <xsl:attribute name="id">CII-SR-281</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-281] - SellerAssignedAccountantTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerTaxRepresentativeTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerTaxRepresentativeTradeParty)">
+                    <xsl:attribute name="id">CII-SR-282</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-282] - BuyerTaxRepresentativeTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTaxRepresentativeTradeParty/ram:GlobalID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTaxRepresentativeTradeParty/ram:GlobalID)">
+                    <xsl:attribute name="id">CII-SR-283</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-283] - GlobalID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTaxRepresentativeTradeParty/ram:RoleCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTaxRepresentativeTradeParty/ram:RoleCode)">
+                    <xsl:attribute name="id">CII-SR-284</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-284] - RoleCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTaxRepresentativeTradeParty/ram:Description)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTaxRepresentativeTradeParty/ram:Description)">
+                    <xsl:attribute name="id">CII-SR-285</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-285] - Description should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization)">
+                    <xsl:attribute name="id">CII-SR-286</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-286] - SpecifiedLegalOrganization should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact)">
+                    <xsl:attribute name="id">CII-SR-287</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-287] - DefinedTradeContact should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-288</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-288] - URIUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax)">
+                    <xsl:attribute name="id">CII-SR-289</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-289] - AssociatedRegisteredTax should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTaxRepresentativeTradeParty/ram:EndPointURIUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTaxRepresentativeTradeParty/ram:EndPointURIUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-290</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-290] - EndPointURIUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerTaxRepresentativeTradeParty/ram:LogoAssociatedSpecifiedBinaryFile)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerTaxRepresentativeTradeParty/ram:LogoAssociatedSpecifiedBinaryFile)">
+                    <xsl:attribute name="id">CII-SR-291</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-291] - LogoAssociatedSpecifiedBinaryFile should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ProductEndUserTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ProductEndUserTradeParty)">
+                    <xsl:attribute name="id">CII-SR-292</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-292] - ProductEndUserTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ApplicableTradeDeliveryTerms)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ApplicableTradeDeliveryTerms)">
+                    <xsl:attribute name="id">CII-SR-293</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-293] - ApplicableTradeDeliveryTerms should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerOrderReferencedDocument/ram:LineID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerOrderReferencedDocument/ram:LineID)">
+                    <xsl:attribute name="id">CII-SR-294</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-294] - LineID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerOrderReferencedDocument/ram:LineID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerOrderReferencedDocument/ram:LineID)">
+                    <xsl:attribute name="id">CII-SR-295</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-295] - LineID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:QuotationReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:QuotationReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-296</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-296] - QuotationReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:OrderResponseReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:OrderResponseReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-297</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-297] - OrderResponseReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ContractReferencedDocument/ram:LineID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ContractReferencedDocument/ram:LineID)">
+                    <xsl:attribute name="id">CII-SR-298</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-298] - LineID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DemandForecastReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DemandForecastReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-299</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-299] - DemandForecastReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SupplyInstructionReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SupplyInstructionReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-300</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-300] - SupplyInstructionReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PromotionalDealReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PromotionalDealReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-301</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-301] - PromotionalDealReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PriceListReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PriceListReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-302</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-302] - PriceListReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:AdditionalReferencedDocument/ram:LineID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:AdditionalReferencedDocument/ram:LineID)">
+                    <xsl:attribute name="id">CII-SR-303</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-303] - LineID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RequisitionerReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RequisitionerReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-304</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-304] - RequisitionerReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerAgentTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerAgentTradeParty)">
+                    <xsl:attribute name="id">CII-SR-305</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-305] - BuyerAgentTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PurchaseConditionsReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PurchaseConditionsReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-306</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-306] - PurchaseConditionsReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedProcuringProject/ram:Description)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedProcuringProject/ram:Description)">
+                    <xsl:attribute name="id">CII-SR-307</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-307] - Description should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:UltimateCustomerOrderReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:UltimateCustomerOrderReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-448</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-448] - UltimateCustomerOrderReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(not(ram:BuyerTradeParty/ram:ID) and ram:BuyerTradeParty/ram:GlobalID) or (ram:BuyerTradeParty/ram:ID and not(ram:BuyerTradeParty/ram:GlobalID)) or (not(ram:BuyerTradeParty/ram:ID) and not(ram:BuyerTradeParty/ram:GlobalID))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(not(ram:BuyerTradeParty/ram:ID) and ram:BuyerTradeParty/ram:GlobalID) or (ram:BuyerTradeParty/ram:ID and not(ram:BuyerTradeParty/ram:GlobalID)) or (not(ram:BuyerTradeParty/ram:ID) and not(ram:BuyerTradeParty/ram:GlobalID))">
+                    <xsl:attribute name="id">CII-SR-450</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-450] - Only one  buyer identifier should be present (either the ID or the Global ID)</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery" mode="M11" priority="1015">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RelatedSupplyChainConsignment)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RelatedSupplyChainConsignment)">
+                    <xsl:attribute name="id">CII-SR-308</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-308] - RelatedSupplyChainConsignment should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ShipToTradeParty/ram:RoleCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ShipToTradeParty/ram:RoleCode)">
+                    <xsl:attribute name="id">CII-SR-309</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-309] - RoleCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ShipToTradeParty/ram:Description)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ShipToTradeParty/ram:Description)">
+                    <xsl:attribute name="id">CII-SR-310</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-310] - Description should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ShipToTradeParty/ram:SpecifiedLegalOrganization)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ShipToTradeParty/ram:SpecifiedLegalOrganization)">
+                    <xsl:attribute name="id">CII-SR-311</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-311] - SpecifiedLegalOrganization should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ShipToTradeParty/ram:DefinedTradeContact)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ShipToTradeParty/ram:DefinedTradeContact)">
+                    <xsl:attribute name="id">CII-SR-312</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-312] - DefinedTradeContact should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ShipToTradeParty/ram:URIUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ShipToTradeParty/ram:URIUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-313</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-313] - URIUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ShipToTradeParty/ram:SpecifiedTaxRegistration)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ShipToTradeParty/ram:SpecifiedTaxRegistration)">
+                    <xsl:attribute name="id">CII-SR-314</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-314] - SpecifiedTaxRegistration should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ShipToTradeParty/ram:EndPointURIUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ShipToTradeParty/ram:EndPointURIUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-315</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-315] - EndPointURIUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ShipToTradeParty/ram:LogoAssociatedSpecifiedBinaryFile)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ShipToTradeParty/ram:LogoAssociatedSpecifiedBinaryFile)">
+                    <xsl:attribute name="id">CII-SR-316</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-316] - LogoAssociatedSpecifiedBinaryFile should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:UltimateShipToTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:UltimateShipToTradeParty)">
+                    <xsl:attribute name="id">CII-SR-317</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-317] - UltimateShipToTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ShipFromTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ShipFromTradeParty)">
+                    <xsl:attribute name="id">CII-SR-318</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-318] - ShipFromTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualDespatchSupplyChainEvent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualDespatchSupplyChainEvent)">
+                    <xsl:attribute name="id">CII-SR-319</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-319] - ActualDespatchSupplyChainEvent should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualPickUpSupplyChainEvent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualPickUpSupplyChainEvent)">
+                    <xsl:attribute name="id">CII-SR-320</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-320] - ActualPickUpSupplyChainEvent should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualDeliverySupplyChainEvent/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualDeliverySupplyChainEvent/ram:ID)">
+                    <xsl:attribute name="id">CII-SR-321</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-321] - ID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTime)">
+                    <xsl:attribute name="id">CII-SR-322</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-322] - DateTime should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualDeliverySupplyChainEvent/ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualDeliverySupplyChainEvent/ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-323</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-323] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualDeliverySupplyChainEvent/ram:Description)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualDeliverySupplyChainEvent/ram:Description)">
+                    <xsl:attribute name="id">CII-SR-324</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-324] - Description should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualDeliverySupplyChainEvent/ram:DescriptionBinaryObject)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualDeliverySupplyChainEvent/ram:DescriptionBinaryObject)">
+                    <xsl:attribute name="id">CII-SR-325</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-325] - DescriptionBinaryObject should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualDeliverySupplyChainEvent/ram:UnitQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualDeliverySupplyChainEvent/ram:UnitQuantity)">
+                    <xsl:attribute name="id">CII-SR-326</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-326] - UnitQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualDeliverySupplyChainEvent/ram:LatestOccurrenceDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualDeliverySupplyChainEvent/ram:LatestOccurrenceDateTime)">
+                    <xsl:attribute name="id">CII-SR-327</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-327] - LatestOccurrenceDateTime should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualDeliverySupplyChainEvent/ram:EarliestOccurrenceDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualDeliverySupplyChainEvent/ram:EarliestOccurrenceDateTime)">
+                    <xsl:attribute name="id">CII-SR-328</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-328] - EarliestOccurrenceDateTime should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualDeliverySupplyChainEvent/ram:OccurrenceSpecifiedPeriod)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualDeliverySupplyChainEvent/ram:OccurrenceSpecifiedPeriod)">
+                    <xsl:attribute name="id">CII-SR-329</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-329] - OccurrenceSpecifiedPeriod should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualDeliverySupplyChainEvent/ram:OccurrenceLogisticsLocation)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualDeliverySupplyChainEvent/ram:OccurrenceLogisticsLocation)">
+                    <xsl:attribute name="id">CII-SR-330</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-330] - OccurrenceLogisticsLocation should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ActualReceiptSupplyChainEvent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ActualReceiptSupplyChainEvent)">
+                    <xsl:attribute name="id">CII-SR-331</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-331] - ActualReceiptSupplyChainEvent should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:AdditionalReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:AdditionalReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-332</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-332] - AdditionalReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DespatchAdviceReferencedDocument/ram:LineID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DespatchAdviceReferencedDocument/ram:LineID)">
+                    <xsl:attribute name="id">CII-SR-333</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-333] - LineID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DespatchAdviceReferencedDocument/ram:LineID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DespatchAdviceReferencedDocument/ram:LineID)">
+                    <xsl:attribute name="id">CII-SR-334</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-334] - LineID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DeliveryNoteReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DeliveryNoteReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-335</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-335] - DeliveryNoteReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ConsumptionReportReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ConsumptionReportReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-336</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-336] - ConsumptionReportReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PreviousDeliverySupplyChainEvent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PreviousDeliverySupplyChainEvent)">
+                    <xsl:attribute name="id">CII-SR-337</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-337] - PreviousDeliverySupplyChainEvent should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PackingListReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PackingListReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-338</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-338] - PackingListReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(not(ram:ShipToTradeParty/ram:ID) and ram:ShipToTradeParty/ram:GlobalID) or (ram:ShipToTradeParty/ram:ID and not(ram:ShipToTradeParty/ram:GlobalID)) or (not(ram:ShipToTradeParty/ram:ID) and not(ram:ShipToTradeParty/ram:GlobalID))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(not(ram:ShipToTradeParty/ram:ID) and ram:ShipToTradeParty/ram:GlobalID) or (ram:ShipToTradeParty/ram:ID and not(ram:ShipToTradeParty/ram:GlobalID)) or (not(ram:ShipToTradeParty/ram:ID) and not(ram:ShipToTradeParty/ram:GlobalID))">
+                    <xsl:attribute name="id">CII-SR-449</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-449] - Only one delivery to location identifier should be present (either the ID or the Global ID)</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement" mode="M11" priority="1014">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DuePayableAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DuePayableAmount)">
+                    <xsl:attribute name="id">CII-SR-339</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-339] - DuePayableAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CreditorReferenceTypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CreditorReferenceTypeCode)">
+                    <xsl:attribute name="id">CII-SR-340</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-340] - CreditorReferenceTypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CreditorReferenceType)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CreditorReferenceType)">
+                    <xsl:attribute name="id">CII-SR-341</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-341] - CreditorReferenceType should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CreditorReferenceIssuerID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CreditorReferenceIssuerID)">
+                    <xsl:attribute name="id">CII-SR-342</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-342] - CreditorReferenceIssuerID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PaymentCurrencyCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PaymentCurrencyCode)">
+                    <xsl:attribute name="id">CII-SR-344</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-344] - PaymentCurrencyCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:InvoiceIssuerReference)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:InvoiceIssuerReference)">
+                    <xsl:attribute name="id">CII-SR-345</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-345] - InvoiceIssuerReference should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:InvoiceDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:InvoiceDateTime)">
+                    <xsl:attribute name="id">CII-SR-346</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-346] - InvoiceDateTime should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NextInvoiceDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NextInvoiceDateTime)">
+                    <xsl:attribute name="id">CII-SR-347</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-347] - NextInvoiceDateTime should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CreditReasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CreditReasonCode)">
+                    <xsl:attribute name="id">CII-SR-348</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-348] - CreditReasonCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CreditReason)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CreditReason)">
+                    <xsl:attribute name="id">CII-SR-349</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-349] - CreditReason should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:InvoicerTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:InvoicerTradeParty)">
+                    <xsl:attribute name="id">CII-SR-350</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-350] - InvoicerTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:InvoiceeTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:InvoiceeTradeParty)">
+                    <xsl:attribute name="id">CII-SR-351</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-351] - InvoiceeTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayeeTradeParty/ram:RoleCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayeeTradeParty/ram:RoleCode)">
+                    <xsl:attribute name="id">CII-SR-352</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-352] - RoleCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayeeTradeParty/ram:Description)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayeeTradeParty/ram:Description)">
+                    <xsl:attribute name="id">CII-SR-353</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-353] - Description should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode)">
+                    <xsl:attribute name="id">CII-SR-354</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-354] - LegalClassificationCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:Name)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:Name)">
+                    <xsl:attribute name="id">CII-SR-355</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-355] - Name should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName)">
+                    <xsl:attribute name="id">CII-SR-356</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-356] - TradingBusinessName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress)">
+                    <xsl:attribute name="id">CII-SR-357</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-357] - PostalTradeAddress should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration)">
+                    <xsl:attribute name="id">CII-SR-358</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-358] - AuthorizedLegalRegistration should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayeeTradeParty/ram:DefinedTradeContact)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayeeTradeParty/ram:DefinedTradeContact)">
+                    <xsl:attribute name="id">CII-SR-359</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-359] - DefinedTradeContact should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayeeTradeParty/ram:PostalTradeAddress)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayeeTradeParty/ram:PostalTradeAddress)">
+                    <xsl:attribute name="id">CII-SR-360</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-360] - PostalTradeAddress should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayeeTradeParty/ram:URIUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayeeTradeParty/ram:URIUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-361</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-361] - URIUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayeeTradeParty/ram:SpecifiedTaxRegistration)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayeeTradeParty/ram:SpecifiedTaxRegistration)">
+                    <xsl:attribute name="id">CII-SR-362</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-362] - SpecifiedTaxRegistration should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayeeTradeParty/ram:EndPointURIUniversalCommunication)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayeeTradeParty/ram:EndPointURIUniversalCommunication)">
+                    <xsl:attribute name="id">CII-SR-363</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-363] - EndPointURIUniversalCommunication should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayeeTradeParty/ram:LogoAssociatedSpecifiedBinaryFile)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayeeTradeParty/ram:LogoAssociatedSpecifiedBinaryFile)">
+                    <xsl:attribute name="id">CII-SR-364</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-364] - LogoAssociatedSpecifiedBinaryFile should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="(not(ram:PayeeTradeParty/ram:ID) and ram:PayeeTradeParty/ram:GlobalID) or (ram:PayeeTradeParty/ram:ID and not(ram:PayeeTradeParty/ram:GlobalID)) or (not(ram:PayeeTradeParty/ram:ID) and not(ram:PayeeTradeParty/ram:GlobalID))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="(not(ram:PayeeTradeParty/ram:ID) and ram:PayeeTradeParty/ram:GlobalID) or (ram:PayeeTradeParty/ram:ID and not(ram:PayeeTradeParty/ram:GlobalID)) or (not(ram:PayeeTradeParty/ram:ID) and not(ram:PayeeTradeParty/ram:GlobalID))">
+                    <xsl:attribute name="id">CII-SR-451</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-451] - Only one payee identifier should be present (either the ID or the Global ID)</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayerTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayerTradeParty)">
+                    <xsl:attribute name="id">CII-SR-365</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-365] - PayerTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TaxApplicableTradeCurrencyExchange)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TaxApplicableTradeCurrencyExchange)">
+                    <xsl:attribute name="id">CII-SR-366</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-366] - TaxApplicableTradeCurrencyExchange should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:InvoiceApplicableTradeCurrencyExchange)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:InvoiceApplicableTradeCurrencyExchange)">
+                    <xsl:attribute name="id">CII-SR-367</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-367] - InvoiceApplicableTradeCurrencyExchange should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PaymentApplicableTradeCurrencyExchange)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PaymentApplicableTradeCurrencyExchange)">
+                    <xsl:attribute name="id">CII-SR-368</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-368] - PaymentApplicableTradeCurrencyExchange should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PaymentChannelCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PaymentChannelCode)">
+                    <xsl:attribute name="id">CII-SR-369</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-369] - PaymentChannelCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:GuaranteeMethodCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:GuaranteeMethodCode)">
+                    <xsl:attribute name="id">CII-SR-370</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-370] - GuaranteeMethodCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PaymentMethodCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PaymentMethodCode)">
+                    <xsl:attribute name="id">CII-SR-371</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-371] - PaymentMethodCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ID)">
+                    <xsl:attribute name="id">CII-SR-443</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-443] - ID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:MicrochipIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:MicrochipIndicator)">
+                    <xsl:attribute name="id">CII-SR-372</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-372] - MicrochipIndicator should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-373</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-373] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ExpiryDate)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ExpiryDate)">
+                    <xsl:attribute name="id">CII-SR-375</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-375] - ExpiryDate should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:VerificationNumeric)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:VerificationNumeric)">
+                    <xsl:attribute name="id">CII-SR-376</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-376] - VerificationNumeric should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ValidFromDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ValidFromDateTime)">
+                    <xsl:attribute name="id">CII-SR-377</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-377] - ValidFromDateTime should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CreditLimitAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CreditLimitAmount)">
+                    <xsl:attribute name="id">CII-SR-378</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-378] - CreditLimitAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CreditAvailableAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CreditAvailableAmount)">
+                    <xsl:attribute name="id">CII-SR-379</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-379] - CreditAvailableAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:InterestRatePercent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:InterestRatePercent)">
+                    <xsl:attribute name="id">CII-SR-380</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-380] - InterestRatePercent should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:Description)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:Description)">
+                    <xsl:attribute name="id">CII-SR-381</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-381] - Description should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:AccountName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:AccountName)">
+                    <xsl:attribute name="id">CII-SR-382</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-382] - AccountName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:ProprietaryID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:ProprietaryID)">
+                    <xsl:attribute name="id">CII-SR-444</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-444] - ProprietaryID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerSpecifiedDebtorFinancialInstitution/ram:ClearingSystemName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerSpecifiedDebtorFinancialInstitution/ram:ClearingSystemName)">
+                    <xsl:attribute name="id">CII-SR-384</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-384] - ClearingSystemName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerSpecifiedDebtorFinancialInstitution/ram:Name)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerSpecifiedDebtorFinancialInstitution/ram:Name)">
+                    <xsl:attribute name="id">CII-SR-385</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-385] - Name should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerSpecifiedDebtorFinancialInstitution/ram:LocationFinancialInstitutionAddress)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerSpecifiedDebtorFinancialInstitution/ram:LocationFinancialInstitutionAddress)">
+                    <xsl:attribute name="id">CII-SR-386</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-386] - LocationFinancialInstitutionAddress should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:ID)">
+                    <xsl:attribute name="id">CII-SR-388</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-388] - ID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:SequenceNumeric)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:SequenceNumeric)">
+                    <xsl:attribute name="id">CII-SR-389</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-389] - SequenceNumeric should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity)">
+                    <xsl:attribute name="id">CII-SR-390</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-390] - BasisQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:PrepaidIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:PrepaidIndicator)">
+                    <xsl:attribute name="id">CII-SR-391</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-391] - PrepaidIndicator should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:UnitBasisAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:UnitBasisAmount)">
+                    <xsl:attribute name="id">CII-SR-392</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-392] - UnitBasisAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-393</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-393] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange)">
+                    <xsl:attribute name="id">CII-SR-394</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-394] - ActualTradeCurrencyExchange should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SubtotalCalculatedTradeTax)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SubtotalCalculatedTradeTax)">
+                    <xsl:attribute name="id">CII-SR-395</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-395] - SubtotalCalculatedTradeTax should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedLogisticsServiceCharge)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedLogisticsServiceCharge)">
+                    <xsl:attribute name="id">CII-SR-396</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-396] - SpecifiedLogisticsServiceCharge should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradePaymentTerms/ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradePaymentTerms/ram:ID)">
+                    <xsl:attribute name="id">CII-SR-397</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-397] - ID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradePaymentTerms/ram:FromEventCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradePaymentTerms/ram:FromEventCode)">
+                    <xsl:attribute name="id">CII-SR-398</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-398] - FromEventCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradePaymentTerms/ram:SettlementPeriodMeasure)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradePaymentTerms/ram:SettlementPeriodMeasure)">
+                    <xsl:attribute name="id">CII-SR-399</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-399] - SettlementPeriodMeasure should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTime)">
+                    <xsl:attribute name="id">CII-SR-400</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-400] - DateTime should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradePaymentTerms/ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradePaymentTerms/ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-401</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-401] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradePaymentTerms/ram:InstructionTypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradePaymentTerms/ram:InstructionTypeCode)">
+                    <xsl:attribute name="id">CII-SR-402</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-402] - InstructionTypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradePaymentTerms/ram:PartialPaymentPercent)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradePaymentTerms/ram:PartialPaymentPercent)">
+                    <xsl:attribute name="id">CII-SR-404</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-404] - PartialPaymentPercent should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradePaymentTerms/ram:PaymentMeansID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradePaymentTerms/ram:PaymentMeansID)">
+                    <xsl:attribute name="id">CII-SR-405</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-405] - PaymentMeansID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradePaymentTerms/ram:PartialPaymentAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradePaymentTerms/ram:PartialPaymentAmount)">
+                    <xsl:attribute name="id">CII-SR-406</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-406] - PartialPaymentAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms)">
+                    <xsl:attribute name="id">CII-SR-407</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-407] - ApplicableTradePaymentPenaltyTerms should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms)">
+                    <xsl:attribute name="id">CII-SR-408</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-408] - ApplicableTradePaymentDiscountTerms should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradePaymentTerms/ram:PayeeTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradePaymentTerms/ram:PayeeTradeParty)">
+                    <xsl:attribute name="id">CII-SR-409</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-409] - PayeeTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedFinancialAdjustment)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedFinancialAdjustment)">
+                    <xsl:attribute name="id">CII-SR-421</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-421] - SpecifiedFinancialAdjustment should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:InvoiceReferencedDocument/ram:LineID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:InvoiceReferencedDocument/ram:LineID)">
+                    <xsl:attribute name="id">CII-SR-422</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-422] - LineID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ProFormaInvoiceReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ProFormaInvoiceReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-423</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-423] - ProFormaInvoiceReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:LetterOfCreditReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:LetterOfCreditReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-424</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-424] - LetterOfCreditReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:FactoringAgreementReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:FactoringAgreementReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-425</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-425] - FactoringAgreementReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:FactoringListReferencedDocument)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:FactoringListReferencedDocument)">
+                    <xsl:attribute name="id">CII-SR-426</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-426] - FactoringListReferencedDocument should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PayableSpecifiedTradeAccountingAccount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PayableSpecifiedTradeAccountingAccount)">
+                    <xsl:attribute name="id">CII-SR-427</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-427] - PayableSpecifiedTradeAccountingAccount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:SetTriggerCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:SetTriggerCode)">
+                    <xsl:attribute name="id">CII-SR-428</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-428] - SetTriggerCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode)">
+                    <xsl:attribute name="id">CII-SR-429</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-429] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:AmountTypeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:AmountTypeCode)">
+                    <xsl:attribute name="id">CII-SR-430</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-430] - AmountTypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:Name)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:Name)">
+                    <xsl:attribute name="id">CII-SR-431</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-431] - Name should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:CostReferenceDimensionPattern)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ReceivableSpecifiedTradeAccountingAccount/ram:CostReferenceDimensionPattern)">
+                    <xsl:attribute name="id">CII-SR-432</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-432] - CostReferenceDimensionPattern should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PurchaseSpecifiedTradeAccountingAccount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PurchaseSpecifiedTradeAccountingAccount)">
+                    <xsl:attribute name="id">CII-SR-433</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-433] - PurchaseSpecifiedTradeAccountingAccount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SalesSpecifiedTradeAccountingAccount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SalesSpecifiedTradeAccountingAccount)">
+                    <xsl:attribute name="id">CII-SR-434</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-434] - SalesSpecifiedTradeAccountingAccount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeSettlementFinancialCard)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeSettlementFinancialCard)">
+                    <xsl:attribute name="id">CII-SR-435</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-435] - SpecifiedTradeSettlementFinancialCard should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedAdvancePayment)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedAdvancePayment)">
+                    <xsl:attribute name="id">CII-SR-436</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-436] - SpecifiedAdvancePayment should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:UltimatePayeeTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:UltimatePayeeTradeParty)">
+                    <xsl:attribute name="id">CII-SR-437</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-437] - UltimatePayeeTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation" mode="M11" priority="1013">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:InformationAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:InformationAmount)">
+                    <xsl:attribute name="id">CII-SR-411</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-411] - InformationAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TotalDiscountAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TotalDiscountAmount)">
+                    <xsl:attribute name="id">CII-SR-412</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-412] - TotalDiscountAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TotalAllowanceChargeAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TotalAllowanceChargeAmount)">
+                    <xsl:attribute name="id">CII-SR-413</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-413] - TotalAllowanceChargeAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RetailValueExcludingTaxInformationAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RetailValueExcludingTaxInformationAmount)">
+                    <xsl:attribute name="id">CII-SR-414</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-414] - RetailValueExcludingTaxInformationAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TotalDepositFeeInformationAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TotalDepositFeeInformationAmount)">
+                    <xsl:attribute name="id">CII-SR-415</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-415] - TotalDepositFeeInformationAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ProductValueExcludingTobaccoTaxInformationAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ProductValueExcludingTobaccoTaxInformationAmount)">
+                    <xsl:attribute name="id">CII-SR-416</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-416] - ProductValueExcludingTobaccoTaxInformationAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TotalRetailValueInformationAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TotalRetailValueInformationAmount)">
+                    <xsl:attribute name="id">CII-SR-417</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-417] - TotalRetailValueInformationAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GrossLineTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GrossLineTotalAmount)">
+                    <xsl:attribute name="id">CII-SR-418</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-418] - GrossLineTotalAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetLineTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetLineTotalAmount)">
+                    <xsl:attribute name="id">CII-SR-419</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-419] - NetLineTotalAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:NetIncludingTaxesLineTotalAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:NetIncludingTaxesLineTotalAmount)">
+                    <xsl:attribute name="id">CII-SR-420</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-420] - NetIncludingTaxesLineTotalAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice" mode="M11" priority="1012">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@languageID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@languageID)">
+                    <xsl:attribute name="id">CII-DT-013</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-013] - languageID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@languageLocaleID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@languageLocaleID)">
+                    <xsl:attribute name="id">CII-DT-014</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-014] - languageLocaleID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ValuationBreakdownStatement)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ValuationBreakdownStatement)">
+                    <xsl:attribute name="id">CII-SR-438</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-438] - ValuationBreakdownStatement should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//*[ends-with(name(), 'DocumentContextParameter')]" mode="M11" priority="1011">
+        <svrl:fired-rule context="//*[ends-with(name(), 'DocumentContextParameter')]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:Value)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:Value)">
+                    <xsl:attribute name="id">CII-SR-04</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-004] - Value should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedDocumentVersion)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedDocumentVersion)">
+                    <xsl:attribute name="id">CII-SR-05</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-SR-005] - SpecifiedDocumentVersion should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:*[ends-with(name(), 'ID')]" mode="M11" priority="1010">
+        <svrl:fired-rule context="//ram:*[ends-with(name(), 'ID')]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@schemeName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@schemeName)">
+                    <xsl:attribute name="id">CII-DT-001</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-001] - schemeName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@schemeAgencyName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@schemeAgencyName)">
+                    <xsl:attribute name="id">CII-DT-002</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-002] - schemeAgencyName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@schemeDataURI)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@schemeDataURI)">
+                    <xsl:attribute name="id">CII-DT-003</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-003] - schemeDataURI should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@schemeURI)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@schemeURI)">
+                    <xsl:attribute name="id">CII-DT-004</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-004] - schemeURI should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/*[self::rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID or         self::rsm:ExchangedDocument/ram:ID or self::rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID or         self::rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID]" mode="M11" priority="1009">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/*[self::rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID or         self::rsm:ExchangedDocument/ram:ID or self::rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID or         self::rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@schemeID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@schemeID)">
+                    <xsl:attribute name="id">CII-DT-005</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-005] - schemeID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@schemeAgencyID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@schemeAgencyID)">
+                    <xsl:attribute name="id">CII-DT-006</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-006] - schemeAgencyID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@schemeVersionID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@schemeVersionID)">
+                    <xsl:attribute name="id">CII-DT-007</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-007] - schemeVersionID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:TypeCode" mode="M11" priority="1008">
+        <svrl:fired-rule context="//ram:TypeCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@name)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@name)">
+                    <xsl:attribute name="id">CII-DT-008</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-008] - name should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@listURI)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@listURI)">
+                    <xsl:attribute name="id">CII-DT-009</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-009] - listURI should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode" mode="M11" priority="1007">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@listID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@listID)">
+                    <xsl:attribute name="id">CII-DT-010</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-010] - listID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@listAgencyID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@listAgencyID)">
+                    <xsl:attribute name="id">CII-DT-011</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-011] - listAgencyID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@listVersionID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@listVersionID)">
+                    <xsl:attribute name="id">CII-DT-012</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-012] - listVersionID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode" mode="M11" priority="1006">
+        <svrl:fired-rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@listID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@listID)">
+                    <xsl:attribute name="id">CII-DT-045</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-045] - @listID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@listAgencyID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@listAgencyID)">
+                    <xsl:attribute name="id">CII-DT-046</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-046] - @listAgencyID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@listVersionID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@listVersionID)">
+                    <xsl:attribute name="id">CII-DT-047</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-047] - @listVersionID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@listURI)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@listURI)">
+                    <xsl:attribute name="id">CII-DT-048</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-048] - @listURI should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:*[ends-with(name(), 'ReferencedDocument')]" mode="M11" priority="1005">
+        <svrl:fired-rule context="//ram:*[ends-with(name(), 'ReferencedDocument')]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:URIID) or (self::ram:AdditionalReferencedDocument and ram:TypeCode='916') "/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:URIID) or (self::ram:AdditionalReferencedDocument and ram:TypeCode='916')">
+                    <xsl:attribute name="id">CII-DT-015</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-015] - URIID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:StatusCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:StatusCode)">
+                    <xsl:attribute name="id">CII-DT-016</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-016] - StatusCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CopyIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CopyIndicator)">
+                    <xsl:attribute name="id">CII-DT-017</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-017] - CopyIndicator should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TypeCode) or (self::ram:AdditionalReferencedDocument) and (ram:TypeCode='50' or ram:TypeCode='130' or ram:TypeCode='916')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TypeCode) or (self::ram:AdditionalReferencedDocument) and (ram:TypeCode='50' or ram:TypeCode='130' or ram:TypeCode='916')">
+                    <xsl:attribute name="id">CII-DT-018</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-018] - TypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:GlobalID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:GlobalID)">
+                    <xsl:attribute name="id">CII-DT-019</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-019] - GlobalID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RevisionID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RevisionID)">
+                    <xsl:attribute name="id">CII-DT-020</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-020] - RevisionID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:Name) or (self::ram:AdditionalReferencedDocument and ram:TypeCode='916')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:Name) or (self::ram:AdditionalReferencedDocument and ram:TypeCode='916')">
+                    <xsl:attribute name="id">CII-DT-021</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-021] - Name should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:AttachmentBinaryObject) or (self::ram:AdditionalReferencedDocument and ram:TypeCode='916')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:AttachmentBinaryObject) or (self::ram:AdditionalReferencedDocument and ram:TypeCode='916')">
+                    <xsl:attribute name="id">CII-DT-022</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-022] - AttachmentBinaryObject should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:Information)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:Information)">
+                    <xsl:attribute name="id">CII-DT-023</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-023] - Information should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ReferenceTypeCode) or (self::ram:AdditionalReferencedDocument and ram:TypeCode='130')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ReferenceTypeCode) or (self::ram:AdditionalReferencedDocument and ram:TypeCode='130')">
+                    <xsl:attribute name="id">CII-DT-024</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-024] - ReferenceTypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SectionName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SectionName)">
+                    <xsl:attribute name="id">CII-DT-025</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-025] - SectionName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PreviousRevisionID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PreviousRevisionID)">
+                    <xsl:attribute name="id">CII-DT-026</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-026] - PreviousRevisionID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:FormattedIssueDateTime) or self::ram:InvoiceReferencedDocument"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:FormattedIssueDateTime) or self::ram:InvoiceReferencedDocument">
+                    <xsl:attribute name="id">CII-DT-027</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-027] - FormattedIssueDateTime should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:EffectiveSpecifiedPeriod)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:EffectiveSpecifiedPeriod)">
+                    <xsl:attribute name="id">CII-DT-028</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-028] - EffectiveSpecifiedPeriod should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:IssuerTradeParty)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:IssuerTradeParty)">
+                    <xsl:attribute name="id">CII-DT-029</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-029] - IssuerTradeParty should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:AttachedSpecifiedBinaryFile)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:AttachedSpecifiedBinaryFile)">
+                    <xsl:attribute name="id">CII-DT-030</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-030] - AttachedSpecifiedBinaryFile should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:*[ends-with(name(), 'Amount') and not (self::ram:TaxTotalAmount)]" mode="M11" priority="1004">
+        <svrl:fired-rule context="//ram:*[ends-with(name(), 'Amount') and not (self::ram:TaxTotalAmount)]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@currencyID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@currencyID)">
+                    <xsl:attribute name="id">CII-DT-031</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-031] - currencyID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@currencyCodeListVersionID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@currencyCodeListVersionID)">
+                    <xsl:attribute name="id">CII-DT-032</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-032] - currencyCodeListVersionID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:*[ends-with(name(), 'Quantity')]" mode="M11" priority="1003">
+        <svrl:fired-rule context="//ram:*[ends-with(name(), 'Quantity')]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@unitCode) or (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity/@unitCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@unitCode) or (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity/@unitCode)">
+                    <xsl:attribute name="id">CII-DT-033</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-033] - unitCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@unitCodeListID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@unitCodeListID)">
+                    <xsl:attribute name="id">CII-DT-034</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-034] - unitCodeListID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@unitCodeListAgencyID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@unitCodeListAgencyID)">
+                    <xsl:attribute name="id">CII-DT-035</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-035] - unitCodeListAgencyID should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(@unitCodeListAgencyName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(@unitCodeListAgencyName)">
+                    <xsl:attribute name="id">CII-DT-036</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-036] - unitCodeListAgencyName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:*[ends-with(name(), 'TradeTax')]" mode="M11" priority="1002">
+        <svrl:fired-rule context="//ram:*[ends-with(name(), 'TradeTax')]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TypeCode) or (ram:TypeCode = 'VAT')"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TypeCode) or (ram:TypeCode = 'VAT')">
+                    <xsl:attribute name="id">CII-DT-037</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-037] - TypeCode shall be 'VAT'</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CalculatedRate)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CalculatedRate)">
+                    <xsl:attribute name="id">CII-DT-038</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-038] - CalculatedRate should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CalculationSequenceNumeric)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CalculationSequenceNumeric)">
+                    <xsl:attribute name="id">CII-DT-039</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-039] - CalculationSequenceNumeric should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BasisQuantity)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BasisQuantity)">
+                    <xsl:attribute name="id">CII-DT-040</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-040] - BasisQuantity should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BasisAmount) or (ancestor::ram:ApplicableHeaderTradeSettlement)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BasisAmount) or (ancestor::ram:ApplicableHeaderTradeSettlement)">
+                    <xsl:attribute name="id">CII-DT-041</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-041] - BasisAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:UnitBasisAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:UnitBasisAmount)">
+                    <xsl:attribute name="id">CII-DT-042</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-042] - UnitBasisAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:LineTotalBasisAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:LineTotalBasisAmount)">
+                    <xsl:attribute name="id">CII-DT-043</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-043] - LineTotalBasisAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:AllowanceChargeBasisAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:AllowanceChargeBasisAmount)">
+                    <xsl:attribute name="id">CII-DT-044</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-044] - AllowanceChargeBasisAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CurrencyCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CurrencyCode)">
+                    <xsl:attribute name="id">CII-DT-049</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-049] - CurrencyCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:Jurisdiction)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:Jurisdiction)">
+                    <xsl:attribute name="id">CII-DT-050</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-050] - Jurisdiction should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CustomsDutyIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CustomsDutyIndicator)">
+                    <xsl:attribute name="id">CII-DT-051</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-051] - CustomsDutyIndicator should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ExemptionReasonCode) or self::ram:ApplicableTradeTax"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ExemptionReasonCode) or self::ram:ApplicableTradeTax">
+                    <xsl:attribute name="id">CII-DT-052</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-052] - ExemptionReasonCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ExemptionReason) or self::ram:ApplicableTradeTax"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ExemptionReason) or self::ram:ApplicableTradeTax">
+                    <xsl:attribute name="id">CII-DT-098</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-098] - ExemptionReason should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TaxBasisAllowanceRate)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TaxBasisAllowanceRate)">
+                    <xsl:attribute name="id">CII-DT-053</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-053] - TaxBasisAllowanceRate should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:TaxPointDate)  or (ancestor::ram:ApplicableHeaderTradeSettlement)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:TaxPointDate) or (ancestor::ram:ApplicableHeaderTradeSettlement)">
+                    <xsl:attribute name="id">CII-DT-054</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-054] - TaxPointDate should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:Type)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:Type)">
+                    <xsl:attribute name="id">CII-DT-055</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-055] - Type should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:InformationAmount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:InformationAmount)">
+                    <xsl:attribute name="id">CII-DT-056</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-056] - InformationAmount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CategoryName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CategoryName)">
+                    <xsl:attribute name="id">CII-DT-057</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-057] - CategoryName should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DueDateTypeCode) or (ancestor::ram:ApplicableHeaderTradeSettlement)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DueDateTypeCode) or (ancestor::ram:ApplicableHeaderTradeSettlement)">
+                    <xsl:attribute name="id">CII-DT-058</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-058] - DueDateTypeCode should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:RateApplicablePercent/@format)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:RateApplicablePercent/@format)">
+                    <xsl:attribute name="id">CII-DT-059</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-059] - @format should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SpecifiedTradeAccountingAccount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SpecifiedTradeAccountingAccount)">
+                    <xsl:attribute name="id">CII-DT-060</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-060] - SpecifiedTradeAccountingAccount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ServiceSupplyTradeCountry)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ServiceSupplyTradeCountry)">
+                    <xsl:attribute name="id">CII-DT-061</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-061] - ServiceSupplyTradeCountry should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount)">
+                    <xsl:attribute name="id">CII-DT-062</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-062] - BuyerRepayableTaxSpecifiedTradeAccountingAccount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerPayableTaxSpecifiedTradeAccountingAccount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerPayableTaxSpecifiedTradeAccountingAccount)">
+                    <xsl:attribute name="id">CII-DT-063</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-063] - SellerPayableTaxSpecifiedTradeAccountingAccount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SellerRefundableTaxSpecifiedTradeAccountingAccount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SellerRefundableTaxSpecifiedTradeAccountingAccount)">
+                    <xsl:attribute name="id">CII-DT-064</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-064] - SellerRefundableTaxSpecifiedTradeAccountingAccount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount)">
+                    <xsl:attribute name="id">CII-DT-065</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-065] - BuyerDeductibleTaxSpecifiedTradeAccountingAccount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount)">
+                    <xsl:attribute name="id">CII-DT-066</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-066] - BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PlaceApplicableTradeLocation)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PlaceApplicableTradeLocation)">
+                    <xsl:attribute name="id">CII-DT-067</xsl:attribute>
+                    <xsl:attribute name="flag">warning</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-067] - PlaceApplicableTradeLocation should not be present</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:BillingSpecifiedPeriod" mode="M11" priority="1001">
+        <svrl:fired-rule context="//ram:BillingSpecifiedPeriod"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:StartDateTime/udt:DateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:StartDateTime/udt:DateTime)">
+                    <xsl:attribute name="id">CII-DT-068</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-068] - DateTime shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DurationMeasure)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DurationMeasure)">
+                    <xsl:attribute name="id">CII-DT-069</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-069] - DurationMeasure shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:InclusiveIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:InclusiveIndicator)">
+                    <xsl:attribute name="id">CII-DT-070</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-070] - InclusiveIndicator shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:Description)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:Description)">
+                    <xsl:attribute name="id">CII-DT-071</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-071] - Description shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:EndDateTime/udt:DateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:EndDateTime/udt:DateTime)">
+                    <xsl:attribute name="id">CII-DT-072</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-072] - DateTime shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CompleteDateTime)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CompleteDateTime)">
+                    <xsl:attribute name="id">CII-DT-073</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-073] - CompleteDateTime shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:OpenIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:OpenIndicator)">
+                    <xsl:attribute name="id">CII-DT-074</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-074] - OpenIndicator shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SeasonCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SeasonCode)">
+                    <xsl:attribute name="id">CII-DT-075</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-075] - SeasonCode shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ID)">
+                    <xsl:attribute name="id">CII-DT-076</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-076] - ID shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:Name)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:Name)">
+                    <xsl:attribute name="id">CII-DT-077</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-077] - Name shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:SequenceNumeric)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:SequenceNumeric)">
+                    <xsl:attribute name="id">CII-DT-078</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-078] - SequenceNumeric shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:StartDateFlexibilityCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:StartDateFlexibilityCode)">
+                    <xsl:attribute name="id">CII-DT-079</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-079] - StartDateFlexibilityCode shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ContinuousIndicator)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ContinuousIndicator)">
+                    <xsl:attribute name="id">CII-DT-080</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-080] - ContinuousIndicator shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PurposeCode)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PurposeCode)">
+                    <xsl:attribute name="id">CII-DT-081</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-081] - PurposeCode shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:PostalTradeAddress" mode="M11" priority="1000">
+        <svrl:fired-rule context="//ram:PostalTradeAddress"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:ID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:ID)">
+                    <xsl:attribute name="id">CII-DT-082</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-082] - ID shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:PostOfficeBox)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:PostOfficeBox)">
+                    <xsl:attribute name="id">CII-DT-083</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-083] - PostOfficeBox shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuildingName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuildingName)">
+                    <xsl:attribute name="id">CII-DT-084</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-084] - BuildingName shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:LineFour)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:LineFour)">
+                    <xsl:attribute name="id">CII-DT-086</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-086] - LineFour shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:LineFive)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:LineFive)">
+                    <xsl:attribute name="id">CII-DT-087</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-087] - LineFive shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:StreetName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:StreetName)">
+                    <xsl:attribute name="id">CII-DT-088</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-088] - StreetName shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CitySubDivisionName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CitySubDivisionName)">
+                    <xsl:attribute name="id">CII-DT-089</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-089] - CitySubDivisionName shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CountryName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CountryName)">
+                    <xsl:attribute name="id">CII-DT-090</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-090] - CountryName shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CountrySubDivisionID)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CountrySubDivisionID)">
+                    <xsl:attribute name="id">CII-DT-091</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-091] - CountrySubDivisionID shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:AttentionOf)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:AttentionOf)">
+                    <xsl:attribute name="id">CII-DT-092</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-092] - AttentionOf shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:CareOf)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:CareOf)">
+                    <xsl:attribute name="id">CII-DT-093</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-093] - CareOf shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:BuildingNumber)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:BuildingNumber)">
+                    <xsl:attribute name="id">CII-DT-094</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-094] - BuildingNumber shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:DepartmentName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:DepartmentName)">
+                    <xsl:attribute name="id">CII-DT-095</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-095] - DepartmentName shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="not(ram:AdditionalStreetName)"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="not(ram:AdditionalStreetName)">
+                    <xsl:attribute name="id">CII-DT-096</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[CII-DT-096] - AdditionalStreetName shall not be used.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <xsl:template match="text()" mode="M11" priority="-1"/>
+    <xsl:template match="@*|node()" mode="M11" priority="-2">
+        <xsl:apply-templates mode="M11" select="*"/>
+    </xsl:template>
+    <!--PATTERN EN16931-Codes-->
+    <!--RULE -->
+    <xsl:template match="rsm:ExchangedDocument/ram:TypeCode" mode="M12" priority="1021">
+        <svrl:fired-rule context="rsm:ExchangedDocument/ram:TypeCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' 80 81 82 83 84 130 202 203 204 211 261 262 295 296 308 325 326 380 381 383 384 385 386 387 388 389 390 393 394 395 396 420 456 457 458 527 532 575 623 633 751 780 935 ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' 80 81 82 83 84 130 202 203 204 211 261 262 295 296 308 325 326 380 381 383 384 385 386 387 388 389 390 393 394 395 396 420 456 457 458 527 532 575 623 633 751 780 935 ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-01</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-01]-The document type code MUST be coded by the invoice and credit note related code lists of UNTDID 1001.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="@currencyID" mode="M12" priority="1020">
+        <svrl:fired-rule context="@currencyID"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' AED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BBD BDT BGN BHD BIF BMD BND BOB BOV BRL BSD BTN BWP 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 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 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 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 ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' AED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BBD BDT BGN BHD BIF BMD BND BOB BOV BRL BSD BTN BWP 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 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 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 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 ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-03</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-03]-currencyID MUST be coded using ISO code list 4217 alpha-3</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:InvoiceCurrencyCode" mode="M12" priority="1019">
+        <svrl:fired-rule context="ram:InvoiceCurrencyCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' AED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BBD BDT BGN BHD BIF BMD BND BOB BOV BRL BSD BTN BWP 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 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 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 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 ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' AED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BBD BDT BGN BHD BIF BMD BND BOB BOV BRL BSD BTN BWP 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 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 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 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 ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-04</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-04]-Invoice currency code MUST be coded using ISO code list 4217 alpha-3</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:TaxCurrencyCode" mode="M12" priority="1018">
+        <svrl:fired-rule context="ram:TaxCurrencyCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' AED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BBD BDT BGN BHD BIF BMD BND BOB BOV BRL BSD BTN BWP 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 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 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 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 ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' AED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BBD BDT BGN BHD BIF BMD BND BOB BOV BRL BSD BTN BWP 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 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 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 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 ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-05</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-05]-Tax currency code MUST be coded using ISO code list 4217 alpha-3</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:DueDateTypeCode" mode="M12" priority="1017">
+        <svrl:fired-rule context="ram:DueDateTypeCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' 5 29 72 ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' 5 29 72 ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-06</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-06]-Value added tax point date code MUST be coded using a restriction of UNTDID 2475.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:ReferenceTypeCode" mode="M12" priority="1016">
+        <svrl:fired-rule context="ram:ReferenceTypeCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' AAA AAB AAC AAD AAE AAF AAG AAH AAI AAJ AAK AAL AAM AAN AAO AAP AAQ AAR AAS AAT AAU AAV AAW AAX AAY AAZ ABA ABB ABC ABD ABE ABF ABG ABH ABI ABJ ABK ABL ABM ABN ABO ABP ABQ ABR ABS ABT ABU ABV ABW ABX ABY ABZ AC ACA ACB ACC ACD ACE ACF ACG ACH ACI ACJ ACK ACL ACN ACO ACP ACQ ACR ACT ACU ACV ACW ACX ACY ACZ ADA ADB ADC ADD ADE ADF ADG ADI ADJ ADK ADL ADM ADN ADO ADP ADQ ADT ADU ADV ADW ADX ADY ADZ AE AEA AEB AEC AED AEE AEF AEG AEH AEI AEJ AEK AEL AEM AEN AEO AEP AEQ AER AES AET AEU AEV AEW AEX AEY AEZ AF AFA AFB AFC AFD AFE AFF AFG AFH AFI AFJ AFK AFL AFM AFN AFO AFP AFQ AFR AFS AFT AFU AFV AFW AFX AFY AFZ AGA AGB AGC AGD AGE AGF AGG AGH AGI AGJ AGK AGL AGM AGN AGO AGP AGQ AGR AGS AGT AGU AGV AGW AGX AGY AGZ AHA AHB AHC AHD AHE AHF AHG AHH AHI AHJ AHK AHL AHM AHN AHO AHP AHQ AHR AHS AHT AHU AHV AHX AHY AHZ AIA AIB AIC AID AIE AIF AIG AIH AII AIJ AIK AIL AIM AIN AIO AIP AIQ AIR AIS AIT AIU AIV AIW AIX AIY AIZ AJA AJB AJC AJD AJE AJF AJG AJH AJI AJJ AJK AJL AJM AJN AJO AJP AJQ AJR AJS AJT AJU AJV AJW AJX AJY AJZ AKA AKB AKC AKD AKE AKF AKG AKH AKI AKJ AKK AKL AKM AKN AKO AKP AKQ AKR AKS AKT AKU AKV AKW AKX AKY AKZ ALA ALB ALC ALD ALE ALF ALG ALH ALI ALJ ALK ALL ALM ALN ALO ALP ALQ ALR ALS ALT ALU ALV ALW ALX ALY ALZ AMA AMB AMC AMD AME AMF AMG AMH AMI AMJ AMK AML AMM AMN AMO AMP AMQ AMR AMS AMT AMU AMV AMW AMX AMY AMZ ANA ANB ANC AND ANE ANF ANG ANH ANI ANJ ANK ANL ANM ANN ANO ANP ANQ ANR ANS ANT ANU ANV ANW ANX ANY AOA AOD AOE AOF AOG AOH AOI AOJ AOK AOL AOM AON AOO AOP AOQ AOR AOS AOT AOU AOV AOW AOX AOY AOZ AP APA APB APC APD APE APF APG APH API APJ APK APL APM APN APO APP APQ APR APS APT APU APV APW APX APY APZ AQA AQB AQC AQD AQE AQF AQG AQH AQI AQJ AQK AQL AQM AQN AQO AQP AQQ AQR AQS AQT AQU AQV AQW AQX AQY AQZ ARA ARB ARC ARD ARE ARF ARG ARH ARI ARJ ARK ARL ARM ARN ARO ARP ARQ ARR ARS ART ARU ARV ARW ARX ARY ARZ ASA ASB ASC ASD ASE ASF ASG ASH ASI ASJ ASK ASL ASM ASN ASO ASP ASQ ASR ASS AST ASU ASV ASW ASX ASY ASZ ATA ATB ATC ATD ATE ATF ATG ATH ATI ATJ ATK ATL ATM ATN ATO ATP ATQ ATR ATS ATT ATU ATV ATW ATX ATY ATZ AU AUA AUB AUC AUD AUE AUF AUG AUH AUI AUJ AUK AUL AUM AUN AUO AUP AUQ AUR AUS AUT AUU AUV AUW AUX AUY AUZ AV AVA AVB AVC AVD AVE AVF AVG AVH AVI AVJ AVK AVL AVM AVN AVO AVP AVQ AVR AVS AVT AVU AVV AVW AVX AVY AVZ AWA AWB AWC AWD AWE AWF AWG AWH AWI AWJ AWK AWL AWM AWN AWO AWP AWQ AWR AWS AWT AWU AWV AWW AWX AWY AWZ AXA AXB AXC AXD AXE AXF AXG AXH AXI AXJ AXK AXL AXM AXN AXO AXP AXQ AXR AXS BA BC BD BE BH BM BN BO BR BT BTP BW CAS CAT CAU CAV CAW CAX CAY CAZ CBA CBB CD CEC CED CFE CFF CFO CG CH CK CKN CM CMR CN CNO COF CP CR CRN CS CST CT CU CV CW CZ DA DAN DB DI DL DM DQ DR EA EB ED EE EEP EI EN EQ ER ERN ET EX FC FF FI FLW FN FO FS FT FV FX GA GC GD GDN GN HS HWB IA IB ICA ICE ICO II IL INB INN INO IP IS IT IV JB JE LA LAN LAR LB LC LI LO LRC LS MA MB MF MG MH MR MRN MS MSS MWB NA NF OH OI ON OP OR PB PC PD PE PF PI PK PL POR PP PQ PR PS PW PY RA RC RCN RE REN RF RR RT SA SB SD SE SEA SF SH SI SM SN SP SQ SRN SS STA SW SZ TB TCR TE TF TI TIN TL TN TP UAR UC UCN UN UO URI VA VC VGR VM VN VON VOR VP VR VS VT VV WE WM WN WR WS WY XA XC XP ZZZ ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' AAA AAB AAC AAD AAE AAF AAG AAH AAI AAJ AAK AAL AAM AAN AAO AAP AAQ AAR AAS AAT AAU AAV AAW AAX AAY AAZ ABA ABB ABC ABD ABE ABF ABG ABH ABI ABJ ABK ABL ABM ABN ABO ABP ABQ ABR ABS ABT ABU ABV ABW ABX ABY ABZ AC ACA ACB ACC ACD ACE ACF ACG ACH ACI ACJ ACK ACL ACN ACO ACP ACQ ACR ACT ACU ACV ACW ACX ACY ACZ ADA ADB ADC ADD ADE ADF ADG ADI ADJ ADK ADL ADM ADN ADO ADP ADQ ADT ADU ADV ADW ADX ADY ADZ AE AEA AEB AEC AED AEE AEF AEG AEH AEI AEJ AEK AEL AEM AEN AEO AEP AEQ AER AES AET AEU AEV AEW AEX AEY AEZ AF AFA AFB AFC AFD AFE AFF AFG AFH AFI AFJ AFK AFL AFM AFN AFO AFP AFQ AFR AFS AFT AFU AFV AFW AFX AFY AFZ AGA AGB AGC AGD AGE AGF AGG AGH AGI AGJ AGK AGL AGM AGN AGO AGP AGQ AGR AGS AGT AGU AGV AGW AGX AGY AGZ AHA AHB AHC AHD AHE AHF AHG AHH AHI AHJ AHK AHL AHM AHN AHO AHP AHQ AHR AHS AHT AHU AHV AHX AHY AHZ AIA AIB AIC AID AIE AIF AIG AIH AII AIJ AIK AIL AIM AIN AIO AIP AIQ AIR AIS AIT AIU AIV AIW AIX AIY AIZ AJA AJB AJC AJD AJE AJF AJG AJH AJI AJJ AJK AJL AJM AJN AJO AJP AJQ AJR AJS AJT AJU AJV AJW AJX AJY AJZ AKA AKB AKC AKD AKE AKF AKG AKH AKI AKJ AKK AKL AKM AKN AKO AKP AKQ AKR AKS AKT AKU AKV AKW AKX AKY AKZ ALA ALB ALC ALD ALE ALF ALG ALH ALI ALJ ALK ALL ALM ALN ALO ALP ALQ ALR ALS ALT ALU ALV ALW ALX ALY ALZ AMA AMB AMC AMD AME AMF AMG AMH AMI AMJ AMK AML AMM AMN AMO AMP AMQ AMR AMS AMT AMU AMV AMW AMX AMY AMZ ANA ANB ANC AND ANE ANF ANG ANH ANI ANJ ANK ANL ANM ANN ANO ANP ANQ ANR ANS ANT ANU ANV ANW ANX ANY AOA AOD AOE AOF AOG AOH AOI AOJ AOK AOL AOM AON AOO AOP AOQ AOR AOS AOT AOU AOV AOW AOX AOY AOZ AP APA APB APC APD APE APF APG APH API APJ APK APL APM APN APO APP APQ APR APS APT APU APV APW APX APY APZ AQA AQB AQC AQD AQE AQF AQG AQH AQI AQJ AQK AQL AQM AQN AQO AQP AQQ AQR AQS AQT AQU AQV AQW AQX AQY AQZ ARA ARB ARC ARD ARE ARF ARG ARH ARI ARJ ARK ARL ARM ARN ARO ARP ARQ ARR ARS ART ARU ARV ARW ARX ARY ARZ ASA ASB ASC ASD ASE ASF ASG ASH ASI ASJ ASK ASL ASM ASN ASO ASP ASQ ASR ASS AST ASU ASV ASW ASX ASY ASZ ATA ATB ATC ATD ATE ATF ATG ATH ATI ATJ ATK ATL ATM ATN ATO ATP ATQ ATR ATS ATT ATU ATV ATW ATX ATY ATZ AU AUA AUB AUC AUD AUE AUF AUG AUH AUI AUJ AUK AUL AUM AUN AUO AUP AUQ AUR AUS AUT AUU AUV AUW AUX AUY AUZ AV AVA AVB AVC AVD AVE AVF AVG AVH AVI AVJ AVK AVL AVM AVN AVO AVP AVQ AVR AVS AVT AVU AVV AVW AVX AVY AVZ AWA AWB AWC AWD AWE AWF AWG AWH AWI AWJ AWK AWL AWM AWN AWO AWP AWQ AWR AWS AWT AWU AWV AWW AWX AWY AWZ AXA AXB AXC AXD AXE AXF AXG AXH AXI AXJ AXK AXL AXM AXN AXO AXP AXQ AXR AXS BA BC BD BE BH BM BN BO BR BT BTP BW CAS CAT CAU CAV CAW CAX CAY CAZ CBA CBB CD CEC CED CFE CFF CFO CG CH CK CKN CM CMR CN CNO COF CP CR CRN CS CST CT CU CV CW CZ DA DAN DB DI DL DM DQ DR EA EB ED EE EEP EI EN EQ ER ERN ET EX FC FF FI FLW FN FO FS FT FV FX GA GC GD GDN GN HS HWB IA IB ICA ICE ICO II IL INB INN INO IP IS IT IV JB JE LA LAN LAR LB LC LI LO LRC LS MA MB MF MG MH MR MRN MS MSS MWB NA NF OH OI ON OP OR PB PC PD PE PF PI PK PL POR PP PQ PR PS PW PY RA RC RCN RE REN RF RR RT SA SB SD SE SEA SF SH SI SM SN SP SQ SRN SS STA SW SZ TB TCR TE TF TI TIN TL TN TP UAR UC UCN UN UO URI VA VC VGR VM VN VON VOR VP VR VS VT VV WE WM WN WR WS WY XA XC XP ZZZ ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-07</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-07]-Object identifier identification scheme identifier MUST be coded using a restriction of UNTDID 1153.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:SubjectCode" mode="M12" priority="1015">
+        <svrl:fired-rule context="ram:SubjectCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' AAA AAB AAC AAD AAE AAF AAG AAI AAJ AAK AAL AAM AAN AAO AAP AAQ AAR AAS AAT AAU AAV AAW AAX AAY AAZ ABA ABB ABC ABD ABE ABF ABG ABH ABI ABJ ABK ABL ABM ABN ABO ABP ABQ ABR ABS ABT ABU ABV ABW ABX ABZ ACA ACB ACC ACD ACE ACF ACG ACH ACI ACJ ACK ACL ACM ACN ACO ACP ACQ ACR ACS ACT ACU ACV ACW ACX ACY ACZ ADA ADB ADC ADD ADE ADF ADG ADH ADI ADJ ADK ADL ADM ADN ADO ADP ADQ ADR ADS ADT ADU ADV ADW ADX ADY ADZ AEA AEB AEC AED AEE AEF AEG AEH AEI AEJ AEK AEL AEM AEN AEO AEP AEQ AER AES AET AEU AEV AEW AEX AEY AEZ AFA AFB AFC AFD AFE AFF AFG AFH AFI AFJ AFK AFL AFM AFN AFO AFP AFQ AFR AFS AFT AFU AFV AFW AFX AFY AFZ AGA AGB AGC AGD AGE AGF AGG AGH AGI AGJ AGK AGL AGM AGN AGO AGP AGQ AGR AGS AGT AGU AGV AGW AGX AGY AGZ AHA AHB AHC AHD AHE AHF AHG AHH AHI AHJ AHK AHL AHM AHN AHO AHP AHQ AHR AHS AHT AHU AHV AHW AHX AHY AHZ AIA AIB AIC AID AIE AIF AIG AIH AII AIJ AIK AIL AIM AIN AIO AIP AIQ AIR AIS AIT AIU AIV AIW AIX AIY AIZ AJA AJB ALC ALD ALE ALF ALG ALH ALI ALJ ALK ALL ALM ALN ALO ALP ALQ ARR ARS AUT AUU AUV AUW AUX AUY AUZ AVA AVB AVC AVD AVE AVF BAG BAH BAI BAJ BAK BAL BAM BAN BAO BAP BAQ BAR BAS BLC BLD BLE BLF BLG BLH BLI BLJ BLK BLL BLM BLN BLO BLP BLQ BLR BLS BLT BLU BLV BLW BLX BLY BLZ BMA BMB BMC BMD BME CCI CEX CHG CIP CLP CLR COI CUR CUS DAR DCL DEL DIN DOC DUT EUR FBC GBL GEN GS7 HAN HAZ ICN IIN IMI IND INS INV IRP ITR ITS LAN LIN LOI MCO MDH MKS ORI OSI PAC PAI PAY PKG PKT PMD PMT PRD PRF PRI PUR QIN QQD QUT RAH REG RET REV RQR SAF SIC SIN SLR SPA SPG SPH SPP SPT SRN SSR SUR TCA TDT TRA TRR TXD WHI ZZZ ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' AAA AAB AAC AAD AAE AAF AAG AAI AAJ AAK AAL AAM AAN AAO AAP AAQ AAR AAS AAT AAU AAV AAW AAX AAY AAZ ABA ABB ABC ABD ABE ABF ABG ABH ABI ABJ ABK ABL ABM ABN ABO ABP ABQ ABR ABS ABT ABU ABV ABW ABX ABZ ACA ACB ACC ACD ACE ACF ACG ACH ACI ACJ ACK ACL ACM ACN ACO ACP ACQ ACR ACS ACT ACU ACV ACW ACX ACY ACZ ADA ADB ADC ADD ADE ADF ADG ADH ADI ADJ ADK ADL ADM ADN ADO ADP ADQ ADR ADS ADT ADU ADV ADW ADX ADY ADZ AEA AEB AEC AED AEE AEF AEG AEH AEI AEJ AEK AEL AEM AEN AEO AEP AEQ AER AES AET AEU AEV AEW AEX AEY AEZ AFA AFB AFC AFD AFE AFF AFG AFH AFI AFJ AFK AFL AFM AFN AFO AFP AFQ AFR AFS AFT AFU AFV AFW AFX AFY AFZ AGA AGB AGC AGD AGE AGF AGG AGH AGI AGJ AGK AGL AGM AGN AGO AGP AGQ AGR AGS AGT AGU AGV AGW AGX AGY AGZ AHA AHB AHC AHD AHE AHF AHG AHH AHI AHJ AHK AHL AHM AHN AHO AHP AHQ AHR AHS AHT AHU AHV AHW AHX AHY AHZ AIA AIB AIC AID AIE AIF AIG AIH AII AIJ AIK AIL AIM AIN AIO AIP AIQ AIR AIS AIT AIU AIV AIW AIX AIY AIZ AJA AJB ALC ALD ALE ALF ALG ALH ALI ALJ ALK ALL ALM ALN ALO ALP ALQ ARR ARS AUT AUU AUV AUW AUX AUY AUZ AVA AVB AVC AVD AVE AVF BAG BAH BAI BAJ BAK BAL BAM BAN BAO BAP BAQ BAR BAS BLC BLD BLE BLF BLG BLH BLI BLJ BLK BLL BLM BLN BLO BLP BLQ BLR BLS BLT BLU BLV BLW BLX BLY BLZ BMA BMB BMC BMD BME CCI CEX CHG CIP CLP CLR COI CUR CUS DAR DCL DEL DIN DOC DUT EUR FBC GBL GEN GS7 HAN HAZ ICN IIN IMI IND INS INV IRP ITR ITS LAN LIN LOI MCO MDH MKS ORI OSI PAC PAI PAY PKG PKT PMD PMT PRD PRF PRI PUR QIN QQD QUT RAH REG RET REV RQR SAF SIC SIN SLR SPA SPG SPH SPP SPT SRN SSR SUR TCA TDT TRA TRR TXD WHI ZZZ ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-08</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-08]-Subject Code MUST be coded using a restriction of UNTDID 4451.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="//ram:GlobalID/@schemeID[not(ancestor::ram:SpecifiedTradeProduct)]" mode="M12" priority="1014">
+        <svrl:fired-rule context="//ram:GlobalID/@schemeID[not(ancestor::ram:SpecifiedTradeProduct)]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 0090 0091 0093 0094 0095 0096 0097 0098 0099 0100 0101 0102 0104 0105 0106 0107 0108 0109 0110 0111 0112 0113 0114 0115 0116 0117 0118 0119 0120 0121 0122 0123 0124 0125 0126 0127 0128 0129 0130 0131 0132 0133 0134 0135 0136 0137 0138 0139 0140 0141 0142 0143 0144 0145 0146 0147 0148 0149 0150 0151 0152 0153 0154 0155 0156 0157 0158 0159 0160 0161 0162 0163 0164 0165 0166 0167 0168 0169 0170 0171 0172 0173 0174 0175 0176 0177 0178 0179 0180 0183 0184 0185 0186 0187 0188 0189 0190 0191 0192 0193 0194 0195 0196 0197 0198 0199 0200 0201 0202 0203 0204 ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 0090 0091 0093 0094 0095 0096 0097 0098 0099 0100 0101 0102 0104 0105 0106 0107 0108 0109 0110 0111 0112 0113 0114 0115 0116 0117 0118 0119 0120 0121 0122 0123 0124 0125 0126 0127 0128 0129 0130 0131 0132 0133 0134 0135 0136 0137 0138 0139 0140 0141 0142 0143 0144 0145 0146 0147 0148 0149 0150 0151 0152 0153 0154 0155 0156 0157 0158 0159 0160 0161 0162 0163 0164 0165 0166 0167 0168 0169 0170 0171 0172 0173 0174 0175 0176 0177 0178 0179 0180 0183 0184 0185 0186 0187 0188 0189 0190 0191 0192 0193 0194 0195 0196 0197 0198 0199 0200 0201 0202 0203 0204 ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-10</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-10]-Any identifier identification scheme identifier MUST be coded using one of the ISO 6523 ICD list.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:ID/@schemeID[not(ancestor::ram:SpecifiedTaxRegistration)]" mode="M12" priority="1013">
+        <svrl:fired-rule context="ram:ID/@schemeID[not(ancestor::ram:SpecifiedTaxRegistration)]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 0090 0091 0093 0094 0095 0096 0097 0098 0099 0100 0101 0102 0104 0105 0106 0107 0108 0109 0110 0111 0112 0113 0114 0115 0116 0117 0118 0119 0120 0121 0122 0123 0124 0125 0126 0127 0128 0129 0130 0131 0132 0133 0134 0135 0136 0137 0138 0139 0140 0141 0142 0143 0144 0145 0146 0147 0148 0149 0150 0151 0152 0153 0154 0155 0156 0157 0158 0159 0160 0161 0162 0163 0164 0165 0166 0167 0168 0169 0170 0171 0172 0173 0174 0175 0176 0177 0178 0179 0180 0183 0184 0185 0186 0187 0188 0189 0190 0191 0192 0193 0194 0195 0196 0197 0198 0199 0200 0201 0202 0203 0204 ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 0090 0091 0093 0094 0095 0096 0097 0098 0099 0100 0101 0102 0104 0105 0106 0107 0108 0109 0110 0111 0112 0113 0114 0115 0116 0117 0118 0119 0120 0121 0122 0123 0124 0125 0126 0127 0128 0129 0130 0131 0132 0133 0134 0135 0136 0137 0138 0139 0140 0141 0142 0143 0144 0145 0146 0147 0148 0149 0150 0151 0152 0153 0154 0155 0156 0157 0158 0159 0160 0161 0162 0163 0164 0165 0166 0167 0168 0169 0170 0171 0172 0173 0174 0175 0176 0177 0178 0179 0180 0183 0184 0185 0186 0187 0188 0189 0190 0191 0192 0193 0194 0195 0196 0197 0198 0199 0200 0201 0202 0203 0204 ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-11</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-11]-Any registration identifier identification scheme identifier MUST be coded using one of the ISO 6523 ICD list.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:ClassCode/@listID" mode="M12" priority="1012">
+        <svrl:fired-rule context="ram:ClassCode/@listID"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ CC CG CL CR CV DR DW EC EF EN FS GB GN GS HS IB IN IS IT IZ MA MF MN MP NB ON PD PL PO PV QS RC RN RU RY SA SG SK SN SRS SRT SRU SRV SRW SRX SRY SRZ SS SSA SSB SSC SSD SSE SSF SSG SSH SSI SSJ SSK SSL SSM SSN SSO SSP SSQ SSR SSS SST SSU SSV SSW SSX SSY SSZ ST STA STB STC STD STE STF STG STH STI STJ STK STL STM STN STO STP STQ STR STS STT STU STV STW STX STY STZ SUA SUB SUC SUD SUE SUF SUG SUH SUI SUJ SUK SUL SUM TG TSN TSO TSP TSQ TSR TSS TST UA UP VN VP VS VX ZZZ ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ CC CG CL CR CV DR DW EC EF EN FS GB GN GS HS IB IN IS IT IZ MA MF MN MP NB ON PD PL PO PV QS RC RN RU RY SA SG SK SN SRS SRT SRU SRV SRW SRX SRY SRZ SS SSA SSB SSC SSD SSE SSF SSG SSH SSI SSJ SSK SSL SSM SSN SSO SSP SSQ SSR SSS SST SSU SSV SSW SSX SSY SSZ ST STA STB STC STD STE STF STG STH STI STJ STK STL STM STN STO STP STQ STR STS STT STU STV STW STX STY STZ SUA SUB SUC SUD SUE SUF SUG SUH SUI SUJ SUK SUL SUM TG TSN TSO TSP TSQ TSR TSS TST UA UP VN VP VS VX ZZZ ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-13</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-13]-Item classification identifier identification scheme identifier MUST be coded using one of the UNTDID 7143 list.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:CountryID" mode="M12" priority="1011">
+        <svrl:fired-rule context="ram:CountryID"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' 1A AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BL BJ BM BN BO BQ BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SX SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' 1A AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BL BJ BM BN BO BQ BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SX SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-14</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-14]-Country codes in an invoice MUST be coded using ISO code list 3166-1</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:OriginTradeCountry/ram:ID" mode="M12" priority="1010">
+        <svrl:fired-rule context="ram:OriginTradeCountry/ram:ID"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BL BJ BM BN BO BQ BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SX SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BL BJ BM BN BO BQ BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SX SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-15</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-15]-Country codes in an invoice MUST be coded using ISO code list 3166-1</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode" mode="M12" priority="1009">
+        <svrl:fired-rule context="ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 74 75 76 77 78 91 92 93 94 95 96 97 ZZZ ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 74 75 76 77 78 91 92 93 94 95 96 97 ZZZ ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-16</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-16]-Payment means in an invoice MUST be coded using UNTDID 4461 code list</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:CategoryTradeTax/ram:CategoryCode" mode="M12" priority="1008">
+        <svrl:fired-rule context="ram:CategoryTradeTax/ram:CategoryCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' AE L M E S Z G O K ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' AE L M E S Z G O K ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-17</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-17]-Invoice tax categories MUST be coded using UNCL 5305 code list</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:ApplicableTradeTax/ram:CategoryCode" mode="M12" priority="1007">
+        <svrl:fired-rule context="ram:ApplicableTradeTax/ram:CategoryCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' AE L M E S Z G O K ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' AE L M E S Z G O K ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-18</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-18]-Invoice tax categories MUST be coded using UNCL 5305 code list</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = false()]/ram:ReasonCode" mode="M12" priority="1006">
+        <svrl:fired-rule context="ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = false()]/ram:ReasonCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' 41 42 60 62 63 64 65 66 67 68 70 71 88 95 100 102 103 104 ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' 41 42 60 62 63 64 65 66 67 68 70 71 88 95 100 102 103 104 ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-19</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-19]-Coded allowance reasons MUST belong to the UNCL 5189 code list</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = true()]/ram:ReasonCode" mode="M12" priority="1005">
+        <svrl:fired-rule context="ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = true()]/ram:ReasonCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' AA AAA AAC AAD AAE AAF AAH AAI AAS AAT AAV AAY AAZ ABA ABB ABC ABD ABF ABK ABL ABN ABR ABS ABT ABU ACF ACG ACH ACI ACJ ACK ACL ACM ACS ADC ADE ADJ ADK ADL ADM ADN ADO ADP ADQ ADR ADT ADW ADY ADZ AEA AEB AEC AED AEF AEH AEI AEJ AEK AEL AEM AEN AEO AEP AES AET AEU AEV AEW AEX AEY AEZ AJ AU CA CAB CAD CAE CAF CAI CAJ CAK CAL CAM CAN CAO CAP CAQ CAR CAS CAT CAU CAV CAW CAX CAY CAZ CD CG CS CT DAB DAD DAC DAF DAG DAH DAI DAJ DAK DAL DAM DAN DAO DAP DAQ DL EG EP ER FAA FAB FAC FC FH FI GAA HAA HD HH IAA IAB ID IF IR IS KO L1 LA LAA LAB LF MAE MI ML NAA OA PA PAA PC PL RAB RAC RAD RAF RE RF RH RV SA SAA SAD SAE SAI SG SH SM SU TAB TAC TT TV V1 V2 WH XAA YY ZZZ ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' AA AAA AAC AAD AAE AAF AAH AAI AAS AAT AAV AAY AAZ ABA ABB ABC ABD ABF ABK ABL ABN ABR ABS ABT ABU ACF ACG ACH ACI ACJ ACK ACL ACM ACS ADC ADE ADJ ADK ADL ADM ADN ADO ADP ADQ ADR ADT ADW ADY ADZ AEA AEB AEC AED AEF AEH AEI AEJ AEK AEL AEM AEN AEO AEP AES AET AEU AEV AEW AEX AEY AEZ AJ AU CA CAB CAD CAE CAF CAI CAJ CAK CAL CAM CAN CAO CAP CAQ CAR CAS CAT CAU CAV CAW CAX CAY CAZ CD CG CS CT DAB DAD DAC DAF DAG DAH DAI DAJ DAK DAL DAM DAN DAO DAP DAQ DL EG EP ER FAA FAB FAC FC FH FI GAA HAA HD HH IAA IAB ID IF IR IS KO L1 LA LAA LAB LF MAE MI ML NAA OA PA PAA PC PL RAB RAC RAD RAF RE RF RH RV SA SAA SAD SAE SAI SG SH SM SU TAB TAC TT TV V1 V2 WH XAA YY ZZZ ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-20</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-20]-Coded charge reasons MUST belong to the UNCL 7161 code list</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:SpecifiedTradeProduct/ram:GlobalID/@schemeID" mode="M12" priority="1004">
+        <svrl:fired-rule context="ram:SpecifiedTradeProduct/ram:GlobalID/@schemeID"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 0090 0091 0093 0094 0095 0096 0097 0098 0099 0100 0101 0102 0104 0105 0106 0107 0108 0109 0110 0111 0112 0113 0114 0115 0116 0117 0118 0119 0120 0121 0122 0123 0124 0125 0126 0127 0128 0129 0130 0131 0132 0133 0134 0135 0136 0137 0138 0139 0140 0141 0142 0143 0144 0145 0146 0147 0148 0149 0150 0151 0152 0153 0154 0155 0156 0157 0158 0159 0160 0161 0162 0163 0164 0165 0166 0167 0168 0169 0170 0171 0172 0173 0174 0175 0176 0177 0178 0179 0180 0183 0184 0185 0186 0187 0188 0189 0190 0191 0192 0193 0194 0195 0196 0197 0198 0199 0200 0201 0202 0203 0204 ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 0090 0091 0093 0094 0095 0096 0097 0098 0099 0100 0101 0102 0104 0105 0106 0107 0108 0109 0110 0111 0112 0113 0114 0115 0116 0117 0118 0119 0120 0121 0122 0123 0124 0125 0126 0127 0128 0129 0130 0131 0132 0133 0134 0135 0136 0137 0138 0139 0140 0141 0142 0143 0144 0145 0146 0147 0148 0149 0150 0151 0152 0153 0154 0155 0156 0157 0158 0159 0160 0161 0162 0163 0164 0165 0166 0167 0168 0169 0170 0171 0172 0173 0174 0175 0176 0177 0178 0179 0180 0183 0184 0185 0186 0187 0188 0189 0190 0191 0192 0193 0194 0195 0196 0197 0198 0199 0200 0201 0202 0203 0204 ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-21</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-21]-Item standard identifier scheme identifier MUST belong to the ISO 6523 ICD
+                        code list</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:ExemptionReasonCode" mode="M12" priority="1003">
+        <svrl:fired-rule context="ram:ExemptionReasonCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' VATEX-EU-132 VATEX-EU-132-1A VATEX-EU-132-1B VATEX-EU-132-1C VATEX-EU-132-1D VATEX-EU-132-1E VATEX-EU-132-1F VATEX-EU-132-1G VATEX-EU-132-1H VATEX-EU-132-1I VATEX-EU-132-1J VATEX-EU-132-1K VATEX-EU-132-1L VATEX-EU-132-1M VATEX-EU-132-1N VATEX-EU-132-1O VATEX-EU-132-1P VATEX-EU-132-1Q VATEX-EU-143 VATEX-EU-143-1A VATEX-EU-143-1B VATEX-EU-143-1C VATEX-EU-143-1D VATEX-EU-143-1E VATEX-EU-143-1F VATEX-EU-143-1FA VATEX-EU-143-1G VATEX-EU-143-1H VATEX-EU-143-1I VATEX-EU-143-1J VATEX-EU-143-1K VATEX-EU-143-1L VATEX-EU-309 VATEX-EU-148 VATEX-EU-148-A VATEX-EU-148-B VATEX-EU-148-C VATEX-EU-148-D VATEX-EU-148-E VATEX-EU-148-F VATEX-EU-148-G VATEX-EU-151 VATEX-EU-151-1A VATEX-EU-151-1AA VATEX-EU-151-1B VATEX-EU-151-1C VATEX-EU-151-1D VATEX-EU-151-1E VATEX-EU-G VATEX-EU-O VATEX-EU-IC VATEX-EU-AE VATEX-EU-D VATEX-EU-F VATEX-EU-I VATEX-EU-J ', concat(' ', normalize-space(upper-case(.)), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' VATEX-EU-132 VATEX-EU-132-1A VATEX-EU-132-1B VATEX-EU-132-1C VATEX-EU-132-1D VATEX-EU-132-1E VATEX-EU-132-1F VATEX-EU-132-1G VATEX-EU-132-1H VATEX-EU-132-1I VATEX-EU-132-1J VATEX-EU-132-1K VATEX-EU-132-1L VATEX-EU-132-1M VATEX-EU-132-1N VATEX-EU-132-1O VATEX-EU-132-1P VATEX-EU-132-1Q VATEX-EU-143 VATEX-EU-143-1A VATEX-EU-143-1B VATEX-EU-143-1C VATEX-EU-143-1D VATEX-EU-143-1E VATEX-EU-143-1F VATEX-EU-143-1FA VATEX-EU-143-1G VATEX-EU-143-1H VATEX-EU-143-1I VATEX-EU-143-1J VATEX-EU-143-1K VATEX-EU-143-1L VATEX-EU-309 VATEX-EU-148 VATEX-EU-148-A VATEX-EU-148-B VATEX-EU-148-C VATEX-EU-148-D VATEX-EU-148-E VATEX-EU-148-F VATEX-EU-148-G VATEX-EU-151 VATEX-EU-151-1A VATEX-EU-151-1AA VATEX-EU-151-1B VATEX-EU-151-1C VATEX-EU-151-1D VATEX-EU-151-1E VATEX-EU-G VATEX-EU-O VATEX-EU-IC VATEX-EU-AE VATEX-EU-D VATEX-EU-F VATEX-EU-I VATEX-EU-J ', concat(' ', normalize-space(upper-case(.)), ' '))))">
+                    <xsl:attribute name="id">BR-CL-22</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-22]-Tax exemption reason code identifier scheme identifier MUST belong to the CEF VATEX code list</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="@unitCode" mode="M12" priority="1002">
+        <svrl:fired-rule context="@unitCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(.), ' ')) and contains(' 10 11 13 14 15 20 21 22 23 24 25 27 28 33 34 35 37 38 40 41 56 57 58 59 60 61 64 66 74 76 77 78 80 81 84 85 87 89 91 1I 2A 2B 2C 2G 2H 2I 2J 2K 2L 2M 2N 2P 2Q 2R 2U 2X 2Y 2Z 3B 3C 4C 4G 4H 4K 4L 4M 4N 4O 4P 4Q 4R 4T 4U 4W 4X 5A 5B 5E 5J A1 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19 A2 A20 A21 A22 A23 A24 A25 A26 A27 A28 A29 A3 A30 A31 A32 A33 A34 A35 A36 A37 A38 A39 A4 A40 A41 A42 A43 A44 A45 A47 A48 A49 A5 A50 A51 A52 A53 A54 A55 A56 A57 A58 A59 A6 A60 A61 A62 A63 A64 A65 A66 A67 A68 A69 A7 A70 A71 A73 A74 A75 A76 A77 A78 A79 A8 A80 A81 A82 A83 A84 A85 A86 A87 A88 A89 A9 A90 A91 A93 A94 A95 A96 A97 A98 A99 AA AB ACR ACT AD AE AH AI AK AL AMH AMP ANN APZ AQ ARE AS ASM ASU ATM ATT AY AZ B1 B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 B20 B21 B22 B23 B24 B25 B26 B27 B28 B29 B3 B30 B31 B32 B33 B34 B35 B36 B37 B38 B39 B4 B40 B41 B42 B43 B44 B45 B46 B47 B48 B49 B50 B51 B52 B53 B54 B55 B56 B57 B58 B59 B60 B61 B62 B63 B64 B65 B66 B67 B68 B69 B7 B70 B71 B72 B73 B74 B75 B76 B77 B78 B79 B8 B80 B81 B82 B83 B84 B85 B86 B87 B88 B89 B90 B91 B92 B93 B94 B95 B96 B97 B98 B99 BAR BB BFT BHP BIL BLD BLL BP BQL BTU BUA BUI C0 C10 C11 C12 C13 C14 C15 C16 C17 C18 C19 C20 C21 C22 C23 C24 C25 C26 C27 C28 C29 C3 C30 C31 C32 C33 C34 C35 C36 C37 C38 C39 C40 C41 C42 C43 C44 C45 C46 C47 C48 C49 C50 C51 C52 C53 C54 C55 C56 C57 C58 C59 C60 C61 C62 C63 C64 C65 C66 C67 C68 C69 C7 C70 C71 C72 C73 C74 C75 C76 C78 C79 C8 C80 C81 C82 C83 C84 C85 C86 C87 C88 C89 C9 C90 C91 C92 C93 C94 C95 C96 C97 C99 CCT CDL CEL CEN CG CGM CKG CLF CLT CMK CMQ CMT CNP CNT COU CTG CTM CTN CUR CWA CWI D03 D04 D1 D10 D11 D12 D13 D15 D16 D17 D18 D19 D2 D20 D21 D22 D23 D24 D25 D26 D27 D29 D30 D31 D32 D33 D34 D35 D36 D37 D38 D39 D41 D42 D43 D44 D45 D46 D47 D48 D49 D5 D50 D51 D52 D53 D54 D55 D56 D57 D58 D59 D6 D60 D61 D62 D63 D65 D68 D69 D70 D71 D72 D73 D74 D75 D76 D77 D78 D80 D81 D82 D83 D85 D86 D87 D88 D89 D9 D91 D93 D94 D95 DAA DAD DAY DB DD DEC DG DJ DLT DMA DMK DMO DMQ DMT DN DPC DPR DPT DRA DRI DRL DT DTN DU DWT DX DZN DZP E01 E07 E08 E09 E10 E11 E12 E14 E15 E16 E17 E18 E19 E20 E21 E22 E23 E25 E27 E28 E30 E31 E32 E33 E34 E35 E36 E37 E38 E39 E4 E40 E41 E42 E43 E44 E45 E46 E47 E48 E49 E50 E51 E52 E53 E54 E55 E56 E57 E58 E59 E60 E61 E62 E63 E64 E65 E66 E67 E68 E69 E70 E71 E72 E73 E74 E75 E76 E77 E78 E79 E80 E81 E82 E83 E84 E85 E86 E87 E88 E89 E90 E91 E92 E93 E94 E95 E96 E97 E98 E99 EA EB EQ F01 F02 F03 F04 F05 F06 F07 F08 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 F32 F33 F34 F35 F36 F37 F38 F39 F40 F41 F42 F43 F44 F45 F46 F47 F48 F49 F50 F51 F52 F53 F54 F55 F56 F57 F58 F59 F60 F61 F62 F63 F64 F65 F66 F67 F68 F69 F70 F71 F72 F73 F74 F75 F76 F77 F78 F79 F80 F81 F82 F83 F84 F85 F86 F87 F88 F89 F90 F91 F92 F93 F94 F95 F96 F97 F98 F99 FAH FAR FBM FC FF FH FIT FL FOT FP FR FS FTK FTQ G01 G04 G05 G06 G08 G09 G10 G11 G12 G13 G14 G15 G16 G17 G18 G19 G2 G20 G21 G23 G24 G25 G26 G27 G28 G29 G3 G30 G31 G32 G33 G34 G35 G36 G37 G38 G39 G40 G41 G42 G43 G44 G45 G46 G47 G48 G49 G50 G51 G52 G53 G54 G55 G56 G57 G58 G59 G60 G61 G62 G63 G64 G65 G66 G67 G68 G69 G70 G71 G72 G73 G74 G75 G76 G77 G78 G79 G80 G81 G82 G83 G84 G85 G86 G87 G88 G89 G90 G91 G92 G93 G94 G95 G96 G97 G98 G99 GB GBQ GDW GE GF GFI GGR GIA GIC GII GIP GJ GL GLD GLI GLL GM GO GP GQ GRM GRN GRO GRT GT GV GWH H03 H04 H05 H06 H07 H08 H09 H10 H11 H12 H13 H14 H15 H16 H18 H19 H20 H21 H22 H23 H24 H25 H26 H27 H28 H29 H30 H31 H32 H33 H34 H35 H36 H37 H38 H39 H40 H41 H42 H43 H44 H45 H46 H47 H48 H49 H50 H51 H52 H53 H54 H55 H56 H57 H58 H59 H60 H61 H62 H63 H64 H65 H66 H67 H68 H69 H70 H71 H72 H73 H74 H75 H76 H77 H78 H79 H80 H81 H82 H83 H84 H85 H87 H88 H89 H90 H91 H92 H93 H94 H95 H96 H98 H99 HA HAR HBA HBX HC HDW HEA HGM HH HIU HJ HKM HLT HM HMQ HMT HN HP HPA HTZ HUR IA IE INH INK INQ ISD IU IV J10 J12 J13 J14 J15 J16 J17 J18 J19 J2 J20 J21 J22 J23 J24 J25 J26 J27 J28 J29 J30 J31 J32 J33 J34 J35 J36 J38 J39 J40 J41 J42 J43 J44 J45 J46 J47 J48 J49 J50 J51 J52 J53 J54 J55 J56 J57 J58 J59 J60 J61 J62 J63 J64 J65 J66 J67 J68 J69 J70 J71 J72 J73 J74 J75 J76 J78 J79 J81 J82 J83 J84 J85 J87 J89 J90 J91 J92 J93 J94 J95 J96 J97 J98 J99 JE JK JM JNT JOU JPS JWL K1 K10 K11 K12 K13 K14 K15 K16 K17 K18 K19 K2 K20 K21 K22 K23 K24 K25 K26 K27 K28 K3 K30 K31 K32 K33 K34 K35 K36 K37 K38 K39 K40 K41 K42 K43 K45 K46 K47 K48 K49 K5 K50 K51 K52 K53 K54 K55 K58 K59 K6 K60 K61 K62 K63 K64 K65 K66 K67 K68 K69 K70 K71 K73 K74 K75 K76 K77 K78 K79 K80 K81 K82 K83 K84 K85 K86 K87 K88 K89 K90 K91 K92 K93 K94 K95 K96 K97 K98 K99 KA KAT KB KBA KCC KDW KEL KGM KGS KHY KHZ KI KIC KIP KJ KJO KL KLK KLX KMA KMH KMK KMQ KMT KNI KNS KNT KO KPA KPH KPO KPP KR KSD KSH KT KTN KUR KVA KVR KVT KW KWH KWO KWT KX L10 L11 L12 L13 L14 L15 L16 L17 L18 L19 L2 L20 L21 L23 L24 L25 L26 L27 L28 L29 L30 L31 L32 L33 L34 L35 L36 L37 L38 L39 L40 L41 L42 L43 L44 L45 L46 L47 L48 L49 L50 L51 L52 L53 L54 L55 L56 L57 L58 L59 L60 L63 L64 L65 L66 L67 L68 L69 L70 L71 L72 L73 L74 L75 L76 L77 L78 L79 L80 L81 L82 L83 L84 L85 L86 L87 L88 L89 L90 L91 L92 L93 L94 L95 L96 L98 L99 LA LAC LBR LBT LD LEF LF LH LK LM LN LO LP LPA LR LS LTN LTR LUB LUM LUX LY M1 M10 M11 M12 M13 M14 M15 M16 M17 M18 M19 M20 M21 M22 M23 M24 M25 M26 M27 M29 M30 M31 M32 M33 M34 M35 M36 M37 M38 M39 M4 M40 M41 M42 M43 M44 M45 M46 M47 M48 M49 M5 M50 M51 M52 M53 M55 M56 M57 M58 M59 M60 M61 M62 M63 M64 M65 M66 M67 M68 M69 M7 M70 M71 M72 M73 M74 M75 M76 M77 M78 M79 M80 M81 M82 M83 M84 M85 M86 M87 M88 M89 M9 M90 M91 M92 M93 M94 M95 M96 M97 M98 M99 MAH MAL MAM MAR MAW MBE MBF MBR MC MCU MD MGM MHZ MIK MIL MIN MIO MIU MLD MLT MMK MMQ MMT MND MON MPA MQH MQS MSK MTK MTQ MTR MTS MVA MWH N1 N10 N11 N12 N13 N14 N15 N16 N17 N18 N19 N20 N21 N22 N23 N24 N25 N26 N27 N28 N29 N3 N30 N31 N32 N33 N34 N35 N36 N37 N38 N39 N40 N41 N42 N43 N44 N45 N46 N47 N48 N49 N50 N51 N52 N53 N54 N55 N56 N57 N58 N59 N60 N61 N62 N63 N64 N65 N66 N67 N68 N69 N70 N71 N72 N73 N74 N75 N76 N77 N78 N79 N80 N81 N82 N83 N84 N85 N86 N87 N88 N89 N90 N91 N92 N93 N94 N95 N96 N97 N98 N99 NA NAR NCL NEW NF NIL NIU NL NMI NMP NPR NPT NQ NR NT NTT NU NX OA ODE OHM ON ONZ OT OZ OZA OZI P1 P10 P11 P12 P13 P14 P15 P16 P17 P18 P19 P2 P20 P21 P22 P23 P24 P25 P26 P27 P28 P29 P30 P31 P32 P33 P34 P35 P36 P37 P38 P39 P40 P41 P42 P43 P44 P45 P46 P47 P48 P49 P5 P50 P51 P52 P53 P54 P55 P56 P57 P58 P59 P60 P61 P62 P63 P64 P65 P66 P67 P68 P69 P70 P71 P72 P73 P74 P75 P76 P77 P78 P79 P80 P81 P82 P83 P84 P85 P86 P87 P88 P89 P90 P91 P92 P93 P94 P95 P96 P97 P98 P99 PAL PD PFL PGL PI PLA PO PQ PR PS PT PTD PTI PTL Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20 Q21 Q22 Q23 Q24 Q25 Q26 Q27 Q28 Q3 QA QAN QB QR QT QTD QTI QTL QTR R1 R9 RH RM ROM RP RPM RPS RT S3 S4 SAN SCO SCR SEC SET SG SHT SIE SMI SQ SQR SR STC STI STK STL STN STW SW SX SYR T0 T3 TAH TAN TI TIC TIP TKM TMS TNE TP TPR TQD TRL TST TTS U1 U2 UA UB UC VA VLT VP W2 WA WB WCD WE WEB WEE WG WHR WM WSD WTT WW X1 YDK YDQ YRD Z11 ZP ZZ X43 X44 X1A X1B X1D X1F X1G X1W X2C X3A X3H X4A X4B X4C X4D X4F X4G X4H X5H X5L X5M X6H X6P X7A X7B X8A X8B X8C XAA XAB XAC XAD XAE XAF XAG XAH XAI XAJ XAL XAM XAP XAT XAV XB4 XBA XBB XBC XBD XBE XBF XBG XBH XBI XBJ XBK XBL XBM XBN XBO XBP XBQ XBR XBS XBT XBU XBV XBW XBX XBY XBZ XCA XCB XCC XCD XCE XCF XCG XCH XCI XCJ XCK XCL XCM XCN XCO XCP XCQ XCR XCS XCT XCU XCV XCW XCX XCY XCZ XDA XDB XDC XDG XDH XDI XDJ XDK XDL XDM XDN XDP XDR XDS XDT XDU XDV XDW XDX XDY XEC XED XEE XEF XEG XEH XEI XEN XFB XFC XFD XFE XFI XFL XFO XFP XFR XFT XFW XFX XGB XGI XGL XGR XGU XGY XGZ XHA XHB XHC XHG XHN XHR XIA XIB XIC XID XIE XIF XIG XIH XIK XIL XIN XIZ XJB XJC XJG XJR XJT XJY XKG XKI XLE XLG XLT XLU XLV XLZ XMA XMB XMC XME XMR XMS XMT XMW XMX XNA XNE XNF XNG XNS XNT XNU XNV XOA XOB XOC XOD XOE XOF XOK XOT XOU XP2 XPA XPB XPC XPD XPE XPF XPG XPH XPI XPJ XPK XPL XPN XPO XPP XPR XPT XPU XPV XPX XPY XPZ XQA XQB XQC XQD XQF XQG XQH XQJ XQK XQL XQM XQN XQP XQQ XQR XQS XRD XRG XRJ XRK XRL XRO XRT XRZ XSA XSB XSC XSD XSE XSH XSI XSK XSL XSM XSO XSP XSS XST XSU XSV XSW XSY XSZ XT1 XTB XTC XTD XTE XTG XTI XTK XTL XTN XTO XTR XTS XTT XTU XTV XTW XTY XTZ XUC XUN XVA XVG XVI XVK XVL XVN XVO XVP XVQ XVR XVS XVY XWA XWB XWC XWD XWF XWG XWH XWJ XWK XWL XWM XWN XWP XWQ XWR XWS XWT XWU XWV XWW XWX XWY XWZ XXA XXB XXC XXD XXF XXG XXH XXJ XXK XYA XYB XYC XYD XYF XYG XYH XYJ XYK XYL XYM XYN XYP XYQ XYR XYS XYT XYV XYW XYX XYY XYZ XZA XZB XZC XZD XZF XZG XZH XZJ XZK XZL XZM XZN XZP XZQ XZR XZS XZT XZU XZV XZW XZX XZY XZZ ', concat(' ', normalize-space(.), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(.), ' ')) and contains(' 10 11 13 14 15 20 21 22 23 24 25 27 28 33 34 35 37 38 40 41 56 57 58 59 60 61 64 66 74 76 77 78 80 81 84 85 87 89 91 1I 2A 2B 2C 2G 2H 2I 2J 2K 2L 2M 2N 2P 2Q 2R 2U 2X 2Y 2Z 3B 3C 4C 4G 4H 4K 4L 4M 4N 4O 4P 4Q 4R 4T 4U 4W 4X 5A 5B 5E 5J A1 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19 A2 A20 A21 A22 A23 A24 A25 A26 A27 A28 A29 A3 A30 A31 A32 A33 A34 A35 A36 A37 A38 A39 A4 A40 A41 A42 A43 A44 A45 A47 A48 A49 A5 A50 A51 A52 A53 A54 A55 A56 A57 A58 A59 A6 A60 A61 A62 A63 A64 A65 A66 A67 A68 A69 A7 A70 A71 A73 A74 A75 A76 A77 A78 A79 A8 A80 A81 A82 A83 A84 A85 A86 A87 A88 A89 A9 A90 A91 A93 A94 A95 A96 A97 A98 A99 AA AB ACR ACT AD AE AH AI AK AL AMH AMP ANN APZ AQ ARE AS ASM ASU ATM ATT AY AZ B1 B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 B20 B21 B22 B23 B24 B25 B26 B27 B28 B29 B3 B30 B31 B32 B33 B34 B35 B36 B37 B38 B39 B4 B40 B41 B42 B43 B44 B45 B46 B47 B48 B49 B50 B51 B52 B53 B54 B55 B56 B57 B58 B59 B60 B61 B62 B63 B64 B65 B66 B67 B68 B69 B7 B70 B71 B72 B73 B74 B75 B76 B77 B78 B79 B8 B80 B81 B82 B83 B84 B85 B86 B87 B88 B89 B90 B91 B92 B93 B94 B95 B96 B97 B98 B99 BAR BB BFT BHP BIL BLD BLL BP BQL BTU BUA BUI C0 C10 C11 C12 C13 C14 C15 C16 C17 C18 C19 C20 C21 C22 C23 C24 C25 C26 C27 C28 C29 C3 C30 C31 C32 C33 C34 C35 C36 C37 C38 C39 C40 C41 C42 C43 C44 C45 C46 C47 C48 C49 C50 C51 C52 C53 C54 C55 C56 C57 C58 C59 C60 C61 C62 C63 C64 C65 C66 C67 C68 C69 C7 C70 C71 C72 C73 C74 C75 C76 C78 C79 C8 C80 C81 C82 C83 C84 C85 C86 C87 C88 C89 C9 C90 C91 C92 C93 C94 C95 C96 C97 C99 CCT CDL CEL CEN CG CGM CKG CLF CLT CMK CMQ CMT CNP CNT COU CTG CTM CTN CUR CWA CWI D03 D04 D1 D10 D11 D12 D13 D15 D16 D17 D18 D19 D2 D20 D21 D22 D23 D24 D25 D26 D27 D29 D30 D31 D32 D33 D34 D35 D36 D37 D38 D39 D41 D42 D43 D44 D45 D46 D47 D48 D49 D5 D50 D51 D52 D53 D54 D55 D56 D57 D58 D59 D6 D60 D61 D62 D63 D65 D68 D69 D70 D71 D72 D73 D74 D75 D76 D77 D78 D80 D81 D82 D83 D85 D86 D87 D88 D89 D9 D91 D93 D94 D95 DAA DAD DAY DB DD DEC DG DJ DLT DMA DMK DMO DMQ DMT DN DPC DPR DPT DRA DRI DRL DT DTN DU DWT DX DZN DZP E01 E07 E08 E09 E10 E11 E12 E14 E15 E16 E17 E18 E19 E20 E21 E22 E23 E25 E27 E28 E30 E31 E32 E33 E34 E35 E36 E37 E38 E39 E4 E40 E41 E42 E43 E44 E45 E46 E47 E48 E49 E50 E51 E52 E53 E54 E55 E56 E57 E58 E59 E60 E61 E62 E63 E64 E65 E66 E67 E68 E69 E70 E71 E72 E73 E74 E75 E76 E77 E78 E79 E80 E81 E82 E83 E84 E85 E86 E87 E88 E89 E90 E91 E92 E93 E94 E95 E96 E97 E98 E99 EA EB EQ F01 F02 F03 F04 F05 F06 F07 F08 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 F32 F33 F34 F35 F36 F37 F38 F39 F40 F41 F42 F43 F44 F45 F46 F47 F48 F49 F50 F51 F52 F53 F54 F55 F56 F57 F58 F59 F60 F61 F62 F63 F64 F65 F66 F67 F68 F69 F70 F71 F72 F73 F74 F75 F76 F77 F78 F79 F80 F81 F82 F83 F84 F85 F86 F87 F88 F89 F90 F91 F92 F93 F94 F95 F96 F97 F98 F99 FAH FAR FBM FC FF FH FIT FL FOT FP FR FS FTK FTQ G01 G04 G05 G06 G08 G09 G10 G11 G12 G13 G14 G15 G16 G17 G18 G19 G2 G20 G21 G23 G24 G25 G26 G27 G28 G29 G3 G30 G31 G32 G33 G34 G35 G36 G37 G38 G39 G40 G41 G42 G43 G44 G45 G46 G47 G48 G49 G50 G51 G52 G53 G54 G55 G56 G57 G58 G59 G60 G61 G62 G63 G64 G65 G66 G67 G68 G69 G70 G71 G72 G73 G74 G75 G76 G77 G78 G79 G80 G81 G82 G83 G84 G85 G86 G87 G88 G89 G90 G91 G92 G93 G94 G95 G96 G97 G98 G99 GB GBQ GDW GE GF GFI GGR GIA GIC GII GIP GJ GL GLD GLI GLL GM GO GP GQ GRM GRN GRO GRT GT GV GWH H03 H04 H05 H06 H07 H08 H09 H10 H11 H12 H13 H14 H15 H16 H18 H19 H20 H21 H22 H23 H24 H25 H26 H27 H28 H29 H30 H31 H32 H33 H34 H35 H36 H37 H38 H39 H40 H41 H42 H43 H44 H45 H46 H47 H48 H49 H50 H51 H52 H53 H54 H55 H56 H57 H58 H59 H60 H61 H62 H63 H64 H65 H66 H67 H68 H69 H70 H71 H72 H73 H74 H75 H76 H77 H78 H79 H80 H81 H82 H83 H84 H85 H87 H88 H89 H90 H91 H92 H93 H94 H95 H96 H98 H99 HA HAR HBA HBX HC HDW HEA HGM HH HIU HJ HKM HLT HM HMQ HMT HN HP HPA HTZ HUR IA IE INH INK INQ ISD IU IV J10 J12 J13 J14 J15 J16 J17 J18 J19 J2 J20 J21 J22 J23 J24 J25 J26 J27 J28 J29 J30 J31 J32 J33 J34 J35 J36 J38 J39 J40 J41 J42 J43 J44 J45 J46 J47 J48 J49 J50 J51 J52 J53 J54 J55 J56 J57 J58 J59 J60 J61 J62 J63 J64 J65 J66 J67 J68 J69 J70 J71 J72 J73 J74 J75 J76 J78 J79 J81 J82 J83 J84 J85 J87 J89 J90 J91 J92 J93 J94 J95 J96 J97 J98 J99 JE JK JM JNT JOU JPS JWL K1 K10 K11 K12 K13 K14 K15 K16 K17 K18 K19 K2 K20 K21 K22 K23 K24 K25 K26 K27 K28 K3 K30 K31 K32 K33 K34 K35 K36 K37 K38 K39 K40 K41 K42 K43 K45 K46 K47 K48 K49 K5 K50 K51 K52 K53 K54 K55 K58 K59 K6 K60 K61 K62 K63 K64 K65 K66 K67 K68 K69 K70 K71 K73 K74 K75 K76 K77 K78 K79 K80 K81 K82 K83 K84 K85 K86 K87 K88 K89 K90 K91 K92 K93 K94 K95 K96 K97 K98 K99 KA KAT KB KBA KCC KDW KEL KGM KGS KHY KHZ KI KIC KIP KJ KJO KL KLK KLX KMA KMH KMK KMQ KMT KNI KNS KNT KO KPA KPH KPO KPP KR KSD KSH KT KTN KUR KVA KVR KVT KW KWH KWO KWT KX L10 L11 L12 L13 L14 L15 L16 L17 L18 L19 L2 L20 L21 L23 L24 L25 L26 L27 L28 L29 L30 L31 L32 L33 L34 L35 L36 L37 L38 L39 L40 L41 L42 L43 L44 L45 L46 L47 L48 L49 L50 L51 L52 L53 L54 L55 L56 L57 L58 L59 L60 L63 L64 L65 L66 L67 L68 L69 L70 L71 L72 L73 L74 L75 L76 L77 L78 L79 L80 L81 L82 L83 L84 L85 L86 L87 L88 L89 L90 L91 L92 L93 L94 L95 L96 L98 L99 LA LAC LBR LBT LD LEF LF LH LK LM LN LO LP LPA LR LS LTN LTR LUB LUM LUX LY M1 M10 M11 M12 M13 M14 M15 M16 M17 M18 M19 M20 M21 M22 M23 M24 M25 M26 M27 M29 M30 M31 M32 M33 M34 M35 M36 M37 M38 M39 M4 M40 M41 M42 M43 M44 M45 M46 M47 M48 M49 M5 M50 M51 M52 M53 M55 M56 M57 M58 M59 M60 M61 M62 M63 M64 M65 M66 M67 M68 M69 M7 M70 M71 M72 M73 M74 M75 M76 M77 M78 M79 M80 M81 M82 M83 M84 M85 M86 M87 M88 M89 M9 M90 M91 M92 M93 M94 M95 M96 M97 M98 M99 MAH MAL MAM MAR MAW MBE MBF MBR MC MCU MD MGM MHZ MIK MIL MIN MIO MIU MLD MLT MMK MMQ MMT MND MON MPA MQH MQS MSK MTK MTQ MTR MTS MVA MWH N1 N10 N11 N12 N13 N14 N15 N16 N17 N18 N19 N20 N21 N22 N23 N24 N25 N26 N27 N28 N29 N3 N30 N31 N32 N33 N34 N35 N36 N37 N38 N39 N40 N41 N42 N43 N44 N45 N46 N47 N48 N49 N50 N51 N52 N53 N54 N55 N56 N57 N58 N59 N60 N61 N62 N63 N64 N65 N66 N67 N68 N69 N70 N71 N72 N73 N74 N75 N76 N77 N78 N79 N80 N81 N82 N83 N84 N85 N86 N87 N88 N89 N90 N91 N92 N93 N94 N95 N96 N97 N98 N99 NA NAR NCL NEW NF NIL NIU NL NMI NMP NPR NPT NQ NR NT NTT NU NX OA ODE OHM ON ONZ OT OZ OZA OZI P1 P10 P11 P12 P13 P14 P15 P16 P17 P18 P19 P2 P20 P21 P22 P23 P24 P25 P26 P27 P28 P29 P30 P31 P32 P33 P34 P35 P36 P37 P38 P39 P40 P41 P42 P43 P44 P45 P46 P47 P48 P49 P5 P50 P51 P52 P53 P54 P55 P56 P57 P58 P59 P60 P61 P62 P63 P64 P65 P66 P67 P68 P69 P70 P71 P72 P73 P74 P75 P76 P77 P78 P79 P80 P81 P82 P83 P84 P85 P86 P87 P88 P89 P90 P91 P92 P93 P94 P95 P96 P97 P98 P99 PAL PD PFL PGL PI PLA PO PQ PR PS PT PTD PTI PTL Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20 Q21 Q22 Q23 Q24 Q25 Q26 Q27 Q28 Q3 QA QAN QB QR QT QTD QTI QTL QTR R1 R9 RH RM ROM RP RPM RPS RT S3 S4 SAN SCO SCR SEC SET SG SHT SIE SMI SQ SQR SR STC STI STK STL STN STW SW SX SYR T0 T3 TAH TAN TI TIC TIP TKM TMS TNE TP TPR TQD TRL TST TTS U1 U2 UA UB UC VA VLT VP W2 WA WB WCD WE WEB WEE WG WHR WM WSD WTT WW X1 YDK YDQ YRD Z11 ZP ZZ X43 X44 X1A X1B X1D X1F X1G X1W X2C X3A X3H X4A X4B X4C X4D X4F X4G X4H X5H X5L X5M X6H X6P X7A X7B X8A X8B X8C XAA XAB XAC XAD XAE XAF XAG XAH XAI XAJ XAL XAM XAP XAT XAV XB4 XBA XBB XBC XBD XBE XBF XBG XBH XBI XBJ XBK XBL XBM XBN XBO XBP XBQ XBR XBS XBT XBU XBV XBW XBX XBY XBZ XCA XCB XCC XCD XCE XCF XCG XCH XCI XCJ XCK XCL XCM XCN XCO XCP XCQ XCR XCS XCT XCU XCV XCW XCX XCY XCZ XDA XDB XDC XDG XDH XDI XDJ XDK XDL XDM XDN XDP XDR XDS XDT XDU XDV XDW XDX XDY XEC XED XEE XEF XEG XEH XEI XEN XFB XFC XFD XFE XFI XFL XFO XFP XFR XFT XFW XFX XGB XGI XGL XGR XGU XGY XGZ XHA XHB XHC XHG XHN XHR XIA XIB XIC XID XIE XIF XIG XIH XIK XIL XIN XIZ XJB XJC XJG XJR XJT XJY XKG XKI XLE XLG XLT XLU XLV XLZ XMA XMB XMC XME XMR XMS XMT XMW XMX XNA XNE XNF XNG XNS XNT XNU XNV XOA XOB XOC XOD XOE XOF XOK XOT XOU XP2 XPA XPB XPC XPD XPE XPF XPG XPH XPI XPJ XPK XPL XPN XPO XPP XPR XPT XPU XPV XPX XPY XPZ XQA XQB XQC XQD XQF XQG XQH XQJ XQK XQL XQM XQN XQP XQQ XQR XQS XRD XRG XRJ XRK XRL XRO XRT XRZ XSA XSB XSC XSD XSE XSH XSI XSK XSL XSM XSO XSP XSS XST XSU XSV XSW XSY XSZ XT1 XTB XTC XTD XTE XTG XTI XTK XTL XTN XTO XTR XTS XTT XTU XTV XTW XTY XTZ XUC XUN XVA XVG XVI XVK XVL XVN XVO XVP XVQ XVR XVS XVY XWA XWB XWC XWD XWF XWG XWH XWJ XWK XWL XWM XWN XWP XWQ XWR XWS XWT XWU XWV XWW XWX XWY XWZ XXA XXB XXC XXD XXF XXG XXH XXJ XXK XYA XYB XYC XYD XYF XYG XYH XYJ XYK XYL XYM XYN XYP XYQ XYR XYS XYT XYV XYW XYX XYY XYZ XZA XZB XZC XZD XZF XZG XZH XZJ XZK XZL XZM XZN XZP XZQ XZR XZS XZT XZU XZV XZW XZX XZY XZZ ', concat(' ', normalize-space(.), ' '))))">
+                    <xsl:attribute name="id">BR-CL-23</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-23]-Unit code MUST be coded according to the UN/ECE Recommendation 20 with Rec 21 extension</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="@mimeCode" mode="M12" priority="1001">
+        <svrl:fired-rule context="@mimeCode"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((. = 'application/pdf' or . = 'image/png' or . = 'image/jpeg' or . = 'text/csv' or . = 'application/vnd.openxmlformats-officedocument. spreadsheetml.sheet' or . = 'application/vnd.oasis.opendocument.spreadsheet'))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((. = 'application/pdf' or . = 'image/png' or . = 'image/jpeg' or . = 'text/csv' or . = 'application/vnd.openxmlformats-officedocument. spreadsheetml.sheet' or . = 'application/vnd.oasis.opendocument.spreadsheet'))">
+                    <xsl:attribute name="id">BR-CL-24</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-24]-For Mime code in attribute use MIMEMediaType.</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <!--RULE -->
+    <xsl:template match="ram:URIUniversalCommunication/ram:URIID[@schemeID]" mode="M12" priority="1000">
+        <svrl:fired-rule context="ram:URIUniversalCommunication/ram:URIID[@schemeID]"/>
+        <!--ASSERT -->
+        <xsl:choose>
+            <xsl:when test="((not(contains(normalize-space(@schemeID), ' ')) and contains(' 0002 0007 0009 0037 0060 0088 0096 0097 0106 0130 0135 0142 0151 0183 0184 0190 0191 0192 0193 0194 0195 0196 0198 0199 0200 0201 0202 0203 0204 9901 9902 9904 9905 9906 9907 9910 9913 9914 9915 9918 9919 9920 9922 9923 9924 9925 9926 9927 9928 9929 9930 9931 9932 9933 9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 9948 9949 9950 9951 9952 9953 9955 9956 9957 9958 AN AQ AS AU EM ', concat(' ', normalize-space(@schemeID), ' '))))"/>
+            <xsl:otherwise>
+                <svrl:failed-assert test="((not(contains(normalize-space(@schemeID), ' ')) and contains(' 0002 0007 0009 0037 0060 0088 0096 0097 0106 0130 0135 0142 0151 0183 0184 0190 0191 0192 0193 0194 0195 0196 0198 0199 0200 0201 0202 0203 0204 9901 9902 9904 9905 9906 9907 9910 9913 9914 9915 9918 9919 9920 9922 9923 9924 9925 9926 9927 9928 9929 9930 9931 9932 9933 9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 9948 9949 9950 9951 9952 9953 9955 9956 9957 9958 AN AQ AS AU EM ', concat(' ', normalize-space(@schemeID), ' '))))">
+                    <xsl:attribute name="id">BR-CL-25</xsl:attribute>
+                    <xsl:attribute name="flag">fatal</xsl:attribute>
+                    <xsl:attribute name="location">
+                        <xsl:apply-templates mode="schematron-select-full-path" select="."/>
+                    </xsl:attribute>
+                    <svrl:text>[BR-CL-25]-Endpoint identifier scheme identifier MUST belong to the CEF EAS code list</svrl:text>
+                </svrl:failed-assert>
+            </xsl:otherwise>
+        </xsl:choose>
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+    <xsl:template match="text()" mode="M12" priority="-1"/>
+    <xsl:template match="@*|node()" mode="M12" priority="-2">
+        <xsl:apply-templates mode="M12" select="*"/>
+    </xsl:template>
+</xsl:stylesheet>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL.sch
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL.sch	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL.sch	(revision 8435)
@@ -0,0 +1,5765 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron" schemaVersion="iso">
+    <title>Schema for FACTUR-X; 1.0; ACCOUNTING INFORMATION, No XML Invoice, (BASIC WITHOUT LINE)</title>
+    <ns uri="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" prefix="rsm"/>
+    <ns uri="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" prefix="qdt"/>
+    <ns uri="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" prefix="ram"/>
+    <ns uri="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" prefix="udt"/>
+    <pattern>
+        <rule context="//ram:AdditionalReferencedDocument">
+            <assert test="(ram:IssuerAssignedID!=&apos;&apos;)">
+                Each Additional supporting document (BG-24) shall contain a Supporting document reference (BT-122).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+            <assert test="(ram:BasisAmount)">
+                Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116).</assert>
+            <assert test="(ram:CalculatedAmount)">
+                Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117).</assert>
+            <assert test="(ram:CategoryCode)">
+                Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118).</assert>
+            <assert test="(ram:RateApplicablePercent) or (ram:CategoryCode = &apos;O&apos;)">
+                Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT.</assert>
+            <assert test="((ram:TaxPointDate) and not (ram:DueDateTypeCode)) or (not (ram:TaxPointDate) and (ram:DueDateTypeCode)) or (not (ram:TaxPointDate) and not (ram:DueDateTypeCode))">
+                Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive.</assert>
+            <assert test="ram:CalculatedAmount = round(ram:BasisAmount * ram:RateApplicablePercent) div 100 +0 or not (ram:RateApplicablePercent)">
+                VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2.</assert>
+            <assert test="string-length(substring-after(ram:CalculatedAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;Z&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;Z&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;Z&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;Z&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where VAT category code (BT-118) is "Zero rated" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amount (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âZero rated".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Zero rated" shall equal 0 (zero).</assert>
+            <assert test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Zero rated" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.=&apos;S&apos;]">
+            <assert test="../ram:CalculatedAmount = round(../ram:BasisAmount * ../ram:RateApplicablePercent) div 100 +0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Standard rated" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Standard rate" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod">
+            <assert test="(ram:EndDateTime/udt:DateTimeString[@format = &apos;102&apos;]) &gt;= (ram:StartDateTime/udt:DateTimeString[@format = &apos;102&apos;]) or not (ram:EndDateTime) or not (ram:StartDateTime)">
+                If both Invoicing period start date (BT-73) and Invoicing period end date (BT-74) are given then the Invoicing period end date (BT-74) shall be later or equal to the Invoicing period start date (BT-73).</assert>
+            <assert test="(ram:StartDateTime) or (ram:EndDateTime)">
+                If Invoicing period (BG-14) is used, the Invoicing period start date (BT-73) or the Invoicing period end date (BT-74) shall be filled, or both.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92).</assert>
+            <assert test="(ram:CategoryTradeTax/ram:CategoryCode)">
+                Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level allowance (BG-20) shall have a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98).</assert>
+            <assert test="true()">
+                Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level allowance (BG-20) shall contain a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Document level charge (BG-21) shall have a Document level charge amount (BT-99).</assert>
+            <assert test="(ram:CategoryTradeTax/ram:CategoryCode)">
+                Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level charge (BG-21) shall have a Document level charge reason (BT-104) or a Document level charge reason code (BT-105).</assert>
+            <assert test="true()">
+                Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level charge (BG-21) shall contain a Document level charge reason (BT-104) or a Document level charge reason code (BT-105), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level charge amount (BT-92) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level charge base amount (BT-93) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableProductCharacteristic">
+            <assert test="(ram:Description) and (ram:Value)">
+                Each Item attribute (BG-32) shall contain an Item attribute name (BT-160) and an Item attribute value (BT-161).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableTradeSettlementFinancialCard">
+            <assert test="string-length(ram:ID)&lt;=6 and string-length(ram:ID)&gt;=4">
+                The last 4 to 6 digits of the Payment card primary account number (BT-87) shall be present if Payment card information (BG-18) is provided in the Invoice.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:IncludedSupplyChainTradeLineItem">
+            <assert test="(ram:AssociatedDocumentLineDocument/ram:LineID!=&apos;&apos;)">
+                Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126).</assert>
+            <assert test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity)">
+                Each Invoice line (BG-25) shall have an Invoiced quantity (BT-129).</assert>
+            <assert test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity/@unitCode)">
+                An Invoice line (BG-25) shall have an Invoiced quantity unit of measure code (BT-130).</assert>
+            <assert test="(ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)">
+                Each Invoice line (BG-25) shall have an Invoice line net amount (BT-131).</assert>
+            <assert test="(ram:SpecifiedTradeProduct/ram:Name!=&apos;&apos;)">
+                Each Invoice line (BG-25) shall contain the Item name (BT-153).</assert>
+            <assert test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount)">
+                Each Invoice line (BG-25) shall contain the Item net price (BT-146).</assert>
+            <assert test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount) &gt;= 0">
+                The Item net price (BT-146) shall NOT be negative.</assert>
+            <assert test="(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount &gt;= 0) or not(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount)">
+                The Item gross price (BT-148) shall NOT be negative.</assert>
+            <assert test="ram:SpecifiedTradeProduct/ram:GlobalID/@schemeID!=&apos;&apos; or not (ram:SpecifiedTradeProduct/ram:GlobalID)">
+                The Item standard identifier (BT-157) shall have a Scheme identifier</assert>
+            <assert test="(ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode/@listID!=&apos;&apos;) or not (ram:SpecifiedTradeProduct/ram:DesignatedProductClassification)">
+                The Item classification identifier (BT-158) shall have a Scheme identifier</assert>
+            <assert test="(ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode)">
+                Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151).</assert>
+            <assert test="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+                An Invoice shall at least have one VAT breakdown group (BG-23).</assert>
+            <assert test="string-length(substring-after(ram:SpecifiedTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:PayeeTradeParty">
+            <assert test="(ram:Name) and (not(ram:Name = ../ram:SellerTradeParty/ram:Name) and not(ram:ID = ../ram:SellerTradeParty/ram:ID) and not(ram:SpecifiedLegalOrganization/ram:ID = ../ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID))">
+                The Payee name (BT-59) shall be provided in the Invoice, if the Payee (BG-10) is different from the Seller (BG-4).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SellerTaxRepresentativeTradeParty">
+            <assert test="(ram:Name)">
+                The Seller tax representative name (BT-62) shall be provided in the Invoice, if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+            <assert test="(ram:PostalTradeAddress)">
+                The Seller tax representative postal address (BG-12) shall be provided in the Invoice, if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+            <assert test="(ram:PostalTradeAddress/ram:CountryID)">
+                The Seller tax representative postal address (BG-12) shall contain a Tax representative country code (BT-69), if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+            <assert test="(ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;]!=&apos;&apos;)">
+                Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SellerTradeParty">
+            <assert test="(ram:ID) or (ram:GlobalID) or (ram:SpecifiedLegalOrganization/ram:ID) or (ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;])">
+                In order for the buyer to automatically identify a supplier, the Seller identifier (BT-29), the Seller legal registration identifier (BT-30) and/or the Seller VAT identifier (BT-31) shall be present.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod">
+            <assert test="(ram:EndDateTime/udt:DateTimeString[@format = &apos;102&apos;]) &gt;= (ram:StartDateTime/udt:DateTimeString[@format = &apos;102&apos;]) or not (ram:EndDateTime) or not (ram:StartDateTime)">
+                If both Invoice line period start date (BT-134) and Invoice line period end date (BT-135) are given then the Invoice line period end date (BT-135) shall be later or equal to the Invoice line period start date (BT-134).</assert>
+            <assert test="(ram:StartDateTime) or (ram:EndDateTime)">
+                If Invoice line period (BG-26) is used, the Invoice line period start date (BT-134) or the Invoice line period end date (BT-135) shall be filled, or both.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = &apos;false&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Invoice line allowance (BG-27) shall have an Invoice line allowance amount (BT-136).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line allowance (BG-27) shall have an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140).</assert>
+            <assert test="true()">
+                Invoice line allowance reason code (BT-140) and Invoice line allowance reason (BT-139) shall indicate the same type of allowance reason.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line allowance (BG-27) shall contain an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = &apos;true&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Invoice line charge (BG-28) shall have an Invoice line charge amount (BT-141).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line charge (BG-28) shall have an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145).</assert>
+            <assert test="true()">
+                Invoice line charge reason code (BT-145) and Invoice line charge reason (BT144) shall indicate the same type of charge reason.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line charge (BG-28) shall contain an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;]">
+            <assert test="contains(&apos; EL AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BL BJ BM BN BO BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW &apos;, concat(&apos; &apos;, substring(.,1,2), &apos; &apos;))">
+                The Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) shall have a prefix in accordance with ISO code ISO 3166-1 alpha-2 by which the country of issue may be identified. Nevertheless, Greece may use the prefix âELâ.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Reverse charge" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;E&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Exempt from VAT", the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;G&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Export outside the EU" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;K&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IGIC" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IGIC" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IPSI" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-48).</assert>
+            <assert test="not(ram:RateApplicablePercent)">
+                A Document level allowance (BG-20) where VAT category code (BT-95) is "Not subject to VAT" shall not contain a Document level allowance VAT rate (BT-96).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;S&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Standard rated" the Document level allowance VAT rate (BT-96) shall be greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Zero rated" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Reverse charge" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;E&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Exempt from VAT", the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;G&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Export outside the EU" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;K&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Intra-community supply" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IGIC" the Document level charge VAT rate (BT-103) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IPSI" the Document level charge VAT rate (BT-103) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-48).</assert>
+            <assert test="not(ram:RateApplicablePercent)">
+                A Document level charge (BG-21) where the VAT category code (BT-102) is "Not subject to VAT" shall not contain a Document level charge VAT rate (BT-103).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;S&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Standard rated" the Document level charge VAT rate (BT-103) shall be greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge where the Document level charge VAT category code (BT-102) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Zero rated" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementHeaderMonetarySummation">
+            <assert test="(ram:TaxBasisTotalAmount)">
+                An Invoice shall have the Invoice total amount without VAT (BT-109).</assert>
+            <assert test="(ram:GrandTotalAmount)">
+                An Invoice shall have the Invoice total amount with VAT (BT-112).</assert>
+            <assert test="(ram:DuePayableAmount)">
+                An Invoice shall have the Amount due for payment (BT-115).</assert>
+            <assert test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;])and not (ram:AllowanceTotalAmount)) or ram:AllowanceTotalAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:ActualAmount)* 10 * 10 ) div 100)">
+                Sum of allowances on document level (BT-107) = S Document level allowance amount (BT-92).</assert>
+            <assert test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;])and not (ram:ChargeTotalAmount)) or ram:ChargeTotalAmount = &#13;&#10;((round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:ActualAmount)* 10 * 10 ) div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount)* 10 * 10 ) div 100))">
+                Sum of charges on document level (BT-108) = S Document level charge amount (BT-99).</assert>
+            <assert test="(ram:GrandTotalAmount = round(ram:TaxBasisTotalAmount*100 + ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]*100 +0) div 100) or ((ram:GrandTotalAmount = ram:TaxBasisTotalAmount) and not (ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]))">
+                Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).</assert>
+            <assert test="string-length(substring-after(ram:LineTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2.</assert>
+            <assert test="string-length(substring-after(ram:AllowanceTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2.</assert>
+            <assert test="string-length(substring-after(ram:ChargeTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2.</assert>
+            <assert test="string-length(substring-after(ram:TaxBasisTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2.</assert>
+            <assert test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode and . = round(. * 100) div 100) or not (@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode)]">
+                The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2.</assert>
+            <assert test="string-length(substring-after(ram:GrandTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2.</assert>
+            <assert test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and . = round(. * 100) div 100) or not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode)]">
+                The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2.</assert>
+            <assert test="string-length(substring-after(ram:TotalPrepaidAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Paid amount (BT-113) is 2.</assert>
+            <assert test="string-length(substring-after(ram:RoundingAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Rounding amount (BT-114) is 2.</assert>
+            <assert test="string-length(substring-after(ram:DuePayableAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2.</assert>
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) or (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and (ram:TaxTotalAmount/@currencyID = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) and not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode))">
+                If the VAT accounting currency code (BT-6) is present, then the Invoice total VAT amount in accounting currency (BT-111) shall be provided.</assert>
+            <assert test="(ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount*100 - ram:AllowanceTotalAmount*100 + ram:ChargeTotalAmount*100) div 100)) or ((ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount*100 - ram:AllowanceTotalAmount*100) div 100)) and not (ram:ChargeTotalAmount)) or ((ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount*100 + ram:ChargeTotalAmount*100) div 100)) and not (ram:AllowanceTotalAmount)) or ((ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount * 100) div 100)) and not (ram:ChargeTotalAmount) and not (ram:AllowanceTotalAmount))">
+                Invoice total amount without VAT (BT-109) = S Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).</assert>
+            <assert test="(ram:DuePayableAmount = (round(ram:GrandTotalAmount*100 - ram:TotalPrepaidAmount*100 + ram:RoundingAmount*100) div 100)) or ((ram:DuePayableAmount = ram:GrandTotalAmount + ram:RoundingAmount) and not (ram:TotalPrepaidAmount)) or ((ram:DuePayableAmount = (round(ram:GrandTotalAmount*100 - ram:TotalPrepaidAmount*100) div 100)) and not (ram:RoundingAmount)) or ((ram:DuePayableAmount = (round(ram:GrandTotalAmount*100) div 100)) and not (ram:TotalPrepaidAmount) and not (ram:RoundingAmount))">
+                Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).</assert>
+            <assert test="(ram:LineTotalAmount)">
+                An Invoice shall have the Sum of Invoice line net amount (BT-106).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]">
+            <assert test=". = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount)*10*10)div 100)">
+                Invoice total VAT amount (BT-110) = S VAT category tax amount (BT-117).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementPaymentMeans">
+            <assert test="(ram:TypeCode)">
+                A Payment instruction (BG-16) shall specify the Payment means type code (BT-81).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementPaymentMeans[ram:TypeCode=&apos;30&apos; or ram:TypeCode=&apos;58&apos;]/ram:PayerPartyDebtorFinancialAccount">
+            <assert test="(ram:IBANID) or (ram:ProprietaryID)">
+                A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice.</assert>
+            <assert test="(ram:IBANID) or (ram:ProprietaryID)">
+                If the Payment means type code (BT-81) means SEPA credit transfer, Local credit transfer or Non-SEPA international credit transfer, the Payment account identifier (BT-84) shall be present.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;AE&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;AE&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;AE&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;AE&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Reverse charge" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âReverse charge".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âReverse chargeâ shall be 0 (zero).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Reverse charge" shall have a VAT exemption reason code (BT-121), meaning "Reverse charge" or the VAT exemption reason text (BT-120) "Reverse charge" (or the equivalent standard text in another language).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;E&apos;]">
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) In a VAT breakdown (BG-23) where the VAT category code (BT-118) equals "Exempt from VAT" shall equal 0 (zero).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Exempt from VAT" shall have a VAT exemption reason code (BT-121) or a VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;G&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;G&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;G&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;G&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Export outside the EU" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âExport outside the EU".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âExport outside the EUâ shall be 0 (zero).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with the VAT Category code (BT-118) "Export outside the EU" shall have a VAT exemption reason code (BT-121), meaning "Export outside the EU" or the VAT exemption reason text (BT-120) "Export outside the EU" (or the equivalent standard text in another language).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.= &apos;K&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;K&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;K&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;K&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âIntra-community supply".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IGIC" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with the VAT Category code (BT-118) "Intra-community supply" shall have a VAT exemption reason code (BT-121), meaning "Intra-community supply" or the VAT exemption reason text (BT-120) "Intra-community supply" (or the equivalent standard text in another language).</assert>
+            <assert test="(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString) or (../../ram:BillingSpecifiedPeriod/ram:StartDateTime) or (../../ram:BillingSpecifiedPeriod/ram:EndDateTime)">
+                In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the Actual delivery date (BT-72) or the Invoicing period (BG-14) shall not be blank.</assert>
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID">
+                In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the Deliver to country code (BT-80) shall not be blank.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;L&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;L&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;L&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)">
+                For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "IGIC", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is âIGICâ and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).</assert>
+            <assert test="true()">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IGIC" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "IGIC" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;M&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;M&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;M&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)">
+                For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "IPSI", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is âIPSIâ and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).</assert>
+            <assert test="true()">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IPSI" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "IPSI" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;O&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;O&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;O&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is " Not subject to VAT" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âNot subject to VAT".</assert>
+            <assert test="ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âNot subject to VATâ shall be 0 (zero).</assert>
+            <assert test="(ram:ExemptionReason) or (ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) " Not subject to VAT" shall have a VAT exemption reason code (BT-121), meaning " Not subject to VAT" or a VAT exemption reason text (BT-120) " Not subject to VAT" (or the equivalent standard text in another language).</assert>
+            <assert test="not(//ram:ApplicableTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain other VAT breakdown groups (BG-23).</assert>
+            <assert test="not(//ram:ApplicableTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is not "Not subject to VAT".</assert>
+            <assert test="not(//ram:CategoryTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain Document level allowances (BG-20) where Document level allowance VAT category code (BT-95) is not "Not subject to VAT".</assert>
+            <assert test="not(//ram:CategoryTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain Document level charges (BG-21) where Document level charge VAT category code (BT-102) is not "Not subject to VAT".</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Reverse charge" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;E&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Exempt from VAT", the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;G&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Export outside the EU" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;K&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Intracommunity supply" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IGIC" the invoiced item VAT rate (BT-152) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IPSI" the Invoiced item VAT rate (BT-152) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-46).</assert>
+            <assert test="not(ram:RateApplicablePercent)">
+                An Invoice line (BG-25) where the VAT category code (BT-151) is "Not subject to VAT" shall not contain an Invoiced item VAT rate (BT-152).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;S&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Standard rated" the Invoiced item VAT rate (BT-152) shall be greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line where the Invoiced item VAT category code (BT-151) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Zero rated" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice">
+            <assert test="(rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID != &apos;&apos;)">
+                An Invoice shall have a Specification identifier (BT-24).</assert>
+            <assert test="(rsm:ExchangedDocument/ram:ID !=&apos;&apos;)">
+                An Invoice shall have an Invoice number (BT-1).</assert>
+            <assert test="(rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString[@format=&apos;102&apos;]!=&apos;&apos;)">
+                An Invoice shall have an Invoice issue date (BT-2).</assert>
+            <assert test="(rsm:ExchangedDocument/ram:TypeCode!=&apos;&apos;)">
+                An Invoice shall have an Invoice type code (BT-3).</assert>
+            <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode!=&apos;&apos;)">
+                An Invoice shall have an Invoice currency code (BT-5).</assert>
+            <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name!=&apos;&apos;)">
+                An Invoice shall contain the Seller name (BT-27).</assert>
+            <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name!=&apos;&apos;)">
+                An Invoice shall contain the Buyer name (BT-44).</assert>
+            <assert test="//ram:SellerTradeParty/ram:PostalTradeAddress">
+                An Invoice shall contain the Seller postal address (BG-5).</assert>
+            <assert test="//ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;">
+                The Seller postal address (BG-5) shall contain a Seller country code (BT-40).</assert>
+            <assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!=&apos;&apos; or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication)">
+                The Seller electronic address (BT-34) shall have a Scheme identifier.</assert>
+            <assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!=&apos;&apos; or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication)">
+                The Buyer electronic address (BT-49) shall have a Scheme identifier.</assert>
+            <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) and     ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;S&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;S&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âStandard ratedâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "Standard rated".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;Z&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;Z&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âZero ratedâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Zero rated".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;E&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;E&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âExempt from VATâ shall contain exactly one VAT breakdown (BG-23) with the VAT category code (BT-118) equal to "Exempt from VAT".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;AE&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;AE&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âReverse chargeâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "VAT reverse charge".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;K&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;K&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIntra-community supplyâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Intra-community supply".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;G&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;G&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âExport outside the EUâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Export outside the EU".</assert>
+            <assert test="not(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;]) or (     count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;])=1 and     (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;] or    //ram:CategoryTradeTax[ram:CategoryCode=&apos;O&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âNot subject to VATâ shall contain exactly one VAT breakdown group (BG-23) with the VAT category code (BT-118) equal to "Not subject to VAT".</assert>
+            <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) and     ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;L&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;L&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIGICâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "IGIC".</assert>
+            <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) and     ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;M&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;M&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIPSIâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "IPSI".</assert>
+            <assert test="(number(//ram:DuePayableAmount) &gt; 0 and ((//ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime) or (//ram:SpecifiedTradePaymentTerms/ram:Description))) or not(number(//ram:DuePayableAmount)&gt;0)">
+                In case the Amount due for payment (BT-115) is positive, either the Payment due date (BT-9) or the Payment terms (BT-20) shall be present.</assert>
+            <assert test="//ram:BuyerTradeParty/ram:PostalTradeAddress">
+                An Invoice shall contain the Buyer postal address (BG-8).</assert>
+            <assert test="//ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;">
+                The Buyer postal address shall contain a Buyer country code (BT-55).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CategoryCode">
+            <report test="true()">
+                Element 'ram:CategoryCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ControlRequirementIndicator">
+            <report test="true()">
+                Element 'ram:ControlRequirementIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote">
+            <assert test="count(ram:Content)=1">
+                Element 'ram:Content' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ContentCode">
+            <report test="true()">
+                Element 'ram:ContentCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Subject">
+            <report test="true()">
+                Element 'ram:Subject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode">
+            <let name="codeValue3" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=3]/enumeration[@value=$codeValue3]">
+                Value of 'ram:SubjectCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:LanguageID">
+            <report test="true()">
+                Element 'ram:LanguageID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:Purpose">
+            <report test="true()">
+                Element 'ram:Purpose' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:PurposeCode">
+            <report test="true()">
+                Element 'ram:PurposeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:RevisionDateTime">
+            <report test="true()">
+                Element 'ram:RevisionDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode">
+            <let name="codeValue1" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=1]/enumeration[@value=$codeValue1]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:VersionID">
+            <report test="true()">
+                Element 'ram:VersionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext">
+            <assert test="count(ram:BusinessProcessSpecifiedDocumentContextParameter)&lt;=1">
+                Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GuidelineSpecifiedDocumentContextParameter)=1">
+                Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:ApplicationSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:ApplicationSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BIMSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:BIMSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:SpecifiedDocumentVersion">
+            <report test="true()">
+                Element 'ram:SpecifiedDocumentVersion' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:Value">
+            <report test="true()">
+                Element 'ram:Value' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:SpecifiedDocumentVersion">
+            <report test="true()">
+                Element 'ram:SpecifiedDocumentVersion' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:Value">
+            <report test="true()">
+                Element 'ram:Value' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:MessageStandardSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:MessageStandardSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:ScenarioSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:ScenarioSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:SpecifiedTransactionID">
+            <report test="true()">
+                Element 'ram:SpecifiedTransactionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:SubsetSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:SubsetSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:TestIndicator">
+            <report test="true()">
+                Element 'ram:TestIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement">
+            <assert test="count(ram:SellerTradeParty)=1">
+                Element 'ram:SellerTradeParty' must occur exactly 1 times.</assert>
+            <assert test="count(ram:BuyerTradeParty)=1">
+                Element 'ram:BuyerTradeParty' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ApplicableTradeDeliveryTerms">
+            <report test="true()">
+                Element 'ram:ApplicableTradeDeliveryTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerAgentTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerAgentTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerAssignedAccountantTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerAssignedAccountantTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerReference[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerReference[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerRequisitionerTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerRequisitionerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTaxRepresentativeTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerTaxRepresentativeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:PostalTradeAddress)=1">
+                Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:SpecifiedTaxRegistration)&lt;=1">
+                Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact">
+            <report test="true()">
+                Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue8" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=8]/enumeration[@value=$codeValue8]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+            <let name="codeValue9" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=9]/enumeration[@value=$codeValue9]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName">
+            <report test="true()">
+                Element 'ram:TradingBusinessName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue10" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue6" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=6]/enumeration[@value=$codeValue6]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:DemandForecastReferencedDocument">
+            <report test="true()">
+                Element 'ram:DemandForecastReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:OrderResponseReferencedDocument">
+            <report test="true()">
+                Element 'ram:OrderResponseReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PriceListReferencedDocument">
+            <report test="true()">
+                Element 'ram:PriceListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty">
+            <report test="true()">
+                Element 'ram:ProductEndUserTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PromotionalDealReferencedDocument">
+            <report test="true()">
+                Element 'ram:PromotionalDealReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PurchaseConditionsReferencedDocument">
+            <report test="true()">
+                Element 'ram:PurchaseConditionsReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:QuotationReferencedDocument">
+            <report test="true()">
+                Element 'ram:QuotationReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:Reference">
+            <report test="true()">
+                Element 'ram:Reference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:RequisitionerReferencedDocument">
+            <report test="true()">
+                Element 'ram:RequisitionerReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SalesAgentTradeParty">
+            <report test="true()">
+                Element 'ram:SalesAgentTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerAssignedAccountantTradeParty">
+            <report test="true()">
+                Element 'ram:SellerAssignedAccountantTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument">
+            <report test="true()">
+                Element 'ram:SellerOrderReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty">
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:PostalTradeAddress)=1">
+                Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+            <assert test="count(ram:SpecifiedTaxRegistration)=1">
+                Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact">
+            <report test="true()">
+                Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization">
+            <report test="true()">
+                Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue11" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=11]/enumeration[@value=$codeValue11]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:URIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty">
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:PostalTradeAddress)=1">
+                Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact">
+            <report test="true()">
+                Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue4" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=4]/enumeration[@value=$codeValue4]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+            <let name="codeValue5" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=5]/enumeration[@value=$codeValue5]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue7" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=7]/enumeration[@value=$codeValue7]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue6" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=6]/enumeration[@value=$codeValue6]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject">
+            <report test="true()">
+                Element 'ram:SpecifiedProcuringProject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SupplyInstructionReferencedDocument">
+            <report test="true()">
+                Element 'ram:SupplyInstructionReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument">
+            <report test="true()">
+                Element 'ram:UltimateCustomerOrderReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery">
+            <assert test="(ram:ShipToTradeParty/ram:PostalTradeAddress and ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;) or not (ram:ShipToTradeParty/ram:PostalTradeAddress)">
+                Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:DescriptionBinaryObject">
+            <report test="true()">
+                Element 'ram:DescriptionBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:EarliestOccurrenceDateTime">
+            <report test="true()">
+                Element 'ram:EarliestOccurrenceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:LatestOccurrenceDateTime">
+            <report test="true()">
+                Element 'ram:LatestOccurrenceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceLogisticsLocation">
+            <report test="true()">
+                Element 'ram:OccurrenceLogisticsLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:OccurrenceSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:UnitQuantity">
+            <report test="true()">
+                Element 'ram:UnitQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDespatchSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualDespatchSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualPickUpSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualPickUpSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualReceiptSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualReceiptSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:AdditionalReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ConsumptionReportReferencedDocument">
+            <report test="true()">
+                Element 'ram:ConsumptionReportReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument">
+            <report test="true()">
+                Element 'ram:DeliveryNoteReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:PackingListReferencedDocument">
+            <report test="true()">
+                Element 'ram:PackingListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:PreviousDeliverySupplyChainEvent">
+            <report test="true()">
+                Element 'ram:PreviousDeliverySupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument">
+            <report test="true()">
+                Element 'ram:ReceivingAdviceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment">
+            <report test="true()">
+                Element 'ram:RelatedSupplyChainConsignment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty">
+            <report test="true()">
+                Element 'ram:ShipFromTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GlobalID)&lt;=1">
+                Element 'ram:GlobalID' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact">
+            <report test="true()">
+                Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization">
+            <report test="true()">
+                Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration">
+            <report test="true()">
+                Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:URIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty">
+            <report test="true()">
+                Element 'ram:UltimateShipToTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement">
+            <assert test="count(ram:PaymentReference)&lt;=1">
+                Element 'ram:PaymentReference' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:InvoiceCurrencyCode)=1">
+                Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ApplicableTradeTax)&gt;=1">
+                Element 'ram:ApplicableTradeTax' must occur at least 1 times.</assert>
+            <assert test="count(ram:SpecifiedTradePaymentTerms)&lt;=1">
+                Element 'ram:SpecifiedTradePaymentTerms' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:SpecifiedTradeSettlementHeaderMonetarySummation)=1">
+                Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+            <assert test="count(ram:CalculatedAmount)=1">
+                Element 'ram:CalculatedAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:BasisAmount)=1">
+                Element 'ram:BasisAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryCode)=1">
+                Element 'ram:CategoryCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:AllowanceChargeBasisAmount">
+            <report test="true()">
+                Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode">
+            <let name="codeValue17" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=17]/enumeration[@value=$codeValue17]">
+                Value of 'ram:CategoryCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode">
+            <let name="codeValue18" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=18]/enumeration[@value=$codeValue18]">
+                Value of 'ram:ExemptionReasonCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:LineTotalBasisAmount">
+            <report test="true()">
+                Element 'ram:LineTotalBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate">
+            <report test="true()">
+                Element 'ram:TaxPointDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode">
+            <let name="codeValue16" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=16]/enumeration[@value=$codeValue16]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:CompleteDateTime">
+            <report test="true()">
+                Element 'ram:CompleteDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:ContinuousIndicator">
+            <report test="true()">
+                Element 'ram:ContinuousIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:DurationMeasure">
+            <report test="true()">
+                Element 'ram:DurationMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:InclusiveIndicator">
+            <report test="true()">
+                Element 'ram:InclusiveIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:OpenIndicator">
+            <report test="true()">
+                Element 'ram:OpenIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:PurposeCode">
+            <report test="true()">
+                Element 'ram:PurposeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:SeasonCode">
+            <report test="true()">
+                Element 'ram:SeasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateFlexibilityCode">
+            <report test="true()">
+                Element 'ram:StartDateFlexibilityCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditReason">
+            <report test="true()">
+                Element 'ram:CreditReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditReasonCode">
+            <report test="true()">
+                Element 'ram:CreditReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceIssuerID">
+            <report test="true()">
+                Element 'ram:CreditorReferenceIssuerID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceType">
+            <report test="true()">
+                Element 'ram:CreditorReferenceType' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:CreditorReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:DuePayableAmount">
+            <report test="true()">
+                Element 'ram:DuePayableAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:FactoringAgreementReferencedDocument">
+            <report test="true()">
+                Element 'ram:FactoringAgreementReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:FactoringListReferencedDocument">
+            <report test="true()">
+                Element 'ram:FactoringListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceApplicableTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:InvoiceApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceDateTime">
+            <report test="true()">
+                Element 'ram:InvoiceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceIssuerReference">
+            <report test="true()">
+                Element 'ram:InvoiceIssuerReference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument">
+            <assert test="(ram:IssuerAssignedID!=&apos;&apos;)">
+                Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25).</assert>
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue22" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=22]/enumeration[@value=$codeValue22]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty">
+            <report test="true()">
+                Element 'ram:InvoiceeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty">
+            <report test="true()">
+                Element 'ram:InvoicerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:LetterOfCreditReferencedDocument">
+            <report test="true()">
+                Element 'ram:LetterOfCreditReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:NextInvoiceDateTime">
+            <report test="true()">
+                Element 'ram:NextInvoiceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayableSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PayableSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GlobalID)&lt;=1">
+                Element 'ram:GlobalID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact">
+            <report test="true()">
+                Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue13" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=13]/enumeration[@value=$codeValue13]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+            <let name="codeValue14" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=14]/enumeration[@value=$codeValue14]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName">
+            <report test="true()">
+                Element 'ram:TradingBusinessName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration">
+            <report test="true()">
+                Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:URIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayerTradeParty">
+            <report test="true()">
+                Element 'ram:PayerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentApplicableTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:PaymentApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentCurrencyCode">
+            <report test="true()">
+                Element 'ram:PaymentCurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentReference[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentReference[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ProFormaInvoiceReferencedDocument">
+            <report test="true()">
+                Element 'ram:ProFormaInvoiceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PurchaseSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PurchaseSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:AmountTypeCode">
+            <report test="true()">
+                Element 'ram:AmountTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:CostReferenceDimensionPattern">
+            <report test="true()">
+                Element 'ram:CostReferenceDimensionPattern' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:SetTriggerCode">
+            <report test="true()">
+                Element 'ram:SetTriggerCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SalesSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SalesSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment">
+            <report test="true()">
+                Element 'ram:SpecifiedAdvancePayment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedFinancialAdjustment">
+            <report test="true()">
+                Element 'ram:SpecifiedFinancialAdjustment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge">
+            <report test="true()">
+                Element 'ram:SpecifiedLogisticsServiceCharge' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge">
+            <assert test="count(ram:ChargeIndicator)=1">
+                Element 'ram:ChargeIndicator' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ActualAmount)=1">
+                Element 'ram:ActualAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryTradeTax)=1">
+                Element 'ram:CategoryTradeTax' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:ActualTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryCode)=1">
+                Element 'ram:CategoryCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:AllowanceChargeBasisAmount">
+            <report test="true()">
+                Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BasisAmount">
+            <report test="true()">
+                Element 'ram:BasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CalculatedAmount">
+            <report test="true()">
+                Element 'ram:CalculatedAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode">
+            <let name="codeValue20" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=20]/enumeration[@value=$codeValue20]">
+                Value of 'ram:CategoryCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:DueDateTypeCode">
+            <report test="true()">
+                Element 'ram:DueDateTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:ExemptionReason">
+            <report test="true()">
+                Element 'ram:ExemptionReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:ExemptionReasonCode">
+            <report test="true()">
+                Element 'ram:ExemptionReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:LineTotalBasisAmount">
+            <report test="true()">
+                Element 'ram:LineTotalBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TaxPointDate">
+            <report test="true()">
+                Element 'ram:TaxPointDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode">
+            <let name="codeValue19" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=19]/enumeration[@value=$codeValue19]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator/udt:IndicatorString">
+            <report test="true()">
+                Element 'udt:IndicatorString' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:PrepaidIndicator">
+            <report test="true()">
+                Element 'ram:PrepaidIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms">
+            <assert test="count(ram:DirectDebitMandateID)&lt;=1">
+                Element 'ram:DirectDebitMandateID' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms">
+            <report test="true()">
+                Element 'ram:ApplicableTradePaymentDiscountTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms">
+            <report test="true()">
+                Element 'ram:ApplicableTradePaymentPenaltyTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:FromEventCode">
+            <report test="true()">
+                Element 'ram:FromEventCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:InstructionTypeCode">
+            <report test="true()">
+                Element 'ram:InstructionTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PartialPaymentAmount">
+            <report test="true()">
+                Element 'ram:PartialPaymentAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PartialPaymentPercent">
+            <report test="true()">
+                Element 'ram:PartialPaymentPercent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PayeeTradeParty">
+            <report test="true()">
+                Element 'ram:PayeeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PaymentMeansID">
+            <report test="true()">
+                Element 'ram:PaymentMeansID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:SettlementPeriodMeasure">
+            <report test="true()">
+                Element 'ram:SettlementPeriodMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementFinancialCard">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeSettlementFinancialCard' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation">
+            <assert test="count(ram:LineTotalAmount)=1">
+                Element 'ram:LineTotalAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ChargeTotalAmount)&lt;=1">
+                Element 'ram:ChargeTotalAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:AllowanceTotalAmount)&lt;=1">
+                Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:TaxBasisTotalAmount)=1">
+                Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TaxTotalAmount)&lt;=1">
+                Element 'ram:TaxTotalAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GrandTotalAmount)=1">
+                Element 'ram:GrandTotalAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TotalPrepaidAmount)&lt;=1">
+                Element 'ram:TotalPrepaidAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:DuePayableAmount)=1">
+                Element 'ram:DuePayableAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrossLineTotalAmount">
+            <report test="true()">
+                Element 'ram:GrossLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:NetIncludingTaxesLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetIncludingTaxesLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:NetLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ProductValueExcludingTobaccoTaxInformationAmount">
+            <report test="true()">
+                Element 'ram:ProductValueExcludingTobaccoTaxInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RetailValueExcludingTaxInformationAmount">
+            <report test="true()">
+                Element 'ram:RetailValueExcludingTaxInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount">
+            <report test="true()">
+                Element 'ram:RoundingAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID]">
+            <let name="codeValue21" value="@currencyID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=21]/enumeration[@value=$codeValue21]">
+                Value of '@currencyID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalAllowanceChargeAmount">
+            <report test="true()">
+                Element 'ram:TotalAllowanceChargeAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalDepositFeeInformationAmount">
+            <report test="true()">
+                Element 'ram:TotalDepositFeeInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalDiscountAmount">
+            <report test="true()">
+                Element 'ram:TotalDiscountAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalRetailValueInformationAmount">
+            <report test="true()">
+                Element 'ram:TotalRetailValueInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard">
+            <report test="true()">
+                Element 'ram:ApplicableTradeSettlementFinancialCard' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:GuaranteeMethodCode">
+            <report test="true()">
+                Element 'ram:GuaranteeMethodCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName">
+            <report test="true()">
+                Element 'ram:AccountName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution">
+            <report test="true()">
+                Element 'ram:PayeeSpecifiedCreditorFinancialInstitution' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount">
+            <assert test="count(ram:IBANID)=1">
+                Element 'ram:IBANID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:AccountName">
+            <report test="true()">
+                Element 'ram:AccountName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:ProprietaryID">
+            <report test="true()">
+                Element 'ram:ProprietaryID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerSpecifiedDebtorFinancialInstitution">
+            <report test="true()">
+                Element 'ram:PayerSpecifiedDebtorFinancialInstitution' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PaymentChannelCode">
+            <report test="true()">
+                Element 'ram:PaymentChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PaymentMethodCode">
+            <report test="true()">
+                Element 'ram:PaymentMethodCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode">
+            <let name="codeValue15" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC-WL_codedb.xml&apos;)//cl[@id=15]/enumeration[@value=$codeValue15]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SubtotalCalculatedTradeTax">
+            <report test="true()">
+                Element 'ram:SubtotalCalculatedTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:TaxApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode">
+            <report test="true()">
+                Element 'ram:TaxCurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:UltimatePayeeTradeParty">
+            <report test="true()">
+                Element 'ram:UltimatePayeeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem">
+            <report test="true()">
+                Element 'ram:IncludedSupplyChainTradeLineItem' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ValuationBreakdownStatement">
+            <report test="true()">
+                Element 'rsm:ValuationBreakdownStatement' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+</schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL_codedb.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL_codedb.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC-WL_codedb.xml	(revision 8435)
@@ -0,0 +1,2276 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<codedb>
+    <cl id="1">
+        <enumeration value="80"/>
+        <enumeration value="81"/>
+        <enumeration value="82"/>
+        <enumeration value="83"/>
+        <enumeration value="84"/>
+        <enumeration value="130"/>
+        <enumeration value="202"/>
+        <enumeration value="203"/>
+        <enumeration value="204"/>
+        <enumeration value="211"/>
+        <enumeration value="261"/>
+        <enumeration value="262"/>
+        <enumeration value="295"/>
+        <enumeration value="296"/>
+        <enumeration value="308"/>
+        <enumeration value="325"/>
+        <enumeration value="326"/>
+        <enumeration value="380"/>
+        <enumeration value="381"/>
+        <enumeration value="383"/>
+        <enumeration value="384"/>
+        <enumeration value="385"/>
+        <enumeration value="386"/>
+        <enumeration value="387"/>
+        <enumeration value="388"/>
+        <enumeration value="389"/>
+        <enumeration value="390"/>
+        <enumeration value="393"/>
+        <enumeration value="394"/>
+        <enumeration value="395"/>
+        <enumeration value="396"/>
+        <enumeration value="420"/>
+        <enumeration value="456"/>
+        <enumeration value="457"/>
+        <enumeration value="458"/>
+        <enumeration value="527"/>
+        <enumeration value="575"/>
+        <enumeration value="623"/>
+        <enumeration value="633"/>
+        <enumeration value="751"/>
+        <enumeration value="780"/>
+        <enumeration value="935"/>
+    </cl>
+    <cl id="2">
+        <enumeration value="102"/>
+    </cl>
+    <cl id="3">
+        <enumeration value="AAA"/>
+        <enumeration value="AAB"/>
+        <enumeration value="AAC"/>
+        <enumeration value="AAD"/>
+        <enumeration value="AAE"/>
+        <enumeration value="AAF"/>
+        <enumeration value="AAG"/>
+        <enumeration value="AAI"/>
+        <enumeration value="AAJ"/>
+        <enumeration value="AAK"/>
+        <enumeration value="AAL"/>
+        <enumeration value="AAM"/>
+        <enumeration value="AAN"/>
+        <enumeration value="AAO"/>
+        <enumeration value="AAP"/>
+        <enumeration value="AAQ"/>
+        <enumeration value="AAR"/>
+        <enumeration value="AAS"/>
+        <enumeration value="AAT"/>
+        <enumeration value="AAU"/>
+        <enumeration value="AAV"/>
+        <enumeration value="AAW"/>
+        <enumeration value="AAX"/>
+        <enumeration value="AAY"/>
+        <enumeration value="AAZ"/>
+        <enumeration value="ABA"/>
+        <enumeration value="ABB"/>
+        <enumeration value="ABC"/>
+        <enumeration value="ABD"/>
+        <enumeration value="ABE"/>
+        <enumeration value="ABF"/>
+        <enumeration value="ABG"/>
+        <enumeration value="ABH"/>
+        <enumeration value="ABI"/>
+        <enumeration value="ABJ"/>
+        <enumeration value="ABK"/>
+        <enumeration value="ABL"/>
+        <enumeration value="ABM"/>
+        <enumeration value="ABN"/>
+        <enumeration value="ABO"/>
+        <enumeration value="ABP"/>
+        <enumeration value="ABQ"/>
+        <enumeration value="ABR"/>
+        <enumeration value="ABS"/>
+        <enumeration value="ABT"/>
+        <enumeration value="ABU"/>
+        <enumeration value="ABV"/>
+        <enumeration value="ABW"/>
+        <enumeration value="ABX"/>
+        <enumeration value="ABZ"/>
+        <enumeration value="ACA"/>
+        <enumeration value="ACB"/>
+        <enumeration value="ACC"/>
+        <enumeration value="ACD"/>
+        <enumeration value="ACE"/>
+        <enumeration value="ACF"/>
+        <enumeration value="ACG"/>
+        <enumeration value="ACH"/>
+        <enumeration value="ACI"/>
+        <enumeration value="ACJ"/>
+        <enumeration value="ACK"/>
+        <enumeration value="ACL"/>
+        <enumeration value="ACM"/>
+        <enumeration value="ACN"/>
+        <enumeration value="ACO"/>
+        <enumeration value="ACP"/>
+        <enumeration value="ACQ"/>
+        <enumeration value="ACR"/>
+        <enumeration value="ACS"/>
+        <enumeration value="ACT"/>
+        <enumeration value="ACU"/>
+        <enumeration value="ACV"/>
+        <enumeration value="ACW"/>
+        <enumeration value="ACX"/>
+        <enumeration value="ACY"/>
+        <enumeration value="ACZ"/>
+        <enumeration value="ADA"/>
+        <enumeration value="ADB"/>
+        <enumeration value="ADC"/>
+        <enumeration value="ADD"/>
+        <enumeration value="ADE"/>
+        <enumeration value="ADF"/>
+        <enumeration value="ADG"/>
+        <enumeration value="ADH"/>
+        <enumeration value="ADI"/>
+        <enumeration value="ADJ"/>
+        <enumeration value="ADK"/>
+        <enumeration value="ADL"/>
+        <enumeration value="ADM"/>
+        <enumeration value="ADN"/>
+        <enumeration value="ADO"/>
+        <enumeration value="ADP"/>
+        <enumeration value="ADQ"/>
+        <enumeration value="ADR"/>
+        <enumeration value="ADS"/>
+        <enumeration value="ADT"/>
+        <enumeration value="ADU"/>
+        <enumeration value="ADV"/>
+        <enumeration value="ADW"/>
+        <enumeration value="ADX"/>
+        <enumeration value="ADY"/>
+        <enumeration value="ADZ"/>
+        <enumeration value="AEA"/>
+        <enumeration value="AEB"/>
+        <enumeration value="AEC"/>
+        <enumeration value="AED"/>
+        <enumeration value="AEE"/>
+        <enumeration value="AEF"/>
+        <enumeration value="AEG"/>
+        <enumeration value="AEH"/>
+        <enumeration value="AEI"/>
+        <enumeration value="AEJ"/>
+        <enumeration value="AEK"/>
+        <enumeration value="AEL"/>
+        <enumeration value="AEM"/>
+        <enumeration value="AEN"/>
+        <enumeration value="AEO"/>
+        <enumeration value="AEP"/>
+        <enumeration value="AEQ"/>
+        <enumeration value="AER"/>
+        <enumeration value="AES"/>
+        <enumeration value="AET"/>
+        <enumeration value="AEU"/>
+        <enumeration value="AEV"/>
+        <enumeration value="AEW"/>
+        <enumeration value="AEX"/>
+        <enumeration value="AEY"/>
+        <enumeration value="AEZ"/>
+        <enumeration value="AFA"/>
+        <enumeration value="AFB"/>
+        <enumeration value="AFC"/>
+        <enumeration value="AFD"/>
+        <enumeration value="AFE"/>
+        <enumeration value="AFF"/>
+        <enumeration value="AFG"/>
+        <enumeration value="AFH"/>
+        <enumeration value="AFI"/>
+        <enumeration value="AFJ"/>
+        <enumeration value="AFK"/>
+        <enumeration value="AFL"/>
+        <enumeration value="AFM"/>
+        <enumeration value="AFN"/>
+        <enumeration value="AFO"/>
+        <enumeration value="AFP"/>
+        <enumeration value="AFQ"/>
+        <enumeration value="AFR"/>
+        <enumeration value="AFS"/>
+        <enumeration value="AFT"/>
+        <enumeration value="AFU"/>
+        <enumeration value="AFV"/>
+        <enumeration value="AFW"/>
+        <enumeration value="AFX"/>
+        <enumeration value="AFY"/>
+        <enumeration value="AFZ"/>
+        <enumeration value="AGA"/>
+        <enumeration value="AGB"/>
+        <enumeration value="AGC"/>
+        <enumeration value="AGD"/>
+        <enumeration value="AGE"/>
+        <enumeration value="AGF"/>
+        <enumeration value="AGG"/>
+        <enumeration value="AGH"/>
+        <enumeration value="AGI"/>
+        <enumeration value="AGJ"/>
+        <enumeration value="AGK"/>
+        <enumeration value="AGL"/>
+        <enumeration value="AGM"/>
+        <enumeration value="AGN"/>
+        <enumeration value="AGO"/>
+        <enumeration value="AGP"/>
+        <enumeration value="AGQ"/>
+        <enumeration value="AGR"/>
+        <enumeration value="AGS"/>
+        <enumeration value="AGT"/>
+        <enumeration value="AGU"/>
+        <enumeration value="AGV"/>
+        <enumeration value="AGW"/>
+        <enumeration value="AGX"/>
+        <enumeration value="AGY"/>
+        <enumeration value="AGZ"/>
+        <enumeration value="AHA"/>
+        <enumeration value="AHB"/>
+        <enumeration value="AHC"/>
+        <enumeration value="AHD"/>
+        <enumeration value="AHE"/>
+        <enumeration value="AHF"/>
+        <enumeration value="AHG"/>
+        <enumeration value="AHH"/>
+        <enumeration value="AHI"/>
+        <enumeration value="AHJ"/>
+        <enumeration value="AHK"/>
+        <enumeration value="AHL"/>
+        <enumeration value="AHM"/>
+        <enumeration value="AHN"/>
+        <enumeration value="AHO"/>
+        <enumeration value="AHP"/>
+        <enumeration value="AHQ"/>
+        <enumeration value="AHR"/>
+        <enumeration value="AHS"/>
+        <enumeration value="AHT"/>
+        <enumeration value="AHU"/>
+        <enumeration value="AHV"/>
+        <enumeration value="AHW"/>
+        <enumeration value="AHX"/>
+        <enumeration value="AHY"/>
+        <enumeration value="AHZ"/>
+        <enumeration value="AIA"/>
+        <enumeration value="AIB"/>
+        <enumeration value="AIC"/>
+        <enumeration value="AID"/>
+        <enumeration value="AIE"/>
+        <enumeration value="AIF"/>
+        <enumeration value="AIG"/>
+        <enumeration value="AIH"/>
+        <enumeration value="AII"/>
+        <enumeration value="AIJ"/>
+        <enumeration value="AIK"/>
+        <enumeration value="AIL"/>
+        <enumeration value="AIM"/>
+        <enumeration value="AIN"/>
+        <enumeration value="AIO"/>
+        <enumeration value="AIP"/>
+        <enumeration value="AIQ"/>
+        <enumeration value="AIR"/>
+        <enumeration value="AIS"/>
+        <enumeration value="AIT"/>
+        <enumeration value="AIU"/>
+        <enumeration value="AIV"/>
+        <enumeration value="AIW"/>
+        <enumeration value="AIX"/>
+        <enumeration value="AIY"/>
+        <enumeration value="AIZ"/>
+        <enumeration value="AJA"/>
+        <enumeration value="AJB"/>
+        <enumeration value="ALC"/>
+        <enumeration value="ALD"/>
+        <enumeration value="ALE"/>
+        <enumeration value="ALF"/>
+        <enumeration value="ALG"/>
+        <enumeration value="ALH"/>
+        <enumeration value="ALI"/>
+        <enumeration value="ALJ"/>
+        <enumeration value="ALK"/>
+        <enumeration value="ALL"/>
+        <enumeration value="ALM"/>
+        <enumeration value="ALN"/>
+        <enumeration value="ALO"/>
+        <enumeration value="ALP"/>
+        <enumeration value="ALQ"/>
+        <enumeration value="ARR"/>
+        <enumeration value="ARS"/>
+        <enumeration value="AUT"/>
+        <enumeration value="AUU"/>
+        <enumeration value="AUV"/>
+        <enumeration value="AUW"/>
+        <enumeration value="AUX"/>
+        <enumeration value="AUY"/>
+        <enumeration value="AUZ"/>
+        <enumeration value="AVA"/>
+        <enumeration value="AVB"/>
+        <enumeration value="AVC"/>
+        <enumeration value="AVD"/>
+        <enumeration value="AVE"/>
+        <enumeration value="AVF"/>
+        <enumeration value="BAG"/>
+        <enumeration value="BAH"/>
+        <enumeration value="BAI"/>
+        <enumeration value="BAJ"/>
+        <enumeration value="BAK"/>
+        <enumeration value="BAL"/>
+        <enumeration value="BAM"/>
+        <enumeration value="BAN"/>
+        <enumeration value="BAO"/>
+        <enumeration value="BAP"/>
+        <enumeration value="BAQ"/>
+        <enumeration value="BAR"/>
+        <enumeration value="BAS"/>
+        <enumeration value="BLC"/>
+        <enumeration value="BLD"/>
+        <enumeration value="BLE"/>
+        <enumeration value="BLF"/>
+        <enumeration value="BLG"/>
+        <enumeration value="BLH"/>
+        <enumeration value="BLI"/>
+        <enumeration value="BLJ"/>
+        <enumeration value="BLK"/>
+        <enumeration value="BLL"/>
+        <enumeration value="BLM"/>
+        <enumeration value="BLN"/>
+        <enumeration value="BLO"/>
+        <enumeration value="BLP"/>
+        <enumeration value="BLQ"/>
+        <enumeration value="BLR"/>
+        <enumeration value="BLS"/>
+        <enumeration value="BLT"/>
+        <enumeration value="BLU"/>
+        <enumeration value="BLV"/>
+        <enumeration value="BLW"/>
+        <enumeration value="BLX"/>
+        <enumeration value="BLY"/>
+        <enumeration value="BLZ"/>
+        <enumeration value="BMA"/>
+        <enumeration value="BMB"/>
+        <enumeration value="BMC"/>
+        <enumeration value="BMD"/>
+        <enumeration value="BME"/>
+        <enumeration value="CCI"/>
+        <enumeration value="CEX"/>
+        <enumeration value="CHG"/>
+        <enumeration value="CIP"/>
+        <enumeration value="CLP"/>
+        <enumeration value="CLR"/>
+        <enumeration value="COI"/>
+        <enumeration value="CUR"/>
+        <enumeration value="CUS"/>
+        <enumeration value="DAR"/>
+        <enumeration value="DCL"/>
+        <enumeration value="DEL"/>
+        <enumeration value="DIN"/>
+        <enumeration value="DOC"/>
+        <enumeration value="DUT"/>
+        <enumeration value="EUR"/>
+        <enumeration value="FBC"/>
+        <enumeration value="GBL"/>
+        <enumeration value="GEN"/>
+        <enumeration value="GS7"/>
+        <enumeration value="HAN"/>
+        <enumeration value="HAZ"/>
+        <enumeration value="ICN"/>
+        <enumeration value="IIN"/>
+        <enumeration value="IMI"/>
+        <enumeration value="IND"/>
+        <enumeration value="INS"/>
+        <enumeration value="INV"/>
+        <enumeration value="IRP"/>
+        <enumeration value="ITR"/>
+        <enumeration value="ITS"/>
+        <enumeration value="LAN"/>
+        <enumeration value="LIN"/>
+        <enumeration value="LOI"/>
+        <enumeration value="MCO"/>
+        <enumeration value="MDH"/>
+        <enumeration value="MKS"/>
+        <enumeration value="ORI"/>
+        <enumeration value="OSI"/>
+        <enumeration value="PAC"/>
+        <enumeration value="PAI"/>
+        <enumeration value="PAY"/>
+        <enumeration value="PKG"/>
+        <enumeration value="PKT"/>
+        <enumeration value="PMD"/>
+        <enumeration value="PMT"/>
+        <enumeration value="PRD"/>
+        <enumeration value="PRF"/>
+        <enumeration value="PRI"/>
+        <enumeration value="PUR"/>
+        <enumeration value="QIN"/>
+        <enumeration value="QQD"/>
+        <enumeration value="QUT"/>
+        <enumeration value="RAH"/>
+        <enumeration value="REG"/>
+        <enumeration value="RET"/>
+        <enumeration value="REV"/>
+        <enumeration value="RQR"/>
+        <enumeration value="SAF"/>
+        <enumeration value="SIC"/>
+        <enumeration value="SIN"/>
+        <enumeration value="SLR"/>
+        <enumeration value="SPA"/>
+        <enumeration value="SPG"/>
+        <enumeration value="SPH"/>
+        <enumeration value="SPP"/>
+        <enumeration value="SPT"/>
+        <enumeration value="SRN"/>
+        <enumeration value="SSR"/>
+        <enumeration value="SUR"/>
+        <enumeration value="TCA"/>
+        <enumeration value="TDT"/>
+        <enumeration value="TRA"/>
+        <enumeration value="TRR"/>
+        <enumeration value="TXD"/>
+        <enumeration value="WHI"/>
+        <enumeration value="ZZZ"/>
+    </cl>
+    <cl id="4">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="5">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="6">
+        <enumeration value="0002"/>
+        <enumeration value="0007"/>
+        <enumeration value="0009"/>
+        <enumeration value="0037"/>
+        <enumeration value="0060"/>
+        <enumeration value="0088"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0106"/>
+        <enumeration value="0130"/>
+        <enumeration value="0135"/>
+        <enumeration value="0142"/>
+        <enumeration value="0151"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+        <enumeration value="9901"/>
+        <enumeration value="9902"/>
+        <enumeration value="9904"/>
+        <enumeration value="9905"/>
+        <enumeration value="9906"/>
+        <enumeration value="9907"/>
+        <enumeration value="9910"/>
+        <enumeration value="9913"/>
+        <enumeration value="9914"/>
+        <enumeration value="9915"/>
+        <enumeration value="9918"/>
+        <enumeration value="9919"/>
+        <enumeration value="9920"/>
+        <enumeration value="9922"/>
+        <enumeration value="9923"/>
+        <enumeration value="9924"/>
+        <enumeration value="9925"/>
+        <enumeration value="9926"/>
+        <enumeration value="9927"/>
+        <enumeration value="9928"/>
+        <enumeration value="9929"/>
+        <enumeration value="9930"/>
+        <enumeration value="9931"/>
+        <enumeration value="9932"/>
+        <enumeration value="9933"/>
+        <enumeration value="9934"/>
+        <enumeration value="9935"/>
+        <enumeration value="9936"/>
+        <enumeration value="9937"/>
+        <enumeration value="9938"/>
+        <enumeration value="9939"/>
+        <enumeration value="9940"/>
+        <enumeration value="9941"/>
+        <enumeration value="9942"/>
+        <enumeration value="9943"/>
+        <enumeration value="9944"/>
+        <enumeration value="9945"/>
+        <enumeration value="9946"/>
+        <enumeration value="9947"/>
+        <enumeration value="9948"/>
+        <enumeration value="9949"/>
+        <enumeration value="9950"/>
+        <enumeration value="9951"/>
+        <enumeration value="9952"/>
+        <enumeration value="9953"/>
+        <enumeration value="9955"/>
+        <enumeration value="9956"/>
+        <enumeration value="9957"/>
+        <enumeration value="9958"/>
+        <enumeration value="AN"/>
+        <enumeration value="AQ"/>
+        <enumeration value="AS"/>
+        <enumeration value="AU"/>
+        <enumeration value="EM"/>
+    </cl>
+    <cl id="7">
+        <enumeration value="FC"/>
+        <enumeration value="VA"/>
+    </cl>
+    <cl id="8">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="9">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="10">
+        <enumeration value="VA"/>
+    </cl>
+    <cl id="11">
+        <enumeration value="VA"/>
+    </cl>
+    <cl id="12">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="13">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="14">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="15">
+        <enumeration value="10"/>
+        <enumeration value="20"/>
+        <enumeration value="30"/>
+        <enumeration value="42"/>
+        <enumeration value="48"/>
+        <enumeration value="49"/>
+        <enumeration value="57"/>
+        <enumeration value="58"/>
+        <enumeration value="59"/>
+        <enumeration value="97"/>
+        <enumeration value="ZZZ"/>
+    </cl>
+    <cl id="16">
+        <enumeration value="VAT"/>
+    </cl>
+    <cl id="17">
+        <enumeration value="AE"/>
+        <enumeration value="E"/>
+        <enumeration value="G"/>
+        <enumeration value="K"/>
+        <enumeration value="L"/>
+        <enumeration value="M"/>
+        <enumeration value="O"/>
+        <enumeration value="S"/>
+        <enumeration value="Z"/>
+    </cl>
+    <cl id="18">
+        <enumeration value="vatex-eu-132"/>
+        <enumeration value="VATEX-EU-132"/>
+        <enumeration value="vatex-eu-132-1a"/>
+        <enumeration value="VATEX-EU-132-1A"/>
+        <enumeration value="vatex-eu-132-1b"/>
+        <enumeration value="VATEX-EU-132-1B"/>
+        <enumeration value="vatex-eu-132-1c"/>
+        <enumeration value="VATEX-EU-132-1C"/>
+        <enumeration value="vatex-eu-132-1d"/>
+        <enumeration value="VATEX-EU-132-1D"/>
+        <enumeration value="vatex-eu-132-1e"/>
+        <enumeration value="VATEX-EU-132-1E"/>
+        <enumeration value="vatex-eu-132-1f"/>
+        <enumeration value="VATEX-EU-132-1F"/>
+        <enumeration value="vatex-eu-132-1g"/>
+        <enumeration value="VATEX-EU-132-1G"/>
+        <enumeration value="vatex-eu-132-1h"/>
+        <enumeration value="VATEX-EU-132-1H"/>
+        <enumeration value="vatex-eu-132-1i"/>
+        <enumeration value="VATEX-EU-132-1I"/>
+        <enumeration value="vatex-eu-132-1j"/>
+        <enumeration value="VATEX-EU-132-1J"/>
+        <enumeration value="vatex-eu-132-1k"/>
+        <enumeration value="VATEX-EU-132-1K"/>
+        <enumeration value="vatex-eu-132-1l"/>
+        <enumeration value="VATEX-EU-132-1L"/>
+        <enumeration value="vatex-eu-132-1m"/>
+        <enumeration value="VATEX-EU-132-1M"/>
+        <enumeration value="vatex-eu-132-1n"/>
+        <enumeration value="VATEX-EU-132-1N"/>
+        <enumeration value="vatex-eu-132-1o"/>
+        <enumeration value="VATEX-EU-132-1O"/>
+        <enumeration value="vatex-eu-132-1p"/>
+        <enumeration value="VATEX-EU-132-1P"/>
+        <enumeration value="vatex-eu-132-1q"/>
+        <enumeration value="VATEX-EU-132-1Q"/>
+        <enumeration value="vatex-eu-143"/>
+        <enumeration value="VATEX-EU-143"/>
+        <enumeration value="vatex-eu-143-1a"/>
+        <enumeration value="VATEX-EU-143-1A"/>
+        <enumeration value="vatex-eu-143-1b"/>
+        <enumeration value="VATEX-EU-143-1B"/>
+        <enumeration value="vatex-eu-143-1c"/>
+        <enumeration value="VATEX-EU-143-1C"/>
+        <enumeration value="vatex-eu-143-1d"/>
+        <enumeration value="VATEX-EU-143-1D"/>
+        <enumeration value="vatex-eu-143-1e"/>
+        <enumeration value="VATEX-EU-143-1E"/>
+        <enumeration value="vatex-eu-143-1f"/>
+        <enumeration value="VATEX-EU-143-1F"/>
+        <enumeration value="vatex-eu-143-1fa"/>
+        <enumeration value="VATEX-EU-143-1FA"/>
+        <enumeration value="vatex-eu-143-1g"/>
+        <enumeration value="VATEX-EU-143-1G"/>
+        <enumeration value="vatex-eu-143-1h"/>
+        <enumeration value="VATEX-EU-143-1H"/>
+        <enumeration value="vatex-eu-143-1i"/>
+        <enumeration value="VATEX-EU-143-1I"/>
+        <enumeration value="vatex-eu-143-1j"/>
+        <enumeration value="VATEX-EU-143-1J"/>
+        <enumeration value="vatex-eu-143-1k"/>
+        <enumeration value="VATEX-EU-143-1K"/>
+        <enumeration value="vatex-eu-143-1l"/>
+        <enumeration value="VATEX-EU-143-1L"/>
+        <enumeration value="vatex-eu-148"/>
+        <enumeration value="VATEX-EU-148"/>
+        <enumeration value="vatex-eu-148-a"/>
+        <enumeration value="VATEX-EU-148-A"/>
+        <enumeration value="vatex-eu-148-b"/>
+        <enumeration value="VATEX-EU-148-B"/>
+        <enumeration value="vatex-eu-148-c"/>
+        <enumeration value="VATEX-EU-148-C"/>
+        <enumeration value="vatex-eu-148-d"/>
+        <enumeration value="VATEX-EU-148-D"/>
+        <enumeration value="vatex-eu-148-e"/>
+        <enumeration value="VATEX-EU-148-E"/>
+        <enumeration value="vatex-eu-148-f"/>
+        <enumeration value="VATEX-EU-148-F"/>
+        <enumeration value="vatex-eu-148-g"/>
+        <enumeration value="VATEX-EU-148-G"/>
+        <enumeration value="vatex-eu-151"/>
+        <enumeration value="VATEX-EU-151"/>
+        <enumeration value="vatex-eu-151-1a"/>
+        <enumeration value="VATEX-EU-151-1A"/>
+        <enumeration value="vatex-eu-151-1aa"/>
+        <enumeration value="VATEX-EU-151-1AA"/>
+        <enumeration value="vatex-eu-151-1b"/>
+        <enumeration value="VATEX-EU-151-1B"/>
+        <enumeration value="vatex-eu-151-1c"/>
+        <enumeration value="VATEX-EU-151-1C"/>
+        <enumeration value="vatex-eu-151-1d"/>
+        <enumeration value="VATEX-EU-151-1D"/>
+        <enumeration value="vatex-eu-151-1e"/>
+        <enumeration value="VATEX-EU-151-1E"/>
+        <enumeration value="vatex-eu-309"/>
+        <enumeration value="VATEX-EU-309"/>
+        <enumeration value="vatex-eu-ae"/>
+        <enumeration value="VATEX-EU-AE"/>
+        <enumeration value="vatex-eu-d"/>
+        <enumeration value="VATEX-EU-D"/>
+        <enumeration value="vatex-eu-f"/>
+        <enumeration value="VATEX-EU-F"/>
+        <enumeration value="vatex-eu-g"/>
+        <enumeration value="VATEX-EU-G"/>
+        <enumeration value="vatex-eu-i"/>
+        <enumeration value="VATEX-EU-I"/>
+        <enumeration value="vatex-eu-ic"/>
+        <enumeration value="VATEX-EU-IC"/>
+        <enumeration value="vatex-eu-j"/>
+        <enumeration value="VATEX-EU-J"/>
+        <enumeration value="vatex-eu-o"/>
+        <enumeration value="VATEX-EU-O"/>
+    </cl>
+    <cl id="19">
+        <enumeration value="VAT"/>
+    </cl>
+    <cl id="20">
+        <enumeration value="AE"/>
+        <enumeration value="E"/>
+        <enumeration value="G"/>
+        <enumeration value="K"/>
+        <enumeration value="L"/>
+        <enumeration value="M"/>
+        <enumeration value="O"/>
+        <enumeration value="S"/>
+        <enumeration value="Z"/>
+    </cl>
+    <cl id="21">
+        <enumeration value="AED"/>
+        <enumeration value="AFN"/>
+        <enumeration value="ALL"/>
+        <enumeration value="AMD"/>
+        <enumeration value="ANG"/>
+        <enumeration value="AOA"/>
+        <enumeration value="ARS"/>
+        <enumeration value="AUD"/>
+        <enumeration value="AWG"/>
+        <enumeration value="AZN"/>
+        <enumeration value="BAM"/>
+        <enumeration value="BBD"/>
+        <enumeration value="BDT"/>
+        <enumeration value="BGN"/>
+        <enumeration value="BHD"/>
+        <enumeration value="BIF"/>
+        <enumeration value="BMD"/>
+        <enumeration value="BND"/>
+        <enumeration value="BOB"/>
+        <enumeration value="BOV"/>
+        <enumeration value="BRL"/>
+        <enumeration value="BSD"/>
+        <enumeration value="BTN"/>
+        <enumeration value="BWP"/>
+        <enumeration value="BYN"/>
+        <enumeration value="BZD"/>
+        <enumeration value="CAD"/>
+        <enumeration value="CDF"/>
+        <enumeration value="CHE"/>
+        <enumeration value="CHF"/>
+        <enumeration value="CHW"/>
+        <enumeration value="CLF"/>
+        <enumeration value="CLP"/>
+        <enumeration value="CNY"/>
+        <enumeration value="COP"/>
+        <enumeration value="COU"/>
+        <enumeration value="CRC"/>
+        <enumeration value="CUC"/>
+        <enumeration value="CUP"/>
+        <enumeration value="CVE"/>
+        <enumeration value="CZK"/>
+        <enumeration value="DJF"/>
+        <enumeration value="DKK"/>
+        <enumeration value="DOP"/>
+        <enumeration value="DZD"/>
+        <enumeration value="EGP"/>
+        <enumeration value="ERN"/>
+        <enumeration value="ETB"/>
+        <enumeration value="EUR"/>
+        <enumeration value="FJD"/>
+        <enumeration value="FKP"/>
+        <enumeration value="GBP"/>
+        <enumeration value="GEL"/>
+        <enumeration value="GHS"/>
+        <enumeration value="GIP"/>
+        <enumeration value="GMD"/>
+        <enumeration value="GNF"/>
+        <enumeration value="GTQ"/>
+        <enumeration value="GYD"/>
+        <enumeration value="HKD"/>
+        <enumeration value="HNL"/>
+        <enumeration value="HRK"/>
+        <enumeration value="HTG"/>
+        <enumeration value="HUF"/>
+        <enumeration value="IDR"/>
+        <enumeration value="ILS"/>
+        <enumeration value="INR"/>
+        <enumeration value="IQD"/>
+        <enumeration value="IRR"/>
+        <enumeration value="ISK"/>
+        <enumeration value="JMD"/>
+        <enumeration value="JOD"/>
+        <enumeration value="JPY"/>
+        <enumeration value="KES"/>
+        <enumeration value="KGS"/>
+        <enumeration value="KHR"/>
+        <enumeration value="KMF"/>
+        <enumeration value="KPW"/>
+        <enumeration value="KRW"/>
+        <enumeration value="KWD"/>
+        <enumeration value="KYD"/>
+        <enumeration value="KZT"/>
+        <enumeration value="LAK"/>
+        <enumeration value="LBP"/>
+        <enumeration value="LKR"/>
+        <enumeration value="LRD"/>
+        <enumeration value="LSL"/>
+        <enumeration value="LYD"/>
+        <enumeration value="MAD"/>
+        <enumeration value="MDL"/>
+        <enumeration value="MGA"/>
+        <enumeration value="MKD"/>
+        <enumeration value="MMK"/>
+        <enumeration value="MNT"/>
+        <enumeration value="MOP"/>
+        <enumeration value="MRU"/>
+        <enumeration value="MUR"/>
+        <enumeration value="MVR"/>
+        <enumeration value="MWK"/>
+        <enumeration value="MXN"/>
+        <enumeration value="MXV"/>
+        <enumeration value="MYR"/>
+        <enumeration value="MZN"/>
+        <enumeration value="NAD"/>
+        <enumeration value="NGN"/>
+        <enumeration value="NIO"/>
+        <enumeration value="NOK"/>
+        <enumeration value="NPR"/>
+        <enumeration value="NZD"/>
+        <enumeration value="OMR"/>
+        <enumeration value="PAB"/>
+        <enumeration value="PEN"/>
+        <enumeration value="PGK"/>
+        <enumeration value="PHP"/>
+        <enumeration value="PKR"/>
+        <enumeration value="PLN"/>
+        <enumeration value="PYG"/>
+        <enumeration value="QAR"/>
+        <enumeration value="RON"/>
+        <enumeration value="RSD"/>
+        <enumeration value="RUB"/>
+        <enumeration value="RWF"/>
+        <enumeration value="SAR"/>
+        <enumeration value="SBD"/>
+        <enumeration value="SCR"/>
+        <enumeration value="SDG"/>
+        <enumeration value="SEK"/>
+        <enumeration value="SGD"/>
+        <enumeration value="SHP"/>
+        <enumeration value="SLL"/>
+        <enumeration value="SOS"/>
+        <enumeration value="SRD"/>
+        <enumeration value="SSP"/>
+        <enumeration value="STN"/>
+        <enumeration value="SVC"/>
+        <enumeration value="SYP"/>
+        <enumeration value="SZL"/>
+        <enumeration value="THB"/>
+        <enumeration value="TJS"/>
+        <enumeration value="TMT"/>
+        <enumeration value="TND"/>
+        <enumeration value="TOP"/>
+        <enumeration value="TRY"/>
+        <enumeration value="TTD"/>
+        <enumeration value="TWD"/>
+        <enumeration value="TZS"/>
+        <enumeration value="UAH"/>
+        <enumeration value="UGX"/>
+        <enumeration value="USD"/>
+        <enumeration value="USN"/>
+        <enumeration value="UYI"/>
+        <enumeration value="UYU"/>
+        <enumeration value="UYW"/>
+        <enumeration value="UZS"/>
+        <enumeration value="VES"/>
+        <enumeration value="VND"/>
+        <enumeration value="VUV"/>
+        <enumeration value="WST"/>
+        <enumeration value="XAF"/>
+        <enumeration value="XAG"/>
+        <enumeration value="XAU"/>
+        <enumeration value="XBA"/>
+        <enumeration value="XBB"/>
+        <enumeration value="XBC"/>
+        <enumeration value="XBD"/>
+        <enumeration value="XCD"/>
+        <enumeration value="XDR"/>
+        <enumeration value="XOF"/>
+        <enumeration value="XPD"/>
+        <enumeration value="XPF"/>
+        <enumeration value="XPT"/>
+        <enumeration value="XSU"/>
+        <enumeration value="XTS"/>
+        <enumeration value="XUA"/>
+        <enumeration value="XXX"/>
+        <enumeration value="YER"/>
+        <enumeration value="ZAR"/>
+        <enumeration value="ZMW"/>
+        <enumeration value="ZWL"/>
+    </cl>
+    <cl id="22">
+        <enumeration value="102"/>
+    </cl>
+</codedb>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC.sch
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC.sch	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC.sch	(revision 8435)
@@ -0,0 +1,7106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron" schemaVersion="iso">
+    <title>Schema for FACTUR-X; 1.0; EN16931-COMPLIANT-BASIC</title>
+    <ns uri="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" prefix="rsm"/>
+    <ns uri="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" prefix="qdt"/>
+    <ns uri="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" prefix="ram"/>
+    <ns uri="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" prefix="udt"/>
+    <pattern>
+        <rule context="//ram:AdditionalReferencedDocument">
+            <assert test="(ram:IssuerAssignedID!=&apos;&apos;)">
+                Each Additional supporting document (BG-24) shall contain a Supporting document reference (BT-122).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+            <assert test="(ram:BasisAmount)">
+                Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116).</assert>
+            <assert test="(ram:CalculatedAmount)">
+                Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117).</assert>
+            <assert test="(ram:CategoryCode)">
+                Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118).</assert>
+            <assert test="(ram:RateApplicablePercent) or (ram:CategoryCode = &apos;O&apos;)">
+                Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT.</assert>
+            <assert test="((ram:TaxPointDate) and not (ram:DueDateTypeCode)) or (not (ram:TaxPointDate) and (ram:DueDateTypeCode)) or (not (ram:TaxPointDate) and not (ram:DueDateTypeCode))">
+                Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive.</assert>
+            <assert test="ram:CalculatedAmount = round(ram:BasisAmount * ram:RateApplicablePercent) div 100 +0 or not (ram:RateApplicablePercent)">
+                VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2.</assert>
+            <assert test="string-length(substring-after(ram:CalculatedAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;Z&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;Z&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;Z&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;Z&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where VAT category code (BT-118) is "Zero rated" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amount (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âZero rated".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Zero rated" shall equal 0 (zero).</assert>
+            <assert test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Zero rated" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.=&apos;S&apos;]">
+            <assert test="../ram:CalculatedAmount = round(../ram:BasisAmount * ../ram:RateApplicablePercent) div 100 +0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Standard rated" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Standard rate" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod">
+            <assert test="(ram:EndDateTime/udt:DateTimeString[@format = &apos;102&apos;]) &gt;= (ram:StartDateTime/udt:DateTimeString[@format = &apos;102&apos;]) or not (ram:EndDateTime) or not (ram:StartDateTime)">
+                If both Invoicing period start date (BT-73) and Invoicing period end date (BT-74) are given then the Invoicing period end date (BT-74) shall be later or equal to the Invoicing period start date (BT-73).</assert>
+            <assert test="(ram:StartDateTime) or (ram:EndDateTime)">
+                If Invoicing period (BG-14) is used, the Invoicing period start date (BT-73) or the Invoicing period end date (BT-74) shall be filled, or both.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92).</assert>
+            <assert test="(ram:CategoryTradeTax/ram:CategoryCode)">
+                Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level allowance (BG-20) shall have a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98).</assert>
+            <assert test="true()">
+                Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level allowance (BG-20) shall contain a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Document level charge (BG-21) shall have a Document level charge amount (BT-99).</assert>
+            <assert test="(ram:CategoryTradeTax/ram:CategoryCode)">
+                Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level charge (BG-21) shall have a Document level charge reason (BT-104) or a Document level charge reason code (BT-105).</assert>
+            <assert test="true()">
+                Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level charge (BG-21) shall contain a Document level charge reason (BT-104) or a Document level charge reason code (BT-105), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level charge amount (BT-92) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level charge base amount (BT-93) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableProductCharacteristic">
+            <assert test="(ram:Description) and (ram:Value)">
+                Each Item attribute (BG-32) shall contain an Item attribute name (BT-160) and an Item attribute value (BT-161).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableTradeSettlementFinancialCard">
+            <assert test="string-length(ram:ID)&lt;=6 and string-length(ram:ID)&gt;=4">
+                The last 4 to 6 digits of the Payment card primary account number (BT-87) shall be present if Payment card information (BG-18) is provided in the Invoice.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:IncludedSupplyChainTradeLineItem">
+            <assert test="(ram:AssociatedDocumentLineDocument/ram:LineID!=&apos;&apos;)">
+                Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126).</assert>
+            <assert test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity)">
+                Each Invoice line (BG-25) shall have an Invoiced quantity (BT-129).</assert>
+            <assert test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity/@unitCode)">
+                An Invoice line (BG-25) shall have an Invoiced quantity unit of measure code (BT-130).</assert>
+            <assert test="(ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)">
+                Each Invoice line (BG-25) shall have an Invoice line net amount (BT-131).</assert>
+            <assert test="(ram:SpecifiedTradeProduct/ram:Name!=&apos;&apos;)">
+                Each Invoice line (BG-25) shall contain the Item name (BT-153).</assert>
+            <assert test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount)">
+                Each Invoice line (BG-25) shall contain the Item net price (BT-146).</assert>
+            <assert test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount) &gt;= 0">
+                The Item net price (BT-146) shall NOT be negative.</assert>
+            <assert test="(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount &gt;= 0) or not(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount)">
+                The Item gross price (BT-148) shall NOT be negative.</assert>
+            <assert test="ram:SpecifiedTradeProduct/ram:GlobalID/@schemeID!=&apos;&apos; or not (ram:SpecifiedTradeProduct/ram:GlobalID)">
+                The Item standard identifier (BT-157) shall have a Scheme identifier</assert>
+            <assert test="(ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode/@listID!=&apos;&apos;) or not (ram:SpecifiedTradeProduct/ram:DesignatedProductClassification)">
+                The Item classification identifier (BT-158) shall have a Scheme identifier</assert>
+            <assert test="(ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode)">
+                Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151).</assert>
+            <assert test="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+                An Invoice shall at least have one VAT breakdown group (BG-23).</assert>
+            <assert test="string-length(substring-after(ram:SpecifiedTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:PayeeTradeParty">
+            <assert test="(ram:Name) and (not(ram:Name = ../ram:SellerTradeParty/ram:Name) and not(ram:ID = ../ram:SellerTradeParty/ram:ID) and not(ram:SpecifiedLegalOrganization/ram:ID = ../ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID))">
+                The Payee name (BT-59) shall be provided in the Invoice, if the Payee (BG-10) is different from the Seller (BG-4).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SellerTaxRepresentativeTradeParty">
+            <assert test="(ram:Name)">
+                The Seller tax representative name (BT-62) shall be provided in the Invoice, if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+            <assert test="(ram:PostalTradeAddress)">
+                The Seller tax representative postal address (BG-12) shall be provided in the Invoice, if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+            <assert test="(ram:PostalTradeAddress/ram:CountryID)">
+                The Seller tax representative postal address (BG-12) shall contain a Tax representative country code (BT-69), if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+            <assert test="(ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;]!=&apos;&apos;)">
+                Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SellerTradeParty">
+            <assert test="(ram:ID) or (ram:GlobalID) or (ram:SpecifiedLegalOrganization/ram:ID) or (ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;])">
+                In order for the buyer to automatically identify a supplier, the Seller identifier (BT-29), the Seller legal registration identifier (BT-30) and/or the Seller VAT identifier (BT-31) shall be present.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod">
+            <assert test="(ram:EndDateTime/udt:DateTimeString[@format = &apos;102&apos;]) &gt;= (ram:StartDateTime/udt:DateTimeString[@format = &apos;102&apos;]) or not (ram:EndDateTime) or not (ram:StartDateTime)">
+                If both Invoice line period start date (BT-134) and Invoice line period end date (BT-135) are given then the Invoice line period end date (BT-135) shall be later or equal to the Invoice line period start date (BT-134).</assert>
+            <assert test="(ram:StartDateTime) or (ram:EndDateTime)">
+                If Invoice line period (BG-26) is used, the Invoice line period start date (BT-134) or the Invoice line period end date (BT-135) shall be filled, or both.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = &apos;false&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Invoice line allowance (BG-27) shall have an Invoice line allowance amount (BT-136).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line allowance (BG-27) shall have an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140).</assert>
+            <assert test="true()">
+                Invoice line allowance reason code (BT-140) and Invoice line allowance reason (BT-139) shall indicate the same type of allowance reason.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line allowance (BG-27) shall contain an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = &apos;true&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Invoice line charge (BG-28) shall have an Invoice line charge amount (BT-141).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line charge (BG-28) shall have an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145).</assert>
+            <assert test="true()">
+                Invoice line charge reason code (BT-145) and Invoice line charge reason (BT144) shall indicate the same type of charge reason.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line charge (BG-28) shall contain an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;]">
+            <assert test="contains(&apos; EL AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BL BJ BM BN BO BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW &apos;, concat(&apos; &apos;, substring(.,1,2), &apos; &apos;))">
+                The Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) shall have a prefix in accordance with ISO code ISO 3166-1 alpha-2 by which the country of issue may be identified. Nevertheless, Greece may use the prefix âELâ.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Reverse charge" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;E&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Exempt from VAT", the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;G&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Export outside the EU" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;K&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IGIC" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IGIC" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IPSI" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-48).</assert>
+            <assert test="not(ram:RateApplicablePercent)">
+                A Document level allowance (BG-20) where VAT category code (BT-95) is "Not subject to VAT" shall not contain a Document level allowance VAT rate (BT-96).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;S&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Standard rated" the Document level allowance VAT rate (BT-96) shall be greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Zero rated" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Reverse charge" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;E&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Exempt from VAT", the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;G&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Export outside the EU" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;K&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Intra-community supply" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IGIC" the Document level charge VAT rate (BT-103) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IPSI" the Document level charge VAT rate (BT-103) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-48).</assert>
+            <assert test="not(ram:RateApplicablePercent)">
+                A Document level charge (BG-21) where the VAT category code (BT-102) is "Not subject to VAT" shall not contain a Document level charge VAT rate (BT-103).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;S&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Standard rated" the Document level charge VAT rate (BT-103) shall be greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge where the Document level charge VAT category code (BT-102) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Zero rated" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementHeaderMonetarySummation">
+            <assert test="(ram:TaxBasisTotalAmount)">
+                An Invoice shall have the Invoice total amount without VAT (BT-109).</assert>
+            <assert test="(ram:GrandTotalAmount)">
+                An Invoice shall have the Invoice total amount with VAT (BT-112).</assert>
+            <assert test="(ram:DuePayableAmount)">
+                An Invoice shall have the Amount due for payment (BT-115).</assert>
+            <assert test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;])and not (ram:AllowanceTotalAmount)) or ram:AllowanceTotalAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:ActualAmount)* 10 * 10 ) div 100)">
+                Sum of allowances on document level (BT-107) = S Document level allowance amount (BT-92).</assert>
+            <assert test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;])and not (ram:ChargeTotalAmount)) or ram:ChargeTotalAmount = &#13;&#10;((round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:ActualAmount)* 10 * 10 ) div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount)* 10 * 10 ) div 100))">
+                Sum of charges on document level (BT-108) = S Document level charge amount (BT-99).</assert>
+            <assert test="(ram:GrandTotalAmount = round(ram:TaxBasisTotalAmount*100 + ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]*100 +0) div 100) or ((ram:GrandTotalAmount = ram:TaxBasisTotalAmount) and not (ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]))">
+                Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).</assert>
+            <assert test="string-length(substring-after(ram:LineTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2.</assert>
+            <assert test="string-length(substring-after(ram:AllowanceTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2.</assert>
+            <assert test="string-length(substring-after(ram:ChargeTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2.</assert>
+            <assert test="string-length(substring-after(ram:TaxBasisTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2.</assert>
+            <assert test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode and . = round(. * 100) div 100) or not (@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode)]">
+                The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2.</assert>
+            <assert test="string-length(substring-after(ram:GrandTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2.</assert>
+            <assert test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and . = round(. * 100) div 100) or not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode)]">
+                The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2.</assert>
+            <assert test="string-length(substring-after(ram:TotalPrepaidAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Paid amount (BT-113) is 2.</assert>
+            <assert test="string-length(substring-after(ram:RoundingAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Rounding amount (BT-114) is 2.</assert>
+            <assert test="string-length(substring-after(ram:DuePayableAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2.</assert>
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) or (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and (ram:TaxTotalAmount/@currencyID = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) and not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode))">
+                If the VAT accounting currency code (BT-6) is present, then the Invoice total VAT amount in accounting currency (BT-111) shall be provided.</assert>
+            <assert test="(ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount*100 - ram:AllowanceTotalAmount*100 + ram:ChargeTotalAmount*100) div 100)) or ((ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount*100 - ram:AllowanceTotalAmount*100) div 100)) and not (ram:ChargeTotalAmount)) or ((ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount*100 + ram:ChargeTotalAmount*100) div 100)) and not (ram:AllowanceTotalAmount)) or ((ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount * 100) div 100)) and not (ram:ChargeTotalAmount) and not (ram:AllowanceTotalAmount))">
+                Invoice total amount without VAT (BT-109) = S Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).</assert>
+            <assert test="(ram:DuePayableAmount = (round(ram:GrandTotalAmount*100 - ram:TotalPrepaidAmount*100 + ram:RoundingAmount*100) div 100)) or ((ram:DuePayableAmount = ram:GrandTotalAmount + ram:RoundingAmount) and not (ram:TotalPrepaidAmount)) or ((ram:DuePayableAmount = (round(ram:GrandTotalAmount*100 - ram:TotalPrepaidAmount*100) div 100)) and not (ram:RoundingAmount)) or ((ram:DuePayableAmount = (round(ram:GrandTotalAmount*100) div 100)) and not (ram:TotalPrepaidAmount) and not (ram:RoundingAmount))">
+                Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).</assert>
+            <assert test="(ram:LineTotalAmount)">
+                An Invoice shall have the Sum of Invoice line net amount (BT-106).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]">
+            <assert test=". = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount)*10*10)div 100)">
+                Invoice total VAT amount (BT-110) = S VAT category tax amount (BT-117).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementPaymentMeans">
+            <assert test="(ram:TypeCode)">
+                A Payment instruction (BG-16) shall specify the Payment means type code (BT-81).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementPaymentMeans[ram:TypeCode=&apos;30&apos; or ram:TypeCode=&apos;58&apos;]/ram:PayerPartyDebtorFinancialAccount">
+            <assert test="(ram:IBANID) or (ram:ProprietaryID)">
+                A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice.</assert>
+            <assert test="(ram:IBANID) or (ram:ProprietaryID)">
+                If the Payment means type code (BT-81) means SEPA credit transfer, Local credit transfer or Non-SEPA international credit transfer, the Payment account identifier (BT-84) shall be present.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;AE&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;AE&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;AE&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;AE&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Reverse charge" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âReverse charge".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âReverse chargeâ shall be 0 (zero).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Reverse charge" shall have a VAT exemption reason code (BT-121), meaning "Reverse charge" or the VAT exemption reason text (BT-120) "Reverse charge" (or the equivalent standard text in another language).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;E&apos;]">
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) In a VAT breakdown (BG-23) where the VAT category code (BT-118) equals "Exempt from VAT" shall equal 0 (zero).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Exempt from VAT" shall have a VAT exemption reason code (BT-121) or a VAT exemption reason text (BT-120).</assert>
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;E&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;E&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;E&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Exempt from VAT" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âExempt from VAT".</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;G&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;G&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;G&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;G&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Export outside the EU" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âExport outside the EU".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âExport outside the EUâ shall be 0 (zero).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with the VAT Category code (BT-118) "Export outside the EU" shall have a VAT exemption reason code (BT-121), meaning "Export outside the EU" or the VAT exemption reason text (BT-120) "Export outside the EU" (or the equivalent standard text in another language).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.= &apos;K&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;K&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;K&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;K&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âIntra-community supply".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IGIC" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with the VAT Category code (BT-118) "Intra-community supply" shall have a VAT exemption reason code (BT-121), meaning "Intra-community supply" or the VAT exemption reason text (BT-120) "Intra-community supply" (or the equivalent standard text in another language).</assert>
+            <assert test="(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString) or (../../ram:BillingSpecifiedPeriod/ram:StartDateTime) or (../../ram:BillingSpecifiedPeriod/ram:EndDateTime)">
+                In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the Actual delivery date (BT-72) or the Invoicing period (BG-14) shall not be blank.</assert>
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID">
+                In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the Deliver to country code (BT-80) shall not be blank.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;L&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;L&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;L&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)">
+                For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "IGIC", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is âIGICâ and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).</assert>
+            <assert test="true()">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IGIC" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "IGIC" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;M&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;M&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;M&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)">
+                For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "IPSI", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is âIPSIâ and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).</assert>
+            <assert test="true()">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IPSI" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "IPSI" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;O&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;O&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;O&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is " Not subject to VAT" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âNot subject to VAT".</assert>
+            <assert test="ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âNot subject to VATâ shall be 0 (zero).</assert>
+            <assert test="(ram:ExemptionReason) or (ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) " Not subject to VAT" shall have a VAT exemption reason code (BT-121), meaning " Not subject to VAT" or a VAT exemption reason text (BT-120) " Not subject to VAT" (or the equivalent standard text in another language).</assert>
+            <assert test="not(//ram:ApplicableTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain other VAT breakdown groups (BG-23).</assert>
+            <assert test="not(//ram:ApplicableTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is not "Not subject to VAT".</assert>
+            <assert test="not(//ram:CategoryTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain Document level allowances (BG-20) where Document level allowance VAT category code (BT-95) is not "Not subject to VAT".</assert>
+            <assert test="not(//ram:CategoryTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain Document level charges (BG-21) where Document level charge VAT category code (BT-102) is not "Not subject to VAT".</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Reverse charge" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;E&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Exempt from VAT", the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;G&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Export outside the EU" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;K&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Intracommunity supply" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IGIC" the invoiced item VAT rate (BT-152) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IPSI" the Invoiced item VAT rate (BT-152) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-46).</assert>
+            <assert test="not(ram:RateApplicablePercent)">
+                An Invoice line (BG-25) where the VAT category code (BT-151) is "Not subject to VAT" shall not contain an Invoiced item VAT rate (BT-152).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;S&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Standard rated" the Invoiced item VAT rate (BT-152) shall be greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line where the Invoiced item VAT category code (BT-151) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Zero rated" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice">
+            <assert test="(rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID != &apos;&apos;)">
+                An Invoice shall have a Specification identifier (BT-24).</assert>
+            <assert test="(rsm:ExchangedDocument/ram:ID !=&apos;&apos;)">
+                An Invoice shall have an Invoice number (BT-1).</assert>
+            <assert test="(rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString[@format=&apos;102&apos;]!=&apos;&apos;)">
+                An Invoice shall have an Invoice issue date (BT-2).</assert>
+            <assert test="(rsm:ExchangedDocument/ram:TypeCode!=&apos;&apos;)">
+                An Invoice shall have an Invoice type code (BT-3).</assert>
+            <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode!=&apos;&apos;)">
+                An Invoice shall have an Invoice currency code (BT-5).</assert>
+            <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name!=&apos;&apos;)">
+                An Invoice shall contain the Seller name (BT-27).</assert>
+            <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name!=&apos;&apos;)">
+                An Invoice shall contain the Buyer name (BT-44).</assert>
+            <assert test="//ram:SellerTradeParty/ram:PostalTradeAddress">
+                An Invoice shall contain the Seller postal address (BG-5).</assert>
+            <assert test="//ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;">
+                The Seller postal address (BG-5) shall contain a Seller country code (BT-40).</assert>
+            <assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!=&apos;&apos; or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication)">
+                The Seller electronic address (BT-34) shall have a Scheme identifier.</assert>
+            <assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!=&apos;&apos; or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication)">
+                The Buyer electronic address (BT-49) shall have a Scheme identifier.</assert>
+            <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) and     ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;S&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;S&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âStandard ratedâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "Standard rated".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;Z&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;Z&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âZero ratedâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Zero rated".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;E&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;E&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âExempt from VATâ shall contain exactly one VAT breakdown (BG-23) with the VAT category code (BT-118) equal to "Exempt from VAT".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;AE&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;AE&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âReverse chargeâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "VAT reverse charge".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;K&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;K&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIntra-community supplyâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Intra-community supply".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;G&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;G&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âExport outside the EUâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Export outside the EU".</assert>
+            <assert test="not(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;]) or (     count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;])=1 and     (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;] or    //ram:CategoryTradeTax[ram:CategoryCode=&apos;O&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âNot subject to VATâ shall contain exactly one VAT breakdown group (BG-23) with the VAT category code (BT-118) equal to "Not subject to VAT".</assert>
+            <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) and     ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;L&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;L&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIGICâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "IGIC".</assert>
+            <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) and     ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;M&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;M&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIPSIâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "IPSI".</assert>
+            <assert test="(number(//ram:DuePayableAmount) &gt; 0 and ((//ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime) or (//ram:SpecifiedTradePaymentTerms/ram:Description))) or not(number(//ram:DuePayableAmount)&gt;0)">
+                In case the Amount due for payment (BT-115) is positive, either the Payment due date (BT-9) or the Payment terms (BT-20) shall be present.</assert>
+            <assert test="//ram:BuyerTradeParty/ram:PostalTradeAddress">
+                An Invoice shall contain the Buyer postal address (BG-8).</assert>
+            <assert test="//ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;">
+                The Buyer postal address shall contain a Buyer country code (BT-55).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CategoryCode">
+            <report test="true()">
+                Element 'ram:CategoryCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ControlRequirementIndicator">
+            <report test="true()">
+                Element 'ram:ControlRequirementIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote">
+            <assert test="count(ram:Content)=1">
+                Element 'ram:Content' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ContentCode">
+            <report test="true()">
+                Element 'ram:ContentCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Subject">
+            <report test="true()">
+                Element 'ram:Subject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode">
+            <let name="codeValue3" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=3]/enumeration[@value=$codeValue3]">
+                Value of 'ram:SubjectCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:LanguageID">
+            <report test="true()">
+                Element 'ram:LanguageID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:Purpose">
+            <report test="true()">
+                Element 'ram:Purpose' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:PurposeCode">
+            <report test="true()">
+                Element 'ram:PurposeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:RevisionDateTime">
+            <report test="true()">
+                Element 'ram:RevisionDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode">
+            <let name="codeValue1" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=1]/enumeration[@value=$codeValue1]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:VersionID">
+            <report test="true()">
+                Element 'ram:VersionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext">
+            <assert test="count(ram:BusinessProcessSpecifiedDocumentContextParameter)&lt;=1">
+                Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GuidelineSpecifiedDocumentContextParameter)=1">
+                Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:ApplicationSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:ApplicationSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BIMSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:BIMSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:SpecifiedDocumentVersion">
+            <report test="true()">
+                Element 'ram:SpecifiedDocumentVersion' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:Value">
+            <report test="true()">
+                Element 'ram:Value' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:SpecifiedDocumentVersion">
+            <report test="true()">
+                Element 'ram:SpecifiedDocumentVersion' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:Value">
+            <report test="true()">
+                Element 'ram:Value' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:MessageStandardSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:MessageStandardSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:ScenarioSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:ScenarioSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:SpecifiedTransactionID">
+            <report test="true()">
+                Element 'ram:SpecifiedTransactionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:SubsetSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:SubsetSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:TestIndicator">
+            <report test="true()">
+                Element 'ram:TestIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction">
+            <assert test="count(ram:IncludedSupplyChainTradeLineItem)&gt;=1">
+                Element 'ram:IncludedSupplyChainTradeLineItem' must occur at least 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement">
+            <assert test="count(ram:SellerTradeParty)=1">
+                Element 'ram:SellerTradeParty' must occur exactly 1 times.</assert>
+            <assert test="count(ram:BuyerTradeParty)=1">
+                Element 'ram:BuyerTradeParty' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ApplicableTradeDeliveryTerms">
+            <report test="true()">
+                Element 'ram:ApplicableTradeDeliveryTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerAgentTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerAgentTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerAssignedAccountantTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerAssignedAccountantTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerReference[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerReference[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerRequisitionerTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerRequisitionerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTaxRepresentativeTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerTaxRepresentativeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:PostalTradeAddress)=1">
+                Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:SpecifiedTaxRegistration)&lt;=1">
+                Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact">
+            <report test="true()">
+                Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+            <let name="codeValue13" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=13]/enumeration[@value=$codeValue13]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName">
+            <report test="true()">
+                Element 'ram:TradingBusinessName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue14" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=14]/enumeration[@value=$codeValue14]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue10" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:DemandForecastReferencedDocument">
+            <report test="true()">
+                Element 'ram:DemandForecastReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:OrderResponseReferencedDocument">
+            <report test="true()">
+                Element 'ram:OrderResponseReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PriceListReferencedDocument">
+            <report test="true()">
+                Element 'ram:PriceListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty">
+            <report test="true()">
+                Element 'ram:ProductEndUserTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PromotionalDealReferencedDocument">
+            <report test="true()">
+                Element 'ram:PromotionalDealReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PurchaseConditionsReferencedDocument">
+            <report test="true()">
+                Element 'ram:PurchaseConditionsReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:QuotationReferencedDocument">
+            <report test="true()">
+                Element 'ram:QuotationReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:Reference">
+            <report test="true()">
+                Element 'ram:Reference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:RequisitionerReferencedDocument">
+            <report test="true()">
+                Element 'ram:RequisitionerReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SalesAgentTradeParty">
+            <report test="true()">
+                Element 'ram:SalesAgentTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerAssignedAccountantTradeParty">
+            <report test="true()">
+                Element 'ram:SellerAssignedAccountantTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument">
+            <report test="true()">
+                Element 'ram:SellerOrderReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty">
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:PostalTradeAddress)=1">
+                Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+            <assert test="count(ram:SpecifiedTaxRegistration)=1">
+                Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact">
+            <report test="true()">
+                Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization">
+            <report test="true()">
+                Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue15" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=15]/enumeration[@value=$codeValue15]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:URIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty">
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:PostalTradeAddress)=1">
+                Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact">
+            <report test="true()">
+                Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue8" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=8]/enumeration[@value=$codeValue8]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+            <let name="codeValue9" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=9]/enumeration[@value=$codeValue9]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue11" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=11]/enumeration[@value=$codeValue11]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue10" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject">
+            <report test="true()">
+                Element 'ram:SpecifiedProcuringProject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SupplyInstructionReferencedDocument">
+            <report test="true()">
+                Element 'ram:SupplyInstructionReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument">
+            <report test="true()">
+                Element 'ram:UltimateCustomerOrderReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery">
+            <assert test="(ram:ShipToTradeParty/ram:PostalTradeAddress and ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;) or not (ram:ShipToTradeParty/ram:PostalTradeAddress)">
+                Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:DescriptionBinaryObject">
+            <report test="true()">
+                Element 'ram:DescriptionBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:EarliestOccurrenceDateTime">
+            <report test="true()">
+                Element 'ram:EarliestOccurrenceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:LatestOccurrenceDateTime">
+            <report test="true()">
+                Element 'ram:LatestOccurrenceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceLogisticsLocation">
+            <report test="true()">
+                Element 'ram:OccurrenceLogisticsLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:OccurrenceSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:UnitQuantity">
+            <report test="true()">
+                Element 'ram:UnitQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDespatchSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualDespatchSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualPickUpSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualPickUpSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualReceiptSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualReceiptSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:AdditionalReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ConsumptionReportReferencedDocument">
+            <report test="true()">
+                Element 'ram:ConsumptionReportReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument">
+            <report test="true()">
+                Element 'ram:DeliveryNoteReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:PackingListReferencedDocument">
+            <report test="true()">
+                Element 'ram:PackingListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:PreviousDeliverySupplyChainEvent">
+            <report test="true()">
+                Element 'ram:PreviousDeliverySupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument">
+            <report test="true()">
+                Element 'ram:ReceivingAdviceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment">
+            <report test="true()">
+                Element 'ram:RelatedSupplyChainConsignment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty">
+            <report test="true()">
+                Element 'ram:ShipFromTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GlobalID)&lt;=1">
+                Element 'ram:GlobalID' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact">
+            <report test="true()">
+                Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue16" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=16]/enumeration[@value=$codeValue16]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization">
+            <report test="true()">
+                Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration">
+            <report test="true()">
+                Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:URIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty">
+            <report test="true()">
+                Element 'ram:UltimateShipToTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement">
+            <assert test="count(ram:PaymentReference)&lt;=1">
+                Element 'ram:PaymentReference' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:InvoiceCurrencyCode)=1">
+                Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ApplicableTradeTax)&gt;=1">
+                Element 'ram:ApplicableTradeTax' must occur at least 1 times.</assert>
+            <assert test="count(ram:SpecifiedTradePaymentTerms)&lt;=1">
+                Element 'ram:SpecifiedTradePaymentTerms' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:SpecifiedTradeSettlementHeaderMonetarySummation)=1">
+                Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ReceivableSpecifiedTradeAccountingAccount)&lt;=1">
+                Element 'ram:ReceivableSpecifiedTradeAccountingAccount' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+            <assert test="count(ram:CalculatedAmount)=1">
+                Element 'ram:CalculatedAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:BasisAmount)=1">
+                Element 'ram:BasisAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryCode)=1">
+                Element 'ram:CategoryCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:AllowanceChargeBasisAmount">
+            <report test="true()">
+                Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode">
+            <let name="codeValue21" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=21]/enumeration[@value=$codeValue21]">
+                Value of 'ram:CategoryCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode">
+            <let name="codeValue22" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=22]/enumeration[@value=$codeValue22]">
+                Value of 'ram:ExemptionReasonCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:LineTotalBasisAmount">
+            <report test="true()">
+                Element 'ram:LineTotalBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate">
+            <report test="true()">
+                Element 'ram:TaxPointDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode">
+            <let name="codeValue20" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=20]/enumeration[@value=$codeValue20]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:CompleteDateTime">
+            <report test="true()">
+                Element 'ram:CompleteDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:ContinuousIndicator">
+            <report test="true()">
+                Element 'ram:ContinuousIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:DurationMeasure">
+            <report test="true()">
+                Element 'ram:DurationMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:InclusiveIndicator">
+            <report test="true()">
+                Element 'ram:InclusiveIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:OpenIndicator">
+            <report test="true()">
+                Element 'ram:OpenIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:PurposeCode">
+            <report test="true()">
+                Element 'ram:PurposeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:SeasonCode">
+            <report test="true()">
+                Element 'ram:SeasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateFlexibilityCode">
+            <report test="true()">
+                Element 'ram:StartDateFlexibilityCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditReason">
+            <report test="true()">
+                Element 'ram:CreditReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditReasonCode">
+            <report test="true()">
+                Element 'ram:CreditReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceIssuerID">
+            <report test="true()">
+                Element 'ram:CreditorReferenceIssuerID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceType">
+            <report test="true()">
+                Element 'ram:CreditorReferenceType' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:CreditorReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:DuePayableAmount">
+            <report test="true()">
+                Element 'ram:DuePayableAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:FactoringAgreementReferencedDocument">
+            <report test="true()">
+                Element 'ram:FactoringAgreementReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:FactoringListReferencedDocument">
+            <report test="true()">
+                Element 'ram:FactoringListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceApplicableTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:InvoiceApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceDateTime">
+            <report test="true()">
+                Element 'ram:InvoiceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceIssuerReference">
+            <report test="true()">
+                Element 'ram:InvoiceIssuerReference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument">
+            <assert test="(ram:IssuerAssignedID!=&apos;&apos;)">
+                Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25).</assert>
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue26" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=26]/enumeration[@value=$codeValue26]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty">
+            <report test="true()">
+                Element 'ram:InvoiceeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty">
+            <report test="true()">
+                Element 'ram:InvoicerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:LetterOfCreditReferencedDocument">
+            <report test="true()">
+                Element 'ram:LetterOfCreditReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:NextInvoiceDateTime">
+            <report test="true()">
+                Element 'ram:NextInvoiceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayableSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PayableSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GlobalID)&lt;=1">
+                Element 'ram:GlobalID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact">
+            <report test="true()">
+                Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue17" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=17]/enumeration[@value=$codeValue17]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+            <let name="codeValue18" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=18]/enumeration[@value=$codeValue18]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName">
+            <report test="true()">
+                Element 'ram:TradingBusinessName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration">
+            <report test="true()">
+                Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:URIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayerTradeParty">
+            <report test="true()">
+                Element 'ram:PayerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentApplicableTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:PaymentApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentCurrencyCode">
+            <report test="true()">
+                Element 'ram:PaymentCurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentReference[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentReference[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ProFormaInvoiceReferencedDocument">
+            <report test="true()">
+                Element 'ram:ProFormaInvoiceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PurchaseSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PurchaseSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:AmountTypeCode">
+            <report test="true()">
+                Element 'ram:AmountTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:CostReferenceDimensionPattern">
+            <report test="true()">
+                Element 'ram:CostReferenceDimensionPattern' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:SetTriggerCode">
+            <report test="true()">
+                Element 'ram:SetTriggerCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SalesSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SalesSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment">
+            <report test="true()">
+                Element 'ram:SpecifiedAdvancePayment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedFinancialAdjustment">
+            <report test="true()">
+                Element 'ram:SpecifiedFinancialAdjustment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge">
+            <report test="true()">
+                Element 'ram:SpecifiedLogisticsServiceCharge' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge">
+            <assert test="count(ram:ChargeIndicator)=1">
+                Element 'ram:ChargeIndicator' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ActualAmount)=1">
+                Element 'ram:ActualAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryTradeTax)=1">
+                Element 'ram:CategoryTradeTax' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:ActualTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryCode)=1">
+                Element 'ram:CategoryCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:AllowanceChargeBasisAmount">
+            <report test="true()">
+                Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BasisAmount">
+            <report test="true()">
+                Element 'ram:BasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CalculatedAmount">
+            <report test="true()">
+                Element 'ram:CalculatedAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode">
+            <let name="codeValue24" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=24]/enumeration[@value=$codeValue24]">
+                Value of 'ram:CategoryCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:DueDateTypeCode">
+            <report test="true()">
+                Element 'ram:DueDateTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:ExemptionReason">
+            <report test="true()">
+                Element 'ram:ExemptionReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:ExemptionReasonCode">
+            <report test="true()">
+                Element 'ram:ExemptionReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:LineTotalBasisAmount">
+            <report test="true()">
+                Element 'ram:LineTotalBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TaxPointDate">
+            <report test="true()">
+                Element 'ram:TaxPointDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode">
+            <let name="codeValue23" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=23]/enumeration[@value=$codeValue23]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator/udt:IndicatorString">
+            <report test="true()">
+                Element 'udt:IndicatorString' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:PrepaidIndicator">
+            <report test="true()">
+                Element 'ram:PrepaidIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms">
+            <assert test="count(ram:DirectDebitMandateID)&lt;=1">
+                Element 'ram:DirectDebitMandateID' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms">
+            <report test="true()">
+                Element 'ram:ApplicableTradePaymentDiscountTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms">
+            <report test="true()">
+                Element 'ram:ApplicableTradePaymentPenaltyTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:FromEventCode">
+            <report test="true()">
+                Element 'ram:FromEventCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:InstructionTypeCode">
+            <report test="true()">
+                Element 'ram:InstructionTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PartialPaymentAmount">
+            <report test="true()">
+                Element 'ram:PartialPaymentAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PartialPaymentPercent">
+            <report test="true()">
+                Element 'ram:PartialPaymentPercent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PayeeTradeParty">
+            <report test="true()">
+                Element 'ram:PayeeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PaymentMeansID">
+            <report test="true()">
+                Element 'ram:PaymentMeansID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:SettlementPeriodMeasure">
+            <report test="true()">
+                Element 'ram:SettlementPeriodMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementFinancialCard">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeSettlementFinancialCard' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation">
+            <assert test="count(ram:LineTotalAmount)=1">
+                Element 'ram:LineTotalAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ChargeTotalAmount)&lt;=1">
+                Element 'ram:ChargeTotalAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:AllowanceTotalAmount)&lt;=1">
+                Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:TaxBasisTotalAmount)=1">
+                Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TaxTotalAmount)&lt;=1">
+                Element 'ram:TaxTotalAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GrandTotalAmount)=1">
+                Element 'ram:GrandTotalAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TotalPrepaidAmount)&lt;=1">
+                Element 'ram:TotalPrepaidAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:DuePayableAmount)=1">
+                Element 'ram:DuePayableAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrossLineTotalAmount">
+            <report test="true()">
+                Element 'ram:GrossLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:NetIncludingTaxesLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetIncludingTaxesLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:NetLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ProductValueExcludingTobaccoTaxInformationAmount">
+            <report test="true()">
+                Element 'ram:ProductValueExcludingTobaccoTaxInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RetailValueExcludingTaxInformationAmount">
+            <report test="true()">
+                Element 'ram:RetailValueExcludingTaxInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount">
+            <report test="true()">
+                Element 'ram:RoundingAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID]">
+            <let name="codeValue25" value="@currencyID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=25]/enumeration[@value=$codeValue25]">
+                Value of '@currencyID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalAllowanceChargeAmount">
+            <report test="true()">
+                Element 'ram:TotalAllowanceChargeAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalDepositFeeInformationAmount">
+            <report test="true()">
+                Element 'ram:TotalDepositFeeInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalDiscountAmount">
+            <report test="true()">
+                Element 'ram:TotalDiscountAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalRetailValueInformationAmount">
+            <report test="true()">
+                Element 'ram:TotalRetailValueInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard">
+            <report test="true()">
+                Element 'ram:ApplicableTradeSettlementFinancialCard' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:GuaranteeMethodCode">
+            <report test="true()">
+                Element 'ram:GuaranteeMethodCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName">
+            <report test="true()">
+                Element 'ram:AccountName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution">
+            <report test="true()">
+                Element 'ram:PayeeSpecifiedCreditorFinancialInstitution' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount">
+            <assert test="count(ram:IBANID)=1">
+                Element 'ram:IBANID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:AccountName">
+            <report test="true()">
+                Element 'ram:AccountName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:ProprietaryID">
+            <report test="true()">
+                Element 'ram:ProprietaryID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerSpecifiedDebtorFinancialInstitution">
+            <report test="true()">
+                Element 'ram:PayerSpecifiedDebtorFinancialInstitution' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PaymentChannelCode">
+            <report test="true()">
+                Element 'ram:PaymentChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PaymentMethodCode">
+            <report test="true()">
+                Element 'ram:PaymentMethodCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode">
+            <let name="codeValue19" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=19]/enumeration[@value=$codeValue19]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SubtotalCalculatedTradeTax">
+            <report test="true()">
+                Element 'ram:SubtotalCalculatedTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:TaxApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode">
+            <report test="true()">
+                Element 'ram:TaxCurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:UltimatePayeeTradeParty">
+            <report test="true()">
+                Element 'ram:UltimatePayeeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem">
+            <assert test="count(ram:SpecifiedTradeProduct)=1">
+                Element 'ram:SpecifiedTradeProduct' must occur exactly 1 times.</assert>
+            <assert test="count(ram:SpecifiedLineTradeAgreement)=1">
+                Element 'ram:SpecifiedLineTradeAgreement' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument">
+            <assert test="count(ram:LineID)=1">
+                Element 'ram:LineID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote">
+            <report test="true()">
+                Element 'ram:IncludedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusCode">
+            <report test="true()">
+                Element 'ram:LineStatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode">
+            <report test="true()">
+                Element 'ram:LineStatusReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:ParentLineID">
+            <report test="true()">
+                Element 'ram:ParentLineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:DescriptionCode">
+            <report test="true()">
+                Element 'ram:DescriptionCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:IncludedSubordinateTradeLineItem">
+            <report test="true()">
+                Element 'ram:IncludedSubordinateTradeLineItem' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement">
+            <assert test="count(ram:NetPriceProductTradePrice)=1">
+                Element 'ram:NetPriceProductTradePrice' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ApplicableTradeDeliveryTerms">
+            <report test="true()">
+                Element 'ram:ApplicableTradeDeliveryTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument">
+            <report test="true()">
+                Element 'ram:BuyerOrderReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerReference">
+            <report test="true()">
+                Element 'ram:BuyerReference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerRequisitionerTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerRequisitionerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument">
+            <report test="true()">
+                Element 'ram:ContractReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:DemandForecastReferencedDocument">
+            <report test="true()">
+                Element 'ram:DemandForecastReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice">
+            <report test="true()">
+                Element 'ram:GrossPriceProductTradePrice' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:IncludedSpecifiedMarketplace">
+            <report test="true()">
+                Element 'ram:IncludedSpecifiedMarketplace' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ItemBuyerTradeParty">
+            <report test="true()">
+                Element 'ram:ItemBuyerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ItemSellerTradeParty">
+            <report test="true()">
+                Element 'ram:ItemSellerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice">
+            <assert test="count(ram:ChargeAmount)=1">
+                Element 'ram:ChargeAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:AppliedTradeAllowanceCharge">
+            <report test="true()">
+                Element 'ram:AppliedTradeAllowanceCharge' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:AssociatedReferencedDocument">
+            <report test="true()">
+                Element 'ram:AssociatedReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity[@unitCodeListAgencyID]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity[@unitCodeListAgencyName]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity[@unitCodeListID]">
+            <report test="true()">
+                Attribute @unitCodeListID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity[@unitCode]">
+            <let name="codeValue5" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=5]/enumeration[@value=$codeValue5]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChangeReason">
+            <report test="true()">
+                Element 'ram:ChangeReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:DeliveryTradeLocation">
+            <report test="true()">
+                Element 'ram:DeliveryTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax">
+            <report test="true()">
+                Element 'ram:IncludedTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:MaximumQuantity">
+            <report test="true()">
+                Element 'ram:MaximumQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:MinimumQuantity">
+            <report test="true()">
+                Element 'ram:MinimumQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:OrderUnitConversionFactorNumeric">
+            <report test="true()">
+                Element 'ram:OrderUnitConversionFactorNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:TradeComparisonReferencePrice">
+            <report test="true()">
+                Element 'ram:TradeComparisonReferencePrice' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ValiditySpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:ValiditySpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:PromotionalDealReferencedDocument">
+            <report test="true()">
+                Element 'ram:PromotionalDealReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:QuotationReferencedDocument">
+            <report test="true()">
+                Element 'ram:QuotationReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:RequisitionerReferencedDocument">
+            <report test="true()">
+                Element 'ram:RequisitionerReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:SellerOrderReferencedDocument">
+            <report test="true()">
+                Element 'ram:SellerOrderReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument">
+            <report test="true()">
+                Element 'ram:UltimateCustomerOrderReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery">
+            <assert test="count(ram:BilledQuantity)=1">
+                Element 'ram:BilledQuantity' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualDeliverySupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDespatchSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualDespatchSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualPickUpSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualPickUpSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualReceiptSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualReceiptSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:AdditionalReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity[@unitCodeListAgencyID]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity[@unitCodeListAgencyName]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity[@unitCodeListID]">
+            <report test="true()">
+                Attribute @unitCodeListID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity[@unitCode]">
+            <let name="codeValue5" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=5]/enumeration[@value=$codeValue5]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ChargeFreeQuantity">
+            <report test="true()">
+                Element 'ram:ChargeFreeQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ConsumptionReportReferencedDocument">
+            <report test="true()">
+                Element 'ram:ConsumptionReportReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument">
+            <report test="true()">
+                Element 'ram:DeliveryNoteReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument">
+            <report test="true()">
+                Element 'ram:DespatchAdviceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchedQuantity">
+            <report test="true()">
+                Element 'ram:DespatchedQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:GrossWeightMeasure">
+            <report test="true()">
+                Element 'ram:GrossWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:IncludedSupplyChainPackaging">
+            <report test="true()">
+                Element 'ram:IncludedSupplyChainPackaging' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:NetWeightMeasure">
+            <report test="true()">
+                Element 'ram:NetWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PackageQuantity">
+            <report test="true()">
+                Element 'ram:PackageQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PackingListReferencedDocument">
+            <report test="true()">
+                Element 'ram:PackingListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PerPackageUnitQuantity">
+            <report test="true()">
+                Element 'ram:PerPackageUnitQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ProductUnitQuantity">
+            <report test="true()">
+                Element 'ram:ProductUnitQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivedQuantity">
+            <report test="true()">
+                Element 'ram:ReceivedQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument">
+            <report test="true()">
+                Element 'ram:ReceivingAdviceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:RelatedSupplyChainConsignment">
+            <report test="true()">
+                Element 'ram:RelatedSupplyChainConsignment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:RequestedDeliverySupplyChainEvent">
+            <report test="true()">
+                Element 'ram:RequestedDeliverySupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:RequestedQuantity">
+            <report test="true()">
+                Element 'ram:RequestedQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipFromTradeParty">
+            <report test="true()">
+                Element 'ram:ShipFromTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty">
+            <report test="true()">
+                Element 'ram:ShipToTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:SpecifiedDeliveryAdjustment">
+            <report test="true()">
+                Element 'ram:SpecifiedDeliveryAdjustment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:TheoreticalWeightMeasure">
+            <report test="true()">
+                Element 'ram:TheoreticalWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty">
+            <report test="true()">
+                Element 'ram:UltimateShipToTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement">
+            <assert test="count(ram:ApplicableTradeTax)=1">
+                Element 'ram:ApplicableTradeTax' must occur exactly 1 times.</assert>
+            <assert test="count(ram:SpecifiedTradeSettlementLineMonetarySummation)=1">
+                Element 'ram:SpecifiedTradeSettlementLineMonetarySummation' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryCode)=1">
+                Element 'ram:CategoryCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:AllowanceChargeBasisAmount">
+            <report test="true()">
+                Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount">
+            <report test="true()">
+                Element 'ram:BasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount">
+            <report test="true()">
+                Element 'ram:CalculatedAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode">
+            <let name="codeValue7" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=7]/enumeration[@value=$codeValue7]">
+                Value of 'ram:CategoryCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode">
+            <report test="true()">
+                Element 'ram:DueDateTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason">
+            <report test="true()">
+                Element 'ram:ExemptionReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode">
+            <report test="true()">
+                Element 'ram:ExemptionReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:LineTotalBasisAmount">
+            <report test="true()">
+                Element 'ram:LineTotalBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate">
+            <report test="true()">
+                Element 'ram:TaxPointDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode">
+            <let name="codeValue6" value="."/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=6]/enumeration[@value=$codeValue6]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:BillingSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:DiscountIndicator">
+            <report test="true()">
+                Element 'ram:DiscountIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:InvoiceIssuerReference">
+            <report test="true()">
+                Element 'ram:InvoiceIssuerReference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:InvoiceReferencedDocument">
+            <report test="true()">
+                Element 'ram:InvoiceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:PayableSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PayableSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:PaymentReference">
+            <report test="true()">
+                Element 'ram:PaymentReference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:PurchaseSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PurchaseSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:ReceivableSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SalesSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SalesSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedFinancialAdjustment">
+            <report test="true()">
+                Element 'ram:SpecifiedFinancialAdjustment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedLogisticsServiceCharge">
+            <report test="true()">
+                Element 'ram:SpecifiedLogisticsServiceCharge' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge">
+            <assert test="count(ram:ActualAmount)=1">
+                Element 'ram:ActualAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:ActualTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount">
+            <report test="true()">
+                Element 'ram:BasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent">
+            <report test="true()">
+                Element 'ram:CalculationPercent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax">
+            <report test="true()">
+                Element 'ram:CategoryTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator/udt:IndicatorString">
+            <report test="true()">
+                Element 'udt:IndicatorString' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:PrepaidIndicator">
+            <report test="true()">
+                Element 'ram:PrepaidIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradePaymentTerms">
+            <report test="true()">
+                Element 'ram:SpecifiedTradePaymentTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementFinancialCard">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeSettlementFinancialCard' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation">
+            <assert test="count(ram:LineTotalAmount)=1">
+                Element 'ram:LineTotalAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:AllowanceTotalAmount">
+            <report test="true()">
+                Element 'ram:AllowanceTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:ChargeTotalAmount">
+            <report test="true()">
+                Element 'ram:ChargeTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:GrandTotalAmount">
+            <report test="true()">
+                Element 'ram:GrandTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:GrossLineTotalAmount">
+            <report test="true()">
+                Element 'ram:GrossLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:NetIncludingTaxesLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetIncludingTaxesLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:NetLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:ProductWeightLossInformationAmount">
+            <report test="true()">
+                Element 'ram:ProductWeightLossInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TaxBasisTotalAmount">
+            <report test="true()">
+                Element 'ram:TaxBasisTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TaxTotalAmount">
+            <report test="true()">
+                Element 'ram:TaxTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalAllowanceChargeAmount">
+            <report test="true()">
+                Element 'ram:TotalAllowanceChargeAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalRetailValueInformationAmount">
+            <report test="true()">
+                Element 'ram:TotalRetailValueInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SubtotalCalculatedTradeTax">
+            <report test="true()">
+                Element 'ram:SubtotalCalculatedTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:TotalAdjustmentAmount">
+            <report test="true()">
+                Element 'ram:TotalAdjustmentAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct">
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:AdditionalReferenceReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferenceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableMaterialGoodsCharacteristic">
+            <report test="true()">
+                Element 'ram:ApplicableMaterialGoodsCharacteristic' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic">
+            <report test="true()">
+                Element 'ram:ApplicableProductCharacteristic' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:AreaDensityMeasure">
+            <report test="true()">
+                Element 'ram:AreaDensityMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BrandName">
+            <report test="true()">
+                Element 'ram:BrandName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BrandOwnerTradeParty">
+            <report test="true()">
+                Element 'ram:BrandOwnerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID">
+            <report test="true()">
+                Element 'ram:BuyerAssignedID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:CertificationEvidenceReferenceReferencedDocument">
+            <report test="true()">
+                Element 'ram:CertificationEvidenceReferenceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ColourCode">
+            <report test="true()">
+                Element 'ram:ColourCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ColourDescription">
+            <report test="true()">
+                Element 'ram:ColourDescription' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification">
+            <report test="true()">
+                Element 'ram:DesignatedProductClassification' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Designation">
+            <report test="true()">
+                Element 'ram:Designation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DrainedNetWeightMeasure">
+            <report test="true()">
+                Element 'ram:DrainedNetWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:EndItemName">
+            <report test="true()">
+                Element 'ram:EndItemName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:EndItemTypeCode">
+            <report test="true()">
+                Element 'ram:EndItemTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:FormattedCancellationAnnouncedLaunchDateTime">
+            <report test="true()">
+                Element 'ram:FormattedCancellationAnnouncedLaunchDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:FormattedLatestProductDataChangeDateTime">
+            <report test="true()">
+                Element 'ram:FormattedLatestProductDataChangeDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeID]">
+            <let name="codeValue4" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_BASIC_codedb.xml&apos;)//cl[@id=4]/enumeration[@value=$codeValue4]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GrossWeightMeasure">
+            <report test="true()">
+                Element 'ram:GrossWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct">
+            <report test="true()">
+                Element 'ram:IncludedReferencedProduct' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IndividualTradeProductInstance">
+            <report test="true()">
+                Element 'ram:IndividualTradeProductInstance' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:InformationNote">
+            <report test="true()">
+                Element 'ram:InformationNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:InspectionReferenceReferencedDocument">
+            <report test="true()">
+                Element 'ram:InspectionReferenceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:LegalRightsOwnerTradeParty">
+            <report test="true()">
+                Element 'ram:LegalRightsOwnerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:LinearSpatialDimension">
+            <report test="true()">
+                Element 'ram:LinearSpatialDimension' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:MSDSReferenceReferencedDocument">
+            <report test="true()">
+                Element 'ram:MSDSReferenceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ManufacturerAssignedID">
+            <report test="true()">
+                Element 'ram:ManufacturerAssignedID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ManufacturerTradeParty">
+            <report test="true()">
+                Element 'ram:ManufacturerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:MaximumLinearSpatialDimension">
+            <report test="true()">
+                Element 'ram:MaximumLinearSpatialDimension' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:MinimumLinearSpatialDimension">
+            <report test="true()">
+                Element 'ram:MinimumLinearSpatialDimension' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:NetWeightMeasure">
+            <report test="true()">
+                Element 'ram:NetWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry">
+            <report test="true()">
+                Element 'ram:OriginTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:PresentationSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:PresentationSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ProductGroupID">
+            <report test="true()">
+                Element 'ram:ProductGroupID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID">
+            <report test="true()">
+                Element 'ram:SellerAssignedID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SubBrandName">
+            <report test="true()">
+                Element 'ram:SubBrandName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:TradeName">
+            <report test="true()">
+                Element 'ram:TradeName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:UseDescription">
+            <report test="true()">
+                Element 'ram:UseDescription' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:VariableMeasureIndicator">
+            <report test="true()">
+                Element 'ram:VariableMeasureIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ValuationBreakdownStatement">
+            <report test="true()">
+                Element 'rsm:ValuationBreakdownStatement' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+</schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC_codedb.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC_codedb.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_BASIC_codedb.xml	(revision 8435)
@@ -0,0 +1,4673 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<codedb>
+    <cl id="1">
+        <enumeration value="80"/>
+        <enumeration value="81"/>
+        <enumeration value="82"/>
+        <enumeration value="83"/>
+        <enumeration value="84"/>
+        <enumeration value="130"/>
+        <enumeration value="202"/>
+        <enumeration value="203"/>
+        <enumeration value="204"/>
+        <enumeration value="211"/>
+        <enumeration value="261"/>
+        <enumeration value="262"/>
+        <enumeration value="295"/>
+        <enumeration value="296"/>
+        <enumeration value="308"/>
+        <enumeration value="325"/>
+        <enumeration value="326"/>
+        <enumeration value="380"/>
+        <enumeration value="381"/>
+        <enumeration value="383"/>
+        <enumeration value="384"/>
+        <enumeration value="385"/>
+        <enumeration value="386"/>
+        <enumeration value="387"/>
+        <enumeration value="388"/>
+        <enumeration value="389"/>
+        <enumeration value="390"/>
+        <enumeration value="393"/>
+        <enumeration value="394"/>
+        <enumeration value="395"/>
+        <enumeration value="396"/>
+        <enumeration value="420"/>
+        <enumeration value="456"/>
+        <enumeration value="457"/>
+        <enumeration value="458"/>
+        <enumeration value="527"/>
+        <enumeration value="575"/>
+        <enumeration value="623"/>
+        <enumeration value="633"/>
+        <enumeration value="751"/>
+        <enumeration value="780"/>
+        <enumeration value="935"/>
+    </cl>
+    <cl id="2">
+        <enumeration value="102"/>
+    </cl>
+    <cl id="3">
+        <enumeration value="AAA"/>
+        <enumeration value="AAB"/>
+        <enumeration value="AAC"/>
+        <enumeration value="AAD"/>
+        <enumeration value="AAE"/>
+        <enumeration value="AAF"/>
+        <enumeration value="AAG"/>
+        <enumeration value="AAI"/>
+        <enumeration value="AAJ"/>
+        <enumeration value="AAK"/>
+        <enumeration value="AAL"/>
+        <enumeration value="AAM"/>
+        <enumeration value="AAN"/>
+        <enumeration value="AAO"/>
+        <enumeration value="AAP"/>
+        <enumeration value="AAQ"/>
+        <enumeration value="AAR"/>
+        <enumeration value="AAS"/>
+        <enumeration value="AAT"/>
+        <enumeration value="AAU"/>
+        <enumeration value="AAV"/>
+        <enumeration value="AAW"/>
+        <enumeration value="AAX"/>
+        <enumeration value="AAY"/>
+        <enumeration value="AAZ"/>
+        <enumeration value="ABA"/>
+        <enumeration value="ABB"/>
+        <enumeration value="ABC"/>
+        <enumeration value="ABD"/>
+        <enumeration value="ABE"/>
+        <enumeration value="ABF"/>
+        <enumeration value="ABG"/>
+        <enumeration value="ABH"/>
+        <enumeration value="ABI"/>
+        <enumeration value="ABJ"/>
+        <enumeration value="ABK"/>
+        <enumeration value="ABL"/>
+        <enumeration value="ABM"/>
+        <enumeration value="ABN"/>
+        <enumeration value="ABO"/>
+        <enumeration value="ABP"/>
+        <enumeration value="ABQ"/>
+        <enumeration value="ABR"/>
+        <enumeration value="ABS"/>
+        <enumeration value="ABT"/>
+        <enumeration value="ABU"/>
+        <enumeration value="ABV"/>
+        <enumeration value="ABW"/>
+        <enumeration value="ABX"/>
+        <enumeration value="ABZ"/>
+        <enumeration value="ACA"/>
+        <enumeration value="ACB"/>
+        <enumeration value="ACC"/>
+        <enumeration value="ACD"/>
+        <enumeration value="ACE"/>
+        <enumeration value="ACF"/>
+        <enumeration value="ACG"/>
+        <enumeration value="ACH"/>
+        <enumeration value="ACI"/>
+        <enumeration value="ACJ"/>
+        <enumeration value="ACK"/>
+        <enumeration value="ACL"/>
+        <enumeration value="ACM"/>
+        <enumeration value="ACN"/>
+        <enumeration value="ACO"/>
+        <enumeration value="ACP"/>
+        <enumeration value="ACQ"/>
+        <enumeration value="ACR"/>
+        <enumeration value="ACS"/>
+        <enumeration value="ACT"/>
+        <enumeration value="ACU"/>
+        <enumeration value="ACV"/>
+        <enumeration value="ACW"/>
+        <enumeration value="ACX"/>
+        <enumeration value="ACY"/>
+        <enumeration value="ACZ"/>
+        <enumeration value="ADA"/>
+        <enumeration value="ADB"/>
+        <enumeration value="ADC"/>
+        <enumeration value="ADD"/>
+        <enumeration value="ADE"/>
+        <enumeration value="ADF"/>
+        <enumeration value="ADG"/>
+        <enumeration value="ADH"/>
+        <enumeration value="ADI"/>
+        <enumeration value="ADJ"/>
+        <enumeration value="ADK"/>
+        <enumeration value="ADL"/>
+        <enumeration value="ADM"/>
+        <enumeration value="ADN"/>
+        <enumeration value="ADO"/>
+        <enumeration value="ADP"/>
+        <enumeration value="ADQ"/>
+        <enumeration value="ADR"/>
+        <enumeration value="ADS"/>
+        <enumeration value="ADT"/>
+        <enumeration value="ADU"/>
+        <enumeration value="ADV"/>
+        <enumeration value="ADW"/>
+        <enumeration value="ADX"/>
+        <enumeration value="ADY"/>
+        <enumeration value="ADZ"/>
+        <enumeration value="AEA"/>
+        <enumeration value="AEB"/>
+        <enumeration value="AEC"/>
+        <enumeration value="AED"/>
+        <enumeration value="AEE"/>
+        <enumeration value="AEF"/>
+        <enumeration value="AEG"/>
+        <enumeration value="AEH"/>
+        <enumeration value="AEI"/>
+        <enumeration value="AEJ"/>
+        <enumeration value="AEK"/>
+        <enumeration value="AEL"/>
+        <enumeration value="AEM"/>
+        <enumeration value="AEN"/>
+        <enumeration value="AEO"/>
+        <enumeration value="AEP"/>
+        <enumeration value="AEQ"/>
+        <enumeration value="AER"/>
+        <enumeration value="AES"/>
+        <enumeration value="AET"/>
+        <enumeration value="AEU"/>
+        <enumeration value="AEV"/>
+        <enumeration value="AEW"/>
+        <enumeration value="AEX"/>
+        <enumeration value="AEY"/>
+        <enumeration value="AEZ"/>
+        <enumeration value="AFA"/>
+        <enumeration value="AFB"/>
+        <enumeration value="AFC"/>
+        <enumeration value="AFD"/>
+        <enumeration value="AFE"/>
+        <enumeration value="AFF"/>
+        <enumeration value="AFG"/>
+        <enumeration value="AFH"/>
+        <enumeration value="AFI"/>
+        <enumeration value="AFJ"/>
+        <enumeration value="AFK"/>
+        <enumeration value="AFL"/>
+        <enumeration value="AFM"/>
+        <enumeration value="AFN"/>
+        <enumeration value="AFO"/>
+        <enumeration value="AFP"/>
+        <enumeration value="AFQ"/>
+        <enumeration value="AFR"/>
+        <enumeration value="AFS"/>
+        <enumeration value="AFT"/>
+        <enumeration value="AFU"/>
+        <enumeration value="AFV"/>
+        <enumeration value="AFW"/>
+        <enumeration value="AFX"/>
+        <enumeration value="AFY"/>
+        <enumeration value="AFZ"/>
+        <enumeration value="AGA"/>
+        <enumeration value="AGB"/>
+        <enumeration value="AGC"/>
+        <enumeration value="AGD"/>
+        <enumeration value="AGE"/>
+        <enumeration value="AGF"/>
+        <enumeration value="AGG"/>
+        <enumeration value="AGH"/>
+        <enumeration value="AGI"/>
+        <enumeration value="AGJ"/>
+        <enumeration value="AGK"/>
+        <enumeration value="AGL"/>
+        <enumeration value="AGM"/>
+        <enumeration value="AGN"/>
+        <enumeration value="AGO"/>
+        <enumeration value="AGP"/>
+        <enumeration value="AGQ"/>
+        <enumeration value="AGR"/>
+        <enumeration value="AGS"/>
+        <enumeration value="AGT"/>
+        <enumeration value="AGU"/>
+        <enumeration value="AGV"/>
+        <enumeration value="AGW"/>
+        <enumeration value="AGX"/>
+        <enumeration value="AGY"/>
+        <enumeration value="AGZ"/>
+        <enumeration value="AHA"/>
+        <enumeration value="AHB"/>
+        <enumeration value="AHC"/>
+        <enumeration value="AHD"/>
+        <enumeration value="AHE"/>
+        <enumeration value="AHF"/>
+        <enumeration value="AHG"/>
+        <enumeration value="AHH"/>
+        <enumeration value="AHI"/>
+        <enumeration value="AHJ"/>
+        <enumeration value="AHK"/>
+        <enumeration value="AHL"/>
+        <enumeration value="AHM"/>
+        <enumeration value="AHN"/>
+        <enumeration value="AHO"/>
+        <enumeration value="AHP"/>
+        <enumeration value="AHQ"/>
+        <enumeration value="AHR"/>
+        <enumeration value="AHS"/>
+        <enumeration value="AHT"/>
+        <enumeration value="AHU"/>
+        <enumeration value="AHV"/>
+        <enumeration value="AHW"/>
+        <enumeration value="AHX"/>
+        <enumeration value="AHY"/>
+        <enumeration value="AHZ"/>
+        <enumeration value="AIA"/>
+        <enumeration value="AIB"/>
+        <enumeration value="AIC"/>
+        <enumeration value="AID"/>
+        <enumeration value="AIE"/>
+        <enumeration value="AIF"/>
+        <enumeration value="AIG"/>
+        <enumeration value="AIH"/>
+        <enumeration value="AII"/>
+        <enumeration value="AIJ"/>
+        <enumeration value="AIK"/>
+        <enumeration value="AIL"/>
+        <enumeration value="AIM"/>
+        <enumeration value="AIN"/>
+        <enumeration value="AIO"/>
+        <enumeration value="AIP"/>
+        <enumeration value="AIQ"/>
+        <enumeration value="AIR"/>
+        <enumeration value="AIS"/>
+        <enumeration value="AIT"/>
+        <enumeration value="AIU"/>
+        <enumeration value="AIV"/>
+        <enumeration value="AIW"/>
+        <enumeration value="AIX"/>
+        <enumeration value="AIY"/>
+        <enumeration value="AIZ"/>
+        <enumeration value="AJA"/>
+        <enumeration value="AJB"/>
+        <enumeration value="ALC"/>
+        <enumeration value="ALD"/>
+        <enumeration value="ALE"/>
+        <enumeration value="ALF"/>
+        <enumeration value="ALG"/>
+        <enumeration value="ALH"/>
+        <enumeration value="ALI"/>
+        <enumeration value="ALJ"/>
+        <enumeration value="ALK"/>
+        <enumeration value="ALL"/>
+        <enumeration value="ALM"/>
+        <enumeration value="ALN"/>
+        <enumeration value="ALO"/>
+        <enumeration value="ALP"/>
+        <enumeration value="ALQ"/>
+        <enumeration value="ARR"/>
+        <enumeration value="ARS"/>
+        <enumeration value="AUT"/>
+        <enumeration value="AUU"/>
+        <enumeration value="AUV"/>
+        <enumeration value="AUW"/>
+        <enumeration value="AUX"/>
+        <enumeration value="AUY"/>
+        <enumeration value="AUZ"/>
+        <enumeration value="AVA"/>
+        <enumeration value="AVB"/>
+        <enumeration value="AVC"/>
+        <enumeration value="AVD"/>
+        <enumeration value="AVE"/>
+        <enumeration value="AVF"/>
+        <enumeration value="BAG"/>
+        <enumeration value="BAH"/>
+        <enumeration value="BAI"/>
+        <enumeration value="BAJ"/>
+        <enumeration value="BAK"/>
+        <enumeration value="BAL"/>
+        <enumeration value="BAM"/>
+        <enumeration value="BAN"/>
+        <enumeration value="BAO"/>
+        <enumeration value="BAP"/>
+        <enumeration value="BAQ"/>
+        <enumeration value="BAR"/>
+        <enumeration value="BAS"/>
+        <enumeration value="BLC"/>
+        <enumeration value="BLD"/>
+        <enumeration value="BLE"/>
+        <enumeration value="BLF"/>
+        <enumeration value="BLG"/>
+        <enumeration value="BLH"/>
+        <enumeration value="BLI"/>
+        <enumeration value="BLJ"/>
+        <enumeration value="BLK"/>
+        <enumeration value="BLL"/>
+        <enumeration value="BLM"/>
+        <enumeration value="BLN"/>
+        <enumeration value="BLO"/>
+        <enumeration value="BLP"/>
+        <enumeration value="BLQ"/>
+        <enumeration value="BLR"/>
+        <enumeration value="BLS"/>
+        <enumeration value="BLT"/>
+        <enumeration value="BLU"/>
+        <enumeration value="BLV"/>
+        <enumeration value="BLW"/>
+        <enumeration value="BLX"/>
+        <enumeration value="BLY"/>
+        <enumeration value="BLZ"/>
+        <enumeration value="BMA"/>
+        <enumeration value="BMB"/>
+        <enumeration value="BMC"/>
+        <enumeration value="BMD"/>
+        <enumeration value="BME"/>
+        <enumeration value="CCI"/>
+        <enumeration value="CEX"/>
+        <enumeration value="CHG"/>
+        <enumeration value="CIP"/>
+        <enumeration value="CLP"/>
+        <enumeration value="CLR"/>
+        <enumeration value="COI"/>
+        <enumeration value="CUR"/>
+        <enumeration value="CUS"/>
+        <enumeration value="DAR"/>
+        <enumeration value="DCL"/>
+        <enumeration value="DEL"/>
+        <enumeration value="DIN"/>
+        <enumeration value="DOC"/>
+        <enumeration value="DUT"/>
+        <enumeration value="EUR"/>
+        <enumeration value="FBC"/>
+        <enumeration value="GBL"/>
+        <enumeration value="GEN"/>
+        <enumeration value="GS7"/>
+        <enumeration value="HAN"/>
+        <enumeration value="HAZ"/>
+        <enumeration value="ICN"/>
+        <enumeration value="IIN"/>
+        <enumeration value="IMI"/>
+        <enumeration value="IND"/>
+        <enumeration value="INS"/>
+        <enumeration value="INV"/>
+        <enumeration value="IRP"/>
+        <enumeration value="ITR"/>
+        <enumeration value="ITS"/>
+        <enumeration value="LAN"/>
+        <enumeration value="LIN"/>
+        <enumeration value="LOI"/>
+        <enumeration value="MCO"/>
+        <enumeration value="MDH"/>
+        <enumeration value="MKS"/>
+        <enumeration value="ORI"/>
+        <enumeration value="OSI"/>
+        <enumeration value="PAC"/>
+        <enumeration value="PAI"/>
+        <enumeration value="PAY"/>
+        <enumeration value="PKG"/>
+        <enumeration value="PKT"/>
+        <enumeration value="PMD"/>
+        <enumeration value="PMT"/>
+        <enumeration value="PRD"/>
+        <enumeration value="PRF"/>
+        <enumeration value="PRI"/>
+        <enumeration value="PUR"/>
+        <enumeration value="QIN"/>
+        <enumeration value="QQD"/>
+        <enumeration value="QUT"/>
+        <enumeration value="RAH"/>
+        <enumeration value="REG"/>
+        <enumeration value="RET"/>
+        <enumeration value="REV"/>
+        <enumeration value="RQR"/>
+        <enumeration value="SAF"/>
+        <enumeration value="SIC"/>
+        <enumeration value="SIN"/>
+        <enumeration value="SLR"/>
+        <enumeration value="SPA"/>
+        <enumeration value="SPG"/>
+        <enumeration value="SPH"/>
+        <enumeration value="SPP"/>
+        <enumeration value="SPT"/>
+        <enumeration value="SRN"/>
+        <enumeration value="SSR"/>
+        <enumeration value="SUR"/>
+        <enumeration value="TCA"/>
+        <enumeration value="TDT"/>
+        <enumeration value="TRA"/>
+        <enumeration value="TRR"/>
+        <enumeration value="TXD"/>
+        <enumeration value="WHI"/>
+        <enumeration value="ZZZ"/>
+    </cl>
+    <cl id="4">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="5">
+        <enumeration value="X1A"/>
+        <enumeration value="X1B"/>
+        <enumeration value="X1D"/>
+        <enumeration value="X1F"/>
+        <enumeration value="X1G"/>
+        <enumeration value="X1W"/>
+        <enumeration value="X2C"/>
+        <enumeration value="X3A"/>
+        <enumeration value="X3H"/>
+        <enumeration value="X43"/>
+        <enumeration value="X44"/>
+        <enumeration value="X4A"/>
+        <enumeration value="X4B"/>
+        <enumeration value="X4C"/>
+        <enumeration value="X4D"/>
+        <enumeration value="X4F"/>
+        <enumeration value="X4G"/>
+        <enumeration value="X4H"/>
+        <enumeration value="X5H"/>
+        <enumeration value="X5L"/>
+        <enumeration value="X5M"/>
+        <enumeration value="X6H"/>
+        <enumeration value="X6P"/>
+        <enumeration value="X7A"/>
+        <enumeration value="X7B"/>
+        <enumeration value="X8A"/>
+        <enumeration value="X8B"/>
+        <enumeration value="X8C"/>
+        <enumeration value="XAA"/>
+        <enumeration value="XAB"/>
+        <enumeration value="XAC"/>
+        <enumeration value="XAD"/>
+        <enumeration value="XAE"/>
+        <enumeration value="XAF"/>
+        <enumeration value="XAG"/>
+        <enumeration value="XAH"/>
+        <enumeration value="XAI"/>
+        <enumeration value="XAJ"/>
+        <enumeration value="XAL"/>
+        <enumeration value="XAM"/>
+        <enumeration value="XAP"/>
+        <enumeration value="XAT"/>
+        <enumeration value="XAV"/>
+        <enumeration value="XB4"/>
+        <enumeration value="XBA"/>
+        <enumeration value="XBB"/>
+        <enumeration value="XBC"/>
+        <enumeration value="XBD"/>
+        <enumeration value="XBE"/>
+        <enumeration value="XBF"/>
+        <enumeration value="XBG"/>
+        <enumeration value="XBH"/>
+        <enumeration value="XBI"/>
+        <enumeration value="XBJ"/>
+        <enumeration value="XBK"/>
+        <enumeration value="XBL"/>
+        <enumeration value="XBM"/>
+        <enumeration value="XBN"/>
+        <enumeration value="XBO"/>
+        <enumeration value="XBP"/>
+        <enumeration value="XBQ"/>
+        <enumeration value="XBR"/>
+        <enumeration value="XBS"/>
+        <enumeration value="XBT"/>
+        <enumeration value="XBU"/>
+        <enumeration value="XBV"/>
+        <enumeration value="XBW"/>
+        <enumeration value="XBX"/>
+        <enumeration value="XBY"/>
+        <enumeration value="XBZ"/>
+        <enumeration value="XCA"/>
+        <enumeration value="XCB"/>
+        <enumeration value="XCC"/>
+        <enumeration value="XCD"/>
+        <enumeration value="XCE"/>
+        <enumeration value="XCF"/>
+        <enumeration value="XCG"/>
+        <enumeration value="XCH"/>
+        <enumeration value="XCI"/>
+        <enumeration value="XCJ"/>
+        <enumeration value="XCK"/>
+        <enumeration value="XCL"/>
+        <enumeration value="XCM"/>
+        <enumeration value="XCN"/>
+        <enumeration value="XCO"/>
+        <enumeration value="XCP"/>
+        <enumeration value="XCQ"/>
+        <enumeration value="XCR"/>
+        <enumeration value="XCS"/>
+        <enumeration value="XCT"/>
+        <enumeration value="XCU"/>
+        <enumeration value="XCV"/>
+        <enumeration value="XCW"/>
+        <enumeration value="XCX"/>
+        <enumeration value="XCY"/>
+        <enumeration value="XCZ"/>
+        <enumeration value="XDA"/>
+        <enumeration value="XDB"/>
+        <enumeration value="XDC"/>
+        <enumeration value="XDG"/>
+        <enumeration value="XDH"/>
+        <enumeration value="XDI"/>
+        <enumeration value="XDJ"/>
+        <enumeration value="XDK"/>
+        <enumeration value="XDL"/>
+        <enumeration value="XDM"/>
+        <enumeration value="XDN"/>
+        <enumeration value="XDP"/>
+        <enumeration value="XDR"/>
+        <enumeration value="XDS"/>
+        <enumeration value="XDT"/>
+        <enumeration value="XDU"/>
+        <enumeration value="XDV"/>
+        <enumeration value="XDW"/>
+        <enumeration value="XDX"/>
+        <enumeration value="XDY"/>
+        <enumeration value="XEC"/>
+        <enumeration value="XED"/>
+        <enumeration value="XEE"/>
+        <enumeration value="XEF"/>
+        <enumeration value="XEG"/>
+        <enumeration value="XEH"/>
+        <enumeration value="XEI"/>
+        <enumeration value="XEN"/>
+        <enumeration value="XFB"/>
+        <enumeration value="XFC"/>
+        <enumeration value="XFD"/>
+        <enumeration value="XFE"/>
+        <enumeration value="XFI"/>
+        <enumeration value="XFL"/>
+        <enumeration value="XFO"/>
+        <enumeration value="XFP"/>
+        <enumeration value="XFR"/>
+        <enumeration value="XFT"/>
+        <enumeration value="XFW"/>
+        <enumeration value="XFX"/>
+        <enumeration value="XGB"/>
+        <enumeration value="XGI"/>
+        <enumeration value="XGL"/>
+        <enumeration value="XGR"/>
+        <enumeration value="XGU"/>
+        <enumeration value="XGY"/>
+        <enumeration value="XGZ"/>
+        <enumeration value="XHA"/>
+        <enumeration value="XHB"/>
+        <enumeration value="XHC"/>
+        <enumeration value="XHG"/>
+        <enumeration value="XHN"/>
+        <enumeration value="XHR"/>
+        <enumeration value="XIA"/>
+        <enumeration value="XIB"/>
+        <enumeration value="XIC"/>
+        <enumeration value="XID"/>
+        <enumeration value="XIE"/>
+        <enumeration value="XIF"/>
+        <enumeration value="XIG"/>
+        <enumeration value="XIH"/>
+        <enumeration value="XIK"/>
+        <enumeration value="XIL"/>
+        <enumeration value="XIN"/>
+        <enumeration value="XIZ"/>
+        <enumeration value="XJB"/>
+        <enumeration value="XJC"/>
+        <enumeration value="XJG"/>
+        <enumeration value="XJR"/>
+        <enumeration value="XJT"/>
+        <enumeration value="XJY"/>
+        <enumeration value="XKG"/>
+        <enumeration value="XKI"/>
+        <enumeration value="XLE"/>
+        <enumeration value="XLG"/>
+        <enumeration value="XLT"/>
+        <enumeration value="XLU"/>
+        <enumeration value="XLV"/>
+        <enumeration value="XLZ"/>
+        <enumeration value="XMA"/>
+        <enumeration value="XMB"/>
+        <enumeration value="XMC"/>
+        <enumeration value="XME"/>
+        <enumeration value="XMR"/>
+        <enumeration value="XMS"/>
+        <enumeration value="XMT"/>
+        <enumeration value="XMW"/>
+        <enumeration value="XMX"/>
+        <enumeration value="XNA"/>
+        <enumeration value="XNE"/>
+        <enumeration value="XNF"/>
+        <enumeration value="XNG"/>
+        <enumeration value="XNS"/>
+        <enumeration value="XNT"/>
+        <enumeration value="XNU"/>
+        <enumeration value="XNV"/>
+        <enumeration value="XOA"/>
+        <enumeration value="XOB"/>
+        <enumeration value="XOC"/>
+        <enumeration value="XOD"/>
+        <enumeration value="XOE"/>
+        <enumeration value="XOF"/>
+        <enumeration value="XOK"/>
+        <enumeration value="XOT"/>
+        <enumeration value="XOU"/>
+        <enumeration value="XP2"/>
+        <enumeration value="XPA"/>
+        <enumeration value="XPB"/>
+        <enumeration value="XPC"/>
+        <enumeration value="XPD"/>
+        <enumeration value="XPE"/>
+        <enumeration value="XPF"/>
+        <enumeration value="XPG"/>
+        <enumeration value="XPH"/>
+        <enumeration value="XPI"/>
+        <enumeration value="XPJ"/>
+        <enumeration value="XPK"/>
+        <enumeration value="XPL"/>
+        <enumeration value="XPN"/>
+        <enumeration value="XPO"/>
+        <enumeration value="XPP"/>
+        <enumeration value="XPR"/>
+        <enumeration value="XPT"/>
+        <enumeration value="XPU"/>
+        <enumeration value="XPV"/>
+        <enumeration value="XPX"/>
+        <enumeration value="XPY"/>
+        <enumeration value="XPZ"/>
+        <enumeration value="XQA"/>
+        <enumeration value="XQB"/>
+        <enumeration value="XQC"/>
+        <enumeration value="XQD"/>
+        <enumeration value="XQF"/>
+        <enumeration value="XQG"/>
+        <enumeration value="XQH"/>
+        <enumeration value="XQJ"/>
+        <enumeration value="XQK"/>
+        <enumeration value="XQL"/>
+        <enumeration value="XQM"/>
+        <enumeration value="XQN"/>
+        <enumeration value="XQP"/>
+        <enumeration value="XQQ"/>
+        <enumeration value="XQR"/>
+        <enumeration value="XQS"/>
+        <enumeration value="XRD"/>
+        <enumeration value="XRG"/>
+        <enumeration value="XRJ"/>
+        <enumeration value="XRK"/>
+        <enumeration value="XRL"/>
+        <enumeration value="XRO"/>
+        <enumeration value="XRT"/>
+        <enumeration value="XRZ"/>
+        <enumeration value="XSA"/>
+        <enumeration value="XSB"/>
+        <enumeration value="XSC"/>
+        <enumeration value="XSD"/>
+        <enumeration value="XSE"/>
+        <enumeration value="XSH"/>
+        <enumeration value="XSI"/>
+        <enumeration value="XSK"/>
+        <enumeration value="XSL"/>
+        <enumeration value="XSM"/>
+        <enumeration value="XSO"/>
+        <enumeration value="XSP"/>
+        <enumeration value="XSS"/>
+        <enumeration value="XST"/>
+        <enumeration value="XSU"/>
+        <enumeration value="XSV"/>
+        <enumeration value="XSW"/>
+        <enumeration value="XSY"/>
+        <enumeration value="XSZ"/>
+        <enumeration value="XT1"/>
+        <enumeration value="XTB"/>
+        <enumeration value="XTC"/>
+        <enumeration value="XTD"/>
+        <enumeration value="XTE"/>
+        <enumeration value="XTG"/>
+        <enumeration value="XTI"/>
+        <enumeration value="XTK"/>
+        <enumeration value="XTL"/>
+        <enumeration value="XTN"/>
+        <enumeration value="XTO"/>
+        <enumeration value="XTR"/>
+        <enumeration value="XTS"/>
+        <enumeration value="XTT"/>
+        <enumeration value="XTU"/>
+        <enumeration value="XTV"/>
+        <enumeration value="XTW"/>
+        <enumeration value="XTY"/>
+        <enumeration value="XTZ"/>
+        <enumeration value="XUC"/>
+        <enumeration value="XUN"/>
+        <enumeration value="XVA"/>
+        <enumeration value="XVG"/>
+        <enumeration value="XVI"/>
+        <enumeration value="XVK"/>
+        <enumeration value="XVL"/>
+        <enumeration value="XVN"/>
+        <enumeration value="XVO"/>
+        <enumeration value="XVP"/>
+        <enumeration value="XVQ"/>
+        <enumeration value="XVR"/>
+        <enumeration value="XVS"/>
+        <enumeration value="XVY"/>
+        <enumeration value="XWA"/>
+        <enumeration value="XWB"/>
+        <enumeration value="XWC"/>
+        <enumeration value="XWD"/>
+        <enumeration value="XWF"/>
+        <enumeration value="XWG"/>
+        <enumeration value="XWH"/>
+        <enumeration value="XWJ"/>
+        <enumeration value="XWK"/>
+        <enumeration value="XWL"/>
+        <enumeration value="XWM"/>
+        <enumeration value="XWN"/>
+        <enumeration value="XWP"/>
+        <enumeration value="XWQ"/>
+        <enumeration value="XWR"/>
+        <enumeration value="XWS"/>
+        <enumeration value="XWT"/>
+        <enumeration value="XWU"/>
+        <enumeration value="XWV"/>
+        <enumeration value="XWW"/>
+        <enumeration value="XWX"/>
+        <enumeration value="XWY"/>
+        <enumeration value="XWZ"/>
+        <enumeration value="XXA"/>
+        <enumeration value="XXB"/>
+        <enumeration value="XXC"/>
+        <enumeration value="XXD"/>
+        <enumeration value="XXF"/>
+        <enumeration value="XXG"/>
+        <enumeration value="XXH"/>
+        <enumeration value="XXJ"/>
+        <enumeration value="XXK"/>
+        <enumeration value="XYA"/>
+        <enumeration value="XYB"/>
+        <enumeration value="XYC"/>
+        <enumeration value="XYD"/>
+        <enumeration value="XYF"/>
+        <enumeration value="XYG"/>
+        <enumeration value="XYH"/>
+        <enumeration value="XYJ"/>
+        <enumeration value="XYK"/>
+        <enumeration value="XYL"/>
+        <enumeration value="XYM"/>
+        <enumeration value="XYN"/>
+        <enumeration value="XYP"/>
+        <enumeration value="XYQ"/>
+        <enumeration value="XYR"/>
+        <enumeration value="XYS"/>
+        <enumeration value="XYT"/>
+        <enumeration value="XYV"/>
+        <enumeration value="XYW"/>
+        <enumeration value="XYX"/>
+        <enumeration value="XYY"/>
+        <enumeration value="XYZ"/>
+        <enumeration value="XZA"/>
+        <enumeration value="XZB"/>
+        <enumeration value="XZC"/>
+        <enumeration value="XZD"/>
+        <enumeration value="XZF"/>
+        <enumeration value="XZG"/>
+        <enumeration value="XZH"/>
+        <enumeration value="XZJ"/>
+        <enumeration value="XZK"/>
+        <enumeration value="XZL"/>
+        <enumeration value="XZM"/>
+        <enumeration value="XZN"/>
+        <enumeration value="XZP"/>
+        <enumeration value="XZQ"/>
+        <enumeration value="XZR"/>
+        <enumeration value="XZS"/>
+        <enumeration value="XZT"/>
+        <enumeration value="XZU"/>
+        <enumeration value="XZV"/>
+        <enumeration value="XZW"/>
+        <enumeration value="XZX"/>
+        <enumeration value="XZY"/>
+        <enumeration value="XZZ"/>
+        <enumeration value="10"/>
+        <enumeration value="11"/>
+        <enumeration value="13"/>
+        <enumeration value="14"/>
+        <enumeration value="15"/>
+        <enumeration value="20"/>
+        <enumeration value="21"/>
+        <enumeration value="22"/>
+        <enumeration value="23"/>
+        <enumeration value="24"/>
+        <enumeration value="25"/>
+        <enumeration value="27"/>
+        <enumeration value="28"/>
+        <enumeration value="33"/>
+        <enumeration value="34"/>
+        <enumeration value="35"/>
+        <enumeration value="37"/>
+        <enumeration value="38"/>
+        <enumeration value="40"/>
+        <enumeration value="41"/>
+        <enumeration value="56"/>
+        <enumeration value="57"/>
+        <enumeration value="58"/>
+        <enumeration value="59"/>
+        <enumeration value="60"/>
+        <enumeration value="61"/>
+        <enumeration value="64"/>
+        <enumeration value="66"/>
+        <enumeration value="74"/>
+        <enumeration value="76"/>
+        <enumeration value="77"/>
+        <enumeration value="78"/>
+        <enumeration value="80"/>
+        <enumeration value="81"/>
+        <enumeration value="84"/>
+        <enumeration value="85"/>
+        <enumeration value="87"/>
+        <enumeration value="89"/>
+        <enumeration value="91"/>
+        <enumeration value="1I"/>
+        <enumeration value="2A"/>
+        <enumeration value="2B"/>
+        <enumeration value="2C"/>
+        <enumeration value="2G"/>
+        <enumeration value="2H"/>
+        <enumeration value="2I"/>
+        <enumeration value="2J"/>
+        <enumeration value="2K"/>
+        <enumeration value="2L"/>
+        <enumeration value="2M"/>
+        <enumeration value="2N"/>
+        <enumeration value="2P"/>
+        <enumeration value="2Q"/>
+        <enumeration value="2R"/>
+        <enumeration value="2U"/>
+        <enumeration value="2X"/>
+        <enumeration value="2Y"/>
+        <enumeration value="2Z"/>
+        <enumeration value="3B"/>
+        <enumeration value="3C"/>
+        <enumeration value="4C"/>
+        <enumeration value="4G"/>
+        <enumeration value="4H"/>
+        <enumeration value="4K"/>
+        <enumeration value="4L"/>
+        <enumeration value="4M"/>
+        <enumeration value="4N"/>
+        <enumeration value="4O"/>
+        <enumeration value="4P"/>
+        <enumeration value="4Q"/>
+        <enumeration value="4R"/>
+        <enumeration value="4T"/>
+        <enumeration value="4U"/>
+        <enumeration value="4W"/>
+        <enumeration value="4X"/>
+        <enumeration value="5A"/>
+        <enumeration value="5B"/>
+        <enumeration value="5E"/>
+        <enumeration value="5J"/>
+        <enumeration value="A1"/>
+        <enumeration value="A10"/>
+        <enumeration value="A11"/>
+        <enumeration value="A12"/>
+        <enumeration value="A13"/>
+        <enumeration value="A14"/>
+        <enumeration value="A15"/>
+        <enumeration value="A16"/>
+        <enumeration value="A17"/>
+        <enumeration value="A18"/>
+        <enumeration value="A19"/>
+        <enumeration value="A2"/>
+        <enumeration value="A20"/>
+        <enumeration value="A21"/>
+        <enumeration value="A22"/>
+        <enumeration value="A23"/>
+        <enumeration value="A24"/>
+        <enumeration value="A25"/>
+        <enumeration value="A26"/>
+        <enumeration value="A27"/>
+        <enumeration value="A28"/>
+        <enumeration value="A29"/>
+        <enumeration value="A3"/>
+        <enumeration value="A30"/>
+        <enumeration value="A31"/>
+        <enumeration value="A32"/>
+        <enumeration value="A33"/>
+        <enumeration value="A34"/>
+        <enumeration value="A35"/>
+        <enumeration value="A36"/>
+        <enumeration value="A37"/>
+        <enumeration value="A38"/>
+        <enumeration value="A39"/>
+        <enumeration value="A4"/>
+        <enumeration value="A40"/>
+        <enumeration value="A41"/>
+        <enumeration value="A42"/>
+        <enumeration value="A43"/>
+        <enumeration value="A44"/>
+        <enumeration value="A45"/>
+        <enumeration value="A47"/>
+        <enumeration value="A48"/>
+        <enumeration value="A49"/>
+        <enumeration value="A5"/>
+        <enumeration value="A50"/>
+        <enumeration value="A51"/>
+        <enumeration value="A52"/>
+        <enumeration value="A53"/>
+        <enumeration value="A54"/>
+        <enumeration value="A55"/>
+        <enumeration value="A56"/>
+        <enumeration value="A57"/>
+        <enumeration value="A58"/>
+        <enumeration value="A59"/>
+        <enumeration value="A6"/>
+        <enumeration value="A60"/>
+        <enumeration value="A61"/>
+        <enumeration value="A62"/>
+        <enumeration value="A63"/>
+        <enumeration value="A64"/>
+        <enumeration value="A65"/>
+        <enumeration value="A66"/>
+        <enumeration value="A67"/>
+        <enumeration value="A68"/>
+        <enumeration value="A69"/>
+        <enumeration value="A7"/>
+        <enumeration value="A70"/>
+        <enumeration value="A71"/>
+        <enumeration value="A73"/>
+        <enumeration value="A74"/>
+        <enumeration value="A75"/>
+        <enumeration value="A76"/>
+        <enumeration value="A77"/>
+        <enumeration value="A78"/>
+        <enumeration value="A79"/>
+        <enumeration value="A8"/>
+        <enumeration value="A80"/>
+        <enumeration value="A81"/>
+        <enumeration value="A82"/>
+        <enumeration value="A83"/>
+        <enumeration value="A84"/>
+        <enumeration value="A85"/>
+        <enumeration value="A86"/>
+        <enumeration value="A87"/>
+        <enumeration value="A88"/>
+        <enumeration value="A89"/>
+        <enumeration value="A9"/>
+        <enumeration value="A90"/>
+        <enumeration value="A91"/>
+        <enumeration value="A93"/>
+        <enumeration value="A94"/>
+        <enumeration value="A95"/>
+        <enumeration value="A96"/>
+        <enumeration value="A97"/>
+        <enumeration value="A98"/>
+        <enumeration value="A99"/>
+        <enumeration value="AA"/>
+        <enumeration value="AB"/>
+        <enumeration value="ACR"/>
+        <enumeration value="ACT"/>
+        <enumeration value="AD"/>
+        <enumeration value="AE"/>
+        <enumeration value="AH"/>
+        <enumeration value="AI"/>
+        <enumeration value="AK"/>
+        <enumeration value="AL"/>
+        <enumeration value="AMH"/>
+        <enumeration value="AMP"/>
+        <enumeration value="ANN"/>
+        <enumeration value="APZ"/>
+        <enumeration value="AQ"/>
+        <enumeration value="ARE"/>
+        <enumeration value="AS"/>
+        <enumeration value="ASM"/>
+        <enumeration value="ASU"/>
+        <enumeration value="ATM"/>
+        <enumeration value="ATT"/>
+        <enumeration value="AWG"/>
+        <enumeration value="AY"/>
+        <enumeration value="AZ"/>
+        <enumeration value="B1"/>
+        <enumeration value="B10"/>
+        <enumeration value="B11"/>
+        <enumeration value="B12"/>
+        <enumeration value="B13"/>
+        <enumeration value="B14"/>
+        <enumeration value="B15"/>
+        <enumeration value="B16"/>
+        <enumeration value="B17"/>
+        <enumeration value="B18"/>
+        <enumeration value="B19"/>
+        <enumeration value="B20"/>
+        <enumeration value="B21"/>
+        <enumeration value="B22"/>
+        <enumeration value="B23"/>
+        <enumeration value="B24"/>
+        <enumeration value="B25"/>
+        <enumeration value="B26"/>
+        <enumeration value="B27"/>
+        <enumeration value="B28"/>
+        <enumeration value="B29"/>
+        <enumeration value="B3"/>
+        <enumeration value="B30"/>
+        <enumeration value="B31"/>
+        <enumeration value="B32"/>
+        <enumeration value="B33"/>
+        <enumeration value="B34"/>
+        <enumeration value="B35"/>
+        <enumeration value="B36"/>
+        <enumeration value="B37"/>
+        <enumeration value="B38"/>
+        <enumeration value="B39"/>
+        <enumeration value="B4"/>
+        <enumeration value="B40"/>
+        <enumeration value="B41"/>
+        <enumeration value="B42"/>
+        <enumeration value="B43"/>
+        <enumeration value="B44"/>
+        <enumeration value="B45"/>
+        <enumeration value="B46"/>
+        <enumeration value="B47"/>
+        <enumeration value="B48"/>
+        <enumeration value="B49"/>
+        <enumeration value="B50"/>
+        <enumeration value="B51"/>
+        <enumeration value="B52"/>
+        <enumeration value="B53"/>
+        <enumeration value="B54"/>
+        <enumeration value="B55"/>
+        <enumeration value="B56"/>
+        <enumeration value="B57"/>
+        <enumeration value="B58"/>
+        <enumeration value="B59"/>
+        <enumeration value="B60"/>
+        <enumeration value="B61"/>
+        <enumeration value="B62"/>
+        <enumeration value="B63"/>
+        <enumeration value="B64"/>
+        <enumeration value="B65"/>
+        <enumeration value="B66"/>
+        <enumeration value="B67"/>
+        <enumeration value="B68"/>
+        <enumeration value="B69"/>
+        <enumeration value="B7"/>
+        <enumeration value="B70"/>
+        <enumeration value="B71"/>
+        <enumeration value="B72"/>
+        <enumeration value="B73"/>
+        <enumeration value="B74"/>
+        <enumeration value="B75"/>
+        <enumeration value="B76"/>
+        <enumeration value="B77"/>
+        <enumeration value="B78"/>
+        <enumeration value="B79"/>
+        <enumeration value="B8"/>
+        <enumeration value="B80"/>
+        <enumeration value="B81"/>
+        <enumeration value="B82"/>
+        <enumeration value="B83"/>
+        <enumeration value="B84"/>
+        <enumeration value="B85"/>
+        <enumeration value="B86"/>
+        <enumeration value="B87"/>
+        <enumeration value="B88"/>
+        <enumeration value="B89"/>
+        <enumeration value="B90"/>
+        <enumeration value="B91"/>
+        <enumeration value="B92"/>
+        <enumeration value="B93"/>
+        <enumeration value="B94"/>
+        <enumeration value="B95"/>
+        <enumeration value="B96"/>
+        <enumeration value="B97"/>
+        <enumeration value="B98"/>
+        <enumeration value="B99"/>
+        <enumeration value="BAR"/>
+        <enumeration value="BB"/>
+        <enumeration value="BFT"/>
+        <enumeration value="BHP"/>
+        <enumeration value="BIL"/>
+        <enumeration value="BLD"/>
+        <enumeration value="BLL"/>
+        <enumeration value="BP"/>
+        <enumeration value="BPM"/>
+        <enumeration value="BQL"/>
+        <enumeration value="BTU"/>
+        <enumeration value="BUA"/>
+        <enumeration value="BUI"/>
+        <enumeration value="C0"/>
+        <enumeration value="C10"/>
+        <enumeration value="C11"/>
+        <enumeration value="C12"/>
+        <enumeration value="C13"/>
+        <enumeration value="C14"/>
+        <enumeration value="C15"/>
+        <enumeration value="C16"/>
+        <enumeration value="C17"/>
+        <enumeration value="C18"/>
+        <enumeration value="C19"/>
+        <enumeration value="C20"/>
+        <enumeration value="C21"/>
+        <enumeration value="C22"/>
+        <enumeration value="C23"/>
+        <enumeration value="C24"/>
+        <enumeration value="C25"/>
+        <enumeration value="C26"/>
+        <enumeration value="C27"/>
+        <enumeration value="C28"/>
+        <enumeration value="C29"/>
+        <enumeration value="C3"/>
+        <enumeration value="C30"/>
+        <enumeration value="C31"/>
+        <enumeration value="C32"/>
+        <enumeration value="C33"/>
+        <enumeration value="C34"/>
+        <enumeration value="C35"/>
+        <enumeration value="C36"/>
+        <enumeration value="C37"/>
+        <enumeration value="C38"/>
+        <enumeration value="C39"/>
+        <enumeration value="C40"/>
+        <enumeration value="C41"/>
+        <enumeration value="C42"/>
+        <enumeration value="C43"/>
+        <enumeration value="C44"/>
+        <enumeration value="C45"/>
+        <enumeration value="C46"/>
+        <enumeration value="C47"/>
+        <enumeration value="C48"/>
+        <enumeration value="C49"/>
+        <enumeration value="C50"/>
+        <enumeration value="C51"/>
+        <enumeration value="C52"/>
+        <enumeration value="C53"/>
+        <enumeration value="C54"/>
+        <enumeration value="C55"/>
+        <enumeration value="C56"/>
+        <enumeration value="C57"/>
+        <enumeration value="C58"/>
+        <enumeration value="C59"/>
+        <enumeration value="C60"/>
+        <enumeration value="C61"/>
+        <enumeration value="C62"/>
+        <enumeration value="C63"/>
+        <enumeration value="C64"/>
+        <enumeration value="C65"/>
+        <enumeration value="C66"/>
+        <enumeration value="C67"/>
+        <enumeration value="C68"/>
+        <enumeration value="C69"/>
+        <enumeration value="C7"/>
+        <enumeration value="C70"/>
+        <enumeration value="C71"/>
+        <enumeration value="C72"/>
+        <enumeration value="C73"/>
+        <enumeration value="C74"/>
+        <enumeration value="C75"/>
+        <enumeration value="C76"/>
+        <enumeration value="C78"/>
+        <enumeration value="C79"/>
+        <enumeration value="C8"/>
+        <enumeration value="C80"/>
+        <enumeration value="C81"/>
+        <enumeration value="C82"/>
+        <enumeration value="C83"/>
+        <enumeration value="C84"/>
+        <enumeration value="C85"/>
+        <enumeration value="C86"/>
+        <enumeration value="C87"/>
+        <enumeration value="C88"/>
+        <enumeration value="C89"/>
+        <enumeration value="C9"/>
+        <enumeration value="C90"/>
+        <enumeration value="C91"/>
+        <enumeration value="C92"/>
+        <enumeration value="C93"/>
+        <enumeration value="C94"/>
+        <enumeration value="C95"/>
+        <enumeration value="C96"/>
+        <enumeration value="C97"/>
+        <enumeration value="C99"/>
+        <enumeration value="CCT"/>
+        <enumeration value="CDL"/>
+        <enumeration value="CEL"/>
+        <enumeration value="CEN"/>
+        <enumeration value="CG"/>
+        <enumeration value="CGM"/>
+        <enumeration value="CKG"/>
+        <enumeration value="CLF"/>
+        <enumeration value="CLT"/>
+        <enumeration value="CMK"/>
+        <enumeration value="CMQ"/>
+        <enumeration value="CMT"/>
+        <enumeration value="CNP"/>
+        <enumeration value="CNT"/>
+        <enumeration value="COU"/>
+        <enumeration value="CTG"/>
+        <enumeration value="CTM"/>
+        <enumeration value="CTN"/>
+        <enumeration value="CUR"/>
+        <enumeration value="CWA"/>
+        <enumeration value="CWI"/>
+        <enumeration value="D03"/>
+        <enumeration value="D04"/>
+        <enumeration value="D1"/>
+        <enumeration value="D10"/>
+        <enumeration value="D11"/>
+        <enumeration value="D12"/>
+        <enumeration value="D13"/>
+        <enumeration value="D15"/>
+        <enumeration value="D16"/>
+        <enumeration value="D17"/>
+        <enumeration value="D18"/>
+        <enumeration value="D19"/>
+        <enumeration value="D2"/>
+        <enumeration value="D20"/>
+        <enumeration value="D21"/>
+        <enumeration value="D22"/>
+        <enumeration value="D23"/>
+        <enumeration value="D24"/>
+        <enumeration value="D25"/>
+        <enumeration value="D26"/>
+        <enumeration value="D27"/>
+        <enumeration value="D29"/>
+        <enumeration value="D30"/>
+        <enumeration value="D31"/>
+        <enumeration value="D32"/>
+        <enumeration value="D33"/>
+        <enumeration value="D34"/>
+        <enumeration value="D35"/>
+        <enumeration value="D36"/>
+        <enumeration value="D37"/>
+        <enumeration value="D38"/>
+        <enumeration value="D39"/>
+        <enumeration value="D41"/>
+        <enumeration value="D42"/>
+        <enumeration value="D43"/>
+        <enumeration value="D44"/>
+        <enumeration value="D45"/>
+        <enumeration value="D46"/>
+        <enumeration value="D47"/>
+        <enumeration value="D48"/>
+        <enumeration value="D49"/>
+        <enumeration value="D5"/>
+        <enumeration value="D50"/>
+        <enumeration value="D51"/>
+        <enumeration value="D52"/>
+        <enumeration value="D53"/>
+        <enumeration value="D54"/>
+        <enumeration value="D55"/>
+        <enumeration value="D56"/>
+        <enumeration value="D57"/>
+        <enumeration value="D58"/>
+        <enumeration value="D59"/>
+        <enumeration value="D6"/>
+        <enumeration value="D60"/>
+        <enumeration value="D61"/>
+        <enumeration value="D62"/>
+        <enumeration value="D63"/>
+        <enumeration value="D65"/>
+        <enumeration value="D68"/>
+        <enumeration value="D69"/>
+        <enumeration value="D70"/>
+        <enumeration value="D71"/>
+        <enumeration value="D72"/>
+        <enumeration value="D73"/>
+        <enumeration value="D74"/>
+        <enumeration value="D75"/>
+        <enumeration value="D76"/>
+        <enumeration value="D77"/>
+        <enumeration value="D78"/>
+        <enumeration value="D80"/>
+        <enumeration value="D81"/>
+        <enumeration value="D82"/>
+        <enumeration value="D83"/>
+        <enumeration value="D85"/>
+        <enumeration value="D86"/>
+        <enumeration value="D87"/>
+        <enumeration value="D88"/>
+        <enumeration value="D89"/>
+        <enumeration value="D9"/>
+        <enumeration value="D91"/>
+        <enumeration value="D93"/>
+        <enumeration value="D94"/>
+        <enumeration value="D95"/>
+        <enumeration value="DAA"/>
+        <enumeration value="DAD"/>
+        <enumeration value="DAY"/>
+        <enumeration value="DB"/>
+        <enumeration value="DD"/>
+        <enumeration value="DEC"/>
+        <enumeration value="DG"/>
+        <enumeration value="DJ"/>
+        <enumeration value="DLT"/>
+        <enumeration value="DMA"/>
+        <enumeration value="DMK"/>
+        <enumeration value="DMO"/>
+        <enumeration value="DMQ"/>
+        <enumeration value="DMT"/>
+        <enumeration value="DN"/>
+        <enumeration value="DPC"/>
+        <enumeration value="DPR"/>
+        <enumeration value="DPT"/>
+        <enumeration value="DRA"/>
+        <enumeration value="DRI"/>
+        <enumeration value="DRL"/>
+        <enumeration value="DT"/>
+        <enumeration value="DTN"/>
+        <enumeration value="DU"/>
+        <enumeration value="DWT"/>
+        <enumeration value="DX"/>
+        <enumeration value="DZN"/>
+        <enumeration value="DZP"/>
+        <enumeration value="E01"/>
+        <enumeration value="E07"/>
+        <enumeration value="E08"/>
+        <enumeration value="E09"/>
+        <enumeration value="E10"/>
+        <enumeration value="E11"/>
+        <enumeration value="E12"/>
+        <enumeration value="E14"/>
+        <enumeration value="E15"/>
+        <enumeration value="E16"/>
+        <enumeration value="E17"/>
+        <enumeration value="E18"/>
+        <enumeration value="E19"/>
+        <enumeration value="E20"/>
+        <enumeration value="E21"/>
+        <enumeration value="E22"/>
+        <enumeration value="E23"/>
+        <enumeration value="E25"/>
+        <enumeration value="E27"/>
+        <enumeration value="E28"/>
+        <enumeration value="E30"/>
+        <enumeration value="E31"/>
+        <enumeration value="E32"/>
+        <enumeration value="E33"/>
+        <enumeration value="E34"/>
+        <enumeration value="E35"/>
+        <enumeration value="E36"/>
+        <enumeration value="E37"/>
+        <enumeration value="E38"/>
+        <enumeration value="E39"/>
+        <enumeration value="E4"/>
+        <enumeration value="E40"/>
+        <enumeration value="E41"/>
+        <enumeration value="E42"/>
+        <enumeration value="E43"/>
+        <enumeration value="E44"/>
+        <enumeration value="E45"/>
+        <enumeration value="E46"/>
+        <enumeration value="E47"/>
+        <enumeration value="E48"/>
+        <enumeration value="E49"/>
+        <enumeration value="E50"/>
+        <enumeration value="E51"/>
+        <enumeration value="E52"/>
+        <enumeration value="E53"/>
+        <enumeration value="E54"/>
+        <enumeration value="E55"/>
+        <enumeration value="E56"/>
+        <enumeration value="E57"/>
+        <enumeration value="E58"/>
+        <enumeration value="E59"/>
+        <enumeration value="E60"/>
+        <enumeration value="E61"/>
+        <enumeration value="E62"/>
+        <enumeration value="E63"/>
+        <enumeration value="E64"/>
+        <enumeration value="E65"/>
+        <enumeration value="E66"/>
+        <enumeration value="E67"/>
+        <enumeration value="E68"/>
+        <enumeration value="E69"/>
+        <enumeration value="E70"/>
+        <enumeration value="E71"/>
+        <enumeration value="E72"/>
+        <enumeration value="E73"/>
+        <enumeration value="E74"/>
+        <enumeration value="E75"/>
+        <enumeration value="E76"/>
+        <enumeration value="E77"/>
+        <enumeration value="E78"/>
+        <enumeration value="E79"/>
+        <enumeration value="E80"/>
+        <enumeration value="E81"/>
+        <enumeration value="E82"/>
+        <enumeration value="E83"/>
+        <enumeration value="E84"/>
+        <enumeration value="E85"/>
+        <enumeration value="E86"/>
+        <enumeration value="E87"/>
+        <enumeration value="E88"/>
+        <enumeration value="E89"/>
+        <enumeration value="E90"/>
+        <enumeration value="E91"/>
+        <enumeration value="E92"/>
+        <enumeration value="E93"/>
+        <enumeration value="E94"/>
+        <enumeration value="E95"/>
+        <enumeration value="E96"/>
+        <enumeration value="E97"/>
+        <enumeration value="E98"/>
+        <enumeration value="E99"/>
+        <enumeration value="EA"/>
+        <enumeration value="EB"/>
+        <enumeration value="EQ"/>
+        <enumeration value="F01"/>
+        <enumeration value="F02"/>
+        <enumeration value="F03"/>
+        <enumeration value="F04"/>
+        <enumeration value="F05"/>
+        <enumeration value="F06"/>
+        <enumeration value="F07"/>
+        <enumeration value="F08"/>
+        <enumeration value="F10"/>
+        <enumeration value="F11"/>
+        <enumeration value="F12"/>
+        <enumeration value="F13"/>
+        <enumeration value="F14"/>
+        <enumeration value="F15"/>
+        <enumeration value="F16"/>
+        <enumeration value="F17"/>
+        <enumeration value="F18"/>
+        <enumeration value="F19"/>
+        <enumeration value="F20"/>
+        <enumeration value="F21"/>
+        <enumeration value="F22"/>
+        <enumeration value="F23"/>
+        <enumeration value="F24"/>
+        <enumeration value="F25"/>
+        <enumeration value="F26"/>
+        <enumeration value="F27"/>
+        <enumeration value="F28"/>
+        <enumeration value="F29"/>
+        <enumeration value="F30"/>
+        <enumeration value="F31"/>
+        <enumeration value="F32"/>
+        <enumeration value="F33"/>
+        <enumeration value="F34"/>
+        <enumeration value="F35"/>
+        <enumeration value="F36"/>
+        <enumeration value="F37"/>
+        <enumeration value="F38"/>
+        <enumeration value="F39"/>
+        <enumeration value="F40"/>
+        <enumeration value="F41"/>
+        <enumeration value="F42"/>
+        <enumeration value="F43"/>
+        <enumeration value="F44"/>
+        <enumeration value="F45"/>
+        <enumeration value="F46"/>
+        <enumeration value="F47"/>
+        <enumeration value="F48"/>
+        <enumeration value="F49"/>
+        <enumeration value="F50"/>
+        <enumeration value="F51"/>
+        <enumeration value="F52"/>
+        <enumeration value="F53"/>
+        <enumeration value="F54"/>
+        <enumeration value="F55"/>
+        <enumeration value="F56"/>
+        <enumeration value="F57"/>
+        <enumeration value="F58"/>
+        <enumeration value="F59"/>
+        <enumeration value="F60"/>
+        <enumeration value="F61"/>
+        <enumeration value="F62"/>
+        <enumeration value="F63"/>
+        <enumeration value="F64"/>
+        <enumeration value="F65"/>
+        <enumeration value="F66"/>
+        <enumeration value="F67"/>
+        <enumeration value="F68"/>
+        <enumeration value="F69"/>
+        <enumeration value="F70"/>
+        <enumeration value="F71"/>
+        <enumeration value="F72"/>
+        <enumeration value="F73"/>
+        <enumeration value="F74"/>
+        <enumeration value="F75"/>
+        <enumeration value="F76"/>
+        <enumeration value="F77"/>
+        <enumeration value="F78"/>
+        <enumeration value="F79"/>
+        <enumeration value="F80"/>
+        <enumeration value="F81"/>
+        <enumeration value="F82"/>
+        <enumeration value="F83"/>
+        <enumeration value="F84"/>
+        <enumeration value="F85"/>
+        <enumeration value="F86"/>
+        <enumeration value="F87"/>
+        <enumeration value="F88"/>
+        <enumeration value="F89"/>
+        <enumeration value="F90"/>
+        <enumeration value="F91"/>
+        <enumeration value="F92"/>
+        <enumeration value="F93"/>
+        <enumeration value="F94"/>
+        <enumeration value="F95"/>
+        <enumeration value="F96"/>
+        <enumeration value="F97"/>
+        <enumeration value="F98"/>
+        <enumeration value="F99"/>
+        <enumeration value="FAH"/>
+        <enumeration value="FAR"/>
+        <enumeration value="FBM"/>
+        <enumeration value="FC"/>
+        <enumeration value="FF"/>
+        <enumeration value="FH"/>
+        <enumeration value="FIT"/>
+        <enumeration value="FL"/>
+        <enumeration value="FOT"/>
+        <enumeration value="FP"/>
+        <enumeration value="FR"/>
+        <enumeration value="FS"/>
+        <enumeration value="FTK"/>
+        <enumeration value="FTQ"/>
+        <enumeration value="G01"/>
+        <enumeration value="G04"/>
+        <enumeration value="G05"/>
+        <enumeration value="G06"/>
+        <enumeration value="G08"/>
+        <enumeration value="G09"/>
+        <enumeration value="G10"/>
+        <enumeration value="G11"/>
+        <enumeration value="G12"/>
+        <enumeration value="G13"/>
+        <enumeration value="G14"/>
+        <enumeration value="G15"/>
+        <enumeration value="G16"/>
+        <enumeration value="G17"/>
+        <enumeration value="G18"/>
+        <enumeration value="G19"/>
+        <enumeration value="G2"/>
+        <enumeration value="G20"/>
+        <enumeration value="G21"/>
+        <enumeration value="G23"/>
+        <enumeration value="G24"/>
+        <enumeration value="G25"/>
+        <enumeration value="G26"/>
+        <enumeration value="G27"/>
+        <enumeration value="G28"/>
+        <enumeration value="G29"/>
+        <enumeration value="G3"/>
+        <enumeration value="G30"/>
+        <enumeration value="G31"/>
+        <enumeration value="G32"/>
+        <enumeration value="G33"/>
+        <enumeration value="G34"/>
+        <enumeration value="G35"/>
+        <enumeration value="G36"/>
+        <enumeration value="G37"/>
+        <enumeration value="G38"/>
+        <enumeration value="G39"/>
+        <enumeration value="G40"/>
+        <enumeration value="G41"/>
+        <enumeration value="G42"/>
+        <enumeration value="G43"/>
+        <enumeration value="G44"/>
+        <enumeration value="G45"/>
+        <enumeration value="G46"/>
+        <enumeration value="G47"/>
+        <enumeration value="G48"/>
+        <enumeration value="G49"/>
+        <enumeration value="G50"/>
+        <enumeration value="G51"/>
+        <enumeration value="G52"/>
+        <enumeration value="G53"/>
+        <enumeration value="G54"/>
+        <enumeration value="G55"/>
+        <enumeration value="G56"/>
+        <enumeration value="G57"/>
+        <enumeration value="G58"/>
+        <enumeration value="G59"/>
+        <enumeration value="G60"/>
+        <enumeration value="G61"/>
+        <enumeration value="G62"/>
+        <enumeration value="G63"/>
+        <enumeration value="G64"/>
+        <enumeration value="G65"/>
+        <enumeration value="G66"/>
+        <enumeration value="G67"/>
+        <enumeration value="G68"/>
+        <enumeration value="G69"/>
+        <enumeration value="G70"/>
+        <enumeration value="G71"/>
+        <enumeration value="G72"/>
+        <enumeration value="G73"/>
+        <enumeration value="G74"/>
+        <enumeration value="G75"/>
+        <enumeration value="G76"/>
+        <enumeration value="G77"/>
+        <enumeration value="G78"/>
+        <enumeration value="G79"/>
+        <enumeration value="G80"/>
+        <enumeration value="G81"/>
+        <enumeration value="G82"/>
+        <enumeration value="G83"/>
+        <enumeration value="G84"/>
+        <enumeration value="G85"/>
+        <enumeration value="G86"/>
+        <enumeration value="G87"/>
+        <enumeration value="G88"/>
+        <enumeration value="G89"/>
+        <enumeration value="G90"/>
+        <enumeration value="G91"/>
+        <enumeration value="G92"/>
+        <enumeration value="G93"/>
+        <enumeration value="G94"/>
+        <enumeration value="G95"/>
+        <enumeration value="G96"/>
+        <enumeration value="G97"/>
+        <enumeration value="G98"/>
+        <enumeration value="G99"/>
+        <enumeration value="GB"/>
+        <enumeration value="GBQ"/>
+        <enumeration value="GDW"/>
+        <enumeration value="GE"/>
+        <enumeration value="GF"/>
+        <enumeration value="GFI"/>
+        <enumeration value="GGR"/>
+        <enumeration value="GIA"/>
+        <enumeration value="GIC"/>
+        <enumeration value="GII"/>
+        <enumeration value="GIP"/>
+        <enumeration value="GJ"/>
+        <enumeration value="GL"/>
+        <enumeration value="GLD"/>
+        <enumeration value="GLI"/>
+        <enumeration value="GLL"/>
+        <enumeration value="GM"/>
+        <enumeration value="GO"/>
+        <enumeration value="GP"/>
+        <enumeration value="GQ"/>
+        <enumeration value="GRM"/>
+        <enumeration value="GRN"/>
+        <enumeration value="GRO"/>
+        <enumeration value="GRT"/>
+        <enumeration value="GT"/>
+        <enumeration value="GV"/>
+        <enumeration value="GWH"/>
+        <enumeration value="H03"/>
+        <enumeration value="H04"/>
+        <enumeration value="H05"/>
+        <enumeration value="H06"/>
+        <enumeration value="H07"/>
+        <enumeration value="H08"/>
+        <enumeration value="H09"/>
+        <enumeration value="H10"/>
+        <enumeration value="H11"/>
+        <enumeration value="H12"/>
+        <enumeration value="H13"/>
+        <enumeration value="H14"/>
+        <enumeration value="H15"/>
+        <enumeration value="H16"/>
+        <enumeration value="H18"/>
+        <enumeration value="H19"/>
+        <enumeration value="H20"/>
+        <enumeration value="H21"/>
+        <enumeration value="H22"/>
+        <enumeration value="H23"/>
+        <enumeration value="H24"/>
+        <enumeration value="H25"/>
+        <enumeration value="H26"/>
+        <enumeration value="H27"/>
+        <enumeration value="H28"/>
+        <enumeration value="H29"/>
+        <enumeration value="H30"/>
+        <enumeration value="H31"/>
+        <enumeration value="H32"/>
+        <enumeration value="H33"/>
+        <enumeration value="H34"/>
+        <enumeration value="H35"/>
+        <enumeration value="H36"/>
+        <enumeration value="H37"/>
+        <enumeration value="H38"/>
+        <enumeration value="H39"/>
+        <enumeration value="H40"/>
+        <enumeration value="H41"/>
+        <enumeration value="H42"/>
+        <enumeration value="H43"/>
+        <enumeration value="H44"/>
+        <enumeration value="H45"/>
+        <enumeration value="H46"/>
+        <enumeration value="H47"/>
+        <enumeration value="H48"/>
+        <enumeration value="H49"/>
+        <enumeration value="H50"/>
+        <enumeration value="H51"/>
+        <enumeration value="H52"/>
+        <enumeration value="H53"/>
+        <enumeration value="H54"/>
+        <enumeration value="H55"/>
+        <enumeration value="H56"/>
+        <enumeration value="H57"/>
+        <enumeration value="H58"/>
+        <enumeration value="H59"/>
+        <enumeration value="H60"/>
+        <enumeration value="H61"/>
+        <enumeration value="H62"/>
+        <enumeration value="H63"/>
+        <enumeration value="H64"/>
+        <enumeration value="H65"/>
+        <enumeration value="H66"/>
+        <enumeration value="H67"/>
+        <enumeration value="H68"/>
+        <enumeration value="H69"/>
+        <enumeration value="H70"/>
+        <enumeration value="H71"/>
+        <enumeration value="H72"/>
+        <enumeration value="H73"/>
+        <enumeration value="H74"/>
+        <enumeration value="H75"/>
+        <enumeration value="H76"/>
+        <enumeration value="H77"/>
+        <enumeration value="H78"/>
+        <enumeration value="H79"/>
+        <enumeration value="H80"/>
+        <enumeration value="H81"/>
+        <enumeration value="H82"/>
+        <enumeration value="H83"/>
+        <enumeration value="H84"/>
+        <enumeration value="H85"/>
+        <enumeration value="H87"/>
+        <enumeration value="H88"/>
+        <enumeration value="H89"/>
+        <enumeration value="H90"/>
+        <enumeration value="H91"/>
+        <enumeration value="H92"/>
+        <enumeration value="H93"/>
+        <enumeration value="H94"/>
+        <enumeration value="H95"/>
+        <enumeration value="H96"/>
+        <enumeration value="H98"/>
+        <enumeration value="H99"/>
+        <enumeration value="HA"/>
+        <enumeration value="HAR"/>
+        <enumeration value="HBA"/>
+        <enumeration value="HBX"/>
+        <enumeration value="HC"/>
+        <enumeration value="HDW"/>
+        <enumeration value="HEA"/>
+        <enumeration value="HGM"/>
+        <enumeration value="HH"/>
+        <enumeration value="HIU"/>
+        <enumeration value="HJ"/>
+        <enumeration value="HKM"/>
+        <enumeration value="HLT"/>
+        <enumeration value="HM"/>
+        <enumeration value="HMQ"/>
+        <enumeration value="HMT"/>
+        <enumeration value="HN"/>
+        <enumeration value="HP"/>
+        <enumeration value="HPA"/>
+        <enumeration value="HTZ"/>
+        <enumeration value="HUR"/>
+        <enumeration value="IA"/>
+        <enumeration value="IE"/>
+        <enumeration value="INH"/>
+        <enumeration value="INK"/>
+        <enumeration value="INQ"/>
+        <enumeration value="ISD"/>
+        <enumeration value="IU"/>
+        <enumeration value="IV"/>
+        <enumeration value="J10"/>
+        <enumeration value="J12"/>
+        <enumeration value="J13"/>
+        <enumeration value="J14"/>
+        <enumeration value="J15"/>
+        <enumeration value="J16"/>
+        <enumeration value="J17"/>
+        <enumeration value="J18"/>
+        <enumeration value="J19"/>
+        <enumeration value="J2"/>
+        <enumeration value="J20"/>
+        <enumeration value="J21"/>
+        <enumeration value="J22"/>
+        <enumeration value="J23"/>
+        <enumeration value="J24"/>
+        <enumeration value="J25"/>
+        <enumeration value="J26"/>
+        <enumeration value="J27"/>
+        <enumeration value="J28"/>
+        <enumeration value="J29"/>
+        <enumeration value="J30"/>
+        <enumeration value="J31"/>
+        <enumeration value="J32"/>
+        <enumeration value="J33"/>
+        <enumeration value="J34"/>
+        <enumeration value="J35"/>
+        <enumeration value="J36"/>
+        <enumeration value="J38"/>
+        <enumeration value="J39"/>
+        <enumeration value="J40"/>
+        <enumeration value="J41"/>
+        <enumeration value="J42"/>
+        <enumeration value="J43"/>
+        <enumeration value="J44"/>
+        <enumeration value="J45"/>
+        <enumeration value="J46"/>
+        <enumeration value="J47"/>
+        <enumeration value="J48"/>
+        <enumeration value="J49"/>
+        <enumeration value="J50"/>
+        <enumeration value="J51"/>
+        <enumeration value="J52"/>
+        <enumeration value="J53"/>
+        <enumeration value="J54"/>
+        <enumeration value="J55"/>
+        <enumeration value="J56"/>
+        <enumeration value="J57"/>
+        <enumeration value="J58"/>
+        <enumeration value="J59"/>
+        <enumeration value="J60"/>
+        <enumeration value="J61"/>
+        <enumeration value="J62"/>
+        <enumeration value="J63"/>
+        <enumeration value="J64"/>
+        <enumeration value="J65"/>
+        <enumeration value="J66"/>
+        <enumeration value="J67"/>
+        <enumeration value="J68"/>
+        <enumeration value="J69"/>
+        <enumeration value="J70"/>
+        <enumeration value="J71"/>
+        <enumeration value="J72"/>
+        <enumeration value="J73"/>
+        <enumeration value="J74"/>
+        <enumeration value="J75"/>
+        <enumeration value="J76"/>
+        <enumeration value="J78"/>
+        <enumeration value="J79"/>
+        <enumeration value="J81"/>
+        <enumeration value="J82"/>
+        <enumeration value="J83"/>
+        <enumeration value="J84"/>
+        <enumeration value="J85"/>
+        <enumeration value="J87"/>
+        <enumeration value="J89"/>
+        <enumeration value="J90"/>
+        <enumeration value="J91"/>
+        <enumeration value="J92"/>
+        <enumeration value="J93"/>
+        <enumeration value="J94"/>
+        <enumeration value="J95"/>
+        <enumeration value="J96"/>
+        <enumeration value="J97"/>
+        <enumeration value="J98"/>
+        <enumeration value="J99"/>
+        <enumeration value="JE"/>
+        <enumeration value="JK"/>
+        <enumeration value="JM"/>
+        <enumeration value="JNT"/>
+        <enumeration value="JOU"/>
+        <enumeration value="JPS"/>
+        <enumeration value="JWL"/>
+        <enumeration value="K1"/>
+        <enumeration value="K10"/>
+        <enumeration value="K11"/>
+        <enumeration value="K12"/>
+        <enumeration value="K13"/>
+        <enumeration value="K14"/>
+        <enumeration value="K15"/>
+        <enumeration value="K16"/>
+        <enumeration value="K17"/>
+        <enumeration value="K18"/>
+        <enumeration value="K19"/>
+        <enumeration value="K2"/>
+        <enumeration value="K20"/>
+        <enumeration value="K21"/>
+        <enumeration value="K22"/>
+        <enumeration value="K23"/>
+        <enumeration value="K24"/>
+        <enumeration value="K25"/>
+        <enumeration value="K26"/>
+        <enumeration value="K27"/>
+        <enumeration value="K28"/>
+        <enumeration value="K3"/>
+        <enumeration value="K30"/>
+        <enumeration value="K31"/>
+        <enumeration value="K32"/>
+        <enumeration value="K33"/>
+        <enumeration value="K34"/>
+        <enumeration value="K35"/>
+        <enumeration value="K36"/>
+        <enumeration value="K37"/>
+        <enumeration value="K38"/>
+        <enumeration value="K39"/>
+        <enumeration value="K40"/>
+        <enumeration value="K41"/>
+        <enumeration value="K42"/>
+        <enumeration value="K43"/>
+        <enumeration value="K45"/>
+        <enumeration value="K46"/>
+        <enumeration value="K47"/>
+        <enumeration value="K48"/>
+        <enumeration value="K49"/>
+        <enumeration value="K5"/>
+        <enumeration value="K50"/>
+        <enumeration value="K51"/>
+        <enumeration value="K52"/>
+        <enumeration value="K53"/>
+        <enumeration value="K54"/>
+        <enumeration value="K55"/>
+        <enumeration value="K58"/>
+        <enumeration value="K59"/>
+        <enumeration value="K6"/>
+        <enumeration value="K60"/>
+        <enumeration value="K61"/>
+        <enumeration value="K62"/>
+        <enumeration value="K63"/>
+        <enumeration value="K64"/>
+        <enumeration value="K65"/>
+        <enumeration value="K66"/>
+        <enumeration value="K67"/>
+        <enumeration value="K68"/>
+        <enumeration value="K69"/>
+        <enumeration value="K70"/>
+        <enumeration value="K71"/>
+        <enumeration value="K73"/>
+        <enumeration value="K74"/>
+        <enumeration value="K75"/>
+        <enumeration value="K76"/>
+        <enumeration value="K77"/>
+        <enumeration value="K78"/>
+        <enumeration value="K79"/>
+        <enumeration value="K80"/>
+        <enumeration value="K81"/>
+        <enumeration value="K82"/>
+        <enumeration value="K83"/>
+        <enumeration value="K84"/>
+        <enumeration value="K85"/>
+        <enumeration value="K86"/>
+        <enumeration value="K87"/>
+        <enumeration value="K88"/>
+        <enumeration value="K89"/>
+        <enumeration value="K90"/>
+        <enumeration value="K91"/>
+        <enumeration value="K92"/>
+        <enumeration value="K93"/>
+        <enumeration value="K94"/>
+        <enumeration value="K95"/>
+        <enumeration value="K96"/>
+        <enumeration value="K97"/>
+        <enumeration value="K98"/>
+        <enumeration value="K99"/>
+        <enumeration value="KA"/>
+        <enumeration value="KAT"/>
+        <enumeration value="KB"/>
+        <enumeration value="KBA"/>
+        <enumeration value="KCC"/>
+        <enumeration value="KDW"/>
+        <enumeration value="KEL"/>
+        <enumeration value="KGM"/>
+        <enumeration value="KGS"/>
+        <enumeration value="KHY"/>
+        <enumeration value="KHZ"/>
+        <enumeration value="KI"/>
+        <enumeration value="KIC"/>
+        <enumeration value="KIP"/>
+        <enumeration value="KJ"/>
+        <enumeration value="KJO"/>
+        <enumeration value="KL"/>
+        <enumeration value="KLK"/>
+        <enumeration value="KLX"/>
+        <enumeration value="KMA"/>
+        <enumeration value="KMH"/>
+        <enumeration value="KMK"/>
+        <enumeration value="KMQ"/>
+        <enumeration value="KMT"/>
+        <enumeration value="KNI"/>
+        <enumeration value="KNM"/>
+        <enumeration value="KNS"/>
+        <enumeration value="KNT"/>
+        <enumeration value="KO"/>
+        <enumeration value="KPA"/>
+        <enumeration value="KPH"/>
+        <enumeration value="KPO"/>
+        <enumeration value="KPP"/>
+        <enumeration value="KR"/>
+        <enumeration value="KSD"/>
+        <enumeration value="KSH"/>
+        <enumeration value="KT"/>
+        <enumeration value="KTN"/>
+        <enumeration value="KUR"/>
+        <enumeration value="KVA"/>
+        <enumeration value="KVR"/>
+        <enumeration value="KVT"/>
+        <enumeration value="KW"/>
+        <enumeration value="KWH"/>
+        <enumeration value="KWN"/>
+        <enumeration value="KWO"/>
+        <enumeration value="KWS"/>
+        <enumeration value="KWT"/>
+        <enumeration value="KX"/>
+        <enumeration value="L10"/>
+        <enumeration value="L11"/>
+        <enumeration value="L12"/>
+        <enumeration value="L13"/>
+        <enumeration value="L14"/>
+        <enumeration value="L15"/>
+        <enumeration value="L16"/>
+        <enumeration value="L17"/>
+        <enumeration value="L18"/>
+        <enumeration value="L19"/>
+        <enumeration value="L2"/>
+        <enumeration value="L20"/>
+        <enumeration value="L21"/>
+        <enumeration value="L23"/>
+        <enumeration value="L24"/>
+        <enumeration value="L25"/>
+        <enumeration value="L26"/>
+        <enumeration value="L27"/>
+        <enumeration value="L28"/>
+        <enumeration value="L29"/>
+        <enumeration value="L30"/>
+        <enumeration value="L31"/>
+        <enumeration value="L32"/>
+        <enumeration value="L33"/>
+        <enumeration value="L34"/>
+        <enumeration value="L35"/>
+        <enumeration value="L36"/>
+        <enumeration value="L37"/>
+        <enumeration value="L38"/>
+        <enumeration value="L39"/>
+        <enumeration value="L40"/>
+        <enumeration value="L41"/>
+        <enumeration value="L42"/>
+        <enumeration value="L43"/>
+        <enumeration value="L44"/>
+        <enumeration value="L45"/>
+        <enumeration value="L46"/>
+        <enumeration value="L47"/>
+        <enumeration value="L48"/>
+        <enumeration value="L49"/>
+        <enumeration value="L50"/>
+        <enumeration value="L51"/>
+        <enumeration value="L52"/>
+        <enumeration value="L53"/>
+        <enumeration value="L54"/>
+        <enumeration value="L55"/>
+        <enumeration value="L56"/>
+        <enumeration value="L57"/>
+        <enumeration value="L58"/>
+        <enumeration value="L59"/>
+        <enumeration value="L60"/>
+        <enumeration value="L63"/>
+        <enumeration value="L64"/>
+        <enumeration value="L65"/>
+        <enumeration value="L66"/>
+        <enumeration value="L67"/>
+        <enumeration value="L68"/>
+        <enumeration value="L69"/>
+        <enumeration value="L70"/>
+        <enumeration value="L71"/>
+        <enumeration value="L72"/>
+        <enumeration value="L73"/>
+        <enumeration value="L74"/>
+        <enumeration value="L75"/>
+        <enumeration value="L76"/>
+        <enumeration value="L77"/>
+        <enumeration value="L78"/>
+        <enumeration value="L79"/>
+        <enumeration value="L80"/>
+        <enumeration value="L81"/>
+        <enumeration value="L82"/>
+        <enumeration value="L83"/>
+        <enumeration value="L84"/>
+        <enumeration value="L85"/>
+        <enumeration value="L86"/>
+        <enumeration value="L87"/>
+        <enumeration value="L88"/>
+        <enumeration value="L89"/>
+        <enumeration value="L90"/>
+        <enumeration value="L91"/>
+        <enumeration value="L92"/>
+        <enumeration value="L93"/>
+        <enumeration value="L94"/>
+        <enumeration value="L95"/>
+        <enumeration value="L96"/>
+        <enumeration value="L98"/>
+        <enumeration value="L99"/>
+        <enumeration value="LA"/>
+        <enumeration value="LAC"/>
+        <enumeration value="LBR"/>
+        <enumeration value="LBT"/>
+        <enumeration value="LD"/>
+        <enumeration value="LEF"/>
+        <enumeration value="LF"/>
+        <enumeration value="LH"/>
+        <enumeration value="LK"/>
+        <enumeration value="LM"/>
+        <enumeration value="LN"/>
+        <enumeration value="LO"/>
+        <enumeration value="LP"/>
+        <enumeration value="LPA"/>
+        <enumeration value="LR"/>
+        <enumeration value="LS"/>
+        <enumeration value="LTN"/>
+        <enumeration value="LTR"/>
+        <enumeration value="LUB"/>
+        <enumeration value="LUM"/>
+        <enumeration value="LUX"/>
+        <enumeration value="LY"/>
+        <enumeration value="M1"/>
+        <enumeration value="M10"/>
+        <enumeration value="M11"/>
+        <enumeration value="M12"/>
+        <enumeration value="M13"/>
+        <enumeration value="M14"/>
+        <enumeration value="M15"/>
+        <enumeration value="M16"/>
+        <enumeration value="M17"/>
+        <enumeration value="M18"/>
+        <enumeration value="M19"/>
+        <enumeration value="M20"/>
+        <enumeration value="M21"/>
+        <enumeration value="M22"/>
+        <enumeration value="M23"/>
+        <enumeration value="M24"/>
+        <enumeration value="M25"/>
+        <enumeration value="M26"/>
+        <enumeration value="M27"/>
+        <enumeration value="M29"/>
+        <enumeration value="M30"/>
+        <enumeration value="M31"/>
+        <enumeration value="M32"/>
+        <enumeration value="M33"/>
+        <enumeration value="M34"/>
+        <enumeration value="M35"/>
+        <enumeration value="M36"/>
+        <enumeration value="M37"/>
+        <enumeration value="M38"/>
+        <enumeration value="M39"/>
+        <enumeration value="M4"/>
+        <enumeration value="M40"/>
+        <enumeration value="M41"/>
+        <enumeration value="M42"/>
+        <enumeration value="M43"/>
+        <enumeration value="M44"/>
+        <enumeration value="M45"/>
+        <enumeration value="M46"/>
+        <enumeration value="M47"/>
+        <enumeration value="M48"/>
+        <enumeration value="M49"/>
+        <enumeration value="M5"/>
+        <enumeration value="M50"/>
+        <enumeration value="M51"/>
+        <enumeration value="M52"/>
+        <enumeration value="M53"/>
+        <enumeration value="M55"/>
+        <enumeration value="M56"/>
+        <enumeration value="M57"/>
+        <enumeration value="M58"/>
+        <enumeration value="M59"/>
+        <enumeration value="M60"/>
+        <enumeration value="M61"/>
+        <enumeration value="M62"/>
+        <enumeration value="M63"/>
+        <enumeration value="M64"/>
+        <enumeration value="M65"/>
+        <enumeration value="M66"/>
+        <enumeration value="M67"/>
+        <enumeration value="M68"/>
+        <enumeration value="M69"/>
+        <enumeration value="M7"/>
+        <enumeration value="M70"/>
+        <enumeration value="M71"/>
+        <enumeration value="M72"/>
+        <enumeration value="M73"/>
+        <enumeration value="M74"/>
+        <enumeration value="M75"/>
+        <enumeration value="M76"/>
+        <enumeration value="M77"/>
+        <enumeration value="M78"/>
+        <enumeration value="M79"/>
+        <enumeration value="M80"/>
+        <enumeration value="M81"/>
+        <enumeration value="M82"/>
+        <enumeration value="M83"/>
+        <enumeration value="M84"/>
+        <enumeration value="M85"/>
+        <enumeration value="M86"/>
+        <enumeration value="M87"/>
+        <enumeration value="M88"/>
+        <enumeration value="M89"/>
+        <enumeration value="M9"/>
+        <enumeration value="M90"/>
+        <enumeration value="M91"/>
+        <enumeration value="M92"/>
+        <enumeration value="M93"/>
+        <enumeration value="M94"/>
+        <enumeration value="M95"/>
+        <enumeration value="M96"/>
+        <enumeration value="M97"/>
+        <enumeration value="M98"/>
+        <enumeration value="M99"/>
+        <enumeration value="MAH"/>
+        <enumeration value="MAL"/>
+        <enumeration value="MAM"/>
+        <enumeration value="MAR"/>
+        <enumeration value="MAW"/>
+        <enumeration value="MBE"/>
+        <enumeration value="MBF"/>
+        <enumeration value="MBR"/>
+        <enumeration value="MC"/>
+        <enumeration value="MCU"/>
+        <enumeration value="MD"/>
+        <enumeration value="MGM"/>
+        <enumeration value="MHZ"/>
+        <enumeration value="MIK"/>
+        <enumeration value="MIL"/>
+        <enumeration value="MIN"/>
+        <enumeration value="MIO"/>
+        <enumeration value="MIU"/>
+        <enumeration value="MLD"/>
+        <enumeration value="MLT"/>
+        <enumeration value="MMK"/>
+        <enumeration value="MMQ"/>
+        <enumeration value="MMT"/>
+        <enumeration value="MND"/>
+        <enumeration value="MON"/>
+        <enumeration value="MPA"/>
+        <enumeration value="MQH"/>
+        <enumeration value="MQS"/>
+        <enumeration value="MSK"/>
+        <enumeration value="MTK"/>
+        <enumeration value="MTQ"/>
+        <enumeration value="MTR"/>
+        <enumeration value="MTS"/>
+        <enumeration value="MVA"/>
+        <enumeration value="MWH"/>
+        <enumeration value="N1"/>
+        <enumeration value="N10"/>
+        <enumeration value="N11"/>
+        <enumeration value="N12"/>
+        <enumeration value="N13"/>
+        <enumeration value="N14"/>
+        <enumeration value="N15"/>
+        <enumeration value="N16"/>
+        <enumeration value="N17"/>
+        <enumeration value="N18"/>
+        <enumeration value="N19"/>
+        <enumeration value="N20"/>
+        <enumeration value="N21"/>
+        <enumeration value="N22"/>
+        <enumeration value="N23"/>
+        <enumeration value="N24"/>
+        <enumeration value="N25"/>
+        <enumeration value="N26"/>
+        <enumeration value="N27"/>
+        <enumeration value="N28"/>
+        <enumeration value="N29"/>
+        <enumeration value="N3"/>
+        <enumeration value="N30"/>
+        <enumeration value="N31"/>
+        <enumeration value="N32"/>
+        <enumeration value="N33"/>
+        <enumeration value="N34"/>
+        <enumeration value="N35"/>
+        <enumeration value="N36"/>
+        <enumeration value="N37"/>
+        <enumeration value="N38"/>
+        <enumeration value="N39"/>
+        <enumeration value="N40"/>
+        <enumeration value="N41"/>
+        <enumeration value="N42"/>
+        <enumeration value="N43"/>
+        <enumeration value="N44"/>
+        <enumeration value="N45"/>
+        <enumeration value="N46"/>
+        <enumeration value="N47"/>
+        <enumeration value="N48"/>
+        <enumeration value="N49"/>
+        <enumeration value="N50"/>
+        <enumeration value="N51"/>
+        <enumeration value="N52"/>
+        <enumeration value="N53"/>
+        <enumeration value="N54"/>
+        <enumeration value="N55"/>
+        <enumeration value="N56"/>
+        <enumeration value="N57"/>
+        <enumeration value="N58"/>
+        <enumeration value="N59"/>
+        <enumeration value="N60"/>
+        <enumeration value="N61"/>
+        <enumeration value="N62"/>
+        <enumeration value="N63"/>
+        <enumeration value="N64"/>
+        <enumeration value="N65"/>
+        <enumeration value="N66"/>
+        <enumeration value="N67"/>
+        <enumeration value="N68"/>
+        <enumeration value="N69"/>
+        <enumeration value="N70"/>
+        <enumeration value="N71"/>
+        <enumeration value="N72"/>
+        <enumeration value="N73"/>
+        <enumeration value="N74"/>
+        <enumeration value="N75"/>
+        <enumeration value="N76"/>
+        <enumeration value="N77"/>
+        <enumeration value="N78"/>
+        <enumeration value="N79"/>
+        <enumeration value="N80"/>
+        <enumeration value="N81"/>
+        <enumeration value="N82"/>
+        <enumeration value="N83"/>
+        <enumeration value="N84"/>
+        <enumeration value="N85"/>
+        <enumeration value="N86"/>
+        <enumeration value="N87"/>
+        <enumeration value="N88"/>
+        <enumeration value="N89"/>
+        <enumeration value="N90"/>
+        <enumeration value="N91"/>
+        <enumeration value="N92"/>
+        <enumeration value="N93"/>
+        <enumeration value="N94"/>
+        <enumeration value="N95"/>
+        <enumeration value="N96"/>
+        <enumeration value="N97"/>
+        <enumeration value="N98"/>
+        <enumeration value="N99"/>
+        <enumeration value="NA"/>
+        <enumeration value="NAR"/>
+        <enumeration value="NCL"/>
+        <enumeration value="NEW"/>
+        <enumeration value="NF"/>
+        <enumeration value="NIL"/>
+        <enumeration value="NIU"/>
+        <enumeration value="NL"/>
+        <enumeration value="NM3"/>
+        <enumeration value="NMI"/>
+        <enumeration value="NMP"/>
+        <enumeration value="NPR"/>
+        <enumeration value="NPT"/>
+        <enumeration value="NQ"/>
+        <enumeration value="NR"/>
+        <enumeration value="NT"/>
+        <enumeration value="NTT"/>
+        <enumeration value="NU"/>
+        <enumeration value="NX"/>
+        <enumeration value="OA"/>
+        <enumeration value="ODE"/>
+        <enumeration value="OHM"/>
+        <enumeration value="ON"/>
+        <enumeration value="ONZ"/>
+        <enumeration value="OPM"/>
+        <enumeration value="OT"/>
+        <enumeration value="OZ"/>
+        <enumeration value="OZA"/>
+        <enumeration value="OZI"/>
+        <enumeration value="P1"/>
+        <enumeration value="P10"/>
+        <enumeration value="P11"/>
+        <enumeration value="P12"/>
+        <enumeration value="P13"/>
+        <enumeration value="P14"/>
+        <enumeration value="P15"/>
+        <enumeration value="P16"/>
+        <enumeration value="P17"/>
+        <enumeration value="P18"/>
+        <enumeration value="P19"/>
+        <enumeration value="P2"/>
+        <enumeration value="P20"/>
+        <enumeration value="P21"/>
+        <enumeration value="P22"/>
+        <enumeration value="P23"/>
+        <enumeration value="P24"/>
+        <enumeration value="P25"/>
+        <enumeration value="P26"/>
+        <enumeration value="P27"/>
+        <enumeration value="P28"/>
+        <enumeration value="P29"/>
+        <enumeration value="P30"/>
+        <enumeration value="P31"/>
+        <enumeration value="P32"/>
+        <enumeration value="P33"/>
+        <enumeration value="P34"/>
+        <enumeration value="P35"/>
+        <enumeration value="P36"/>
+        <enumeration value="P37"/>
+        <enumeration value="P38"/>
+        <enumeration value="P39"/>
+        <enumeration value="P40"/>
+        <enumeration value="P41"/>
+        <enumeration value="P42"/>
+        <enumeration value="P43"/>
+        <enumeration value="P44"/>
+        <enumeration value="P45"/>
+        <enumeration value="P46"/>
+        <enumeration value="P47"/>
+        <enumeration value="P48"/>
+        <enumeration value="P49"/>
+        <enumeration value="P5"/>
+        <enumeration value="P50"/>
+        <enumeration value="P51"/>
+        <enumeration value="P52"/>
+        <enumeration value="P53"/>
+        <enumeration value="P54"/>
+        <enumeration value="P55"/>
+        <enumeration value="P56"/>
+        <enumeration value="P57"/>
+        <enumeration value="P58"/>
+        <enumeration value="P59"/>
+        <enumeration value="P60"/>
+        <enumeration value="P61"/>
+        <enumeration value="P62"/>
+        <enumeration value="P63"/>
+        <enumeration value="P64"/>
+        <enumeration value="P65"/>
+        <enumeration value="P66"/>
+        <enumeration value="P67"/>
+        <enumeration value="P68"/>
+        <enumeration value="P69"/>
+        <enumeration value="P70"/>
+        <enumeration value="P71"/>
+        <enumeration value="P72"/>
+        <enumeration value="P73"/>
+        <enumeration value="P74"/>
+        <enumeration value="P75"/>
+        <enumeration value="P76"/>
+        <enumeration value="P77"/>
+        <enumeration value="P78"/>
+        <enumeration value="P79"/>
+        <enumeration value="P80"/>
+        <enumeration value="P81"/>
+        <enumeration value="P82"/>
+        <enumeration value="P83"/>
+        <enumeration value="P84"/>
+        <enumeration value="P85"/>
+        <enumeration value="P86"/>
+        <enumeration value="P87"/>
+        <enumeration value="P88"/>
+        <enumeration value="P89"/>
+        <enumeration value="P90"/>
+        <enumeration value="P91"/>
+        <enumeration value="P92"/>
+        <enumeration value="P93"/>
+        <enumeration value="P94"/>
+        <enumeration value="P95"/>
+        <enumeration value="P96"/>
+        <enumeration value="P97"/>
+        <enumeration value="P98"/>
+        <enumeration value="P99"/>
+        <enumeration value="PAL"/>
+        <enumeration value="PD"/>
+        <enumeration value="PFL"/>
+        <enumeration value="PGL"/>
+        <enumeration value="PI"/>
+        <enumeration value="PLA"/>
+        <enumeration value="PO"/>
+        <enumeration value="PQ"/>
+        <enumeration value="PR"/>
+        <enumeration value="PS"/>
+        <enumeration value="PT"/>
+        <enumeration value="PTD"/>
+        <enumeration value="PTI"/>
+        <enumeration value="PTL"/>
+        <enumeration value="PTN"/>
+        <enumeration value="Q10"/>
+        <enumeration value="Q11"/>
+        <enumeration value="Q12"/>
+        <enumeration value="Q13"/>
+        <enumeration value="Q14"/>
+        <enumeration value="Q15"/>
+        <enumeration value="Q16"/>
+        <enumeration value="Q17"/>
+        <enumeration value="Q18"/>
+        <enumeration value="Q19"/>
+        <enumeration value="Q20"/>
+        <enumeration value="Q21"/>
+        <enumeration value="Q22"/>
+        <enumeration value="Q23"/>
+        <enumeration value="Q24"/>
+        <enumeration value="Q25"/>
+        <enumeration value="Q26"/>
+        <enumeration value="Q27"/>
+        <enumeration value="Q28"/>
+        <enumeration value="Q29"/>
+        <enumeration value="Q3"/>
+        <enumeration value="Q30"/>
+        <enumeration value="Q31"/>
+        <enumeration value="Q32"/>
+        <enumeration value="Q33"/>
+        <enumeration value="Q34"/>
+        <enumeration value="Q35"/>
+        <enumeration value="Q36"/>
+        <enumeration value="Q37"/>
+        <enumeration value="Q38"/>
+        <enumeration value="Q39"/>
+        <enumeration value="Q40"/>
+        <enumeration value="Q41"/>
+        <enumeration value="Q42"/>
+        <enumeration value="QA"/>
+        <enumeration value="QAN"/>
+        <enumeration value="QB"/>
+        <enumeration value="QR"/>
+        <enumeration value="QT"/>
+        <enumeration value="QTD"/>
+        <enumeration value="QTI"/>
+        <enumeration value="QTL"/>
+        <enumeration value="QTR"/>
+        <enumeration value="R1"/>
+        <enumeration value="R9"/>
+        <enumeration value="RH"/>
+        <enumeration value="RM"/>
+        <enumeration value="ROM"/>
+        <enumeration value="RP"/>
+        <enumeration value="RPM"/>
+        <enumeration value="RPS"/>
+        <enumeration value="RT"/>
+        <enumeration value="S3"/>
+        <enumeration value="S4"/>
+        <enumeration value="SAN"/>
+        <enumeration value="SCO"/>
+        <enumeration value="SCR"/>
+        <enumeration value="SEC"/>
+        <enumeration value="SET"/>
+        <enumeration value="SG"/>
+        <enumeration value="SHT"/>
+        <enumeration value="SIE"/>
+        <enumeration value="SM3"/>
+        <enumeration value="SMI"/>
+        <enumeration value="SQ"/>
+        <enumeration value="SQR"/>
+        <enumeration value="SR"/>
+        <enumeration value="STC"/>
+        <enumeration value="STI"/>
+        <enumeration value="STK"/>
+        <enumeration value="STL"/>
+        <enumeration value="STN"/>
+        <enumeration value="STW"/>
+        <enumeration value="SW"/>
+        <enumeration value="SX"/>
+        <enumeration value="SYR"/>
+        <enumeration value="T0"/>
+        <enumeration value="T3"/>
+        <enumeration value="TAH"/>
+        <enumeration value="TAN"/>
+        <enumeration value="TI"/>
+        <enumeration value="TIC"/>
+        <enumeration value="TIP"/>
+        <enumeration value="TKM"/>
+        <enumeration value="TMS"/>
+        <enumeration value="TNE"/>
+        <enumeration value="TP"/>
+        <enumeration value="TPI"/>
+        <enumeration value="TPR"/>
+        <enumeration value="TQD"/>
+        <enumeration value="TRL"/>
+        <enumeration value="TST"/>
+        <enumeration value="TTS"/>
+        <enumeration value="U1"/>
+        <enumeration value="U2"/>
+        <enumeration value="UA"/>
+        <enumeration value="UB"/>
+        <enumeration value="UC"/>
+        <enumeration value="VA"/>
+        <enumeration value="VLT"/>
+        <enumeration value="VP"/>
+        <enumeration value="W2"/>
+        <enumeration value="WA"/>
+        <enumeration value="WB"/>
+        <enumeration value="WCD"/>
+        <enumeration value="WE"/>
+        <enumeration value="WEB"/>
+        <enumeration value="WEE"/>
+        <enumeration value="WG"/>
+        <enumeration value="WHR"/>
+        <enumeration value="WM"/>
+        <enumeration value="WSD"/>
+        <enumeration value="WTT"/>
+        <enumeration value="WW"/>
+        <enumeration value="X1"/>
+        <enumeration value="YDK"/>
+        <enumeration value="YDQ"/>
+        <enumeration value="YRD"/>
+        <enumeration value="Z11"/>
+        <enumeration value="ZP"/>
+        <enumeration value="ZZ"/>
+    </cl>
+    <cl id="6">
+        <enumeration value="VAT"/>
+    </cl>
+    <cl id="7">
+        <enumeration value="AE"/>
+        <enumeration value="E"/>
+        <enumeration value="G"/>
+        <enumeration value="K"/>
+        <enumeration value="L"/>
+        <enumeration value="M"/>
+        <enumeration value="O"/>
+        <enumeration value="S"/>
+        <enumeration value="Z"/>
+    </cl>
+    <cl id="8">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="9">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="10">
+        <enumeration value="0002"/>
+        <enumeration value="0007"/>
+        <enumeration value="0009"/>
+        <enumeration value="0037"/>
+        <enumeration value="0060"/>
+        <enumeration value="0088"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0106"/>
+        <enumeration value="0130"/>
+        <enumeration value="0135"/>
+        <enumeration value="0142"/>
+        <enumeration value="0151"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+        <enumeration value="9901"/>
+        <enumeration value="9902"/>
+        <enumeration value="9904"/>
+        <enumeration value="9905"/>
+        <enumeration value="9906"/>
+        <enumeration value="9907"/>
+        <enumeration value="9910"/>
+        <enumeration value="9913"/>
+        <enumeration value="9914"/>
+        <enumeration value="9915"/>
+        <enumeration value="9918"/>
+        <enumeration value="9919"/>
+        <enumeration value="9920"/>
+        <enumeration value="9922"/>
+        <enumeration value="9923"/>
+        <enumeration value="9924"/>
+        <enumeration value="9925"/>
+        <enumeration value="9926"/>
+        <enumeration value="9927"/>
+        <enumeration value="9928"/>
+        <enumeration value="9929"/>
+        <enumeration value="9930"/>
+        <enumeration value="9931"/>
+        <enumeration value="9932"/>
+        <enumeration value="9933"/>
+        <enumeration value="9934"/>
+        <enumeration value="9935"/>
+        <enumeration value="9936"/>
+        <enumeration value="9937"/>
+        <enumeration value="9938"/>
+        <enumeration value="9939"/>
+        <enumeration value="9940"/>
+        <enumeration value="9941"/>
+        <enumeration value="9942"/>
+        <enumeration value="9943"/>
+        <enumeration value="9944"/>
+        <enumeration value="9945"/>
+        <enumeration value="9946"/>
+        <enumeration value="9947"/>
+        <enumeration value="9948"/>
+        <enumeration value="9949"/>
+        <enumeration value="9950"/>
+        <enumeration value="9951"/>
+        <enumeration value="9952"/>
+        <enumeration value="9953"/>
+        <enumeration value="9955"/>
+        <enumeration value="9956"/>
+        <enumeration value="9957"/>
+        <enumeration value="9958"/>
+        <enumeration value="AN"/>
+        <enumeration value="AQ"/>
+        <enumeration value="AS"/>
+        <enumeration value="AU"/>
+        <enumeration value="EM"/>
+    </cl>
+    <cl id="11">
+        <enumeration value="FC"/>
+        <enumeration value="VA"/>
+    </cl>
+    <cl id="12">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="13">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="14">
+        <enumeration value="VA"/>
+    </cl>
+    <cl id="15">
+        <enumeration value="VA"/>
+    </cl>
+    <cl id="16">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="17">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="18">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="19">
+        <enumeration value="10"/>
+        <enumeration value="20"/>
+        <enumeration value="30"/>
+        <enumeration value="42"/>
+        <enumeration value="48"/>
+        <enumeration value="49"/>
+        <enumeration value="57"/>
+        <enumeration value="58"/>
+        <enumeration value="59"/>
+        <enumeration value="97"/>
+        <enumeration value="ZZZ"/>
+    </cl>
+    <cl id="20">
+        <enumeration value="VAT"/>
+    </cl>
+    <cl id="21">
+        <enumeration value="AE"/>
+        <enumeration value="E"/>
+        <enumeration value="G"/>
+        <enumeration value="K"/>
+        <enumeration value="L"/>
+        <enumeration value="M"/>
+        <enumeration value="O"/>
+        <enumeration value="S"/>
+        <enumeration value="Z"/>
+    </cl>
+    <cl id="22">
+        <enumeration value="vatex-eu-132"/>
+        <enumeration value="VATEX-EU-132"/>
+        <enumeration value="vatex-eu-132-1a"/>
+        <enumeration value="VATEX-EU-132-1A"/>
+        <enumeration value="vatex-eu-132-1b"/>
+        <enumeration value="VATEX-EU-132-1B"/>
+        <enumeration value="vatex-eu-132-1c"/>
+        <enumeration value="VATEX-EU-132-1C"/>
+        <enumeration value="vatex-eu-132-1d"/>
+        <enumeration value="VATEX-EU-132-1D"/>
+        <enumeration value="vatex-eu-132-1e"/>
+        <enumeration value="VATEX-EU-132-1E"/>
+        <enumeration value="vatex-eu-132-1f"/>
+        <enumeration value="VATEX-EU-132-1F"/>
+        <enumeration value="vatex-eu-132-1g"/>
+        <enumeration value="VATEX-EU-132-1G"/>
+        <enumeration value="vatex-eu-132-1h"/>
+        <enumeration value="VATEX-EU-132-1H"/>
+        <enumeration value="vatex-eu-132-1i"/>
+        <enumeration value="VATEX-EU-132-1I"/>
+        <enumeration value="vatex-eu-132-1j"/>
+        <enumeration value="VATEX-EU-132-1J"/>
+        <enumeration value="vatex-eu-132-1k"/>
+        <enumeration value="VATEX-EU-132-1K"/>
+        <enumeration value="vatex-eu-132-1l"/>
+        <enumeration value="VATEX-EU-132-1L"/>
+        <enumeration value="vatex-eu-132-1m"/>
+        <enumeration value="VATEX-EU-132-1M"/>
+        <enumeration value="vatex-eu-132-1n"/>
+        <enumeration value="VATEX-EU-132-1N"/>
+        <enumeration value="vatex-eu-132-1o"/>
+        <enumeration value="VATEX-EU-132-1O"/>
+        <enumeration value="vatex-eu-132-1p"/>
+        <enumeration value="VATEX-EU-132-1P"/>
+        <enumeration value="vatex-eu-132-1q"/>
+        <enumeration value="VATEX-EU-132-1Q"/>
+        <enumeration value="vatex-eu-143"/>
+        <enumeration value="VATEX-EU-143"/>
+        <enumeration value="vatex-eu-143-1a"/>
+        <enumeration value="VATEX-EU-143-1A"/>
+        <enumeration value="vatex-eu-143-1b"/>
+        <enumeration value="VATEX-EU-143-1B"/>
+        <enumeration value="vatex-eu-143-1c"/>
+        <enumeration value="VATEX-EU-143-1C"/>
+        <enumeration value="vatex-eu-143-1d"/>
+        <enumeration value="VATEX-EU-143-1D"/>
+        <enumeration value="vatex-eu-143-1e"/>
+        <enumeration value="VATEX-EU-143-1E"/>
+        <enumeration value="vatex-eu-143-1f"/>
+        <enumeration value="VATEX-EU-143-1F"/>
+        <enumeration value="vatex-eu-143-1fa"/>
+        <enumeration value="VATEX-EU-143-1FA"/>
+        <enumeration value="vatex-eu-143-1g"/>
+        <enumeration value="VATEX-EU-143-1G"/>
+        <enumeration value="vatex-eu-143-1h"/>
+        <enumeration value="VATEX-EU-143-1H"/>
+        <enumeration value="vatex-eu-143-1i"/>
+        <enumeration value="VATEX-EU-143-1I"/>
+        <enumeration value="vatex-eu-143-1j"/>
+        <enumeration value="VATEX-EU-143-1J"/>
+        <enumeration value="vatex-eu-143-1k"/>
+        <enumeration value="VATEX-EU-143-1K"/>
+        <enumeration value="vatex-eu-143-1l"/>
+        <enumeration value="VATEX-EU-143-1L"/>
+        <enumeration value="vatex-eu-148"/>
+        <enumeration value="VATEX-EU-148"/>
+        <enumeration value="vatex-eu-148-a"/>
+        <enumeration value="VATEX-EU-148-A"/>
+        <enumeration value="vatex-eu-148-b"/>
+        <enumeration value="VATEX-EU-148-B"/>
+        <enumeration value="vatex-eu-148-c"/>
+        <enumeration value="VATEX-EU-148-C"/>
+        <enumeration value="vatex-eu-148-d"/>
+        <enumeration value="VATEX-EU-148-D"/>
+        <enumeration value="vatex-eu-148-e"/>
+        <enumeration value="VATEX-EU-148-E"/>
+        <enumeration value="vatex-eu-148-f"/>
+        <enumeration value="VATEX-EU-148-F"/>
+        <enumeration value="vatex-eu-148-g"/>
+        <enumeration value="VATEX-EU-148-G"/>
+        <enumeration value="vatex-eu-151"/>
+        <enumeration value="VATEX-EU-151"/>
+        <enumeration value="vatex-eu-151-1a"/>
+        <enumeration value="VATEX-EU-151-1A"/>
+        <enumeration value="vatex-eu-151-1aa"/>
+        <enumeration value="VATEX-EU-151-1AA"/>
+        <enumeration value="vatex-eu-151-1b"/>
+        <enumeration value="VATEX-EU-151-1B"/>
+        <enumeration value="vatex-eu-151-1c"/>
+        <enumeration value="VATEX-EU-151-1C"/>
+        <enumeration value="vatex-eu-151-1d"/>
+        <enumeration value="VATEX-EU-151-1D"/>
+        <enumeration value="vatex-eu-151-1e"/>
+        <enumeration value="VATEX-EU-151-1E"/>
+        <enumeration value="vatex-eu-309"/>
+        <enumeration value="VATEX-EU-309"/>
+        <enumeration value="vatex-eu-ae"/>
+        <enumeration value="VATEX-EU-AE"/>
+        <enumeration value="vatex-eu-d"/>
+        <enumeration value="VATEX-EU-D"/>
+        <enumeration value="vatex-eu-f"/>
+        <enumeration value="VATEX-EU-F"/>
+        <enumeration value="vatex-eu-g"/>
+        <enumeration value="VATEX-EU-G"/>
+        <enumeration value="vatex-eu-i"/>
+        <enumeration value="VATEX-EU-I"/>
+        <enumeration value="vatex-eu-ic"/>
+        <enumeration value="VATEX-EU-IC"/>
+        <enumeration value="vatex-eu-j"/>
+        <enumeration value="VATEX-EU-J"/>
+        <enumeration value="vatex-eu-o"/>
+        <enumeration value="VATEX-EU-O"/>
+    </cl>
+    <cl id="23">
+        <enumeration value="VAT"/>
+    </cl>
+    <cl id="24">
+        <enumeration value="AE"/>
+        <enumeration value="E"/>
+        <enumeration value="G"/>
+        <enumeration value="K"/>
+        <enumeration value="L"/>
+        <enumeration value="M"/>
+        <enumeration value="O"/>
+        <enumeration value="S"/>
+        <enumeration value="Z"/>
+    </cl>
+    <cl id="25">
+        <enumeration value="AED"/>
+        <enumeration value="AFN"/>
+        <enumeration value="ALL"/>
+        <enumeration value="AMD"/>
+        <enumeration value="ANG"/>
+        <enumeration value="AOA"/>
+        <enumeration value="ARS"/>
+        <enumeration value="AUD"/>
+        <enumeration value="AWG"/>
+        <enumeration value="AZN"/>
+        <enumeration value="BAM"/>
+        <enumeration value="BBD"/>
+        <enumeration value="BDT"/>
+        <enumeration value="BGN"/>
+        <enumeration value="BHD"/>
+        <enumeration value="BIF"/>
+        <enumeration value="BMD"/>
+        <enumeration value="BND"/>
+        <enumeration value="BOB"/>
+        <enumeration value="BOV"/>
+        <enumeration value="BRL"/>
+        <enumeration value="BSD"/>
+        <enumeration value="BTN"/>
+        <enumeration value="BWP"/>
+        <enumeration value="BYN"/>
+        <enumeration value="BZD"/>
+        <enumeration value="CAD"/>
+        <enumeration value="CDF"/>
+        <enumeration value="CHE"/>
+        <enumeration value="CHF"/>
+        <enumeration value="CHW"/>
+        <enumeration value="CLF"/>
+        <enumeration value="CLP"/>
+        <enumeration value="CNY"/>
+        <enumeration value="COP"/>
+        <enumeration value="COU"/>
+        <enumeration value="CRC"/>
+        <enumeration value="CUC"/>
+        <enumeration value="CUP"/>
+        <enumeration value="CVE"/>
+        <enumeration value="CZK"/>
+        <enumeration value="DJF"/>
+        <enumeration value="DKK"/>
+        <enumeration value="DOP"/>
+        <enumeration value="DZD"/>
+        <enumeration value="EGP"/>
+        <enumeration value="ERN"/>
+        <enumeration value="ETB"/>
+        <enumeration value="EUR"/>
+        <enumeration value="FJD"/>
+        <enumeration value="FKP"/>
+        <enumeration value="GBP"/>
+        <enumeration value="GEL"/>
+        <enumeration value="GHS"/>
+        <enumeration value="GIP"/>
+        <enumeration value="GMD"/>
+        <enumeration value="GNF"/>
+        <enumeration value="GTQ"/>
+        <enumeration value="GYD"/>
+        <enumeration value="HKD"/>
+        <enumeration value="HNL"/>
+        <enumeration value="HRK"/>
+        <enumeration value="HTG"/>
+        <enumeration value="HUF"/>
+        <enumeration value="IDR"/>
+        <enumeration value="ILS"/>
+        <enumeration value="INR"/>
+        <enumeration value="IQD"/>
+        <enumeration value="IRR"/>
+        <enumeration value="ISK"/>
+        <enumeration value="JMD"/>
+        <enumeration value="JOD"/>
+        <enumeration value="JPY"/>
+        <enumeration value="KES"/>
+        <enumeration value="KGS"/>
+        <enumeration value="KHR"/>
+        <enumeration value="KMF"/>
+        <enumeration value="KPW"/>
+        <enumeration value="KRW"/>
+        <enumeration value="KWD"/>
+        <enumeration value="KYD"/>
+        <enumeration value="KZT"/>
+        <enumeration value="LAK"/>
+        <enumeration value="LBP"/>
+        <enumeration value="LKR"/>
+        <enumeration value="LRD"/>
+        <enumeration value="LSL"/>
+        <enumeration value="LYD"/>
+        <enumeration value="MAD"/>
+        <enumeration value="MDL"/>
+        <enumeration value="MGA"/>
+        <enumeration value="MKD"/>
+        <enumeration value="MMK"/>
+        <enumeration value="MNT"/>
+        <enumeration value="MOP"/>
+        <enumeration value="MRU"/>
+        <enumeration value="MUR"/>
+        <enumeration value="MVR"/>
+        <enumeration value="MWK"/>
+        <enumeration value="MXN"/>
+        <enumeration value="MXV"/>
+        <enumeration value="MYR"/>
+        <enumeration value="MZN"/>
+        <enumeration value="NAD"/>
+        <enumeration value="NGN"/>
+        <enumeration value="NIO"/>
+        <enumeration value="NOK"/>
+        <enumeration value="NPR"/>
+        <enumeration value="NZD"/>
+        <enumeration value="OMR"/>
+        <enumeration value="PAB"/>
+        <enumeration value="PEN"/>
+        <enumeration value="PGK"/>
+        <enumeration value="PHP"/>
+        <enumeration value="PKR"/>
+        <enumeration value="PLN"/>
+        <enumeration value="PYG"/>
+        <enumeration value="QAR"/>
+        <enumeration value="RON"/>
+        <enumeration value="RSD"/>
+        <enumeration value="RUB"/>
+        <enumeration value="RWF"/>
+        <enumeration value="SAR"/>
+        <enumeration value="SBD"/>
+        <enumeration value="SCR"/>
+        <enumeration value="SDG"/>
+        <enumeration value="SEK"/>
+        <enumeration value="SGD"/>
+        <enumeration value="SHP"/>
+        <enumeration value="SLL"/>
+        <enumeration value="SOS"/>
+        <enumeration value="SRD"/>
+        <enumeration value="SSP"/>
+        <enumeration value="STN"/>
+        <enumeration value="SVC"/>
+        <enumeration value="SYP"/>
+        <enumeration value="SZL"/>
+        <enumeration value="THB"/>
+        <enumeration value="TJS"/>
+        <enumeration value="TMT"/>
+        <enumeration value="TND"/>
+        <enumeration value="TOP"/>
+        <enumeration value="TRY"/>
+        <enumeration value="TTD"/>
+        <enumeration value="TWD"/>
+        <enumeration value="TZS"/>
+        <enumeration value="UAH"/>
+        <enumeration value="UGX"/>
+        <enumeration value="USD"/>
+        <enumeration value="USN"/>
+        <enumeration value="UYI"/>
+        <enumeration value="UYU"/>
+        <enumeration value="UYW"/>
+        <enumeration value="UZS"/>
+        <enumeration value="VES"/>
+        <enumeration value="VND"/>
+        <enumeration value="VUV"/>
+        <enumeration value="WST"/>
+        <enumeration value="XAF"/>
+        <enumeration value="XAG"/>
+        <enumeration value="XAU"/>
+        <enumeration value="XBA"/>
+        <enumeration value="XBB"/>
+        <enumeration value="XBC"/>
+        <enumeration value="XBD"/>
+        <enumeration value="XCD"/>
+        <enumeration value="XDR"/>
+        <enumeration value="XOF"/>
+        <enumeration value="XPD"/>
+        <enumeration value="XPF"/>
+        <enumeration value="XPT"/>
+        <enumeration value="XSU"/>
+        <enumeration value="XTS"/>
+        <enumeration value="XUA"/>
+        <enumeration value="XXX"/>
+        <enumeration value="YER"/>
+        <enumeration value="ZAR"/>
+        <enumeration value="ZMW"/>
+        <enumeration value="ZWL"/>
+    </cl>
+    <cl id="26">
+        <enumeration value="102"/>
+    </cl>
+</codedb>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931.sch
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931.sch	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931.sch	(revision 8435)
@@ -0,0 +1,9500 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron" schemaVersion="iso">
+    <title>Schema for FACTUR-X; 1.0; EN16931-COMPLIANT (FULLY)</title>
+    <ns uri="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" prefix="rsm"/>
+    <ns uri="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" prefix="qdt"/>
+    <ns uri="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" prefix="ram"/>
+    <ns uri="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" prefix="udt"/>
+    <pattern>
+        <rule context="//ram:AdditionalReferencedDocument">
+            <assert test="(ram:IssuerAssignedID!=&apos;&apos;)">
+                Each Additional supporting document (BG-24) shall contain a Supporting document reference (BT-122).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+            <assert test="(ram:BasisAmount)">
+                Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116).</assert>
+            <assert test="(ram:CalculatedAmount)">
+                Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117).</assert>
+            <assert test="(ram:CategoryCode)">
+                Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118).</assert>
+            <assert test="(ram:RateApplicablePercent) or (ram:CategoryCode = &apos;O&apos;)">
+                Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT.</assert>
+            <assert test="((ram:TaxPointDate) and not (ram:DueDateTypeCode)) or (not (ram:TaxPointDate) and (ram:DueDateTypeCode)) or (not (ram:TaxPointDate) and not (ram:DueDateTypeCode))">
+                Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive.</assert>
+            <assert test="ram:CalculatedAmount = round(ram:BasisAmount * ram:RateApplicablePercent) div 100 +0 or not (ram:RateApplicablePercent)">
+                VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2.</assert>
+            <assert test="string-length(substring-after(ram:CalculatedAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;Z&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;Z&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;Z&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;Z&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where VAT category code (BT-118) is "Zero rated" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amount (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âZero rated".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Zero rated" shall equal 0 (zero).</assert>
+            <assert test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Zero rated" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.=&apos;S&apos;]">
+            <assert test="../ram:CalculatedAmount = round(../ram:BasisAmount * ../ram:RateApplicablePercent) div 100 +0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Standard rated" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Standard rate" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod">
+            <assert test="(ram:EndDateTime/udt:DateTimeString[@format = &apos;102&apos;]) &gt;= (ram:StartDateTime/udt:DateTimeString[@format = &apos;102&apos;]) or not (ram:EndDateTime) or not (ram:StartDateTime)">
+                If both Invoicing period start date (BT-73) and Invoicing period end date (BT-74) are given then the Invoicing period end date (BT-74) shall be later or equal to the Invoicing period start date (BT-73).</assert>
+            <assert test="(ram:StartDateTime) or (ram:EndDateTime)">
+                If Invoicing period (BG-14) is used, the Invoicing period start date (BT-73) or the Invoicing period end date (BT-74) shall be filled, or both.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92).</assert>
+            <assert test="(ram:CategoryTradeTax/ram:CategoryCode)">
+                Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level allowance (BG-20) shall have a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98).</assert>
+            <assert test="true()">
+                Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level allowance (BG-20) shall contain a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Document level charge (BG-21) shall have a Document level charge amount (BT-99).</assert>
+            <assert test="(ram:CategoryTradeTax/ram:CategoryCode)">
+                Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level charge (BG-21) shall have a Document level charge reason (BT-104) or a Document level charge reason code (BT-105).</assert>
+            <assert test="true()">
+                Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level charge (BG-21) shall contain a Document level charge reason (BT-104) or a Document level charge reason code (BT-105), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level charge amount (BT-92) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level charge base amount (BT-93) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableProductCharacteristic">
+            <assert test="(ram:Description) and (ram:Value)">
+                Each Item attribute (BG-32) shall contain an Item attribute name (BT-160) and an Item attribute value (BT-161).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableTradeSettlementFinancialCard">
+            <assert test="string-length(ram:ID)&lt;=6 and string-length(ram:ID)&gt;=4">
+                The last 4 to 6 digits of the Payment card primary account number (BT-87) shall be present if Payment card information (BG-18) is provided in the Invoice.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:IncludedSupplyChainTradeLineItem">
+            <assert test="(ram:AssociatedDocumentLineDocument/ram:LineID!=&apos;&apos;)">
+                Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126).</assert>
+            <assert test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity)">
+                Each Invoice line (BG-25) shall have an Invoiced quantity (BT-129).</assert>
+            <assert test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity/@unitCode)">
+                An Invoice line (BG-25) shall have an Invoiced quantity unit of measure code (BT-130).</assert>
+            <assert test="(ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)">
+                Each Invoice line (BG-25) shall have an Invoice line net amount (BT-131).</assert>
+            <assert test="(ram:SpecifiedTradeProduct/ram:Name!=&apos;&apos;)">
+                Each Invoice line (BG-25) shall contain the Item name (BT-153).</assert>
+            <assert test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount)">
+                Each Invoice line (BG-25) shall contain the Item net price (BT-146).</assert>
+            <assert test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount) &gt;= 0">
+                The Item net price (BT-146) shall NOT be negative.</assert>
+            <assert test="(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount &gt;= 0) or not(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount)">
+                The Item gross price (BT-148) shall NOT be negative.</assert>
+            <assert test="ram:SpecifiedTradeProduct/ram:GlobalID/@schemeID!=&apos;&apos; or not (ram:SpecifiedTradeProduct/ram:GlobalID)">
+                The Item standard identifier (BT-157) shall have a Scheme identifier</assert>
+            <assert test="(ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode/@listID!=&apos;&apos;) or not (ram:SpecifiedTradeProduct/ram:DesignatedProductClassification)">
+                The Item classification identifier (BT-158) shall have a Scheme identifier</assert>
+            <assert test="(ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode)">
+                Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151).</assert>
+            <assert test="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+                An Invoice shall at least have one VAT breakdown group (BG-23).</assert>
+            <assert test="string-length(substring-after(ram:SpecifiedTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:PayeeTradeParty">
+            <assert test="(ram:Name) and (not(ram:Name = ../ram:SellerTradeParty/ram:Name) and not(ram:ID = ../ram:SellerTradeParty/ram:ID) and not(ram:SpecifiedLegalOrganization/ram:ID = ../ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID))">
+                The Payee name (BT-59) shall be provided in the Invoice, if the Payee (BG-10) is different from the Seller (BG-4).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SellerTaxRepresentativeTradeParty">
+            <assert test="(ram:Name)">
+                The Seller tax representative name (BT-62) shall be provided in the Invoice, if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+            <assert test="(ram:PostalTradeAddress)">
+                The Seller tax representative postal address (BG-12) shall be provided in the Invoice, if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+            <assert test="(ram:PostalTradeAddress/ram:CountryID)">
+                The Seller tax representative postal address (BG-12) shall contain a Tax representative country code (BT-69), if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+            <assert test="(ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;]!=&apos;&apos;)">
+                Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SellerTradeParty">
+            <assert test="(ram:ID) or (ram:GlobalID) or (ram:SpecifiedLegalOrganization/ram:ID) or (ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;])">
+                In order for the buyer to automatically identify a supplier, the Seller identifier (BT-29), the Seller legal registration identifier (BT-30) and/or the Seller VAT identifier (BT-31) shall be present.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod">
+            <assert test="(ram:EndDateTime/udt:DateTimeString[@format = &apos;102&apos;]) &gt;= (ram:StartDateTime/udt:DateTimeString[@format = &apos;102&apos;]) or not (ram:EndDateTime) or not (ram:StartDateTime)">
+                If both Invoice line period start date (BT-134) and Invoice line period end date (BT-135) are given then the Invoice line period end date (BT-135) shall be later or equal to the Invoice line period start date (BT-134).</assert>
+            <assert test="(ram:StartDateTime) or (ram:EndDateTime)">
+                If Invoice line period (BG-26) is used, the Invoice line period start date (BT-134) or the Invoice line period end date (BT-135) shall be filled, or both.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = &apos;false&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Invoice line allowance (BG-27) shall have an Invoice line allowance amount (BT-136).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line allowance (BG-27) shall have an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140).</assert>
+            <assert test="true()">
+                Invoice line allowance reason code (BT-140) and Invoice line allowance reason (BT-139) shall indicate the same type of allowance reason.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line allowance (BG-27) shall contain an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = &apos;true&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Invoice line charge (BG-28) shall have an Invoice line charge amount (BT-141).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line charge (BG-28) shall have an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145).</assert>
+            <assert test="true()">
+                Invoice line charge reason code (BT-145) and Invoice line charge reason (BT144) shall indicate the same type of charge reason.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line charge (BG-28) shall contain an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;]">
+            <assert test="contains(&apos; EL AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BL BJ BM BN BO BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW &apos;, concat(&apos; &apos;, substring(.,1,2), &apos; &apos;))">
+                The Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) shall have a prefix in accordance with ISO code ISO 3166-1 alpha-2 by which the country of issue may be identified. Nevertheless, Greece may use the prefix âELâ.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Reverse charge" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;E&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Exempt from VAT", the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;G&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Export outside the EU" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;K&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IGIC" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IGIC" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IPSI" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-48).</assert>
+            <assert test="not(ram:RateApplicablePercent)">
+                A Document level allowance (BG-20) where VAT category code (BT-95) is "Not subject to VAT" shall not contain a Document level allowance VAT rate (BT-96).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;S&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Standard rated" the Document level allowance VAT rate (BT-96) shall be greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Zero rated" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Reverse charge" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;E&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Exempt from VAT", the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;G&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Export outside the EU" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;K&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Intra-community supply" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IGIC" the Document level charge VAT rate (BT-103) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IPSI" the Document level charge VAT rate (BT-103) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-48).</assert>
+            <assert test="not(ram:RateApplicablePercent)">
+                A Document level charge (BG-21) where the VAT category code (BT-102) is "Not subject to VAT" shall not contain a Document level charge VAT rate (BT-103).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;S&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Standard rated" the Document level charge VAT rate (BT-103) shall be greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge where the Document level charge VAT category code (BT-102) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Zero rated" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementHeaderMonetarySummation">
+            <assert test="(ram:TaxBasisTotalAmount)">
+                An Invoice shall have the Invoice total amount without VAT (BT-109).</assert>
+            <assert test="(ram:GrandTotalAmount)">
+                An Invoice shall have the Invoice total amount with VAT (BT-112).</assert>
+            <assert test="(ram:DuePayableAmount)">
+                An Invoice shall have the Amount due for payment (BT-115).</assert>
+            <assert test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;])and not (ram:AllowanceTotalAmount)) or ram:AllowanceTotalAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:ActualAmount)* 10 * 10 ) div 100)">
+                Sum of allowances on document level (BT-107) = S Document level allowance amount (BT-92).</assert>
+            <assert test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;])and not (ram:ChargeTotalAmount)) or ram:ChargeTotalAmount = &#13;&#10;((round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:ActualAmount)* 10 * 10 ) div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount)* 10 * 10 ) div 100))">
+                Sum of charges on document level (BT-108) = S Document level charge amount (BT-99).</assert>
+            <assert test="(ram:GrandTotalAmount = round(ram:TaxBasisTotalAmount*100 + ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]*100 +0) div 100) or ((ram:GrandTotalAmount = ram:TaxBasisTotalAmount) and not (ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]))">
+                Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).</assert>
+            <assert test="string-length(substring-after(ram:LineTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2.</assert>
+            <assert test="string-length(substring-after(ram:AllowanceTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2.</assert>
+            <assert test="string-length(substring-after(ram:ChargeTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2.</assert>
+            <assert test="string-length(substring-after(ram:TaxBasisTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2.</assert>
+            <assert test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode and . = round(. * 100) div 100) or not (@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode)]">
+                The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2.</assert>
+            <assert test="string-length(substring-after(ram:GrandTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2.</assert>
+            <assert test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and . = round(. * 100) div 100) or not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode)]">
+                The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2.</assert>
+            <assert test="string-length(substring-after(ram:TotalPrepaidAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Paid amount (BT-113) is 2.</assert>
+            <assert test="string-length(substring-after(ram:RoundingAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Rounding amount (BT-114) is 2.</assert>
+            <assert test="string-length(substring-after(ram:DuePayableAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2.</assert>
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) or (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and (ram:TaxTotalAmount/@currencyID = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) and not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode))">
+                If the VAT accounting currency code (BT-6) is present, then the Invoice total VAT amount in accounting currency (BT-111) shall be provided.</assert>
+            <assert test="(ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount*100 - ram:AllowanceTotalAmount*100 + ram:ChargeTotalAmount*100) div 100)) or ((ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount*100 - ram:AllowanceTotalAmount*100) div 100)) and not (ram:ChargeTotalAmount)) or ((ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount*100 + ram:ChargeTotalAmount*100) div 100)) and not (ram:AllowanceTotalAmount)) or ((ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount * 100) div 100)) and not (ram:ChargeTotalAmount) and not (ram:AllowanceTotalAmount))">
+                Invoice total amount without VAT (BT-109) = S Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).</assert>
+            <assert test="(ram:DuePayableAmount = (round(ram:GrandTotalAmount*100 - ram:TotalPrepaidAmount*100 + ram:RoundingAmount*100) div 100)) or ((ram:DuePayableAmount = ram:GrandTotalAmount + ram:RoundingAmount) and not (ram:TotalPrepaidAmount)) or ((ram:DuePayableAmount = (round(ram:GrandTotalAmount*100 - ram:TotalPrepaidAmount*100) div 100)) and not (ram:RoundingAmount)) or ((ram:DuePayableAmount = (round(ram:GrandTotalAmount*100) div 100)) and not (ram:TotalPrepaidAmount) and not (ram:RoundingAmount))">
+                Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).</assert>
+            <assert test="(ram:LineTotalAmount)">
+                An Invoice shall have the Sum of Invoice line net amount (BT-106).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]">
+            <assert test=". = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount)*10*10)div 100)">
+                Invoice total VAT amount (BT-110) = S VAT category tax amount (BT-117).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementPaymentMeans">
+            <assert test="(ram:TypeCode)">
+                A Payment instruction (BG-16) shall specify the Payment means type code (BT-81).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementPaymentMeans[ram:TypeCode=&apos;30&apos; or ram:TypeCode=&apos;58&apos;]/ram:PayerPartyDebtorFinancialAccount">
+            <assert test="(ram:IBANID) or (ram:ProprietaryID)">
+                A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice.</assert>
+            <assert test="(ram:IBANID) or (ram:ProprietaryID)">
+                If the Payment means type code (BT-81) means SEPA credit transfer, Local credit transfer or Non-SEPA international credit transfer, the Payment account identifier (BT-84) shall be present.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;AE&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;AE&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;AE&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;AE&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Reverse charge" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âReverse charge".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âReverse chargeâ shall be 0 (zero).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Reverse charge" shall have a VAT exemption reason code (BT-121), meaning "Reverse charge" or the VAT exemption reason text (BT-120) "Reverse charge" (or the equivalent standard text in another language).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;E&apos;]">
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) In a VAT breakdown (BG-23) where the VAT category code (BT-118) equals "Exempt from VAT" shall equal 0 (zero).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Exempt from VAT" shall have a VAT exemption reason code (BT-121) or a VAT exemption reason text (BT-120).</assert>
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;E&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;E&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;E&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Exempt from VAT" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âExempt from VAT".</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;G&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;G&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;G&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;G&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Export outside the EU" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âExport outside the EU".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âExport outside the EUâ shall be 0 (zero).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with the VAT Category code (BT-118) "Export outside the EU" shall have a VAT exemption reason code (BT-121), meaning "Export outside the EU" or the VAT exemption reason text (BT-120) "Export outside the EU" (or the equivalent standard text in another language).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.= &apos;K&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;K&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;K&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;K&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âIntra-community supply".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IGIC" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with the VAT Category code (BT-118) "Intra-community supply" shall have a VAT exemption reason code (BT-121), meaning "Intra-community supply" or the VAT exemption reason text (BT-120) "Intra-community supply" (or the equivalent standard text in another language).</assert>
+            <assert test="(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString) or (../../ram:BillingSpecifiedPeriod/ram:StartDateTime) or (../../ram:BillingSpecifiedPeriod/ram:EndDateTime)">
+                In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the Actual delivery date (BT-72) or the Invoicing period (BG-14) shall not be blank.</assert>
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID">
+                In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the Deliver to country code (BT-80) shall not be blank.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;L&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;L&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;L&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)">
+                For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "IGIC", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is âIGICâ and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).</assert>
+            <assert test="true()">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IGIC" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "IGIC" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;M&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;M&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;M&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)">
+                For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "IPSI", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is âIPSIâ and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).</assert>
+            <assert test="true()">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IPSI" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "IPSI" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;O&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;O&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;O&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is " Not subject to VAT" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âNot subject to VAT".</assert>
+            <assert test="ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âNot subject to VATâ shall be 0 (zero).</assert>
+            <assert test="(ram:ExemptionReason) or (ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) " Not subject to VAT" shall have a VAT exemption reason code (BT-121), meaning " Not subject to VAT" or a VAT exemption reason text (BT-120) " Not subject to VAT" (or the equivalent standard text in another language).</assert>
+            <assert test="not(//ram:ApplicableTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain other VAT breakdown groups (BG-23).</assert>
+            <assert test="not(//ram:ApplicableTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is not "Not subject to VAT".</assert>
+            <assert test="not(//ram:CategoryTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain Document level allowances (BG-20) where Document level allowance VAT category code (BT-95) is not "Not subject to VAT".</assert>
+            <assert test="not(//ram:CategoryTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain Document level charges (BG-21) where Document level charge VAT category code (BT-102) is not "Not subject to VAT".</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Reverse charge" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;E&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Exempt from VAT", the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;G&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Export outside the EU" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;K&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Intracommunity supply" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IGIC" the invoiced item VAT rate (BT-152) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IPSI" the Invoiced item VAT rate (BT-152) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-46).</assert>
+            <assert test="not(ram:RateApplicablePercent)">
+                An Invoice line (BG-25) where the VAT category code (BT-151) is "Not subject to VAT" shall not contain an Invoiced item VAT rate (BT-152).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;S&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Standard rated" the Invoiced item VAT rate (BT-152) shall be greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line where the Invoiced item VAT category code (BT-151) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Zero rated" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice">
+            <assert test="(rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID != &apos;&apos;)">
+                An Invoice shall have a Specification identifier (BT-24).</assert>
+            <assert test="(rsm:ExchangedDocument/ram:ID !=&apos;&apos;)">
+                An Invoice shall have an Invoice number (BT-1).</assert>
+            <assert test="(rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString[@format=&apos;102&apos;]!=&apos;&apos;)">
+                An Invoice shall have an Invoice issue date (BT-2).</assert>
+            <assert test="(rsm:ExchangedDocument/ram:TypeCode!=&apos;&apos;)">
+                An Invoice shall have an Invoice type code (BT-3).</assert>
+            <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode!=&apos;&apos;)">
+                An Invoice shall have an Invoice currency code (BT-5).</assert>
+            <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name!=&apos;&apos;)">
+                An Invoice shall contain the Seller name (BT-27).</assert>
+            <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name!=&apos;&apos;)">
+                An Invoice shall contain the Buyer name (BT-44).</assert>
+            <assert test="//ram:SellerTradeParty/ram:PostalTradeAddress">
+                An Invoice shall contain the Seller postal address (BG-5).</assert>
+            <assert test="//ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;">
+                The Seller postal address (BG-5) shall contain a Seller country code (BT-40).</assert>
+            <assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!=&apos;&apos; or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication)">
+                The Seller electronic address (BT-34) shall have a Scheme identifier.</assert>
+            <assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!=&apos;&apos; or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication)">
+                The Buyer electronic address (BT-49) shall have a Scheme identifier.</assert>
+            <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) and     ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;S&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;S&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âStandard ratedâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "Standard rated".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;Z&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;Z&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âZero ratedâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Zero rated".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;E&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;E&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âExempt from VATâ shall contain exactly one VAT breakdown (BG-23) with the VAT category code (BT-118) equal to "Exempt from VAT".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;AE&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;AE&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âReverse chargeâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "VAT reverse charge".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;K&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;K&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIntra-community supplyâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Intra-community supply".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;G&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;G&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âExport outside the EUâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Export outside the EU".</assert>
+            <assert test="not(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;]) or (     count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;])=1 and     (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;] or    //ram:CategoryTradeTax[ram:CategoryCode=&apos;O&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âNot subject to VATâ shall contain exactly one VAT breakdown group (BG-23) with the VAT category code (BT-118) equal to "Not subject to VAT".</assert>
+            <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) and     ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;L&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;L&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIGICâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "IGIC".</assert>
+            <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) and     ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;M&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;M&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIPSIâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "IPSI".</assert>
+            <assert test="(number(//ram:DuePayableAmount) &gt; 0 and ((//ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime) or (//ram:SpecifiedTradePaymentTerms/ram:Description))) or not(number(//ram:DuePayableAmount)&gt;0)">
+                In case the Amount due for payment (BT-115) is positive, either the Payment due date (BT-9) or the Payment terms (BT-20) shall be present.</assert>
+            <assert test="//ram:BuyerTradeParty/ram:PostalTradeAddress">
+                An Invoice shall contain the Buyer postal address (BG-8).</assert>
+            <assert test="//ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;">
+                The Buyer postal address shall contain a Buyer country code (BT-55).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CategoryCode">
+            <report test="true()">
+                Element 'ram:CategoryCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ControlRequirementIndicator">
+            <report test="true()">
+                Element 'ram:ControlRequirementIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote">
+            <assert test="count(ram:Content)=1">
+                Element 'ram:Content' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ContentCode">
+            <report test="true()">
+                Element 'ram:ContentCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Subject">
+            <report test="true()">
+                Element 'ram:Subject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode">
+            <let name="codeValue3" value="."/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=3]/enumeration[@value=$codeValue3]">
+                Value of 'ram:SubjectCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:LanguageID">
+            <report test="true()">
+                Element 'ram:LanguageID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:Purpose">
+            <report test="true()">
+                Element 'ram:Purpose' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:PurposeCode">
+            <report test="true()">
+                Element 'ram:PurposeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:RevisionDateTime">
+            <report test="true()">
+                Element 'ram:RevisionDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode">
+            <let name="codeValue1" value="."/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=1]/enumeration[@value=$codeValue1]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:VersionID">
+            <report test="true()">
+                Element 'ram:VersionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext">
+            <assert test="count(ram:BusinessProcessSpecifiedDocumentContextParameter)&lt;=1">
+                Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GuidelineSpecifiedDocumentContextParameter)=1">
+                Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:ApplicationSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:ApplicationSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BIMSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:BIMSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:SpecifiedDocumentVersion">
+            <report test="true()">
+                Element 'ram:SpecifiedDocumentVersion' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:Value">
+            <report test="true()">
+                Element 'ram:Value' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:SpecifiedDocumentVersion">
+            <report test="true()">
+                Element 'ram:SpecifiedDocumentVersion' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:Value">
+            <report test="true()">
+                Element 'ram:Value' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:MessageStandardSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:MessageStandardSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:ScenarioSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:ScenarioSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:SpecifiedTransactionID">
+            <report test="true()">
+                Element 'ram:SpecifiedTransactionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:SubsetSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:SubsetSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:TestIndicator">
+            <report test="true()">
+                Element 'ram:TestIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction">
+            <assert test="count(ram:IncludedSupplyChainTradeLineItem)&gt;=1">
+                Element 'ram:IncludedSupplyChainTradeLineItem' must occur at least 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement">
+            <assert test="count(ram:SellerTradeParty)=1">
+                Element 'ram:SellerTradeParty' must occur exactly 1 times.</assert>
+            <assert test="count(ram:BuyerTradeParty)=1">
+                Element 'ram:BuyerTradeParty' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:Name)&lt;=1">
+                Element 'ram:Name' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:AttachmentBinaryObject)&lt;=1">
+                Element 'ram:AttachmentBinaryObject' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@characterSetCode]">
+            <report test="true()">
+                Attribute @characterSetCode' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@encodingCode]">
+            <report test="true()">
+                Attribute @encodingCode' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@mimeCode]">
+            <let name="codeValue19" value="@mimeCode"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=19]/enumeration[@value=$codeValue19]">
+                Value of '@mimeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@uri]">
+            <report test="true()">
+                Attribute @uri' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode">
+            <let name="codeValue18" value="."/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=18]/enumeration[@value=$codeValue18]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ApplicableTradeDeliveryTerms">
+            <report test="true()">
+                Element 'ram:ApplicableTradeDeliveryTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerAgentTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerAgentTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerAssignedAccountantTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerAssignedAccountantTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerReference[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerReference[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerRequisitionerTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerRequisitionerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTaxRepresentativeTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerTaxRepresentativeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:PostalTradeAddress)=1">
+                Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:SpecifiedTaxRegistration)&lt;=1">
+                Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <report test="true()">
+                Element 'ram:FaxUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue14" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=14]/enumeration[@value=$codeValue14]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+            <let name="codeValue15" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=15]/enumeration[@value=$codeValue15]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue16" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=16]/enumeration[@value=$codeValue16]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:DemandForecastReferencedDocument">
+            <report test="true()">
+                Element 'ram:DemandForecastReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:OrderResponseReferencedDocument">
+            <report test="true()">
+                Element 'ram:OrderResponseReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PriceListReferencedDocument">
+            <report test="true()">
+                Element 'ram:PriceListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty">
+            <report test="true()">
+                Element 'ram:ProductEndUserTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PromotionalDealReferencedDocument">
+            <report test="true()">
+                Element 'ram:PromotionalDealReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PurchaseConditionsReferencedDocument">
+            <report test="true()">
+                Element 'ram:PurchaseConditionsReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:QuotationReferencedDocument">
+            <report test="true()">
+                Element 'ram:QuotationReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:Reference">
+            <report test="true()">
+                Element 'ram:Reference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:RequisitionerReferencedDocument">
+            <report test="true()">
+                Element 'ram:RequisitionerReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SalesAgentTradeParty">
+            <report test="true()">
+                Element 'ram:SalesAgentTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerAssignedAccountantTradeParty">
+            <report test="true()">
+                Element 'ram:SellerAssignedAccountantTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty">
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:PostalTradeAddress)=1">
+                Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+            <assert test="count(ram:SpecifiedTaxRegistration)=1">
+                Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact">
+            <report test="true()">
+                Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization">
+            <report test="true()">
+                Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue17" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=17]/enumeration[@value=$codeValue17]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:URIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty">
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:Description)&lt;=1">
+                Element 'ram:Description' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:PostalTradeAddress)=1">
+                Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <report test="true()">
+                Element 'ram:FaxUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Description[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Description[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue10" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+            <let name="codeValue11" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=11]/enumeration[@value=$codeValue11]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue13" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=13]/enumeration[@value=$codeValue13]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SupplyInstructionReferencedDocument">
+            <report test="true()">
+                Element 'ram:SupplyInstructionReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument">
+            <report test="true()">
+                Element 'ram:UltimateCustomerOrderReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery">
+            <assert test="(ram:ShipToTradeParty/ram:PostalTradeAddress and ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;) or not (ram:ShipToTradeParty/ram:PostalTradeAddress)">
+                Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:DescriptionBinaryObject">
+            <report test="true()">
+                Element 'ram:DescriptionBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:EarliestOccurrenceDateTime">
+            <report test="true()">
+                Element 'ram:EarliestOccurrenceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:LatestOccurrenceDateTime">
+            <report test="true()">
+                Element 'ram:LatestOccurrenceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceLogisticsLocation">
+            <report test="true()">
+                Element 'ram:OccurrenceLogisticsLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:OccurrenceSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:UnitQuantity">
+            <report test="true()">
+                Element 'ram:UnitQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDespatchSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualDespatchSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualPickUpSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualPickUpSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualReceiptSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualReceiptSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:AdditionalReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ConsumptionReportReferencedDocument">
+            <report test="true()">
+                Element 'ram:ConsumptionReportReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument">
+            <report test="true()">
+                Element 'ram:DeliveryNoteReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:PackingListReferencedDocument">
+            <report test="true()">
+                Element 'ram:PackingListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:PreviousDeliverySupplyChainEvent">
+            <report test="true()">
+                Element 'ram:PreviousDeliverySupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment">
+            <report test="true()">
+                Element 'ram:RelatedSupplyChainConsignment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty">
+            <report test="true()">
+                Element 'ram:ShipFromTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GlobalID)&lt;=1">
+                Element 'ram:GlobalID' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact">
+            <report test="true()">
+                Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue20" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=20]/enumeration[@value=$codeValue20]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization">
+            <report test="true()">
+                Element 'ram:SpecifiedLegalOrganization' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration">
+            <report test="true()">
+                Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:URIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty">
+            <report test="true()">
+                Element 'ram:UltimateShipToTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement">
+            <assert test="count(ram:PaymentReference)&lt;=1">
+                Element 'ram:PaymentReference' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:InvoiceCurrencyCode)=1">
+                Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ApplicableTradeTax)&gt;=1">
+                Element 'ram:ApplicableTradeTax' must occur at least 1 times.</assert>
+            <assert test="count(ram:SpecifiedTradePaymentTerms)&lt;=1">
+                Element 'ram:SpecifiedTradePaymentTerms' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:SpecifiedTradeSettlementHeaderMonetarySummation)=1">
+                Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ReceivableSpecifiedTradeAccountingAccount)&lt;=1">
+                Element 'ram:ReceivableSpecifiedTradeAccountingAccount' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+            <assert test="count(ram:CalculatedAmount)=1">
+                Element 'ram:CalculatedAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:BasisAmount)=1">
+                Element 'ram:BasisAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryCode)=1">
+                Element 'ram:CategoryCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:AllowanceChargeBasisAmount">
+            <report test="true()">
+                Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode">
+            <let name="codeValue23" value="."/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=23]/enumeration[@value=$codeValue23]">
+                Value of 'ram:CategoryCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode">
+            <let name="codeValue24" value="."/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=24]/enumeration[@value=$codeValue24]">
+                Value of 'ram:ExemptionReasonCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:LineTotalBasisAmount">
+            <report test="true()">
+                Element 'ram:LineTotalBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate/udt:Date">
+            <report test="true()">
+                Element 'udt:Date' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString[@format]">
+            <let name="codeValue25" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=25]/enumeration[@value=$codeValue25]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:CompleteDateTime">
+            <report test="true()">
+                Element 'ram:CompleteDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:ContinuousIndicator">
+            <report test="true()">
+                Element 'ram:ContinuousIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:DurationMeasure">
+            <report test="true()">
+                Element 'ram:DurationMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:InclusiveIndicator">
+            <report test="true()">
+                Element 'ram:InclusiveIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:OpenIndicator">
+            <report test="true()">
+                Element 'ram:OpenIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:PurposeCode">
+            <report test="true()">
+                Element 'ram:PurposeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:SeasonCode">
+            <report test="true()">
+                Element 'ram:SeasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateFlexibilityCode">
+            <report test="true()">
+                Element 'ram:StartDateFlexibilityCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditReason">
+            <report test="true()">
+                Element 'ram:CreditReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditReasonCode">
+            <report test="true()">
+                Element 'ram:CreditReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceIssuerID">
+            <report test="true()">
+                Element 'ram:CreditorReferenceIssuerID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceType">
+            <report test="true()">
+                Element 'ram:CreditorReferenceType' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:CreditorReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:DuePayableAmount">
+            <report test="true()">
+                Element 'ram:DuePayableAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:FactoringAgreementReferencedDocument">
+            <report test="true()">
+                Element 'ram:FactoringAgreementReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:FactoringListReferencedDocument">
+            <report test="true()">
+                Element 'ram:FactoringListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceApplicableTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:InvoiceApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceDateTime">
+            <report test="true()">
+                Element 'ram:InvoiceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceIssuerReference">
+            <report test="true()">
+                Element 'ram:InvoiceIssuerReference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument">
+            <assert test="(ram:IssuerAssignedID!=&apos;&apos;)">
+                Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25).</assert>
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue28" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=28]/enumeration[@value=$codeValue28]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty">
+            <report test="true()">
+                Element 'ram:InvoiceeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty">
+            <report test="true()">
+                Element 'ram:InvoicerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:LetterOfCreditReferencedDocument">
+            <report test="true()">
+                Element 'ram:LetterOfCreditReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:NextInvoiceDateTime">
+            <report test="true()">
+                Element 'ram:NextInvoiceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayableSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PayableSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GlobalID)&lt;=1">
+                Element 'ram:GlobalID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact">
+            <report test="true()">
+                Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue21" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=21]/enumeration[@value=$codeValue21]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+            <let name="codeValue22" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=22]/enumeration[@value=$codeValue22]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName">
+            <report test="true()">
+                Element 'ram:TradingBusinessName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration">
+            <report test="true()">
+                Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:URIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayerTradeParty">
+            <report test="true()">
+                Element 'ram:PayerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentApplicableTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:PaymentApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentCurrencyCode">
+            <report test="true()">
+                Element 'ram:PaymentCurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentReference[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentReference[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ProFormaInvoiceReferencedDocument">
+            <report test="true()">
+                Element 'ram:ProFormaInvoiceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PurchaseSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PurchaseSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:AmountTypeCode">
+            <report test="true()">
+                Element 'ram:AmountTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:CostReferenceDimensionPattern">
+            <report test="true()">
+                Element 'ram:CostReferenceDimensionPattern' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:SetTriggerCode">
+            <report test="true()">
+                Element 'ram:SetTriggerCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SalesSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SalesSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment">
+            <report test="true()">
+                Element 'ram:SpecifiedAdvancePayment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedFinancialAdjustment">
+            <report test="true()">
+                Element 'ram:SpecifiedFinancialAdjustment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge">
+            <report test="true()">
+                Element 'ram:SpecifiedLogisticsServiceCharge' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge">
+            <assert test="count(ram:ChargeIndicator)=1">
+                Element 'ram:ChargeIndicator' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ActualAmount)=1">
+                Element 'ram:ActualAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryTradeTax)=1">
+                Element 'ram:CategoryTradeTax' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:ActualTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryCode)=1">
+                Element 'ram:CategoryCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:AllowanceChargeBasisAmount">
+            <report test="true()">
+                Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BasisAmount">
+            <report test="true()">
+                Element 'ram:BasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CalculatedAmount">
+            <report test="true()">
+                Element 'ram:CalculatedAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode">
+            <let name="codeValue26" value="."/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=26]/enumeration[@value=$codeValue26]">
+                Value of 'ram:CategoryCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:DueDateTypeCode">
+            <report test="true()">
+                Element 'ram:DueDateTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:ExemptionReason">
+            <report test="true()">
+                Element 'ram:ExemptionReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:ExemptionReasonCode">
+            <report test="true()">
+                Element 'ram:ExemptionReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:LineTotalBasisAmount">
+            <report test="true()">
+                Element 'ram:LineTotalBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TaxPointDate">
+            <report test="true()">
+                Element 'ram:TaxPointDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator/udt:IndicatorString">
+            <report test="true()">
+                Element 'udt:IndicatorString' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:PrepaidIndicator">
+            <report test="true()">
+                Element 'ram:PrepaidIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms">
+            <assert test="count(ram:Description)&lt;=1">
+                Element 'ram:Description' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:DirectDebitMandateID)&lt;=1">
+                Element 'ram:DirectDebitMandateID' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms">
+            <report test="true()">
+                Element 'ram:ApplicableTradePaymentDiscountTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms">
+            <report test="true()">
+                Element 'ram:ApplicableTradePaymentPenaltyTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:Description[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:Description[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:FromEventCode">
+            <report test="true()">
+                Element 'ram:FromEventCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:InstructionTypeCode">
+            <report test="true()">
+                Element 'ram:InstructionTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PartialPaymentAmount">
+            <report test="true()">
+                Element 'ram:PartialPaymentAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PartialPaymentPercent">
+            <report test="true()">
+                Element 'ram:PartialPaymentPercent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PayeeTradeParty">
+            <report test="true()">
+                Element 'ram:PayeeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PaymentMeansID">
+            <report test="true()">
+                Element 'ram:PaymentMeansID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:SettlementPeriodMeasure">
+            <report test="true()">
+                Element 'ram:SettlementPeriodMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementFinancialCard">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeSettlementFinancialCard' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation">
+            <assert test="count(ram:LineTotalAmount)=1">
+                Element 'ram:LineTotalAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ChargeTotalAmount)&lt;=1">
+                Element 'ram:ChargeTotalAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:AllowanceTotalAmount)&lt;=1">
+                Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:TaxBasisTotalAmount)=1">
+                Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TaxTotalAmount)&lt;=2">
+                Element 'ram:TaxTotalAmount' may occur at maximum 2 times.</assert>
+            <assert test="count(ram:RoundingAmount)&lt;=1">
+                Element 'ram:RoundingAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GrandTotalAmount)=1">
+                Element 'ram:GrandTotalAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TotalPrepaidAmount)&lt;=1">
+                Element 'ram:TotalPrepaidAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:DuePayableAmount)=1">
+                Element 'ram:DuePayableAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount[@currencyID]">
+            <let name="codeValue27" value="@currencyID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=27]/enumeration[@value=$codeValue27]">
+                Value of '@currencyID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrossLineTotalAmount">
+            <report test="true()">
+                Element 'ram:GrossLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:NetIncludingTaxesLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetIncludingTaxesLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:NetLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ProductValueExcludingTobaccoTaxInformationAmount">
+            <report test="true()">
+                Element 'ram:ProductValueExcludingTobaccoTaxInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RetailValueExcludingTaxInformationAmount">
+            <report test="true()">
+                Element 'ram:RetailValueExcludingTaxInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID]">
+            <let name="codeValue27" value="@currencyID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=27]/enumeration[@value=$codeValue27]">
+                Value of '@currencyID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalAllowanceChargeAmount">
+            <report test="true()">
+                Element 'ram:TotalAllowanceChargeAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalDepositFeeInformationAmount">
+            <report test="true()">
+                Element 'ram:TotalDepositFeeInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalDiscountAmount">
+            <report test="true()">
+                Element 'ram:TotalDiscountAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalRetailValueInformationAmount">
+            <report test="true()">
+                Element 'ram:TotalRetailValueInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:Information)&lt;=1">
+                Element 'ram:Information' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CreditAvailableAmount">
+            <report test="true()">
+                Element 'ram:CreditAvailableAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CreditLimitAmount">
+            <report test="true()">
+                Element 'ram:CreditLimitAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ExpiryDate">
+            <report test="true()">
+                Element 'ram:ExpiryDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:InterestRatePercent">
+            <report test="true()">
+                Element 'ram:InterestRatePercent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:IssuingCompanyName">
+            <report test="true()">
+                Element 'ram:IssuingCompanyName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:MicrochipIndicator">
+            <report test="true()">
+                Element 'ram:MicrochipIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ValidFromDateTime">
+            <report test="true()">
+                Element 'ram:ValidFromDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:VerificationNumeric">
+            <report test="true()">
+                Element 'ram:VerificationNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:GuaranteeMethodCode">
+            <report test="true()">
+                Element 'ram:GuaranteeMethodCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution">
+            <assert test="count(ram:BICID)=1">
+                Element 'ram:BICID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:AustralianBSBID">
+            <report test="true()">
+                Element 'ram:AustralianBSBID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:AustrianBankleitzahlID">
+            <report test="true()">
+                Element 'ram:AustrianBankleitzahlID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:CHIPSParticipantID">
+            <report test="true()">
+                Element 'ram:CHIPSParticipantID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:CHIPSUniversalID">
+            <report test="true()">
+                Element 'ram:CHIPSUniversalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:CanadianPaymentsAssociationID">
+            <report test="true()">
+                Element 'ram:CanadianPaymentsAssociationID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:ClearingSystemName">
+            <report test="true()">
+                Element 'ram:ClearingSystemName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:FedwireRoutingNumberID">
+            <report test="true()">
+                Element 'ram:FedwireRoutingNumberID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:GermanBankleitzahlID">
+            <report test="true()">
+                Element 'ram:GermanBankleitzahlID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:HellenicBankID">
+            <report test="true()">
+                Element 'ram:HellenicBankID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:HongKongBankID">
+            <report test="true()">
+                Element 'ram:HongKongBankID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:IndianFinancialSystemID">
+            <report test="true()">
+                Element 'ram:IndianFinancialSystemID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:IrishNSCID">
+            <report test="true()">
+                Element 'ram:IrishNSCID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:ItalianDomesticID">
+            <report test="true()">
+                Element 'ram:ItalianDomesticID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:JapanFinancialInstitutionCommonID">
+            <report test="true()">
+                Element 'ram:JapanFinancialInstitutionCommonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:LocationFinancialInstitutionAddress">
+            <report test="true()">
+                Element 'ram:LocationFinancialInstitutionAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:NewZealandNCCID">
+            <report test="true()">
+                Element 'ram:NewZealandNCCID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:PolishNationalClearingID">
+            <report test="true()">
+                Element 'ram:PolishNationalClearingID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:PortugueseNCCID">
+            <report test="true()">
+                Element 'ram:PortugueseNCCID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:RussianCentralBankID">
+            <report test="true()">
+                Element 'ram:RussianCentralBankID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:SICID">
+            <report test="true()">
+                Element 'ram:SICID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:SouthAfricanNCCID">
+            <report test="true()">
+                Element 'ram:SouthAfricanNCCID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:SpanishDomesticInterbankingID">
+            <report test="true()">
+                Element 'ram:SpanishDomesticInterbankingID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:SubDivisionBranchFinancialInstitution">
+            <report test="true()">
+                Element 'ram:SubDivisionBranchFinancialInstitution' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:SwissBCID">
+            <report test="true()">
+                Element 'ram:SwissBCID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:UKSortCodeID">
+            <report test="true()">
+                Element 'ram:UKSortCodeID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount">
+            <assert test="count(ram:IBANID)=1">
+                Element 'ram:IBANID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:AccountName">
+            <report test="true()">
+                Element 'ram:AccountName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:ProprietaryID">
+            <report test="true()">
+                Element 'ram:ProprietaryID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerSpecifiedDebtorFinancialInstitution">
+            <report test="true()">
+                Element 'ram:PayerSpecifiedDebtorFinancialInstitution' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PaymentChannelCode">
+            <report test="true()">
+                Element 'ram:PaymentChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PaymentMethodCode">
+            <report test="true()">
+                Element 'ram:PaymentMethodCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SubtotalCalculatedTradeTax">
+            <report test="true()">
+                Element 'ram:SubtotalCalculatedTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:TaxApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:UltimatePayeeTradeParty">
+            <report test="true()">
+                Element 'ram:UltimatePayeeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem">
+            <assert test="count(ram:SpecifiedTradeProduct)=1">
+                Element 'ram:SpecifiedTradeProduct' must occur exactly 1 times.</assert>
+            <assert test="count(ram:SpecifiedLineTradeAgreement)=1">
+                Element 'ram:SpecifiedLineTradeAgreement' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument">
+            <assert test="count(ram:LineID)=1">
+                Element 'ram:LineID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:IncludedNote)&lt;=1">
+                Element 'ram:IncludedNote' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote">
+            <assert test="count(ram:Content)=1">
+                Element 'ram:Content' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode">
+            <report test="true()">
+                Element 'ram:ContentCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:Content[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:Content[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:Subject">
+            <report test="true()">
+                Element 'ram:Subject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode">
+            <report test="true()">
+                Element 'ram:SubjectCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusCode">
+            <report test="true()">
+                Element 'ram:LineStatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode">
+            <report test="true()">
+                Element 'ram:LineStatusReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:ParentLineID">
+            <report test="true()">
+                Element 'ram:ParentLineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:DescriptionCode">
+            <report test="true()">
+                Element 'ram:DescriptionCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:IncludedSubordinateTradeLineItem">
+            <report test="true()">
+                Element 'ram:IncludedSubordinateTradeLineItem' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement">
+            <assert test="count(ram:NetPriceProductTradePrice)=1">
+                Element 'ram:NetPriceProductTradePrice' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ApplicableTradeDeliveryTerms">
+            <report test="true()">
+                Element 'ram:ApplicableTradeDeliveryTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID">
+            <report test="true()">
+                Element 'ram:IssuerAssignedID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerReference">
+            <report test="true()">
+                Element 'ram:BuyerReference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerRequisitionerTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerRequisitionerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument">
+            <report test="true()">
+                Element 'ram:ContractReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:DemandForecastReferencedDocument">
+            <report test="true()">
+                Element 'ram:DemandForecastReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice">
+            <assert test="count(ram:ChargeAmount)=1">
+                Element 'ram:ChargeAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:AppliedTradeAllowanceCharge)&lt;=1">
+                Element 'ram:AppliedTradeAllowanceCharge' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge">
+            <assert test="count(ram:ActualAmount)=1">
+                Element 'ram:ActualAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:ActualTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:BasisAmount">
+            <report test="true()">
+                Element 'ram:BasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CalculationPercent">
+            <report test="true()">
+                Element 'ram:CalculationPercent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CategoryTradeTax">
+            <report test="true()">
+                Element 'ram:CategoryTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ChargeIndicator">
+            <report test="true()">
+                Element 'ram:ChargeIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:PrepaidIndicator">
+            <report test="true()">
+                Element 'ram:PrepaidIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:Reason">
+            <report test="true()">
+                Element 'ram:Reason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ReasonCode">
+            <report test="true()">
+                Element 'ram:ReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AssociatedReferencedDocument">
+            <report test="true()">
+                Element 'ram:AssociatedReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity[@unitCodeListAgencyID]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity[@unitCodeListAgencyName]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity[@unitCodeListID]">
+            <report test="true()">
+                Attribute @unitCodeListID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity[@unitCode]">
+            <let name="codeValue7" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=7]/enumeration[@value=$codeValue7]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChangeReason">
+            <report test="true()">
+                Element 'ram:ChangeReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:DeliveryTradeLocation">
+            <report test="true()">
+                Element 'ram:DeliveryTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:IncludedTradeTax">
+            <report test="true()">
+                Element 'ram:IncludedTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:MaximumQuantity">
+            <report test="true()">
+                Element 'ram:MaximumQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:MinimumQuantity">
+            <report test="true()">
+                Element 'ram:MinimumQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:OrderUnitConversionFactorNumeric">
+            <report test="true()">
+                Element 'ram:OrderUnitConversionFactorNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:TradeComparisonReferencePrice">
+            <report test="true()">
+                Element 'ram:TradeComparisonReferencePrice' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ValiditySpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:ValiditySpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:IncludedSpecifiedMarketplace">
+            <report test="true()">
+                Element 'ram:IncludedSpecifiedMarketplace' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ItemBuyerTradeParty">
+            <report test="true()">
+                Element 'ram:ItemBuyerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ItemSellerTradeParty">
+            <report test="true()">
+                Element 'ram:ItemSellerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice">
+            <assert test="count(ram:ChargeAmount)=1">
+                Element 'ram:ChargeAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:AppliedTradeAllowanceCharge">
+            <report test="true()">
+                Element 'ram:AppliedTradeAllowanceCharge' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:AssociatedReferencedDocument">
+            <report test="true()">
+                Element 'ram:AssociatedReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity[@unitCodeListAgencyID]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity[@unitCodeListAgencyName]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity[@unitCodeListID]">
+            <report test="true()">
+                Attribute @unitCodeListID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity[@unitCode]">
+            <let name="codeValue7" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=7]/enumeration[@value=$codeValue7]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChangeReason">
+            <report test="true()">
+                Element 'ram:ChangeReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:DeliveryTradeLocation">
+            <report test="true()">
+                Element 'ram:DeliveryTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax">
+            <report test="true()">
+                Element 'ram:IncludedTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:MaximumQuantity">
+            <report test="true()">
+                Element 'ram:MaximumQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:MinimumQuantity">
+            <report test="true()">
+                Element 'ram:MinimumQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:OrderUnitConversionFactorNumeric">
+            <report test="true()">
+                Element 'ram:OrderUnitConversionFactorNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:TradeComparisonReferencePrice">
+            <report test="true()">
+                Element 'ram:TradeComparisonReferencePrice' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ValiditySpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:ValiditySpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:PromotionalDealReferencedDocument">
+            <report test="true()">
+                Element 'ram:PromotionalDealReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:QuotationReferencedDocument">
+            <report test="true()">
+                Element 'ram:QuotationReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:RequisitionerReferencedDocument">
+            <report test="true()">
+                Element 'ram:RequisitionerReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:SellerOrderReferencedDocument">
+            <report test="true()">
+                Element 'ram:SellerOrderReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument">
+            <report test="true()">
+                Element 'ram:UltimateCustomerOrderReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery">
+            <assert test="count(ram:BilledQuantity)=1">
+                Element 'ram:BilledQuantity' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualDeliverySupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDespatchSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualDespatchSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualPickUpSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualPickUpSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualReceiptSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualReceiptSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:AdditionalReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity[@unitCodeListAgencyID]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity[@unitCodeListAgencyName]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity[@unitCodeListID]">
+            <report test="true()">
+                Attribute @unitCodeListID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity[@unitCode]">
+            <let name="codeValue7" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=7]/enumeration[@value=$codeValue7]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ChargeFreeQuantity">
+            <report test="true()">
+                Element 'ram:ChargeFreeQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ConsumptionReportReferencedDocument">
+            <report test="true()">
+                Element 'ram:ConsumptionReportReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument">
+            <report test="true()">
+                Element 'ram:DeliveryNoteReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument">
+            <report test="true()">
+                Element 'ram:DespatchAdviceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchedQuantity">
+            <report test="true()">
+                Element 'ram:DespatchedQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:GrossWeightMeasure">
+            <report test="true()">
+                Element 'ram:GrossWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:IncludedSupplyChainPackaging">
+            <report test="true()">
+                Element 'ram:IncludedSupplyChainPackaging' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:NetWeightMeasure">
+            <report test="true()">
+                Element 'ram:NetWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PackageQuantity">
+            <report test="true()">
+                Element 'ram:PackageQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PackingListReferencedDocument">
+            <report test="true()">
+                Element 'ram:PackingListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PerPackageUnitQuantity">
+            <report test="true()">
+                Element 'ram:PerPackageUnitQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ProductUnitQuantity">
+            <report test="true()">
+                Element 'ram:ProductUnitQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivedQuantity">
+            <report test="true()">
+                Element 'ram:ReceivedQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument">
+            <report test="true()">
+                Element 'ram:ReceivingAdviceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:RelatedSupplyChainConsignment">
+            <report test="true()">
+                Element 'ram:RelatedSupplyChainConsignment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:RequestedDeliverySupplyChainEvent">
+            <report test="true()">
+                Element 'ram:RequestedDeliverySupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:RequestedQuantity">
+            <report test="true()">
+                Element 'ram:RequestedQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipFromTradeParty">
+            <report test="true()">
+                Element 'ram:ShipFromTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty">
+            <report test="true()">
+                Element 'ram:ShipToTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:SpecifiedDeliveryAdjustment">
+            <report test="true()">
+                Element 'ram:SpecifiedDeliveryAdjustment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:TheoreticalWeightMeasure">
+            <report test="true()">
+                Element 'ram:TheoreticalWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty">
+            <report test="true()">
+                Element 'ram:UltimateShipToTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement">
+            <assert test="count(ram:ApplicableTradeTax)=1">
+                Element 'ram:ApplicableTradeTax' must occur exactly 1 times.</assert>
+            <assert test="count(ram:SpecifiedTradeSettlementLineMonetarySummation)=1">
+                Element 'ram:SpecifiedTradeSettlementLineMonetarySummation' must occur exactly 1 times.</assert>
+            <assert test="count(ram:AdditionalReferencedDocument)&lt;=1">
+                Element 'ram:AdditionalReferencedDocument' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:ReceivableSpecifiedTradeAccountingAccount)&lt;=1">
+                Element 'ram:ReceivableSpecifiedTradeAccountingAccount' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:TypeCode">
+            <let name="codeValue9" value="."/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=9]/enumeration[@value=$codeValue9]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:TypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryCode)=1">
+                Element 'ram:CategoryCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:AllowanceChargeBasisAmount">
+            <report test="true()">
+                Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount">
+            <report test="true()">
+                Element 'ram:BasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount">
+            <report test="true()">
+                Element 'ram:CalculatedAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode">
+            <let name="codeValue8" value="."/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=8]/enumeration[@value=$codeValue8]">
+                Value of 'ram:CategoryCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode">
+            <report test="true()">
+                Element 'ram:DueDateTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason">
+            <report test="true()">
+                Element 'ram:ExemptionReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode">
+            <report test="true()">
+                Element 'ram:ExemptionReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:LineTotalBasisAmount">
+            <report test="true()">
+                Element 'ram:LineTotalBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate">
+            <report test="true()">
+                Element 'ram:TaxPointDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:CompleteDateTime">
+            <report test="true()">
+                Element 'ram:CompleteDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:ContinuousIndicator">
+            <report test="true()">
+                Element 'ram:ContinuousIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:DurationMeasure">
+            <report test="true()">
+                Element 'ram:DurationMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:InclusiveIndicator">
+            <report test="true()">
+                Element 'ram:InclusiveIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:OpenIndicator">
+            <report test="true()">
+                Element 'ram:OpenIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:PurposeCode">
+            <report test="true()">
+                Element 'ram:PurposeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:SeasonCode">
+            <report test="true()">
+                Element 'ram:SeasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateFlexibilityCode">
+            <report test="true()">
+                Element 'ram:StartDateFlexibilityCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:DiscountIndicator">
+            <report test="true()">
+                Element 'ram:DiscountIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:InvoiceIssuerReference">
+            <report test="true()">
+                Element 'ram:InvoiceIssuerReference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:InvoiceReferencedDocument">
+            <report test="true()">
+                Element 'ram:InvoiceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:PayableSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PayableSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:PaymentReference">
+            <report test="true()">
+                Element 'ram:PaymentReference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:PurchaseSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PurchaseSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:AmountTypeCode">
+            <report test="true()">
+                Element 'ram:AmountTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:CostReferenceDimensionPattern">
+            <report test="true()">
+                Element 'ram:CostReferenceDimensionPattern' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:SetTriggerCode">
+            <report test="true()">
+                Element 'ram:SetTriggerCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SalesSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SalesSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedFinancialAdjustment">
+            <report test="true()">
+                Element 'ram:SpecifiedFinancialAdjustment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedLogisticsServiceCharge">
+            <report test="true()">
+                Element 'ram:SpecifiedLogisticsServiceCharge' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge">
+            <assert test="count(ram:ActualAmount)=1">
+                Element 'ram:ActualAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:ActualTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax">
+            <report test="true()">
+                Element 'ram:CategoryTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator/udt:IndicatorString">
+            <report test="true()">
+                Element 'udt:IndicatorString' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:PrepaidIndicator">
+            <report test="true()">
+                Element 'ram:PrepaidIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradePaymentTerms">
+            <report test="true()">
+                Element 'ram:SpecifiedTradePaymentTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementFinancialCard">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeSettlementFinancialCard' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation">
+            <assert test="count(ram:LineTotalAmount)=1">
+                Element 'ram:LineTotalAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:AllowanceTotalAmount">
+            <report test="true()">
+                Element 'ram:AllowanceTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:ChargeTotalAmount">
+            <report test="true()">
+                Element 'ram:ChargeTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:GrandTotalAmount">
+            <report test="true()">
+                Element 'ram:GrandTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:GrossLineTotalAmount">
+            <report test="true()">
+                Element 'ram:GrossLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:NetIncludingTaxesLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetIncludingTaxesLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:NetLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:ProductWeightLossInformationAmount">
+            <report test="true()">
+                Element 'ram:ProductWeightLossInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TaxBasisTotalAmount">
+            <report test="true()">
+                Element 'ram:TaxBasisTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TaxTotalAmount">
+            <report test="true()">
+                Element 'ram:TaxTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalAllowanceChargeAmount">
+            <report test="true()">
+                Element 'ram:TotalAllowanceChargeAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalRetailValueInformationAmount">
+            <report test="true()">
+                Element 'ram:TotalRetailValueInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SubtotalCalculatedTradeTax">
+            <report test="true()">
+                Element 'ram:SubtotalCalculatedTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:TotalAdjustmentAmount">
+            <report test="true()">
+                Element 'ram:TotalAdjustmentAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct">
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:AdditionalReferenceReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferenceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableMaterialGoodsCharacteristic">
+            <report test="true()">
+                Element 'ram:ApplicableMaterialGoodsCharacteristic' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic">
+            <assert test="count(ram:Description)=1">
+                Element 'ram:Description' must occur exactly 1 times.</assert>
+            <assert test="count(ram:Value)=1">
+                Element 'ram:Value' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ApplicableProductCharacteristicCondition">
+            <report test="true()">
+                Element 'ram:ApplicableProductCharacteristicCondition' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ApplicableReferencedStandard">
+            <report test="true()">
+                Element 'ram:ApplicableReferencedStandard' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ContentTypeCode">
+            <report test="true()">
+                Element 'ram:ContentTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Description[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Description[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:MeasurementMethodCode">
+            <report test="true()">
+                Element 'ram:MeasurementMethodCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ValueCode">
+            <report test="true()">
+                Element 'ram:ValueCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ValueDateTime">
+            <report test="true()">
+                Element 'ram:ValueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ValueIndicator">
+            <report test="true()">
+                Element 'ram:ValueIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ValueMeasure">
+            <report test="true()">
+                Element 'ram:ValueMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ValueSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:ValueSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Value[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Value[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:AreaDensityMeasure">
+            <report test="true()">
+                Element 'ram:AreaDensityMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BrandName">
+            <report test="true()">
+                Element 'ram:BrandName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BrandOwnerTradeParty">
+            <report test="true()">
+                Element 'ram:BrandOwnerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:CertificationEvidenceReferenceReferencedDocument">
+            <report test="true()">
+                Element 'ram:CertificationEvidenceReferenceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ColourCode">
+            <report test="true()">
+                Element 'ram:ColourCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ColourDescription">
+            <report test="true()">
+                Element 'ram:ColourDescription' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Description[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Description[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification">
+            <assert test="count(ram:ClassCode)=1">
+                Element 'ram:ClassCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ApplicableReferencedStandard">
+            <report test="true()">
+                Element 'ram:ApplicableReferencedStandard' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode">
+            <let name="codeValue5" value="@listID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=5]/enumeration[@value=$codeValue5]">
+                Value of 'ram:ClassCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@listID]">
+            <let name="codeValue6" value="@listID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=6]/enumeration[@value=$codeValue6]">
+                Value of '@listID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassName">
+            <report test="true()">
+                Element 'ram:ClassName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassProductCharacteristic">
+            <report test="true()">
+                Element 'ram:ClassProductCharacteristic' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:SubClassCode">
+            <report test="true()">
+                Element 'ram:SubClassCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:SystemID">
+            <report test="true()">
+                Element 'ram:SystemID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:SystemName">
+            <report test="true()">
+                Element 'ram:SystemName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Designation">
+            <report test="true()">
+                Element 'ram:Designation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DrainedNetWeightMeasure">
+            <report test="true()">
+                Element 'ram:DrainedNetWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:EndItemName">
+            <report test="true()">
+                Element 'ram:EndItemName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:EndItemTypeCode">
+            <report test="true()">
+                Element 'ram:EndItemTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:FormattedCancellationAnnouncedLaunchDateTime">
+            <report test="true()">
+                Element 'ram:FormattedCancellationAnnouncedLaunchDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:FormattedLatestProductDataChangeDateTime">
+            <report test="true()">
+                Element 'ram:FormattedLatestProductDataChangeDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeID]">
+            <let name="codeValue4" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EN16931_codedb.xml&apos;)//cl[@id=4]/enumeration[@value=$codeValue4]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GrossWeightMeasure">
+            <report test="true()">
+                Element 'ram:GrossWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct">
+            <report test="true()">
+                Element 'ram:IncludedReferencedProduct' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IndividualTradeProductInstance">
+            <report test="true()">
+                Element 'ram:IndividualTradeProductInstance' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:InformationNote">
+            <report test="true()">
+                Element 'ram:InformationNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:InspectionReferenceReferencedDocument">
+            <report test="true()">
+                Element 'ram:InspectionReferenceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:LegalRightsOwnerTradeParty">
+            <report test="true()">
+                Element 'ram:LegalRightsOwnerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:LinearSpatialDimension">
+            <report test="true()">
+                Element 'ram:LinearSpatialDimension' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:MSDSReferenceReferencedDocument">
+            <report test="true()">
+                Element 'ram:MSDSReferenceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ManufacturerAssignedID">
+            <report test="true()">
+                Element 'ram:ManufacturerAssignedID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ManufacturerTradeParty">
+            <report test="true()">
+                Element 'ram:ManufacturerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:MaximumLinearSpatialDimension">
+            <report test="true()">
+                Element 'ram:MaximumLinearSpatialDimension' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:MinimumLinearSpatialDimension">
+            <report test="true()">
+                Element 'ram:MinimumLinearSpatialDimension' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:NetWeightMeasure">
+            <report test="true()">
+                Element 'ram:NetWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry/ram:SubordinateTradeCountrySubDivision">
+            <report test="true()">
+                Element 'ram:SubordinateTradeCountrySubDivision' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:PresentationSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:PresentationSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ProductGroupID">
+            <report test="true()">
+                Element 'ram:ProductGroupID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SubBrandName">
+            <report test="true()">
+                Element 'ram:SubBrandName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:TradeName">
+            <report test="true()">
+                Element 'ram:TradeName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:UseDescription">
+            <report test="true()">
+                Element 'ram:UseDescription' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:VariableMeasureIndicator">
+            <report test="true()">
+                Element 'ram:VariableMeasureIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ValuationBreakdownStatement">
+            <report test="true()">
+                Element 'rsm:ValuationBreakdownStatement' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+</schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931_codedb.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931_codedb.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EN16931_codedb.xml	(revision 8435)
@@ -0,0 +1,5030 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<codedb>
+    <cl id="1">
+        <enumeration value="80"/>
+        <enumeration value="81"/>
+        <enumeration value="82"/>
+        <enumeration value="83"/>
+        <enumeration value="84"/>
+        <enumeration value="130"/>
+        <enumeration value="202"/>
+        <enumeration value="203"/>
+        <enumeration value="204"/>
+        <enumeration value="211"/>
+        <enumeration value="261"/>
+        <enumeration value="262"/>
+        <enumeration value="295"/>
+        <enumeration value="296"/>
+        <enumeration value="308"/>
+        <enumeration value="325"/>
+        <enumeration value="326"/>
+        <enumeration value="380"/>
+        <enumeration value="381"/>
+        <enumeration value="383"/>
+        <enumeration value="384"/>
+        <enumeration value="385"/>
+        <enumeration value="386"/>
+        <enumeration value="387"/>
+        <enumeration value="388"/>
+        <enumeration value="389"/>
+        <enumeration value="390"/>
+        <enumeration value="393"/>
+        <enumeration value="394"/>
+        <enumeration value="395"/>
+        <enumeration value="396"/>
+        <enumeration value="420"/>
+        <enumeration value="456"/>
+        <enumeration value="457"/>
+        <enumeration value="458"/>
+        <enumeration value="527"/>
+        <enumeration value="575"/>
+        <enumeration value="623"/>
+        <enumeration value="633"/>
+        <enumeration value="751"/>
+        <enumeration value="780"/>
+        <enumeration value="935"/>
+    </cl>
+    <cl id="2">
+        <enumeration value="102"/>
+    </cl>
+    <cl id="3">
+        <enumeration value="AAA"/>
+        <enumeration value="AAB"/>
+        <enumeration value="AAC"/>
+        <enumeration value="AAD"/>
+        <enumeration value="AAE"/>
+        <enumeration value="AAF"/>
+        <enumeration value="AAG"/>
+        <enumeration value="AAI"/>
+        <enumeration value="AAJ"/>
+        <enumeration value="AAK"/>
+        <enumeration value="AAL"/>
+        <enumeration value="AAM"/>
+        <enumeration value="AAN"/>
+        <enumeration value="AAO"/>
+        <enumeration value="AAP"/>
+        <enumeration value="AAQ"/>
+        <enumeration value="AAR"/>
+        <enumeration value="AAS"/>
+        <enumeration value="AAT"/>
+        <enumeration value="AAU"/>
+        <enumeration value="AAV"/>
+        <enumeration value="AAW"/>
+        <enumeration value="AAX"/>
+        <enumeration value="AAY"/>
+        <enumeration value="AAZ"/>
+        <enumeration value="ABA"/>
+        <enumeration value="ABB"/>
+        <enumeration value="ABC"/>
+        <enumeration value="ABD"/>
+        <enumeration value="ABE"/>
+        <enumeration value="ABF"/>
+        <enumeration value="ABG"/>
+        <enumeration value="ABH"/>
+        <enumeration value="ABI"/>
+        <enumeration value="ABJ"/>
+        <enumeration value="ABK"/>
+        <enumeration value="ABL"/>
+        <enumeration value="ABM"/>
+        <enumeration value="ABN"/>
+        <enumeration value="ABO"/>
+        <enumeration value="ABP"/>
+        <enumeration value="ABQ"/>
+        <enumeration value="ABR"/>
+        <enumeration value="ABS"/>
+        <enumeration value="ABT"/>
+        <enumeration value="ABU"/>
+        <enumeration value="ABV"/>
+        <enumeration value="ABW"/>
+        <enumeration value="ABX"/>
+        <enumeration value="ABZ"/>
+        <enumeration value="ACA"/>
+        <enumeration value="ACB"/>
+        <enumeration value="ACC"/>
+        <enumeration value="ACD"/>
+        <enumeration value="ACE"/>
+        <enumeration value="ACF"/>
+        <enumeration value="ACG"/>
+        <enumeration value="ACH"/>
+        <enumeration value="ACI"/>
+        <enumeration value="ACJ"/>
+        <enumeration value="ACK"/>
+        <enumeration value="ACL"/>
+        <enumeration value="ACM"/>
+        <enumeration value="ACN"/>
+        <enumeration value="ACO"/>
+        <enumeration value="ACP"/>
+        <enumeration value="ACQ"/>
+        <enumeration value="ACR"/>
+        <enumeration value="ACS"/>
+        <enumeration value="ACT"/>
+        <enumeration value="ACU"/>
+        <enumeration value="ACV"/>
+        <enumeration value="ACW"/>
+        <enumeration value="ACX"/>
+        <enumeration value="ACY"/>
+        <enumeration value="ACZ"/>
+        <enumeration value="ADA"/>
+        <enumeration value="ADB"/>
+        <enumeration value="ADC"/>
+        <enumeration value="ADD"/>
+        <enumeration value="ADE"/>
+        <enumeration value="ADF"/>
+        <enumeration value="ADG"/>
+        <enumeration value="ADH"/>
+        <enumeration value="ADI"/>
+        <enumeration value="ADJ"/>
+        <enumeration value="ADK"/>
+        <enumeration value="ADL"/>
+        <enumeration value="ADM"/>
+        <enumeration value="ADN"/>
+        <enumeration value="ADO"/>
+        <enumeration value="ADP"/>
+        <enumeration value="ADQ"/>
+        <enumeration value="ADR"/>
+        <enumeration value="ADS"/>
+        <enumeration value="ADT"/>
+        <enumeration value="ADU"/>
+        <enumeration value="ADV"/>
+        <enumeration value="ADW"/>
+        <enumeration value="ADX"/>
+        <enumeration value="ADY"/>
+        <enumeration value="ADZ"/>
+        <enumeration value="AEA"/>
+        <enumeration value="AEB"/>
+        <enumeration value="AEC"/>
+        <enumeration value="AED"/>
+        <enumeration value="AEE"/>
+        <enumeration value="AEF"/>
+        <enumeration value="AEG"/>
+        <enumeration value="AEH"/>
+        <enumeration value="AEI"/>
+        <enumeration value="AEJ"/>
+        <enumeration value="AEK"/>
+        <enumeration value="AEL"/>
+        <enumeration value="AEM"/>
+        <enumeration value="AEN"/>
+        <enumeration value="AEO"/>
+        <enumeration value="AEP"/>
+        <enumeration value="AEQ"/>
+        <enumeration value="AER"/>
+        <enumeration value="AES"/>
+        <enumeration value="AET"/>
+        <enumeration value="AEU"/>
+        <enumeration value="AEV"/>
+        <enumeration value="AEW"/>
+        <enumeration value="AEX"/>
+        <enumeration value="AEY"/>
+        <enumeration value="AEZ"/>
+        <enumeration value="AFA"/>
+        <enumeration value="AFB"/>
+        <enumeration value="AFC"/>
+        <enumeration value="AFD"/>
+        <enumeration value="AFE"/>
+        <enumeration value="AFF"/>
+        <enumeration value="AFG"/>
+        <enumeration value="AFH"/>
+        <enumeration value="AFI"/>
+        <enumeration value="AFJ"/>
+        <enumeration value="AFK"/>
+        <enumeration value="AFL"/>
+        <enumeration value="AFM"/>
+        <enumeration value="AFN"/>
+        <enumeration value="AFO"/>
+        <enumeration value="AFP"/>
+        <enumeration value="AFQ"/>
+        <enumeration value="AFR"/>
+        <enumeration value="AFS"/>
+        <enumeration value="AFT"/>
+        <enumeration value="AFU"/>
+        <enumeration value="AFV"/>
+        <enumeration value="AFW"/>
+        <enumeration value="AFX"/>
+        <enumeration value="AFY"/>
+        <enumeration value="AFZ"/>
+        <enumeration value="AGA"/>
+        <enumeration value="AGB"/>
+        <enumeration value="AGC"/>
+        <enumeration value="AGD"/>
+        <enumeration value="AGE"/>
+        <enumeration value="AGF"/>
+        <enumeration value="AGG"/>
+        <enumeration value="AGH"/>
+        <enumeration value="AGI"/>
+        <enumeration value="AGJ"/>
+        <enumeration value="AGK"/>
+        <enumeration value="AGL"/>
+        <enumeration value="AGM"/>
+        <enumeration value="AGN"/>
+        <enumeration value="AGO"/>
+        <enumeration value="AGP"/>
+        <enumeration value="AGQ"/>
+        <enumeration value="AGR"/>
+        <enumeration value="AGS"/>
+        <enumeration value="AGT"/>
+        <enumeration value="AGU"/>
+        <enumeration value="AGV"/>
+        <enumeration value="AGW"/>
+        <enumeration value="AGX"/>
+        <enumeration value="AGY"/>
+        <enumeration value="AGZ"/>
+        <enumeration value="AHA"/>
+        <enumeration value="AHB"/>
+        <enumeration value="AHC"/>
+        <enumeration value="AHD"/>
+        <enumeration value="AHE"/>
+        <enumeration value="AHF"/>
+        <enumeration value="AHG"/>
+        <enumeration value="AHH"/>
+        <enumeration value="AHI"/>
+        <enumeration value="AHJ"/>
+        <enumeration value="AHK"/>
+        <enumeration value="AHL"/>
+        <enumeration value="AHM"/>
+        <enumeration value="AHN"/>
+        <enumeration value="AHO"/>
+        <enumeration value="AHP"/>
+        <enumeration value="AHQ"/>
+        <enumeration value="AHR"/>
+        <enumeration value="AHS"/>
+        <enumeration value="AHT"/>
+        <enumeration value="AHU"/>
+        <enumeration value="AHV"/>
+        <enumeration value="AHW"/>
+        <enumeration value="AHX"/>
+        <enumeration value="AHY"/>
+        <enumeration value="AHZ"/>
+        <enumeration value="AIA"/>
+        <enumeration value="AIB"/>
+        <enumeration value="AIC"/>
+        <enumeration value="AID"/>
+        <enumeration value="AIE"/>
+        <enumeration value="AIF"/>
+        <enumeration value="AIG"/>
+        <enumeration value="AIH"/>
+        <enumeration value="AII"/>
+        <enumeration value="AIJ"/>
+        <enumeration value="AIK"/>
+        <enumeration value="AIL"/>
+        <enumeration value="AIM"/>
+        <enumeration value="AIN"/>
+        <enumeration value="AIO"/>
+        <enumeration value="AIP"/>
+        <enumeration value="AIQ"/>
+        <enumeration value="AIR"/>
+        <enumeration value="AIS"/>
+        <enumeration value="AIT"/>
+        <enumeration value="AIU"/>
+        <enumeration value="AIV"/>
+        <enumeration value="AIW"/>
+        <enumeration value="AIX"/>
+        <enumeration value="AIY"/>
+        <enumeration value="AIZ"/>
+        <enumeration value="AJA"/>
+        <enumeration value="AJB"/>
+        <enumeration value="ALC"/>
+        <enumeration value="ALD"/>
+        <enumeration value="ALE"/>
+        <enumeration value="ALF"/>
+        <enumeration value="ALG"/>
+        <enumeration value="ALH"/>
+        <enumeration value="ALI"/>
+        <enumeration value="ALJ"/>
+        <enumeration value="ALK"/>
+        <enumeration value="ALL"/>
+        <enumeration value="ALM"/>
+        <enumeration value="ALN"/>
+        <enumeration value="ALO"/>
+        <enumeration value="ALP"/>
+        <enumeration value="ALQ"/>
+        <enumeration value="ARR"/>
+        <enumeration value="ARS"/>
+        <enumeration value="AUT"/>
+        <enumeration value="AUU"/>
+        <enumeration value="AUV"/>
+        <enumeration value="AUW"/>
+        <enumeration value="AUX"/>
+        <enumeration value="AUY"/>
+        <enumeration value="AUZ"/>
+        <enumeration value="AVA"/>
+        <enumeration value="AVB"/>
+        <enumeration value="AVC"/>
+        <enumeration value="AVD"/>
+        <enumeration value="AVE"/>
+        <enumeration value="AVF"/>
+        <enumeration value="BAG"/>
+        <enumeration value="BAH"/>
+        <enumeration value="BAI"/>
+        <enumeration value="BAJ"/>
+        <enumeration value="BAK"/>
+        <enumeration value="BAL"/>
+        <enumeration value="BAM"/>
+        <enumeration value="BAN"/>
+        <enumeration value="BAO"/>
+        <enumeration value="BAP"/>
+        <enumeration value="BAQ"/>
+        <enumeration value="BAR"/>
+        <enumeration value="BAS"/>
+        <enumeration value="BLC"/>
+        <enumeration value="BLD"/>
+        <enumeration value="BLE"/>
+        <enumeration value="BLF"/>
+        <enumeration value="BLG"/>
+        <enumeration value="BLH"/>
+        <enumeration value="BLI"/>
+        <enumeration value="BLJ"/>
+        <enumeration value="BLK"/>
+        <enumeration value="BLL"/>
+        <enumeration value="BLM"/>
+        <enumeration value="BLN"/>
+        <enumeration value="BLO"/>
+        <enumeration value="BLP"/>
+        <enumeration value="BLQ"/>
+        <enumeration value="BLR"/>
+        <enumeration value="BLS"/>
+        <enumeration value="BLT"/>
+        <enumeration value="BLU"/>
+        <enumeration value="BLV"/>
+        <enumeration value="BLW"/>
+        <enumeration value="BLX"/>
+        <enumeration value="BLY"/>
+        <enumeration value="BLZ"/>
+        <enumeration value="BMA"/>
+        <enumeration value="BMB"/>
+        <enumeration value="BMC"/>
+        <enumeration value="BMD"/>
+        <enumeration value="BME"/>
+        <enumeration value="CCI"/>
+        <enumeration value="CEX"/>
+        <enumeration value="CHG"/>
+        <enumeration value="CIP"/>
+        <enumeration value="CLP"/>
+        <enumeration value="CLR"/>
+        <enumeration value="COI"/>
+        <enumeration value="CUR"/>
+        <enumeration value="CUS"/>
+        <enumeration value="DAR"/>
+        <enumeration value="DCL"/>
+        <enumeration value="DEL"/>
+        <enumeration value="DIN"/>
+        <enumeration value="DOC"/>
+        <enumeration value="DUT"/>
+        <enumeration value="EUR"/>
+        <enumeration value="FBC"/>
+        <enumeration value="GBL"/>
+        <enumeration value="GEN"/>
+        <enumeration value="GS7"/>
+        <enumeration value="HAN"/>
+        <enumeration value="HAZ"/>
+        <enumeration value="ICN"/>
+        <enumeration value="IIN"/>
+        <enumeration value="IMI"/>
+        <enumeration value="IND"/>
+        <enumeration value="INS"/>
+        <enumeration value="INV"/>
+        <enumeration value="IRP"/>
+        <enumeration value="ITR"/>
+        <enumeration value="ITS"/>
+        <enumeration value="LAN"/>
+        <enumeration value="LIN"/>
+        <enumeration value="LOI"/>
+        <enumeration value="MCO"/>
+        <enumeration value="MDH"/>
+        <enumeration value="MKS"/>
+        <enumeration value="ORI"/>
+        <enumeration value="OSI"/>
+        <enumeration value="PAC"/>
+        <enumeration value="PAI"/>
+        <enumeration value="PAY"/>
+        <enumeration value="PKG"/>
+        <enumeration value="PKT"/>
+        <enumeration value="PMD"/>
+        <enumeration value="PMT"/>
+        <enumeration value="PRD"/>
+        <enumeration value="PRF"/>
+        <enumeration value="PRI"/>
+        <enumeration value="PUR"/>
+        <enumeration value="QIN"/>
+        <enumeration value="QQD"/>
+        <enumeration value="QUT"/>
+        <enumeration value="RAH"/>
+        <enumeration value="REG"/>
+        <enumeration value="RET"/>
+        <enumeration value="REV"/>
+        <enumeration value="RQR"/>
+        <enumeration value="SAF"/>
+        <enumeration value="SIC"/>
+        <enumeration value="SIN"/>
+        <enumeration value="SLR"/>
+        <enumeration value="SPA"/>
+        <enumeration value="SPG"/>
+        <enumeration value="SPH"/>
+        <enumeration value="SPP"/>
+        <enumeration value="SPT"/>
+        <enumeration value="SRN"/>
+        <enumeration value="SSR"/>
+        <enumeration value="SUR"/>
+        <enumeration value="TCA"/>
+        <enumeration value="TDT"/>
+        <enumeration value="TRA"/>
+        <enumeration value="TRR"/>
+        <enumeration value="TXD"/>
+        <enumeration value="WHI"/>
+        <enumeration value="ZZZ"/>
+    </cl>
+    <cl id="4">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="5">
+        <enumeration value="AA"/>
+        <enumeration value="AB"/>
+        <enumeration value="AC"/>
+        <enumeration value="AD"/>
+        <enumeration value="AE"/>
+        <enumeration value="AF"/>
+        <enumeration value="AG"/>
+        <enumeration value="AH"/>
+        <enumeration value="AI"/>
+        <enumeration value="AJ"/>
+        <enumeration value="AK"/>
+        <enumeration value="AL"/>
+        <enumeration value="AM"/>
+        <enumeration value="AN"/>
+        <enumeration value="AO"/>
+        <enumeration value="AP"/>
+        <enumeration value="AQ"/>
+        <enumeration value="AR"/>
+        <enumeration value="AS"/>
+        <enumeration value="AT"/>
+        <enumeration value="AU"/>
+        <enumeration value="AV"/>
+        <enumeration value="AW"/>
+        <enumeration value="AX"/>
+        <enumeration value="AY"/>
+        <enumeration value="AZ"/>
+        <enumeration value="BA"/>
+        <enumeration value="BB"/>
+        <enumeration value="BC"/>
+        <enumeration value="BD"/>
+        <enumeration value="BE"/>
+        <enumeration value="BF"/>
+        <enumeration value="BG"/>
+        <enumeration value="BH"/>
+        <enumeration value="BI"/>
+        <enumeration value="BJ"/>
+        <enumeration value="BK"/>
+        <enumeration value="BL"/>
+        <enumeration value="BM"/>
+        <enumeration value="BN"/>
+        <enumeration value="BO"/>
+        <enumeration value="BP"/>
+        <enumeration value="BQ"/>
+        <enumeration value="BR"/>
+        <enumeration value="BS"/>
+        <enumeration value="BT"/>
+        <enumeration value="BU"/>
+        <enumeration value="BV"/>
+        <enumeration value="BW"/>
+        <enumeration value="BX"/>
+        <enumeration value="BY"/>
+        <enumeration value="BZ"/>
+        <enumeration value="CC"/>
+        <enumeration value="CG"/>
+        <enumeration value="CL"/>
+        <enumeration value="CR"/>
+        <enumeration value="CV"/>
+        <enumeration value="DR"/>
+        <enumeration value="DW"/>
+        <enumeration value="EC"/>
+        <enumeration value="EF"/>
+        <enumeration value="EN"/>
+        <enumeration value="FS"/>
+        <enumeration value="GB"/>
+        <enumeration value="GN"/>
+        <enumeration value="GS"/>
+        <enumeration value="HS"/>
+        <enumeration value="IB"/>
+        <enumeration value="IN"/>
+        <enumeration value="IS"/>
+        <enumeration value="IT"/>
+        <enumeration value="IZ"/>
+        <enumeration value="MA"/>
+        <enumeration value="MF"/>
+        <enumeration value="MN"/>
+        <enumeration value="MP"/>
+        <enumeration value="NB"/>
+        <enumeration value="ON"/>
+        <enumeration value="PD"/>
+        <enumeration value="PL"/>
+        <enumeration value="PO"/>
+        <enumeration value="PV"/>
+        <enumeration value="QS"/>
+        <enumeration value="RC"/>
+        <enumeration value="RN"/>
+        <enumeration value="RU"/>
+        <enumeration value="RY"/>
+        <enumeration value="SA"/>
+        <enumeration value="SG"/>
+        <enumeration value="SK"/>
+        <enumeration value="SN"/>
+        <enumeration value="SRS"/>
+        <enumeration value="SRT"/>
+        <enumeration value="SRU"/>
+        <enumeration value="SRV"/>
+        <enumeration value="SRW"/>
+        <enumeration value="SRX"/>
+        <enumeration value="SRY"/>
+        <enumeration value="SRZ"/>
+        <enumeration value="SS"/>
+        <enumeration value="SSA"/>
+        <enumeration value="SSB"/>
+        <enumeration value="SSC"/>
+        <enumeration value="SSD"/>
+        <enumeration value="SSE"/>
+        <enumeration value="SSF"/>
+        <enumeration value="SSG"/>
+        <enumeration value="SSH"/>
+        <enumeration value="SSI"/>
+        <enumeration value="SSJ"/>
+        <enumeration value="SSK"/>
+        <enumeration value="SSL"/>
+        <enumeration value="SSM"/>
+        <enumeration value="SSN"/>
+        <enumeration value="SSO"/>
+        <enumeration value="SSP"/>
+        <enumeration value="SSQ"/>
+        <enumeration value="SSR"/>
+        <enumeration value="SSS"/>
+        <enumeration value="SST"/>
+        <enumeration value="SSU"/>
+        <enumeration value="SSV"/>
+        <enumeration value="SSW"/>
+        <enumeration value="SSX"/>
+        <enumeration value="SSY"/>
+        <enumeration value="SSZ"/>
+        <enumeration value="ST"/>
+        <enumeration value="STA"/>
+        <enumeration value="STB"/>
+        <enumeration value="STC"/>
+        <enumeration value="STD"/>
+        <enumeration value="STE"/>
+        <enumeration value="STF"/>
+        <enumeration value="STG"/>
+        <enumeration value="STH"/>
+        <enumeration value="STI"/>
+        <enumeration value="STJ"/>
+        <enumeration value="STK"/>
+        <enumeration value="STL"/>
+        <enumeration value="STM"/>
+        <enumeration value="STN"/>
+        <enumeration value="STO"/>
+        <enumeration value="STP"/>
+        <enumeration value="STQ"/>
+        <enumeration value="STR"/>
+        <enumeration value="STS"/>
+        <enumeration value="STT"/>
+        <enumeration value="STU"/>
+        <enumeration value="STV"/>
+        <enumeration value="STW"/>
+        <enumeration value="STX"/>
+        <enumeration value="STY"/>
+        <enumeration value="STZ"/>
+        <enumeration value="SUA"/>
+        <enumeration value="SUB"/>
+        <enumeration value="SUC"/>
+        <enumeration value="SUD"/>
+        <enumeration value="SUE"/>
+        <enumeration value="SUF"/>
+        <enumeration value="SUG"/>
+        <enumeration value="SUH"/>
+        <enumeration value="SUI"/>
+        <enumeration value="SUJ"/>
+        <enumeration value="SUK"/>
+        <enumeration value="SUL"/>
+        <enumeration value="SUM"/>
+        <enumeration value="TG"/>
+        <enumeration value="TSN"/>
+        <enumeration value="TSO"/>
+        <enumeration value="TSP"/>
+        <enumeration value="TST"/>
+        <enumeration value="UA"/>
+        <enumeration value="UP"/>
+        <enumeration value="VN"/>
+        <enumeration value="VP"/>
+        <enumeration value="VS"/>
+        <enumeration value="VX"/>
+        <enumeration value="ZZZ"/>
+    </cl>
+    <cl id="6">
+        <enumeration value="AA"/>
+        <enumeration value="AB"/>
+        <enumeration value="AC"/>
+        <enumeration value="AD"/>
+        <enumeration value="AE"/>
+        <enumeration value="AF"/>
+        <enumeration value="AG"/>
+        <enumeration value="AH"/>
+        <enumeration value="AI"/>
+        <enumeration value="AJ"/>
+        <enumeration value="AK"/>
+        <enumeration value="AL"/>
+        <enumeration value="AM"/>
+        <enumeration value="AN"/>
+        <enumeration value="AO"/>
+        <enumeration value="AP"/>
+        <enumeration value="AQ"/>
+        <enumeration value="AR"/>
+        <enumeration value="AS"/>
+        <enumeration value="AT"/>
+        <enumeration value="AU"/>
+        <enumeration value="AV"/>
+        <enumeration value="AW"/>
+        <enumeration value="AX"/>
+        <enumeration value="AY"/>
+        <enumeration value="AZ"/>
+        <enumeration value="BA"/>
+        <enumeration value="BB"/>
+        <enumeration value="BC"/>
+        <enumeration value="BD"/>
+        <enumeration value="BE"/>
+        <enumeration value="BF"/>
+        <enumeration value="BG"/>
+        <enumeration value="BH"/>
+        <enumeration value="BI"/>
+        <enumeration value="BJ"/>
+        <enumeration value="BK"/>
+        <enumeration value="BL"/>
+        <enumeration value="BM"/>
+        <enumeration value="BN"/>
+        <enumeration value="BO"/>
+        <enumeration value="BP"/>
+        <enumeration value="BQ"/>
+        <enumeration value="BR"/>
+        <enumeration value="BS"/>
+        <enumeration value="BT"/>
+        <enumeration value="BU"/>
+        <enumeration value="BV"/>
+        <enumeration value="BW"/>
+        <enumeration value="BX"/>
+        <enumeration value="BY"/>
+        <enumeration value="BZ"/>
+        <enumeration value="CC"/>
+        <enumeration value="CG"/>
+        <enumeration value="CL"/>
+        <enumeration value="CR"/>
+        <enumeration value="CV"/>
+        <enumeration value="DR"/>
+        <enumeration value="DW"/>
+        <enumeration value="EC"/>
+        <enumeration value="EF"/>
+        <enumeration value="EN"/>
+        <enumeration value="FS"/>
+        <enumeration value="GB"/>
+        <enumeration value="GN"/>
+        <enumeration value="GS"/>
+        <enumeration value="HS"/>
+        <enumeration value="IB"/>
+        <enumeration value="IN"/>
+        <enumeration value="IS"/>
+        <enumeration value="IT"/>
+        <enumeration value="IZ"/>
+        <enumeration value="MA"/>
+        <enumeration value="MF"/>
+        <enumeration value="MN"/>
+        <enumeration value="MP"/>
+        <enumeration value="NB"/>
+        <enumeration value="ON"/>
+        <enumeration value="PD"/>
+        <enumeration value="PL"/>
+        <enumeration value="PO"/>
+        <enumeration value="PV"/>
+        <enumeration value="QS"/>
+        <enumeration value="RC"/>
+        <enumeration value="RN"/>
+        <enumeration value="RU"/>
+        <enumeration value="RY"/>
+        <enumeration value="SA"/>
+        <enumeration value="SG"/>
+        <enumeration value="SK"/>
+        <enumeration value="SN"/>
+        <enumeration value="SRS"/>
+        <enumeration value="SRT"/>
+        <enumeration value="SRU"/>
+        <enumeration value="SRV"/>
+        <enumeration value="SRW"/>
+        <enumeration value="SRX"/>
+        <enumeration value="SRY"/>
+        <enumeration value="SRZ"/>
+        <enumeration value="SS"/>
+        <enumeration value="SSA"/>
+        <enumeration value="SSB"/>
+        <enumeration value="SSC"/>
+        <enumeration value="SSD"/>
+        <enumeration value="SSE"/>
+        <enumeration value="SSF"/>
+        <enumeration value="SSG"/>
+        <enumeration value="SSH"/>
+        <enumeration value="SSI"/>
+        <enumeration value="SSJ"/>
+        <enumeration value="SSK"/>
+        <enumeration value="SSL"/>
+        <enumeration value="SSM"/>
+        <enumeration value="SSN"/>
+        <enumeration value="SSO"/>
+        <enumeration value="SSP"/>
+        <enumeration value="SSQ"/>
+        <enumeration value="SSR"/>
+        <enumeration value="SSS"/>
+        <enumeration value="SST"/>
+        <enumeration value="SSU"/>
+        <enumeration value="SSV"/>
+        <enumeration value="SSW"/>
+        <enumeration value="SSX"/>
+        <enumeration value="SSY"/>
+        <enumeration value="SSZ"/>
+        <enumeration value="ST"/>
+        <enumeration value="STA"/>
+        <enumeration value="STB"/>
+        <enumeration value="STC"/>
+        <enumeration value="STD"/>
+        <enumeration value="STE"/>
+        <enumeration value="STF"/>
+        <enumeration value="STG"/>
+        <enumeration value="STH"/>
+        <enumeration value="STI"/>
+        <enumeration value="STJ"/>
+        <enumeration value="STK"/>
+        <enumeration value="STL"/>
+        <enumeration value="STM"/>
+        <enumeration value="STN"/>
+        <enumeration value="STO"/>
+        <enumeration value="STP"/>
+        <enumeration value="STQ"/>
+        <enumeration value="STR"/>
+        <enumeration value="STS"/>
+        <enumeration value="STT"/>
+        <enumeration value="STU"/>
+        <enumeration value="STV"/>
+        <enumeration value="STW"/>
+        <enumeration value="STX"/>
+        <enumeration value="STY"/>
+        <enumeration value="STZ"/>
+        <enumeration value="SUA"/>
+        <enumeration value="SUB"/>
+        <enumeration value="SUC"/>
+        <enumeration value="SUD"/>
+        <enumeration value="SUE"/>
+        <enumeration value="SUF"/>
+        <enumeration value="SUG"/>
+        <enumeration value="SUH"/>
+        <enumeration value="SUI"/>
+        <enumeration value="SUJ"/>
+        <enumeration value="SUK"/>
+        <enumeration value="SUL"/>
+        <enumeration value="SUM"/>
+        <enumeration value="TG"/>
+        <enumeration value="TSN"/>
+        <enumeration value="TSO"/>
+        <enumeration value="TSP"/>
+        <enumeration value="TST"/>
+        <enumeration value="UA"/>
+        <enumeration value="UP"/>
+        <enumeration value="VN"/>
+        <enumeration value="VP"/>
+        <enumeration value="VS"/>
+        <enumeration value="VX"/>
+        <enumeration value="ZZZ"/>
+    </cl>
+    <cl id="7">
+        <enumeration value="X1A"/>
+        <enumeration value="X1B"/>
+        <enumeration value="X1D"/>
+        <enumeration value="X1F"/>
+        <enumeration value="X1G"/>
+        <enumeration value="X1W"/>
+        <enumeration value="X2C"/>
+        <enumeration value="X3A"/>
+        <enumeration value="X3H"/>
+        <enumeration value="X43"/>
+        <enumeration value="X44"/>
+        <enumeration value="X4A"/>
+        <enumeration value="X4B"/>
+        <enumeration value="X4C"/>
+        <enumeration value="X4D"/>
+        <enumeration value="X4F"/>
+        <enumeration value="X4G"/>
+        <enumeration value="X4H"/>
+        <enumeration value="X5H"/>
+        <enumeration value="X5L"/>
+        <enumeration value="X5M"/>
+        <enumeration value="X6H"/>
+        <enumeration value="X6P"/>
+        <enumeration value="X7A"/>
+        <enumeration value="X7B"/>
+        <enumeration value="X8A"/>
+        <enumeration value="X8B"/>
+        <enumeration value="X8C"/>
+        <enumeration value="XAA"/>
+        <enumeration value="XAB"/>
+        <enumeration value="XAC"/>
+        <enumeration value="XAD"/>
+        <enumeration value="XAE"/>
+        <enumeration value="XAF"/>
+        <enumeration value="XAG"/>
+        <enumeration value="XAH"/>
+        <enumeration value="XAI"/>
+        <enumeration value="XAJ"/>
+        <enumeration value="XAL"/>
+        <enumeration value="XAM"/>
+        <enumeration value="XAP"/>
+        <enumeration value="XAT"/>
+        <enumeration value="XAV"/>
+        <enumeration value="XB4"/>
+        <enumeration value="XBA"/>
+        <enumeration value="XBB"/>
+        <enumeration value="XBC"/>
+        <enumeration value="XBD"/>
+        <enumeration value="XBE"/>
+        <enumeration value="XBF"/>
+        <enumeration value="XBG"/>
+        <enumeration value="XBH"/>
+        <enumeration value="XBI"/>
+        <enumeration value="XBJ"/>
+        <enumeration value="XBK"/>
+        <enumeration value="XBL"/>
+        <enumeration value="XBM"/>
+        <enumeration value="XBN"/>
+        <enumeration value="XBO"/>
+        <enumeration value="XBP"/>
+        <enumeration value="XBQ"/>
+        <enumeration value="XBR"/>
+        <enumeration value="XBS"/>
+        <enumeration value="XBT"/>
+        <enumeration value="XBU"/>
+        <enumeration value="XBV"/>
+        <enumeration value="XBW"/>
+        <enumeration value="XBX"/>
+        <enumeration value="XBY"/>
+        <enumeration value="XBZ"/>
+        <enumeration value="XCA"/>
+        <enumeration value="XCB"/>
+        <enumeration value="XCC"/>
+        <enumeration value="XCD"/>
+        <enumeration value="XCE"/>
+        <enumeration value="XCF"/>
+        <enumeration value="XCG"/>
+        <enumeration value="XCH"/>
+        <enumeration value="XCI"/>
+        <enumeration value="XCJ"/>
+        <enumeration value="XCK"/>
+        <enumeration value="XCL"/>
+        <enumeration value="XCM"/>
+        <enumeration value="XCN"/>
+        <enumeration value="XCO"/>
+        <enumeration value="XCP"/>
+        <enumeration value="XCQ"/>
+        <enumeration value="XCR"/>
+        <enumeration value="XCS"/>
+        <enumeration value="XCT"/>
+        <enumeration value="XCU"/>
+        <enumeration value="XCV"/>
+        <enumeration value="XCW"/>
+        <enumeration value="XCX"/>
+        <enumeration value="XCY"/>
+        <enumeration value="XCZ"/>
+        <enumeration value="XDA"/>
+        <enumeration value="XDB"/>
+        <enumeration value="XDC"/>
+        <enumeration value="XDG"/>
+        <enumeration value="XDH"/>
+        <enumeration value="XDI"/>
+        <enumeration value="XDJ"/>
+        <enumeration value="XDK"/>
+        <enumeration value="XDL"/>
+        <enumeration value="XDM"/>
+        <enumeration value="XDN"/>
+        <enumeration value="XDP"/>
+        <enumeration value="XDR"/>
+        <enumeration value="XDS"/>
+        <enumeration value="XDT"/>
+        <enumeration value="XDU"/>
+        <enumeration value="XDV"/>
+        <enumeration value="XDW"/>
+        <enumeration value="XDX"/>
+        <enumeration value="XDY"/>
+        <enumeration value="XEC"/>
+        <enumeration value="XED"/>
+        <enumeration value="XEE"/>
+        <enumeration value="XEF"/>
+        <enumeration value="XEG"/>
+        <enumeration value="XEH"/>
+        <enumeration value="XEI"/>
+        <enumeration value="XEN"/>
+        <enumeration value="XFB"/>
+        <enumeration value="XFC"/>
+        <enumeration value="XFD"/>
+        <enumeration value="XFE"/>
+        <enumeration value="XFI"/>
+        <enumeration value="XFL"/>
+        <enumeration value="XFO"/>
+        <enumeration value="XFP"/>
+        <enumeration value="XFR"/>
+        <enumeration value="XFT"/>
+        <enumeration value="XFW"/>
+        <enumeration value="XFX"/>
+        <enumeration value="XGB"/>
+        <enumeration value="XGI"/>
+        <enumeration value="XGL"/>
+        <enumeration value="XGR"/>
+        <enumeration value="XGU"/>
+        <enumeration value="XGY"/>
+        <enumeration value="XGZ"/>
+        <enumeration value="XHA"/>
+        <enumeration value="XHB"/>
+        <enumeration value="XHC"/>
+        <enumeration value="XHG"/>
+        <enumeration value="XHN"/>
+        <enumeration value="XHR"/>
+        <enumeration value="XIA"/>
+        <enumeration value="XIB"/>
+        <enumeration value="XIC"/>
+        <enumeration value="XID"/>
+        <enumeration value="XIE"/>
+        <enumeration value="XIF"/>
+        <enumeration value="XIG"/>
+        <enumeration value="XIH"/>
+        <enumeration value="XIK"/>
+        <enumeration value="XIL"/>
+        <enumeration value="XIN"/>
+        <enumeration value="XIZ"/>
+        <enumeration value="XJB"/>
+        <enumeration value="XJC"/>
+        <enumeration value="XJG"/>
+        <enumeration value="XJR"/>
+        <enumeration value="XJT"/>
+        <enumeration value="XJY"/>
+        <enumeration value="XKG"/>
+        <enumeration value="XKI"/>
+        <enumeration value="XLE"/>
+        <enumeration value="XLG"/>
+        <enumeration value="XLT"/>
+        <enumeration value="XLU"/>
+        <enumeration value="XLV"/>
+        <enumeration value="XLZ"/>
+        <enumeration value="XMA"/>
+        <enumeration value="XMB"/>
+        <enumeration value="XMC"/>
+        <enumeration value="XME"/>
+        <enumeration value="XMR"/>
+        <enumeration value="XMS"/>
+        <enumeration value="XMT"/>
+        <enumeration value="XMW"/>
+        <enumeration value="XMX"/>
+        <enumeration value="XNA"/>
+        <enumeration value="XNE"/>
+        <enumeration value="XNF"/>
+        <enumeration value="XNG"/>
+        <enumeration value="XNS"/>
+        <enumeration value="XNT"/>
+        <enumeration value="XNU"/>
+        <enumeration value="XNV"/>
+        <enumeration value="XOA"/>
+        <enumeration value="XOB"/>
+        <enumeration value="XOC"/>
+        <enumeration value="XOD"/>
+        <enumeration value="XOE"/>
+        <enumeration value="XOF"/>
+        <enumeration value="XOK"/>
+        <enumeration value="XOT"/>
+        <enumeration value="XOU"/>
+        <enumeration value="XP2"/>
+        <enumeration value="XPA"/>
+        <enumeration value="XPB"/>
+        <enumeration value="XPC"/>
+        <enumeration value="XPD"/>
+        <enumeration value="XPE"/>
+        <enumeration value="XPF"/>
+        <enumeration value="XPG"/>
+        <enumeration value="XPH"/>
+        <enumeration value="XPI"/>
+        <enumeration value="XPJ"/>
+        <enumeration value="XPK"/>
+        <enumeration value="XPL"/>
+        <enumeration value="XPN"/>
+        <enumeration value="XPO"/>
+        <enumeration value="XPP"/>
+        <enumeration value="XPR"/>
+        <enumeration value="XPT"/>
+        <enumeration value="XPU"/>
+        <enumeration value="XPV"/>
+        <enumeration value="XPX"/>
+        <enumeration value="XPY"/>
+        <enumeration value="XPZ"/>
+        <enumeration value="XQA"/>
+        <enumeration value="XQB"/>
+        <enumeration value="XQC"/>
+        <enumeration value="XQD"/>
+        <enumeration value="XQF"/>
+        <enumeration value="XQG"/>
+        <enumeration value="XQH"/>
+        <enumeration value="XQJ"/>
+        <enumeration value="XQK"/>
+        <enumeration value="XQL"/>
+        <enumeration value="XQM"/>
+        <enumeration value="XQN"/>
+        <enumeration value="XQP"/>
+        <enumeration value="XQQ"/>
+        <enumeration value="XQR"/>
+        <enumeration value="XQS"/>
+        <enumeration value="XRD"/>
+        <enumeration value="XRG"/>
+        <enumeration value="XRJ"/>
+        <enumeration value="XRK"/>
+        <enumeration value="XRL"/>
+        <enumeration value="XRO"/>
+        <enumeration value="XRT"/>
+        <enumeration value="XRZ"/>
+        <enumeration value="XSA"/>
+        <enumeration value="XSB"/>
+        <enumeration value="XSC"/>
+        <enumeration value="XSD"/>
+        <enumeration value="XSE"/>
+        <enumeration value="XSH"/>
+        <enumeration value="XSI"/>
+        <enumeration value="XSK"/>
+        <enumeration value="XSL"/>
+        <enumeration value="XSM"/>
+        <enumeration value="XSO"/>
+        <enumeration value="XSP"/>
+        <enumeration value="XSS"/>
+        <enumeration value="XST"/>
+        <enumeration value="XSU"/>
+        <enumeration value="XSV"/>
+        <enumeration value="XSW"/>
+        <enumeration value="XSY"/>
+        <enumeration value="XSZ"/>
+        <enumeration value="XT1"/>
+        <enumeration value="XTB"/>
+        <enumeration value="XTC"/>
+        <enumeration value="XTD"/>
+        <enumeration value="XTE"/>
+        <enumeration value="XTG"/>
+        <enumeration value="XTI"/>
+        <enumeration value="XTK"/>
+        <enumeration value="XTL"/>
+        <enumeration value="XTN"/>
+        <enumeration value="XTO"/>
+        <enumeration value="XTR"/>
+        <enumeration value="XTS"/>
+        <enumeration value="XTT"/>
+        <enumeration value="XTU"/>
+        <enumeration value="XTV"/>
+        <enumeration value="XTW"/>
+        <enumeration value="XTY"/>
+        <enumeration value="XTZ"/>
+        <enumeration value="XUC"/>
+        <enumeration value="XUN"/>
+        <enumeration value="XVA"/>
+        <enumeration value="XVG"/>
+        <enumeration value="XVI"/>
+        <enumeration value="XVK"/>
+        <enumeration value="XVL"/>
+        <enumeration value="XVN"/>
+        <enumeration value="XVO"/>
+        <enumeration value="XVP"/>
+        <enumeration value="XVQ"/>
+        <enumeration value="XVR"/>
+        <enumeration value="XVS"/>
+        <enumeration value="XVY"/>
+        <enumeration value="XWA"/>
+        <enumeration value="XWB"/>
+        <enumeration value="XWC"/>
+        <enumeration value="XWD"/>
+        <enumeration value="XWF"/>
+        <enumeration value="XWG"/>
+        <enumeration value="XWH"/>
+        <enumeration value="XWJ"/>
+        <enumeration value="XWK"/>
+        <enumeration value="XWL"/>
+        <enumeration value="XWM"/>
+        <enumeration value="XWN"/>
+        <enumeration value="XWP"/>
+        <enumeration value="XWQ"/>
+        <enumeration value="XWR"/>
+        <enumeration value="XWS"/>
+        <enumeration value="XWT"/>
+        <enumeration value="XWU"/>
+        <enumeration value="XWV"/>
+        <enumeration value="XWW"/>
+        <enumeration value="XWX"/>
+        <enumeration value="XWY"/>
+        <enumeration value="XWZ"/>
+        <enumeration value="XXA"/>
+        <enumeration value="XXB"/>
+        <enumeration value="XXC"/>
+        <enumeration value="XXD"/>
+        <enumeration value="XXF"/>
+        <enumeration value="XXG"/>
+        <enumeration value="XXH"/>
+        <enumeration value="XXJ"/>
+        <enumeration value="XXK"/>
+        <enumeration value="XYA"/>
+        <enumeration value="XYB"/>
+        <enumeration value="XYC"/>
+        <enumeration value="XYD"/>
+        <enumeration value="XYF"/>
+        <enumeration value="XYG"/>
+        <enumeration value="XYH"/>
+        <enumeration value="XYJ"/>
+        <enumeration value="XYK"/>
+        <enumeration value="XYL"/>
+        <enumeration value="XYM"/>
+        <enumeration value="XYN"/>
+        <enumeration value="XYP"/>
+        <enumeration value="XYQ"/>
+        <enumeration value="XYR"/>
+        <enumeration value="XYS"/>
+        <enumeration value="XYT"/>
+        <enumeration value="XYV"/>
+        <enumeration value="XYW"/>
+        <enumeration value="XYX"/>
+        <enumeration value="XYY"/>
+        <enumeration value="XYZ"/>
+        <enumeration value="XZA"/>
+        <enumeration value="XZB"/>
+        <enumeration value="XZC"/>
+        <enumeration value="XZD"/>
+        <enumeration value="XZF"/>
+        <enumeration value="XZG"/>
+        <enumeration value="XZH"/>
+        <enumeration value="XZJ"/>
+        <enumeration value="XZK"/>
+        <enumeration value="XZL"/>
+        <enumeration value="XZM"/>
+        <enumeration value="XZN"/>
+        <enumeration value="XZP"/>
+        <enumeration value="XZQ"/>
+        <enumeration value="XZR"/>
+        <enumeration value="XZS"/>
+        <enumeration value="XZT"/>
+        <enumeration value="XZU"/>
+        <enumeration value="XZV"/>
+        <enumeration value="XZW"/>
+        <enumeration value="XZX"/>
+        <enumeration value="XZY"/>
+        <enumeration value="XZZ"/>
+        <enumeration value="10"/>
+        <enumeration value="11"/>
+        <enumeration value="13"/>
+        <enumeration value="14"/>
+        <enumeration value="15"/>
+        <enumeration value="20"/>
+        <enumeration value="21"/>
+        <enumeration value="22"/>
+        <enumeration value="23"/>
+        <enumeration value="24"/>
+        <enumeration value="25"/>
+        <enumeration value="27"/>
+        <enumeration value="28"/>
+        <enumeration value="33"/>
+        <enumeration value="34"/>
+        <enumeration value="35"/>
+        <enumeration value="37"/>
+        <enumeration value="38"/>
+        <enumeration value="40"/>
+        <enumeration value="41"/>
+        <enumeration value="56"/>
+        <enumeration value="57"/>
+        <enumeration value="58"/>
+        <enumeration value="59"/>
+        <enumeration value="60"/>
+        <enumeration value="61"/>
+        <enumeration value="64"/>
+        <enumeration value="66"/>
+        <enumeration value="74"/>
+        <enumeration value="76"/>
+        <enumeration value="77"/>
+        <enumeration value="78"/>
+        <enumeration value="80"/>
+        <enumeration value="81"/>
+        <enumeration value="84"/>
+        <enumeration value="85"/>
+        <enumeration value="87"/>
+        <enumeration value="89"/>
+        <enumeration value="91"/>
+        <enumeration value="1I"/>
+        <enumeration value="2A"/>
+        <enumeration value="2B"/>
+        <enumeration value="2C"/>
+        <enumeration value="2G"/>
+        <enumeration value="2H"/>
+        <enumeration value="2I"/>
+        <enumeration value="2J"/>
+        <enumeration value="2K"/>
+        <enumeration value="2L"/>
+        <enumeration value="2M"/>
+        <enumeration value="2N"/>
+        <enumeration value="2P"/>
+        <enumeration value="2Q"/>
+        <enumeration value="2R"/>
+        <enumeration value="2U"/>
+        <enumeration value="2X"/>
+        <enumeration value="2Y"/>
+        <enumeration value="2Z"/>
+        <enumeration value="3B"/>
+        <enumeration value="3C"/>
+        <enumeration value="4C"/>
+        <enumeration value="4G"/>
+        <enumeration value="4H"/>
+        <enumeration value="4K"/>
+        <enumeration value="4L"/>
+        <enumeration value="4M"/>
+        <enumeration value="4N"/>
+        <enumeration value="4O"/>
+        <enumeration value="4P"/>
+        <enumeration value="4Q"/>
+        <enumeration value="4R"/>
+        <enumeration value="4T"/>
+        <enumeration value="4U"/>
+        <enumeration value="4W"/>
+        <enumeration value="4X"/>
+        <enumeration value="5A"/>
+        <enumeration value="5B"/>
+        <enumeration value="5E"/>
+        <enumeration value="5J"/>
+        <enumeration value="A1"/>
+        <enumeration value="A10"/>
+        <enumeration value="A11"/>
+        <enumeration value="A12"/>
+        <enumeration value="A13"/>
+        <enumeration value="A14"/>
+        <enumeration value="A15"/>
+        <enumeration value="A16"/>
+        <enumeration value="A17"/>
+        <enumeration value="A18"/>
+        <enumeration value="A19"/>
+        <enumeration value="A2"/>
+        <enumeration value="A20"/>
+        <enumeration value="A21"/>
+        <enumeration value="A22"/>
+        <enumeration value="A23"/>
+        <enumeration value="A24"/>
+        <enumeration value="A25"/>
+        <enumeration value="A26"/>
+        <enumeration value="A27"/>
+        <enumeration value="A28"/>
+        <enumeration value="A29"/>
+        <enumeration value="A3"/>
+        <enumeration value="A30"/>
+        <enumeration value="A31"/>
+        <enumeration value="A32"/>
+        <enumeration value="A33"/>
+        <enumeration value="A34"/>
+        <enumeration value="A35"/>
+        <enumeration value="A36"/>
+        <enumeration value="A37"/>
+        <enumeration value="A38"/>
+        <enumeration value="A39"/>
+        <enumeration value="A4"/>
+        <enumeration value="A40"/>
+        <enumeration value="A41"/>
+        <enumeration value="A42"/>
+        <enumeration value="A43"/>
+        <enumeration value="A44"/>
+        <enumeration value="A45"/>
+        <enumeration value="A47"/>
+        <enumeration value="A48"/>
+        <enumeration value="A49"/>
+        <enumeration value="A5"/>
+        <enumeration value="A50"/>
+        <enumeration value="A51"/>
+        <enumeration value="A52"/>
+        <enumeration value="A53"/>
+        <enumeration value="A54"/>
+        <enumeration value="A55"/>
+        <enumeration value="A56"/>
+        <enumeration value="A57"/>
+        <enumeration value="A58"/>
+        <enumeration value="A59"/>
+        <enumeration value="A6"/>
+        <enumeration value="A60"/>
+        <enumeration value="A61"/>
+        <enumeration value="A62"/>
+        <enumeration value="A63"/>
+        <enumeration value="A64"/>
+        <enumeration value="A65"/>
+        <enumeration value="A66"/>
+        <enumeration value="A67"/>
+        <enumeration value="A68"/>
+        <enumeration value="A69"/>
+        <enumeration value="A7"/>
+        <enumeration value="A70"/>
+        <enumeration value="A71"/>
+        <enumeration value="A73"/>
+        <enumeration value="A74"/>
+        <enumeration value="A75"/>
+        <enumeration value="A76"/>
+        <enumeration value="A77"/>
+        <enumeration value="A78"/>
+        <enumeration value="A79"/>
+        <enumeration value="A8"/>
+        <enumeration value="A80"/>
+        <enumeration value="A81"/>
+        <enumeration value="A82"/>
+        <enumeration value="A83"/>
+        <enumeration value="A84"/>
+        <enumeration value="A85"/>
+        <enumeration value="A86"/>
+        <enumeration value="A87"/>
+        <enumeration value="A88"/>
+        <enumeration value="A89"/>
+        <enumeration value="A9"/>
+        <enumeration value="A90"/>
+        <enumeration value="A91"/>
+        <enumeration value="A93"/>
+        <enumeration value="A94"/>
+        <enumeration value="A95"/>
+        <enumeration value="A96"/>
+        <enumeration value="A97"/>
+        <enumeration value="A98"/>
+        <enumeration value="A99"/>
+        <enumeration value="AA"/>
+        <enumeration value="AB"/>
+        <enumeration value="ACR"/>
+        <enumeration value="ACT"/>
+        <enumeration value="AD"/>
+        <enumeration value="AE"/>
+        <enumeration value="AH"/>
+        <enumeration value="AI"/>
+        <enumeration value="AK"/>
+        <enumeration value="AL"/>
+        <enumeration value="AMH"/>
+        <enumeration value="AMP"/>
+        <enumeration value="ANN"/>
+        <enumeration value="APZ"/>
+        <enumeration value="AQ"/>
+        <enumeration value="ARE"/>
+        <enumeration value="AS"/>
+        <enumeration value="ASM"/>
+        <enumeration value="ASU"/>
+        <enumeration value="ATM"/>
+        <enumeration value="ATT"/>
+        <enumeration value="AWG"/>
+        <enumeration value="AY"/>
+        <enumeration value="AZ"/>
+        <enumeration value="B1"/>
+        <enumeration value="B10"/>
+        <enumeration value="B11"/>
+        <enumeration value="B12"/>
+        <enumeration value="B13"/>
+        <enumeration value="B14"/>
+        <enumeration value="B15"/>
+        <enumeration value="B16"/>
+        <enumeration value="B17"/>
+        <enumeration value="B18"/>
+        <enumeration value="B19"/>
+        <enumeration value="B20"/>
+        <enumeration value="B21"/>
+        <enumeration value="B22"/>
+        <enumeration value="B23"/>
+        <enumeration value="B24"/>
+        <enumeration value="B25"/>
+        <enumeration value="B26"/>
+        <enumeration value="B27"/>
+        <enumeration value="B28"/>
+        <enumeration value="B29"/>
+        <enumeration value="B3"/>
+        <enumeration value="B30"/>
+        <enumeration value="B31"/>
+        <enumeration value="B32"/>
+        <enumeration value="B33"/>
+        <enumeration value="B34"/>
+        <enumeration value="B35"/>
+        <enumeration value="B36"/>
+        <enumeration value="B37"/>
+        <enumeration value="B38"/>
+        <enumeration value="B39"/>
+        <enumeration value="B4"/>
+        <enumeration value="B40"/>
+        <enumeration value="B41"/>
+        <enumeration value="B42"/>
+        <enumeration value="B43"/>
+        <enumeration value="B44"/>
+        <enumeration value="B45"/>
+        <enumeration value="B46"/>
+        <enumeration value="B47"/>
+        <enumeration value="B48"/>
+        <enumeration value="B49"/>
+        <enumeration value="B50"/>
+        <enumeration value="B51"/>
+        <enumeration value="B52"/>
+        <enumeration value="B53"/>
+        <enumeration value="B54"/>
+        <enumeration value="B55"/>
+        <enumeration value="B56"/>
+        <enumeration value="B57"/>
+        <enumeration value="B58"/>
+        <enumeration value="B59"/>
+        <enumeration value="B60"/>
+        <enumeration value="B61"/>
+        <enumeration value="B62"/>
+        <enumeration value="B63"/>
+        <enumeration value="B64"/>
+        <enumeration value="B65"/>
+        <enumeration value="B66"/>
+        <enumeration value="B67"/>
+        <enumeration value="B68"/>
+        <enumeration value="B69"/>
+        <enumeration value="B7"/>
+        <enumeration value="B70"/>
+        <enumeration value="B71"/>
+        <enumeration value="B72"/>
+        <enumeration value="B73"/>
+        <enumeration value="B74"/>
+        <enumeration value="B75"/>
+        <enumeration value="B76"/>
+        <enumeration value="B77"/>
+        <enumeration value="B78"/>
+        <enumeration value="B79"/>
+        <enumeration value="B8"/>
+        <enumeration value="B80"/>
+        <enumeration value="B81"/>
+        <enumeration value="B82"/>
+        <enumeration value="B83"/>
+        <enumeration value="B84"/>
+        <enumeration value="B85"/>
+        <enumeration value="B86"/>
+        <enumeration value="B87"/>
+        <enumeration value="B88"/>
+        <enumeration value="B89"/>
+        <enumeration value="B90"/>
+        <enumeration value="B91"/>
+        <enumeration value="B92"/>
+        <enumeration value="B93"/>
+        <enumeration value="B94"/>
+        <enumeration value="B95"/>
+        <enumeration value="B96"/>
+        <enumeration value="B97"/>
+        <enumeration value="B98"/>
+        <enumeration value="B99"/>
+        <enumeration value="BAR"/>
+        <enumeration value="BB"/>
+        <enumeration value="BFT"/>
+        <enumeration value="BHP"/>
+        <enumeration value="BIL"/>
+        <enumeration value="BLD"/>
+        <enumeration value="BLL"/>
+        <enumeration value="BP"/>
+        <enumeration value="BPM"/>
+        <enumeration value="BQL"/>
+        <enumeration value="BTU"/>
+        <enumeration value="BUA"/>
+        <enumeration value="BUI"/>
+        <enumeration value="C0"/>
+        <enumeration value="C10"/>
+        <enumeration value="C11"/>
+        <enumeration value="C12"/>
+        <enumeration value="C13"/>
+        <enumeration value="C14"/>
+        <enumeration value="C15"/>
+        <enumeration value="C16"/>
+        <enumeration value="C17"/>
+        <enumeration value="C18"/>
+        <enumeration value="C19"/>
+        <enumeration value="C20"/>
+        <enumeration value="C21"/>
+        <enumeration value="C22"/>
+        <enumeration value="C23"/>
+        <enumeration value="C24"/>
+        <enumeration value="C25"/>
+        <enumeration value="C26"/>
+        <enumeration value="C27"/>
+        <enumeration value="C28"/>
+        <enumeration value="C29"/>
+        <enumeration value="C3"/>
+        <enumeration value="C30"/>
+        <enumeration value="C31"/>
+        <enumeration value="C32"/>
+        <enumeration value="C33"/>
+        <enumeration value="C34"/>
+        <enumeration value="C35"/>
+        <enumeration value="C36"/>
+        <enumeration value="C37"/>
+        <enumeration value="C38"/>
+        <enumeration value="C39"/>
+        <enumeration value="C40"/>
+        <enumeration value="C41"/>
+        <enumeration value="C42"/>
+        <enumeration value="C43"/>
+        <enumeration value="C44"/>
+        <enumeration value="C45"/>
+        <enumeration value="C46"/>
+        <enumeration value="C47"/>
+        <enumeration value="C48"/>
+        <enumeration value="C49"/>
+        <enumeration value="C50"/>
+        <enumeration value="C51"/>
+        <enumeration value="C52"/>
+        <enumeration value="C53"/>
+        <enumeration value="C54"/>
+        <enumeration value="C55"/>
+        <enumeration value="C56"/>
+        <enumeration value="C57"/>
+        <enumeration value="C58"/>
+        <enumeration value="C59"/>
+        <enumeration value="C60"/>
+        <enumeration value="C61"/>
+        <enumeration value="C62"/>
+        <enumeration value="C63"/>
+        <enumeration value="C64"/>
+        <enumeration value="C65"/>
+        <enumeration value="C66"/>
+        <enumeration value="C67"/>
+        <enumeration value="C68"/>
+        <enumeration value="C69"/>
+        <enumeration value="C7"/>
+        <enumeration value="C70"/>
+        <enumeration value="C71"/>
+        <enumeration value="C72"/>
+        <enumeration value="C73"/>
+        <enumeration value="C74"/>
+        <enumeration value="C75"/>
+        <enumeration value="C76"/>
+        <enumeration value="C78"/>
+        <enumeration value="C79"/>
+        <enumeration value="C8"/>
+        <enumeration value="C80"/>
+        <enumeration value="C81"/>
+        <enumeration value="C82"/>
+        <enumeration value="C83"/>
+        <enumeration value="C84"/>
+        <enumeration value="C85"/>
+        <enumeration value="C86"/>
+        <enumeration value="C87"/>
+        <enumeration value="C88"/>
+        <enumeration value="C89"/>
+        <enumeration value="C9"/>
+        <enumeration value="C90"/>
+        <enumeration value="C91"/>
+        <enumeration value="C92"/>
+        <enumeration value="C93"/>
+        <enumeration value="C94"/>
+        <enumeration value="C95"/>
+        <enumeration value="C96"/>
+        <enumeration value="C97"/>
+        <enumeration value="C99"/>
+        <enumeration value="CCT"/>
+        <enumeration value="CDL"/>
+        <enumeration value="CEL"/>
+        <enumeration value="CEN"/>
+        <enumeration value="CG"/>
+        <enumeration value="CGM"/>
+        <enumeration value="CKG"/>
+        <enumeration value="CLF"/>
+        <enumeration value="CLT"/>
+        <enumeration value="CMK"/>
+        <enumeration value="CMQ"/>
+        <enumeration value="CMT"/>
+        <enumeration value="CNP"/>
+        <enumeration value="CNT"/>
+        <enumeration value="COU"/>
+        <enumeration value="CTG"/>
+        <enumeration value="CTM"/>
+        <enumeration value="CTN"/>
+        <enumeration value="CUR"/>
+        <enumeration value="CWA"/>
+        <enumeration value="CWI"/>
+        <enumeration value="D03"/>
+        <enumeration value="D04"/>
+        <enumeration value="D1"/>
+        <enumeration value="D10"/>
+        <enumeration value="D11"/>
+        <enumeration value="D12"/>
+        <enumeration value="D13"/>
+        <enumeration value="D15"/>
+        <enumeration value="D16"/>
+        <enumeration value="D17"/>
+        <enumeration value="D18"/>
+        <enumeration value="D19"/>
+        <enumeration value="D2"/>
+        <enumeration value="D20"/>
+        <enumeration value="D21"/>
+        <enumeration value="D22"/>
+        <enumeration value="D23"/>
+        <enumeration value="D24"/>
+        <enumeration value="D25"/>
+        <enumeration value="D26"/>
+        <enumeration value="D27"/>
+        <enumeration value="D29"/>
+        <enumeration value="D30"/>
+        <enumeration value="D31"/>
+        <enumeration value="D32"/>
+        <enumeration value="D33"/>
+        <enumeration value="D34"/>
+        <enumeration value="D35"/>
+        <enumeration value="D36"/>
+        <enumeration value="D37"/>
+        <enumeration value="D38"/>
+        <enumeration value="D39"/>
+        <enumeration value="D41"/>
+        <enumeration value="D42"/>
+        <enumeration value="D43"/>
+        <enumeration value="D44"/>
+        <enumeration value="D45"/>
+        <enumeration value="D46"/>
+        <enumeration value="D47"/>
+        <enumeration value="D48"/>
+        <enumeration value="D49"/>
+        <enumeration value="D5"/>
+        <enumeration value="D50"/>
+        <enumeration value="D51"/>
+        <enumeration value="D52"/>
+        <enumeration value="D53"/>
+        <enumeration value="D54"/>
+        <enumeration value="D55"/>
+        <enumeration value="D56"/>
+        <enumeration value="D57"/>
+        <enumeration value="D58"/>
+        <enumeration value="D59"/>
+        <enumeration value="D6"/>
+        <enumeration value="D60"/>
+        <enumeration value="D61"/>
+        <enumeration value="D62"/>
+        <enumeration value="D63"/>
+        <enumeration value="D65"/>
+        <enumeration value="D68"/>
+        <enumeration value="D69"/>
+        <enumeration value="D70"/>
+        <enumeration value="D71"/>
+        <enumeration value="D72"/>
+        <enumeration value="D73"/>
+        <enumeration value="D74"/>
+        <enumeration value="D75"/>
+        <enumeration value="D76"/>
+        <enumeration value="D77"/>
+        <enumeration value="D78"/>
+        <enumeration value="D80"/>
+        <enumeration value="D81"/>
+        <enumeration value="D82"/>
+        <enumeration value="D83"/>
+        <enumeration value="D85"/>
+        <enumeration value="D86"/>
+        <enumeration value="D87"/>
+        <enumeration value="D88"/>
+        <enumeration value="D89"/>
+        <enumeration value="D9"/>
+        <enumeration value="D91"/>
+        <enumeration value="D93"/>
+        <enumeration value="D94"/>
+        <enumeration value="D95"/>
+        <enumeration value="DAA"/>
+        <enumeration value="DAD"/>
+        <enumeration value="DAY"/>
+        <enumeration value="DB"/>
+        <enumeration value="DD"/>
+        <enumeration value="DEC"/>
+        <enumeration value="DG"/>
+        <enumeration value="DJ"/>
+        <enumeration value="DLT"/>
+        <enumeration value="DMA"/>
+        <enumeration value="DMK"/>
+        <enumeration value="DMO"/>
+        <enumeration value="DMQ"/>
+        <enumeration value="DMT"/>
+        <enumeration value="DN"/>
+        <enumeration value="DPC"/>
+        <enumeration value="DPR"/>
+        <enumeration value="DPT"/>
+        <enumeration value="DRA"/>
+        <enumeration value="DRI"/>
+        <enumeration value="DRL"/>
+        <enumeration value="DT"/>
+        <enumeration value="DTN"/>
+        <enumeration value="DU"/>
+        <enumeration value="DWT"/>
+        <enumeration value="DX"/>
+        <enumeration value="DZN"/>
+        <enumeration value="DZP"/>
+        <enumeration value="E01"/>
+        <enumeration value="E07"/>
+        <enumeration value="E08"/>
+        <enumeration value="E09"/>
+        <enumeration value="E10"/>
+        <enumeration value="E11"/>
+        <enumeration value="E12"/>
+        <enumeration value="E14"/>
+        <enumeration value="E15"/>
+        <enumeration value="E16"/>
+        <enumeration value="E17"/>
+        <enumeration value="E18"/>
+        <enumeration value="E19"/>
+        <enumeration value="E20"/>
+        <enumeration value="E21"/>
+        <enumeration value="E22"/>
+        <enumeration value="E23"/>
+        <enumeration value="E25"/>
+        <enumeration value="E27"/>
+        <enumeration value="E28"/>
+        <enumeration value="E30"/>
+        <enumeration value="E31"/>
+        <enumeration value="E32"/>
+        <enumeration value="E33"/>
+        <enumeration value="E34"/>
+        <enumeration value="E35"/>
+        <enumeration value="E36"/>
+        <enumeration value="E37"/>
+        <enumeration value="E38"/>
+        <enumeration value="E39"/>
+        <enumeration value="E4"/>
+        <enumeration value="E40"/>
+        <enumeration value="E41"/>
+        <enumeration value="E42"/>
+        <enumeration value="E43"/>
+        <enumeration value="E44"/>
+        <enumeration value="E45"/>
+        <enumeration value="E46"/>
+        <enumeration value="E47"/>
+        <enumeration value="E48"/>
+        <enumeration value="E49"/>
+        <enumeration value="E50"/>
+        <enumeration value="E51"/>
+        <enumeration value="E52"/>
+        <enumeration value="E53"/>
+        <enumeration value="E54"/>
+        <enumeration value="E55"/>
+        <enumeration value="E56"/>
+        <enumeration value="E57"/>
+        <enumeration value="E58"/>
+        <enumeration value="E59"/>
+        <enumeration value="E60"/>
+        <enumeration value="E61"/>
+        <enumeration value="E62"/>
+        <enumeration value="E63"/>
+        <enumeration value="E64"/>
+        <enumeration value="E65"/>
+        <enumeration value="E66"/>
+        <enumeration value="E67"/>
+        <enumeration value="E68"/>
+        <enumeration value="E69"/>
+        <enumeration value="E70"/>
+        <enumeration value="E71"/>
+        <enumeration value="E72"/>
+        <enumeration value="E73"/>
+        <enumeration value="E74"/>
+        <enumeration value="E75"/>
+        <enumeration value="E76"/>
+        <enumeration value="E77"/>
+        <enumeration value="E78"/>
+        <enumeration value="E79"/>
+        <enumeration value="E80"/>
+        <enumeration value="E81"/>
+        <enumeration value="E82"/>
+        <enumeration value="E83"/>
+        <enumeration value="E84"/>
+        <enumeration value="E85"/>
+        <enumeration value="E86"/>
+        <enumeration value="E87"/>
+        <enumeration value="E88"/>
+        <enumeration value="E89"/>
+        <enumeration value="E90"/>
+        <enumeration value="E91"/>
+        <enumeration value="E92"/>
+        <enumeration value="E93"/>
+        <enumeration value="E94"/>
+        <enumeration value="E95"/>
+        <enumeration value="E96"/>
+        <enumeration value="E97"/>
+        <enumeration value="E98"/>
+        <enumeration value="E99"/>
+        <enumeration value="EA"/>
+        <enumeration value="EB"/>
+        <enumeration value="EQ"/>
+        <enumeration value="F01"/>
+        <enumeration value="F02"/>
+        <enumeration value="F03"/>
+        <enumeration value="F04"/>
+        <enumeration value="F05"/>
+        <enumeration value="F06"/>
+        <enumeration value="F07"/>
+        <enumeration value="F08"/>
+        <enumeration value="F10"/>
+        <enumeration value="F11"/>
+        <enumeration value="F12"/>
+        <enumeration value="F13"/>
+        <enumeration value="F14"/>
+        <enumeration value="F15"/>
+        <enumeration value="F16"/>
+        <enumeration value="F17"/>
+        <enumeration value="F18"/>
+        <enumeration value="F19"/>
+        <enumeration value="F20"/>
+        <enumeration value="F21"/>
+        <enumeration value="F22"/>
+        <enumeration value="F23"/>
+        <enumeration value="F24"/>
+        <enumeration value="F25"/>
+        <enumeration value="F26"/>
+        <enumeration value="F27"/>
+        <enumeration value="F28"/>
+        <enumeration value="F29"/>
+        <enumeration value="F30"/>
+        <enumeration value="F31"/>
+        <enumeration value="F32"/>
+        <enumeration value="F33"/>
+        <enumeration value="F34"/>
+        <enumeration value="F35"/>
+        <enumeration value="F36"/>
+        <enumeration value="F37"/>
+        <enumeration value="F38"/>
+        <enumeration value="F39"/>
+        <enumeration value="F40"/>
+        <enumeration value="F41"/>
+        <enumeration value="F42"/>
+        <enumeration value="F43"/>
+        <enumeration value="F44"/>
+        <enumeration value="F45"/>
+        <enumeration value="F46"/>
+        <enumeration value="F47"/>
+        <enumeration value="F48"/>
+        <enumeration value="F49"/>
+        <enumeration value="F50"/>
+        <enumeration value="F51"/>
+        <enumeration value="F52"/>
+        <enumeration value="F53"/>
+        <enumeration value="F54"/>
+        <enumeration value="F55"/>
+        <enumeration value="F56"/>
+        <enumeration value="F57"/>
+        <enumeration value="F58"/>
+        <enumeration value="F59"/>
+        <enumeration value="F60"/>
+        <enumeration value="F61"/>
+        <enumeration value="F62"/>
+        <enumeration value="F63"/>
+        <enumeration value="F64"/>
+        <enumeration value="F65"/>
+        <enumeration value="F66"/>
+        <enumeration value="F67"/>
+        <enumeration value="F68"/>
+        <enumeration value="F69"/>
+        <enumeration value="F70"/>
+        <enumeration value="F71"/>
+        <enumeration value="F72"/>
+        <enumeration value="F73"/>
+        <enumeration value="F74"/>
+        <enumeration value="F75"/>
+        <enumeration value="F76"/>
+        <enumeration value="F77"/>
+        <enumeration value="F78"/>
+        <enumeration value="F79"/>
+        <enumeration value="F80"/>
+        <enumeration value="F81"/>
+        <enumeration value="F82"/>
+        <enumeration value="F83"/>
+        <enumeration value="F84"/>
+        <enumeration value="F85"/>
+        <enumeration value="F86"/>
+        <enumeration value="F87"/>
+        <enumeration value="F88"/>
+        <enumeration value="F89"/>
+        <enumeration value="F90"/>
+        <enumeration value="F91"/>
+        <enumeration value="F92"/>
+        <enumeration value="F93"/>
+        <enumeration value="F94"/>
+        <enumeration value="F95"/>
+        <enumeration value="F96"/>
+        <enumeration value="F97"/>
+        <enumeration value="F98"/>
+        <enumeration value="F99"/>
+        <enumeration value="FAH"/>
+        <enumeration value="FAR"/>
+        <enumeration value="FBM"/>
+        <enumeration value="FC"/>
+        <enumeration value="FF"/>
+        <enumeration value="FH"/>
+        <enumeration value="FIT"/>
+        <enumeration value="FL"/>
+        <enumeration value="FOT"/>
+        <enumeration value="FP"/>
+        <enumeration value="FR"/>
+        <enumeration value="FS"/>
+        <enumeration value="FTK"/>
+        <enumeration value="FTQ"/>
+        <enumeration value="G01"/>
+        <enumeration value="G04"/>
+        <enumeration value="G05"/>
+        <enumeration value="G06"/>
+        <enumeration value="G08"/>
+        <enumeration value="G09"/>
+        <enumeration value="G10"/>
+        <enumeration value="G11"/>
+        <enumeration value="G12"/>
+        <enumeration value="G13"/>
+        <enumeration value="G14"/>
+        <enumeration value="G15"/>
+        <enumeration value="G16"/>
+        <enumeration value="G17"/>
+        <enumeration value="G18"/>
+        <enumeration value="G19"/>
+        <enumeration value="G2"/>
+        <enumeration value="G20"/>
+        <enumeration value="G21"/>
+        <enumeration value="G23"/>
+        <enumeration value="G24"/>
+        <enumeration value="G25"/>
+        <enumeration value="G26"/>
+        <enumeration value="G27"/>
+        <enumeration value="G28"/>
+        <enumeration value="G29"/>
+        <enumeration value="G3"/>
+        <enumeration value="G30"/>
+        <enumeration value="G31"/>
+        <enumeration value="G32"/>
+        <enumeration value="G33"/>
+        <enumeration value="G34"/>
+        <enumeration value="G35"/>
+        <enumeration value="G36"/>
+        <enumeration value="G37"/>
+        <enumeration value="G38"/>
+        <enumeration value="G39"/>
+        <enumeration value="G40"/>
+        <enumeration value="G41"/>
+        <enumeration value="G42"/>
+        <enumeration value="G43"/>
+        <enumeration value="G44"/>
+        <enumeration value="G45"/>
+        <enumeration value="G46"/>
+        <enumeration value="G47"/>
+        <enumeration value="G48"/>
+        <enumeration value="G49"/>
+        <enumeration value="G50"/>
+        <enumeration value="G51"/>
+        <enumeration value="G52"/>
+        <enumeration value="G53"/>
+        <enumeration value="G54"/>
+        <enumeration value="G55"/>
+        <enumeration value="G56"/>
+        <enumeration value="G57"/>
+        <enumeration value="G58"/>
+        <enumeration value="G59"/>
+        <enumeration value="G60"/>
+        <enumeration value="G61"/>
+        <enumeration value="G62"/>
+        <enumeration value="G63"/>
+        <enumeration value="G64"/>
+        <enumeration value="G65"/>
+        <enumeration value="G66"/>
+        <enumeration value="G67"/>
+        <enumeration value="G68"/>
+        <enumeration value="G69"/>
+        <enumeration value="G70"/>
+        <enumeration value="G71"/>
+        <enumeration value="G72"/>
+        <enumeration value="G73"/>
+        <enumeration value="G74"/>
+        <enumeration value="G75"/>
+        <enumeration value="G76"/>
+        <enumeration value="G77"/>
+        <enumeration value="G78"/>
+        <enumeration value="G79"/>
+        <enumeration value="G80"/>
+        <enumeration value="G81"/>
+        <enumeration value="G82"/>
+        <enumeration value="G83"/>
+        <enumeration value="G84"/>
+        <enumeration value="G85"/>
+        <enumeration value="G86"/>
+        <enumeration value="G87"/>
+        <enumeration value="G88"/>
+        <enumeration value="G89"/>
+        <enumeration value="G90"/>
+        <enumeration value="G91"/>
+        <enumeration value="G92"/>
+        <enumeration value="G93"/>
+        <enumeration value="G94"/>
+        <enumeration value="G95"/>
+        <enumeration value="G96"/>
+        <enumeration value="G97"/>
+        <enumeration value="G98"/>
+        <enumeration value="G99"/>
+        <enumeration value="GB"/>
+        <enumeration value="GBQ"/>
+        <enumeration value="GDW"/>
+        <enumeration value="GE"/>
+        <enumeration value="GF"/>
+        <enumeration value="GFI"/>
+        <enumeration value="GGR"/>
+        <enumeration value="GIA"/>
+        <enumeration value="GIC"/>
+        <enumeration value="GII"/>
+        <enumeration value="GIP"/>
+        <enumeration value="GJ"/>
+        <enumeration value="GL"/>
+        <enumeration value="GLD"/>
+        <enumeration value="GLI"/>
+        <enumeration value="GLL"/>
+        <enumeration value="GM"/>
+        <enumeration value="GO"/>
+        <enumeration value="GP"/>
+        <enumeration value="GQ"/>
+        <enumeration value="GRM"/>
+        <enumeration value="GRN"/>
+        <enumeration value="GRO"/>
+        <enumeration value="GRT"/>
+        <enumeration value="GT"/>
+        <enumeration value="GV"/>
+        <enumeration value="GWH"/>
+        <enumeration value="H03"/>
+        <enumeration value="H04"/>
+        <enumeration value="H05"/>
+        <enumeration value="H06"/>
+        <enumeration value="H07"/>
+        <enumeration value="H08"/>
+        <enumeration value="H09"/>
+        <enumeration value="H10"/>
+        <enumeration value="H11"/>
+        <enumeration value="H12"/>
+        <enumeration value="H13"/>
+        <enumeration value="H14"/>
+        <enumeration value="H15"/>
+        <enumeration value="H16"/>
+        <enumeration value="H18"/>
+        <enumeration value="H19"/>
+        <enumeration value="H20"/>
+        <enumeration value="H21"/>
+        <enumeration value="H22"/>
+        <enumeration value="H23"/>
+        <enumeration value="H24"/>
+        <enumeration value="H25"/>
+        <enumeration value="H26"/>
+        <enumeration value="H27"/>
+        <enumeration value="H28"/>
+        <enumeration value="H29"/>
+        <enumeration value="H30"/>
+        <enumeration value="H31"/>
+        <enumeration value="H32"/>
+        <enumeration value="H33"/>
+        <enumeration value="H34"/>
+        <enumeration value="H35"/>
+        <enumeration value="H36"/>
+        <enumeration value="H37"/>
+        <enumeration value="H38"/>
+        <enumeration value="H39"/>
+        <enumeration value="H40"/>
+        <enumeration value="H41"/>
+        <enumeration value="H42"/>
+        <enumeration value="H43"/>
+        <enumeration value="H44"/>
+        <enumeration value="H45"/>
+        <enumeration value="H46"/>
+        <enumeration value="H47"/>
+        <enumeration value="H48"/>
+        <enumeration value="H49"/>
+        <enumeration value="H50"/>
+        <enumeration value="H51"/>
+        <enumeration value="H52"/>
+        <enumeration value="H53"/>
+        <enumeration value="H54"/>
+        <enumeration value="H55"/>
+        <enumeration value="H56"/>
+        <enumeration value="H57"/>
+        <enumeration value="H58"/>
+        <enumeration value="H59"/>
+        <enumeration value="H60"/>
+        <enumeration value="H61"/>
+        <enumeration value="H62"/>
+        <enumeration value="H63"/>
+        <enumeration value="H64"/>
+        <enumeration value="H65"/>
+        <enumeration value="H66"/>
+        <enumeration value="H67"/>
+        <enumeration value="H68"/>
+        <enumeration value="H69"/>
+        <enumeration value="H70"/>
+        <enumeration value="H71"/>
+        <enumeration value="H72"/>
+        <enumeration value="H73"/>
+        <enumeration value="H74"/>
+        <enumeration value="H75"/>
+        <enumeration value="H76"/>
+        <enumeration value="H77"/>
+        <enumeration value="H78"/>
+        <enumeration value="H79"/>
+        <enumeration value="H80"/>
+        <enumeration value="H81"/>
+        <enumeration value="H82"/>
+        <enumeration value="H83"/>
+        <enumeration value="H84"/>
+        <enumeration value="H85"/>
+        <enumeration value="H87"/>
+        <enumeration value="H88"/>
+        <enumeration value="H89"/>
+        <enumeration value="H90"/>
+        <enumeration value="H91"/>
+        <enumeration value="H92"/>
+        <enumeration value="H93"/>
+        <enumeration value="H94"/>
+        <enumeration value="H95"/>
+        <enumeration value="H96"/>
+        <enumeration value="H98"/>
+        <enumeration value="H99"/>
+        <enumeration value="HA"/>
+        <enumeration value="HAR"/>
+        <enumeration value="HBA"/>
+        <enumeration value="HBX"/>
+        <enumeration value="HC"/>
+        <enumeration value="HDW"/>
+        <enumeration value="HEA"/>
+        <enumeration value="HGM"/>
+        <enumeration value="HH"/>
+        <enumeration value="HIU"/>
+        <enumeration value="HJ"/>
+        <enumeration value="HKM"/>
+        <enumeration value="HLT"/>
+        <enumeration value="HM"/>
+        <enumeration value="HMQ"/>
+        <enumeration value="HMT"/>
+        <enumeration value="HN"/>
+        <enumeration value="HP"/>
+        <enumeration value="HPA"/>
+        <enumeration value="HTZ"/>
+        <enumeration value="HUR"/>
+        <enumeration value="IA"/>
+        <enumeration value="IE"/>
+        <enumeration value="INH"/>
+        <enumeration value="INK"/>
+        <enumeration value="INQ"/>
+        <enumeration value="ISD"/>
+        <enumeration value="IU"/>
+        <enumeration value="IV"/>
+        <enumeration value="J10"/>
+        <enumeration value="J12"/>
+        <enumeration value="J13"/>
+        <enumeration value="J14"/>
+        <enumeration value="J15"/>
+        <enumeration value="J16"/>
+        <enumeration value="J17"/>
+        <enumeration value="J18"/>
+        <enumeration value="J19"/>
+        <enumeration value="J2"/>
+        <enumeration value="J20"/>
+        <enumeration value="J21"/>
+        <enumeration value="J22"/>
+        <enumeration value="J23"/>
+        <enumeration value="J24"/>
+        <enumeration value="J25"/>
+        <enumeration value="J26"/>
+        <enumeration value="J27"/>
+        <enumeration value="J28"/>
+        <enumeration value="J29"/>
+        <enumeration value="J30"/>
+        <enumeration value="J31"/>
+        <enumeration value="J32"/>
+        <enumeration value="J33"/>
+        <enumeration value="J34"/>
+        <enumeration value="J35"/>
+        <enumeration value="J36"/>
+        <enumeration value="J38"/>
+        <enumeration value="J39"/>
+        <enumeration value="J40"/>
+        <enumeration value="J41"/>
+        <enumeration value="J42"/>
+        <enumeration value="J43"/>
+        <enumeration value="J44"/>
+        <enumeration value="J45"/>
+        <enumeration value="J46"/>
+        <enumeration value="J47"/>
+        <enumeration value="J48"/>
+        <enumeration value="J49"/>
+        <enumeration value="J50"/>
+        <enumeration value="J51"/>
+        <enumeration value="J52"/>
+        <enumeration value="J53"/>
+        <enumeration value="J54"/>
+        <enumeration value="J55"/>
+        <enumeration value="J56"/>
+        <enumeration value="J57"/>
+        <enumeration value="J58"/>
+        <enumeration value="J59"/>
+        <enumeration value="J60"/>
+        <enumeration value="J61"/>
+        <enumeration value="J62"/>
+        <enumeration value="J63"/>
+        <enumeration value="J64"/>
+        <enumeration value="J65"/>
+        <enumeration value="J66"/>
+        <enumeration value="J67"/>
+        <enumeration value="J68"/>
+        <enumeration value="J69"/>
+        <enumeration value="J70"/>
+        <enumeration value="J71"/>
+        <enumeration value="J72"/>
+        <enumeration value="J73"/>
+        <enumeration value="J74"/>
+        <enumeration value="J75"/>
+        <enumeration value="J76"/>
+        <enumeration value="J78"/>
+        <enumeration value="J79"/>
+        <enumeration value="J81"/>
+        <enumeration value="J82"/>
+        <enumeration value="J83"/>
+        <enumeration value="J84"/>
+        <enumeration value="J85"/>
+        <enumeration value="J87"/>
+        <enumeration value="J89"/>
+        <enumeration value="J90"/>
+        <enumeration value="J91"/>
+        <enumeration value="J92"/>
+        <enumeration value="J93"/>
+        <enumeration value="J94"/>
+        <enumeration value="J95"/>
+        <enumeration value="J96"/>
+        <enumeration value="J97"/>
+        <enumeration value="J98"/>
+        <enumeration value="J99"/>
+        <enumeration value="JE"/>
+        <enumeration value="JK"/>
+        <enumeration value="JM"/>
+        <enumeration value="JNT"/>
+        <enumeration value="JOU"/>
+        <enumeration value="JPS"/>
+        <enumeration value="JWL"/>
+        <enumeration value="K1"/>
+        <enumeration value="K10"/>
+        <enumeration value="K11"/>
+        <enumeration value="K12"/>
+        <enumeration value="K13"/>
+        <enumeration value="K14"/>
+        <enumeration value="K15"/>
+        <enumeration value="K16"/>
+        <enumeration value="K17"/>
+        <enumeration value="K18"/>
+        <enumeration value="K19"/>
+        <enumeration value="K2"/>
+        <enumeration value="K20"/>
+        <enumeration value="K21"/>
+        <enumeration value="K22"/>
+        <enumeration value="K23"/>
+        <enumeration value="K24"/>
+        <enumeration value="K25"/>
+        <enumeration value="K26"/>
+        <enumeration value="K27"/>
+        <enumeration value="K28"/>
+        <enumeration value="K3"/>
+        <enumeration value="K30"/>
+        <enumeration value="K31"/>
+        <enumeration value="K32"/>
+        <enumeration value="K33"/>
+        <enumeration value="K34"/>
+        <enumeration value="K35"/>
+        <enumeration value="K36"/>
+        <enumeration value="K37"/>
+        <enumeration value="K38"/>
+        <enumeration value="K39"/>
+        <enumeration value="K40"/>
+        <enumeration value="K41"/>
+        <enumeration value="K42"/>
+        <enumeration value="K43"/>
+        <enumeration value="K45"/>
+        <enumeration value="K46"/>
+        <enumeration value="K47"/>
+        <enumeration value="K48"/>
+        <enumeration value="K49"/>
+        <enumeration value="K5"/>
+        <enumeration value="K50"/>
+        <enumeration value="K51"/>
+        <enumeration value="K52"/>
+        <enumeration value="K53"/>
+        <enumeration value="K54"/>
+        <enumeration value="K55"/>
+        <enumeration value="K58"/>
+        <enumeration value="K59"/>
+        <enumeration value="K6"/>
+        <enumeration value="K60"/>
+        <enumeration value="K61"/>
+        <enumeration value="K62"/>
+        <enumeration value="K63"/>
+        <enumeration value="K64"/>
+        <enumeration value="K65"/>
+        <enumeration value="K66"/>
+        <enumeration value="K67"/>
+        <enumeration value="K68"/>
+        <enumeration value="K69"/>
+        <enumeration value="K70"/>
+        <enumeration value="K71"/>
+        <enumeration value="K73"/>
+        <enumeration value="K74"/>
+        <enumeration value="K75"/>
+        <enumeration value="K76"/>
+        <enumeration value="K77"/>
+        <enumeration value="K78"/>
+        <enumeration value="K79"/>
+        <enumeration value="K80"/>
+        <enumeration value="K81"/>
+        <enumeration value="K82"/>
+        <enumeration value="K83"/>
+        <enumeration value="K84"/>
+        <enumeration value="K85"/>
+        <enumeration value="K86"/>
+        <enumeration value="K87"/>
+        <enumeration value="K88"/>
+        <enumeration value="K89"/>
+        <enumeration value="K90"/>
+        <enumeration value="K91"/>
+        <enumeration value="K92"/>
+        <enumeration value="K93"/>
+        <enumeration value="K94"/>
+        <enumeration value="K95"/>
+        <enumeration value="K96"/>
+        <enumeration value="K97"/>
+        <enumeration value="K98"/>
+        <enumeration value="K99"/>
+        <enumeration value="KA"/>
+        <enumeration value="KAT"/>
+        <enumeration value="KB"/>
+        <enumeration value="KBA"/>
+        <enumeration value="KCC"/>
+        <enumeration value="KDW"/>
+        <enumeration value="KEL"/>
+        <enumeration value="KGM"/>
+        <enumeration value="KGS"/>
+        <enumeration value="KHY"/>
+        <enumeration value="KHZ"/>
+        <enumeration value="KI"/>
+        <enumeration value="KIC"/>
+        <enumeration value="KIP"/>
+        <enumeration value="KJ"/>
+        <enumeration value="KJO"/>
+        <enumeration value="KL"/>
+        <enumeration value="KLK"/>
+        <enumeration value="KLX"/>
+        <enumeration value="KMA"/>
+        <enumeration value="KMH"/>
+        <enumeration value="KMK"/>
+        <enumeration value="KMQ"/>
+        <enumeration value="KMT"/>
+        <enumeration value="KNI"/>
+        <enumeration value="KNM"/>
+        <enumeration value="KNS"/>
+        <enumeration value="KNT"/>
+        <enumeration value="KO"/>
+        <enumeration value="KPA"/>
+        <enumeration value="KPH"/>
+        <enumeration value="KPO"/>
+        <enumeration value="KPP"/>
+        <enumeration value="KR"/>
+        <enumeration value="KSD"/>
+        <enumeration value="KSH"/>
+        <enumeration value="KT"/>
+        <enumeration value="KTN"/>
+        <enumeration value="KUR"/>
+        <enumeration value="KVA"/>
+        <enumeration value="KVR"/>
+        <enumeration value="KVT"/>
+        <enumeration value="KW"/>
+        <enumeration value="KWH"/>
+        <enumeration value="KWN"/>
+        <enumeration value="KWO"/>
+        <enumeration value="KWS"/>
+        <enumeration value="KWT"/>
+        <enumeration value="KX"/>
+        <enumeration value="L10"/>
+        <enumeration value="L11"/>
+        <enumeration value="L12"/>
+        <enumeration value="L13"/>
+        <enumeration value="L14"/>
+        <enumeration value="L15"/>
+        <enumeration value="L16"/>
+        <enumeration value="L17"/>
+        <enumeration value="L18"/>
+        <enumeration value="L19"/>
+        <enumeration value="L2"/>
+        <enumeration value="L20"/>
+        <enumeration value="L21"/>
+        <enumeration value="L23"/>
+        <enumeration value="L24"/>
+        <enumeration value="L25"/>
+        <enumeration value="L26"/>
+        <enumeration value="L27"/>
+        <enumeration value="L28"/>
+        <enumeration value="L29"/>
+        <enumeration value="L30"/>
+        <enumeration value="L31"/>
+        <enumeration value="L32"/>
+        <enumeration value="L33"/>
+        <enumeration value="L34"/>
+        <enumeration value="L35"/>
+        <enumeration value="L36"/>
+        <enumeration value="L37"/>
+        <enumeration value="L38"/>
+        <enumeration value="L39"/>
+        <enumeration value="L40"/>
+        <enumeration value="L41"/>
+        <enumeration value="L42"/>
+        <enumeration value="L43"/>
+        <enumeration value="L44"/>
+        <enumeration value="L45"/>
+        <enumeration value="L46"/>
+        <enumeration value="L47"/>
+        <enumeration value="L48"/>
+        <enumeration value="L49"/>
+        <enumeration value="L50"/>
+        <enumeration value="L51"/>
+        <enumeration value="L52"/>
+        <enumeration value="L53"/>
+        <enumeration value="L54"/>
+        <enumeration value="L55"/>
+        <enumeration value="L56"/>
+        <enumeration value="L57"/>
+        <enumeration value="L58"/>
+        <enumeration value="L59"/>
+        <enumeration value="L60"/>
+        <enumeration value="L63"/>
+        <enumeration value="L64"/>
+        <enumeration value="L65"/>
+        <enumeration value="L66"/>
+        <enumeration value="L67"/>
+        <enumeration value="L68"/>
+        <enumeration value="L69"/>
+        <enumeration value="L70"/>
+        <enumeration value="L71"/>
+        <enumeration value="L72"/>
+        <enumeration value="L73"/>
+        <enumeration value="L74"/>
+        <enumeration value="L75"/>
+        <enumeration value="L76"/>
+        <enumeration value="L77"/>
+        <enumeration value="L78"/>
+        <enumeration value="L79"/>
+        <enumeration value="L80"/>
+        <enumeration value="L81"/>
+        <enumeration value="L82"/>
+        <enumeration value="L83"/>
+        <enumeration value="L84"/>
+        <enumeration value="L85"/>
+        <enumeration value="L86"/>
+        <enumeration value="L87"/>
+        <enumeration value="L88"/>
+        <enumeration value="L89"/>
+        <enumeration value="L90"/>
+        <enumeration value="L91"/>
+        <enumeration value="L92"/>
+        <enumeration value="L93"/>
+        <enumeration value="L94"/>
+        <enumeration value="L95"/>
+        <enumeration value="L96"/>
+        <enumeration value="L98"/>
+        <enumeration value="L99"/>
+        <enumeration value="LA"/>
+        <enumeration value="LAC"/>
+        <enumeration value="LBR"/>
+        <enumeration value="LBT"/>
+        <enumeration value="LD"/>
+        <enumeration value="LEF"/>
+        <enumeration value="LF"/>
+        <enumeration value="LH"/>
+        <enumeration value="LK"/>
+        <enumeration value="LM"/>
+        <enumeration value="LN"/>
+        <enumeration value="LO"/>
+        <enumeration value="LP"/>
+        <enumeration value="LPA"/>
+        <enumeration value="LR"/>
+        <enumeration value="LS"/>
+        <enumeration value="LTN"/>
+        <enumeration value="LTR"/>
+        <enumeration value="LUB"/>
+        <enumeration value="LUM"/>
+        <enumeration value="LUX"/>
+        <enumeration value="LY"/>
+        <enumeration value="M1"/>
+        <enumeration value="M10"/>
+        <enumeration value="M11"/>
+        <enumeration value="M12"/>
+        <enumeration value="M13"/>
+        <enumeration value="M14"/>
+        <enumeration value="M15"/>
+        <enumeration value="M16"/>
+        <enumeration value="M17"/>
+        <enumeration value="M18"/>
+        <enumeration value="M19"/>
+        <enumeration value="M20"/>
+        <enumeration value="M21"/>
+        <enumeration value="M22"/>
+        <enumeration value="M23"/>
+        <enumeration value="M24"/>
+        <enumeration value="M25"/>
+        <enumeration value="M26"/>
+        <enumeration value="M27"/>
+        <enumeration value="M29"/>
+        <enumeration value="M30"/>
+        <enumeration value="M31"/>
+        <enumeration value="M32"/>
+        <enumeration value="M33"/>
+        <enumeration value="M34"/>
+        <enumeration value="M35"/>
+        <enumeration value="M36"/>
+        <enumeration value="M37"/>
+        <enumeration value="M38"/>
+        <enumeration value="M39"/>
+        <enumeration value="M4"/>
+        <enumeration value="M40"/>
+        <enumeration value="M41"/>
+        <enumeration value="M42"/>
+        <enumeration value="M43"/>
+        <enumeration value="M44"/>
+        <enumeration value="M45"/>
+        <enumeration value="M46"/>
+        <enumeration value="M47"/>
+        <enumeration value="M48"/>
+        <enumeration value="M49"/>
+        <enumeration value="M5"/>
+        <enumeration value="M50"/>
+        <enumeration value="M51"/>
+        <enumeration value="M52"/>
+        <enumeration value="M53"/>
+        <enumeration value="M55"/>
+        <enumeration value="M56"/>
+        <enumeration value="M57"/>
+        <enumeration value="M58"/>
+        <enumeration value="M59"/>
+        <enumeration value="M60"/>
+        <enumeration value="M61"/>
+        <enumeration value="M62"/>
+        <enumeration value="M63"/>
+        <enumeration value="M64"/>
+        <enumeration value="M65"/>
+        <enumeration value="M66"/>
+        <enumeration value="M67"/>
+        <enumeration value="M68"/>
+        <enumeration value="M69"/>
+        <enumeration value="M7"/>
+        <enumeration value="M70"/>
+        <enumeration value="M71"/>
+        <enumeration value="M72"/>
+        <enumeration value="M73"/>
+        <enumeration value="M74"/>
+        <enumeration value="M75"/>
+        <enumeration value="M76"/>
+        <enumeration value="M77"/>
+        <enumeration value="M78"/>
+        <enumeration value="M79"/>
+        <enumeration value="M80"/>
+        <enumeration value="M81"/>
+        <enumeration value="M82"/>
+        <enumeration value="M83"/>
+        <enumeration value="M84"/>
+        <enumeration value="M85"/>
+        <enumeration value="M86"/>
+        <enumeration value="M87"/>
+        <enumeration value="M88"/>
+        <enumeration value="M89"/>
+        <enumeration value="M9"/>
+        <enumeration value="M90"/>
+        <enumeration value="M91"/>
+        <enumeration value="M92"/>
+        <enumeration value="M93"/>
+        <enumeration value="M94"/>
+        <enumeration value="M95"/>
+        <enumeration value="M96"/>
+        <enumeration value="M97"/>
+        <enumeration value="M98"/>
+        <enumeration value="M99"/>
+        <enumeration value="MAH"/>
+        <enumeration value="MAL"/>
+        <enumeration value="MAM"/>
+        <enumeration value="MAR"/>
+        <enumeration value="MAW"/>
+        <enumeration value="MBE"/>
+        <enumeration value="MBF"/>
+        <enumeration value="MBR"/>
+        <enumeration value="MC"/>
+        <enumeration value="MCU"/>
+        <enumeration value="MD"/>
+        <enumeration value="MGM"/>
+        <enumeration value="MHZ"/>
+        <enumeration value="MIK"/>
+        <enumeration value="MIL"/>
+        <enumeration value="MIN"/>
+        <enumeration value="MIO"/>
+        <enumeration value="MIU"/>
+        <enumeration value="MLD"/>
+        <enumeration value="MLT"/>
+        <enumeration value="MMK"/>
+        <enumeration value="MMQ"/>
+        <enumeration value="MMT"/>
+        <enumeration value="MND"/>
+        <enumeration value="MON"/>
+        <enumeration value="MPA"/>
+        <enumeration value="MQH"/>
+        <enumeration value="MQS"/>
+        <enumeration value="MSK"/>
+        <enumeration value="MTK"/>
+        <enumeration value="MTQ"/>
+        <enumeration value="MTR"/>
+        <enumeration value="MTS"/>
+        <enumeration value="MVA"/>
+        <enumeration value="MWH"/>
+        <enumeration value="N1"/>
+        <enumeration value="N10"/>
+        <enumeration value="N11"/>
+        <enumeration value="N12"/>
+        <enumeration value="N13"/>
+        <enumeration value="N14"/>
+        <enumeration value="N15"/>
+        <enumeration value="N16"/>
+        <enumeration value="N17"/>
+        <enumeration value="N18"/>
+        <enumeration value="N19"/>
+        <enumeration value="N20"/>
+        <enumeration value="N21"/>
+        <enumeration value="N22"/>
+        <enumeration value="N23"/>
+        <enumeration value="N24"/>
+        <enumeration value="N25"/>
+        <enumeration value="N26"/>
+        <enumeration value="N27"/>
+        <enumeration value="N28"/>
+        <enumeration value="N29"/>
+        <enumeration value="N3"/>
+        <enumeration value="N30"/>
+        <enumeration value="N31"/>
+        <enumeration value="N32"/>
+        <enumeration value="N33"/>
+        <enumeration value="N34"/>
+        <enumeration value="N35"/>
+        <enumeration value="N36"/>
+        <enumeration value="N37"/>
+        <enumeration value="N38"/>
+        <enumeration value="N39"/>
+        <enumeration value="N40"/>
+        <enumeration value="N41"/>
+        <enumeration value="N42"/>
+        <enumeration value="N43"/>
+        <enumeration value="N44"/>
+        <enumeration value="N45"/>
+        <enumeration value="N46"/>
+        <enumeration value="N47"/>
+        <enumeration value="N48"/>
+        <enumeration value="N49"/>
+        <enumeration value="N50"/>
+        <enumeration value="N51"/>
+        <enumeration value="N52"/>
+        <enumeration value="N53"/>
+        <enumeration value="N54"/>
+        <enumeration value="N55"/>
+        <enumeration value="N56"/>
+        <enumeration value="N57"/>
+        <enumeration value="N58"/>
+        <enumeration value="N59"/>
+        <enumeration value="N60"/>
+        <enumeration value="N61"/>
+        <enumeration value="N62"/>
+        <enumeration value="N63"/>
+        <enumeration value="N64"/>
+        <enumeration value="N65"/>
+        <enumeration value="N66"/>
+        <enumeration value="N67"/>
+        <enumeration value="N68"/>
+        <enumeration value="N69"/>
+        <enumeration value="N70"/>
+        <enumeration value="N71"/>
+        <enumeration value="N72"/>
+        <enumeration value="N73"/>
+        <enumeration value="N74"/>
+        <enumeration value="N75"/>
+        <enumeration value="N76"/>
+        <enumeration value="N77"/>
+        <enumeration value="N78"/>
+        <enumeration value="N79"/>
+        <enumeration value="N80"/>
+        <enumeration value="N81"/>
+        <enumeration value="N82"/>
+        <enumeration value="N83"/>
+        <enumeration value="N84"/>
+        <enumeration value="N85"/>
+        <enumeration value="N86"/>
+        <enumeration value="N87"/>
+        <enumeration value="N88"/>
+        <enumeration value="N89"/>
+        <enumeration value="N90"/>
+        <enumeration value="N91"/>
+        <enumeration value="N92"/>
+        <enumeration value="N93"/>
+        <enumeration value="N94"/>
+        <enumeration value="N95"/>
+        <enumeration value="N96"/>
+        <enumeration value="N97"/>
+        <enumeration value="N98"/>
+        <enumeration value="N99"/>
+        <enumeration value="NA"/>
+        <enumeration value="NAR"/>
+        <enumeration value="NCL"/>
+        <enumeration value="NEW"/>
+        <enumeration value="NF"/>
+        <enumeration value="NIL"/>
+        <enumeration value="NIU"/>
+        <enumeration value="NL"/>
+        <enumeration value="NM3"/>
+        <enumeration value="NMI"/>
+        <enumeration value="NMP"/>
+        <enumeration value="NPR"/>
+        <enumeration value="NPT"/>
+        <enumeration value="NQ"/>
+        <enumeration value="NR"/>
+        <enumeration value="NT"/>
+        <enumeration value="NTT"/>
+        <enumeration value="NU"/>
+        <enumeration value="NX"/>
+        <enumeration value="OA"/>
+        <enumeration value="ODE"/>
+        <enumeration value="OHM"/>
+        <enumeration value="ON"/>
+        <enumeration value="ONZ"/>
+        <enumeration value="OPM"/>
+        <enumeration value="OT"/>
+        <enumeration value="OZ"/>
+        <enumeration value="OZA"/>
+        <enumeration value="OZI"/>
+        <enumeration value="P1"/>
+        <enumeration value="P10"/>
+        <enumeration value="P11"/>
+        <enumeration value="P12"/>
+        <enumeration value="P13"/>
+        <enumeration value="P14"/>
+        <enumeration value="P15"/>
+        <enumeration value="P16"/>
+        <enumeration value="P17"/>
+        <enumeration value="P18"/>
+        <enumeration value="P19"/>
+        <enumeration value="P2"/>
+        <enumeration value="P20"/>
+        <enumeration value="P21"/>
+        <enumeration value="P22"/>
+        <enumeration value="P23"/>
+        <enumeration value="P24"/>
+        <enumeration value="P25"/>
+        <enumeration value="P26"/>
+        <enumeration value="P27"/>
+        <enumeration value="P28"/>
+        <enumeration value="P29"/>
+        <enumeration value="P30"/>
+        <enumeration value="P31"/>
+        <enumeration value="P32"/>
+        <enumeration value="P33"/>
+        <enumeration value="P34"/>
+        <enumeration value="P35"/>
+        <enumeration value="P36"/>
+        <enumeration value="P37"/>
+        <enumeration value="P38"/>
+        <enumeration value="P39"/>
+        <enumeration value="P40"/>
+        <enumeration value="P41"/>
+        <enumeration value="P42"/>
+        <enumeration value="P43"/>
+        <enumeration value="P44"/>
+        <enumeration value="P45"/>
+        <enumeration value="P46"/>
+        <enumeration value="P47"/>
+        <enumeration value="P48"/>
+        <enumeration value="P49"/>
+        <enumeration value="P5"/>
+        <enumeration value="P50"/>
+        <enumeration value="P51"/>
+        <enumeration value="P52"/>
+        <enumeration value="P53"/>
+        <enumeration value="P54"/>
+        <enumeration value="P55"/>
+        <enumeration value="P56"/>
+        <enumeration value="P57"/>
+        <enumeration value="P58"/>
+        <enumeration value="P59"/>
+        <enumeration value="P60"/>
+        <enumeration value="P61"/>
+        <enumeration value="P62"/>
+        <enumeration value="P63"/>
+        <enumeration value="P64"/>
+        <enumeration value="P65"/>
+        <enumeration value="P66"/>
+        <enumeration value="P67"/>
+        <enumeration value="P68"/>
+        <enumeration value="P69"/>
+        <enumeration value="P70"/>
+        <enumeration value="P71"/>
+        <enumeration value="P72"/>
+        <enumeration value="P73"/>
+        <enumeration value="P74"/>
+        <enumeration value="P75"/>
+        <enumeration value="P76"/>
+        <enumeration value="P77"/>
+        <enumeration value="P78"/>
+        <enumeration value="P79"/>
+        <enumeration value="P80"/>
+        <enumeration value="P81"/>
+        <enumeration value="P82"/>
+        <enumeration value="P83"/>
+        <enumeration value="P84"/>
+        <enumeration value="P85"/>
+        <enumeration value="P86"/>
+        <enumeration value="P87"/>
+        <enumeration value="P88"/>
+        <enumeration value="P89"/>
+        <enumeration value="P90"/>
+        <enumeration value="P91"/>
+        <enumeration value="P92"/>
+        <enumeration value="P93"/>
+        <enumeration value="P94"/>
+        <enumeration value="P95"/>
+        <enumeration value="P96"/>
+        <enumeration value="P97"/>
+        <enumeration value="P98"/>
+        <enumeration value="P99"/>
+        <enumeration value="PAL"/>
+        <enumeration value="PD"/>
+        <enumeration value="PFL"/>
+        <enumeration value="PGL"/>
+        <enumeration value="PI"/>
+        <enumeration value="PLA"/>
+        <enumeration value="PO"/>
+        <enumeration value="PQ"/>
+        <enumeration value="PR"/>
+        <enumeration value="PS"/>
+        <enumeration value="PT"/>
+        <enumeration value="PTD"/>
+        <enumeration value="PTI"/>
+        <enumeration value="PTL"/>
+        <enumeration value="PTN"/>
+        <enumeration value="Q10"/>
+        <enumeration value="Q11"/>
+        <enumeration value="Q12"/>
+        <enumeration value="Q13"/>
+        <enumeration value="Q14"/>
+        <enumeration value="Q15"/>
+        <enumeration value="Q16"/>
+        <enumeration value="Q17"/>
+        <enumeration value="Q18"/>
+        <enumeration value="Q19"/>
+        <enumeration value="Q20"/>
+        <enumeration value="Q21"/>
+        <enumeration value="Q22"/>
+        <enumeration value="Q23"/>
+        <enumeration value="Q24"/>
+        <enumeration value="Q25"/>
+        <enumeration value="Q26"/>
+        <enumeration value="Q27"/>
+        <enumeration value="Q28"/>
+        <enumeration value="Q29"/>
+        <enumeration value="Q3"/>
+        <enumeration value="Q30"/>
+        <enumeration value="Q31"/>
+        <enumeration value="Q32"/>
+        <enumeration value="Q33"/>
+        <enumeration value="Q34"/>
+        <enumeration value="Q35"/>
+        <enumeration value="Q36"/>
+        <enumeration value="Q37"/>
+        <enumeration value="Q38"/>
+        <enumeration value="Q39"/>
+        <enumeration value="Q40"/>
+        <enumeration value="Q41"/>
+        <enumeration value="Q42"/>
+        <enumeration value="QA"/>
+        <enumeration value="QAN"/>
+        <enumeration value="QB"/>
+        <enumeration value="QR"/>
+        <enumeration value="QT"/>
+        <enumeration value="QTD"/>
+        <enumeration value="QTI"/>
+        <enumeration value="QTL"/>
+        <enumeration value="QTR"/>
+        <enumeration value="R1"/>
+        <enumeration value="R9"/>
+        <enumeration value="RH"/>
+        <enumeration value="RM"/>
+        <enumeration value="ROM"/>
+        <enumeration value="RP"/>
+        <enumeration value="RPM"/>
+        <enumeration value="RPS"/>
+        <enumeration value="RT"/>
+        <enumeration value="S3"/>
+        <enumeration value="S4"/>
+        <enumeration value="SAN"/>
+        <enumeration value="SCO"/>
+        <enumeration value="SCR"/>
+        <enumeration value="SEC"/>
+        <enumeration value="SET"/>
+        <enumeration value="SG"/>
+        <enumeration value="SHT"/>
+        <enumeration value="SIE"/>
+        <enumeration value="SM3"/>
+        <enumeration value="SMI"/>
+        <enumeration value="SQ"/>
+        <enumeration value="SQR"/>
+        <enumeration value="SR"/>
+        <enumeration value="STC"/>
+        <enumeration value="STI"/>
+        <enumeration value="STK"/>
+        <enumeration value="STL"/>
+        <enumeration value="STN"/>
+        <enumeration value="STW"/>
+        <enumeration value="SW"/>
+        <enumeration value="SX"/>
+        <enumeration value="SYR"/>
+        <enumeration value="T0"/>
+        <enumeration value="T3"/>
+        <enumeration value="TAH"/>
+        <enumeration value="TAN"/>
+        <enumeration value="TI"/>
+        <enumeration value="TIC"/>
+        <enumeration value="TIP"/>
+        <enumeration value="TKM"/>
+        <enumeration value="TMS"/>
+        <enumeration value="TNE"/>
+        <enumeration value="TP"/>
+        <enumeration value="TPI"/>
+        <enumeration value="TPR"/>
+        <enumeration value="TQD"/>
+        <enumeration value="TRL"/>
+        <enumeration value="TST"/>
+        <enumeration value="TTS"/>
+        <enumeration value="U1"/>
+        <enumeration value="U2"/>
+        <enumeration value="UA"/>
+        <enumeration value="UB"/>
+        <enumeration value="UC"/>
+        <enumeration value="VA"/>
+        <enumeration value="VLT"/>
+        <enumeration value="VP"/>
+        <enumeration value="W2"/>
+        <enumeration value="WA"/>
+        <enumeration value="WB"/>
+        <enumeration value="WCD"/>
+        <enumeration value="WE"/>
+        <enumeration value="WEB"/>
+        <enumeration value="WEE"/>
+        <enumeration value="WG"/>
+        <enumeration value="WHR"/>
+        <enumeration value="WM"/>
+        <enumeration value="WSD"/>
+        <enumeration value="WTT"/>
+        <enumeration value="WW"/>
+        <enumeration value="X1"/>
+        <enumeration value="YDK"/>
+        <enumeration value="YDQ"/>
+        <enumeration value="YRD"/>
+        <enumeration value="Z11"/>
+        <enumeration value="ZP"/>
+        <enumeration value="ZZ"/>
+    </cl>
+    <cl id="8">
+        <enumeration value="AE"/>
+        <enumeration value="E"/>
+        <enumeration value="G"/>
+        <enumeration value="K"/>
+        <enumeration value="L"/>
+        <enumeration value="M"/>
+        <enumeration value="O"/>
+        <enumeration value="S"/>
+        <enumeration value="Z"/>
+    </cl>
+    <cl id="9">
+        <enumeration value="130"/>
+    </cl>
+    <cl id="10">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="11">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="12">
+        <enumeration value="0002"/>
+        <enumeration value="0007"/>
+        <enumeration value="0009"/>
+        <enumeration value="0037"/>
+        <enumeration value="0060"/>
+        <enumeration value="0088"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0106"/>
+        <enumeration value="0130"/>
+        <enumeration value="0135"/>
+        <enumeration value="0142"/>
+        <enumeration value="0151"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+        <enumeration value="9901"/>
+        <enumeration value="9902"/>
+        <enumeration value="9904"/>
+        <enumeration value="9905"/>
+        <enumeration value="9906"/>
+        <enumeration value="9907"/>
+        <enumeration value="9910"/>
+        <enumeration value="9913"/>
+        <enumeration value="9914"/>
+        <enumeration value="9915"/>
+        <enumeration value="9918"/>
+        <enumeration value="9919"/>
+        <enumeration value="9920"/>
+        <enumeration value="9922"/>
+        <enumeration value="9923"/>
+        <enumeration value="9924"/>
+        <enumeration value="9925"/>
+        <enumeration value="9926"/>
+        <enumeration value="9927"/>
+        <enumeration value="9928"/>
+        <enumeration value="9929"/>
+        <enumeration value="9930"/>
+        <enumeration value="9931"/>
+        <enumeration value="9932"/>
+        <enumeration value="9933"/>
+        <enumeration value="9934"/>
+        <enumeration value="9935"/>
+        <enumeration value="9936"/>
+        <enumeration value="9937"/>
+        <enumeration value="9938"/>
+        <enumeration value="9939"/>
+        <enumeration value="9940"/>
+        <enumeration value="9941"/>
+        <enumeration value="9942"/>
+        <enumeration value="9943"/>
+        <enumeration value="9944"/>
+        <enumeration value="9945"/>
+        <enumeration value="9946"/>
+        <enumeration value="9947"/>
+        <enumeration value="9948"/>
+        <enumeration value="9949"/>
+        <enumeration value="9950"/>
+        <enumeration value="9951"/>
+        <enumeration value="9952"/>
+        <enumeration value="9953"/>
+        <enumeration value="9955"/>
+        <enumeration value="9956"/>
+        <enumeration value="9957"/>
+        <enumeration value="9958"/>
+        <enumeration value="AN"/>
+        <enumeration value="AQ"/>
+        <enumeration value="AS"/>
+        <enumeration value="AU"/>
+        <enumeration value="EM"/>
+    </cl>
+    <cl id="13">
+        <enumeration value="FC"/>
+        <enumeration value="VA"/>
+    </cl>
+    <cl id="14">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="15">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="16">
+        <enumeration value="VA"/>
+    </cl>
+    <cl id="17">
+        <enumeration value="VA"/>
+    </cl>
+    <cl id="18">
+        <enumeration value="50"/>
+        <enumeration value="130"/>
+        <enumeration value="916"/>
+    </cl>
+    <cl id="19">
+        <enumeration value="application/pdf"/>
+        <enumeration value="application/vnd.oasis.opendocument.spreadsheet"/>
+        <enumeration value="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
+        <enumeration value="image/jpeg"/>
+        <enumeration value="image/png"/>
+        <enumeration value="text/csv"/>
+    </cl>
+    <cl id="20">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="21">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="22">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="23">
+        <enumeration value="AE"/>
+        <enumeration value="E"/>
+        <enumeration value="G"/>
+        <enumeration value="K"/>
+        <enumeration value="L"/>
+        <enumeration value="M"/>
+        <enumeration value="O"/>
+        <enumeration value="S"/>
+        <enumeration value="Z"/>
+    </cl>
+    <cl id="24">
+        <enumeration value="vatex-eu-132"/>
+        <enumeration value="VATEX-EU-132"/>
+        <enumeration value="vatex-eu-132-1a"/>
+        <enumeration value="VATEX-EU-132-1A"/>
+        <enumeration value="vatex-eu-132-1b"/>
+        <enumeration value="VATEX-EU-132-1B"/>
+        <enumeration value="vatex-eu-132-1c"/>
+        <enumeration value="VATEX-EU-132-1C"/>
+        <enumeration value="vatex-eu-132-1d"/>
+        <enumeration value="VATEX-EU-132-1D"/>
+        <enumeration value="vatex-eu-132-1e"/>
+        <enumeration value="VATEX-EU-132-1E"/>
+        <enumeration value="vatex-eu-132-1f"/>
+        <enumeration value="VATEX-EU-132-1F"/>
+        <enumeration value="vatex-eu-132-1g"/>
+        <enumeration value="VATEX-EU-132-1G"/>
+        <enumeration value="vatex-eu-132-1h"/>
+        <enumeration value="VATEX-EU-132-1H"/>
+        <enumeration value="vatex-eu-132-1i"/>
+        <enumeration value="VATEX-EU-132-1I"/>
+        <enumeration value="vatex-eu-132-1j"/>
+        <enumeration value="VATEX-EU-132-1J"/>
+        <enumeration value="vatex-eu-132-1k"/>
+        <enumeration value="VATEX-EU-132-1K"/>
+        <enumeration value="vatex-eu-132-1l"/>
+        <enumeration value="VATEX-EU-132-1L"/>
+        <enumeration value="vatex-eu-132-1m"/>
+        <enumeration value="VATEX-EU-132-1M"/>
+        <enumeration value="vatex-eu-132-1n"/>
+        <enumeration value="VATEX-EU-132-1N"/>
+        <enumeration value="vatex-eu-132-1o"/>
+        <enumeration value="VATEX-EU-132-1O"/>
+        <enumeration value="vatex-eu-132-1p"/>
+        <enumeration value="VATEX-EU-132-1P"/>
+        <enumeration value="vatex-eu-132-1q"/>
+        <enumeration value="VATEX-EU-132-1Q"/>
+        <enumeration value="vatex-eu-143"/>
+        <enumeration value="VATEX-EU-143"/>
+        <enumeration value="vatex-eu-143-1a"/>
+        <enumeration value="VATEX-EU-143-1A"/>
+        <enumeration value="vatex-eu-143-1b"/>
+        <enumeration value="VATEX-EU-143-1B"/>
+        <enumeration value="vatex-eu-143-1c"/>
+        <enumeration value="VATEX-EU-143-1C"/>
+        <enumeration value="vatex-eu-143-1d"/>
+        <enumeration value="VATEX-EU-143-1D"/>
+        <enumeration value="vatex-eu-143-1e"/>
+        <enumeration value="VATEX-EU-143-1E"/>
+        <enumeration value="vatex-eu-143-1f"/>
+        <enumeration value="VATEX-EU-143-1F"/>
+        <enumeration value="vatex-eu-143-1fa"/>
+        <enumeration value="VATEX-EU-143-1FA"/>
+        <enumeration value="vatex-eu-143-1g"/>
+        <enumeration value="VATEX-EU-143-1G"/>
+        <enumeration value="vatex-eu-143-1h"/>
+        <enumeration value="VATEX-EU-143-1H"/>
+        <enumeration value="vatex-eu-143-1i"/>
+        <enumeration value="VATEX-EU-143-1I"/>
+        <enumeration value="vatex-eu-143-1j"/>
+        <enumeration value="VATEX-EU-143-1J"/>
+        <enumeration value="vatex-eu-143-1k"/>
+        <enumeration value="VATEX-EU-143-1K"/>
+        <enumeration value="vatex-eu-143-1l"/>
+        <enumeration value="VATEX-EU-143-1L"/>
+        <enumeration value="vatex-eu-148"/>
+        <enumeration value="VATEX-EU-148"/>
+        <enumeration value="vatex-eu-148-a"/>
+        <enumeration value="VATEX-EU-148-A"/>
+        <enumeration value="vatex-eu-148-b"/>
+        <enumeration value="VATEX-EU-148-B"/>
+        <enumeration value="vatex-eu-148-c"/>
+        <enumeration value="VATEX-EU-148-C"/>
+        <enumeration value="vatex-eu-148-d"/>
+        <enumeration value="VATEX-EU-148-D"/>
+        <enumeration value="vatex-eu-148-e"/>
+        <enumeration value="VATEX-EU-148-E"/>
+        <enumeration value="vatex-eu-148-f"/>
+        <enumeration value="VATEX-EU-148-F"/>
+        <enumeration value="vatex-eu-148-g"/>
+        <enumeration value="VATEX-EU-148-G"/>
+        <enumeration value="vatex-eu-151"/>
+        <enumeration value="VATEX-EU-151"/>
+        <enumeration value="vatex-eu-151-1a"/>
+        <enumeration value="VATEX-EU-151-1A"/>
+        <enumeration value="vatex-eu-151-1aa"/>
+        <enumeration value="VATEX-EU-151-1AA"/>
+        <enumeration value="vatex-eu-151-1b"/>
+        <enumeration value="VATEX-EU-151-1B"/>
+        <enumeration value="vatex-eu-151-1c"/>
+        <enumeration value="VATEX-EU-151-1C"/>
+        <enumeration value="vatex-eu-151-1d"/>
+        <enumeration value="VATEX-EU-151-1D"/>
+        <enumeration value="vatex-eu-151-1e"/>
+        <enumeration value="VATEX-EU-151-1E"/>
+        <enumeration value="vatex-eu-309"/>
+        <enumeration value="VATEX-EU-309"/>
+        <enumeration value="vatex-eu-ae"/>
+        <enumeration value="VATEX-EU-AE"/>
+        <enumeration value="vatex-eu-d"/>
+        <enumeration value="VATEX-EU-D"/>
+        <enumeration value="vatex-eu-f"/>
+        <enumeration value="VATEX-EU-F"/>
+        <enumeration value="vatex-eu-g"/>
+        <enumeration value="VATEX-EU-G"/>
+        <enumeration value="vatex-eu-i"/>
+        <enumeration value="VATEX-EU-I"/>
+        <enumeration value="vatex-eu-ic"/>
+        <enumeration value="VATEX-EU-IC"/>
+        <enumeration value="vatex-eu-j"/>
+        <enumeration value="VATEX-EU-J"/>
+        <enumeration value="vatex-eu-o"/>
+        <enumeration value="VATEX-EU-O"/>
+    </cl>
+    <cl id="25">
+        <enumeration value="102"/>
+    </cl>
+    <cl id="26">
+        <enumeration value="AE"/>
+        <enumeration value="E"/>
+        <enumeration value="G"/>
+        <enumeration value="K"/>
+        <enumeration value="L"/>
+        <enumeration value="M"/>
+        <enumeration value="O"/>
+        <enumeration value="S"/>
+        <enumeration value="Z"/>
+    </cl>
+    <cl id="27">
+        <enumeration value="AED"/>
+        <enumeration value="AFN"/>
+        <enumeration value="ALL"/>
+        <enumeration value="AMD"/>
+        <enumeration value="ANG"/>
+        <enumeration value="AOA"/>
+        <enumeration value="ARS"/>
+        <enumeration value="AUD"/>
+        <enumeration value="AWG"/>
+        <enumeration value="AZN"/>
+        <enumeration value="BAM"/>
+        <enumeration value="BBD"/>
+        <enumeration value="BDT"/>
+        <enumeration value="BGN"/>
+        <enumeration value="BHD"/>
+        <enumeration value="BIF"/>
+        <enumeration value="BMD"/>
+        <enumeration value="BND"/>
+        <enumeration value="BOB"/>
+        <enumeration value="BOV"/>
+        <enumeration value="BRL"/>
+        <enumeration value="BSD"/>
+        <enumeration value="BTN"/>
+        <enumeration value="BWP"/>
+        <enumeration value="BYN"/>
+        <enumeration value="BZD"/>
+        <enumeration value="CAD"/>
+        <enumeration value="CDF"/>
+        <enumeration value="CHE"/>
+        <enumeration value="CHF"/>
+        <enumeration value="CHW"/>
+        <enumeration value="CLF"/>
+        <enumeration value="CLP"/>
+        <enumeration value="CNY"/>
+        <enumeration value="COP"/>
+        <enumeration value="COU"/>
+        <enumeration value="CRC"/>
+        <enumeration value="CUC"/>
+        <enumeration value="CUP"/>
+        <enumeration value="CVE"/>
+        <enumeration value="CZK"/>
+        <enumeration value="DJF"/>
+        <enumeration value="DKK"/>
+        <enumeration value="DOP"/>
+        <enumeration value="DZD"/>
+        <enumeration value="EGP"/>
+        <enumeration value="ERN"/>
+        <enumeration value="ETB"/>
+        <enumeration value="EUR"/>
+        <enumeration value="FJD"/>
+        <enumeration value="FKP"/>
+        <enumeration value="GBP"/>
+        <enumeration value="GEL"/>
+        <enumeration value="GHS"/>
+        <enumeration value="GIP"/>
+        <enumeration value="GMD"/>
+        <enumeration value="GNF"/>
+        <enumeration value="GTQ"/>
+        <enumeration value="GYD"/>
+        <enumeration value="HKD"/>
+        <enumeration value="HNL"/>
+        <enumeration value="HRK"/>
+        <enumeration value="HTG"/>
+        <enumeration value="HUF"/>
+        <enumeration value="IDR"/>
+        <enumeration value="ILS"/>
+        <enumeration value="INR"/>
+        <enumeration value="IQD"/>
+        <enumeration value="IRR"/>
+        <enumeration value="ISK"/>
+        <enumeration value="JMD"/>
+        <enumeration value="JOD"/>
+        <enumeration value="JPY"/>
+        <enumeration value="KES"/>
+        <enumeration value="KGS"/>
+        <enumeration value="KHR"/>
+        <enumeration value="KMF"/>
+        <enumeration value="KPW"/>
+        <enumeration value="KRW"/>
+        <enumeration value="KWD"/>
+        <enumeration value="KYD"/>
+        <enumeration value="KZT"/>
+        <enumeration value="LAK"/>
+        <enumeration value="LBP"/>
+        <enumeration value="LKR"/>
+        <enumeration value="LRD"/>
+        <enumeration value="LSL"/>
+        <enumeration value="LYD"/>
+        <enumeration value="MAD"/>
+        <enumeration value="MDL"/>
+        <enumeration value="MGA"/>
+        <enumeration value="MKD"/>
+        <enumeration value="MMK"/>
+        <enumeration value="MNT"/>
+        <enumeration value="MOP"/>
+        <enumeration value="MRU"/>
+        <enumeration value="MUR"/>
+        <enumeration value="MVR"/>
+        <enumeration value="MWK"/>
+        <enumeration value="MXN"/>
+        <enumeration value="MXV"/>
+        <enumeration value="MYR"/>
+        <enumeration value="MZN"/>
+        <enumeration value="NAD"/>
+        <enumeration value="NGN"/>
+        <enumeration value="NIO"/>
+        <enumeration value="NOK"/>
+        <enumeration value="NPR"/>
+        <enumeration value="NZD"/>
+        <enumeration value="OMR"/>
+        <enumeration value="PAB"/>
+        <enumeration value="PEN"/>
+        <enumeration value="PGK"/>
+        <enumeration value="PHP"/>
+        <enumeration value="PKR"/>
+        <enumeration value="PLN"/>
+        <enumeration value="PYG"/>
+        <enumeration value="QAR"/>
+        <enumeration value="RON"/>
+        <enumeration value="RSD"/>
+        <enumeration value="RUB"/>
+        <enumeration value="RWF"/>
+        <enumeration value="SAR"/>
+        <enumeration value="SBD"/>
+        <enumeration value="SCR"/>
+        <enumeration value="SDG"/>
+        <enumeration value="SEK"/>
+        <enumeration value="SGD"/>
+        <enumeration value="SHP"/>
+        <enumeration value="SLL"/>
+        <enumeration value="SOS"/>
+        <enumeration value="SRD"/>
+        <enumeration value="SSP"/>
+        <enumeration value="STN"/>
+        <enumeration value="SVC"/>
+        <enumeration value="SYP"/>
+        <enumeration value="SZL"/>
+        <enumeration value="THB"/>
+        <enumeration value="TJS"/>
+        <enumeration value="TMT"/>
+        <enumeration value="TND"/>
+        <enumeration value="TOP"/>
+        <enumeration value="TRY"/>
+        <enumeration value="TTD"/>
+        <enumeration value="TWD"/>
+        <enumeration value="TZS"/>
+        <enumeration value="UAH"/>
+        <enumeration value="UGX"/>
+        <enumeration value="USD"/>
+        <enumeration value="USN"/>
+        <enumeration value="UYI"/>
+        <enumeration value="UYU"/>
+        <enumeration value="UYW"/>
+        <enumeration value="UZS"/>
+        <enumeration value="VES"/>
+        <enumeration value="VND"/>
+        <enumeration value="VUV"/>
+        <enumeration value="WST"/>
+        <enumeration value="XAF"/>
+        <enumeration value="XAG"/>
+        <enumeration value="XAU"/>
+        <enumeration value="XBA"/>
+        <enumeration value="XBB"/>
+        <enumeration value="XBC"/>
+        <enumeration value="XBD"/>
+        <enumeration value="XCD"/>
+        <enumeration value="XDR"/>
+        <enumeration value="XOF"/>
+        <enumeration value="XPD"/>
+        <enumeration value="XPF"/>
+        <enumeration value="XPT"/>
+        <enumeration value="XSU"/>
+        <enumeration value="XTS"/>
+        <enumeration value="XUA"/>
+        <enumeration value="XXX"/>
+        <enumeration value="YER"/>
+        <enumeration value="ZAR"/>
+        <enumeration value="ZMW"/>
+        <enumeration value="ZWL"/>
+    </cl>
+    <cl id="28">
+        <enumeration value="102"/>
+    </cl>
+</codedb>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED.sch
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED.sch	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED.sch	(revision 8435)
@@ -0,0 +1,20294 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron" schemaVersion="iso">
+    <title>Schema for FACTUR-X; 1.0; EN16931-CONFORMANT-EXTENDED</title>
+    <ns uri="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" prefix="rsm"/>
+    <ns uri="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" prefix="qdt"/>
+    <ns uri="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" prefix="ram"/>
+    <ns uri="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" prefix="udt"/>
+    <pattern>
+        <rule context="//ram:AdditionalReferencedDocument">
+            <assert test="(ram:IssuerAssignedID!=&apos;&apos;)">
+                Each Additional supporting document (BG-24) shall contain a Supporting document reference (BT-122).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+            <assert test="(ram:BasisAmount)">
+                Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116).</assert>
+            <assert test="(ram:CalculatedAmount)">
+                Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117).</assert>
+            <assert test="(ram:CategoryCode)">
+                Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118).</assert>
+            <assert test="(ram:RateApplicablePercent) or (ram:CategoryCode = &apos;O&apos;)">
+                Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT.</assert>
+            <assert test="((ram:TaxPointDate) and not (ram:DueDateTypeCode)) or (not (ram:TaxPointDate) and (ram:DueDateTypeCode)) or (not (ram:TaxPointDate) and not (ram:DueDateTypeCode))">
+                Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive.</assert>
+            <assert test="ram:CalculatedAmount = round(ram:BasisAmount * ram:RateApplicablePercent) div 100 +0 or not (ram:RateApplicablePercent)">
+                VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2.</assert>
+            <assert test="string-length(substring-after(ram:CalculatedAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;Z&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;Z&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;Z&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;Z&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where VAT category code (BT-118) is "Zero rated" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amount (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âZero rated".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Zero rated" shall equal 0 (zero).</assert>
+            <assert test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Zero rated" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.=&apos;S&apos;]">
+            <assert test="../ram:CalculatedAmount = round(../ram:BasisAmount * ../ram:RateApplicablePercent) div 100 +0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Standard rated" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Standard rate" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod">
+            <assert test="(ram:EndDateTime/udt:DateTimeString[@format = &apos;102&apos;]) &gt;= (ram:StartDateTime/udt:DateTimeString[@format = &apos;102&apos;]) or not (ram:EndDateTime) or not (ram:StartDateTime)">
+                If both Invoicing period start date (BT-73) and Invoicing period end date (BT-74) are given then the Invoicing period end date (BT-74) shall be later or equal to the Invoicing period start date (BT-73).</assert>
+            <assert test="(ram:StartDateTime) or (ram:EndDateTime)">
+                If Invoicing period (BG-14) is used, the Invoicing period start date (BT-73) or the Invoicing period end date (BT-74) shall be filled, or both.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92).</assert>
+            <assert test="(ram:CategoryTradeTax/ram:CategoryCode)">
+                Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level allowance (BG-20) shall have a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98).</assert>
+            <assert test="true()">
+                Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level allowance (BG-20) shall contain a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Document level charge (BG-21) shall have a Document level charge amount (BT-99).</assert>
+            <assert test="(ram:CategoryTradeTax/ram:CategoryCode)">
+                Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level charge (BG-21) shall have a Document level charge reason (BT-104) or a Document level charge reason code (BT-105).</assert>
+            <assert test="true()">
+                Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Document level charge (BG-21) shall contain a Document level charge reason (BT-104) or a Document level charge reason code (BT-105), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level charge amount (BT-92) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Document level charge base amount (BT-93) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableProductCharacteristic">
+            <assert test="(ram:Description) and (ram:Value)">
+                Each Item attribute (BG-32) shall contain an Item attribute name (BT-160) and an Item attribute value (BT-161).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:ApplicableTradeSettlementFinancialCard">
+            <assert test="string-length(ram:ID)&lt;=6 and string-length(ram:ID)&gt;=4">
+                The last 4 to 6 digits of the Payment card primary account number (BT-87) shall be present if Payment card information (BG-18) is provided in the Invoice.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:IncludedSupplyChainTradeLineItem">
+            <assert test="(ram:AssociatedDocumentLineDocument/ram:LineID!=&apos;&apos;)">
+                Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126).</assert>
+            <assert test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity)">
+                Each Invoice line (BG-25) shall have an Invoiced quantity (BT-129).</assert>
+            <assert test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity/@unitCode)">
+                An Invoice line (BG-25) shall have an Invoiced quantity unit of measure code (BT-130).</assert>
+            <assert test="(ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)">
+                Each Invoice line (BG-25) shall have an Invoice line net amount (BT-131).</assert>
+            <assert test="(ram:SpecifiedTradeProduct/ram:Name!=&apos;&apos;)">
+                Each Invoice line (BG-25) shall contain the Item name (BT-153).</assert>
+            <assert test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount)">
+                Each Invoice line (BG-25) shall contain the Item net price (BT-146).</assert>
+            <assert test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount) &gt;= 0">
+                The Item net price (BT-146) shall NOT be negative.</assert>
+            <assert test="(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount &gt;= 0) or not(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount)">
+                The Item gross price (BT-148) shall NOT be negative.</assert>
+            <assert test="ram:SpecifiedTradeProduct/ram:GlobalID/@schemeID!=&apos;&apos; or not (ram:SpecifiedTradeProduct/ram:GlobalID)">
+                The Item standard identifier (BT-157) shall have a Scheme identifier</assert>
+            <assert test="(ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode/@listID!=&apos;&apos;) or not (ram:SpecifiedTradeProduct/ram:DesignatedProductClassification)">
+                The Item classification identifier (BT-158) shall have a Scheme identifier</assert>
+            <assert test="(ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode)">
+                Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151).</assert>
+            <assert test="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+                An Invoice shall at least have one VAT breakdown group (BG-23).</assert>
+            <assert test="string-length(substring-after(ram:SpecifiedTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:PayeeTradeParty">
+            <assert test="(ram:Name) and (not(ram:Name = ../ram:SellerTradeParty/ram:Name) and not(ram:ID = ../ram:SellerTradeParty/ram:ID) and not(ram:SpecifiedLegalOrganization/ram:ID = ../ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID))">
+                The Payee name (BT-59) shall be provided in the Invoice, if the Payee (BG-10) is different from the Seller (BG-4).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SellerTaxRepresentativeTradeParty">
+            <assert test="(ram:Name)">
+                The Seller tax representative name (BT-62) shall be provided in the Invoice, if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+            <assert test="(ram:PostalTradeAddress)">
+                The Seller tax representative postal address (BG-12) shall be provided in the Invoice, if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+            <assert test="(ram:PostalTradeAddress/ram:CountryID)">
+                The Seller tax representative postal address (BG-12) shall contain a Tax representative country code (BT-69), if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+            <assert test="(ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;]!=&apos;&apos;)">
+                Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SellerTradeParty">
+            <assert test="(ram:ID) or (ram:GlobalID) or (ram:SpecifiedLegalOrganization/ram:ID) or (ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;])">
+                In order for the buyer to automatically identify a supplier, the Seller identifier (BT-29), the Seller legal registration identifier (BT-30) and/or the Seller VAT identifier (BT-31) shall be present.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod">
+            <assert test="(ram:EndDateTime/udt:DateTimeString[@format = &apos;102&apos;]) &gt;= (ram:StartDateTime/udt:DateTimeString[@format = &apos;102&apos;]) or not (ram:EndDateTime) or not (ram:StartDateTime)">
+                If both Invoice line period start date (BT-134) and Invoice line period end date (BT-135) are given then the Invoice line period end date (BT-135) shall be later or equal to the Invoice line period start date (BT-134).</assert>
+            <assert test="(ram:StartDateTime) or (ram:EndDateTime)">
+                If Invoice line period (BG-26) is used, the Invoice line period start date (BT-134) or the Invoice line period end date (BT-135) shall be filled, or both.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = &apos;false&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Invoice line allowance (BG-27) shall have an Invoice line allowance amount (BT-136).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line allowance (BG-27) shall have an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140).</assert>
+            <assert test="true()">
+                Invoice line allowance reason code (BT-140) and Invoice line allowance reason (BT-139) shall indicate the same type of allowance reason.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line allowance (BG-27) shall contain an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = &apos;true&apos;]">
+            <assert test="(ram:ActualAmount)">
+                Each Invoice line charge (BG-28) shall have an Invoice line charge amount (BT-141).</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line charge (BG-28) shall have an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145).</assert>
+            <assert test="true()">
+                Invoice line charge reason code (BT-145) and Invoice line charge reason (BT144) shall indicate the same type of charge reason.</assert>
+            <assert test="(ram:Reason) or (ram:ReasonCode)">
+                Each Invoice line charge (BG-28) shall contain an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145), or both.</assert>
+            <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2.</assert>
+            <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;]">
+            <assert test="contains(&apos; EL AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BL BJ BM BN BO BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW &apos;, concat(&apos; &apos;, substring(.,1,2), &apos; &apos;))">
+                The Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) shall have a prefix in accordance with ISO code ISO 3166-1 alpha-2 by which the country of issue may be identified. Nevertheless, Greece may use the prefix âELâ.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Reverse charge" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;E&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Exempt from VAT", the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;G&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Export outside the EU" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;K&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IGIC" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IGIC" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IPSI" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-48).</assert>
+            <assert test="not(ram:RateApplicablePercent)">
+                A Document level allowance (BG-20) where VAT category code (BT-95) is "Not subject to VAT" shall not contain a Document level allowance VAT rate (BT-96).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;S&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Standard rated" the Document level allowance VAT rate (BT-96) shall be greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Zero rated" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Reverse charge" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;E&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Exempt from VAT", the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;G&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Export outside the EU" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;K&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Intra-community supply" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IGIC" the Document level charge VAT rate (BT-103) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IPSI" the Document level charge VAT rate (BT-103) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-48).</assert>
+            <assert test="not(ram:RateApplicablePercent)">
+                A Document level charge (BG-21) where the VAT category code (BT-102) is "Not subject to VAT" shall not contain a Document level charge VAT rate (BT-103).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;S&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Standard rated" the Document level charge VAT rate (BT-103) shall be greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains a Document level charge where the Document level charge VAT category code (BT-102) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Zero rated" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementHeaderMonetarySummation">
+            <assert test="(ram:TaxBasisTotalAmount)">
+                An Invoice shall have the Invoice total amount without VAT (BT-109).</assert>
+            <assert test="(ram:GrandTotalAmount)">
+                An Invoice shall have the Invoice total amount with VAT (BT-112).</assert>
+            <assert test="(ram:DuePayableAmount)">
+                An Invoice shall have the Amount due for payment (BT-115).</assert>
+            <assert test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;])and not (ram:AllowanceTotalAmount)) or ram:AllowanceTotalAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:ActualAmount)* 10 * 10 ) div 100)">
+                Sum of allowances on document level (BT-107) = S Document level allowance amount (BT-92).</assert>
+            <assert test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;])and not (ram:ChargeTotalAmount)) or ram:ChargeTotalAmount = &#13;&#10;((round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:ActualAmount)* 10 * 10 ) div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount)* 10 * 10 ) div 100))">
+                Sum of charges on document level (BT-108) = S Document level charge amount (BT-99).</assert>
+            <assert test="(ram:GrandTotalAmount = round(ram:TaxBasisTotalAmount*100 + ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]*100 +0) div 100) or ((ram:GrandTotalAmount = ram:TaxBasisTotalAmount) and not (ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]))">
+                Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).</assert>
+            <assert test="string-length(substring-after(ram:LineTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2.</assert>
+            <assert test="string-length(substring-after(ram:AllowanceTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2.</assert>
+            <assert test="string-length(substring-after(ram:ChargeTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2.</assert>
+            <assert test="string-length(substring-after(ram:TaxBasisTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2.</assert>
+            <assert test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode and . = round(. * 100) div 100) or not (@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode)]">
+                The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2.</assert>
+            <assert test="string-length(substring-after(ram:GrandTotalAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2.</assert>
+            <assert test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and . = round(. * 100) div 100) or not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode)]">
+                The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2.</assert>
+            <assert test="string-length(substring-after(ram:TotalPrepaidAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Paid amount (BT-113) is 2.</assert>
+            <assert test="string-length(substring-after(ram:RoundingAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Rounding amount (BT-114) is 2.</assert>
+            <assert test="string-length(substring-after(ram:DuePayableAmount,&apos;.&apos;))&lt;=2">
+                The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2.</assert>
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) or (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and (ram:TaxTotalAmount/@currencyID = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) and not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode))">
+                If the VAT accounting currency code (BT-6) is present, then the Invoice total VAT amount in accounting currency (BT-111) shall be provided.</assert>
+            <assert test="(ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount*100 - ram:AllowanceTotalAmount*100 + ram:ChargeTotalAmount*100) div 100)) or ((ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount*100 - ram:AllowanceTotalAmount*100) div 100)) and not (ram:ChargeTotalAmount)) or ((ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount*100 + ram:ChargeTotalAmount*100) div 100)) and not (ram:AllowanceTotalAmount)) or ((ram:TaxBasisTotalAmount = (round(ram:LineTotalAmount * 100) div 100)) and not (ram:ChargeTotalAmount) and not (ram:AllowanceTotalAmount))">
+                Invoice total amount without VAT (BT-109) = S Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).</assert>
+            <assert test="(ram:DuePayableAmount = (round(ram:GrandTotalAmount*100 - ram:TotalPrepaidAmount*100 + ram:RoundingAmount*100) div 100)) or ((ram:DuePayableAmount = ram:GrandTotalAmount + ram:RoundingAmount) and not (ram:TotalPrepaidAmount)) or ((ram:DuePayableAmount = (round(ram:GrandTotalAmount*100 - ram:TotalPrepaidAmount*100) div 100)) and not (ram:RoundingAmount)) or ((ram:DuePayableAmount = (round(ram:GrandTotalAmount*100) div 100)) and not (ram:TotalPrepaidAmount) and not (ram:RoundingAmount))">
+                Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).</assert>
+            <assert test="(ram:LineTotalAmount)">
+                An Invoice shall have the Sum of Invoice line net amount (BT-106).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]">
+            <assert test=". = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount)*10*10)div 100)">
+                Invoice total VAT amount (BT-110) = S VAT category tax amount (BT-117).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementPaymentMeans">
+            <assert test="(ram:TypeCode)">
+                A Payment instruction (BG-16) shall specify the Payment means type code (BT-81).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//ram:SpecifiedTradeSettlementPaymentMeans[ram:TypeCode=&apos;30&apos; or ram:TypeCode=&apos;58&apos;]/ram:PayerPartyDebtorFinancialAccount">
+            <assert test="(ram:IBANID) or (ram:ProprietaryID)">
+                A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice.</assert>
+            <assert test="(ram:IBANID) or (ram:ProprietaryID)">
+                If the Payment means type code (BT-81) means SEPA credit transfer, Local credit transfer or Non-SEPA international credit transfer, the Payment account identifier (BT-84) shall be present.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;AE&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;AE&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;AE&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;AE&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Reverse charge" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âReverse charge".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âReverse chargeâ shall be 0 (zero).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Reverse charge" shall have a VAT exemption reason code (BT-121), meaning "Reverse charge" or the VAT exemption reason text (BT-120) "Reverse charge" (or the equivalent standard text in another language).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;E&apos;]">
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) In a VAT breakdown (BG-23) where the VAT category code (BT-118) equals "Exempt from VAT" shall equal 0 (zero).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Exempt from VAT" shall have a VAT exemption reason code (BT-121) or a VAT exemption reason text (BT-120).</assert>
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;E&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;E&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;E&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Exempt from VAT" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âExempt from VAT".</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;G&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;G&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;G&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;G&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Export outside the EU" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âExport outside the EU".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âExport outside the EUâ shall be 0 (zero).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with the VAT Category code (BT-118) "Export outside the EU" shall have a VAT exemption reason code (BT-121), meaning "Export outside the EU" or the VAT exemption reason text (BT-120) "Export outside the EU" (or the equivalent standard text in another language).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.= &apos;K&apos;]">
+            <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;K&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;K&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;K&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âIntra-community supply".</assert>
+            <assert test="../ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IGIC" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with the VAT Category code (BT-118) "Intra-community supply" shall have a VAT exemption reason code (BT-121), meaning "Intra-community supply" or the VAT exemption reason text (BT-120) "Intra-community supply" (or the equivalent standard text in another language).</assert>
+            <assert test="(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString) or (../../ram:BillingSpecifiedPeriod/ram:StartDateTime) or (../../ram:BillingSpecifiedPeriod/ram:EndDateTime)">
+                In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the Actual delivery date (BT-72) or the Invoicing period (BG-14) shall not be blank.</assert>
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID">
+                In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the Deliver to country code (BT-80) shall not be blank.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;L&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;L&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;L&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)">
+                For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "IGIC", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is âIGICâ and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).</assert>
+            <assert test="true()">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IGIC" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "IGIC" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;M&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;M&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;M&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)">
+                For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "IPSI", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is âIPSIâ and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).</assert>
+            <assert test="true()">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IPSI" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+            <assert test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) "IPSI" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;O&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;O&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;O&apos;]/ram:ActualAmount)*10*10)div 100)">
+                In a VAT breakdown (BG-23) where the VAT category code (BT-118) is " Not subject to VAT" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âNot subject to VAT".</assert>
+            <assert test="ram:CalculatedAmount = 0">
+                The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âNot subject to VATâ shall be 0 (zero).</assert>
+            <assert test="(ram:ExemptionReason) or (ram:ExemptionReasonCode)">
+                A VAT Breakdown (BG-23) with VAT Category code (BT-118) " Not subject to VAT" shall have a VAT exemption reason code (BT-121), meaning " Not subject to VAT" or a VAT exemption reason text (BT-120) " Not subject to VAT" (or the equivalent standard text in another language).</assert>
+            <assert test="not(//ram:ApplicableTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain other VAT breakdown groups (BG-23).</assert>
+            <assert test="not(//ram:ApplicableTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is not "Not subject to VAT".</assert>
+            <assert test="not(//ram:CategoryTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain Document level allowances (BG-20) where Document level allowance VAT category code (BT-95) is not "Not subject to VAT".</assert>
+            <assert test="not(//ram:CategoryTradeTax[ram:CategoryCode != &apos;O&apos;])">
+                An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain Document level charges (BG-21) where Document level charge VAT category code (BT-102) is not "Not subject to VAT".</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Reverse charge" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;E&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Exempt from VAT", the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;G&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Export outside the EU" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;K&apos;]">
+            <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Intracommunity supply" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;L&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IGIC" the invoiced item VAT rate (BT-152) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;M&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IPSI" the Invoiced item VAT rate (BT-152) shall be 0 (zero) or greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;O&apos;]">
+            <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-46).</assert>
+            <assert test="not(ram:RateApplicablePercent)">
+                An Invoice line (BG-25) where the VAT category code (BT-151) is "Not subject to VAT" shall not contain an Invoiced item VAT rate (BT-152).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;S&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent &gt; 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Standard rated" the Invoiced item VAT rate (BT-152) shall be greater than zero.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+            <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+                An Invoice that contains an Invoice line where the Invoiced item VAT category code (BT-151) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+            <assert test="ram:RateApplicablePercent = 0">
+                In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Zero rated" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice">
+            <assert test="(rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID != &apos;&apos;)">
+                An Invoice shall have a Specification identifier (BT-24).</assert>
+            <assert test="(rsm:ExchangedDocument/ram:ID !=&apos;&apos;)">
+                An Invoice shall have an Invoice number (BT-1).</assert>
+            <assert test="(rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString[@format=&apos;102&apos;]!=&apos;&apos;)">
+                An Invoice shall have an Invoice issue date (BT-2).</assert>
+            <assert test="(rsm:ExchangedDocument/ram:TypeCode!=&apos;&apos;)">
+                An Invoice shall have an Invoice type code (BT-3).</assert>
+            <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode!=&apos;&apos;)">
+                An Invoice shall have an Invoice currency code (BT-5).</assert>
+            <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name!=&apos;&apos;)">
+                An Invoice shall contain the Seller name (BT-27).</assert>
+            <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name!=&apos;&apos;)">
+                An Invoice shall contain the Buyer name (BT-44).</assert>
+            <assert test="//ram:SellerTradeParty/ram:PostalTradeAddress">
+                An Invoice shall contain the Seller postal address (BG-5).</assert>
+            <assert test="//ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;">
+                The Seller postal address (BG-5) shall contain a Seller country code (BT-40).</assert>
+            <assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!=&apos;&apos; or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication)">
+                The Seller electronic address (BT-34) shall have a Scheme identifier.</assert>
+            <assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!=&apos;&apos; or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication)">
+                The Buyer electronic address (BT-49) shall have a Scheme identifier.</assert>
+            <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) and     ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;S&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;S&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âStandard ratedâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "Standard rated".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;Z&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;Z&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âZero ratedâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Zero rated".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;E&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;E&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âExempt from VATâ shall contain exactly one VAT breakdown (BG-23) with the VAT category code (BT-118) equal to "Exempt from VAT".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;AE&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;AE&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âReverse chargeâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "VAT reverse charge".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;K&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;K&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIntra-community supplyâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Intra-community supply".</assert>
+            <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;G&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;G&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âExport outside the EUâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Export outside the EU".</assert>
+            <assert test="not(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;]) or (     count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;])=1 and     (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;] or    //ram:CategoryTradeTax[ram:CategoryCode=&apos;O&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âNot subject to VATâ shall contain exactly one VAT breakdown group (BG-23) with the VAT category code (BT-118) equal to "Not subject to VAT".</assert>
+            <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) and     ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;L&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;L&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIGICâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "IGIC".</assert>
+            <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) and     ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;M&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;M&apos;]))">
+                An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIPSIâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "IPSI".</assert>
+            <assert test="(number(//ram:DuePayableAmount) &gt; 0 and ((//ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime) or (//ram:SpecifiedTradePaymentTerms/ram:Description))) or not(number(//ram:DuePayableAmount)&gt;0)">
+                In case the Amount due for payment (BT-115) is positive, either the Payment due date (BT-9) or the Payment terms (BT-20) shall be present.</assert>
+            <assert test="//ram:BuyerTradeParty/ram:PostalTradeAddress">
+                An Invoice shall contain the Buyer postal address (BG-8).</assert>
+            <assert test="//ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;">
+                The Buyer postal address shall contain a Buyer country code (BT-55).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument">
+            <assert test="count(ram:Name)&lt;=1">
+                Element 'ram:Name' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CategoryCode">
+            <report test="true()">
+                Element 'ram:CategoryCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ControlRequirementIndicator">
+            <report test="true()">
+                Element 'ram:ControlRequirementIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CopyIndicator/udt:IndicatorString">
+            <report test="true()">
+                Element 'udt:IndicatorString' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod">
+            <assert test="count(ram:CompleteDateTime)=1">
+                Element 'ram:CompleteDateTime' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:CompleteDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:CompleteDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:ContinuousIndicator">
+            <report test="true()">
+                Element 'ram:ContinuousIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:DurationMeasure">
+            <report test="true()">
+                Element 'ram:DurationMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:EndDateTime">
+            <report test="true()">
+                Element 'ram:EndDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:InclusiveIndicator">
+            <report test="true()">
+                Element 'ram:InclusiveIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:OpenIndicator">
+            <report test="true()">
+                Element 'ram:OpenIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:PurposeCode">
+            <report test="true()">
+                Element 'ram:PurposeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:SeasonCode">
+            <report test="true()">
+                Element 'ram:SeasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:StartDateFlexibilityCode">
+            <report test="true()">
+                Element 'ram:StartDateFlexibilityCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod/ram:StartDateTime">
+            <report test="true()">
+                Element 'ram:StartDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote">
+            <assert test="count(ram:Content)=1">
+                Element 'ram:Content' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ContentCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ContentCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ContentCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ContentCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ContentCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ContentCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ContentCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ContentCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ContentCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Subject">
+            <report test="true()">
+                Element 'ram:Subject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode">
+            <let name="codeValue3" value="."/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=3]/enumeration[@value=$codeValue3]">
+                Value of 'ram:SubjectCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:LanguageID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:LanguageID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:LanguageID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:LanguageID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:LanguageID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:LanguageID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:LanguageID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:Purpose">
+            <report test="true()">
+                Element 'ram:Purpose' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:PurposeCode">
+            <report test="true()">
+                Element 'ram:PurposeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:RevisionDateTime">
+            <report test="true()">
+                Element 'ram:RevisionDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode">
+            <let name="codeValue1" value="."/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=1]/enumeration[@value=$codeValue1]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:VersionID">
+            <report test="true()">
+                Element 'ram:VersionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext">
+            <assert test="count(ram:BusinessProcessSpecifiedDocumentContextParameter)&lt;=1">
+                Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GuidelineSpecifiedDocumentContextParameter)=1">
+                Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:ApplicationSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:ApplicationSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BIMSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:BIMSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:SpecifiedDocumentVersion">
+            <report test="true()">
+                Element 'ram:SpecifiedDocumentVersion' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:Value">
+            <report test="true()">
+                Element 'ram:Value' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:SpecifiedDocumentVersion">
+            <report test="true()">
+                Element 'ram:SpecifiedDocumentVersion' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:Value">
+            <report test="true()">
+                Element 'ram:Value' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:MessageStandardSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:MessageStandardSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:ScenarioSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:ScenarioSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:SpecifiedTransactionID">
+            <report test="true()">
+                Element 'ram:SpecifiedTransactionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:SubsetSpecifiedDocumentContextParameter">
+            <report test="true()">
+                Element 'ram:SubsetSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:TestIndicator/udt:IndicatorString">
+            <report test="true()">
+                Element 'udt:IndicatorString' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction">
+            <assert test="count(ram:IncludedSupplyChainTradeLineItem)&gt;=1">
+                Element 'ram:IncludedSupplyChainTradeLineItem' must occur at least 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement">
+            <assert test="count(ram:SellerTradeParty)=1">
+                Element 'ram:SellerTradeParty' must occur exactly 1 times.</assert>
+            <assert test="count(ram:BuyerTradeParty)=1">
+                Element 'ram:BuyerTradeParty' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:Name)&lt;=1">
+                Element 'ram:Name' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:AttachmentBinaryObject)&lt;=1">
+                Element 'ram:AttachmentBinaryObject' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@characterSetCode]">
+            <report test="true()">
+                Attribute @characterSetCode' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@encodingCode]">
+            <report test="true()">
+                Attribute @encodingCode' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@mimeCode]">
+            <let name="codeValue11" value="@mimeCode"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=11]/enumeration[@value=$codeValue11]">
+                Value of '@mimeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@uri]">
+            <report test="true()">
+                Attribute @uri' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode">
+            <let name="codeValue23" value="."/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=23]/enumeration[@value=$codeValue23]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ApplicableTradeDeliveryTerms/ram:DeliveryTypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ApplicableTradeDeliveryTerms/ram:DeliveryTypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ApplicableTradeDeliveryTerms/ram:DeliveryTypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ApplicableTradeDeliveryTerms/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ApplicableTradeDeliveryTerms/ram:RelevantTradeLocation">
+            <report test="true()">
+                Element 'ram:RelevantTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerAgentTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerAgentTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerAssignedAccountantTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerAssignedAccountantTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerReference[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerReference[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerRequisitionerTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerRequisitionerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTaxRepresentativeTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerTaxRepresentativeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:PostalTradeAddress)=1">
+                Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:SpecifiedTaxRegistration)&lt;=1">
+                Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue19" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=19]/enumeration[@value=$codeValue19]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+            <let name="codeValue20" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=20]/enumeration[@value=$codeValue20]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue21" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=21]/enumeration[@value=$codeValue21]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:DemandForecastReferencedDocument">
+            <report test="true()">
+                Element 'ram:DemandForecastReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:OrderResponseReferencedDocument">
+            <report test="true()">
+                Element 'ram:OrderResponseReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PriceListReferencedDocument">
+            <report test="true()">
+                Element 'ram:PriceListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:PostalTradeAddress)=1">
+                Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue13" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=13]/enumeration[@value=$codeValue13]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PromotionalDealReferencedDocument">
+            <report test="true()">
+                Element 'ram:PromotionalDealReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PurchaseConditionsReferencedDocument">
+            <report test="true()">
+                Element 'ram:PurchaseConditionsReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:QuotationReferencedDocument">
+            <report test="true()">
+                Element 'ram:QuotationReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:Reference">
+            <report test="true()">
+                Element 'ram:Reference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:RequisitionerReferencedDocument">
+            <report test="true()">
+                Element 'ram:RequisitionerReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SalesAgentTradeParty">
+            <report test="true()">
+                Element 'ram:SalesAgentTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerAssignedAccountantTradeParty">
+            <report test="true()">
+                Element 'ram:SellerAssignedAccountantTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:PostalTradeAddress)=1">
+                Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:SpecifiedTaxRegistration)=1">
+                Element 'ram:SpecifiedTaxRegistration' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue22" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=22]/enumeration[@value=$codeValue22]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty">
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:Description)&lt;=1">
+                Element 'ram:Description' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:PostalTradeAddress)=1">
+                Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Description[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Description[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue17" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=17]/enumeration[@value=$codeValue17]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+            <let name="codeValue18" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=18]/enumeration[@value=$codeValue18]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue13" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=13]/enumeration[@value=$codeValue13]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SupplyInstructionReferencedDocument">
+            <report test="true()">
+                Element 'ram:SupplyInstructionReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery">
+            <assert test="(ram:ShipToTradeParty/ram:PostalTradeAddress and ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;) or not (ram:ShipToTradeParty/ram:PostalTradeAddress)">
+                Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80).</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:DescriptionBinaryObject">
+            <report test="true()">
+                Element 'ram:DescriptionBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:EarliestOccurrenceDateTime">
+            <report test="true()">
+                Element 'ram:EarliestOccurrenceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:LatestOccurrenceDateTime">
+            <report test="true()">
+                Element 'ram:LatestOccurrenceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceLogisticsLocation">
+            <report test="true()">
+                Element 'ram:OccurrenceLogisticsLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:OccurrenceSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:UnitQuantity">
+            <report test="true()">
+                Element 'ram:UnitQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDespatchSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualDespatchSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualPickUpSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualPickUpSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualReceiptSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualReceiptSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:AdditionalReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ConsumptionReportReferencedDocument">
+            <report test="true()">
+                Element 'ram:ConsumptionReportReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:PackingListReferencedDocument">
+            <report test="true()">
+                Element 'ram:PackingListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:PreviousDeliverySupplyChainEvent">
+            <report test="true()">
+                Element 'ram:PreviousDeliverySupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:AssociatedInvoiceAmount">
+            <report test="true()">
+                Element 'ram:AssociatedInvoiceAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:AssociatedReferencedDocument">
+            <report test="true()">
+                Element 'ram:AssociatedReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:CarrierTradeParty">
+            <report test="true()">
+                Element 'ram:CarrierTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:ConsigneeTradeParty">
+            <report test="true()">
+                Element 'ram:ConsigneeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:ConsignorTradeParty">
+            <report test="true()">
+                Element 'ram:ConsignorTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:CustomsExportAgentTradeParty">
+            <report test="true()">
+                Element 'ram:CustomsExportAgentTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:CustomsImportAgentTradeParty">
+            <report test="true()">
+                Element 'ram:CustomsImportAgentTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:DeclaredValueForCustomsAmount">
+            <report test="true()">
+                Element 'ram:DeclaredValueForCustomsAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:DeliveryTradeParty">
+            <report test="true()">
+                Element 'ram:DeliveryTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:FreightForwarderTradeParty">
+            <report test="true()">
+                Element 'ram:FreightForwarderTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:GrossVolumeMeasure">
+            <report test="true()">
+                Element 'ram:GrossVolumeMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:GrossWeightMeasure">
+            <report test="true()">
+                Element 'ram:GrossWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:GroupingCentreTradeParty">
+            <report test="true()">
+                Element 'ram:GroupingCentreTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:IncludedSupplyChainConsignmentItem">
+            <report test="true()">
+                Element 'ram:IncludedSupplyChainConsignmentItem' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:InsurancePremiumAmount">
+            <report test="true()">
+                Element 'ram:InsurancePremiumAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:NetWeightMeasure">
+            <report test="true()">
+                Element 'ram:NetWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:PackageQuantity">
+            <report test="true()">
+                Element 'ram:PackageQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:SpecifiedLogisticsTransportMovement">
+            <assert test="count(ram:ModeCode)=1">
+                Element 'ram:ModeCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:SpecifiedLogisticsTransportMovement/ram:Mode">
+            <report test="true()">
+                Element 'ram:Mode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:SpecifiedLogisticsTransportMovement/ram:ModeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:SpecifiedLogisticsTransportMovement/ram:ModeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:SpecifiedLogisticsTransportMovement/ram:ModeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:SpecifiedLogisticsTransportMovement/ram:ModeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:SpecifiedLogisticsTransportMovement/ram:StageCode">
+            <report test="true()">
+                Element 'ram:StageCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:SpecifiedLogisticsTransportMovement/ram:UsedLogisticsTransportMeans">
+            <report test="true()">
+                Element 'ram:UsedLogisticsTransportMeans' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:TotalChargeAmount">
+            <report test="true()">
+                Element 'ram:TotalChargeAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:TransportContractReferencedDocument">
+            <report test="true()">
+                Element 'ram:TransportContractReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment/ram:UtilizedLogisticsTransportEquipment">
+            <report test="true()">
+                Element 'ram:UtilizedLogisticsTransportEquipment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty">
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue13" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=13]/enumeration[@value=$codeValue13]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty">
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue24" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=24]/enumeration[@value=$codeValue24]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue13" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=13]/enumeration[@value=$codeValue13]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty">
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue13" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=13]/enumeration[@value=$codeValue13]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement">
+            <assert test="count(ram:PaymentReference)&lt;=1">
+                Element 'ram:PaymentReference' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:InvoiceCurrencyCode)=1">
+                Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ApplicableTradeTax)&gt;=1">
+                Element 'ram:ApplicableTradeTax' must occur at least 1 times.</assert>
+            <assert test="count(ram:SpecifiedTradeSettlementHeaderMonetarySummation)=1">
+                Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+            <assert test="count(ram:CalculatedAmount)=1">
+                Element 'ram:CalculatedAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:BasisAmount)=1">
+                Element 'ram:BasisAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:LineTotalBasisAmount)&lt;=1">
+                Element 'ram:LineTotalBasisAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:AllowanceChargeBasisAmount)&lt;=1">
+                Element 'ram:AllowanceChargeBasisAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:CategoryCode)=1">
+                Element 'ram:CategoryCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:AllowanceChargeBasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:AllowanceChargeBasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode">
+            <let name="codeValue27" value="."/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=27]/enumeration[@value=$codeValue27]">
+                Value of 'ram:CategoryCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode">
+            <let name="codeValue28" value="."/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=28]/enumeration[@value=$codeValue28]">
+                Value of 'ram:ExemptionReasonCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:LineTotalBasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:LineTotalBasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate/udt:Date">
+            <report test="true()">
+                Element 'udt:Date' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString[@format]">
+            <let name="codeValue29" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=29]/enumeration[@value=$codeValue29]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod">
+            <assert test="count(ram:Description)&lt;=1">
+                Element 'ram:Description' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:CompleteDateTime">
+            <report test="true()">
+                Element 'ram:CompleteDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:ContinuousIndicator">
+            <report test="true()">
+                Element 'ram:ContinuousIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:Description[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:Description[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:DurationMeasure">
+            <report test="true()">
+                Element 'ram:DurationMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:InclusiveIndicator">
+            <report test="true()">
+                Element 'ram:InclusiveIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:OpenIndicator">
+            <report test="true()">
+                Element 'ram:OpenIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:PurposeCode">
+            <report test="true()">
+                Element 'ram:PurposeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:SeasonCode">
+            <report test="true()">
+                Element 'ram:SeasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateFlexibilityCode">
+            <report test="true()">
+                Element 'ram:StartDateFlexibilityCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditReason">
+            <report test="true()">
+                Element 'ram:CreditReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditReasonCode">
+            <report test="true()">
+                Element 'ram:CreditReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceIssuerID">
+            <report test="true()">
+                Element 'ram:CreditorReferenceIssuerID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceType">
+            <report test="true()">
+                Element 'ram:CreditorReferenceType' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:CreditorReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:DuePayableAmount">
+            <report test="true()">
+                Element 'ram:DuePayableAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:FactoringAgreementReferencedDocument">
+            <report test="true()">
+                Element 'ram:FactoringAgreementReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:FactoringListReferencedDocument">
+            <report test="true()">
+                Element 'ram:FactoringListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceApplicableTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:InvoiceApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceDateTime">
+            <report test="true()">
+                Element 'ram:InvoiceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceIssuerReference[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceIssuerReference[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument">
+            <assert test="(ram:IssuerAssignedID!=&apos;&apos;)">
+                Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25).</assert>
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty">
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue13" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=13]/enumeration[@value=$codeValue13]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty">
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName">
+            <report test="true()">
+                Element 'ram:TradingBusinessName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue13" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=13]/enumeration[@value=$codeValue13]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:LetterOfCreditReferencedDocument">
+            <report test="true()">
+                Element 'ram:LetterOfCreditReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:NextInvoiceDateTime">
+            <report test="true()">
+                Element 'ram:NextInvoiceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayableSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PayableSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty">
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeID]">
+            <let name="codeValue25" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=25]/enumeration[@value=$codeValue25]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+            <let name="codeValue26" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=26]/enumeration[@value=$codeValue26]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue13" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=13]/enumeration[@value=$codeValue13]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayerTradeParty">
+            <report test="true()">
+                Element 'ram:PayerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentApplicableTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:PaymentApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentCurrencyCode">
+            <report test="true()">
+                Element 'ram:PaymentCurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentReference[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentReference[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ProFormaInvoiceReferencedDocument">
+            <report test="true()">
+                Element 'ram:ProFormaInvoiceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PurchaseSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PurchaseSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:AmountTypeCode">
+            <report test="true()">
+                Element 'ram:AmountTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:CostReferenceDimensionPattern">
+            <report test="true()">
+                Element 'ram:CostReferenceDimensionPattern' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:SetTriggerCode">
+            <report test="true()">
+                Element 'ram:SetTriggerCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SalesSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SalesSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment">
+            <assert test="count(ram:IncludedTradeTax)&gt;=1">
+                Element 'ram:IncludedTradeTax' must occur at least 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:FormattedReceivedDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax">
+            <assert test="count(ram:CalculatedAmount)=1">
+                Element 'ram:CalculatedAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryCode)=1">
+                Element 'ram:CategoryCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:AllowanceChargeBasisAmount">
+            <report test="true()">
+                Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:BasisAmount">
+            <report test="true()">
+                Element 'ram:BasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:CalculatedAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:CalculatedAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:CategoryCode">
+            <let name="codeValue32" value="."/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=32]/enumeration[@value=$codeValue32]">
+                Value of 'ram:CategoryCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:DueDateTypeCode">
+            <report test="true()">
+                Element 'ram:DueDateTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:ExemptionReasonCode">
+            <report test="true()">
+                Element 'ram:ExemptionReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:ExemptionReason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:ExemptionReason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:LineTotalBasisAmount">
+            <report test="true()">
+                Element 'ram:LineTotalBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:TaxPointDate">
+            <report test="true()">
+                Element 'ram:TaxPointDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:IncludedTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:PaidAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment/ram:PaidAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedFinancialAdjustment">
+            <report test="true()">
+                Element 'ram:SpecifiedFinancialAdjustment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge">
+            <assert test="count(ram:Description)=1">
+                Element 'ram:Description' must occur exactly 1 times.</assert>
+            <assert test="count(ram:AppliedAmount)=1">
+                Element 'ram:AppliedAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AllowanceCharge">
+            <report test="true()">
+                Element 'ram:AllowanceCharge' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedFromLogisticsLocation">
+            <report test="true()">
+                Element 'ram:AppliedFromLogisticsLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedToLogisticsLocation">
+            <report test="true()">
+                Element 'ram:AppliedToLogisticsLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:AllowanceChargeBasisAmount">
+            <report test="true()">
+                Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:BasisAmount">
+            <report test="true()">
+                Element 'ram:BasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:CalculatedAmount">
+            <report test="true()">
+                Element 'ram:CalculatedAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:DueDateTypeCode">
+            <report test="true()">
+                Element 'ram:DueDateTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:ExemptionReason">
+            <report test="true()">
+                Element 'ram:ExemptionReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:ExemptionReasonCode">
+            <report test="true()">
+                Element 'ram:ExemptionReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:LineTotalBasisAmount">
+            <report test="true()">
+                Element 'ram:LineTotalBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:TaxPointDate">
+            <report test="true()">
+                Element 'ram:TaxPointDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:CalculationBasis">
+            <report test="true()">
+                Element 'ram:CalculationBasis' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:CalculationBasisCode">
+            <report test="true()">
+                Element 'ram:CalculationBasisCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:ChargeCategoryCode">
+            <report test="true()">
+                Element 'ram:ChargeCategoryCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:Description[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:Description[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:DisbursementAmount">
+            <report test="true()">
+                Element 'ram:DisbursementAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:PayingPartyRoleCode">
+            <report test="true()">
+                Element 'ram:PayingPartyRoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:PaymentArrangementCode">
+            <report test="true()">
+                Element 'ram:PaymentArrangementCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:PaymentPlaceLogisticsLocation">
+            <report test="true()">
+                Element 'ram:PaymentPlaceLogisticsLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:ServiceCategoryCode">
+            <report test="true()">
+                Element 'ram:ServiceCategoryCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:TariffClassCode">
+            <report test="true()">
+                Element 'ram:TariffClassCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:TransportPaymentMethodCode">
+            <report test="true()">
+                Element 'ram:TransportPaymentMethodCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge">
+            <assert test="count(ram:ChargeIndicator)=1">
+                Element 'ram:ChargeIndicator' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ActualAmount)=1">
+                Element 'ram:ActualAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryTradeTax)=1">
+                Element 'ram:CategoryTradeTax' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:ActualTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity[@unitCodeListAgencyID]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity[@unitCodeListAgencyName]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity[@unitCodeListID]">
+            <report test="true()">
+                Attribute @unitCodeListID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity[@unitCode]">
+            <let name="codeValue9" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=9]/enumeration[@value=$codeValue9]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryCode)=1">
+                Element 'ram:CategoryCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:AllowanceChargeBasisAmount">
+            <report test="true()">
+                Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BasisAmount">
+            <report test="true()">
+                Element 'ram:BasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CalculatedAmount">
+            <report test="true()">
+                Element 'ram:CalculatedAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode">
+            <let name="codeValue30" value="."/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=30]/enumeration[@value=$codeValue30]">
+                Value of 'ram:CategoryCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:DueDateTypeCode">
+            <report test="true()">
+                Element 'ram:DueDateTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:ExemptionReason">
+            <report test="true()">
+                Element 'ram:ExemptionReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:ExemptionReasonCode">
+            <report test="true()">
+                Element 'ram:ExemptionReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:LineTotalBasisAmount">
+            <report test="true()">
+                Element 'ram:LineTotalBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TaxPointDate">
+            <report test="true()">
+                Element 'ram:TaxPointDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator/udt:IndicatorString">
+            <report test="true()">
+                Element 'udt:IndicatorString' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:PrepaidIndicator">
+            <report test="true()">
+                Element 'ram:PrepaidIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:SequenceNumeric[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms">
+            <assert test="count(ram:Description)&lt;=1">
+                Element 'ram:Description' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:DirectDebitMandateID)&lt;=1">
+                Element 'ram:DirectDebitMandateID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:PartialPaymentAmount)&lt;=1">
+                Element 'ram:PartialPaymentAmount' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:ActualDiscountAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:ActualDiscountAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisPeriodMeasure[@unitCodeListVersionID]">
+            <report test="true()">
+                Attribute @unitCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisPeriodMeasure[@unitCode]">
+            <let name="codeValue6" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=6]/enumeration[@value=$codeValue6]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:CalculationPercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms/ram:ActualPenaltyAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms/ram:ActualPenaltyAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms/ram:BasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms/ram:BasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms/ram:BasisDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms/ram:BasisDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms/ram:BasisPeriodMeasure[@unitCodeListVersionID]">
+            <report test="true()">
+                Attribute @unitCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms/ram:BasisPeriodMeasure[@unitCode]">
+            <let name="codeValue6" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=6]/enumeration[@value=$codeValue6]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentPenaltyTerms/ram:CalculationPercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:Description[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:Description[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:FromEventCode">
+            <report test="true()">
+                Element 'ram:FromEventCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:InstructionTypeCode">
+            <report test="true()">
+                Element 'ram:InstructionTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PartialPaymentAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PartialPaymentAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PartialPaymentPercent">
+            <report test="true()">
+                Element 'ram:PartialPaymentPercent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PayeeTradeParty">
+            <report test="true()">
+                Element 'ram:PayeeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:PaymentMeansID">
+            <report test="true()">
+                Element 'ram:PaymentMeansID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:SettlementPeriodMeasure">
+            <report test="true()">
+                Element 'ram:SettlementPeriodMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementFinancialCard">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeSettlementFinancialCard' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation">
+            <assert test="count(ram:LineTotalAmount)=1">
+                Element 'ram:LineTotalAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ChargeTotalAmount)&lt;=1">
+                Element 'ram:ChargeTotalAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:AllowanceTotalAmount)&lt;=1">
+                Element 'ram:AllowanceTotalAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:TaxBasisTotalAmount)&lt;=2">
+                Element 'ram:TaxBasisTotalAmount' may occur at maximum 2 times.</assert>
+            <assert test="count(ram:TaxTotalAmount)&lt;=2">
+                Element 'ram:TaxTotalAmount' may occur at maximum 2 times.</assert>
+            <assert test="count(ram:RoundingAmount)&lt;=1">
+                Element 'ram:RoundingAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:GrandTotalAmount)&lt;=2">
+                Element 'ram:GrandTotalAmount' may occur at maximum 2 times.</assert>
+            <assert test="count(ram:TotalPrepaidAmount)&lt;=1">
+                Element 'ram:TotalPrepaidAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:DuePayableAmount)=1">
+                Element 'ram:DuePayableAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount[@currencyID]">
+            <let name="codeValue31" value="@currencyID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=31]/enumeration[@value=$codeValue31]">
+                Value of '@currencyID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrossLineTotalAmount">
+            <report test="true()">
+                Element 'ram:GrossLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:NetIncludingTaxesLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetIncludingTaxesLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:NetLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ProductValueExcludingTobaccoTaxInformationAmount">
+            <report test="true()">
+                Element 'ram:ProductValueExcludingTobaccoTaxInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RetailValueExcludingTaxInformationAmount">
+            <report test="true()">
+                Element 'ram:RetailValueExcludingTaxInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount">
+            <assert test="@currencyID">
+                Attribute '@currencyID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID]">
+            <let name="codeValue31" value="@currencyID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=31]/enumeration[@value=$codeValue31]">
+                Value of '@currencyID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalAllowanceChargeAmount">
+            <report test="true()">
+                Element 'ram:TotalAllowanceChargeAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalDepositFeeInformationAmount">
+            <report test="true()">
+                Element 'ram:TotalDepositFeeInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalDiscountAmount">
+            <report test="true()">
+                Element 'ram:TotalDiscountAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalRetailValueInformationAmount">
+            <report test="true()">
+                Element 'ram:TotalRetailValueInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:Information)&lt;=1">
+                Element 'ram:Information' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CreditAvailableAmount">
+            <report test="true()">
+                Element 'ram:CreditAvailableAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CreditLimitAmount">
+            <report test="true()">
+                Element 'ram:CreditLimitAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ExpiryDate">
+            <report test="true()">
+                Element 'ram:ExpiryDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:InterestRatePercent">
+            <report test="true()">
+                Element 'ram:InterestRatePercent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:IssuingCompanyName">
+            <report test="true()">
+                Element 'ram:IssuingCompanyName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:MicrochipIndicator">
+            <report test="true()">
+                Element 'ram:MicrochipIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ValidFromDateTime">
+            <report test="true()">
+                Element 'ram:ValidFromDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:VerificationNumeric">
+            <report test="true()">
+                Element 'ram:VerificationNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:GuaranteeMethodCode">
+            <report test="true()">
+                Element 'ram:GuaranteeMethodCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution">
+            <assert test="count(ram:BICID)=1">
+                Element 'ram:BICID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:AustralianBSBID">
+            <report test="true()">
+                Element 'ram:AustralianBSBID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:AustrianBankleitzahlID">
+            <report test="true()">
+                Element 'ram:AustrianBankleitzahlID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:CHIPSParticipantID">
+            <report test="true()">
+                Element 'ram:CHIPSParticipantID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:CHIPSUniversalID">
+            <report test="true()">
+                Element 'ram:CHIPSUniversalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:CanadianPaymentsAssociationID">
+            <report test="true()">
+                Element 'ram:CanadianPaymentsAssociationID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:ClearingSystemName">
+            <report test="true()">
+                Element 'ram:ClearingSystemName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:FedwireRoutingNumberID">
+            <report test="true()">
+                Element 'ram:FedwireRoutingNumberID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:GermanBankleitzahlID">
+            <report test="true()">
+                Element 'ram:GermanBankleitzahlID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:HellenicBankID">
+            <report test="true()">
+                Element 'ram:HellenicBankID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:HongKongBankID">
+            <report test="true()">
+                Element 'ram:HongKongBankID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:IndianFinancialSystemID">
+            <report test="true()">
+                Element 'ram:IndianFinancialSystemID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:IrishNSCID">
+            <report test="true()">
+                Element 'ram:IrishNSCID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:ItalianDomesticID">
+            <report test="true()">
+                Element 'ram:ItalianDomesticID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:JapanFinancialInstitutionCommonID">
+            <report test="true()">
+                Element 'ram:JapanFinancialInstitutionCommonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:LocationFinancialInstitutionAddress">
+            <report test="true()">
+                Element 'ram:LocationFinancialInstitutionAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:NewZealandNCCID">
+            <report test="true()">
+                Element 'ram:NewZealandNCCID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:PolishNationalClearingID">
+            <report test="true()">
+                Element 'ram:PolishNationalClearingID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:PortugueseNCCID">
+            <report test="true()">
+                Element 'ram:PortugueseNCCID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:RussianCentralBankID">
+            <report test="true()">
+                Element 'ram:RussianCentralBankID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:SICID">
+            <report test="true()">
+                Element 'ram:SICID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:SouthAfricanNCCID">
+            <report test="true()">
+                Element 'ram:SouthAfricanNCCID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:SpanishDomesticInterbankingID">
+            <report test="true()">
+                Element 'ram:SpanishDomesticInterbankingID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:SubDivisionBranchFinancialInstitution">
+            <report test="true()">
+                Element 'ram:SubDivisionBranchFinancialInstitution' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:SwissBCID">
+            <report test="true()">
+                Element 'ram:SwissBCID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:UKSortCodeID">
+            <report test="true()">
+                Element 'ram:UKSortCodeID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount">
+            <assert test="count(ram:IBANID)=1">
+                Element 'ram:IBANID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:AccountName">
+            <report test="true()">
+                Element 'ram:AccountName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:ProprietaryID">
+            <report test="true()">
+                Element 'ram:ProprietaryID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerSpecifiedDebtorFinancialInstitution">
+            <report test="true()">
+                Element 'ram:PayerSpecifiedDebtorFinancialInstitution' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PaymentChannelCode">
+            <report test="true()">
+                Element 'ram:PaymentChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PaymentMethodCode">
+            <report test="true()">
+                Element 'ram:PaymentMethodCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SubtotalCalculatedTradeTax">
+            <report test="true()">
+                Element 'ram:SubtotalCalculatedTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:AssociatedReferencedDocument">
+            <report test="true()">
+                Element 'ram:AssociatedReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:ConversionRateDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:ConversionRate[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:MarketID">
+            <report test="true()">
+                Element 'ram:MarketID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:SourceCurrencyCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:SourceCurrencyCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:SourceCurrencyCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:SourceCurrencyCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:SourceUnitBasisNumeric">
+            <report test="true()">
+                Element 'ram:SourceUnitBasisNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:TargetCurrencyCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:TargetCurrencyCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:TargetCurrencyCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:TargetCurrencyCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange/ram:TargetUnitBaseNumeric">
+            <report test="true()">
+                Element 'ram:TargetUnitBaseNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:UltimatePayeeTradeParty">
+            <report test="true()">
+                Element 'ram:UltimatePayeeTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem">
+            <assert test="count(ram:SpecifiedTradeProduct)=1">
+                Element 'ram:SpecifiedTradeProduct' must occur exactly 1 times.</assert>
+            <assert test="count(ram:SpecifiedLineTradeAgreement)=1">
+                Element 'ram:SpecifiedLineTradeAgreement' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument">
+            <assert test="count(ram:LineID)=1">
+                Element 'ram:LineID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote">
+            <assert test="count(ram:Content)=1">
+                Element 'ram:Content' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:Content[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:Content[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:Subject">
+            <report test="true()">
+                Element 'ram:Subject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode">
+            <let name="codeValue3" value="."/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=3]/enumeration[@value=$codeValue3]">
+                Value of 'ram:SubjectCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:ParentLineID">
+            <report test="true()">
+                Element 'ram:ParentLineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:DescriptionCode">
+            <report test="true()">
+                Element 'ram:DescriptionCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:IncludedSubordinateTradeLineItem">
+            <report test="true()">
+                Element 'ram:IncludedSubordinateTradeLineItem' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement">
+            <assert test="count(ram:NetPriceProductTradePrice)=1">
+                Element 'ram:NetPriceProductTradePrice' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument">
+            <assert test="count(ram:IssuerAssignedID)=1">
+                Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:AttachmentBinaryObject)&lt;=1">
+                Element 'ram:AttachmentBinaryObject' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:ReferenceTypeCode)=1">
+                Element 'ram:ReferenceTypeCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@characterSetCode]">
+            <report test="true()">
+                Attribute @characterSetCode' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@encodingCode]">
+            <report test="true()">
+                Attribute @encodingCode' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@mimeCode]">
+            <let name="codeValue11" value="@mimeCode"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=11]/enumeration[@value=$codeValue11]">
+                Value of '@mimeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject[@uri]">
+            <report test="true()">
+                Attribute @uri' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:LineID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:LineID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:LineID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:LineID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:LineID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:LineID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:LineID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ApplicableTradeDeliveryTerms">
+            <report test="true()">
+                Element 'ram:ApplicableTradeDeliveryTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerReference">
+            <report test="true()">
+                Element 'ram:BuyerReference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerRequisitionerTradeParty">
+            <report test="true()">
+                Element 'ram:BuyerRequisitionerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:LineID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:LineID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:LineID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:LineID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:LineID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:LineID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:LineID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:DemandForecastReferencedDocument">
+            <report test="true()">
+                Element 'ram:DemandForecastReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice">
+            <assert test="count(ram:ChargeAmount)=1">
+                Element 'ram:ChargeAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge">
+            <assert test="count(ram:ActualAmount)=1">
+                Element 'ram:ActualAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:ActualTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:BasisAmount">
+            <report test="true()">
+                Element 'ram:BasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CalculationPercent">
+            <report test="true()">
+                Element 'ram:CalculationPercent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CategoryTradeTax">
+            <report test="true()">
+                Element 'ram:CategoryTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ChargeIndicator/udt:IndicatorString">
+            <report test="true()">
+                Element 'udt:IndicatorString' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:PrepaidIndicator">
+            <report test="true()">
+                Element 'ram:PrepaidIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ReasonCode">
+            <report test="true()">
+                Element 'ram:ReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:Reason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:Reason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AssociatedReferencedDocument">
+            <report test="true()">
+                Element 'ram:AssociatedReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity[@unitCodeListAgencyID]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity[@unitCodeListAgencyName]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity[@unitCodeListID]">
+            <report test="true()">
+                Attribute @unitCodeListID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity[@unitCode]">
+            <let name="codeValue9" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=9]/enumeration[@value=$codeValue9]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChangeReason">
+            <report test="true()">
+                Element 'ram:ChangeReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:DeliveryTradeLocation">
+            <report test="true()">
+                Element 'ram:DeliveryTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:IncludedTradeTax">
+            <report test="true()">
+                Element 'ram:IncludedTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:MaximumQuantity">
+            <report test="true()">
+                Element 'ram:MaximumQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:MinimumQuantity">
+            <report test="true()">
+                Element 'ram:MinimumQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:OrderUnitConversionFactorNumeric">
+            <report test="true()">
+                Element 'ram:OrderUnitConversionFactorNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:TradeComparisonReferencePrice">
+            <report test="true()">
+                Element 'ram:TradeComparisonReferencePrice' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ValiditySpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:ValiditySpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:IncludedSpecifiedMarketplace">
+            <report test="true()">
+                Element 'ram:IncludedSpecifiedMarketplace' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ItemBuyerTradeParty">
+            <report test="true()">
+                Element 'ram:ItemBuyerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ItemSellerTradeParty">
+            <report test="true()">
+                Element 'ram:ItemSellerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice">
+            <assert test="count(ram:ChargeAmount)=1">
+                Element 'ram:ChargeAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:IncludedTradeTax)&lt;=1">
+                Element 'ram:IncludedTradeTax' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:AppliedTradeAllowanceCharge">
+            <report test="true()">
+                Element 'ram:AppliedTradeAllowanceCharge' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:AssociatedReferencedDocument">
+            <report test="true()">
+                Element 'ram:AssociatedReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity[@unitCodeListAgencyID]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity[@unitCodeListAgencyName]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity[@unitCodeListID]">
+            <report test="true()">
+                Attribute @unitCodeListID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity[@unitCode]">
+            <let name="codeValue9" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=9]/enumeration[@value=$codeValue9]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChangeReason">
+            <report test="true()">
+                Element 'ram:ChangeReason' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:DeliveryTradeLocation">
+            <report test="true()">
+                Element 'ram:DeliveryTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax">
+            <assert test="count(ram:CalculatedAmount)=1">
+                Element 'ram:CalculatedAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryCode)=1">
+                Element 'ram:CategoryCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:RateApplicablePercent)=1">
+                Element 'ram:RateApplicablePercent' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:AllowanceChargeBasisAmount">
+            <report test="true()">
+                Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:BasisAmount">
+            <report test="true()">
+                Element 'ram:BasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CalculatedAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CalculatedAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:DueDateTypeCode">
+            <report test="true()">
+                Element 'ram:DueDateTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:ExemptionReasonCode">
+            <report test="true()">
+                Element 'ram:ExemptionReasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:ExemptionReason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:ExemptionReason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:LineTotalBasisAmount">
+            <report test="true()">
+                Element 'ram:LineTotalBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:TaxPointDate">
+            <report test="true()">
+                Element 'ram:TaxPointDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:MaximumQuantity">
+            <report test="true()">
+                Element 'ram:MaximumQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:MinimumQuantity">
+            <report test="true()">
+                Element 'ram:MinimumQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:OrderUnitConversionFactorNumeric">
+            <report test="true()">
+                Element 'ram:OrderUnitConversionFactorNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:TradeComparisonReferencePrice">
+            <report test="true()">
+                Element 'ram:TradeComparisonReferencePrice' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ValiditySpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:ValiditySpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:PromotionalDealReferencedDocument">
+            <report test="true()">
+                Element 'ram:PromotionalDealReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:QuotationReferencedDocument">
+            <report test="true()">
+                Element 'ram:QuotationReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:RequisitionerReferencedDocument">
+            <report test="true()">
+                Element 'ram:RequisitionerReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:SellerOrderReferencedDocument">
+            <report test="true()">
+                Element 'ram:SellerOrderReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:LineID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:LineID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:LineID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:LineID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:LineID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:LineID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:LineID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery">
+            <assert test="count(ram:BilledQuantity)=1">
+                Element 'ram:BilledQuantity' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent">
+            <assert test="count(ram:OccurrenceDateTime)=1">
+                Element 'ram:OccurrenceDateTime' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:DescriptionBinaryObject">
+            <report test="true()">
+                Element 'ram:DescriptionBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:EarliestOccurrenceDateTime">
+            <report test="true()">
+                Element 'ram:EarliestOccurrenceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:LatestOccurrenceDateTime">
+            <report test="true()">
+                Element 'ram:LatestOccurrenceDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceLogisticsLocation">
+            <report test="true()">
+                Element 'ram:OccurrenceLogisticsLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:OccurrenceSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:UnitQuantity">
+            <report test="true()">
+                Element 'ram:UnitQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDespatchSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualDespatchSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualPickUpSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualPickUpSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualReceiptSupplyChainEvent">
+            <report test="true()">
+                Element 'ram:ActualReceiptSupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:AdditionalReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity[@unitCodeListAgencyID]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity[@unitCodeListAgencyName]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity[@unitCodeListID]">
+            <report test="true()">
+                Attribute @unitCodeListID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity[@unitCode]">
+            <let name="codeValue9" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=9]/enumeration[@value=$codeValue9]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ChargeFreeQuantity[@unitCodeListAgencyID]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ChargeFreeQuantity[@unitCodeListAgencyName]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ChargeFreeQuantity[@unitCodeListID]">
+            <report test="true()">
+                Attribute @unitCodeListID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ChargeFreeQuantity[@unitCode]">
+            <let name="codeValue9" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=9]/enumeration[@value=$codeValue9]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ConsumptionReportReferencedDocument">
+            <report test="true()">
+                Element 'ram:ConsumptionReportReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:LineID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:LineID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:LineID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:LineID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:LineID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:LineID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:LineID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchedQuantity">
+            <report test="true()">
+                Element 'ram:DespatchedQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:GrossWeightMeasure">
+            <report test="true()">
+                Element 'ram:GrossWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:IncludedSupplyChainPackaging">
+            <report test="true()">
+                Element 'ram:IncludedSupplyChainPackaging' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:NetWeightMeasure">
+            <report test="true()">
+                Element 'ram:NetWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PackageQuantity[@unitCodeListAgencyID]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PackageQuantity[@unitCodeListAgencyName]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PackageQuantity[@unitCodeListID]">
+            <report test="true()">
+                Attribute @unitCodeListID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PackageQuantity[@unitCode]">
+            <let name="codeValue9" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=9]/enumeration[@value=$codeValue9]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PackingListReferencedDocument">
+            <report test="true()">
+                Element 'ram:PackingListReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PerPackageUnitQuantity">
+            <report test="true()">
+                Element 'ram:PerPackageUnitQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ProductUnitQuantity">
+            <report test="true()">
+                Element 'ram:ProductUnitQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivedQuantity">
+            <report test="true()">
+                Element 'ram:ReceivedQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:FormattedIssueDateTime/qdt:DateTimeString[@format]">
+            <let name="codeValue10" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=10]/enumeration[@value=$codeValue10]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:LineID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:LineID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:LineID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:LineID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:LineID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:LineID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:LineID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:ReferenceTypeCode">
+            <report test="true()">
+                Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:RelatedSupplyChainConsignment">
+            <report test="true()">
+                Element 'ram:RelatedSupplyChainConsignment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:RequestedDeliverySupplyChainEvent">
+            <report test="true()">
+                Element 'ram:RequestedDeliverySupplyChainEvent' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:RequestedQuantity">
+            <report test="true()">
+                Element 'ram:RequestedQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipFromTradeParty">
+            <report test="true()">
+                Element 'ram:ShipFromTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:SpecifiedTaxRegistration)&lt;=1">
+                Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue13" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=13]/enumeration[@value=$codeValue13]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:SpecifiedDeliveryAdjustment">
+            <report test="true()">
+                Element 'ram:SpecifiedDeliveryAdjustment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:TheoreticalWeightMeasure">
+            <report test="true()">
+                Element 'ram:TheoreticalWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty">
+            <assert test="count(ram:ID)&lt;=1">
+                Element 'ram:ID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:DefinedTradeContact)&lt;=1">
+                Element 'ram:DefinedTradeContact' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:URIUniversalCommunication)&lt;=1">
+                Element 'ram:URIUniversalCommunication' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:SpecifiedTaxRegistration)&lt;=1">
+                Element 'ram:SpecifiedTaxRegistration' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DirectTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:DirectTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:InstantMessagingUniversalCommunication">
+            <report test="true()">
+                Element 'ram:InstantMessagingUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:JobTitle">
+            <report test="true()">
+                Element 'ram:JobTitle' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:MobileTelephoneUniversalCommunication">
+            <report test="true()">
+                Element 'ram:MobileTelephoneUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonID">
+            <report test="true()">
+                Element 'ram:PersonID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:Responsibility">
+            <report test="true()">
+                Element 'ram:Responsibility' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:SpecifiedContactPerson">
+            <report test="true()">
+                Element 'ram:SpecifiedContactPerson' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:SpecifiedNote">
+            <report test="true()">
+                Element 'ram:SpecifiedNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication">
+            <assert test="count(ram:CompleteNumber)=1">
+                Element 'ram:CompleteNumber' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelexUniversalCommunication">
+            <report test="true()">
+                Element 'ram:TelexUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:VOIPUniversalCommunication">
+            <report test="true()">
+                Element 'ram:VOIPUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:EndPointURIUniversalCommunication">
+            <report test="true()">
+                Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress">
+            <assert test="count(ram:CountryID)=1">
+                Element 'ram:CountryID' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+                Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+            <report test="true()">
+                Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+            <report test="true()">
+                Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+            <report test="true()">
+                Element 'ram:BuildingName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+            <report test="true()">
+                Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CareOf">
+            <report test="true()">
+                Element 'ram:CareOf' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+            <report test="true()">
+                Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryName">
+            <report test="true()">
+                Element 'ram:CountryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+            <report test="true()">
+                Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+            <report test="true()">
+                Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineFive">
+            <report test="true()">
+                Element 'ram:LineFive' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineFour">
+            <report test="true()">
+                Element 'ram:LineFour' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+            <report test="true()">
+                Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:StreetName">
+            <report test="true()">
+                Element 'ram:StreetName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:RoleCode">
+            <report test="true()">
+                Element 'ram:RoleCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+            <report test="true()">
+                Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+            <report test="true()">
+                Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+            <report test="true()">
+                Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+            <report test="true()">
+                Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+            <let name="codeValue13" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=13]/enumeration[@value=$codeValue13]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication">
+            <assert test="count(ram:URIID)=1">
+                Element 'ram:URIID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:ChannelCode">
+            <report test="true()">
+                Element 'ram:ChannelCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:CompleteNumber">
+            <report test="true()">
+                Element 'ram:CompleteNumber' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeID]">
+            <let name="codeValue12" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=12]/enumeration[@value=$codeValue12]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:URIUniversalCommunication/ram:URIID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement">
+            <assert test="count(ram:ApplicableTradeTax)&gt;=1">
+                Element 'ram:ApplicableTradeTax' must occur at least 1 times.</assert>
+            <assert test="count(ram:SpecifiedTradeSettlementLineMonetarySummation)=1">
+                Element 'ram:SpecifiedTradeSettlementLineMonetarySummation' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument">
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject">
+            <report test="true()">
+                Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:CopyIndicator">
+            <report test="true()">
+                Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:EffectiveSpecifiedPeriod">
+            <report test="true()">
+                Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime">
+            <report test="true()">
+                Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:GlobalID">
+            <report test="true()">
+                Element 'ram:GlobalID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:Information">
+            <report test="true()">
+                Element 'ram:Information' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerTradeParty">
+            <report test="true()">
+                Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:LineID">
+            <report test="true()">
+                Element 'ram:LineID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:PreviousRevisionID">
+            <report test="true()">
+                Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:RevisionID">
+            <report test="true()">
+                Element 'ram:RevisionID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:SectionName">
+            <report test="true()">
+                Element 'ram:SectionName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:StatusCode">
+            <report test="true()">
+                Element 'ram:StatusCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:TypeCode">
+            <let name="codeValue16" value="."/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=16]/enumeration[@value=$codeValue16]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:TypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:URIID">
+            <report test="true()">
+                Element 'ram:URIID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax">
+            <assert test="count(ram:CalculatedAmount)&lt;=1">
+                Element 'ram:CalculatedAmount' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:TypeCode)=1">
+                Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:CategoryCode)=1">
+                Element 'ram:CategoryCode' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:AllowanceChargeBasisAmount">
+            <report test="true()">
+                Element 'ram:AllowanceChargeBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount">
+            <report test="true()">
+                Element 'ram:BasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerNonDeductibleTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:BuyerRepayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedRate">
+            <report test="true()">
+                Element 'ram:CalculatedRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculationSequenceNumeric">
+            <report test="true()">
+                Element 'ram:CalculationSequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode">
+            <let name="codeValue14" value="."/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=14]/enumeration[@value=$codeValue14]">
+                Value of 'ram:CategoryCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryName">
+            <report test="true()">
+                Element 'ram:CategoryName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CurrencyCode">
+            <report test="true()">
+                Element 'ram:CurrencyCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CustomsDutyIndicator">
+            <report test="true()">
+                Element 'ram:CustomsDutyIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode">
+            <report test="true()">
+                Element 'ram:DueDateTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode">
+            <let name="codeValue15" value="."/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=15]/enumeration[@value=$codeValue15]">
+                Value of 'ram:ExemptionReasonCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:Jurisdiction">
+            <report test="true()">
+                Element 'ram:Jurisdiction' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:LineTotalBasisAmount">
+            <report test="true()">
+                Element 'ram:LineTotalBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:PlaceApplicableTradeLocation">
+            <report test="true()">
+                Element 'ram:PlaceApplicableTradeLocation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:SellerPayableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerPayableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:SellerRefundableTaxSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SellerRefundableTaxSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ServiceSupplyTradeCountry">
+            <report test="true()">
+                Element 'ram:ServiceSupplyTradeCountry' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:SpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TaxBasisAllowanceRate">
+            <report test="true()">
+                Element 'ram:TaxBasisAllowanceRate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate">
+            <report test="true()">
+                Element 'ram:TaxPointDate' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:Type">
+            <report test="true()">
+                Element 'ram:Type' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:CompleteDateTime">
+            <report test="true()">
+                Element 'ram:CompleteDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:ContinuousIndicator">
+            <report test="true()">
+                Element 'ram:ContinuousIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:Description">
+            <report test="true()">
+                Element 'ram:Description' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:DurationMeasure">
+            <report test="true()">
+                Element 'ram:DurationMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:InclusiveIndicator">
+            <report test="true()">
+                Element 'ram:InclusiveIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:OpenIndicator">
+            <report test="true()">
+                Element 'ram:OpenIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:PurposeCode">
+            <report test="true()">
+                Element 'ram:PurposeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:SeasonCode">
+            <report test="true()">
+                Element 'ram:SeasonCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateFlexibilityCode">
+            <report test="true()">
+                Element 'ram:StartDateFlexibilityCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTime">
+            <report test="true()">
+                Element 'udt:DateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTimeString[@format]">
+            <let name="codeValue2" value="@format"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+                Value of '@format' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:DiscountIndicator">
+            <report test="true()">
+                Element 'ram:DiscountIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:InvoiceIssuerReference">
+            <report test="true()">
+                Element 'ram:InvoiceIssuerReference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:InvoiceReferencedDocument">
+            <report test="true()">
+                Element 'ram:InvoiceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:PayableSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PayableSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:PaymentReference">
+            <report test="true()">
+                Element 'ram:PaymentReference' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:PurchaseSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:PurchaseSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:AmountTypeCode">
+            <report test="true()">
+                Element 'ram:AmountTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:CostReferenceDimensionPattern">
+            <report test="true()">
+                Element 'ram:CostReferenceDimensionPattern' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:SetTriggerCode">
+            <report test="true()">
+                Element 'ram:SetTriggerCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SalesSpecifiedTradeAccountingAccount">
+            <report test="true()">
+                Element 'ram:SalesSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedFinancialAdjustment">
+            <report test="true()">
+                Element 'ram:SpecifiedFinancialAdjustment' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedLogisticsServiceCharge">
+            <report test="true()">
+                Element 'ram:SpecifiedLogisticsServiceCharge' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge">
+            <assert test="count(ram:ChargeIndicator)=1">
+                Element 'ram:ChargeIndicator' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ActualAmount)=1">
+                Element 'ram:ActualAmount' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualTradeCurrencyExchange">
+            <report test="true()">
+                Element 'ram:ActualTradeCurrencyExchange' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisQuantity">
+            <report test="true()">
+                Element 'ram:BasisQuantity' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent[@format]">
+            <report test="true()">
+                Attribute @format' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax">
+            <report test="true()">
+                Element 'ram:CategoryTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator/udt:IndicatorString">
+            <report test="true()">
+                Element 'udt:IndicatorString' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:PrepaidIndicator">
+            <report test="true()">
+                Element 'ram:PrepaidIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:SequenceNumeric">
+            <report test="true()">
+                Element 'ram:SequenceNumeric' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:UnitBasisAmount">
+            <report test="true()">
+                Element 'ram:UnitBasisAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradePaymentTerms">
+            <report test="true()">
+                Element 'ram:SpecifiedTradePaymentTerms' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementFinancialCard">
+            <report test="true()">
+                Element 'ram:SpecifiedTradeSettlementFinancialCard' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation">
+            <assert test="count(ram:LineTotalAmount)=1">
+                Element 'ram:LineTotalAmount' must occur exactly 1 times.</assert>
+            <assert test="count(ram:TotalAllowanceChargeAmount)&lt;=1">
+                Element 'ram:TotalAllowanceChargeAmount' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:AllowanceTotalAmount">
+            <report test="true()">
+                Element 'ram:AllowanceTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:ChargeTotalAmount">
+            <report test="true()">
+                Element 'ram:ChargeTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:GrandTotalAmount">
+            <report test="true()">
+                Element 'ram:GrandTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:GrossLineTotalAmount">
+            <report test="true()">
+                Element 'ram:GrossLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:InformationAmount">
+            <report test="true()">
+                Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:NetIncludingTaxesLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetIncludingTaxesLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:NetLineTotalAmount">
+            <report test="true()">
+                Element 'ram:NetLineTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:ProductWeightLossInformationAmount">
+            <report test="true()">
+                Element 'ram:ProductWeightLossInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TaxBasisTotalAmount">
+            <report test="true()">
+                Element 'ram:TaxBasisTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TaxTotalAmount">
+            <report test="true()">
+                Element 'ram:TaxTotalAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalAllowanceChargeAmount[@currencyCodeListVersionID]">
+            <report test="true()">
+                Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalAllowanceChargeAmount[@currencyID]">
+            <report test="true()">
+                Attribute @currencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalRetailValueInformationAmount">
+            <report test="true()">
+                Element 'ram:TotalRetailValueInformationAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SubtotalCalculatedTradeTax">
+            <report test="true()">
+                Element 'ram:SubtotalCalculatedTradeTax' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:TotalAdjustmentAmount">
+            <report test="true()">
+                Element 'ram:TotalAdjustmentAmount' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct">
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:AdditionalReferenceReferencedDocument">
+            <report test="true()">
+                Element 'ram:AdditionalReferenceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableMaterialGoodsCharacteristic">
+            <report test="true()">
+                Element 'ram:ApplicableMaterialGoodsCharacteristic' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic">
+            <assert test="count(ram:Description)=1">
+                Element 'ram:Description' must occur exactly 1 times.</assert>
+            <assert test="count(ram:Value)=1">
+                Element 'ram:Value' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ApplicableProductCharacteristicCondition">
+            <report test="true()">
+                Element 'ram:ApplicableProductCharacteristicCondition' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ApplicableReferencedStandard">
+            <report test="true()">
+                Element 'ram:ApplicableReferencedStandard' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ContentTypeCode">
+            <report test="true()">
+                Element 'ram:ContentTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Description[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Description[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:MeasurementMethodCode">
+            <report test="true()">
+                Element 'ram:MeasurementMethodCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode">
+            <let name="codeValue5" value="."/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=5]/enumeration[@value=$codeValue5]">
+                Value of 'ram:TypeCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode[@listID]">
+            <report test="true()">
+                Attribute @listID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode[@listVersionID]">
+            <report test="true()">
+                Attribute @listVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ValueCode">
+            <report test="true()">
+                Element 'ram:ValueCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ValueDateTime">
+            <report test="true()">
+                Element 'ram:ValueDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ValueIndicator">
+            <report test="true()">
+                Element 'ram:ValueIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ValueMeasure[@unitCodeListVersionID]">
+            <report test="true()">
+                Attribute @unitCodeListVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ValueMeasure[@unitCode]">
+            <let name="codeValue6" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=6]/enumeration[@value=$codeValue6]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ValueSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:ValueSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Value[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Value[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:AreaDensityMeasure">
+            <report test="true()">
+                Element 'ram:AreaDensityMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BrandName">
+            <report test="true()">
+                Element 'ram:BrandName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BrandOwnerTradeParty">
+            <report test="true()">
+                Element 'ram:BrandOwnerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:CertificationEvidenceReferenceReferencedDocument">
+            <report test="true()">
+                Element 'ram:CertificationEvidenceReferenceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ColourCode">
+            <report test="true()">
+                Element 'ram:ColourCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ColourDescription">
+            <report test="true()">
+                Element 'ram:ColourDescription' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Description[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Description[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification">
+            <assert test="count(ram:ClassCode)=1">
+                Element 'ram:ClassCode' must occur exactly 1 times.</assert>
+            <assert test="count(ram:ClassName)&lt;=1">
+                Element 'ram:ClassName' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ApplicableReferencedStandard">
+            <report test="true()">
+                Element 'ram:ApplicableReferencedStandard' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode">
+            <let name="codeValue7" value="@listID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=7]/enumeration[@value=$codeValue7]">
+                Value of 'ram:ClassCode' is not allowed.</assert>
+            <assert test="@listID">
+                Attribute '@listID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@listAgencyID]">
+            <report test="true()">
+                Attribute @listAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@listAgencyName]">
+            <report test="true()">
+                Attribute @listAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@listID]">
+            <let name="codeValue8" value="@listID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=8]/enumeration[@value=$codeValue8]">
+                Value of '@listID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@listName]">
+            <report test="true()">
+                Attribute @listName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@listSchemeURI]">
+            <report test="true()">
+                Attribute @listSchemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@listURI]">
+            <report test="true()">
+                Attribute @listURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode[@name]">
+            <report test="true()">
+                Attribute @name' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassName[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassName[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassProductCharacteristic">
+            <report test="true()">
+                Element 'ram:ClassProductCharacteristic' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:SubClassCode">
+            <report test="true()">
+                Element 'ram:SubClassCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:SystemID">
+            <report test="true()">
+                Element 'ram:SystemID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:SystemName">
+            <report test="true()">
+                Element 'ram:SystemName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Designation">
+            <report test="true()">
+                Element 'ram:Designation' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DrainedNetWeightMeasure">
+            <report test="true()">
+                Element 'ram:DrainedNetWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:EndItemName">
+            <report test="true()">
+                Element 'ram:EndItemName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:EndItemTypeCode">
+            <report test="true()">
+                Element 'ram:EndItemTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:FormattedCancellationAnnouncedLaunchDateTime">
+            <report test="true()">
+                Element 'ram:FormattedCancellationAnnouncedLaunchDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:FormattedLatestProductDataChangeDateTime">
+            <report test="true()">
+                Element 'ram:FormattedLatestProductDataChangeDateTime' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeID]">
+            <let name="codeValue4" value="@schemeID"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=4]/enumeration[@value=$codeValue4]">
+                Value of '@schemeID' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GrossWeightMeasure">
+            <report test="true()">
+                Element 'ram:GrossWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct">
+            <assert test="count(ram:GlobalID)&lt;=1">
+                Element 'ram:GlobalID' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:Name)=1">
+                Element 'ram:Name' must occur exactly 1 times.</assert>
+            <assert test="count(ram:Description)&lt;=1">
+                Element 'ram:Description' may occur at maximum 1 times.</assert>
+            <assert test="count(ram:UnitQuantity)&lt;=1">
+                Element 'ram:UnitQuantity' may occur at maximum 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:BuyerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:BuyerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:BuyerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:BuyerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:BuyerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:BuyerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:BuyerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:Description[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:Description[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:GlobalID">
+            <assert test="@schemeID">
+                Attribute '@schemeID' is required in this context.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:GlobalID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:GlobalID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:GlobalID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:GlobalID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:GlobalID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:GlobalID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:ID">
+            <report test="true()">
+                Element 'ram:ID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:IndustryAssignedID">
+            <report test="true()">
+                Element 'ram:IndustryAssignedID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:ManufacturerAssignedID">
+            <report test="true()">
+                Element 'ram:ManufacturerAssignedID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:RelationshipTypeCode">
+            <report test="true()">
+                Element 'ram:RelationshipTypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:SellerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:SellerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:SellerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:SellerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:SellerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:SellerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:SellerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:UnitQuantity[@unitCodeListAgencyID]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:UnitQuantity[@unitCodeListAgencyName]">
+            <report test="true()">
+                Attribute @unitCodeListAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:UnitQuantity[@unitCodeListID]">
+            <report test="true()">
+                Attribute @unitCodeListID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:UnitQuantity[@unitCode]">
+            <let name="codeValue9" value="@unitCode"/>
+            <assert test="document(&apos;FACTUR-X_EXTENDED_codedb.xml&apos;)//cl[@id=9]/enumeration[@value=$codeValue9]">
+                Value of '@unitCode' is not allowed.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IndividualTradeProductInstance">
+            <report test="true()">
+                Element 'ram:IndividualTradeProductInstance' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:InformationNote">
+            <report test="true()">
+                Element 'ram:InformationNote' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:InspectionReferenceReferencedDocument">
+            <report test="true()">
+                Element 'ram:InspectionReferenceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:LegalRightsOwnerTradeParty">
+            <report test="true()">
+                Element 'ram:LegalRightsOwnerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:LinearSpatialDimension">
+            <report test="true()">
+                Element 'ram:LinearSpatialDimension' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:MSDSReferenceReferencedDocument">
+            <report test="true()">
+                Element 'ram:MSDSReferenceReferencedDocument' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ManufacturerAssignedID">
+            <report test="true()">
+                Element 'ram:ManufacturerAssignedID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ManufacturerTradeParty">
+            <report test="true()">
+                Element 'ram:ManufacturerTradeParty' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:MaximumLinearSpatialDimension">
+            <report test="true()">
+                Element 'ram:MaximumLinearSpatialDimension' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:MinimumLinearSpatialDimension">
+            <report test="true()">
+                Element 'ram:MinimumLinearSpatialDimension' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Name[@languageID]">
+            <report test="true()">
+                Attribute @languageID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Name[@languageLocaleID]">
+            <report test="true()">
+                Attribute @languageLocaleID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:NetWeightMeasure">
+            <report test="true()">
+                Element 'ram:NetWeightMeasure' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry">
+            <assert test="count(ram:ID)=1">
+                Element 'ram:ID' must occur exactly 1 times.</assert>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry/ram:ID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry/ram:ID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry/ram:ID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry/ram:Name">
+            <report test="true()">
+                Element 'ram:Name' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry/ram:SubordinateTradeCountrySubDivision">
+            <report test="true()">
+                Element 'ram:SubordinateTradeCountrySubDivision' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:PresentationSpecifiedBinaryFile">
+            <report test="true()">
+                Element 'ram:PresentationSpecifiedBinaryFile' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ProductGroupID">
+            <report test="true()">
+                Element 'ram:ProductGroupID' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeAgencyID]">
+            <report test="true()">
+                Attribute @schemeAgencyID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeAgencyName]">
+            <report test="true()">
+                Attribute @schemeAgencyName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeDataURI]">
+            <report test="true()">
+                Attribute @schemeDataURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeID]">
+            <report test="true()">
+                Attribute @schemeID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeName]">
+            <report test="true()">
+                Attribute @schemeName' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeURI]">
+            <report test="true()">
+                Attribute @schemeURI' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID[@schemeVersionID]">
+            <report test="true()">
+                Attribute @schemeVersionID' marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SubBrandName">
+            <report test="true()">
+                Element 'ram:SubBrandName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:TradeName">
+            <report test="true()">
+                Element 'ram:TradeName' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:TypeCode">
+            <report test="true()">
+                Element 'ram:TypeCode' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:UseDescription">
+            <report test="true()">
+                Element 'ram:UseDescription' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:VariableMeasureIndicator">
+            <report test="true()">
+                Element 'ram:VariableMeasureIndicator' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+    <pattern>
+        <rule context="/rsm:CrossIndustryInvoice/rsm:ValuationBreakdownStatement">
+            <report test="true()">
+                Element 'rsm:ValuationBreakdownStatement' is marked as not used in the given context.</report>
+        </rule>
+    </pattern>
+</schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED_codedb.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED_codedb.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_EXTENDED_codedb.xml	(revision 8435)
@@ -0,0 +1,7604 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<codedb>
+    <cl id="1">
+        <enumeration value="80"/>
+        <enumeration value="81"/>
+        <enumeration value="82"/>
+        <enumeration value="83"/>
+        <enumeration value="84"/>
+        <enumeration value="130"/>
+        <enumeration value="202"/>
+        <enumeration value="203"/>
+        <enumeration value="204"/>
+        <enumeration value="211"/>
+        <enumeration value="261"/>
+        <enumeration value="262"/>
+        <enumeration value="295"/>
+        <enumeration value="296"/>
+        <enumeration value="308"/>
+        <enumeration value="325"/>
+        <enumeration value="326"/>
+        <enumeration value="380"/>
+        <enumeration value="381"/>
+        <enumeration value="383"/>
+        <enumeration value="384"/>
+        <enumeration value="385"/>
+        <enumeration value="386"/>
+        <enumeration value="387"/>
+        <enumeration value="388"/>
+        <enumeration value="389"/>
+        <enumeration value="390"/>
+        <enumeration value="393"/>
+        <enumeration value="394"/>
+        <enumeration value="395"/>
+        <enumeration value="396"/>
+        <enumeration value="420"/>
+        <enumeration value="456"/>
+        <enumeration value="457"/>
+        <enumeration value="458"/>
+        <enumeration value="527"/>
+        <enumeration value="575"/>
+        <enumeration value="623"/>
+        <enumeration value="633"/>
+        <enumeration value="751"/>
+        <enumeration value="780"/>
+        <enumeration value="935"/>
+    </cl>
+    <cl id="2">
+        <enumeration value="102"/>
+    </cl>
+    <cl id="3">
+        <enumeration value="AAA"/>
+        <enumeration value="AAB"/>
+        <enumeration value="AAC"/>
+        <enumeration value="AAD"/>
+        <enumeration value="AAE"/>
+        <enumeration value="AAF"/>
+        <enumeration value="AAG"/>
+        <enumeration value="AAI"/>
+        <enumeration value="AAJ"/>
+        <enumeration value="AAK"/>
+        <enumeration value="AAL"/>
+        <enumeration value="AAM"/>
+        <enumeration value="AAN"/>
+        <enumeration value="AAO"/>
+        <enumeration value="AAP"/>
+        <enumeration value="AAQ"/>
+        <enumeration value="AAR"/>
+        <enumeration value="AAS"/>
+        <enumeration value="AAT"/>
+        <enumeration value="AAU"/>
+        <enumeration value="AAV"/>
+        <enumeration value="AAW"/>
+        <enumeration value="AAX"/>
+        <enumeration value="AAY"/>
+        <enumeration value="AAZ"/>
+        <enumeration value="ABA"/>
+        <enumeration value="ABB"/>
+        <enumeration value="ABC"/>
+        <enumeration value="ABD"/>
+        <enumeration value="ABE"/>
+        <enumeration value="ABF"/>
+        <enumeration value="ABG"/>
+        <enumeration value="ABH"/>
+        <enumeration value="ABI"/>
+        <enumeration value="ABJ"/>
+        <enumeration value="ABK"/>
+        <enumeration value="ABL"/>
+        <enumeration value="ABM"/>
+        <enumeration value="ABN"/>
+        <enumeration value="ABO"/>
+        <enumeration value="ABP"/>
+        <enumeration value="ABQ"/>
+        <enumeration value="ABR"/>
+        <enumeration value="ABS"/>
+        <enumeration value="ABT"/>
+        <enumeration value="ABU"/>
+        <enumeration value="ABV"/>
+        <enumeration value="ABW"/>
+        <enumeration value="ABX"/>
+        <enumeration value="ABZ"/>
+        <enumeration value="ACA"/>
+        <enumeration value="ACB"/>
+        <enumeration value="ACC"/>
+        <enumeration value="ACD"/>
+        <enumeration value="ACE"/>
+        <enumeration value="ACF"/>
+        <enumeration value="ACG"/>
+        <enumeration value="ACH"/>
+        <enumeration value="ACI"/>
+        <enumeration value="ACJ"/>
+        <enumeration value="ACK"/>
+        <enumeration value="ACL"/>
+        <enumeration value="ACM"/>
+        <enumeration value="ACN"/>
+        <enumeration value="ACO"/>
+        <enumeration value="ACP"/>
+        <enumeration value="ACQ"/>
+        <enumeration value="ACR"/>
+        <enumeration value="ACS"/>
+        <enumeration value="ACT"/>
+        <enumeration value="ACU"/>
+        <enumeration value="ACV"/>
+        <enumeration value="ACW"/>
+        <enumeration value="ACX"/>
+        <enumeration value="ACY"/>
+        <enumeration value="ACZ"/>
+        <enumeration value="ADA"/>
+        <enumeration value="ADB"/>
+        <enumeration value="ADC"/>
+        <enumeration value="ADD"/>
+        <enumeration value="ADE"/>
+        <enumeration value="ADF"/>
+        <enumeration value="ADG"/>
+        <enumeration value="ADH"/>
+        <enumeration value="ADI"/>
+        <enumeration value="ADJ"/>
+        <enumeration value="ADK"/>
+        <enumeration value="ADL"/>
+        <enumeration value="ADM"/>
+        <enumeration value="ADN"/>
+        <enumeration value="ADO"/>
+        <enumeration value="ADP"/>
+        <enumeration value="ADQ"/>
+        <enumeration value="ADR"/>
+        <enumeration value="ADS"/>
+        <enumeration value="ADT"/>
+        <enumeration value="ADU"/>
+        <enumeration value="ADV"/>
+        <enumeration value="ADW"/>
+        <enumeration value="ADX"/>
+        <enumeration value="ADY"/>
+        <enumeration value="ADZ"/>
+        <enumeration value="AEA"/>
+        <enumeration value="AEB"/>
+        <enumeration value="AEC"/>
+        <enumeration value="AED"/>
+        <enumeration value="AEE"/>
+        <enumeration value="AEF"/>
+        <enumeration value="AEG"/>
+        <enumeration value="AEH"/>
+        <enumeration value="AEI"/>
+        <enumeration value="AEJ"/>
+        <enumeration value="AEK"/>
+        <enumeration value="AEL"/>
+        <enumeration value="AEM"/>
+        <enumeration value="AEN"/>
+        <enumeration value="AEO"/>
+        <enumeration value="AEP"/>
+        <enumeration value="AEQ"/>
+        <enumeration value="AER"/>
+        <enumeration value="AES"/>
+        <enumeration value="AET"/>
+        <enumeration value="AEU"/>
+        <enumeration value="AEV"/>
+        <enumeration value="AEW"/>
+        <enumeration value="AEX"/>
+        <enumeration value="AEY"/>
+        <enumeration value="AEZ"/>
+        <enumeration value="AFA"/>
+        <enumeration value="AFB"/>
+        <enumeration value="AFC"/>
+        <enumeration value="AFD"/>
+        <enumeration value="AFE"/>
+        <enumeration value="AFF"/>
+        <enumeration value="AFG"/>
+        <enumeration value="AFH"/>
+        <enumeration value="AFI"/>
+        <enumeration value="AFJ"/>
+        <enumeration value="AFK"/>
+        <enumeration value="AFL"/>
+        <enumeration value="AFM"/>
+        <enumeration value="AFN"/>
+        <enumeration value="AFO"/>
+        <enumeration value="AFP"/>
+        <enumeration value="AFQ"/>
+        <enumeration value="AFR"/>
+        <enumeration value="AFS"/>
+        <enumeration value="AFT"/>
+        <enumeration value="AFU"/>
+        <enumeration value="AFV"/>
+        <enumeration value="AFW"/>
+        <enumeration value="AFX"/>
+        <enumeration value="AFY"/>
+        <enumeration value="AFZ"/>
+        <enumeration value="AGA"/>
+        <enumeration value="AGB"/>
+        <enumeration value="AGC"/>
+        <enumeration value="AGD"/>
+        <enumeration value="AGE"/>
+        <enumeration value="AGF"/>
+        <enumeration value="AGG"/>
+        <enumeration value="AGH"/>
+        <enumeration value="AGI"/>
+        <enumeration value="AGJ"/>
+        <enumeration value="AGK"/>
+        <enumeration value="AGL"/>
+        <enumeration value="AGM"/>
+        <enumeration value="AGN"/>
+        <enumeration value="AGO"/>
+        <enumeration value="AGP"/>
+        <enumeration value="AGQ"/>
+        <enumeration value="AGR"/>
+        <enumeration value="AGS"/>
+        <enumeration value="AGT"/>
+        <enumeration value="AGU"/>
+        <enumeration value="AGV"/>
+        <enumeration value="AGW"/>
+        <enumeration value="AGX"/>
+        <enumeration value="AGY"/>
+        <enumeration value="AGZ"/>
+        <enumeration value="AHA"/>
+        <enumeration value="AHB"/>
+        <enumeration value="AHC"/>
+        <enumeration value="AHD"/>
+        <enumeration value="AHE"/>
+        <enumeration value="AHF"/>
+        <enumeration value="AHG"/>
+        <enumeration value="AHH"/>
+        <enumeration value="AHI"/>
+        <enumeration value="AHJ"/>
+        <enumeration value="AHK"/>
+        <enumeration value="AHL"/>
+        <enumeration value="AHM"/>
+        <enumeration value="AHN"/>
+        <enumeration value="AHO"/>
+        <enumeration value="AHP"/>
+        <enumeration value="AHQ"/>
+        <enumeration value="AHR"/>
+        <enumeration value="AHS"/>
+        <enumeration value="AHT"/>
+        <enumeration value="AHU"/>
+        <enumeration value="AHV"/>
+        <enumeration value="AHW"/>
+        <enumeration value="AHX"/>
+        <enumeration value="AHY"/>
+        <enumeration value="AHZ"/>
+        <enumeration value="AIA"/>
+        <enumeration value="AIB"/>
+        <enumeration value="AIC"/>
+        <enumeration value="AID"/>
+        <enumeration value="AIE"/>
+        <enumeration value="AIF"/>
+        <enumeration value="AIG"/>
+        <enumeration value="AIH"/>
+        <enumeration value="AII"/>
+        <enumeration value="AIJ"/>
+        <enumeration value="AIK"/>
+        <enumeration value="AIL"/>
+        <enumeration value="AIM"/>
+        <enumeration value="AIN"/>
+        <enumeration value="AIO"/>
+        <enumeration value="AIP"/>
+        <enumeration value="AIQ"/>
+        <enumeration value="AIR"/>
+        <enumeration value="AIS"/>
+        <enumeration value="AIT"/>
+        <enumeration value="AIU"/>
+        <enumeration value="AIV"/>
+        <enumeration value="AIW"/>
+        <enumeration value="AIX"/>
+        <enumeration value="AIY"/>
+        <enumeration value="AIZ"/>
+        <enumeration value="AJA"/>
+        <enumeration value="AJB"/>
+        <enumeration value="ALC"/>
+        <enumeration value="ALD"/>
+        <enumeration value="ALE"/>
+        <enumeration value="ALF"/>
+        <enumeration value="ALG"/>
+        <enumeration value="ALH"/>
+        <enumeration value="ALI"/>
+        <enumeration value="ALJ"/>
+        <enumeration value="ALK"/>
+        <enumeration value="ALL"/>
+        <enumeration value="ALM"/>
+        <enumeration value="ALN"/>
+        <enumeration value="ALO"/>
+        <enumeration value="ALP"/>
+        <enumeration value="ALQ"/>
+        <enumeration value="ARR"/>
+        <enumeration value="ARS"/>
+        <enumeration value="AUT"/>
+        <enumeration value="AUU"/>
+        <enumeration value="AUV"/>
+        <enumeration value="AUW"/>
+        <enumeration value="AUX"/>
+        <enumeration value="AUY"/>
+        <enumeration value="AUZ"/>
+        <enumeration value="AVA"/>
+        <enumeration value="AVB"/>
+        <enumeration value="AVC"/>
+        <enumeration value="AVD"/>
+        <enumeration value="AVE"/>
+        <enumeration value="AVF"/>
+        <enumeration value="BAG"/>
+        <enumeration value="BAH"/>
+        <enumeration value="BAI"/>
+        <enumeration value="BAJ"/>
+        <enumeration value="BAK"/>
+        <enumeration value="BAL"/>
+        <enumeration value="BAM"/>
+        <enumeration value="BAN"/>
+        <enumeration value="BAO"/>
+        <enumeration value="BAP"/>
+        <enumeration value="BAQ"/>
+        <enumeration value="BAR"/>
+        <enumeration value="BAS"/>
+        <enumeration value="BLC"/>
+        <enumeration value="BLD"/>
+        <enumeration value="BLE"/>
+        <enumeration value="BLF"/>
+        <enumeration value="BLG"/>
+        <enumeration value="BLH"/>
+        <enumeration value="BLI"/>
+        <enumeration value="BLJ"/>
+        <enumeration value="BLK"/>
+        <enumeration value="BLL"/>
+        <enumeration value="BLM"/>
+        <enumeration value="BLN"/>
+        <enumeration value="BLO"/>
+        <enumeration value="BLP"/>
+        <enumeration value="BLQ"/>
+        <enumeration value="BLR"/>
+        <enumeration value="BLS"/>
+        <enumeration value="BLT"/>
+        <enumeration value="BLU"/>
+        <enumeration value="BLV"/>
+        <enumeration value="BLW"/>
+        <enumeration value="BLX"/>
+        <enumeration value="BLY"/>
+        <enumeration value="BLZ"/>
+        <enumeration value="BMA"/>
+        <enumeration value="BMB"/>
+        <enumeration value="BMC"/>
+        <enumeration value="BMD"/>
+        <enumeration value="BME"/>
+        <enumeration value="CCI"/>
+        <enumeration value="CEX"/>
+        <enumeration value="CHG"/>
+        <enumeration value="CIP"/>
+        <enumeration value="CLP"/>
+        <enumeration value="CLR"/>
+        <enumeration value="COI"/>
+        <enumeration value="CUR"/>
+        <enumeration value="CUS"/>
+        <enumeration value="DAR"/>
+        <enumeration value="DCL"/>
+        <enumeration value="DEL"/>
+        <enumeration value="DIN"/>
+        <enumeration value="DOC"/>
+        <enumeration value="DUT"/>
+        <enumeration value="EUR"/>
+        <enumeration value="FBC"/>
+        <enumeration value="GBL"/>
+        <enumeration value="GEN"/>
+        <enumeration value="GS7"/>
+        <enumeration value="HAN"/>
+        <enumeration value="HAZ"/>
+        <enumeration value="ICN"/>
+        <enumeration value="IIN"/>
+        <enumeration value="IMI"/>
+        <enumeration value="IND"/>
+        <enumeration value="INS"/>
+        <enumeration value="INV"/>
+        <enumeration value="IRP"/>
+        <enumeration value="ITR"/>
+        <enumeration value="ITS"/>
+        <enumeration value="LAN"/>
+        <enumeration value="LIN"/>
+        <enumeration value="LOI"/>
+        <enumeration value="MCO"/>
+        <enumeration value="MDH"/>
+        <enumeration value="MKS"/>
+        <enumeration value="ORI"/>
+        <enumeration value="OSI"/>
+        <enumeration value="PAC"/>
+        <enumeration value="PAI"/>
+        <enumeration value="PAY"/>
+        <enumeration value="PKG"/>
+        <enumeration value="PKT"/>
+        <enumeration value="PMD"/>
+        <enumeration value="PMT"/>
+        <enumeration value="PRD"/>
+        <enumeration value="PRF"/>
+        <enumeration value="PRI"/>
+        <enumeration value="PUR"/>
+        <enumeration value="QIN"/>
+        <enumeration value="QQD"/>
+        <enumeration value="QUT"/>
+        <enumeration value="RAH"/>
+        <enumeration value="REG"/>
+        <enumeration value="RET"/>
+        <enumeration value="REV"/>
+        <enumeration value="RQR"/>
+        <enumeration value="SAF"/>
+        <enumeration value="SIC"/>
+        <enumeration value="SIN"/>
+        <enumeration value="SLR"/>
+        <enumeration value="SPA"/>
+        <enumeration value="SPG"/>
+        <enumeration value="SPH"/>
+        <enumeration value="SPP"/>
+        <enumeration value="SPT"/>
+        <enumeration value="SRN"/>
+        <enumeration value="SSR"/>
+        <enumeration value="SUR"/>
+        <enumeration value="TCA"/>
+        <enumeration value="TDT"/>
+        <enumeration value="TRA"/>
+        <enumeration value="TRR"/>
+        <enumeration value="TXD"/>
+        <enumeration value="WHI"/>
+        <enumeration value="ZZZ"/>
+    </cl>
+    <cl id="4">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="5">
+        <enumeration value="A"/>
+        <enumeration value="AAA"/>
+        <enumeration value="AAB"/>
+        <enumeration value="AAC"/>
+        <enumeration value="AAD"/>
+        <enumeration value="AAF"/>
+        <enumeration value="AAG"/>
+        <enumeration value="AAH"/>
+        <enumeration value="AAI"/>
+        <enumeration value="AAJ"/>
+        <enumeration value="AAK"/>
+        <enumeration value="AAM"/>
+        <enumeration value="AAN"/>
+        <enumeration value="AAO"/>
+        <enumeration value="AAP"/>
+        <enumeration value="AAQ"/>
+        <enumeration value="AAR"/>
+        <enumeration value="AAS"/>
+        <enumeration value="AAT"/>
+        <enumeration value="AAU"/>
+        <enumeration value="AAV"/>
+        <enumeration value="AAW"/>
+        <enumeration value="AAX"/>
+        <enumeration value="AAY"/>
+        <enumeration value="AAZ"/>
+        <enumeration value="ABA"/>
+        <enumeration value="ABB"/>
+        <enumeration value="ABC"/>
+        <enumeration value="ABD"/>
+        <enumeration value="ABE"/>
+        <enumeration value="ABF"/>
+        <enumeration value="ABG"/>
+        <enumeration value="ABH"/>
+        <enumeration value="ABI"/>
+        <enumeration value="ABJ"/>
+        <enumeration value="ABK"/>
+        <enumeration value="ABL"/>
+        <enumeration value="ABM"/>
+        <enumeration value="ABN"/>
+        <enumeration value="ABO"/>
+        <enumeration value="ABP"/>
+        <enumeration value="ABS"/>
+        <enumeration value="ABT"/>
+        <enumeration value="ABX"/>
+        <enumeration value="ABY"/>
+        <enumeration value="ABZ"/>
+        <enumeration value="ACA"/>
+        <enumeration value="ACE"/>
+        <enumeration value="ACG"/>
+        <enumeration value="ACN"/>
+        <enumeration value="ACP"/>
+        <enumeration value="ACS"/>
+        <enumeration value="ACV"/>
+        <enumeration value="ACW"/>
+        <enumeration value="ACX"/>
+        <enumeration value="ADR"/>
+        <enumeration value="ADS"/>
+        <enumeration value="ADT"/>
+        <enumeration value="ADU"/>
+        <enumeration value="ADV"/>
+        <enumeration value="ADW"/>
+        <enumeration value="ADX"/>
+        <enumeration value="ADY"/>
+        <enumeration value="ADZ"/>
+        <enumeration value="AEA"/>
+        <enumeration value="AEB"/>
+        <enumeration value="AEC"/>
+        <enumeration value="AED"/>
+        <enumeration value="AEE"/>
+        <enumeration value="AEF"/>
+        <enumeration value="AEG"/>
+        <enumeration value="AEH"/>
+        <enumeration value="AEI"/>
+        <enumeration value="AEJ"/>
+        <enumeration value="AEK"/>
+        <enumeration value="AEL"/>
+        <enumeration value="AEM"/>
+        <enumeration value="AEN"/>
+        <enumeration value="AEO"/>
+        <enumeration value="AEP"/>
+        <enumeration value="AEQ"/>
+        <enumeration value="AER"/>
+        <enumeration value="AES"/>
+        <enumeration value="AET"/>
+        <enumeration value="AEU"/>
+        <enumeration value="AEV"/>
+        <enumeration value="AEW"/>
+        <enumeration value="AEX"/>
+        <enumeration value="AEY"/>
+        <enumeration value="AEZ"/>
+        <enumeration value="AF"/>
+        <enumeration value="AFA"/>
+        <enumeration value="AFB"/>
+        <enumeration value="AFC"/>
+        <enumeration value="AFD"/>
+        <enumeration value="AFE"/>
+        <enumeration value="AFF"/>
+        <enumeration value="AFG"/>
+        <enumeration value="AFH"/>
+        <enumeration value="AFI"/>
+        <enumeration value="AFJ"/>
+        <enumeration value="AFK"/>
+        <enumeration value="AFL"/>
+        <enumeration value="AFM"/>
+        <enumeration value="AFN"/>
+        <enumeration value="AFO"/>
+        <enumeration value="AFP"/>
+        <enumeration value="AFQ"/>
+        <enumeration value="AFR"/>
+        <enumeration value="AFS"/>
+        <enumeration value="AFT"/>
+        <enumeration value="AFU"/>
+        <enumeration value="AFV"/>
+        <enumeration value="AFW"/>
+        <enumeration value="AFX"/>
+        <enumeration value="B"/>
+        <enumeration value="BL"/>
+        <enumeration value="BMY"/>
+        <enumeration value="BMZ"/>
+        <enumeration value="BNA"/>
+        <enumeration value="BNB"/>
+        <enumeration value="BNC"/>
+        <enumeration value="BND"/>
+        <enumeration value="BNE"/>
+        <enumeration value="BNF"/>
+        <enumeration value="BNG"/>
+        <enumeration value="BNH"/>
+        <enumeration value="BNI"/>
+        <enumeration value="BNJ"/>
+        <enumeration value="BNK"/>
+        <enumeration value="BNL"/>
+        <enumeration value="BNM"/>
+        <enumeration value="BNN"/>
+        <enumeration value="BNO"/>
+        <enumeration value="BNP"/>
+        <enumeration value="BNQ"/>
+        <enumeration value="BNR"/>
+        <enumeration value="BNS"/>
+        <enumeration value="BNT"/>
+        <enumeration value="BNU"/>
+        <enumeration value="BNV"/>
+        <enumeration value="BNW"/>
+        <enumeration value="BNX"/>
+        <enumeration value="BNY"/>
+        <enumeration value="BNZ"/>
+        <enumeration value="BR"/>
+        <enumeration value="BRA"/>
+        <enumeration value="BRB"/>
+        <enumeration value="BRC"/>
+        <enumeration value="BRD"/>
+        <enumeration value="BRE"/>
+        <enumeration value="BRF"/>
+        <enumeration value="BRG"/>
+        <enumeration value="BRH"/>
+        <enumeration value="BRI"/>
+        <enumeration value="BRJ"/>
+        <enumeration value="BRK"/>
+        <enumeration value="BRL"/>
+        <enumeration value="BS"/>
+        <enumeration value="BSW"/>
+        <enumeration value="BW"/>
+        <enumeration value="CHN"/>
+        <enumeration value="CM"/>
+        <enumeration value="CT"/>
+        <enumeration value="CV"/>
+        <enumeration value="CZ"/>
+        <enumeration value="D"/>
+        <enumeration value="DI"/>
+        <enumeration value="DL"/>
+        <enumeration value="DN"/>
+        <enumeration value="DP"/>
+        <enumeration value="DR"/>
+        <enumeration value="DS"/>
+        <enumeration value="DW"/>
+        <enumeration value="E"/>
+        <enumeration value="EA"/>
+        <enumeration value="F"/>
+        <enumeration value="FI"/>
+        <enumeration value="FL"/>
+        <enumeration value="FN"/>
+        <enumeration value="FV"/>
+        <enumeration value="GG"/>
+        <enumeration value="GW"/>
+        <enumeration value="HF"/>
+        <enumeration value="HM"/>
+        <enumeration value="HT"/>
+        <enumeration value="IB"/>
+        <enumeration value="ID"/>
+        <enumeration value="L"/>
+        <enumeration value="LM"/>
+        <enumeration value="LN"/>
+        <enumeration value="LND"/>
+        <enumeration value="M"/>
+        <enumeration value="MO"/>
+        <enumeration value="MW"/>
+        <enumeration value="N"/>
+        <enumeration value="OD"/>
+        <enumeration value="PRS"/>
+        <enumeration value="PTN"/>
+        <enumeration value="RA"/>
+        <enumeration value="RF"/>
+        <enumeration value="RJ"/>
+        <enumeration value="RMW"/>
+        <enumeration value="RP"/>
+        <enumeration value="RUN"/>
+        <enumeration value="RY"/>
+        <enumeration value="SQ"/>
+        <enumeration value="T"/>
+        <enumeration value="TC"/>
+        <enumeration value="TH"/>
+        <enumeration value="TN"/>
+        <enumeration value="TT"/>
+        <enumeration value="VGM"/>
+        <enumeration value="VH"/>
+        <enumeration value="VW"/>
+        <enumeration value="WA"/>
+        <enumeration value="WD"/>
+        <enumeration value="WM"/>
+        <enumeration value="WU"/>
+        <enumeration value="XH"/>
+        <enumeration value="XQ"/>
+        <enumeration value="XZ"/>
+        <enumeration value="YS"/>
+        <enumeration value="ZAL"/>
+        <enumeration value="ZAS"/>
+        <enumeration value="ZB"/>
+        <enumeration value="ZBI"/>
+        <enumeration value="ZC"/>
+        <enumeration value="ZCA"/>
+        <enumeration value="ZCB"/>
+        <enumeration value="ZCE"/>
+        <enumeration value="ZCL"/>
+        <enumeration value="ZCO"/>
+        <enumeration value="ZCR"/>
+        <enumeration value="ZCU"/>
+        <enumeration value="ZFE"/>
+        <enumeration value="ZFS"/>
+        <enumeration value="ZGE"/>
+        <enumeration value="ZH"/>
+        <enumeration value="ZK"/>
+        <enumeration value="ZMG"/>
+        <enumeration value="ZMN"/>
+        <enumeration value="ZMO"/>
+        <enumeration value="ZN"/>
+        <enumeration value="ZNA"/>
+        <enumeration value="ZNB"/>
+        <enumeration value="ZNI"/>
+        <enumeration value="ZO"/>
+        <enumeration value="ZP"/>
+        <enumeration value="ZPB"/>
+        <enumeration value="ZS"/>
+        <enumeration value="ZSB"/>
+        <enumeration value="ZSE"/>
+        <enumeration value="ZSI"/>
+        <enumeration value="ZSL"/>
+        <enumeration value="ZSN"/>
+        <enumeration value="ZTA"/>
+        <enumeration value="ZTE"/>
+        <enumeration value="ZTI"/>
+        <enumeration value="ZV"/>
+        <enumeration value="ZW"/>
+        <enumeration value="ZWA"/>
+        <enumeration value="ZZN"/>
+        <enumeration value="ZZR"/>
+        <enumeration value="ZZZ"/>
+    </cl>
+    <cl id="6">
+        <enumeration value="10"/>
+        <enumeration value="11"/>
+        <enumeration value="13"/>
+        <enumeration value="14"/>
+        <enumeration value="15"/>
+        <enumeration value="20"/>
+        <enumeration value="21"/>
+        <enumeration value="22"/>
+        <enumeration value="23"/>
+        <enumeration value="24"/>
+        <enumeration value="25"/>
+        <enumeration value="27"/>
+        <enumeration value="28"/>
+        <enumeration value="33"/>
+        <enumeration value="34"/>
+        <enumeration value="35"/>
+        <enumeration value="37"/>
+        <enumeration value="38"/>
+        <enumeration value="40"/>
+        <enumeration value="41"/>
+        <enumeration value="56"/>
+        <enumeration value="57"/>
+        <enumeration value="58"/>
+        <enumeration value="59"/>
+        <enumeration value="60"/>
+        <enumeration value="61"/>
+        <enumeration value="64"/>
+        <enumeration value="66"/>
+        <enumeration value="74"/>
+        <enumeration value="76"/>
+        <enumeration value="77"/>
+        <enumeration value="78"/>
+        <enumeration value="80"/>
+        <enumeration value="81"/>
+        <enumeration value="84"/>
+        <enumeration value="85"/>
+        <enumeration value="87"/>
+        <enumeration value="89"/>
+        <enumeration value="91"/>
+        <enumeration value="1I"/>
+        <enumeration value="2A"/>
+        <enumeration value="2B"/>
+        <enumeration value="2C"/>
+        <enumeration value="2G"/>
+        <enumeration value="2H"/>
+        <enumeration value="2I"/>
+        <enumeration value="2J"/>
+        <enumeration value="2K"/>
+        <enumeration value="2L"/>
+        <enumeration value="2M"/>
+        <enumeration value="2N"/>
+        <enumeration value="2P"/>
+        <enumeration value="2Q"/>
+        <enumeration value="2R"/>
+        <enumeration value="2U"/>
+        <enumeration value="2X"/>
+        <enumeration value="2Y"/>
+        <enumeration value="2Z"/>
+        <enumeration value="3B"/>
+        <enumeration value="3C"/>
+        <enumeration value="4C"/>
+        <enumeration value="4G"/>
+        <enumeration value="4H"/>
+        <enumeration value="4K"/>
+        <enumeration value="4L"/>
+        <enumeration value="4M"/>
+        <enumeration value="4N"/>
+        <enumeration value="4O"/>
+        <enumeration value="4P"/>
+        <enumeration value="4Q"/>
+        <enumeration value="4R"/>
+        <enumeration value="4T"/>
+        <enumeration value="4U"/>
+        <enumeration value="4W"/>
+        <enumeration value="4X"/>
+        <enumeration value="5A"/>
+        <enumeration value="5B"/>
+        <enumeration value="5E"/>
+        <enumeration value="5J"/>
+        <enumeration value="A1"/>
+        <enumeration value="A10"/>
+        <enumeration value="A11"/>
+        <enumeration value="A12"/>
+        <enumeration value="A13"/>
+        <enumeration value="A14"/>
+        <enumeration value="A15"/>
+        <enumeration value="A16"/>
+        <enumeration value="A17"/>
+        <enumeration value="A18"/>
+        <enumeration value="A19"/>
+        <enumeration value="A2"/>
+        <enumeration value="A20"/>
+        <enumeration value="A21"/>
+        <enumeration value="A22"/>
+        <enumeration value="A23"/>
+        <enumeration value="A24"/>
+        <enumeration value="A25"/>
+        <enumeration value="A26"/>
+        <enumeration value="A27"/>
+        <enumeration value="A28"/>
+        <enumeration value="A29"/>
+        <enumeration value="A3"/>
+        <enumeration value="A30"/>
+        <enumeration value="A31"/>
+        <enumeration value="A32"/>
+        <enumeration value="A33"/>
+        <enumeration value="A34"/>
+        <enumeration value="A35"/>
+        <enumeration value="A36"/>
+        <enumeration value="A37"/>
+        <enumeration value="A38"/>
+        <enumeration value="A39"/>
+        <enumeration value="A4"/>
+        <enumeration value="A40"/>
+        <enumeration value="A41"/>
+        <enumeration value="A42"/>
+        <enumeration value="A43"/>
+        <enumeration value="A44"/>
+        <enumeration value="A45"/>
+        <enumeration value="A47"/>
+        <enumeration value="A48"/>
+        <enumeration value="A49"/>
+        <enumeration value="A5"/>
+        <enumeration value="A50"/>
+        <enumeration value="A51"/>
+        <enumeration value="A52"/>
+        <enumeration value="A53"/>
+        <enumeration value="A54"/>
+        <enumeration value="A55"/>
+        <enumeration value="A56"/>
+        <enumeration value="A57"/>
+        <enumeration value="A58"/>
+        <enumeration value="A59"/>
+        <enumeration value="A6"/>
+        <enumeration value="A60"/>
+        <enumeration value="A61"/>
+        <enumeration value="A62"/>
+        <enumeration value="A63"/>
+        <enumeration value="A64"/>
+        <enumeration value="A65"/>
+        <enumeration value="A66"/>
+        <enumeration value="A67"/>
+        <enumeration value="A68"/>
+        <enumeration value="A69"/>
+        <enumeration value="A7"/>
+        <enumeration value="A70"/>
+        <enumeration value="A71"/>
+        <enumeration value="A73"/>
+        <enumeration value="A74"/>
+        <enumeration value="A75"/>
+        <enumeration value="A76"/>
+        <enumeration value="A77"/>
+        <enumeration value="A78"/>
+        <enumeration value="A79"/>
+        <enumeration value="A8"/>
+        <enumeration value="A80"/>
+        <enumeration value="A81"/>
+        <enumeration value="A82"/>
+        <enumeration value="A83"/>
+        <enumeration value="A84"/>
+        <enumeration value="A85"/>
+        <enumeration value="A86"/>
+        <enumeration value="A87"/>
+        <enumeration value="A88"/>
+        <enumeration value="A89"/>
+        <enumeration value="A9"/>
+        <enumeration value="A90"/>
+        <enumeration value="A91"/>
+        <enumeration value="A93"/>
+        <enumeration value="A94"/>
+        <enumeration value="A95"/>
+        <enumeration value="A96"/>
+        <enumeration value="A97"/>
+        <enumeration value="A98"/>
+        <enumeration value="A99"/>
+        <enumeration value="AA"/>
+        <enumeration value="AB"/>
+        <enumeration value="ACR"/>
+        <enumeration value="ACT"/>
+        <enumeration value="AD"/>
+        <enumeration value="AE"/>
+        <enumeration value="AH"/>
+        <enumeration value="AI"/>
+        <enumeration value="AK"/>
+        <enumeration value="AL"/>
+        <enumeration value="AMH"/>
+        <enumeration value="AMP"/>
+        <enumeration value="ANN"/>
+        <enumeration value="APZ"/>
+        <enumeration value="AQ"/>
+        <enumeration value="ARE"/>
+        <enumeration value="AS"/>
+        <enumeration value="ASM"/>
+        <enumeration value="ASU"/>
+        <enumeration value="ATM"/>
+        <enumeration value="ATT"/>
+        <enumeration value="AWG"/>
+        <enumeration value="AY"/>
+        <enumeration value="AZ"/>
+        <enumeration value="B1"/>
+        <enumeration value="B10"/>
+        <enumeration value="B11"/>
+        <enumeration value="B12"/>
+        <enumeration value="B13"/>
+        <enumeration value="B14"/>
+        <enumeration value="B15"/>
+        <enumeration value="B16"/>
+        <enumeration value="B17"/>
+        <enumeration value="B18"/>
+        <enumeration value="B19"/>
+        <enumeration value="B20"/>
+        <enumeration value="B21"/>
+        <enumeration value="B22"/>
+        <enumeration value="B23"/>
+        <enumeration value="B24"/>
+        <enumeration value="B25"/>
+        <enumeration value="B26"/>
+        <enumeration value="B27"/>
+        <enumeration value="B28"/>
+        <enumeration value="B29"/>
+        <enumeration value="B3"/>
+        <enumeration value="B30"/>
+        <enumeration value="B31"/>
+        <enumeration value="B32"/>
+        <enumeration value="B33"/>
+        <enumeration value="B34"/>
+        <enumeration value="B35"/>
+        <enumeration value="B36"/>
+        <enumeration value="B37"/>
+        <enumeration value="B38"/>
+        <enumeration value="B39"/>
+        <enumeration value="B4"/>
+        <enumeration value="B40"/>
+        <enumeration value="B41"/>
+        <enumeration value="B42"/>
+        <enumeration value="B43"/>
+        <enumeration value="B44"/>
+        <enumeration value="B45"/>
+        <enumeration value="B46"/>
+        <enumeration value="B47"/>
+        <enumeration value="B48"/>
+        <enumeration value="B49"/>
+        <enumeration value="B50"/>
+        <enumeration value="B51"/>
+        <enumeration value="B52"/>
+        <enumeration value="B53"/>
+        <enumeration value="B54"/>
+        <enumeration value="B55"/>
+        <enumeration value="B56"/>
+        <enumeration value="B57"/>
+        <enumeration value="B58"/>
+        <enumeration value="B59"/>
+        <enumeration value="B60"/>
+        <enumeration value="B61"/>
+        <enumeration value="B62"/>
+        <enumeration value="B63"/>
+        <enumeration value="B64"/>
+        <enumeration value="B65"/>
+        <enumeration value="B66"/>
+        <enumeration value="B67"/>
+        <enumeration value="B68"/>
+        <enumeration value="B69"/>
+        <enumeration value="B7"/>
+        <enumeration value="B70"/>
+        <enumeration value="B71"/>
+        <enumeration value="B72"/>
+        <enumeration value="B73"/>
+        <enumeration value="B74"/>
+        <enumeration value="B75"/>
+        <enumeration value="B76"/>
+        <enumeration value="B77"/>
+        <enumeration value="B78"/>
+        <enumeration value="B79"/>
+        <enumeration value="B8"/>
+        <enumeration value="B80"/>
+        <enumeration value="B81"/>
+        <enumeration value="B82"/>
+        <enumeration value="B83"/>
+        <enumeration value="B84"/>
+        <enumeration value="B85"/>
+        <enumeration value="B86"/>
+        <enumeration value="B87"/>
+        <enumeration value="B88"/>
+        <enumeration value="B89"/>
+        <enumeration value="B90"/>
+        <enumeration value="B91"/>
+        <enumeration value="B92"/>
+        <enumeration value="B93"/>
+        <enumeration value="B94"/>
+        <enumeration value="B95"/>
+        <enumeration value="B96"/>
+        <enumeration value="B97"/>
+        <enumeration value="B98"/>
+        <enumeration value="B99"/>
+        <enumeration value="BAR"/>
+        <enumeration value="BB"/>
+        <enumeration value="BFT"/>
+        <enumeration value="BHP"/>
+        <enumeration value="BIL"/>
+        <enumeration value="BLD"/>
+        <enumeration value="BLL"/>
+        <enumeration value="BP"/>
+        <enumeration value="BPM"/>
+        <enumeration value="BQL"/>
+        <enumeration value="BTU"/>
+        <enumeration value="BUA"/>
+        <enumeration value="BUI"/>
+        <enumeration value="C0"/>
+        <enumeration value="C10"/>
+        <enumeration value="C11"/>
+        <enumeration value="C12"/>
+        <enumeration value="C13"/>
+        <enumeration value="C14"/>
+        <enumeration value="C15"/>
+        <enumeration value="C16"/>
+        <enumeration value="C17"/>
+        <enumeration value="C18"/>
+        <enumeration value="C19"/>
+        <enumeration value="C20"/>
+        <enumeration value="C21"/>
+        <enumeration value="C22"/>
+        <enumeration value="C23"/>
+        <enumeration value="C24"/>
+        <enumeration value="C25"/>
+        <enumeration value="C26"/>
+        <enumeration value="C27"/>
+        <enumeration value="C28"/>
+        <enumeration value="C29"/>
+        <enumeration value="C3"/>
+        <enumeration value="C30"/>
+        <enumeration value="C31"/>
+        <enumeration value="C32"/>
+        <enumeration value="C33"/>
+        <enumeration value="C34"/>
+        <enumeration value="C35"/>
+        <enumeration value="C36"/>
+        <enumeration value="C37"/>
+        <enumeration value="C38"/>
+        <enumeration value="C39"/>
+        <enumeration value="C40"/>
+        <enumeration value="C41"/>
+        <enumeration value="C42"/>
+        <enumeration value="C43"/>
+        <enumeration value="C44"/>
+        <enumeration value="C45"/>
+        <enumeration value="C46"/>
+        <enumeration value="C47"/>
+        <enumeration value="C48"/>
+        <enumeration value="C49"/>
+        <enumeration value="C50"/>
+        <enumeration value="C51"/>
+        <enumeration value="C52"/>
+        <enumeration value="C53"/>
+        <enumeration value="C54"/>
+        <enumeration value="C55"/>
+        <enumeration value="C56"/>
+        <enumeration value="C57"/>
+        <enumeration value="C58"/>
+        <enumeration value="C59"/>
+        <enumeration value="C60"/>
+        <enumeration value="C61"/>
+        <enumeration value="C62"/>
+        <enumeration value="C63"/>
+        <enumeration value="C64"/>
+        <enumeration value="C65"/>
+        <enumeration value="C66"/>
+        <enumeration value="C67"/>
+        <enumeration value="C68"/>
+        <enumeration value="C69"/>
+        <enumeration value="C7"/>
+        <enumeration value="C70"/>
+        <enumeration value="C71"/>
+        <enumeration value="C72"/>
+        <enumeration value="C73"/>
+        <enumeration value="C74"/>
+        <enumeration value="C75"/>
+        <enumeration value="C76"/>
+        <enumeration value="C78"/>
+        <enumeration value="C79"/>
+        <enumeration value="C8"/>
+        <enumeration value="C80"/>
+        <enumeration value="C81"/>
+        <enumeration value="C82"/>
+        <enumeration value="C83"/>
+        <enumeration value="C84"/>
+        <enumeration value="C85"/>
+        <enumeration value="C86"/>
+        <enumeration value="C87"/>
+        <enumeration value="C88"/>
+        <enumeration value="C89"/>
+        <enumeration value="C9"/>
+        <enumeration value="C90"/>
+        <enumeration value="C91"/>
+        <enumeration value="C92"/>
+        <enumeration value="C93"/>
+        <enumeration value="C94"/>
+        <enumeration value="C95"/>
+        <enumeration value="C96"/>
+        <enumeration value="C97"/>
+        <enumeration value="C99"/>
+        <enumeration value="CCT"/>
+        <enumeration value="CDL"/>
+        <enumeration value="CEL"/>
+        <enumeration value="CEN"/>
+        <enumeration value="CG"/>
+        <enumeration value="CGM"/>
+        <enumeration value="CKG"/>
+        <enumeration value="CLF"/>
+        <enumeration value="CLT"/>
+        <enumeration value="CMK"/>
+        <enumeration value="CMQ"/>
+        <enumeration value="CMT"/>
+        <enumeration value="CNP"/>
+        <enumeration value="CNT"/>
+        <enumeration value="COU"/>
+        <enumeration value="CTG"/>
+        <enumeration value="CTM"/>
+        <enumeration value="CTN"/>
+        <enumeration value="CUR"/>
+        <enumeration value="CWA"/>
+        <enumeration value="CWI"/>
+        <enumeration value="D03"/>
+        <enumeration value="D04"/>
+        <enumeration value="D1"/>
+        <enumeration value="D10"/>
+        <enumeration value="D11"/>
+        <enumeration value="D12"/>
+        <enumeration value="D13"/>
+        <enumeration value="D15"/>
+        <enumeration value="D16"/>
+        <enumeration value="D17"/>
+        <enumeration value="D18"/>
+        <enumeration value="D19"/>
+        <enumeration value="D2"/>
+        <enumeration value="D20"/>
+        <enumeration value="D21"/>
+        <enumeration value="D22"/>
+        <enumeration value="D23"/>
+        <enumeration value="D24"/>
+        <enumeration value="D25"/>
+        <enumeration value="D26"/>
+        <enumeration value="D27"/>
+        <enumeration value="D29"/>
+        <enumeration value="D30"/>
+        <enumeration value="D31"/>
+        <enumeration value="D32"/>
+        <enumeration value="D33"/>
+        <enumeration value="D34"/>
+        <enumeration value="D35"/>
+        <enumeration value="D36"/>
+        <enumeration value="D37"/>
+        <enumeration value="D38"/>
+        <enumeration value="D39"/>
+        <enumeration value="D41"/>
+        <enumeration value="D42"/>
+        <enumeration value="D43"/>
+        <enumeration value="D44"/>
+        <enumeration value="D45"/>
+        <enumeration value="D46"/>
+        <enumeration value="D47"/>
+        <enumeration value="D48"/>
+        <enumeration value="D49"/>
+        <enumeration value="D5"/>
+        <enumeration value="D50"/>
+        <enumeration value="D51"/>
+        <enumeration value="D52"/>
+        <enumeration value="D53"/>
+        <enumeration value="D54"/>
+        <enumeration value="D55"/>
+        <enumeration value="D56"/>
+        <enumeration value="D57"/>
+        <enumeration value="D58"/>
+        <enumeration value="D59"/>
+        <enumeration value="D6"/>
+        <enumeration value="D60"/>
+        <enumeration value="D61"/>
+        <enumeration value="D62"/>
+        <enumeration value="D63"/>
+        <enumeration value="D65"/>
+        <enumeration value="D68"/>
+        <enumeration value="D69"/>
+        <enumeration value="D70"/>
+        <enumeration value="D71"/>
+        <enumeration value="D72"/>
+        <enumeration value="D73"/>
+        <enumeration value="D74"/>
+        <enumeration value="D75"/>
+        <enumeration value="D76"/>
+        <enumeration value="D77"/>
+        <enumeration value="D78"/>
+        <enumeration value="D80"/>
+        <enumeration value="D81"/>
+        <enumeration value="D82"/>
+        <enumeration value="D83"/>
+        <enumeration value="D85"/>
+        <enumeration value="D86"/>
+        <enumeration value="D87"/>
+        <enumeration value="D88"/>
+        <enumeration value="D89"/>
+        <enumeration value="D9"/>
+        <enumeration value="D91"/>
+        <enumeration value="D93"/>
+        <enumeration value="D94"/>
+        <enumeration value="D95"/>
+        <enumeration value="DAA"/>
+        <enumeration value="DAD"/>
+        <enumeration value="DAY"/>
+        <enumeration value="DB"/>
+        <enumeration value="DD"/>
+        <enumeration value="DEC"/>
+        <enumeration value="DG"/>
+        <enumeration value="DJ"/>
+        <enumeration value="DLT"/>
+        <enumeration value="DMA"/>
+        <enumeration value="DMK"/>
+        <enumeration value="DMO"/>
+        <enumeration value="DMQ"/>
+        <enumeration value="DMT"/>
+        <enumeration value="DN"/>
+        <enumeration value="DPC"/>
+        <enumeration value="DPR"/>
+        <enumeration value="DPT"/>
+        <enumeration value="DRA"/>
+        <enumeration value="DRI"/>
+        <enumeration value="DRL"/>
+        <enumeration value="DT"/>
+        <enumeration value="DTN"/>
+        <enumeration value="DU"/>
+        <enumeration value="DWT"/>
+        <enumeration value="DX"/>
+        <enumeration value="DZN"/>
+        <enumeration value="DZP"/>
+        <enumeration value="E01"/>
+        <enumeration value="E07"/>
+        <enumeration value="E08"/>
+        <enumeration value="E09"/>
+        <enumeration value="E10"/>
+        <enumeration value="E11"/>
+        <enumeration value="E12"/>
+        <enumeration value="E14"/>
+        <enumeration value="E15"/>
+        <enumeration value="E16"/>
+        <enumeration value="E17"/>
+        <enumeration value="E18"/>
+        <enumeration value="E19"/>
+        <enumeration value="E20"/>
+        <enumeration value="E21"/>
+        <enumeration value="E22"/>
+        <enumeration value="E23"/>
+        <enumeration value="E25"/>
+        <enumeration value="E27"/>
+        <enumeration value="E28"/>
+        <enumeration value="E30"/>
+        <enumeration value="E31"/>
+        <enumeration value="E32"/>
+        <enumeration value="E33"/>
+        <enumeration value="E34"/>
+        <enumeration value="E35"/>
+        <enumeration value="E36"/>
+        <enumeration value="E37"/>
+        <enumeration value="E38"/>
+        <enumeration value="E39"/>
+        <enumeration value="E4"/>
+        <enumeration value="E40"/>
+        <enumeration value="E41"/>
+        <enumeration value="E42"/>
+        <enumeration value="E43"/>
+        <enumeration value="E44"/>
+        <enumeration value="E45"/>
+        <enumeration value="E46"/>
+        <enumeration value="E47"/>
+        <enumeration value="E48"/>
+        <enumeration value="E49"/>
+        <enumeration value="E50"/>
+        <enumeration value="E51"/>
+        <enumeration value="E52"/>
+        <enumeration value="E53"/>
+        <enumeration value="E54"/>
+        <enumeration value="E55"/>
+        <enumeration value="E56"/>
+        <enumeration value="E57"/>
+        <enumeration value="E58"/>
+        <enumeration value="E59"/>
+        <enumeration value="E60"/>
+        <enumeration value="E61"/>
+        <enumeration value="E62"/>
+        <enumeration value="E63"/>
+        <enumeration value="E64"/>
+        <enumeration value="E65"/>
+        <enumeration value="E66"/>
+        <enumeration value="E67"/>
+        <enumeration value="E68"/>
+        <enumeration value="E69"/>
+        <enumeration value="E70"/>
+        <enumeration value="E71"/>
+        <enumeration value="E72"/>
+        <enumeration value="E73"/>
+        <enumeration value="E74"/>
+        <enumeration value="E75"/>
+        <enumeration value="E76"/>
+        <enumeration value="E77"/>
+        <enumeration value="E78"/>
+        <enumeration value="E79"/>
+        <enumeration value="E80"/>
+        <enumeration value="E81"/>
+        <enumeration value="E82"/>
+        <enumeration value="E83"/>
+        <enumeration value="E84"/>
+        <enumeration value="E85"/>
+        <enumeration value="E86"/>
+        <enumeration value="E87"/>
+        <enumeration value="E88"/>
+        <enumeration value="E89"/>
+        <enumeration value="E90"/>
+        <enumeration value="E91"/>
+        <enumeration value="E92"/>
+        <enumeration value="E93"/>
+        <enumeration value="E94"/>
+        <enumeration value="E95"/>
+        <enumeration value="E96"/>
+        <enumeration value="E97"/>
+        <enumeration value="E98"/>
+        <enumeration value="E99"/>
+        <enumeration value="EA"/>
+        <enumeration value="EB"/>
+        <enumeration value="EQ"/>
+        <enumeration value="F01"/>
+        <enumeration value="F02"/>
+        <enumeration value="F03"/>
+        <enumeration value="F04"/>
+        <enumeration value="F05"/>
+        <enumeration value="F06"/>
+        <enumeration value="F07"/>
+        <enumeration value="F08"/>
+        <enumeration value="F10"/>
+        <enumeration value="F11"/>
+        <enumeration value="F12"/>
+        <enumeration value="F13"/>
+        <enumeration value="F14"/>
+        <enumeration value="F15"/>
+        <enumeration value="F16"/>
+        <enumeration value="F17"/>
+        <enumeration value="F18"/>
+        <enumeration value="F19"/>
+        <enumeration value="F20"/>
+        <enumeration value="F21"/>
+        <enumeration value="F22"/>
+        <enumeration value="F23"/>
+        <enumeration value="F24"/>
+        <enumeration value="F25"/>
+        <enumeration value="F26"/>
+        <enumeration value="F27"/>
+        <enumeration value="F28"/>
+        <enumeration value="F29"/>
+        <enumeration value="F30"/>
+        <enumeration value="F31"/>
+        <enumeration value="F32"/>
+        <enumeration value="F33"/>
+        <enumeration value="F34"/>
+        <enumeration value="F35"/>
+        <enumeration value="F36"/>
+        <enumeration value="F37"/>
+        <enumeration value="F38"/>
+        <enumeration value="F39"/>
+        <enumeration value="F40"/>
+        <enumeration value="F41"/>
+        <enumeration value="F42"/>
+        <enumeration value="F43"/>
+        <enumeration value="F44"/>
+        <enumeration value="F45"/>
+        <enumeration value="F46"/>
+        <enumeration value="F47"/>
+        <enumeration value="F48"/>
+        <enumeration value="F49"/>
+        <enumeration value="F50"/>
+        <enumeration value="F51"/>
+        <enumeration value="F52"/>
+        <enumeration value="F53"/>
+        <enumeration value="F54"/>
+        <enumeration value="F55"/>
+        <enumeration value="F56"/>
+        <enumeration value="F57"/>
+        <enumeration value="F58"/>
+        <enumeration value="F59"/>
+        <enumeration value="F60"/>
+        <enumeration value="F61"/>
+        <enumeration value="F62"/>
+        <enumeration value="F63"/>
+        <enumeration value="F64"/>
+        <enumeration value="F65"/>
+        <enumeration value="F66"/>
+        <enumeration value="F67"/>
+        <enumeration value="F68"/>
+        <enumeration value="F69"/>
+        <enumeration value="F70"/>
+        <enumeration value="F71"/>
+        <enumeration value="F72"/>
+        <enumeration value="F73"/>
+        <enumeration value="F74"/>
+        <enumeration value="F75"/>
+        <enumeration value="F76"/>
+        <enumeration value="F77"/>
+        <enumeration value="F78"/>
+        <enumeration value="F79"/>
+        <enumeration value="F80"/>
+        <enumeration value="F81"/>
+        <enumeration value="F82"/>
+        <enumeration value="F83"/>
+        <enumeration value="F84"/>
+        <enumeration value="F85"/>
+        <enumeration value="F86"/>
+        <enumeration value="F87"/>
+        <enumeration value="F88"/>
+        <enumeration value="F89"/>
+        <enumeration value="F90"/>
+        <enumeration value="F91"/>
+        <enumeration value="F92"/>
+        <enumeration value="F93"/>
+        <enumeration value="F94"/>
+        <enumeration value="F95"/>
+        <enumeration value="F96"/>
+        <enumeration value="F97"/>
+        <enumeration value="F98"/>
+        <enumeration value="F99"/>
+        <enumeration value="FAH"/>
+        <enumeration value="FAR"/>
+        <enumeration value="FBM"/>
+        <enumeration value="FC"/>
+        <enumeration value="FF"/>
+        <enumeration value="FH"/>
+        <enumeration value="FIT"/>
+        <enumeration value="FL"/>
+        <enumeration value="FOT"/>
+        <enumeration value="FP"/>
+        <enumeration value="FR"/>
+        <enumeration value="FS"/>
+        <enumeration value="FTK"/>
+        <enumeration value="FTQ"/>
+        <enumeration value="G01"/>
+        <enumeration value="G04"/>
+        <enumeration value="G05"/>
+        <enumeration value="G06"/>
+        <enumeration value="G08"/>
+        <enumeration value="G09"/>
+        <enumeration value="G10"/>
+        <enumeration value="G11"/>
+        <enumeration value="G12"/>
+        <enumeration value="G13"/>
+        <enumeration value="G14"/>
+        <enumeration value="G15"/>
+        <enumeration value="G16"/>
+        <enumeration value="G17"/>
+        <enumeration value="G18"/>
+        <enumeration value="G19"/>
+        <enumeration value="G2"/>
+        <enumeration value="G20"/>
+        <enumeration value="G21"/>
+        <enumeration value="G23"/>
+        <enumeration value="G24"/>
+        <enumeration value="G25"/>
+        <enumeration value="G26"/>
+        <enumeration value="G27"/>
+        <enumeration value="G28"/>
+        <enumeration value="G29"/>
+        <enumeration value="G3"/>
+        <enumeration value="G30"/>
+        <enumeration value="G31"/>
+        <enumeration value="G32"/>
+        <enumeration value="G33"/>
+        <enumeration value="G34"/>
+        <enumeration value="G35"/>
+        <enumeration value="G36"/>
+        <enumeration value="G37"/>
+        <enumeration value="G38"/>
+        <enumeration value="G39"/>
+        <enumeration value="G40"/>
+        <enumeration value="G41"/>
+        <enumeration value="G42"/>
+        <enumeration value="G43"/>
+        <enumeration value="G44"/>
+        <enumeration value="G45"/>
+        <enumeration value="G46"/>
+        <enumeration value="G47"/>
+        <enumeration value="G48"/>
+        <enumeration value="G49"/>
+        <enumeration value="G50"/>
+        <enumeration value="G51"/>
+        <enumeration value="G52"/>
+        <enumeration value="G53"/>
+        <enumeration value="G54"/>
+        <enumeration value="G55"/>
+        <enumeration value="G56"/>
+        <enumeration value="G57"/>
+        <enumeration value="G58"/>
+        <enumeration value="G59"/>
+        <enumeration value="G60"/>
+        <enumeration value="G61"/>
+        <enumeration value="G62"/>
+        <enumeration value="G63"/>
+        <enumeration value="G64"/>
+        <enumeration value="G65"/>
+        <enumeration value="G66"/>
+        <enumeration value="G67"/>
+        <enumeration value="G68"/>
+        <enumeration value="G69"/>
+        <enumeration value="G70"/>
+        <enumeration value="G71"/>
+        <enumeration value="G72"/>
+        <enumeration value="G73"/>
+        <enumeration value="G74"/>
+        <enumeration value="G75"/>
+        <enumeration value="G76"/>
+        <enumeration value="G77"/>
+        <enumeration value="G78"/>
+        <enumeration value="G79"/>
+        <enumeration value="G80"/>
+        <enumeration value="G81"/>
+        <enumeration value="G82"/>
+        <enumeration value="G83"/>
+        <enumeration value="G84"/>
+        <enumeration value="G85"/>
+        <enumeration value="G86"/>
+        <enumeration value="G87"/>
+        <enumeration value="G88"/>
+        <enumeration value="G89"/>
+        <enumeration value="G90"/>
+        <enumeration value="G91"/>
+        <enumeration value="G92"/>
+        <enumeration value="G93"/>
+        <enumeration value="G94"/>
+        <enumeration value="G95"/>
+        <enumeration value="G96"/>
+        <enumeration value="G97"/>
+        <enumeration value="G98"/>
+        <enumeration value="G99"/>
+        <enumeration value="GB"/>
+        <enumeration value="GBQ"/>
+        <enumeration value="GDW"/>
+        <enumeration value="GE"/>
+        <enumeration value="GF"/>
+        <enumeration value="GFI"/>
+        <enumeration value="GGR"/>
+        <enumeration value="GIA"/>
+        <enumeration value="GIC"/>
+        <enumeration value="GII"/>
+        <enumeration value="GIP"/>
+        <enumeration value="GJ"/>
+        <enumeration value="GL"/>
+        <enumeration value="GLD"/>
+        <enumeration value="GLI"/>
+        <enumeration value="GLL"/>
+        <enumeration value="GM"/>
+        <enumeration value="GO"/>
+        <enumeration value="GP"/>
+        <enumeration value="GQ"/>
+        <enumeration value="GRM"/>
+        <enumeration value="GRN"/>
+        <enumeration value="GRO"/>
+        <enumeration value="GRT"/>
+        <enumeration value="GT"/>
+        <enumeration value="GV"/>
+        <enumeration value="GWH"/>
+        <enumeration value="H03"/>
+        <enumeration value="H04"/>
+        <enumeration value="H05"/>
+        <enumeration value="H06"/>
+        <enumeration value="H07"/>
+        <enumeration value="H08"/>
+        <enumeration value="H09"/>
+        <enumeration value="H10"/>
+        <enumeration value="H11"/>
+        <enumeration value="H12"/>
+        <enumeration value="H13"/>
+        <enumeration value="H14"/>
+        <enumeration value="H15"/>
+        <enumeration value="H16"/>
+        <enumeration value="H18"/>
+        <enumeration value="H19"/>
+        <enumeration value="H20"/>
+        <enumeration value="H21"/>
+        <enumeration value="H22"/>
+        <enumeration value="H23"/>
+        <enumeration value="H24"/>
+        <enumeration value="H25"/>
+        <enumeration value="H26"/>
+        <enumeration value="H27"/>
+        <enumeration value="H28"/>
+        <enumeration value="H29"/>
+        <enumeration value="H30"/>
+        <enumeration value="H31"/>
+        <enumeration value="H32"/>
+        <enumeration value="H33"/>
+        <enumeration value="H34"/>
+        <enumeration value="H35"/>
+        <enumeration value="H36"/>
+        <enumeration value="H37"/>
+        <enumeration value="H38"/>
+        <enumeration value="H39"/>
+        <enumeration value="H40"/>
+        <enumeration value="H41"/>
+        <enumeration value="H42"/>
+        <enumeration value="H43"/>
+        <enumeration value="H44"/>
+        <enumeration value="H45"/>
+        <enumeration value="H46"/>
+        <enumeration value="H47"/>
+        <enumeration value="H48"/>
+        <enumeration value="H49"/>
+        <enumeration value="H50"/>
+        <enumeration value="H51"/>
+        <enumeration value="H52"/>
+        <enumeration value="H53"/>
+        <enumeration value="H54"/>
+        <enumeration value="H55"/>
+        <enumeration value="H56"/>
+        <enumeration value="H57"/>
+        <enumeration value="H58"/>
+        <enumeration value="H59"/>
+        <enumeration value="H60"/>
+        <enumeration value="H61"/>
+        <enumeration value="H62"/>
+        <enumeration value="H63"/>
+        <enumeration value="H64"/>
+        <enumeration value="H65"/>
+        <enumeration value="H66"/>
+        <enumeration value="H67"/>
+        <enumeration value="H68"/>
+        <enumeration value="H69"/>
+        <enumeration value="H70"/>
+        <enumeration value="H71"/>
+        <enumeration value="H72"/>
+        <enumeration value="H73"/>
+        <enumeration value="H74"/>
+        <enumeration value="H75"/>
+        <enumeration value="H76"/>
+        <enumeration value="H77"/>
+        <enumeration value="H78"/>
+        <enumeration value="H79"/>
+        <enumeration value="H80"/>
+        <enumeration value="H81"/>
+        <enumeration value="H82"/>
+        <enumeration value="H83"/>
+        <enumeration value="H84"/>
+        <enumeration value="H85"/>
+        <enumeration value="H87"/>
+        <enumeration value="H88"/>
+        <enumeration value="H89"/>
+        <enumeration value="H90"/>
+        <enumeration value="H91"/>
+        <enumeration value="H92"/>
+        <enumeration value="H93"/>
+        <enumeration value="H94"/>
+        <enumeration value="H95"/>
+        <enumeration value="H96"/>
+        <enumeration value="H98"/>
+        <enumeration value="H99"/>
+        <enumeration value="HA"/>
+        <enumeration value="HAR"/>
+        <enumeration value="HBA"/>
+        <enumeration value="HBX"/>
+        <enumeration value="HC"/>
+        <enumeration value="HDW"/>
+        <enumeration value="HEA"/>
+        <enumeration value="HGM"/>
+        <enumeration value="HH"/>
+        <enumeration value="HIU"/>
+        <enumeration value="HJ"/>
+        <enumeration value="HKM"/>
+        <enumeration value="HLT"/>
+        <enumeration value="HM"/>
+        <enumeration value="HMQ"/>
+        <enumeration value="HMT"/>
+        <enumeration value="HN"/>
+        <enumeration value="HP"/>
+        <enumeration value="HPA"/>
+        <enumeration value="HTZ"/>
+        <enumeration value="HUR"/>
+        <enumeration value="IA"/>
+        <enumeration value="IE"/>
+        <enumeration value="INH"/>
+        <enumeration value="INK"/>
+        <enumeration value="INQ"/>
+        <enumeration value="ISD"/>
+        <enumeration value="IU"/>
+        <enumeration value="IV"/>
+        <enumeration value="J10"/>
+        <enumeration value="J12"/>
+        <enumeration value="J13"/>
+        <enumeration value="J14"/>
+        <enumeration value="J15"/>
+        <enumeration value="J16"/>
+        <enumeration value="J17"/>
+        <enumeration value="J18"/>
+        <enumeration value="J19"/>
+        <enumeration value="J2"/>
+        <enumeration value="J20"/>
+        <enumeration value="J21"/>
+        <enumeration value="J22"/>
+        <enumeration value="J23"/>
+        <enumeration value="J24"/>
+        <enumeration value="J25"/>
+        <enumeration value="J26"/>
+        <enumeration value="J27"/>
+        <enumeration value="J28"/>
+        <enumeration value="J29"/>
+        <enumeration value="J30"/>
+        <enumeration value="J31"/>
+        <enumeration value="J32"/>
+        <enumeration value="J33"/>
+        <enumeration value="J34"/>
+        <enumeration value="J35"/>
+        <enumeration value="J36"/>
+        <enumeration value="J38"/>
+        <enumeration value="J39"/>
+        <enumeration value="J40"/>
+        <enumeration value="J41"/>
+        <enumeration value="J42"/>
+        <enumeration value="J43"/>
+        <enumeration value="J44"/>
+        <enumeration value="J45"/>
+        <enumeration value="J46"/>
+        <enumeration value="J47"/>
+        <enumeration value="J48"/>
+        <enumeration value="J49"/>
+        <enumeration value="J50"/>
+        <enumeration value="J51"/>
+        <enumeration value="J52"/>
+        <enumeration value="J53"/>
+        <enumeration value="J54"/>
+        <enumeration value="J55"/>
+        <enumeration value="J56"/>
+        <enumeration value="J57"/>
+        <enumeration value="J58"/>
+        <enumeration value="J59"/>
+        <enumeration value="J60"/>
+        <enumeration value="J61"/>
+        <enumeration value="J62"/>
+        <enumeration value="J63"/>
+        <enumeration value="J64"/>
+        <enumeration value="J65"/>
+        <enumeration value="J66"/>
+        <enumeration value="J67"/>
+        <enumeration value="J68"/>
+        <enumeration value="J69"/>
+        <enumeration value="J70"/>
+        <enumeration value="J71"/>
+        <enumeration value="J72"/>
+        <enumeration value="J73"/>
+        <enumeration value="J74"/>
+        <enumeration value="J75"/>
+        <enumeration value="J76"/>
+        <enumeration value="J78"/>
+        <enumeration value="J79"/>
+        <enumeration value="J81"/>
+        <enumeration value="J82"/>
+        <enumeration value="J83"/>
+        <enumeration value="J84"/>
+        <enumeration value="J85"/>
+        <enumeration value="J87"/>
+        <enumeration value="J89"/>
+        <enumeration value="J90"/>
+        <enumeration value="J91"/>
+        <enumeration value="J92"/>
+        <enumeration value="J93"/>
+        <enumeration value="J94"/>
+        <enumeration value="J95"/>
+        <enumeration value="J96"/>
+        <enumeration value="J97"/>
+        <enumeration value="J98"/>
+        <enumeration value="J99"/>
+        <enumeration value="JE"/>
+        <enumeration value="JK"/>
+        <enumeration value="JM"/>
+        <enumeration value="JNT"/>
+        <enumeration value="JOU"/>
+        <enumeration value="JPS"/>
+        <enumeration value="JWL"/>
+        <enumeration value="K1"/>
+        <enumeration value="K10"/>
+        <enumeration value="K11"/>
+        <enumeration value="K12"/>
+        <enumeration value="K13"/>
+        <enumeration value="K14"/>
+        <enumeration value="K15"/>
+        <enumeration value="K16"/>
+        <enumeration value="K17"/>
+        <enumeration value="K18"/>
+        <enumeration value="K19"/>
+        <enumeration value="K2"/>
+        <enumeration value="K20"/>
+        <enumeration value="K21"/>
+        <enumeration value="K22"/>
+        <enumeration value="K23"/>
+        <enumeration value="K24"/>
+        <enumeration value="K25"/>
+        <enumeration value="K26"/>
+        <enumeration value="K27"/>
+        <enumeration value="K28"/>
+        <enumeration value="K3"/>
+        <enumeration value="K30"/>
+        <enumeration value="K31"/>
+        <enumeration value="K32"/>
+        <enumeration value="K33"/>
+        <enumeration value="K34"/>
+        <enumeration value="K35"/>
+        <enumeration value="K36"/>
+        <enumeration value="K37"/>
+        <enumeration value="K38"/>
+        <enumeration value="K39"/>
+        <enumeration value="K40"/>
+        <enumeration value="K41"/>
+        <enumeration value="K42"/>
+        <enumeration value="K43"/>
+        <enumeration value="K45"/>
+        <enumeration value="K46"/>
+        <enumeration value="K47"/>
+        <enumeration value="K48"/>
+        <enumeration value="K49"/>
+        <enumeration value="K5"/>
+        <enumeration value="K50"/>
+        <enumeration value="K51"/>
+        <enumeration value="K52"/>
+        <enumeration value="K53"/>
+        <enumeration value="K54"/>
+        <enumeration value="K55"/>
+        <enumeration value="K58"/>
+        <enumeration value="K59"/>
+        <enumeration value="K6"/>
+        <enumeration value="K60"/>
+        <enumeration value="K61"/>
+        <enumeration value="K62"/>
+        <enumeration value="K63"/>
+        <enumeration value="K64"/>
+        <enumeration value="K65"/>
+        <enumeration value="K66"/>
+        <enumeration value="K67"/>
+        <enumeration value="K68"/>
+        <enumeration value="K69"/>
+        <enumeration value="K70"/>
+        <enumeration value="K71"/>
+        <enumeration value="K73"/>
+        <enumeration value="K74"/>
+        <enumeration value="K75"/>
+        <enumeration value="K76"/>
+        <enumeration value="K77"/>
+        <enumeration value="K78"/>
+        <enumeration value="K79"/>
+        <enumeration value="K80"/>
+        <enumeration value="K81"/>
+        <enumeration value="K82"/>
+        <enumeration value="K83"/>
+        <enumeration value="K84"/>
+        <enumeration value="K85"/>
+        <enumeration value="K86"/>
+        <enumeration value="K87"/>
+        <enumeration value="K88"/>
+        <enumeration value="K89"/>
+        <enumeration value="K90"/>
+        <enumeration value="K91"/>
+        <enumeration value="K92"/>
+        <enumeration value="K93"/>
+        <enumeration value="K94"/>
+        <enumeration value="K95"/>
+        <enumeration value="K96"/>
+        <enumeration value="K97"/>
+        <enumeration value="K98"/>
+        <enumeration value="K99"/>
+        <enumeration value="KA"/>
+        <enumeration value="KAT"/>
+        <enumeration value="KB"/>
+        <enumeration value="KBA"/>
+        <enumeration value="KCC"/>
+        <enumeration value="KDW"/>
+        <enumeration value="KEL"/>
+        <enumeration value="KGM"/>
+        <enumeration value="KGS"/>
+        <enumeration value="KHY"/>
+        <enumeration value="KHZ"/>
+        <enumeration value="KI"/>
+        <enumeration value="KIC"/>
+        <enumeration value="KIP"/>
+        <enumeration value="KJ"/>
+        <enumeration value="KJO"/>
+        <enumeration value="KL"/>
+        <enumeration value="KLK"/>
+        <enumeration value="KLX"/>
+        <enumeration value="KMA"/>
+        <enumeration value="KMH"/>
+        <enumeration value="KMK"/>
+        <enumeration value="KMQ"/>
+        <enumeration value="KMT"/>
+        <enumeration value="KNI"/>
+        <enumeration value="KNM"/>
+        <enumeration value="KNS"/>
+        <enumeration value="KNT"/>
+        <enumeration value="KO"/>
+        <enumeration value="KPA"/>
+        <enumeration value="KPH"/>
+        <enumeration value="KPO"/>
+        <enumeration value="KPP"/>
+        <enumeration value="KR"/>
+        <enumeration value="KSD"/>
+        <enumeration value="KSH"/>
+        <enumeration value="KT"/>
+        <enumeration value="KTN"/>
+        <enumeration value="KUR"/>
+        <enumeration value="KVA"/>
+        <enumeration value="KVR"/>
+        <enumeration value="KVT"/>
+        <enumeration value="KW"/>
+        <enumeration value="KWH"/>
+        <enumeration value="KWN"/>
+        <enumeration value="KWO"/>
+        <enumeration value="KWS"/>
+        <enumeration value="KWT"/>
+        <enumeration value="KX"/>
+        <enumeration value="L10"/>
+        <enumeration value="L11"/>
+        <enumeration value="L12"/>
+        <enumeration value="L13"/>
+        <enumeration value="L14"/>
+        <enumeration value="L15"/>
+        <enumeration value="L16"/>
+        <enumeration value="L17"/>
+        <enumeration value="L18"/>
+        <enumeration value="L19"/>
+        <enumeration value="L2"/>
+        <enumeration value="L20"/>
+        <enumeration value="L21"/>
+        <enumeration value="L23"/>
+        <enumeration value="L24"/>
+        <enumeration value="L25"/>
+        <enumeration value="L26"/>
+        <enumeration value="L27"/>
+        <enumeration value="L28"/>
+        <enumeration value="L29"/>
+        <enumeration value="L30"/>
+        <enumeration value="L31"/>
+        <enumeration value="L32"/>
+        <enumeration value="L33"/>
+        <enumeration value="L34"/>
+        <enumeration value="L35"/>
+        <enumeration value="L36"/>
+        <enumeration value="L37"/>
+        <enumeration value="L38"/>
+        <enumeration value="L39"/>
+        <enumeration value="L40"/>
+        <enumeration value="L41"/>
+        <enumeration value="L42"/>
+        <enumeration value="L43"/>
+        <enumeration value="L44"/>
+        <enumeration value="L45"/>
+        <enumeration value="L46"/>
+        <enumeration value="L47"/>
+        <enumeration value="L48"/>
+        <enumeration value="L49"/>
+        <enumeration value="L50"/>
+        <enumeration value="L51"/>
+        <enumeration value="L52"/>
+        <enumeration value="L53"/>
+        <enumeration value="L54"/>
+        <enumeration value="L55"/>
+        <enumeration value="L56"/>
+        <enumeration value="L57"/>
+        <enumeration value="L58"/>
+        <enumeration value="L59"/>
+        <enumeration value="L60"/>
+        <enumeration value="L63"/>
+        <enumeration value="L64"/>
+        <enumeration value="L65"/>
+        <enumeration value="L66"/>
+        <enumeration value="L67"/>
+        <enumeration value="L68"/>
+        <enumeration value="L69"/>
+        <enumeration value="L70"/>
+        <enumeration value="L71"/>
+        <enumeration value="L72"/>
+        <enumeration value="L73"/>
+        <enumeration value="L74"/>
+        <enumeration value="L75"/>
+        <enumeration value="L76"/>
+        <enumeration value="L77"/>
+        <enumeration value="L78"/>
+        <enumeration value="L79"/>
+        <enumeration value="L80"/>
+        <enumeration value="L81"/>
+        <enumeration value="L82"/>
+        <enumeration value="L83"/>
+        <enumeration value="L84"/>
+        <enumeration value="L85"/>
+        <enumeration value="L86"/>
+        <enumeration value="L87"/>
+        <enumeration value="L88"/>
+        <enumeration value="L89"/>
+        <enumeration value="L90"/>
+        <enumeration value="L91"/>
+        <enumeration value="L92"/>
+        <enumeration value="L93"/>
+        <enumeration value="L94"/>
+        <enumeration value="L95"/>
+        <enumeration value="L96"/>
+        <enumeration value="L98"/>
+        <enumeration value="L99"/>
+        <enumeration value="LA"/>
+        <enumeration value="LAC"/>
+        <enumeration value="LBR"/>
+        <enumeration value="LBT"/>
+        <enumeration value="LD"/>
+        <enumeration value="LEF"/>
+        <enumeration value="LF"/>
+        <enumeration value="LH"/>
+        <enumeration value="LK"/>
+        <enumeration value="LM"/>
+        <enumeration value="LN"/>
+        <enumeration value="LO"/>
+        <enumeration value="LP"/>
+        <enumeration value="LPA"/>
+        <enumeration value="LR"/>
+        <enumeration value="LS"/>
+        <enumeration value="LTN"/>
+        <enumeration value="LTR"/>
+        <enumeration value="LUB"/>
+        <enumeration value="LUM"/>
+        <enumeration value="LUX"/>
+        <enumeration value="LY"/>
+        <enumeration value="M1"/>
+        <enumeration value="M10"/>
+        <enumeration value="M11"/>
+        <enumeration value="M12"/>
+        <enumeration value="M13"/>
+        <enumeration value="M14"/>
+        <enumeration value="M15"/>
+        <enumeration value="M16"/>
+        <enumeration value="M17"/>
+        <enumeration value="M18"/>
+        <enumeration value="M19"/>
+        <enumeration value="M20"/>
+        <enumeration value="M21"/>
+        <enumeration value="M22"/>
+        <enumeration value="M23"/>
+        <enumeration value="M24"/>
+        <enumeration value="M25"/>
+        <enumeration value="M26"/>
+        <enumeration value="M27"/>
+        <enumeration value="M29"/>
+        <enumeration value="M30"/>
+        <enumeration value="M31"/>
+        <enumeration value="M32"/>
+        <enumeration value="M33"/>
+        <enumeration value="M34"/>
+        <enumeration value="M35"/>
+        <enumeration value="M36"/>
+        <enumeration value="M37"/>
+        <enumeration value="M38"/>
+        <enumeration value="M39"/>
+        <enumeration value="M4"/>
+        <enumeration value="M40"/>
+        <enumeration value="M41"/>
+        <enumeration value="M42"/>
+        <enumeration value="M43"/>
+        <enumeration value="M44"/>
+        <enumeration value="M45"/>
+        <enumeration value="M46"/>
+        <enumeration value="M47"/>
+        <enumeration value="M48"/>
+        <enumeration value="M49"/>
+        <enumeration value="M5"/>
+        <enumeration value="M50"/>
+        <enumeration value="M51"/>
+        <enumeration value="M52"/>
+        <enumeration value="M53"/>
+        <enumeration value="M55"/>
+        <enumeration value="M56"/>
+        <enumeration value="M57"/>
+        <enumeration value="M58"/>
+        <enumeration value="M59"/>
+        <enumeration value="M60"/>
+        <enumeration value="M61"/>
+        <enumeration value="M62"/>
+        <enumeration value="M63"/>
+        <enumeration value="M64"/>
+        <enumeration value="M65"/>
+        <enumeration value="M66"/>
+        <enumeration value="M67"/>
+        <enumeration value="M68"/>
+        <enumeration value="M69"/>
+        <enumeration value="M7"/>
+        <enumeration value="M70"/>
+        <enumeration value="M71"/>
+        <enumeration value="M72"/>
+        <enumeration value="M73"/>
+        <enumeration value="M74"/>
+        <enumeration value="M75"/>
+        <enumeration value="M76"/>
+        <enumeration value="M77"/>
+        <enumeration value="M78"/>
+        <enumeration value="M79"/>
+        <enumeration value="M80"/>
+        <enumeration value="M81"/>
+        <enumeration value="M82"/>
+        <enumeration value="M83"/>
+        <enumeration value="M84"/>
+        <enumeration value="M85"/>
+        <enumeration value="M86"/>
+        <enumeration value="M87"/>
+        <enumeration value="M88"/>
+        <enumeration value="M89"/>
+        <enumeration value="M9"/>
+        <enumeration value="M90"/>
+        <enumeration value="M91"/>
+        <enumeration value="M92"/>
+        <enumeration value="M93"/>
+        <enumeration value="M94"/>
+        <enumeration value="M95"/>
+        <enumeration value="M96"/>
+        <enumeration value="M97"/>
+        <enumeration value="M98"/>
+        <enumeration value="M99"/>
+        <enumeration value="MAH"/>
+        <enumeration value="MAL"/>
+        <enumeration value="MAM"/>
+        <enumeration value="MAR"/>
+        <enumeration value="MAW"/>
+        <enumeration value="MBE"/>
+        <enumeration value="MBF"/>
+        <enumeration value="MBR"/>
+        <enumeration value="MC"/>
+        <enumeration value="MCU"/>
+        <enumeration value="MD"/>
+        <enumeration value="MGM"/>
+        <enumeration value="MHZ"/>
+        <enumeration value="MIK"/>
+        <enumeration value="MIL"/>
+        <enumeration value="MIN"/>
+        <enumeration value="MIO"/>
+        <enumeration value="MIU"/>
+        <enumeration value="MLD"/>
+        <enumeration value="MLT"/>
+        <enumeration value="MMK"/>
+        <enumeration value="MMQ"/>
+        <enumeration value="MMT"/>
+        <enumeration value="MND"/>
+        <enumeration value="MON"/>
+        <enumeration value="MPA"/>
+        <enumeration value="MQH"/>
+        <enumeration value="MQS"/>
+        <enumeration value="MSK"/>
+        <enumeration value="MTK"/>
+        <enumeration value="MTQ"/>
+        <enumeration value="MTR"/>
+        <enumeration value="MTS"/>
+        <enumeration value="MVA"/>
+        <enumeration value="MWH"/>
+        <enumeration value="N1"/>
+        <enumeration value="N10"/>
+        <enumeration value="N11"/>
+        <enumeration value="N12"/>
+        <enumeration value="N13"/>
+        <enumeration value="N14"/>
+        <enumeration value="N15"/>
+        <enumeration value="N16"/>
+        <enumeration value="N17"/>
+        <enumeration value="N18"/>
+        <enumeration value="N19"/>
+        <enumeration value="N20"/>
+        <enumeration value="N21"/>
+        <enumeration value="N22"/>
+        <enumeration value="N23"/>
+        <enumeration value="N24"/>
+        <enumeration value="N25"/>
+        <enumeration value="N26"/>
+        <enumeration value="N27"/>
+        <enumeration value="N28"/>
+        <enumeration value="N29"/>
+        <enumeration value="N3"/>
+        <enumeration value="N30"/>
+        <enumeration value="N31"/>
+        <enumeration value="N32"/>
+        <enumeration value="N33"/>
+        <enumeration value="N34"/>
+        <enumeration value="N35"/>
+        <enumeration value="N36"/>
+        <enumeration value="N37"/>
+        <enumeration value="N38"/>
+        <enumeration value="N39"/>
+        <enumeration value="N40"/>
+        <enumeration value="N41"/>
+        <enumeration value="N42"/>
+        <enumeration value="N43"/>
+        <enumeration value="N44"/>
+        <enumeration value="N45"/>
+        <enumeration value="N46"/>
+        <enumeration value="N47"/>
+        <enumeration value="N48"/>
+        <enumeration value="N49"/>
+        <enumeration value="N50"/>
+        <enumeration value="N51"/>
+        <enumeration value="N52"/>
+        <enumeration value="N53"/>
+        <enumeration value="N54"/>
+        <enumeration value="N55"/>
+        <enumeration value="N56"/>
+        <enumeration value="N57"/>
+        <enumeration value="N58"/>
+        <enumeration value="N59"/>
+        <enumeration value="N60"/>
+        <enumeration value="N61"/>
+        <enumeration value="N62"/>
+        <enumeration value="N63"/>
+        <enumeration value="N64"/>
+        <enumeration value="N65"/>
+        <enumeration value="N66"/>
+        <enumeration value="N67"/>
+        <enumeration value="N68"/>
+        <enumeration value="N69"/>
+        <enumeration value="N70"/>
+        <enumeration value="N71"/>
+        <enumeration value="N72"/>
+        <enumeration value="N73"/>
+        <enumeration value="N74"/>
+        <enumeration value="N75"/>
+        <enumeration value="N76"/>
+        <enumeration value="N77"/>
+        <enumeration value="N78"/>
+        <enumeration value="N79"/>
+        <enumeration value="N80"/>
+        <enumeration value="N81"/>
+        <enumeration value="N82"/>
+        <enumeration value="N83"/>
+        <enumeration value="N84"/>
+        <enumeration value="N85"/>
+        <enumeration value="N86"/>
+        <enumeration value="N87"/>
+        <enumeration value="N88"/>
+        <enumeration value="N89"/>
+        <enumeration value="N90"/>
+        <enumeration value="N91"/>
+        <enumeration value="N92"/>
+        <enumeration value="N93"/>
+        <enumeration value="N94"/>
+        <enumeration value="N95"/>
+        <enumeration value="N96"/>
+        <enumeration value="N97"/>
+        <enumeration value="N98"/>
+        <enumeration value="N99"/>
+        <enumeration value="NA"/>
+        <enumeration value="NAR"/>
+        <enumeration value="NCL"/>
+        <enumeration value="NEW"/>
+        <enumeration value="NF"/>
+        <enumeration value="NIL"/>
+        <enumeration value="NIU"/>
+        <enumeration value="NL"/>
+        <enumeration value="NM3"/>
+        <enumeration value="NMI"/>
+        <enumeration value="NMP"/>
+        <enumeration value="NPR"/>
+        <enumeration value="NPT"/>
+        <enumeration value="NQ"/>
+        <enumeration value="NR"/>
+        <enumeration value="NT"/>
+        <enumeration value="NTT"/>
+        <enumeration value="NU"/>
+        <enumeration value="NX"/>
+        <enumeration value="OA"/>
+        <enumeration value="ODE"/>
+        <enumeration value="OHM"/>
+        <enumeration value="ON"/>
+        <enumeration value="ONZ"/>
+        <enumeration value="OPM"/>
+        <enumeration value="OT"/>
+        <enumeration value="OZ"/>
+        <enumeration value="OZA"/>
+        <enumeration value="OZI"/>
+        <enumeration value="P1"/>
+        <enumeration value="P10"/>
+        <enumeration value="P11"/>
+        <enumeration value="P12"/>
+        <enumeration value="P13"/>
+        <enumeration value="P14"/>
+        <enumeration value="P15"/>
+        <enumeration value="P16"/>
+        <enumeration value="P17"/>
+        <enumeration value="P18"/>
+        <enumeration value="P19"/>
+        <enumeration value="P2"/>
+        <enumeration value="P20"/>
+        <enumeration value="P21"/>
+        <enumeration value="P22"/>
+        <enumeration value="P23"/>
+        <enumeration value="P24"/>
+        <enumeration value="P25"/>
+        <enumeration value="P26"/>
+        <enumeration value="P27"/>
+        <enumeration value="P28"/>
+        <enumeration value="P29"/>
+        <enumeration value="P30"/>
+        <enumeration value="P31"/>
+        <enumeration value="P32"/>
+        <enumeration value="P33"/>
+        <enumeration value="P34"/>
+        <enumeration value="P35"/>
+        <enumeration value="P36"/>
+        <enumeration value="P37"/>
+        <enumeration value="P38"/>
+        <enumeration value="P39"/>
+        <enumeration value="P40"/>
+        <enumeration value="P41"/>
+        <enumeration value="P42"/>
+        <enumeration value="P43"/>
+        <enumeration value="P44"/>
+        <enumeration value="P45"/>
+        <enumeration value="P46"/>
+        <enumeration value="P47"/>
+        <enumeration value="P48"/>
+        <enumeration value="P49"/>
+        <enumeration value="P5"/>
+        <enumeration value="P50"/>
+        <enumeration value="P51"/>
+        <enumeration value="P52"/>
+        <enumeration value="P53"/>
+        <enumeration value="P54"/>
+        <enumeration value="P55"/>
+        <enumeration value="P56"/>
+        <enumeration value="P57"/>
+        <enumeration value="P58"/>
+        <enumeration value="P59"/>
+        <enumeration value="P60"/>
+        <enumeration value="P61"/>
+        <enumeration value="P62"/>
+        <enumeration value="P63"/>
+        <enumeration value="P64"/>
+        <enumeration value="P65"/>
+        <enumeration value="P66"/>
+        <enumeration value="P67"/>
+        <enumeration value="P68"/>
+        <enumeration value="P69"/>
+        <enumeration value="P70"/>
+        <enumeration value="P71"/>
+        <enumeration value="P72"/>
+        <enumeration value="P73"/>
+        <enumeration value="P74"/>
+        <enumeration value="P75"/>
+        <enumeration value="P76"/>
+        <enumeration value="P77"/>
+        <enumeration value="P78"/>
+        <enumeration value="P79"/>
+        <enumeration value="P80"/>
+        <enumeration value="P81"/>
+        <enumeration value="P82"/>
+        <enumeration value="P83"/>
+        <enumeration value="P84"/>
+        <enumeration value="P85"/>
+        <enumeration value="P86"/>
+        <enumeration value="P87"/>
+        <enumeration value="P88"/>
+        <enumeration value="P89"/>
+        <enumeration value="P90"/>
+        <enumeration value="P91"/>
+        <enumeration value="P92"/>
+        <enumeration value="P93"/>
+        <enumeration value="P94"/>
+        <enumeration value="P95"/>
+        <enumeration value="P96"/>
+        <enumeration value="P97"/>
+        <enumeration value="P98"/>
+        <enumeration value="P99"/>
+        <enumeration value="PAL"/>
+        <enumeration value="PD"/>
+        <enumeration value="PFL"/>
+        <enumeration value="PGL"/>
+        <enumeration value="PI"/>
+        <enumeration value="PLA"/>
+        <enumeration value="PO"/>
+        <enumeration value="PQ"/>
+        <enumeration value="PR"/>
+        <enumeration value="PS"/>
+        <enumeration value="PT"/>
+        <enumeration value="PTD"/>
+        <enumeration value="PTI"/>
+        <enumeration value="PTL"/>
+        <enumeration value="PTN"/>
+        <enumeration value="Q10"/>
+        <enumeration value="Q11"/>
+        <enumeration value="Q12"/>
+        <enumeration value="Q13"/>
+        <enumeration value="Q14"/>
+        <enumeration value="Q15"/>
+        <enumeration value="Q16"/>
+        <enumeration value="Q17"/>
+        <enumeration value="Q18"/>
+        <enumeration value="Q19"/>
+        <enumeration value="Q20"/>
+        <enumeration value="Q21"/>
+        <enumeration value="Q22"/>
+        <enumeration value="Q23"/>
+        <enumeration value="Q24"/>
+        <enumeration value="Q25"/>
+        <enumeration value="Q26"/>
+        <enumeration value="Q27"/>
+        <enumeration value="Q28"/>
+        <enumeration value="Q29"/>
+        <enumeration value="Q3"/>
+        <enumeration value="Q30"/>
+        <enumeration value="Q31"/>
+        <enumeration value="Q32"/>
+        <enumeration value="Q33"/>
+        <enumeration value="Q34"/>
+        <enumeration value="Q35"/>
+        <enumeration value="Q36"/>
+        <enumeration value="Q37"/>
+        <enumeration value="Q38"/>
+        <enumeration value="Q39"/>
+        <enumeration value="Q40"/>
+        <enumeration value="Q41"/>
+        <enumeration value="Q42"/>
+        <enumeration value="QA"/>
+        <enumeration value="QAN"/>
+        <enumeration value="QB"/>
+        <enumeration value="QR"/>
+        <enumeration value="QT"/>
+        <enumeration value="QTD"/>
+        <enumeration value="QTI"/>
+        <enumeration value="QTL"/>
+        <enumeration value="QTR"/>
+        <enumeration value="R1"/>
+        <enumeration value="R9"/>
+        <enumeration value="RH"/>
+        <enumeration value="RM"/>
+        <enumeration value="ROM"/>
+        <enumeration value="RP"/>
+        <enumeration value="RPM"/>
+        <enumeration value="RPS"/>
+        <enumeration value="RT"/>
+        <enumeration value="S3"/>
+        <enumeration value="S4"/>
+        <enumeration value="SAN"/>
+        <enumeration value="SCO"/>
+        <enumeration value="SCR"/>
+        <enumeration value="SEC"/>
+        <enumeration value="SET"/>
+        <enumeration value="SG"/>
+        <enumeration value="SHT"/>
+        <enumeration value="SIE"/>
+        <enumeration value="SM3"/>
+        <enumeration value="SMI"/>
+        <enumeration value="SQ"/>
+        <enumeration value="SQR"/>
+        <enumeration value="SR"/>
+        <enumeration value="STC"/>
+        <enumeration value="STI"/>
+        <enumeration value="STK"/>
+        <enumeration value="STL"/>
+        <enumeration value="STN"/>
+        <enumeration value="STW"/>
+        <enumeration value="SW"/>
+        <enumeration value="SX"/>
+        <enumeration value="SYR"/>
+        <enumeration value="T0"/>
+        <enumeration value="T3"/>
+        <enumeration value="TAH"/>
+        <enumeration value="TAN"/>
+        <enumeration value="TI"/>
+        <enumeration value="TIC"/>
+        <enumeration value="TIP"/>
+        <enumeration value="TKM"/>
+        <enumeration value="TMS"/>
+        <enumeration value="TNE"/>
+        <enumeration value="TP"/>
+        <enumeration value="TPI"/>
+        <enumeration value="TPR"/>
+        <enumeration value="TQD"/>
+        <enumeration value="TRL"/>
+        <enumeration value="TST"/>
+        <enumeration value="TTS"/>
+        <enumeration value="U1"/>
+        <enumeration value="U2"/>
+        <enumeration value="UA"/>
+        <enumeration value="UB"/>
+        <enumeration value="UC"/>
+        <enumeration value="VA"/>
+        <enumeration value="VLT"/>
+        <enumeration value="VP"/>
+        <enumeration value="W2"/>
+        <enumeration value="WA"/>
+        <enumeration value="WB"/>
+        <enumeration value="WCD"/>
+        <enumeration value="WE"/>
+        <enumeration value="WEB"/>
+        <enumeration value="WEE"/>
+        <enumeration value="WG"/>
+        <enumeration value="WHR"/>
+        <enumeration value="WM"/>
+        <enumeration value="WSD"/>
+        <enumeration value="WTT"/>
+        <enumeration value="WW"/>
+        <enumeration value="X1"/>
+        <enumeration value="YDK"/>
+        <enumeration value="YDQ"/>
+        <enumeration value="YRD"/>
+        <enumeration value="Z11"/>
+        <enumeration value="ZP"/>
+        <enumeration value="ZZ"/>
+        <enumeration value="X1A"/>
+        <enumeration value="X1B"/>
+        <enumeration value="X1D"/>
+        <enumeration value="X1F"/>
+        <enumeration value="X1G"/>
+        <enumeration value="X1W"/>
+        <enumeration value="X2C"/>
+        <enumeration value="X3A"/>
+        <enumeration value="X3H"/>
+        <enumeration value="X43"/>
+        <enumeration value="X44"/>
+        <enumeration value="X4A"/>
+        <enumeration value="X4B"/>
+        <enumeration value="X4C"/>
+        <enumeration value="X4D"/>
+        <enumeration value="X4F"/>
+        <enumeration value="X4G"/>
+        <enumeration value="X4H"/>
+        <enumeration value="X5H"/>
+        <enumeration value="X5L"/>
+        <enumeration value="X5M"/>
+        <enumeration value="X6H"/>
+        <enumeration value="X6P"/>
+        <enumeration value="X7A"/>
+        <enumeration value="X7B"/>
+        <enumeration value="X8A"/>
+        <enumeration value="X8B"/>
+        <enumeration value="X8C"/>
+        <enumeration value="XAA"/>
+        <enumeration value="XAB"/>
+        <enumeration value="XAC"/>
+        <enumeration value="XAD"/>
+        <enumeration value="XAE"/>
+        <enumeration value="XAF"/>
+        <enumeration value="XAG"/>
+        <enumeration value="XAH"/>
+        <enumeration value="XAI"/>
+        <enumeration value="XAJ"/>
+        <enumeration value="XAL"/>
+        <enumeration value="XAM"/>
+        <enumeration value="XAP"/>
+        <enumeration value="XAT"/>
+        <enumeration value="XAV"/>
+        <enumeration value="XB4"/>
+        <enumeration value="XBA"/>
+        <enumeration value="XBB"/>
+        <enumeration value="XBC"/>
+        <enumeration value="XBD"/>
+        <enumeration value="XBE"/>
+        <enumeration value="XBF"/>
+        <enumeration value="XBG"/>
+        <enumeration value="XBH"/>
+        <enumeration value="XBI"/>
+        <enumeration value="XBJ"/>
+        <enumeration value="XBK"/>
+        <enumeration value="XBL"/>
+        <enumeration value="XBM"/>
+        <enumeration value="XBN"/>
+        <enumeration value="XBO"/>
+        <enumeration value="XBP"/>
+        <enumeration value="XBQ"/>
+        <enumeration value="XBR"/>
+        <enumeration value="XBS"/>
+        <enumeration value="XBT"/>
+        <enumeration value="XBU"/>
+        <enumeration value="XBV"/>
+        <enumeration value="XBW"/>
+        <enumeration value="XBX"/>
+        <enumeration value="XBY"/>
+        <enumeration value="XBZ"/>
+        <enumeration value="XCA"/>
+        <enumeration value="XCB"/>
+        <enumeration value="XCC"/>
+        <enumeration value="XCD"/>
+        <enumeration value="XCE"/>
+        <enumeration value="XCF"/>
+        <enumeration value="XCG"/>
+        <enumeration value="XCH"/>
+        <enumeration value="XCI"/>
+        <enumeration value="XCJ"/>
+        <enumeration value="XCK"/>
+        <enumeration value="XCL"/>
+        <enumeration value="XCM"/>
+        <enumeration value="XCN"/>
+        <enumeration value="XCO"/>
+        <enumeration value="XCP"/>
+        <enumeration value="XCQ"/>
+        <enumeration value="XCR"/>
+        <enumeration value="XCS"/>
+        <enumeration value="XCT"/>
+        <enumeration value="XCU"/>
+        <enumeration value="XCV"/>
+        <enumeration value="XCW"/>
+        <enumeration value="XCX"/>
+        <enumeration value="XCY"/>
+        <enumeration value="XCZ"/>
+        <enumeration value="XDA"/>
+        <enumeration value="XDB"/>
+        <enumeration value="XDC"/>
+        <enumeration value="XDG"/>
+        <enumeration value="XDH"/>
+        <enumeration value="XDI"/>
+        <enumeration value="XDJ"/>
+        <enumeration value="XDK"/>
+        <enumeration value="XDL"/>
+        <enumeration value="XDM"/>
+        <enumeration value="XDN"/>
+        <enumeration value="XDP"/>
+        <enumeration value="XDR"/>
+        <enumeration value="XDS"/>
+        <enumeration value="XDT"/>
+        <enumeration value="XDU"/>
+        <enumeration value="XDV"/>
+        <enumeration value="XDW"/>
+        <enumeration value="XDX"/>
+        <enumeration value="XDY"/>
+        <enumeration value="XEC"/>
+        <enumeration value="XED"/>
+        <enumeration value="XEE"/>
+        <enumeration value="XEF"/>
+        <enumeration value="XEG"/>
+        <enumeration value="XEH"/>
+        <enumeration value="XEI"/>
+        <enumeration value="XEN"/>
+        <enumeration value="XFB"/>
+        <enumeration value="XFC"/>
+        <enumeration value="XFD"/>
+        <enumeration value="XFE"/>
+        <enumeration value="XFI"/>
+        <enumeration value="XFL"/>
+        <enumeration value="XFO"/>
+        <enumeration value="XFP"/>
+        <enumeration value="XFR"/>
+        <enumeration value="XFT"/>
+        <enumeration value="XFW"/>
+        <enumeration value="XFX"/>
+        <enumeration value="XGB"/>
+        <enumeration value="XGI"/>
+        <enumeration value="XGL"/>
+        <enumeration value="XGR"/>
+        <enumeration value="XGU"/>
+        <enumeration value="XGY"/>
+        <enumeration value="XGZ"/>
+        <enumeration value="XHA"/>
+        <enumeration value="XHB"/>
+        <enumeration value="XHC"/>
+        <enumeration value="XHG"/>
+        <enumeration value="XHN"/>
+        <enumeration value="XHR"/>
+        <enumeration value="XIA"/>
+        <enumeration value="XIB"/>
+        <enumeration value="XIC"/>
+        <enumeration value="XID"/>
+        <enumeration value="XIE"/>
+        <enumeration value="XIF"/>
+        <enumeration value="XIG"/>
+        <enumeration value="XIH"/>
+        <enumeration value="XIK"/>
+        <enumeration value="XIL"/>
+        <enumeration value="XIN"/>
+        <enumeration value="XIZ"/>
+        <enumeration value="XJB"/>
+        <enumeration value="XJC"/>
+        <enumeration value="XJG"/>
+        <enumeration value="XJR"/>
+        <enumeration value="XJT"/>
+        <enumeration value="XJY"/>
+        <enumeration value="XKG"/>
+        <enumeration value="XKI"/>
+        <enumeration value="XLE"/>
+        <enumeration value="XLG"/>
+        <enumeration value="XLT"/>
+        <enumeration value="XLU"/>
+        <enumeration value="XLV"/>
+        <enumeration value="XLZ"/>
+        <enumeration value="XMA"/>
+        <enumeration value="XMB"/>
+        <enumeration value="XMC"/>
+        <enumeration value="XME"/>
+        <enumeration value="XMR"/>
+        <enumeration value="XMS"/>
+        <enumeration value="XMT"/>
+        <enumeration value="XMW"/>
+        <enumeration value="XMX"/>
+        <enumeration value="XNA"/>
+        <enumeration value="XNE"/>
+        <enumeration value="XNF"/>
+        <enumeration value="XNG"/>
+        <enumeration value="XNS"/>
+        <enumeration value="XNT"/>
+        <enumeration value="XNU"/>
+        <enumeration value="XNV"/>
+        <enumeration value="XOA"/>
+        <enumeration value="XOB"/>
+        <enumeration value="XOC"/>
+        <enumeration value="XOD"/>
+        <enumeration value="XOE"/>
+        <enumeration value="XOF"/>
+        <enumeration value="XOK"/>
+        <enumeration value="XOT"/>
+        <enumeration value="XOU"/>
+        <enumeration value="XP2"/>
+        <enumeration value="XPA"/>
+        <enumeration value="XPB"/>
+        <enumeration value="XPC"/>
+        <enumeration value="XPD"/>
+        <enumeration value="XPE"/>
+        <enumeration value="XPF"/>
+        <enumeration value="XPG"/>
+        <enumeration value="XPH"/>
+        <enumeration value="XPI"/>
+        <enumeration value="XPJ"/>
+        <enumeration value="XPK"/>
+        <enumeration value="XPL"/>
+        <enumeration value="XPN"/>
+        <enumeration value="XPO"/>
+        <enumeration value="XPP"/>
+        <enumeration value="XPR"/>
+        <enumeration value="XPT"/>
+        <enumeration value="XPU"/>
+        <enumeration value="XPV"/>
+        <enumeration value="XPX"/>
+        <enumeration value="XPY"/>
+        <enumeration value="XPZ"/>
+        <enumeration value="XQA"/>
+        <enumeration value="XQB"/>
+        <enumeration value="XQC"/>
+        <enumeration value="XQD"/>
+        <enumeration value="XQF"/>
+        <enumeration value="XQG"/>
+        <enumeration value="XQH"/>
+        <enumeration value="XQJ"/>
+        <enumeration value="XQK"/>
+        <enumeration value="XQL"/>
+        <enumeration value="XQM"/>
+        <enumeration value="XQN"/>
+        <enumeration value="XQP"/>
+        <enumeration value="XQQ"/>
+        <enumeration value="XQR"/>
+        <enumeration value="XQS"/>
+        <enumeration value="XRD"/>
+        <enumeration value="XRG"/>
+        <enumeration value="XRJ"/>
+        <enumeration value="XRK"/>
+        <enumeration value="XRL"/>
+        <enumeration value="XRO"/>
+        <enumeration value="XRT"/>
+        <enumeration value="XRZ"/>
+        <enumeration value="XSA"/>
+        <enumeration value="XSB"/>
+        <enumeration value="XSC"/>
+        <enumeration value="XSD"/>
+        <enumeration value="XSE"/>
+        <enumeration value="XSH"/>
+        <enumeration value="XSI"/>
+        <enumeration value="XSK"/>
+        <enumeration value="XSL"/>
+        <enumeration value="XSM"/>
+        <enumeration value="XSO"/>
+        <enumeration value="XSP"/>
+        <enumeration value="XSS"/>
+        <enumeration value="XST"/>
+        <enumeration value="XSU"/>
+        <enumeration value="XSV"/>
+        <enumeration value="XSW"/>
+        <enumeration value="XSY"/>
+        <enumeration value="XSZ"/>
+        <enumeration value="XT1"/>
+        <enumeration value="XTB"/>
+        <enumeration value="XTC"/>
+        <enumeration value="XTD"/>
+        <enumeration value="XTE"/>
+        <enumeration value="XTG"/>
+        <enumeration value="XTI"/>
+        <enumeration value="XTK"/>
+        <enumeration value="XTL"/>
+        <enumeration value="XTN"/>
+        <enumeration value="XTO"/>
+        <enumeration value="XTR"/>
+        <enumeration value="XTS"/>
+        <enumeration value="XTT"/>
+        <enumeration value="XTU"/>
+        <enumeration value="XTV"/>
+        <enumeration value="XTW"/>
+        <enumeration value="XTY"/>
+        <enumeration value="XTZ"/>
+        <enumeration value="XUC"/>
+        <enumeration value="XUN"/>
+        <enumeration value="XVA"/>
+        <enumeration value="XVG"/>
+        <enumeration value="XVI"/>
+        <enumeration value="XVK"/>
+        <enumeration value="XVL"/>
+        <enumeration value="XVN"/>
+        <enumeration value="XVO"/>
+        <enumeration value="XVP"/>
+        <enumeration value="XVQ"/>
+        <enumeration value="XVR"/>
+        <enumeration value="XVS"/>
+        <enumeration value="XVY"/>
+        <enumeration value="XWA"/>
+        <enumeration value="XWB"/>
+        <enumeration value="XWC"/>
+        <enumeration value="XWD"/>
+        <enumeration value="XWF"/>
+        <enumeration value="XWG"/>
+        <enumeration value="XWH"/>
+        <enumeration value="XWJ"/>
+        <enumeration value="XWK"/>
+        <enumeration value="XWL"/>
+        <enumeration value="XWM"/>
+        <enumeration value="XWN"/>
+        <enumeration value="XWP"/>
+        <enumeration value="XWQ"/>
+        <enumeration value="XWR"/>
+        <enumeration value="XWS"/>
+        <enumeration value="XWT"/>
+        <enumeration value="XWU"/>
+        <enumeration value="XWV"/>
+        <enumeration value="XWW"/>
+        <enumeration value="XWX"/>
+        <enumeration value="XWY"/>
+        <enumeration value="XWZ"/>
+        <enumeration value="XXA"/>
+        <enumeration value="XXB"/>
+        <enumeration value="XXC"/>
+        <enumeration value="XXD"/>
+        <enumeration value="XXF"/>
+        <enumeration value="XXG"/>
+        <enumeration value="XXH"/>
+        <enumeration value="XXJ"/>
+        <enumeration value="XXK"/>
+        <enumeration value="XYA"/>
+        <enumeration value="XYB"/>
+        <enumeration value="XYC"/>
+        <enumeration value="XYD"/>
+        <enumeration value="XYF"/>
+        <enumeration value="XYG"/>
+        <enumeration value="XYH"/>
+        <enumeration value="XYJ"/>
+        <enumeration value="XYK"/>
+        <enumeration value="XYL"/>
+        <enumeration value="XYM"/>
+        <enumeration value="XYN"/>
+        <enumeration value="XYP"/>
+        <enumeration value="XYQ"/>
+        <enumeration value="XYR"/>
+        <enumeration value="XYS"/>
+        <enumeration value="XYT"/>
+        <enumeration value="XYV"/>
+        <enumeration value="XYW"/>
+        <enumeration value="XYX"/>
+        <enumeration value="XYY"/>
+        <enumeration value="XYZ"/>
+        <enumeration value="XZA"/>
+        <enumeration value="XZB"/>
+        <enumeration value="XZC"/>
+        <enumeration value="XZD"/>
+        <enumeration value="XZF"/>
+        <enumeration value="XZG"/>
+        <enumeration value="XZH"/>
+        <enumeration value="XZJ"/>
+        <enumeration value="XZK"/>
+        <enumeration value="XZL"/>
+        <enumeration value="XZM"/>
+        <enumeration value="XZN"/>
+        <enumeration value="XZP"/>
+        <enumeration value="XZQ"/>
+        <enumeration value="XZR"/>
+        <enumeration value="XZS"/>
+        <enumeration value="XZT"/>
+        <enumeration value="XZU"/>
+        <enumeration value="XZV"/>
+        <enumeration value="XZW"/>
+        <enumeration value="XZX"/>
+        <enumeration value="XZY"/>
+        <enumeration value="XZZ"/>
+    </cl>
+    <cl id="7">
+        <enumeration value="AA"/>
+        <enumeration value="AB"/>
+        <enumeration value="AC"/>
+        <enumeration value="AD"/>
+        <enumeration value="AE"/>
+        <enumeration value="AF"/>
+        <enumeration value="AG"/>
+        <enumeration value="AH"/>
+        <enumeration value="AI"/>
+        <enumeration value="AJ"/>
+        <enumeration value="AK"/>
+        <enumeration value="AL"/>
+        <enumeration value="AM"/>
+        <enumeration value="AN"/>
+        <enumeration value="AO"/>
+        <enumeration value="AP"/>
+        <enumeration value="AQ"/>
+        <enumeration value="AR"/>
+        <enumeration value="AS"/>
+        <enumeration value="AT"/>
+        <enumeration value="AU"/>
+        <enumeration value="AV"/>
+        <enumeration value="AW"/>
+        <enumeration value="AX"/>
+        <enumeration value="AY"/>
+        <enumeration value="AZ"/>
+        <enumeration value="BA"/>
+        <enumeration value="BB"/>
+        <enumeration value="BC"/>
+        <enumeration value="BD"/>
+        <enumeration value="BE"/>
+        <enumeration value="BF"/>
+        <enumeration value="BG"/>
+        <enumeration value="BH"/>
+        <enumeration value="BI"/>
+        <enumeration value="BJ"/>
+        <enumeration value="BK"/>
+        <enumeration value="BL"/>
+        <enumeration value="BM"/>
+        <enumeration value="BN"/>
+        <enumeration value="BO"/>
+        <enumeration value="BP"/>
+        <enumeration value="BQ"/>
+        <enumeration value="BR"/>
+        <enumeration value="BS"/>
+        <enumeration value="BT"/>
+        <enumeration value="BU"/>
+        <enumeration value="BV"/>
+        <enumeration value="BW"/>
+        <enumeration value="BX"/>
+        <enumeration value="BY"/>
+        <enumeration value="BZ"/>
+        <enumeration value="CC"/>
+        <enumeration value="CG"/>
+        <enumeration value="CL"/>
+        <enumeration value="CR"/>
+        <enumeration value="CV"/>
+        <enumeration value="DR"/>
+        <enumeration value="DW"/>
+        <enumeration value="EC"/>
+        <enumeration value="EF"/>
+        <enumeration value="EN"/>
+        <enumeration value="FS"/>
+        <enumeration value="GB"/>
+        <enumeration value="GN"/>
+        <enumeration value="GS"/>
+        <enumeration value="HS"/>
+        <enumeration value="IB"/>
+        <enumeration value="IN"/>
+        <enumeration value="IS"/>
+        <enumeration value="IT"/>
+        <enumeration value="IZ"/>
+        <enumeration value="MA"/>
+        <enumeration value="MF"/>
+        <enumeration value="MN"/>
+        <enumeration value="MP"/>
+        <enumeration value="NB"/>
+        <enumeration value="ON"/>
+        <enumeration value="PD"/>
+        <enumeration value="PL"/>
+        <enumeration value="PO"/>
+        <enumeration value="PV"/>
+        <enumeration value="QS"/>
+        <enumeration value="RC"/>
+        <enumeration value="RN"/>
+        <enumeration value="RU"/>
+        <enumeration value="RY"/>
+        <enumeration value="SA"/>
+        <enumeration value="SG"/>
+        <enumeration value="SK"/>
+        <enumeration value="SN"/>
+        <enumeration value="SRS"/>
+        <enumeration value="SRT"/>
+        <enumeration value="SRU"/>
+        <enumeration value="SRV"/>
+        <enumeration value="SRW"/>
+        <enumeration value="SRX"/>
+        <enumeration value="SRY"/>
+        <enumeration value="SRZ"/>
+        <enumeration value="SS"/>
+        <enumeration value="SSA"/>
+        <enumeration value="SSB"/>
+        <enumeration value="SSC"/>
+        <enumeration value="SSD"/>
+        <enumeration value="SSE"/>
+        <enumeration value="SSF"/>
+        <enumeration value="SSG"/>
+        <enumeration value="SSH"/>
+        <enumeration value="SSI"/>
+        <enumeration value="SSJ"/>
+        <enumeration value="SSK"/>
+        <enumeration value="SSL"/>
+        <enumeration value="SSM"/>
+        <enumeration value="SSN"/>
+        <enumeration value="SSO"/>
+        <enumeration value="SSP"/>
+        <enumeration value="SSQ"/>
+        <enumeration value="SSR"/>
+        <enumeration value="SSS"/>
+        <enumeration value="SST"/>
+        <enumeration value="SSU"/>
+        <enumeration value="SSV"/>
+        <enumeration value="SSW"/>
+        <enumeration value="SSX"/>
+        <enumeration value="SSY"/>
+        <enumeration value="SSZ"/>
+        <enumeration value="ST"/>
+        <enumeration value="STA"/>
+        <enumeration value="STB"/>
+        <enumeration value="STC"/>
+        <enumeration value="STD"/>
+        <enumeration value="STE"/>
+        <enumeration value="STF"/>
+        <enumeration value="STG"/>
+        <enumeration value="STH"/>
+        <enumeration value="STI"/>
+        <enumeration value="STJ"/>
+        <enumeration value="STK"/>
+        <enumeration value="STL"/>
+        <enumeration value="STM"/>
+        <enumeration value="STN"/>
+        <enumeration value="STO"/>
+        <enumeration value="STP"/>
+        <enumeration value="STQ"/>
+        <enumeration value="STR"/>
+        <enumeration value="STS"/>
+        <enumeration value="STT"/>
+        <enumeration value="STU"/>
+        <enumeration value="STV"/>
+        <enumeration value="STW"/>
+        <enumeration value="STX"/>
+        <enumeration value="STY"/>
+        <enumeration value="STZ"/>
+        <enumeration value="SUA"/>
+        <enumeration value="SUB"/>
+        <enumeration value="SUC"/>
+        <enumeration value="SUD"/>
+        <enumeration value="SUE"/>
+        <enumeration value="SUF"/>
+        <enumeration value="SUG"/>
+        <enumeration value="SUH"/>
+        <enumeration value="SUI"/>
+        <enumeration value="SUJ"/>
+        <enumeration value="SUK"/>
+        <enumeration value="SUL"/>
+        <enumeration value="SUM"/>
+        <enumeration value="TG"/>
+        <enumeration value="TSN"/>
+        <enumeration value="TSO"/>
+        <enumeration value="TSP"/>
+        <enumeration value="TST"/>
+        <enumeration value="UA"/>
+        <enumeration value="UP"/>
+        <enumeration value="VN"/>
+        <enumeration value="VP"/>
+        <enumeration value="VS"/>
+        <enumeration value="VX"/>
+        <enumeration value="ZZZ"/>
+    </cl>
+    <cl id="8">
+        <enumeration value="AA"/>
+        <enumeration value="AB"/>
+        <enumeration value="AC"/>
+        <enumeration value="AD"/>
+        <enumeration value="AE"/>
+        <enumeration value="AF"/>
+        <enumeration value="AG"/>
+        <enumeration value="AH"/>
+        <enumeration value="AI"/>
+        <enumeration value="AJ"/>
+        <enumeration value="AK"/>
+        <enumeration value="AL"/>
+        <enumeration value="AM"/>
+        <enumeration value="AN"/>
+        <enumeration value="AO"/>
+        <enumeration value="AP"/>
+        <enumeration value="AQ"/>
+        <enumeration value="AR"/>
+        <enumeration value="AS"/>
+        <enumeration value="AT"/>
+        <enumeration value="AU"/>
+        <enumeration value="AV"/>
+        <enumeration value="AW"/>
+        <enumeration value="AX"/>
+        <enumeration value="AY"/>
+        <enumeration value="AZ"/>
+        <enumeration value="BA"/>
+        <enumeration value="BB"/>
+        <enumeration value="BC"/>
+        <enumeration value="BD"/>
+        <enumeration value="BE"/>
+        <enumeration value="BF"/>
+        <enumeration value="BG"/>
+        <enumeration value="BH"/>
+        <enumeration value="BI"/>
+        <enumeration value="BJ"/>
+        <enumeration value="BK"/>
+        <enumeration value="BL"/>
+        <enumeration value="BM"/>
+        <enumeration value="BN"/>
+        <enumeration value="BO"/>
+        <enumeration value="BP"/>
+        <enumeration value="BQ"/>
+        <enumeration value="BR"/>
+        <enumeration value="BS"/>
+        <enumeration value="BT"/>
+        <enumeration value="BU"/>
+        <enumeration value="BV"/>
+        <enumeration value="BW"/>
+        <enumeration value="BX"/>
+        <enumeration value="BY"/>
+        <enumeration value="BZ"/>
+        <enumeration value="CC"/>
+        <enumeration value="CG"/>
+        <enumeration value="CL"/>
+        <enumeration value="CR"/>
+        <enumeration value="CV"/>
+        <enumeration value="DR"/>
+        <enumeration value="DW"/>
+        <enumeration value="EC"/>
+        <enumeration value="EF"/>
+        <enumeration value="EN"/>
+        <enumeration value="FS"/>
+        <enumeration value="GB"/>
+        <enumeration value="GN"/>
+        <enumeration value="GS"/>
+        <enumeration value="HS"/>
+        <enumeration value="IB"/>
+        <enumeration value="IN"/>
+        <enumeration value="IS"/>
+        <enumeration value="IT"/>
+        <enumeration value="IZ"/>
+        <enumeration value="MA"/>
+        <enumeration value="MF"/>
+        <enumeration value="MN"/>
+        <enumeration value="MP"/>
+        <enumeration value="NB"/>
+        <enumeration value="ON"/>
+        <enumeration value="PD"/>
+        <enumeration value="PL"/>
+        <enumeration value="PO"/>
+        <enumeration value="PV"/>
+        <enumeration value="QS"/>
+        <enumeration value="RC"/>
+        <enumeration value="RN"/>
+        <enumeration value="RU"/>
+        <enumeration value="RY"/>
+        <enumeration value="SA"/>
+        <enumeration value="SG"/>
+        <enumeration value="SK"/>
+        <enumeration value="SN"/>
+        <enumeration value="SRS"/>
+        <enumeration value="SRT"/>
+        <enumeration value="SRU"/>
+        <enumeration value="SRV"/>
+        <enumeration value="SRW"/>
+        <enumeration value="SRX"/>
+        <enumeration value="SRY"/>
+        <enumeration value="SRZ"/>
+        <enumeration value="SS"/>
+        <enumeration value="SSA"/>
+        <enumeration value="SSB"/>
+        <enumeration value="SSC"/>
+        <enumeration value="SSD"/>
+        <enumeration value="SSE"/>
+        <enumeration value="SSF"/>
+        <enumeration value="SSG"/>
+        <enumeration value="SSH"/>
+        <enumeration value="SSI"/>
+        <enumeration value="SSJ"/>
+        <enumeration value="SSK"/>
+        <enumeration value="SSL"/>
+        <enumeration value="SSM"/>
+        <enumeration value="SSN"/>
+        <enumeration value="SSO"/>
+        <enumeration value="SSP"/>
+        <enumeration value="SSQ"/>
+        <enumeration value="SSR"/>
+        <enumeration value="SSS"/>
+        <enumeration value="SST"/>
+        <enumeration value="SSU"/>
+        <enumeration value="SSV"/>
+        <enumeration value="SSW"/>
+        <enumeration value="SSX"/>
+        <enumeration value="SSY"/>
+        <enumeration value="SSZ"/>
+        <enumeration value="ST"/>
+        <enumeration value="STA"/>
+        <enumeration value="STB"/>
+        <enumeration value="STC"/>
+        <enumeration value="STD"/>
+        <enumeration value="STE"/>
+        <enumeration value="STF"/>
+        <enumeration value="STG"/>
+        <enumeration value="STH"/>
+        <enumeration value="STI"/>
+        <enumeration value="STJ"/>
+        <enumeration value="STK"/>
+        <enumeration value="STL"/>
+        <enumeration value="STM"/>
+        <enumeration value="STN"/>
+        <enumeration value="STO"/>
+        <enumeration value="STP"/>
+        <enumeration value="STQ"/>
+        <enumeration value="STR"/>
+        <enumeration value="STS"/>
+        <enumeration value="STT"/>
+        <enumeration value="STU"/>
+        <enumeration value="STV"/>
+        <enumeration value="STW"/>
+        <enumeration value="STX"/>
+        <enumeration value="STY"/>
+        <enumeration value="STZ"/>
+        <enumeration value="SUA"/>
+        <enumeration value="SUB"/>
+        <enumeration value="SUC"/>
+        <enumeration value="SUD"/>
+        <enumeration value="SUE"/>
+        <enumeration value="SUF"/>
+        <enumeration value="SUG"/>
+        <enumeration value="SUH"/>
+        <enumeration value="SUI"/>
+        <enumeration value="SUJ"/>
+        <enumeration value="SUK"/>
+        <enumeration value="SUL"/>
+        <enumeration value="SUM"/>
+        <enumeration value="TG"/>
+        <enumeration value="TSN"/>
+        <enumeration value="TSO"/>
+        <enumeration value="TSP"/>
+        <enumeration value="TST"/>
+        <enumeration value="UA"/>
+        <enumeration value="UP"/>
+        <enumeration value="VN"/>
+        <enumeration value="VP"/>
+        <enumeration value="VS"/>
+        <enumeration value="VX"/>
+        <enumeration value="ZZZ"/>
+    </cl>
+    <cl id="9">
+        <enumeration value="X1A"/>
+        <enumeration value="X1B"/>
+        <enumeration value="X1D"/>
+        <enumeration value="X1F"/>
+        <enumeration value="X1G"/>
+        <enumeration value="X1W"/>
+        <enumeration value="X2C"/>
+        <enumeration value="X3A"/>
+        <enumeration value="X3H"/>
+        <enumeration value="X43"/>
+        <enumeration value="X44"/>
+        <enumeration value="X4A"/>
+        <enumeration value="X4B"/>
+        <enumeration value="X4C"/>
+        <enumeration value="X4D"/>
+        <enumeration value="X4F"/>
+        <enumeration value="X4G"/>
+        <enumeration value="X4H"/>
+        <enumeration value="X5H"/>
+        <enumeration value="X5L"/>
+        <enumeration value="X5M"/>
+        <enumeration value="X6H"/>
+        <enumeration value="X6P"/>
+        <enumeration value="X7A"/>
+        <enumeration value="X7B"/>
+        <enumeration value="X8A"/>
+        <enumeration value="X8B"/>
+        <enumeration value="X8C"/>
+        <enumeration value="XAA"/>
+        <enumeration value="XAB"/>
+        <enumeration value="XAC"/>
+        <enumeration value="XAD"/>
+        <enumeration value="XAE"/>
+        <enumeration value="XAF"/>
+        <enumeration value="XAG"/>
+        <enumeration value="XAH"/>
+        <enumeration value="XAI"/>
+        <enumeration value="XAJ"/>
+        <enumeration value="XAL"/>
+        <enumeration value="XAM"/>
+        <enumeration value="XAP"/>
+        <enumeration value="XAT"/>
+        <enumeration value="XAV"/>
+        <enumeration value="XB4"/>
+        <enumeration value="XBA"/>
+        <enumeration value="XBB"/>
+        <enumeration value="XBC"/>
+        <enumeration value="XBD"/>
+        <enumeration value="XBE"/>
+        <enumeration value="XBF"/>
+        <enumeration value="XBG"/>
+        <enumeration value="XBH"/>
+        <enumeration value="XBI"/>
+        <enumeration value="XBJ"/>
+        <enumeration value="XBK"/>
+        <enumeration value="XBL"/>
+        <enumeration value="XBM"/>
+        <enumeration value="XBN"/>
+        <enumeration value="XBO"/>
+        <enumeration value="XBP"/>
+        <enumeration value="XBQ"/>
+        <enumeration value="XBR"/>
+        <enumeration value="XBS"/>
+        <enumeration value="XBT"/>
+        <enumeration value="XBU"/>
+        <enumeration value="XBV"/>
+        <enumeration value="XBW"/>
+        <enumeration value="XBX"/>
+        <enumeration value="XBY"/>
+        <enumeration value="XBZ"/>
+        <enumeration value="XCA"/>
+        <enumeration value="XCB"/>
+        <enumeration value="XCC"/>
+        <enumeration value="XCD"/>
+        <enumeration value="XCE"/>
+        <enumeration value="XCF"/>
+        <enumeration value="XCG"/>
+        <enumeration value="XCH"/>
+        <enumeration value="XCI"/>
+        <enumeration value="XCJ"/>
+        <enumeration value="XCK"/>
+        <enumeration value="XCL"/>
+        <enumeration value="XCM"/>
+        <enumeration value="XCN"/>
+        <enumeration value="XCO"/>
+        <enumeration value="XCP"/>
+        <enumeration value="XCQ"/>
+        <enumeration value="XCR"/>
+        <enumeration value="XCS"/>
+        <enumeration value="XCT"/>
+        <enumeration value="XCU"/>
+        <enumeration value="XCV"/>
+        <enumeration value="XCW"/>
+        <enumeration value="XCX"/>
+        <enumeration value="XCY"/>
+        <enumeration value="XCZ"/>
+        <enumeration value="XDA"/>
+        <enumeration value="XDB"/>
+        <enumeration value="XDC"/>
+        <enumeration value="XDG"/>
+        <enumeration value="XDH"/>
+        <enumeration value="XDI"/>
+        <enumeration value="XDJ"/>
+        <enumeration value="XDK"/>
+        <enumeration value="XDL"/>
+        <enumeration value="XDM"/>
+        <enumeration value="XDN"/>
+        <enumeration value="XDP"/>
+        <enumeration value="XDR"/>
+        <enumeration value="XDS"/>
+        <enumeration value="XDT"/>
+        <enumeration value="XDU"/>
+        <enumeration value="XDV"/>
+        <enumeration value="XDW"/>
+        <enumeration value="XDX"/>
+        <enumeration value="XDY"/>
+        <enumeration value="XEC"/>
+        <enumeration value="XED"/>
+        <enumeration value="XEE"/>
+        <enumeration value="XEF"/>
+        <enumeration value="XEG"/>
+        <enumeration value="XEH"/>
+        <enumeration value="XEI"/>
+        <enumeration value="XEN"/>
+        <enumeration value="XFB"/>
+        <enumeration value="XFC"/>
+        <enumeration value="XFD"/>
+        <enumeration value="XFE"/>
+        <enumeration value="XFI"/>
+        <enumeration value="XFL"/>
+        <enumeration value="XFO"/>
+        <enumeration value="XFP"/>
+        <enumeration value="XFR"/>
+        <enumeration value="XFT"/>
+        <enumeration value="XFW"/>
+        <enumeration value="XFX"/>
+        <enumeration value="XGB"/>
+        <enumeration value="XGI"/>
+        <enumeration value="XGL"/>
+        <enumeration value="XGR"/>
+        <enumeration value="XGU"/>
+        <enumeration value="XGY"/>
+        <enumeration value="XGZ"/>
+        <enumeration value="XHA"/>
+        <enumeration value="XHB"/>
+        <enumeration value="XHC"/>
+        <enumeration value="XHG"/>
+        <enumeration value="XHN"/>
+        <enumeration value="XHR"/>
+        <enumeration value="XIA"/>
+        <enumeration value="XIB"/>
+        <enumeration value="XIC"/>
+        <enumeration value="XID"/>
+        <enumeration value="XIE"/>
+        <enumeration value="XIF"/>
+        <enumeration value="XIG"/>
+        <enumeration value="XIH"/>
+        <enumeration value="XIK"/>
+        <enumeration value="XIL"/>
+        <enumeration value="XIN"/>
+        <enumeration value="XIZ"/>
+        <enumeration value="XJB"/>
+        <enumeration value="XJC"/>
+        <enumeration value="XJG"/>
+        <enumeration value="XJR"/>
+        <enumeration value="XJT"/>
+        <enumeration value="XJY"/>
+        <enumeration value="XKG"/>
+        <enumeration value="XKI"/>
+        <enumeration value="XLE"/>
+        <enumeration value="XLG"/>
+        <enumeration value="XLT"/>
+        <enumeration value="XLU"/>
+        <enumeration value="XLV"/>
+        <enumeration value="XLZ"/>
+        <enumeration value="XMA"/>
+        <enumeration value="XMB"/>
+        <enumeration value="XMC"/>
+        <enumeration value="XME"/>
+        <enumeration value="XMR"/>
+        <enumeration value="XMS"/>
+        <enumeration value="XMT"/>
+        <enumeration value="XMW"/>
+        <enumeration value="XMX"/>
+        <enumeration value="XNA"/>
+        <enumeration value="XNE"/>
+        <enumeration value="XNF"/>
+        <enumeration value="XNG"/>
+        <enumeration value="XNS"/>
+        <enumeration value="XNT"/>
+        <enumeration value="XNU"/>
+        <enumeration value="XNV"/>
+        <enumeration value="XOA"/>
+        <enumeration value="XOB"/>
+        <enumeration value="XOC"/>
+        <enumeration value="XOD"/>
+        <enumeration value="XOE"/>
+        <enumeration value="XOF"/>
+        <enumeration value="XOK"/>
+        <enumeration value="XOT"/>
+        <enumeration value="XOU"/>
+        <enumeration value="XP2"/>
+        <enumeration value="XPA"/>
+        <enumeration value="XPB"/>
+        <enumeration value="XPC"/>
+        <enumeration value="XPD"/>
+        <enumeration value="XPE"/>
+        <enumeration value="XPF"/>
+        <enumeration value="XPG"/>
+        <enumeration value="XPH"/>
+        <enumeration value="XPI"/>
+        <enumeration value="XPJ"/>
+        <enumeration value="XPK"/>
+        <enumeration value="XPL"/>
+        <enumeration value="XPN"/>
+        <enumeration value="XPO"/>
+        <enumeration value="XPP"/>
+        <enumeration value="XPR"/>
+        <enumeration value="XPT"/>
+        <enumeration value="XPU"/>
+        <enumeration value="XPV"/>
+        <enumeration value="XPX"/>
+        <enumeration value="XPY"/>
+        <enumeration value="XPZ"/>
+        <enumeration value="XQA"/>
+        <enumeration value="XQB"/>
+        <enumeration value="XQC"/>
+        <enumeration value="XQD"/>
+        <enumeration value="XQF"/>
+        <enumeration value="XQG"/>
+        <enumeration value="XQH"/>
+        <enumeration value="XQJ"/>
+        <enumeration value="XQK"/>
+        <enumeration value="XQL"/>
+        <enumeration value="XQM"/>
+        <enumeration value="XQN"/>
+        <enumeration value="XQP"/>
+        <enumeration value="XQQ"/>
+        <enumeration value="XQR"/>
+        <enumeration value="XQS"/>
+        <enumeration value="XRD"/>
+        <enumeration value="XRG"/>
+        <enumeration value="XRJ"/>
+        <enumeration value="XRK"/>
+        <enumeration value="XRL"/>
+        <enumeration value="XRO"/>
+        <enumeration value="XRT"/>
+        <enumeration value="XRZ"/>
+        <enumeration value="XSA"/>
+        <enumeration value="XSB"/>
+        <enumeration value="XSC"/>
+        <enumeration value="XSD"/>
+        <enumeration value="XSE"/>
+        <enumeration value="XSH"/>
+        <enumeration value="XSI"/>
+        <enumeration value="XSK"/>
+        <enumeration value="XSL"/>
+        <enumeration value="XSM"/>
+        <enumeration value="XSO"/>
+        <enumeration value="XSP"/>
+        <enumeration value="XSS"/>
+        <enumeration value="XST"/>
+        <enumeration value="XSU"/>
+        <enumeration value="XSV"/>
+        <enumeration value="XSW"/>
+        <enumeration value="XSY"/>
+        <enumeration value="XSZ"/>
+        <enumeration value="XT1"/>
+        <enumeration value="XTB"/>
+        <enumeration value="XTC"/>
+        <enumeration value="XTD"/>
+        <enumeration value="XTE"/>
+        <enumeration value="XTG"/>
+        <enumeration value="XTI"/>
+        <enumeration value="XTK"/>
+        <enumeration value="XTL"/>
+        <enumeration value="XTN"/>
+        <enumeration value="XTO"/>
+        <enumeration value="XTR"/>
+        <enumeration value="XTS"/>
+        <enumeration value="XTT"/>
+        <enumeration value="XTU"/>
+        <enumeration value="XTV"/>
+        <enumeration value="XTW"/>
+        <enumeration value="XTY"/>
+        <enumeration value="XTZ"/>
+        <enumeration value="XUC"/>
+        <enumeration value="XUN"/>
+        <enumeration value="XVA"/>
+        <enumeration value="XVG"/>
+        <enumeration value="XVI"/>
+        <enumeration value="XVK"/>
+        <enumeration value="XVL"/>
+        <enumeration value="XVN"/>
+        <enumeration value="XVO"/>
+        <enumeration value="XVP"/>
+        <enumeration value="XVQ"/>
+        <enumeration value="XVR"/>
+        <enumeration value="XVS"/>
+        <enumeration value="XVY"/>
+        <enumeration value="XWA"/>
+        <enumeration value="XWB"/>
+        <enumeration value="XWC"/>
+        <enumeration value="XWD"/>
+        <enumeration value="XWF"/>
+        <enumeration value="XWG"/>
+        <enumeration value="XWH"/>
+        <enumeration value="XWJ"/>
+        <enumeration value="XWK"/>
+        <enumeration value="XWL"/>
+        <enumeration value="XWM"/>
+        <enumeration value="XWN"/>
+        <enumeration value="XWP"/>
+        <enumeration value="XWQ"/>
+        <enumeration value="XWR"/>
+        <enumeration value="XWS"/>
+        <enumeration value="XWT"/>
+        <enumeration value="XWU"/>
+        <enumeration value="XWV"/>
+        <enumeration value="XWW"/>
+        <enumeration value="XWX"/>
+        <enumeration value="XWY"/>
+        <enumeration value="XWZ"/>
+        <enumeration value="XXA"/>
+        <enumeration value="XXB"/>
+        <enumeration value="XXC"/>
+        <enumeration value="XXD"/>
+        <enumeration value="XXF"/>
+        <enumeration value="XXG"/>
+        <enumeration value="XXH"/>
+        <enumeration value="XXJ"/>
+        <enumeration value="XXK"/>
+        <enumeration value="XYA"/>
+        <enumeration value="XYB"/>
+        <enumeration value="XYC"/>
+        <enumeration value="XYD"/>
+        <enumeration value="XYF"/>
+        <enumeration value="XYG"/>
+        <enumeration value="XYH"/>
+        <enumeration value="XYJ"/>
+        <enumeration value="XYK"/>
+        <enumeration value="XYL"/>
+        <enumeration value="XYM"/>
+        <enumeration value="XYN"/>
+        <enumeration value="XYP"/>
+        <enumeration value="XYQ"/>
+        <enumeration value="XYR"/>
+        <enumeration value="XYS"/>
+        <enumeration value="XYT"/>
+        <enumeration value="XYV"/>
+        <enumeration value="XYW"/>
+        <enumeration value="XYX"/>
+        <enumeration value="XYY"/>
+        <enumeration value="XYZ"/>
+        <enumeration value="XZA"/>
+        <enumeration value="XZB"/>
+        <enumeration value="XZC"/>
+        <enumeration value="XZD"/>
+        <enumeration value="XZF"/>
+        <enumeration value="XZG"/>
+        <enumeration value="XZH"/>
+        <enumeration value="XZJ"/>
+        <enumeration value="XZK"/>
+        <enumeration value="XZL"/>
+        <enumeration value="XZM"/>
+        <enumeration value="XZN"/>
+        <enumeration value="XZP"/>
+        <enumeration value="XZQ"/>
+        <enumeration value="XZR"/>
+        <enumeration value="XZS"/>
+        <enumeration value="XZT"/>
+        <enumeration value="XZU"/>
+        <enumeration value="XZV"/>
+        <enumeration value="XZW"/>
+        <enumeration value="XZX"/>
+        <enumeration value="XZY"/>
+        <enumeration value="XZZ"/>
+        <enumeration value="10"/>
+        <enumeration value="11"/>
+        <enumeration value="13"/>
+        <enumeration value="14"/>
+        <enumeration value="15"/>
+        <enumeration value="20"/>
+        <enumeration value="21"/>
+        <enumeration value="22"/>
+        <enumeration value="23"/>
+        <enumeration value="24"/>
+        <enumeration value="25"/>
+        <enumeration value="27"/>
+        <enumeration value="28"/>
+        <enumeration value="33"/>
+        <enumeration value="34"/>
+        <enumeration value="35"/>
+        <enumeration value="37"/>
+        <enumeration value="38"/>
+        <enumeration value="40"/>
+        <enumeration value="41"/>
+        <enumeration value="56"/>
+        <enumeration value="57"/>
+        <enumeration value="58"/>
+        <enumeration value="59"/>
+        <enumeration value="60"/>
+        <enumeration value="61"/>
+        <enumeration value="64"/>
+        <enumeration value="66"/>
+        <enumeration value="74"/>
+        <enumeration value="76"/>
+        <enumeration value="77"/>
+        <enumeration value="78"/>
+        <enumeration value="80"/>
+        <enumeration value="81"/>
+        <enumeration value="84"/>
+        <enumeration value="85"/>
+        <enumeration value="87"/>
+        <enumeration value="89"/>
+        <enumeration value="91"/>
+        <enumeration value="1I"/>
+        <enumeration value="2A"/>
+        <enumeration value="2B"/>
+        <enumeration value="2C"/>
+        <enumeration value="2G"/>
+        <enumeration value="2H"/>
+        <enumeration value="2I"/>
+        <enumeration value="2J"/>
+        <enumeration value="2K"/>
+        <enumeration value="2L"/>
+        <enumeration value="2M"/>
+        <enumeration value="2N"/>
+        <enumeration value="2P"/>
+        <enumeration value="2Q"/>
+        <enumeration value="2R"/>
+        <enumeration value="2U"/>
+        <enumeration value="2X"/>
+        <enumeration value="2Y"/>
+        <enumeration value="2Z"/>
+        <enumeration value="3B"/>
+        <enumeration value="3C"/>
+        <enumeration value="4C"/>
+        <enumeration value="4G"/>
+        <enumeration value="4H"/>
+        <enumeration value="4K"/>
+        <enumeration value="4L"/>
+        <enumeration value="4M"/>
+        <enumeration value="4N"/>
+        <enumeration value="4O"/>
+        <enumeration value="4P"/>
+        <enumeration value="4Q"/>
+        <enumeration value="4R"/>
+        <enumeration value="4T"/>
+        <enumeration value="4U"/>
+        <enumeration value="4W"/>
+        <enumeration value="4X"/>
+        <enumeration value="5A"/>
+        <enumeration value="5B"/>
+        <enumeration value="5E"/>
+        <enumeration value="5J"/>
+        <enumeration value="A1"/>
+        <enumeration value="A10"/>
+        <enumeration value="A11"/>
+        <enumeration value="A12"/>
+        <enumeration value="A13"/>
+        <enumeration value="A14"/>
+        <enumeration value="A15"/>
+        <enumeration value="A16"/>
+        <enumeration value="A17"/>
+        <enumeration value="A18"/>
+        <enumeration value="A19"/>
+        <enumeration value="A2"/>
+        <enumeration value="A20"/>
+        <enumeration value="A21"/>
+        <enumeration value="A22"/>
+        <enumeration value="A23"/>
+        <enumeration value="A24"/>
+        <enumeration value="A25"/>
+        <enumeration value="A26"/>
+        <enumeration value="A27"/>
+        <enumeration value="A28"/>
+        <enumeration value="A29"/>
+        <enumeration value="A3"/>
+        <enumeration value="A30"/>
+        <enumeration value="A31"/>
+        <enumeration value="A32"/>
+        <enumeration value="A33"/>
+        <enumeration value="A34"/>
+        <enumeration value="A35"/>
+        <enumeration value="A36"/>
+        <enumeration value="A37"/>
+        <enumeration value="A38"/>
+        <enumeration value="A39"/>
+        <enumeration value="A4"/>
+        <enumeration value="A40"/>
+        <enumeration value="A41"/>
+        <enumeration value="A42"/>
+        <enumeration value="A43"/>
+        <enumeration value="A44"/>
+        <enumeration value="A45"/>
+        <enumeration value="A47"/>
+        <enumeration value="A48"/>
+        <enumeration value="A49"/>
+        <enumeration value="A5"/>
+        <enumeration value="A50"/>
+        <enumeration value="A51"/>
+        <enumeration value="A52"/>
+        <enumeration value="A53"/>
+        <enumeration value="A54"/>
+        <enumeration value="A55"/>
+        <enumeration value="A56"/>
+        <enumeration value="A57"/>
+        <enumeration value="A58"/>
+        <enumeration value="A59"/>
+        <enumeration value="A6"/>
+        <enumeration value="A60"/>
+        <enumeration value="A61"/>
+        <enumeration value="A62"/>
+        <enumeration value="A63"/>
+        <enumeration value="A64"/>
+        <enumeration value="A65"/>
+        <enumeration value="A66"/>
+        <enumeration value="A67"/>
+        <enumeration value="A68"/>
+        <enumeration value="A69"/>
+        <enumeration value="A7"/>
+        <enumeration value="A70"/>
+        <enumeration value="A71"/>
+        <enumeration value="A73"/>
+        <enumeration value="A74"/>
+        <enumeration value="A75"/>
+        <enumeration value="A76"/>
+        <enumeration value="A77"/>
+        <enumeration value="A78"/>
+        <enumeration value="A79"/>
+        <enumeration value="A8"/>
+        <enumeration value="A80"/>
+        <enumeration value="A81"/>
+        <enumeration value="A82"/>
+        <enumeration value="A83"/>
+        <enumeration value="A84"/>
+        <enumeration value="A85"/>
+        <enumeration value="A86"/>
+        <enumeration value="A87"/>
+        <enumeration value="A88"/>
+        <enumeration value="A89"/>
+        <enumeration value="A9"/>
+        <enumeration value="A90"/>
+        <enumeration value="A91"/>
+        <enumeration value="A93"/>
+        <enumeration value="A94"/>
+        <enumeration value="A95"/>
+        <enumeration value="A96"/>
+        <enumeration value="A97"/>
+        <enumeration value="A98"/>
+        <enumeration value="A99"/>
+        <enumeration value="AA"/>
+        <enumeration value="AB"/>
+        <enumeration value="ACR"/>
+        <enumeration value="ACT"/>
+        <enumeration value="AD"/>
+        <enumeration value="AE"/>
+        <enumeration value="AH"/>
+        <enumeration value="AI"/>
+        <enumeration value="AK"/>
+        <enumeration value="AL"/>
+        <enumeration value="AMH"/>
+        <enumeration value="AMP"/>
+        <enumeration value="ANN"/>
+        <enumeration value="APZ"/>
+        <enumeration value="AQ"/>
+        <enumeration value="ARE"/>
+        <enumeration value="AS"/>
+        <enumeration value="ASM"/>
+        <enumeration value="ASU"/>
+        <enumeration value="ATM"/>
+        <enumeration value="ATT"/>
+        <enumeration value="AWG"/>
+        <enumeration value="AY"/>
+        <enumeration value="AZ"/>
+        <enumeration value="B1"/>
+        <enumeration value="B10"/>
+        <enumeration value="B11"/>
+        <enumeration value="B12"/>
+        <enumeration value="B13"/>
+        <enumeration value="B14"/>
+        <enumeration value="B15"/>
+        <enumeration value="B16"/>
+        <enumeration value="B17"/>
+        <enumeration value="B18"/>
+        <enumeration value="B19"/>
+        <enumeration value="B20"/>
+        <enumeration value="B21"/>
+        <enumeration value="B22"/>
+        <enumeration value="B23"/>
+        <enumeration value="B24"/>
+        <enumeration value="B25"/>
+        <enumeration value="B26"/>
+        <enumeration value="B27"/>
+        <enumeration value="B28"/>
+        <enumeration value="B29"/>
+        <enumeration value="B3"/>
+        <enumeration value="B30"/>
+        <enumeration value="B31"/>
+        <enumeration value="B32"/>
+        <enumeration value="B33"/>
+        <enumeration value="B34"/>
+        <enumeration value="B35"/>
+        <enumeration value="B36"/>
+        <enumeration value="B37"/>
+        <enumeration value="B38"/>
+        <enumeration value="B39"/>
+        <enumeration value="B4"/>
+        <enumeration value="B40"/>
+        <enumeration value="B41"/>
+        <enumeration value="B42"/>
+        <enumeration value="B43"/>
+        <enumeration value="B44"/>
+        <enumeration value="B45"/>
+        <enumeration value="B46"/>
+        <enumeration value="B47"/>
+        <enumeration value="B48"/>
+        <enumeration value="B49"/>
+        <enumeration value="B50"/>
+        <enumeration value="B51"/>
+        <enumeration value="B52"/>
+        <enumeration value="B53"/>
+        <enumeration value="B54"/>
+        <enumeration value="B55"/>
+        <enumeration value="B56"/>
+        <enumeration value="B57"/>
+        <enumeration value="B58"/>
+        <enumeration value="B59"/>
+        <enumeration value="B60"/>
+        <enumeration value="B61"/>
+        <enumeration value="B62"/>
+        <enumeration value="B63"/>
+        <enumeration value="B64"/>
+        <enumeration value="B65"/>
+        <enumeration value="B66"/>
+        <enumeration value="B67"/>
+        <enumeration value="B68"/>
+        <enumeration value="B69"/>
+        <enumeration value="B7"/>
+        <enumeration value="B70"/>
+        <enumeration value="B71"/>
+        <enumeration value="B72"/>
+        <enumeration value="B73"/>
+        <enumeration value="B74"/>
+        <enumeration value="B75"/>
+        <enumeration value="B76"/>
+        <enumeration value="B77"/>
+        <enumeration value="B78"/>
+        <enumeration value="B79"/>
+        <enumeration value="B8"/>
+        <enumeration value="B80"/>
+        <enumeration value="B81"/>
+        <enumeration value="B82"/>
+        <enumeration value="B83"/>
+        <enumeration value="B84"/>
+        <enumeration value="B85"/>
+        <enumeration value="B86"/>
+        <enumeration value="B87"/>
+        <enumeration value="B88"/>
+        <enumeration value="B89"/>
+        <enumeration value="B90"/>
+        <enumeration value="B91"/>
+        <enumeration value="B92"/>
+        <enumeration value="B93"/>
+        <enumeration value="B94"/>
+        <enumeration value="B95"/>
+        <enumeration value="B96"/>
+        <enumeration value="B97"/>
+        <enumeration value="B98"/>
+        <enumeration value="B99"/>
+        <enumeration value="BAR"/>
+        <enumeration value="BB"/>
+        <enumeration value="BFT"/>
+        <enumeration value="BHP"/>
+        <enumeration value="BIL"/>
+        <enumeration value="BLD"/>
+        <enumeration value="BLL"/>
+        <enumeration value="BP"/>
+        <enumeration value="BPM"/>
+        <enumeration value="BQL"/>
+        <enumeration value="BTU"/>
+        <enumeration value="BUA"/>
+        <enumeration value="BUI"/>
+        <enumeration value="C0"/>
+        <enumeration value="C10"/>
+        <enumeration value="C11"/>
+        <enumeration value="C12"/>
+        <enumeration value="C13"/>
+        <enumeration value="C14"/>
+        <enumeration value="C15"/>
+        <enumeration value="C16"/>
+        <enumeration value="C17"/>
+        <enumeration value="C18"/>
+        <enumeration value="C19"/>
+        <enumeration value="C20"/>
+        <enumeration value="C21"/>
+        <enumeration value="C22"/>
+        <enumeration value="C23"/>
+        <enumeration value="C24"/>
+        <enumeration value="C25"/>
+        <enumeration value="C26"/>
+        <enumeration value="C27"/>
+        <enumeration value="C28"/>
+        <enumeration value="C29"/>
+        <enumeration value="C3"/>
+        <enumeration value="C30"/>
+        <enumeration value="C31"/>
+        <enumeration value="C32"/>
+        <enumeration value="C33"/>
+        <enumeration value="C34"/>
+        <enumeration value="C35"/>
+        <enumeration value="C36"/>
+        <enumeration value="C37"/>
+        <enumeration value="C38"/>
+        <enumeration value="C39"/>
+        <enumeration value="C40"/>
+        <enumeration value="C41"/>
+        <enumeration value="C42"/>
+        <enumeration value="C43"/>
+        <enumeration value="C44"/>
+        <enumeration value="C45"/>
+        <enumeration value="C46"/>
+        <enumeration value="C47"/>
+        <enumeration value="C48"/>
+        <enumeration value="C49"/>
+        <enumeration value="C50"/>
+        <enumeration value="C51"/>
+        <enumeration value="C52"/>
+        <enumeration value="C53"/>
+        <enumeration value="C54"/>
+        <enumeration value="C55"/>
+        <enumeration value="C56"/>
+        <enumeration value="C57"/>
+        <enumeration value="C58"/>
+        <enumeration value="C59"/>
+        <enumeration value="C60"/>
+        <enumeration value="C61"/>
+        <enumeration value="C62"/>
+        <enumeration value="C63"/>
+        <enumeration value="C64"/>
+        <enumeration value="C65"/>
+        <enumeration value="C66"/>
+        <enumeration value="C67"/>
+        <enumeration value="C68"/>
+        <enumeration value="C69"/>
+        <enumeration value="C7"/>
+        <enumeration value="C70"/>
+        <enumeration value="C71"/>
+        <enumeration value="C72"/>
+        <enumeration value="C73"/>
+        <enumeration value="C74"/>
+        <enumeration value="C75"/>
+        <enumeration value="C76"/>
+        <enumeration value="C78"/>
+        <enumeration value="C79"/>
+        <enumeration value="C8"/>
+        <enumeration value="C80"/>
+        <enumeration value="C81"/>
+        <enumeration value="C82"/>
+        <enumeration value="C83"/>
+        <enumeration value="C84"/>
+        <enumeration value="C85"/>
+        <enumeration value="C86"/>
+        <enumeration value="C87"/>
+        <enumeration value="C88"/>
+        <enumeration value="C89"/>
+        <enumeration value="C9"/>
+        <enumeration value="C90"/>
+        <enumeration value="C91"/>
+        <enumeration value="C92"/>
+        <enumeration value="C93"/>
+        <enumeration value="C94"/>
+        <enumeration value="C95"/>
+        <enumeration value="C96"/>
+        <enumeration value="C97"/>
+        <enumeration value="C99"/>
+        <enumeration value="CCT"/>
+        <enumeration value="CDL"/>
+        <enumeration value="CEL"/>
+        <enumeration value="CEN"/>
+        <enumeration value="CG"/>
+        <enumeration value="CGM"/>
+        <enumeration value="CKG"/>
+        <enumeration value="CLF"/>
+        <enumeration value="CLT"/>
+        <enumeration value="CMK"/>
+        <enumeration value="CMQ"/>
+        <enumeration value="CMT"/>
+        <enumeration value="CNP"/>
+        <enumeration value="CNT"/>
+        <enumeration value="COU"/>
+        <enumeration value="CTG"/>
+        <enumeration value="CTM"/>
+        <enumeration value="CTN"/>
+        <enumeration value="CUR"/>
+        <enumeration value="CWA"/>
+        <enumeration value="CWI"/>
+        <enumeration value="D03"/>
+        <enumeration value="D04"/>
+        <enumeration value="D1"/>
+        <enumeration value="D10"/>
+        <enumeration value="D11"/>
+        <enumeration value="D12"/>
+        <enumeration value="D13"/>
+        <enumeration value="D15"/>
+        <enumeration value="D16"/>
+        <enumeration value="D17"/>
+        <enumeration value="D18"/>
+        <enumeration value="D19"/>
+        <enumeration value="D2"/>
+        <enumeration value="D20"/>
+        <enumeration value="D21"/>
+        <enumeration value="D22"/>
+        <enumeration value="D23"/>
+        <enumeration value="D24"/>
+        <enumeration value="D25"/>
+        <enumeration value="D26"/>
+        <enumeration value="D27"/>
+        <enumeration value="D29"/>
+        <enumeration value="D30"/>
+        <enumeration value="D31"/>
+        <enumeration value="D32"/>
+        <enumeration value="D33"/>
+        <enumeration value="D34"/>
+        <enumeration value="D35"/>
+        <enumeration value="D36"/>
+        <enumeration value="D37"/>
+        <enumeration value="D38"/>
+        <enumeration value="D39"/>
+        <enumeration value="D41"/>
+        <enumeration value="D42"/>
+        <enumeration value="D43"/>
+        <enumeration value="D44"/>
+        <enumeration value="D45"/>
+        <enumeration value="D46"/>
+        <enumeration value="D47"/>
+        <enumeration value="D48"/>
+        <enumeration value="D49"/>
+        <enumeration value="D5"/>
+        <enumeration value="D50"/>
+        <enumeration value="D51"/>
+        <enumeration value="D52"/>
+        <enumeration value="D53"/>
+        <enumeration value="D54"/>
+        <enumeration value="D55"/>
+        <enumeration value="D56"/>
+        <enumeration value="D57"/>
+        <enumeration value="D58"/>
+        <enumeration value="D59"/>
+        <enumeration value="D6"/>
+        <enumeration value="D60"/>
+        <enumeration value="D61"/>
+        <enumeration value="D62"/>
+        <enumeration value="D63"/>
+        <enumeration value="D65"/>
+        <enumeration value="D68"/>
+        <enumeration value="D69"/>
+        <enumeration value="D70"/>
+        <enumeration value="D71"/>
+        <enumeration value="D72"/>
+        <enumeration value="D73"/>
+        <enumeration value="D74"/>
+        <enumeration value="D75"/>
+        <enumeration value="D76"/>
+        <enumeration value="D77"/>
+        <enumeration value="D78"/>
+        <enumeration value="D80"/>
+        <enumeration value="D81"/>
+        <enumeration value="D82"/>
+        <enumeration value="D83"/>
+        <enumeration value="D85"/>
+        <enumeration value="D86"/>
+        <enumeration value="D87"/>
+        <enumeration value="D88"/>
+        <enumeration value="D89"/>
+        <enumeration value="D9"/>
+        <enumeration value="D91"/>
+        <enumeration value="D93"/>
+        <enumeration value="D94"/>
+        <enumeration value="D95"/>
+        <enumeration value="DAA"/>
+        <enumeration value="DAD"/>
+        <enumeration value="DAY"/>
+        <enumeration value="DB"/>
+        <enumeration value="DD"/>
+        <enumeration value="DEC"/>
+        <enumeration value="DG"/>
+        <enumeration value="DJ"/>
+        <enumeration value="DLT"/>
+        <enumeration value="DMA"/>
+        <enumeration value="DMK"/>
+        <enumeration value="DMO"/>
+        <enumeration value="DMQ"/>
+        <enumeration value="DMT"/>
+        <enumeration value="DN"/>
+        <enumeration value="DPC"/>
+        <enumeration value="DPR"/>
+        <enumeration value="DPT"/>
+        <enumeration value="DRA"/>
+        <enumeration value="DRI"/>
+        <enumeration value="DRL"/>
+        <enumeration value="DT"/>
+        <enumeration value="DTN"/>
+        <enumeration value="DU"/>
+        <enumeration value="DWT"/>
+        <enumeration value="DX"/>
+        <enumeration value="DZN"/>
+        <enumeration value="DZP"/>
+        <enumeration value="E01"/>
+        <enumeration value="E07"/>
+        <enumeration value="E08"/>
+        <enumeration value="E09"/>
+        <enumeration value="E10"/>
+        <enumeration value="E11"/>
+        <enumeration value="E12"/>
+        <enumeration value="E14"/>
+        <enumeration value="E15"/>
+        <enumeration value="E16"/>
+        <enumeration value="E17"/>
+        <enumeration value="E18"/>
+        <enumeration value="E19"/>
+        <enumeration value="E20"/>
+        <enumeration value="E21"/>
+        <enumeration value="E22"/>
+        <enumeration value="E23"/>
+        <enumeration value="E25"/>
+        <enumeration value="E27"/>
+        <enumeration value="E28"/>
+        <enumeration value="E30"/>
+        <enumeration value="E31"/>
+        <enumeration value="E32"/>
+        <enumeration value="E33"/>
+        <enumeration value="E34"/>
+        <enumeration value="E35"/>
+        <enumeration value="E36"/>
+        <enumeration value="E37"/>
+        <enumeration value="E38"/>
+        <enumeration value="E39"/>
+        <enumeration value="E4"/>
+        <enumeration value="E40"/>
+        <enumeration value="E41"/>
+        <enumeration value="E42"/>
+        <enumeration value="E43"/>
+        <enumeration value="E44"/>
+        <enumeration value="E45"/>
+        <enumeration value="E46"/>
+        <enumeration value="E47"/>
+        <enumeration value="E48"/>
+        <enumeration value="E49"/>
+        <enumeration value="E50"/>
+        <enumeration value="E51"/>
+        <enumeration value="E52"/>
+        <enumeration value="E53"/>
+        <enumeration value="E54"/>
+        <enumeration value="E55"/>
+        <enumeration value="E56"/>
+        <enumeration value="E57"/>
+        <enumeration value="E58"/>
+        <enumeration value="E59"/>
+        <enumeration value="E60"/>
+        <enumeration value="E61"/>
+        <enumeration value="E62"/>
+        <enumeration value="E63"/>
+        <enumeration value="E64"/>
+        <enumeration value="E65"/>
+        <enumeration value="E66"/>
+        <enumeration value="E67"/>
+        <enumeration value="E68"/>
+        <enumeration value="E69"/>
+        <enumeration value="E70"/>
+        <enumeration value="E71"/>
+        <enumeration value="E72"/>
+        <enumeration value="E73"/>
+        <enumeration value="E74"/>
+        <enumeration value="E75"/>
+        <enumeration value="E76"/>
+        <enumeration value="E77"/>
+        <enumeration value="E78"/>
+        <enumeration value="E79"/>
+        <enumeration value="E80"/>
+        <enumeration value="E81"/>
+        <enumeration value="E82"/>
+        <enumeration value="E83"/>
+        <enumeration value="E84"/>
+        <enumeration value="E85"/>
+        <enumeration value="E86"/>
+        <enumeration value="E87"/>
+        <enumeration value="E88"/>
+        <enumeration value="E89"/>
+        <enumeration value="E90"/>
+        <enumeration value="E91"/>
+        <enumeration value="E92"/>
+        <enumeration value="E93"/>
+        <enumeration value="E94"/>
+        <enumeration value="E95"/>
+        <enumeration value="E96"/>
+        <enumeration value="E97"/>
+        <enumeration value="E98"/>
+        <enumeration value="E99"/>
+        <enumeration value="EA"/>
+        <enumeration value="EB"/>
+        <enumeration value="EQ"/>
+        <enumeration value="F01"/>
+        <enumeration value="F02"/>
+        <enumeration value="F03"/>
+        <enumeration value="F04"/>
+        <enumeration value="F05"/>
+        <enumeration value="F06"/>
+        <enumeration value="F07"/>
+        <enumeration value="F08"/>
+        <enumeration value="F10"/>
+        <enumeration value="F11"/>
+        <enumeration value="F12"/>
+        <enumeration value="F13"/>
+        <enumeration value="F14"/>
+        <enumeration value="F15"/>
+        <enumeration value="F16"/>
+        <enumeration value="F17"/>
+        <enumeration value="F18"/>
+        <enumeration value="F19"/>
+        <enumeration value="F20"/>
+        <enumeration value="F21"/>
+        <enumeration value="F22"/>
+        <enumeration value="F23"/>
+        <enumeration value="F24"/>
+        <enumeration value="F25"/>
+        <enumeration value="F26"/>
+        <enumeration value="F27"/>
+        <enumeration value="F28"/>
+        <enumeration value="F29"/>
+        <enumeration value="F30"/>
+        <enumeration value="F31"/>
+        <enumeration value="F32"/>
+        <enumeration value="F33"/>
+        <enumeration value="F34"/>
+        <enumeration value="F35"/>
+        <enumeration value="F36"/>
+        <enumeration value="F37"/>
+        <enumeration value="F38"/>
+        <enumeration value="F39"/>
+        <enumeration value="F40"/>
+        <enumeration value="F41"/>
+        <enumeration value="F42"/>
+        <enumeration value="F43"/>
+        <enumeration value="F44"/>
+        <enumeration value="F45"/>
+        <enumeration value="F46"/>
+        <enumeration value="F47"/>
+        <enumeration value="F48"/>
+        <enumeration value="F49"/>
+        <enumeration value="F50"/>
+        <enumeration value="F51"/>
+        <enumeration value="F52"/>
+        <enumeration value="F53"/>
+        <enumeration value="F54"/>
+        <enumeration value="F55"/>
+        <enumeration value="F56"/>
+        <enumeration value="F57"/>
+        <enumeration value="F58"/>
+        <enumeration value="F59"/>
+        <enumeration value="F60"/>
+        <enumeration value="F61"/>
+        <enumeration value="F62"/>
+        <enumeration value="F63"/>
+        <enumeration value="F64"/>
+        <enumeration value="F65"/>
+        <enumeration value="F66"/>
+        <enumeration value="F67"/>
+        <enumeration value="F68"/>
+        <enumeration value="F69"/>
+        <enumeration value="F70"/>
+        <enumeration value="F71"/>
+        <enumeration value="F72"/>
+        <enumeration value="F73"/>
+        <enumeration value="F74"/>
+        <enumeration value="F75"/>
+        <enumeration value="F76"/>
+        <enumeration value="F77"/>
+        <enumeration value="F78"/>
+        <enumeration value="F79"/>
+        <enumeration value="F80"/>
+        <enumeration value="F81"/>
+        <enumeration value="F82"/>
+        <enumeration value="F83"/>
+        <enumeration value="F84"/>
+        <enumeration value="F85"/>
+        <enumeration value="F86"/>
+        <enumeration value="F87"/>
+        <enumeration value="F88"/>
+        <enumeration value="F89"/>
+        <enumeration value="F90"/>
+        <enumeration value="F91"/>
+        <enumeration value="F92"/>
+        <enumeration value="F93"/>
+        <enumeration value="F94"/>
+        <enumeration value="F95"/>
+        <enumeration value="F96"/>
+        <enumeration value="F97"/>
+        <enumeration value="F98"/>
+        <enumeration value="F99"/>
+        <enumeration value="FAH"/>
+        <enumeration value="FAR"/>
+        <enumeration value="FBM"/>
+        <enumeration value="FC"/>
+        <enumeration value="FF"/>
+        <enumeration value="FH"/>
+        <enumeration value="FIT"/>
+        <enumeration value="FL"/>
+        <enumeration value="FOT"/>
+        <enumeration value="FP"/>
+        <enumeration value="FR"/>
+        <enumeration value="FS"/>
+        <enumeration value="FTK"/>
+        <enumeration value="FTQ"/>
+        <enumeration value="G01"/>
+        <enumeration value="G04"/>
+        <enumeration value="G05"/>
+        <enumeration value="G06"/>
+        <enumeration value="G08"/>
+        <enumeration value="G09"/>
+        <enumeration value="G10"/>
+        <enumeration value="G11"/>
+        <enumeration value="G12"/>
+        <enumeration value="G13"/>
+        <enumeration value="G14"/>
+        <enumeration value="G15"/>
+        <enumeration value="G16"/>
+        <enumeration value="G17"/>
+        <enumeration value="G18"/>
+        <enumeration value="G19"/>
+        <enumeration value="G2"/>
+        <enumeration value="G20"/>
+        <enumeration value="G21"/>
+        <enumeration value="G23"/>
+        <enumeration value="G24"/>
+        <enumeration value="G25"/>
+        <enumeration value="G26"/>
+        <enumeration value="G27"/>
+        <enumeration value="G28"/>
+        <enumeration value="G29"/>
+        <enumeration value="G3"/>
+        <enumeration value="G30"/>
+        <enumeration value="G31"/>
+        <enumeration value="G32"/>
+        <enumeration value="G33"/>
+        <enumeration value="G34"/>
+        <enumeration value="G35"/>
+        <enumeration value="G36"/>
+        <enumeration value="G37"/>
+        <enumeration value="G38"/>
+        <enumeration value="G39"/>
+        <enumeration value="G40"/>
+        <enumeration value="G41"/>
+        <enumeration value="G42"/>
+        <enumeration value="G43"/>
+        <enumeration value="G44"/>
+        <enumeration value="G45"/>
+        <enumeration value="G46"/>
+        <enumeration value="G47"/>
+        <enumeration value="G48"/>
+        <enumeration value="G49"/>
+        <enumeration value="G50"/>
+        <enumeration value="G51"/>
+        <enumeration value="G52"/>
+        <enumeration value="G53"/>
+        <enumeration value="G54"/>
+        <enumeration value="G55"/>
+        <enumeration value="G56"/>
+        <enumeration value="G57"/>
+        <enumeration value="G58"/>
+        <enumeration value="G59"/>
+        <enumeration value="G60"/>
+        <enumeration value="G61"/>
+        <enumeration value="G62"/>
+        <enumeration value="G63"/>
+        <enumeration value="G64"/>
+        <enumeration value="G65"/>
+        <enumeration value="G66"/>
+        <enumeration value="G67"/>
+        <enumeration value="G68"/>
+        <enumeration value="G69"/>
+        <enumeration value="G70"/>
+        <enumeration value="G71"/>
+        <enumeration value="G72"/>
+        <enumeration value="G73"/>
+        <enumeration value="G74"/>
+        <enumeration value="G75"/>
+        <enumeration value="G76"/>
+        <enumeration value="G77"/>
+        <enumeration value="G78"/>
+        <enumeration value="G79"/>
+        <enumeration value="G80"/>
+        <enumeration value="G81"/>
+        <enumeration value="G82"/>
+        <enumeration value="G83"/>
+        <enumeration value="G84"/>
+        <enumeration value="G85"/>
+        <enumeration value="G86"/>
+        <enumeration value="G87"/>
+        <enumeration value="G88"/>
+        <enumeration value="G89"/>
+        <enumeration value="G90"/>
+        <enumeration value="G91"/>
+        <enumeration value="G92"/>
+        <enumeration value="G93"/>
+        <enumeration value="G94"/>
+        <enumeration value="G95"/>
+        <enumeration value="G96"/>
+        <enumeration value="G97"/>
+        <enumeration value="G98"/>
+        <enumeration value="G99"/>
+        <enumeration value="GB"/>
+        <enumeration value="GBQ"/>
+        <enumeration value="GDW"/>
+        <enumeration value="GE"/>
+        <enumeration value="GF"/>
+        <enumeration value="GFI"/>
+        <enumeration value="GGR"/>
+        <enumeration value="GIA"/>
+        <enumeration value="GIC"/>
+        <enumeration value="GII"/>
+        <enumeration value="GIP"/>
+        <enumeration value="GJ"/>
+        <enumeration value="GL"/>
+        <enumeration value="GLD"/>
+        <enumeration value="GLI"/>
+        <enumeration value="GLL"/>
+        <enumeration value="GM"/>
+        <enumeration value="GO"/>
+        <enumeration value="GP"/>
+        <enumeration value="GQ"/>
+        <enumeration value="GRM"/>
+        <enumeration value="GRN"/>
+        <enumeration value="GRO"/>
+        <enumeration value="GRT"/>
+        <enumeration value="GT"/>
+        <enumeration value="GV"/>
+        <enumeration value="GWH"/>
+        <enumeration value="H03"/>
+        <enumeration value="H04"/>
+        <enumeration value="H05"/>
+        <enumeration value="H06"/>
+        <enumeration value="H07"/>
+        <enumeration value="H08"/>
+        <enumeration value="H09"/>
+        <enumeration value="H10"/>
+        <enumeration value="H11"/>
+        <enumeration value="H12"/>
+        <enumeration value="H13"/>
+        <enumeration value="H14"/>
+        <enumeration value="H15"/>
+        <enumeration value="H16"/>
+        <enumeration value="H18"/>
+        <enumeration value="H19"/>
+        <enumeration value="H20"/>
+        <enumeration value="H21"/>
+        <enumeration value="H22"/>
+        <enumeration value="H23"/>
+        <enumeration value="H24"/>
+        <enumeration value="H25"/>
+        <enumeration value="H26"/>
+        <enumeration value="H27"/>
+        <enumeration value="H28"/>
+        <enumeration value="H29"/>
+        <enumeration value="H30"/>
+        <enumeration value="H31"/>
+        <enumeration value="H32"/>
+        <enumeration value="H33"/>
+        <enumeration value="H34"/>
+        <enumeration value="H35"/>
+        <enumeration value="H36"/>
+        <enumeration value="H37"/>
+        <enumeration value="H38"/>
+        <enumeration value="H39"/>
+        <enumeration value="H40"/>
+        <enumeration value="H41"/>
+        <enumeration value="H42"/>
+        <enumeration value="H43"/>
+        <enumeration value="H44"/>
+        <enumeration value="H45"/>
+        <enumeration value="H46"/>
+        <enumeration value="H47"/>
+        <enumeration value="H48"/>
+        <enumeration value="H49"/>
+        <enumeration value="H50"/>
+        <enumeration value="H51"/>
+        <enumeration value="H52"/>
+        <enumeration value="H53"/>
+        <enumeration value="H54"/>
+        <enumeration value="H55"/>
+        <enumeration value="H56"/>
+        <enumeration value="H57"/>
+        <enumeration value="H58"/>
+        <enumeration value="H59"/>
+        <enumeration value="H60"/>
+        <enumeration value="H61"/>
+        <enumeration value="H62"/>
+        <enumeration value="H63"/>
+        <enumeration value="H64"/>
+        <enumeration value="H65"/>
+        <enumeration value="H66"/>
+        <enumeration value="H67"/>
+        <enumeration value="H68"/>
+        <enumeration value="H69"/>
+        <enumeration value="H70"/>
+        <enumeration value="H71"/>
+        <enumeration value="H72"/>
+        <enumeration value="H73"/>
+        <enumeration value="H74"/>
+        <enumeration value="H75"/>
+        <enumeration value="H76"/>
+        <enumeration value="H77"/>
+        <enumeration value="H78"/>
+        <enumeration value="H79"/>
+        <enumeration value="H80"/>
+        <enumeration value="H81"/>
+        <enumeration value="H82"/>
+        <enumeration value="H83"/>
+        <enumeration value="H84"/>
+        <enumeration value="H85"/>
+        <enumeration value="H87"/>
+        <enumeration value="H88"/>
+        <enumeration value="H89"/>
+        <enumeration value="H90"/>
+        <enumeration value="H91"/>
+        <enumeration value="H92"/>
+        <enumeration value="H93"/>
+        <enumeration value="H94"/>
+        <enumeration value="H95"/>
+        <enumeration value="H96"/>
+        <enumeration value="H98"/>
+        <enumeration value="H99"/>
+        <enumeration value="HA"/>
+        <enumeration value="HAR"/>
+        <enumeration value="HBA"/>
+        <enumeration value="HBX"/>
+        <enumeration value="HC"/>
+        <enumeration value="HDW"/>
+        <enumeration value="HEA"/>
+        <enumeration value="HGM"/>
+        <enumeration value="HH"/>
+        <enumeration value="HIU"/>
+        <enumeration value="HJ"/>
+        <enumeration value="HKM"/>
+        <enumeration value="HLT"/>
+        <enumeration value="HM"/>
+        <enumeration value="HMQ"/>
+        <enumeration value="HMT"/>
+        <enumeration value="HN"/>
+        <enumeration value="HP"/>
+        <enumeration value="HPA"/>
+        <enumeration value="HTZ"/>
+        <enumeration value="HUR"/>
+        <enumeration value="IA"/>
+        <enumeration value="IE"/>
+        <enumeration value="INH"/>
+        <enumeration value="INK"/>
+        <enumeration value="INQ"/>
+        <enumeration value="ISD"/>
+        <enumeration value="IU"/>
+        <enumeration value="IV"/>
+        <enumeration value="J10"/>
+        <enumeration value="J12"/>
+        <enumeration value="J13"/>
+        <enumeration value="J14"/>
+        <enumeration value="J15"/>
+        <enumeration value="J16"/>
+        <enumeration value="J17"/>
+        <enumeration value="J18"/>
+        <enumeration value="J19"/>
+        <enumeration value="J2"/>
+        <enumeration value="J20"/>
+        <enumeration value="J21"/>
+        <enumeration value="J22"/>
+        <enumeration value="J23"/>
+        <enumeration value="J24"/>
+        <enumeration value="J25"/>
+        <enumeration value="J26"/>
+        <enumeration value="J27"/>
+        <enumeration value="J28"/>
+        <enumeration value="J29"/>
+        <enumeration value="J30"/>
+        <enumeration value="J31"/>
+        <enumeration value="J32"/>
+        <enumeration value="J33"/>
+        <enumeration value="J34"/>
+        <enumeration value="J35"/>
+        <enumeration value="J36"/>
+        <enumeration value="J38"/>
+        <enumeration value="J39"/>
+        <enumeration value="J40"/>
+        <enumeration value="J41"/>
+        <enumeration value="J42"/>
+        <enumeration value="J43"/>
+        <enumeration value="J44"/>
+        <enumeration value="J45"/>
+        <enumeration value="J46"/>
+        <enumeration value="J47"/>
+        <enumeration value="J48"/>
+        <enumeration value="J49"/>
+        <enumeration value="J50"/>
+        <enumeration value="J51"/>
+        <enumeration value="J52"/>
+        <enumeration value="J53"/>
+        <enumeration value="J54"/>
+        <enumeration value="J55"/>
+        <enumeration value="J56"/>
+        <enumeration value="J57"/>
+        <enumeration value="J58"/>
+        <enumeration value="J59"/>
+        <enumeration value="J60"/>
+        <enumeration value="J61"/>
+        <enumeration value="J62"/>
+        <enumeration value="J63"/>
+        <enumeration value="J64"/>
+        <enumeration value="J65"/>
+        <enumeration value="J66"/>
+        <enumeration value="J67"/>
+        <enumeration value="J68"/>
+        <enumeration value="J69"/>
+        <enumeration value="J70"/>
+        <enumeration value="J71"/>
+        <enumeration value="J72"/>
+        <enumeration value="J73"/>
+        <enumeration value="J74"/>
+        <enumeration value="J75"/>
+        <enumeration value="J76"/>
+        <enumeration value="J78"/>
+        <enumeration value="J79"/>
+        <enumeration value="J81"/>
+        <enumeration value="J82"/>
+        <enumeration value="J83"/>
+        <enumeration value="J84"/>
+        <enumeration value="J85"/>
+        <enumeration value="J87"/>
+        <enumeration value="J89"/>
+        <enumeration value="J90"/>
+        <enumeration value="J91"/>
+        <enumeration value="J92"/>
+        <enumeration value="J93"/>
+        <enumeration value="J94"/>
+        <enumeration value="J95"/>
+        <enumeration value="J96"/>
+        <enumeration value="J97"/>
+        <enumeration value="J98"/>
+        <enumeration value="J99"/>
+        <enumeration value="JE"/>
+        <enumeration value="JK"/>
+        <enumeration value="JM"/>
+        <enumeration value="JNT"/>
+        <enumeration value="JOU"/>
+        <enumeration value="JPS"/>
+        <enumeration value="JWL"/>
+        <enumeration value="K1"/>
+        <enumeration value="K10"/>
+        <enumeration value="K11"/>
+        <enumeration value="K12"/>
+        <enumeration value="K13"/>
+        <enumeration value="K14"/>
+        <enumeration value="K15"/>
+        <enumeration value="K16"/>
+        <enumeration value="K17"/>
+        <enumeration value="K18"/>
+        <enumeration value="K19"/>
+        <enumeration value="K2"/>
+        <enumeration value="K20"/>
+        <enumeration value="K21"/>
+        <enumeration value="K22"/>
+        <enumeration value="K23"/>
+        <enumeration value="K24"/>
+        <enumeration value="K25"/>
+        <enumeration value="K26"/>
+        <enumeration value="K27"/>
+        <enumeration value="K28"/>
+        <enumeration value="K3"/>
+        <enumeration value="K30"/>
+        <enumeration value="K31"/>
+        <enumeration value="K32"/>
+        <enumeration value="K33"/>
+        <enumeration value="K34"/>
+        <enumeration value="K35"/>
+        <enumeration value="K36"/>
+        <enumeration value="K37"/>
+        <enumeration value="K38"/>
+        <enumeration value="K39"/>
+        <enumeration value="K40"/>
+        <enumeration value="K41"/>
+        <enumeration value="K42"/>
+        <enumeration value="K43"/>
+        <enumeration value="K45"/>
+        <enumeration value="K46"/>
+        <enumeration value="K47"/>
+        <enumeration value="K48"/>
+        <enumeration value="K49"/>
+        <enumeration value="K5"/>
+        <enumeration value="K50"/>
+        <enumeration value="K51"/>
+        <enumeration value="K52"/>
+        <enumeration value="K53"/>
+        <enumeration value="K54"/>
+        <enumeration value="K55"/>
+        <enumeration value="K58"/>
+        <enumeration value="K59"/>
+        <enumeration value="K6"/>
+        <enumeration value="K60"/>
+        <enumeration value="K61"/>
+        <enumeration value="K62"/>
+        <enumeration value="K63"/>
+        <enumeration value="K64"/>
+        <enumeration value="K65"/>
+        <enumeration value="K66"/>
+        <enumeration value="K67"/>
+        <enumeration value="K68"/>
+        <enumeration value="K69"/>
+        <enumeration value="K70"/>
+        <enumeration value="K71"/>
+        <enumeration value="K73"/>
+        <enumeration value="K74"/>
+        <enumeration value="K75"/>
+        <enumeration value="K76"/>
+        <enumeration value="K77"/>
+        <enumeration value="K78"/>
+        <enumeration value="K79"/>
+        <enumeration value="K80"/>
+        <enumeration value="K81"/>
+        <enumeration value="K82"/>
+        <enumeration value="K83"/>
+        <enumeration value="K84"/>
+        <enumeration value="K85"/>
+        <enumeration value="K86"/>
+        <enumeration value="K87"/>
+        <enumeration value="K88"/>
+        <enumeration value="K89"/>
+        <enumeration value="K90"/>
+        <enumeration value="K91"/>
+        <enumeration value="K92"/>
+        <enumeration value="K93"/>
+        <enumeration value="K94"/>
+        <enumeration value="K95"/>
+        <enumeration value="K96"/>
+        <enumeration value="K97"/>
+        <enumeration value="K98"/>
+        <enumeration value="K99"/>
+        <enumeration value="KA"/>
+        <enumeration value="KAT"/>
+        <enumeration value="KB"/>
+        <enumeration value="KBA"/>
+        <enumeration value="KCC"/>
+        <enumeration value="KDW"/>
+        <enumeration value="KEL"/>
+        <enumeration value="KGM"/>
+        <enumeration value="KGS"/>
+        <enumeration value="KHY"/>
+        <enumeration value="KHZ"/>
+        <enumeration value="KI"/>
+        <enumeration value="KIC"/>
+        <enumeration value="KIP"/>
+        <enumeration value="KJ"/>
+        <enumeration value="KJO"/>
+        <enumeration value="KL"/>
+        <enumeration value="KLK"/>
+        <enumeration value="KLX"/>
+        <enumeration value="KMA"/>
+        <enumeration value="KMH"/>
+        <enumeration value="KMK"/>
+        <enumeration value="KMQ"/>
+        <enumeration value="KMT"/>
+        <enumeration value="KNI"/>
+        <enumeration value="KNM"/>
+        <enumeration value="KNS"/>
+        <enumeration value="KNT"/>
+        <enumeration value="KO"/>
+        <enumeration value="KPA"/>
+        <enumeration value="KPH"/>
+        <enumeration value="KPO"/>
+        <enumeration value="KPP"/>
+        <enumeration value="KR"/>
+        <enumeration value="KSD"/>
+        <enumeration value="KSH"/>
+        <enumeration value="KT"/>
+        <enumeration value="KTN"/>
+        <enumeration value="KUR"/>
+        <enumeration value="KVA"/>
+        <enumeration value="KVR"/>
+        <enumeration value="KVT"/>
+        <enumeration value="KW"/>
+        <enumeration value="KWH"/>
+        <enumeration value="KWN"/>
+        <enumeration value="KWO"/>
+        <enumeration value="KWS"/>
+        <enumeration value="KWT"/>
+        <enumeration value="KX"/>
+        <enumeration value="L10"/>
+        <enumeration value="L11"/>
+        <enumeration value="L12"/>
+        <enumeration value="L13"/>
+        <enumeration value="L14"/>
+        <enumeration value="L15"/>
+        <enumeration value="L16"/>
+        <enumeration value="L17"/>
+        <enumeration value="L18"/>
+        <enumeration value="L19"/>
+        <enumeration value="L2"/>
+        <enumeration value="L20"/>
+        <enumeration value="L21"/>
+        <enumeration value="L23"/>
+        <enumeration value="L24"/>
+        <enumeration value="L25"/>
+        <enumeration value="L26"/>
+        <enumeration value="L27"/>
+        <enumeration value="L28"/>
+        <enumeration value="L29"/>
+        <enumeration value="L30"/>
+        <enumeration value="L31"/>
+        <enumeration value="L32"/>
+        <enumeration value="L33"/>
+        <enumeration value="L34"/>
+        <enumeration value="L35"/>
+        <enumeration value="L36"/>
+        <enumeration value="L37"/>
+        <enumeration value="L38"/>
+        <enumeration value="L39"/>
+        <enumeration value="L40"/>
+        <enumeration value="L41"/>
+        <enumeration value="L42"/>
+        <enumeration value="L43"/>
+        <enumeration value="L44"/>
+        <enumeration value="L45"/>
+        <enumeration value="L46"/>
+        <enumeration value="L47"/>
+        <enumeration value="L48"/>
+        <enumeration value="L49"/>
+        <enumeration value="L50"/>
+        <enumeration value="L51"/>
+        <enumeration value="L52"/>
+        <enumeration value="L53"/>
+        <enumeration value="L54"/>
+        <enumeration value="L55"/>
+        <enumeration value="L56"/>
+        <enumeration value="L57"/>
+        <enumeration value="L58"/>
+        <enumeration value="L59"/>
+        <enumeration value="L60"/>
+        <enumeration value="L63"/>
+        <enumeration value="L64"/>
+        <enumeration value="L65"/>
+        <enumeration value="L66"/>
+        <enumeration value="L67"/>
+        <enumeration value="L68"/>
+        <enumeration value="L69"/>
+        <enumeration value="L70"/>
+        <enumeration value="L71"/>
+        <enumeration value="L72"/>
+        <enumeration value="L73"/>
+        <enumeration value="L74"/>
+        <enumeration value="L75"/>
+        <enumeration value="L76"/>
+        <enumeration value="L77"/>
+        <enumeration value="L78"/>
+        <enumeration value="L79"/>
+        <enumeration value="L80"/>
+        <enumeration value="L81"/>
+        <enumeration value="L82"/>
+        <enumeration value="L83"/>
+        <enumeration value="L84"/>
+        <enumeration value="L85"/>
+        <enumeration value="L86"/>
+        <enumeration value="L87"/>
+        <enumeration value="L88"/>
+        <enumeration value="L89"/>
+        <enumeration value="L90"/>
+        <enumeration value="L91"/>
+        <enumeration value="L92"/>
+        <enumeration value="L93"/>
+        <enumeration value="L94"/>
+        <enumeration value="L95"/>
+        <enumeration value="L96"/>
+        <enumeration value="L98"/>
+        <enumeration value="L99"/>
+        <enumeration value="LA"/>
+        <enumeration value="LAC"/>
+        <enumeration value="LBR"/>
+        <enumeration value="LBT"/>
+        <enumeration value="LD"/>
+        <enumeration value="LEF"/>
+        <enumeration value="LF"/>
+        <enumeration value="LH"/>
+        <enumeration value="LK"/>
+        <enumeration value="LM"/>
+        <enumeration value="LN"/>
+        <enumeration value="LO"/>
+        <enumeration value="LP"/>
+        <enumeration value="LPA"/>
+        <enumeration value="LR"/>
+        <enumeration value="LS"/>
+        <enumeration value="LTN"/>
+        <enumeration value="LTR"/>
+        <enumeration value="LUB"/>
+        <enumeration value="LUM"/>
+        <enumeration value="LUX"/>
+        <enumeration value="LY"/>
+        <enumeration value="M1"/>
+        <enumeration value="M10"/>
+        <enumeration value="M11"/>
+        <enumeration value="M12"/>
+        <enumeration value="M13"/>
+        <enumeration value="M14"/>
+        <enumeration value="M15"/>
+        <enumeration value="M16"/>
+        <enumeration value="M17"/>
+        <enumeration value="M18"/>
+        <enumeration value="M19"/>
+        <enumeration value="M20"/>
+        <enumeration value="M21"/>
+        <enumeration value="M22"/>
+        <enumeration value="M23"/>
+        <enumeration value="M24"/>
+        <enumeration value="M25"/>
+        <enumeration value="M26"/>
+        <enumeration value="M27"/>
+        <enumeration value="M29"/>
+        <enumeration value="M30"/>
+        <enumeration value="M31"/>
+        <enumeration value="M32"/>
+        <enumeration value="M33"/>
+        <enumeration value="M34"/>
+        <enumeration value="M35"/>
+        <enumeration value="M36"/>
+        <enumeration value="M37"/>
+        <enumeration value="M38"/>
+        <enumeration value="M39"/>
+        <enumeration value="M4"/>
+        <enumeration value="M40"/>
+        <enumeration value="M41"/>
+        <enumeration value="M42"/>
+        <enumeration value="M43"/>
+        <enumeration value="M44"/>
+        <enumeration value="M45"/>
+        <enumeration value="M46"/>
+        <enumeration value="M47"/>
+        <enumeration value="M48"/>
+        <enumeration value="M49"/>
+        <enumeration value="M5"/>
+        <enumeration value="M50"/>
+        <enumeration value="M51"/>
+        <enumeration value="M52"/>
+        <enumeration value="M53"/>
+        <enumeration value="M55"/>
+        <enumeration value="M56"/>
+        <enumeration value="M57"/>
+        <enumeration value="M58"/>
+        <enumeration value="M59"/>
+        <enumeration value="M60"/>
+        <enumeration value="M61"/>
+        <enumeration value="M62"/>
+        <enumeration value="M63"/>
+        <enumeration value="M64"/>
+        <enumeration value="M65"/>
+        <enumeration value="M66"/>
+        <enumeration value="M67"/>
+        <enumeration value="M68"/>
+        <enumeration value="M69"/>
+        <enumeration value="M7"/>
+        <enumeration value="M70"/>
+        <enumeration value="M71"/>
+        <enumeration value="M72"/>
+        <enumeration value="M73"/>
+        <enumeration value="M74"/>
+        <enumeration value="M75"/>
+        <enumeration value="M76"/>
+        <enumeration value="M77"/>
+        <enumeration value="M78"/>
+        <enumeration value="M79"/>
+        <enumeration value="M80"/>
+        <enumeration value="M81"/>
+        <enumeration value="M82"/>
+        <enumeration value="M83"/>
+        <enumeration value="M84"/>
+        <enumeration value="M85"/>
+        <enumeration value="M86"/>
+        <enumeration value="M87"/>
+        <enumeration value="M88"/>
+        <enumeration value="M89"/>
+        <enumeration value="M9"/>
+        <enumeration value="M90"/>
+        <enumeration value="M91"/>
+        <enumeration value="M92"/>
+        <enumeration value="M93"/>
+        <enumeration value="M94"/>
+        <enumeration value="M95"/>
+        <enumeration value="M96"/>
+        <enumeration value="M97"/>
+        <enumeration value="M98"/>
+        <enumeration value="M99"/>
+        <enumeration value="MAH"/>
+        <enumeration value="MAL"/>
+        <enumeration value="MAM"/>
+        <enumeration value="MAR"/>
+        <enumeration value="MAW"/>
+        <enumeration value="MBE"/>
+        <enumeration value="MBF"/>
+        <enumeration value="MBR"/>
+        <enumeration value="MC"/>
+        <enumeration value="MCU"/>
+        <enumeration value="MD"/>
+        <enumeration value="MGM"/>
+        <enumeration value="MHZ"/>
+        <enumeration value="MIK"/>
+        <enumeration value="MIL"/>
+        <enumeration value="MIN"/>
+        <enumeration value="MIO"/>
+        <enumeration value="MIU"/>
+        <enumeration value="MLD"/>
+        <enumeration value="MLT"/>
+        <enumeration value="MMK"/>
+        <enumeration value="MMQ"/>
+        <enumeration value="MMT"/>
+        <enumeration value="MND"/>
+        <enumeration value="MON"/>
+        <enumeration value="MPA"/>
+        <enumeration value="MQH"/>
+        <enumeration value="MQS"/>
+        <enumeration value="MSK"/>
+        <enumeration value="MTK"/>
+        <enumeration value="MTQ"/>
+        <enumeration value="MTR"/>
+        <enumeration value="MTS"/>
+        <enumeration value="MVA"/>
+        <enumeration value="MWH"/>
+        <enumeration value="N1"/>
+        <enumeration value="N10"/>
+        <enumeration value="N11"/>
+        <enumeration value="N12"/>
+        <enumeration value="N13"/>
+        <enumeration value="N14"/>
+        <enumeration value="N15"/>
+        <enumeration value="N16"/>
+        <enumeration value="N17"/>
+        <enumeration value="N18"/>
+        <enumeration value="N19"/>
+        <enumeration value="N20"/>
+        <enumeration value="N21"/>
+        <enumeration value="N22"/>
+        <enumeration value="N23"/>
+        <enumeration value="N24"/>
+        <enumeration value="N25"/>
+        <enumeration value="N26"/>
+        <enumeration value="N27"/>
+        <enumeration value="N28"/>
+        <enumeration value="N29"/>
+        <enumeration value="N3"/>
+        <enumeration value="N30"/>
+        <enumeration value="N31"/>
+        <enumeration value="N32"/>
+        <enumeration value="N33"/>
+        <enumeration value="N34"/>
+        <enumeration value="N35"/>
+        <enumeration value="N36"/>
+        <enumeration value="N37"/>
+        <enumeration value="N38"/>
+        <enumeration value="N39"/>
+        <enumeration value="N40"/>
+        <enumeration value="N41"/>
+        <enumeration value="N42"/>
+        <enumeration value="N43"/>
+        <enumeration value="N44"/>
+        <enumeration value="N45"/>
+        <enumeration value="N46"/>
+        <enumeration value="N47"/>
+        <enumeration value="N48"/>
+        <enumeration value="N49"/>
+        <enumeration value="N50"/>
+        <enumeration value="N51"/>
+        <enumeration value="N52"/>
+        <enumeration value="N53"/>
+        <enumeration value="N54"/>
+        <enumeration value="N55"/>
+        <enumeration value="N56"/>
+        <enumeration value="N57"/>
+        <enumeration value="N58"/>
+        <enumeration value="N59"/>
+        <enumeration value="N60"/>
+        <enumeration value="N61"/>
+        <enumeration value="N62"/>
+        <enumeration value="N63"/>
+        <enumeration value="N64"/>
+        <enumeration value="N65"/>
+        <enumeration value="N66"/>
+        <enumeration value="N67"/>
+        <enumeration value="N68"/>
+        <enumeration value="N69"/>
+        <enumeration value="N70"/>
+        <enumeration value="N71"/>
+        <enumeration value="N72"/>
+        <enumeration value="N73"/>
+        <enumeration value="N74"/>
+        <enumeration value="N75"/>
+        <enumeration value="N76"/>
+        <enumeration value="N77"/>
+        <enumeration value="N78"/>
+        <enumeration value="N79"/>
+        <enumeration value="N80"/>
+        <enumeration value="N81"/>
+        <enumeration value="N82"/>
+        <enumeration value="N83"/>
+        <enumeration value="N84"/>
+        <enumeration value="N85"/>
+        <enumeration value="N86"/>
+        <enumeration value="N87"/>
+        <enumeration value="N88"/>
+        <enumeration value="N89"/>
+        <enumeration value="N90"/>
+        <enumeration value="N91"/>
+        <enumeration value="N92"/>
+        <enumeration value="N93"/>
+        <enumeration value="N94"/>
+        <enumeration value="N95"/>
+        <enumeration value="N96"/>
+        <enumeration value="N97"/>
+        <enumeration value="N98"/>
+        <enumeration value="N99"/>
+        <enumeration value="NA"/>
+        <enumeration value="NAR"/>
+        <enumeration value="NCL"/>
+        <enumeration value="NEW"/>
+        <enumeration value="NF"/>
+        <enumeration value="NIL"/>
+        <enumeration value="NIU"/>
+        <enumeration value="NL"/>
+        <enumeration value="NM3"/>
+        <enumeration value="NMI"/>
+        <enumeration value="NMP"/>
+        <enumeration value="NPR"/>
+        <enumeration value="NPT"/>
+        <enumeration value="NQ"/>
+        <enumeration value="NR"/>
+        <enumeration value="NT"/>
+        <enumeration value="NTT"/>
+        <enumeration value="NU"/>
+        <enumeration value="NX"/>
+        <enumeration value="OA"/>
+        <enumeration value="ODE"/>
+        <enumeration value="OHM"/>
+        <enumeration value="ON"/>
+        <enumeration value="ONZ"/>
+        <enumeration value="OPM"/>
+        <enumeration value="OT"/>
+        <enumeration value="OZ"/>
+        <enumeration value="OZA"/>
+        <enumeration value="OZI"/>
+        <enumeration value="P1"/>
+        <enumeration value="P10"/>
+        <enumeration value="P11"/>
+        <enumeration value="P12"/>
+        <enumeration value="P13"/>
+        <enumeration value="P14"/>
+        <enumeration value="P15"/>
+        <enumeration value="P16"/>
+        <enumeration value="P17"/>
+        <enumeration value="P18"/>
+        <enumeration value="P19"/>
+        <enumeration value="P2"/>
+        <enumeration value="P20"/>
+        <enumeration value="P21"/>
+        <enumeration value="P22"/>
+        <enumeration value="P23"/>
+        <enumeration value="P24"/>
+        <enumeration value="P25"/>
+        <enumeration value="P26"/>
+        <enumeration value="P27"/>
+        <enumeration value="P28"/>
+        <enumeration value="P29"/>
+        <enumeration value="P30"/>
+        <enumeration value="P31"/>
+        <enumeration value="P32"/>
+        <enumeration value="P33"/>
+        <enumeration value="P34"/>
+        <enumeration value="P35"/>
+        <enumeration value="P36"/>
+        <enumeration value="P37"/>
+        <enumeration value="P38"/>
+        <enumeration value="P39"/>
+        <enumeration value="P40"/>
+        <enumeration value="P41"/>
+        <enumeration value="P42"/>
+        <enumeration value="P43"/>
+        <enumeration value="P44"/>
+        <enumeration value="P45"/>
+        <enumeration value="P46"/>
+        <enumeration value="P47"/>
+        <enumeration value="P48"/>
+        <enumeration value="P49"/>
+        <enumeration value="P5"/>
+        <enumeration value="P50"/>
+        <enumeration value="P51"/>
+        <enumeration value="P52"/>
+        <enumeration value="P53"/>
+        <enumeration value="P54"/>
+        <enumeration value="P55"/>
+        <enumeration value="P56"/>
+        <enumeration value="P57"/>
+        <enumeration value="P58"/>
+        <enumeration value="P59"/>
+        <enumeration value="P60"/>
+        <enumeration value="P61"/>
+        <enumeration value="P62"/>
+        <enumeration value="P63"/>
+        <enumeration value="P64"/>
+        <enumeration value="P65"/>
+        <enumeration value="P66"/>
+        <enumeration value="P67"/>
+        <enumeration value="P68"/>
+        <enumeration value="P69"/>
+        <enumeration value="P70"/>
+        <enumeration value="P71"/>
+        <enumeration value="P72"/>
+        <enumeration value="P73"/>
+        <enumeration value="P74"/>
+        <enumeration value="P75"/>
+        <enumeration value="P76"/>
+        <enumeration value="P77"/>
+        <enumeration value="P78"/>
+        <enumeration value="P79"/>
+        <enumeration value="P80"/>
+        <enumeration value="P81"/>
+        <enumeration value="P82"/>
+        <enumeration value="P83"/>
+        <enumeration value="P84"/>
+        <enumeration value="P85"/>
+        <enumeration value="P86"/>
+        <enumeration value="P87"/>
+        <enumeration value="P88"/>
+        <enumeration value="P89"/>
+        <enumeration value="P90"/>
+        <enumeration value="P91"/>
+        <enumeration value="P92"/>
+        <enumeration value="P93"/>
+        <enumeration value="P94"/>
+        <enumeration value="P95"/>
+        <enumeration value="P96"/>
+        <enumeration value="P97"/>
+        <enumeration value="P98"/>
+        <enumeration value="P99"/>
+        <enumeration value="PAL"/>
+        <enumeration value="PD"/>
+        <enumeration value="PFL"/>
+        <enumeration value="PGL"/>
+        <enumeration value="PI"/>
+        <enumeration value="PLA"/>
+        <enumeration value="PO"/>
+        <enumeration value="PQ"/>
+        <enumeration value="PR"/>
+        <enumeration value="PS"/>
+        <enumeration value="PT"/>
+        <enumeration value="PTD"/>
+        <enumeration value="PTI"/>
+        <enumeration value="PTL"/>
+        <enumeration value="PTN"/>
+        <enumeration value="Q10"/>
+        <enumeration value="Q11"/>
+        <enumeration value="Q12"/>
+        <enumeration value="Q13"/>
+        <enumeration value="Q14"/>
+        <enumeration value="Q15"/>
+        <enumeration value="Q16"/>
+        <enumeration value="Q17"/>
+        <enumeration value="Q18"/>
+        <enumeration value="Q19"/>
+        <enumeration value="Q20"/>
+        <enumeration value="Q21"/>
+        <enumeration value="Q22"/>
+        <enumeration value="Q23"/>
+        <enumeration value="Q24"/>
+        <enumeration value="Q25"/>
+        <enumeration value="Q26"/>
+        <enumeration value="Q27"/>
+        <enumeration value="Q28"/>
+        <enumeration value="Q29"/>
+        <enumeration value="Q3"/>
+        <enumeration value="Q30"/>
+        <enumeration value="Q31"/>
+        <enumeration value="Q32"/>
+        <enumeration value="Q33"/>
+        <enumeration value="Q34"/>
+        <enumeration value="Q35"/>
+        <enumeration value="Q36"/>
+        <enumeration value="Q37"/>
+        <enumeration value="Q38"/>
+        <enumeration value="Q39"/>
+        <enumeration value="Q40"/>
+        <enumeration value="Q41"/>
+        <enumeration value="Q42"/>
+        <enumeration value="QA"/>
+        <enumeration value="QAN"/>
+        <enumeration value="QB"/>
+        <enumeration value="QR"/>
+        <enumeration value="QT"/>
+        <enumeration value="QTD"/>
+        <enumeration value="QTI"/>
+        <enumeration value="QTL"/>
+        <enumeration value="QTR"/>
+        <enumeration value="R1"/>
+        <enumeration value="R9"/>
+        <enumeration value="RH"/>
+        <enumeration value="RM"/>
+        <enumeration value="ROM"/>
+        <enumeration value="RP"/>
+        <enumeration value="RPM"/>
+        <enumeration value="RPS"/>
+        <enumeration value="RT"/>
+        <enumeration value="S3"/>
+        <enumeration value="S4"/>
+        <enumeration value="SAN"/>
+        <enumeration value="SCO"/>
+        <enumeration value="SCR"/>
+        <enumeration value="SEC"/>
+        <enumeration value="SET"/>
+        <enumeration value="SG"/>
+        <enumeration value="SHT"/>
+        <enumeration value="SIE"/>
+        <enumeration value="SM3"/>
+        <enumeration value="SMI"/>
+        <enumeration value="SQ"/>
+        <enumeration value="SQR"/>
+        <enumeration value="SR"/>
+        <enumeration value="STC"/>
+        <enumeration value="STI"/>
+        <enumeration value="STK"/>
+        <enumeration value="STL"/>
+        <enumeration value="STN"/>
+        <enumeration value="STW"/>
+        <enumeration value="SW"/>
+        <enumeration value="SX"/>
+        <enumeration value="SYR"/>
+        <enumeration value="T0"/>
+        <enumeration value="T3"/>
+        <enumeration value="TAH"/>
+        <enumeration value="TAN"/>
+        <enumeration value="TI"/>
+        <enumeration value="TIC"/>
+        <enumeration value="TIP"/>
+        <enumeration value="TKM"/>
+        <enumeration value="TMS"/>
+        <enumeration value="TNE"/>
+        <enumeration value="TP"/>
+        <enumeration value="TPI"/>
+        <enumeration value="TPR"/>
+        <enumeration value="TQD"/>
+        <enumeration value="TRL"/>
+        <enumeration value="TST"/>
+        <enumeration value="TTS"/>
+        <enumeration value="U1"/>
+        <enumeration value="U2"/>
+        <enumeration value="UA"/>
+        <enumeration value="UB"/>
+        <enumeration value="UC"/>
+        <enumeration value="VA"/>
+        <enumeration value="VLT"/>
+        <enumeration value="VP"/>
+        <enumeration value="W2"/>
+        <enumeration value="WA"/>
+        <enumeration value="WB"/>
+        <enumeration value="WCD"/>
+        <enumeration value="WE"/>
+        <enumeration value="WEB"/>
+        <enumeration value="WEE"/>
+        <enumeration value="WG"/>
+        <enumeration value="WHR"/>
+        <enumeration value="WM"/>
+        <enumeration value="WSD"/>
+        <enumeration value="WTT"/>
+        <enumeration value="WW"/>
+        <enumeration value="X1"/>
+        <enumeration value="YDK"/>
+        <enumeration value="YDQ"/>
+        <enumeration value="YRD"/>
+        <enumeration value="Z11"/>
+        <enumeration value="ZP"/>
+        <enumeration value="ZZ"/>
+    </cl>
+    <cl id="10">
+        <enumeration value="102"/>
+    </cl>
+    <cl id="11">
+        <enumeration value="application/pdf"/>
+        <enumeration value="application/vnd.oasis.opendocument.spreadsheet"/>
+        <enumeration value="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
+        <enumeration value="image/jpeg"/>
+        <enumeration value="image/png"/>
+        <enumeration value="text/csv"/>
+    </cl>
+    <cl id="12">
+        <enumeration value="0002"/>
+        <enumeration value="0007"/>
+        <enumeration value="0009"/>
+        <enumeration value="0037"/>
+        <enumeration value="0060"/>
+        <enumeration value="0088"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0106"/>
+        <enumeration value="0130"/>
+        <enumeration value="0135"/>
+        <enumeration value="0142"/>
+        <enumeration value="0151"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+        <enumeration value="9901"/>
+        <enumeration value="9902"/>
+        <enumeration value="9904"/>
+        <enumeration value="9905"/>
+        <enumeration value="9906"/>
+        <enumeration value="9907"/>
+        <enumeration value="9910"/>
+        <enumeration value="9913"/>
+        <enumeration value="9914"/>
+        <enumeration value="9915"/>
+        <enumeration value="9918"/>
+        <enumeration value="9919"/>
+        <enumeration value="9920"/>
+        <enumeration value="9922"/>
+        <enumeration value="9923"/>
+        <enumeration value="9924"/>
+        <enumeration value="9925"/>
+        <enumeration value="9926"/>
+        <enumeration value="9927"/>
+        <enumeration value="9928"/>
+        <enumeration value="9929"/>
+        <enumeration value="9930"/>
+        <enumeration value="9931"/>
+        <enumeration value="9932"/>
+        <enumeration value="9933"/>
+        <enumeration value="9934"/>
+        <enumeration value="9935"/>
+        <enumeration value="9936"/>
+        <enumeration value="9937"/>
+        <enumeration value="9938"/>
+        <enumeration value="9939"/>
+        <enumeration value="9940"/>
+        <enumeration value="9941"/>
+        <enumeration value="9942"/>
+        <enumeration value="9943"/>
+        <enumeration value="9944"/>
+        <enumeration value="9945"/>
+        <enumeration value="9946"/>
+        <enumeration value="9947"/>
+        <enumeration value="9948"/>
+        <enumeration value="9949"/>
+        <enumeration value="9950"/>
+        <enumeration value="9951"/>
+        <enumeration value="9952"/>
+        <enumeration value="9953"/>
+        <enumeration value="9955"/>
+        <enumeration value="9956"/>
+        <enumeration value="9957"/>
+        <enumeration value="9958"/>
+        <enumeration value="AN"/>
+        <enumeration value="AQ"/>
+        <enumeration value="AS"/>
+        <enumeration value="AU"/>
+        <enumeration value="EM"/>
+    </cl>
+    <cl id="13">
+        <enumeration value="FC"/>
+        <enumeration value="VA"/>
+    </cl>
+    <cl id="14">
+        <enumeration value="AE"/>
+        <enumeration value="E"/>
+        <enumeration value="G"/>
+        <enumeration value="K"/>
+        <enumeration value="L"/>
+        <enumeration value="M"/>
+        <enumeration value="O"/>
+        <enumeration value="S"/>
+        <enumeration value="Z"/>
+    </cl>
+    <cl id="15">
+        <enumeration value="vatex-eu-132"/>
+        <enumeration value="VATEX-EU-132"/>
+        <enumeration value="vatex-eu-132-1a"/>
+        <enumeration value="VATEX-EU-132-1A"/>
+        <enumeration value="vatex-eu-132-1b"/>
+        <enumeration value="VATEX-EU-132-1B"/>
+        <enumeration value="vatex-eu-132-1c"/>
+        <enumeration value="VATEX-EU-132-1C"/>
+        <enumeration value="vatex-eu-132-1d"/>
+        <enumeration value="VATEX-EU-132-1D"/>
+        <enumeration value="vatex-eu-132-1e"/>
+        <enumeration value="VATEX-EU-132-1E"/>
+        <enumeration value="vatex-eu-132-1f"/>
+        <enumeration value="VATEX-EU-132-1F"/>
+        <enumeration value="vatex-eu-132-1g"/>
+        <enumeration value="VATEX-EU-132-1G"/>
+        <enumeration value="vatex-eu-132-1h"/>
+        <enumeration value="VATEX-EU-132-1H"/>
+        <enumeration value="vatex-eu-132-1i"/>
+        <enumeration value="VATEX-EU-132-1I"/>
+        <enumeration value="vatex-eu-132-1j"/>
+        <enumeration value="VATEX-EU-132-1J"/>
+        <enumeration value="vatex-eu-132-1k"/>
+        <enumeration value="VATEX-EU-132-1K"/>
+        <enumeration value="vatex-eu-132-1l"/>
+        <enumeration value="VATEX-EU-132-1L"/>
+        <enumeration value="vatex-eu-132-1m"/>
+        <enumeration value="VATEX-EU-132-1M"/>
+        <enumeration value="vatex-eu-132-1n"/>
+        <enumeration value="VATEX-EU-132-1N"/>
+        <enumeration value="vatex-eu-132-1o"/>
+        <enumeration value="VATEX-EU-132-1O"/>
+        <enumeration value="vatex-eu-132-1p"/>
+        <enumeration value="VATEX-EU-132-1P"/>
+        <enumeration value="vatex-eu-132-1q"/>
+        <enumeration value="VATEX-EU-132-1Q"/>
+        <enumeration value="vatex-eu-143"/>
+        <enumeration value="VATEX-EU-143"/>
+        <enumeration value="vatex-eu-143-1a"/>
+        <enumeration value="VATEX-EU-143-1A"/>
+        <enumeration value="vatex-eu-143-1b"/>
+        <enumeration value="VATEX-EU-143-1B"/>
+        <enumeration value="vatex-eu-143-1c"/>
+        <enumeration value="VATEX-EU-143-1C"/>
+        <enumeration value="vatex-eu-143-1d"/>
+        <enumeration value="VATEX-EU-143-1D"/>
+        <enumeration value="vatex-eu-143-1e"/>
+        <enumeration value="VATEX-EU-143-1E"/>
+        <enumeration value="vatex-eu-143-1f"/>
+        <enumeration value="VATEX-EU-143-1F"/>
+        <enumeration value="vatex-eu-143-1fa"/>
+        <enumeration value="VATEX-EU-143-1FA"/>
+        <enumeration value="vatex-eu-143-1g"/>
+        <enumeration value="VATEX-EU-143-1G"/>
+        <enumeration value="vatex-eu-143-1h"/>
+        <enumeration value="VATEX-EU-143-1H"/>
+        <enumeration value="vatex-eu-143-1i"/>
+        <enumeration value="VATEX-EU-143-1I"/>
+        <enumeration value="vatex-eu-143-1j"/>
+        <enumeration value="VATEX-EU-143-1J"/>
+        <enumeration value="vatex-eu-143-1k"/>
+        <enumeration value="VATEX-EU-143-1K"/>
+        <enumeration value="vatex-eu-143-1l"/>
+        <enumeration value="VATEX-EU-143-1L"/>
+        <enumeration value="vatex-eu-148"/>
+        <enumeration value="VATEX-EU-148"/>
+        <enumeration value="vatex-eu-148-a"/>
+        <enumeration value="VATEX-EU-148-A"/>
+        <enumeration value="vatex-eu-148-b"/>
+        <enumeration value="VATEX-EU-148-B"/>
+        <enumeration value="vatex-eu-148-c"/>
+        <enumeration value="VATEX-EU-148-C"/>
+        <enumeration value="vatex-eu-148-d"/>
+        <enumeration value="VATEX-EU-148-D"/>
+        <enumeration value="vatex-eu-148-e"/>
+        <enumeration value="VATEX-EU-148-E"/>
+        <enumeration value="vatex-eu-148-f"/>
+        <enumeration value="VATEX-EU-148-F"/>
+        <enumeration value="vatex-eu-148-g"/>
+        <enumeration value="VATEX-EU-148-G"/>
+        <enumeration value="vatex-eu-151"/>
+        <enumeration value="VATEX-EU-151"/>
+        <enumeration value="vatex-eu-151-1a"/>
+        <enumeration value="VATEX-EU-151-1A"/>
+        <enumeration value="vatex-eu-151-1aa"/>
+        <enumeration value="VATEX-EU-151-1AA"/>
+        <enumeration value="vatex-eu-151-1b"/>
+        <enumeration value="VATEX-EU-151-1B"/>
+        <enumeration value="vatex-eu-151-1c"/>
+        <enumeration value="VATEX-EU-151-1C"/>
+        <enumeration value="vatex-eu-151-1d"/>
+        <enumeration value="VATEX-EU-151-1D"/>
+        <enumeration value="vatex-eu-151-1e"/>
+        <enumeration value="VATEX-EU-151-1E"/>
+        <enumeration value="vatex-eu-309"/>
+        <enumeration value="VATEX-EU-309"/>
+        <enumeration value="vatex-eu-ae"/>
+        <enumeration value="VATEX-EU-AE"/>
+        <enumeration value="vatex-eu-d"/>
+        <enumeration value="VATEX-EU-D"/>
+        <enumeration value="vatex-eu-f"/>
+        <enumeration value="VATEX-EU-F"/>
+        <enumeration value="vatex-eu-g"/>
+        <enumeration value="VATEX-EU-G"/>
+        <enumeration value="vatex-eu-i"/>
+        <enumeration value="VATEX-EU-I"/>
+        <enumeration value="vatex-eu-ic"/>
+        <enumeration value="VATEX-EU-IC"/>
+        <enumeration value="vatex-eu-j"/>
+        <enumeration value="VATEX-EU-J"/>
+        <enumeration value="vatex-eu-o"/>
+        <enumeration value="VATEX-EU-O"/>
+    </cl>
+    <cl id="16">
+        <enumeration value="130"/>
+    </cl>
+    <cl id="17">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="18">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="19">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="20">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="21">
+        <enumeration value="VA"/>
+    </cl>
+    <cl id="22">
+        <enumeration value="VA"/>
+    </cl>
+    <cl id="23">
+        <enumeration value="50"/>
+        <enumeration value="130"/>
+        <enumeration value="916"/>
+    </cl>
+    <cl id="24">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="25">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="26">
+        <enumeration value="0002"/>
+        <enumeration value="0003"/>
+        <enumeration value="0004"/>
+        <enumeration value="0005"/>
+        <enumeration value="0006"/>
+        <enumeration value="0007"/>
+        <enumeration value="0008"/>
+        <enumeration value="0009"/>
+        <enumeration value="0010"/>
+        <enumeration value="0011"/>
+        <enumeration value="0012"/>
+        <enumeration value="0013"/>
+        <enumeration value="0014"/>
+        <enumeration value="0015"/>
+        <enumeration value="0016"/>
+        <enumeration value="0017"/>
+        <enumeration value="0018"/>
+        <enumeration value="0019"/>
+        <enumeration value="0020"/>
+        <enumeration value="0021"/>
+        <enumeration value="0022"/>
+        <enumeration value="0023"/>
+        <enumeration value="0024"/>
+        <enumeration value="0025"/>
+        <enumeration value="0026"/>
+        <enumeration value="0027"/>
+        <enumeration value="0028"/>
+        <enumeration value="0029"/>
+        <enumeration value="0030"/>
+        <enumeration value="0031"/>
+        <enumeration value="0032"/>
+        <enumeration value="0033"/>
+        <enumeration value="0034"/>
+        <enumeration value="0035"/>
+        <enumeration value="0036"/>
+        <enumeration value="0037"/>
+        <enumeration value="0038"/>
+        <enumeration value="0039"/>
+        <enumeration value="0040"/>
+        <enumeration value="0041"/>
+        <enumeration value="0042"/>
+        <enumeration value="0043"/>
+        <enumeration value="0044"/>
+        <enumeration value="0045"/>
+        <enumeration value="0046"/>
+        <enumeration value="0047"/>
+        <enumeration value="0048"/>
+        <enumeration value="0049"/>
+        <enumeration value="0050"/>
+        <enumeration value="0051"/>
+        <enumeration value="0052"/>
+        <enumeration value="0053"/>
+        <enumeration value="0054"/>
+        <enumeration value="0055"/>
+        <enumeration value="0056"/>
+        <enumeration value="0057"/>
+        <enumeration value="0058"/>
+        <enumeration value="0059"/>
+        <enumeration value="0060"/>
+        <enumeration value="0061"/>
+        <enumeration value="0062"/>
+        <enumeration value="0063"/>
+        <enumeration value="0064"/>
+        <enumeration value="0065"/>
+        <enumeration value="0066"/>
+        <enumeration value="0067"/>
+        <enumeration value="0068"/>
+        <enumeration value="0069"/>
+        <enumeration value="0070"/>
+        <enumeration value="0071"/>
+        <enumeration value="0072"/>
+        <enumeration value="0073"/>
+        <enumeration value="0074"/>
+        <enumeration value="0075"/>
+        <enumeration value="0076"/>
+        <enumeration value="0077"/>
+        <enumeration value="0078"/>
+        <enumeration value="0079"/>
+        <enumeration value="0080"/>
+        <enumeration value="0081"/>
+        <enumeration value="0082"/>
+        <enumeration value="0083"/>
+        <enumeration value="0084"/>
+        <enumeration value="0085"/>
+        <enumeration value="0086"/>
+        <enumeration value="0087"/>
+        <enumeration value="0088"/>
+        <enumeration value="0089"/>
+        <enumeration value="0090"/>
+        <enumeration value="0091"/>
+        <enumeration value="0093"/>
+        <enumeration value="0094"/>
+        <enumeration value="0095"/>
+        <enumeration value="0096"/>
+        <enumeration value="0097"/>
+        <enumeration value="0098"/>
+        <enumeration value="0099"/>
+        <enumeration value="0100"/>
+        <enumeration value="0101"/>
+        <enumeration value="0102"/>
+        <enumeration value="0104"/>
+        <enumeration value="0105"/>
+        <enumeration value="0106"/>
+        <enumeration value="0107"/>
+        <enumeration value="0108"/>
+        <enumeration value="0109"/>
+        <enumeration value="0110"/>
+        <enumeration value="0111"/>
+        <enumeration value="0112"/>
+        <enumeration value="0113"/>
+        <enumeration value="0114"/>
+        <enumeration value="0115"/>
+        <enumeration value="0116"/>
+        <enumeration value="0117"/>
+        <enumeration value="0118"/>
+        <enumeration value="0119"/>
+        <enumeration value="0120"/>
+        <enumeration value="0121"/>
+        <enumeration value="0122"/>
+        <enumeration value="0123"/>
+        <enumeration value="0124"/>
+        <enumeration value="0125"/>
+        <enumeration value="0126"/>
+        <enumeration value="0127"/>
+        <enumeration value="0128"/>
+        <enumeration value="0129"/>
+        <enumeration value="0130"/>
+        <enumeration value="0131"/>
+        <enumeration value="0132"/>
+        <enumeration value="0133"/>
+        <enumeration value="0134"/>
+        <enumeration value="0135"/>
+        <enumeration value="0136"/>
+        <enumeration value="0137"/>
+        <enumeration value="0138"/>
+        <enumeration value="0139"/>
+        <enumeration value="0140"/>
+        <enumeration value="0141"/>
+        <enumeration value="0142"/>
+        <enumeration value="0143"/>
+        <enumeration value="0144"/>
+        <enumeration value="0145"/>
+        <enumeration value="0146"/>
+        <enumeration value="0147"/>
+        <enumeration value="0148"/>
+        <enumeration value="0149"/>
+        <enumeration value="0150"/>
+        <enumeration value="0151"/>
+        <enumeration value="0152"/>
+        <enumeration value="0153"/>
+        <enumeration value="0154"/>
+        <enumeration value="0155"/>
+        <enumeration value="0156"/>
+        <enumeration value="0157"/>
+        <enumeration value="0158"/>
+        <enumeration value="0159"/>
+        <enumeration value="0160"/>
+        <enumeration value="0161"/>
+        <enumeration value="0162"/>
+        <enumeration value="0163"/>
+        <enumeration value="0164"/>
+        <enumeration value="0165"/>
+        <enumeration value="0166"/>
+        <enumeration value="0167"/>
+        <enumeration value="0168"/>
+        <enumeration value="0169"/>
+        <enumeration value="0170"/>
+        <enumeration value="0171"/>
+        <enumeration value="0172"/>
+        <enumeration value="0173"/>
+        <enumeration value="0174"/>
+        <enumeration value="0175"/>
+        <enumeration value="0176"/>
+        <enumeration value="0177"/>
+        <enumeration value="0178"/>
+        <enumeration value="0179"/>
+        <enumeration value="0180"/>
+        <enumeration value="0183"/>
+        <enumeration value="0184"/>
+        <enumeration value="0185"/>
+        <enumeration value="0186"/>
+        <enumeration value="0187"/>
+        <enumeration value="0188"/>
+        <enumeration value="0189"/>
+        <enumeration value="0190"/>
+        <enumeration value="0191"/>
+        <enumeration value="0192"/>
+        <enumeration value="0193"/>
+        <enumeration value="0194"/>
+        <enumeration value="0195"/>
+        <enumeration value="0196"/>
+        <enumeration value="0197"/>
+        <enumeration value="0198"/>
+        <enumeration value="0199"/>
+        <enumeration value="0200"/>
+        <enumeration value="0201"/>
+        <enumeration value="0202"/>
+        <enumeration value="0203"/>
+        <enumeration value="0204"/>
+    </cl>
+    <cl id="27">
+        <enumeration value="AE"/>
+        <enumeration value="E"/>
+        <enumeration value="G"/>
+        <enumeration value="K"/>
+        <enumeration value="L"/>
+        <enumeration value="M"/>
+        <enumeration value="O"/>
+        <enumeration value="S"/>
+        <enumeration value="Z"/>
+    </cl>
+    <cl id="28">
+        <enumeration value="vatex-eu-132"/>
+        <enumeration value="VATEX-EU-132"/>
+        <enumeration value="vatex-eu-132-1a"/>
+        <enumeration value="VATEX-EU-132-1A"/>
+        <enumeration value="vatex-eu-132-1b"/>
+        <enumeration value="VATEX-EU-132-1B"/>
+        <enumeration value="vatex-eu-132-1c"/>
+        <enumeration value="VATEX-EU-132-1C"/>
+        <enumeration value="vatex-eu-132-1d"/>
+        <enumeration value="VATEX-EU-132-1D"/>
+        <enumeration value="vatex-eu-132-1e"/>
+        <enumeration value="VATEX-EU-132-1E"/>
+        <enumeration value="vatex-eu-132-1f"/>
+        <enumeration value="VATEX-EU-132-1F"/>
+        <enumeration value="vatex-eu-132-1g"/>
+        <enumeration value="VATEX-EU-132-1G"/>
+        <enumeration value="vatex-eu-132-1h"/>
+        <enumeration value="VATEX-EU-132-1H"/>
+        <enumeration value="vatex-eu-132-1i"/>
+        <enumeration value="VATEX-EU-132-1I"/>
+        <enumeration value="vatex-eu-132-1j"/>
+        <enumeration value="VATEX-EU-132-1J"/>
+        <enumeration value="vatex-eu-132-1k"/>
+        <enumeration value="VATEX-EU-132-1K"/>
+        <enumeration value="vatex-eu-132-1l"/>
+        <enumeration value="VATEX-EU-132-1L"/>
+        <enumeration value="vatex-eu-132-1m"/>
+        <enumeration value="VATEX-EU-132-1M"/>
+        <enumeration value="vatex-eu-132-1n"/>
+        <enumeration value="VATEX-EU-132-1N"/>
+        <enumeration value="vatex-eu-132-1o"/>
+        <enumeration value="VATEX-EU-132-1O"/>
+        <enumeration value="vatex-eu-132-1p"/>
+        <enumeration value="VATEX-EU-132-1P"/>
+        <enumeration value="vatex-eu-132-1q"/>
+        <enumeration value="VATEX-EU-132-1Q"/>
+        <enumeration value="vatex-eu-143"/>
+        <enumeration value="VATEX-EU-143"/>
+        <enumeration value="vatex-eu-143-1a"/>
+        <enumeration value="VATEX-EU-143-1A"/>
+        <enumeration value="vatex-eu-143-1b"/>
+        <enumeration value="VATEX-EU-143-1B"/>
+        <enumeration value="vatex-eu-143-1c"/>
+        <enumeration value="VATEX-EU-143-1C"/>
+        <enumeration value="vatex-eu-143-1d"/>
+        <enumeration value="VATEX-EU-143-1D"/>
+        <enumeration value="vatex-eu-143-1e"/>
+        <enumeration value="VATEX-EU-143-1E"/>
+        <enumeration value="vatex-eu-143-1f"/>
+        <enumeration value="VATEX-EU-143-1F"/>
+        <enumeration value="vatex-eu-143-1fa"/>
+        <enumeration value="VATEX-EU-143-1FA"/>
+        <enumeration value="vatex-eu-143-1g"/>
+        <enumeration value="VATEX-EU-143-1G"/>
+        <enumeration value="vatex-eu-143-1h"/>
+        <enumeration value="VATEX-EU-143-1H"/>
+        <enumeration value="vatex-eu-143-1i"/>
+        <enumeration value="VATEX-EU-143-1I"/>
+        <enumeration value="vatex-eu-143-1j"/>
+        <enumeration value="VATEX-EU-143-1J"/>
+        <enumeration value="vatex-eu-143-1k"/>
+        <enumeration value="VATEX-EU-143-1K"/>
+        <enumeration value="vatex-eu-143-1l"/>
+        <enumeration value="VATEX-EU-143-1L"/>
+        <enumeration value="vatex-eu-148"/>
+        <enumeration value="VATEX-EU-148"/>
+        <enumeration value="vatex-eu-148-a"/>
+        <enumeration value="VATEX-EU-148-A"/>
+        <enumeration value="vatex-eu-148-b"/>
+        <enumeration value="VATEX-EU-148-B"/>
+        <enumeration value="vatex-eu-148-c"/>
+        <enumeration value="VATEX-EU-148-C"/>
+        <enumeration value="vatex-eu-148-d"/>
+        <enumeration value="VATEX-EU-148-D"/>
+        <enumeration value="vatex-eu-148-e"/>
+        <enumeration value="VATEX-EU-148-E"/>
+        <enumeration value="vatex-eu-148-f"/>
+        <enumeration value="VATEX-EU-148-F"/>
+        <enumeration value="vatex-eu-148-g"/>
+        <enumeration value="VATEX-EU-148-G"/>
+        <enumeration value="vatex-eu-151"/>
+        <enumeration value="VATEX-EU-151"/>
+        <enumeration value="vatex-eu-151-1a"/>
+        <enumeration value="VATEX-EU-151-1A"/>
+        <enumeration value="vatex-eu-151-1aa"/>
+        <enumeration value="VATEX-EU-151-1AA"/>
+        <enumeration value="vatex-eu-151-1b"/>
+        <enumeration value="VATEX-EU-151-1B"/>
+        <enumeration value="vatex-eu-151-1c"/>
+        <enumeration value="VATEX-EU-151-1C"/>
+        <enumeration value="vatex-eu-151-1d"/>
+        <enumeration value="VATEX-EU-151-1D"/>
+        <enumeration value="vatex-eu-151-1e"/>
+        <enumeration value="VATEX-EU-151-1E"/>
+        <enumeration value="vatex-eu-309"/>
+        <enumeration value="VATEX-EU-309"/>
+        <enumeration value="vatex-eu-ae"/>
+        <enumeration value="VATEX-EU-AE"/>
+        <enumeration value="vatex-eu-d"/>
+        <enumeration value="VATEX-EU-D"/>
+        <enumeration value="vatex-eu-f"/>
+        <enumeration value="VATEX-EU-F"/>
+        <enumeration value="vatex-eu-g"/>
+        <enumeration value="VATEX-EU-G"/>
+        <enumeration value="vatex-eu-i"/>
+        <enumeration value="VATEX-EU-I"/>
+        <enumeration value="vatex-eu-ic"/>
+        <enumeration value="VATEX-EU-IC"/>
+        <enumeration value="vatex-eu-j"/>
+        <enumeration value="VATEX-EU-J"/>
+        <enumeration value="vatex-eu-o"/>
+        <enumeration value="VATEX-EU-O"/>
+    </cl>
+    <cl id="29">
+        <enumeration value="102"/>
+    </cl>
+    <cl id="30">
+        <enumeration value="AE"/>
+        <enumeration value="E"/>
+        <enumeration value="G"/>
+        <enumeration value="K"/>
+        <enumeration value="L"/>
+        <enumeration value="M"/>
+        <enumeration value="O"/>
+        <enumeration value="S"/>
+        <enumeration value="Z"/>
+    </cl>
+    <cl id="31">
+        <enumeration value="AED"/>
+        <enumeration value="AFN"/>
+        <enumeration value="ALL"/>
+        <enumeration value="AMD"/>
+        <enumeration value="ANG"/>
+        <enumeration value="AOA"/>
+        <enumeration value="ARS"/>
+        <enumeration value="AUD"/>
+        <enumeration value="AWG"/>
+        <enumeration value="AZN"/>
+        <enumeration value="BAM"/>
+        <enumeration value="BBD"/>
+        <enumeration value="BDT"/>
+        <enumeration value="BGN"/>
+        <enumeration value="BHD"/>
+        <enumeration value="BIF"/>
+        <enumeration value="BMD"/>
+        <enumeration value="BND"/>
+        <enumeration value="BOB"/>
+        <enumeration value="BOV"/>
+        <enumeration value="BRL"/>
+        <enumeration value="BSD"/>
+        <enumeration value="BTN"/>
+        <enumeration value="BWP"/>
+        <enumeration value="BYN"/>
+        <enumeration value="BZD"/>
+        <enumeration value="CAD"/>
+        <enumeration value="CDF"/>
+        <enumeration value="CHE"/>
+        <enumeration value="CHF"/>
+        <enumeration value="CHW"/>
+        <enumeration value="CLF"/>
+        <enumeration value="CLP"/>
+        <enumeration value="CNY"/>
+        <enumeration value="COP"/>
+        <enumeration value="COU"/>
+        <enumeration value="CRC"/>
+        <enumeration value="CUC"/>
+        <enumeration value="CUP"/>
+        <enumeration value="CVE"/>
+        <enumeration value="CZK"/>
+        <enumeration value="DJF"/>
+        <enumeration value="DKK"/>
+        <enumeration value="DOP"/>
+        <enumeration value="DZD"/>
+        <enumeration value="EGP"/>
+        <enumeration value="ERN"/>
+        <enumeration value="ETB"/>
+        <enumeration value="EUR"/>
+        <enumeration value="FJD"/>
+        <enumeration value="FKP"/>
+        <enumeration value="GBP"/>
+        <enumeration value="GEL"/>
+        <enumeration value="GHS"/>
+        <enumeration value="GIP"/>
+        <enumeration value="GMD"/>
+        <enumeration value="GNF"/>
+        <enumeration value="GTQ"/>
+        <enumeration value="GYD"/>
+        <enumeration value="HKD"/>
+        <enumeration value="HNL"/>
+        <enumeration value="HRK"/>
+        <enumeration value="HTG"/>
+        <enumeration value="HUF"/>
+        <enumeration value="IDR"/>
+        <enumeration value="ILS"/>
+        <enumeration value="INR"/>
+        <enumeration value="IQD"/>
+        <enumeration value="IRR"/>
+        <enumeration value="ISK"/>
+        <enumeration value="JMD"/>
+        <enumeration value="JOD"/>
+        <enumeration value="JPY"/>
+        <enumeration value="KES"/>
+        <enumeration value="KGS"/>
+        <enumeration value="KHR"/>
+        <enumeration value="KMF"/>
+        <enumeration value="KPW"/>
+        <enumeration value="KRW"/>
+        <enumeration value="KWD"/>
+        <enumeration value="KYD"/>
+        <enumeration value="KZT"/>
+        <enumeration value="LAK"/>
+        <enumeration value="LBP"/>
+        <enumeration value="LKR"/>
+        <enumeration value="LRD"/>
+        <enumeration value="LSL"/>
+        <enumeration value="LYD"/>
+        <enumeration value="MAD"/>
+        <enumeration value="MDL"/>
+        <enumeration value="MGA"/>
+        <enumeration value="MKD"/>
+        <enumeration value="MMK"/>
+        <enumeration value="MNT"/>
+        <enumeration value="MOP"/>
+        <enumeration value="MRU"/>
+        <enumeration value="MUR"/>
+        <enumeration value="MVR"/>
+        <enumeration value="MWK"/>
+        <enumeration value="MXN"/>
+        <enumeration value="MXV"/>
+        <enumeration value="MYR"/>
+        <enumeration value="MZN"/>
+        <enumeration value="NAD"/>
+        <enumeration value="NGN"/>
+        <enumeration value="NIO"/>
+        <enumeration value="NOK"/>
+        <enumeration value="NPR"/>
+        <enumeration value="NZD"/>
+        <enumeration value="OMR"/>
+        <enumeration value="PAB"/>
+        <enumeration value="PEN"/>
+        <enumeration value="PGK"/>
+        <enumeration value="PHP"/>
+        <enumeration value="PKR"/>
+        <enumeration value="PLN"/>
+        <enumeration value="PYG"/>
+        <enumeration value="QAR"/>
+        <enumeration value="RON"/>
+        <enumeration value="RSD"/>
+        <enumeration value="RUB"/>
+        <enumeration value="RWF"/>
+        <enumeration value="SAR"/>
+        <enumeration value="SBD"/>
+        <enumeration value="SCR"/>
+        <enumeration value="SDG"/>
+        <enumeration value="SEK"/>
+        <enumeration value="SGD"/>
+        <enumeration value="SHP"/>
+        <enumeration value="SLL"/>
+        <enumeration value="SOS"/>
+        <enumeration value="SRD"/>
+        <enumeration value="SSP"/>
+        <enumeration value="STN"/>
+        <enumeration value="SVC"/>
+        <enumeration value="SYP"/>
+        <enumeration value="SZL"/>
+        <enumeration value="THB"/>
+        <enumeration value="TJS"/>
+        <enumeration value="TMT"/>
+        <enumeration value="TND"/>
+        <enumeration value="TOP"/>
+        <enumeration value="TRY"/>
+        <enumeration value="TTD"/>
+        <enumeration value="TWD"/>
+        <enumeration value="TZS"/>
+        <enumeration value="UAH"/>
+        <enumeration value="UGX"/>
+        <enumeration value="USD"/>
+        <enumeration value="USN"/>
+        <enumeration value="UYI"/>
+        <enumeration value="UYU"/>
+        <enumeration value="UYW"/>
+        <enumeration value="UZS"/>
+        <enumeration value="VES"/>
+        <enumeration value="VND"/>
+        <enumeration value="VUV"/>
+        <enumeration value="WST"/>
+        <enumeration value="XAF"/>
+        <enumeration value="XAG"/>
+        <enumeration value="XAU"/>
+        <enumeration value="XBA"/>
+        <enumeration value="XBB"/>
+        <enumeration value="XBC"/>
+        <enumeration value="XBD"/>
+        <enumeration value="XCD"/>
+        <enumeration value="XDR"/>
+        <enumeration value="XOF"/>
+        <enumeration value="XPD"/>
+        <enumeration value="XPF"/>
+        <enumeration value="XPT"/>
+        <enumeration value="XSU"/>
+        <enumeration value="XTS"/>
+        <enumeration value="XUA"/>
+        <enumeration value="XXX"/>
+        <enumeration value="YER"/>
+        <enumeration value="ZAR"/>
+        <enumeration value="ZMW"/>
+        <enumeration value="ZWL"/>
+    </cl>
+    <cl id="32">
+        <enumeration value="AE"/>
+        <enumeration value="E"/>
+        <enumeration value="G"/>
+        <enumeration value="K"/>
+        <enumeration value="L"/>
+        <enumeration value="M"/>
+        <enumeration value="O"/>
+        <enumeration value="S"/>
+        <enumeration value="Z"/>
+    </cl>
+</codedb>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM.sch
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM.sch	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM.sch	(revision 8435)
@@ -0,0 +1,2586 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron" schemaVersion="iso">
+  <title>Schema for FACTUR-X; 1.0; ACCOUNTING INFORMATION, No XML Invoice, (MINIMUM)</title>
+  <ns uri="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" prefix="rsm"/>
+  <ns uri="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" prefix="qdt"/>
+  <ns uri="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" prefix="ram"/>
+  <ns uri="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" prefix="udt"/>
+  <pattern>
+    <rule context="//ram:AdditionalReferencedDocument">
+      <assert test="(ram:IssuerAssignedID!=&apos;&apos;)">
+	Each Additional supporting document (BG-24) shall contain a Supporting document reference (BT-122).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+      <assert test="(ram:BasisAmount)">
+	Each VAT breakdown (BG-23) shall have a VAT category taxable amount (BT-116).</assert>
+      <assert test="(ram:CalculatedAmount)">
+	Each VAT breakdown (BG-23) shall have a VAT category tax amount (BT-117).</assert>
+      <assert test="(ram:CategoryCode)">
+	Each VAT breakdown (BG-23) shall be defined through a VAT category code (BT-118).</assert>
+      <assert test="(ram:RateApplicablePercent) or (ram:CategoryCode = &apos;O&apos;)">
+	Each VAT breakdown (BG-23) shall have a VAT category rate (BT-119), except if the Invoice is not subject to VAT.</assert>
+      <assert test="((ram:TaxPointDate) and not (ram:DueDateTypeCode)) or (not (ram:TaxPointDate) and (ram:DueDateTypeCode)) or (not (ram:TaxPointDate) and not (ram:DueDateTypeCode))">
+	Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive.</assert>
+      <assert test="ram:CalculatedAmount = round(ram:BasisAmount * ram:RateApplicablePercent) div 100 +0 or not (ram:RateApplicablePercent)">
+	VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.</assert>
+      <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2.</assert>
+      <assert test="string-length(substring-after(ram:CalculatedAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;Z&apos;]">
+      <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;Z&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;Z&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;Z&apos;]/ram:ActualAmount)*10*10)div 100)">
+	In a VAT breakdown (BG-23) where VAT category code (BT-118) is "Zero rated" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amount (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âZero rated".</assert>
+      <assert test="../ram:CalculatedAmount = 0">
+	The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Zero rated" shall equal 0 (zero).</assert>
+      <assert test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)">
+	A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Zero rated" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.=&apos;S&apos;]">
+      <assert test="../ram:CalculatedAmount = round(../ram:BasisAmount * ../ram:RateApplicablePercent) div 100 +0">
+	The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Standard rated" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+      <assert test="not(../ram:ExemptionReason) and not (../ram:ExemptionReasonCode)">
+	A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Standard rate" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod">
+      <assert test="(ram:EndDateTime/udt:DateTimeString[@format = &apos;102&apos;]) &gt;= (ram:StartDateTime/udt:DateTimeString[@format = &apos;102&apos;]) or not (ram:EndDateTime) or not (ram:StartDateTime)">
+	If both Invoicing period start date (BT-73) and Invoicing period end date (BT-74) are given then the Invoicing period end date (BT-74) shall be later or equal to the Invoicing period start date (BT-73).</assert>
+      <assert test="(ram:StartDateTime) or (ram:EndDateTime)">
+	If Invoicing period (BG-14) is used, the Invoicing period start date (BT-73) or the Invoicing period end date (BT-74) shall be filled, or both.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]">
+      <assert test="(ram:ActualAmount)">
+	Each Document level allowance (BG-20) shall have a Document level allowance amount (BT-92).</assert>
+      <assert test="(ram:CategoryTradeTax/ram:CategoryCode)">
+	Each Document level allowance (BG-20) shall have a Document level allowance VAT category code (BT-95).</assert>
+      <assert test="(ram:Reason) or (ram:ReasonCode)">
+	Each Document level allowance (BG-20) shall have a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98).</assert>
+      <assert test="true()">
+	Document level allowance reason code (BT-98) and Document level allowance reason (BT-97) shall indicate the same type of allowance.</assert>
+      <assert test="(ram:Reason) or (ram:ReasonCode)">
+	Each Document level allowance (BG-20) shall contain a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98), or both.</assert>
+      <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2.</assert>
+      <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]">
+      <assert test="(ram:ActualAmount)">
+	Each Document level charge (BG-21) shall have a Document level charge amount (BT-99).</assert>
+      <assert test="(ram:CategoryTradeTax/ram:CategoryCode)">
+	Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102).</assert>
+      <assert test="(ram:Reason) or (ram:ReasonCode)">
+	Each Document level charge (BG-21) shall have a Document level charge reason (BT-104) or a Document level charge reason code (BT-105).</assert>
+      <assert test="true()">
+	Document level charge reason code (BT-105) and Document level charge reason (BT-104) shall indicate the same type of charge.</assert>
+      <assert test="(ram:Reason) or (ram:ReasonCode)">
+	Each Document level charge (BG-21) shall contain a Document level charge reason (BT-104) or a Document level charge reason code (BT-105), or both.</assert>
+      <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Document level charge amount (BT-92) is 2.</assert>
+      <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Document level charge base amount (BT-93) is 2.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:ApplicableProductCharacteristic">
+      <assert test="(ram:Description) and (ram:Value)">
+	Each Item attribute (BG-32) shall contain an Item attribute name (BT-160) and an Item attribute value (BT-161).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:ApplicableTradeSettlementFinancialCard">
+      <assert test="string-length(ram:ID)&lt;=6 and string-length(ram:ID)&gt;=4">
+	The last 4 to 6 digits of the Payment card primary account number (BT-87) shall be present if Payment card information (BG-18) is provided in the Invoice.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:IncludedSupplyChainTradeLineItem">
+      <assert test="(ram:AssociatedDocumentLineDocument/ram:LineID!=&apos;&apos;)">
+	Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126).</assert>
+      <assert test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity)">
+	Each Invoice line (BG-25) shall have an Invoiced quantity (BT-129).</assert>
+      <assert test="(ram:SpecifiedLineTradeDelivery/ram:BilledQuantity/@unitCode)">
+	An Invoice line (BG-25) shall have an Invoiced quantity unit of measure code (BT-130).</assert>
+      <assert test="(ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)">
+	Each Invoice line (BG-25) shall have an Invoice line net amount (BT-131).</assert>
+      <assert test="(ram:SpecifiedTradeProduct/ram:Name!=&apos;&apos;)">
+	Each Invoice line (BG-25) shall contain the Item name (BT-153).</assert>
+      <assert test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount)">
+	Each Invoice line (BG-25) shall contain the Item net price (BT-146).</assert>
+      <assert test="(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount) &gt;= 0">
+	The Item net price (BT-146) shall NOT be negative.</assert>
+      <assert test="(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount &gt;= 0) or not(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount)">
+	The Item gross price (BT-148) shall NOT be negative.</assert>
+      <assert test="ram:SpecifiedTradeProduct/ram:GlobalID/@schemeID!=&apos;&apos; or not (ram:SpecifiedTradeProduct/ram:GlobalID)">
+	The Item standard identifier (BT-157) shall have a Scheme identifier</assert>
+      <assert test="(ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode/@listID!=&apos;&apos;) or not (ram:SpecifiedTradeProduct/ram:DesignatedProductClassification)">
+	The Item classification identifier (BT-158) shall have a Scheme identifier</assert>
+      <assert test="(ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode)">
+	Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151).</assert>
+      <assert test="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+	An Invoice shall at least have one VAT breakdown group (BG-23).</assert>
+      <assert test="string-length(substring-after(ram:SpecifiedTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:PayeeTradeParty">
+      <assert test="(ram:Name) and (not(ram:Name = ../ram:SellerTradeParty/ram:Name) and not(ram:ID = ../ram:SellerTradeParty/ram:ID) and not(ram:SpecifiedLegalOrganization/ram:ID = ../ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID))">
+	The Payee name (BT-59) shall be provided in the Invoice, if the Payee (BG-10) is different from the Seller (BG-4).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SellerTaxRepresentativeTradeParty">
+      <assert test="(ram:Name)">
+	The Seller tax representative name (BT-62) shall be provided in the Invoice, if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+      <assert test="(ram:PostalTradeAddress)">
+	The Seller tax representative postal address (BG-12) shall be provided in the Invoice, if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+      <assert test="(ram:PostalTradeAddress/ram:CountryID)">
+	The Seller tax representative postal address (BG-12) shall contain a Tax representative country code (BT-69), if the Seller (BG-4) has a Seller tax representative party (BG-11).</assert>
+      <assert test="(ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;]!=&apos;&apos;)">
+	Each Seller tax representative party (BG-11) shall have a Seller tax representative VAT identifier (BT-63).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SellerTradeParty">
+      <assert test="(ram:ID) or (ram:GlobalID) or (ram:SpecifiedLegalOrganization/ram:ID) or (ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;])">
+	In order for the buyer to automatically identify a supplier, the Seller identifier (BT-29), the Seller legal registration identifier (BT-30) and/or the Seller VAT identifier (BT-31) shall be present.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod">
+      <assert test="(ram:EndDateTime/udt:DateTimeString[@format = &apos;102&apos;]) &gt;= (ram:StartDateTime/udt:DateTimeString[@format = &apos;102&apos;]) or not (ram:EndDateTime) or not (ram:StartDateTime)">
+	If both Invoice line period start date (BT-134) and Invoice line period end date (BT-135) are given then the Invoice line period end date (BT-135) shall be later or equal to the Invoice line period start date (BT-134).</assert>
+      <assert test="(ram:StartDateTime) or (ram:EndDateTime)">
+	If Invoice line period (BG-26) is used, the Invoice line period start date (BT-134) or the Invoice line period end date (BT-135) shall be filled, or both.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = &apos;false&apos;]">
+      <assert test="(ram:ActualAmount)">
+	Each Invoice line allowance (BG-27) shall have an Invoice line allowance amount (BT-136).</assert>
+      <assert test="(ram:Reason) or (ram:ReasonCode)">
+	Each Invoice line allowance (BG-27) shall have an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140).</assert>
+      <assert test="true()">
+	Invoice line allowance reason code (BT-140) and Invoice line allowance reason (BT-139) shall indicate the same type of allowance reason.</assert>
+      <assert test="(ram:Reason) or (ram:ReasonCode)">
+	Each Invoice line allowance (BG-27) shall contain an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140), or both.</assert>
+      <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2.</assert>
+      <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator = &apos;true&apos;]">
+      <assert test="(ram:ActualAmount)">
+	Each Invoice line charge (BG-28) shall have an Invoice line charge amount (BT-141).</assert>
+      <assert test="(ram:Reason) or (ram:ReasonCode)">
+	Each Invoice line charge (BG-28) shall have an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145).</assert>
+      <assert test="true()">
+	Invoice line charge reason code (BT-145) and Invoice line charge reason (BT144) shall indicate the same type of charge reason.</assert>
+      <assert test="(ram:Reason) or (ram:ReasonCode)">
+	Each Invoice line charge (BG-28) shall contain an Invoice line charge reason (BT-144) or an Invoice line charge reason code (BT-145), or both.</assert>
+      <assert test="string-length(substring-after(ram:ActualAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2.</assert>
+      <assert test="string-length(substring-after(ram:BasisAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTaxRegistration/ram:ID[@schemeID=&apos;VA&apos;]">
+      <assert test="contains(&apos; EL AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BL BJ BM BN BO BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW &apos;, concat(&apos; &apos;, substring(.,1,2), &apos; &apos;))">
+	The Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) shall have a prefix in accordance with ISO code ISO 3166-1 alpha-2 by which the country of issue may be identified. Nevertheless, Greece may use the prefix âELâ.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+      <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+	An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Reverse charge" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;E&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Exempt from VAT", the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;G&apos;]">
+      <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+	An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Export outside the EU" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;K&apos;]">
+      <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IGIC" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;L&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent &gt; 0">
+	In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IGIC" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;M&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent &gt; 0">
+	In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "IPSI" the Document level allowance VAT rate (BT-96) shall be 0 (zero) or greater than zero.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;O&apos;]">
+      <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+	An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-48).</assert>
+      <assert test="not(ram:RateApplicablePercent)">
+	A Document level allowance (BG-20) where VAT category code (BT-95) is "Not subject to VAT" shall not contain a Document level allowance VAT rate (BT-96).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;S&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent &gt; 0">
+	In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Standard rated" the Document level allowance VAT rate (BT-96) shall be greater than zero.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In a Document level allowance (BG-20) where the Document level allowance VAT category code (BT-95) is "Zero rated" the Document level allowance VAT rate (BT-96) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+      <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+	An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Reverse charge" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;E&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Exempt from VAT", the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;G&apos;]">
+      <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+	An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Export outside the EU" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;K&apos;]">
+      <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Intra-community supply" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;L&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent &gt; 0">
+	In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IGIC" the Document level charge VAT rate (BT-103) shall be 0 (zero) or greater than zero.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;M&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent &gt; 0">
+	In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "IPSI" the Document level charge VAT rate (BT-103) shall be 0 (zero) or greater than zero.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;O&apos;]">
+      <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+	An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-48).</assert>
+      <assert test="not(ram:RateApplicablePercent)">
+	A Document level charge (BG-21) where the VAT category code (BT-102) is "Not subject to VAT" shall not contain a Document level charge VAT rate (BT-103).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;S&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent &gt; 0">
+	In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Standard rated" the Document level charge VAT rate (BT-103) shall be greater than zero.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:CategoryTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains a Document level charge where the Document level charge VAT category code (BT-102) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Zero rated" the Document level charge VAT rate (BT-103) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeSettlementHeaderMonetarySummation">
+      <assert test="(ram:TaxBasisTotalAmount)">
+	An Invoice shall have the Invoice total amount without VAT (BT-109).</assert>
+      <assert test="(ram:GrandTotalAmount)">
+	An Invoice shall have the Invoice total amount with VAT (BT-112).</assert>
+      <assert test="(ram:DuePayableAmount)">
+	An Invoice shall have the Amount due for payment (BT-115).</assert>
+      <assert test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;])and not (ram:AllowanceTotalAmount)) or ram:AllowanceTotalAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos;]/ram:ActualAmount)* 10 * 10 ) div 100)">
+	Sum of allowances on document level (BT-107) = S Document level allowance amount (BT-92).</assert>
+      <assert test="(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;])and not (ram:ChargeTotalAmount)) or ram:ChargeTotalAmount = &#13;&#10;((round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos;]/ram:ActualAmount)* 10 * 10 ) div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount)* 10 * 10 ) div 100))">
+	Sum of charges on document level (BT-108) = S Document level charge amount (BT-99).</assert>
+      <assert test="(ram:GrandTotalAmount = round(ram:TaxBasisTotalAmount*100 + ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]*100 +0) div 100) or ((ram:GrandTotalAmount = ram:TaxBasisTotalAmount) and not (ram:TaxTotalAmount[@currencyID=/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode]))">
+	Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).</assert>
+      <assert test="string-length(substring-after(ram:LineTotalAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2.</assert>
+      <assert test="string-length(substring-after(ram:AllowanceTotalAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2.</assert>
+      <assert test="string-length(substring-after(ram:ChargeTotalAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2.</assert>
+      <assert test="string-length(substring-after(ram:TaxBasisTotalAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2.</assert>
+      <assert test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode and . = round(. * 100) div 100) or not (@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode)]">
+	The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2.</assert>
+      <assert test="string-length(substring-after(ram:GrandTotalAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2.</assert>
+      <assert test="not(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and . = round(. * 100) div 100) or not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode)]">
+	The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2.</assert>
+      <assert test="string-length(substring-after(ram:TotalPrepaidAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Paid amount (BT-113) is 2.</assert>
+      <assert test="string-length(substring-after(ram:RoundingAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Rounding amount (BT-114) is 2.</assert>
+      <assert test="string-length(substring-after(ram:DuePayableAmount,&apos;.&apos;))&lt;=2">
+	The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2.</assert>
+      <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) or (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and (ram:TaxTotalAmount/@currencyID = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode) and not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode = /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode))">
+	If the VAT accounting currency code (BT-6) is present, then the Invoice total VAT amount in accounting currency (BT-111) shall be provided.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeSettlementPaymentMeans">
+      <assert test="(ram:TypeCode)">
+	A Payment instruction (BG-16) shall specify the Payment means type code (BT-81).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//ram:SpecifiedTradeSettlementPaymentMeans[ram:TypeCode=&apos;30&apos; or ram:TypeCode=&apos;58&apos;]/ram:PayerPartyDebtorFinancialAccount">
+      <assert test="(ram:IBANID) or (ram:ProprietaryID)">
+	A Payment account identifier (BT-84) shall be present if Credit transfer (BG-16) information is provided in the Invoice.</assert>
+      <assert test="(ram:IBANID) or (ram:ProprietaryID)">
+	If the Payment means type code (BT-81) means SEPA credit transfer, Local credit transfer or Non-SEPA international credit transfer, the Payment account identifier (BT-84) shall be present.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID">
+      <assert test="(((//*[local-name()=&quot;CrossIndustryInvoice&quot;]/*[local-name()=&quot;ExchangedDocument&quot;]/*[local-name()=&quot;TypeCode&quot;]/text()=&quot;751&quot;) and (//*[local-name()=&quot;CrossIndustryInvoice&quot;]/*[local-name()=&quot;SupplyChainTradeTransaction&quot;]/*[local-name()=&quot;ApplicableHeaderTradeAgreement&quot;]/*[local-name()=&quot;BuyerTradeParty&quot;]/*[local-name()=&quot;PostalTradeAddress&quot;]/*[local-name()=&quot;CountryID&quot;]/text()=&quot;DE&quot;)) or ((//*[local-name()=&quot;CrossIndustryInvoice&quot;]/*[local-name()=&quot;ExchangedDocument&quot;]/*[local-name()=&quot;TypeCode&quot;]/text()!=&quot;&quot;) and (//*[local-name()=&quot;CrossIndustryInvoice&quot;]/*[local-name()=&quot;SupplyChainTradeTransaction&quot;]/*[local-name()=&quot;ApplicableHeaderTradeAgreement&quot;]/*[local-name()=&quot;BuyerTradeParty&quot;]/*[local-name()=&quot;PostalTradeAddress&quot;]/*[local-name()=&quot;CountryID&quot;]/text()!=&quot;DE&quot;)))">
+	In Deutschland sind die Profile MINIMUM und BASIC WL nur als Buchungshilfe (TypeCode: 751) zugelassen.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;AE&apos;]">
+      <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;AE&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;AE&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;AE&apos;]/ram:ActualAmount)*10*10)div 100)">
+	In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Reverse charge" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âReverse charge".</assert>
+      <assert test="../ram:CalculatedAmount = 0">
+	The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âReverse chargeâ shall be 0 (zero).</assert>
+      <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+	A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Reverse charge" shall have a VAT exemption reason code (BT-121), meaning "Reverse charge" or the VAT exemption reason text (BT-120) "Reverse charge" (or the equivalent standard text in another language).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;E&apos;]">
+      <assert test="../ram:CalculatedAmount = 0">
+	The VAT category tax amount (BT-117) In a VAT breakdown (BG-23) where the VAT category code (BT-118) equals "Exempt from VAT" shall equal 0 (zero).</assert>
+      <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+	A VAT Breakdown (BG-23) with VAT Category code (BT-118) "Exempt from VAT" shall have a VAT exemption reason code (BT-121) or a VAT exemption reason text (BT-120).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = &apos;G&apos;]">
+      <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;G&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;G&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;G&apos;]/ram:ActualAmount)*10*10)div 100)">
+	In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Export outside the EU" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âExport outside the EU".</assert>
+      <assert test="../ram:CalculatedAmount = 0">
+	The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âExport outside the EUâ shall be 0 (zero).</assert>
+      <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+	A VAT Breakdown (BG-23) with the VAT Category code (BT-118) "Export outside the EU" shall have a VAT exemption reason code (BT-121), meaning "Export outside the EU" or the VAT exemption reason text (BT-120) "Export outside the EU" (or the equivalent standard text in another language).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[.= &apos;K&apos;]">
+      <assert test="../ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;K&apos;]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;K&apos;]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;K&apos;]/ram:ActualAmount)*10*10)div 100)">
+	In a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âIntra-community supply".</assert>
+      <assert test="../ram:CalculatedAmount = 0">
+	The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IGIC" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+      <assert test="(../ram:ExemptionReason) or (../ram:ExemptionReasonCode)">
+	A VAT Breakdown (BG-23) with the VAT Category code (BT-118) "Intra-community supply" shall have a VAT exemption reason code (BT-121), meaning "Intra-community supply" or the VAT exemption reason text (BT-120) "Intra-community supply" (or the equivalent standard text in another language).</assert>
+      <assert test="(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString) or (../../ram:BillingSpecifiedPeriod/ram:StartDateTime) or (../../ram:BillingSpecifiedPeriod/ram:EndDateTime)">
+	In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the Actual delivery date (BT-72) or the Invoicing period (BG-14) shall not be blank.</assert>
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID">
+	In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Intra-community supply" the Deliver to country code (BT-80) shall not be blank.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;L&apos;]">
+      <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;L&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;L&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;L&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)">
+	For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "IGIC", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is âIGICâ and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).</assert>
+      <assert test="true()">
+	The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IGIC" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+      <assert test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)">
+	A VAT Breakdown (BG-23) with VAT Category code (BT-118) "IGIC" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;M&apos;]">
+      <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;M&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;M&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;M&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10) div 100)">
+	For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "IPSI", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is âIPSIâ and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).</assert>
+      <assert test="true()">
+	The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "IPSI" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).</assert>
+      <assert test="not(ram:ExemptionReason) and not (ram:ExemptionReasonCode)">
+	A VAT Breakdown (BG-23) with VAT Category code (BT-118) "IPSI" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;O&apos;]">
+      <assert test="ram:BasisAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = &apos;O&apos; and ram:RateApplicablePercent=ram:ApplicableTradeTax/ram:RateApplicablePercent]/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)*10*10)div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;true&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;O&apos; and ram:RateApplicablePercent=ram:CategoryTradeTax/ram:RateApplicablePercent]/ram:ActualAmount)*10*10)div 100) - (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=&apos;false&apos; and ram:CategoryTradeTax/ram:CategoryCode=&apos;O&apos;]/ram:ActualAmount)*10*10)div 100)">
+	In a VAT breakdown (BG-23) where the VAT category code (BT-118) is " Not subject to VAT" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are âNot subject to VAT".</assert>
+      <assert test="ram:CalculatedAmount = 0">
+	The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is âNot subject to VATâ shall be 0 (zero).</assert>
+      <assert test="(ram:ExemptionReason) or (ram:ExemptionReasonCode)">
+	A VAT Breakdown (BG-23) with VAT Category code (BT-118) " Not subject to VAT" shall have a VAT exemption reason code (BT-121), meaning " Not subject to VAT" or a VAT exemption reason text (BT-120) " Not subject to VAT" (or the equivalent standard text in another language).</assert>
+      <assert test="not(//ram:ApplicableTradeTax[ram:CategoryCode != &apos;O&apos;])">
+	An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain other VAT breakdown groups (BG-23).</assert>
+      <assert test="not(//ram:ApplicableTradeTax[ram:CategoryCode != &apos;O&apos;])">
+	An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is not "Not subject to VAT".</assert>
+      <assert test="not(//ram:CategoryTradeTax[ram:CategoryCode != &apos;O&apos;])">
+	An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain Document level allowances (BG-20) where Document level allowance VAT category code (BT-95) is not "Not subject to VAT".</assert>
+      <assert test="not(//ram:CategoryTradeTax[ram:CategoryCode != &apos;O&apos;])">
+	An Invoice that contains a VAT breakdown group (BG-23) with a VAT category code (BT-118) "Not subject to VAT" shall not contain Document level charges (BG-21) where Document level charge VAT category code (BT-102) is not "Not subject to VAT".</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;AE&apos;]">
+      <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and (//ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID)">
+	An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âReverse chargeâ shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Reverse charge" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;E&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âExempt from VATâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Exempt from VAT", the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;G&apos;]">
+      <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+	An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âExport outside the EUâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Export outside the EU" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;K&apos;]">
+      <assert test="(//ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;] or //ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and //ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIntra-community supplyâ shall contain the Seller VAT Identifier (BT-31) or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Intracommunity supply" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;L&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIGICâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent &gt; 0">
+	In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IGIC" the invoiced item VAT rate (BT-152) shall be 0 (zero) or greater than zero.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;M&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âIPSIâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent &gt; 0">
+	In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "IPSI" the Invoiced item VAT rate (BT-152) shall be 0 (zero) or greater than zero.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;O&apos;]">
+      <assert test="not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]) and not (/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;])">
+	An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âNot subject to VATâ shall not contain the Seller VAT identifier (BT-31), the Seller tax representative VAT identifier (BT-63) or the Buyer VAT identifier (BT-46).</assert>
+      <assert test="not(ram:RateApplicablePercent)">
+	An Invoice line (BG-25) where the VAT category code (BT-151) is "Not subject to VAT" shall not contain an Invoiced item VAT rate (BT-152).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;S&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is âStandard ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent &gt; 0">
+	In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Standard rated" the Invoiced item VAT rate (BT-152) shall be greater than zero.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode = &apos;Z&apos;]">
+      <assert test="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos; or @schemeID = &apos;FC&apos;] or /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID = &apos;VA&apos;]">
+	An Invoice that contains an Invoice line where the Invoiced item VAT category code (BT-151) is âZero ratedâ shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63).</assert>
+      <assert test="ram:RateApplicablePercent = 0">
+	In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Zero rated" the Invoiced item VAT rate (BT-152) shall be 0 (zero).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice">
+      <assert test="(rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID != &apos;&apos;)">
+	An Invoice shall have a Specification identifier (BT-24).</assert>
+      <assert test="(rsm:ExchangedDocument/ram:ID !=&apos;&apos;)">
+	An Invoice shall have an Invoice number (BT-1).</assert>
+      <assert test="(rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString[@format=&apos;102&apos;]!=&apos;&apos;)">
+	An Invoice shall have an Invoice issue date (BT-2).</assert>
+      <assert test="(rsm:ExchangedDocument/ram:TypeCode!=&apos;&apos;)">
+	An Invoice shall have an Invoice type code (BT-3).</assert>
+      <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode!=&apos;&apos;)">
+	An Invoice shall have an Invoice currency code (BT-5).</assert>
+      <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name!=&apos;&apos;)">
+	An Invoice shall contain the Seller name (BT-27).</assert>
+      <assert test="(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name!=&apos;&apos;)">
+	An Invoice shall contain the Buyer name (BT-44).</assert>
+      <assert test="//ram:SellerTradeParty/ram:PostalTradeAddress">
+	An Invoice shall contain the Seller postal address (BG-5).</assert>
+      <assert test="//ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;">
+	The Seller postal address (BG-5) shall contain a Seller country code (BT-40).</assert>
+      <assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!=&apos;&apos; or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication)">
+	The Seller electronic address (BT-34) shall have a Scheme identifier.</assert>
+      <assert test="rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID/@schemeID!=&apos;&apos; or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication)">
+	The Buyer electronic address (BT-49) shall have a Scheme identifier.</assert>
+      <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) and ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;S&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;S&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;S&apos;]))">
+	An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âStandard ratedâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "Standard rated".</assert>
+      <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;Z&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;Z&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;Z&apos;]))">
+	An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âZero ratedâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Zero rated".</assert>
+      <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;E&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;E&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;E&apos;]))">
+	An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âExempt from VATâ shall contain exactly one VAT breakdown (BG-23) with the VAT category code (BT-118) equal to "Exempt from VAT".</assert>
+      <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;AE&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;AE&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;AE&apos;]))">
+	An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âReverse chargeâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "VAT reverse charge".</assert>
+      <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;K&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;K&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;K&apos;]))">
+	An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIntra-community supplyâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Intra-community supply".</assert>
+      <assert test="(count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=0 and count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;G&apos;])=0) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;G&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;G&apos;]))">
+	An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âExport outside the EUâ shall contain in the VAT breakdown (BG-23) exactly one VAT category code (BT-118) equal with "Export outside the EU".</assert>
+      <assert test="not(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;]) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;])=1 and (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;O&apos;] or //ram:CategoryTradeTax[ram:CategoryCode=&apos;O&apos;]))">
+	An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âNot subject to VATâ shall contain exactly one VAT breakdown group (BG-23) with the VAT category code (BT-118) equal to "Not subject to VAT".</assert>
+      <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) and ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;L&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;L&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;L&apos;]))">
+	An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIGICâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "IGIC".</assert>
+      <assert test="((count(//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) &gt;=2 or not (//ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) and ((count(//ram:CategoryTradeTax[ram:CategoryCode=&apos;M&apos;]) + count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode=&apos;M&apos;])) &gt;=2 or not (//ram:CategoryTradeTax[ram:CategoryCode=&apos;M&apos;]))">
+	An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is âIPSIâ shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "IPSI".</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument">
+      <assert test="count(ram:TypeCode)=1">
+	Element 'ram:TypeCode' must occur exactly 1 times.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CategoryCode">
+      <report test="true()">
+	Element 'ram:CategoryCode' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ControlRequirementIndicator">
+      <report test="true()">
+	Element 'ram:ControlRequirementIndicator' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CopyIndicator">
+      <report test="true()">
+	Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:EffectiveSpecifiedPeriod">
+      <report test="true()">
+	Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:GlobalID">
+      <report test="true()">
+	Element 'ram:GlobalID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeAgencyID]">
+      <report test="true()">
+	Attribute @schemeAgencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeAgencyName]">
+      <report test="true()">
+	Attribute @schemeAgencyName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeDataURI]">
+      <report test="true()">
+	Attribute @schemeDataURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeID]">
+      <report test="true()">
+	Attribute @schemeID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeName]">
+      <report test="true()">
+	Attribute @schemeName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeURI]">
+      <report test="true()">
+	Attribute @schemeURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID[@schemeVersionID]">
+      <report test="true()">
+	Attribute @schemeVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote">
+      <report test="true()">
+	Element 'ram:IncludedNote' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTime">
+      <report test="true()">
+	Element 'udt:DateTime' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString[@format]">
+      <let name="codeValue2" value="@format"/>
+      <assert test="document(&apos;FACTUR-X_MINIMUM_codedb.xml&apos;)//cl[@id=2]/enumeration[@value=$codeValue2]">
+	Value of '@format' is not allowed.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssuerTradeParty">
+      <report test="true()">
+	Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:LanguageID">
+      <report test="true()">
+	Element 'ram:LanguageID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:Name">
+      <report test="true()">
+	Element 'ram:Name' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:PreviousRevisionID">
+      <report test="true()">
+	Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:Purpose">
+      <report test="true()">
+	Element 'ram:Purpose' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:PurposeCode">
+      <report test="true()">
+	Element 'ram:PurposeCode' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:RevisionDateTime">
+      <report test="true()">
+	Element 'ram:RevisionDateTime' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:RevisionID">
+      <report test="true()">
+	Element 'ram:RevisionID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode">
+      <let name="codeValue1" value="."/>
+      <assert test="document(&apos;FACTUR-X_MINIMUM_codedb.xml&apos;)//cl[@id=1]/enumeration[@value=$codeValue1]">
+	Value of 'ram:TypeCode' is not allowed.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listAgencyID]">
+      <report test="true()">
+	Attribute @listAgencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listID]">
+      <report test="true()">
+	Attribute @listID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listURI]">
+      <report test="true()">
+	Attribute @listURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@listVersionID]">
+      <report test="true()">
+	Attribute @listVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode[@name]">
+      <report test="true()">
+	Attribute @name' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:VersionID">
+      <report test="true()">
+	Element 'ram:VersionID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext">
+      <assert test="count(ram:BusinessProcessSpecifiedDocumentContextParameter)&lt;=1">
+	Element 'ram:BusinessProcessSpecifiedDocumentContextParameter' may occur at maximum 1 times.</assert>
+      <assert test="count(ram:GuidelineSpecifiedDocumentContextParameter)=1">
+	Element 'ram:GuidelineSpecifiedDocumentContextParameter' must occur exactly 1 times.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:ApplicationSpecifiedDocumentContextParameter">
+      <report test="true()">
+	Element 'ram:ApplicationSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BIMSpecifiedDocumentContextParameter">
+      <report test="true()">
+	Element 'ram:BIMSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyID]">
+      <report test="true()">
+	Attribute @schemeAgencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyName]">
+      <report test="true()">
+	Attribute @schemeAgencyName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeDataURI]">
+      <report test="true()">
+	Attribute @schemeDataURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeID]">
+      <report test="true()">
+	Attribute @schemeID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeName]">
+      <report test="true()">
+	Attribute @schemeName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeURI]">
+      <report test="true()">
+	Attribute @schemeURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID[@schemeVersionID]">
+      <report test="true()">
+	Attribute @schemeVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:SpecifiedDocumentVersion">
+      <report test="true()">
+	Element 'ram:SpecifiedDocumentVersion' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:Value">
+      <report test="true()">
+	Element 'ram:Value' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter">
+      <assert test="count(ram:ID)=1">
+	Element 'ram:ID' must occur exactly 1 times.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyID]">
+      <report test="true()">
+	Attribute @schemeAgencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeAgencyName]">
+      <report test="true()">
+	Attribute @schemeAgencyName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeDataURI]">
+      <report test="true()">
+	Attribute @schemeDataURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeID]">
+      <report test="true()">
+	Attribute @schemeID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeName]">
+      <report test="true()">
+	Attribute @schemeName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeURI]">
+      <report test="true()">
+	Attribute @schemeURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID[@schemeVersionID]">
+      <report test="true()">
+	Attribute @schemeVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:SpecifiedDocumentVersion">
+      <report test="true()">
+	Element 'ram:SpecifiedDocumentVersion' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:Value">
+      <report test="true()">
+	Element 'ram:Value' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:MessageStandardSpecifiedDocumentContextParameter">
+      <report test="true()">
+	Element 'ram:MessageStandardSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:ScenarioSpecifiedDocumentContextParameter">
+      <report test="true()">
+	Element 'ram:ScenarioSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:SpecifiedTransactionID">
+      <report test="true()">
+	Element 'ram:SpecifiedTransactionID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:SubsetSpecifiedDocumentContextParameter">
+      <report test="true()">
+	Element 'ram:SubsetSpecifiedDocumentContextParameter' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:TestIndicator">
+      <report test="true()">
+	Element 'ram:TestIndicator' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement">
+      <assert test="count(ram:SellerTradeParty)=1">
+	Element 'ram:SellerTradeParty' must occur exactly 1 times.</assert>
+      <assert test="count(ram:BuyerTradeParty)=1">
+	Element 'ram:BuyerTradeParty' must occur exactly 1 times.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument">
+      <report test="true()">
+	Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ApplicableTradeDeliveryTerms">
+      <report test="true()">
+	Element 'ram:ApplicableTradeDeliveryTerms' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerAgentTradeParty">
+      <report test="true()">
+	Element 'ram:BuyerAgentTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerAssignedAccountantTradeParty">
+      <report test="true()">
+	Element 'ram:BuyerAssignedAccountantTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument">
+      <assert test="count(ram:IssuerAssignedID)=1">
+	Element 'ram:IssuerAssignedID' must occur exactly 1 times.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachedSpecifiedBinaryFile">
+      <report test="true()">
+	Element 'ram:AttachedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:AttachmentBinaryObject">
+      <report test="true()">
+	Element 'ram:AttachmentBinaryObject' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:CopyIndicator">
+      <report test="true()">
+	Element 'ram:CopyIndicator' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:EffectiveSpecifiedPeriod">
+      <report test="true()">
+	Element 'ram:EffectiveSpecifiedPeriod' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime">
+      <report test="true()">
+	Element 'ram:FormattedIssueDateTime' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:GlobalID">
+      <report test="true()">
+	Element 'ram:GlobalID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Information">
+      <report test="true()">
+	Element 'ram:Information' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyID]">
+      <report test="true()">
+	Attribute @schemeAgencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeAgencyName]">
+      <report test="true()">
+	Attribute @schemeAgencyName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeDataURI]">
+      <report test="true()">
+	Attribute @schemeDataURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeID]">
+      <report test="true()">
+	Attribute @schemeID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeName]">
+      <report test="true()">
+	Attribute @schemeName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeURI]">
+      <report test="true()">
+	Attribute @schemeURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID[@schemeVersionID]">
+      <report test="true()">
+	Attribute @schemeVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerTradeParty">
+      <report test="true()">
+	Element 'ram:IssuerTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID">
+      <report test="true()">
+	Element 'ram:LineID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:Name">
+      <report test="true()">
+	Element 'ram:Name' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:PreviousRevisionID">
+      <report test="true()">
+	Element 'ram:PreviousRevisionID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:ReferenceTypeCode">
+      <report test="true()">
+	Element 'ram:ReferenceTypeCode' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:RevisionID">
+      <report test="true()">
+	Element 'ram:RevisionID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:SectionName">
+      <report test="true()">
+	Element 'ram:SectionName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:StatusCode">
+      <report test="true()">
+	Element 'ram:StatusCode' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:TypeCode">
+      <report test="true()">
+	Element 'ram:TypeCode' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:URIID">
+      <report test="true()">
+	Element 'ram:URIID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerReference[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerReference[@languageLocaleID]">
+      <report test="true()">
+	Attribute @languageLocaleID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerRequisitionerTradeParty">
+      <report test="true()">
+	Element 'ram:BuyerRequisitionerTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTaxRepresentativeTradeParty">
+      <report test="true()">
+	Element 'ram:BuyerTaxRepresentativeTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty">
+      <assert test="count(ram:Name)=1">
+	Element 'ram:Name' must occur exactly 1 times.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact">
+      <report test="true()">
+	Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Description">
+      <report test="true()">
+	Element 'ram:Description' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:EndPointURIUniversalCommunication">
+      <report test="true()">
+	Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID">
+      <report test="true()">
+	Element 'ram:GlobalID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID">
+      <report test="true()">
+	Element 'ram:ID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+      <report test="true()">
+	Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name[@languageLocaleID]">
+      <report test="true()">
+	Attribute @languageLocaleID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress">
+      <assert test="count(ram:CountryID)=1">
+	Element 'ram:CountryID' must occur exactly 1 times.</assert>
+      <assert test="count(ram:CountrySubDivisionName)&lt;=1">
+	Element 'ram:CountrySubDivisionName' may occur at maximum 1 times.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+      <report test="true()">
+	Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+      <report test="true()">
+	Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+      <report test="true()">
+	Element 'ram:BuildingName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+      <report test="true()">
+	Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CareOf">
+      <report test="true()">
+	Element 'ram:CareOf' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+      <report test="true()">
+	Attribute @languageLocaleID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+      <report test="true()">
+	Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+      <report test="true()">
+	Attribute @schemeAgencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+      <report test="true()">
+	Attribute @schemeID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+      <report test="true()">
+	Attribute @schemeVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryName">
+      <report test="true()">
+	Element 'ram:CountryName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+      <report test="true()">
+	Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName[@languageLocaleID]">
+      <report test="true()">
+	Attribute @languageLocaleID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+      <report test="true()">
+	Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:ID">
+      <report test="true()">
+	Element 'ram:ID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineFive">
+      <report test="true()">
+	Element 'ram:LineFive' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineFour">
+      <report test="true()">
+	Element 'ram:LineFour' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+      <report test="true()">
+	Attribute @languageLocaleID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+      <report test="true()">
+	Attribute @languageLocaleID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+      <report test="true()">
+	Attribute @languageLocaleID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+      <report test="true()">
+	Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+      <report test="true()">
+	Attribute @listAgencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+      <report test="true()">
+	Attribute @listAgencyName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+      <report test="true()">
+	Attribute @listID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+      <report test="true()">
+	Attribute @listName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+      <report test="true()">
+	Attribute @listSchemeURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+      <report test="true()">
+	Attribute @listURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+      <report test="true()">
+	Attribute @listVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+      <report test="true()">
+	Attribute @name' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:StreetName">
+      <report test="true()">
+	Element 'ram:StreetName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:RoleCode">
+      <report test="true()">
+	Element 'ram:RoleCode' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+      <report test="true()">
+	Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+      <report test="true()">
+	Attribute @schemeAgencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+      <report test="true()">
+	Attribute @schemeAgencyName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+      <report test="true()">
+	Attribute @schemeDataURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+      <let name="codeValue5" value="@schemeID"/>
+      <assert test="document(&apos;FACTUR-X_MINIMUM_codedb.xml&apos;)//cl[@id=5]/enumeration[@value=$codeValue5]">
+	Value of '@schemeID' is not allowed.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+      <report test="true()">
+	Attribute @schemeName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+      <report test="true()">
+	Attribute @schemeURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+      <report test="true()">
+	Attribute @schemeVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+      <report test="true()">
+	Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+      <report test="true()">
+	Element 'ram:Name' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+      <report test="true()">
+	Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName">
+      <report test="true()">
+	Element 'ram:TradingBusinessName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration">
+      <report test="true()">
+	Element 'ram:SpecifiedTaxRegistration' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication">
+      <report test="true()">
+	Element 'ram:URIUniversalCommunication' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument">
+      <report test="true()">
+	Element 'ram:ContractReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:DemandForecastReferencedDocument">
+      <report test="true()">
+	Element 'ram:DemandForecastReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:OrderResponseReferencedDocument">
+      <report test="true()">
+	Element 'ram:OrderResponseReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PriceListReferencedDocument">
+      <report test="true()">
+	Element 'ram:PriceListReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty">
+      <report test="true()">
+	Element 'ram:ProductEndUserTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PromotionalDealReferencedDocument">
+      <report test="true()">
+	Element 'ram:PromotionalDealReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:PurchaseConditionsReferencedDocument">
+      <report test="true()">
+	Element 'ram:PurchaseConditionsReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:QuotationReferencedDocument">
+      <report test="true()">
+	Element 'ram:QuotationReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:Reference">
+      <report test="true()">
+	Element 'ram:Reference' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:RequisitionerReferencedDocument">
+      <report test="true()">
+	Element 'ram:RequisitionerReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SalesAgentTradeParty">
+      <report test="true()">
+	Element 'ram:SalesAgentTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerAssignedAccountantTradeParty">
+      <report test="true()">
+	Element 'ram:SellerAssignedAccountantTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument">
+      <report test="true()">
+	Element 'ram:SellerOrderReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty">
+      <report test="true()">
+	Element 'ram:SellerTaxRepresentativeTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty">
+      <assert test="count(ram:Name)=1">
+	Element 'ram:Name' must occur exactly 1 times.</assert>
+      <assert test="count(ram:PostalTradeAddress)=1">
+	Element 'ram:PostalTradeAddress' must occur exactly 1 times.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact">
+      <report test="true()">
+	Element 'ram:DefinedTradeContact' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Description">
+      <report test="true()">
+	Element 'ram:Description' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:EndPointURIUniversalCommunication">
+      <report test="true()">
+	Element 'ram:EndPointURIUniversalCommunication' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID">
+      <report test="true()">
+	Element 'ram:GlobalID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID">
+      <report test="true()">
+	Element 'ram:ID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:LogoAssociatedSpecifiedBinaryFile">
+      <report test="true()">
+	Element 'ram:LogoAssociatedSpecifiedBinaryFile' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name[@languageLocaleID]">
+      <report test="true()">
+	Attribute @languageLocaleID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress">
+      <assert test="count(ram:CountryID)=1">
+	Element 'ram:CountryID' must occur exactly 1 times.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:AdditionalStreetName">
+      <report test="true()">
+	Element 'ram:AdditionalStreetName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:AttentionOf">
+      <report test="true()">
+	Element 'ram:AttentionOf' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:BuildingName">
+      <report test="true()">
+	Element 'ram:BuildingName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:BuildingNumber">
+      <report test="true()">
+	Element 'ram:BuildingNumber' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CareOf">
+      <report test="true()">
+	Element 'ram:CareOf' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CityName[@languageLocaleID]">
+      <report test="true()">
+	Attribute @languageLocaleID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CitySubDivisionName">
+      <report test="true()">
+	Element 'ram:CitySubDivisionName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeAgencyID]">
+      <report test="true()">
+	Attribute @schemeAgencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeID]">
+      <report test="true()">
+	Attribute @schemeID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID[@schemeVersionID]">
+      <report test="true()">
+	Attribute @schemeVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryName">
+      <report test="true()">
+	Element 'ram:CountryName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionID">
+      <report test="true()">
+	Element 'ram:CountrySubDivisionID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName">
+      <report test="true()">
+	Element 'ram:CountrySubDivisionName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:DepartmentName">
+      <report test="true()">
+	Element 'ram:DepartmentName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:ID">
+      <report test="true()">
+	Element 'ram:ID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineFive">
+      <report test="true()">
+	Element 'ram:LineFive' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineFour">
+      <report test="true()">
+	Element 'ram:LineFour' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineOne[@languageLocaleID]">
+      <report test="true()">
+	Attribute @languageLocaleID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineThree[@languageLocaleID]">
+      <report test="true()">
+	Attribute @languageLocaleID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineTwo[@languageLocaleID]">
+      <report test="true()">
+	Attribute @languageLocaleID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostOfficeBox">
+      <report test="true()">
+	Element 'ram:PostOfficeBox' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@languageID]">
+      <report test="true()">
+	Attribute @languageID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyID]">
+      <report test="true()">
+	Attribute @listAgencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listAgencyName]">
+      <report test="true()">
+	Attribute @listAgencyName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listID]">
+      <report test="true()">
+	Attribute @listID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listName]">
+      <report test="true()">
+	Attribute @listName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listSchemeURI]">
+      <report test="true()">
+	Attribute @listSchemeURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listURI]">
+      <report test="true()">
+	Attribute @listURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@listVersionID]">
+      <report test="true()">
+	Attribute @listVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode[@name]">
+      <report test="true()">
+	Attribute @name' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:StreetName">
+      <report test="true()">
+	Element 'ram:StreetName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:RoleCode">
+      <report test="true()">
+	Element 'ram:RoleCode' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:AuthorizedLegalRegistration">
+      <report test="true()">
+	Element 'ram:AuthorizedLegalRegistration' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyID]">
+      <report test="true()">
+	Attribute @schemeAgencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeAgencyName]">
+      <report test="true()">
+	Attribute @schemeAgencyName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeDataURI]">
+      <report test="true()">
+	Attribute @schemeDataURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeID]">
+      <let name="codeValue3" value="@schemeID"/>
+      <assert test="document(&apos;FACTUR-X_MINIMUM_codedb.xml&apos;)//cl[@id=3]/enumeration[@value=$codeValue3]">
+	Value of '@schemeID' is not allowed.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeName]">
+      <report test="true()">
+	Attribute @schemeName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeURI]">
+      <report test="true()">
+	Attribute @schemeURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID[@schemeVersionID]">
+      <report test="true()">
+	Attribute @schemeVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:LegalClassificationCode">
+      <report test="true()">
+	Element 'ram:LegalClassificationCode' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:Name">
+      <report test="true()">
+	Element 'ram:Name' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:PostalTradeAddress">
+      <report test="true()">
+	Element 'ram:PostalTradeAddress' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName">
+      <report test="true()">
+	Element 'ram:TradingBusinessName' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration">
+      <assert test="count(ram:ID)=1">
+	Element 'ram:ID' must occur exactly 1 times.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:AssociatedRegisteredTax">
+      <report test="true()">
+	Element 'ram:AssociatedRegisteredTax' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID">
+      <assert test="@schemeID">
+	Attribute '@schemeID' is required in this context.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyID]">
+      <report test="true()">
+	Attribute @schemeAgencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeAgencyName]">
+      <report test="true()">
+	Attribute @schemeAgencyName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeDataURI]">
+      <report test="true()">
+	Attribute @schemeDataURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeID]">
+      <let name="codeValue4" value="@schemeID"/>
+      <assert test="document(&apos;FACTUR-X_MINIMUM_codedb.xml&apos;)//cl[@id=4]/enumeration[@value=$codeValue4]">
+	Value of '@schemeID' is not allowed.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeName]">
+      <report test="true()">
+	Attribute @schemeName' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeURI]">
+      <report test="true()">
+	Attribute @schemeURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID[@schemeVersionID]">
+      <report test="true()">
+	Attribute @schemeVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication">
+      <report test="true()">
+	Element 'ram:URIUniversalCommunication' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject">
+      <report test="true()">
+	Element 'ram:SpecifiedProcuringProject' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SupplyInstructionReferencedDocument">
+      <report test="true()">
+	Element 'ram:SupplyInstructionReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument">
+      <report test="true()">
+	Element 'ram:UltimateCustomerOrderReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery">
+      <assert test="(ram:ShipToTradeParty/ram:PostalTradeAddress and ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID!=&apos;&apos;) or not (ram:ShipToTradeParty/ram:PostalTradeAddress)">
+	Each Deliver to address (BG-15) shall contain a Deliver to country code (BT-80).</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent">
+      <report test="true()">
+	Element 'ram:ActualDeliverySupplyChainEvent' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDespatchSupplyChainEvent">
+      <report test="true()">
+	Element 'ram:ActualDespatchSupplyChainEvent' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualPickUpSupplyChainEvent">
+      <report test="true()">
+	Element 'ram:ActualPickUpSupplyChainEvent' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualReceiptSupplyChainEvent">
+      <report test="true()">
+	Element 'ram:ActualReceiptSupplyChainEvent' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:AdditionalReferencedDocument">
+      <report test="true()">
+	Element 'ram:AdditionalReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ConsumptionReportReferencedDocument">
+      <report test="true()">
+	Element 'ram:ConsumptionReportReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument">
+      <report test="true()">
+	Element 'ram:DeliveryNoteReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument">
+      <report test="true()">
+	Element 'ram:DespatchAdviceReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:PackingListReferencedDocument">
+      <report test="true()">
+	Element 'ram:PackingListReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:PreviousDeliverySupplyChainEvent">
+      <report test="true()">
+	Element 'ram:PreviousDeliverySupplyChainEvent' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument">
+      <report test="true()">
+	Element 'ram:ReceivingAdviceReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:RelatedSupplyChainConsignment">
+      <report test="true()">
+	Element 'ram:RelatedSupplyChainConsignment' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty">
+      <report test="true()">
+	Element 'ram:ShipFromTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty">
+      <report test="true()">
+	Element 'ram:ShipToTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty">
+      <report test="true()">
+	Element 'ram:UltimateShipToTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement">
+      <assert test="count(ram:InvoiceCurrencyCode)=1">
+	Element 'ram:InvoiceCurrencyCode' must occur exactly 1 times.</assert>
+      <assert test="count(ram:SpecifiedTradeSettlementHeaderMonetarySummation)=1">
+	Element 'ram:SpecifiedTradeSettlementHeaderMonetarySummation' must occur exactly 1 times.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax">
+      <report test="true()">
+	Element 'ram:ApplicableTradeTax' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod">
+      <report test="true()">
+	Element 'ram:BillingSpecifiedPeriod' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditReason">
+      <report test="true()">
+	Element 'ram:CreditReason' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditReasonCode">
+      <report test="true()">
+	Element 'ram:CreditReasonCode' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID">
+      <report test="true()">
+	Element 'ram:CreditorReferenceID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceIssuerID">
+      <report test="true()">
+	Element 'ram:CreditorReferenceIssuerID' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceType">
+      <report test="true()">
+	Element 'ram:CreditorReferenceType' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceTypeCode">
+      <report test="true()">
+	Element 'ram:CreditorReferenceTypeCode' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:DuePayableAmount">
+      <report test="true()">
+	Element 'ram:DuePayableAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:FactoringAgreementReferencedDocument">
+      <report test="true()">
+	Element 'ram:FactoringAgreementReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:FactoringListReferencedDocument">
+      <report test="true()">
+	Element 'ram:FactoringListReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceApplicableTradeCurrencyExchange">
+      <report test="true()">
+	Element 'ram:InvoiceApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listAgencyID]">
+      <report test="true()">
+	Attribute @listAgencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listID]">
+      <report test="true()">
+	Attribute @listID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listURI]">
+      <report test="true()">
+	Attribute @listURI' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode[@listVersionID]">
+      <report test="true()">
+	Attribute @listVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceDateTime">
+      <report test="true()">
+	Element 'ram:InvoiceDateTime' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceIssuerReference">
+      <report test="true()">
+	Element 'ram:InvoiceIssuerReference' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument">
+      <assert test="(ram:IssuerAssignedID!=&apos;&apos;)">
+	Each Preceding Invoice reference (BG-3) shall contain a Preceding Invoice reference (BT-25).</assert>
+      <report test="true()">
+	Element 'ram:InvoiceReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty">
+      <report test="true()">
+	Element 'ram:InvoiceeTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty">
+      <report test="true()">
+	Element 'ram:InvoicerTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:LetterOfCreditReferencedDocument">
+      <report test="true()">
+	Element 'ram:LetterOfCreditReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:NextInvoiceDateTime">
+      <report test="true()">
+	Element 'ram:NextInvoiceDateTime' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayableSpecifiedTradeAccountingAccount">
+      <report test="true()">
+	Element 'ram:PayableSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty">
+      <report test="true()">
+	Element 'ram:PayeeTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayerTradeParty">
+      <report test="true()">
+	Element 'ram:PayerTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentApplicableTradeCurrencyExchange">
+      <report test="true()">
+	Element 'ram:PaymentApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentCurrencyCode">
+      <report test="true()">
+	Element 'ram:PaymentCurrencyCode' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentReference">
+      <report test="true()">
+	Element 'ram:PaymentReference' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ProFormaInvoiceReferencedDocument">
+      <report test="true()">
+	Element 'ram:ProFormaInvoiceReferencedDocument' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PurchaseSpecifiedTradeAccountingAccount">
+      <report test="true()">
+	Element 'ram:PurchaseSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount">
+      <report test="true()">
+	Element 'ram:ReceivableSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SalesSpecifiedTradeAccountingAccount">
+      <report test="true()">
+	Element 'ram:SalesSpecifiedTradeAccountingAccount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedAdvancePayment">
+      <report test="true()">
+	Element 'ram:SpecifiedAdvancePayment' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedFinancialAdjustment">
+      <report test="true()">
+	Element 'ram:SpecifiedFinancialAdjustment' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge">
+      <report test="true()">
+	Element 'ram:SpecifiedLogisticsServiceCharge' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge">
+      <report test="true()">
+	Element 'ram:SpecifiedTradeAllowanceCharge' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms">
+      <report test="true()">
+	Element 'ram:SpecifiedTradePaymentTerms' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementFinancialCard">
+      <report test="true()">
+	Element 'ram:SpecifiedTradeSettlementFinancialCard' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation">
+      <assert test="count(ram:TaxBasisTotalAmount)=1">
+	Element 'ram:TaxBasisTotalAmount' must occur exactly 1 times.</assert>
+      <assert test="count(ram:TaxTotalAmount)&lt;=1">
+	Element 'ram:TaxTotalAmount' may occur at maximum 1 times.</assert>
+      <assert test="count(ram:GrandTotalAmount)=1">
+	Element 'ram:GrandTotalAmount' must occur exactly 1 times.</assert>
+      <assert test="count(ram:DuePayableAmount)=1">
+	Element 'ram:DuePayableAmount' must occur exactly 1 times.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount">
+      <report test="true()">
+	Element 'ram:AllowanceTotalAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount">
+      <report test="true()">
+	Element 'ram:ChargeTotalAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount[@currencyCodeListVersionID]">
+      <report test="true()">
+	Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount[@currencyID]">
+      <report test="true()">
+	Attribute @currencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount[@currencyCodeListVersionID]">
+      <report test="true()">
+	Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount[@currencyID]">
+      <report test="true()">
+	Attribute @currencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrossLineTotalAmount">
+      <report test="true()">
+	Element 'ram:GrossLineTotalAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:InformationAmount">
+      <report test="true()">
+	Element 'ram:InformationAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount">
+      <report test="true()">
+	Element 'ram:LineTotalAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:NetIncludingTaxesLineTotalAmount">
+      <report test="true()">
+	Element 'ram:NetIncludingTaxesLineTotalAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:NetLineTotalAmount">
+      <report test="true()">
+	Element 'ram:NetLineTotalAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ProductValueExcludingTobaccoTaxInformationAmount">
+      <report test="true()">
+	Element 'ram:ProductValueExcludingTobaccoTaxInformationAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RetailValueExcludingTaxInformationAmount">
+      <report test="true()">
+	Element 'ram:RetailValueExcludingTaxInformationAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount">
+      <report test="true()">
+	Element 'ram:RoundingAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount[@currencyCodeListVersionID]">
+      <report test="true()">
+	Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount[@currencyID]">
+      <report test="true()">
+	Attribute @currencyID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyCodeListVersionID]">
+      <report test="true()">
+	Attribute @currencyCodeListVersionID' marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID]">
+      <let name="codeValue6" value="@currencyID"/>
+      <assert test="document(&apos;FACTUR-X_MINIMUM_codedb.xml&apos;)//cl[@id=6]/enumeration[@value=$codeValue6]">
+	Value of '@currencyID' is not allowed.</assert>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalAllowanceChargeAmount">
+      <report test="true()">
+	Element 'ram:TotalAllowanceChargeAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalDepositFeeInformationAmount">
+      <report test="true()">
+	Element 'ram:TotalDepositFeeInformationAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalDiscountAmount">
+      <report test="true()">
+	Element 'ram:TotalDiscountAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount">
+      <report test="true()">
+	Element 'ram:TotalPrepaidAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalRetailValueInformationAmount">
+      <report test="true()">
+	Element 'ram:TotalRetailValueInformationAmount' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans">
+      <report test="true()">
+	Element 'ram:SpecifiedTradeSettlementPaymentMeans' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SubtotalCalculatedTradeTax">
+      <report test="true()">
+	Element 'ram:SubtotalCalculatedTradeTax' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxApplicableTradeCurrencyExchange">
+      <report test="true()">
+	Element 'ram:TaxApplicableTradeCurrencyExchange' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode">
+      <report test="true()">
+	Element 'ram:TaxCurrencyCode' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:UltimatePayeeTradeParty">
+      <report test="true()">
+	Element 'ram:UltimatePayeeTradeParty' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem">
+      <report test="true()">
+	Element 'ram:IncludedSupplyChainTradeLineItem' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+  <pattern>
+    <rule context="/rsm:CrossIndustryInvoice/rsm:ValuationBreakdownStatement">
+      <report test="true()">
+	Element 'rsm:ValuationBreakdownStatement' is marked as not used in the given context.</report>
+    </rule>
+  </pattern>
+</schema>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM_codedb.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM_codedb.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/schema/schematron/FACTUR-X_MINIMUM_codedb.xml	(revision 8435)
@@ -0,0 +1,637 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<codedb>
+  <cl id="1">
+    <enumeration value="80"/>
+    <enumeration value="81"/>
+    <enumeration value="82"/>
+    <enumeration value="83"/>
+    <enumeration value="84"/>
+    <enumeration value="130"/>
+    <enumeration value="202"/>
+    <enumeration value="203"/>
+    <enumeration value="204"/>
+    <enumeration value="211"/>
+    <enumeration value="261"/>
+    <enumeration value="262"/>
+    <enumeration value="295"/>
+    <enumeration value="296"/>
+    <enumeration value="308"/>
+    <enumeration value="325"/>
+    <enumeration value="326"/>
+    <enumeration value="380"/>
+    <enumeration value="381"/>
+    <enumeration value="383"/>
+    <enumeration value="384"/>
+    <enumeration value="385"/>
+    <enumeration value="386"/>
+    <enumeration value="387"/>
+    <enumeration value="388"/>
+    <enumeration value="389"/>
+    <enumeration value="390"/>
+    <enumeration value="393"/>
+    <enumeration value="394"/>
+    <enumeration value="395"/>
+    <enumeration value="396"/>
+    <enumeration value="420"/>
+    <enumeration value="456"/>
+    <enumeration value="457"/>
+    <enumeration value="458"/>
+    <enumeration value="527"/>
+    <enumeration value="575"/>
+    <enumeration value="623"/>
+    <enumeration value="633"/>
+    <enumeration value="751"/>
+    <enumeration value="780"/>
+    <enumeration value="935"/>
+  </cl>
+  <cl id="2">
+    <enumeration value="102"/>
+  </cl>
+  <cl id="3">
+    <enumeration value="0002"/>
+    <enumeration value="0003"/>
+    <enumeration value="0004"/>
+    <enumeration value="0005"/>
+    <enumeration value="0006"/>
+    <enumeration value="0007"/>
+    <enumeration value="0008"/>
+    <enumeration value="0009"/>
+    <enumeration value="0010"/>
+    <enumeration value="0011"/>
+    <enumeration value="0012"/>
+    <enumeration value="0013"/>
+    <enumeration value="0014"/>
+    <enumeration value="0015"/>
+    <enumeration value="0016"/>
+    <enumeration value="0017"/>
+    <enumeration value="0018"/>
+    <enumeration value="0019"/>
+    <enumeration value="0020"/>
+    <enumeration value="0021"/>
+    <enumeration value="0022"/>
+    <enumeration value="0023"/>
+    <enumeration value="0024"/>
+    <enumeration value="0025"/>
+    <enumeration value="0026"/>
+    <enumeration value="0027"/>
+    <enumeration value="0028"/>
+    <enumeration value="0029"/>
+    <enumeration value="0030"/>
+    <enumeration value="0031"/>
+    <enumeration value="0032"/>
+    <enumeration value="0033"/>
+    <enumeration value="0034"/>
+    <enumeration value="0035"/>
+    <enumeration value="0036"/>
+    <enumeration value="0037"/>
+    <enumeration value="0038"/>
+    <enumeration value="0039"/>
+    <enumeration value="0040"/>
+    <enumeration value="0041"/>
+    <enumeration value="0042"/>
+    <enumeration value="0043"/>
+    <enumeration value="0044"/>
+    <enumeration value="0045"/>
+    <enumeration value="0046"/>
+    <enumeration value="0047"/>
+    <enumeration value="0048"/>
+    <enumeration value="0049"/>
+    <enumeration value="0050"/>
+    <enumeration value="0051"/>
+    <enumeration value="0052"/>
+    <enumeration value="0053"/>
+    <enumeration value="0054"/>
+    <enumeration value="0055"/>
+    <enumeration value="0056"/>
+    <enumeration value="0057"/>
+    <enumeration value="0058"/>
+    <enumeration value="0059"/>
+    <enumeration value="0060"/>
+    <enumeration value="0061"/>
+    <enumeration value="0062"/>
+    <enumeration value="0063"/>
+    <enumeration value="0064"/>
+    <enumeration value="0065"/>
+    <enumeration value="0066"/>
+    <enumeration value="0067"/>
+    <enumeration value="0068"/>
+    <enumeration value="0069"/>
+    <enumeration value="0070"/>
+    <enumeration value="0071"/>
+    <enumeration value="0072"/>
+    <enumeration value="0073"/>
+    <enumeration value="0074"/>
+    <enumeration value="0075"/>
+    <enumeration value="0076"/>
+    <enumeration value="0077"/>
+    <enumeration value="0078"/>
+    <enumeration value="0079"/>
+    <enumeration value="0080"/>
+    <enumeration value="0081"/>
+    <enumeration value="0082"/>
+    <enumeration value="0083"/>
+    <enumeration value="0084"/>
+    <enumeration value="0085"/>
+    <enumeration value="0086"/>
+    <enumeration value="0087"/>
+    <enumeration value="0088"/>
+    <enumeration value="0089"/>
+    <enumeration value="0090"/>
+    <enumeration value="0091"/>
+    <enumeration value="0093"/>
+    <enumeration value="0094"/>
+    <enumeration value="0095"/>
+    <enumeration value="0096"/>
+    <enumeration value="0097"/>
+    <enumeration value="0098"/>
+    <enumeration value="0099"/>
+    <enumeration value="0100"/>
+    <enumeration value="0101"/>
+    <enumeration value="0102"/>
+    <enumeration value="0104"/>
+    <enumeration value="0105"/>
+    <enumeration value="0106"/>
+    <enumeration value="0107"/>
+    <enumeration value="0108"/>
+    <enumeration value="0109"/>
+    <enumeration value="0110"/>
+    <enumeration value="0111"/>
+    <enumeration value="0112"/>
+    <enumeration value="0113"/>
+    <enumeration value="0114"/>
+    <enumeration value="0115"/>
+    <enumeration value="0116"/>
+    <enumeration value="0117"/>
+    <enumeration value="0118"/>
+    <enumeration value="0119"/>
+    <enumeration value="0120"/>
+    <enumeration value="0121"/>
+    <enumeration value="0122"/>
+    <enumeration value="0123"/>
+    <enumeration value="0124"/>
+    <enumeration value="0125"/>
+    <enumeration value="0126"/>
+    <enumeration value="0127"/>
+    <enumeration value="0128"/>
+    <enumeration value="0129"/>
+    <enumeration value="0130"/>
+    <enumeration value="0131"/>
+    <enumeration value="0132"/>
+    <enumeration value="0133"/>
+    <enumeration value="0134"/>
+    <enumeration value="0135"/>
+    <enumeration value="0136"/>
+    <enumeration value="0137"/>
+    <enumeration value="0138"/>
+    <enumeration value="0139"/>
+    <enumeration value="0140"/>
+    <enumeration value="0141"/>
+    <enumeration value="0142"/>
+    <enumeration value="0143"/>
+    <enumeration value="0144"/>
+    <enumeration value="0145"/>
+    <enumeration value="0146"/>
+    <enumeration value="0147"/>
+    <enumeration value="0148"/>
+    <enumeration value="0149"/>
+    <enumeration value="0150"/>
+    <enumeration value="0151"/>
+    <enumeration value="0152"/>
+    <enumeration value="0153"/>
+    <enumeration value="0154"/>
+    <enumeration value="0155"/>
+    <enumeration value="0156"/>
+    <enumeration value="0157"/>
+    <enumeration value="0158"/>
+    <enumeration value="0159"/>
+    <enumeration value="0160"/>
+    <enumeration value="0161"/>
+    <enumeration value="0162"/>
+    <enumeration value="0163"/>
+    <enumeration value="0164"/>
+    <enumeration value="0165"/>
+    <enumeration value="0166"/>
+    <enumeration value="0167"/>
+    <enumeration value="0168"/>
+    <enumeration value="0169"/>
+    <enumeration value="0170"/>
+    <enumeration value="0171"/>
+    <enumeration value="0172"/>
+    <enumeration value="0173"/>
+    <enumeration value="0174"/>
+    <enumeration value="0175"/>
+    <enumeration value="0176"/>
+    <enumeration value="0177"/>
+    <enumeration value="0178"/>
+    <enumeration value="0179"/>
+    <enumeration value="0180"/>
+    <enumeration value="0183"/>
+    <enumeration value="0184"/>
+    <enumeration value="0185"/>
+    <enumeration value="0186"/>
+    <enumeration value="0187"/>
+    <enumeration value="0188"/>
+    <enumeration value="0189"/>
+    <enumeration value="0190"/>
+    <enumeration value="0191"/>
+    <enumeration value="0192"/>
+    <enumeration value="0193"/>
+    <enumeration value="0194"/>
+    <enumeration value="0195"/>
+    <enumeration value="0196"/>
+    <enumeration value="0197"/>
+    <enumeration value="0198"/>
+    <enumeration value="0199"/>
+    <enumeration value="0200"/>
+    <enumeration value="0201"/>
+    <enumeration value="0202"/>
+    <enumeration value="0203"/>
+    <enumeration value="0204"/>
+  </cl>
+  <cl id="4">
+    <enumeration value="FC"/>
+    <enumeration value="VA"/>
+  </cl>
+  <cl id="5">
+    <enumeration value="0002"/>
+    <enumeration value="0003"/>
+    <enumeration value="0004"/>
+    <enumeration value="0005"/>
+    <enumeration value="0006"/>
+    <enumeration value="0007"/>
+    <enumeration value="0008"/>
+    <enumeration value="0009"/>
+    <enumeration value="0010"/>
+    <enumeration value="0011"/>
+    <enumeration value="0012"/>
+    <enumeration value="0013"/>
+    <enumeration value="0014"/>
+    <enumeration value="0015"/>
+    <enumeration value="0016"/>
+    <enumeration value="0017"/>
+    <enumeration value="0018"/>
+    <enumeration value="0019"/>
+    <enumeration value="0020"/>
+    <enumeration value="0021"/>
+    <enumeration value="0022"/>
+    <enumeration value="0023"/>
+    <enumeration value="0024"/>
+    <enumeration value="0025"/>
+    <enumeration value="0026"/>
+    <enumeration value="0027"/>
+    <enumeration value="0028"/>
+    <enumeration value="0029"/>
+    <enumeration value="0030"/>
+    <enumeration value="0031"/>
+    <enumeration value="0032"/>
+    <enumeration value="0033"/>
+    <enumeration value="0034"/>
+    <enumeration value="0035"/>
+    <enumeration value="0036"/>
+    <enumeration value="0037"/>
+    <enumeration value="0038"/>
+    <enumeration value="0039"/>
+    <enumeration value="0040"/>
+    <enumeration value="0041"/>
+    <enumeration value="0042"/>
+    <enumeration value="0043"/>
+    <enumeration value="0044"/>
+    <enumeration value="0045"/>
+    <enumeration value="0046"/>
+    <enumeration value="0047"/>
+    <enumeration value="0048"/>
+    <enumeration value="0049"/>
+    <enumeration value="0050"/>
+    <enumeration value="0051"/>
+    <enumeration value="0052"/>
+    <enumeration value="0053"/>
+    <enumeration value="0054"/>
+    <enumeration value="0055"/>
+    <enumeration value="0056"/>
+    <enumeration value="0057"/>
+    <enumeration value="0058"/>
+    <enumeration value="0059"/>
+    <enumeration value="0060"/>
+    <enumeration value="0061"/>
+    <enumeration value="0062"/>
+    <enumeration value="0063"/>
+    <enumeration value="0064"/>
+    <enumeration value="0065"/>
+    <enumeration value="0066"/>
+    <enumeration value="0067"/>
+    <enumeration value="0068"/>
+    <enumeration value="0069"/>
+    <enumeration value="0070"/>
+    <enumeration value="0071"/>
+    <enumeration value="0072"/>
+    <enumeration value="0073"/>
+    <enumeration value="0074"/>
+    <enumeration value="0075"/>
+    <enumeration value="0076"/>
+    <enumeration value="0077"/>
+    <enumeration value="0078"/>
+    <enumeration value="0079"/>
+    <enumeration value="0080"/>
+    <enumeration value="0081"/>
+    <enumeration value="0082"/>
+    <enumeration value="0083"/>
+    <enumeration value="0084"/>
+    <enumeration value="0085"/>
+    <enumeration value="0086"/>
+    <enumeration value="0087"/>
+    <enumeration value="0088"/>
+    <enumeration value="0089"/>
+    <enumeration value="0090"/>
+    <enumeration value="0091"/>
+    <enumeration value="0093"/>
+    <enumeration value="0094"/>
+    <enumeration value="0095"/>
+    <enumeration value="0096"/>
+    <enumeration value="0097"/>
+    <enumeration value="0098"/>
+    <enumeration value="0099"/>
+    <enumeration value="0100"/>
+    <enumeration value="0101"/>
+    <enumeration value="0102"/>
+    <enumeration value="0104"/>
+    <enumeration value="0105"/>
+    <enumeration value="0106"/>
+    <enumeration value="0107"/>
+    <enumeration value="0108"/>
+    <enumeration value="0109"/>
+    <enumeration value="0110"/>
+    <enumeration value="0111"/>
+    <enumeration value="0112"/>
+    <enumeration value="0113"/>
+    <enumeration value="0114"/>
+    <enumeration value="0115"/>
+    <enumeration value="0116"/>
+    <enumeration value="0117"/>
+    <enumeration value="0118"/>
+    <enumeration value="0119"/>
+    <enumeration value="0120"/>
+    <enumeration value="0121"/>
+    <enumeration value="0122"/>
+    <enumeration value="0123"/>
+    <enumeration value="0124"/>
+    <enumeration value="0125"/>
+    <enumeration value="0126"/>
+    <enumeration value="0127"/>
+    <enumeration value="0128"/>
+    <enumeration value="0129"/>
+    <enumeration value="0130"/>
+    <enumeration value="0131"/>
+    <enumeration value="0132"/>
+    <enumeration value="0133"/>
+    <enumeration value="0134"/>
+    <enumeration value="0135"/>
+    <enumeration value="0136"/>
+    <enumeration value="0137"/>
+    <enumeration value="0138"/>
+    <enumeration value="0139"/>
+    <enumeration value="0140"/>
+    <enumeration value="0141"/>
+    <enumeration value="0142"/>
+    <enumeration value="0143"/>
+    <enumeration value="0144"/>
+    <enumeration value="0145"/>
+    <enumeration value="0146"/>
+    <enumeration value="0147"/>
+    <enumeration value="0148"/>
+    <enumeration value="0149"/>
+    <enumeration value="0150"/>
+    <enumeration value="0151"/>
+    <enumeration value="0152"/>
+    <enumeration value="0153"/>
+    <enumeration value="0154"/>
+    <enumeration value="0155"/>
+    <enumeration value="0156"/>
+    <enumeration value="0157"/>
+    <enumeration value="0158"/>
+    <enumeration value="0159"/>
+    <enumeration value="0160"/>
+    <enumeration value="0161"/>
+    <enumeration value="0162"/>
+    <enumeration value="0163"/>
+    <enumeration value="0164"/>
+    <enumeration value="0165"/>
+    <enumeration value="0166"/>
+    <enumeration value="0167"/>
+    <enumeration value="0168"/>
+    <enumeration value="0169"/>
+    <enumeration value="0170"/>
+    <enumeration value="0171"/>
+    <enumeration value="0172"/>
+    <enumeration value="0173"/>
+    <enumeration value="0174"/>
+    <enumeration value="0175"/>
+    <enumeration value="0176"/>
+    <enumeration value="0177"/>
+    <enumeration value="0178"/>
+    <enumeration value="0179"/>
+    <enumeration value="0180"/>
+    <enumeration value="0183"/>
+    <enumeration value="0184"/>
+    <enumeration value="0185"/>
+    <enumeration value="0186"/>
+    <enumeration value="0187"/>
+    <enumeration value="0188"/>
+    <enumeration value="0189"/>
+    <enumeration value="0190"/>
+    <enumeration value="0191"/>
+    <enumeration value="0192"/>
+    <enumeration value="0193"/>
+    <enumeration value="0194"/>
+    <enumeration value="0195"/>
+    <enumeration value="0196"/>
+    <enumeration value="0197"/>
+    <enumeration value="0198"/>
+    <enumeration value="0199"/>
+    <enumeration value="0200"/>
+    <enumeration value="0201"/>
+    <enumeration value="0202"/>
+    <enumeration value="0203"/>
+    <enumeration value="0204"/>
+  </cl>
+  <cl id="6">
+    <enumeration value="AED"/>
+    <enumeration value="AFN"/>
+    <enumeration value="ALL"/>
+    <enumeration value="AMD"/>
+    <enumeration value="ANG"/>
+    <enumeration value="AOA"/>
+    <enumeration value="ARS"/>
+    <enumeration value="AUD"/>
+    <enumeration value="AWG"/>
+    <enumeration value="AZN"/>
+    <enumeration value="BAM"/>
+    <enumeration value="BBD"/>
+    <enumeration value="BDT"/>
+    <enumeration value="BGN"/>
+    <enumeration value="BHD"/>
+    <enumeration value="BIF"/>
+    <enumeration value="BMD"/>
+    <enumeration value="BND"/>
+    <enumeration value="BOB"/>
+    <enumeration value="BOV"/>
+    <enumeration value="BRL"/>
+    <enumeration value="BSD"/>
+    <enumeration value="BTN"/>
+    <enumeration value="BWP"/>
+    <enumeration value="BYN"/>
+    <enumeration value="BZD"/>
+    <enumeration value="CAD"/>
+    <enumeration value="CDF"/>
+    <enumeration value="CHE"/>
+    <enumeration value="CHF"/>
+    <enumeration value="CHW"/>
+    <enumeration value="CLF"/>
+    <enumeration value="CLP"/>
+    <enumeration value="CNY"/>
+    <enumeration value="COP"/>
+    <enumeration value="COU"/>
+    <enumeration value="CRC"/>
+    <enumeration value="CUC"/>
+    <enumeration value="CUP"/>
+    <enumeration value="CVE"/>
+    <enumeration value="CZK"/>
+    <enumeration value="DJF"/>
+    <enumeration value="DKK"/>
+    <enumeration value="DOP"/>
+    <enumeration value="DZD"/>
+    <enumeration value="EGP"/>
+    <enumeration value="ERN"/>
+    <enumeration value="ETB"/>
+    <enumeration value="EUR"/>
+    <enumeration value="FJD"/>
+    <enumeration value="FKP"/>
+    <enumeration value="GBP"/>
+    <enumeration value="GEL"/>
+    <enumeration value="GHS"/>
+    <enumeration value="GIP"/>
+    <enumeration value="GMD"/>
+    <enumeration value="GNF"/>
+    <enumeration value="GTQ"/>
+    <enumeration value="GYD"/>
+    <enumeration value="HKD"/>
+    <enumeration value="HNL"/>
+    <enumeration value="HRK"/>
+    <enumeration value="HTG"/>
+    <enumeration value="HUF"/>
+    <enumeration value="IDR"/>
+    <enumeration value="ILS"/>
+    <enumeration value="INR"/>
+    <enumeration value="IQD"/>
+    <enumeration value="IRR"/>
+    <enumeration value="ISK"/>
+    <enumeration value="JMD"/>
+    <enumeration value="JOD"/>
+    <enumeration value="JPY"/>
+    <enumeration value="KES"/>
+    <enumeration value="KGS"/>
+    <enumeration value="KHR"/>
+    <enumeration value="KMF"/>
+    <enumeration value="KPW"/>
+    <enumeration value="KRW"/>
+    <enumeration value="KWD"/>
+    <enumeration value="KYD"/>
+    <enumeration value="KZT"/>
+    <enumeration value="LAK"/>
+    <enumeration value="LBP"/>
+    <enumeration value="LKR"/>
+    <enumeration value="LRD"/>
+    <enumeration value="LSL"/>
+    <enumeration value="LYD"/>
+    <enumeration value="MAD"/>
+    <enumeration value="MDL"/>
+    <enumeration value="MGA"/>
+    <enumeration value="MKD"/>
+    <enumeration value="MMK"/>
+    <enumeration value="MNT"/>
+    <enumeration value="MOP"/>
+    <enumeration value="MRU"/>
+    <enumeration value="MUR"/>
+    <enumeration value="MVR"/>
+    <enumeration value="MWK"/>
+    <enumeration value="MXN"/>
+    <enumeration value="MXV"/>
+    <enumeration value="MYR"/>
+    <enumeration value="MZN"/>
+    <enumeration value="NAD"/>
+    <enumeration value="NGN"/>
+    <enumeration value="NIO"/>
+    <enumeration value="NOK"/>
+    <enumeration value="NPR"/>
+    <enumeration value="NZD"/>
+    <enumeration value="OMR"/>
+    <enumeration value="PAB"/>
+    <enumeration value="PEN"/>
+    <enumeration value="PGK"/>
+    <enumeration value="PHP"/>
+    <enumeration value="PKR"/>
+    <enumeration value="PLN"/>
+    <enumeration value="PYG"/>
+    <enumeration value="QAR"/>
+    <enumeration value="RON"/>
+    <enumeration value="RSD"/>
+    <enumeration value="RUB"/>
+    <enumeration value="RWF"/>
+    <enumeration value="SAR"/>
+    <enumeration value="SBD"/>
+    <enumeration value="SCR"/>
+    <enumeration value="SDG"/>
+    <enumeration value="SEK"/>
+    <enumeration value="SGD"/>
+    <enumeration value="SHP"/>
+    <enumeration value="SLL"/>
+    <enumeration value="SOS"/>
+    <enumeration value="SRD"/>
+    <enumeration value="SSP"/>
+    <enumeration value="STN"/>
+    <enumeration value="SVC"/>
+    <enumeration value="SYP"/>
+    <enumeration value="SZL"/>
+    <enumeration value="THB"/>
+    <enumeration value="TJS"/>
+    <enumeration value="TMT"/>
+    <enumeration value="TND"/>
+    <enumeration value="TOP"/>
+    <enumeration value="TRY"/>
+    <enumeration value="TTD"/>
+    <enumeration value="TWD"/>
+    <enumeration value="TZS"/>
+    <enumeration value="UAH"/>
+    <enumeration value="UGX"/>
+    <enumeration value="USD"/>
+    <enumeration value="USN"/>
+    <enumeration value="UYI"/>
+    <enumeration value="UYU"/>
+    <enumeration value="UYW"/>
+    <enumeration value="UZS"/>
+    <enumeration value="VES"/>
+    <enumeration value="VND"/>
+    <enumeration value="VUV"/>
+    <enumeration value="WST"/>
+    <enumeration value="XAF"/>
+    <enumeration value="XAG"/>
+    <enumeration value="XAU"/>
+    <enumeration value="XBA"/>
+    <enumeration value="XBB"/>
+    <enumeration value="XBC"/>
+    <enumeration value="XBD"/>
+    <enumeration value="XCD"/>
+    <enumeration value="XDR"/>
+    <enumeration value="XOF"/>
+    <enumeration value="XPD"/>
+    <enumeration value="XPF"/>
+    <enumeration value="XPT"/>
+    <enumeration value="XSU"/>
+    <enumeration value="XTS"/>
+    <enumeration value="XUA"/>
+    <enumeration value="XXX"/>
+    <enumeration value="YER"/>
+    <enumeration value="ZAR"/>
+    <enumeration value="ZMW"/>
+    <enumeration value="ZWL"/>
+  </cl>
+</codedb>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/AllowanceChargeReasonCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
@@ -0,0 +1,204 @@
+horstoeko\zugferd\entities\basic\qdt\AllowanceChargeReasonCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - AA
+                        - AAA
+                        - AAC
+                        - AAD
+                        - AAE
+                        - AAF
+                        - AAH
+                        - AAI
+                        - AAS
+                        - AAT
+                        - AAV
+                        - AAY
+                        - AAZ
+                        - ABA
+                        - ABB
+                        - ABC
+                        - ABD
+                        - ABF
+                        - ABK
+                        - ABL
+                        - ABN
+                        - ABR
+                        - ABS
+                        - ABT
+                        - ABU
+                        - ACF
+                        - ACG
+                        - ACH
+                        - ACI
+                        - ACJ
+                        - ACK
+                        - ACL
+                        - ACM
+                        - ACS
+                        - ADC
+                        - ADE
+                        - ADJ
+                        - ADK
+                        - ADL
+                        - ADM
+                        - ADN
+                        - ADO
+                        - ADP
+                        - ADQ
+                        - ADR
+                        - ADT
+                        - ADW
+                        - ADY
+                        - ADZ
+                        - AEA
+                        - AEB
+                        - AEC
+                        - AED
+                        - AEF
+                        - AEH
+                        - AEI
+                        - AEJ
+                        - AEK
+                        - AEL
+                        - AEM
+                        - AEN
+                        - AEO
+                        - AEP
+                        - AES
+                        - AET
+                        - AEU
+                        - AEV
+                        - AEW
+                        - AEX
+                        - AEY
+                        - AEZ
+                        - AJ
+                        - AU
+                        - CA
+                        - CAB
+                        - CAD
+                        - CAE
+                        - CAF
+                        - CAI
+                        - CAJ
+                        - CAK
+                        - CAL
+                        - CAM
+                        - CAN
+                        - CAO
+                        - CAP
+                        - CAQ
+                        - CAR
+                        - CAS
+                        - CAT
+                        - CAU
+                        - CAV
+                        - CAW
+                        - CAX
+                        - CAY
+                        - CAZ
+                        - CD
+                        - CG
+                        - CS
+                        - CT
+                        - DAB
+                        - DAC
+                        - DAD
+                        - DAF
+                        - DAG
+                        - DAH
+                        - DAI
+                        - DAJ
+                        - DAK
+                        - DAL
+                        - DAM
+                        - DAN
+                        - DAO
+                        - DAP
+                        - DAQ
+                        - DL
+                        - EG
+                        - EP
+                        - ER
+                        - FAA
+                        - FAB
+                        - FAC
+                        - FC
+                        - FH
+                        - FI
+                        - GAA
+                        - HAA
+                        - HD
+                        - HH
+                        - IAA
+                        - IAB
+                        - ID
+                        - IF
+                        - IR
+                        - IS
+                        - KO
+                        - L1
+                        - LA
+                        - LAA
+                        - LAB
+                        - LF
+                        - MAE
+                        - MI
+                        - ML
+                        - NAA
+                        - OA
+                        - PA
+                        - PAA
+                        - PC
+                        - PL
+                        - RAB
+                        - RAC
+                        - RAD
+                        - RAF
+                        - RE
+                        - RF
+                        - RH
+                        - RV
+                        - SA
+                        - SAA
+                        - SAD
+                        - SAE
+                        - SAI
+                        - SG
+                        - SH
+                        - SM
+                        - SU
+                        - TAB
+                        - TAC
+                        - TT
+                        - TV
+                        - V1
+                        - V2
+                        - WH
+                        - XAA
+                        - YY
+                        - ZZZ
+                        - '41'
+                        - '42'
+                        - '60'
+                        - '62'
+                        - '63'
+                        - '64'
+                        - '65'
+                        - '66'
+                        - '67'
+                        - '68'
+                        - '70'
+                        - '71'
+                        - '88'
+                        - '95'
+                        - '100'
+                        - '102'
+                        - '103'
+                        - '104'
+                        - '105'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/CountryIDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/CountryIDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/CountryIDType.yml	(revision 8435)
@@ -0,0 +1,259 @@
+horstoeko\zugferd\entities\basic\qdt\CountryIDType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - 1A
+                        - AD
+                        - AE
+                        - AF
+                        - AG
+                        - AI
+                        - AL
+                        - AM
+                        - AO
+                        - AQ
+                        - AR
+                        - AS
+                        - AT
+                        - AU
+                        - AW
+                        - AX
+                        - AZ
+                        - BA
+                        - BB
+                        - BD
+                        - BE
+                        - BF
+                        - BG
+                        - BH
+                        - BI
+                        - BJ
+                        - BL
+                        - BM
+                        - BN
+                        - BO
+                        - BQ
+                        - BR
+                        - BS
+                        - BT
+                        - BV
+                        - BW
+                        - BY
+                        - BZ
+                        - CA
+                        - CC
+                        - CD
+                        - CF
+                        - CG
+                        - CH
+                        - CI
+                        - CK
+                        - CL
+                        - CM
+                        - CN
+                        - CO
+                        - CR
+                        - CU
+                        - CV
+                        - CW
+                        - CX
+                        - CY
+                        - CZ
+                        - DE
+                        - DJ
+                        - DK
+                        - DM
+                        - DO
+                        - DZ
+                        - EC
+                        - EE
+                        - EG
+                        - EH
+                        - ER
+                        - ES
+                        - ET
+                        - FI
+                        - FJ
+                        - FK
+                        - FM
+                        - FO
+                        - FR
+                        - GA
+                        - GB
+                        - GD
+                        - GE
+                        - GF
+                        - GG
+                        - GH
+                        - GI
+                        - GL
+                        - GM
+                        - GN
+                        - GP
+                        - GQ
+                        - GR
+                        - GS
+                        - GT
+                        - GU
+                        - GW
+                        - GY
+                        - HK
+                        - HM
+                        - HN
+                        - HR
+                        - HT
+                        - HU
+                        - ID
+                        - IE
+                        - IL
+                        - IM
+                        - IN
+                        - IO
+                        - IQ
+                        - IR
+                        - IS
+                        - IT
+                        - JE
+                        - JM
+                        - JO
+                        - JP
+                        - KE
+                        - KG
+                        - KH
+                        - KI
+                        - KM
+                        - KN
+                        - KP
+                        - KR
+                        - KW
+                        - KY
+                        - KZ
+                        - LA
+                        - LB
+                        - LC
+                        - LI
+                        - LK
+                        - LR
+                        - LS
+                        - LT
+                        - LU
+                        - LV
+                        - LY
+                        - MA
+                        - MC
+                        - MD
+                        - ME
+                        - MF
+                        - MG
+                        - MH
+                        - MK
+                        - ML
+                        - MM
+                        - MN
+                        - MO
+                        - MP
+                        - MQ
+                        - MR
+                        - MS
+                        - MT
+                        - MU
+                        - MV
+                        - MW
+                        - MX
+                        - MY
+                        - MZ
+                        - NA
+                        - NC
+                        - NE
+                        - NF
+                        - NG
+                        - NI
+                        - NL
+                        - 'NO'
+                        - NP
+                        - NR
+                        - NU
+                        - NZ
+                        - OM
+                        - PA
+                        - PE
+                        - PF
+                        - PG
+                        - PH
+                        - PK
+                        - PL
+                        - PM
+                        - PN
+                        - PR
+                        - PS
+                        - PT
+                        - PW
+                        - PY
+                        - QA
+                        - RE
+                        - RO
+                        - RS
+                        - RU
+                        - RW
+                        - SA
+                        - SB
+                        - SC
+                        - SD
+                        - SE
+                        - SG
+                        - SH
+                        - SI
+                        - SJ
+                        - SK
+                        - SL
+                        - SM
+                        - SN
+                        - SO
+                        - SR
+                        - SS
+                        - ST
+                        - SV
+                        - SX
+                        - SY
+                        - SZ
+                        - TC
+                        - TD
+                        - TF
+                        - TG
+                        - TH
+                        - TJ
+                        - TK
+                        - TL
+                        - TM
+                        - TN
+                        - TO
+                        - TR
+                        - TT
+                        - TV
+                        - TW
+                        - TZ
+                        - UA
+                        - UG
+                        - UM
+                        - US
+                        - UY
+                        - UZ
+                        - VA
+                        - VC
+                        - VE
+                        - VG
+                        - VI
+                        - VN
+                        - VU
+                        - WF
+                        - WS
+                        - XI
+                        - YE
+                        - YT
+                        - ZA
+                        - ZM
+                        - ZW
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/CurrencyCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/CurrencyCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/CurrencyCodeType.yml	(revision 8435)
@@ -0,0 +1,187 @@
+horstoeko\zugferd\entities\basic\qdt\CurrencyCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - 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
+                        - 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
+                        - LYD
+                        - MAD
+                        - MDL
+                        - MGA
+                        - MKD
+                        - MMK
+                        - MNT
+                        - MOP
+                        - MRU
+                        - 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
+                        - RWF
+                        - SAR
+                        - SBD
+                        - SCR
+                        - SDG
+                        - SEK
+                        - SGD
+                        - SHP
+                        - SLL
+                        - SOS
+                        - SRD
+                        - SSP
+                        - STN
+                        - SVC
+                        - SYP
+                        - SZL
+                        - THB
+                        - TJS
+                        - TMT
+                        - TND
+                        - TOP
+                        - TRY
+                        - TTD
+                        - TWD
+                        - TZS
+                        - UAH
+                        - UGX
+                        - USD
+                        - USN
+                        - UYI
+                        - UYU
+                        - UYW
+                        - UZS
+                        - VES
+                        - VND
+                        - VUV
+                        - WST
+                        - XAF
+                        - XAG
+                        - XAU
+                        - XBA
+                        - XBB
+                        - XBC
+                        - XBD
+                        - XCD
+                        - XDR
+                        - XOF
+                        - XPD
+                        - XPF
+                        - XPT
+                        - XSU
+                        - XTS
+                        - XUA
+                        - XXX
+                        - YER
+                        - ZAR
+                        - ZMW
+                        - ZWL
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/DocumentCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/DocumentCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/DocumentCodeType.yml	(revision 8435)
@@ -0,0 +1,53 @@
+horstoeko\zugferd\entities\basic\qdt\DocumentCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '80'
+                        - '81'
+                        - '82'
+                        - '83'
+                        - '84'
+                        - '130'
+                        - '202'
+                        - '203'
+                        - '204'
+                        - '211'
+                        - '261'
+                        - '262'
+                        - '295'
+                        - '296'
+                        - '308'
+                        - '325'
+                        - '326'
+                        - '380'
+                        - '381'
+                        - '383'
+                        - '384'
+                        - '385'
+                        - '386'
+                        - '387'
+                        - '388'
+                        - '389'
+                        - '390'
+                        - '393'
+                        - '394'
+                        - '395'
+                        - '396'
+                        - '420'
+                        - '456'
+                        - '457'
+                        - '458'
+                        - '527'
+                        - '575'
+                        - '623'
+                        - '633'
+                        - '751'
+                        - '780'
+                        - '875'
+                        - '876'
+                        - '877'
+                        - '935'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType\DateTimeStringAType:
+    properties:
+        format:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/FormattedDateTimeType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType:
+    properties:
+        dateTimeString:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/PaymentMeansCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/PaymentMeansCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/PaymentMeansCodeType.yml	(revision 8435)
@@ -0,0 +1,19 @@
+horstoeko\zugferd\entities\basic\qdt\PaymentMeansCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '10'
+                        - '20'
+                        - '30'
+                        - '42'
+                        - '48'
+                        - '49'
+                        - '57'
+                        - '58'
+                        - '59'
+                        - '97'
+                        - ZZZ
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxCategoryCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxCategoryCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxCategoryCodeType.yml	(revision 8435)
@@ -0,0 +1,17 @@
+horstoeko\zugferd\entities\basic\qdt\TaxCategoryCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - AE
+                        - E
+                        - G
+                        - K
+                        - L
+                        - M
+                        - O
+                        - S
+                        - Z
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxTypeCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxTypeCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/TaxTypeCodeType.yml	(revision 8435)
@@ -0,0 +1,9 @@
+horstoeko\zugferd\entities\basic\qdt\TaxTypeCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - VAT
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/TimeReferenceCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/TimeReferenceCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/qdt/TimeReferenceCodeType.yml	(revision 8435)
@@ -0,0 +1,11 @@
+horstoeko\zugferd\entities\basic\qdt\TimeReferenceCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '5'
+                        - '29'
+                        - '72'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/DebtorFinancialAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/DebtorFinancialAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/DebtorFinancialAccountType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\ram\DebtorFinancialAccountType:
+    properties:
+        iBANID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentContextParameterType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentContextParameterType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentContextParameterType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\ram\DocumentContextParameterType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentLineDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentLineDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/DocumentLineDocumentType.yml	(revision 8435)
@@ -0,0 +1,10 @@
+horstoeko\zugferd\entities\basic\ram\DocumentLineDocumentType:
+    properties:
+        lineID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        includedNote:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentContextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentContextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentContextType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\ram\ExchangedDocumentContextType:
+    properties:
+        businessProcessSpecifiedDocumentContextParameter:
+            -
+                Valid: null
+        guidelineSpecifiedDocumentContextParameter:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/ExchangedDocumentType.yml	(revision 8435)
@@ -0,0 +1,22 @@
+horstoeko\zugferd\entities\basic\ram\ExchangedDocumentType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        typeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        issueDateTime:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        includedNote:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,25 @@
+horstoeko\zugferd\entities\basic\ram\HeaderTradeAgreementType:
+    properties:
+        sellerTradeParty:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        buyerTradeParty:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        sellerTaxRepresentativeTradeParty:
+            -
+                Valid: null
+        buyerOrderReferencedDocument:
+            -
+                Valid: null
+        contractReferencedDocument:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,11 @@
+horstoeko\zugferd\entities\basic\ram\HeaderTradeDeliveryType:
+    properties:
+        shipToTradeParty:
+            -
+                Valid: null
+        actualDeliverySupplyChainEvent:
+            -
+                Valid: null
+        despatchAdviceReferencedDocument:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/HeaderTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,42 @@
+horstoeko\zugferd\entities\basic\ram\HeaderTradeSettlementType:
+    properties:
+        invoiceCurrencyCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        payeeTradeParty:
+            -
+                Valid: null
+        specifiedTradeSettlementPaymentMeans:
+            -
+                Valid: null
+        applicableTradeTax:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        billingSpecifiedPeriod:
+            -
+                Valid: null
+        specifiedTradeAllowanceCharge:
+            -
+                Valid: null
+        specifiedTradePaymentTerms:
+            -
+                Valid: null
+        specifiedTradeSettlementHeaderMonetarySummation:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        invoiceReferencedDocument:
+            -
+                Valid: null
+        receivableSpecifiedTradeAccountingAccount:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\ram\LineTradeAgreementType:
+    properties:
+        grossPriceProductTradePrice:
+            -
+                Valid: null
+        netPriceProductTradePrice:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\ram\LineTradeDeliveryType:
+    properties:
+        billedQuantity:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/LineTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,22 @@
+horstoeko\zugferd\entities\basic\ram\LineTradeSettlementType:
+    properties:
+        applicableTradeTax:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        billingSpecifiedPeriod:
+            -
+                Valid: null
+        specifiedTradeAllowanceCharge:
+            -
+                Valid: null
+        specifiedTradeSettlementLineMonetarySummation:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/NoteType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/NoteType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/NoteType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\ram\NoteType:
+    properties:
+        content:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/ReferencedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/ReferencedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/ReferencedDocumentType.yml	(revision 8435)
@@ -0,0 +1,10 @@
+horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType:
+    properties:
+        issuerAssignedID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        formattedIssueDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/SpecifiedPeriodType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/SpecifiedPeriodType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/SpecifiedPeriodType.yml	(revision 8435)
@@ -0,0 +1,8 @@
+horstoeko\zugferd\entities\basic\ram\SpecifiedPeriodType:
+    properties:
+        startDateTime:
+            -
+                Valid: null
+        endDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainEventType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainEventType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainEventType.yml	(revision 8435)
@@ -0,0 +1,9 @@
+horstoeko\zugferd\entities\basic\ram\SupplyChainEventType:
+    properties:
+        occurrenceDateTime:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeLineItemType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeLineItemType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeLineItemType.yml	(revision 8435)
@@ -0,0 +1,37 @@
+horstoeko\zugferd\entities\basic\ram\SupplyChainTradeLineItemType:
+    properties:
+        associatedDocumentLineDocument:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        specifiedTradeProduct:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        specifiedLineTradeAgreement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        specifiedLineTradeDelivery:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        specifiedLineTradeSettlement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeTransactionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
@@ -0,0 +1,30 @@
+horstoeko\zugferd\entities\basic\ram\SupplyChainTradeTransactionType:
+    properties:
+        includedSupplyChainTradeLineItem:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        applicableHeaderTradeAgreement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        applicableHeaderTradeDelivery:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        applicableHeaderTradeSettlement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TaxRegistrationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TaxRegistrationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TaxRegistrationType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\ram\TaxRegistrationType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAccountingAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAccountingAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAccountingAccountType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\ram\TradeAccountingAccountType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAddressType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAddressType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAddressType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\ram\TradeAddressType:
+    properties:
+        countryID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAllowanceChargeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAllowanceChargeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeAllowanceChargeType.yml	(revision 8435)
@@ -0,0 +1,17 @@
+horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType:
+    properties:
+        chargeIndicator:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        actualAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        categoryTradeTax:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePartyType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePartyType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePartyType.yml	(revision 8435)
@@ -0,0 +1,14 @@
+horstoeko\zugferd\entities\basic\ram\TradePartyType:
+    properties:
+        specifiedLegalOrganization:
+            -
+                Valid: null
+        postalTradeAddress:
+            -
+                Valid: null
+        uRIUniversalCommunication:
+            -
+                Valid: null
+        specifiedTaxRegistration:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePaymentTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePaymentTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePaymentTermsType.yml	(revision 8435)
@@ -0,0 +1,5 @@
+horstoeko\zugferd\entities\basic\ram\TradePaymentTermsType:
+    properties:
+        dueDateDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePriceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePriceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradePriceType.yml	(revision 8435)
@@ -0,0 +1,10 @@
+horstoeko\zugferd\entities\basic\ram\TradePriceType:
+    properties:
+        chargeAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        appliedTradeAllowanceCharge:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeProductType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeProductType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeProductType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\ram\TradeProductType:
+    properties:
+        name:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementHeaderMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,22 @@
+horstoeko\zugferd\entities\basic\ram\TradeSettlementHeaderMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        taxBasisTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        grandTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        duePayableAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementLineMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementLineMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementLineMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\ram\TradeSettlementLineMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementPaymentMeansType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basic\ram\TradeSettlementPaymentMeansType:
+    properties:
+        typeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        payerPartyDebtorFinancialAccount:
+            -
+                Valid: null
+        payeePartyCreditorFinancialAccount:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeTaxType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeTaxType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/TradeTaxType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\ram\TradeTaxType:
+    properties:
+        typeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        categoryCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/UniversalCommunicationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/UniversalCommunicationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/ram/UniversalCommunicationType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\ram\UniversalCommunicationType:
+    properties:
+        uRIID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/rsm/CrossIndustryInvoiceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
@@ -0,0 +1,23 @@
+horstoeko\zugferd\entities\basic\rsm\CrossIndustryInvoiceType:
+    properties:
+        exchangedDocumentContext:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        exchangedDocument:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        supplyChainTradeTransaction:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/udt/DateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\udt\DateTimeType\DateTimeStringAType:
+    properties:
+        format:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/udt/QuantityType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/udt/QuantityType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basic/udt/QuantityType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basic\udt\QuantityType:
+    properties:
+        unitCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/AllowanceChargeReasonCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
@@ -0,0 +1,204 @@
+horstoeko\zugferd\entities\basicwl\qdt\AllowanceChargeReasonCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - AA
+                        - AAA
+                        - AAC
+                        - AAD
+                        - AAE
+                        - AAF
+                        - AAH
+                        - AAI
+                        - AAS
+                        - AAT
+                        - AAV
+                        - AAY
+                        - AAZ
+                        - ABA
+                        - ABB
+                        - ABC
+                        - ABD
+                        - ABF
+                        - ABK
+                        - ABL
+                        - ABN
+                        - ABR
+                        - ABS
+                        - ABT
+                        - ABU
+                        - ACF
+                        - ACG
+                        - ACH
+                        - ACI
+                        - ACJ
+                        - ACK
+                        - ACL
+                        - ACM
+                        - ACS
+                        - ADC
+                        - ADE
+                        - ADJ
+                        - ADK
+                        - ADL
+                        - ADM
+                        - ADN
+                        - ADO
+                        - ADP
+                        - ADQ
+                        - ADR
+                        - ADT
+                        - ADW
+                        - ADY
+                        - ADZ
+                        - AEA
+                        - AEB
+                        - AEC
+                        - AED
+                        - AEF
+                        - AEH
+                        - AEI
+                        - AEJ
+                        - AEK
+                        - AEL
+                        - AEM
+                        - AEN
+                        - AEO
+                        - AEP
+                        - AES
+                        - AET
+                        - AEU
+                        - AEV
+                        - AEW
+                        - AEX
+                        - AEY
+                        - AEZ
+                        - AJ
+                        - AU
+                        - CA
+                        - CAB
+                        - CAD
+                        - CAE
+                        - CAF
+                        - CAI
+                        - CAJ
+                        - CAK
+                        - CAL
+                        - CAM
+                        - CAN
+                        - CAO
+                        - CAP
+                        - CAQ
+                        - CAR
+                        - CAS
+                        - CAT
+                        - CAU
+                        - CAV
+                        - CAW
+                        - CAX
+                        - CAY
+                        - CAZ
+                        - CD
+                        - CG
+                        - CS
+                        - CT
+                        - DAB
+                        - DAC
+                        - DAD
+                        - DAF
+                        - DAG
+                        - DAH
+                        - DAI
+                        - DAJ
+                        - DAK
+                        - DAL
+                        - DAM
+                        - DAN
+                        - DAO
+                        - DAP
+                        - DAQ
+                        - DL
+                        - EG
+                        - EP
+                        - ER
+                        - FAA
+                        - FAB
+                        - FAC
+                        - FC
+                        - FH
+                        - FI
+                        - GAA
+                        - HAA
+                        - HD
+                        - HH
+                        - IAA
+                        - IAB
+                        - ID
+                        - IF
+                        - IR
+                        - IS
+                        - KO
+                        - L1
+                        - LA
+                        - LAA
+                        - LAB
+                        - LF
+                        - MAE
+                        - MI
+                        - ML
+                        - NAA
+                        - OA
+                        - PA
+                        - PAA
+                        - PC
+                        - PL
+                        - RAB
+                        - RAC
+                        - RAD
+                        - RAF
+                        - RE
+                        - RF
+                        - RH
+                        - RV
+                        - SA
+                        - SAA
+                        - SAD
+                        - SAE
+                        - SAI
+                        - SG
+                        - SH
+                        - SM
+                        - SU
+                        - TAB
+                        - TAC
+                        - TT
+                        - TV
+                        - V1
+                        - V2
+                        - WH
+                        - XAA
+                        - YY
+                        - ZZZ
+                        - '41'
+                        - '42'
+                        - '60'
+                        - '62'
+                        - '63'
+                        - '64'
+                        - '65'
+                        - '66'
+                        - '67'
+                        - '68'
+                        - '70'
+                        - '71'
+                        - '88'
+                        - '95'
+                        - '100'
+                        - '102'
+                        - '103'
+                        - '104'
+                        - '105'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CountryIDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CountryIDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CountryIDType.yml	(revision 8435)
@@ -0,0 +1,259 @@
+horstoeko\zugferd\entities\basicwl\qdt\CountryIDType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - 1A
+                        - AD
+                        - AE
+                        - AF
+                        - AG
+                        - AI
+                        - AL
+                        - AM
+                        - AO
+                        - AQ
+                        - AR
+                        - AS
+                        - AT
+                        - AU
+                        - AW
+                        - AX
+                        - AZ
+                        - BA
+                        - BB
+                        - BD
+                        - BE
+                        - BF
+                        - BG
+                        - BH
+                        - BI
+                        - BJ
+                        - BL
+                        - BM
+                        - BN
+                        - BO
+                        - BQ
+                        - BR
+                        - BS
+                        - BT
+                        - BV
+                        - BW
+                        - BY
+                        - BZ
+                        - CA
+                        - CC
+                        - CD
+                        - CF
+                        - CG
+                        - CH
+                        - CI
+                        - CK
+                        - CL
+                        - CM
+                        - CN
+                        - CO
+                        - CR
+                        - CU
+                        - CV
+                        - CW
+                        - CX
+                        - CY
+                        - CZ
+                        - DE
+                        - DJ
+                        - DK
+                        - DM
+                        - DO
+                        - DZ
+                        - EC
+                        - EE
+                        - EG
+                        - EH
+                        - ER
+                        - ES
+                        - ET
+                        - FI
+                        - FJ
+                        - FK
+                        - FM
+                        - FO
+                        - FR
+                        - GA
+                        - GB
+                        - GD
+                        - GE
+                        - GF
+                        - GG
+                        - GH
+                        - GI
+                        - GL
+                        - GM
+                        - GN
+                        - GP
+                        - GQ
+                        - GR
+                        - GS
+                        - GT
+                        - GU
+                        - GW
+                        - GY
+                        - HK
+                        - HM
+                        - HN
+                        - HR
+                        - HT
+                        - HU
+                        - ID
+                        - IE
+                        - IL
+                        - IM
+                        - IN
+                        - IO
+                        - IQ
+                        - IR
+                        - IS
+                        - IT
+                        - JE
+                        - JM
+                        - JO
+                        - JP
+                        - KE
+                        - KG
+                        - KH
+                        - KI
+                        - KM
+                        - KN
+                        - KP
+                        - KR
+                        - KW
+                        - KY
+                        - KZ
+                        - LA
+                        - LB
+                        - LC
+                        - LI
+                        - LK
+                        - LR
+                        - LS
+                        - LT
+                        - LU
+                        - LV
+                        - LY
+                        - MA
+                        - MC
+                        - MD
+                        - ME
+                        - MF
+                        - MG
+                        - MH
+                        - MK
+                        - ML
+                        - MM
+                        - MN
+                        - MO
+                        - MP
+                        - MQ
+                        - MR
+                        - MS
+                        - MT
+                        - MU
+                        - MV
+                        - MW
+                        - MX
+                        - MY
+                        - MZ
+                        - NA
+                        - NC
+                        - NE
+                        - NF
+                        - NG
+                        - NI
+                        - NL
+                        - 'NO'
+                        - NP
+                        - NR
+                        - NU
+                        - NZ
+                        - OM
+                        - PA
+                        - PE
+                        - PF
+                        - PG
+                        - PH
+                        - PK
+                        - PL
+                        - PM
+                        - PN
+                        - PR
+                        - PS
+                        - PT
+                        - PW
+                        - PY
+                        - QA
+                        - RE
+                        - RO
+                        - RS
+                        - RU
+                        - RW
+                        - SA
+                        - SB
+                        - SC
+                        - SD
+                        - SE
+                        - SG
+                        - SH
+                        - SI
+                        - SJ
+                        - SK
+                        - SL
+                        - SM
+                        - SN
+                        - SO
+                        - SR
+                        - SS
+                        - ST
+                        - SV
+                        - SX
+                        - SY
+                        - SZ
+                        - TC
+                        - TD
+                        - TF
+                        - TG
+                        - TH
+                        - TJ
+                        - TK
+                        - TL
+                        - TM
+                        - TN
+                        - TO
+                        - TR
+                        - TT
+                        - TV
+                        - TW
+                        - TZ
+                        - UA
+                        - UG
+                        - UM
+                        - US
+                        - UY
+                        - UZ
+                        - VA
+                        - VC
+                        - VE
+                        - VG
+                        - VI
+                        - VN
+                        - VU
+                        - WF
+                        - WS
+                        - XI
+                        - YE
+                        - YT
+                        - ZA
+                        - ZM
+                        - ZW
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CurrencyCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CurrencyCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/CurrencyCodeType.yml	(revision 8435)
@@ -0,0 +1,187 @@
+horstoeko\zugferd\entities\basicwl\qdt\CurrencyCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - 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
+                        - 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
+                        - LYD
+                        - MAD
+                        - MDL
+                        - MGA
+                        - MKD
+                        - MMK
+                        - MNT
+                        - MOP
+                        - MRU
+                        - 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
+                        - RWF
+                        - SAR
+                        - SBD
+                        - SCR
+                        - SDG
+                        - SEK
+                        - SGD
+                        - SHP
+                        - SLL
+                        - SOS
+                        - SRD
+                        - SSP
+                        - STN
+                        - SVC
+                        - SYP
+                        - SZL
+                        - THB
+                        - TJS
+                        - TMT
+                        - TND
+                        - TOP
+                        - TRY
+                        - TTD
+                        - TWD
+                        - TZS
+                        - UAH
+                        - UGX
+                        - USD
+                        - USN
+                        - UYI
+                        - UYU
+                        - UYW
+                        - UZS
+                        - VES
+                        - VND
+                        - VUV
+                        - WST
+                        - XAF
+                        - XAG
+                        - XAU
+                        - XBA
+                        - XBB
+                        - XBC
+                        - XBD
+                        - XCD
+                        - XDR
+                        - XOF
+                        - XPD
+                        - XPF
+                        - XPT
+                        - XSU
+                        - XTS
+                        - XUA
+                        - XXX
+                        - YER
+                        - ZAR
+                        - ZMW
+                        - ZWL
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/DocumentCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/DocumentCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/DocumentCodeType.yml	(revision 8435)
@@ -0,0 +1,53 @@
+horstoeko\zugferd\entities\basicwl\qdt\DocumentCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '80'
+                        - '81'
+                        - '82'
+                        - '83'
+                        - '84'
+                        - '130'
+                        - '202'
+                        - '203'
+                        - '204'
+                        - '211'
+                        - '261'
+                        - '262'
+                        - '295'
+                        - '296'
+                        - '308'
+                        - '325'
+                        - '326'
+                        - '380'
+                        - '381'
+                        - '383'
+                        - '384'
+                        - '385'
+                        - '386'
+                        - '387'
+                        - '388'
+                        - '389'
+                        - '390'
+                        - '393'
+                        - '394'
+                        - '395'
+                        - '396'
+                        - '420'
+                        - '456'
+                        - '457'
+                        - '458'
+                        - '527'
+                        - '575'
+                        - '623'
+                        - '633'
+                        - '751'
+                        - '780'
+                        - '875'
+                        - '876'
+                        - '877'
+                        - '935'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType\DateTimeStringAType:
+    properties:
+        format:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/FormattedDateTimeType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType:
+    properties:
+        dateTimeString:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/PaymentMeansCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/PaymentMeansCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/PaymentMeansCodeType.yml	(revision 8435)
@@ -0,0 +1,19 @@
+horstoeko\zugferd\entities\basicwl\qdt\PaymentMeansCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '10'
+                        - '20'
+                        - '30'
+                        - '42'
+                        - '48'
+                        - '49'
+                        - '57'
+                        - '58'
+                        - '59'
+                        - '97'
+                        - ZZZ
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxCategoryCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxCategoryCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxCategoryCodeType.yml	(revision 8435)
@@ -0,0 +1,17 @@
+horstoeko\zugferd\entities\basicwl\qdt\TaxCategoryCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - AE
+                        - E
+                        - G
+                        - K
+                        - L
+                        - M
+                        - O
+                        - S
+                        - Z
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxTypeCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxTypeCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TaxTypeCodeType.yml	(revision 8435)
@@ -0,0 +1,9 @@
+horstoeko\zugferd\entities\basicwl\qdt\TaxTypeCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - VAT
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TimeReferenceCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TimeReferenceCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/qdt/TimeReferenceCodeType.yml	(revision 8435)
@@ -0,0 +1,11 @@
+horstoeko\zugferd\entities\basicwl\qdt\TimeReferenceCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '5'
+                        - '29'
+                        - '72'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/DebtorFinancialAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/DebtorFinancialAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/DebtorFinancialAccountType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basicwl\ram\DebtorFinancialAccountType:
+    properties:
+        iBANID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/DocumentContextParameterType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/DocumentContextParameterType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/DocumentContextParameterType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basicwl\ram\DocumentContextParameterType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentContextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentContextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentContextType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentContextType:
+    properties:
+        businessProcessSpecifiedDocumentContextParameter:
+            -
+                Valid: null
+        guidelineSpecifiedDocumentContextParameter:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ExchangedDocumentType.yml	(revision 8435)
@@ -0,0 +1,22 @@
+horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        typeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        issueDateTime:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        includedNote:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,25 @@
+horstoeko\zugferd\entities\basicwl\ram\HeaderTradeAgreementType:
+    properties:
+        sellerTradeParty:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        buyerTradeParty:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        sellerTaxRepresentativeTradeParty:
+            -
+                Valid: null
+        buyerOrderReferencedDocument:
+            -
+                Valid: null
+        contractReferencedDocument:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,11 @@
+horstoeko\zugferd\entities\basicwl\ram\HeaderTradeDeliveryType:
+    properties:
+        shipToTradeParty:
+            -
+                Valid: null
+        actualDeliverySupplyChainEvent:
+            -
+                Valid: null
+        despatchAdviceReferencedDocument:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/HeaderTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,42 @@
+horstoeko\zugferd\entities\basicwl\ram\HeaderTradeSettlementType:
+    properties:
+        invoiceCurrencyCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        payeeTradeParty:
+            -
+                Valid: null
+        specifiedTradeSettlementPaymentMeans:
+            -
+                Valid: null
+        applicableTradeTax:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        billingSpecifiedPeriod:
+            -
+                Valid: null
+        specifiedTradeAllowanceCharge:
+            -
+                Valid: null
+        specifiedTradePaymentTerms:
+            -
+                Valid: null
+        specifiedTradeSettlementHeaderMonetarySummation:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        invoiceReferencedDocument:
+            -
+                Valid: null
+        receivableSpecifiedTradeAccountingAccount:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/NoteType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/NoteType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/NoteType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basicwl\ram\NoteType:
+    properties:
+        content:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ReferencedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ReferencedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/ReferencedDocumentType.yml	(revision 8435)
@@ -0,0 +1,10 @@
+horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType:
+    properties:
+        issuerAssignedID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        formattedIssueDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SpecifiedPeriodType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SpecifiedPeriodType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SpecifiedPeriodType.yml	(revision 8435)
@@ -0,0 +1,8 @@
+horstoeko\zugferd\entities\basicwl\ram\SpecifiedPeriodType:
+    properties:
+        startDateTime:
+            -
+                Valid: null
+        endDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainEventType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainEventType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainEventType.yml	(revision 8435)
@@ -0,0 +1,9 @@
+horstoeko\zugferd\entities\basicwl\ram\SupplyChainEventType:
+    properties:
+        occurrenceDateTime:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainTradeTransactionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
@@ -0,0 +1,23 @@
+horstoeko\zugferd\entities\basicwl\ram\SupplyChainTradeTransactionType:
+    properties:
+        applicableHeaderTradeAgreement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        applicableHeaderTradeDelivery:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        applicableHeaderTradeSettlement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TaxRegistrationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TaxRegistrationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TaxRegistrationType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basicwl\ram\TaxRegistrationType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAccountingAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAccountingAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAccountingAccountType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basicwl\ram\TradeAccountingAccountType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAddressType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAddressType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAddressType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basicwl\ram\TradeAddressType:
+    properties:
+        countryID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAllowanceChargeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAllowanceChargeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeAllowanceChargeType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\basicwl\ram\TradeAllowanceChargeType:
+    properties:
+        chargeIndicator:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        actualAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        categoryTradeTax:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePartyType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePartyType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePartyType.yml	(revision 8435)
@@ -0,0 +1,14 @@
+horstoeko\zugferd\entities\basicwl\ram\TradePartyType:
+    properties:
+        specifiedLegalOrganization:
+            -
+                Valid: null
+        postalTradeAddress:
+            -
+                Valid: null
+        uRIUniversalCommunication:
+            -
+                Valid: null
+        specifiedTaxRegistration:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePaymentTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePaymentTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradePaymentTermsType.yml	(revision 8435)
@@ -0,0 +1,5 @@
+horstoeko\zugferd\entities\basicwl\ram\TradePaymentTermsType:
+    properties:
+        dueDateDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,22 @@
+horstoeko\zugferd\entities\basicwl\ram\TradeSettlementHeaderMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        taxBasisTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        grandTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        duePayableAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementPaymentMeansType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basicwl\ram\TradeSettlementPaymentMeansType:
+    properties:
+        typeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        payerPartyDebtorFinancialAccount:
+            -
+                Valid: null
+        payeePartyCreditorFinancialAccount:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeTaxType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeTaxType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/TradeTaxType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basicwl\ram\TradeTaxType:
+    properties:
+        typeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        categoryCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/UniversalCommunicationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/UniversalCommunicationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/ram/UniversalCommunicationType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basicwl\ram\UniversalCommunicationType:
+    properties:
+        uRIID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/rsm/CrossIndustryInvoiceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
@@ -0,0 +1,23 @@
+horstoeko\zugferd\entities\basicwl\rsm\CrossIndustryInvoiceType:
+    properties:
+        exchangedDocumentContext:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        exchangedDocument:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        supplyChainTradeTransaction:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/udt/DateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/basicwl/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\basicwl\udt\DateTimeType\DateTimeStringAType:
+    properties:
+        format:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/AllowanceChargeReasonCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
@@ -0,0 +1,204 @@
+horstoeko\zugferd\entities\en16931\qdt\AllowanceChargeReasonCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - AA
+                        - AAA
+                        - AAC
+                        - AAD
+                        - AAE
+                        - AAF
+                        - AAH
+                        - AAI
+                        - AAS
+                        - AAT
+                        - AAV
+                        - AAY
+                        - AAZ
+                        - ABA
+                        - ABB
+                        - ABC
+                        - ABD
+                        - ABF
+                        - ABK
+                        - ABL
+                        - ABN
+                        - ABR
+                        - ABS
+                        - ABT
+                        - ABU
+                        - ACF
+                        - ACG
+                        - ACH
+                        - ACI
+                        - ACJ
+                        - ACK
+                        - ACL
+                        - ACM
+                        - ACS
+                        - ADC
+                        - ADE
+                        - ADJ
+                        - ADK
+                        - ADL
+                        - ADM
+                        - ADN
+                        - ADO
+                        - ADP
+                        - ADQ
+                        - ADR
+                        - ADT
+                        - ADW
+                        - ADY
+                        - ADZ
+                        - AEA
+                        - AEB
+                        - AEC
+                        - AED
+                        - AEF
+                        - AEH
+                        - AEI
+                        - AEJ
+                        - AEK
+                        - AEL
+                        - AEM
+                        - AEN
+                        - AEO
+                        - AEP
+                        - AES
+                        - AET
+                        - AEU
+                        - AEV
+                        - AEW
+                        - AEX
+                        - AEY
+                        - AEZ
+                        - AJ
+                        - AU
+                        - CA
+                        - CAB
+                        - CAD
+                        - CAE
+                        - CAF
+                        - CAI
+                        - CAJ
+                        - CAK
+                        - CAL
+                        - CAM
+                        - CAN
+                        - CAO
+                        - CAP
+                        - CAQ
+                        - CAR
+                        - CAS
+                        - CAT
+                        - CAU
+                        - CAV
+                        - CAW
+                        - CAX
+                        - CAY
+                        - CAZ
+                        - CD
+                        - CG
+                        - CS
+                        - CT
+                        - DAB
+                        - DAC
+                        - DAD
+                        - DAF
+                        - DAG
+                        - DAH
+                        - DAI
+                        - DAJ
+                        - DAK
+                        - DAL
+                        - DAM
+                        - DAN
+                        - DAO
+                        - DAP
+                        - DAQ
+                        - DL
+                        - EG
+                        - EP
+                        - ER
+                        - FAA
+                        - FAB
+                        - FAC
+                        - FC
+                        - FH
+                        - FI
+                        - GAA
+                        - HAA
+                        - HD
+                        - HH
+                        - IAA
+                        - IAB
+                        - ID
+                        - IF
+                        - IR
+                        - IS
+                        - KO
+                        - L1
+                        - LA
+                        - LAA
+                        - LAB
+                        - LF
+                        - MAE
+                        - MI
+                        - ML
+                        - NAA
+                        - OA
+                        - PA
+                        - PAA
+                        - PC
+                        - PL
+                        - RAB
+                        - RAC
+                        - RAD
+                        - RAF
+                        - RE
+                        - RF
+                        - RH
+                        - RV
+                        - SA
+                        - SAA
+                        - SAD
+                        - SAE
+                        - SAI
+                        - SG
+                        - SH
+                        - SM
+                        - SU
+                        - TAB
+                        - TAC
+                        - TT
+                        - TV
+                        - V1
+                        - V2
+                        - WH
+                        - XAA
+                        - YY
+                        - ZZZ
+                        - '41'
+                        - '42'
+                        - '60'
+                        - '62'
+                        - '63'
+                        - '64'
+                        - '65'
+                        - '66'
+                        - '67'
+                        - '68'
+                        - '70'
+                        - '71'
+                        - '88'
+                        - '95'
+                        - '100'
+                        - '102'
+                        - '103'
+                        - '104'
+                        - '105'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/CountryIDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/CountryIDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/CountryIDType.yml	(revision 8435)
@@ -0,0 +1,259 @@
+horstoeko\zugferd\entities\en16931\qdt\CountryIDType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - 1A
+                        - AD
+                        - AE
+                        - AF
+                        - AG
+                        - AI
+                        - AL
+                        - AM
+                        - AO
+                        - AQ
+                        - AR
+                        - AS
+                        - AT
+                        - AU
+                        - AW
+                        - AX
+                        - AZ
+                        - BA
+                        - BB
+                        - BD
+                        - BE
+                        - BF
+                        - BG
+                        - BH
+                        - BI
+                        - BJ
+                        - BL
+                        - BM
+                        - BN
+                        - BO
+                        - BQ
+                        - BR
+                        - BS
+                        - BT
+                        - BV
+                        - BW
+                        - BY
+                        - BZ
+                        - CA
+                        - CC
+                        - CD
+                        - CF
+                        - CG
+                        - CH
+                        - CI
+                        - CK
+                        - CL
+                        - CM
+                        - CN
+                        - CO
+                        - CR
+                        - CU
+                        - CV
+                        - CW
+                        - CX
+                        - CY
+                        - CZ
+                        - DE
+                        - DJ
+                        - DK
+                        - DM
+                        - DO
+                        - DZ
+                        - EC
+                        - EE
+                        - EG
+                        - EH
+                        - ER
+                        - ES
+                        - ET
+                        - FI
+                        - FJ
+                        - FK
+                        - FM
+                        - FO
+                        - FR
+                        - GA
+                        - GB
+                        - GD
+                        - GE
+                        - GF
+                        - GG
+                        - GH
+                        - GI
+                        - GL
+                        - GM
+                        - GN
+                        - GP
+                        - GQ
+                        - GR
+                        - GS
+                        - GT
+                        - GU
+                        - GW
+                        - GY
+                        - HK
+                        - HM
+                        - HN
+                        - HR
+                        - HT
+                        - HU
+                        - ID
+                        - IE
+                        - IL
+                        - IM
+                        - IN
+                        - IO
+                        - IQ
+                        - IR
+                        - IS
+                        - IT
+                        - JE
+                        - JM
+                        - JO
+                        - JP
+                        - KE
+                        - KG
+                        - KH
+                        - KI
+                        - KM
+                        - KN
+                        - KP
+                        - KR
+                        - KW
+                        - KY
+                        - KZ
+                        - LA
+                        - LB
+                        - LC
+                        - LI
+                        - LK
+                        - LR
+                        - LS
+                        - LT
+                        - LU
+                        - LV
+                        - LY
+                        - MA
+                        - MC
+                        - MD
+                        - ME
+                        - MF
+                        - MG
+                        - MH
+                        - MK
+                        - ML
+                        - MM
+                        - MN
+                        - MO
+                        - MP
+                        - MQ
+                        - MR
+                        - MS
+                        - MT
+                        - MU
+                        - MV
+                        - MW
+                        - MX
+                        - MY
+                        - MZ
+                        - NA
+                        - NC
+                        - NE
+                        - NF
+                        - NG
+                        - NI
+                        - NL
+                        - 'NO'
+                        - NP
+                        - NR
+                        - NU
+                        - NZ
+                        - OM
+                        - PA
+                        - PE
+                        - PF
+                        - PG
+                        - PH
+                        - PK
+                        - PL
+                        - PM
+                        - PN
+                        - PR
+                        - PS
+                        - PT
+                        - PW
+                        - PY
+                        - QA
+                        - RE
+                        - RO
+                        - RS
+                        - RU
+                        - RW
+                        - SA
+                        - SB
+                        - SC
+                        - SD
+                        - SE
+                        - SG
+                        - SH
+                        - SI
+                        - SJ
+                        - SK
+                        - SL
+                        - SM
+                        - SN
+                        - SO
+                        - SR
+                        - SS
+                        - ST
+                        - SV
+                        - SX
+                        - SY
+                        - SZ
+                        - TC
+                        - TD
+                        - TF
+                        - TG
+                        - TH
+                        - TJ
+                        - TK
+                        - TL
+                        - TM
+                        - TN
+                        - TO
+                        - TR
+                        - TT
+                        - TV
+                        - TW
+                        - TZ
+                        - UA
+                        - UG
+                        - UM
+                        - US
+                        - UY
+                        - UZ
+                        - VA
+                        - VC
+                        - VE
+                        - VG
+                        - VI
+                        - VN
+                        - VU
+                        - WF
+                        - WS
+                        - XI
+                        - YE
+                        - YT
+                        - ZA
+                        - ZM
+                        - ZW
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/CurrencyCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/CurrencyCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/CurrencyCodeType.yml	(revision 8435)
@@ -0,0 +1,187 @@
+horstoeko\zugferd\entities\en16931\qdt\CurrencyCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - 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
+                        - 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
+                        - LYD
+                        - MAD
+                        - MDL
+                        - MGA
+                        - MKD
+                        - MMK
+                        - MNT
+                        - MOP
+                        - MRU
+                        - 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
+                        - RWF
+                        - SAR
+                        - SBD
+                        - SCR
+                        - SDG
+                        - SEK
+                        - SGD
+                        - SHP
+                        - SLL
+                        - SOS
+                        - SRD
+                        - SSP
+                        - STN
+                        - SVC
+                        - SYP
+                        - SZL
+                        - THB
+                        - TJS
+                        - TMT
+                        - TND
+                        - TOP
+                        - TRY
+                        - TTD
+                        - TWD
+                        - TZS
+                        - UAH
+                        - UGX
+                        - USD
+                        - USN
+                        - UYI
+                        - UYU
+                        - UYW
+                        - UZS
+                        - VES
+                        - VND
+                        - VUV
+                        - WST
+                        - XAF
+                        - XAG
+                        - XAU
+                        - XBA
+                        - XBB
+                        - XBC
+                        - XBD
+                        - XCD
+                        - XDR
+                        - XOF
+                        - XPD
+                        - XPF
+                        - XPT
+                        - XSU
+                        - XTS
+                        - XUA
+                        - XXX
+                        - YER
+                        - ZAR
+                        - ZMW
+                        - ZWL
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/DocumentCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/DocumentCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/DocumentCodeType.yml	(revision 8435)
@@ -0,0 +1,55 @@
+horstoeko\zugferd\entities\en16931\qdt\DocumentCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '50'
+                        - '80'
+                        - '81'
+                        - '82'
+                        - '83'
+                        - '84'
+                        - '130'
+                        - '202'
+                        - '203'
+                        - '204'
+                        - '211'
+                        - '261'
+                        - '262'
+                        - '295'
+                        - '296'
+                        - '308'
+                        - '325'
+                        - '326'
+                        - '380'
+                        - '381'
+                        - '383'
+                        - '384'
+                        - '385'
+                        - '386'
+                        - '387'
+                        - '388'
+                        - '389'
+                        - '390'
+                        - '393'
+                        - '394'
+                        - '395'
+                        - '396'
+                        - '420'
+                        - '456'
+                        - '457'
+                        - '458'
+                        - '527'
+                        - '575'
+                        - '623'
+                        - '633'
+                        - '751'
+                        - '780'
+                        - '875'
+                        - '876'
+                        - '877'
+                        - '916'
+                        - '935'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType\DateTimeStringAType:
+    properties:
+        format:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/FormattedDateTimeType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType:
+    properties:
+        dateTimeString:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/PaymentMeansCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/PaymentMeansCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/PaymentMeansCodeType.yml	(revision 8435)
@@ -0,0 +1,91 @@
+horstoeko\zugferd\entities\en16931\qdt\PaymentMeansCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '1'
+                        - '2'
+                        - '3'
+                        - '4'
+                        - '5'
+                        - '6'
+                        - '7'
+                        - '8'
+                        - '9'
+                        - '10'
+                        - '11'
+                        - '12'
+                        - '13'
+                        - '14'
+                        - '15'
+                        - '16'
+                        - '17'
+                        - '18'
+                        - '19'
+                        - '20'
+                        - '21'
+                        - '22'
+                        - '23'
+                        - '24'
+                        - '25'
+                        - '26'
+                        - '27'
+                        - '28'
+                        - '29'
+                        - '30'
+                        - '31'
+                        - '32'
+                        - '33'
+                        - '34'
+                        - '35'
+                        - '36'
+                        - '37'
+                        - '38'
+                        - '39'
+                        - '40'
+                        - '41'
+                        - '42'
+                        - '43'
+                        - '44'
+                        - '45'
+                        - '46'
+                        - '47'
+                        - '48'
+                        - '49'
+                        - '50'
+                        - '51'
+                        - '52'
+                        - '53'
+                        - '54'
+                        - '55'
+                        - '56'
+                        - '57'
+                        - '58'
+                        - '59'
+                        - '60'
+                        - '61'
+                        - '62'
+                        - '63'
+                        - '64'
+                        - '65'
+                        - '66'
+                        - '67'
+                        - '68'
+                        - '69'
+                        - '70'
+                        - '74'
+                        - '75'
+                        - '76'
+                        - '77'
+                        - '78'
+                        - '91'
+                        - '92'
+                        - '93'
+                        - '94'
+                        - '95'
+                        - '96'
+                        - '97'
+                        - ZZZ
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/ReferenceCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/ReferenceCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/ReferenceCodeType.yml	(revision 8435)
@@ -0,0 +1,825 @@
+horstoeko\zugferd\entities\en16931\qdt\ReferenceCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - AAA
+                        - AAB
+                        - AAC
+                        - AAD
+                        - AAE
+                        - AAF
+                        - AAG
+                        - AAH
+                        - AAI
+                        - AAJ
+                        - AAK
+                        - AAL
+                        - AAM
+                        - AAN
+                        - AAO
+                        - AAP
+                        - AAQ
+                        - AAR
+                        - AAS
+                        - AAT
+                        - AAU
+                        - AAV
+                        - AAW
+                        - AAX
+                        - AAY
+                        - AAZ
+                        - ABA
+                        - ABB
+                        - ABC
+                        - ABD
+                        - ABE
+                        - ABF
+                        - ABG
+                        - ABH
+                        - ABI
+                        - ABJ
+                        - ABK
+                        - ABL
+                        - ABM
+                        - ABN
+                        - ABO
+                        - ABP
+                        - ABQ
+                        - ABR
+                        - ABS
+                        - ABT
+                        - ABU
+                        - ABV
+                        - ABW
+                        - ABX
+                        - ABY
+                        - ABZ
+                        - AC
+                        - ACA
+                        - ACB
+                        - ACC
+                        - ACD
+                        - ACE
+                        - ACF
+                        - ACG
+                        - ACH
+                        - ACI
+                        - ACJ
+                        - ACK
+                        - ACL
+                        - ACN
+                        - ACO
+                        - ACP
+                        - ACQ
+                        - ACR
+                        - ACT
+                        - ACU
+                        - ACV
+                        - ACW
+                        - ACX
+                        - ACY
+                        - ACZ
+                        - ADA
+                        - ADB
+                        - ADC
+                        - ADD
+                        - ADE
+                        - ADF
+                        - ADG
+                        - ADI
+                        - ADJ
+                        - ADK
+                        - ADL
+                        - ADM
+                        - ADN
+                        - ADO
+                        - ADP
+                        - ADQ
+                        - ADT
+                        - ADU
+                        - ADV
+                        - ADW
+                        - ADX
+                        - ADY
+                        - ADZ
+                        - AE
+                        - AEA
+                        - AEB
+                        - AEC
+                        - AED
+                        - AEE
+                        - AEF
+                        - AEG
+                        - AEH
+                        - AEI
+                        - AEJ
+                        - AEK
+                        - AEL
+                        - AEM
+                        - AEN
+                        - AEO
+                        - AEP
+                        - AEQ
+                        - AER
+                        - AES
+                        - AET
+                        - AEU
+                        - AEV
+                        - AEW
+                        - AEX
+                        - AEY
+                        - AEZ
+                        - AF
+                        - AFA
+                        - AFB
+                        - AFC
+                        - AFD
+                        - AFE
+                        - AFF
+                        - AFG
+                        - AFH
+                        - AFI
+                        - AFJ
+                        - AFK
+                        - AFL
+                        - AFM
+                        - AFN
+                        - AFO
+                        - AFP
+                        - AFQ
+                        - AFR
+                        - AFS
+                        - AFT
+                        - AFU
+                        - AFV
+                        - AFW
+                        - AFX
+                        - AFY
+                        - AFZ
+                        - AGA
+                        - AGB
+                        - AGC
+                        - AGD
+                        - AGE
+                        - AGF
+                        - AGG
+                        - AGH
+                        - AGI
+                        - AGJ
+                        - AGK
+                        - AGL
+                        - AGM
+                        - AGN
+                        - AGO
+                        - AGP
+                        - AGQ
+                        - AGR
+                        - AGS
+                        - AGT
+                        - AGU
+                        - AGV
+                        - AGW
+                        - AGX
+                        - AGY
+                        - AGZ
+                        - AHA
+                        - AHB
+                        - AHC
+                        - AHD
+                        - AHE
+                        - AHF
+                        - AHG
+                        - AHH
+                        - AHI
+                        - AHJ
+                        - AHK
+                        - AHL
+                        - AHM
+                        - AHN
+                        - AHO
+                        - AHP
+                        - AHQ
+                        - AHR
+                        - AHS
+                        - AHT
+                        - AHU
+                        - AHV
+                        - AHX
+                        - AHY
+                        - AHZ
+                        - AIA
+                        - AIB
+                        - AIC
+                        - AID
+                        - AIE
+                        - AIF
+                        - AIG
+                        - AIH
+                        - AII
+                        - AIJ
+                        - AIK
+                        - AIL
+                        - AIM
+                        - AIN
+                        - AIO
+                        - AIP
+                        - AIQ
+                        - AIR
+                        - AIS
+                        - AIT
+                        - AIU
+                        - AIV
+                        - AIW
+                        - AIX
+                        - AIY
+                        - AIZ
+                        - AJA
+                        - AJB
+                        - AJC
+                        - AJD
+                        - AJE
+                        - AJF
+                        - AJG
+                        - AJH
+                        - AJI
+                        - AJJ
+                        - AJK
+                        - AJL
+                        - AJM
+                        - AJN
+                        - AJO
+                        - AJP
+                        - AJQ
+                        - AJR
+                        - AJS
+                        - AJT
+                        - AJU
+                        - AJV
+                        - AJW
+                        - AJX
+                        - AJY
+                        - AJZ
+                        - AKA
+                        - AKB
+                        - AKC
+                        - AKD
+                        - AKE
+                        - AKF
+                        - AKG
+                        - AKH
+                        - AKI
+                        - AKJ
+                        - AKK
+                        - AKL
+                        - AKM
+                        - AKN
+                        - AKO
+                        - AKP
+                        - AKQ
+                        - AKR
+                        - AKS
+                        - AKT
+                        - AKU
+                        - AKV
+                        - AKW
+                        - AKX
+                        - AKY
+                        - AKZ
+                        - ALA
+                        - ALB
+                        - ALC
+                        - ALD
+                        - ALE
+                        - ALF
+                        - ALG
+                        - ALH
+                        - ALI
+                        - ALJ
+                        - ALK
+                        - ALL
+                        - ALM
+                        - ALN
+                        - ALO
+                        - ALP
+                        - ALQ
+                        - ALR
+                        - ALS
+                        - ALT
+                        - ALU
+                        - ALV
+                        - ALW
+                        - ALX
+                        - ALY
+                        - ALZ
+                        - AMA
+                        - AMB
+                        - AMC
+                        - AMD
+                        - AME
+                        - AMF
+                        - AMG
+                        - AMH
+                        - AMI
+                        - AMJ
+                        - AMK
+                        - AML
+                        - AMM
+                        - AMN
+                        - AMO
+                        - AMP
+                        - AMQ
+                        - AMR
+                        - AMS
+                        - AMT
+                        - AMU
+                        - AMV
+                        - AMW
+                        - AMX
+                        - AMY
+                        - AMZ
+                        - ANA
+                        - ANB
+                        - ANC
+                        - AND
+                        - ANE
+                        - ANF
+                        - ANG
+                        - ANH
+                        - ANI
+                        - ANJ
+                        - ANK
+                        - ANL
+                        - ANM
+                        - ANN
+                        - ANO
+                        - ANP
+                        - ANQ
+                        - ANR
+                        - ANS
+                        - ANT
+                        - ANU
+                        - ANV
+                        - ANW
+                        - ANX
+                        - ANY
+                        - AOA
+                        - AOD
+                        - AOE
+                        - AOF
+                        - AOG
+                        - AOH
+                        - AOI
+                        - AOJ
+                        - AOK
+                        - AOL
+                        - AOM
+                        - AON
+                        - AOO
+                        - AOP
+                        - AOQ
+                        - AOR
+                        - AOS
+                        - AOT
+                        - AOU
+                        - AOV
+                        - AOW
+                        - AOX
+                        - AOY
+                        - AOZ
+                        - AP
+                        - APA
+                        - APB
+                        - APC
+                        - APD
+                        - APE
+                        - APF
+                        - APG
+                        - APH
+                        - API
+                        - APJ
+                        - APK
+                        - APL
+                        - APM
+                        - APN
+                        - APO
+                        - APP
+                        - APQ
+                        - APR
+                        - APS
+                        - APT
+                        - APU
+                        - APV
+                        - APW
+                        - APX
+                        - APY
+                        - APZ
+                        - AQA
+                        - AQB
+                        - AQC
+                        - AQD
+                        - AQE
+                        - AQF
+                        - AQG
+                        - AQH
+                        - AQI
+                        - AQJ
+                        - AQK
+                        - AQL
+                        - AQM
+                        - AQN
+                        - AQO
+                        - AQP
+                        - AQQ
+                        - AQR
+                        - AQS
+                        - AQT
+                        - AQU
+                        - AQV
+                        - AQW
+                        - AQX
+                        - AQY
+                        - AQZ
+                        - ARA
+                        - ARB
+                        - ARC
+                        - ARD
+                        - ARE
+                        - ARF
+                        - ARG
+                        - ARH
+                        - ARI
+                        - ARJ
+                        - ARK
+                        - ARL
+                        - ARM
+                        - ARN
+                        - ARO
+                        - ARP
+                        - ARQ
+                        - ARR
+                        - ARS
+                        - ART
+                        - ARU
+                        - ARV
+                        - ARW
+                        - ARX
+                        - ARY
+                        - ARZ
+                        - ASA
+                        - ASB
+                        - ASC
+                        - ASD
+                        - ASE
+                        - ASF
+                        - ASG
+                        - ASH
+                        - ASI
+                        - ASJ
+                        - ASK
+                        - ASL
+                        - ASM
+                        - ASN
+                        - ASO
+                        - ASP
+                        - ASQ
+                        - ASR
+                        - ASS
+                        - AST
+                        - ASU
+                        - ASV
+                        - ASW
+                        - ASX
+                        - ASY
+                        - ASZ
+                        - ATA
+                        - ATB
+                        - ATC
+                        - ATD
+                        - ATE
+                        - ATF
+                        - ATG
+                        - ATH
+                        - ATI
+                        - ATJ
+                        - ATK
+                        - ATL
+                        - ATM
+                        - ATN
+                        - ATO
+                        - ATP
+                        - ATQ
+                        - ATR
+                        - ATS
+                        - ATT
+                        - ATU
+                        - ATV
+                        - ATW
+                        - ATX
+                        - ATY
+                        - ATZ
+                        - AU
+                        - AUA
+                        - AUB
+                        - AUC
+                        - AUD
+                        - AUE
+                        - AUF
+                        - AUG
+                        - AUH
+                        - AUI
+                        - AUJ
+                        - AUK
+                        - AUL
+                        - AUM
+                        - AUN
+                        - AUO
+                        - AUP
+                        - AUQ
+                        - AUR
+                        - AUS
+                        - AUT
+                        - AUU
+                        - AUV
+                        - AUW
+                        - AUX
+                        - AUY
+                        - AUZ
+                        - AV
+                        - AVA
+                        - AVB
+                        - AVC
+                        - AVD
+                        - AVE
+                        - AVF
+                        - AVG
+                        - AVH
+                        - AVI
+                        - AVJ
+                        - AVK
+                        - AVL
+                        - AVM
+                        - AVN
+                        - AVO
+                        - AVP
+                        - AVQ
+                        - AVR
+                        - AVS
+                        - AVT
+                        - AVU
+                        - AVV
+                        - AVW
+                        - AVX
+                        - AVY
+                        - AVZ
+                        - AWA
+                        - AWB
+                        - AWC
+                        - AWD
+                        - AWE
+                        - AWF
+                        - AWG
+                        - AWH
+                        - AWI
+                        - AWJ
+                        - AWK
+                        - AWL
+                        - AWM
+                        - AWN
+                        - AWO
+                        - AWP
+                        - AWQ
+                        - AWR
+                        - AWS
+                        - AWT
+                        - AWU
+                        - AWV
+                        - AWW
+                        - AWX
+                        - AWY
+                        - AWZ
+                        - AXA
+                        - AXB
+                        - AXC
+                        - AXD
+                        - AXE
+                        - AXF
+                        - AXG
+                        - AXH
+                        - AXI
+                        - AXJ
+                        - AXK
+                        - AXL
+                        - AXM
+                        - AXN
+                        - AXO
+                        - AXP
+                        - AXQ
+                        - AXR
+                        - AXS
+                        - BA
+                        - BC
+                        - BD
+                        - BE
+                        - BH
+                        - BM
+                        - BN
+                        - BO
+                        - BR
+                        - BT
+                        - BTP
+                        - BW
+                        - CAS
+                        - CAT
+                        - CAU
+                        - CAV
+                        - CAW
+                        - CAX
+                        - CAY
+                        - CAZ
+                        - CBA
+                        - CBB
+                        - CD
+                        - CEC
+                        - CED
+                        - CFE
+                        - CFF
+                        - CFO
+                        - CG
+                        - CH
+                        - CK
+                        - CKN
+                        - CM
+                        - CMR
+                        - CN
+                        - CNO
+                        - COF
+                        - CP
+                        - CR
+                        - CRN
+                        - CS
+                        - CST
+                        - CT
+                        - CU
+                        - CV
+                        - CW
+                        - CZ
+                        - DA
+                        - DAN
+                        - DB
+                        - DI
+                        - DL
+                        - DM
+                        - DQ
+                        - DR
+                        - EA
+                        - EB
+                        - ED
+                        - EE
+                        - EEP
+                        - EI
+                        - EN
+                        - EQ
+                        - ER
+                        - ERN
+                        - ET
+                        - EX
+                        - FC
+                        - FF
+                        - FI
+                        - FLW
+                        - FN
+                        - FO
+                        - FS
+                        - FT
+                        - FV
+                        - FX
+                        - GA
+                        - GC
+                        - GD
+                        - GDN
+                        - GN
+                        - HS
+                        - HWB
+                        - IA
+                        - IB
+                        - ICA
+                        - ICE
+                        - ICO
+                        - II
+                        - IL
+                        - INB
+                        - INN
+                        - INO
+                        - IP
+                        - IS
+                        - IT
+                        - IV
+                        - JB
+                        - JE
+                        - LA
+                        - LAN
+                        - LAR
+                        - LB
+                        - LC
+                        - LI
+                        - LO
+                        - LRC
+                        - LS
+                        - MA
+                        - MB
+                        - MF
+                        - MG
+                        - MH
+                        - MR
+                        - MRN
+                        - MS
+                        - MSS
+                        - MWB
+                        - NA
+                        - NF
+                        - OH
+                        - OI
+                        - 'ON'
+                        - OP
+                        - OR
+                        - PB
+                        - PC
+                        - PD
+                        - PE
+                        - PF
+                        - PI
+                        - PK
+                        - PL
+                        - POR
+                        - PP
+                        - PQ
+                        - PR
+                        - PS
+                        - PW
+                        - PY
+                        - RA
+                        - RC
+                        - RCN
+                        - RE
+                        - REN
+                        - RF
+                        - RR
+                        - RT
+                        - SA
+                        - SB
+                        - SD
+                        - SE
+                        - SEA
+                        - SF
+                        - SH
+                        - SI
+                        - SM
+                        - SN
+                        - SP
+                        - SQ
+                        - SRN
+                        - SS
+                        - STA
+                        - SW
+                        - SZ
+                        - TB
+                        - TCR
+                        - TE
+                        - TF
+                        - TI
+                        - TIN
+                        - TL
+                        - TN
+                        - TP
+                        - UAR
+                        - UC
+                        - UCN
+                        - UN
+                        - UO
+                        - URI
+                        - VA
+                        - VC
+                        - VGR
+                        - VM
+                        - VN
+                        - VON
+                        - VOR
+                        - VP
+                        - VR
+                        - VS
+                        - VT
+                        - VV
+                        - WE
+                        - WM
+                        - WN
+                        - WR
+                        - WS
+                        - WY
+                        - XA
+                        - XC
+                        - XP
+                        - ZZZ
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxCategoryCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxCategoryCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxCategoryCodeType.yml	(revision 8435)
@@ -0,0 +1,17 @@
+horstoeko\zugferd\entities\en16931\qdt\TaxCategoryCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - AE
+                        - E
+                        - G
+                        - K
+                        - L
+                        - M
+                        - O
+                        - S
+                        - Z
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxTypeCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxTypeCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TaxTypeCodeType.yml	(revision 8435)
@@ -0,0 +1,62 @@
+horstoeko\zugferd\entities\en16931\qdt\TaxTypeCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - AAA
+                        - AAB
+                        - AAC
+                        - AAD
+                        - AAE
+                        - AAF
+                        - AAG
+                        - AAH
+                        - AAI
+                        - AAJ
+                        - AAK
+                        - AAL
+                        - AAM
+                        - ADD
+                        - BOL
+                        - CAP
+                        - CAR
+                        - COC
+                        - CST
+                        - CUD
+                        - CVD
+                        - ENV
+                        - EXC
+                        - EXP
+                        - FET
+                        - FRE
+                        - GCN
+                        - GST
+                        - ILL
+                        - IMP
+                        - IND
+                        - LAC
+                        - LCN
+                        - LDP
+                        - LOC
+                        - LST
+                        - MCA
+                        - MCD
+                        - OTH
+                        - PDB
+                        - PDC
+                        - PRF
+                        - SCN
+                        - SSS
+                        - STT
+                        - SUP
+                        - SUR
+                        - SWT
+                        - TAC
+                        - TOT
+                        - TOX
+                        - TTA
+                        - VAD
+                        - VAT
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TimeReferenceCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TimeReferenceCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/qdt/TimeReferenceCodeType.yml	(revision 8435)
@@ -0,0 +1,11 @@
+horstoeko\zugferd\entities\en16931\qdt\TimeReferenceCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '5'
+                        - '29'
+                        - '72'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/CreditorFinancialInstitutionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/CreditorFinancialInstitutionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/CreditorFinancialInstitutionType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\ram\CreditorFinancialInstitutionType:
+    properties:
+        bICID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/DebtorFinancialAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/DebtorFinancialAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/DebtorFinancialAccountType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\ram\DebtorFinancialAccountType:
+    properties:
+        iBANID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentContextParameterType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentContextParameterType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentContextParameterType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\ram\DocumentContextParameterType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentLineDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentLineDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/DocumentLineDocumentType.yml	(revision 8435)
@@ -0,0 +1,10 @@
+horstoeko\zugferd\entities\en16931\ram\DocumentLineDocumentType:
+    properties:
+        lineID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        includedNote:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentContextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentContextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentContextType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentContextType:
+    properties:
+        businessProcessSpecifiedDocumentContextParameter:
+            -
+                Valid: null
+        guidelineSpecifiedDocumentContextParameter:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ExchangedDocumentType.yml	(revision 8435)
@@ -0,0 +1,22 @@
+horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        typeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        issueDateTime:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        includedNote:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,34 @@
+horstoeko\zugferd\entities\en16931\ram\HeaderTradeAgreementType:
+    properties:
+        sellerTradeParty:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        buyerTradeParty:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        sellerTaxRepresentativeTradeParty:
+            -
+                Valid: null
+        sellerOrderReferencedDocument:
+            -
+                Valid: null
+        buyerOrderReferencedDocument:
+            -
+                Valid: null
+        contractReferencedDocument:
+            -
+                Valid: null
+        additionalReferencedDocument:
+            -
+                Valid: null
+        specifiedProcuringProject:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,14 @@
+horstoeko\zugferd\entities\en16931\ram\HeaderTradeDeliveryType:
+    properties:
+        shipToTradeParty:
+            -
+                Valid: null
+        actualDeliverySupplyChainEvent:
+            -
+                Valid: null
+        despatchAdviceReferencedDocument:
+            -
+                Valid: null
+        receivingAdviceReferencedDocument:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/HeaderTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,42 @@
+horstoeko\zugferd\entities\en16931\ram\HeaderTradeSettlementType:
+    properties:
+        invoiceCurrencyCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        payeeTradeParty:
+            -
+                Valid: null
+        specifiedTradeSettlementPaymentMeans:
+            -
+                Valid: null
+        applicableTradeTax:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        billingSpecifiedPeriod:
+            -
+                Valid: null
+        specifiedTradeAllowanceCharge:
+            -
+                Valid: null
+        specifiedTradePaymentTerms:
+            -
+                Valid: null
+        specifiedTradeSettlementHeaderMonetarySummation:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        invoiceReferencedDocument:
+            -
+                Valid: null
+        receivableSpecifiedTradeAccountingAccount:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,15 @@
+horstoeko\zugferd\entities\en16931\ram\LineTradeAgreementType:
+    properties:
+        buyerOrderReferencedDocument:
+            -
+                Valid: null
+        grossPriceProductTradePrice:
+            -
+                Valid: null
+        netPriceProductTradePrice:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\ram\LineTradeDeliveryType:
+    properties:
+        billedQuantity:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/LineTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,28 @@
+horstoeko\zugferd\entities\en16931\ram\LineTradeSettlementType:
+    properties:
+        applicableTradeTax:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        billingSpecifiedPeriod:
+            -
+                Valid: null
+        specifiedTradeAllowanceCharge:
+            -
+                Valid: null
+        specifiedTradeSettlementLineMonetarySummation:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        additionalReferencedDocument:
+            -
+                Valid: null
+        receivableSpecifiedTradeAccountingAccount:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/NoteType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/NoteType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/NoteType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\ram\NoteType:
+    properties:
+        content:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProcuringProjectType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProcuringProjectType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProcuringProjectType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\ram\ProcuringProjectType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        name:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductCharacteristicType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductCharacteristicType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductCharacteristicType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\ram\ProductCharacteristicType:
+    properties:
+        description:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        value:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductClassificationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductClassificationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ProductClassificationType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\ram\ProductClassificationType:
+    properties:
+        classCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ReferencedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ReferencedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/ReferencedDocumentType.yml	(revision 8435)
@@ -0,0 +1,5 @@
+horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType:
+    properties:
+        formattedIssueDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/SpecifiedPeriodType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/SpecifiedPeriodType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/SpecifiedPeriodType.yml	(revision 8435)
@@ -0,0 +1,8 @@
+horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType:
+    properties:
+        startDateTime:
+            -
+                Valid: null
+        endDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainEventType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainEventType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainEventType.yml	(revision 8435)
@@ -0,0 +1,9 @@
+horstoeko\zugferd\entities\en16931\ram\SupplyChainEventType:
+    properties:
+        occurrenceDateTime:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeLineItemType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeLineItemType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeLineItemType.yml	(revision 8435)
@@ -0,0 +1,37 @@
+horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeLineItemType:
+    properties:
+        associatedDocumentLineDocument:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        specifiedTradeProduct:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        specifiedLineTradeAgreement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        specifiedLineTradeDelivery:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        specifiedLineTradeSettlement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeTransactionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
@@ -0,0 +1,30 @@
+horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeTransactionType:
+    properties:
+        includedSupplyChainTradeLineItem:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        applicableHeaderTradeAgreement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        applicableHeaderTradeDelivery:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        applicableHeaderTradeSettlement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TaxRegistrationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TaxRegistrationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TaxRegistrationType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\ram\TaxRegistrationType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAccountingAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAccountingAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAccountingAccountType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAddressType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAddressType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAddressType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\ram\TradeAddressType:
+    properties:
+        countryID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAllowanceChargeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAllowanceChargeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeAllowanceChargeType.yml	(revision 8435)
@@ -0,0 +1,17 @@
+horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType:
+    properties:
+        chargeIndicator:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        actualAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        categoryTradeTax:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeContactType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeContactType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeContactType.yml	(revision 8435)
@@ -0,0 +1,8 @@
+horstoeko\zugferd\entities\en16931\ram\TradeContactType:
+    properties:
+        telephoneUniversalCommunication:
+            -
+                Valid: null
+        emailURIUniversalCommunication:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeCountryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeCountryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeCountryType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\ram\TradeCountryType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePartyType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePartyType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePartyType.yml	(revision 8435)
@@ -0,0 +1,17 @@
+horstoeko\zugferd\entities\en16931\ram\TradePartyType:
+    properties:
+        specifiedLegalOrganization:
+            -
+                Valid: null
+        definedTradeContact:
+            -
+                Valid: null
+        postalTradeAddress:
+            -
+                Valid: null
+        uRIUniversalCommunication:
+            -
+                Valid: null
+        specifiedTaxRegistration:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePaymentTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePaymentTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePaymentTermsType.yml	(revision 8435)
@@ -0,0 +1,5 @@
+horstoeko\zugferd\entities\en16931\ram\TradePaymentTermsType:
+    properties:
+        dueDateDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePriceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePriceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradePriceType.yml	(revision 8435)
@@ -0,0 +1,10 @@
+horstoeko\zugferd\entities\en16931\ram\TradePriceType:
+    properties:
+        chargeAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        appliedTradeAllowanceCharge:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeProductType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeProductType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeProductType.yml	(revision 8435)
@@ -0,0 +1,16 @@
+horstoeko\zugferd\entities\en16931\ram\TradeProductType:
+    properties:
+        name:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        applicableProductCharacteristic:
+            -
+                Valid: null
+        designatedProductClassification:
+            -
+                Valid: null
+        originTradeCountry:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementFinancialCardType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementFinancialCardType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementFinancialCardType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\ram\TradeSettlementFinancialCardType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,22 @@
+horstoeko\zugferd\entities\en16931\ram\TradeSettlementHeaderMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        taxBasisTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        grandTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        duePayableAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementLineMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementLineMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementLineMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\ram\TradeSettlementLineMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementPaymentMeansType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
@@ -0,0 +1,19 @@
+horstoeko\zugferd\entities\en16931\ram\TradeSettlementPaymentMeansType:
+    properties:
+        typeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        applicableTradeSettlementFinancialCard:
+            -
+                Valid: null
+        payerPartyDebtorFinancialAccount:
+            -
+                Valid: null
+        payeePartyCreditorFinancialAccount:
+            -
+                Valid: null
+        payeeSpecifiedCreditorFinancialInstitution:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeTaxType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeTaxType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/ram/TradeTaxType.yml	(revision 8435)
@@ -0,0 +1,15 @@
+horstoeko\zugferd\entities\en16931\ram\TradeTaxType:
+    properties:
+        typeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        categoryCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        taxPointDate:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/rsm/CrossIndustryInvoiceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
@@ -0,0 +1,23 @@
+horstoeko\zugferd\entities\en16931\rsm\CrossIndustryInvoiceType:
+    properties:
+        exchangedDocumentContext:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        exchangedDocument:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        supplyChainTradeTransaction:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/udt/BinaryObjectType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/udt/BinaryObjectType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/udt/BinaryObjectType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\udt\BinaryObjectType:
+    properties:
+        mimeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        filename:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/udt/DateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\udt\DateTimeType\DateTimeStringAType:
+    properties:
+        format:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/udt/DateType.DateStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/udt/DateType.DateStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/udt/DateType.DateStringAType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\udt\DateType\DateStringAType:
+    properties:
+        format:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/udt/QuantityType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/udt/QuantityType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/en16931/udt/QuantityType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\en16931\udt\QuantityType:
+    properties:
+        unitCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/AccountingAccountTypeCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/AccountingAccountTypeCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/AccountingAccountTypeCodeType.yml	(revision 8435)
@@ -0,0 +1,15 @@
+horstoeko\zugferd\entities\extended\qdt\AccountingAccountTypeCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '1'
+                        - '2'
+                        - '3'
+                        - '4'
+                        - '5'
+                        - '6'
+                        - '7'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/AllowanceChargeReasonCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
@@ -0,0 +1,204 @@
+horstoeko\zugferd\entities\extended\qdt\AllowanceChargeReasonCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - AA
+                        - AAA
+                        - AAC
+                        - AAD
+                        - AAE
+                        - AAF
+                        - AAH
+                        - AAI
+                        - AAS
+                        - AAT
+                        - AAV
+                        - AAY
+                        - AAZ
+                        - ABA
+                        - ABB
+                        - ABC
+                        - ABD
+                        - ABF
+                        - ABK
+                        - ABL
+                        - ABN
+                        - ABR
+                        - ABS
+                        - ABT
+                        - ABU
+                        - ACF
+                        - ACG
+                        - ACH
+                        - ACI
+                        - ACJ
+                        - ACK
+                        - ACL
+                        - ACM
+                        - ACS
+                        - ADC
+                        - ADE
+                        - ADJ
+                        - ADK
+                        - ADL
+                        - ADM
+                        - ADN
+                        - ADO
+                        - ADP
+                        - ADQ
+                        - ADR
+                        - ADT
+                        - ADW
+                        - ADY
+                        - ADZ
+                        - AEA
+                        - AEB
+                        - AEC
+                        - AED
+                        - AEF
+                        - AEH
+                        - AEI
+                        - AEJ
+                        - AEK
+                        - AEL
+                        - AEM
+                        - AEN
+                        - AEO
+                        - AEP
+                        - AES
+                        - AET
+                        - AEU
+                        - AEV
+                        - AEW
+                        - AEX
+                        - AEY
+                        - AEZ
+                        - AJ
+                        - AU
+                        - CA
+                        - CAB
+                        - CAD
+                        - CAE
+                        - CAF
+                        - CAI
+                        - CAJ
+                        - CAK
+                        - CAL
+                        - CAM
+                        - CAN
+                        - CAO
+                        - CAP
+                        - CAQ
+                        - CAR
+                        - CAS
+                        - CAT
+                        - CAU
+                        - CAV
+                        - CAW
+                        - CAX
+                        - CAY
+                        - CAZ
+                        - CD
+                        - CG
+                        - CS
+                        - CT
+                        - DAB
+                        - DAC
+                        - DAD
+                        - DAF
+                        - DAG
+                        - DAH
+                        - DAI
+                        - DAJ
+                        - DAK
+                        - DAL
+                        - DAM
+                        - DAN
+                        - DAO
+                        - DAP
+                        - DAQ
+                        - DL
+                        - EG
+                        - EP
+                        - ER
+                        - FAA
+                        - FAB
+                        - FAC
+                        - FC
+                        - FH
+                        - FI
+                        - GAA
+                        - HAA
+                        - HD
+                        - HH
+                        - IAA
+                        - IAB
+                        - ID
+                        - IF
+                        - IR
+                        - IS
+                        - KO
+                        - L1
+                        - LA
+                        - LAA
+                        - LAB
+                        - LF
+                        - MAE
+                        - MI
+                        - ML
+                        - NAA
+                        - OA
+                        - PA
+                        - PAA
+                        - PC
+                        - PL
+                        - RAB
+                        - RAC
+                        - RAD
+                        - RAF
+                        - RE
+                        - RF
+                        - RH
+                        - RV
+                        - SA
+                        - SAA
+                        - SAD
+                        - SAE
+                        - SAI
+                        - SG
+                        - SH
+                        - SM
+                        - SU
+                        - TAB
+                        - TAC
+                        - TT
+                        - TV
+                        - V1
+                        - V2
+                        - WH
+                        - XAA
+                        - YY
+                        - ZZZ
+                        - '41'
+                        - '42'
+                        - '60'
+                        - '62'
+                        - '63'
+                        - '64'
+                        - '65'
+                        - '66'
+                        - '67'
+                        - '68'
+                        - '70'
+                        - '71'
+                        - '88'
+                        - '95'
+                        - '100'
+                        - '102'
+                        - '103'
+                        - '104'
+                        - '105'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/CountryIDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/CountryIDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/CountryIDType.yml	(revision 8435)
@@ -0,0 +1,259 @@
+horstoeko\zugferd\entities\extended\qdt\CountryIDType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - 1A
+                        - AD
+                        - AE
+                        - AF
+                        - AG
+                        - AI
+                        - AL
+                        - AM
+                        - AO
+                        - AQ
+                        - AR
+                        - AS
+                        - AT
+                        - AU
+                        - AW
+                        - AX
+                        - AZ
+                        - BA
+                        - BB
+                        - BD
+                        - BE
+                        - BF
+                        - BG
+                        - BH
+                        - BI
+                        - BJ
+                        - BL
+                        - BM
+                        - BN
+                        - BO
+                        - BQ
+                        - BR
+                        - BS
+                        - BT
+                        - BV
+                        - BW
+                        - BY
+                        - BZ
+                        - CA
+                        - CC
+                        - CD
+                        - CF
+                        - CG
+                        - CH
+                        - CI
+                        - CK
+                        - CL
+                        - CM
+                        - CN
+                        - CO
+                        - CR
+                        - CU
+                        - CV
+                        - CW
+                        - CX
+                        - CY
+                        - CZ
+                        - DE
+                        - DJ
+                        - DK
+                        - DM
+                        - DO
+                        - DZ
+                        - EC
+                        - EE
+                        - EG
+                        - EH
+                        - ER
+                        - ES
+                        - ET
+                        - FI
+                        - FJ
+                        - FK
+                        - FM
+                        - FO
+                        - FR
+                        - GA
+                        - GB
+                        - GD
+                        - GE
+                        - GF
+                        - GG
+                        - GH
+                        - GI
+                        - GL
+                        - GM
+                        - GN
+                        - GP
+                        - GQ
+                        - GR
+                        - GS
+                        - GT
+                        - GU
+                        - GW
+                        - GY
+                        - HK
+                        - HM
+                        - HN
+                        - HR
+                        - HT
+                        - HU
+                        - ID
+                        - IE
+                        - IL
+                        - IM
+                        - IN
+                        - IO
+                        - IQ
+                        - IR
+                        - IS
+                        - IT
+                        - JE
+                        - JM
+                        - JO
+                        - JP
+                        - KE
+                        - KG
+                        - KH
+                        - KI
+                        - KM
+                        - KN
+                        - KP
+                        - KR
+                        - KW
+                        - KY
+                        - KZ
+                        - LA
+                        - LB
+                        - LC
+                        - LI
+                        - LK
+                        - LR
+                        - LS
+                        - LT
+                        - LU
+                        - LV
+                        - LY
+                        - MA
+                        - MC
+                        - MD
+                        - ME
+                        - MF
+                        - MG
+                        - MH
+                        - MK
+                        - ML
+                        - MM
+                        - MN
+                        - MO
+                        - MP
+                        - MQ
+                        - MR
+                        - MS
+                        - MT
+                        - MU
+                        - MV
+                        - MW
+                        - MX
+                        - MY
+                        - MZ
+                        - NA
+                        - NC
+                        - NE
+                        - NF
+                        - NG
+                        - NI
+                        - NL
+                        - 'NO'
+                        - NP
+                        - NR
+                        - NU
+                        - NZ
+                        - OM
+                        - PA
+                        - PE
+                        - PF
+                        - PG
+                        - PH
+                        - PK
+                        - PL
+                        - PM
+                        - PN
+                        - PR
+                        - PS
+                        - PT
+                        - PW
+                        - PY
+                        - QA
+                        - RE
+                        - RO
+                        - RS
+                        - RU
+                        - RW
+                        - SA
+                        - SB
+                        - SC
+                        - SD
+                        - SE
+                        - SG
+                        - SH
+                        - SI
+                        - SJ
+                        - SK
+                        - SL
+                        - SM
+                        - SN
+                        - SO
+                        - SR
+                        - SS
+                        - ST
+                        - SV
+                        - SX
+                        - SY
+                        - SZ
+                        - TC
+                        - TD
+                        - TF
+                        - TG
+                        - TH
+                        - TJ
+                        - TK
+                        - TL
+                        - TM
+                        - TN
+                        - TO
+                        - TR
+                        - TT
+                        - TV
+                        - TW
+                        - TZ
+                        - UA
+                        - UG
+                        - UM
+                        - US
+                        - UY
+                        - UZ
+                        - VA
+                        - VC
+                        - VE
+                        - VG
+                        - VI
+                        - VN
+                        - VU
+                        - WF
+                        - WS
+                        - XI
+                        - YE
+                        - YT
+                        - ZA
+                        - ZM
+                        - ZW
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/CurrencyCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/CurrencyCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/CurrencyCodeType.yml	(revision 8435)
@@ -0,0 +1,187 @@
+horstoeko\zugferd\entities\extended\qdt\CurrencyCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - 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
+                        - 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
+                        - LYD
+                        - MAD
+                        - MDL
+                        - MGA
+                        - MKD
+                        - MMK
+                        - MNT
+                        - MOP
+                        - MRU
+                        - 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
+                        - RWF
+                        - SAR
+                        - SBD
+                        - SCR
+                        - SDG
+                        - SEK
+                        - SGD
+                        - SHP
+                        - SLL
+                        - SOS
+                        - SRD
+                        - SSP
+                        - STN
+                        - SVC
+                        - SYP
+                        - SZL
+                        - THB
+                        - TJS
+                        - TMT
+                        - TND
+                        - TOP
+                        - TRY
+                        - TTD
+                        - TWD
+                        - TZS
+                        - UAH
+                        - UGX
+                        - USD
+                        - USN
+                        - UYI
+                        - UYU
+                        - UYW
+                        - UZS
+                        - VES
+                        - VND
+                        - VUV
+                        - WST
+                        - XAF
+                        - XAG
+                        - XAU
+                        - XBA
+                        - XBB
+                        - XBC
+                        - XBD
+                        - XCD
+                        - XDR
+                        - XOF
+                        - XPD
+                        - XPF
+                        - XPT
+                        - XSU
+                        - XTS
+                        - XUA
+                        - XXX
+                        - YER
+                        - ZAR
+                        - ZMW
+                        - ZWL
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/DeliveryTermsCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/DeliveryTermsCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/DeliveryTermsCodeType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\extended\qdt\DeliveryTermsCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '1'
+                        - '2'
+                        - CFR
+                        - CIF
+                        - CIP
+                        - CPT
+                        - DAP
+                        - DAT
+                        - DDP
+                        - EXW
+                        - FAS
+                        - FCA
+                        - FOB
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/DocumentCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/DocumentCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/DocumentCodeType.yml	(revision 8435)
@@ -0,0 +1,803 @@
+horstoeko\zugferd\entities\extended\qdt\DocumentCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '1'
+                        - '2'
+                        - '3'
+                        - '4'
+                        - '5'
+                        - '6'
+                        - '7'
+                        - '8'
+                        - '9'
+                        - '10'
+                        - '11'
+                        - '12'
+                        - '13'
+                        - '14'
+                        - '15'
+                        - '16'
+                        - '17'
+                        - '18'
+                        - '19'
+                        - '20'
+                        - '21'
+                        - '22'
+                        - '23'
+                        - '24'
+                        - '25'
+                        - '26'
+                        - '27'
+                        - '28'
+                        - '29'
+                        - '30'
+                        - '31'
+                        - '32'
+                        - '33'
+                        - '34'
+                        - '35'
+                        - '36'
+                        - '37'
+                        - '38'
+                        - '39'
+                        - '40'
+                        - '41'
+                        - '42'
+                        - '43'
+                        - '44'
+                        - '45'
+                        - '46'
+                        - '47'
+                        - '48'
+                        - '49'
+                        - '50'
+                        - '51'
+                        - '52'
+                        - '53'
+                        - '54'
+                        - '55'
+                        - '56'
+                        - '57'
+                        - '58'
+                        - '59'
+                        - '60'
+                        - '61'
+                        - '62'
+                        - '63'
+                        - '64'
+                        - '65'
+                        - '66'
+                        - '67'
+                        - '68'
+                        - '69'
+                        - '70'
+                        - '71'
+                        - '72'
+                        - '73'
+                        - '74'
+                        - '75'
+                        - '76'
+                        - '77'
+                        - '78'
+                        - '79'
+                        - '80'
+                        - '81'
+                        - '82'
+                        - '83'
+                        - '84'
+                        - '85'
+                        - '86'
+                        - '87'
+                        - '88'
+                        - '89'
+                        - '90'
+                        - '91'
+                        - '92'
+                        - '93'
+                        - '94'
+                        - '95'
+                        - '96'
+                        - '97'
+                        - '98'
+                        - '99'
+                        - '100'
+                        - '101'
+                        - '102'
+                        - '103'
+                        - '104'
+                        - '105'
+                        - '106'
+                        - '107'
+                        - '108'
+                        - '109'
+                        - '110'
+                        - '111'
+                        - '112'
+                        - '113'
+                        - '114'
+                        - '115'
+                        - '116'
+                        - '117'
+                        - '118'
+                        - '119'
+                        - '120'
+                        - '121'
+                        - '122'
+                        - '123'
+                        - '124'
+                        - '125'
+                        - '126'
+                        - '127'
+                        - '128'
+                        - '129'
+                        - '130'
+                        - '131'
+                        - '132'
+                        - '133'
+                        - '134'
+                        - '135'
+                        - '136'
+                        - '137'
+                        - '138'
+                        - '139'
+                        - '140'
+                        - '141'
+                        - '142'
+                        - '143'
+                        - '144'
+                        - '145'
+                        - '146'
+                        - '147'
+                        - '148'
+                        - '149'
+                        - '150'
+                        - '151'
+                        - '152'
+                        - '153'
+                        - '154'
+                        - '155'
+                        - '156'
+                        - '157'
+                        - '158'
+                        - '159'
+                        - '160'
+                        - '161'
+                        - '162'
+                        - '163'
+                        - '164'
+                        - '165'
+                        - '166'
+                        - '167'
+                        - '168'
+                        - '169'
+                        - '170'
+                        - '171'
+                        - '172'
+                        - '173'
+                        - '174'
+                        - '175'
+                        - '176'
+                        - '177'
+                        - '178'
+                        - '179'
+                        - '180'
+                        - '181'
+                        - '182'
+                        - '183'
+                        - '184'
+                        - '185'
+                        - '186'
+                        - '187'
+                        - '188'
+                        - '189'
+                        - '190'
+                        - '191'
+                        - '192'
+                        - '193'
+                        - '194'
+                        - '195'
+                        - '196'
+                        - '197'
+                        - '198'
+                        - '199'
+                        - '200'
+                        - '201'
+                        - '202'
+                        - '203'
+                        - '204'
+                        - '205'
+                        - '206'
+                        - '207'
+                        - '208'
+                        - '209'
+                        - '210'
+                        - '211'
+                        - '212'
+                        - '213'
+                        - '214'
+                        - '215'
+                        - '216'
+                        - '217'
+                        - '218'
+                        - '219'
+                        - '220'
+                        - '221'
+                        - '222'
+                        - '223'
+                        - '224'
+                        - '225'
+                        - '226'
+                        - '227'
+                        - '228'
+                        - '229'
+                        - '230'
+                        - '231'
+                        - '232'
+                        - '233'
+                        - '234'
+                        - '235'
+                        - '236'
+                        - '237'
+                        - '238'
+                        - '239'
+                        - '240'
+                        - '241'
+                        - '242'
+                        - '243'
+                        - '244'
+                        - '245'
+                        - '246'
+                        - '247'
+                        - '248'
+                        - '249'
+                        - '250'
+                        - '251'
+                        - '252'
+                        - '253'
+                        - '254'
+                        - '255'
+                        - '256'
+                        - '257'
+                        - '258'
+                        - '259'
+                        - '260'
+                        - '261'
+                        - '262'
+                        - '263'
+                        - '264'
+                        - '265'
+                        - '266'
+                        - '267'
+                        - '268'
+                        - '269'
+                        - '270'
+                        - '271'
+                        - '272'
+                        - '273'
+                        - '274'
+                        - '275'
+                        - '276'
+                        - '277'
+                        - '278'
+                        - '279'
+                        - '280'
+                        - '281'
+                        - '282'
+                        - '283'
+                        - '284'
+                        - '285'
+                        - '286'
+                        - '287'
+                        - '288'
+                        - '289'
+                        - '290'
+                        - '291'
+                        - '292'
+                        - '293'
+                        - '294'
+                        - '295'
+                        - '296'
+                        - '297'
+                        - '298'
+                        - '299'
+                        - '300'
+                        - '301'
+                        - '302'
+                        - '303'
+                        - '304'
+                        - '305'
+                        - '306'
+                        - '307'
+                        - '308'
+                        - '309'
+                        - '310'
+                        - '311'
+                        - '312'
+                        - '313'
+                        - '314'
+                        - '315'
+                        - '316'
+                        - '317'
+                        - '318'
+                        - '319'
+                        - '320'
+                        - '321'
+                        - '322'
+                        - '323'
+                        - '324'
+                        - '325'
+                        - '326'
+                        - '327'
+                        - '328'
+                        - '329'
+                        - '330'
+                        - '331'
+                        - '332'
+                        - '333'
+                        - '334'
+                        - '335'
+                        - '336'
+                        - '337'
+                        - '338'
+                        - '339'
+                        - '340'
+                        - '341'
+                        - '342'
+                        - '343'
+                        - '344'
+                        - '345'
+                        - '346'
+                        - '347'
+                        - '348'
+                        - '349'
+                        - '350'
+                        - '351'
+                        - '352'
+                        - '353'
+                        - '354'
+                        - '355'
+                        - '356'
+                        - '357'
+                        - '358'
+                        - '359'
+                        - '360'
+                        - '361'
+                        - '362'
+                        - '363'
+                        - '364'
+                        - '365'
+                        - '366'
+                        - '367'
+                        - '368'
+                        - '369'
+                        - '370'
+                        - '371'
+                        - '372'
+                        - '373'
+                        - '374'
+                        - '375'
+                        - '376'
+                        - '377'
+                        - '378'
+                        - '379'
+                        - '380'
+                        - '381'
+                        - '382'
+                        - '383'
+                        - '384'
+                        - '385'
+                        - '386'
+                        - '387'
+                        - '388'
+                        - '389'
+                        - '390'
+                        - '391'
+                        - '392'
+                        - '393'
+                        - '394'
+                        - '395'
+                        - '396'
+                        - '397'
+                        - '398'
+                        - '399'
+                        - '400'
+                        - '401'
+                        - '402'
+                        - '403'
+                        - '404'
+                        - '405'
+                        - '406'
+                        - '407'
+                        - '408'
+                        - '409'
+                        - '410'
+                        - '411'
+                        - '412'
+                        - '413'
+                        - '414'
+                        - '415'
+                        - '416'
+                        - '417'
+                        - '418'
+                        - '419'
+                        - '420'
+                        - '421'
+                        - '422'
+                        - '423'
+                        - '424'
+                        - '425'
+                        - '426'
+                        - '427'
+                        - '428'
+                        - '429'
+                        - '430'
+                        - '431'
+                        - '432'
+                        - '433'
+                        - '434'
+                        - '435'
+                        - '436'
+                        - '437'
+                        - '438'
+                        - '439'
+                        - '440'
+                        - '441'
+                        - '442'
+                        - '443'
+                        - '444'
+                        - '445'
+                        - '446'
+                        - '447'
+                        - '448'
+                        - '449'
+                        - '450'
+                        - '451'
+                        - '452'
+                        - '453'
+                        - '454'
+                        - '455'
+                        - '456'
+                        - '457'
+                        - '458'
+                        - '459'
+                        - '460'
+                        - '461'
+                        - '462'
+                        - '463'
+                        - '464'
+                        - '465'
+                        - '466'
+                        - '467'
+                        - '468'
+                        - '469'
+                        - '470'
+                        - '481'
+                        - '482'
+                        - '483'
+                        - '484'
+                        - '485'
+                        - '486'
+                        - '487'
+                        - '488'
+                        - '489'
+                        - '490'
+                        - '491'
+                        - '493'
+                        - '494'
+                        - '495'
+                        - '496'
+                        - '497'
+                        - '498'
+                        - '499'
+                        - '520'
+                        - '521'
+                        - '522'
+                        - '523'
+                        - '524'
+                        - '525'
+                        - '526'
+                        - '527'
+                        - '528'
+                        - '529'
+                        - '530'
+                        - '531'
+                        - '532'
+                        - '533'
+                        - '534'
+                        - '535'
+                        - '536'
+                        - '537'
+                        - '538'
+                        - '539'
+                        - '550'
+                        - '551'
+                        - '552'
+                        - '553'
+                        - '554'
+                        - '575'
+                        - '576'
+                        - '577'
+                        - '578'
+                        - '579'
+                        - '580'
+                        - '581'
+                        - '582'
+                        - '583'
+                        - '584'
+                        - '585'
+                        - '586'
+                        - '587'
+                        - '588'
+                        - '589'
+                        - '610'
+                        - '621'
+                        - '622'
+                        - '623'
+                        - '624'
+                        - '625'
+                        - '626'
+                        - '627'
+                        - '628'
+                        - '629'
+                        - '630'
+                        - '631'
+                        - '632'
+                        - '633'
+                        - '634'
+                        - '635'
+                        - '636'
+                        - '637'
+                        - '638'
+                        - '639'
+                        - '640'
+                        - '641'
+                        - '642'
+                        - '643'
+                        - '644'
+                        - '645'
+                        - '646'
+                        - '647'
+                        - '648'
+                        - '649'
+                        - '650'
+                        - '651'
+                        - '652'
+                        - '653'
+                        - '654'
+                        - '655'
+                        - '656'
+                        - '657'
+                        - '658'
+                        - '659'
+                        - '700'
+                        - '701'
+                        - '702'
+                        - '703'
+                        - '704'
+                        - '705'
+                        - '706'
+                        - '707'
+                        - '708'
+                        - '709'
+                        - '710'
+                        - '711'
+                        - '712'
+                        - '713'
+                        - '714'
+                        - '715'
+                        - '716'
+                        - '717'
+                        - '718'
+                        - '719'
+                        - '720'
+                        - '721'
+                        - '722'
+                        - '723'
+                        - '724'
+                        - '725'
+                        - '726'
+                        - '727'
+                        - '728'
+                        - '729'
+                        - '730'
+                        - '731'
+                        - '732'
+                        - '733'
+                        - '734'
+                        - '735'
+                        - '736'
+                        - '737'
+                        - '738'
+                        - '739'
+                        - '740'
+                        - '741'
+                        - '742'
+                        - '743'
+                        - '744'
+                        - '745'
+                        - '746'
+                        - '747'
+                        - '748'
+                        - '749'
+                        - '750'
+                        - '751'
+                        - '752'
+                        - '753'
+                        - '754'
+                        - '755'
+                        - '756'
+                        - '757'
+                        - '758'
+                        - '759'
+                        - '760'
+                        - '761'
+                        - '762'
+                        - '763'
+                        - '764'
+                        - '765'
+                        - '766'
+                        - '767'
+                        - '768'
+                        - '769'
+                        - '770'
+                        - '771'
+                        - '772'
+                        - '773'
+                        - '774'
+                        - '775'
+                        - '776'
+                        - '777'
+                        - '778'
+                        - '779'
+                        - '780'
+                        - '781'
+                        - '782'
+                        - '783'
+                        - '784'
+                        - '785'
+                        - '786'
+                        - '787'
+                        - '788'
+                        - '789'
+                        - '790'
+                        - '791'
+                        - '792'
+                        - '793'
+                        - '794'
+                        - '795'
+                        - '796'
+                        - '797'
+                        - '798'
+                        - '799'
+                        - '810'
+                        - '811'
+                        - '812'
+                        - '813'
+                        - '814'
+                        - '815'
+                        - '816'
+                        - '817'
+                        - '818'
+                        - '819'
+                        - '820'
+                        - '821'
+                        - '822'
+                        - '823'
+                        - '824'
+                        - '825'
+                        - '826'
+                        - '827'
+                        - '828'
+                        - '829'
+                        - '830'
+                        - '831'
+                        - '832'
+                        - '833'
+                        - '834'
+                        - '835'
+                        - '836'
+                        - '837'
+                        - '838'
+                        - '839'
+                        - '840'
+                        - '841'
+                        - '842'
+                        - '843'
+                        - '844'
+                        - '845'
+                        - '846'
+                        - '847'
+                        - '848'
+                        - '849'
+                        - '850'
+                        - '851'
+                        - '852'
+                        - '853'
+                        - '854'
+                        - '855'
+                        - '856'
+                        - '857'
+                        - '858'
+                        - '859'
+                        - '860'
+                        - '861'
+                        - '862'
+                        - '863'
+                        - '864'
+                        - '865'
+                        - '866'
+                        - '867'
+                        - '868'
+                        - '869'
+                        - '870'
+                        - '871'
+                        - '872'
+                        - '873'
+                        - '874'
+                        - '875'
+                        - '876'
+                        - '877'
+                        - '878'
+                        - '879'
+                        - '890'
+                        - '891'
+                        - '892'
+                        - '893'
+                        - '894'
+                        - '895'
+                        - '896'
+                        - '901'
+                        - '910'
+                        - '911'
+                        - '913'
+                        - '914'
+                        - '915'
+                        - '916'
+                        - '917'
+                        - '925'
+                        - '926'
+                        - '927'
+                        - '929'
+                        - '930'
+                        - '931'
+                        - '932'
+                        - '933'
+                        - '934'
+                        - '935'
+                        - '936'
+                        - '937'
+                        - '938'
+                        - '940'
+                        - '941'
+                        - '950'
+                        - '951'
+                        - '952'
+                        - '953'
+                        - '954'
+                        - '955'
+                        - '960'
+                        - '961'
+                        - '962'
+                        - '963'
+                        - '964'
+                        - '965'
+                        - '966'
+                        - '970'
+                        - '971'
+                        - '972'
+                        - '974'
+                        - '975'
+                        - '976'
+                        - '977'
+                        - '978'
+                        - '979'
+                        - '990'
+                        - '991'
+                        - '995'
+                        - '996'
+                        - '998'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType\DateTimeStringAType:
+    properties:
+        format:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/FormattedDateTimeType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType:
+    properties:
+        dateTimeString:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/PaymentMeansCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/PaymentMeansCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/PaymentMeansCodeType.yml	(revision 8435)
@@ -0,0 +1,91 @@
+horstoeko\zugferd\entities\extended\qdt\PaymentMeansCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '1'
+                        - '2'
+                        - '3'
+                        - '4'
+                        - '5'
+                        - '6'
+                        - '7'
+                        - '8'
+                        - '9'
+                        - '10'
+                        - '11'
+                        - '12'
+                        - '13'
+                        - '14'
+                        - '15'
+                        - '16'
+                        - '17'
+                        - '18'
+                        - '19'
+                        - '20'
+                        - '21'
+                        - '22'
+                        - '23'
+                        - '24'
+                        - '25'
+                        - '26'
+                        - '27'
+                        - '28'
+                        - '29'
+                        - '30'
+                        - '31'
+                        - '32'
+                        - '33'
+                        - '34'
+                        - '35'
+                        - '36'
+                        - '37'
+                        - '38'
+                        - '39'
+                        - '40'
+                        - '41'
+                        - '42'
+                        - '43'
+                        - '44'
+                        - '45'
+                        - '46'
+                        - '47'
+                        - '48'
+                        - '49'
+                        - '50'
+                        - '51'
+                        - '52'
+                        - '53'
+                        - '54'
+                        - '55'
+                        - '56'
+                        - '57'
+                        - '58'
+                        - '59'
+                        - '60'
+                        - '61'
+                        - '62'
+                        - '63'
+                        - '64'
+                        - '65'
+                        - '66'
+                        - '67'
+                        - '68'
+                        - '69'
+                        - '70'
+                        - '74'
+                        - '75'
+                        - '76'
+                        - '77'
+                        - '78'
+                        - '91'
+                        - '92'
+                        - '93'
+                        - '94'
+                        - '95'
+                        - '96'
+                        - '97'
+                        - ZZZ
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/ReferenceCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/ReferenceCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/ReferenceCodeType.yml	(revision 8435)
@@ -0,0 +1,825 @@
+horstoeko\zugferd\entities\extended\qdt\ReferenceCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - AAA
+                        - AAB
+                        - AAC
+                        - AAD
+                        - AAE
+                        - AAF
+                        - AAG
+                        - AAH
+                        - AAI
+                        - AAJ
+                        - AAK
+                        - AAL
+                        - AAM
+                        - AAN
+                        - AAO
+                        - AAP
+                        - AAQ
+                        - AAR
+                        - AAS
+                        - AAT
+                        - AAU
+                        - AAV
+                        - AAW
+                        - AAX
+                        - AAY
+                        - AAZ
+                        - ABA
+                        - ABB
+                        - ABC
+                        - ABD
+                        - ABE
+                        - ABF
+                        - ABG
+                        - ABH
+                        - ABI
+                        - ABJ
+                        - ABK
+                        - ABL
+                        - ABM
+                        - ABN
+                        - ABO
+                        - ABP
+                        - ABQ
+                        - ABR
+                        - ABS
+                        - ABT
+                        - ABU
+                        - ABV
+                        - ABW
+                        - ABX
+                        - ABY
+                        - ABZ
+                        - AC
+                        - ACA
+                        - ACB
+                        - ACC
+                        - ACD
+                        - ACE
+                        - ACF
+                        - ACG
+                        - ACH
+                        - ACI
+                        - ACJ
+                        - ACK
+                        - ACL
+                        - ACN
+                        - ACO
+                        - ACP
+                        - ACQ
+                        - ACR
+                        - ACT
+                        - ACU
+                        - ACV
+                        - ACW
+                        - ACX
+                        - ACY
+                        - ACZ
+                        - ADA
+                        - ADB
+                        - ADC
+                        - ADD
+                        - ADE
+                        - ADF
+                        - ADG
+                        - ADI
+                        - ADJ
+                        - ADK
+                        - ADL
+                        - ADM
+                        - ADN
+                        - ADO
+                        - ADP
+                        - ADQ
+                        - ADT
+                        - ADU
+                        - ADV
+                        - ADW
+                        - ADX
+                        - ADY
+                        - ADZ
+                        - AE
+                        - AEA
+                        - AEB
+                        - AEC
+                        - AED
+                        - AEE
+                        - AEF
+                        - AEG
+                        - AEH
+                        - AEI
+                        - AEJ
+                        - AEK
+                        - AEL
+                        - AEM
+                        - AEN
+                        - AEO
+                        - AEP
+                        - AEQ
+                        - AER
+                        - AES
+                        - AET
+                        - AEU
+                        - AEV
+                        - AEW
+                        - AEX
+                        - AEY
+                        - AEZ
+                        - AF
+                        - AFA
+                        - AFB
+                        - AFC
+                        - AFD
+                        - AFE
+                        - AFF
+                        - AFG
+                        - AFH
+                        - AFI
+                        - AFJ
+                        - AFK
+                        - AFL
+                        - AFM
+                        - AFN
+                        - AFO
+                        - AFP
+                        - AFQ
+                        - AFR
+                        - AFS
+                        - AFT
+                        - AFU
+                        - AFV
+                        - AFW
+                        - AFX
+                        - AFY
+                        - AFZ
+                        - AGA
+                        - AGB
+                        - AGC
+                        - AGD
+                        - AGE
+                        - AGF
+                        - AGG
+                        - AGH
+                        - AGI
+                        - AGJ
+                        - AGK
+                        - AGL
+                        - AGM
+                        - AGN
+                        - AGO
+                        - AGP
+                        - AGQ
+                        - AGR
+                        - AGS
+                        - AGT
+                        - AGU
+                        - AGV
+                        - AGW
+                        - AGX
+                        - AGY
+                        - AGZ
+                        - AHA
+                        - AHB
+                        - AHC
+                        - AHD
+                        - AHE
+                        - AHF
+                        - AHG
+                        - AHH
+                        - AHI
+                        - AHJ
+                        - AHK
+                        - AHL
+                        - AHM
+                        - AHN
+                        - AHO
+                        - AHP
+                        - AHQ
+                        - AHR
+                        - AHS
+                        - AHT
+                        - AHU
+                        - AHV
+                        - AHX
+                        - AHY
+                        - AHZ
+                        - AIA
+                        - AIB
+                        - AIC
+                        - AID
+                        - AIE
+                        - AIF
+                        - AIG
+                        - AIH
+                        - AII
+                        - AIJ
+                        - AIK
+                        - AIL
+                        - AIM
+                        - AIN
+                        - AIO
+                        - AIP
+                        - AIQ
+                        - AIR
+                        - AIS
+                        - AIT
+                        - AIU
+                        - AIV
+                        - AIW
+                        - AIX
+                        - AIY
+                        - AIZ
+                        - AJA
+                        - AJB
+                        - AJC
+                        - AJD
+                        - AJE
+                        - AJF
+                        - AJG
+                        - AJH
+                        - AJI
+                        - AJJ
+                        - AJK
+                        - AJL
+                        - AJM
+                        - AJN
+                        - AJO
+                        - AJP
+                        - AJQ
+                        - AJR
+                        - AJS
+                        - AJT
+                        - AJU
+                        - AJV
+                        - AJW
+                        - AJX
+                        - AJY
+                        - AJZ
+                        - AKA
+                        - AKB
+                        - AKC
+                        - AKD
+                        - AKE
+                        - AKF
+                        - AKG
+                        - AKH
+                        - AKI
+                        - AKJ
+                        - AKK
+                        - AKL
+                        - AKM
+                        - AKN
+                        - AKO
+                        - AKP
+                        - AKQ
+                        - AKR
+                        - AKS
+                        - AKT
+                        - AKU
+                        - AKV
+                        - AKW
+                        - AKX
+                        - AKY
+                        - AKZ
+                        - ALA
+                        - ALB
+                        - ALC
+                        - ALD
+                        - ALE
+                        - ALF
+                        - ALG
+                        - ALH
+                        - ALI
+                        - ALJ
+                        - ALK
+                        - ALL
+                        - ALM
+                        - ALN
+                        - ALO
+                        - ALP
+                        - ALQ
+                        - ALR
+                        - ALS
+                        - ALT
+                        - ALU
+                        - ALV
+                        - ALW
+                        - ALX
+                        - ALY
+                        - ALZ
+                        - AMA
+                        - AMB
+                        - AMC
+                        - AMD
+                        - AME
+                        - AMF
+                        - AMG
+                        - AMH
+                        - AMI
+                        - AMJ
+                        - AMK
+                        - AML
+                        - AMM
+                        - AMN
+                        - AMO
+                        - AMP
+                        - AMQ
+                        - AMR
+                        - AMS
+                        - AMT
+                        - AMU
+                        - AMV
+                        - AMW
+                        - AMX
+                        - AMY
+                        - AMZ
+                        - ANA
+                        - ANB
+                        - ANC
+                        - AND
+                        - ANE
+                        - ANF
+                        - ANG
+                        - ANH
+                        - ANI
+                        - ANJ
+                        - ANK
+                        - ANL
+                        - ANM
+                        - ANN
+                        - ANO
+                        - ANP
+                        - ANQ
+                        - ANR
+                        - ANS
+                        - ANT
+                        - ANU
+                        - ANV
+                        - ANW
+                        - ANX
+                        - ANY
+                        - AOA
+                        - AOD
+                        - AOE
+                        - AOF
+                        - AOG
+                        - AOH
+                        - AOI
+                        - AOJ
+                        - AOK
+                        - AOL
+                        - AOM
+                        - AON
+                        - AOO
+                        - AOP
+                        - AOQ
+                        - AOR
+                        - AOS
+                        - AOT
+                        - AOU
+                        - AOV
+                        - AOW
+                        - AOX
+                        - AOY
+                        - AOZ
+                        - AP
+                        - APA
+                        - APB
+                        - APC
+                        - APD
+                        - APE
+                        - APF
+                        - APG
+                        - APH
+                        - API
+                        - APJ
+                        - APK
+                        - APL
+                        - APM
+                        - APN
+                        - APO
+                        - APP
+                        - APQ
+                        - APR
+                        - APS
+                        - APT
+                        - APU
+                        - APV
+                        - APW
+                        - APX
+                        - APY
+                        - APZ
+                        - AQA
+                        - AQB
+                        - AQC
+                        - AQD
+                        - AQE
+                        - AQF
+                        - AQG
+                        - AQH
+                        - AQI
+                        - AQJ
+                        - AQK
+                        - AQL
+                        - AQM
+                        - AQN
+                        - AQO
+                        - AQP
+                        - AQQ
+                        - AQR
+                        - AQS
+                        - AQT
+                        - AQU
+                        - AQV
+                        - AQW
+                        - AQX
+                        - AQY
+                        - AQZ
+                        - ARA
+                        - ARB
+                        - ARC
+                        - ARD
+                        - ARE
+                        - ARF
+                        - ARG
+                        - ARH
+                        - ARI
+                        - ARJ
+                        - ARK
+                        - ARL
+                        - ARM
+                        - ARN
+                        - ARO
+                        - ARP
+                        - ARQ
+                        - ARR
+                        - ARS
+                        - ART
+                        - ARU
+                        - ARV
+                        - ARW
+                        - ARX
+                        - ARY
+                        - ARZ
+                        - ASA
+                        - ASB
+                        - ASC
+                        - ASD
+                        - ASE
+                        - ASF
+                        - ASG
+                        - ASH
+                        - ASI
+                        - ASJ
+                        - ASK
+                        - ASL
+                        - ASM
+                        - ASN
+                        - ASO
+                        - ASP
+                        - ASQ
+                        - ASR
+                        - ASS
+                        - AST
+                        - ASU
+                        - ASV
+                        - ASW
+                        - ASX
+                        - ASY
+                        - ASZ
+                        - ATA
+                        - ATB
+                        - ATC
+                        - ATD
+                        - ATE
+                        - ATF
+                        - ATG
+                        - ATH
+                        - ATI
+                        - ATJ
+                        - ATK
+                        - ATL
+                        - ATM
+                        - ATN
+                        - ATO
+                        - ATP
+                        - ATQ
+                        - ATR
+                        - ATS
+                        - ATT
+                        - ATU
+                        - ATV
+                        - ATW
+                        - ATX
+                        - ATY
+                        - ATZ
+                        - AU
+                        - AUA
+                        - AUB
+                        - AUC
+                        - AUD
+                        - AUE
+                        - AUF
+                        - AUG
+                        - AUH
+                        - AUI
+                        - AUJ
+                        - AUK
+                        - AUL
+                        - AUM
+                        - AUN
+                        - AUO
+                        - AUP
+                        - AUQ
+                        - AUR
+                        - AUS
+                        - AUT
+                        - AUU
+                        - AUV
+                        - AUW
+                        - AUX
+                        - AUY
+                        - AUZ
+                        - AV
+                        - AVA
+                        - AVB
+                        - AVC
+                        - AVD
+                        - AVE
+                        - AVF
+                        - AVG
+                        - AVH
+                        - AVI
+                        - AVJ
+                        - AVK
+                        - AVL
+                        - AVM
+                        - AVN
+                        - AVO
+                        - AVP
+                        - AVQ
+                        - AVR
+                        - AVS
+                        - AVT
+                        - AVU
+                        - AVV
+                        - AVW
+                        - AVX
+                        - AVY
+                        - AVZ
+                        - AWA
+                        - AWB
+                        - AWC
+                        - AWD
+                        - AWE
+                        - AWF
+                        - AWG
+                        - AWH
+                        - AWI
+                        - AWJ
+                        - AWK
+                        - AWL
+                        - AWM
+                        - AWN
+                        - AWO
+                        - AWP
+                        - AWQ
+                        - AWR
+                        - AWS
+                        - AWT
+                        - AWU
+                        - AWV
+                        - AWW
+                        - AWX
+                        - AWY
+                        - AWZ
+                        - AXA
+                        - AXB
+                        - AXC
+                        - AXD
+                        - AXE
+                        - AXF
+                        - AXG
+                        - AXH
+                        - AXI
+                        - AXJ
+                        - AXK
+                        - AXL
+                        - AXM
+                        - AXN
+                        - AXO
+                        - AXP
+                        - AXQ
+                        - AXR
+                        - AXS
+                        - BA
+                        - BC
+                        - BD
+                        - BE
+                        - BH
+                        - BM
+                        - BN
+                        - BO
+                        - BR
+                        - BT
+                        - BTP
+                        - BW
+                        - CAS
+                        - CAT
+                        - CAU
+                        - CAV
+                        - CAW
+                        - CAX
+                        - CAY
+                        - CAZ
+                        - CBA
+                        - CBB
+                        - CD
+                        - CEC
+                        - CED
+                        - CFE
+                        - CFF
+                        - CFO
+                        - CG
+                        - CH
+                        - CK
+                        - CKN
+                        - CM
+                        - CMR
+                        - CN
+                        - CNO
+                        - COF
+                        - CP
+                        - CR
+                        - CRN
+                        - CS
+                        - CST
+                        - CT
+                        - CU
+                        - CV
+                        - CW
+                        - CZ
+                        - DA
+                        - DAN
+                        - DB
+                        - DI
+                        - DL
+                        - DM
+                        - DQ
+                        - DR
+                        - EA
+                        - EB
+                        - ED
+                        - EE
+                        - EEP
+                        - EI
+                        - EN
+                        - EQ
+                        - ER
+                        - ERN
+                        - ET
+                        - EX
+                        - FC
+                        - FF
+                        - FI
+                        - FLW
+                        - FN
+                        - FO
+                        - FS
+                        - FT
+                        - FV
+                        - FX
+                        - GA
+                        - GC
+                        - GD
+                        - GDN
+                        - GN
+                        - HS
+                        - HWB
+                        - IA
+                        - IB
+                        - ICA
+                        - ICE
+                        - ICO
+                        - II
+                        - IL
+                        - INB
+                        - INN
+                        - INO
+                        - IP
+                        - IS
+                        - IT
+                        - IV
+                        - JB
+                        - JE
+                        - LA
+                        - LAN
+                        - LAR
+                        - LB
+                        - LC
+                        - LI
+                        - LO
+                        - LRC
+                        - LS
+                        - MA
+                        - MB
+                        - MF
+                        - MG
+                        - MH
+                        - MR
+                        - MRN
+                        - MS
+                        - MSS
+                        - MWB
+                        - NA
+                        - NF
+                        - OH
+                        - OI
+                        - 'ON'
+                        - OP
+                        - OR
+                        - PB
+                        - PC
+                        - PD
+                        - PE
+                        - PF
+                        - PI
+                        - PK
+                        - PL
+                        - POR
+                        - PP
+                        - PQ
+                        - PR
+                        - PS
+                        - PW
+                        - PY
+                        - RA
+                        - RC
+                        - RCN
+                        - RE
+                        - REN
+                        - RF
+                        - RR
+                        - RT
+                        - SA
+                        - SB
+                        - SD
+                        - SE
+                        - SEA
+                        - SF
+                        - SH
+                        - SI
+                        - SM
+                        - SN
+                        - SP
+                        - SQ
+                        - SRN
+                        - SS
+                        - STA
+                        - SW
+                        - SZ
+                        - TB
+                        - TCR
+                        - TE
+                        - TF
+                        - TI
+                        - TIN
+                        - TL
+                        - TN
+                        - TP
+                        - UAR
+                        - UC
+                        - UCN
+                        - UN
+                        - UO
+                        - URI
+                        - VA
+                        - VC
+                        - VGR
+                        - VM
+                        - VN
+                        - VON
+                        - VOR
+                        - VP
+                        - VR
+                        - VS
+                        - VT
+                        - VV
+                        - WE
+                        - WM
+                        - WN
+                        - WR
+                        - WS
+                        - WY
+                        - XA
+                        - XC
+                        - XP
+                        - ZZZ
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxCategoryCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxCategoryCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxCategoryCodeType.yml	(revision 8435)
@@ -0,0 +1,29 @@
+horstoeko\zugferd\entities\extended\qdt\TaxCategoryCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - A
+                        - AA
+                        - AB
+                        - AC
+                        - AD
+                        - AE
+                        - B
+                        - C
+                        - D
+                        - E
+                        - F
+                        - G
+                        - H
+                        - I
+                        - J
+                        - K
+                        - L
+                        - M
+                        - O
+                        - S
+                        - Z
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxTypeCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxTypeCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/TaxTypeCodeType.yml	(revision 8435)
@@ -0,0 +1,62 @@
+horstoeko\zugferd\entities\extended\qdt\TaxTypeCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - AAA
+                        - AAB
+                        - AAC
+                        - AAD
+                        - AAE
+                        - AAF
+                        - AAG
+                        - AAH
+                        - AAI
+                        - AAJ
+                        - AAK
+                        - AAL
+                        - AAM
+                        - ADD
+                        - BOL
+                        - CAP
+                        - CAR
+                        - COC
+                        - CST
+                        - CUD
+                        - CVD
+                        - ENV
+                        - EXC
+                        - EXP
+                        - FET
+                        - FRE
+                        - GCN
+                        - GST
+                        - ILL
+                        - IMP
+                        - IND
+                        - LAC
+                        - LCN
+                        - LDP
+                        - LOC
+                        - LST
+                        - MCA
+                        - MCD
+                        - OTH
+                        - PDB
+                        - PDC
+                        - PRF
+                        - SCN
+                        - SSS
+                        - STT
+                        - SUP
+                        - SUR
+                        - SWT
+                        - TAC
+                        - TOT
+                        - TOX
+                        - TTA
+                        - VAD
+                        - VAT
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/TimeReferenceCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/TimeReferenceCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/qdt/TimeReferenceCodeType.yml	(revision 8435)
@@ -0,0 +1,11 @@
+horstoeko\zugferd\entities\extended\qdt\TimeReferenceCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '5'
+                        - '29'
+                        - '72'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/AdvancePaymentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/AdvancePaymentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/AdvancePaymentType.yml	(revision 8435)
@@ -0,0 +1,17 @@
+horstoeko\zugferd\entities\extended\ram\AdvancePaymentType:
+    properties:
+        paidAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        formattedReceivedDateTime:
+            -
+                Valid: null
+        includedTradeTax:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/CreditorFinancialInstitutionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/CreditorFinancialInstitutionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/CreditorFinancialInstitutionType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\CreditorFinancialInstitutionType:
+    properties:
+        bICID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/DebtorFinancialAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/DebtorFinancialAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/DebtorFinancialAccountType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\DebtorFinancialAccountType:
+    properties:
+        iBANID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentContextParameterType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentContextParameterType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentContextParameterType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\DocumentContextParameterType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentLineDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentLineDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/DocumentLineDocumentType.yml	(revision 8435)
@@ -0,0 +1,10 @@
+horstoeko\zugferd\entities\extended\ram\DocumentLineDocumentType:
+    properties:
+        lineID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        includedNote:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentContextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentContextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentContextType.yml	(revision 8435)
@@ -0,0 +1,15 @@
+horstoeko\zugferd\entities\extended\ram\ExchangedDocumentContextType:
+    properties:
+        testIndicator:
+            -
+                Valid: null
+        businessProcessSpecifiedDocumentContextParameter:
+            -
+                Valid: null
+        guidelineSpecifiedDocumentContextParameter:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ExchangedDocumentType.yml	(revision 8435)
@@ -0,0 +1,28 @@
+horstoeko\zugferd\entities\extended\ram\ExchangedDocumentType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        typeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        issueDateTime:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        copyIndicator:
+            -
+                Valid: null
+        includedNote:
+            -
+                Valid: null
+        effectiveSpecifiedPeriod:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,55 @@
+horstoeko\zugferd\entities\extended\ram\HeaderTradeAgreementType:
+    properties:
+        sellerTradeParty:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        buyerTradeParty:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        salesAgentTradeParty:
+            -
+                Valid: null
+        buyerTaxRepresentativeTradeParty:
+            -
+                Valid: null
+        sellerTaxRepresentativeTradeParty:
+            -
+                Valid: null
+        productEndUserTradeParty:
+            -
+                Valid: null
+        applicableTradeDeliveryTerms:
+            -
+                Valid: null
+        sellerOrderReferencedDocument:
+            -
+                Valid: null
+        buyerOrderReferencedDocument:
+            -
+                Valid: null
+        quotationReferencedDocument:
+            -
+                Valid: null
+        contractReferencedDocument:
+            -
+                Valid: null
+        additionalReferencedDocument:
+            -
+                Valid: null
+        buyerAgentTradeParty:
+            -
+                Valid: null
+        specifiedProcuringProject:
+            -
+                Valid: null
+        ultimateCustomerOrderReferencedDocument:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,26 @@
+horstoeko\zugferd\entities\extended\ram\HeaderTradeDeliveryType:
+    properties:
+        relatedSupplyChainConsignment:
+            -
+                Valid: null
+        shipToTradeParty:
+            -
+                Valid: null
+        ultimateShipToTradeParty:
+            -
+                Valid: null
+        shipFromTradeParty:
+            -
+                Valid: null
+        actualDeliverySupplyChainEvent:
+            -
+                Valid: null
+        despatchAdviceReferencedDocument:
+            -
+                Valid: null
+        receivingAdviceReferencedDocument:
+            -
+                Valid: null
+        deliveryNoteReferencedDocument:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/HeaderTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,60 @@
+horstoeko\zugferd\entities\extended\ram\HeaderTradeSettlementType:
+    properties:
+        invoiceCurrencyCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        invoicerTradeParty:
+            -
+                Valid: null
+        invoiceeTradeParty:
+            -
+                Valid: null
+        payeeTradeParty:
+            -
+                Valid: null
+        payerTradeParty:
+            -
+                Valid: null
+        taxApplicableTradeCurrencyExchange:
+            -
+                Valid: null
+        specifiedTradeSettlementPaymentMeans:
+            -
+                Valid: null
+        applicableTradeTax:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        billingSpecifiedPeriod:
+            -
+                Valid: null
+        specifiedTradeAllowanceCharge:
+            -
+                Valid: null
+        specifiedLogisticsServiceCharge:
+            -
+                Valid: null
+        specifiedTradePaymentTerms:
+            -
+                Valid: null
+        specifiedTradeSettlementHeaderMonetarySummation:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        invoiceReferencedDocument:
+            -
+                Valid: null
+        receivableSpecifiedTradeAccountingAccount:
+            -
+                Valid: null
+        specifiedAdvancePayment:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LegalOrganizationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LegalOrganizationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LegalOrganizationType.yml	(revision 8435)
@@ -0,0 +1,5 @@
+horstoeko\zugferd\entities\extended\ram\LegalOrganizationType:
+    properties:
+        postalTradeAddress:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,27 @@
+horstoeko\zugferd\entities\extended\ram\LineTradeAgreementType:
+    properties:
+        buyerOrderReferencedDocument:
+            -
+                Valid: null
+        quotationReferencedDocument:
+            -
+                Valid: null
+        contractReferencedDocument:
+            -
+                Valid: null
+        additionalReferencedDocument:
+            -
+                Valid: null
+        grossPriceProductTradePrice:
+            -
+                Valid: null
+        netPriceProductTradePrice:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        ultimateCustomerOrderReferencedDocument:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,25 @@
+horstoeko\zugferd\entities\extended\ram\LineTradeDeliveryType:
+    properties:
+        billedQuantity:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        shipToTradeParty:
+            -
+                Valid: null
+        ultimateShipToTradeParty:
+            -
+                Valid: null
+        actualDeliverySupplyChainEvent:
+            -
+                Valid: null
+        despatchAdviceReferencedDocument:
+            -
+                Valid: null
+        receivingAdviceReferencedDocument:
+            -
+                Valid: null
+        deliveryNoteReferencedDocument:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LineTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,31 @@
+horstoeko\zugferd\entities\extended\ram\LineTradeSettlementType:
+    properties:
+        applicableTradeTax:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        billingSpecifiedPeriod:
+            -
+                Valid: null
+        specifiedTradeAllowanceCharge:
+            -
+                Valid: null
+        specifiedTradeSettlementLineMonetarySummation:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        invoiceReferencedDocument:
+            -
+                Valid: null
+        additionalReferencedDocument:
+            -
+                Valid: null
+        receivableSpecifiedTradeAccountingAccount:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsServiceChargeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsServiceChargeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsServiceChargeType.yml	(revision 8435)
@@ -0,0 +1,15 @@
+horstoeko\zugferd\entities\extended\ram\LogisticsServiceChargeType:
+    properties:
+        description:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        appliedAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        appliedTradeTax:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsTransportMovementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsTransportMovementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/LogisticsTransportMovementType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType:
+    properties:
+        modeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/NoteType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/NoteType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/NoteType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\NoteType:
+    properties:
+        content:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ProcuringProjectType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ProcuringProjectType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ProcuringProjectType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\ram\ProcuringProjectType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        name:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ProductCharacteristicType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ProductCharacteristicType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ProductCharacteristicType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\ram\ProductCharacteristicType:
+    properties:
+        description:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        value:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ProductClassificationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ProductClassificationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ProductClassificationType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\ProductClassificationType:
+    properties:
+        classCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedDocumentType.yml	(revision 8435)
@@ -0,0 +1,5 @@
+horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType:
+    properties:
+        formattedIssueDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedProductType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedProductType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/ReferencedProductType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\ReferencedProductType:
+    properties:
+        name:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SpecifiedPeriodType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SpecifiedPeriodType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SpecifiedPeriodType.yml	(revision 8435)
@@ -0,0 +1,11 @@
+horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType:
+    properties:
+        startDateTime:
+            -
+                Valid: null
+        endDateTime:
+            -
+                Valid: null
+        completeDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainConsignmentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainConsignmentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainConsignmentType.yml	(revision 8435)
@@ -0,0 +1,5 @@
+horstoeko\zugferd\entities\extended\ram\SupplyChainConsignmentType:
+    properties:
+        specifiedLogisticsTransportMovement:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainEventType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainEventType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainEventType.yml	(revision 8435)
@@ -0,0 +1,9 @@
+horstoeko\zugferd\entities\extended\ram\SupplyChainEventType:
+    properties:
+        occurrenceDateTime:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeLineItemType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeLineItemType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeLineItemType.yml	(revision 8435)
@@ -0,0 +1,37 @@
+horstoeko\zugferd\entities\extended\ram\SupplyChainTradeLineItemType:
+    properties:
+        associatedDocumentLineDocument:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        specifiedTradeProduct:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        specifiedLineTradeAgreement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        specifiedLineTradeDelivery:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        specifiedLineTradeSettlement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeTransactionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
@@ -0,0 +1,30 @@
+horstoeko\zugferd\entities\extended\ram\SupplyChainTradeTransactionType:
+    properties:
+        includedSupplyChainTradeLineItem:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        applicableHeaderTradeAgreement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        applicableHeaderTradeDelivery:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        applicableHeaderTradeSettlement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TaxRegistrationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TaxRegistrationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TaxRegistrationType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\TaxRegistrationType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAccountingAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAccountingAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAccountingAccountType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAddressType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAddressType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAddressType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\TradeAddressType:
+    properties:
+        countryID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAllowanceChargeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAllowanceChargeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeAllowanceChargeType.yml	(revision 8435)
@@ -0,0 +1,17 @@
+horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType:
+    properties:
+        chargeIndicator:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        actualAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        categoryTradeTax:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeContactType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeContactType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeContactType.yml	(revision 8435)
@@ -0,0 +1,11 @@
+horstoeko\zugferd\entities\extended\ram\TradeContactType:
+    properties:
+        telephoneUniversalCommunication:
+            -
+                Valid: null
+        faxUniversalCommunication:
+            -
+                Valid: null
+        emailURIUniversalCommunication:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCountryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCountryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCountryType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\TradeCountryType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCurrencyExchangeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCurrencyExchangeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeCurrencyExchangeType.yml	(revision 8435)
@@ -0,0 +1,20 @@
+horstoeko\zugferd\entities\extended\ram\TradeCurrencyExchangeType:
+    properties:
+        sourceCurrencyCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        targetCurrencyCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        conversionRate:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        conversionRateDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeDeliveryTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeDeliveryTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeDeliveryTermsType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\TradeDeliveryTermsType:
+    properties:
+        deliveryTypeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePartyType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePartyType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePartyType.yml	(revision 8435)
@@ -0,0 +1,17 @@
+horstoeko\zugferd\entities\extended\ram\TradePartyType:
+    properties:
+        specifiedLegalOrganization:
+            -
+                Valid: null
+        definedTradeContact:
+            -
+                Valid: null
+        postalTradeAddress:
+            -
+                Valid: null
+        uRIUniversalCommunication:
+            -
+                Valid: null
+        specifiedTaxRegistration:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentDiscountTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentDiscountTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentDiscountTermsType.yml	(revision 8435)
@@ -0,0 +1,5 @@
+horstoeko\zugferd\entities\extended\ram\TradePaymentDiscountTermsType:
+    properties:
+        basisDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentPenaltyTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentPenaltyTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentPenaltyTermsType.yml	(revision 8435)
@@ -0,0 +1,5 @@
+horstoeko\zugferd\entities\extended\ram\TradePaymentPenaltyTermsType:
+    properties:
+        basisDateTime:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePaymentTermsType.yml	(revision 8435)
@@ -0,0 +1,14 @@
+horstoeko\zugferd\entities\extended\ram\TradePaymentTermsType:
+    properties:
+        dueDateDateTime:
+            -
+                Valid: null
+        applicableTradePaymentPenaltyTerms:
+            -
+                Valid: null
+        applicableTradePaymentDiscountTerms:
+            -
+                Valid: null
+        payeeTradeParty:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePriceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePriceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradePriceType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\extended\ram\TradePriceType:
+    properties:
+        chargeAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        appliedTradeAllowanceCharge:
+            -
+                Valid: null
+        includedTradeTax:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeProductType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeProductType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeProductType.yml	(revision 8435)
@@ -0,0 +1,22 @@
+horstoeko\zugferd\entities\extended\ram\TradeProductType:
+    properties:
+        name:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        applicableProductCharacteristic:
+            -
+                Valid: null
+        designatedProductClassification:
+            -
+                Valid: null
+        individualTradeProductInstance:
+            -
+                Valid: null
+        originTradeCountry:
+            -
+                Valid: null
+        includedReferencedProduct:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementFinancialCardType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementFinancialCardType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementFinancialCardType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\TradeSettlementFinancialCardType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementHeaderMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,22 @@
+horstoeko\zugferd\entities\extended\ram\TradeSettlementHeaderMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        taxBasisTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        grandTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        duePayableAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementLineMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementLineMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementLineMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\ram\TradeSettlementLineMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementPaymentMeansType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
@@ -0,0 +1,19 @@
+horstoeko\zugferd\entities\extended\ram\TradeSettlementPaymentMeansType:
+    properties:
+        typeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        applicableTradeSettlementFinancialCard:
+            -
+                Valid: null
+        payerPartyDebtorFinancialAccount:
+            -
+                Valid: null
+        payeePartyCreditorFinancialAccount:
+            -
+                Valid: null
+        payeeSpecifiedCreditorFinancialInstitution:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeTaxType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeTaxType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/ram/TradeTaxType.yml	(revision 8435)
@@ -0,0 +1,10 @@
+horstoeko\zugferd\entities\extended\ram\TradeTaxType:
+    properties:
+        categoryCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        taxPointDate:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/rsm/CrossIndustryInvoiceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
@@ -0,0 +1,23 @@
+horstoeko\zugferd\entities\extended\rsm\CrossIndustryInvoiceType:
+    properties:
+        exchangedDocumentContext:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        exchangedDocument:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        supplyChainTradeTransaction:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/BinaryObjectType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/BinaryObjectType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/BinaryObjectType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\udt\BinaryObjectType:
+    properties:
+        mimeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        filename:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/DateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\udt\DateTimeType\DateTimeStringAType:
+    properties:
+        format:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/DateType.DateStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/DateType.DateStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/DateType.DateStringAType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\udt\DateType\DateStringAType:
+    properties:
+        format:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/MeasureType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/MeasureType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/MeasureType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\udt\MeasureType:
+    properties:
+        unitCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/QuantityType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/QuantityType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/extended/udt/QuantityType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\extended\udt\QuantityType:
+    properties:
+        unitCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/qdt/CountryIDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/qdt/CountryIDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/qdt/CountryIDType.yml	(revision 8435)
@@ -0,0 +1,259 @@
+horstoeko\zugferd\entities\minimum\qdt\CountryIDType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - 1A
+                        - AD
+                        - AE
+                        - AF
+                        - AG
+                        - AI
+                        - AL
+                        - AM
+                        - AO
+                        - AQ
+                        - AR
+                        - AS
+                        - AT
+                        - AU
+                        - AW
+                        - AX
+                        - AZ
+                        - BA
+                        - BB
+                        - BD
+                        - BE
+                        - BF
+                        - BG
+                        - BH
+                        - BI
+                        - BJ
+                        - BL
+                        - BM
+                        - BN
+                        - BO
+                        - BQ
+                        - BR
+                        - BS
+                        - BT
+                        - BV
+                        - BW
+                        - BY
+                        - BZ
+                        - CA
+                        - CC
+                        - CD
+                        - CF
+                        - CG
+                        - CH
+                        - CI
+                        - CK
+                        - CL
+                        - CM
+                        - CN
+                        - CO
+                        - CR
+                        - CU
+                        - CV
+                        - CW
+                        - CX
+                        - CY
+                        - CZ
+                        - DE
+                        - DJ
+                        - DK
+                        - DM
+                        - DO
+                        - DZ
+                        - EC
+                        - EE
+                        - EG
+                        - EH
+                        - ER
+                        - ES
+                        - ET
+                        - FI
+                        - FJ
+                        - FK
+                        - FM
+                        - FO
+                        - FR
+                        - GA
+                        - GB
+                        - GD
+                        - GE
+                        - GF
+                        - GG
+                        - GH
+                        - GI
+                        - GL
+                        - GM
+                        - GN
+                        - GP
+                        - GQ
+                        - GR
+                        - GS
+                        - GT
+                        - GU
+                        - GW
+                        - GY
+                        - HK
+                        - HM
+                        - HN
+                        - HR
+                        - HT
+                        - HU
+                        - ID
+                        - IE
+                        - IL
+                        - IM
+                        - IN
+                        - IO
+                        - IQ
+                        - IR
+                        - IS
+                        - IT
+                        - JE
+                        - JM
+                        - JO
+                        - JP
+                        - KE
+                        - KG
+                        - KH
+                        - KI
+                        - KM
+                        - KN
+                        - KP
+                        - KR
+                        - KW
+                        - KY
+                        - KZ
+                        - LA
+                        - LB
+                        - LC
+                        - LI
+                        - LK
+                        - LR
+                        - LS
+                        - LT
+                        - LU
+                        - LV
+                        - LY
+                        - MA
+                        - MC
+                        - MD
+                        - ME
+                        - MF
+                        - MG
+                        - MH
+                        - MK
+                        - ML
+                        - MM
+                        - MN
+                        - MO
+                        - MP
+                        - MQ
+                        - MR
+                        - MS
+                        - MT
+                        - MU
+                        - MV
+                        - MW
+                        - MX
+                        - MY
+                        - MZ
+                        - NA
+                        - NC
+                        - NE
+                        - NF
+                        - NG
+                        - NI
+                        - NL
+                        - 'NO'
+                        - NP
+                        - NR
+                        - NU
+                        - NZ
+                        - OM
+                        - PA
+                        - PE
+                        - PF
+                        - PG
+                        - PH
+                        - PK
+                        - PL
+                        - PM
+                        - PN
+                        - PR
+                        - PS
+                        - PT
+                        - PW
+                        - PY
+                        - QA
+                        - RE
+                        - RO
+                        - RS
+                        - RU
+                        - RW
+                        - SA
+                        - SB
+                        - SC
+                        - SD
+                        - SE
+                        - SG
+                        - SH
+                        - SI
+                        - SJ
+                        - SK
+                        - SL
+                        - SM
+                        - SN
+                        - SO
+                        - SR
+                        - SS
+                        - ST
+                        - SV
+                        - SX
+                        - SY
+                        - SZ
+                        - TC
+                        - TD
+                        - TF
+                        - TG
+                        - TH
+                        - TJ
+                        - TK
+                        - TL
+                        - TM
+                        - TN
+                        - TO
+                        - TR
+                        - TT
+                        - TV
+                        - TW
+                        - TZ
+                        - UA
+                        - UG
+                        - UM
+                        - US
+                        - UY
+                        - UZ
+                        - VA
+                        - VC
+                        - VE
+                        - VG
+                        - VI
+                        - VN
+                        - VU
+                        - WF
+                        - WS
+                        - XI
+                        - YE
+                        - YT
+                        - ZA
+                        - ZM
+                        - ZW
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/qdt/CurrencyCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/qdt/CurrencyCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/qdt/CurrencyCodeType.yml	(revision 8435)
@@ -0,0 +1,187 @@
+horstoeko\zugferd\entities\minimum\qdt\CurrencyCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - 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
+                        - 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
+                        - LYD
+                        - MAD
+                        - MDL
+                        - MGA
+                        - MKD
+                        - MMK
+                        - MNT
+                        - MOP
+                        - MRU
+                        - 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
+                        - RWF
+                        - SAR
+                        - SBD
+                        - SCR
+                        - SDG
+                        - SEK
+                        - SGD
+                        - SHP
+                        - SLL
+                        - SOS
+                        - SRD
+                        - SSP
+                        - STN
+                        - SVC
+                        - SYP
+                        - SZL
+                        - THB
+                        - TJS
+                        - TMT
+                        - TND
+                        - TOP
+                        - TRY
+                        - TTD
+                        - TWD
+                        - TZS
+                        - UAH
+                        - UGX
+                        - USD
+                        - USN
+                        - UYI
+                        - UYU
+                        - UYW
+                        - UZS
+                        - VES
+                        - VND
+                        - VUV
+                        - WST
+                        - XAF
+                        - XAG
+                        - XAU
+                        - XBA
+                        - XBB
+                        - XBC
+                        - XBD
+                        - XCD
+                        - XDR
+                        - XOF
+                        - XPD
+                        - XPF
+                        - XPT
+                        - XSU
+                        - XTS
+                        - XUA
+                        - XXX
+                        - YER
+                        - ZAR
+                        - ZMW
+                        - ZWL
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/qdt/DocumentCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/qdt/DocumentCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/qdt/DocumentCodeType.yml	(revision 8435)
@@ -0,0 +1,53 @@
+horstoeko\zugferd\entities\minimum\qdt\DocumentCodeType:
+    properties:
+        __value:
+            -
+                Choice:
+                    choices:
+                        - '80'
+                        - '81'
+                        - '82'
+                        - '83'
+                        - '84'
+                        - '130'
+                        - '202'
+                        - '203'
+                        - '204'
+                        - '211'
+                        - '261'
+                        - '262'
+                        - '295'
+                        - '296'
+                        - '308'
+                        - '325'
+                        - '326'
+                        - '380'
+                        - '381'
+                        - '383'
+                        - '384'
+                        - '385'
+                        - '386'
+                        - '387'
+                        - '388'
+                        - '389'
+                        - '390'
+                        - '393'
+                        - '394'
+                        - '395'
+                        - '396'
+                        - '420'
+                        - '456'
+                        - '457'
+                        - '458'
+                        - '527'
+                        - '575'
+                        - '623'
+                        - '633'
+                        - '751'
+                        - '780'
+                        - '875'
+                        - '876'
+                        - '877'
+                        - '935'
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/DocumentContextParameterType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/DocumentContextParameterType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/DocumentContextParameterType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\minimum\ram\DocumentContextParameterType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentContextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentContextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentContextType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentContextType:
+    properties:
+        businessProcessSpecifiedDocumentContextParameter:
+            -
+                Valid: null
+        guidelineSpecifiedDocumentContextParameter:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/ExchangedDocumentType.yml	(revision 8435)
@@ -0,0 +1,19 @@
+horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        typeCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        issueDateTime:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,19 @@
+horstoeko\zugferd\entities\minimum\ram\HeaderTradeAgreementType:
+    properties:
+        sellerTradeParty:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        buyerTradeParty:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        buyerOrderReferencedDocument:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/HeaderTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,14 @@
+horstoeko\zugferd\entities\minimum\ram\HeaderTradeSettlementType:
+    properties:
+        invoiceCurrencyCode:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        specifiedTradeSettlementHeaderMonetarySummation:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/ReferencedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/ReferencedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/ReferencedDocumentType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\minimum\ram\ReferencedDocumentType:
+    properties:
+        issuerAssignedID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/SupplyChainTradeTransactionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
@@ -0,0 +1,23 @@
+horstoeko\zugferd\entities\minimum\ram\SupplyChainTradeTransactionType:
+    properties:
+        applicableHeaderTradeAgreement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        applicableHeaderTradeDelivery:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        applicableHeaderTradeSettlement:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/TaxRegistrationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/TaxRegistrationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/TaxRegistrationType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\minimum\ram\TaxRegistrationType:
+    properties:
+        iD:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeAddressType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeAddressType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeAddressType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\minimum\ram\TradeAddressType:
+    properties:
+        countryID:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradePartyType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradePartyType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradePartyType.yml	(revision 8435)
@@ -0,0 +1,16 @@
+horstoeko\zugferd\entities\minimum\ram\TradePartyType:
+    properties:
+        name:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        specifiedLegalOrganization:
+            -
+                Valid: null
+        postalTradeAddress:
+            -
+                Valid: null
+        specifiedTaxRegistration:
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,17 @@
+horstoeko\zugferd\entities\minimum\ram\TradeSettlementHeaderMonetarySummationType:
+    properties:
+        taxBasisTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        grandTotalAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+        duePayableAmount:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/rsm/CrossIndustryInvoiceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
@@ -0,0 +1,23 @@
+horstoeko\zugferd\entities\minimum\rsm\CrossIndustryInvoiceType:
+    properties:
+        exchangedDocumentContext:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        exchangedDocument:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
+        supplyChainTradeTransaction:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
+            -
+                Valid: null
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/udt/DateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/validation/minimum/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,7 @@
+horstoeko\zugferd\entities\minimum\udt\DateTimeType\DateTimeStringAType:
+    properties:
+        format:
+            -
+                NotNull:
+                    groups:
+                        - xsd_rules
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/AllowanceChargeReasonCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\qdt\AllowanceChargeReasonCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/CountryIDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/CountryIDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/CountryIDType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\qdt\CountryIDType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/CurrencyCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/CurrencyCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/CurrencyCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\qdt\CurrencyCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/DocumentCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/DocumentCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/DocumentCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\qdt\DocumentCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType\DateTimeStringAType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        format:
+            expose: true
+            access_type: public_method
+            serialized_name: format
+            accessor:
+                getter: getFormat
+                setter: setFormat
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/FormattedDateTimeType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType:
+    properties:
+        dateTimeString:
+            expose: true
+            access_type: public_method
+            serialized_name: DateTimeString
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:QualifiedDataType:100'
+            accessor:
+                getter: getDateTimeString
+                setter: setDateTimeString
+            type: horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType\DateTimeStringAType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/PaymentMeansCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/PaymentMeansCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/PaymentMeansCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\qdt\PaymentMeansCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxCategoryCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxCategoryCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxCategoryCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\qdt\TaxCategoryCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxTypeCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxTypeCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TaxTypeCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\qdt\TaxTypeCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TimeReferenceCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TimeReferenceCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/qdt/TimeReferenceCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\qdt\TimeReferenceCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/CreditorFinancialAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/CreditorFinancialAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/CreditorFinancialAccountType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basic\ram\CreditorFinancialAccountType:
+    properties:
+        iBANID:
+            expose: true
+            access_type: public_method
+            serialized_name: IBANID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIBANID
+                setter: setIBANID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
+        proprietaryID:
+            expose: true
+            access_type: public_method
+            serialized_name: ProprietaryID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getProprietaryID
+                setter: setProprietaryID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/DebtorFinancialAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/DebtorFinancialAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/DebtorFinancialAccountType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basic\ram\DebtorFinancialAccountType:
+    properties:
+        iBANID:
+            expose: true
+            access_type: public_method
+            serialized_name: IBANID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIBANID
+                setter: setIBANID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentContextParameterType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentContextParameterType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentContextParameterType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basic\ram\DocumentContextParameterType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentLineDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentLineDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/DocumentLineDocumentType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basic\ram\DocumentLineDocumentType:
+    properties:
+        lineID:
+            expose: true
+            access_type: public_method
+            serialized_name: LineID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineID
+                setter: setLineID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
+        includedNote:
+            expose: true
+            access_type: public_method
+            serialized_name: IncludedNote
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIncludedNote
+                setter: setIncludedNote
+            type: horstoeko\zugferd\entities\basic\ram\NoteType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentContextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentContextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentContextType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basic\ram\ExchangedDocumentContextType:
+    properties:
+        businessProcessSpecifiedDocumentContextParameter:
+            expose: true
+            access_type: public_method
+            serialized_name: BusinessProcessSpecifiedDocumentContextParameter
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBusinessProcessSpecifiedDocumentContextParameter
+                setter: setBusinessProcessSpecifiedDocumentContextParameter
+            type: horstoeko\zugferd\entities\basic\ram\DocumentContextParameterType
+        guidelineSpecifiedDocumentContextParameter:
+            expose: true
+            access_type: public_method
+            serialized_name: GuidelineSpecifiedDocumentContextParameter
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGuidelineSpecifiedDocumentContextParameter
+                setter: setGuidelineSpecifiedDocumentContextParameter
+            type: horstoeko\zugferd\entities\basic\ram\DocumentContextParameterType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/ExchangedDocumentType.yml	(revision 8435)
@@ -0,0 +1,50 @@
+horstoeko\zugferd\entities\basic\ram\ExchangedDocumentType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\basic\qdt\DocumentCodeType
+        issueDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: IssueDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIssueDateTime
+                setter: setIssueDateTime
+            type: horstoeko\zugferd\entities\basic\udt\DateTimeType
+        includedNote:
+            expose: true
+            access_type: public_method
+            serialized_name: IncludedNote
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIncludedNote
+                setter: setIncludedNote
+            xml_list:
+                inline: true
+                entry_name: IncludedNote
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basic\ram\NoteType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,68 @@
+horstoeko\zugferd\entities\basic\ram\HeaderTradeAgreementType:
+    properties:
+        buyerReference:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerReference
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerReference
+                setter: setBuyerReference
+            type: horstoeko\zugferd\entities\basic\udt\TextType
+        sellerTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerTradeParty
+                setter: setSellerTradeParty
+            type: horstoeko\zugferd\entities\basic\ram\TradePartyType
+        buyerTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerTradeParty
+                setter: setBuyerTradeParty
+            type: horstoeko\zugferd\entities\basic\ram\TradePartyType
+        sellerTaxRepresentativeTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerTaxRepresentativeTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerTaxRepresentativeTradeParty
+                setter: setSellerTaxRepresentativeTradeParty
+            type: horstoeko\zugferd\entities\basic\ram\TradePartyType
+        buyerOrderReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerOrderReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerOrderReferencedDocument
+                setter: setBuyerOrderReferencedDocument
+            type: horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType
+        contractReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: ContractReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getContractReferencedDocument
+                setter: setContractReferencedDocument
+            type: horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\basic\ram\HeaderTradeDeliveryType:
+    properties:
+        shipToTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: ShipToTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getShipToTradeParty
+                setter: setShipToTradeParty
+            type: horstoeko\zugferd\entities\basic\ram\TradePartyType
+        actualDeliverySupplyChainEvent:
+            expose: true
+            access_type: public_method
+            serialized_name: ActualDeliverySupplyChainEvent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getActualDeliverySupplyChainEvent
+                setter: setActualDeliverySupplyChainEvent
+            type: horstoeko\zugferd\entities\basic\ram\SupplyChainEventType
+        despatchAdviceReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: DespatchAdviceReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDespatchAdviceReferencedDocument
+                setter: setDespatchAdviceReferencedDocument
+            type: horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/HeaderTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,153 @@
+horstoeko\zugferd\entities\basic\ram\HeaderTradeSettlementType:
+    properties:
+        creditorReferenceID:
+            expose: true
+            access_type: public_method
+            serialized_name: CreditorReferenceID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCreditorReferenceID
+                setter: setCreditorReferenceID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
+        paymentReference:
+            expose: true
+            access_type: public_method
+            serialized_name: PaymentReference
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPaymentReference
+                setter: setPaymentReference
+            type: horstoeko\zugferd\entities\basic\udt\TextType
+        taxCurrencyCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxCurrencyCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxCurrencyCode
+                setter: setTaxCurrencyCode
+            type: horstoeko\zugferd\entities\basic\qdt\CurrencyCodeType 
+        invoiceCurrencyCode:
+            expose: true
+            access_type: public_method
+            serialized_name: InvoiceCurrencyCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInvoiceCurrencyCode
+                setter: setInvoiceCurrencyCode
+            type: horstoeko\zugferd\entities\basic\qdt\CurrencyCodeType
+        payeeTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: PayeeTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayeeTradeParty
+                setter: setPayeeTradeParty
+            type: horstoeko\zugferd\entities\basic\ram\TradePartyType
+        specifiedTradeSettlementPaymentMeans:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeSettlementPaymentMeans
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeSettlementPaymentMeans
+                setter: setSpecifiedTradeSettlementPaymentMeans
+            type: horstoeko\zugferd\entities\basic\ram\TradeSettlementPaymentMeansType
+        applicableTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableTradeTax
+                setter: setApplicableTradeTax
+            xml_list:
+                inline: true
+                entry_name: ApplicableTradeTax
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basic\ram\TradeTaxType>
+        billingSpecifiedPeriod:
+            expose: true
+            access_type: public_method
+            serialized_name: BillingSpecifiedPeriod
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBillingSpecifiedPeriod
+                setter: setBillingSpecifiedPeriod
+            type: horstoeko\zugferd\entities\basic\ram\SpecifiedPeriodType
+        specifiedTradeAllowanceCharge:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeAllowanceCharge
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeAllowanceCharge
+                setter: setSpecifiedTradeAllowanceCharge
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTradeAllowanceCharge
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType>
+        specifiedTradePaymentTerms:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradePaymentTerms
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradePaymentTerms
+                setter: setSpecifiedTradePaymentTerms
+            type: horstoeko\zugferd\entities\basic\ram\TradePaymentTermsType
+        specifiedTradeSettlementHeaderMonetarySummation:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeSettlementHeaderMonetarySummation
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeSettlementHeaderMonetarySummation
+                setter: setSpecifiedTradeSettlementHeaderMonetarySummation
+            type: horstoeko\zugferd\entities\basic\ram\TradeSettlementHeaderMonetarySummationType
+        invoiceReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: InvoiceReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInvoiceReferencedDocument
+                setter: setInvoiceReferencedDocument
+            type: horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType
+        receivableSpecifiedTradeAccountingAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: ReceivableSpecifiedTradeAccountingAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReceivableSpecifiedTradeAccountingAccount
+                setter: setReceivableSpecifiedTradeAccountingAccount
+            type: horstoeko\zugferd\entities\basic\ram\TradeAccountingAccountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/LegalOrganizationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/LegalOrganizationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/LegalOrganizationType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basic\ram\LegalOrganizationType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
+        tradingBusinessName:
+            expose: true
+            access_type: public_method
+            serialized_name: TradingBusinessName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTradingBusinessName
+                setter: setTradingBusinessName
+            type: horstoeko\zugferd\entities\basic\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basic\ram\LineTradeAgreementType:
+    properties:
+        grossPriceProductTradePrice:
+            expose: true
+            access_type: public_method
+            serialized_name: GrossPriceProductTradePrice
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGrossPriceProductTradePrice
+                setter: setGrossPriceProductTradePrice
+            type: horstoeko\zugferd\entities\basic\ram\TradePriceType
+        netPriceProductTradePrice:
+            expose: true
+            access_type: public_method
+            serialized_name: NetPriceProductTradePrice
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getNetPriceProductTradePrice
+                setter: setNetPriceProductTradePrice
+            type: horstoeko\zugferd\entities\basic\ram\TradePriceType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basic\ram\LineTradeDeliveryType:
+    properties:
+        billedQuantity:
+            expose: true
+            access_type: public_method
+            serialized_name: BilledQuantity
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBilledQuantity
+                setter: setBilledQuantity
+            type: horstoeko\zugferd\entities\basic\udt\QuantityType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/LineTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,50 @@
+horstoeko\zugferd\entities\basic\ram\LineTradeSettlementType:
+    properties:
+        applicableTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableTradeTax
+                setter: setApplicableTradeTax
+            type: horstoeko\zugferd\entities\basic\ram\TradeTaxType
+        billingSpecifiedPeriod:
+            expose: true
+            access_type: public_method
+            serialized_name: BillingSpecifiedPeriod
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBillingSpecifiedPeriod
+                setter: setBillingSpecifiedPeriod
+            type: horstoeko\zugferd\entities\basic\ram\SpecifiedPeriodType
+        specifiedTradeAllowanceCharge:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeAllowanceCharge
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeAllowanceCharge
+                setter: setSpecifiedTradeAllowanceCharge
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTradeAllowanceCharge
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType>
+        specifiedTradeSettlementLineMonetarySummation:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeSettlementLineMonetarySummation
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeSettlementLineMonetarySummation
+                setter: setSpecifiedTradeSettlementLineMonetarySummation
+            type: horstoeko\zugferd\entities\basic\ram\TradeSettlementLineMonetarySummationType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/NoteType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/NoteType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/NoteType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basic\ram\NoteType:
+    properties:
+        content:
+            expose: true
+            access_type: public_method
+            serialized_name: Content
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getContent
+                setter: setContent
+            type: horstoeko\zugferd\entities\basic\udt\TextType
+        subjectCode:
+            expose: true
+            access_type: public_method
+            serialized_name: SubjectCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSubjectCode
+                setter: setSubjectCode
+            type: horstoeko\zugferd\entities\basic\udt\CodeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/ReferencedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/ReferencedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/ReferencedDocumentType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basic\ram\ReferencedDocumentType:
+    properties:
+        issuerAssignedID:
+            expose: true
+            access_type: public_method
+            serialized_name: IssuerAssignedID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIssuerAssignedID
+                setter: setIssuerAssignedID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
+        formattedIssueDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: FormattedIssueDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getFormattedIssueDateTime
+                setter: setFormattedIssueDateTime
+            type: horstoeko\zugferd\entities\basic\qdt\FormattedDateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/SpecifiedPeriodType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/SpecifiedPeriodType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/SpecifiedPeriodType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basic\ram\SpecifiedPeriodType:
+    properties:
+        startDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: StartDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getStartDateTime
+                setter: setStartDateTime
+            type: horstoeko\zugferd\entities\basic\udt\DateTimeType
+        endDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: EndDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getEndDateTime
+                setter: setEndDateTime
+            type: horstoeko\zugferd\entities\basic\udt\DateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainEventType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainEventType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainEventType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basic\ram\SupplyChainEventType:
+    properties:
+        occurrenceDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: OccurrenceDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getOccurrenceDateTime
+                setter: setOccurrenceDateTime
+            type: horstoeko\zugferd\entities\basic\udt\DateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeLineItemType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeLineItemType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeLineItemType.yml	(revision 8435)
@@ -0,0 +1,57 @@
+horstoeko\zugferd\entities\basic\ram\SupplyChainTradeLineItemType:
+    properties:
+        associatedDocumentLineDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: AssociatedDocumentLineDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAssociatedDocumentLineDocument
+                setter: setAssociatedDocumentLineDocument
+            type: horstoeko\zugferd\entities\basic\ram\DocumentLineDocumentType
+        specifiedTradeProduct:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeProduct
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeProduct
+                setter: setSpecifiedTradeProduct
+            type: horstoeko\zugferd\entities\basic\ram\TradeProductType
+        specifiedLineTradeAgreement:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLineTradeAgreement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLineTradeAgreement
+                setter: setSpecifiedLineTradeAgreement
+            type: horstoeko\zugferd\entities\basic\ram\LineTradeAgreementType
+        specifiedLineTradeDelivery:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLineTradeDelivery
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLineTradeDelivery
+                setter: setSpecifiedLineTradeDelivery
+            type: horstoeko\zugferd\entities\basic\ram\LineTradeDeliveryType
+        specifiedLineTradeSettlement:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLineTradeSettlement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLineTradeSettlement
+                setter: setSpecifiedLineTradeSettlement
+            type: horstoeko\zugferd\entities\basic\ram\LineTradeSettlementType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeTransactionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
@@ -0,0 +1,50 @@
+horstoeko\zugferd\entities\basic\ram\SupplyChainTradeTransactionType:
+    properties:
+        includedSupplyChainTradeLineItem:
+            expose: true
+            access_type: public_method
+            serialized_name: IncludedSupplyChainTradeLineItem
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIncludedSupplyChainTradeLineItem
+                setter: setIncludedSupplyChainTradeLineItem
+            xml_list:
+                inline: true
+                entry_name: IncludedSupplyChainTradeLineItem
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basic\ram\SupplyChainTradeLineItemType>
+        applicableHeaderTradeAgreement:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeAgreement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeAgreement
+                setter: setApplicableHeaderTradeAgreement
+            type: horstoeko\zugferd\entities\basic\ram\HeaderTradeAgreementType
+        applicableHeaderTradeDelivery:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeDelivery
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeDelivery
+                setter: setApplicableHeaderTradeDelivery
+            type: horstoeko\zugferd\entities\basic\ram\HeaderTradeDeliveryType
+        applicableHeaderTradeSettlement:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeSettlement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeSettlement
+                setter: setApplicableHeaderTradeSettlement
+            type: horstoeko\zugferd\entities\basic\ram\HeaderTradeSettlementType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TaxRegistrationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TaxRegistrationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TaxRegistrationType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basic\ram\TaxRegistrationType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAccountingAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAccountingAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAccountingAccountType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basic\ram\TradeAccountingAccountType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAddressType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAddressType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAddressType.yml	(revision 8435)
@@ -0,0 +1,79 @@
+horstoeko\zugferd\entities\basic\ram\TradeAddressType:
+    properties:
+        postcodeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: PostcodeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPostcodeCode
+                setter: setPostcodeCode
+            type: horstoeko\zugferd\entities\basic\udt\CodeType
+        lineOne:
+            expose: true
+            access_type: public_method
+            serialized_name: LineOne
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineOne
+                setter: setLineOne
+            type: horstoeko\zugferd\entities\basic\udt\TextType
+        lineTwo:
+            expose: true
+            access_type: public_method
+            serialized_name: LineTwo
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineTwo
+                setter: setLineTwo
+            type: horstoeko\zugferd\entities\basic\udt\TextType
+        lineThree:
+            expose: true
+            access_type: public_method
+            serialized_name: LineThree
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineThree
+                setter: setLineThree
+            type: horstoeko\zugferd\entities\basic\udt\TextType
+        cityName:
+            expose: true
+            access_type: public_method
+            serialized_name: CityName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCityName
+                setter: setCityName
+            type: horstoeko\zugferd\entities\basic\udt\TextType
+        countryID:
+            expose: true
+            access_type: public_method
+            serialized_name: CountryID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCountryID
+                setter: setCountryID
+            type: horstoeko\zugferd\entities\basic\qdt\CountryIDType
+        countrySubDivisionName:
+            expose: true
+            access_type: public_method
+            serialized_name: CountrySubDivisionName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCountrySubDivisionName
+                setter: setCountrySubDivisionName
+            type: horstoeko\zugferd\entities\basic\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAllowanceChargeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAllowanceChargeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeAllowanceChargeType.yml	(revision 8435)
@@ -0,0 +1,79 @@
+horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType:
+    properties:
+        chargeIndicator:
+            expose: true
+            access_type: public_method
+            serialized_name: ChargeIndicator
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getChargeIndicator
+                setter: setChargeIndicator
+            type: horstoeko\zugferd\entities\basic\udt\IndicatorType
+        calculationPercent:
+            expose: true
+            access_type: public_method
+            serialized_name: CalculationPercent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCalculationPercent
+                setter: setCalculationPercent
+            type: horstoeko\zugferd\entities\basic\udt\PercentType
+        basisAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisAmount
+                setter: setBasisAmount
+            type: horstoeko\zugferd\entities\basic\udt\AmountType
+        actualAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ActualAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getActualAmount
+                setter: setActualAmount
+            type: horstoeko\zugferd\entities\basic\udt\AmountType
+        reasonCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ReasonCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReasonCode
+                setter: setReasonCode
+            type: horstoeko\zugferd\entities\basic\qdt\AllowanceChargeReasonCodeType
+        reason:
+            expose: true
+            access_type: public_method
+            serialized_name: Reason
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReason
+                setter: setReason
+            type: horstoeko\zugferd\entities\basic\udt\TextType
+        categoryTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: CategoryTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCategoryTradeTax
+                setter: setCategoryTradeTax
+            type: horstoeko\zugferd\entities\basic\ram\TradeTaxType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePartyType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePartyType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePartyType.yml	(revision 8435)
@@ -0,0 +1,91 @@
+horstoeko\zugferd\entities\basic\ram\TradePartyType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            xml_list:
+                inline: true
+                entry_name: ID
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basic\udt\IDType>
+        globalID:
+            expose: true
+            access_type: public_method
+            serialized_name: GlobalID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGlobalID
+                setter: setGlobalID
+            xml_list:
+                inline: true
+                entry_name: GlobalID
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basic\udt\IDType>
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            type: horstoeko\zugferd\entities\basic\udt\TextType
+        specifiedLegalOrganization:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLegalOrganization
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLegalOrganization
+                setter: setSpecifiedLegalOrganization
+            type: horstoeko\zugferd\entities\basic\ram\LegalOrganizationType
+        postalTradeAddress:
+            expose: true
+            access_type: public_method
+            serialized_name: PostalTradeAddress
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPostalTradeAddress
+                setter: setPostalTradeAddress
+            type: horstoeko\zugferd\entities\basic\ram\TradeAddressType
+        uRIUniversalCommunication:
+            expose: true
+            access_type: public_method
+            serialized_name: URIUniversalCommunication
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getURIUniversalCommunication
+                setter: setURIUniversalCommunication
+            type: horstoeko\zugferd\entities\basic\ram\UniversalCommunicationType
+        specifiedTaxRegistration:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTaxRegistration
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTaxRegistration
+                setter: setSpecifiedTaxRegistration
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTaxRegistration
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basic\ram\TaxRegistrationType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePaymentTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePaymentTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePaymentTermsType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\basic\ram\TradePaymentTermsType:
+    properties:
+        description:
+            expose: true
+            access_type: public_method
+            serialized_name: Description
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDescription
+                setter: setDescription
+            type: horstoeko\zugferd\entities\basic\udt\TextType
+        dueDateDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: DueDateDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDueDateDateTime
+                setter: setDueDateDateTime
+            type: horstoeko\zugferd\entities\basic\udt\DateTimeType
+        directDebitMandateID:
+            expose: true
+            access_type: public_method
+            serialized_name: DirectDebitMandateID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDirectDebitMandateID
+                setter: setDirectDebitMandateID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePriceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePriceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradePriceType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\basic\ram\TradePriceType:
+    properties:
+        chargeAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ChargeAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getChargeAmount
+                setter: setChargeAmount
+            type: horstoeko\zugferd\entities\basic\udt\AmountType
+        basisQuantity:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisQuantity
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisQuantity
+                setter: setBasisQuantity
+            type: horstoeko\zugferd\entities\basic\udt\QuantityType
+        appliedTradeAllowanceCharge:
+            expose: true
+            access_type: public_method
+            serialized_name: AppliedTradeAllowanceCharge
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAppliedTradeAllowanceCharge
+                setter: setAppliedTradeAllowanceCharge
+            type: horstoeko\zugferd\entities\basic\ram\TradeAllowanceChargeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeProductType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeProductType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeProductType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basic\ram\TradeProductType:
+    properties:
+        globalID:
+            expose: true
+            access_type: public_method
+            serialized_name: GlobalID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGlobalID
+                setter: setGlobalID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            type: horstoeko\zugferd\entities\basic\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementHeaderMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,94 @@
+horstoeko\zugferd\entities\basic\ram\TradeSettlementHeaderMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: LineTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineTotalAmount
+                setter: setLineTotalAmount
+            type: horstoeko\zugferd\entities\basic\udt\AmountType
+        chargeTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ChargeTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getChargeTotalAmount
+                setter: setChargeTotalAmount
+            type: horstoeko\zugferd\entities\basic\udt\AmountType
+        allowanceTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: AllowanceTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAllowanceTotalAmount
+                setter: setAllowanceTotalAmount
+            type: horstoeko\zugferd\entities\basic\udt\AmountType
+        taxBasisTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxBasisTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxBasisTotalAmount
+                setter: setTaxBasisTotalAmount
+            type: horstoeko\zugferd\entities\basic\udt\AmountType
+        taxTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxTotalAmount
+                setter: setTaxTotalAmount
+            xml_list:
+                inline: true
+                entry_name: TaxTotalAmount
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basic\udt\AmountType>
+        grandTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: GrandTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGrandTotalAmount
+                setter: setGrandTotalAmount
+            type: horstoeko\zugferd\entities\basic\udt\AmountType
+        totalPrepaidAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TotalPrepaidAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTotalPrepaidAmount
+                setter: setTotalPrepaidAmount
+            type: horstoeko\zugferd\entities\basic\udt\AmountType
+        duePayableAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: DuePayableAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDuePayableAmount
+                setter: setDuePayableAmount
+            type: horstoeko\zugferd\entities\basic\udt\AmountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementLineMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementLineMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementLineMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basic\ram\TradeSettlementLineMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: LineTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineTotalAmount
+                setter: setLineTotalAmount
+            type: horstoeko\zugferd\entities\basic\udt\AmountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementPaymentMeansType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\basic\ram\TradeSettlementPaymentMeansType:
+    properties:
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\basic\qdt\PaymentMeansCodeType
+        payerPartyDebtorFinancialAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: PayerPartyDebtorFinancialAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayerPartyDebtorFinancialAccount
+                setter: setPayerPartyDebtorFinancialAccount
+            type: horstoeko\zugferd\entities\basic\ram\DebtorFinancialAccountType
+        payeePartyCreditorFinancialAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: PayeePartyCreditorFinancialAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayeePartyCreditorFinancialAccount
+                setter: setPayeePartyCreditorFinancialAccount
+            type: horstoeko\zugferd\entities\basic\ram\CreditorFinancialAccountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeTaxType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeTaxType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/TradeTaxType.yml	(revision 8435)
@@ -0,0 +1,90 @@
+horstoeko\zugferd\entities\basic\ram\TradeTaxType:
+    properties:
+        calculatedAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: CalculatedAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCalculatedAmount
+                setter: setCalculatedAmount
+            type: horstoeko\zugferd\entities\basic\udt\AmountType
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\basic\qdt\TaxTypeCodeType
+        exemptionReason:
+            expose: true
+            access_type: public_method
+            serialized_name: ExemptionReason
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getExemptionReason
+                setter: setExemptionReason
+            type: horstoeko\zugferd\entities\basic\udt\TextType
+        basisAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisAmount
+                setter: setBasisAmount
+            type: horstoeko\zugferd\entities\basic\udt\AmountType
+        categoryCode:
+            expose: true
+            access_type: public_method
+            serialized_name: CategoryCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCategoryCode
+                setter: setCategoryCode
+            type: horstoeko\zugferd\entities\basic\qdt\TaxCategoryCodeType
+        exemptionReasonCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ExemptionReasonCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getExemptionReasonCode
+                setter: setExemptionReasonCode
+            type: horstoeko\zugferd\entities\basic\udt\CodeType
+        dueDateTypeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: DueDateTypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDueDateTypeCode
+                setter: setDueDateTypeCode
+            type: horstoeko\zugferd\entities\basic\qdt\TimeReferenceCodeType
+        rateApplicablePercent:
+            expose: true
+            access_type: public_method
+            serialized_name: RateApplicablePercent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getRateApplicablePercent
+                setter: setRateApplicablePercent
+            type: horstoeko\zugferd\entities\basic\udt\PercentType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/UniversalCommunicationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/UniversalCommunicationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/ram/UniversalCommunicationType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basic\ram\UniversalCommunicationType:
+    properties:
+        uRIID:
+            expose: true
+            access_type: public_method
+            serialized_name: URIID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getURIID
+                setter: setURIID
+            type: horstoeko\zugferd\entities\basic\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoice.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoice.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoice.yml	(revision 8435)
@@ -0,0 +1,11 @@
+horstoeko\zugferd\entities\basic\rsm\CrossIndustryInvoice:
+    xml_root_name: rsm:CrossIndustryInvoice
+    xml_root_namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+    xml_namespaces:
+        a: urn:un:unece:uncefact:data:standard:QualifiedDataType:100
+        rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100
+        qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:10
+        ram: urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100
+        xs: http://www.w3.org/2001/XMLSchema
+        udt: urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100
+        xsi: http://www.w3.org/2001/XMLSchema-instance
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoiceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
@@ -0,0 +1,43 @@
+horstoeko\zugferd\entities\basic\rsm\CrossIndustryInvoiceType:
+    xml_namespaces:
+        a: urn:un:unece:uncefact:data:standard:QualifiedDataType:100
+        rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100
+        qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:10
+        ram: urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100
+        xs: http://www.w3.org/2001/XMLSchema
+        udt: urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100
+        xsi: http://www.w3.org/2001/XMLSchema-instance
+    properties:
+        exchangedDocumentContext:
+            expose: true
+            access_type: public_method
+            serialized_name: ExchangedDocumentContext
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getExchangedDocumentContext
+                setter: setExchangedDocumentContext
+            type: horstoeko\zugferd\entities\basic\ram\ExchangedDocumentContextType
+        exchangedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: ExchangedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getExchangedDocument
+                setter: setExchangedDocument
+            type: horstoeko\zugferd\entities\basic\ram\ExchangedDocumentType
+        supplyChainTradeTransaction:
+            expose: true
+            access_type: public_method
+            serialized_name: SupplyChainTradeTransaction
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getSupplyChainTradeTransaction
+                setter: setSupplyChainTradeTransaction
+            type: horstoeko\zugferd\entities\basic\ram\SupplyChainTradeTransactionType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/AmountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/AmountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/AmountType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\basic\udt\AmountType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
+        currencyID:
+            expose: true
+            access_type: public_method
+            serialized_name: currencyID
+            accessor:
+                getter: getCurrencyID
+                setter: setCurrencyID
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/CodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/CodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/CodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\udt\CodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\basic\udt\DateTimeType\DateTimeStringAType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        format:
+            expose: true
+            access_type: public_method
+            serialized_name: format
+            accessor:
+                getter: getFormat
+                setter: setFormat
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/DateTimeType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basic\udt\DateTimeType:
+    properties:
+        dateTimeString:
+            expose: true
+            access_type: public_method
+            serialized_name: DateTimeString
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100'
+            accessor:
+                getter: getDateTimeString
+                setter: setDateTimeString
+            type: horstoeko\zugferd\entities\basic\udt\DateTimeType\DateTimeStringAType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/IDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/IDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/IDType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\basic\udt\IDType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        schemeID:
+            expose: true
+            access_type: public_method
+            serialized_name: schemeID
+            accessor:
+                getter: getSchemeID
+                setter: setSchemeID
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/IndicatorType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/IndicatorType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/IndicatorType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basic\udt\IndicatorType:
+    properties:
+        indicator:
+            expose: true
+            access_type: public_method
+            serialized_name: Indicator
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100'
+            accessor:
+                getter: getIndicator
+                setter: setIndicator
+            type: bool
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/PercentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/PercentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/PercentType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\udt\PercentType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/QuantityType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/QuantityType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/QuantityType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\basic\udt\QuantityType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
+        unitCode:
+            expose: true
+            access_type: public_method
+            serialized_name: unitCode
+            accessor:
+                getter: getUnitCode
+                setter: setUnitCode
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/TextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/TextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basic/udt/TextType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basic\udt\TextType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/AllowanceChargeReasonCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basicwl\qdt\AllowanceChargeReasonCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CountryIDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CountryIDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CountryIDType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basicwl\qdt\CountryIDType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CurrencyCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CurrencyCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/CurrencyCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basicwl\qdt\CurrencyCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/DocumentCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/DocumentCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/DocumentCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basicwl\qdt\DocumentCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType\DateTimeStringAType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        format:
+            expose: true
+            access_type: public_method
+            serialized_name: format
+            accessor:
+                getter: getFormat
+                setter: setFormat
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/FormattedDateTimeType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType:
+    properties:
+        dateTimeString:
+            expose: true
+            access_type: public_method
+            serialized_name: DateTimeString
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:QualifiedDataType:100'
+            accessor:
+                getter: getDateTimeString
+                setter: setDateTimeString
+            type: horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType\DateTimeStringAType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/PaymentMeansCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/PaymentMeansCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/PaymentMeansCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basicwl\qdt\PaymentMeansCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxCategoryCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxCategoryCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxCategoryCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basicwl\qdt\TaxCategoryCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxTypeCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxTypeCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TaxTypeCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basicwl\qdt\TaxTypeCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TimeReferenceCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TimeReferenceCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/qdt/TimeReferenceCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basicwl\qdt\TimeReferenceCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/CreditorFinancialAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/CreditorFinancialAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/CreditorFinancialAccountType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basicwl\ram\CreditorFinancialAccountType:
+    properties:
+        iBANID:
+            expose: true
+            access_type: public_method
+            serialized_name: IBANID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIBANID
+                setter: setIBANID
+            type: horstoeko\zugferd\entities\basicwl\udt\IDType
+        proprietaryID:
+            expose: true
+            access_type: public_method
+            serialized_name: ProprietaryID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getProprietaryID
+                setter: setProprietaryID
+            type: horstoeko\zugferd\entities\basicwl\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DebtorFinancialAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DebtorFinancialAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DebtorFinancialAccountType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basicwl\ram\DebtorFinancialAccountType:
+    properties:
+        iBANID:
+            expose: true
+            access_type: public_method
+            serialized_name: IBANID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIBANID
+                setter: setIBANID
+            type: horstoeko\zugferd\entities\basicwl\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DocumentContextParameterType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DocumentContextParameterType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/DocumentContextParameterType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basicwl\ram\DocumentContextParameterType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\basicwl\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentContextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentContextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentContextType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentContextType:
+    properties:
+        businessProcessSpecifiedDocumentContextParameter:
+            expose: true
+            access_type: public_method
+            serialized_name: BusinessProcessSpecifiedDocumentContextParameter
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBusinessProcessSpecifiedDocumentContextParameter
+                setter: setBusinessProcessSpecifiedDocumentContextParameter
+            type: horstoeko\zugferd\entities\basicwl\ram\DocumentContextParameterType
+        guidelineSpecifiedDocumentContextParameter:
+            expose: true
+            access_type: public_method
+            serialized_name: GuidelineSpecifiedDocumentContextParameter
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGuidelineSpecifiedDocumentContextParameter
+                setter: setGuidelineSpecifiedDocumentContextParameter
+            type: horstoeko\zugferd\entities\basicwl\ram\DocumentContextParameterType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ExchangedDocumentType.yml	(revision 8435)
@@ -0,0 +1,50 @@
+horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\basicwl\udt\IDType
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\basicwl\qdt\DocumentCodeType
+        issueDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: IssueDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIssueDateTime
+                setter: setIssueDateTime
+            type: horstoeko\zugferd\entities\basicwl\udt\DateTimeType
+        includedNote:
+            expose: true
+            access_type: public_method
+            serialized_name: IncludedNote
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIncludedNote
+                setter: setIncludedNote
+            xml_list:
+                inline: true
+                entry_name: IncludedNote
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basicwl\ram\NoteType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,68 @@
+horstoeko\zugferd\entities\basicwl\ram\HeaderTradeAgreementType:
+    properties:
+        buyerReference:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerReference
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerReference
+                setter: setBuyerReference
+            type: horstoeko\zugferd\entities\basicwl\udt\TextType
+        sellerTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerTradeParty
+                setter: setSellerTradeParty
+            type: horstoeko\zugferd\entities\basicwl\ram\TradePartyType
+        buyerTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerTradeParty
+                setter: setBuyerTradeParty
+            type: horstoeko\zugferd\entities\basicwl\ram\TradePartyType
+        sellerTaxRepresentativeTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerTaxRepresentativeTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerTaxRepresentativeTradeParty
+                setter: setSellerTaxRepresentativeTradeParty
+            type: horstoeko\zugferd\entities\basicwl\ram\TradePartyType
+        buyerOrderReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerOrderReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerOrderReferencedDocument
+                setter: setBuyerOrderReferencedDocument
+            type: horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType
+        contractReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: ContractReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getContractReferencedDocument
+                setter: setContractReferencedDocument
+            type: horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\basicwl\ram\HeaderTradeDeliveryType:
+    properties:
+        shipToTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: ShipToTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getShipToTradeParty
+                setter: setShipToTradeParty
+            type: horstoeko\zugferd\entities\basicwl\ram\TradePartyType
+        actualDeliverySupplyChainEvent:
+            expose: true
+            access_type: public_method
+            serialized_name: ActualDeliverySupplyChainEvent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getActualDeliverySupplyChainEvent
+                setter: setActualDeliverySupplyChainEvent
+            type: horstoeko\zugferd\entities\basicwl\ram\SupplyChainEventType
+        despatchAdviceReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: DespatchAdviceReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDespatchAdviceReferencedDocument
+                setter: setDespatchAdviceReferencedDocument
+            type: horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/HeaderTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,153 @@
+horstoeko\zugferd\entities\basicwl\ram\HeaderTradeSettlementType:
+    properties:
+        creditorReferenceID:
+            expose: true
+            access_type: public_method
+            serialized_name: CreditorReferenceID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCreditorReferenceID
+                setter: setCreditorReferenceID
+            type: horstoeko\zugferd\entities\basicwl\udt\IDType
+        paymentReference:
+            expose: true
+            access_type: public_method
+            serialized_name: PaymentReference
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPaymentReference
+                setter: setPaymentReference
+            type: horstoeko\zugferd\entities\basicwl\udt\TextType
+        taxCurrencyCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxCurrencyCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxCurrencyCode
+                setter: setTaxCurrencyCode
+            type: horstoeko\zugferd\entities\basicwl\udt\CodeType
+        invoiceCurrencyCode:
+            expose: true
+            access_type: public_method
+            serialized_name: InvoiceCurrencyCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInvoiceCurrencyCode
+                setter: setInvoiceCurrencyCode
+            type: horstoeko\zugferd\entities\basicwl\qdt\CurrencyCodeType
+        payeeTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: PayeeTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayeeTradeParty
+                setter: setPayeeTradeParty
+            type: horstoeko\zugferd\entities\basicwl\ram\TradePartyType
+        specifiedTradeSettlementPaymentMeans:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeSettlementPaymentMeans
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeSettlementPaymentMeans
+                setter: setSpecifiedTradeSettlementPaymentMeans
+            type: horstoeko\zugferd\entities\basicwl\ram\TradeSettlementPaymentMeansType
+        applicableTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableTradeTax
+                setter: setApplicableTradeTax
+            xml_list:
+                inline: true
+                entry_name: ApplicableTradeTax
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basicwl\ram\TradeTaxType>
+        billingSpecifiedPeriod:
+            expose: true
+            access_type: public_method
+            serialized_name: BillingSpecifiedPeriod
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBillingSpecifiedPeriod
+                setter: setBillingSpecifiedPeriod
+            type: horstoeko\zugferd\entities\basicwl\ram\SpecifiedPeriodType
+        specifiedTradeAllowanceCharge:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeAllowanceCharge
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeAllowanceCharge
+                setter: setSpecifiedTradeAllowanceCharge
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTradeAllowanceCharge
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basicwl\ram\TradeAllowanceChargeType>
+        specifiedTradePaymentTerms:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradePaymentTerms
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradePaymentTerms
+                setter: setSpecifiedTradePaymentTerms
+            type: horstoeko\zugferd\entities\basicwl\ram\TradePaymentTermsType
+        specifiedTradeSettlementHeaderMonetarySummation:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeSettlementHeaderMonetarySummation
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeSettlementHeaderMonetarySummation
+                setter: setSpecifiedTradeSettlementHeaderMonetarySummation
+            type: horstoeko\zugferd\entities\basicwl\ram\TradeSettlementHeaderMonetarySummationType
+        invoiceReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: InvoiceReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInvoiceReferencedDocument
+                setter: setInvoiceReferencedDocument
+            type: horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType
+        receivableSpecifiedTradeAccountingAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: ReceivableSpecifiedTradeAccountingAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReceivableSpecifiedTradeAccountingAccount
+                setter: setReceivableSpecifiedTradeAccountingAccount
+            type: horstoeko\zugferd\entities\basicwl\ram\TradeAccountingAccountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/LegalOrganizationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/LegalOrganizationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/LegalOrganizationType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basicwl\ram\LegalOrganizationType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\basicwl\udt\IDType
+        tradingBusinessName:
+            expose: true
+            access_type: public_method
+            serialized_name: TradingBusinessName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTradingBusinessName
+                setter: setTradingBusinessName
+            type: horstoeko\zugferd\entities\basicwl\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/NoteType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/NoteType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/NoteType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basicwl\ram\NoteType:
+    properties:
+        content:
+            expose: true
+            access_type: public_method
+            serialized_name: Content
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getContent
+                setter: setContent
+            type: horstoeko\zugferd\entities\basicwl\udt\TextType
+        subjectCode:
+            expose: true
+            access_type: public_method
+            serialized_name: SubjectCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSubjectCode
+                setter: setSubjectCode
+            type: horstoeko\zugferd\entities\basicwl\udt\CodeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ReferencedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ReferencedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/ReferencedDocumentType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basicwl\ram\ReferencedDocumentType:
+    properties:
+        issuerAssignedID:
+            expose: true
+            access_type: public_method
+            serialized_name: IssuerAssignedID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIssuerAssignedID
+                setter: setIssuerAssignedID
+            type: horstoeko\zugferd\entities\basicwl\udt\IDType
+        formattedIssueDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: FormattedIssueDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getFormattedIssueDateTime
+                setter: setFormattedIssueDateTime
+            type: horstoeko\zugferd\entities\basicwl\qdt\FormattedDateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SpecifiedPeriodType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SpecifiedPeriodType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SpecifiedPeriodType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\basicwl\ram\SpecifiedPeriodType:
+    properties:
+        startDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: StartDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getStartDateTime
+                setter: setStartDateTime
+            type: horstoeko\zugferd\entities\basicwl\udt\DateTimeType
+        endDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: EndDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getEndDateTime
+                setter: setEndDateTime
+            type: horstoeko\zugferd\entities\basicwl\udt\DateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainEventType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainEventType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainEventType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basicwl\ram\SupplyChainEventType:
+    properties:
+        occurrenceDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: OccurrenceDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getOccurrenceDateTime
+                setter: setOccurrenceDateTime
+            type: horstoeko\zugferd\entities\basicwl\udt\DateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainTradeTransactionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\basicwl\ram\SupplyChainTradeTransactionType:
+    properties:
+        applicableHeaderTradeAgreement:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeAgreement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeAgreement
+                setter: setApplicableHeaderTradeAgreement
+            type: horstoeko\zugferd\entities\basicwl\ram\HeaderTradeAgreementType
+        applicableHeaderTradeDelivery:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeDelivery
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeDelivery
+                setter: setApplicableHeaderTradeDelivery
+            type: horstoeko\zugferd\entities\basicwl\ram\HeaderTradeDeliveryType
+        applicableHeaderTradeSettlement:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeSettlement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeSettlement
+                setter: setApplicableHeaderTradeSettlement
+            type: horstoeko\zugferd\entities\basicwl\ram\HeaderTradeSettlementType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TaxRegistrationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TaxRegistrationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TaxRegistrationType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basicwl\ram\TaxRegistrationType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\basicwl\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAccountingAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAccountingAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAccountingAccountType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basicwl\ram\TradeAccountingAccountType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\basicwl\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAddressType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAddressType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAddressType.yml	(revision 8435)
@@ -0,0 +1,79 @@
+horstoeko\zugferd\entities\basicwl\ram\TradeAddressType:
+    properties:
+        postcodeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: PostcodeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPostcodeCode
+                setter: setPostcodeCode
+            type: horstoeko\zugferd\entities\basicwl\udt\CodeType
+        lineOne:
+            expose: true
+            access_type: public_method
+            serialized_name: LineOne
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineOne
+                setter: setLineOne
+            type: horstoeko\zugferd\entities\basicwl\udt\TextType
+        lineTwo:
+            expose: true
+            access_type: public_method
+            serialized_name: LineTwo
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineTwo
+                setter: setLineTwo
+            type: horstoeko\zugferd\entities\basicwl\udt\TextType
+        lineThree:
+            expose: true
+            access_type: public_method
+            serialized_name: LineThree
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineThree
+                setter: setLineThree
+            type: horstoeko\zugferd\entities\basicwl\udt\TextType
+        cityName:
+            expose: true
+            access_type: public_method
+            serialized_name: CityName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCityName
+                setter: setCityName
+            type: horstoeko\zugferd\entities\basicwl\udt\TextType
+        countryID:
+            expose: true
+            access_type: public_method
+            serialized_name: CountryID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCountryID
+                setter: setCountryID
+            type: horstoeko\zugferd\entities\basicwl\qdt\CountryIDType
+        countrySubDivisionName:
+            expose: true
+            access_type: public_method
+            serialized_name: CountrySubDivisionName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCountrySubDivisionName
+                setter: setCountrySubDivisionName
+            type: horstoeko\zugferd\entities\basicwl\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAllowanceChargeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAllowanceChargeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeAllowanceChargeType.yml	(revision 8435)
@@ -0,0 +1,79 @@
+horstoeko\zugferd\entities\basicwl\ram\TradeAllowanceChargeType:
+    properties:
+        chargeIndicator:
+            expose: true
+            access_type: public_method
+            serialized_name: ChargeIndicator
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getChargeIndicator
+                setter: setChargeIndicator
+            type: horstoeko\zugferd\entities\basicwl\udt\IndicatorType
+        calculationPercent:
+            expose: true
+            access_type: public_method
+            serialized_name: CalculationPercent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCalculationPercent
+                setter: setCalculationPercent
+            type: horstoeko\zugferd\entities\basicwl\udt\PercentType
+        basisAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisAmount
+                setter: setBasisAmount
+            type: horstoeko\zugferd\entities\basicwl\udt\AmountType
+        actualAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ActualAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getActualAmount
+                setter: setActualAmount
+            type: horstoeko\zugferd\entities\basicwl\udt\AmountType
+        reasonCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ReasonCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReasonCode
+                setter: setReasonCode
+            type: horstoeko\zugferd\entities\basicwl\qdt\AllowanceChargeReasonCodeType
+        reason:
+            expose: true
+            access_type: public_method
+            serialized_name: Reason
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReason
+                setter: setReason
+            type: horstoeko\zugferd\entities\basicwl\udt\TextType
+        categoryTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: CategoryTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCategoryTradeTax
+                setter: setCategoryTradeTax
+            type: horstoeko\zugferd\entities\basicwl\ram\TradeTaxType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePartyType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePartyType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePartyType.yml	(revision 8435)
@@ -0,0 +1,91 @@
+horstoeko\zugferd\entities\basicwl\ram\TradePartyType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            xml_list:
+                inline: true
+                entry_name: ID
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basicwl\udt\IDType>
+        globalID:
+            expose: true
+            access_type: public_method
+            serialized_name: GlobalID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGlobalID
+                setter: setGlobalID
+            xml_list:
+                inline: true
+                entry_name: GlobalID
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basicwl\udt\IDType>
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            type: horstoeko\zugferd\entities\basicwl\udt\TextType
+        specifiedLegalOrganization:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLegalOrganization
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLegalOrganization
+                setter: setSpecifiedLegalOrganization
+            type: horstoeko\zugferd\entities\basicwl\ram\LegalOrganizationType
+        postalTradeAddress:
+            expose: true
+            access_type: public_method
+            serialized_name: PostalTradeAddress
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPostalTradeAddress
+                setter: setPostalTradeAddress
+            type: horstoeko\zugferd\entities\basicwl\ram\TradeAddressType
+        uRIUniversalCommunication:
+            expose: true
+            access_type: public_method
+            serialized_name: URIUniversalCommunication
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getURIUniversalCommunication
+                setter: setURIUniversalCommunication
+            type: horstoeko\zugferd\entities\basicwl\ram\UniversalCommunicationType
+        specifiedTaxRegistration:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTaxRegistration
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTaxRegistration
+                setter: setSpecifiedTaxRegistration
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTaxRegistration
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basicwl\ram\TaxRegistrationType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePaymentTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePaymentTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradePaymentTermsType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\basicwl\ram\TradePaymentTermsType:
+    properties:
+        description:
+            expose: true
+            access_type: public_method
+            serialized_name: Description
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDescription
+                setter: setDescription
+            type: horstoeko\zugferd\entities\basicwl\udt\TextType
+        dueDateDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: DueDateDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDueDateDateTime
+                setter: setDueDateDateTime
+            type: horstoeko\zugferd\entities\basicwl\udt\DateTimeType
+        directDebitMandateID:
+            expose: true
+            access_type: public_method
+            serialized_name: DirectDebitMandateID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDirectDebitMandateID
+                setter: setDirectDebitMandateID
+            type: horstoeko\zugferd\entities\basicwl\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,94 @@
+horstoeko\zugferd\entities\basicwl\ram\TradeSettlementHeaderMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: LineTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineTotalAmount
+                setter: setLineTotalAmount
+            type: horstoeko\zugferd\entities\basicwl\udt\AmountType
+        chargeTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ChargeTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getChargeTotalAmount
+                setter: setChargeTotalAmount
+            type: horstoeko\zugferd\entities\basicwl\udt\AmountType
+        allowanceTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: AllowanceTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAllowanceTotalAmount
+                setter: setAllowanceTotalAmount
+            type: horstoeko\zugferd\entities\basicwl\udt\AmountType
+        taxBasisTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxBasisTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxBasisTotalAmount
+                setter: setTaxBasisTotalAmount
+            type: horstoeko\zugferd\entities\basicwl\udt\AmountType
+        taxTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxTotalAmount
+                setter: setTaxTotalAmount
+            xml_list:
+                inline: true
+                entry_name: TaxTotalAmount
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\basicwl\udt\AmountType>
+        grandTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: GrandTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGrandTotalAmount
+                setter: setGrandTotalAmount
+            type: horstoeko\zugferd\entities\basicwl\udt\AmountType
+        totalPrepaidAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TotalPrepaidAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTotalPrepaidAmount
+                setter: setTotalPrepaidAmount
+            type: horstoeko\zugferd\entities\basicwl\udt\AmountType
+        duePayableAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: DuePayableAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDuePayableAmount
+                setter: setDuePayableAmount
+            type: horstoeko\zugferd\entities\basicwl\udt\AmountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementPaymentMeansType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\basicwl\ram\TradeSettlementPaymentMeansType:
+    properties:
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\basicwl\qdt\PaymentMeansCodeType
+        payerPartyDebtorFinancialAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: PayerPartyDebtorFinancialAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayerPartyDebtorFinancialAccount
+                setter: setPayerPartyDebtorFinancialAccount
+            type: horstoeko\zugferd\entities\basicwl\ram\DebtorFinancialAccountType
+        payeePartyCreditorFinancialAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: PayeePartyCreditorFinancialAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayeePartyCreditorFinancialAccount
+                setter: setPayeePartyCreditorFinancialAccount
+            type: horstoeko\zugferd\entities\basicwl\ram\CreditorFinancialAccountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeTaxType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeTaxType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/TradeTaxType.yml	(revision 8435)
@@ -0,0 +1,90 @@
+horstoeko\zugferd\entities\basicwl\ram\TradeTaxType:
+    properties:
+        calculatedAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: CalculatedAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCalculatedAmount
+                setter: setCalculatedAmount
+            type: horstoeko\zugferd\entities\basicwl\udt\AmountType
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\basicwl\qdt\TaxTypeCodeType
+        exemptionReason:
+            expose: true
+            access_type: public_method
+            serialized_name: ExemptionReason
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getExemptionReason
+                setter: setExemptionReason
+            type: horstoeko\zugferd\entities\basicwl\udt\TextType
+        basisAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisAmount
+                setter: setBasisAmount
+            type: horstoeko\zugferd\entities\basicwl\udt\AmountType
+        categoryCode:
+            expose: true
+            access_type: public_method
+            serialized_name: CategoryCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCategoryCode
+                setter: setCategoryCode
+            type: horstoeko\zugferd\entities\basicwl\qdt\TaxCategoryCodeType
+        exemptionReasonCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ExemptionReasonCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getExemptionReasonCode
+                setter: setExemptionReasonCode
+            type: horstoeko\zugferd\entities\basicwl\udt\CodeType
+        dueDateTypeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: DueDateTypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDueDateTypeCode
+                setter: setDueDateTypeCode
+            type: horstoeko\zugferd\entities\basicwl\qdt\TimeReferenceCodeType
+        rateApplicablePercent:
+            expose: true
+            access_type: public_method
+            serialized_name: RateApplicablePercent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getRateApplicablePercent
+                setter: setRateApplicablePercent
+            type: horstoeko\zugferd\entities\basicwl\udt\PercentType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/UniversalCommunicationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/UniversalCommunicationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/ram/UniversalCommunicationType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basicwl\ram\UniversalCommunicationType:
+    properties:
+        uRIID:
+            expose: true
+            access_type: public_method
+            serialized_name: URIID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getURIID
+                setter: setURIID
+            type: horstoeko\zugferd\entities\basicwl\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoice.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoice.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoice.yml	(revision 8435)
@@ -0,0 +1,11 @@
+horstoeko\zugferd\entities\basicwl\rsm\CrossIndustryInvoice:
+    xml_root_name: rsm:CrossIndustryInvoice
+    xml_root_namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+    xml_namespaces:
+        a: urn:un:unece:uncefact:data:standard:QualifiedDataType:100
+        rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100
+        qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:10
+        ram: urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100
+        xs: http://www.w3.org/2001/XMLSchema
+        udt: urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100
+        xsi: http://www.w3.org/2001/XMLSchema-instance
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoiceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
@@ -0,0 +1,43 @@
+horstoeko\zugferd\entities\basicwl\rsm\CrossIndustryInvoiceType:
+    xml_namespaces:
+        a: urn:un:unece:uncefact:data:standard:QualifiedDataType:100
+        rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100
+        qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:10
+        ram: urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100
+        xs: http://www.w3.org/2001/XMLSchema
+        udt: urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100
+        xsi: http://www.w3.org/2001/XMLSchema-instance
+    properties:
+        exchangedDocumentContext:
+            expose: true
+            access_type: public_method
+            serialized_name: ExchangedDocumentContext
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getExchangedDocumentContext
+                setter: setExchangedDocumentContext
+            type: horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentContextType
+        exchangedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: ExchangedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getExchangedDocument
+                setter: setExchangedDocument
+            type: horstoeko\zugferd\entities\basicwl\ram\ExchangedDocumentType
+        supplyChainTradeTransaction:
+            expose: true
+            access_type: public_method
+            serialized_name: SupplyChainTradeTransaction
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getSupplyChainTradeTransaction
+                setter: setSupplyChainTradeTransaction
+            type: horstoeko\zugferd\entities\basicwl\ram\SupplyChainTradeTransactionType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/AmountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/AmountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/AmountType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\basicwl\udt\AmountType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
+        currencyID:
+            expose: true
+            access_type: public_method
+            serialized_name: currencyID
+            accessor:
+                getter: getCurrencyID
+                setter: setCurrencyID
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/CodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/CodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/CodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basicwl\udt\CodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\basicwl\udt\DateTimeType\DateTimeStringAType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        format:
+            expose: true
+            access_type: public_method
+            serialized_name: format
+            accessor:
+                getter: getFormat
+                setter: setFormat
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/DateTimeType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basicwl\udt\DateTimeType:
+    properties:
+        dateTimeString:
+            expose: true
+            access_type: public_method
+            serialized_name: DateTimeString
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100'
+            accessor:
+                getter: getDateTimeString
+                setter: setDateTimeString
+            type: horstoeko\zugferd\entities\basicwl\udt\DateTimeType\DateTimeStringAType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IDType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\basicwl\udt\IDType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        schemeID:
+            expose: true
+            access_type: public_method
+            serialized_name: schemeID
+            accessor:
+                getter: getSchemeID
+                setter: setSchemeID
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IndicatorType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IndicatorType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/IndicatorType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\basicwl\udt\IndicatorType:
+    properties:
+        indicator:
+            expose: true
+            access_type: public_method
+            serialized_name: Indicator
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100'
+            accessor:
+                getter: getIndicator
+                setter: setIndicator
+            type: bool
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/PercentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/PercentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/PercentType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basicwl\udt\PercentType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/TextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/TextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/basicwl/udt/TextType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\basicwl\udt\TextType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/AllowanceChargeReasonCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\qdt\AllowanceChargeReasonCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CountryIDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CountryIDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CountryIDType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\qdt\CountryIDType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CurrencyCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CurrencyCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/CurrencyCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\qdt\CurrencyCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/DocumentCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/DocumentCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/DocumentCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\qdt\DocumentCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType\DateTimeStringAType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        format:
+            expose: true
+            access_type: public_method
+            serialized_name: format
+            accessor:
+                getter: getFormat
+                setter: setFormat
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/FormattedDateTimeType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType:
+    properties:
+        dateTimeString:
+            expose: true
+            access_type: public_method
+            serialized_name: DateTimeString
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:QualifiedDataType:100'
+            accessor:
+                getter: getDateTimeString
+                setter: setDateTimeString
+            type: horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType\DateTimeStringAType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/PaymentMeansCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/PaymentMeansCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/PaymentMeansCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\qdt\PaymentMeansCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/ReferenceCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/ReferenceCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/ReferenceCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\qdt\ReferenceCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxCategoryCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxCategoryCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxCategoryCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\qdt\TaxCategoryCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxTypeCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxTypeCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TaxTypeCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\qdt\TaxTypeCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TimeReferenceCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TimeReferenceCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/qdt/TimeReferenceCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\qdt\TimeReferenceCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialAccountType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\en16931\ram\CreditorFinancialAccountType:
+    properties:
+        iBANID:
+            expose: true
+            access_type: public_method
+            serialized_name: IBANID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIBANID
+                setter: setIBANID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        accountName:
+            expose: true
+            access_type: public_method
+            serialized_name: AccountName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAccountName
+                setter: setAccountName
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        proprietaryID:
+            expose: true
+            access_type: public_method
+            serialized_name: ProprietaryID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getProprietaryID
+                setter: setProprietaryID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialInstitutionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialInstitutionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/CreditorFinancialInstitutionType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\ram\CreditorFinancialInstitutionType:
+    properties:
+        bICID:
+            expose: true
+            access_type: public_method
+            serialized_name: BICID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBICID
+                setter: setBICID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DebtorFinancialAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DebtorFinancialAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DebtorFinancialAccountType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\ram\DebtorFinancialAccountType:
+    properties:
+        iBANID:
+            expose: true
+            access_type: public_method
+            serialized_name: IBANID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIBANID
+                setter: setIBANID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentContextParameterType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentContextParameterType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentContextParameterType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\ram\DocumentContextParameterType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentLineDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentLineDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/DocumentLineDocumentType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\en16931\ram\DocumentLineDocumentType:
+    properties:
+        lineID:
+            expose: true
+            access_type: public_method
+            serialized_name: LineID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineID
+                setter: setLineID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        includedNote:
+            expose: true
+            access_type: public_method
+            serialized_name: IncludedNote
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIncludedNote
+                setter: setIncludedNote
+            type: horstoeko\zugferd\entities\en16931\ram\NoteType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentContextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentContextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentContextType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentContextType:
+    properties:
+        businessProcessSpecifiedDocumentContextParameter:
+            expose: true
+            access_type: public_method
+            serialized_name: BusinessProcessSpecifiedDocumentContextParameter
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBusinessProcessSpecifiedDocumentContextParameter
+                setter: setBusinessProcessSpecifiedDocumentContextParameter
+            type: horstoeko\zugferd\entities\en16931\ram\DocumentContextParameterType
+        guidelineSpecifiedDocumentContextParameter:
+            expose: true
+            access_type: public_method
+            serialized_name: GuidelineSpecifiedDocumentContextParameter
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGuidelineSpecifiedDocumentContextParameter
+                setter: setGuidelineSpecifiedDocumentContextParameter
+            type: horstoeko\zugferd\entities\en16931\ram\DocumentContextParameterType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ExchangedDocumentType.yml	(revision 8435)
@@ -0,0 +1,50 @@
+horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\en16931\qdt\DocumentCodeType
+        issueDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: IssueDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIssueDateTime
+                setter: setIssueDateTime
+            type: horstoeko\zugferd\entities\en16931\udt\DateTimeType
+        includedNote:
+            expose: true
+            access_type: public_method
+            serialized_name: IncludedNote
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIncludedNote
+                setter: setIncludedNote
+            xml_list:
+                inline: true
+                entry_name: IncludedNote
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\en16931\ram\NoteType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,105 @@
+horstoeko\zugferd\entities\en16931\ram\HeaderTradeAgreementType:
+    properties:
+        buyerReference:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerReference
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerReference
+                setter: setBuyerReference
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        sellerTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerTradeParty
+                setter: setSellerTradeParty
+            type: horstoeko\zugferd\entities\en16931\ram\TradePartyType
+        buyerTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerTradeParty
+                setter: setBuyerTradeParty
+            type: horstoeko\zugferd\entities\en16931\ram\TradePartyType
+        sellerTaxRepresentativeTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerTaxRepresentativeTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerTaxRepresentativeTradeParty
+                setter: setSellerTaxRepresentativeTradeParty
+            type: horstoeko\zugferd\entities\en16931\ram\TradePartyType
+        sellerOrderReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerOrderReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerOrderReferencedDocument
+                setter: setSellerOrderReferencedDocument
+            type: horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+        buyerOrderReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerOrderReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerOrderReferencedDocument
+                setter: setBuyerOrderReferencedDocument
+            type: horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+        contractReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: ContractReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getContractReferencedDocument
+                setter: setContractReferencedDocument
+            type: horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+        additionalReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: AdditionalReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAdditionalReferencedDocument
+                setter: setAdditionalReferencedDocument
+            xml_list:
+                inline: true
+                entry_name: AdditionalReferencedDocument
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType>
+        specifiedProcuringProject:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedProcuringProject
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedProcuringProject
+                setter: setSpecifiedProcuringProject
+            type: horstoeko\zugferd\entities\en16931\ram\ProcuringProjectType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,46 @@
+horstoeko\zugferd\entities\en16931\ram\HeaderTradeDeliveryType:
+    properties:
+        shipToTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: ShipToTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getShipToTradeParty
+                setter: setShipToTradeParty
+            type: horstoeko\zugferd\entities\en16931\ram\TradePartyType
+        actualDeliverySupplyChainEvent:
+            expose: true
+            access_type: public_method
+            serialized_name: ActualDeliverySupplyChainEvent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getActualDeliverySupplyChainEvent
+                setter: setActualDeliverySupplyChainEvent
+            type: horstoeko\zugferd\entities\en16931\ram\SupplyChainEventType
+        despatchAdviceReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: DespatchAdviceReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDespatchAdviceReferencedDocument
+                setter: setDespatchAdviceReferencedDocument
+            type: horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+        receivingAdviceReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: ReceivingAdviceReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReceivingAdviceReferencedDocument
+                setter: setReceivingAdviceReferencedDocument
+            type: horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/HeaderTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,153 @@
+horstoeko\zugferd\entities\en16931\ram\HeaderTradeSettlementType:
+    properties:
+        creditorReferenceID:
+            expose: true
+            access_type: public_method
+            serialized_name: CreditorReferenceID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCreditorReferenceID
+                setter: setCreditorReferenceID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        paymentReference:
+            expose: true
+            access_type: public_method
+            serialized_name: PaymentReference
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPaymentReference
+                setter: setPaymentReference
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        taxCurrencyCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxCurrencyCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxCurrencyCode
+                setter: setTaxCurrencyCode
+            type: horstoeko\zugferd\entities\en16931\qdt\CurrencyCodeType
+        invoiceCurrencyCode:
+            expose: true
+            access_type: public_method
+            serialized_name: InvoiceCurrencyCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInvoiceCurrencyCode
+                setter: setInvoiceCurrencyCode
+            type: horstoeko\zugferd\entities\en16931\qdt\CurrencyCodeType
+        payeeTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: PayeeTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayeeTradeParty
+                setter: setPayeeTradeParty
+            type: horstoeko\zugferd\entities\en16931\ram\TradePartyType
+        specifiedTradeSettlementPaymentMeans:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeSettlementPaymentMeans
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeSettlementPaymentMeans
+                setter: setSpecifiedTradeSettlementPaymentMeans
+            type: horstoeko\zugferd\entities\en16931\ram\TradeSettlementPaymentMeansType
+        applicableTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableTradeTax
+                setter: setApplicableTradeTax
+            xml_list:
+                inline: true
+                entry_name: ApplicableTradeTax
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\en16931\ram\TradeTaxType>
+        billingSpecifiedPeriod:
+            expose: true
+            access_type: public_method
+            serialized_name: BillingSpecifiedPeriod
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBillingSpecifiedPeriod
+                setter: setBillingSpecifiedPeriod
+            type: horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType
+        specifiedTradeAllowanceCharge:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeAllowanceCharge
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeAllowanceCharge
+                setter: setSpecifiedTradeAllowanceCharge
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTradeAllowanceCharge
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType>
+        specifiedTradePaymentTerms:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradePaymentTerms
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradePaymentTerms
+                setter: setSpecifiedTradePaymentTerms
+            type: horstoeko\zugferd\entities\en16931\ram\TradePaymentTermsType
+        specifiedTradeSettlementHeaderMonetarySummation:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeSettlementHeaderMonetarySummation
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeSettlementHeaderMonetarySummation
+                setter: setSpecifiedTradeSettlementHeaderMonetarySummation
+            type: horstoeko\zugferd\entities\en16931\ram\TradeSettlementHeaderMonetarySummationType
+        invoiceReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: InvoiceReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInvoiceReferencedDocument
+                setter: setInvoiceReferencedDocument
+            type: horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+        receivableSpecifiedTradeAccountingAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: ReceivableSpecifiedTradeAccountingAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReceivableSpecifiedTradeAccountingAccount
+                setter: setReceivableSpecifiedTradeAccountingAccount
+            type: horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LegalOrganizationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LegalOrganizationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LegalOrganizationType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\en16931\ram\LegalOrganizationType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        tradingBusinessName:
+            expose: true
+            access_type: public_method
+            serialized_name: TradingBusinessName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTradingBusinessName
+                setter: setTradingBusinessName
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\en16931\ram\LineTradeAgreementType:
+    properties:
+        buyerOrderReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerOrderReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerOrderReferencedDocument
+                setter: setBuyerOrderReferencedDocument
+            type: horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+        grossPriceProductTradePrice:
+            expose: true
+            access_type: public_method
+            serialized_name: GrossPriceProductTradePrice
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGrossPriceProductTradePrice
+                setter: setGrossPriceProductTradePrice
+            type: horstoeko\zugferd\entities\en16931\ram\TradePriceType
+        netPriceProductTradePrice:
+            expose: true
+            access_type: public_method
+            serialized_name: NetPriceProductTradePrice
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getNetPriceProductTradePrice
+                setter: setNetPriceProductTradePrice
+            type: horstoeko\zugferd\entities\en16931\ram\TradePriceType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\ram\LineTradeDeliveryType:
+    properties:
+        billedQuantity:
+            expose: true
+            access_type: public_method
+            serialized_name: BilledQuantity
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBilledQuantity
+                setter: setBilledQuantity
+            type: horstoeko\zugferd\entities\en16931\udt\QuantityType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/LineTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,72 @@
+horstoeko\zugferd\entities\en16931\ram\LineTradeSettlementType:
+    properties:
+        applicableTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableTradeTax
+                setter: setApplicableTradeTax
+            type: horstoeko\zugferd\entities\en16931\ram\TradeTaxType
+        billingSpecifiedPeriod:
+            expose: true
+            access_type: public_method
+            serialized_name: BillingSpecifiedPeriod
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBillingSpecifiedPeriod
+                setter: setBillingSpecifiedPeriod
+            type: horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType
+        specifiedTradeAllowanceCharge:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeAllowanceCharge
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeAllowanceCharge
+                setter: setSpecifiedTradeAllowanceCharge
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTradeAllowanceCharge
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType>
+        specifiedTradeSettlementLineMonetarySummation:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeSettlementLineMonetarySummation
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeSettlementLineMonetarySummation
+                setter: setSpecifiedTradeSettlementLineMonetarySummation
+            type: horstoeko\zugferd\entities\en16931\ram\TradeSettlementLineMonetarySummationType
+        additionalReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: AdditionalReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAdditionalReferencedDocument
+                setter: setAdditionalReferencedDocument
+            type: horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+        receivableSpecifiedTradeAccountingAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: ReceivableSpecifiedTradeAccountingAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReceivableSpecifiedTradeAccountingAccount
+                setter: setReceivableSpecifiedTradeAccountingAccount
+            type: horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/NoteType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/NoteType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/NoteType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\en16931\ram\NoteType:
+    properties:
+        content:
+            expose: true
+            access_type: public_method
+            serialized_name: Content
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getContent
+                setter: setContent
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        subjectCode:
+            expose: true
+            access_type: public_method
+            serialized_name: SubjectCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSubjectCode
+                setter: setSubjectCode
+            type: horstoeko\zugferd\entities\en16931\udt\CodeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProcuringProjectType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProcuringProjectType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProcuringProjectType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\en16931\ram\ProcuringProjectType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductCharacteristicType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductCharacteristicType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductCharacteristicType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\en16931\ram\ProductCharacteristicType:
+    properties:
+        description:
+            expose: true
+            access_type: public_method
+            serialized_name: Description
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDescription
+                setter: setDescription
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        value:
+            expose: true
+            access_type: public_method
+            serialized_name: Value
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getValue
+                setter: setValue
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductClassificationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductClassificationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ProductClassificationType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\ram\ProductClassificationType:
+    properties:
+        classCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ClassCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getClassCode
+                setter: setClassCode
+            type: horstoeko\zugferd\entities\en16931\udt\CodeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ReferencedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ReferencedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/ReferencedDocumentType.yml	(revision 8435)
@@ -0,0 +1,90 @@
+horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType:
+    properties:
+        issuerAssignedID:
+            expose: true
+            access_type: public_method
+            serialized_name: IssuerAssignedID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIssuerAssignedID
+                setter: setIssuerAssignedID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        uRIID:
+            expose: true
+            access_type: public_method
+            serialized_name: URIID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getURIID
+                setter: setURIID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        lineID:
+            expose: true
+            access_type: public_method
+            serialized_name: LineID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineID
+                setter: setLineID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\en16931\qdt\DocumentCodeType
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        attachmentBinaryObject:
+            expose: true
+            access_type: public_method
+            serialized_name: AttachmentBinaryObject
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAttachmentBinaryObject
+                setter: setAttachmentBinaryObject
+            type: horstoeko\zugferd\entities\en16931\udt\BinaryObjectType
+        referenceTypeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ReferenceTypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReferenceTypeCode
+                setter: setReferenceTypeCode
+            type: horstoeko\zugferd\entities\en16931\qdt\ReferenceCodeType
+        formattedIssueDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: FormattedIssueDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getFormattedIssueDateTime
+                setter: setFormattedIssueDateTime
+            type: horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SpecifiedPeriodType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SpecifiedPeriodType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SpecifiedPeriodType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType:
+    properties:
+        startDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: StartDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getStartDateTime
+                setter: setStartDateTime
+            type: horstoeko\zugferd\entities\en16931\udt\DateTimeType
+        endDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: EndDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getEndDateTime
+                setter: setEndDateTime
+            type: horstoeko\zugferd\entities\en16931\udt\DateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainEventType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainEventType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainEventType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\ram\SupplyChainEventType:
+    properties:
+        occurrenceDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: OccurrenceDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getOccurrenceDateTime
+                setter: setOccurrenceDateTime
+            type: horstoeko\zugferd\entities\en16931\udt\DateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeLineItemType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeLineItemType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeLineItemType.yml	(revision 8435)
@@ -0,0 +1,57 @@
+horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeLineItemType:
+    properties:
+        associatedDocumentLineDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: AssociatedDocumentLineDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAssociatedDocumentLineDocument
+                setter: setAssociatedDocumentLineDocument
+            type: horstoeko\zugferd\entities\en16931\ram\DocumentLineDocumentType
+        specifiedTradeProduct:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeProduct
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeProduct
+                setter: setSpecifiedTradeProduct
+            type: horstoeko\zugferd\entities\en16931\ram\TradeProductType
+        specifiedLineTradeAgreement:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLineTradeAgreement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLineTradeAgreement
+                setter: setSpecifiedLineTradeAgreement
+            type: horstoeko\zugferd\entities\en16931\ram\LineTradeAgreementType
+        specifiedLineTradeDelivery:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLineTradeDelivery
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLineTradeDelivery
+                setter: setSpecifiedLineTradeDelivery
+            type: horstoeko\zugferd\entities\en16931\ram\LineTradeDeliveryType
+        specifiedLineTradeSettlement:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLineTradeSettlement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLineTradeSettlement
+                setter: setSpecifiedLineTradeSettlement
+            type: horstoeko\zugferd\entities\en16931\ram\LineTradeSettlementType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeTransactionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
@@ -0,0 +1,50 @@
+horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeTransactionType:
+    properties:
+        includedSupplyChainTradeLineItem:
+            expose: true
+            access_type: public_method
+            serialized_name: IncludedSupplyChainTradeLineItem
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIncludedSupplyChainTradeLineItem
+                setter: setIncludedSupplyChainTradeLineItem
+            xml_list:
+                inline: true
+                entry_name: IncludedSupplyChainTradeLineItem
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeLineItemType>
+        applicableHeaderTradeAgreement:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeAgreement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeAgreement
+                setter: setApplicableHeaderTradeAgreement
+            type: horstoeko\zugferd\entities\en16931\ram\HeaderTradeAgreementType
+        applicableHeaderTradeDelivery:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeDelivery
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeDelivery
+                setter: setApplicableHeaderTradeDelivery
+            type: horstoeko\zugferd\entities\en16931\ram\HeaderTradeDeliveryType
+        applicableHeaderTradeSettlement:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeSettlement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeSettlement
+                setter: setApplicableHeaderTradeSettlement
+            type: horstoeko\zugferd\entities\en16931\ram\HeaderTradeSettlementType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TaxRegistrationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TaxRegistrationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TaxRegistrationType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\ram\TaxRegistrationType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAccountingAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAccountingAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAccountingAccountType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAddressType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAddressType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAddressType.yml	(revision 8435)
@@ -0,0 +1,79 @@
+horstoeko\zugferd\entities\en16931\ram\TradeAddressType:
+    properties:
+        postcodeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: PostcodeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPostcodeCode
+                setter: setPostcodeCode
+            type: horstoeko\zugferd\entities\en16931\udt\CodeType
+        lineOne:
+            expose: true
+            access_type: public_method
+            serialized_name: LineOne
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineOne
+                setter: setLineOne
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        lineTwo:
+            expose: true
+            access_type: public_method
+            serialized_name: LineTwo
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineTwo
+                setter: setLineTwo
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        lineThree:
+            expose: true
+            access_type: public_method
+            serialized_name: LineThree
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineThree
+                setter: setLineThree
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        cityName:
+            expose: true
+            access_type: public_method
+            serialized_name: CityName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCityName
+                setter: setCityName
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        countryID:
+            expose: true
+            access_type: public_method
+            serialized_name: CountryID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCountryID
+                setter: setCountryID
+            type: horstoeko\zugferd\entities\en16931\qdt\CountryIDType
+        countrySubDivisionName:
+            expose: true
+            access_type: public_method
+            serialized_name: CountrySubDivisionName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCountrySubDivisionName
+                setter: setCountrySubDivisionName
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAllowanceChargeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAllowanceChargeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeAllowanceChargeType.yml	(revision 8435)
@@ -0,0 +1,79 @@
+horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType:
+    properties:
+        chargeIndicator:
+            expose: true
+            access_type: public_method
+            serialized_name: ChargeIndicator
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getChargeIndicator
+                setter: setChargeIndicator
+            type: horstoeko\zugferd\entities\en16931\udt\IndicatorType
+        calculationPercent:
+            expose: true
+            access_type: public_method
+            serialized_name: CalculationPercent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCalculationPercent
+                setter: setCalculationPercent
+            type: horstoeko\zugferd\entities\en16931\udt\PercentType
+        basisAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisAmount
+                setter: setBasisAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
+        actualAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ActualAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getActualAmount
+                setter: setActualAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
+        reasonCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ReasonCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReasonCode
+                setter: setReasonCode
+            type: horstoeko\zugferd\entities\en16931\qdt\AllowanceChargeReasonCodeType
+        reason:
+            expose: true
+            access_type: public_method
+            serialized_name: Reason
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReason
+                setter: setReason
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        categoryTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: CategoryTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCategoryTradeTax
+                setter: setCategoryTradeTax
+            type: horstoeko\zugferd\entities\en16931\ram\TradeTaxType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeContactType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeContactType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeContactType.yml	(revision 8435)
@@ -0,0 +1,46 @@
+horstoeko\zugferd\entities\en16931\ram\TradeContactType:
+    properties:
+        personName:
+            expose: true
+            access_type: public_method
+            serialized_name: PersonName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPersonName
+                setter: setPersonName
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        departmentName:
+            expose: true
+            access_type: public_method
+            serialized_name: DepartmentName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDepartmentName
+                setter: setDepartmentName
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        telephoneUniversalCommunication:
+            expose: true
+            access_type: public_method
+            serialized_name: TelephoneUniversalCommunication
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTelephoneUniversalCommunication
+                setter: setTelephoneUniversalCommunication
+            type: horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType
+        emailURIUniversalCommunication:
+            expose: true
+            access_type: public_method
+            serialized_name: EmailURIUniversalCommunication
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getEmailURIUniversalCommunication
+                setter: setEmailURIUniversalCommunication
+            type: horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeCountryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeCountryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeCountryType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\ram\TradeCountryType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\en16931\qdt\CountryIDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePartyType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePartyType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePartyType.yml	(revision 8435)
@@ -0,0 +1,113 @@
+horstoeko\zugferd\entities\en16931\ram\TradePartyType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            xml_list:
+                inline: true
+                entry_name: ID
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\en16931\udt\IDType>
+        globalID:
+            expose: true
+            access_type: public_method
+            serialized_name: GlobalID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGlobalID
+                setter: setGlobalID
+            xml_list:
+                inline: true
+                entry_name: GlobalID
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\en16931\udt\IDType>
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        description:
+            expose: true
+            access_type: public_method
+            serialized_name: Description
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDescription
+                setter: setDescription
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        specifiedLegalOrganization:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLegalOrganization
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLegalOrganization
+                setter: setSpecifiedLegalOrganization
+            type: horstoeko\zugferd\entities\en16931\ram\LegalOrganizationType
+        definedTradeContact:
+            expose: true
+            access_type: public_method
+            serialized_name: DefinedTradeContact
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDefinedTradeContact
+                setter: setDefinedTradeContact
+            type: horstoeko\zugferd\entities\en16931\ram\TradeContactType
+        postalTradeAddress:
+            expose: true
+            access_type: public_method
+            serialized_name: PostalTradeAddress
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPostalTradeAddress
+                setter: setPostalTradeAddress
+            type: horstoeko\zugferd\entities\en16931\ram\TradeAddressType
+        uRIUniversalCommunication:
+            expose: true
+            access_type: public_method
+            serialized_name: URIUniversalCommunication
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getURIUniversalCommunication
+                setter: setURIUniversalCommunication
+            type: horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType
+        specifiedTaxRegistration:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTaxRegistration
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTaxRegistration
+                setter: setSpecifiedTaxRegistration
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTaxRegistration
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\en16931\ram\TaxRegistrationType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePaymentTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePaymentTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePaymentTermsType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\en16931\ram\TradePaymentTermsType:
+    properties:
+        description:
+            expose: true
+            access_type: public_method
+            serialized_name: Description
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDescription
+                setter: setDescription
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        dueDateDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: DueDateDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDueDateDateTime
+                setter: setDueDateDateTime
+            type: horstoeko\zugferd\entities\en16931\udt\DateTimeType
+        directDebitMandateID:
+            expose: true
+            access_type: public_method
+            serialized_name: DirectDebitMandateID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDirectDebitMandateID
+                setter: setDirectDebitMandateID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePriceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePriceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradePriceType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\en16931\ram\TradePriceType:
+    properties:
+        chargeAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ChargeAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getChargeAmount
+                setter: setChargeAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
+        basisQuantity:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisQuantity
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisQuantity
+                setter: setBasisQuantity
+            type: horstoeko\zugferd\entities\en16931\udt\QuantityType
+        appliedTradeAllowanceCharge:
+            expose: true
+            access_type: public_method
+            serialized_name: AppliedTradeAllowanceCharge
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAppliedTradeAllowanceCharge
+                setter: setAppliedTradeAllowanceCharge
+            type: horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeProductType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeProductType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeProductType.yml	(revision 8435)
@@ -0,0 +1,98 @@
+horstoeko\zugferd\entities\en16931\ram\TradeProductType:
+    properties:
+        globalID:
+            expose: true
+            access_type: public_method
+            serialized_name: GlobalID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGlobalID
+                setter: setGlobalID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        sellerAssignedID:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerAssignedID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerAssignedID
+                setter: setSellerAssignedID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        buyerAssignedID:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerAssignedID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerAssignedID
+                setter: setBuyerAssignedID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        description:
+            expose: true
+            access_type: public_method
+            serialized_name: Description
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDescription
+                setter: setDescription
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        applicableProductCharacteristic:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableProductCharacteristic
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableProductCharacteristic
+                setter: setApplicableProductCharacteristic
+            xml_list:
+                inline: true
+                entry_name: ApplicableProductCharacteristic
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\en16931\ram\ProductCharacteristicType>
+        designatedProductClassification:
+            expose: true
+            access_type: public_method
+            serialized_name: DesignatedProductClassification
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDesignatedProductClassification
+                setter: setDesignatedProductClassification
+            xml_list:
+                inline: true
+                entry_name: DesignatedProductClassification
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\en16931\ram\ProductClassificationType>
+        originTradeCountry:
+            expose: true
+            access_type: public_method
+            serialized_name: OriginTradeCountry
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getOriginTradeCountry
+                setter: setOriginTradeCountry
+            type: horstoeko\zugferd\entities\en16931\ram\TradeCountryType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementFinancialCardType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementFinancialCardType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementFinancialCardType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\en16931\ram\TradeSettlementFinancialCardType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        cardholderName:
+            expose: true
+            access_type: public_method
+            serialized_name: CardholderName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCardholderName
+                setter: setCardholderName
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,105 @@
+horstoeko\zugferd\entities\en16931\ram\TradeSettlementHeaderMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: LineTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineTotalAmount
+                setter: setLineTotalAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
+        chargeTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ChargeTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getChargeTotalAmount
+                setter: setChargeTotalAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
+        allowanceTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: AllowanceTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAllowanceTotalAmount
+                setter: setAllowanceTotalAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
+        taxBasisTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxBasisTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxBasisTotalAmount
+                setter: setTaxBasisTotalAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
+        taxTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxTotalAmount
+                setter: setTaxTotalAmount
+            xml_list:
+                inline: true
+                entry_name: TaxTotalAmount
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\en16931\udt\AmountType>
+        roundingAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: RoundingAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getRoundingAmount
+                setter: setRoundingAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
+        grandTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: GrandTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGrandTotalAmount
+                setter: setGrandTotalAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
+        totalPrepaidAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TotalPrepaidAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTotalPrepaidAmount
+                setter: setTotalPrepaidAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
+        duePayableAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: DuePayableAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDuePayableAmount
+                setter: setDuePayableAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementLineMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementLineMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementLineMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\ram\TradeSettlementLineMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: LineTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineTotalAmount
+                setter: setLineTotalAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementPaymentMeansType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
@@ -0,0 +1,68 @@
+horstoeko\zugferd\entities\en16931\ram\TradeSettlementPaymentMeansType:
+    properties:
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\en16931\qdt\PaymentMeansCodeType
+        information:
+            expose: true
+            access_type: public_method
+            serialized_name: Information
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInformation
+                setter: setInformation
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        applicableTradeSettlementFinancialCard:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableTradeSettlementFinancialCard
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableTradeSettlementFinancialCard
+                setter: setApplicableTradeSettlementFinancialCard
+            type: horstoeko\zugferd\entities\en16931\ram\TradeSettlementFinancialCardType
+        payerPartyDebtorFinancialAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: PayerPartyDebtorFinancialAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayerPartyDebtorFinancialAccount
+                setter: setPayerPartyDebtorFinancialAccount
+            type: horstoeko\zugferd\entities\en16931\ram\DebtorFinancialAccountType
+        payeePartyCreditorFinancialAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: PayeePartyCreditorFinancialAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayeePartyCreditorFinancialAccount
+                setter: setPayeePartyCreditorFinancialAccount
+            type: horstoeko\zugferd\entities\en16931\ram\CreditorFinancialAccountType
+        payeeSpecifiedCreditorFinancialInstitution:
+            expose: true
+            access_type: public_method
+            serialized_name: PayeeSpecifiedCreditorFinancialInstitution
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayeeSpecifiedCreditorFinancialInstitution
+                setter: setPayeeSpecifiedCreditorFinancialInstitution
+            type: horstoeko\zugferd\entities\en16931\ram\CreditorFinancialInstitutionType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeTaxType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeTaxType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/TradeTaxType.yml	(revision 8435)
@@ -0,0 +1,101 @@
+horstoeko\zugferd\entities\en16931\ram\TradeTaxType:
+    properties:
+        calculatedAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: CalculatedAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCalculatedAmount
+                setter: setCalculatedAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\en16931\qdt\TaxTypeCodeType
+        exemptionReason:
+            expose: true
+            access_type: public_method
+            serialized_name: ExemptionReason
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getExemptionReason
+                setter: setExemptionReason
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
+        basisAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisAmount
+                setter: setBasisAmount
+            type: horstoeko\zugferd\entities\en16931\udt\AmountType
+        categoryCode:
+            expose: true
+            access_type: public_method
+            serialized_name: CategoryCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCategoryCode
+                setter: setCategoryCode
+            type: horstoeko\zugferd\entities\en16931\qdt\TaxCategoryCodeType
+        exemptionReasonCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ExemptionReasonCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getExemptionReasonCode
+                setter: setExemptionReasonCode
+            type: horstoeko\zugferd\entities\en16931\udt\CodeType
+        taxPointDate:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxPointDate
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxPointDate
+                setter: setTaxPointDate
+            type: horstoeko\zugferd\entities\en16931\udt\DateType
+        dueDateTypeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: DueDateTypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDueDateTypeCode
+                setter: setDueDateTypeCode
+            type: horstoeko\zugferd\entities\en16931\qdt\TimeReferenceCodeType
+        rateApplicablePercent:
+            expose: true
+            access_type: public_method
+            serialized_name: RateApplicablePercent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getRateApplicablePercent
+                setter: setRateApplicablePercent
+            type: horstoeko\zugferd\entities\en16931\udt\PercentType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/UniversalCommunicationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/UniversalCommunicationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/ram/UniversalCommunicationType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType:
+    properties:
+        uRIID:
+            expose: true
+            access_type: public_method
+            serialized_name: URIID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getURIID
+                setter: setURIID
+            type: horstoeko\zugferd\entities\en16931\udt\IDType
+        completeNumber:
+            expose: true
+            access_type: public_method
+            serialized_name: CompleteNumber
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCompleteNumber
+                setter: setCompleteNumber
+            type: horstoeko\zugferd\entities\en16931\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoice.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoice.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoice.yml	(revision 8435)
@@ -0,0 +1,11 @@
+horstoeko\zugferd\entities\en16931\rsm\CrossIndustryInvoice:
+    xml_root_name: rsm:CrossIndustryInvoice
+    xml_root_namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+    xml_namespaces:
+        a: urn:un:unece:uncefact:data:standard:QualifiedDataType:100
+        rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100
+        qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:10
+        ram: urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100
+        xs: http://www.w3.org/2001/XMLSchema
+        udt: urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100
+        xsi: http://www.w3.org/2001/XMLSchema-instance
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoiceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
@@ -0,0 +1,43 @@
+horstoeko\zugferd\entities\en16931\rsm\CrossIndustryInvoiceType:
+    xml_namespaces:
+        a: urn:un:unece:uncefact:data:standard:QualifiedDataType:100
+        rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100
+        qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:10
+        ram: urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100
+        xs: http://www.w3.org/2001/XMLSchema
+        udt: urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100
+        xsi: http://www.w3.org/2001/XMLSchema-instance
+    properties:
+        exchangedDocumentContext:
+            expose: true
+            access_type: public_method
+            serialized_name: ExchangedDocumentContext
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getExchangedDocumentContext
+                setter: setExchangedDocumentContext
+            type: horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentContextType
+        exchangedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: ExchangedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getExchangedDocument
+                setter: setExchangedDocument
+            type: horstoeko\zugferd\entities\en16931\ram\ExchangedDocumentType
+        supplyChainTradeTransaction:
+            expose: true
+            access_type: public_method
+            serialized_name: SupplyChainTradeTransaction
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getSupplyChainTradeTransaction
+                setter: setSupplyChainTradeTransaction
+            type: horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeTransactionType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/AmountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/AmountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/AmountType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\en16931\udt\AmountType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
+        currencyID:
+            expose: true
+            access_type: public_method
+            serialized_name: currencyID
+            accessor:
+                getter: getCurrencyID
+                setter: setCurrencyID
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/BinaryObjectType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/BinaryObjectType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/BinaryObjectType.yml	(revision 8435)
@@ -0,0 +1,30 @@
+horstoeko\zugferd\entities\en16931\udt\BinaryObjectType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
+        mimeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: mimeCode
+            accessor:
+                getter: getMimeCode
+                setter: setMimeCode
+            xml_attribute: true
+            type: string
+        filename:
+            expose: true
+            access_type: public_method
+            serialized_name: filename
+            accessor:
+                getter: getFilename
+                setter: setFilename
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/CodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/CodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/CodeType.yml	(revision 8435)
@@ -0,0 +1,30 @@
+horstoeko\zugferd\entities\en16931\udt\CodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        listID:
+            expose: true
+            access_type: public_method
+            serialized_name: listID
+            accessor:
+                getter: getListID
+                setter: setListID
+            xml_attribute: true
+            type: string
+        listVersionID:
+            expose: true
+            access_type: public_method
+            serialized_name: listVersionID
+            accessor:
+                getter: getListVersionID
+                setter: setListVersionID
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\en16931\udt\DateTimeType\DateTimeStringAType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        format:
+            expose: true
+            access_type: public_method
+            serialized_name: format
+            accessor:
+                getter: getFormat
+                setter: setFormat
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateTimeType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\udt\DateTimeType:
+    properties:
+        dateTimeString:
+            expose: true
+            access_type: public_method
+            serialized_name: DateTimeString
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100'
+            accessor:
+                getter: getDateTimeString
+                setter: setDateTimeString
+            type: horstoeko\zugferd\entities\en16931\udt\DateTimeType\DateTimeStringAType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.DateStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.DateStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.DateStringAType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\en16931\udt\DateType\DateStringAType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        format:
+            expose: true
+            access_type: public_method
+            serialized_name: format
+            accessor:
+                getter: getFormat
+                setter: setFormat
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/DateType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\udt\DateType:
+    properties:
+        dateString:
+            expose: true
+            access_type: public_method
+            serialized_name: DateString
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100'
+            accessor:
+                getter: getDateString
+                setter: setDateString
+            type: horstoeko\zugferd\entities\en16931\udt\DateType\DateStringAType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/IDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/IDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/IDType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\en16931\udt\IDType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        schemeID:
+            expose: true
+            access_type: public_method
+            serialized_name: schemeID
+            accessor:
+                getter: getSchemeID
+                setter: setSchemeID
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/IndicatorType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/IndicatorType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/IndicatorType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\en16931\udt\IndicatorType:
+    properties:
+        indicator:
+            expose: true
+            access_type: public_method
+            serialized_name: Indicator
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100'
+            accessor:
+                getter: getIndicator
+                setter: setIndicator
+            type: bool
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/PercentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/PercentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/PercentType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\udt\PercentType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/QuantityType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/QuantityType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/QuantityType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\en16931\udt\QuantityType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
+        unitCode:
+            expose: true
+            access_type: public_method
+            serialized_name: unitCode
+            accessor:
+                getter: getUnitCode
+                setter: setUnitCode
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/TextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/TextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/en16931/udt/TextType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\en16931\udt\TextType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/AccountingAccountTypeCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/AccountingAccountTypeCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/AccountingAccountTypeCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\AccountingAccountTypeCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/AllowanceChargeReasonCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/AllowanceChargeReasonCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\AllowanceChargeReasonCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/ContactTypeCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/ContactTypeCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/ContactTypeCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\ContactTypeCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/CountryIDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/CountryIDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/CountryIDType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\CountryIDType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/CurrencyCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/CurrencyCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/CurrencyCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\CurrencyCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/DeliveryTermsCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/DeliveryTermsCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/DeliveryTermsCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\DeliveryTermsCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/DocumentCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/DocumentCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/DocumentCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\DocumentCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType\DateTimeStringAType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        format:
+            expose: true
+            access_type: public_method
+            serialized_name: format
+            accessor:
+                getter: getFormat
+                setter: setFormat
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/FormattedDateTimeType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType:
+    properties:
+        dateTimeString:
+            expose: true
+            access_type: public_method
+            serialized_name: DateTimeString
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:QualifiedDataType:100'
+            accessor:
+                getter: getDateTimeString
+                setter: setDateTimeString
+            type: horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType\DateTimeStringAType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/LineStatusCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/LineStatusCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/LineStatusCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\LineStatusCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/PartyRoleCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/PartyRoleCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/PartyRoleCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\PartyRoleCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/PaymentMeansCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/PaymentMeansCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/PaymentMeansCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\PaymentMeansCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/ReferenceCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/ReferenceCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/ReferenceCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\ReferenceCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxCategoryCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxCategoryCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxCategoryCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\TaxCategoryCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxTypeCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxTypeCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TaxTypeCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\TaxTypeCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TimeReferenceCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TimeReferenceCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TimeReferenceCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\TimeReferenceCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TransportModeCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TransportModeCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/qdt/TransportModeCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\qdt\TransportModeCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/AdvancePaymentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/AdvancePaymentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/AdvancePaymentType.yml	(revision 8435)
@@ -0,0 +1,39 @@
+horstoeko\zugferd\entities\extended\ram\AdvancePaymentType:
+    properties:
+        paidAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: PaidAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPaidAmount
+                setter: setPaidAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        formattedReceivedDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: FormattedReceivedDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getFormattedReceivedDateTime
+                setter: setFormattedReceivedDateTime
+            type: horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType
+        includedTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: IncludedTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIncludedTradeTax
+                setter: setIncludedTradeTax
+            xml_list:
+                inline: true
+                entry_name: IncludedTradeTax
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\TradeTaxType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialAccountType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\extended\ram\CreditorFinancialAccountType:
+    properties:
+        iBANID:
+            expose: true
+            access_type: public_method
+            serialized_name: IBANID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIBANID
+                setter: setIBANID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        accountName:
+            expose: true
+            access_type: public_method
+            serialized_name: AccountName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAccountName
+                setter: setAccountName
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        proprietaryID:
+            expose: true
+            access_type: public_method
+            serialized_name: ProprietaryID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getProprietaryID
+                setter: setProprietaryID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialInstitutionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialInstitutionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/CreditorFinancialInstitutionType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\extended\ram\CreditorFinancialInstitutionType:
+    properties:
+        bICID:
+            expose: true
+            access_type: public_method
+            serialized_name: BICID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBICID
+                setter: setBICID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/DebtorFinancialAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/DebtorFinancialAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/DebtorFinancialAccountType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\extended\ram\DebtorFinancialAccountType:
+    properties:
+        iBANID:
+            expose: true
+            access_type: public_method
+            serialized_name: IBANID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIBANID
+                setter: setIBANID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentContextParameterType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentContextParameterType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentContextParameterType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\extended\ram\DocumentContextParameterType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentLineDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentLineDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/DocumentLineDocumentType.yml	(revision 8435)
@@ -0,0 +1,61 @@
+horstoeko\zugferd\entities\extended\ram\DocumentLineDocumentType:
+    properties:
+        lineID:
+            expose: true
+            access_type: public_method
+            serialized_name: LineID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineID
+                setter: setLineID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        parentLineID:
+            expose: true
+            access_type: public_method
+            serialized_name: ParentLineID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getParentLineID
+                setter: setParentLineID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        lineStatusCode:
+            expose: true
+            access_type: public_method
+            serialized_name: LineStatusCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineStatusCode
+                setter: setLineStatusCode
+            type: horstoeko\zugferd\entities\extended\qdt\LineStatusCodeType
+        lineStatusReasonCode:
+            expose: true
+            access_type: public_method
+            serialized_name: LineStatusReasonCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineStatusReasonCode
+                setter: setLineStatusReasonCode
+            type: horstoeko\zugferd\entities\extended\udt\CodeType
+        includedNote:
+            expose: true
+            access_type: public_method
+            serialized_name: IncludedNote
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIncludedNote
+                setter: setIncludedNote
+            xml_list:
+                inline: true
+                entry_name: IncludedNote
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\NoteType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentContextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentContextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentContextType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\extended\ram\ExchangedDocumentContextType:
+    properties:
+        testIndicator:
+            expose: true
+            access_type: public_method
+            serialized_name: TestIndicator
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTestIndicator
+                setter: setTestIndicator
+            type: horstoeko\zugferd\entities\extended\udt\IndicatorType
+        businessProcessSpecifiedDocumentContextParameter:
+            expose: true
+            access_type: public_method
+            serialized_name: BusinessProcessSpecifiedDocumentContextParameter
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBusinessProcessSpecifiedDocumentContextParameter
+                setter: setBusinessProcessSpecifiedDocumentContextParameter
+            type: horstoeko\zugferd\entities\extended\ram\DocumentContextParameterType
+        guidelineSpecifiedDocumentContextParameter:
+            expose: true
+            access_type: public_method
+            serialized_name: GuidelineSpecifiedDocumentContextParameter
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGuidelineSpecifiedDocumentContextParameter
+                setter: setGuidelineSpecifiedDocumentContextParameter
+            type: horstoeko\zugferd\entities\extended\ram\DocumentContextParameterType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ExchangedDocumentType.yml	(revision 8435)
@@ -0,0 +1,98 @@
+horstoeko\zugferd\entities\extended\ram\ExchangedDocumentType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\extended\qdt\DocumentCodeType
+        issueDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: IssueDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIssueDateTime
+                setter: setIssueDateTime
+            type: horstoeko\zugferd\entities\extended\udt\DateTimeType
+        copyIndicator:
+            expose: true
+            access_type: public_method
+            serialized_name: CopyIndicator
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCopyIndicator
+                setter: setCopyIndicator
+            type: horstoeko\zugferd\entities\extended\udt\IndicatorType
+        languageID:
+            expose: true
+            access_type: public_method
+            serialized_name: LanguageID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLanguageID
+                setter: setLanguageID
+            xml_list:
+                inline: true
+                entry_name: LanguageID
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\udt\IDType>
+        includedNote:
+            expose: true
+            access_type: public_method
+            serialized_name: IncludedNote
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIncludedNote
+                setter: setIncludedNote
+            xml_list:
+                inline: true
+                entry_name: IncludedNote
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\NoteType>
+        effectiveSpecifiedPeriod:
+            expose: true
+            access_type: public_method
+            serialized_name: EffectiveSpecifiedPeriod
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getEffectiveSpecifiedPeriod
+                setter: setEffectiveSpecifiedPeriod
+            type: horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,186 @@
+horstoeko\zugferd\entities\extended\ram\HeaderTradeAgreementType:
+    properties:
+        buyerReference:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerReference
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerReference
+                setter: setBuyerReference
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        sellerTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerTradeParty
+                setter: setSellerTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        buyerTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerTradeParty
+                setter: setBuyerTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        salesAgentTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: SalesAgentTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSalesAgentTradeParty
+                setter: setSalesAgentTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        buyerTaxRepresentativeTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerTaxRepresentativeTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerTaxRepresentativeTradeParty
+                setter: setBuyerTaxRepresentativeTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        sellerTaxRepresentativeTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerTaxRepresentativeTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerTaxRepresentativeTradeParty
+                setter: setSellerTaxRepresentativeTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        productEndUserTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: ProductEndUserTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getProductEndUserTradeParty
+                setter: setProductEndUserTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        applicableTradeDeliveryTerms:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableTradeDeliveryTerms
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableTradeDeliveryTerms
+                setter: setApplicableTradeDeliveryTerms
+            type: horstoeko\zugferd\entities\extended\ram\TradeDeliveryTermsType
+        sellerOrderReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerOrderReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerOrderReferencedDocument
+                setter: setSellerOrderReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+        buyerOrderReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerOrderReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerOrderReferencedDocument
+                setter: setBuyerOrderReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+        quotationReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: QuotationReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getQuotationReferencedDocument
+                setter: setQuotationReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+        contractReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: ContractReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getContractReferencedDocument
+                setter: setContractReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+        additionalReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: AdditionalReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAdditionalReferencedDocument
+                setter: setAdditionalReferencedDocument
+            xml_list:
+                inline: true
+                entry_name: AdditionalReferencedDocument
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType>
+        buyerAgentTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerAgentTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerAgentTradeParty
+                setter: setBuyerAgentTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        specifiedProcuringProject:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedProcuringProject
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedProcuringProject
+                setter: setSpecifiedProcuringProject
+            type: horstoeko\zugferd\entities\extended\ram\ProcuringProjectType
+        ultimateCustomerOrderReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: UltimateCustomerOrderReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getUltimateCustomerOrderReferencedDocument
+                setter: setUltimateCustomerOrderReferencedDocument
+            xml_list:
+                inline: true
+                entry_name: UltimateCustomerOrderReferencedDocument
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,95 @@
+horstoeko\zugferd\entities\extended\ram\HeaderTradeDeliveryType:
+    properties:
+        relatedSupplyChainConsignment:
+            expose: true
+            access_type: public_method
+            serialized_name: RelatedSupplyChainConsignment
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getRelatedSupplyChainConsignment
+                setter: setRelatedSupplyChainConsignment
+            type: array<horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType>
+            xml_list:
+                inline: false
+                entry_name: SpecifiedLogisticsTransportMovement
+                skip_when_empty: true
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+        shipToTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: ShipToTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getShipToTradeParty
+                setter: setShipToTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        ultimateShipToTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: UltimateShipToTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getUltimateShipToTradeParty
+                setter: setUltimateShipToTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        shipFromTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: ShipFromTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getShipFromTradeParty
+                setter: setShipFromTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        actualDeliverySupplyChainEvent:
+            expose: true
+            access_type: public_method
+            serialized_name: ActualDeliverySupplyChainEvent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getActualDeliverySupplyChainEvent
+                setter: setActualDeliverySupplyChainEvent
+            type: horstoeko\zugferd\entities\extended\ram\SupplyChainEventType
+        despatchAdviceReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: DespatchAdviceReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDespatchAdviceReferencedDocument
+                setter: setDespatchAdviceReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+        receivingAdviceReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: ReceivingAdviceReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReceivingAdviceReferencedDocument
+                setter: setReceivingAdviceReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+        deliveryNoteReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: DeliveryNoteReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDeliveryNoteReferencedDocument
+                setter: setDeliveryNoteReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/HeaderTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,250 @@
+horstoeko\zugferd\entities\extended\ram\HeaderTradeSettlementType:
+    properties:
+        creditorReferenceID:
+            expose: true
+            access_type: public_method
+            serialized_name: CreditorReferenceID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCreditorReferenceID
+                setter: setCreditorReferenceID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        paymentReference:
+            expose: true
+            access_type: public_method
+            serialized_name: PaymentReference
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPaymentReference
+                setter: setPaymentReference
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        taxCurrencyCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxCurrencyCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxCurrencyCode
+                setter: setTaxCurrencyCode
+            type: horstoeko\zugferd\entities\extended\qdt\CurrencyCodeType
+        invoiceCurrencyCode:
+            expose: true
+            access_type: public_method
+            serialized_name: InvoiceCurrencyCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInvoiceCurrencyCode
+                setter: setInvoiceCurrencyCode
+            type: horstoeko\zugferd\entities\extended\qdt\CurrencyCodeType
+        invoiceIssuerReference:
+            expose: true
+            access_type: public_method
+            serialized_name: InvoiceIssuerReference
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInvoiceIssuerReference
+                setter: setInvoiceIssuerReference
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        invoicerTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: InvoicerTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInvoicerTradeParty
+                setter: setInvoicerTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        invoiceeTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: InvoiceeTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInvoiceeTradeParty
+                setter: setInvoiceeTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        payeeTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: PayeeTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayeeTradeParty
+                setter: setPayeeTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        payerTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: PayerTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayerTradeParty
+                setter: setPayerTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        taxApplicableTradeCurrencyExchange:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxApplicableTradeCurrencyExchange
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxApplicableTradeCurrencyExchange
+                setter: setTaxApplicableTradeCurrencyExchange
+            type: horstoeko\zugferd\entities\extended\ram\TradeCurrencyExchangeType
+        specifiedTradeSettlementPaymentMeans:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeSettlementPaymentMeans
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeSettlementPaymentMeans
+                setter: setSpecifiedTradeSettlementPaymentMeans
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTradeSettlementPaymentMeans
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\TradeSettlementPaymentMeansType>
+        applicableTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableTradeTax
+                setter: setApplicableTradeTax
+            xml_list:
+                inline: true
+                entry_name: ApplicableTradeTax
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\TradeTaxType>
+        billingSpecifiedPeriod:
+            expose: true
+            access_type: public_method
+            serialized_name: BillingSpecifiedPeriod
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBillingSpecifiedPeriod
+                setter: setBillingSpecifiedPeriod
+            type: horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType
+        specifiedTradeAllowanceCharge:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeAllowanceCharge
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeAllowanceCharge
+                setter: setSpecifiedTradeAllowanceCharge
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTradeAllowanceCharge
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType>
+        specifiedLogisticsServiceCharge:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLogisticsServiceCharge
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLogisticsServiceCharge
+                setter: setSpecifiedLogisticsServiceCharge
+            xml_list:
+                inline: true
+                entry_name: SpecifiedLogisticsServiceCharge
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\LogisticsServiceChargeType>
+        specifiedTradePaymentTerms:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradePaymentTerms
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradePaymentTerms
+                setter: setSpecifiedTradePaymentTerms
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTradePaymentTerms
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\TradePaymentTermsType>
+        specifiedTradeSettlementHeaderMonetarySummation:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeSettlementHeaderMonetarySummation
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeSettlementHeaderMonetarySummation
+                setter: setSpecifiedTradeSettlementHeaderMonetarySummation
+            type: horstoeko\zugferd\entities\extended\ram\TradeSettlementHeaderMonetarySummationType
+        invoiceReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: InvoiceReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInvoiceReferencedDocument
+                setter: setInvoiceReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+        receivableSpecifiedTradeAccountingAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: ReceivableSpecifiedTradeAccountingAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReceivableSpecifiedTradeAccountingAccount
+                setter: setReceivableSpecifiedTradeAccountingAccount
+            xml_list:
+                inline: true
+                entry_name: ReceivableSpecifiedTradeAccountingAccount
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType>
+        specifiedAdvancePayment:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedAdvancePayment
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedAdvancePayment
+                setter: setSpecifiedAdvancePayment
+            xml_list:
+                inline: true
+                entry_name: SpecifiedAdvancePayment
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\AdvancePaymentType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LegalOrganizationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LegalOrganizationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LegalOrganizationType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\extended\ram\LegalOrganizationType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        tradingBusinessName:
+            expose: true
+            access_type: public_method
+            serialized_name: TradingBusinessName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTradingBusinessName
+                setter: setTradingBusinessName
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        postalTradeAddress:
+            expose: true
+            access_type: public_method
+            serialized_name: PostalTradeAddress
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPostalTradeAddress
+                setter: setPostalTradeAddress
+            type: horstoeko\zugferd\entities\extended\ram\TradeAddressType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,87 @@
+horstoeko\zugferd\entities\extended\ram\LineTradeAgreementType:
+    properties:
+        buyerOrderReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerOrderReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerOrderReferencedDocument
+                setter: setBuyerOrderReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+        quotationReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: QuotationReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getQuotationReferencedDocument
+                setter: setQuotationReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+        contractReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: ContractReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getContractReferencedDocument
+                setter: setContractReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+        additionalReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: AdditionalReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAdditionalReferencedDocument
+                setter: setAdditionalReferencedDocument
+            xml_list:
+                inline: true
+                entry_name: AdditionalReferencedDocument
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType>
+        grossPriceProductTradePrice:
+            expose: true
+            access_type: public_method
+            serialized_name: GrossPriceProductTradePrice
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGrossPriceProductTradePrice
+                setter: setGrossPriceProductTradePrice
+            type: horstoeko\zugferd\entities\extended\ram\TradePriceType
+        netPriceProductTradePrice:
+            expose: true
+            access_type: public_method
+            serialized_name: NetPriceProductTradePrice
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getNetPriceProductTradePrice
+                setter: setNetPriceProductTradePrice
+            type: horstoeko\zugferd\entities\extended\ram\TradePriceType
+        ultimateCustomerOrderReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: UltimateCustomerOrderReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getUltimateCustomerOrderReferencedDocument
+                setter: setUltimateCustomerOrderReferencedDocument
+            xml_list:
+                inline: true
+                entry_name: UltimateCustomerOrderReferencedDocument
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,101 @@
+horstoeko\zugferd\entities\extended\ram\LineTradeDeliveryType:
+    properties:
+        billedQuantity:
+            expose: true
+            access_type: public_method
+            serialized_name: BilledQuantity
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBilledQuantity
+                setter: setBilledQuantity
+            type: horstoeko\zugferd\entities\extended\udt\QuantityType
+        chargeFreeQuantity:
+            expose: true
+            access_type: public_method
+            serialized_name: ChargeFreeQuantity
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getChargeFreeQuantity
+                setter: setChargeFreeQuantity
+            type: horstoeko\zugferd\entities\extended\udt\QuantityType
+        packageQuantity:
+            expose: true
+            access_type: public_method
+            serialized_name: PackageQuantity
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPackageQuantity
+                setter: setPackageQuantity
+            type: horstoeko\zugferd\entities\extended\udt\QuantityType
+        shipToTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: ShipToTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getShipToTradeParty
+                setter: setShipToTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        ultimateShipToTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: UltimateShipToTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getUltimateShipToTradeParty
+                setter: setUltimateShipToTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
+        actualDeliverySupplyChainEvent:
+            expose: true
+            access_type: public_method
+            serialized_name: ActualDeliverySupplyChainEvent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getActualDeliverySupplyChainEvent
+                setter: setActualDeliverySupplyChainEvent
+            type: horstoeko\zugferd\entities\extended\ram\SupplyChainEventType
+        despatchAdviceReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: DespatchAdviceReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDespatchAdviceReferencedDocument
+                setter: setDespatchAdviceReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+        receivingAdviceReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: ReceivingAdviceReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReceivingAdviceReferencedDocument
+                setter: setReceivingAdviceReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+        deliveryNoteReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: DeliveryNoteReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDeliveryNoteReferencedDocument
+                setter: setDeliveryNoteReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LineTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,91 @@
+horstoeko\zugferd\entities\extended\ram\LineTradeSettlementType:
+    properties:
+        applicableTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableTradeTax
+                setter: setApplicableTradeTax
+            xml_list:
+                inline: true
+                entry_name: ApplicableTradeTax
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\TradeTaxType>
+        billingSpecifiedPeriod:
+            expose: true
+            access_type: public_method
+            serialized_name: BillingSpecifiedPeriod
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBillingSpecifiedPeriod
+                setter: setBillingSpecifiedPeriod
+            type: horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType
+        specifiedTradeAllowanceCharge:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeAllowanceCharge
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeAllowanceCharge
+                setter: setSpecifiedTradeAllowanceCharge
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTradeAllowanceCharge
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType>
+        specifiedTradeSettlementLineMonetarySummation:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeSettlementLineMonetarySummation
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeSettlementLineMonetarySummation
+                setter: setSpecifiedTradeSettlementLineMonetarySummation
+            type: horstoeko\zugferd\entities\extended\ram\TradeSettlementLineMonetarySummationType
+        invoiceReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: InvoiceReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInvoiceReferencedDocument
+                setter: setInvoiceReferencedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+        additionalReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: AdditionalReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAdditionalReferencedDocument
+                setter: setAdditionalReferencedDocument
+            xml_list:
+                inline: true
+                entry_name: AdditionalReferencedDocument
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType>
+        receivableSpecifiedTradeAccountingAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: ReceivableSpecifiedTradeAccountingAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReceivableSpecifiedTradeAccountingAccount
+                setter: setReceivableSpecifiedTradeAccountingAccount
+            type: horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsServiceChargeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsServiceChargeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsServiceChargeType.yml	(revision 8435)
@@ -0,0 +1,39 @@
+horstoeko\zugferd\entities\extended\ram\LogisticsServiceChargeType:
+    properties:
+        description:
+            expose: true
+            access_type: public_method
+            serialized_name: Description
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDescription
+                setter: setDescription
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        appliedAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: AppliedAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAppliedAmount
+                setter: setAppliedAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        appliedTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: AppliedTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAppliedTradeTax
+                setter: setAppliedTradeTax
+            xml_list:
+                inline: true
+                entry_name: AppliedTradeTax
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\TradeTaxType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsTransportMovementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsTransportMovementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/LogisticsTransportMovementType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType:
+    properties:
+        modeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ModeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getModeCode
+                setter: setModeCode
+            type: horstoeko\zugferd\entities\extended\qdt\TransportModeCodeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/NoteType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/NoteType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/NoteType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\extended\ram\NoteType:
+    properties:
+        contentCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ContentCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getContentCode
+                setter: setContentCode
+            type: horstoeko\zugferd\entities\extended\udt\CodeType
+        content:
+            expose: true
+            access_type: public_method
+            serialized_name: Content
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getContent
+                setter: setContent
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        subjectCode:
+            expose: true
+            access_type: public_method
+            serialized_name: SubjectCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSubjectCode
+                setter: setSubjectCode
+            type: horstoeko\zugferd\entities\extended\udt\CodeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProcuringProjectType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProcuringProjectType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProcuringProjectType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\extended\ram\ProcuringProjectType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            type: horstoeko\zugferd\entities\extended\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductCharacteristicType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductCharacteristicType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductCharacteristicType.yml	(revision 8435)
@@ -0,0 +1,46 @@
+horstoeko\zugferd\entities\extended\ram\ProductCharacteristicType:
+    properties:
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\extended\udt\CodeType
+        description:
+            expose: true
+            access_type: public_method
+            serialized_name: Description
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDescription
+                setter: setDescription
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        valueMeasure:
+            expose: true
+            access_type: public_method
+            serialized_name: ValueMeasure
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getValueMeasure
+                setter: setValueMeasure
+            type: horstoeko\zugferd\entities\extended\udt\MeasureType
+        value:
+            expose: true
+            access_type: public_method
+            serialized_name: Value
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getValue
+                setter: setValue
+            type: horstoeko\zugferd\entities\extended\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductClassificationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductClassificationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ProductClassificationType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\extended\ram\ProductClassificationType:
+    properties:
+        classCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ClassCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getClassCode
+                setter: setClassCode
+            type: horstoeko\zugferd\entities\extended\udt\CodeType
+        className:
+            expose: true
+            access_type: public_method
+            serialized_name: ClassName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getClassName
+                setter: setClassName
+            type: horstoeko\zugferd\entities\extended\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedDocumentType.yml	(revision 8435)
@@ -0,0 +1,94 @@
+horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType:
+    properties:
+        issuerAssignedID:
+            expose: true
+            access_type: public_method
+            serialized_name: IssuerAssignedID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIssuerAssignedID
+                setter: setIssuerAssignedID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        uRIID:
+            expose: true
+            access_type: public_method
+            serialized_name: URIID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getURIID
+                setter: setURIID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        lineID:
+            expose: true
+            access_type: public_method
+            serialized_name: LineID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineID
+                setter: setLineID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\extended\qdt\DocumentCodeType
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            xml_list:
+                inline: true
+                entry_name: Name
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\udt\TextType>
+        attachmentBinaryObject:
+            expose: true
+            access_type: public_method
+            serialized_name: AttachmentBinaryObject
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAttachmentBinaryObject
+                setter: setAttachmentBinaryObject
+            type: horstoeko\zugferd\entities\extended\udt\BinaryObjectType
+        referenceTypeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ReferenceTypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReferenceTypeCode
+                setter: setReferenceTypeCode
+            type: horstoeko\zugferd\entities\extended\qdt\ReferenceCodeType
+        formattedIssueDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: FormattedIssueDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getFormattedIssueDateTime
+                setter: setFormattedIssueDateTime
+            type: horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedProductType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedProductType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/ReferencedProductType.yml	(revision 8435)
@@ -0,0 +1,94 @@
+horstoeko\zugferd\entities\extended\ram\ReferencedProductType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        globalID:
+            expose: true
+            access_type: public_method
+            serialized_name: GlobalID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGlobalID
+                setter: setGlobalID
+            xml_list:
+                inline: true
+                entry_name: GlobalID
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\udt\IDType>
+        sellerAssignedID:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerAssignedID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerAssignedID
+                setter: setSellerAssignedID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        buyerAssignedID:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerAssignedID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerAssignedID
+                setter: setBuyerAssignedID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        industryAssignedID:
+            expose: true
+            access_type: public_method
+            serialized_name: IndustryAssignedID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIndustryAssignedID
+                setter: setIndustryAssignedID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        description:
+            expose: true
+            access_type: public_method
+            serialized_name: Description
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDescription
+                setter: setDescription
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        unitQuantity:
+            expose: true
+            access_type: public_method
+            serialized_name: UnitQuantity
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getUnitQuantity
+                setter: setUnitQuantity
+            type: horstoeko\zugferd\entities\extended\udt\QuantityType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SpecifiedPeriodType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SpecifiedPeriodType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SpecifiedPeriodType.yml	(revision 8435)
@@ -0,0 +1,46 @@
+horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType:
+    properties:
+        description:
+            expose: true
+            access_type: public_method
+            serialized_name: Description
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDescription
+                setter: setDescription
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        startDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: StartDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getStartDateTime
+                setter: setStartDateTime
+            type: horstoeko\zugferd\entities\extended\udt\DateTimeType
+        endDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: EndDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getEndDateTime
+                setter: setEndDateTime
+            type: horstoeko\zugferd\entities\extended\udt\DateTimeType
+        completeDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: CompleteDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCompleteDateTime
+                setter: setCompleteDateTime
+            type: horstoeko\zugferd\entities\extended\udt\DateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainConsignmentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainConsignmentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainConsignmentType.yml	(revision 8435)
@@ -0,0 +1,17 @@
+horstoeko\zugferd\entities\extended\ram\SupplyChainConsignmentType:
+    properties:
+        specifiedLogisticsTransportMovement:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLogisticsTransportMovement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLogisticsTransportMovement
+                setter: setSpecifiedLogisticsTransportMovement
+            xml_list:
+                inline: true
+                entry_name: SpecifiedLogisticsTransportMovement
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\LogisticsTransportMovementType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainEventType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainEventType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainEventType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\extended\ram\SupplyChainEventType:
+    properties:
+        occurrenceDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: OccurrenceDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getOccurrenceDateTime
+                setter: setOccurrenceDateTime
+            type: horstoeko\zugferd\entities\extended\udt\DateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeLineItemType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeLineItemType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeLineItemType.yml	(revision 8435)
@@ -0,0 +1,57 @@
+horstoeko\zugferd\entities\extended\ram\SupplyChainTradeLineItemType:
+    properties:
+        associatedDocumentLineDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: AssociatedDocumentLineDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAssociatedDocumentLineDocument
+                setter: setAssociatedDocumentLineDocument
+            type: horstoeko\zugferd\entities\extended\ram\DocumentLineDocumentType
+        specifiedTradeProduct:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeProduct
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeProduct
+                setter: setSpecifiedTradeProduct
+            type: horstoeko\zugferd\entities\extended\ram\TradeProductType
+        specifiedLineTradeAgreement:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLineTradeAgreement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLineTradeAgreement
+                setter: setSpecifiedLineTradeAgreement
+            type: horstoeko\zugferd\entities\extended\ram\LineTradeAgreementType
+        specifiedLineTradeDelivery:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLineTradeDelivery
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLineTradeDelivery
+                setter: setSpecifiedLineTradeDelivery
+            type: horstoeko\zugferd\entities\extended\ram\LineTradeDeliveryType
+        specifiedLineTradeSettlement:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLineTradeSettlement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLineTradeSettlement
+                setter: setSpecifiedLineTradeSettlement
+            type: horstoeko\zugferd\entities\extended\ram\LineTradeSettlementType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeTransactionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
@@ -0,0 +1,50 @@
+horstoeko\zugferd\entities\extended\ram\SupplyChainTradeTransactionType:
+    properties:
+        includedSupplyChainTradeLineItem:
+            expose: true
+            access_type: public_method
+            serialized_name: IncludedSupplyChainTradeLineItem
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIncludedSupplyChainTradeLineItem
+                setter: setIncludedSupplyChainTradeLineItem
+            xml_list:
+                inline: true
+                entry_name: IncludedSupplyChainTradeLineItem
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\SupplyChainTradeLineItemType>
+        applicableHeaderTradeAgreement:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeAgreement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeAgreement
+                setter: setApplicableHeaderTradeAgreement
+            type: horstoeko\zugferd\entities\extended\ram\HeaderTradeAgreementType
+        applicableHeaderTradeDelivery:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeDelivery
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeDelivery
+                setter: setApplicableHeaderTradeDelivery
+            type: horstoeko\zugferd\entities\extended\ram\HeaderTradeDeliveryType
+        applicableHeaderTradeSettlement:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeSettlement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeSettlement
+                setter: setApplicableHeaderTradeSettlement
+            type: horstoeko\zugferd\entities\extended\ram\HeaderTradeSettlementType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TaxRegistrationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TaxRegistrationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TaxRegistrationType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\extended\ram\TaxRegistrationType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAccountingAccountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAccountingAccountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAccountingAccountType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\extended\qdt\AccountingAccountTypeCodeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAddressType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAddressType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAddressType.yml	(revision 8435)
@@ -0,0 +1,83 @@
+horstoeko\zugferd\entities\extended\ram\TradeAddressType:
+    properties:
+        postcodeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: PostcodeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPostcodeCode
+                setter: setPostcodeCode
+            type: horstoeko\zugferd\entities\extended\udt\CodeType
+        lineOne:
+            expose: true
+            access_type: public_method
+            serialized_name: LineOne
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineOne
+                setter: setLineOne
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        lineTwo:
+            expose: true
+            access_type: public_method
+            serialized_name: LineTwo
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineTwo
+                setter: setLineTwo
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        lineThree:
+            expose: true
+            access_type: public_method
+            serialized_name: LineThree
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineThree
+                setter: setLineThree
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        cityName:
+            expose: true
+            access_type: public_method
+            serialized_name: CityName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCityName
+                setter: setCityName
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        countryID:
+            expose: true
+            access_type: public_method
+            serialized_name: CountryID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCountryID
+                setter: setCountryID
+            type: horstoeko\zugferd\entities\extended\qdt\CountryIDType
+        countrySubDivisionName:
+            expose: true
+            access_type: public_method
+            serialized_name: CountrySubDivisionName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCountrySubDivisionName
+                setter: setCountrySubDivisionName
+            xml_list:
+                inline: true
+                entry_name: CountrySubDivisionName
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\udt\TextType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAllowanceChargeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAllowanceChargeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeAllowanceChargeType.yml	(revision 8435)
@@ -0,0 +1,101 @@
+horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType:
+    properties:
+        chargeIndicator:
+            expose: true
+            access_type: public_method
+            serialized_name: ChargeIndicator
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getChargeIndicator
+                setter: setChargeIndicator
+            type: horstoeko\zugferd\entities\extended\udt\IndicatorType
+        sequenceNumeric:
+            expose: true
+            access_type: public_method
+            serialized_name: SequenceNumeric
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSequenceNumeric
+                setter: setSequenceNumeric
+            type: horstoeko\zugferd\entities\extended\udt\NumericType
+        calculationPercent:
+            expose: true
+            access_type: public_method
+            serialized_name: CalculationPercent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCalculationPercent
+                setter: setCalculationPercent
+            type: horstoeko\zugferd\entities\extended\udt\PercentType
+        basisAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisAmount
+                setter: setBasisAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        basisQuantity:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisQuantity
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisQuantity
+                setter: setBasisQuantity
+            type: horstoeko\zugferd\entities\extended\udt\QuantityType
+        actualAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ActualAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getActualAmount
+                setter: setActualAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        reasonCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ReasonCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReasonCode
+                setter: setReasonCode
+            type: horstoeko\zugferd\entities\extended\qdt\AllowanceChargeReasonCodeType
+        reason:
+            expose: true
+            access_type: public_method
+            serialized_name: Reason
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getReason
+                setter: setReason
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        categoryTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: CategoryTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCategoryTradeTax
+                setter: setCategoryTradeTax
+            type: horstoeko\zugferd\entities\extended\ram\TradeTaxType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeContactType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeContactType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeContactType.yml	(revision 8435)
@@ -0,0 +1,68 @@
+horstoeko\zugferd\entities\extended\ram\TradeContactType:
+    properties:
+        personName:
+            expose: true
+            access_type: public_method
+            serialized_name: PersonName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPersonName
+                setter: setPersonName
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        departmentName:
+            expose: true
+            access_type: public_method
+            serialized_name: DepartmentName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDepartmentName
+                setter: setDepartmentName
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\extended\udt\CodeType
+        telephoneUniversalCommunication:
+            expose: true
+            access_type: public_method
+            serialized_name: TelephoneUniversalCommunication
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTelephoneUniversalCommunication
+                setter: setTelephoneUniversalCommunication
+            type: horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType
+        faxUniversalCommunication:
+            expose: true
+            access_type: public_method
+            serialized_name: FaxUniversalCommunication
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getFaxUniversalCommunication
+                setter: setFaxUniversalCommunication
+            type: horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType
+        emailURIUniversalCommunication:
+            expose: true
+            access_type: public_method
+            serialized_name: EmailURIUniversalCommunication
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getEmailURIUniversalCommunication
+                setter: setEmailURIUniversalCommunication
+            type: horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCountryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCountryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCountryType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\extended\ram\TradeCountryType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\extended\qdt\CountryIDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCurrencyExchangeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCurrencyExchangeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeCurrencyExchangeType.yml	(revision 8435)
@@ -0,0 +1,46 @@
+horstoeko\zugferd\entities\extended\ram\TradeCurrencyExchangeType:
+    properties:
+        sourceCurrencyCode:
+            expose: true
+            access_type: public_method
+            serialized_name: SourceCurrencyCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSourceCurrencyCode
+                setter: setSourceCurrencyCode
+            type: horstoeko\zugferd\entities\extended\qdt\CurrencyCodeType
+        targetCurrencyCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TargetCurrencyCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTargetCurrencyCode
+                setter: setTargetCurrencyCode
+            type: horstoeko\zugferd\entities\extended\qdt\CurrencyCodeType
+        conversionRate:
+            expose: true
+            access_type: public_method
+            serialized_name: ConversionRate
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getConversionRate
+                setter: setConversionRate
+            type: horstoeko\zugferd\entities\extended\udt\RateType
+        conversionRateDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: ConversionRateDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getConversionRateDateTime
+                setter: setConversionRateDateTime
+            type: horstoeko\zugferd\entities\extended\udt\DateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeDeliveryTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeDeliveryTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeDeliveryTermsType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\extended\ram\TradeDeliveryTermsType:
+    properties:
+        deliveryTypeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: DeliveryTypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDeliveryTypeCode
+                setter: setDeliveryTypeCode
+            type: horstoeko\zugferd\entities\extended\qdt\DeliveryTermsCodeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePartyType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePartyType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePartyType.yml	(revision 8435)
@@ -0,0 +1,128 @@
+horstoeko\zugferd\entities\extended\ram\TradePartyType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            xml_list:
+                inline: true
+                entry_name: ID
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\udt\IDType>
+        globalID:
+            expose: true
+            access_type: public_method
+            serialized_name: GlobalID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGlobalID
+                setter: setGlobalID
+            xml_list:
+                inline: true
+                entry_name: GlobalID
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\udt\IDType>
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        roleCode:
+            expose: true
+            access_type: public_method
+            serialized_name: RoleCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getRoleCode
+                setter: setRoleCode
+            type: string
+        description:
+            expose: true
+            access_type: public_method
+            serialized_name: Description
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDescription
+                setter: setDescription
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        specifiedLegalOrganization:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLegalOrganization
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLegalOrganization
+                setter: setSpecifiedLegalOrganization
+            type: horstoeko\zugferd\entities\extended\ram\LegalOrganizationType
+        definedTradeContact:
+            expose: true
+            access_type: public_method
+            serialized_name: DefinedTradeContact
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDefinedTradeContact
+                setter: setDefinedTradeContact
+            xml_list:
+                inline: true
+                entry_name: DefinedTradeContact
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\TradeContactType>
+        postalTradeAddress:
+            expose: true
+            access_type: public_method
+            serialized_name: PostalTradeAddress
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPostalTradeAddress
+                setter: setPostalTradeAddress
+            type: horstoeko\zugferd\entities\extended\ram\TradeAddressType
+        uRIUniversalCommunication:
+            expose: true
+            access_type: public_method
+            serialized_name: URIUniversalCommunication
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getURIUniversalCommunication
+                setter: setURIUniversalCommunication
+            type: horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType
+        specifiedTaxRegistration:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTaxRegistration
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTaxRegistration
+                setter: setSpecifiedTaxRegistration
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTaxRegistration
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\TaxRegistrationType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentDiscountTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentDiscountTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentDiscountTermsType.yml	(revision 8435)
@@ -0,0 +1,57 @@
+horstoeko\zugferd\entities\extended\ram\TradePaymentDiscountTermsType:
+    properties:
+        basisDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisDateTime
+                setter: setBasisDateTime
+            type: horstoeko\zugferd\entities\extended\udt\DateTimeType
+        basisPeriodMeasure:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisPeriodMeasure
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisPeriodMeasure
+                setter: setBasisPeriodMeasure
+            type: horstoeko\zugferd\entities\extended\udt\MeasureType
+        basisAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisAmount
+                setter: setBasisAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        calculationPercent:
+            expose: true
+            access_type: public_method
+            serialized_name: CalculationPercent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCalculationPercent
+                setter: setCalculationPercent
+            type: horstoeko\zugferd\entities\extended\udt\PercentType
+        actualDiscountAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ActualDiscountAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getActualDiscountAmount
+                setter: setActualDiscountAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentPenaltyTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentPenaltyTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentPenaltyTermsType.yml	(revision 8435)
@@ -0,0 +1,57 @@
+horstoeko\zugferd\entities\extended\ram\TradePaymentPenaltyTermsType:
+    properties:
+        basisDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisDateTime
+                setter: setBasisDateTime
+            type: horstoeko\zugferd\entities\extended\udt\DateTimeType
+        basisPeriodMeasure:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisPeriodMeasure
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisPeriodMeasure
+                setter: setBasisPeriodMeasure
+            type: horstoeko\zugferd\entities\extended\udt\MeasureType
+        basisAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisAmount
+                setter: setBasisAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        calculationPercent:
+            expose: true
+            access_type: public_method
+            serialized_name: CalculationPercent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCalculationPercent
+                setter: setCalculationPercent
+            type: horstoeko\zugferd\entities\extended\udt\PercentType
+        actualPenaltyAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ActualPenaltyAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getActualPenaltyAmount
+                setter: setActualPenaltyAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentTermsType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentTermsType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePaymentTermsType.yml	(revision 8435)
@@ -0,0 +1,79 @@
+horstoeko\zugferd\entities\extended\ram\TradePaymentTermsType:
+    properties:
+        description:
+            expose: true
+            access_type: public_method
+            serialized_name: Description
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDescription
+                setter: setDescription
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        dueDateDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: DueDateDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDueDateDateTime
+                setter: setDueDateDateTime
+            type: horstoeko\zugferd\entities\extended\udt\DateTimeType
+        directDebitMandateID:
+            expose: true
+            access_type: public_method
+            serialized_name: DirectDebitMandateID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDirectDebitMandateID
+                setter: setDirectDebitMandateID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        partialPaymentAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: PartialPaymentAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPartialPaymentAmount
+                setter: setPartialPaymentAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        applicableTradePaymentPenaltyTerms:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableTradePaymentPenaltyTerms
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableTradePaymentPenaltyTerms
+                setter: setApplicableTradePaymentPenaltyTerms
+            type: horstoeko\zugferd\entities\extended\ram\TradePaymentPenaltyTermsType
+        applicableTradePaymentDiscountTerms:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableTradePaymentDiscountTerms
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableTradePaymentDiscountTerms
+                setter: setApplicableTradePaymentDiscountTerms
+            type: horstoeko\zugferd\entities\extended\ram\TradePaymentDiscountTermsType
+        payeeTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: PayeeTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayeeTradeParty
+                setter: setPayeeTradeParty
+            type: horstoeko\zugferd\entities\extended\ram\TradePartyType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePriceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePriceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradePriceType.yml	(revision 8435)
@@ -0,0 +1,50 @@
+horstoeko\zugferd\entities\extended\ram\TradePriceType:
+    properties:
+        chargeAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ChargeAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getChargeAmount
+                setter: setChargeAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        basisQuantity:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisQuantity
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisQuantity
+                setter: setBasisQuantity
+            type: horstoeko\zugferd\entities\extended\udt\QuantityType
+        appliedTradeAllowanceCharge:
+            expose: true
+            access_type: public_method
+            serialized_name: AppliedTradeAllowanceCharge
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAppliedTradeAllowanceCharge
+                setter: setAppliedTradeAllowanceCharge
+            xml_list:
+                inline: true
+                entry_name: AppliedTradeAllowanceCharge
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType>
+        includedTradeTax:
+            expose: true
+            access_type: public_method
+            serialized_name: IncludedTradeTax
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIncludedTradeTax
+                setter: setIncludedTradeTax
+            type: horstoeko\zugferd\entities\extended\ram\TradeTaxType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductInstanceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductInstanceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductInstanceType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\extended\ram\TradeProductInstanceType:
+    properties:
+        batchID:
+            expose: true
+            access_type: public_method
+            serialized_name: BatchID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBatchID
+                setter: setBatchID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        supplierAssignedSerialID:
+            expose: true
+            access_type: public_method
+            serialized_name: SupplierAssignedSerialID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSupplierAssignedSerialID
+                setter: setSupplierAssignedSerialID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeProductType.yml	(revision 8435)
@@ -0,0 +1,139 @@
+horstoeko\zugferd\entities\extended\ram\TradeProductType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        globalID:
+            expose: true
+            access_type: public_method
+            serialized_name: GlobalID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGlobalID
+                setter: setGlobalID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        sellerAssignedID:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerAssignedID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerAssignedID
+                setter: setSellerAssignedID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        buyerAssignedID:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerAssignedID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerAssignedID
+                setter: setBuyerAssignedID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        description:
+            expose: true
+            access_type: public_method
+            serialized_name: Description
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDescription
+                setter: setDescription
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        applicableProductCharacteristic:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableProductCharacteristic
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableProductCharacteristic
+                setter: setApplicableProductCharacteristic
+            xml_list:
+                inline: true
+                entry_name: ApplicableProductCharacteristic
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\ProductCharacteristicType>
+        designatedProductClassification:
+            expose: true
+            access_type: public_method
+            serialized_name: DesignatedProductClassification
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDesignatedProductClassification
+                setter: setDesignatedProductClassification
+            xml_list:
+                inline: true
+                entry_name: DesignatedProductClassification
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\ProductClassificationType>
+        individualTradeProductInstance:
+            expose: true
+            access_type: public_method
+            serialized_name: IndividualTradeProductInstance
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIndividualTradeProductInstance
+                setter: setIndividualTradeProductInstance
+            xml_list:
+                inline: true
+                entry_name: IndividualTradeProductInstance
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\TradeProductInstanceType>
+        originTradeCountry:
+            expose: true
+            access_type: public_method
+            serialized_name: OriginTradeCountry
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getOriginTradeCountry
+                setter: setOriginTradeCountry
+            type: horstoeko\zugferd\entities\extended\ram\TradeCountryType
+        includedReferencedProduct:
+            expose: true
+            access_type: public_method
+            serialized_name: IncludedReferencedProduct
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIncludedReferencedProduct
+                setter: setIncludedReferencedProduct
+            xml_list:
+                inline: true
+                entry_name: IncludedReferencedProduct
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\ram\ReferencedProductType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementFinancialCardType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementFinancialCardType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementFinancialCardType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\extended\ram\TradeSettlementFinancialCardType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        cardholderName:
+            expose: true
+            access_type: public_method
+            serialized_name: CardholderName
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCardholderName
+                setter: setCardholderName
+            type: horstoeko\zugferd\entities\extended\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementHeaderMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,113 @@
+horstoeko\zugferd\entities\extended\ram\TradeSettlementHeaderMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: LineTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineTotalAmount
+                setter: setLineTotalAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        chargeTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ChargeTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getChargeTotalAmount
+                setter: setChargeTotalAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        allowanceTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: AllowanceTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAllowanceTotalAmount
+                setter: setAllowanceTotalAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        taxBasisTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxBasisTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxBasisTotalAmount
+                setter: setTaxBasisTotalAmount
+            xml_list:
+                inline: true
+                entry_name: TaxBasisTotalAmount
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\udt\AmountType>
+        taxTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxTotalAmount
+                setter: setTaxTotalAmount
+            xml_list:
+                inline: true
+                entry_name: TaxTotalAmount
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\udt\AmountType>
+        roundingAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: RoundingAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getRoundingAmount
+                setter: setRoundingAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        grandTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: GrandTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGrandTotalAmount
+                setter: setGrandTotalAmount
+            xml_list:
+                inline: true
+                entry_name: GrandTotalAmount
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\extended\udt\AmountType>
+        totalPrepaidAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TotalPrepaidAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTotalPrepaidAmount
+                setter: setTotalPrepaidAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        duePayableAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: DuePayableAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDuePayableAmount
+                setter: setDuePayableAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementLineMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementLineMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementLineMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,68 @@
+horstoeko\zugferd\entities\extended\ram\TradeSettlementLineMonetarySummationType:
+    properties:
+        lineTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: LineTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineTotalAmount
+                setter: setLineTotalAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        chargeTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: ChargeTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getChargeTotalAmount
+                setter: setChargeTotalAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        allowanceTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: AllowanceTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAllowanceTotalAmount
+                setter: setAllowanceTotalAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        taxTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxTotalAmount
+                setter: setTaxTotalAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        grandTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: GrandTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGrandTotalAmount
+                setter: setGrandTotalAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        totalAllowanceChargeAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TotalAllowanceChargeAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTotalAllowanceChargeAmount
+                setter: setTotalAllowanceChargeAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementPaymentMeansType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeSettlementPaymentMeansType.yml	(revision 8435)
@@ -0,0 +1,68 @@
+horstoeko\zugferd\entities\extended\ram\TradeSettlementPaymentMeansType:
+    properties:
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\extended\qdt\PaymentMeansCodeType
+        information:
+            expose: true
+            access_type: public_method
+            serialized_name: Information
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInformation
+                setter: setInformation
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        applicableTradeSettlementFinancialCard:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableTradeSettlementFinancialCard
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableTradeSettlementFinancialCard
+                setter: setApplicableTradeSettlementFinancialCard
+            type: horstoeko\zugferd\entities\extended\ram\TradeSettlementFinancialCardType
+        payerPartyDebtorFinancialAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: PayerPartyDebtorFinancialAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayerPartyDebtorFinancialAccount
+                setter: setPayerPartyDebtorFinancialAccount
+            type: horstoeko\zugferd\entities\extended\ram\DebtorFinancialAccountType
+        payeePartyCreditorFinancialAccount:
+            expose: true
+            access_type: public_method
+            serialized_name: PayeePartyCreditorFinancialAccount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayeePartyCreditorFinancialAccount
+                setter: setPayeePartyCreditorFinancialAccount
+            type: horstoeko\zugferd\entities\extended\ram\CreditorFinancialAccountType
+        payeeSpecifiedCreditorFinancialInstitution:
+            expose: true
+            access_type: public_method
+            serialized_name: PayeeSpecifiedCreditorFinancialInstitution
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPayeeSpecifiedCreditorFinancialInstitution
+                setter: setPayeeSpecifiedCreditorFinancialInstitution
+            type: horstoeko\zugferd\entities\extended\ram\CreditorFinancialInstitutionType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeTaxType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeTaxType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/TradeTaxType.yml	(revision 8435)
@@ -0,0 +1,123 @@
+horstoeko\zugferd\entities\extended\ram\TradeTaxType:
+    properties:
+        calculatedAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: CalculatedAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCalculatedAmount
+                setter: setCalculatedAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\extended\qdt\TaxTypeCodeType
+        exemptionReason:
+            expose: true
+            access_type: public_method
+            serialized_name: ExemptionReason
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getExemptionReason
+                setter: setExemptionReason
+            type: horstoeko\zugferd\entities\extended\udt\TextType
+        basisAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: BasisAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBasisAmount
+                setter: setBasisAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        lineTotalBasisAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: LineTotalBasisAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getLineTotalBasisAmount
+                setter: setLineTotalBasisAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        allowanceChargeBasisAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: AllowanceChargeBasisAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getAllowanceChargeBasisAmount
+                setter: setAllowanceChargeBasisAmount
+            type: horstoeko\zugferd\entities\extended\udt\AmountType
+        categoryCode:
+            expose: true
+            access_type: public_method
+            serialized_name: CategoryCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCategoryCode
+                setter: setCategoryCode
+            type: horstoeko\zugferd\entities\extended\qdt\TaxCategoryCodeType
+        exemptionReasonCode:
+            expose: true
+            access_type: public_method
+            serialized_name: ExemptionReasonCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getExemptionReasonCode
+                setter: setExemptionReasonCode
+            type: horstoeko\zugferd\entities\extended\udt\CodeType
+        taxPointDate:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxPointDate
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxPointDate
+                setter: setTaxPointDate
+            type: horstoeko\zugferd\entities\extended\udt\DateType
+        dueDateTypeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: DueDateTypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDueDateTypeCode
+                setter: setDueDateTypeCode
+            type: horstoeko\zugferd\entities\extended\qdt\TimeReferenceCodeType
+        rateApplicablePercent:
+            expose: true
+            access_type: public_method
+            serialized_name: RateApplicablePercent
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getRateApplicablePercent
+                setter: setRateApplicablePercent
+            type: horstoeko\zugferd\entities\extended\udt\PercentType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/UniversalCommunicationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/UniversalCommunicationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/ram/UniversalCommunicationType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType:
+    properties:
+        uRIID:
+            expose: true
+            access_type: public_method
+            serialized_name: URIID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getURIID
+                setter: setURIID
+            type: horstoeko\zugferd\entities\extended\udt\IDType
+        completeNumber:
+            expose: true
+            access_type: public_method
+            serialized_name: CompleteNumber
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCompleteNumber
+                setter: setCompleteNumber
+            type: horstoeko\zugferd\entities\extended\udt\TextType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoice.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoice.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoice.yml	(revision 8435)
@@ -0,0 +1,11 @@
+horstoeko\zugferd\entities\extended\rsm\CrossIndustryInvoice:
+    xml_root_name: rsm:CrossIndustryInvoice
+    xml_root_namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+    xml_namespaces:
+        a: urn:un:unece:uncefact:data:standard:QualifiedDataType:100
+        rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100
+        qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:10
+        ram: urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100
+        xs: http://www.w3.org/2001/XMLSchema
+        udt: urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100
+        xsi: http://www.w3.org/2001/XMLSchema-instance
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoiceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
@@ -0,0 +1,43 @@
+horstoeko\zugferd\entities\extended\rsm\CrossIndustryInvoiceType:
+    xml_namespaces:
+        a: urn:un:unece:uncefact:data:standard:QualifiedDataType:100
+        rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100
+        qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:10
+        ram: urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100
+        xs: http://www.w3.org/2001/XMLSchema
+        udt: urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100
+        xsi: http://www.w3.org/2001/XMLSchema-instance
+    properties:
+        exchangedDocumentContext:
+            expose: true
+            access_type: public_method
+            serialized_name: ExchangedDocumentContext
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getExchangedDocumentContext
+                setter: setExchangedDocumentContext
+            type: horstoeko\zugferd\entities\extended\ram\ExchangedDocumentContextType
+        exchangedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: ExchangedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getExchangedDocument
+                setter: setExchangedDocument
+            type: horstoeko\zugferd\entities\extended\ram\ExchangedDocumentType
+        supplyChainTradeTransaction:
+            expose: true
+            access_type: public_method
+            serialized_name: SupplyChainTradeTransaction
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getSupplyChainTradeTransaction
+                setter: setSupplyChainTradeTransaction
+            type: horstoeko\zugferd\entities\extended\ram\SupplyChainTradeTransactionType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/AmountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/AmountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/AmountType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\extended\udt\AmountType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
+        currencyID:
+            expose: true
+            access_type: public_method
+            serialized_name: currencyID
+            accessor:
+                getter: getCurrencyID
+                setter: setCurrencyID
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/BinaryObjectType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/BinaryObjectType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/BinaryObjectType.yml	(revision 8435)
@@ -0,0 +1,30 @@
+horstoeko\zugferd\entities\extended\udt\BinaryObjectType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            xml_element:
+                cdata: false
+            type: string
+        mimeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: mimeCode
+            accessor:
+                getter: getMimeCode
+                setter: setMimeCode
+            xml_attribute: true
+            type: string
+        filename:
+            expose: true
+            access_type: public_method
+            serialized_name: filename
+            accessor:
+                getter: getFilename
+                setter: setFilename
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/CodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/CodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/CodeType.yml	(revision 8435)
@@ -0,0 +1,30 @@
+horstoeko\zugferd\entities\extended\udt\CodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        listID:
+            expose: true
+            access_type: public_method
+            serialized_name: listID
+            accessor:
+                getter: getListID
+                setter: setListID
+            xml_attribute: true
+            type: string
+        listVersionID:
+            expose: true
+            access_type: public_method
+            serialized_name: listVersionID
+            accessor:
+                getter: getListVersionID
+                setter: setListVersionID
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\extended\udt\DateTimeType\DateTimeStringAType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        format:
+            expose: true
+            access_type: public_method
+            serialized_name: format
+            accessor:
+                getter: getFormat
+                setter: setFormat
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateTimeType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\extended\udt\DateTimeType:
+    properties:
+        dateTimeString:
+            expose: true
+            access_type: public_method
+            serialized_name: DateTimeString
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100'
+            accessor:
+                getter: getDateTimeString
+                setter: setDateTimeString
+            type: horstoeko\zugferd\entities\extended\udt\DateTimeType\DateTimeStringAType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.DateStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.DateStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.DateStringAType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\extended\udt\DateType\DateStringAType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        format:
+            expose: true
+            access_type: public_method
+            serialized_name: format
+            accessor:
+                getter: getFormat
+                setter: setFormat
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/DateType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\extended\udt\DateType:
+    properties:
+        dateString:
+            expose: true
+            access_type: public_method
+            serialized_name: DateString
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100'
+            accessor:
+                getter: getDateString
+                setter: setDateString
+            type: horstoeko\zugferd\entities\extended\udt\DateType\DateStringAType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/IDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/IDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/IDType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\extended\udt\IDType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        schemeID:
+            expose: true
+            access_type: public_method
+            serialized_name: schemeID
+            accessor:
+                getter: getSchemeID
+                setter: setSchemeID
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/IndicatorType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/IndicatorType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/IndicatorType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\extended\udt\IndicatorType:
+    properties:
+        indicator:
+            expose: true
+            access_type: public_method
+            serialized_name: Indicator
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100'
+            accessor:
+                getter: getIndicator
+                setter: setIndicator
+            type: bool
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/MeasureType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/MeasureType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/MeasureType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\extended\udt\MeasureType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
+        unitCode:
+            expose: true
+            access_type: public_method
+            serialized_name: unitCode
+            accessor:
+                getter: getUnitCode
+                setter: setUnitCode
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/NumericType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/NumericType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/NumericType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\udt\NumericType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/PercentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/PercentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/PercentType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\udt\PercentType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/QuantityType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/QuantityType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/QuantityType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\extended\udt\QuantityType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
+        unitCode:
+            expose: true
+            access_type: public_method
+            serialized_name: unitCode
+            accessor:
+                getter: getUnitCode
+                setter: setUnitCode
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/RateType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/RateType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/RateType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\udt\RateType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/TextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/TextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/extended/udt/TextType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\extended\udt\TextType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CountryIDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CountryIDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CountryIDType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\minimum\qdt\CountryIDType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CurrencyCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CurrencyCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/CurrencyCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\minimum\qdt\CurrencyCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/DocumentCodeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/DocumentCodeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/qdt/DocumentCodeType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\minimum\qdt\DocumentCodeType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/DocumentContextParameterType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/DocumentContextParameterType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/DocumentContextParameterType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\minimum\ram\DocumentContextParameterType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\minimum\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentContextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentContextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentContextType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentContextType:
+    properties:
+        businessProcessSpecifiedDocumentContextParameter:
+            expose: true
+            access_type: public_method
+            serialized_name: BusinessProcessSpecifiedDocumentContextParameter
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBusinessProcessSpecifiedDocumentContextParameter
+                setter: setBusinessProcessSpecifiedDocumentContextParameter
+            type: horstoeko\zugferd\entities\minimum\ram\DocumentContextParameterType
+        guidelineSpecifiedDocumentContextParameter:
+            expose: true
+            access_type: public_method
+            serialized_name: GuidelineSpecifiedDocumentContextParameter
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGuidelineSpecifiedDocumentContextParameter
+                setter: setGuidelineSpecifiedDocumentContextParameter
+            type: horstoeko\zugferd\entities\minimum\ram\DocumentContextParameterType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ExchangedDocumentType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\minimum\udt\IDType
+        typeCode:
+            expose: true
+            access_type: public_method
+            serialized_name: TypeCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTypeCode
+                setter: setTypeCode
+            type: horstoeko\zugferd\entities\minimum\qdt\DocumentCodeType
+        issueDateTime:
+            expose: true
+            access_type: public_method
+            serialized_name: IssueDateTime
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIssueDateTime
+                setter: setIssueDateTime
+            type: horstoeko\zugferd\entities\minimum\udt\DateTimeType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeAgreementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeAgreementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeAgreementType.yml	(revision 8435)
@@ -0,0 +1,46 @@
+horstoeko\zugferd\entities\minimum\ram\HeaderTradeAgreementType:
+    properties:
+        buyerReference:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerReference
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerReference
+                setter: setBuyerReference
+            type: horstoeko\zugferd\entities\minimum\udt\TextType
+        sellerTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: SellerTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSellerTradeParty
+                setter: setSellerTradeParty
+            type: horstoeko\zugferd\entities\minimum\ram\TradePartyType
+        buyerTradeParty:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerTradeParty
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerTradeParty
+                setter: setBuyerTradeParty
+            type: horstoeko\zugferd\entities\minimum\ram\TradePartyType
+        buyerOrderReferencedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: BuyerOrderReferencedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getBuyerOrderReferencedDocument
+                setter: setBuyerOrderReferencedDocument
+            type: horstoeko\zugferd\entities\minimum\ram\ReferencedDocumentType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeDeliveryType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeDeliveryType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeDeliveryType.yml	(revision 8435)
@@ -0,0 +1,2 @@
+horstoeko\zugferd\entities\minimum\ram\HeaderTradeDeliveryType:
+    properties: {  }
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeSettlementType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeSettlementType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/HeaderTradeSettlementType.yml	(revision 8435)
@@ -0,0 +1,24 @@
+horstoeko\zugferd\entities\minimum\ram\HeaderTradeSettlementType:
+    properties:
+        invoiceCurrencyCode:
+            expose: true
+            access_type: public_method
+            serialized_name: InvoiceCurrencyCode
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getInvoiceCurrencyCode
+                setter: setInvoiceCurrencyCode
+            type: horstoeko\zugferd\entities\minimum\qdt\CurrencyCodeType
+        specifiedTradeSettlementHeaderMonetarySummation:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTradeSettlementHeaderMonetarySummation
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTradeSettlementHeaderMonetarySummation
+                setter: setSpecifiedTradeSettlementHeaderMonetarySummation
+            type: horstoeko\zugferd\entities\minimum\ram\TradeSettlementHeaderMonetarySummationType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/LegalOrganizationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/LegalOrganizationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/LegalOrganizationType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\minimum\ram\LegalOrganizationType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\minimum\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ReferencedDocumentType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ReferencedDocumentType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/ReferencedDocumentType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\minimum\ram\ReferencedDocumentType:
+    properties:
+        issuerAssignedID:
+            expose: true
+            access_type: public_method
+            serialized_name: IssuerAssignedID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getIssuerAssignedID
+                setter: setIssuerAssignedID
+            type: horstoeko\zugferd\entities\minimum\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/SupplyChainTradeTransactionType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/SupplyChainTradeTransactionType.yml	(revision 8435)
@@ -0,0 +1,35 @@
+horstoeko\zugferd\entities\minimum\ram\SupplyChainTradeTransactionType:
+    properties:
+        applicableHeaderTradeAgreement:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeAgreement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeAgreement
+                setter: setApplicableHeaderTradeAgreement
+            type: horstoeko\zugferd\entities\minimum\ram\HeaderTradeAgreementType
+        applicableHeaderTradeDelivery:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeDelivery
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeDelivery
+                setter: setApplicableHeaderTradeDelivery
+            type: horstoeko\zugferd\entities\minimum\ram\HeaderTradeDeliveryType
+        applicableHeaderTradeSettlement:
+            expose: true
+            access_type: public_method
+            serialized_name: ApplicableHeaderTradeSettlement
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getApplicableHeaderTradeSettlement
+                setter: setApplicableHeaderTradeSettlement
+            type: horstoeko\zugferd\entities\minimum\ram\HeaderTradeSettlementType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TaxRegistrationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TaxRegistrationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TaxRegistrationType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\minimum\ram\TaxRegistrationType:
+    properties:
+        iD:
+            expose: true
+            access_type: public_method
+            serialized_name: ID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getID
+                setter: setID
+            type: horstoeko\zugferd\entities\minimum\udt\IDType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeAddressType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeAddressType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeAddressType.yml	(revision 8435)
@@ -0,0 +1,14 @@
+horstoeko\zugferd\entities\minimum\ram\TradeAddressType:
+    properties:
+        countryID:
+            expose: true
+            access_type: public_method
+            serialized_name: CountryID
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getCountryID
+                setter: setCountryID
+            type: horstoeko\zugferd\entities\minimum\qdt\CountryIDType
+
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradePartyType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradePartyType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradePartyType.yml	(revision 8435)
@@ -0,0 +1,50 @@
+horstoeko\zugferd\entities\minimum\ram\TradePartyType:
+    properties:
+        name:
+            expose: true
+            access_type: public_method
+            serialized_name: Name
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getName
+                setter: setName
+            type: horstoeko\zugferd\entities\minimum\udt\TextType
+        specifiedLegalOrganization:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedLegalOrganization
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedLegalOrganization
+                setter: setSpecifiedLegalOrganization
+            type: horstoeko\zugferd\entities\minimum\ram\LegalOrganizationType
+        postalTradeAddress:
+            expose: true
+            access_type: public_method
+            serialized_name: PostalTradeAddress
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getPostalTradeAddress
+                setter: setPostalTradeAddress
+            type: horstoeko\zugferd\entities\minimum\ram\TradeAddressType
+        specifiedTaxRegistration:
+            expose: true
+            access_type: public_method
+            serialized_name: SpecifiedTaxRegistration
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getSpecifiedTaxRegistration
+                setter: setSpecifiedTaxRegistration
+            xml_list:
+                inline: true
+                entry_name: SpecifiedTaxRegistration
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            type: array<horstoeko\zugferd\entities\minimum\ram\TaxRegistrationType>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/ram/TradeSettlementHeaderMonetarySummationType.yml	(revision 8435)
@@ -0,0 +1,46 @@
+horstoeko\zugferd\entities\minimum\ram\TradeSettlementHeaderMonetarySummationType:
+    properties:
+        taxBasisTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxBasisTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxBasisTotalAmount
+                setter: setTaxBasisTotalAmount
+            type: horstoeko\zugferd\entities\minimum\udt\AmountType
+        taxTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: TaxTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getTaxTotalAmount
+                setter: setTaxTotalAmount
+            type: horstoeko\zugferd\entities\minimum\udt\AmountType
+        grandTotalAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: GrandTotalAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getGrandTotalAmount
+                setter: setGrandTotalAmount
+            type: horstoeko\zugferd\entities\minimum\udt\AmountType
+        duePayableAmount:
+            expose: true
+            access_type: public_method
+            serialized_name: DuePayableAmount
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'
+            accessor:
+                getter: getDuePayableAmount
+                setter: setDuePayableAmount
+            type: horstoeko\zugferd\entities\minimum\udt\AmountType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoice.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoice.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoice.yml	(revision 8435)
@@ -0,0 +1,11 @@
+horstoeko\zugferd\entities\minimum\rsm\CrossIndustryInvoice:
+    xml_root_name: rsm:CrossIndustryInvoice
+    xml_root_namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+    xml_namespaces:
+        a: urn:un:unece:uncefact:data:standard:QualifiedDataType:100
+        rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100
+        qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:10
+        ram: urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100
+        xs: http://www.w3.org/2001/XMLSchema
+        udt: urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100
+        xsi: http://www.w3.org/2001/XMLSchema-instance
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoiceType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/rsm/CrossIndustryInvoiceType.yml	(revision 8435)
@@ -0,0 +1,43 @@
+horstoeko\zugferd\entities\minimum\rsm\CrossIndustryInvoiceType:
+    xml_namespaces:
+        a: urn:un:unece:uncefact:data:standard:QualifiedDataType:100
+        rsm: urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100
+        qdt: urn:un:unece:uncefact:data:standard:QualifiedDataType:10
+        ram: urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100
+        xs: http://www.w3.org/2001/XMLSchema
+        udt: urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100
+        xsi: http://www.w3.org/2001/XMLSchema-instance
+    properties:
+        exchangedDocumentContext:
+            expose: true
+            access_type: public_method
+            serialized_name: ExchangedDocumentContext
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getExchangedDocumentContext
+                setter: setExchangedDocumentContext
+            type: horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentContextType
+        exchangedDocument:
+            expose: true
+            access_type: public_method
+            serialized_name: ExchangedDocument
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getExchangedDocument
+                setter: setExchangedDocument
+            type: horstoeko\zugferd\entities\minimum\ram\ExchangedDocumentType
+        supplyChainTradeTransaction:
+            expose: true
+            access_type: public_method
+            serialized_name: SupplyChainTradeTransaction
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'
+            accessor:
+                getter: getSupplyChainTradeTransaction
+                setter: setSupplyChainTradeTransaction
+            type: horstoeko\zugferd\entities\minimum\ram\SupplyChainTradeTransactionType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/AmountType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/AmountType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/AmountType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\minimum\udt\AmountType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: float
+            xml_element:
+                cdata: false
+        currencyID:
+            expose: true
+            access_type: public_method
+            serialized_name: currencyID
+            accessor:
+                getter: getCurrencyID
+                setter: setCurrencyID
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.DateTimeStringAType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.DateTimeStringAType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\minimum\udt\DateTimeType\DateTimeStringAType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        format:
+            expose: true
+            access_type: public_method
+            serialized_name: format
+            accessor:
+                getter: getFormat
+                setter: setFormat
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/DateTimeType.yml	(revision 8435)
@@ -0,0 +1,13 @@
+horstoeko\zugferd\entities\minimum\udt\DateTimeType:
+    properties:
+        dateTimeString:
+            expose: true
+            access_type: public_method
+            serialized_name: DateTimeString
+            xml_element:
+                cdata: false
+                namespace: 'urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100'
+            accessor:
+                getter: getDateTimeString
+                setter: setDateTimeString
+            type: horstoeko\zugferd\entities\minimum\udt\DateTimeType\DateTimeStringAType
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/IDType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/IDType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/IDType.yml	(revision 8435)
@@ -0,0 +1,21 @@
+horstoeko\zugferd\entities\minimum\udt\IDType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
+        schemeID:
+            expose: true
+            access_type: public_method
+            serialized_name: schemeID
+            accessor:
+                getter: getSchemeID
+                setter: setSchemeID
+            xml_attribute: true
+            type: string
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/TextType.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/TextType.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/src/yaml/minimum/udt/TextType.yml	(revision 8435)
@@ -0,0 +1,12 @@
+horstoeko\zugferd\entities\minimum\udt\TextType:
+    properties:
+        __value:
+            expose: true
+            xml_value: true
+            access_type: public_method
+            accessor:
+                getter: value
+                setter: value
+            type: string
+            xml_element:
+                cdata: false
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/TestCase.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/TestCase.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/TestCase.php	(revision 8435)
@@ -0,0 +1,108 @@
+<?php
+
+namespace horstoeko\zugferd\tests;
+
+use ReflectionClass;
+use ReflectionMethod;
+use ReflectionProperty;
+use \PHPUnit\Framework\TestCase as PhpUnitTestCase;
+
+class TestCase extends PhpUnitTestCase
+{
+    /**
+     * Expect notice on php version smaller than 8
+     * Expect warning on php version greater or equal than 8
+     *
+     * @return void
+     */
+    public function expectNoticeOrWarning(): void
+    {
+        if (version_compare(phpversion(), '8', '>=')) {
+            $this->expectWarning();
+        } else {
+            $this->expectNotice();
+        }
+    }
+
+    /**
+     * Use this with PHPunit 10
+     *
+     * @param  \Closure $run
+     * @return void
+     */
+    public function expectNoticeOrWarningExt(\Closure $run): void
+    {
+        set_error_handler(
+            static function (int $errno, string $errstr): never {
+                throw new \Exception($errstr, $errno);
+            },
+            E_ALL
+        );
+
+        $this->expectException(\Exception::class);
+
+        call_user_func($run);
+
+        restore_error_handler();
+    }
+
+    /**
+     * Access to private properties
+     *
+     * @param  string $className
+     * @param  string $propertyName
+     * @return ReflectionProperty
+     */
+    public function getPrivatePropertyFromClassname(string $className, string $propertyName): ReflectionProperty
+    {
+        $reflector = new ReflectionClass($className);
+        $property = $reflector->getProperty($propertyName);
+        $property->setAccessible(true);
+        return $property;
+    }
+
+    /**
+     * Access to private properties
+     *
+     * @param  object $object
+     * @param  string $propertyName
+     * @return ReflectionProperty
+     */
+    public function getPrivatePropertyFromObject(object $object, string $propertyName): ReflectionProperty
+    {
+        $reflector = new ReflectionClass($object);
+        $property = $reflector->getProperty($propertyName);
+        $property->setAccessible(true);
+        return $property;
+    }
+
+    /**
+     * Access to private method
+     *
+     * @param  string $className
+     * @param  string $methodName
+     * @return ReflectionMethod
+     */
+    public function getPrivateMethodFromClassname(string $className, string $methodName): ReflectionMethod
+    {
+        $reflector = new ReflectionClass($className);
+        $method = $reflector->getMethod($methodName);
+        $method->setAccessible(true);
+        return $method;
+    }
+
+    /**
+     * Access to private method
+     *
+     * @param  object $object
+     * @param  string $methodName
+     * @return ReflectionMethod
+     */
+    public function getPrivateMethodFromObject(object $object, string $methodName): ReflectionMethod
+    {
+        $reflector = new ReflectionClass($object);
+        $method = $reflector->getMethod($methodName);
+        $method->setAccessible(true);
+        return $method;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/basic_simple.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/basic_simple.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/basic_simple.xml	(revision 8435)
@@ -0,0 +1,205 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- English disclaimer below.-->
+<!--Nutzungsrechte 
+ZUGFeRD Datenformat Version 2.1.1, 01.07.2020
+Beispiel Version 01.07.2020
+ 
+Zweck des Forums elektronisch Rechnung Deutschland, welches am 31. MÃ€rz 2010 unter der Arbeitsgemeinschaft fÃŒr 
+wirtschaftliche Verwaltung e. V. gegrÃŒndet wurde, ist u. a. die Schaffung und Spezifizierung eines offenen Datenformats 
+fÃŒr strukturierten elektronischen Datenaustausch auf der Grundlage offener und nicht diskriminierender, standardisierter 
+Technologien (âZUGFeRD Datenformatâ).
+ 
+Das ZUGFeRD Datenformat wird nach MaÃgabe des FeRD sowohl Unternehmen als auch der Ã¶ffentlichen Verwaltung 
+frei zugÃ€nglich gemacht. HierfÃŒr bietet FeRD allen Unternehmen und Organisationen der Ã¶ffentlichen Verwaltung eine 
+Lizenz fÃŒr die Nutzung des urheberrechtlich geschÃŒtzten ZUGFeRD-Datenformats zu fairen, sachgerechten und nicht 
+diskriminierenden Bedingungen an.
+ 
+Die Spezifikation des FeRD zur Implementierung des ZUGFeRD Datenformats ist in ihrer jeweils geltenden Fassung 
+abrufbar unter www.ferd-net.de.
+ 
+Im Einzelnen schlieÃt die NutzungsgewÃ€hrung ein: 
+=====================================
+ 
+FeRD rÃ€umt eine Lizenz fÃŒr die Nutzung des urheberrechtlich geschÃŒtzten ZUGFeRD Datenformats in der jeweils 
+geltenden und akzeptierten Fassung (www.ferd-net.de) ein. 
+Die Lizenz beinhaltet ein unwiderrufliches Nutzungsrecht einschlieÃlich des Rechts der Weiterentwicklung, 
+Weiterbearbeitung und Verbindung mit anderen Produkten.
+Die Lizenz gilt insbesondere fÃŒr die Entwicklung, die Gestaltung, die Herstellung, den Verkauf, die Nutzung oder 
+anderweitige Verwendung des ZUGFeRD Datenformats fÃŒr Hardware- und/oder Softwareprodukte sowie sonstige 
+Anwendungen und Dienste. 
+Diese Lizenz schlieÃt nicht die wesentlichen Patente der Mitglieder von FeRD ein. Als wesentliche Patente sind Patente 
+und Patentanmeldungen weltweit zu verstehen, die einen oder mehrere PatentansprÃŒche beinhalten, bei denen es sich um 
+notwendige AnsprÃŒche handelt. Notwendige AnsprÃŒche sind lediglich jene AnsprÃŒche der Wesentlichen Patente, die durch 
+die Implementierung des ZUGFeRD Datenformats notwendigerweise verletzt wÃŒrden. 
+Der Lizenznehmer ist berechtigt, seinen jeweiligen Konzerngesellschaften ein unbefristetes, weltweites, nicht ÃŒbertragbares, 
+unwiderrufliches Nutzungsrecht einschlieÃlich des Rechts der Weiterentwicklung, Weiterbearbeitung und Verbindung mit 
+anderen Produkten einzurÃ€umen. 
+ 
+Die Lizenz wird kostenfrei zur VerfÃŒgung gestellt. 
+ 
+AuÃer im Falle vorsÃ€tzlichen Verschuldens oder grober FahrlÃ€ssigkeit haftet FeRD weder fÃŒr Nutzungsausfall, entgangenen 
+Gewinn, Datenverlust, Kommunikationsverlust, Einnahmeausfall, VertragseinbuÃen, GeschÃ€ftsausfall oder fÃŒr Kosten, 
+SchÃ€den, Verluste oder Haftpflichten im Zusammenhang mit einer Unterbrechung der GeschÃ€ftstÃ€tigkeit, noch fÃŒr konkrete, 
+beilÃ€ufig entstandene, mittelbare SchÃ€den, Straf- oder FolgeschÃ€den und zwar auch dann nicht, wenn die MÃ¶glichkeit der 
+Kosten, Verluste bzw. SchÃ€den hÃ€tte normalerweise vorhergesehen werden kÃ¶nnen.-->
+<!--Right of use 
+ZUGFeRD Data format version 2.1.1, July 1, 2020
+ 
+The purpose of the Forum elektronische Rechnung Deutschland (FeRD), which was founded on March 31, 2010 under the 
+umbrella of Arbeitsgemeinschaft fÃŒr wirtschaftliche Verwaltung e. V., is, among other things, to create and specify an 
+open data format for structured electronic data exchange on the basis of open and non discriminatory, standardised 
+technologies ("ZUGFeRD data format").
+ 
+The ZUGFeRD data format is used by both companies and public administration according to the FeRD 
+made freely accessible. For this purpose FeRD offers all companies and organisations of the public administration a 
+License to use the copyrighted ZUGFeRD data format in a fair, appropriate and non 
+discriminatory conditions.
+ 
+The specification of the FeRD for the implementation of the ZUGFeRD data format is, in its currently valid version 
+available at www.ferd-net.de.
+ 
+In detail, the grant of use includes 
+=====================================
+ 
+FeRD grants a license for the use of the copyrighted ZUGFeRD data format in the respective 
+valid and accepted version (www.ferd-net.de). 
+The license includes an irrevocable right of use including the right of further development, 
+Further processing and connection with other products.
+The license applies in particular to the development, design, production, sale, use or 
+other use of the ZUGFeRD data format for hardware and/or software products and other 
+applications and services. 
+This license does not include the essential patents of the members of FeRD. The essential patents are patents 
+and patent applications worldwide which contain one or more claims that are 
+necessary claims. Necessary claims are only those claims of the essential patents which are 
+the implementation of the ZUGFeRD data format would necessarily be violated. 
+The Licensee is entitled to provide its respective group companies with an unlimited, worldwide, non-transferable, 
+irrevocable right of use including the right of further development, further processing and connection with 
+other products. 
+ 
+The license is provided free of charge. 
+ 
+Except in the case of intentional fault or gross negligence, FeRD is not liable for loss of use, loss of 
+Profit, loss of data, loss of communication, loss of revenue, loss of contracts, loss of business or for costs 
+damages, losses or liabilities in connection with an interruption of business, nor for concrete, 
+incidental, indirect, punitive or consequential damages, even if the possibility of 
+costs, losses or damages could normally have been foreseen.-->
+<rsm:CrossIndustryInvoice xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:10" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
+    <rsm:ExchangedDocumentContext>
+        <ram:GuidelineSpecifiedDocumentContextParameter>
+            <ram:ID>urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:basic</ram:ID>
+        </ram:GuidelineSpecifiedDocumentContextParameter>
+    </rsm:ExchangedDocumentContext>
+    <rsm:ExchangedDocument>
+        <ram:ID>471102</ram:ID>
+        <ram:TypeCode>380</ram:TypeCode>
+        <ram:IssueDateTime>
+            <udt:DateTimeString format="102">20200305</udt:DateTimeString>
+        </ram:IssueDateTime>
+        <ram:IncludedNote>
+            <ram:Content>Rechnung gemÃ€Ã Bestellung vom 01.03.2020.</ram:Content>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>Lieferant GmbH
+                LieferantenstraÃe 20
+                80333 MÃŒnchen
+                Deutschland
+                GeschÃ€ftsfÃŒhrer: Hans Muster
+                Handelsregisternummer: H A 123
+            </ram:Content>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>Unsere GLN: 4000001123452
+                Ihre GLN: 4000001987658
+                Ihre Kundennummer: GE2020211
+                Zahlbar innerhalb 30 Tagen netto bis 04.04.2020, 3% Skonto innerhalb 10 Tagen bis 15.03.2020.
+            </ram:Content>
+        </ram:IncludedNote>
+    </rsm:ExchangedDocument>
+    <rsm:SupplyChainTradeTransaction>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>1</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0160">4012345001235</ram:GlobalID>
+                <ram:Name>GTIN: 4012345001235, Unsere Art.-Nr.: TB100A4, TrennblÃ€tter A4</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>9.90</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="H87">20.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>198.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:ApplicableHeaderTradeAgreement>
+            <ram:SellerTradeParty>
+                <ram:Name>Lieferant GmbH</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>80333</ram:PostcodeCode>
+                    <ram:LineOne>LieferantenstraÃe 20</ram:LineOne>
+                    <ram:CityName>MÃŒnchen</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="FC">201/113/40209</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="VA">DE123456789</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+            </ram:SellerTradeParty>
+            <ram:BuyerTradeParty>
+                <ram:Name>Kunden AG Mitte</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>69876</ram:PostcodeCode>
+                    <ram:LineOne>Hans Muster</ram:LineOne>
+                    <ram:LineTwo>KundenstraÃe 15</ram:LineTwo>
+                    <ram:CityName>Frankfurt</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+            </ram:BuyerTradeParty>
+        </ram:ApplicableHeaderTradeAgreement>
+        <ram:ApplicableHeaderTradeDelivery>
+            <ram:ActualDeliverySupplyChainEvent>
+                <ram:OccurrenceDateTime>
+                    <udt:DateTimeString format="102">20200305</udt:DateTimeString>
+                </ram:OccurrenceDateTime>
+            </ram:ActualDeliverySupplyChainEvent>
+        </ram:ApplicableHeaderTradeDelivery>
+        <ram:ApplicableHeaderTradeSettlement>
+            <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>37.62</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>198.00</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:SpecifiedTradePaymentTerms>
+                <ram:DueDateDateTime>
+                    <udt:DateTimeString format="102">20200404</udt:DateTimeString>
+                </ram:DueDateDateTime>
+            </ram:SpecifiedTradePaymentTerms>
+            <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+                <ram:LineTotalAmount>198.00</ram:LineTotalAmount>
+                <ram:ChargeTotalAmount>0.00</ram:ChargeTotalAmount>
+                <ram:AllowanceTotalAmount>0.00</ram:AllowanceTotalAmount>
+                <ram:TaxBasisTotalAmount>198.00</ram:TaxBasisTotalAmount>
+                <ram:TaxTotalAmount currencyID="EUR">37.62</ram:TaxTotalAmount>
+                <ram:GrandTotalAmount>235.62</ram:GrandTotalAmount>
+                <ram:DuePayableAmount>235.62</ram:DuePayableAmount>
+            </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+        </ram:ApplicableHeaderTradeSettlement>
+    </rsm:SupplyChainTradeTransaction>
+</rsm:CrossIndustryInvoice>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_allowancecharge.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_allowancecharge.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_allowancecharge.xml	(revision 8435)
@@ -0,0 +1,370 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- English disclaimer below.-->
+<!--Nutzungsrechte 
+ZUGFeRD Datenformat Version 2.1.1, 01.07.2020
+Beispiel Version 01.07.2020
+ 
+Zweck des Forums elektronisch Rechnung Deutschland, welches am 31. MÃ€rz 2010 unter der Arbeitsgemeinschaft fÃŒr 
+wirtschaftliche Verwaltung e. V. gegrÃŒndet wurde, ist u. a. die Schaffung und Spezifizierung eines offenen Datenformats 
+fÃŒr strukturierten elektronischen Datenaustausch auf der Grundlage offener und nicht diskriminierender, standardisierter 
+Technologien (âZUGFeRD Datenformatâ).
+ 
+Das ZUGFeRD Datenformat wird nach MaÃgabe des FeRD sowohl Unternehmen als auch der Ã¶ffentlichen Verwaltung 
+frei zugÃ€nglich gemacht. HierfÃŒr bietet FeRD allen Unternehmen und Organisationen der Ã¶ffentlichen Verwaltung eine 
+Lizenz fÃŒr die Nutzung des urheberrechtlich geschÃŒtzten ZUGFeRD-Datenformats zu fairen, sachgerechten und nicht 
+diskriminierenden Bedingungen an.
+ 
+Die Spezifikation des FeRD zur Implementierung des ZUGFeRD Datenformats ist in ihrer jeweils geltenden Fassung 
+abrufbar unter www.ferd-net.de.
+ 
+Im Einzelnen schlieÃt die NutzungsgewÃ€hrung ein: 
+=====================================
+ 
+FeRD rÃ€umt eine Lizenz fÃŒr die Nutzung des urheberrechtlich geschÃŒtzten ZUGFeRD Datenformats in der jeweils 
+geltenden und akzeptierten Fassung (www.ferd-net.de) ein. 
+Die Lizenz beinhaltet ein unwiderrufliches Nutzungsrecht einschlieÃlich des Rechts der Weiterentwicklung, 
+Weiterbearbeitung und Verbindung mit anderen Produkten.
+Die Lizenz gilt insbesondere fÃŒr die Entwicklung, die Gestaltung, die Herstellung, den Verkauf, die Nutzung oder 
+anderweitige Verwendung des ZUGFeRD Datenformats fÃŒr Hardware- und/oder Softwareprodukte sowie sonstige 
+Anwendungen und Dienste. 
+Diese Lizenz schlieÃt nicht die wesentlichen Patente der Mitglieder von FeRD ein. Als wesentliche Patente sind Patente 
+und Patentanmeldungen weltweit zu verstehen, die einen oder mehrere PatentansprÃŒche beinhalten, bei denen es sich um 
+notwendige AnsprÃŒche handelt. Notwendige AnsprÃŒche sind lediglich jene AnsprÃŒche der Wesentlichen Patente, die durch 
+die Implementierung des ZUGFeRD Datenformats notwendigerweise verletzt wÃŒrden. 
+Der Lizenznehmer ist berechtigt, seinen jeweiligen Konzerngesellschaften ein unbefristetes, weltweites, nicht ÃŒbertragbares, 
+unwiderrufliches Nutzungsrecht einschlieÃlich des Rechts der Weiterentwicklung, Weiterbearbeitung und Verbindung mit 
+anderen Produkten einzurÃ€umen. 
+ 
+Die Lizenz wird kostenfrei zur VerfÃŒgung gestellt. 
+ 
+AuÃer im Falle vorsÃ€tzlichen Verschuldens oder grober FahrlÃ€ssigkeit haftet FeRD weder fÃŒr Nutzungsausfall, entgangenen 
+Gewinn, Datenverlust, Kommunikationsverlust, Einnahmeausfall, VertragseinbuÃen, GeschÃ€ftsausfall oder fÃŒr Kosten, 
+SchÃ€den, Verluste oder Haftpflichten im Zusammenhang mit einer Unterbrechung der GeschÃ€ftstÃ€tigkeit, noch fÃŒr konkrete, 
+beilÃ€ufig entstandene, mittelbare SchÃ€den, Straf- oder FolgeschÃ€den und zwar auch dann nicht, wenn die MÃ¶glichkeit der 
+Kosten, Verluste bzw. SchÃ€den hÃ€tte normalerweise vorhergesehen werden kÃ¶nnen.-->
+<!--Right of use 
+ZUGFeRD Data format version 2.1.1, July 1, 2020
+ 
+The purpose of the Forum elektronische Rechnung Deutschland (FeRD), which was founded on March 31, 2010 under the 
+umbrella of Arbeitsgemeinschaft fÃŒr wirtschaftliche Verwaltung e. V., is, among other things, to create and specify an 
+open data format for structured electronic data exchange on the basis of open and non discriminatory, standardised 
+technologies ("ZUGFeRD data format").
+ 
+The ZUGFeRD data format is used by both companies and public administration according to the FeRD 
+made freely accessible. For this purpose FeRD offers all companies and organisations of the public administration a 
+License to use the copyrighted ZUGFeRD data format in a fair, appropriate and non 
+discriminatory conditions.
+ 
+The specification of the FeRD for the implementation of the ZUGFeRD data format is, in its currently valid version 
+available at www.ferd-net.de.
+ 
+In detail, the grant of use includes 
+=====================================
+ 
+FeRD grants a license for the use of the copyrighted ZUGFeRD data format in the respective 
+valid and accepted version (www.ferd-net.de). 
+The license includes an irrevocable right of use including the right of further development, 
+Further processing and connection with other products.
+The license applies in particular to the development, design, production, sale, use or 
+other use of the ZUGFeRD data format for hardware and/or software products and other 
+applications and services. 
+This license does not include the essential patents of the members of FeRD. The essential patents are patents 
+and patent applications worldwide which contain one or more claims that are 
+necessary claims. Necessary claims are only those claims of the essential patents which are 
+the implementation of the ZUGFeRD data format would necessarily be violated. 
+The Licensee is entitled to provide its respective group companies with an unlimited, worldwide, non-transferable, 
+irrevocable right of use including the right of further development, further processing and connection with 
+other products. 
+ 
+The license is provided free of charge. 
+ 
+Except in the case of intentional fault or gross negligence, FeRD is not liable for loss of use, loss of 
+Profit, loss of data, loss of communication, loss of revenue, loss of contracts, loss of business or for costs 
+damages, losses or liabilities in connection with an interruption of business, nor for concrete, 
+incidental, indirect, punitive or consequential damages, even if the possibility of 
+costs, losses or damages could normally have been foreseen.-->
+<rsm:CrossIndustryInvoice xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:10" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
+    <rsm:ExchangedDocumentContext>
+        <ram:GuidelineSpecifiedDocumentContextParameter>
+            <ram:ID>urn:cen.eu:en16931:2017</ram:ID>
+        </ram:GuidelineSpecifiedDocumentContextParameter>
+    </rsm:ExchangedDocumentContext>
+    <rsm:ExchangedDocument>
+        <ram:ID>471102</ram:ID>
+        <ram:TypeCode>380</ram:TypeCode>
+        <ram:IssueDateTime>
+            <udt:DateTimeString format="102">20180605</udt:DateTimeString>
+        </ram:IssueDateTime>
+        <ram:IncludedNote>
+            <ram:Content>
+                Rechnung gemÃ€Ã Bestellung Nr. 2018-471331 vom 01.03.2018.
+            </ram:Content>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>
+                Es bestehen Rabatt- und Bonusvereinbarungen.
+            </ram:Content>
+            <ram:SubjectCode>AAK</ram:SubjectCode>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>Lieferant GmbH
+                LieferantenstraÃe 20
+                80333 MÃŒnchen
+                Deutschland
+                GeschÃ€ftsfÃŒhrer: Hans Muster
+                Handelsregisternummer: H A 123
+            </ram:Content>
+            <ram:SubjectCode>REG</ram:SubjectCode>
+        </ram:IncludedNote>
+    </rsm:ExchangedDocument>
+    <rsm:SupplyChainTradeTransaction>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>1</ram:LineID>
+                <ram:IncludedNote>
+                    <ram:Content>Wir erlauben uns Ihnen folgende Positionen aus der Lieferung Nr. 2018-51112 in Rechnung zu stellen:</ram:Content>
+                </ram:IncludedNote>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0160">4012345001235</ram:GlobalID>
+                <ram:SellerAssignedID>KR3M</ram:SellerAssignedID>
+                <ram:BuyerAssignedID/>
+                <ram:Name>Kunstrasen grÃŒn 3m breit</ram:Name>
+                <ram:Description>300cm x 100 cm</ram:Description>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>4.0000</ram:ChargeAmount>
+                    <ram:AppliedTradeAllowanceCharge>
+                        <ram:ChargeIndicator>
+                            <udt:Indicator>false</udt:Indicator>
+                        </ram:ChargeIndicator>
+                        <ram:ActualAmount>0.6667</ram:ActualAmount>
+                    </ram:AppliedTradeAllowanceCharge>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>3.3333</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="MTK">3.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>10.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>2</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0160">4000050986428</ram:GlobalID>
+                <ram:SellerAssignedID>SFK5</ram:SellerAssignedID>
+                <ram:BuyerAssignedID/>
+                <ram:Name>Schweinesteak</ram:Name>
+                <ram:Description>aus Deutschland</ram:Description>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>5.5000</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>5.5000</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="KGM">5.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>27.50</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>3</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0160">4000001234561</ram:GlobalID>
+                <ram:SellerAssignedID>GTRWA5</ram:SellerAssignedID>
+                <ram:BuyerAssignedID/>
+                <ram:Name>Mineralwasser Medium 12 x 1,0l PET
+                </ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>5.4900</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>5.4900</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="H87">20.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>109.80</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>4</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0160">4000001234578</ram:GlobalID>
+                <ram:SellerAssignedID>PFA5</ram:SellerAssignedID>
+                <ram:BuyerAssignedID/>
+                <ram:Name>Pfand</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>2.7700</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>2.7700</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="C62">20.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>55.40</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:ApplicableHeaderTradeAgreement>
+            <ram:BuyerReference>08154713</ram:BuyerReference>
+            <ram:SellerTradeParty>
+                <ram:GlobalID schemeID="0088">4000001123452</ram:GlobalID>
+                <ram:Name>Lieferant GmbH</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>80333</ram:PostcodeCode>
+                    <ram:LineOne>LieferantenstraÃe 20</ram:LineOne>
+                    <ram:CityName>MÃŒnchen</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="FC">201/113/40209</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="VA">DE123456789</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+            </ram:SellerTradeParty>
+            <ram:BuyerTradeParty>
+                <ram:ID>GE2020211</ram:ID>
+                <ram:Name>Kunden AG Mitte</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>69876</ram:PostcodeCode>
+                    <ram:LineOne>KundenstraÃe 15</ram:LineOne>
+                    <ram:CityName>Frankfurt</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+            </ram:BuyerTradeParty>
+            <ram:BuyerOrderReferencedDocument>
+                <ram:IssuerAssignedID>2013-471331</ram:IssuerAssignedID>
+            </ram:BuyerOrderReferencedDocument>
+        </ram:ApplicableHeaderTradeAgreement>
+        <ram:ApplicableHeaderTradeDelivery>
+            <ram:ActualDeliverySupplyChainEvent>
+                <ram:OccurrenceDateTime>
+                    <udt:DateTimeString format="102">20180603</udt:DateTimeString>
+                </ram:OccurrenceDateTime>
+            </ram:ActualDeliverySupplyChainEvent>
+        </ram:ApplicableHeaderTradeDelivery>
+        <ram:ApplicableHeaderTradeSettlement>
+            <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>9.06</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>129.37</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>12.24</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>64.40</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:SpecifiedTradeAllowanceCharge>
+                <ram:ChargeIndicator>
+                    <udt:Indicator>false</udt:Indicator>
+                </ram:ChargeIndicator>
+                <ram:BasisAmount>10.00</ram:BasisAmount>
+                <ram:ActualAmount>1.00</ram:ActualAmount>
+                <ram:Reason>Sondernachlass</ram:Reason>
+                <ram:CategoryTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:CategoryTradeTax>
+            </ram:SpecifiedTradeAllowanceCharge>
+            <ram:SpecifiedTradeAllowanceCharge>
+                <ram:ChargeIndicator>
+                    <udt:Indicator>false</udt:Indicator>
+                </ram:ChargeIndicator>
+                <ram:BasisAmount>137.30</ram:BasisAmount>
+                <ram:ActualAmount>13.73</ram:ActualAmount>
+                <ram:Reason>Sondernachlass</ram:Reason>
+                <ram:CategoryTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+                </ram:CategoryTradeTax>
+            </ram:SpecifiedTradeAllowanceCharge>
+            <ram:SpecifiedTradeAllowanceCharge>
+                <ram:ChargeIndicator>
+                    <udt:Indicator>true</udt:Indicator>
+                </ram:ChargeIndicator>
+                <ram:BasisAmount>137.30</ram:BasisAmount>
+                <ram:ActualAmount>5.80</ram:ActualAmount>
+                <ram:Reason>Versandkosten</ram:Reason>
+                <ram:CategoryTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+                </ram:CategoryTradeTax>
+            </ram:SpecifiedTradeAllowanceCharge>
+            <ram:SpecifiedTradePaymentTerms>
+                <ram:Description>Zahlbar innerhalb 30 Tagen netto bis 04.07.2018, 3% Skonto innerhalb 10 Tagen bis 15.06.2018</ram:Description>
+            </ram:SpecifiedTradePaymentTerms>
+            <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+                <ram:LineTotalAmount>202.70</ram:LineTotalAmount>
+                <ram:ChargeTotalAmount>5.80</ram:ChargeTotalAmount>
+                <ram:AllowanceTotalAmount>14.73</ram:AllowanceTotalAmount>
+                <ram:TaxBasisTotalAmount>193.77</ram:TaxBasisTotalAmount>
+                <ram:TaxTotalAmount currencyID="EUR">21.30</ram:TaxTotalAmount>
+                <ram:GrandTotalAmount>215.07</ram:GrandTotalAmount>
+                <ram:TotalPrepaidAmount>50.00</ram:TotalPrepaidAmount>
+                <ram:DuePayableAmount>165.07</ram:DuePayableAmount>
+            </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+        </ram:ApplicableHeaderTradeSettlement>
+    </rsm:SupplyChainTradeTransaction>
+</rsm:CrossIndustryInvoice>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_bank_2.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_bank_2.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_bank_2.xml	(revision 8435)
@@ -0,0 +1,425 @@
+﻿<?xml version='1.0' encoding='UTF-8'?>
+<rsm:CrossIndustryInvoice xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <rsm:ExchangedDocumentContext>
+        <ram:BusinessProcessSpecifiedDocumentContextParameter>
+            <ram:ID>A1</ram:ID>
+        </ram:BusinessProcessSpecifiedDocumentContextParameter>
+        <ram:GuidelineSpecifiedDocumentContextParameter>
+            <ram:ID>urn:cen.eu:en16931:2017</ram:ID>
+        </ram:GuidelineSpecifiedDocumentContextParameter>
+    </rsm:ExchangedDocumentContext>
+    <rsm:ExchangedDocument>
+        <ram:ID>F20200024</ram:ID>
+        <ram:TypeCode>380</ram:TypeCode>
+        <ram:IssueDateTime>
+            <udt:DateTimeString format="102">20200115</udt:DateTimeString>
+        </ram:IssueDateTime>
+        <ram:IncludedNote>
+            <ram:Content>FOURNISSEUR F SARL au capital de 50 000 EUR</ram:Content>
+            <ram:SubjectCode>REG</ram:SubjectCode>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>RCS MAVILLE 123 456 789</ram:Content>
+            <ram:SubjectCode>ABL</ram:SubjectCode>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>Tout retard de paiement engendre une pénalité exigible à compter de la date d'échéance, calculée sur la base de trois fois le taux d'intérêt légal. Indemnité forfaitaire pour frais de recouvrement en cas de retard de paiement : 40 €.</ram:Content>
+            <ram:SubjectCode>PMT</ram:SubjectCode>
+        </ram:IncludedNote>
+    </rsm:ExchangedDocument>
+    <rsm:SupplyChainTradeTransaction>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>1</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0088">598785412598745</ram:GlobalID>
+                <ram:Name>PRESTATION SUPPORT</ram:Name>
+                <ram:Description>Description</ram:Description>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:BuyerOrderReferencedDocument>
+                    <ram:LineID>1</ram:LineID>
+                </ram:BuyerOrderReferencedDocument>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>60.0000</ram:ChargeAmount>
+                    <ram:BasisQuantity unitCode="C62">1.0000</ram:BasisQuantity>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="C62">1.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>E</ram:CategoryCode>
+                    <ram:RateApplicablePercent>0.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>false</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:ReasonCode>71</ram:ReasonCode>
+                    <ram:Reason>REMISE VOLUME</ram:Reason>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>false</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:ReasonCode>71</ram:ReasonCode>
+                    <ram:Reason>REMISE VOLUME</ram:Reason>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>false</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:ReasonCode>71</ram:ReasonCode>
+                    <ram:Reason>REMISE VOLUME</ram:Reason>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>false</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:ReasonCode>100</ram:ReasonCode>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>true</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:ReasonCode>ADL</ram:ReasonCode>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>true</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:Reason>FRAIS PALETTE</ram:Reason>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>true</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:ReasonCode>ADL</ram:ReasonCode>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>true</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:ReasonCode>ADL</ram:ReasonCode>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>60.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>2</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:Name>FOURNITURES DIVERSES</ram:Name>
+                <ram:Description>Description</ram:Description>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:BuyerOrderReferencedDocument>
+                    <ram:LineID>3</ram:LineID>
+                </ram:BuyerOrderReferencedDocument>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>30.0000</ram:ChargeAmount>
+                    <ram:BasisQuantity unitCode="C62">3.0000</ram:BasisQuantity>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="C62">3.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>20.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>false</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>2.00</ram:ActualAmount>
+                    <ram:ReasonCode>71</ram:ReasonCode>
+                    <ram:Reason>REMISE VOLUME</ram:Reason>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>false</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:ReasonCode>71</ram:ReasonCode>
+                    <ram:Reason>REMISE VOLUME</ram:Reason>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>false</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:ReasonCode>71</ram:ReasonCode>
+                    <ram:Reason>REMISE VOLUME</ram:Reason>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>false</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:ReasonCode>100</ram:ReasonCode>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>true</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:ReasonCode>ADL</ram:ReasonCode>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>true</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:ReasonCode>ADL</ram:ReasonCode>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeAllowanceCharge>
+                    <ram:ChargeIndicator>
+                        <udt:Indicator>true</udt:Indicator>
+                    </ram:ChargeIndicator>
+                    <ram:ActualAmount>1.00</ram:ActualAmount>
+                    <ram:ReasonCode>ADL</ram:ReasonCode>
+                </ram:SpecifiedTradeAllowanceCharge>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>28.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>3</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:Name>APPEL</ram:Name>
+                <ram:Description>Description</ram:Description>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:BuyerOrderReferencedDocument>
+                    <ram:LineID>2</ram:LineID>
+                </ram:BuyerOrderReferencedDocument>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>7.0000</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="C62">1.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>20.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>7.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:ApplicableHeaderTradeAgreement>
+            <ram:BuyerReference>SERVEXEC</ram:BuyerReference>
+            <ram:SellerTradeParty>
+                <ram:ID>123</ram:ID>
+                <ram:GlobalID schemeID="0088">587451236587</ram:GlobalID>
+                <ram:Name>LE FOURNISSEUR</ram:Name>
+                <ram:SpecifiedLegalOrganization>
+                    <ram:ID schemeID="0002">12345678900014</ram:ID>
+                    <ram:TradingBusinessName>SELLER TRADE NAME</ram:TradingBusinessName>
+                </ram:SpecifiedLegalOrganization>
+                <ram:DefinedTradeContact>
+                    <ram:PersonName>M. CONTACT</ram:PersonName>
+                    <ram:DepartmentName>DEP SELLER</ram:DepartmentName>
+                    <ram:TelephoneUniversalCommunication>
+                        <ram:CompleteNumber>01 02 03 54 87</ram:CompleteNumber>
+                    </ram:TelephoneUniversalCommunication>
+                    <ram:EmailURIUniversalCommunication>
+                        <ram:URIID>seller@seller.com</ram:URIID>
+                    </ram:EmailURIUniversalCommunication>
+                </ram:DefinedTradeContact>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>75018</ram:PostcodeCode>
+                    <ram:LineOne>35 rue d'ici</ram:LineOne>
+                    <ram:LineTwo>Seller line 2</ram:LineTwo>
+                    <ram:LineThree>Seller line 3</ram:LineThree>
+                    <ram:CityName>PARIS</ram:CityName>
+                    <ram:CountryID>FR</ram:CountryID>
+                </ram:PostalTradeAddress>
+                <ram:URIUniversalCommunication>
+                    <ram:URIID schemeID="EM">moi@seller.com</ram:URIID>
+                </ram:URIUniversalCommunication>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="VA">FR32123456789</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+            </ram:SellerTradeParty>
+            <ram:BuyerTradeParty>
+                <ram:GlobalID schemeID="0088">3654789851</ram:GlobalID>
+                <ram:Name>LE CLIENT</ram:Name>
+                <ram:SpecifiedLegalOrganization>
+                    <ram:ID schemeID="0002">98765432100029</ram:ID>
+                </ram:SpecifiedLegalOrganization>
+                <ram:DefinedTradeContact>
+                    <ram:PersonName>Buyer contact name</ram:PersonName>
+                    <ram:DepartmentName>Buyer dep</ram:DepartmentName>
+                    <ram:TelephoneUniversalCommunication>
+                        <ram:CompleteNumber>01 01 25 45 87</ram:CompleteNumber>
+                    </ram:TelephoneUniversalCommunication>
+                    <ram:EmailURIUniversalCommunication>
+                        <ram:URIID>buyer@buyer.com</ram:URIID>
+                    </ram:EmailURIUniversalCommunication>
+                </ram:DefinedTradeContact>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>06000</ram:PostcodeCode>
+                    <ram:LineOne>58 rue de la mer</ram:LineOne>
+                    <ram:LineTwo>Buyer line 2</ram:LineTwo>
+                    <ram:LineThree>Buyer line 3</ram:LineThree>
+                    <ram:CityName>NICE</ram:CityName>
+                    <ram:CountryID>FR</ram:CountryID>
+                </ram:PostalTradeAddress>
+                <ram:URIUniversalCommunication>
+                    <ram:URIID schemeID="EM">me@buyer.com</ram:URIID>
+                </ram:URIUniversalCommunication>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="VA">FR 05 987 654 321</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+            </ram:BuyerTradeParty>
+            <ram:SellerTaxRepresentativeTradeParty>
+                <ram:Name>SELLER TAX REP</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>75018</ram:PostcodeCode>
+                    <ram:LineOne>35 rue d'ici</ram:LineOne>
+                    <ram:LineTwo>Seller line 2</ram:LineTwo>
+                    <ram:LineThree>Seller line 3</ram:LineThree>
+                    <ram:CityName>PARIS</ram:CityName>
+                    <ram:CountryID>FR</ram:CountryID>
+                </ram:PostalTradeAddress>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="VA">FR 05 987 654 321</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+            </ram:SellerTaxRepresentativeTradeParty>
+            <ram:BuyerOrderReferencedDocument>
+                <ram:IssuerAssignedID>PO201925478</ram:IssuerAssignedID>
+            </ram:BuyerOrderReferencedDocument>
+            <ram:ContractReferencedDocument>
+                <ram:IssuerAssignedID>CT2018120802</ram:IssuerAssignedID>
+            </ram:ContractReferencedDocument>
+        </ram:ApplicableHeaderTradeAgreement>
+        <ram:ApplicableHeaderTradeDelivery>
+            <ram:ActualDeliverySupplyChainEvent>
+                <ram:OccurrenceDateTime>
+                    <udt:DateTimeString format="102">20200115</udt:DateTimeString>
+                </ram:OccurrenceDateTime>
+            </ram:ActualDeliverySupplyChainEvent>
+            <ram:DespatchAdviceReferencedDocument>
+                <ram:IssuerAssignedID>DESPADV002</ram:IssuerAssignedID>
+            </ram:DespatchAdviceReferencedDocument>
+            <ram:ReceivingAdviceReferencedDocument>
+                <ram:IssuerAssignedID>RECEIV-ADV002</ram:IssuerAssignedID>
+            </ram:ReceivingAdviceReferencedDocument>
+        </ram:ApplicableHeaderTradeDelivery>
+        <ram:ApplicableHeaderTradeSettlement>
+            <ram:CreditorReferenceID>CREDID</ram:CreditorReferenceID>
+            <ram:PaymentReference>F20180023BUYER</ram:PaymentReference>
+            <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
+            <ram:PayeeTradeParty>
+                <ram:ID>123</ram:ID>
+                <ram:Name>PAYEE NAME</ram:Name>
+                <ram:SpecifiedLegalOrganization>
+                    <ram:ID schemeID="0002">123456789</ram:ID>
+                </ram:SpecifiedLegalOrganization>
+            </ram:PayeeTradeParty>
+            <ram:SpecifiedTradeSettlementPaymentMeans>
+                <ram:TypeCode>30</ram:TypeCode>
+                <ram:PayerPartyDebtorFinancialAccount>
+                    <ram:IBANID>FRDEBIT</ram:IBANID>
+                </ram:PayerPartyDebtorFinancialAccount>
+                <ram:PayeePartyCreditorFinancialAccount>
+                    <ram:IBANID>FR76 1254 2547 2569 8542 5874 698</ram:IBANID>
+                    <ram:ProprietaryID>LOC BANK ACCOUNT</ram:ProprietaryID>
+                </ram:PayeePartyCreditorFinancialAccount>
+            </ram:SpecifiedTradeSettlementPaymentMeans>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>8.00</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>40.00</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:DueDateTypeCode>72</ram:DueDateTypeCode>
+                <ram:RateApplicablePercent>20.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>0.00</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:ExemptionReason>VAT EXEMP</ram:ExemptionReason>
+                <ram:BasisAmount>60.00</ram:BasisAmount>
+                <ram:CategoryCode>E</ram:CategoryCode>
+                <ram:ExemptionReasonCode>vatex-eu-d</ram:ExemptionReasonCode>
+                <ram:DueDateTypeCode>72</ram:DueDateTypeCode>
+                <ram:RateApplicablePercent>0.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:SpecifiedTradeAllowanceCharge>
+                <ram:ChargeIndicator>
+                    <udt:Indicator>false</udt:Indicator>
+                </ram:ChargeIndicator>
+                <ram:CalculationPercent>5.00</ram:CalculationPercent>
+                <ram:BasisAmount>100.00</ram:BasisAmount>
+                <ram:ActualAmount>5.00</ram:ActualAmount>
+                <ram:ReasonCode>95</ram:ReasonCode>
+                <ram:Reason>REMISE COMMERCIALE</ram:Reason>
+                <ram:CategoryTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>20.00</ram:RateApplicablePercent>
+                </ram:CategoryTradeTax>
+            </ram:SpecifiedTradeAllowanceCharge>
+            <ram:SpecifiedTradeAllowanceCharge>
+                <ram:ChargeIndicator>
+                    <udt:Indicator>true</udt:Indicator>
+                </ram:ChargeIndicator>
+                <ram:CalculationPercent>10.00</ram:CalculationPercent>
+                <ram:BasisAmount>100.00</ram:BasisAmount>
+                <ram:ActualAmount>10.00</ram:ActualAmount>
+                <ram:ReasonCode>FC</ram:ReasonCode>
+                <ram:Reason>FRAIS DEPLACEMENT</ram:Reason>
+                <ram:CategoryTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>20.00</ram:RateApplicablePercent>
+                </ram:CategoryTradeTax>
+            </ram:SpecifiedTradeAllowanceCharge>
+            <ram:SpecifiedTradePaymentTerms>
+                <ram:DueDateDateTime>
+                    <udt:DateTimeString format="102">20200215</udt:DateTimeString>
+                </ram:DueDateDateTime>
+                <ram:DirectDebitMandateID>MANDATE PT</ram:DirectDebitMandateID>
+            </ram:SpecifiedTradePaymentTerms>
+            <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+                <ram:LineTotalAmount>95.00</ram:LineTotalAmount>
+                <ram:ChargeTotalAmount>10.00</ram:ChargeTotalAmount>
+                <ram:AllowanceTotalAmount>5.00</ram:AllowanceTotalAmount>
+                <ram:TaxBasisTotalAmount>100.00</ram:TaxBasisTotalAmount>
+                <ram:TaxTotalAmount currencyID="EUR">8.00</ram:TaxTotalAmount>
+                <ram:GrandTotalAmount>108.00</ram:GrandTotalAmount>
+                <ram:TotalPrepaidAmount>0.00</ram:TotalPrepaidAmount>
+                <ram:DuePayableAmount>108.00</ram:DuePayableAmount>
+            </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+            <ram:ReceivableSpecifiedTradeAccountingAccount>
+                <ram:ID>BUYER ACCOUNT REF</ram:ID>
+            </ram:ReceivableSpecifiedTradeAccountingAccount>
+        </ram:ApplicableHeaderTradeSettlement>
+    </rsm:SupplyChainTradeTransaction>
+</rsm:CrossIndustryInvoice>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_sepa_prenotification.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_sepa_prenotification.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_sepa_prenotification.xml	(revision 8435)
@@ -0,0 +1,170 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<rsm:CrossIndustryInvoice xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:10" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
+    <rsm:ExchangedDocumentContext>
+        <ram:GuidelineSpecifiedDocumentContextParameter>
+            <ram:ID>urn:cen.eu:en16931:2017</ram:ID>
+        </ram:GuidelineSpecifiedDocumentContextParameter>
+    </rsm:ExchangedDocumentContext>
+    <rsm:ExchangedDocument>
+        <ram:ID>471102</ram:ID>
+        <ram:TypeCode>380</ram:TypeCode>
+        <ram:IssueDateTime>
+            <udt:DateTimeString format="102">20180305</udt:DateTimeString>
+        </ram:IssueDateTime>
+        <ram:IncludedNote>
+            <ram:Content>Rechnung gemÃ€Ã Bestellung Nr. 2018-471331 vom 01.03.2018.</ram:Content>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>Es bestehen Rabatt- und Bonusvereinbarungen.</ram:Content>
+            <ram:SubjectCode>AAK</ram:SubjectCode>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>Lieferant GmbH
+                LieferantenstraÃe 20
+                80333 MÃŒnchen
+                Deutschland
+                GeschÃ€ftsfÃŒhrer: Hans Muster
+                Handelsregisternummer: H A 123
+            </ram:Content>
+            <ram:SubjectCode>REG</ram:SubjectCode>
+        </ram:IncludedNote>
+    </rsm:ExchangedDocument>
+    <rsm:SupplyChainTradeTransaction>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>1</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0160">4012345001235</ram:GlobalID>
+                <ram:SellerAssignedID>TB100A4</ram:SellerAssignedID>
+                <ram:Name>TrennblÃ€tter A4</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>9.9000</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>9.9000</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="H87">20.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>198.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>2</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0160">4000050986428</ram:GlobalID>
+                <ram:SellerAssignedID>ARNR2</ram:SellerAssignedID>
+                <ram:Name>Joghurt Banane</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>5.5000</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>5.5000</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="H87">50.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>275.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:ApplicableHeaderTradeAgreement>
+            <ram:SellerTradeParty>
+                <ram:ID>549910</ram:ID>
+                <ram:GlobalID schemeID="0088">4000001123452</ram:GlobalID>
+                <ram:Name>Lieferant GmbH</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>80333</ram:PostcodeCode>
+                    <ram:LineOne>LieferantenstraÃe 20</ram:LineOne>
+                    <ram:CityName>MÃŒnchen</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="FC">201/113/40209</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="VA">DE123456789</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+            </ram:SellerTradeParty>
+            <ram:BuyerTradeParty>
+                <ram:ID>GE2020211</ram:ID>
+                <ram:Name>Kunden AG Mitte</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>69876</ram:PostcodeCode>
+                    <ram:LineOne>KundenstraÃe 15</ram:LineOne>
+                    <ram:CityName>Frankfurt</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+            </ram:BuyerTradeParty>
+        </ram:ApplicableHeaderTradeAgreement>
+        <ram:ApplicableHeaderTradeDelivery>
+            <ram:ActualDeliverySupplyChainEvent>
+                <ram:OccurrenceDateTime>
+                    <udt:DateTimeString format="102">20180305</udt:DateTimeString>
+                </ram:OccurrenceDateTime>
+            </ram:ActualDeliverySupplyChainEvent>
+        </ram:ApplicableHeaderTradeDelivery>
+        <ram:ApplicableHeaderTradeSettlement>
+            <ram:CreditorReferenceID>DE98ZZZ09999999999</ram:CreditorReferenceID>
+            <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
+            <ram:SpecifiedTradeSettlementPaymentMeans>
+                <ram:TypeCode>59</ram:TypeCode>
+                <ram:PayerPartyDebtorFinancialAccount>
+                    <ram:IBANID>DE21860000000086001055</ram:IBANID>
+                </ram:PayerPartyDebtorFinancialAccount>
+            </ram:SpecifiedTradeSettlementPaymentMeans>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>19.25</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>275.00</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>37.62</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>198.00</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:SpecifiedTradePaymentTerms>
+                <ram:Description>Der Betrag in HÃ¶he von EUR 529,87 wird am 20.03.2018 von Ihrem Konto per SEPA-Lastschrift eingezogen.</ram:Description>
+                <ram:DirectDebitMandateID>REF A-123</ram:DirectDebitMandateID>
+            </ram:SpecifiedTradePaymentTerms>
+            <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+                <ram:LineTotalAmount>473.00</ram:LineTotalAmount>
+                <ram:ChargeTotalAmount>0.00</ram:ChargeTotalAmount>
+                <ram:AllowanceTotalAmount>0.00</ram:AllowanceTotalAmount>
+                <ram:TaxBasisTotalAmount>473.00</ram:TaxBasisTotalAmount>
+                <ram:TaxTotalAmount currencyID="EUR">56.87</ram:TaxTotalAmount>
+                <ram:GrandTotalAmount>529.87</ram:GrandTotalAmount>
+                <ram:TotalPrepaidAmount>0.00</ram:TotalPrepaidAmount>
+                <ram:DuePayableAmount>529.87</ram:DuePayableAmount>
+            </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+        </ram:ApplicableHeaderTradeSettlement>
+    </rsm:SupplyChainTradeTransaction>
+</rsm:CrossIndustryInvoice>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_simple.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_simple.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_simple.xml	(revision 8435)
@@ -0,0 +1,170 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<rsm:CrossIndustryInvoice xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
+    xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:10"
+    xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
+    <rsm:ExchangedDocumentContext>
+        <ram:GuidelineSpecifiedDocumentContextParameter>
+            <ram:ID>urn:cen.eu:en16931:2017</ram:ID>
+        </ram:GuidelineSpecifiedDocumentContextParameter>
+    </rsm:ExchangedDocumentContext>
+    <rsm:ExchangedDocument>
+        <ram:ID>471102</ram:ID>
+        <ram:TypeCode>380</ram:TypeCode>
+        <ram:IssueDateTime>
+            <udt:DateTimeString format="102">20180305</udt:DateTimeString>
+        </ram:IssueDateTime>
+        <ram:IncludedNote>
+            <ram:Content>Rechnung gemÃ€Ã Bestellung vom 01.03.2018.</ram:Content>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>Lieferant GmbH
+                LieferantenstraÃe 20
+                80333 MÃŒnchen
+                Deutschland
+                GeschÃ€ftsfÃŒhrer: Hans Muster
+                Handelsregisternummer: H A 123
+            </ram:Content>
+            <ram:SubjectCode>REG</ram:SubjectCode>
+        </ram:IncludedNote>
+    </rsm:ExchangedDocument>
+    <rsm:SupplyChainTradeTransaction>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>1</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0160">4012345001235</ram:GlobalID>
+                <ram:SellerAssignedID>TB100A4</ram:SellerAssignedID>
+                <ram:Name>TrennblÃ€tter A4</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>9.9000</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>9.9000</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="H87">20.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>198.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>2</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0160">4000050986428</ram:GlobalID>
+                <ram:SellerAssignedID>ARNR2</ram:SellerAssignedID>
+                <ram:Name>Joghurt Banane</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>5.5000</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>5.5000</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="H87">50.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>275.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:ApplicableHeaderTradeAgreement>
+            <ram:BuyerReference>08154711</ram:BuyerReference>
+            <ram:SellerTradeParty>
+                <ram:ID>549910</ram:ID>
+                <ram:GlobalID schemeID="0088">4000001123452</ram:GlobalID>
+                <ram:Name>Lieferant GmbH</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>80333</ram:PostcodeCode>
+                    <ram:LineOne>LieferantenstraÃe 20</ram:LineOne>
+                    <ram:CityName>MÃŒnchen</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="FC">201/113/40209</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="VA">DE123456789</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+            </ram:SellerTradeParty>
+            <ram:BuyerTradeParty>
+                <ram:ID>GE2020211</ram:ID>
+                <ram:Name>Kunden AG Mitte</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>69876</ram:PostcodeCode>
+                    <ram:LineOne>KundenstraÃe 15</ram:LineOne>
+                    <ram:CityName>Frankfurt</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+            </ram:BuyerTradeParty>
+        </ram:ApplicableHeaderTradeAgreement>
+        <ram:ApplicableHeaderTradeDelivery>
+            <ram:ActualDeliverySupplyChainEvent>
+                <ram:OccurrenceDateTime>
+                    <udt:DateTimeString format="102">20180305</udt:DateTimeString>
+                </ram:OccurrenceDateTime>
+            </ram:ActualDeliverySupplyChainEvent>
+        </ram:ApplicableHeaderTradeDelivery>
+        <ram:ApplicableHeaderTradeSettlement>
+            <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
+            <ram:SpecifiedTradeSettlementPaymentMeans>
+                <ram:TypeCode>58</ram:TypeCode>
+                <ram:PayeePartyCreditorFinancialAccount>
+                    <ram:IBANID>DE5467894567876500</ram:IBANID>
+                </ram:PayeePartyCreditorFinancialAccount>
+            </ram:SpecifiedTradeSettlementPaymentMeans>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>19.25</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>275.00</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>37.62</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>198.00</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:SpecifiedTradePaymentTerms>
+                <ram:Description>Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018</ram:Description>
+            </ram:SpecifiedTradePaymentTerms>
+            <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+                <ram:LineTotalAmount>473.00</ram:LineTotalAmount>
+                <ram:ChargeTotalAmount>0.00</ram:ChargeTotalAmount>
+                <ram:AllowanceTotalAmount>0.00</ram:AllowanceTotalAmount>
+                <ram:TaxBasisTotalAmount>473.00</ram:TaxBasisTotalAmount>
+                <ram:TaxTotalAmount currencyID="EUR">56.87</ram:TaxTotalAmount>
+                <ram:GrandTotalAmount>529.87</ram:GrandTotalAmount>
+                <ram:TotalPrepaidAmount>0.00</ram:TotalPrepaidAmount>
+                <ram:DuePayableAmount>529.87</ram:DuePayableAmount>
+            </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+        </ram:ApplicableHeaderTradeSettlement>
+    </rsm:SupplyChainTradeTransaction>
+</rsm:CrossIndustryInvoice>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_simple_invalid.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_simple_invalid.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/en16931_simple_invalid.xml	(revision 8435)
@@ -0,0 +1,153 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<rsm:CrossIndustryInvoice xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
+    xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
+    xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:10"
+    xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
+    <rsm:ExchangedDocumentContext>
+        <ram:GuidelineSpecifiedDocumentContextParameter>
+            <ram:ID>urn:cen.eu:en16931:2017</ram:ID>
+        </ram:GuidelineSpecifiedDocumentContextParameter>
+    </rsm:ExchangedDocumentContext>
+    <rsm:ExchangedDocument>
+        <ram:ID>471102</ram:ID>
+        <ram:TypeCode>380</ram:TypeCode>
+        <ram:IssueDateTime>
+            <udt:DateTimeString format="102">20180305</udt:DateTimeString>
+        </ram:IssueDateTime>
+        <ram:IncludedNote>
+            <ram:Content>Rechnung gemÃ€Ã Bestellung vom 01.03.2018.</ram:Content>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>Lieferant GmbH
+                LieferantenstraÃe 20
+                80333 MÃŒnchen
+                Deutschland
+                GeschÃ€ftsfÃŒhrer: Hans Muster
+                Handelsregisternummer: H A 123
+            </ram:Content>
+            <ram:SubjectCode>REG</ram:SubjectCode>
+        </ram:IncludedNote>
+    </rsm:ExchangedDocument>
+    <rsm:SupplyChainTradeTransaction>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>1</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0160">4012345001235</ram:GlobalID>
+                <ram:SellerAssignedID>TB100A4</ram:SellerAssignedID>
+                <ram:Name>TrennblÃ€tter A4</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>9.9000</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>9.9000</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="H87">20.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>198.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>2</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0160">4000050986428</ram:GlobalID>
+                <ram:SellerAssignedID>ARNR2</ram:SellerAssignedID>
+                <ram:Name>Joghurt Banane</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>5.5000</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>5.5000</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="H87">50.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>275.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:ApplicableHeaderTradeAgreement>
+            <ram:BuyerReference>08154711</ram:BuyerReference>
+            <ram:BuyerTradeParty>
+                <ram:ID>GE2020211</ram:ID>
+                <ram:Name>Kunden AG Mitte</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>69876</ram:PostcodeCode>
+                    <ram:LineOne>KundenstraÃe 15</ram:LineOne>
+                    <ram:CityName>Frankfurt</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+            </ram:BuyerTradeParty>
+        </ram:ApplicableHeaderTradeAgreement>
+        <ram:ApplicableHeaderTradeDelivery>
+            <ram:ActualDeliverySupplyChainEvent>
+                <ram:OccurrenceDateTime>
+                    <udt:DateTimeString format="102">20180305</udt:DateTimeString>
+                </ram:OccurrenceDateTime>
+            </ram:ActualDeliverySupplyChainEvent>
+        </ram:ApplicableHeaderTradeDelivery>
+        <ram:ApplicableHeaderTradeSettlement>
+            <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
+            <ram:SpecifiedTradeSettlementPaymentMeans>
+                <ram:TypeCode>58</ram:TypeCode>
+                <ram:PayeePartyCreditorFinancialAccount>
+                    <ram:IBANID>DE5467894567876500</ram:IBANID>
+                </ram:PayeePartyCreditorFinancialAccount>
+            </ram:SpecifiedTradeSettlementPaymentMeans>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>19.25</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>275.00</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>37.62</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>198.00</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:SpecifiedTradePaymentTerms>
+                <ram:Description>Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018</ram:Description>
+            </ram:SpecifiedTradePaymentTerms>
+            <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+                <ram:LineTotalAmount>473.00</ram:LineTotalAmount>
+                <ram:ChargeTotalAmount>0.00</ram:ChargeTotalAmount>
+                <ram:AllowanceTotalAmount>0.00</ram:AllowanceTotalAmount>
+                <ram:TaxBasisTotalAmount>473.00</ram:TaxBasisTotalAmount>
+                <ram:TaxTotalAmount currencyID="EUR">56.87</ram:TaxTotalAmount>
+                <ram:GrandTotalAmount>529.87</ram:GrandTotalAmount>
+                <ram:TotalPrepaidAmount>0.00</ram:TotalPrepaidAmount>
+                <ram:DuePayableAmount>529.87</ram:DuePayableAmount>
+            </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+        </ram:ApplicableHeaderTradeSettlement>
+    </rsm:SupplyChainTradeTransaction>
+</rsm:CrossIndustryInvoice>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/extended_invoice.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/extended_invoice.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/extended_invoice.xml	(revision 8435)
@@ -0,0 +1,351 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rsm:CrossIndustryInvoice xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:10" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100 file:///C:/Users/joerg/Documents/FX%20Daten/Repositories/ZUGFeRD2.0/40_Musterrechungen/ZF2.0-XML/Extended/FACTUR-X.xsd">
+    <rsm:ExchangedDocumentContext>
+        <ram:TestIndicator>
+            <udt:Indicator>true</udt:Indicator>
+        </ram:TestIndicator>
+        <ram:GuidelineSpecifiedDocumentContextParameter>
+            <ram:ID>urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended</ram:ID>
+        </ram:GuidelineSpecifiedDocumentContextParameter>
+    </rsm:ExchangedDocumentContext>
+    <rsm:ExchangedDocument>
+        <ram:ID>KR87654321012</ram:ID>
+        <ram:Name>KOSTENRECHNUNG</ram:Name>
+        <ram:TypeCode>380</ram:TypeCode>
+        <ram:IssueDateTime>
+            <udt:DateTimeString format="102">20181006</udt:DateTimeString>
+        </ram:IssueDateTime>
+        <ram:IncludedNote>
+            <ram:ContentCode>ST3</ram:ContentCode>
+            <ram:Content>Es bestehen Rabatt- oder Bonusvereinbarungen.</ram:Content>
+            <ram:SubjectCode>AAK</ram:SubjectCode>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:ContentCode>EEV</ram:ContentCode>
+            <ram:Content>Der VerkÃ€ufer bleibt EigentÃŒmer der Waren bis zur vollstÃ€ndigen ErfÃŒllung der Kaufpreisforderung.</ram:Content>
+            <ram:SubjectCode>AAJ</ram:SubjectCode>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>MUSTERLIEFERANT GMBH
+                BAHNHOFSTRASSE 99
+                99199 MUSTERHAUSEN
+                GeschÃ€ftsfÃŒhrung:
+                Max Mustermann
+                USt-IdNr: DE123456789
+                Telefon: +49 932 431 0
+                www.musterlieferant.de
+                HRB Nr. 372876
+                Amtsgericht Musterstadt
+                GLN 4304171000002
+            </ram:Content>
+            <ram:SubjectCode>REG</ram:SubjectCode>
+        </ram:IncludedNote>
+    </rsm:ExchangedDocument>
+    <rsm:SupplyChainTradeTransaction>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>1</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0088">4123456000014</ram:GlobalID>
+                <ram:SellerAssignedID>WA997</ram:SellerAssignedID>
+                <ram:Name>Wirkarbeit HT</ram:Name>
+                <ram:ApplicableProductCharacteristic>
+                    <ram:Description>ZÃ€hlpunkt</ram:Description>
+                    <ram:Value>DE0001346484600000000000000100038</ram:Value>
+                </ram:ApplicableProductCharacteristic>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>0.0520</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>0.0520</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="KWH">10000.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>52.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>2</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0088">4123456000021</ram:GlobalID>
+                <ram:SellerAssignedID>ÃST250</ram:SellerAssignedID>
+                <ram:Name>Ãkosteuer Lieferant</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>0.0205</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>0.0205</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="KWH">10000.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>20.50</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>3</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0088">4260331811362</ram:GlobalID>
+                <ram:BuyerAssignedID/>
+                <ram:Name>Kommissionierer 1250032 D. Muster</ram:Name>
+                <ram:Description>Besteller: Hr. Mayer, Personalnr. 4488</ram:Description>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>15.0000</ram:ChargeAmount>
+                    <ram:AppliedTradeAllowanceCharge>
+                        <ram:ChargeIndicator>
+                            <udt:Indicator>false</udt:Indicator>
+                        </ram:ChargeIndicator>
+                        <ram:ActualAmount>4.5000</ram:ActualAmount>
+                        <ram:Reason>Artikelrabatt 1</ram:Reason>
+                    </ram:AppliedTradeAllowanceCharge>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>10.5000</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="HUR">27.5000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>288.75</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>4</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0088">2001015001325</ram:GlobalID>
+                <ram:SellerAssignedID>FB05</ram:SellerAssignedID>
+                <ram:BuyerAssignedID/>
+                <ram:Name>FALTENBEUTEL 16x6x28 CM</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>0.0105</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>0.0105</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="H87">3500.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>36.75</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>5</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0088">4123456000038</ram:GlobalID>
+                <ram:SellerAssignedID>KOP05</ram:SellerAssignedID>
+                <ram:BuyerAssignedID/>
+                <ram:Name>Kopierpapier A4</ram:Name>
+                <ram:Description>ZÃ€hlerstand von-bis: 543210 - 544420</ram:Description>
+                <ram:ApplicableProductCharacteristic>
+                    <ram:Description>ZÃ€hler-Nr.</ram:Description>
+                    <ram:Value>MG-X79318</ram:Value>
+                </ram:ApplicableProductCharacteristic>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:GrossPriceProductTradePrice>
+                    <ram:ChargeAmount>0.0100</ram:ChargeAmount>
+                </ram:GrossPriceProductTradePrice>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>0.0100</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="H87">1210.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>12.10</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:ApplicableHeaderTradeAgreement>
+            <ram:BuyerReference>08154712</ram:BuyerReference>
+            <ram:SellerTradeParty>
+                <ram:ID>549910</ram:ID>
+                <ram:GlobalID schemeID="0088">4333741000005</ram:GlobalID>
+                <ram:Name>MUSTERLIEFERANT GMBH</ram:Name>
+                <ram:DefinedTradeContact>
+                    <ram:TelephoneUniversalCommunication>
+                        <ram:CompleteNumber>+49 932 431 500</ram:CompleteNumber>
+                    </ram:TelephoneUniversalCommunication>
+                    <ram:EmailURIUniversalCommunication>
+                        <ram:URIID>max.mustermann@musterlieferant.de</ram:URIID>
+                    </ram:EmailURIUniversalCommunication>
+                </ram:DefinedTradeContact>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>99199</ram:PostcodeCode>
+                    <ram:LineOne>BAHNHOFSTRASSE 99</ram:LineOne>
+                    <ram:CityName>MUSTERHAUSEN</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="FC">201/113/40209</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+            </ram:SellerTradeParty>
+            <ram:BuyerTradeParty>
+                <ram:ID>339420</ram:ID>
+                <ram:GlobalID schemeID="0088">4304171000002</ram:GlobalID>
+                <ram:Name>MUSTER-KUNDE GMBH</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>40235</ram:PostcodeCode>
+                    <ram:LineOne>KUNDENWEG 88</ram:LineOne>
+                    <ram:CityName>DUESSELDORF</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+            </ram:BuyerTradeParty>
+            <ram:AdditionalReferencedDocument>
+                <ram:IssuerAssignedID>A777123</ram:IssuerAssignedID>
+                <ram:TypeCode>130</ram:TypeCode>
+            </ram:AdditionalReferencedDocument>
+        </ram:ApplicableHeaderTradeAgreement>
+        <ram:ApplicableHeaderTradeDelivery>
+            <ram:ShipToTradeParty>
+                <ram:GlobalID schemeID="0088">4304171088093</ram:GlobalID>
+                <ram:Name>MUSTER-MARKT</ram:Name>
+                <ram:DefinedTradeContact>
+                    <ram:DepartmentName>7322</ram:DepartmentName>
+                </ram:DefinedTradeContact>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>31157</ram:PostcodeCode>
+                    <ram:LineOne>HAUPTSTRASSE 44</ram:LineOne>
+                    <ram:CityName>SARSTEDT</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+            </ram:ShipToTradeParty>
+            <ram:ActualDeliverySupplyChainEvent>
+                <ram:OccurrenceDateTime>
+                    <udt:DateTimeString format="102">20180930</udt:DateTimeString>
+                </ram:OccurrenceDateTime>
+            </ram:ActualDeliverySupplyChainEvent>
+            <ram:DeliveryNoteReferencedDocument>
+                <ram:IssuerAssignedID>L87654321012</ram:IssuerAssignedID>
+            </ram:DeliveryNoteReferencedDocument>
+        </ram:ApplicableHeaderTradeDelivery>
+        <ram:ApplicableHeaderTradeSettlement>
+            <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
+            <ram:SpecifiedTradeSettlementPaymentMeans>
+                <ram:TypeCode>58</ram:TypeCode>
+                <ram:PayeePartyCreditorFinancialAccount>
+                    <ram:IBANID>DE5467894567876500</ram:IBANID>
+                </ram:PayeePartyCreditorFinancialAccount>
+            </ram:SpecifiedTradeSettlementPaymentMeans>
+            <ram:InvoiceeTradeParty>
+                <ram:ID>339420</ram:ID>
+                <ram:GlobalID schemeID="0088">4304171000002</ram:GlobalID>
+                <ram:Name>MUSTER-KUNDE GMBH</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>40235</ram:PostcodeCode>
+                    <ram:LineOne>KUNDENWEG 88</ram:LineOne>
+                    <ram:CityName>DUESSELDORF</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+            </ram:InvoiceeTradeParty>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>76.67</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>403.55</ram:BasisAmount>
+                <ram:LineTotalBasisAmount>410.10</ram:LineTotalBasisAmount>
+                <ram:AllowanceChargeBasisAmount>-6.55</ram:AllowanceChargeBasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:SpecifiedTradeAllowanceCharge>
+                <ram:ChargeIndicator>
+                    <udt:Indicator>false</udt:Indicator>
+                </ram:ChargeIndicator>
+                <ram:BasisAmount>410.10</ram:BasisAmount>
+                <ram:ActualAmount>21.55</ram:ActualAmount>
+                <ram:Reason>Sonderrabatt</ram:Reason>
+                <ram:CategoryTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:CategoryTradeTax>
+            </ram:SpecifiedTradeAllowanceCharge>
+            <ram:SpecifiedLogisticsServiceCharge>
+                <ram:Description>Transportkosten: Frachbetrag</ram:Description>
+                <ram:AppliedAmount>15.00</ram:AppliedAmount>
+                <ram:AppliedTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+                </ram:AppliedTradeTax>
+            </ram:SpecifiedLogisticsServiceCharge>
+            <ram:SpecifiedTradePaymentTerms>
+                <ram:Description>Skontovereinbarung: 2% bei Zahlung innerhalb 10 Tagen nach Rechnungsdatum</ram:Description>
+                <ram:ApplicableTradePaymentDiscountTerms>
+                    <ram:BasisPeriodMeasure unitCode="DAY">10</ram:BasisPeriodMeasure>
+                    <ram:CalculationPercent>2.00</ram:CalculationPercent>
+                </ram:ApplicableTradePaymentDiscountTerms>
+            </ram:SpecifiedTradePaymentTerms>
+            <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+                <ram:LineTotalAmount>410.10</ram:LineTotalAmount>
+                <ram:ChargeTotalAmount>15.00</ram:ChargeTotalAmount>
+                <ram:AllowanceTotalAmount>21.55</ram:AllowanceTotalAmount>
+                <ram:TaxBasisTotalAmount>403.55</ram:TaxBasisTotalAmount>
+                <ram:TaxTotalAmount currencyID="EUR">76.67</ram:TaxTotalAmount>
+                <ram:GrandTotalAmount>480.22</ram:GrandTotalAmount>
+                <ram:TotalPrepaidAmount>0.00</ram:TotalPrepaidAmount>
+                <ram:DuePayableAmount>480.22</ram:DuePayableAmount>
+            </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+        </ram:ApplicableHeaderTradeSettlement>
+    </rsm:SupplyChainTradeTransaction>
+</rsm:CrossIndustryInvoice>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/extended_invoice_2.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/extended_invoice_2.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/extended_invoice_2.xml	(revision 8435)
@@ -0,0 +1,304 @@
+﻿<?xml version='1.0' encoding='UTF-8'?>
+<rsm:CrossIndustryInvoice xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <rsm:ExchangedDocumentContext>
+        <ram:BusinessProcessSpecifiedDocumentContextParameter>
+            <ram:ID>A1</ram:ID>
+        </ram:BusinessProcessSpecifiedDocumentContextParameter>
+        <ram:GuidelineSpecifiedDocumentContextParameter>
+            <ram:ID>urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended</ram:ID>
+        </ram:GuidelineSpecifiedDocumentContextParameter>
+    </rsm:ExchangedDocumentContext>
+    <rsm:ExchangedDocument>
+        <ram:ID>F20200027</ram:ID>
+        <ram:TypeCode>380</ram:TypeCode>
+        <ram:IssueDateTime>
+            <udt:DateTimeString format="102">20200115</udt:DateTimeString>
+        </ram:IssueDateTime>
+        <ram:IncludedNote>
+            <ram:Content>FOURNISSEUR F SARL au capital de 50 000 EUR</ram:Content>
+            <ram:SubjectCode>REG</ram:SubjectCode>
+        </ram:IncludedNote>
+        <ram:IncludedNote>
+            <ram:Content>RCS MAVILLE 123 456 789</ram:Content>
+            <ram:SubjectCode>ABL</ram:SubjectCode>
+        </ram:IncludedNote>
+    </rsm:ExchangedDocument>
+    <rsm:SupplyChainTradeTransaction>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>1</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:GlobalID schemeID="0088">598785412598745</ram:GlobalID>
+                <ram:Name>PRESTATION SUPPORT</ram:Name>
+                <ram:Description>Description</ram:Description>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:BuyerOrderReferencedDocument>
+                    <ram:LineID>1</ram:LineID>
+                </ram:BuyerOrderReferencedDocument>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>60.0000</ram:ChargeAmount>
+                    <ram:BasisQuantity unitCode="C62">1.0000</ram:BasisQuantity>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="C62">1.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>10.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:BillingSpecifiedPeriod>
+                    <ram:StartDateTime>
+                        <udt:DateTimeString format="102">20191201</udt:DateTimeString>
+                    </ram:StartDateTime>
+                    <ram:EndDateTime>
+                        <udt:DateTimeString format="102">20191231</udt:DateTimeString>
+                    </ram:EndDateTime>
+                </ram:BillingSpecifiedPeriod>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>60.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>2</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:Name>FOURNITURES DIVERSES</ram:Name>
+                <ram:Description>Description</ram:Description>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:BuyerOrderReferencedDocument>
+                    <ram:LineID>3</ram:LineID>
+                </ram:BuyerOrderReferencedDocument>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>10.0000</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="C62">3.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>10.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:BillingSpecifiedPeriod>
+                    <ram:StartDateTime>
+                        <udt:DateTimeString format="102">20191201</udt:DateTimeString>
+                    </ram:StartDateTime>
+                </ram:BillingSpecifiedPeriod>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>30.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>3</ram:LineID>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:Name>APPEL</ram:Name>
+                <ram:Description>Description</ram:Description>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>5.0000</ram:ChargeAmount>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="C62">1.0000</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>10.00</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:BillingSpecifiedPeriod>
+                    <ram:EndDateTime>
+                        <udt:DateTimeString format="102">20191231</udt:DateTimeString>
+                    </ram:EndDateTime>
+                </ram:BillingSpecifiedPeriod>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>5.00</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:ApplicableHeaderTradeAgreement>
+            <ram:BuyerReference>SERVEXEC</ram:BuyerReference>
+            <ram:SellerTradeParty>
+                <ram:GlobalID schemeID="0088">587451236587</ram:GlobalID>
+                <ram:Name>LE FOURNISSEUR</ram:Name>
+                <ram:SpecifiedLegalOrganization>
+                    <ram:ID schemeID="0002">12345678900014</ram:ID>
+                    <ram:TradingBusinessName>SELLER TRADE NAME</ram:TradingBusinessName>
+                </ram:SpecifiedLegalOrganization>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>75018</ram:PostcodeCode>
+                    <ram:LineOne>35 rue d'ici</ram:LineOne>
+                    <ram:LineTwo>Seller line 2</ram:LineTwo>
+                    <ram:CityName>PARIS</ram:CityName>
+                    <ram:CountryID>FR</ram:CountryID>
+                </ram:PostalTradeAddress>
+                <ram:URIUniversalCommunication>
+                    <ram:URIID schemeID="EM">moi@seller.com</ram:URIID>
+                </ram:URIUniversalCommunication>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="VA">FR32123456789</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+            </ram:SellerTradeParty>
+            <ram:BuyerTradeParty>
+                <ram:GlobalID schemeID="0088">3654789851</ram:GlobalID>
+                <ram:Name>LE CLIENT</ram:Name>
+                <ram:SpecifiedLegalOrganization>
+                    <ram:ID schemeID="0002">98765432100029</ram:ID>
+                </ram:SpecifiedLegalOrganization>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>06000</ram:PostcodeCode>
+                    <ram:LineOne>58 rue de la mer</ram:LineOne>
+                    <ram:LineTwo>Buyer line 2</ram:LineTwo>
+                    <ram:CityName>NICE</ram:CityName>
+                    <ram:CountryID>FR</ram:CountryID>
+                </ram:PostalTradeAddress>
+                <ram:URIUniversalCommunication>
+                    <ram:URIID schemeID="EM">me@buyer.com</ram:URIID>
+                </ram:URIUniversalCommunication>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="VA">FR 05 987 654 321</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+            </ram:BuyerTradeParty>
+            <ram:SellerOrderReferencedDocument>
+                <ram:IssuerAssignedID>SALES REF 2547</ram:IssuerAssignedID>
+            </ram:SellerOrderReferencedDocument>
+            <ram:BuyerOrderReferencedDocument>
+                <ram:IssuerAssignedID>PO201925478</ram:IssuerAssignedID>
+            </ram:BuyerOrderReferencedDocument>
+            <ram:ContractReferencedDocument>
+                <ram:IssuerAssignedID>CT2018120802</ram:IssuerAssignedID>
+            </ram:ContractReferencedDocument>
+            <ram:AdditionalReferencedDocument>
+                <ram:IssuerAssignedID>SUPPort doc</ram:IssuerAssignedID>
+                <ram:URIID>url:gffter</ram:URIID>
+                <ram:TypeCode>916</ram:TypeCode>
+                <ram:Name>support descript</ram:Name>
+            </ram:AdditionalReferencedDocument>
+            <ram:AdditionalReferencedDocument>
+                <ram:IssuerAssignedID>TENDER-002</ram:IssuerAssignedID>
+                <ram:TypeCode>50</ram:TypeCode>
+            </ram:AdditionalReferencedDocument>
+            <ram:AdditionalReferencedDocument>
+                <ram:IssuerAssignedID>REFCLI0215</ram:IssuerAssignedID>
+                <ram:TypeCode>130</ram:TypeCode>
+            </ram:AdditionalReferencedDocument>
+            <ram:SpecifiedProcuringProject>
+                <ram:ID>PROJET2547</ram:ID>
+                <ram:Name>Project reference</ram:Name>
+            </ram:SpecifiedProcuringProject>
+        </ram:ApplicableHeaderTradeAgreement>
+        <ram:ApplicableHeaderTradeDelivery>
+            <ram:ShipToTradeParty>
+                <ram:GlobalID schemeID="0088">3654789851</ram:GlobalID>
+                <ram:Name>DEL Name</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>06000</ram:PostcodeCode>
+                    <ram:LineOne>DEL 58 rue de la mer</ram:LineOne>
+                    <ram:LineTwo>DEL line 2</ram:LineTwo>
+                    <ram:CityName>NICE</ram:CityName>
+                    <ram:CountryID>FR</ram:CountryID>
+                </ram:PostalTradeAddress>
+            </ram:ShipToTradeParty>
+            <ram:ActualDeliverySupplyChainEvent>
+                <ram:OccurrenceDateTime>
+                    <udt:DateTimeString format="102">20200115</udt:DateTimeString>
+                </ram:OccurrenceDateTime>
+            </ram:ActualDeliverySupplyChainEvent>
+            <ram:DespatchAdviceReferencedDocument>
+                <ram:IssuerAssignedID>DESPADV002</ram:IssuerAssignedID>
+            </ram:DespatchAdviceReferencedDocument>
+            <ram:ReceivingAdviceReferencedDocument>
+                <ram:IssuerAssignedID>RECEIV-ADV002</ram:IssuerAssignedID>
+            </ram:ReceivingAdviceReferencedDocument>
+        </ram:ApplicableHeaderTradeDelivery>
+        <ram:ApplicableHeaderTradeSettlement>
+            <ram:PaymentReference>F20180023BUYER</ram:PaymentReference>
+            <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
+            <ram:SpecifiedTradeSettlementPaymentMeans>
+                <ram:TypeCode>30</ram:TypeCode>
+                <ram:PayeePartyCreditorFinancialAccount>
+                    <ram:IBANID>FR76 1254 2547 2569 8542 5874 698</ram:IBANID>
+                </ram:PayeePartyCreditorFinancialAccount>
+            </ram:SpecifiedTradeSettlementPaymentMeans>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>10.00</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>100.00</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:DueDateTypeCode>72</ram:DueDateTypeCode>
+                <ram:RateApplicablePercent>10.00</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:BillingSpecifiedPeriod>
+                <ram:StartDateTime>
+                    <udt:DateTimeString format="102">20191201</udt:DateTimeString>
+                </ram:StartDateTime>
+                <ram:EndDateTime>
+                    <udt:DateTimeString format="102">20191231</udt:DateTimeString>
+                </ram:EndDateTime>
+            </ram:BillingSpecifiedPeriod>
+            <ram:SpecifiedTradeAllowanceCharge>
+                <ram:ChargeIndicator>
+                    <udt:Indicator>false</udt:Indicator>
+                </ram:ChargeIndicator>
+                <ram:ActualAmount>5.00</ram:ActualAmount>
+                <ram:Reason>REMISE COMMERCIALE</ram:Reason>
+                <ram:CategoryTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>10.00</ram:RateApplicablePercent>
+                </ram:CategoryTradeTax>
+            </ram:SpecifiedTradeAllowanceCharge>
+            <ram:SpecifiedTradeAllowanceCharge>
+                <ram:ChargeIndicator>
+                    <udt:Indicator>true</udt:Indicator>
+                </ram:ChargeIndicator>
+                <ram:ActualAmount>10.00</ram:ActualAmount>
+                <ram:Reason>FRAIS DEPLACEMENT</ram:Reason>
+                <ram:CategoryTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>10.00</ram:RateApplicablePercent>
+                </ram:CategoryTradeTax>
+            </ram:SpecifiedTradeAllowanceCharge>
+            <ram:SpecifiedTradePaymentTerms>
+                <ram:DueDateDateTime>
+                    <udt:DateTimeString format="102">20200215</udt:DateTimeString>
+                </ram:DueDateDateTime>
+            </ram:SpecifiedTradePaymentTerms>
+            <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+                <ram:LineTotalAmount>95.00</ram:LineTotalAmount>
+                <ram:ChargeTotalAmount>10.00</ram:ChargeTotalAmount>
+                <ram:AllowanceTotalAmount>5.00</ram:AllowanceTotalAmount>
+                <ram:TaxBasisTotalAmount>100.00</ram:TaxBasisTotalAmount>
+                <ram:TaxTotalAmount currencyID="EUR">10.00</ram:TaxTotalAmount>
+                <ram:GrandTotalAmount>110.00</ram:GrandTotalAmount>
+                <ram:TotalPrepaidAmount>10.00</ram:TotalPrepaidAmount>
+                <ram:DuePayableAmount>100.00</ram:DuePayableAmount>
+            </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+            <ram:InvoiceReferencedDocument>
+                <ram:IssuerAssignedID>F20200003</ram:IssuerAssignedID>
+                <ram:FormattedIssueDateTime>
+                    <qdt:DateTimeString format="102">20191130</qdt:DateTimeString>
+                </ram:FormattedIssueDateTime>
+            </ram:InvoiceReferencedDocument>
+            <ram:ReceivableSpecifiedTradeAccountingAccount>
+                <ram:ID>BUYER ACCOUNT REF</ram:ID>
+            </ram:ReceivableSpecifiedTradeAccountingAccount>
+        </ram:ApplicableHeaderTradeSettlement>
+    </rsm:SupplyChainTradeTransaction>
+</rsm:CrossIndustryInvoice>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/xrechnung_simple.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/xrechnung_simple.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/xrechnung_simple.xml	(revision 8435)
@@ -0,0 +1,265 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<!-- English disclaimer below.-->
+<!--Nutzungsrechte 
+ZUGFeRD Datenformat Version 2.1.1, 01.07.2020
+Beispiel Version 01.07.2020
+ 
+Zweck des Forums elektronisch Rechnung Deutschland, welches am 31. MÃ€rz 2010 unter der Arbeitsgemeinschaft fÃŒr 
+wirtschaftliche Verwaltung e. V. gegrÃŒndet wurde, ist u. a. die Schaffung und Spezifizierung eines offenen Datenformats 
+fÃŒr strukturierten elektronischen Datenaustausch auf der Grundlage offener und nicht diskriminierender, standardisierter 
+Technologien (âZUGFeRD Datenformatâ).
+ 
+Das ZUGFeRD Datenformat wird nach MaÃgabe des FeRD sowohl Unternehmen als auch der Ã¶ffentlichen Verwaltung 
+frei zugÃ€nglich gemacht. HierfÃŒr bietet FeRD allen Unternehmen und Organisationen der Ã¶ffentlichen Verwaltung eine 
+Lizenz fÃŒr die Nutzung des urheberrechtlich geschÃŒtzten ZUGFeRD-Datenformats zu fairen, sachgerechten und nicht 
+diskriminierenden Bedingungen an.
+ 
+Die Spezifikation des FeRD zur Implementierung des ZUGFeRD Datenformats ist in ihrer jeweils geltenden Fassung 
+abrufbar unter www.ferd-net.de.
+ 
+Im Einzelnen schlieÃt die NutzungsgewÃ€hrung ein: 
+=====================================
+ 
+FeRD rÃ€umt eine Lizenz fÃŒr die Nutzung des urheberrechtlich geschÃŒtzten ZUGFeRD Datenformats in der jeweils 
+geltenden und akzeptierten Fassung (www.ferd-net.de) ein. 
+Die Lizenz beinhaltet ein unwiderrufliches Nutzungsrecht einschlieÃlich des Rechts der Weiterentwicklung, 
+Weiterbearbeitung und Verbindung mit anderen Produkten.
+Die Lizenz gilt insbesondere fÃŒr die Entwicklung, die Gestaltung, die Herstellung, den Verkauf, die Nutzung oder 
+anderweitige Verwendung des ZUGFeRD Datenformats fÃŒr Hardware- und/oder Softwareprodukte sowie sonstige 
+Anwendungen und Dienste. 
+Diese Lizenz schlieÃt nicht die wesentlichen Patente der Mitglieder von FeRD ein. Als wesentliche Patente sind Patente 
+und Patentanmeldungen weltweit zu verstehen, die einen oder mehrere PatentansprÃŒche beinhalten, bei denen es sich um 
+notwendige AnsprÃŒche handelt. Notwendige AnsprÃŒche sind lediglich jene AnsprÃŒche der Wesentlichen Patente, die durch 
+die Implementierung des ZUGFeRD Datenformats notwendigerweise verletzt wÃŒrden. 
+Der Lizenznehmer ist berechtigt, seinen jeweiligen Konzerngesellschaften ein unbefristetes, weltweites, nicht ÃŒbertragbares, 
+unwiderrufliches Nutzungsrecht einschlieÃlich des Rechts der Weiterentwicklung, Weiterbearbeitung und Verbindung mit 
+anderen Produkten einzurÃ€umen. 
+ 
+Die Lizenz wird kostenfrei zur VerfÃŒgung gestellt. 
+ 
+AuÃer im Falle vorsÃ€tzlichen Verschuldens oder grober FahrlÃ€ssigkeit haftet FeRD weder fÃŒr Nutzungsausfall, entgangenen 
+Gewinn, Datenverlust, Kommunikationsverlust, Einnahmeausfall, VertragseinbuÃen, GeschÃ€ftsausfall oder fÃŒr Kosten, 
+SchÃ€den, Verluste oder Haftpflichten im Zusammenhang mit einer Unterbrechung der GeschÃ€ftstÃ€tigkeit, noch fÃŒr konkrete, 
+beilÃ€ufig entstandene, mittelbare SchÃ€den, Straf- oder FolgeschÃ€den und zwar auch dann nicht, wenn die MÃ¶glichkeit der 
+Kosten, Verluste bzw. SchÃ€den hÃ€tte normalerweise vorhergesehen werden kÃ¶nnen.-->
+ 
+ <!--Right of use 
+ZUGFeRD Data format version 2.1.1, July 1, 2020
+ 
+The purpose of the Forum elektronische Rechnung Deutschland (FeRD), which was founded on March 31, 2010 under the 
+umbrella of Arbeitsgemeinschaft fÃŒr wirtschaftliche Verwaltung e. V., is, among other things, to create and specify an 
+open data format for structured electronic data exchange on the basis of open and non discriminatory, standardised 
+technologies ("ZUGFeRD data format").
+ 
+The ZUGFeRD data format is used by both companies and public administration according to the FeRD 
+made freely accessible. For this purpose FeRD offers all companies and organisations of the public administration a 
+License to use the copyrighted ZUGFeRD data format in a fair, appropriate and non 
+discriminatory conditions.
+ 
+The specification of the FeRD for the implementation of the ZUGFeRD data format is, in its currently valid version 
+available at www.ferd-net.de.
+ 
+In detail, the grant of use includes 
+=====================================
+ 
+FeRD grants a license for the use of the copyrighted ZUGFeRD data format in the respective 
+valid and accepted version (www.ferd-net.de). 
+The license includes an irrevocable right of use including the right of further development, 
+Further processing and connection with other products.
+The license applies in particular to the development, design, production, sale, use or 
+other use of the ZUGFeRD data format for hardware and/or software products and other 
+applications and services. 
+This license does not include the essential patents of the members of FeRD. The essential patents are patents 
+and patent applications worldwide which contain one or more claims that are 
+necessary claims. Necessary claims are only those claims of the essential patents which are 
+the implementation of the ZUGFeRD data format would necessarily be violated. 
+The Licensee is entitled to provide its respective group companies with an unlimited, worldwide, non-transferable, 
+irrevocable right of use including the right of further development, further processing and connection with 
+other products. 
+ 
+The license is provided free of charge. 
+ 
+Except in the case of intentional fault or gross negligence, FeRD is not liable for loss of use, loss of 
+Profit, loss of data, loss of communication, loss of revenue, loss of contracts, loss of business or for costs 
+damages, losses or liabilities in connection with an interruption of business, nor for concrete, 
+incidental, indirect, punitive or consequential damages, even if the possibility of 
+costs, losses or damages could normally have been foreseen.-->
+
+<rsm:CrossIndustryInvoice xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:10" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
+  <rsm:ExchangedDocumentContext>
+    <ram:GuidelineSpecifiedDocumentContextParameter>
+      <ram:ID>urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_1.2</ram:ID>
+    </ram:GuidelineSpecifiedDocumentContextParameter>
+  </rsm:ExchangedDocumentContext>
+  <rsm:ExchangedDocument>
+    <ram:ID>471102</ram:ID>
+    <ram:TypeCode>380</ram:TypeCode>
+    <ram:IssueDateTime>
+      <udt:DateTimeString format="102">20180305</udt:DateTimeString>
+    </ram:IssueDateTime>
+    <ram:IncludedNote>
+      <ram:Content>Rechnung gemÃ€Ã Bestellung vom 01.03.2018.</ram:Content>
+    </ram:IncludedNote>
+    <ram:IncludedNote>
+      <ram:Content>Lieferant GmbH				
+LieferantenstraÃe 20				
+80333 MÃŒnchen				
+Deutschland				
+GeschÃ€ftsfÃŒhrer: Hans Muster
+Handelsregisternummer: H A 123
+      </ram:Content>
+      <ram:SubjectCode>REG</ram:SubjectCode>
+    </ram:IncludedNote>
+  </rsm:ExchangedDocument>
+  <rsm:SupplyChainTradeTransaction>
+    <ram:IncludedSupplyChainTradeLineItem>
+      <ram:AssociatedDocumentLineDocument>
+        <ram:LineID>1</ram:LineID>
+      </ram:AssociatedDocumentLineDocument>
+      <ram:SpecifiedTradeProduct>
+        <ram:GlobalID schemeID="0160">4012345001235</ram:GlobalID>
+        <ram:SellerAssignedID>TB100A4</ram:SellerAssignedID>
+        <ram:Name>TrennblÃ€tter A4</ram:Name>
+      </ram:SpecifiedTradeProduct>
+      <ram:SpecifiedLineTradeAgreement>
+        <ram:GrossPriceProductTradePrice>
+          <ram:ChargeAmount>9.9000</ram:ChargeAmount>
+        </ram:GrossPriceProductTradePrice>
+        <ram:NetPriceProductTradePrice>
+          <ram:ChargeAmount>9.9000</ram:ChargeAmount>
+        </ram:NetPriceProductTradePrice>
+      </ram:SpecifiedLineTradeAgreement>
+      <ram:SpecifiedLineTradeDelivery>
+        <ram:BilledQuantity unitCode="H87">20.0000</ram:BilledQuantity>
+      </ram:SpecifiedLineTradeDelivery>
+      <ram:SpecifiedLineTradeSettlement>
+        <ram:ApplicableTradeTax>
+          <ram:TypeCode>VAT</ram:TypeCode>
+          <ram:CategoryCode>S</ram:CategoryCode>
+          <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+        </ram:ApplicableTradeTax>
+        <ram:SpecifiedTradeSettlementLineMonetarySummation>
+          <ram:LineTotalAmount>198.00</ram:LineTotalAmount>
+        </ram:SpecifiedTradeSettlementLineMonetarySummation>
+      </ram:SpecifiedLineTradeSettlement>
+    </ram:IncludedSupplyChainTradeLineItem>
+    <ram:IncludedSupplyChainTradeLineItem>
+      <ram:AssociatedDocumentLineDocument>
+        <ram:LineID>2</ram:LineID>
+      </ram:AssociatedDocumentLineDocument>
+      <ram:SpecifiedTradeProduct>
+        <ram:GlobalID schemeID="0160">4000050986428</ram:GlobalID>
+        <ram:SellerAssignedID>ARNR2</ram:SellerAssignedID>
+        <ram:Name>Joghurt Banane</ram:Name>
+      </ram:SpecifiedTradeProduct>
+      <ram:SpecifiedLineTradeAgreement>
+        <ram:GrossPriceProductTradePrice>
+          <ram:ChargeAmount>5.5000</ram:ChargeAmount>
+        </ram:GrossPriceProductTradePrice>
+        <ram:NetPriceProductTradePrice>
+          <ram:ChargeAmount>5.5000</ram:ChargeAmount>
+        </ram:NetPriceProductTradePrice>
+      </ram:SpecifiedLineTradeAgreement>
+      <ram:SpecifiedLineTradeDelivery>
+        <ram:BilledQuantity unitCode="H87">50.0000</ram:BilledQuantity>
+      </ram:SpecifiedLineTradeDelivery>
+      <ram:SpecifiedLineTradeSettlement>
+        <ram:ApplicableTradeTax>
+          <ram:TypeCode>VAT</ram:TypeCode>
+          <ram:CategoryCode>S</ram:CategoryCode>
+          <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+        </ram:ApplicableTradeTax>
+        <ram:SpecifiedTradeSettlementLineMonetarySummation>
+          <ram:LineTotalAmount>275.00</ram:LineTotalAmount>
+        </ram:SpecifiedTradeSettlementLineMonetarySummation>
+      </ram:SpecifiedLineTradeSettlement>
+    </ram:IncludedSupplyChainTradeLineItem>
+    <ram:ApplicableHeaderTradeAgreement>
+	  <ram:BuyerReference>04011000-12345-34</ram:BuyerReference>
+      <ram:SellerTradeParty>
+        <ram:GlobalID schemeID="0088">4000001123452</ram:GlobalID>
+        <ram:Name>Lieferant GmbH</ram:Name>
+		<ram:DefinedTradeContact>
+			<ram:PersonName>Max Mustermann</ram:PersonName>
+			<ram:DepartmentName>Muster-Einkauf</ram:DepartmentName>
+			<ram:TelephoneUniversalCommunication>
+				<ram:CompleteNumber>+49891234567</ram:CompleteNumber>
+			</ram:TelephoneUniversalCommunication>
+			<ram:EmailURIUniversalCommunication>
+				<ram:URIID>Max@Mustermann.de</ram:URIID>
+			</ram:EmailURIUniversalCommunication>
+		</ram:DefinedTradeContact>
+        <ram:PostalTradeAddress>
+          <ram:PostcodeCode>80333</ram:PostcodeCode>
+          <ram:LineOne>LieferantenstraÃe 20</ram:LineOne>
+          <ram:CityName>MÃŒnchen</ram:CityName>
+          <ram:CountryID>DE</ram:CountryID>
+        </ram:PostalTradeAddress>
+        <ram:SpecifiedTaxRegistration>
+          <ram:ID schemeID="FC">201/113/40209</ram:ID>
+        </ram:SpecifiedTaxRegistration>
+        <ram:SpecifiedTaxRegistration>
+          <ram:ID schemeID="VA">DE123456789</ram:ID>
+        </ram:SpecifiedTaxRegistration>
+      </ram:SellerTradeParty>
+      <ram:BuyerTradeParty>
+        <ram:ID>GE2020211</ram:ID>
+        <ram:Name>Kunden AG Mitte</ram:Name>
+        <ram:PostalTradeAddress>
+          <ram:PostcodeCode>69876</ram:PostcodeCode>
+          <ram:LineOne>KundenstraÃe 15</ram:LineOne>
+          <ram:CityName>Frankfurt</ram:CityName>
+          <ram:CountryID>DE</ram:CountryID>
+        </ram:PostalTradeAddress>
+      </ram:BuyerTradeParty>
+    </ram:ApplicableHeaderTradeAgreement>
+    <ram:ApplicableHeaderTradeDelivery>
+      <ram:ActualDeliverySupplyChainEvent>
+        <ram:OccurrenceDateTime>
+          <udt:DateTimeString format="102">20180305</udt:DateTimeString>
+        </ram:OccurrenceDateTime>
+      </ram:ActualDeliverySupplyChainEvent>
+    </ram:ApplicableHeaderTradeDelivery>
+    <ram:ApplicableHeaderTradeSettlement>
+      <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
+	  <ram:SpecifiedTradeSettlementPaymentMeans>
+		<ram:TypeCode>58</ram:TypeCode>
+		<ram:Information>Zahlung per SEPA Ãberweisung.</ram:Information>
+		<ram:PayeePartyCreditorFinancialAccount>
+			<ram:IBANID>DE02120300000000202051</ram:IBANID>
+			<ram:AccountName>Kunden AG</ram:AccountName>
+		</ram:PayeePartyCreditorFinancialAccount>
+		<ram:PayeeSpecifiedCreditorFinancialInstitution>
+			<ram:BICID>BYLADEM1001</ram:BICID>
+		</ram:PayeeSpecifiedCreditorFinancialInstitution>
+	  </ram:SpecifiedTradeSettlementPaymentMeans>
+      <ram:ApplicableTradeTax>
+        <ram:CalculatedAmount>19.25</ram:CalculatedAmount>
+        <ram:TypeCode>VAT</ram:TypeCode>
+        <ram:BasisAmount>275.00</ram:BasisAmount>
+        <ram:CategoryCode>S</ram:CategoryCode>
+        <ram:RateApplicablePercent>7.00</ram:RateApplicablePercent>
+      </ram:ApplicableTradeTax>
+      <ram:ApplicableTradeTax>
+        <ram:CalculatedAmount>37.62</ram:CalculatedAmount>
+        <ram:TypeCode>VAT</ram:TypeCode>
+        <ram:BasisAmount>198.00</ram:BasisAmount>
+        <ram:CategoryCode>S</ram:CategoryCode>
+        <ram:RateApplicablePercent>19.00</ram:RateApplicablePercent>
+      </ram:ApplicableTradeTax>
+      <ram:SpecifiedTradePaymentTerms>
+        <ram:Description>Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018</ram:Description>
+      </ram:SpecifiedTradePaymentTerms>
+      <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+        <ram:LineTotalAmount>473.00</ram:LineTotalAmount>
+        <ram:ChargeTotalAmount>0.00</ram:ChargeTotalAmount>
+        <ram:AllowanceTotalAmount>0.00</ram:AllowanceTotalAmount>
+        <ram:TaxBasisTotalAmount>473.00</ram:TaxBasisTotalAmount>
+		<ram:TaxTotalAmount currencyID="EUR">56.87</ram:TaxTotalAmount>
+        <ram:GrandTotalAmount>529.87</ram:GrandTotalAmount>
+        <ram:TotalPrepaidAmount>0.00</ram:TotalPrepaidAmount>
+        <ram:DuePayableAmount>529.87</ram:DuePayableAmount>
+      </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+    </ram:ApplicableHeaderTradeSettlement>
+  </rsm:SupplyChainTradeTransaction>
+</rsm:CrossIndustryInvoice>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/xrechnung_simple_2.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/xrechnung_simple_2.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/assets/xrechnung_simple_2.xml	(revision 8435)
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rsm:CrossIndustryInvoice xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
+    <rsm:ExchangedDocumentContext>
+        <ram:GuidelineSpecifiedDocumentContextParameter>
+            <ram:ID>urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_2.0</ram:ID>
+        </ram:GuidelineSpecifiedDocumentContextParameter>
+    </rsm:ExchangedDocumentContext>
+    <rsm:ExchangedDocument>
+        <ram:ID>123456789</ram:ID>
+        <ram:TypeCode>380</ram:TypeCode>
+        <ram:IssueDateTime>
+            <udt:DateTimeString format="102">20180605</udt:DateTimeString>
+        </ram:IssueDateTime>
+    </rsm:ExchangedDocument>
+    <rsm:SupplyChainTradeTransaction>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>1</ram:LineID>
+                <ram:IncludedNote>
+                    <ram:Content>Messpreis</ram:Content>
+                </ram:IncludedNote>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:Name>Messpreis</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>386.52</ram:ChargeAmount>
+                    <ram:BasisQuantity unitCode="DAY">366</ram:BasisQuantity>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="DAY">31</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:BillingSpecifiedPeriod>
+                    <ram:StartDateTime>
+                        <udt:DateTimeString format="102">20160101</udt:DateTimeString>
+                    </ram:StartDateTime>
+                    <ram:EndDateTime>
+                        <udt:DateTimeString format="102">20160131</udt:DateTimeString>
+                    </ram:EndDateTime>
+                </ram:BillingSpecifiedPeriod>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>32.74</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>2</ram:LineID>
+                <ram:IncludedNote>
+                    <ram:Content>Grundpreis</ram:Content>
+                </ram:IncludedNote>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:Name>Grundpreis</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>3.2916</ram:ChargeAmount>
+                    <ram:BasisQuantity unitCode="KWT">1</ram:BasisQuantity>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="KWT">2100</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:BillingSpecifiedPeriod>
+                    <ram:StartDateTime>
+                        <udt:DateTimeString format="102">20160101</udt:DateTimeString>
+                    </ram:StartDateTime>
+                    <ram:EndDateTime>
+                        <udt:DateTimeString format="102">20160131</udt:DateTimeString>
+                    </ram:EndDateTime>
+                </ram:BillingSpecifiedPeriod>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>6912.37</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:IncludedSupplyChainTradeLineItem>
+            <ram:AssociatedDocumentLineDocument>
+                <ram:LineID>3</ram:LineID>
+                <ram:IncludedNote>
+                    <ram:Content>Arbeitspreis</ram:Content>
+                </ram:IncludedNote>
+            </ram:AssociatedDocumentLineDocument>
+            <ram:SpecifiedTradeProduct>
+                <ram:Name>Arbeitspreis</ram:Name>
+            </ram:SpecifiedTradeProduct>
+            <ram:SpecifiedLineTradeAgreement>
+                <ram:NetPriceProductTradePrice>
+                    <ram:ChargeAmount>0.061232374</ram:ChargeAmount>
+                    <ram:BasisQuantity unitCode="KWH">1</ram:BasisQuantity>
+                </ram:NetPriceProductTradePrice>
+            </ram:SpecifiedLineTradeAgreement>
+            <ram:SpecifiedLineTradeDelivery>
+                <ram:BilledQuantity unitCode="KWH">616290</ram:BilledQuantity>
+            </ram:SpecifiedLineTradeDelivery>
+            <ram:SpecifiedLineTradeSettlement>
+                <ram:ApplicableTradeTax>
+                    <ram:TypeCode>VAT</ram:TypeCode>
+                    <ram:CategoryCode>S</ram:CategoryCode>
+                    <ram:RateApplicablePercent>19</ram:RateApplicablePercent>
+                </ram:ApplicableTradeTax>
+                <ram:BillingSpecifiedPeriod>
+                    <ram:StartDateTime>
+                        <udt:DateTimeString format="102">20160101</udt:DateTimeString>
+                    </ram:StartDateTime>
+                    <ram:EndDateTime>
+                        <udt:DateTimeString format="102">20160131</udt:DateTimeString>
+                    </ram:EndDateTime>
+                </ram:BillingSpecifiedPeriod>
+                <ram:SpecifiedTradeSettlementLineMonetarySummation>
+                    <ram:LineTotalAmount>37736.90</ram:LineTotalAmount>
+                </ram:SpecifiedTradeSettlementLineMonetarySummation>
+            </ram:SpecifiedLineTradeSettlement>
+        </ram:IncludedSupplyChainTradeLineItem>
+        <ram:ApplicableHeaderTradeAgreement>
+            <ram:BuyerReference>90000000-03083-12</ram:BuyerReference>
+            <ram:SellerTradeParty>
+                <ram:Name>[Seller name]</ram:Name>
+                <ram:SpecifiedLegalOrganization/>
+                <ram:DefinedTradeContact>
+                    <ram:PersonName>Kundencenter</ram:PersonName>
+                    <ram:TelephoneUniversalCommunication>
+                        <ram:CompleteNumber>0800-12345678</ram:CompleteNumber>
+                    </ram:TelephoneUniversalCommunication>
+                    <ram:EmailURIUniversalCommunication>
+                        <ram:URIID>kundencenter@sellder.de</ram:URIID>
+                    </ram:EmailURIUniversalCommunication>
+                </ram:DefinedTradeContact>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>12345</ram:PostcodeCode>
+                    <ram:LineOne>[Seller address line 1]</ram:LineOne>
+                    <ram:CityName>[Seller city]</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+                <ram:SpecifiedTaxRegistration>
+                    <ram:ID schemeID="VA">ATU123456789</ram:ID>
+                </ram:SpecifiedTaxRegistration>
+            </ram:SellerTradeParty>
+            <ram:BuyerTradeParty>
+                <ram:ID>BI123456</ram:ID>
+                <ram:Name>[Buyer name]</ram:Name>
+                <ram:PostalTradeAddress>
+                    <ram:PostcodeCode>12345</ram:PostcodeCode>
+                    <ram:LineOne>[Buyer address line 1]</ram:LineOne>
+                    <ram:CityName>[Buyer city]</ram:CityName>
+                    <ram:CountryID>DE</ram:CountryID>
+                </ram:PostalTradeAddress>
+            </ram:BuyerTradeParty>
+            <ram:ContractReferencedDocument>
+                <ram:IssuerAssignedID>CR123456</ram:IssuerAssignedID>
+            </ram:ContractReferencedDocument>
+            <ram:AdditionalReferencedDocument>
+                <ram:IssuerAssignedID>01_15_Anhang_01.pdf</ram:IssuerAssignedID>
+                <ram:TypeCode>916</ram:TypeCode>
+                <ram:Name>AufschlÃŒsselung der einzelnen Leistungspositionen</ram:Name>
+                <ram:AttachmentBinaryObject mimeCode="application/pdf" filename="01_15_Anhang_01.pdf">JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhkZS1ERSkgL1N0cnVjdFRyZWVSb290IDEwIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+Pg0KZW5kb2JqDQoyIDAgb2JqDQo8PC9UeXBlL1BhZ2VzL0NvdW50IDEvS2lkc1sgMyAwIFJdID4+DQplbmRvYmoNCjMgMCBvYmoNCjw8L1R5cGUvUGFnZS9QYXJlbnQgMiAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4vRXh0R1N0YXRlPDwvR1M3IDcgMCBSL0dTOCA4IDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQi9JbWFnZUMvSW1hZ2VJXSA+Pi9NZWRpYUJveFsgMCAwIDU5NS4zMiA4NDEuOTJdIC9Db250ZW50cyA0IDAgUi9Hcm91cDw8L1R5cGUvR3JvdXAvUy9UcmFuc3BhcmVuY3kvQ1MvRGV2aWNlUkdCPj4vVGFicy9TL1N0cnVjdFBhcmVudHMgMD4+DQplbmRvYmoNCjQgMCBvYmoNCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMjEzPj4NCnN0cmVhbQ0KeJytj0FrwkAQhe8L+x/ecaaQzWyycTcgQk2sWBAsDXgQDx7WINpAm/72npsED8VzB+bwmDcz70O6w3yebqtNDVkssKwrfGolRsYKwVsIirIweYbgrCkzfEWt9k/otFo2WqUvFtYacWjOWo1ugYUXEzIHPxPjA5qPwbd+92j74TTaSYW7Wmt1oJoTR6ceVw70w0lBHedTf0f2hMhJTpeOC4pcEp47dnQ7tTyjiHHUxwtbmRYM+IjmVavVEO5Nq3+AycSaUP6FmRju0R/+YbWt8AtH80VUDQplbmRzdHJlYW0NCmVuZG9iag0KNSAwIG9iag0KPDwvVHlwZS9Gb250L1N1YnR5cGUvVHJ1ZVR5cGUvTmFtZS9GMS9CYXNlRm9udC9BQkNERUUrQ2FsaWJyaS9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvRm9udERlc2NyaXB0b3IgNiAwIFIvRmlyc3RDaGFyIDMyL0xhc3RDaGFyIDI0Ni9XaWR0aHMgMTcgMCBSPj4NCmVuZG9iag0KNiAwIG9iag0KPDwvVHlwZS9Gb250RGVzY3JpcHRvci9Gb250TmFtZS9BQkNERUUrQ2FsaWJyaS9GbGFncyAzMi9JdGFsaWNBbmdsZSAwL0FzY2VudCA3NTAvRGVzY2VudCAtMjUwL0NhcEhlaWdodCA3NTAvQXZnV2lkdGggNTIxL01heFdpZHRoIDE3NDMvRm9udFdlaWdodCA0MDAvWEhlaWdodCAyNTAvU3RlbVYgNTIvRm9udEJCb3hbIC01MDMgLTI1MCAxMjQwIDc1MF0gL0ZvbnRGaWxlMiAxOCAwIFI+Pg0KZW5kb2JqDQo3IDAgb2JqDQo8PC9UeXBlL0V4dEdTdGF0ZS9CTS9Ob3JtYWwvY2EgMT4+DQplbmRvYmoNCjggMCBvYmoNCjw8L1R5cGUvRXh0R1N0YXRlL0JNL05vcm1hbC9DQSAxPj4NCmVuZG9iag0KOSAwIG9iag0KPDwvQXV0aG9yKFdFSVNTTUFOTiBNYXJjZWwpIC9DcmVhdG9yKP7/AE0AaQBjAHIAbwBzAG8AZgB0AK4AIABXAG8AcgBkACAAMgAwADEANikgL0NyZWF0aW9uRGF0ZShEOjIwMTgwNzI1MTI1OTQyKzAyJzAwJykgL01vZERhdGUoRDoyMDE4MDcyNTEyNTk0MiswMicwMCcpIC9Qcm9kdWNlcij+/wBNAGkAYwByAG8AcwBvAGYAdACuACAAVwBvAHIAZAAgADIAMAAxADYpID4+DQplbmRvYmoNCjE2IDAgb2JqDQo8PC9UeXBlL09ialN0bS9OIDYvRmlyc3QgMzkvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyODQ+Pg0Kc3RyZWFtDQp4nG1RwYqDMBC9F/oP8wdjrMIulMKybdmlVESFPZQeUp3VUE1KGqH9+03UYg4LIZk3897LZMIiCICtIGbAbBDYw673EFgIUfgGLIbI1tZrTB0tgAxzTLF43ghzo/vS7Frq8HCC4AyY1jBwNpvlYpQELwnX5j8Vc/dnZ5gUHqPQRJlSBjPV0pHfXGPOyzqRHKquR5dxNqvRxqsm9DAHegKbrPfWSypDmLhtJ6sZFJZ6UQ/MqTT4RbwiPcZO84q/ZSsk5Q13HbrEh7QO3AglJ6yN+OU2GNCP0teLUlfcqrLvbE9D5t4QmXEYR15q5eHPxu4e3greqtpL5K2oyOOO91harXmHe1H3mqa3Jn13P7mPjefpzrNeLv4ATdCbvw0KZW5kc3RyZWFtDQplbmRvYmoNCjE3IDAgb2JqDQpbIDIyNiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDI1MiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1NzkgMCAwIDYxNSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDQ3OSAwIDAgMCA0OTggMCA0NzEgMCAyMzAgMCA0NTUgMjMwIDAgNTI1IDAgMCAwIDAgMzkxIDMzNSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1MjddIA0KZW5kb2JqDQoxOCAwIG9iag0KPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxNDY2NzUvTGVuZ3RoMSAzNDE5MzI+Pg0Kc3RyZWFtDQp4nOxcB3hUxdqeOWdbtiS7ySYk2SS7YUkoSwidgEiWNHoJsJhQE1KBUAQiiJRYAI2g2Lti94pls6AG7L1cxYa9cvVarmIFCyX7v3O+nVAE9bm/3vv7/Pvtvud9v2/KmZkzM2eCMYwzxpJw0bGKookjht2b9Gwd06e9xFjqu8UFRZPm5tj3MZ57NWOG1cUFowsT9lz1HOPddYyplw8rKi6Z/MMcD1N8dqTbh40fN7Gx6v0SpvRC7IvgsImBAuOn5yUz3n8FY3suHDcxt/cVj06/hzH+Ge5aUTWvcmH2ntxzGBsHV/2u6pQlnm0L3+zH2BorY/oHahfWzVv1vjqAsQl7GLP56ioXL2QZzMu4Dz6z1zWcWusbkNbIWPMzjA0J1ddUVu99yGhE/Q1I71+PgO1O+2L4N8HvVD9vybKvp6X0ZUwZztjo1rk1i+b3vXvg3Yzt34n0Aw0Lqip3zX35TsaeRXt7T55XuWxh97jsLiiP+plnXs2SyndvTBuH/qSJ9s+vnFfTedP63iiK8cpVFy5YvCTsYmvRPlGfZ+GimoUJdR1TkNWD23/BxFgbet50UeIN22fGDd7LUkxM2P1frHhe8M7tsR/t33ewKeZLU3+4MUxhZChnYG2MP2HetH/fvk0xX2o1HWa23iKS0o1dxOxsGdOjpJ3lsnWMxffHfRWkqjof34gUk/4KfR9UmUGsvsTWKszElDi9oig6VdF9yLqFH2GdTtNaABsz0eNhfsaynqc2GK9Vsj2Mh0Waep8+VvSUOXWxh1rDX8R0uh7P6Q803Zfsjj+yvj/bDG/8tdr7R5q6B7PvDzRdDbv+iPqbjvR/tewZrOHX0vmXv14X0h1Hx9RnqYzy4bHLGgzset0Fx07T3c5qf0/sWKbuPmocxrERx8xXztJ+T31/hqmvsWl/Zv26vqziiPvtZ9P/zPv9p0x9gvU7OnZ0X482/jpb81v1Is8Vx7zfjYfix8sTacPx0/LYlN8TO5Ypzx1Zr5rJSo+VT3/XkXHlLpb5i3s2/jJ2rDz6BMpneOu38/+ePH+WKXewonb9TzZcaWXDNH0Z6yaYV7HKiN/AZ9D+pnzCGoBiWY7/AL8nK+Af/bHv4X/H1E4RLvnP3hfzmvEd/9l7Ri1qUYva8Uy5ipuPm1bBdh83Tc8u+3Na9H/f1H7s3P92G6IWtahFLWr/vuke/X3/zvFrpuw99G8b6ih23m/ec95v54la1KIWtahFLWpRi1rUoha1qP3/tMN/xhQW/TkzalGLWtSiFrWoRS1qUYta1KIWtahF7a9v/Li/5R61qEUtalGLWtSiFrWoRS1qUYta1KIWtahFLWpRi1rU/oKmRpBGf1WNW+FBqQrTsW8Q6M08UPFQNtaR9WBDWREbwypZDatjs1kDW8CWsE3sNvYD75XePb1n+kBPjGd11vNh7S+koYznsDLVWpm5bD5bdJwyPLwX9+4Wfjy8M/yj9veePmd7qKHhKj6TrWf9vlgnPrs776r84MTIX4LrcVh/umjXbHC34/VYHalexlN5Bm/gC/gpfCVfzzfyK5mB/6Cl/3D035eDr0T+Gp3Cft34oTsc5+Zlv1EDmU67Jv8iXvSLyLGbobVT9BHX8cB08VcB+QJc0V8tjfr8hxk/47fzKMb/xQ3U/0XZ4xqv/X83y5l/yto1SxYvOnnhgvnzGubOmV1fV1tTPWvmjOnTpk4pLwtMmjihdPy4sWNGjxo5YviwkuKiwoKh/vwhJw4+YdDAvAH9++X2yOneJTurk7ejO9npsMfZLOYYk9Gg16kKZ92LvSUVnmB2RVCX7R0+PEf43koEKg8LVAQ9CJUcmSfoqdCyeY7M6UfO2qNy+imnvz0nt3sGs8E53T3FXk/whSKvp5VPKS2D3lDkLfcEd2t6jKZ12Zpjg5OZiRKe4uT6Ik+QV3iKgyWn1DcXVxShvhaLudBbWGPO6c5azBZIC1Swi3dhC+8yhGtC6VI8qEVhJpu4bVDNKq6sDo4vLSsucmVmlmsxVqjVFTQUBo1aXZ7Zos3sXE9L90ea17fa2awKn7XaW105rSyoVqJQs1rc3Lwu6PAFu3qLgl2Xf5yMLtcEu3uLioM+LyobNaH9Bjyoz7J7Pc17GRrv3f3lkZHKSMSQZd/LhBRdbB8mpEvN0Da0EP3LzBRtObfVz2bBCTaVlpHvYbNcIebP9ZUHlQqR8ohMSQyIlCaZ0l68wpspHlVxReR7Sn1ysGmWJ6c7Rl/7ZuGLdE9Qza6YVVUvuLKm2VtUROM2qSzoL4LwV0b6WtzSMxf5KyvQidliGErLgrnehUGnt4AyIOARz2D2xDKtSKRY0FkYZBVVkVLB3OIi0S5PcXNFETVQ1OUtLdvG+oQ/bOnrcW3pw/qyctGOYFIhHkp2cXNZdW3QXeGqxvys9ZS5MoP+cgxfubesplw8Ja892PVD3C5Tu6NWCn07KrfMLHpuzDJ5yhSXWi6eFgKeEly8BYORYMfj0lzxRAsGe8q4i8lsuEskh1BH1ANHzSocLpJUUbRwuCuzPJPsV5rkirRJnxU0HVaXHYH2NtF9jts0yi0a1NVTXFN0WAOPqFQfaWCktmO3UxFjEbkxSpjE4xwuk9QsrFzEFFSjhcRTTPYE2XhPmbfGW+7FHPKPLxN9E2OtPd9RE72jSqeUaU87MksmHeFReh55QZaJZOkohZiDJT6XfKyaP0zz293hRyWPkMle0a7m5uoWpmaJqexq4ZrQF55bHhznK/cGZ/m8maKdOd1bTMyaOamiEGu1BNudt6TS67F7SporW8NNs5pb/P7mhcUV9YOwLpq9I6qbvRPLBru0xk8oW+laLu4dz0bxUZMKUJXCClq8/OzSFj8/e+KUsm12xjxnTyoLKVwprCgob+mEtLJtHrwAtKgioiIoHI9wRE0T4Ji0/K5tfsaatFSdFtD8qlbOtJhJxjiralUoZqcbZWs38uOsVNWqoxS/zK1DzESxJsrdJZLbhBS7SNnO8CJhWiJZCxMD7Dfr/SZ/jN+q2BQMqQiFENmOvDGcbbFyG3e1oM4JWriVN7XE+F3btJomRHI2IaeINbXH0HKR7bCKcD/qeOBQDwJTyrZYGerXrshRIAyzMLkecwjvk2JPtZh/K8rrmyvKxe7BkjBX8eVB7h3Cgop3CFpssAbN3pqCoMVbIOL5Ip5PcYOIGzHzeRLHwxabbnOFFxsxVkwZc3Faa6qo0tMaDk8qy3zBtbs8E2tpGjClLBjjw8tNnzUS+YYJVCA8LNhUVSnawQJloqwxa0RVOdalrBBZRgRjUENMpAbkKNHKiPWGQlWYa5VeTSKMraOpPFjuEzctm12urVd7kA33DgoasqlOfba4UW55c7y3t7b5YK2bs9YJikHb2MQyirjg4mblNEhGK1pe5UVSVYWH5shErGV6WZhdFKnBnq/LrtFgdkUSmeiWmmWxmYMxPVAhvkJbeog9R59lLC+nxmveukgG3NsetKBF2YcNZaQARgdJI0Rb8F2Hpoqsj4pqSlvZBO8ybJ2i0VpNRiQHbVkjKvF2o/IWRLx5srBJbIKWSB1PUNQoem7FuGNLaA3f6j018zDD3iHefmL+Mdc2LFRW3nx0IDjVl9PddHTUpoWbm022Yxeg8TLZ2lkLKllV4q0AFhNOm2+eYvGq9I5sUcb6NOYaN4/04g2iZAngoKNi+WR6qstFLjR5vLaXHTcTPyyTeE1rlTfbT5Aej3j0MJuDdUe69e1uiQAOg1k96AyBroi9FnNljivYgJkps4gn4mn22L2DvOKiFR4mUIGH1L4sMP0x68SiaarylM3CZEeFJRXNJc3iiFpVGRm2yJ2C831HVIl1wTF5UJHoTrBpvKei3FOBoykvLcvMdGE1gj21OKd6K8WrYDz1Z/wU7ahS2SymOMNJpdwVNOLFVFtZ483EGyQodiAafdFGXWTZMFdzs7c5qK3bEmRG9dlYdiME4bvQ562sEUfoWnGCrtHKlqC52uiI2lzFXqzlGoS1scTAYeubJS5VzeKAPr3Ch5FwNMc3ewY2YwuejreHLrtqcgVeVeKN5NEedaULHgZhhPDKURFljMkSGWkJiNbM87VMN2YdimjfBT7KbNJqRcsmlAXHyyzaehLiZF9Q6ZCHRNF5PmFKmdynVJE8AsPrx6xyidKeoDKpLPJ4tPIjRFGXfGBUDBHtHRJZX+1vG/kemubCmB43jpeDOnSi8ozyFMtjbuXpCL/H8pS3WUB5C/wG+M0Ivw5+DbwT/Cr4FfDL4IfBD4EfBD/AAkynvMP6ApMAtV1VAzcBOwE9m4uaOLOgPGdO5TFWBFQDS4CLAT3yPoS0m1AjZx7lrK0xyXwkHuiZUpwhxelSNEmxWopVUqyUYoUUp0mxXIpTpVgmxVIpTpGiUYolUiyW4mQpFkqxQIr5UsyTokGKuVLMkWK2FPVS1ElRK0WNFNVSVEkxS4pKKSqkmCnFDCmmSzFNiqlSTJGiXIoyKU6SYrIUASkmSTFRiglSlEoxXopxUoyVYowUo6UYJcVIKUZIMVyKYVKUSFEsRZEUhVIUSDFUCr8U+VIMkeJEKQZLcYIUg6QYKEWeFAOk6C9FPyn6StFHit5S9JKipxS5UvSQIkeK7lL4pOgmRVcpukjRWYpsKbKk6CSFV4qOUmRK4ZHCLUWGFOlSpEnhkiJVihQpkqXoIEWSFIlSOKVIkCJeCocUdinipIiVwiaFVQqLFGYpYqQwSWGUwiCFXgqdFKoUihRcChYRPCxFmxQHpTggxX4p9knxsxQ/SfGjFD9IsVeKPVJ8L8V3UnwrxTdSfC3FV1LsluJLKb6Q4l9SfC7FZ1J8KsUnUvxTio+l+EiKf0ixS4oPpfhAiveleE+Kd6V4R4q3pXhLijeleEOK16V4TYqdUrwqxStSvCzFS1K8KMUOKV6Q4nkp/i7Fc1I8K8UzUjwtxVNSPCnFE1I8LsVjUjwqxSNSPCzFQ1I8KMUDUtwvxXYptknRKsV9UtwrxT1SbJViixQhKVqkCEpxtxR3SXGnFHdIsVmK26X4mxS3SXGrFLdIcbMUN0lxoxQ3SHG9FJukuE6Ka6W4RoqrpbhKiiuluEKKy6W4TIpLpbhEiouluEiKC6W4QIqNUpwvxXlSbJBivRTnStEsxTlSnC3FOinWSrFGCnns4fLYw+Wxh8tjD5fHHi6PPVwee7g89nB57OHy2MPlsYfLYw+Xxx4ujz1cHnu4PPZweezh8tjDF0khzz9cnn+4PP9wef7h8vzD5fmHy/MPl+cfLs8/XJ5/uDz/cHn+4fL8w+X5h8vzD5fnHy7PP1yef7g8/3B5/uHy/MPl+YfL8w+X5x8uzz9cnn+4PP9wef7h8vzD5fmHy/MPl+cfLo89XB57uDz2cHna4fK0w+Vph8vTDpenHS5PO1yedrg87XB52uGFW4RoVc4KZQxx48wcykgEnUHe6aGMQaAm8lYTrQplWEEryVtBdBrRcqJTQ+lDQctC6YWgpUSnEDVS2hLyFhMtouDJofQC0EKiBUTzKcs8ogaiuaG0YtAcotlE9UR1RLWhtCJQDXnVRFVEs4gqiSqIZhLNoHLTyZtGNJVoClE5URnRSUSTiQJEk4gmEk0gKiUaTzSOaCzRGKLRRKOIRoZcI0AjiIaHXCNBw4hKQq5RoOKQazSoiKiQqIDShlI5P1E+lRtCdCLRYMp5AtEgKj6QKI9oAFF/on5UWV+iPlRLb6JeRD2pslyiHlQuh6g7kY+oG1FXoi5EnanqbKIsqrMTkZeoI1WdSeShcm6iDKJ0ojQiF1FqKHUsKIUoOZQ6DtSBKImCiUROCiYQxRM5KM1OFEfBWCIbkZXSLERmohhKMxEZiQyhlPEgfSilFKQjUimokMeJmEY8TNSmZeEHyTtAtJ9oH6X9TN5PRD8S/UC0N5Q8CbQnlDwR9D153xF9S/QNpX1N3ldEu4m+pLQviP5Fwc+JPiP6lOgTyvJP8j4m7yPy/kG0i+hDSvuA6H0Kvkf0LtE7RG9TlrfIe5PojVCHk0CvhzpMBr1GtJOCrxK9QvQy0UuU5UWiHRR8geh5or8TPUdZniV6hoJPEz1F9CTRE0SPU87HyHuU6BGihyntIaIHKfgA0f1E24m2EbVSzvvIu5foHqKtRFtCSfmgUChpKqiFKEh0N9FdRHcS3UG0mej2UBL2a/43quU2olsp7Raim4luIrqR6Aai64k2EV1HlV1LtVxDdDWlXUV0JdEVRJdTgcvIu5ToEqKLKe0iquVCogsobSPR+UTnEW0gWk85zyWvmegcorOJ1hGtDSVWgtaEEmeBziI6M5RYCzqD6PRQYgDUFErEZsxXhxL7g1YRraTiK6jcaUTLQ4nVoFOp+DKipUSnEDUSLSFaTFUvouInEy0MJVaBFlBl8ynnPKIGorlEc4hmU7l6ojpqWS0VryGqppxVRLOIKokqiGYSzaBOT6eWTSOaSp2eQlWX043KiE6i5k6mGwWolklEE4kmEJWGnH7Q+JBT3GFcyCmm99iQ80zQmJAzBzSasowiGhly4lzAR5A3nGgYBUtCzlWg4pBzHago5FwNKgw5m0AFofgS0FAiP1E+0ZBQPN7v/ETyBocc5aATiAaFHGJqDCTKCzmGgQaEHGWg/iHHFFA/SutL1Cfk6A7qTTl7hRyiYz1DDrE2c4l6UPEcukN3Ih9V1o2oK1XWhagzUTZRVsghRqkTkZfq7Eh1ZlJlHqrFTZRB5dKJ0ohcRKlEKSH7dFByyD4D1CFknwlKIkokchIlEMVTAQcVsFMwjiiWyEZkpZwWymmmYAyRichIZKCcesqpo6BKpBBxIuYPx81yC7TFVbkPxlW7D0DvB/YBPyP2E2I/Aj8Ae4E9iH8PfIe0b+F/A3wNfAXsRvxL4Auk/Qv+58BnwKfAJ7F17n/G1rs/Bj4C/gHsQuxD8AfA+8B78N8FvwO8DbwFvGmb637D1sv9Ovg1W4N7py3b/SrwCvTLNp/7JeBFYAfSX0Dseds899+hn4N+FvoZ2xz307bZ7qds9e4nbXXuJ1D2cdT3GPAo4A8/guvDwEPAg9aT3Q9YF7nvty52b7cucW8DWoH7EL8XuAdpW5G2BbEQ0AIEgbstp7rvsix332lZ4b7DstK92bLKfTvwN+A24FbgFuBmS477JvCNwA0ocz14k2Wu+zroa6GvAa6Gvgp1XYm6rkBdlyN2GXApcAlwMXARcCHKXYD6NprHus83j3OfZ65zbzDf7F5vvtW9Rs1yn6Xmuc/kee4zAk2B0zc3BVYHVgZWbV4ZsKzklpWulaNWnrZy88p3VvrjDeYVgeWB0zYvD5waWBpYtnlpYLuyltUqa/yDA6dsbgzoGp2NSxrVPY18cyMvauQ9G7nCGu2NnkbVuiSwKLB486IAWzR+UdOi4CLdCcFFHy5S2CJubg0/smWRK6ME7F+xyGYvOTmwILBw84LA/Np5gTlo4Oy8ukD95rpAbV51oGZzdaAqb1agMq8iMDNvemDG5umBaXlTAlM3TwmU55UFTkL+yXmTAoHNkwIT80oDEzaXBsbljQ2MRXxM3qjA6M2jAiPzhgdGbB4eGJZXEihG51maPc2TptpFA8amoSXMxQt6uvyuD13fuHTMFXQ94lLj41LdqUrXuBReOC6FL0hZnXJ+ihqX/GKy4k/u2r0krsOLHT7o8HUHXYK/Q9ceJSzJnuRJUhNF35LGTCrROL+IuFc/ra/uJG92SVwij0t0JyrFXyfytUzlHs4Zt4NUE/Js5YnuEvVBLn7pTs8438gm+Ua1mtiEUUHT+KlBfnYwa6K4+kunBA1nB1lgytSyFs7PK9d+JyHoFL9UovlrNmxg6QWjgukTy0Lqpk3pBeWjgk1C+/2aDgvNkKXcN2Nx42Jfmf9E5vjQ8Y1DTXzY/qJdiYvjcXHhOMUfh8bHxbpjFXEJx6r+2F4DSuJsbpsiLmGbmuS3ISL619k6flJJnMVtUQL5lnEWxW/JLyzxW3J6lvyin1tEP+nOviUzcJmxeIlP+8Ir543C9Ymo+C5eAl98GjWf+X7VKBto5mLYEhlc8uul/q8b/2834K9v9Js8Q8PKWaxaORM4AzgdaAJWA6uAlcAK4DRgOXAqsAxYCpwCNAJLgMXAycBCYAEwH5gHNABzgTnAbKAeqANqgRqgGqgCZgGVQAUwE5gBTAemAVOBKUA5UAacBEwGAsAkYCIwASgFxgPjgLHAGGA0MAoYCYwAhgPDgBKgGCgCCoECYCjgB/KBIcCJwGDgBGAQMBDIAwYA/YF+QF+gD9Ab6AX0BHKBHkAO0B3wAd2ArkAXoDOQDWQBnQAv0BHIBDyAG8gA0oE0wAWkAilAMtABSAISASeQAMQDDsAOxAGxgA2wAhbADMQAJsAIGAA9oBsaxlUFFIADjFVzxHgbcBA4AOwH9gE/Az8BPwI/AHuBPcD3wHfAt8A3wNfAV8Bu4EvgC+BfwOfAZ8CnwCfAP4GPgY+AfwC7gA+BD4D3gfeAd4F3gLeBt4A3gTeA14HXgJ3Aq8ArwMvAS8CLwA7gBeB54O/Ac8CzwDPA08BTwJPAE8DjwGPAo8AjwMPAQ8CDwAPA/cB2YBvQCtwH3AvcA2wFtgAhoAUIAncDdwF3AncAm4Hbgb8BtwG3ArcANwM3ATcCNwDXA5uA64BrgWuAq4GrgCuBK4DLgcuAS4FLgIuBi4ALgQuAjcD5wHnABmA9cC7QDJwDnA2sA9YCa1j10CaO9c+x/jnWP8f651j/HOufY/1zrH+O9c+x/jnWP8f651j/HOufY/1zrH+O9c+x/vkiAHsAxx7AsQdw7AEcewDHHsCxB3DsARx7AMcewLEHcOwBHHsAxx7AsQdw7AEcewDHHsCxB3DsARx7AMcewLEHcOwBHHsAxx7AsQdw7AEcewDHHsCxB3DsARzrn2P9c6x/jrXPsfY51j7H2udY+xxrn2Ptc6x9jrXPsfb/2/vwX9zK/9sN+IsbW7z4sIOZsOSZMxhjxmsZa7voiP+LZDybwxazJnzWsg3sIvYwe4fNYmdCXcE2sVvY31iQPcqeZW/83v/j5vdY26n6ecyq3scMLIGx8L7w7rZbgFZ97GGRi+Al6DyHImF7+KujYl+1XRS2t7Ua4plZK2tTXkH0e34wvA+vXPjh/sJX1kHHaSW+NV7bdnfbrUeNQSmbwqayaWw6q2CV6H81q2ezMTJzWQObx+Zr3nyk1eFaC28mcmF70fShXAvYQmARW8Ia2Sn4LIReHPFE2sma38iW4rOMncqWs9PYCrYycl2qRVYgZbnmLwNWsdV4MqezMzQlmSJnsrPYGjy1dexsds6veue0q2Z2LluP53weO/+4esMR3kZ8LmAXYj5czC5hl7LLMS+uYlcfFb1Mi1/JrmXXYc6ItEsQuU5TIvUB9hS7h93F7mb3amNZhVGjEZHjUquN4UKMwQr08MzDWkzjt7R9tFah76JvzZGeLkP8jMNKnBIZR5HzTOSkWug5iFpWHjUSG9EH0od6RN4lWv8PRQ8flV+LyvG4+rCRuUrzhDo6ejx9KbsGK/B6XMWoCnUDNKnrNH14/Nr2vJs0/0Z2E7sZz+JWTUmmyC3Qt7LbsLZvZ5vZHfgc0ocr4rvYndqTC7IWFmJb2FY8yXvZfaxVi/9a2rHiWyLxUHtkG9vO7scMeYg9gp3mMXxk5EHEHo5En9Bi5D/GHocvcpH3FHsaO9Rz7O/sefYiexLeDu36DLyX2CvsVfYGt0G9zD7H9SB7Sf8xi2VD8eP/dozz1WwGm/FH7m5Hmz6VJbJN4Z/CS8M/qcNZLZ+EA+QdeEpb2Xr8xD7/UE7uZmbdP5iTbQ3/oE4Ddzn4tr6+7Ybw10yPXXOx+gp2OZUZ2UA2ho1llwXX+MoeYDacUpLYIH7PPYlFRaYc40M4gSjMgzOMiXFe6I/TKbb7UlPzvff1M2xQHSNaec7WfOMGnM7zD75/cEfuwfd3xw/M3c1z39v1/i77tzscA3P77Nq5q1dPl9+ZaruvAUX7ee9r6KcaNjSojnxR3h/TkO9XjBsaUElyvi91h29Hrm+HD9X4evYq545MhwZnrGI0Og3ejj2Ufp2z+/fp03uI0q9vtrdjrKLF+vYfMETt0ztDUZ0yMkQRPldfOTBFHXfQoKzy5k/uo89IjXPaDHolLTk+Z3CWfeLUrME90o2q0aDqTcYuAwo6jmoo7vi20ZGemJQebzLFpyclpjuMB9/Rx+77Th+7v1DXsP9i1XDCtPxO6uVmk6IzGFozklO6nZA5YnJcgl1nSbA7kkzGeIe1S9G0g2sT00QdaYmJVNfBMRhOb3ifbpXeyTqybPauGPdtrFP4s61WOx/tbY2I7NbwN1stEBYpzBD+VKGy7OJq065W7ervwrNEcncLH9PJm521x2qxJndM95ptPElnZVa7Vbnb+7D3Ra/qtXqt8ekT4gP6AMvPz48fODA3d/p0R4eBDkhHH/vu3o4+vXpy3/TI29/nc/kzUKU1a0/D4XUeXk+yrKi9Gh9qwcPLSkoyaE+ss5qpxqrejtnZ/QdwekwdjF41U9do4vYstzsrIUa34OAnc1RzgjctPSuOm3hIZ0vpnOHplhqrO41/wB87MckVq1ON1hh+QtuzMbYYnT7WlaQLWWJNqmqKs2w4eBpG9g7GdOdjXsczN7tcjKw/PT+TJyTb+ZgEexwuThsu8VZckjFUCffjB2PGUsOfbUGOVIzglrgI2zT+YYtV48+2IHfq/fgRNoYlc2sottTVyrNb9JNY/u58zPZd2mDtJOrVc7qrJTa5lVu3NsSW6kXOUAOyYnLna1NaTNDMjtn9HH3798nEUBj79lC8XoeY0brzJ9/8zS1tX3Xo2rUDz7rts2tK7+m74Pa1d7esuH3RQOXK2/bfPMHdWXdGZ/dJN352xex7zhp5wDGk6VHG2R3hfQYfej6Yva71214xZOEQxdazZ4fcXHOP5GStE7+nk62KAw+8l9VqFqNmFqNmtiOj2YxcZjFq5u0YBxZ+xJ8Ch3XqX2pJ7mDLTe7Vw+DuUuoOyKmVH4/Z0Cef5+700bhgTtjblWPgibl9+oi5Nh1bwzHrSD5UiZhLclk7vFxMJUwq7nW0B/uKHQGzivcR80vIRIPP5HSndMhMMCltfVRLYrozMcNpUdqGcZPTk5LsSTB2d9V7enZKjuFL9XytJdWdnTIvzpVgTTVZjXq90WrS1e2/2Gg2qjqj2YBlf0V7/JZunaypXVwHTlJvyeiWYolJSE/E7LOH96kf67JZJ9aFnSyewj3JHTpbs22tCvfHdMj2IG7JNrcqJ/jtLDsrvVvnn6xYQzXx9fp6Wou5u7F8eEpu8s5djoED4wem2t8jIfZPO0pYO//UcKgMrbtcHwodsdg6ZxqPXGw6bbGpbxtVe3ZmZpbTpJ7U5p+gMyd0Skv3xiomPltnTe6ckeJNjreY1JXK3bxucBIWnmqwxuz+IsZqUvWxaYnqk5ZYo8qxTVpNTW1m8fcNrmdMPYAztFhvQ+gNkqAMFEtKcfpjYpJ/jq12/ayvk6uEXgTW2OSfG2Kr9a6fG5B0xKrwHntVqAdGND+zYb+zUycndzQ/emZRsEtgXcMFG2vXlndX3OufXzs0PVO9KTO9+KyHV01YXzfowFe9ai4Tf19BtC8W7evOykTrWlI7t6JhzhhPgieBxaT+mJ1tSPnJVt35JwO1kd5dL4i9zL6rt2hsQnbqjw3IZkv5qcFWbcD4GyJtjrygso5ezYlawHGURDOMFsPBT0UflHijxaiDb2yr4HVGi9jBoK/gtxoQL4pPdRipP0a7Kz4+Jc7U9rzRnprgSLEb22422lNEzxrCX6lf6XozP1soerYlIyMuWfwuDusS16rk+c39vHtT9Pj0NIv/GDmo1tnK41t6zo70UvRPeyBPYH7lin5aUrx7G7QCg0SJrQ2DanuKMqEGFIr0F6XanxTmmXj1Jjoz8JLtP8DR/sbN7J2U6HAajLRGIy9hnfqV3hiji+s1et7oyc2VfQdUnVPao7Lzl3Ic+Mwkj92ROX7S5K6rn10/YtzGZ08rXBQY4DSr6xNcdlN6VvrgOZeUz7q0rl9SIs/AEIhhMaa726qc6cb41ATL6PVPLV+9Y+O4RLc7wa09+fA+PgprMZF1ojcsU5xbzfYabamh5+jzFs3DIjpid4mcGhL5KG2XyHSaYpye5BSP09RBtlb93kDKwMJh5sCdpunXKNk4jTJmULIdkfurG3D/PDaD7u9VKrbm5CTl9XlIORFvfovixEHLrFT5bSypS01HiyOtxtG+EQwU2ybOT7135WKaaavGcnimyBv38JZ35o5f9MERedeKeWjkPENVN5gSvClpnTrY9G2rZP9Mzkytf3yBIS7Jk5zaMSFGNVhi2m7lSw0mg5pstBrFi9ekOA5+bfrFELT1488hqoqowRLrsLQtbosxxdrMkfWnvIVRSGZ9aRQS8BSY0VaDqRXbotMWHdab9jRsNToRDTXoaIFpfTNElpbskFhKylv2uDa3s9OhdostubhTJhbN87JZB043Olz0HPQ12AHy2BzRgq3dE3M649Uc9sd0tOWac3I69jULz8E69qvOSbKo6dnV6fX2yIMQbx/tSfSOx+sKA45NAfuxeBxxR2eXb6uj31WRPfl/2PsS6Diqq81XVb3vi3rfqtXqTS11q1ut3ZZasiy1NsuWd2zZli3ZyJQ2S7bBGJKYJeEnCwYcfkjOTDgnk2TOTAI2BhzIxhmRdUyWn2EGAgST/IQlSkJyfkjmx9Lc9+qVuiUvccjk/OfkyNd69arq1Vu+e9+999163X01W2W3yUeUVt7h4i1Kdv5uWSgGXqOam3+QVVp4lytgUUacQqAiCIYqLmMyOlcw7t3vKivI49EPbtfpOIVawR3/4K7Fq98r5bGRuphlv+8vd2v5Ukkufw8caUK9RCMGLXhDl1dWdY75EYiit3ZEW+7ghx3XcweKRTFD1aG2+P4SKVRg5R1lIpFoqARz6pLRWu12R3WSKzCT+32pezoQMc2/GeuPMgzLKM1eu9OHR3vc7Ckxq+YTm+MsA/8UFq/D6TMr2kr5QJDV9jzUW9rd01168VvFY1UZnab5sg0PD8Q2b94SY/4NrJRMBgm2U/sXfitrB21pRVGUx+P+Niphm2C6+iHVIBdjPGPcHzrHGE/LR5cYq9NGF1w9Kxj3y/Ft8ONGl1qsooUGMViLOhF8ufbWj3zj2LEnb17V9tFvHDv8+PHcmWD3jdu23dQT4nvgeKw3yPpP/PjkuvaP//DOW8/fs679zu9+Ztt9wqrcxH0bdnx2rKlt8hToF9J3+W2gX34IHVayalgHE9sLnPw8SHY12IBhcXZpWNvZtClhzuJNq5EmMzZ2Rm/C/EZTk6PhPcw1Ua6JnWuAMWaevwAMfIEoGEuiyfyGACX5hvcEWhZzmBi6hmJNE01yoaXiLBk7pZ9zOOx2rsh0f15lC3s9QZuG22Isq2rNHpDUDthy9547dlT5anrTnspw0LRdo/yNraond+rTzesyLqsSxJlTG7R/KG9Puef7F1n9o6Av0nGgNbtlbcakDVblYm+5XeyroVUJ1/zXXCn8HQNdC79lPwBu96DbRVzaWMvjkWwka/DhPbrIAMKuz6kbmv/sWyNP7AcFYH6Ct1ZZWStoBj0RgYvPD85h2b74/BwWf2L7iDw0kGf1QkOi+c8CedyKn39MsMrxw5KAzCbw03AoyIlCkhNx5bp4rrAttacK9oOm/Z/eWL27t8aklLMs+Afayo6hVZW9dYFEx3WD13WWZ3cez5cPrEkbyH21Uh1fPVAdzVU4Kzqv23VdZwUT7Z7pr7B4vLA4tJlKfCVqX8hnjzdF4qtT4fLqtUOtudHuuMnuMmrNTpPVbVa5fW5buNqXaE5GY5n2XVhTeEG+mkG+eNRINAWSgTg9ZjfKTKClH/MMa7AozWWY1Oy7zwIyZ2QefOOsQO6A4CQyZOygwQuiEix4CeASNRsN8xfUlqDLHShRzV+QHCH2Tcxr7ufh4AcnFrl+q8oMvpDHrMRqHaR/58Ic18L9kEj/e2TFwxvbAm2pNk6rdmR1sFbJ4lVLFi9YsiYjrJGz55j3cwYUjRrx95bhdQ1qxIsgKNqIFz96etSKx7P4mcZzrCpXYnY8i7KmLNv0nSyDskw2m2wtP8eADfhJKVNaKvO9nexe/bKuT4ZS1IccxH58anBq16C0NpxN7BpsSInLnwwYkF2w6tFrHUzW8ayA6yslFdoFVAqLa6gz6XtbSHbrVr8s4HqdKepw7t41iL39VGJQ1LkK7OXX1Ig2hgBbXUO1EL0iI6pWKcqWHbtqXIvJ63EHDE0nN3ROb6hsnvnK6HF7el3D6qGutE6lU8uUnrYt+7NDn9gU+eKn2ofbAtvXt06sdup0CoVOd11LR7hjf2vvZHe4I7u+xgNypTK5jC6fO+SzVmy+ddOso7Il3rGxrR14tAd49Hn5GIqgBvQNwqNASxOj9TRgzjTg9WSDyYQT4EUDZlTD08yfQbelFl7D3EjRJWuKLllTlFspyqXUOVaT01iDHdqGqEdmKMcb5ZzdwGbZY4Y+eS+WTuAGseBL1ucYf4BfIz3oxE+eFZzdBvwsrNnxw1iAAfJl9rwY6YzdUTBlkUix5q/jPg+2rATHfjof3LHvk1tjmb0nd/ffllOWBMBlsai/tOaW9pZtdS5bdktrcHWuI+qCpSUIuk51tG9L322n9848fXvn2jWsVqnHK0698uLajVtX7T2eaz8xstpSviYN6A4Cug/CDEigLHqboFueqm2pnajlrDyOcvA43mENVpgAsgqMbgWGvYLMhYpzzJ8fb098McEmANTHoWQiKzsnwg7H32KYybmWHMXJIMN4B4MV3/uo7B4Z+x0Z8xMZI5N5Uy9Hup1v7zFMGliD+m1vH1WeZB5MHZImQOaVxCDJYOklIZJcqazie8IRUkck9bIQ6TY43xaQwWRgjZzBq35bgLqwKsVCT6R/MCFpFIoz9W0VxVbYFq0lvFByD0ZdF8/4OyY35Ia7UjrwCTmWU2prt0zlJr58qHHV1Bf2HTy1p/JL3E1HV+9sLmVZNhrsuXFL0ua2KQ0ui95q1GldTmvzsXPHZr7+sbXt05/bZj1xf7J3pA5/v1zN/H3cXdz3UTNah3YzdoK/zVLZiWW5UwXwdfImK9PbWd1ybuFPGM4WKsVwfO0JfKtF2Q/ZnN5oYXr7PTJjFVetVGLMQeQ9eH+WHjKV1UqPR1ldKUO4bBYHXLbhJrbxJnhsW3k4p4Vj2Fil5Oq7X9JtfNNm21PPvbUqX863vVjfveNFvp8u+VqITpp7Ac8IJpWoPo+VkgPMGizqQKc4GkznE/A/ISXYJYiSenXdLwk6m23jmwKufBX3loCrr297Uajv5ne8KEATdIHYIion03fxxKG8CtntooGLRBVg6uwOh5+zFXlOdaDAsrUkFScVLCCZbGRRYTWz1mwkGjVw9Iy7y2r8WMibGfzourp9HoujtfadNZMDyewNX5oae3BvhSmY5tOpTDhQlt35sd54Z4Axmc3z8yODVZ0px8iOdD7l2Lh7w1t83Km+/UjPSLOHmwkFyram1t24scJntyT9oSSrYYOrtzc1T25Oh3Pbs8Hm+mqXq7di9Z5IeLCt79imSrUqOP/uzgN8fVds+/5AXf7irsYWVuWqjMdsrWt8Vc3YPu0B+fg8zM7VaD36OJaOMxn/evz5ZGQwoA48k/QxHxqo78o0r/fLQq14X29ldw8cHg/1Ot+Ri2wT9Ze5uhpm0Sy2Hxmy+NAXPVmJHz0rVHaH8MM5tRDqlTvfEeSUKaIOgxoKamypI1KzZKHOOmqurNPqhIeF9L6NtSUqjpXBakNd2TXanhtq4+PdnZ1RSc3FO9d2xlUWrP7MyksUXXjswT0VWotNbzSV6EqghNVlda8e6R2JN5QZ+257ZO/0U7d1msNN8TG16A6o598nqq9l7YnhVZY4qD5A9w5Yc2+Qp2B1H0Rfxug+2RLqD02EODu15HYa1iTnVnIkE8tOZ6Gd2hD70+wU8iKbGAy10ads9K4Nx96x6rOdY/70hCaQgyfx9vizLlMXMTAvzCWofqO2RQz+unChxwWxFFiS7yYuG2Kw4tcZWPpB7JlmlUUMSsJKENsIlbWiqTGB/1wqLV7JABy3K8U1jZKpaiyPN8Af+GkPAhbN3DeKIh3Mn85qaAelSAftyOUjHZc0XdQiMAC8cK0KiS1xx+VTYG8eI/pO11LLxNNMOmdh+tLnFn5CoEpTMwLHtzGWaWpG0k+zUVSKdBRRHY0/6yjkOgq5DpDOue2VlQiDjXJwC9lLtfJYl7fD3EvGRBad4HYmEjAj3iXG5TUJezAr2uLSTlr8mgMlCiXDwALmuMpa6vaEnEbF/O3L0WE2qSyuUqer1KbWG+efYsb1WjdebHJKvZr5w7xeAk9eLy1BP/gZc0SjByCVWrUOVqlPzYfNNiTxDhC1oQ2iFDv6HRMODlFwEAUHUXCQJI/oHOFxh8RjSfIeI5c+BKMLfaV8/gLorgw6R/hstJjwyxKctGSZcivuHX6jQueSlfbWSntrpb21YlZ6/Frs42mx76HFlkuL/T4t9ke0cP9JkcN+WDoocprK7nJXWZeLshnbLAaskziz6KsD7Lvhl1KnK8kjWqHoGTEe0bJssmF3WKG8lOe22lpRz30BUCFoOJNdVc3H2yWQcNTB7jMpex/ou+7m3uAiVqyxb1d72bbNF+++dJoc3dy/ev9de7COug78s1cBRRxz+AHB0dsSZ2IWJm5mInomomMiKiaiZMo5Js4yfurs+imofjqN/NQb81NQ/dh0+FMaRlOC38+UYEhLsL9Xgt9qlWBcS55iNfj9zJNG1DcJ7HThT4kYu0PnGPa0vI+GNwYprKnBxZdW0j8x6MGcFYzdOOjBwpq275qDHtyrjdNfPTTxX8ZrG6b/+zQc677maT7YD4Yi6Gk52J8/2M4z/zr+9Tt72m49ewiO3XA83nVib0N294m+7hNDDdldJ3BUlaAn97MR8g3ESlaJ7kZ0xrBfJuu+O0k8b7KGiRip4BkpRkZpmhipZBqxJFpQzoo1ihkSDBhyw8I9nFMnuiNGG99lwzKHo1lzRLWI8JCVwukEKagRCiWdYtHl0fDLSRlRLAr2y6xCrVI5fGU2V1VNY2i5jIVbGxt8+mCZTyfjGG6v3W9Wq9WqkmRv3cVHL5Wy22rbo0ZOpdGoDTjGuWFhjn0OMOliTKJeTvW09PT3fKTnkR55K4WglWLUSuWrFe/qt9JzEz1q8ZF5ORcoy5RldB48Zz14unrwFPbg+e/B8uZ5Cn/5NXioGqyidTmituE0AvW16B7RsbrkK3Wad8zrzXvMk2auzlxntq/6eatHHu+2vylKIKA3Zybvnk1zJiKOCek1oRhrKVjTXLgu+Ypg1rwjILPJzJs5g1hjfNXPBVKn3P6mJKE45kKqxWuGIu7Irjn28lz1rhPrqraurbJrZAqtUpto2VJf3p7xRHPrN2/IReMDNw+U5RvjNiUH2lyjUJfWdqXKc3FbLDeweWMuyhjWCiAlDldJWcDqNik9vMcSqg1HsrFAaaJ5y6qaoa4KncVm0hntJvw+x+6yW0NV3mhNjC8tX7UJidyUj8kn0L3oj2Kksp55GY2gnYB5K5pkXjtbFrfefAe4krlGo8s41jrSajUara0jsr6Pob6b84G5wx31Ow929LwzsH5gz8DkAJccSA5srf5B5GD31jc7+u4wzrnyd8FC97Ra1AUZSKoXmWEmUwDHfGct4urAgrcFXMiYXn3+ggkI+5/Zm/OHA3OC2NBAD3BmwDTADwBnSFsHq38gQGsdW98UoD2XcU5w5dW4yTOCmmqSDCTVBVaRVmnIny7nzMQ1Ko5oYBWznF+2q/LX7pCWFXgmUgOPQ5d2afUoH2Nh1R2Ipeydwzn/zUaLXKVXHXMl2+KxNVXukE/F4fBaaU13MZOvLiKV629odiUsdkfVzts2DRzfVP6GSq+WWYy/rs3bw94SpUKlkO0w281arVGtCPdMr2MNfJnVbVZ2r9pa5/GmO+K5bi/vv4x0NF5dthqH1kYUCmc+0jaxIZnc8rHNu5Rmt7WMn9cM7lZr1HKDE6QruPA7dkz2VdSI7iL6M47MoUqqEyqprqikuqKS2qRKqlcrsRrVOfSVc6G8Tz/nyKexGClFMTqPFWc1jbCcnyVvC6DqOQHKOnIO/ZzgyCvTRAiUVAjcpvOSsZZdwvOrcY0dU5n4eNLRMZzz3Sry7BbJpfk1DmEB2nWdjjJviUqulst2+EpNhqVYv6CEUjK1DjLLMALbAxhxv5OnwPZ8hdieMPufiO3B118G7FrR9WRFl2o1YT8s4fcnjHg+6riaRGvelJhrqsmX4DBUuE8thqHOwyxjUplXLljIIo68cdVD0ZrEnNCUq8mHS0jkiZQnkSf3eZgiWH+Rt6mL4dMiDGxXA437it+uIm+UrKr5VBEUV8aNe9Lj/uCBRVtjKyBi8QXNV4SP4iL7qez/gJL6EsXFgL9ZIbFuG0YloG/Te4FQTWITWpdvzTc18fmqPJvfZkjM1eQtWCTCfTuLRAl0UmZ2sCGFXdvZVLW4tYjoIAqdS6wG5U15Vsvla7YZMJAAo4XCqNy5RNBA32RMOI6E61wicMsQvVT1SIgGC2uFy0mk7Kcqsz+OtUiLf761CHCWUxr9sctDznwbeOQEN0D1BhFaw69rO0FF2EBFYKENmgwainoRM8wlZr1efyV2MIy0R2V+4fKSrdhIJPusKNlyVpJsRStw8KC4sjsTaO4nAn0wc9BwcHDwoIHzrMPfmdGWxiuPM2HPRsA35xjuy/c259P5RIKvr6pn6/uRZy6cl2FW2qhxoYxsEbUDngHEqhB2Yl6eHiZV+YVCXajeVA9srQ/3o7BnTgjnbTLCTZtkOwq8bBFdsGudFsHiF8l/eWIxI8Uzxxy4wswpsJFd43NA3uXgS5TzqSJmFoSDSxZPrKvopWJOXnlmFlWA1xzt7LNsTu5BlaDfP0k4qbQ14q9WQqEQyp5jtud8xvApnvfYTvJJpiqZS7LJpMZzKjZVd59mhpumMXMcuQWPAO+FKQ47hfnwKQEeTtpOCihpSv4+yek4eD7mOSXEpjR19wmkDho6p28r6DZOMdRxhTcVBSNd/KKChcVj0B0ebKzoqQ3EeoQ1m/SB6kh4VaVfpbcYmoZXtw82uO8ciDVFLJmKipYy9pc6nVZfFY7bK1rKk2sr7SFPuVdvsZlDXmuJ3+mr7Ut9VGfn7dFoWRSwygNWxxRmVIZq0HUEK7Wr5mkG/+RKJXNXzmQOjLnUXOxR+1Tmc7oibMj7hOcpJFZSyB57VLBP6TKfE3TFAJB3Bwzds3pNrw5g0MdcQbPdqEgNrWrb0eDmW3e3pAdiSqO7pMRtUnwi1hkrywaMOn8mUtaVZH+l0+NAXGsqneofXdUx3Z+IRJikXCXjOJlKPr8xmeSza0JlHTXBRA2Wj04Y8zjIRxgl0XHyVi8pw1+Z5jGbPZFzzNacA3ms9xsM6uRJHgfmnfF7+Sn1KeeMtDtqanF7r2jJMAYBg/V+AZ6RJUEsZIyHg+f4+L0CP+VUnxLgWWeRPFgK8lCI4tvFORe5JIbPjrut8yct8bZ0pCUT1GhUhtJEuo4/dSrafUN7B0ynj8vWtoeyZVZWhtyu6Opyu9aos7q9LoNOLb/3VMfUuvJYx65ac0ePI5b147h9OfM+OyJ3oVWoF+1Ab4ge9gamHcWQhRlACbSW2fhkOgEU9qzGX86hRH1PM1uRB21ituRiYdn9DROxDffnbOttrC1/0phUcrW8jtHp+NzJ2il+K7P1ZI5nePzZcJU2zx9BLYnBuSkRO1B9cy8MzjXQ7QXPv3zBLG7FArf6FeJYpxtk9wvQgG3D/QKymaAJnS5/UiCtvEZaqc2dFHA7ADXP6LmihgDlwpsSaCph+u5gQlqj/qU4fO0lYXj4U14ahieP4jN2RK/usRiCzVtqAvUWjT7C35fszXpDXRM9+f2t/oqolw+57a7S5q3V3pTtCa32m411nrhH35j1Jjz6ZE3q4yFnT3uiMWSU/Ry83IQzmc+49TqNw2RxsgrWFqkvja3J+uyRGj7W6ten3KEmh70hkcpXexRy53+uqjP7oiVVWZOvbP6gH+yvJ2oP8UYnj6V8iP0Rw8r/nUSHcyKH7cxLyAuWbivSoADjPusyTcrxjH61sNMDB23dTwiuHLkFc9j9HMbOesmSvq4obPtvcqPbhmemwuQusbmNcn1pVTJYmqwKsr+CiSnDs5N1gsvPspA8We73x8sDfrx/j/0RO6Sw4p8QwT1s1aI0czfeFwZdtKMQ8zjocA1zDu8Ow/HMSe+YeZr0mEY/QXzI/jCyKae4RFHEUwpNRLnLRDzrChFPpdVuZ4eUFq/d7jWr5T+Tm0RtoxCP8rMyjQVG57Eo1YYv/kirKgyNqZz/FynPeeV4OwIk86UvKjQKDo9YVWJ5dP4di1EcMfojjLgoTr31rMY0RkYlxanHxBFcFvc/Lu9XoR+FthHF9mbQchVoHdFxZWY8g72A7bacAXkNj0anyhz8pIMCKsYZ8eqWqHRD1PCoUFSiKKrIFPoUWRZUxMKwGFJkb8ZdtHqMytr6UGcMTqy4365Q0JXZU900kLYXQVjf1ZmqnL+/IC06+NdWnSxbPVCPpXkt6OyHYTRW0Np0j20JcxfeuwRWSq1xfdY4Ffpn+cyyPbZG12cF45Q89M+CfOYag3e17MPx/kP5/smu0mjv4XXd413hTxnDq5Plq2Ml+LhuM/f+msmBymjvWOeaiQ0V8Z6xrlhnjd+b7awo78j6dlHsmZ8SD6SD7EstdSMjNiw6t2Y2OlVqtPknbdOFSNu7s+LmZn1UMysU7l9DfE0EXNzezPwUVvFyldZoMxtB79glQXGFQg5neSRkNQTtSrBnPzM7DUq5Qq51xnzzX1mKeGcg5lDJVAqDA0bRxj7LzMEoWtAnRFltYDY9zlfwFTrXOWZzzod05SdfS/8+zaZr73U1yMNTmpPfMf/EzJrt92JOFHYPDS7dPpQLp8tPCny6Cp4M194rkGfNmpMktAW+gFluv5cyTHztTTYRDV4+klULDpR0KisERkBDAyJzZS3ba/imZECn4ORKmcYXqw1XNpc3d7XE+YYNGX911K2Vwx25wl6WCmQSiZbulnLuaKKt0qk1GnUOm96qk5ssxtKoN+hwxHI10VUJu1qn18Ads06uN+njbn/IaQ83Y66HAK9H5A+jDNpCuI5CgSjmuslq1AYmog+4tA9YJxIPKkUpPU82fc6+++z/msWY2AIT1ugDgsuas2ofEKwTysSDgnJmMUSQEL0o0UEwU827JEBgL6zGyPxjHlFo7P6gcc+mdVqtVtenoN7T3XCmvZsvd0cUMoWc5Ux2p1alkO3cxUScPq/zFjl46jJIbnF6fc7536YzRpnWgn9LjnuS/YLcj7TIgZyoTZyDOrYXWZCC7T2DbOpzzOrHjJwzj1pezeAtURfIlrozNg7feVwwcjm45wSLklncFSVZEHnxS0CmOVZbG4mCHWb2SrmLe2TP1MWiNfWxWA09zj+DeyXj2Wfkty3v1RDp1ZDYq1bcq+HL9apV7NXwNfWqLV5XF43V1cWYj8TramPx2vroxRZ5uC4eq62PRevocX4W/+Ih9yR5M6tFOhSTdl5PnVWoOR1G57yo6M+quZyOIPLq+WUtM8wG6cXn/COy8/Q95/xpXLeMZ3rkdyyt+yipe3hZ3cNXqLunoqG+PNFQn5h/HPqfiNfVQ93Qb0az8B7zsnwXWKc4CpPPbsjDnj5TB6iqV56DWp+Qh3PkHDsGrzxXrEy5yOL73GWfPPumEn/yy2tRmhmVLeT1hGwqg9oVCwTiTrXaGQ8EYi41c1h688Y9pbPo5AqdWffvDcGER6v1JILBSpdW66rEdmBuYY55RLab9LBe5LadHUY8srENT2hN5dDfUQSdNc1KVuAJfDHnwRsS3fj6Epcge6VOn1IaPTa7x6RgzAprmddTalWq1fYynzfiUKsdEa+vzK5mavDHYjhI2AWdSSOXg9v9Ae+LOrVaZ9Tni7k0GlcM9MIDC+8z4+g14Fhc3EOoAH/1CR3TBzzrRS3AscQz2O6rcxwOfLnP063EiwwbTzWvSuK/sc5Uci38YSTu5vazD8kPF/PKE+k0dQKvzmcIrzw5co55dT6zhFeS5Vt2xW5jb1OYHBaL06hwaEqCDmewRM3Mf3zJtaoId6fELObHUm4+vfSayYSQCe1H18l2yNYhJTLC/AygKEqhOrAnnagfbUW70QE0gY6ijzBkF3ZufP31wiah/sbjq47HJmcqZvg9w2XDqnyvrhfl2mXtpqpsSVY4PjPc257NtvcOzxwXlN5tO53e7kNH1h1pO3Zrx62Zg+O14+7rdvl3WQa22Lewjc2KZk150pA8cuv4ri3NyWTzll3jtx5RRvbvLY2g1PnUebMY3heDMeczV08Y/ITlr3kCa/b6D9e/XAQ5U+6/touEzaHSmmx1JkqPVnp00KN0X7nsfPlx+X2lfel5eFn9Unvc81XZbNX9OHm/Ol2dLsO5+boM/PtqdTpdzQ7g9KIbX2BvWyx78WtV2UymjElns2nme/jm/E6cvo9L349z3GchqYKz+f9dXZ3+BZwwD0BmC67tZkiYb2ZSNRfzkDtVVZVleVpoXgmZN/FjL2arsknILCwgL3uefV7+FnjnjyH8pvXT7E/Zd+W/gvMn6fmPuV/I34Tz75B95rQ8rE3CqJ3sUiibDfnwp9DOsXc8Zll0olOWhjnMdI2ubFZYVsAplSCezJU/qMY6lFw1+5yc0fqdTq9JIWubf2MVqzJ7nc6AlpEzGlZtBuXkN2vYTfufY98zmNQsI1cqHjsthyUWpzLr2VeUahnLyjSKh+Z/DL2noyOfUKM20sr8E/6EGrP9MbVrVo/76J5VHKL+89zzeBBn9a5ZAd96XOGeFeDmZT+ltuhCi1vd2Xez++8b+YrB4zGc3f+ZPelPexq3te/Y0bq1yS87sP/BkYzVyX7Taa0Z/tTOun352MULpWuvBx1J8UZNaA/RkZUu/LWhIfzBrW1nUKgG9yLp0HL+GM75pwvrQPHDKXMZ0xyebV9HNZcrWfy5lML6haMfoeRC1mKXWvygRrVV+ggl9wulyWWzegzKtxi10W402Q1q5mWGUZqcNry88Vs7HLzLpPgB9y9Ki81l6dZYdWr2l+Bwwj9YkeUufoPDnpZMIYP8/1i8/oLbBlWYL/6B1VvcRoVcZ9Yv+R1lHUbCQ5Lt26vEa98WiRGukd76+xD73/4jiSu7RpqhdOFyJJtaRl9aRqclkmeBDhfRRcWNRfTCIr1+KSknRFJZimjobyF19V9Jr4ukefjvT9rTEun2LKM3lpPeU0SzmAzGJXSmmIwbFmnwMvRrkUzPFch8USTLZxbpc8vJGrV+YP2gRHUJ/eZvIdsJQh/Yb7Hf4pgAesbxjLPROQH0gquS0D3umPuBv5led7/uqfyQtMNz1wqt0P8HeqmYvNkltPs/lE6v0Ar9Y5Nv/i+RX0HIcAnZV2iFVmiFVmiFVqiIDlP67nIK9KzQCq3QCq3QCq3QCv2D0fYVWqEVWqEVWqEVWqEVWqEVWqEVWqEVWqEVWqEVWqEVWqEV+kcg8YcS4e9PkEbRd5AclSMZ89DC/0QybhvSISeSLbyOnNy2hZ8wLFyfY/yQ/huznmEXXoLUDVfWM/6F30G6HlkhvWXhD5CeIOlDCxcYAUq+Aql74fuQ+he+BektC09DeoKk90ANApR8jzlC6v8klH8BUvfCryD1L/wrpOtJ/paFX0B6gqT3QJ2fhF5lmHvgqbeYh+CpX0PqJnn/wtuQ3rLwG0hPkPShhV/CeGRIx22DftohfWjhefxFN2wpwt+Kgj/oZSJocAQRAznjyOe/DLJHaZ5DZbJv0bysqIwcOWWv07yi6LoSHZH9X5pXAbIGmlcjXj5J8xr2C4vltWiL/B6a16Fy+Rs0rzcoFFIZAxJK7NJnhRhVyQmaZ5DS9k80zyKl/SWa55DTfoHmZUVl5Ehn/zPNK4quK1GTQ07zKmQruYvm1cjkyNG8hlm/WF6LEo71NK9DNsfNNK9Xco57aN6Aav33QU8YmRrOhkmvcF7EWcyLOIt5EWcxLysqI+Is5hVF10WcxbyIs5gXcRbzIs5iXsRZzIs4i3m9wen/Ac2LOP9XxKMMqkJpVAe5PvJru4fQBJqGv/1oBq6tIb9SLP5W8RBcGYXcOErCnVYkAPFoAK4dQNfDvWlyNgLHESh9BNJhKKlHecjthSsj6CiU6IfaRqCOTegmkuNRL9R8E9R7mLQoQO4A6QkPfxPkd34PLbbBL/a5ClVDLrJ4VocqSPtDUMMklOWh3SFoB9exD91Ay3bD2fVwFd89DP2bXhzPJvJrw9OkB1fqz36CA4/a4Hwv3MFXhwgKS8co1jNBR8qTVg7D3X1kvBK6R+HZQ+TKYSg1TFDj4fr15Fof6oI+YXRGyXPjBNcm8vwIKTGCxqBNjPIwSXnaI6ksT65PE56OQl8k7hXGge/PQC9G4clpQGENGc0oGcno4jiG4G8MnhB7KI5niLTBU16PQo241iEoh+u6Cc6OQm6G8AH/jvVeyAukT4cIFni8+HeyD1CkxFpnyJjENsfJiPaRno6TVqYJn7oIV/bDlSHyO82HyBh5chR5MUrGJGIxTaRiGmodovKKOTZJr0utjEE9AsFnkvZyHK6MkVbFOqcJUoUe4BYnyVik3/EWsRX7LhCpwZJwPZVc3Cv8m9X4t8BnyNk44bUk1yJmYisiH8fpuCYItntJyUKPi0eEUbuRPCeO+gY4T5K5W8zNKKltjNRwE8HhMJ2lxXhL0jdOJRmPX+TLISINkoyOEF5jyZ1cHI3YxwO0zDScHaO1z8AoRA4dWeTSEJERPAPGloxL0jz7oCdDpP19tP0k0S4HCK/wnUv1VeMlo95CJUeS/FqoJY0ariLpM6TNYSKJuJUbFnlQmJmX6skDVK4nF0tjyRU5Pg7lR4js9EKJfShGMI3T+cejTvLsBKl/BmgSxpECOkooSebU0vaStPYU5G8iEniA9BrrvZvgKkZsPxkxltSltQqkD7gHhRJSfZcb2TQZ1SRBS9Qy0nNYxraTUYtydRORB1HzzCxqU6m0JAX76EzFPK0gGOByk1TrFs/KScKbcSoNYi0j9HyIzsARIj+jZIRi7/aSfki8Wq4RZ+gT4sw6dMmV/YtjqLgmvos6YJhgOkN1jWj9xHYrFttZPgJxzhylv3F//RUwO0pHOkosmUBslmhXL8UePyPqkRiUjy+xEJevXezDh8W22P6Iupyn2niGcG7fEq24fAQFHbi8X01FMoBHIo5FtA2SJ3Jo0c4ME007TjTu0BVHKsre0BKpEvXUBE3FUYn5w2S+iPZ/mGitUWq7xXpwSYHM9SvLqOgjjVPOFGqXZshokQ25nmiiUYoz9pn0xB8ZoWOQ7ImE8lKpriCcGSL5YSRZ0+V+xPKZEFumF0aIH3SU2I9Rwn3M1SG4hhE6QPSReC9F69y9zDeJ09lb0BYF3S/15q/x/q7R2+K9y+rolergfYvSfBCuiXySpEa0RQL10grSfTUPUpLKK3uRmHPrF2fOdJHlEfktSsEIbUvU2uOU7xVkzIeodydZEdEKHqB8luRYlKtJat3EFiaIlzVExilJyhAqeNHL9dnfgReLCA2RsWPcRqmuH6ZzdR/1rMZJX4t90lHie00T2aR9vDJvIb9xqR8N3I4XYTRc5A8Wz4drrg8VfFip9OW1W8Uy7SZhv/xpgfiAo8vGLfWrsMYpzJqCJZJ4WIEkXxz73NL5SJGETBJvWyDydn2RhRV7vZf0ZYRaqsOLvCzWJSIPU5Tj02SWCIt9kOb1Ulm6dlSLLbw4ymJLs1SmC0gcJTiOfUg+StbgMFlLiMiMFPVgmKS4zQIuB6HEviLbMXMVfSxq/mEyAsniNS7R4kNQ4wTROJdf1Y4TGyFZmWJvXLITl9MpS5+aJrpC5NVeOu7L29yhK3D00OLop4mUjpPaxVl06Trnw0qAZN/yaC2524864GwrWMsBcqULrvGgRQfgzhY4a4er7XAlCiU20vtRwqmtxA7lodz/Y+9boKMosv5vd/VMZiaTIk9ERLZFxKAxICIiskggCQmGJCbhoQKbyWRCBiczcWbygMUwsgEjIiIiIGIMLiIqi4iIiIoRMKIisoiK6CLrg1VURHx8fKyL3607FUi36EF395z//xx64Hf7dj1u1a9u3aqaTmA0rXHROooQ81G/jmJcNuikC+0azJ+PdYmyWTCObGRhbcWUs4jqHoVP81BmyXyixHB8Mhp1cT+ComDUXj6Wip7Rc+WaGG1pCT7XT/TQ2KpcstjeslGoFWH9OTI1A+vOpfpE+4X9bLrPP9HObNnSDOJI1CzqHI4tyiNNPB2NshDzFZP9DOpztLX51IdsTI/2JYtaICyny75G8wl+xsgUMUaifXn4OdmrDOIgh1pzkr/hKAux5aL+EZhaQitEAZbMpJ4WE3tZkjPR2zzSTvYqOlLDqTeCVcFBJt6Pwr8jTnBXRBhtS1GH2ozcjaX0k7mi/cuQOJyYKyAtOhrDSSuhsRKpaXIsi6gfZqtjyROzKFcG9bj4hIdkk/dGW9/unVEbBR1aErUnxrZjW9q9Wv+FORKtpT19tBzpn/IiWM8gTkS7ik9Y/rmaxdz8T51CT54v+1D8Ed8PRb9nSaf9QTXUP6L363vpFfoorzsYCAUqwvrwQLA6EHSFvQF/up7h8+lF3kmV4ZBe5Al5grWe8vS4HE9Z0FOnF1R7/CVTqj16nmtKoCas+wKTvG7dHaieEhQldFFz38v0XkJckaYXuXzVlXqOy+8OuG/EpyMDlX49p6Y8JOyUVHpDuq9jPRWBoD7MW+bzul0+XVrEPAE0qocCNUG3RxfNrXMFPXqNv9wT1MOVHn1Ubome53V7/CHPVXrI49E9VWWe8nJPue6LPtXLPSF30Fstukc2yj1hl9cXSh/u8nnLgl5hw6VXBbBCtOPyh7CWoLdCr3BVeX1T9DpvuFIP1ZSFfR49GEC7Xv8kbBRmDXuqsKS/HAkI+j3BULqeG9YrPK5wTdAT0oMe7IU3jDbcoTQ9VOVCXt2uarwXRapqfGFvNVbpr6nyBDFnyBOmCkJ6dTCAoyFai7X7fIE6vRLJ1b1V1S53WPf69bDgGluGRbCPfrQVqNDLvJOo4qihsKc+jIW9N3rSddnNC0N6lcs/RXfX4JBG2y3o8yPJQRf2JegNCUY9riq9plqYwRon4ZOQdypmDwewQ7WiSy4dB6Aqaks4j7vSFcSGeYLpRZ5JNT5X8IRfDWo3PUj4w+VjkCIxBAPSL73SQH046Cr3VLmCN4p+0JCe8MxJyHi1eOwOYPf9Xk8oPa/GneoK9cZR1EcEA4FwZThcPahPn7q6uvSq9nLpmL1PeEp1YFLQVV05pY87XBHwh0Myq6/G7QrRA5HvpLFQTXW1z4uOI9LS9esCNcjYFL0GXSgsnFU8FkS4cWjDnjS93BuqRgeODmh10IupbsziQenCYfQEq7zhMFZXNoV61e6OSBX6TSDYflMhLKT9tO/oB+U17nCacMdaLJsmyrQbwPGpq/S6Kzu0rA6Nev1uXw36/snWB/zoKane3tFp0SE71vBLrY3OIvR1HPdQOOh1Rx2y3QD5YXtdVxEDqV60gnNChJKgmDnlgTq/L+AqN7LnilKFnoXdweETNzXhaowC5R7RTZGn0uOrNjKKcQl9N5pdDIiX5kmlt8wbFvEprgSbXBEQs0U0WVKdppe5QtjWgP9EpGgfhFTpCx5/ep33Rm+1p9zrSg8EJ/URWh/M+QcZU3rj8JJb0BwQ1Zw6CJ4qeO2SOfJEjjcFzZMD2CdBDc4lHwY2otsYJgWVhkAZF1coBidEkwf7jRR4sBS6NjJTnqZXBDHoiSmCE3ES9llwjFzhiGJxPVCGwc4vSHFRoG73s9PvhWiQKxQKuL0u4R/lATeGLH/YFY2nXh8ykypqNPRWL5aR+s3e1KJyiobRcThlPoqz4nEHd0uT7iZa357s86KfRm2LuoLRlQot0CQSPUwTsdxbIaSHCKmuwQ6FKmnCYtVlNWLyhsRD6SXYwz7Y8ZBHhOhAtTcaUX+2qdEJjyajk0YyTY2oqwxU/UIfxTSoCfqxMR6qoDyAMZTaMtnjDrc72Ek/Rucv99LEGxR1cVdZoNbTYcH1B8JiykSDuVdO46inyKRQpVgPyjyGmevq0NGgMB8KozN5cYhOrDy/RICYbzlZenFBdsnYjKIsPbdYLywqGJObmZWpX5hRjPqFafrY3JKcgtElOuYoysgvuU4vyNYz8q/Tr8nNz0zTs8YVFmUVF+sFRXruqMK83Cx8lps/PG90Zm7+CH0YlssvwHU9F2ciVlpSoAuDsqrcrGJR2aisouE5qGYMy83LLbkuTc/OLckXdWZjpRl6YUZRSe7w0XkZRXrh6KLCguIsNJ+J1ebn5mcXoZWsUVn5Jbjk5uMzPWsMKnpxTkZeHpnKGI2tL6L2DS8ovK4od0ROiZ5TkJeZhQ+HZWHLMoblZUVNYaeG52XkjkrTMzNGZYzIolIFWEsRZZOtG5uTRY/QXgb+GV6SW5AvujG8IL+kCNU07GVRyYmiY3OLs9L0jKLcYkFIdlEBVi/oxBIFVAmWy8+K1iKo1g0jglmEPro462RbMrMy8rCuYlG4Y+b0uNNZQmm97FPuqXDhziXdFaquP/Pi4syLi1/B7ZkXF/+9FxcO+nvm5cX/ny8voqN35gXGmRcYZ15gnHmBYY7mZ15iGF9itLNz5kXGmRcZZ15k/L/3IsMhf/Yd4McuMAtOdSmYw44ZUyDmxx+hk/hfqOgnxkFJRVkpf3/g5y+NLXI6FcyjzDvd/HFxlP/o6ebv1EnkV0tPN398POXfdrr5ExJEftb3dPMnJWF+lCB+gl6j/Br+TSbsgrRnQldFhQuVrtBP6Q5XK4UwUpkAYxUflCsBuEmphQblZrhNmQELlDmwDJlbpSyBp9UY2MJGwitsHLyNtb+PtX1ssvPpKez0QTuD0E4O2ilGO6Vopwrt/BHt3IZ2FqCdB9DOKrTzNNrZjHbeQDtvoZ2PsPbPsLavjXaUdzvYOQvtXIB2BqOdHLQzFu240U4Q7UTQzp1opxntPIp21qOdrWhnJ9p5H+0cRDuH0c6PbJEifKqT0Y7asT9no51UtJOBdkahnQlox4t26tHOLLSzEO2sQDtr0c4mtPM62nkX7XyCdr5BO8fYOMWBdhLQTlejHU3tYOcctHMx2snGXMVopxzt3IR2bkE789DOMrSzFu28gHa2o5330c5naOd7NUaxsJGK+B2Tc9FOT7RzidGOpU8HO+einUFoZyza8aCdOrQzE+0sRDsr0c5GtLMd7exFO5+inWPKPMWmLFE6o51eaOcStHM12slGO4ViXtpi8E98fGpq5rQZM2xWxWY73NSIV9Nhm02xObZseQive++1WhRrzGFbfVNTvc2i2GJs4hYVel7ddDQSEc+t1vp580oj1VhYUWxaBCJ02TTFZo1E5rW0trTMi6bIi4qv2SaqkjXhVU0WCiGqWJli1fZHc2tooTrS2jd+f4wGMdrQw0Px6qswxWZp6VAvehBeLMIooaXlF/poV2yxL0ZejDyInwX4acJPh77aLYod+9reWWG/dN7hSKT65ztr1xQ7dlb21q4o9hO9Pa3uog3LmlZTd20a2LShhv52rLlDh+2iw3Y72O02dJpk6IGfDJhOjbPHKHb70cYZ4mo8ancodmcrXsuGLhs6nz5z8BNjUWKwYdjlxZUOq+KwaZoWnoNszQnHWJUYW31j4w+RyDRMiomZJlocwSf10dZICiIOi+KIQdkkSJjX5FAUx0kSIlTNhq1iBBrbq2wUdVgVuy0VpBajKTGSiIi4RyYipfHx++0a2C2SCuLCbm1xKKrDcoKLiKooKtrTNMVhnYeXA9cipOMkIdOREmqnTXE4fphxC10zfnDEKo641tLWUqSw5S79Ln02fhrxI1upTUMSYq2K+E/lT01KDN43iNZH0NOmGUmJtSixgpR2VmIVJbYDKz9LCw1C6ql5EWNVL9zRdtjIi8qw7y0tsYoa206MkZlYYibWAbEOJyTS5zzxPz9HpkeGRvDP0FibEus4OitKzoxZR2PjlNhOrV1au7SktqTOy5mXI9x1pm2mbYaNphTRg3w4YxSnXcVrULbws+xBlDowUxCUOTA2BpUTDM2YFnWNdooiTqvitHXgqBF3Ac6OJEVsWIF9w1by4RmkDMwUt1R1rB15atcp6kiiIjTHqpvQg2xN1cI9rUOHHiWqhg5UmRob09LiVFSn9YQdA1nOGEGWMxacsRw4BnvxuTRyaaS0dTr6i3AZp0NxOo/DFowlrR2uFyNbIsfByRVn/P5u+7sdHrwzbY9vj29b3vbtW+e8PGeLc4uTZuW0Nqu1oa1tR22cTYlzMLyumrRFXJOustswfXBFW9vx1taywU6hTW/Da1prA6Y3xKlKnNbaCnDCZlyMEmcXN23b9xw+vGf79jaZp8MlKnW8f2BL9CJtcAXdVwymJlRUAJx4QmFwz/72smKe1m9t3V/fzTmnXri1tbT0aGn0GqhalbiY7dvjVDXOetIetk74hKW11YLptu3igg77IrEvVMt9/knyvlsoep8p7jOCrrI0ffiUoC9NHxH03JhGby7T9DxX2P9LaVS7Q10ffwgsLswHuhvzwYFJmE+ZVYn5lI0+zKfsh26gZWcU6TBkVN51OpQW52fqMGN0EeKD9P/7ceiJu1lxEKuABrgd5sFIWAVPwxbcTQ2QOS6AztjeG/BwOx3mwF14nPwLbICt8AlcIXP0wn1PFozHHWEE7oD5uPFeDc/AS3AABlKOODy4dsEN9wQ8Ht8Cc+FuPCJshDb4B1xJ6Z2Qm7Nxo54LE2EyzIA7YQFu1x+HZ+Fl3MUNgqGgDiso1iG+uGiYOJaLMiloNwY37lcB7kzgD3AjHtD/BM3wEHKzCN6Gv8EaeA62wRtiz0b5O2Gk7AOD0cVLoJR+sqgRHoAVyOZieAf2wRPwPLwCO+GgzB+Pe/2+8HvkcDS46Le+ZkILPIy7i3thD3wAa2ETvAp/hc9pDxMtk4Cng0thCO5nxkAZ+KEWTxLLYCWeG5bAu7AfnoQX4DXYBV9gPiV3LI5MFyqpQW/oDm64R2oXwe+gHBYi8yy3sDAHRhYVjNKhrKToGh1bK/KchZEtFvrBxXA1HZ7EFzR/hFtxXB/B8gVwH+yFv8M6aIXt8CZ8SWXscBlyeR6MEz9NBU14ZD1Ez7tAEjihPx7bMnAVuQ48cBNMgWlwG/wZHgULXAtL4T34EJ6CF+F12A1fyRYk48heDpfgAfR8uB6CMBVuhtmwHB7DM1ER3I+78o9gPWyGHfAWHIav3f1CbstKwjWEGwhbCbcR7iTc43b5wpb9hAcJvyU8LtBqI0wk7OZ2hTzWXoRphP0IBxIOIcwkHOl2V1VbCwnLCH2EtYQRwvmELYSrCZ8jfJXwmMCYiwgHEmYTlpT7vJNiSgknE4YJGwibCOcTLiZsJlxO+Gi5P1AVs4ZwPeFzhJsJtxHuINxNuLfC63fF7Cc8QPgF4RHCoxVBlzvmuECbjTCRsBthL8K+hIMIM71+b9iWT1hCeD1hKWGFNxTw2XyEQWysy1ZP+CBhG+FBgXZOOJBwCGEm4Uifv6bKXkg4hnA8YRlhJaGfMEw41Rdw++wRwlmEcwjnEy4mbCFcQbiacB3hRsLWKk+5195GuJ1wN+Fewv1oJGg/QPgF4RHCo4THBTo0QgdhfACFozNhN8IehKmE6YT9CQcRDg0Ey/2ObMI8wqJq8Xwc4UTCcsLJhNWEtYTTCGcQNhHOJVxAuISwJej2hR0rCN8XGKsRphGWiEGKbSJcQNhCuIpwA+FWwldDOHdidxLuIdxHeIDwC8IjhMdCXn+FEwithE7CRMIuhN0Je4aq3NXOiwj7Ew4hzCEsIhxPWBEK9b3UWU1YSziNcAZhE+E8wsWELYQrCdcQbkDs52wlbCPcTriLcA/hPsIDhIcIvyc8LjDOSsgRL4vrTNiNsAdhKmE6YX/CwYSZhHmEJYTjCcsR+8f5CIOE9YQNhI2EswnniZ9ZiVtIuJTwQcKVhKsJ1xFuDNVUh+JaCdsItxPuItxDuI/w4zD6RtxBwsOE3xP+IJCrhDZCTphM2JVQJ+xFmEbYT+xYcD1I/g2S4Vp8Dq6X/96dAvbTxBj68nM4fd2XjfsHUUv0yanvfprfgmulRfybD7g3+DVaZ1x303DlS8cdhfgXEfrhytof18IBuCcaiLuaQbgvGYx7hyG4Og/9DflPvyUaadF7hvuvGbgLOv07BfcdJ/F3P8G4X4nX/AIy3PPgUeM/dqfgHvGXcOQJTKLXRtW4qwnSa54a3JfV4Q5oCu5Y/oj7nJtx7zud+Ig35DyZ77+R5/RbpeDe8NSY+CuxgLCQ8FrCIpq/qvy3XlSDphCmdsDo2SaPcuXhLr5dM6LjV2LCr8Rzf4I5v4jxvwrPxt30ONwFX49nnvF4ZpmIp4tSep3plr+ZMIleUk7GM4cPzwVT8UwDyG97qZ/mb8/738jX5Ve1NtpWDU9MJXiqGfMb7hU8m7Sj8BOdNP0nWvszMDzjp4kMz1KdxdnoN96dRXcKnvBOhSqegXr8BqngCfDnUcVTUM/fIBU5j06NKp6/e/0GKf4Nq9PF0x0VBefG6WLuL2KnX4EfKK3KTmW/chgDU7yqq33VoWqhWqpWqxF1ntqirlFb1Z3qfvUwAxbPdNaXDWWFrJRNZSvZ2+wA+16zap21XtoALVsbo1VotdosbaG2QluvfWx1WrtZ06yDrXnW8VafdZp1jnWpdZX1Oet26/sxu2I+jDlia7XttR20T7T77Q32B+077QftxxzJjp6O/o5MR4mj3BF2NDoWOJY71jm2OnY7PnZ8G6vFJsf2jO0fOzt2eeym2B2xnzo7O3s5Rzr9zqXOVufeuL5xwbgZcfPjVsU9F7c/7hh38K68P8/nq/kmvoPv44f48U68U/dO6Z2GdJrdaUmnXfEQ3zX+ovgF8avjN8XviN8Xfyj+eAJP6J6QnjAkIT9hYoI/oSFhbkJzwuqETQk7EvYlHEo4nsgTuyemJw5JzE+cmOhPbEicm9icuDpxU+KOxH2JhxKPJ/Gk7knpSUOS8pMmJvmTGpLmJjUnrU7alLQjaV/SoaTjyTy5e3J68pDk/OSJyf7khuS5yc3Jq5M3Je9I3pd8KPl4Ck/pnpKeMiQlP2Viij+lIWVuSnPK6pRNKTtS9qUcSjnemXfu3jm985DO+bg3EeNoi64nyQtN+qMmfbdJf7uDrpnSrbix0iFG6aCfM82on3vQWF4fYqz/ggeNeq8cY/29xpt0vyn/PJO+3KSb+nNhD5NebdIXm/RWY/sv+dSY3kcz6gOmmfSGDjpG4wERU/ou0lVciROjPRzYEpVXllOKhjO/M+42ekWfDtKlvEjK/lIOPVXuqxqlnCvlYilNLF2119jLwbOM+lCTFw1dadSHmVgbPsOkNxr1TN2km0Ylc7BJN3lNZhnqysn2Zc436UtIN7GR2SzlSinXSdlKuc/FnX8O7s3G4fpdSd/QRaAJ5sFiaIGVsAY2QCtsg52wB/bDp3AYjqJBmxKvdFHkmGTJEcxq1/tKOVTKIiknSumTcqqUs6VcIuUqKZ+TcoeUe6X8VMqjUZkt50h2Zyllv7MHSjlSynFSVkpZL2WTlNJ+trSf3SrlLuMo5HQxsp7T2aT3MOnZJr26g471j7QZ00cOMen5Rv26rib9OaN+wziT3tBBx/bfMIv0LngKHILn0XzcX03E/Zr41rgBZsFcWAjNsAJWw3rYBG2wA96GfXAADkVbe8MYKcukrJYyIuV8KeV8vmGNlJulfFvKD6U8HJXjQUrpTeOlN41Pl3KIlPlSlkoZlHKWlHIUx6+QUnr7+FYj6xM2G1masJ/0ZDwrnx4v0VpelVL65gTpmxOkb060Sil9c2JPKWX8mjhMSjlHJspeTZSsTmyQUkayiUullD46caOUsh0T90j5KfWmQ3z9w/dRWQrGfpfOJT0WuuGuMA36w2DIxPNUCQ5IOciZWiqtl8pIUrpaSjlDS6X1Umm99ICU30alS5UyXsruxjaUjUHdftJD3X7SGZ63k7FdVMY9TUo5zu75lMcU69ybpNwm5W4pPzTzUd5dylSjX5SXUb0dcy6Xcq0xDpSb1liP09gLz0CTnmnUJ80w6l7VpINRnxwx6XNM+lyTvqeDjixPPthBx/7cONSkjzfmv7HRlL7fqPuyjcz51pFuk+Nxch5FU6WP+OSI+N6X8mMpZXzxy6jrl/n9u83jUR2WssGccpOcRTeNN7Y0iHNfNYx+SHpVKJVSTF4UPiLl8aiskf5c862x3rrtP/XTehkH6+WqUj/3p3mmyPkzZV9UTk0+lS9PHSCljHx/zJQy76c1TsuWMk/K5WZupkk+p+2kHv/MKN0s49PNcp91s4xTN8u1vEFG1wYZ3RselXI9xDBxlwhd8cx6EfSDQdGUyE4p5XhHJJcRyXFEcnyL08ht4yCTPt7co8YFUi415pyZ+VN+Zsod4EwZwWauMMeDWTLizlpvjE1NecZZ0bTA3I4mucI17TOn3JYqZTml2HHNFb920RcGnthzRdOlr9wmo9dsuWrMlqvDbLlTmS39ZrZcM2+XnnK7yd9vj5j0FpO+waR/YdTnaCb9OSMHd2CM1DrM/HkbjZHgLiv5WAzxf3JViaY5pEyWUq7z8/tJKXdt82Xf5+Pux9Kh7rvfJ0+zQPwJNqPPpV/dLf3q7h+icoEst+CUc2yR3B0skswvkrNk0dtm/2iWntScauSmeSrldHTw+2EwEorgepA7pGbpe81yHWmWLW2We4QHyqWUq2yLZKBFekeL7NGybuY2LZN7qmXbjJF/2W6TfsS4Ui37tsNpFW+Wf2/UH+pizP9QV5NuTk8z6ekmva/xNLgyzbgjfSTepHOT7jTOyUccJl3voGP9j6Sa9FVG/dE8Iz+r3zfqj6cb8z8eMepr5nfIj/oTy036ZqO+NtVY/9pa43xaGzb2d+00kz7VqD9p2i89ucuk7zTq69JpPp5oz7qcDrpIzzPpI03lc0x6mbF/T60y6fuN+tM+Y/kN6436M4NM+iaT/qFR36ga27ux1qg/25NixEl9nbH8s5tNuomv5zca9U21Rv2FfkZ/eOGQUW8FY/9b+5r0YUZ9s2rS1xn1Ldykh436S/2Nets4kz7XqL9sM+rbTPZfyTHpDSZ9hkmfZ9IXGPVXu5t0v1F/TeuwniC/r3U8QQvdNL6vhU16bYc1QuhNxvF/bbZx/F77whg/tvcwpm9PN6WnmfSBJn2kSW826fuM/vF6P/Fv7WOKW7kHKpSl9A6jDD+gLFBwV2OJtyTQ+7BEsDpzeZszh2/lrXwzPrEqXypfYr7DCu4BlCPKEVCV75TvgPEMngEaH86H49oo1giVZbEcYU9NVFPwCdpmXLSCxWHJdNoB9oUgLMWz7H44piRjG2zYqmTntaA6c5xFiLnOYkTRu5Or7QAYzD8FpsZjmz4j2cYPokxB/XOSbfxtUFHbg9jG9yJuw746ontDvh/b2oqpfyfZxj9EuRn1j0i2dcj5scz5icx5QOb8h8zZ3t5rqL151N5R1N72lHxKKaCUwo4p/FVq4XZq4Q5qYXvKTkrZRSm7KUVEG/wAqLFqLChqvBqPrKYgq8yZ7RyBrLfyVrBim0RcYSDeeios+uYGN5RYfgb2agaqnZROMF3pqpwLESVVSYVG5XplPMxUfEoVNCkBJQCzlZuUMNyuzFZmw53KYuVemKd8rXwN85Xvle/hbuWfyj9hgXANuEe1qlZYqDpVJyxSE9QEWKx2VjvDveo56jmwRD1fPR/uU3urvWGp2lcthPvVsFoDm9Q6tQ5a1anqVHhRvVltwODTqDbCVvVW9VZ4SV2gLoA2dZG6CF5Wl6vvwDYWh17zA+vP+sNxNoxlwo8sl+UqKruf3a8wLawtUzSL2+JW+lk8Fo9ymWWSZZLS3+K1eJXLLSFLSBlgqbHUKFdY6ix1ykDLm9Ym5UpHscOlfOW4NVZRjjvjnVnqFOcNzmb18bjyuMnqN3HT4+aox7jKbczGz+PnsU78fH4+i+cX8AtYAr+QX8gSeW/emyXxi/nFLJlfwi9hKbwP78M680v5pews3p/3Z134AD6Anc0H8oGsKx/EB7Fz+GA+mHXjQ/gQdi4fyoey7nwYH8Z+xzN5JtN5Ds9h5/GJfCLrwct5OTufV/AK1pNX8kp2Aa/iVawXD/AAu5DfxG9iqbyG17DevI7XsYv4FD6FXcyn8+ksjd/Cb2GX8Jl8JkvnTbyJ9eGz+WzWl9/B72CX8jv5nawfn8/ns8v4Ar6A9ecL+UJ2OV/MF7MBfAlfwq7gS/lSNpA382Z2JW/hLWwQf5A/yK7iy/lyNpiv4CvY7/lKvpIN4Y/yR9nVfBVfxYby1Xw1y+BP8CfYMP4kf5IN50/xp1gmf5o/zbL4M/wZls2f5c+yEXwT38Ry+Iv8RZbLt/AtbCR/ib/EruEv85dZHn+Fv8JG8df4ayyfv85fZwX8Df4GK+R/5X9l1/I3+ZusiL/F32LF/B3+Divh7/J32Wj+Hn+PjeEf8A/YWP4l/5KN44f5YXYdP8KPsOv5t/xbdgP/nv8PG4/O66L4BRS5FOWYcgyj2I/Kjxg9LKoFNJpnFppnVppnMWpXtSvY1B5qD7CrqWoqOFgORrdYS5mlDJyWcks5xFkqLBXALZWWSuhkCVqCEG8JW8KQYKm11EIi17kOSbwH74FzvCfvCSm8F+8FnXkqT4Wz+EX8IujC03ganM3TeTp05X15XziHX8Yvg278cn45nMuv4FdAd34lvxJ+x6/iV4HOf89/D+fxq/nVGK1E/D2f4m9PPoKPgAv4BD4BenE3d8OF3MM9kMon8UnQm/u4Dy7ifu6Hi3k1r4Y0HuZhuITX8lpI5/W8HvrwBt4AfXmER+BS3sgboR+/ld8Kl/Hb+G3Qn8/hc+ByPpfPhQH8Ln4XXMHv5nfDQH4Pvweu5Iv4IhjE7+X3wlX8Pn4fxuv7+f3we/4AfwCG8GV8GVzN/8z/DEP5Q/whyOAP84dhGH+EPwLD+WP8Mcjkf+F/gSy+hq+BbL6Wr4URfB1fBzl8PV8PuXwD3wAj+Ua+Ea7hz/PnIY/i3yiKf/kYO7dCAcbONijk2zB6XstfxWhbxLdjtC3mOzDalvCdGGVH810YZcfw3Rhlx/K3cc0Yx/fgmnEd34trxvV8H98HN/Av+Bcwnn/Fv4IJ/Gv+NUzk3/Bv4A/8O/4dlMqfFxGnof4Ua29F37IoE5QJ+NijeEDRntaeBtX6L+u/gNmG2IZgHP7PeB/GwDPed8b7pPd1Je8T3+Koitf63hkfO+Nj/yEfUyyTxXddSg+1P8vWxkE3w/dLk+m3H2bAbJgPS+BBeBTWwkbYDK/CLtgLH8JBOII7e1CsitNeD8wesoftU0jW2KeSrLX/kWSd/WaUYbxrIBm2TydZY4+QrLXfQrLO/ieUNZivkWTYPpNkjX0WyVr7rSTr7LehrMV8s0mG7beTrLHPIVlrv4Nknf1OlHWYbx7JsP0ukjX2+SRr7XeTrLNPAxVTZyDW2JsQa+1zEev+DUbuoZ6H7AslM4skM4slM/dKZpZIZu6TjCyVjNwvGXlAMtIiGVkmGXlQMvJnychDkpEVkpGHJSMrJSOPSEYek4yskoz8RTKyWjLyuGRkAfY/ZG8mRpYTI4/+m4w8IRlZKxl5UjKyTjLylGTkacnIBukrz0hmNkpmnpXMPCeZeV4ys0ky8oJk5EXJyGbJyBbJyFbJyEuSkZclI9skI69IRl6VjLwmGVlDjKwnT2klRtr+TUZel4zskIy8IRnZKRn5q2TkTcnIbsnIW5KRtyUj70hG3pWM7JWMvCd95X3JzN8kM/skMx9IZvZLZv4uGflIMvKxZOQTycgBycg/JCPbiZFdxMge8pQP/01GPpOMHJSMfC4Z+UIy8qVk5CvJyGHJyNeSkSOSkW8kI99JRr6XjPyPZOSoZOR/JSP/lIz8IBn5l2TkuPSVH6PMiH9PQzDjUKLMONQoMw4mmfmUGDlEjHxLjBwTnoJrtiLaTT+VNA56K7vUB1geK2AVbBKbzG5kIVbD6tgUdjNrYrex2ex2NofdgafgD9lH7GP2CTvA/sE+ZZ+xg+xz9gX7kh1iX7HD7Gt2hH3DvmXfxQ3AejspO5WdaKBZbQaFXcOuAZXls3xgrJx5QGOVzAtWFmRBsLEwC4Od1bJa3AnUs3qIZdPYNHCyBvYniGP3sfsgiW1kr0Ny3OVxl0Mq1t4VHFp37Xearp2n9dDO13pqF2i9tAtFz7BF3wG0fzchf98B4DaRhmWiP4+pMN+JHO0/dz1bfDfFfJgCWrJ2LuZO1VIhtkO5qN1kLUXrrJ2lddHO1rpq52jdMO9Juyr0hE5aopakWTSrFqPZNLvm0GI1pxanca2TFq+J77s07Nt0bKQoo2q/14aAU8vQMoBj2gDowlawlWwVe5xtZS+xNvYy28ZeYa+y19h29vqpGBfflrGH2ENY48PsYWzLY+wx5Hs1wziKzG1Bex+yz0/U/hDmegxTN7Jn2XPsebaJvcBa2YtsM9tyqjGm2lewFVj7SrYSa1/FVmHtjzOMztjC17F20Q9Rezokn7LWU/SDOPtQcibKnaZ3UTnhDVjO4lfXwZ+gEWbCLDwRNeEoz4bbYQ7cAXPhTpgHd+EsvxsWwD2wEBbBYrgX5/x9sBTuh2Z4AFpgGUaAP8NyeAhWwMOwEh7BePAYrIK/wGp4HNbAExgdnoR18BSsh6dhAzyDseJZeA6eh03wArTCixg5tsBWeAna4GXYBq9gHHkNtsPrsAPegJ3wV4wqb8JueAvehndgD7yLMeY9eB/+BvvgA9gPf8eI8xF8DJ/AAfgHfAqfYfz5HL6AL+EQfCV+oxOj0TfwLXwH38P/wFH4XzgG/4Qf4F9wHH5EN1bUa9UitVgt+T/uzgNMimLr+1XVPVOz3T1DT3fPssCKiMQlB5EkOYNIFFxyUkCQICCCRBFRAZF0cclBMohIEskgonLRa0AyKFFExASIAt+p/w7L9PW+7/XeNzzv89HPVPWe33RVVzqnTlVPI1qKR0Ur0Vo8JtJFG9FWtBPtRQfRUXQSnUUX0VV0E4+LJ0R30UP0FE+KXqK3eEr0EX1FPzFPHBKHxRFxVBwTx8UJcVKcEl+Jr8VpcUacFefEeXFBfCMuim/FJc0Q34nLmim+F1fED+JH8ZP4Wfwiropr4rr4VdwQv4nfxU1xS9wmFcQ1oWmargW0oCa1kJakNdWaac21FlpbrZ3WUeuk9db6aWO0F7Sx2ovaFO11bZa2RntLe1tbp23S3tEOaB9rn2h/0z7VPtM+177QDmpfaoe0w9oR7ah2TDuundBOaqe0r/RKemX9U/0z/XP9C/2g/qV+SD+sH9GP6sf04/oJ/aR+Sv9K/1o/rZ/Rz+rn9PP6Bf0b/aL+rX5J/06/rH+vX9F/0H/Uf9J/1n/Rr+rX9Ov6r/oN/Tf9d/2mfku/HQgHHFld1pA1ZS1ZW9aRdWU9WV82kA1lI/mwbCwfkU1kU9lMNpctZEv5qGwlW8vHZLpsI9vKdrK97CA7yk6ys+xCRzc6nqCjh+wpn5S9ZG/5lOwj+8p+sr98Wg6QA+Ug+YwcLJ+VQ+h4Tg6Tw+UIOVKOkqPl83KMfEGOlS/KcfIl+bJ8RY6XE+RE+aqcJF+Tk+UUOVVOk9PlX+QM+brMkDPlLDlbzpFz5Tw5Xy6QC+UiuUKulKvkavmmXCPfkmvl23KdXC83yI1yk3xHbpbvyi1yq9wmt8sdcqfcJXfLPfI9uVe+L/fJD+SH8iO5X/5VHpAfy0/k3+Sn8jP5ufxCHpRfykPysDwij8pj8rg8IU/KU/Ir+bU8Lc/Is/KcPC8vyG/kRfmtvCS/k5fl9/KK/EH+KK/LX+UN+Zv8Xd6Ut+TtEAtx+YZcLJfIpXKZXC5/kj/LX+RVec0YbDxrDDGGGs8Zw4zhxghjpDHKGG08b4wxXjDGmkPN58xh5nBzhDnSHGWONp83x5hjzRfNceZL5svmK+Z4c4I50XzVnGRmmDPNWeZsc44515xnzjcXmAvNReYb5mJzibnUXGYuN1eYq8zV5pvmGvMtc635trnOXG9uN3eYO81d5m5zj/meudf80PzI/Kt5wPzY/MT8m/mp+Zn5ufmFedA8ZH5lnjbPmufNb8xvze/NH8yfzJ/NX8yr5jXzuvmrecP8zfzdvGXetpjFLWFplm4FrKB12jpjnbXOWeetC9Y31kXrW+uS9Z112freumL9YP1o/WT9bP1iXbWuWdetX60b1m/W79ZN65Z1O8zCPCzCWlgPB8LBsAyHwklhI2yGrXA4HAlnC9vhaNgJu2EvHAsnh7OHU8I5wjnDucKp4XvCucP3hvOE7wvnDd8fzhfOHy4QnhmeFZ4dnhOeG54Xnh9eEF4YXhR+I7w4vCS8FL/RwNo+1thHiLmCNChWzudrDci+f6E9TPb9Sy1da8MOa+21DuworOlxra/Wl50gizeKndQma5PZaW2GNoOdgWU/C7t1DnbrPOzWBditb7QN2kZ2ERbikl5Br8gZVuBFwAgYvGTADti8FNbYSwe/Cp7jF2RJWZZfxnr7T8aLxkwhjDeM7SK78YFxXZTGqntnrLerpyV/xBMqeVlR1phmQBlkAbaRdqYszBeYiHyAs5U4U3s0Nktmqeb79PeX5j4KD5sfUHjU3J/13S/pbCcL0XwiheWmGUBa5u6ReVjJzaMUfmQep/Cv5kkKPza/U1dGYirFSLJKMZJdpYi0biLVO3s0SfTXexGDwvcjpo9kA7FBoj6SApIDJCeIYEnUaiWp7cqL8oyLSqISE6KOqMM0UV/UZ7p4RDzCAsYUYwoLGhuNjUwaV4wrlJ4ILBef/g/ZWL+F/f/bvv7vWFhlQ/+s3fyftJmO7Cofl93lULJAynLWJpvZCNasKVmmibCTrclGKuuYaRu7/Umr+Nw/sYd/tIavkx28awETrcv/NWuYZe3ILs4g+51oFavT7EPNPTJnHmre0YRmHr/G5x2/0azjMZpxzMGcYy7NOG5Qr32UemoH1S/v2E7R2283LduKWo7lWp4Vs5Kt7FaKlcPKaeWyUq17rNzWvVYe6z4rr3W/lc/KbxWwClqFrMJW2j+0ti/8Y3sbSYoYEfNPWd2Vf7S7kWwROxL9g/V939xnfgAbvP8fWuEvyQ4fNo+ax82Td+xxJDmSHTb5u//QKt/8o12OpERyRHL+W9bZZ5utm/8d1tne/U/s8yNc8Bg5szl5IebxJrwFux+77oV4e96NFeFP8CdYGd6D92Bl+ZO8N3uA9+FDWHn+HJ/GavEMPpu15+v5x6yz6C8GsGFikBjGRooRYhQbJ54XL7JXxEtiApskXhWT2TTsn78upgvS9/Dy52iW5rC5mqd5bLGWrKWxJVpRrQTbopXSarEdsPmfw+Z/Af/toL5A/5hdDEQDUZ4SuBq4ynMErgeu85yBG4EbPFeQKoynBl8KTuD3BF8NTuF5g9OCM3jBYEZwNi8SnBtczksEVwbX8UrBDcG9vFZwX/AT3jJ4MHiQtw8eDh7lHYLHgyd5Z5od3OTdgrdpdjBalpOV+Cb5kKzKt4UKh9L4zlDRUAm+O1QqVIq/HyoXKsf3hSqEKvAP1A4a/zBULVSNfxSqEarB94fqhOrwv4bqh+rzA6FGoUb841CLUAv+SahVqBX/Wyg9lM4/DXUIdeGfhXqEevBDSeT488NGZ6MLP2J0M7rzY0ZPYwA/ZQwyBvFvydLO5JfI0m7nv5Clvc5vmcJsI6TZzhwiOllzra/FiHDDcEOxOzwhnCH2ZD7nQl7pauy8tOOPxyUbEiScVcRzySl46lM9iyrI6r6BcDXNDt5ArP7aGv9rK/11nA71tE0RXoT6TnFenMxeeV6e0qzL65KRacgbMp3P4DPwtM0+1imQM5ArkBq4J5A7cG8gT+C+QN7A/YF8gfyBAoGCgUKBwoG0QJFA0UCxQPFAiUDJQKlA6UAZ/hn/nH/BD/Iv+SF+mB/hR/kxfpyf4Cf5Kf4V/5qf5mf4WX6On+cX+Df8Iv+WX9I1Xdeuate069qv2g3tN+137aZ2S7v9X5HpVBRdYMVBx1ulolgDSqFDY6nqbV5UcwWppEWZehJK/WcGIarVijRfrEyHwarQYeL9FhZrSEeEtaIjG34fbrP2dDj4jyxc1p0OD+8diOGNA9nZCDpy0BgVLCfPxm2Wi0ZqTnYPz81zs9x4SuZeGrVNWB4atensPuzu5sV4vZ/34r1YPjw3k58P5INYAT6MD6OR/RJ/iRXmr/DxLI1P4pNYURrHGawYjeP1rDjfwXeyEnwvf5+V4vv5flYG605lMf7KYW7dAKtP7bH61DFrTWxPfE3sFaqpe0QpUYpmjuVEOZo51hK1aObYQDSgmWMz0Yxmjq1EKxag+U83FqSZz5M0cxxnvMxCxnhjEjONxcYSZhvLjJXMMQ4aX7Jk47BxjKUYJ43TNKd+zhzO7iMrMoblUxaCFSYLMZ8VUfqclSB9fpCVIi1+nD1AmvwkK0e6/DR7kPT5WVaefKzzrALp9G9YRdLr37JKpNu/ozZSz4FVEm2zyvJhvCzjqSy5fWWpICrQd1WJNNGEfBodJQqgREGa56UziXKFaBbXjyWhXAbKFUa5HJTLM1Yba6hEa40NLBfKmAdlzGucN75hBYxvje+pXKqkxVHSUihpOZS0PNnBN8hPWELeRlWUujZKXZfs01XWkKzTTfxeQdAsvWd8F7YRjc+uKNEEVUbeDOOeZUkY1jQF786rZckEb8GLMo53yGTKaAT8g7qoLCpTXaga0dHGAdRLEPUiUS8h1EsSzX/bMQO1Y6LVLdRR2HjMeIxFyEMfzrKRFzaZ2n6qMZOlki+2geUzNhnbWTnyyL5nVYwfjOusG80lXmS9adYwiQ2hWcJKNprmAOvZNLL5h9lstP0mtP07ZMm/YpvRA95FD9iCHrAVPWAbesB29IAdZOG/ZzvJyv/AdpGlv8l2k10PsgM010lhB2l+cx87QXOaNHaOZicmu0yzjCj7gWx9TvIESBOSp9SPMeVJshpqtYE1Vc9vsebmUKs2O0DX3MNfxzOO2t0WwRPwjDwi1euaJLTIxLstwlqwKlkywaqxtIQWmahWn41ZxiLKeYexj3rbr6bqvySFv515P/fhTkrGcxeUS85/R7PSlTHoIQY9xKGHNOghHXooAD0UhB6S0EMh6KEk6CEDesiEHrKghyLQQ9mgh2zoIQd6yIUe8qCHYtBD2aGHcjCu7VK/WxH1tM1UE/9sP0Zwgzt0l3l5Gi/NK/IavAFvRnfXmffkffkgmsGM5uP4RD6Vcp3HF/OVfC3fxLfxPfxD/gnVzTGqhwv8Mv+Z3yDlHxSWcESKyC3yiTSq3XI8jUpfiOqiGOJ0sn4qbscrIG7PKyLuwCsh7sgrI+7EH0LcmVdB3IVXRdyVRp6Ku/HqiB/ntRD34HUQ9yKLquI+/BHEGYHsKtY3BFIQbwzkUHHkt5Cp4oAbslQcXBQKI94aiiDeFsqG+GbIRnwrFEV8O+SomOYwLuKq2Tjy6ckLkybIRnZe0F9FKUwna6/mDiUobM9LUtiBl6KwIy9NYSdehsLOnOYRVLYHKOzKy1HYjT9I4eO8hnoGhNek8Elem8JeNF8QVKp6FPbl9SnsxxtQ2J83ojCDP0zhLN6YwpkBjwkqb4zCjQG1AvJbiBqGSkq9msqpU7g1RPMNKmNQPdUUkhTeCoUovB1KYoLKRrOfUFVWOOv3mwPYc2wMafmpbBZbxFaydWwL2bH97HN2jJ0hn//nO/t61JNSqK/no75Ukpfjlak31eONSUOmU7kfp1Isp9rKoBpagbgdX4m4PV+FuANfjbgjfxNxZ74GcRf+FuJOfC3irvxtxN34OsSPh+5RMZUxt4qplPci3hrKg3hb6D7EN0N5Ed8K3Y/4diifiqnE+RFX5XPQfnPRcvPQcvPRcgvQcgvRZovQZm+gFRej5Zag5Zai5Zap9gh5qPEYajwZNZ4dNZ6CGs+BGs+JGs+FGk9FjXOmZ2N4uluDrmAY6Tybep2I+vVrY/zyqBArTbY4viLFk9HXsqOPpKi8VSo8R9ZZd9WTlO4lfTIdfQWh2injNmkoxmPk2XBoIgH9omxaCnuJt+St+GO8NX+Udzdak/VJz1wfFgPFcDFOTNMytGXa2sjvkZuRW5HbpF9nG3OMucY8Y76xwFhoLCJdu9PYZew29hjvGXuN9419kWsREdEieiQQCUZkJGT8atwwfjN+N24at4zbJqk98zVzsjnFnGpOM6ebfzFnmK+bG8yN5ibzHXOz+a65xdxqbjOPmMfME+Yp82vzjHnOvGBeNC+Zl80r5o+WtEJWkmVYpmVZYStiZbOKWEWtYlZxq4RV0ipllbbKWGWtB6xy1oNWeauCVdGqZFW2HrKqWFWtalZ1q4ZV06pl1Y5YkXAkEnEibsSLXI/8GrkRyRVJjai9yALw/Rj8vQDNHBqSTespepHVHkB+nSWGkV8XxlPQEXhx2eCb2ViDjWpvaW8xJ/hmcA1zgxuDG1kseC14jeZt5LGw7MpjofnNCeMsK6z8FprNjCPbXZF89/WsJnndh1kj8ryPsodhuxvDdj8C290EtrspbHcz2O7msN0tYLtbwnY/CtvdCra7tXmLrPZjlk2WujMs9TBY6pGRGFnq56mcm1n6n2nRf68F/0fa6U4LGahNhtpMQj06qMdcqMd8KHkxlLwcSt4UJW+BOUqrTM8vYATCGIUNmFrfrcFyJ/b/v+/F/3F/zOw7lEIUPYWhp2ho4SDaM4L2zIb2tNGeUbSng/Z00Z4e2jOG9kxGe2ZHe6agPXOgPXNSu2VnueJ3bwYiCXcfoflmfMSqMY9+ytBPOfqpQD/V4tdagWwJ16bQrCRLC9wZ6dAcGAXoyQH0ZImeTDaEZlCxP7tOau9Wv0/J3HFWHjnz4n4FfvFi72TCVr+n5XZHzObuyrVw2SySOQdUM/kWmO29GpdUxi8mxvlkaqb4FM2EEmWkqcm/nBqXqTQHq7qw89n5GLML24VJUtwmW24/YNNcxX7Ifogl2TXthvSdxnZj5trN7ebMs9vYbVjM7mB3YMlIpZH6xcc/SUVdaeBKE9dUQ1hMtYbYIi5SC12hz1Xcm9LLmlhMx+ckO0KfUwnyiVpRsYVku+izL0uui0FikOaJRSRdTp81WYRrZE/EJIpDWTIh6onLJH2OPj/f/aY4RJ/HqZ3qidIJ301FXk1IXlqkJnxb5UNzPC2nlkcrcPf7/JKYTITssSa0EH5DdOeKwfQJUhkuiMvqPOuKzYLanV8m8ok4qM6zrqASclULjRJk60i2g+5rAc2T70rnkJTmHGK8mOy7y7Ekn0zyAWKIGJmQZx3xFJEh6ldRCdKSojU8QyHq8JIJ8hRBLUYzME0UF2X5truE3RJUdprpacITOUWehHqj2TER9cl9t/347/yKEGpThD6hBPkh8jCoHzD1uXJXzubQXP9T+lt9Dt1tbzaWjeXruHqfh/rsSCC9yPJP5OoX9+qzOIsE1H90xUfyAVy9E0N9xidcVY5GflfekyTq0zfhqlSWyquQr9Ak7pU9GmeZvb4R9Xo1OgrbzaiPp9kt7ZasqJ1ut2PFMEZK2ePt8aw0+nvmSKY5M7MDSYEkurKjGvF2Z7sbjZcn7J4saPeye9NI6WP3Y5b9tP00y2YPtJ9ltj3UHkqjbpg9giXbo+zRLIc9xh7Dctlj7XEs1Z5gT2f32hn2IrqPxaQ31PP9gu6oZdYIjcZzVHlx5BVAXknIy0ReEeSVDXl5yCuGvFKQV07klct+xX6F5c7KcSFyXMHK2Kso3wpZWozyQNgM4cMIWyMcnfnrOtIL6q8HKEzO0ngTmE4ar5fdAEy9TyUNbyZIZnnAH6FSNcdZk6yzpjij/mTXsutA05XENSksX/wapUXvXHX3vGn8POFKvgB3Ugb/meYANoSNpH4ynrzKGWwO+QPL2Rq2gTyCXWwfO0A+wRF2ip0jr+BHdp3d4jr5lzZP5qnkYRbixXlZ8jGr8Tq8EXmZrWl+3fXv/UzSmIJ6UH4K89sFKCxgF6SwoE3a2y5EmlSQPk2jMM0mb8suonqOXZS0prCLQcMWt8nnskvY5HPZJW3yuexSNvlcdmmbfC67jE0+l12WaljpYvK57HI2+Vz2g3Z5CsvbFSisQDpa2BXtShRWssmS2JWpXQRp7SoUVrGrUliVtLWwq9nVKaxuk79m17DJXyPLUIvCWjZ5bXZtqj9h17HJd7Pr2uS72fVs8t3s+tSSwm5ANkTYDVU/tBvRWBE0YpqhfzZXbUe9VNC4SacwnSyEIDvRlsK2NIaE3Y7GkKCRNJ5CNV55ICnhlwQpGIuvZa1l/GsjMidaGx6D3Z7mBC+oMFwWfW8Q45F09jx5egWoFdNJa0zkS/kufoxfFTZ5/LVEezGYdO1KsVecEjc0Tyuu1dM6a89p07U12ofaGe2WnqKX1hvpj+sj9Qx9nX5AvxAQgdRAuUCTQM/AmMCcwKbAp4FLwWAwT7BisEXwqeC44ILgluDB4BVpyHyyimwt+8vxcrHcIY/In0ORUKFQjVDb0KDQpNDy0J7QidD1JCepaFKdpI5JQ5KmJq1O2pf0ddLvRrJR0mhgdKUZ3AxjrbHfOEez1ZxmWbOx2d0cbc6iWeon5kVLt3LTjLOZ1csaa82zNlufW5fDoXDecOXwo+G+4ZfDi8LbwofCP9LMs0Ck2h0fjOqeakmF4bIIy9whqi9T/eVTBOFdkh8kP0h+HykAUgCkgI8UBCkIUtBHCoEUAinkI4VBCoMU9pE0kDSQNB8pAlIEpIiPFAUpClLUR4qBFAMp5iPFQYqDFPeREiAlQEr4SEmQkiAlfaQUSCmQUj5SGqQ0SGkfKQNSBqSMj5QFKQtS1kceAHkA5AEfKQdSDqScjzwI8iDIgz5SHqQ8SHkfqQBSAaSCj1QEqQhS0UcqgVQCqeQjlUEqg1T2kYdAHgJ5yEeqgFQBqeIjVUGqglT1kWog1UCq+Uh1kOog1X2kBkgNkBo+UhOkJkhNH6kFUguklo/UBqkNUttH6oDUAanjI3VB6oLU9ZF6IPVA6vlIfZD6IPV9pAFIA5AGPtIQpCFIQx9pBNIIpJGPNAZpDNLYR5qBNANp5iPNQZqDNPeRliAtQVr6SDpIOki6j7QBaQPSxkfagrQFaesj7UDagbTzkQ4gHUA6+EhHkI4gHX2kM0hnkM4+0gWkC0gXH+kK0hWkq490A+kG0s1HngB5AuQJH+kO0h2ku4/0AOkB0sNHeoL0BOnpI71AeoH08pHeIL1BevtIH5A+IH18pC9IX5C+PtIPpB9IPx95GuRpkKd9ZCDIQJCBPjIIZBDIIB95BuQZkGd8ZDDIYJDBPvIsyLMgz/rIUJChIEN9ZBjIMJBhPjIcZDjIcB8ZATICZISPjAIZBTLKR0aDjAYZ7SNjQMaAjPGRsSBjQcb6yIsgL4K86CPjQMaBjPOR8SDjQcb7yASQCSATfGQiyESQiT7yKsirIK/6yCSQSSCTfOQ1kNdAXvORySCTQSb7yBSQKSBTfGQqyFSQqT4yDWQayDQfmQ4yHWS6j2SAZIBk+MhMkJkgM31kFsgskFk+MhtkNshsH5kDMgdkjo/MBZkLMtdH5oHMA5nnI/NB5oPM95EFIAtAFvjIQpCFIAt9ZBHIIpBFPrIYZDHIYh9ZArIEZImPLAVZCrLUR5aBLANZ5iPLQZaDLPeRFSArQFb4yEqQlSArfWQVyCqQVT6yGmQ1yGofeRPkTZA3fWQNyBqQNT7yFshbIG/5yFqQtSBrfeRtkLdB3vaRdSDrQNb5yHqQ9SDrfWQDyAaQDT6yEWQjyEYf2QSyCWSTj7wD8g7IOz6yGWQzyGYfeRfkXZB3fWQLyBaQLT6yFWQryFYf2QayDWSbj2wH2Q6y3Ud2gOwA2eEjO0F2guwEESwWX41R3iqHt5oGb7UIvNVi8FaLk7fakZXGik1ZrNiUx4pNZazYVMGKTXWs2NTAik1drNjUw4pNQ6zYPIwVm8bk705nTbE61BarQ2plZgELszwsjZVlVVg91oy1ZY+zvmwIG8MmshlYH4GPjzP4+TiDr48z+Ps4g8+PM/j9OIPvjzP4/zjDGgDOsA6As4fp7GGcYVUAZ/D31Xq5XZMkDD67xThPZ8nYD2zMOrL+8ftcwFayDWwf+5QdY+fYFXaD/PVknoen8cz7yFCrDHEPfyZWHGaptYa4ZDYkcxIkcyGZlyCZD8kCSFSKC5GiOlucdbYk62xp1tmyhJxXIo1VWWmszvrWW1lna7PO3s46W5eQxnqksSErjY1Z39qUdfYOzjL7XbIaIXTFVqbZrSjeRnHrrNS2g+2IlzOMdci7a4PdWcDuSf1Nor+FqL/1ZQb6m2UPovlQ2H42a53QtodTr4ui17nodTG6l+LYZUmN50Yjku6BRp/dOi7ZCsk2SNRK5Wh7s29HZFG8h6hVxMzVwkbxdUS19iNEebUeLepg9WdyXJZPkJ8uZsXX7u9IIyKZaWIsHamJcn6V32K6eAqH7iPH+Bm6rq8Y5JPu5QconSoiPb4+f0e+mm+gdArQUUPU85GpfBYLqPdN0VFIFPexwXwk3X8hn6wr76VyF55P2pg/yjTKfS+/5ZOX41WYTrmr45yPpPJ8FK7BqvldaZBHsCe+K1Gq3k9PqXfnY/hin1y9vV7jTXgvPtUnV++219WTnbwF99UP3vStq6d/eEXe2UfU0xQBruPIw2v4mHp/foBdUAfRoj6mnsngPNknU++BFTykdg8SpOo9opzn8cnUW0sFO8GtuFT1sr726v/19XBBvTmfXYNyUntg99ptSLPnwQrk/fG1ckEjs2bWqqUBfZe5S5aBcBHChVl7B//qrkN1pqE+1GjMm/VL5SlgNREOj6+rqvO6f7cuuhx6eEVcd3OqIbUftJ9fwI6V2h3rjvSws8rX8U9IfhD7aHelc0T/zD0rfllUTJCPFekkX4p9tLvSvqIB9qwE3yGsBHlrNbLVjpUwEqQ1RN7MHSs+mZ9IkKepb3H1nOOxBKnHb5CkHEbbmrty9jv/OnOfiq9OkJ5TY4iHMNpGJ8gPYN9JvVFwZIJ0E1dvdz6C/tkiQT6Pq963K/6U5R3py0iRLAM7wgskyPtjD4pGHc+XIG1L1o8z8gPpiusJ8loYT6quryZIi3PV8k3obDj7MEGezFXLqrreF5eq3om9D7seta+GPiXRg/BuR7UC8S/t7QrqMV3srvRtZUUEjahelMMw8m0D9ggaP0EaP6Moxdlke0P2XLK3SfZC6tsGjZnFNOqWkgW17E1kycLxcdEw3tOTcFfqafWA3Zt6IaOxOZDuR1kiYS+jHqrZ68hiBnHfs9ndHajMkdML4dI7a/sUrkXYHeFiqh+NFaBD1eUgpv6pGvOwG981Pmam/Zf3ywVs3Wi6frOtdlEFXfHP0qtJ6TWgOZSJ9Cykp57aSGV33m2s222xA6Jjx6QtdF263ZZl7pNcJb08mK+lI3Ond3pcfoLkHdVzV/yUT76XNH89fiBuKe5I1fNppfkmvtYnzSBpKl/Kp/ukY0gapPE41id9iuIrfDT6911pa4qPkJ1J90lrULyHt41bkjvSohSv5nXi4+iOlOw7m8FLxi3L9P8Ds2vVql1o7GSOAo5RoFFag6iFZtN8M4g+H0KfT0KfN+y11B/N/5bnMe48W6HCpggfQdgEYXOEtRHWQkizKO7gf7QoTva1GfX2QWwc6av97CqPWwGH+pWT3aFZuZMzLmkFSacESWtISBM7ueKSxyBpn/CddEg6JkjaQNIFV8nMX8nCShVnZZGHg3RdpOXh+hiuSXbaUlgAdxZVfd/pjFQD5CvEf0GLnD3cdRR5xnC/Dr6ZEs+/C9JSd+0iFZVqdqV76JoUxpycdF8hyqcAdI/FNK2peueA+obWQGtAakL9Ppnj98nqvbQcvx6oEdcYf4EWaYSntEsmyDTSwuXRXqlZUmqL6CilkTPfAhLtHx3KjOiY6ATmRTdEN2I+w6Pno7dZ5ptJWiRophnI5ymmxkCzBJnG0ulQc88qCVKd1cKhdk8LZclJN0XbRdtRzh2jnaCb/vM7ORA9F78TZb+Kx9N5HXdSHneSmiWj1KLtox3+ZJr0bYc7Iq6BS8JmZaaU8YcUxkVfjqeQHbl0dgL/aS6ZOqM4xVVwqFRnxqUpVDOF4kem/I91cuceBc2ukqObou9EN0ffjW6Jbo1ui26P7ojujO6K7o7uib4X3Rt9P7ov+kH0w+hH0f1R9a4SDffDcD8G7seLp9M/+nR0QHRgdFD0mejg6LPRIdGh9K0XomOjL1IJX4q+HH0lOj46Adeoe9gUxbtLVH/0tntbvW3qTr1V3irGvF3ebnWnfB370unj9HX6Of2dp50BzkBnkPOMM9jZ5LzjbHbedbY4W51tznZnh7PT2eXsdvY47zl7nfedfc4HzofOR85+V3N1N+AGXemG3CTXcE3XcsNuxM3m2m7UdVzX9dx8bn63gFvQLeQWdtPcIm5Rt5hb3C3hlnRLuaXd2m4dt65bz63vNnAbuo3ch93G7iNuE7ep28xt7rZwW7qPuoPdZ90h7lD3OXeYO9wd4Y50R7mj3WnudPcv7gz3dTfDXeIudZe5y93d7h73PXev+767z/3A/dD9xr3ofutecr9zL7vfu1fcH9wfPeFpnu4FvKBX06vl1fbqeHW9el59r4HX0GvkPew19h7xmnhNvWZec6+F19J71Ev3+nr9vP7e094Ab6A3yHveG+O94I31FngLvUXeG95ib4m31FvmLfc2epu8d7zN3g5vp7eHPju8g96X3iHvsHfEO+od8457J7yT3invK+9r77R3xjvrnYvljOWKpcbuieWO3RvLE7svljd2fyxfLH+sQKxgrFCscCwtVjRWIlYy9mCsPLVhDqeb8xRpnWcd6iHOX50T7F435t7PSrll3FqsmtvK7cSauc+741g7d6Y7h3VxV7hr2RPuR+7nrI/7k3uNPetJLycb7rXyWrHJXhuvE5viPeMNYRnei96rbI63wlvNlnjvelvYCuo529kq9JfV3nveF2yNd967xnbGisSKsE9jxWLF2WexUrHS7AvqTUXZFGehs8h5w1nsLHGWOsuc5c4KZ6WzylntvOmscd5y1jpvO+uc9c4GZ6Pzg/Oj85Pzs/OLc9W55lx3fnVuOL85vzs3nVvObZe53BVub/cpt4/b1+3n9nefdge4A91B7jPuq+4k9zV3sjvFneoudBe5b7iL3XfdLe5Wd5u73d3h7nR3uSfdU+5X7tfuafeMe9Y95553L7g33VvubZquca+EV9Ir5ZX2ynhlvQe8ct6DXnmvglfRq+RV9h7yqnhVvWpeda+G95jXw+vpPen18np7T3l9vBHeSG+UN9p73cvwZnqzvNneHG+uN8+b773trfPWextiSTEjZsasWDgWiWWL2bFozIm5MS8WiyXHssdSYjliD8TUe6tstB9D+8XQZgXRZqXRZuXRZpXRZrXQZo3RZs3RZk+gzbqjzfqgzZ5Gmz2HthmJ9ngtc00kpYOyGd7b8daZ6LzqTHJecyY7U5ypzjRnuvMXZ4bzupPhzHRmObOdOc5cZ54z31ngnHROOV85XzunnTPOWeecc9654HzjXHS+dS453zmXne+dK25nt4vb1e3mPu4+4XZ3e7g93SfdXu5L7svuK+54d4I70Z3rznPnuwvc/8fed8BZUWTrn+47d/IUc7u7qmtmYJgZchpyzkFARXIWEMkgkgRkFRDDM/B2zYsKKAoCSlCSgCCKYX2uATGRRBQDJiSDgIR36rs9wyWuuvv87f/9H/3jdN+a6gqnzjn1ndPV1cvdFe4L7kp3lbvafdFd437ibnI3u1vcre4291N3u/uZu8M96h5zj7u/uCe8LK+oV8zL9op7OV6ul+eV8Ep6pbzSXhmvrFfOK+9V8Cp6lbx8r7vXz+vvDfAGeoO8wd4Q72ZvojfJm+zd7z3gPeg95D3s/dWb5j3iPeo97y2RE71l3lHvmHfc+8U74Z30TnmnJUlL2jIk42RYxssEmSiryxp/0OiwXdZ99bW6H2aQYZFhbPUnRSZT9Hsktu6vB2C2Ghq5nrAjmEmJrGL7PkGOluPYyqySfzJ5OcdQvvd6zmfxvMBpPB/czTPJVJ734rgdN1KYLdbtFM/WaRUl8J0vUqKsL+vj2zrcjmipmH3M/YT7Ldxvoih90KIasbhJduT5d6TsxHSU7Mx0tH+CbP9x2YWvx5yVsytydkPO7sh5Ejl7ICf3kEdxKJ1Zr5WHeXUmZqv+3hCerYZ5IxmHcUt4rppAZ/ZcK8Alj5uWcyn9OO9QLsuSI+RIc7+p2RnN43gD32fu6op3RnJ4Pm0RxXZ6jWmFXku2HB6kvIyUV2JSXkLKupiU9Uh5NUi5UN0FbRwVtPEJTivClpvbz9a6K3kYi64Yi25sa1+l7jxf7KJr2LJWo9vY1telqbKBbEV/kW2ZV4/JwVzXXDlHLqSF/kP+dFqh1+h36CW9N6MUbYCWLwziWh6iM9FY1yz85XkgR4NIi6BtxAi1A9mhbiH2rRirXk/h0GhGrPGhm0I3UQLe3k2M9Ir0gnQNoxRIV1pkZGQUCUhpemRKZAo5kbmReeTqXro3yZgxjK65e7Kw1jgn3knmcUhljBx2KjlNKMdpxYi6RjAq0biF+RZm1KfehW8bDQ987Ohe1MZn3RD8Nl86bBNw9qmg3nrso4wKUniUjO1hXvP8wHKU5WWxJlT2KrMmmLGKx1glmBhfYcuKcMsijkNJ7A9ISmGPI5PSnGJOLucp4ZQkBYSvufVVeQ6u7tSkbKe2U4dynfpOAyrhNHIaUynuVWsq41zptKFyTlunHVVwOrIvUQl41XOAP7mc2uDJ1eylkE7X6Wyn2+v2rPMddUf0PzOQlJlsbTy2obPJ53luHmUyyllAxbw0rxnlMGLpyRLUj7VjiDrtP0jjta3jrWSdqFOsIjpNC8vl0iOW1K5Wlq8zdDErSxfXOVaOztN5Vp4upytZJXRlXdUqq6vrGlYFXVvXsSrperq+VVk30o2tqrqZbm5V15fpllZNfbnuYd7Jo4ipidvONVHY1ERJpiZKMTVRmqmJ83BNpExNpE1NlGFqomxTE+WamqiEqYlKmZqojKmJypmaqIKpiSphrGthrG1agBE3KSvozHuvs6ngbQYriKjNNhLOWKgra+TfWKNK6tdYT1pC/9KddB5r1/hx7NEp41E6RdmPy3PyePRLOaUo3qnmVKMEp5ZTi326uk49loeGTkOWhyYstanO5c4VLBVXOVdxae2dDjxT9Gc5djCeQxy24c5wRmfGIgxkKeNZCT5hMcwkxGjZ4+qr83xSkjHt3dSJMex0GoD5ZBhj17dpDGPKBXQTt/xnup2RYTVaCdz3vrxJ3kwfyFvlbPrIf8Q/Tod1qk61eugiuojVUzvasa7WvtZWL52ts60+OlfnWtfofJ1v9dXVdDXrWl1T17L66bq6rjVAN9ANrIG6iW5qDdItdAtriG6lW1tDdU99tXWd4ZUpnUeYS2fp5NJZOrl0nrO4dB5zLp3iTemUYEqnRFM6SwGXzlLApbOV5NJZFrh0Lo1Lp3RTOvMqOmKlEa0xIzaHzrx9MjOIRiIiJyeaSI3xUJivY3i2sNlHGcujW9ItHehzAmO32pTIqK0hJTGeb07JjOKvpBTG7x0o1eA3SmPsNoKKGAxP6Yzfx5HDiDuLDTHjbfIYb+eRYoxdkXyDs0mD45myK9tdE0FLYFQ7n1uwyFnE9uMx7zEe2RneDEpgrJfMMykjPUpipBdBdCbOeDQ81m3dtmx5ZnssoewjPM0zTygqp+xR2ng2GZVmBT6YZyAT0fOnz5Lfj6kkexDfYI+NFMZvfJdBbiy/jziPcMkPew8zJ6Z507hlS72l3LKj3lHmyinvFLeMjTK3zJbxlAxkY6y/xbhtOOYJG72lwK+wqTT3cxGX/4LzAnsW+51DXOMR5zhL+imXR4dt6VzSBmlTFuPrnVSM0fVXlMO4+jTlYjRKMp6uQaV4TOpRaYxJecbQPagCxqEixiGfUfQtVBl8rAI+VmUc/ThVYyT9FFU3SJpqGRxNdcDZeuBsA0bRPjUEem6mrlNjqYWapCZRWzVFTaF26jZ1G7VXd6g7qIO6U02ljupedR91Uw+oB6iHekg9Qj3VdDWDrgHPPcRfDLIxHDc7lyQwx5vxqLVwO1M6e5xduUeG+3ngfjXoXTO2JG/SAIxxppvJuXPdXOZnObcc2ezNVoHttuEVEXBeND5RHrH6PYHFisaRFR9TOHVbYeofNxfZVNf4AVwT+wGsU+wHsPV61HmUrd8Mh+XaeAJs/Z50nmQ5mO3M5hawV8fWj706EsarY7u32FlMDnt1S8g1fh15kBvFnt0q8hmDP0ya5fJxnq3MuJZi5H2CynqnvdNUkVG3RZUM6qZ8g7qpCmtSGnM5Xabz2DvSodrGY2IJYI+JJaA6j3oDuUVuoSZyu9xOTeUO+Tk1k1/Kr6mF3CV3USv5nfyBWsuf5E90pdwn91MbeVAeobbymDxGHeVJeZI6ydOKqLMKqTB1VQkqgSUjSaWwZAglqLeKKIf6KE/51FdlqkwaoLJVNg1UOSqXBqmSqjTPs2VVWbpOlVcVabiqrCrTSFVNVadRqqaqQwbNMkY9M+Z0Khjd+bFjTj8Upv6RYx5xleuzzGa6WSytxVhy49waLttst77biFLdJiz/6Sz/Lch1W7qtWd+vctsz7ujIGpEFjchmjfgbFff+y3uL0cc73kfQjk2s3Vu8razd272vEUe0nIHobz5bLfPO2dGgv88grmi8gmzzLqL1ZWF6AU78Pw3436IBUT9gUTDCzyJudd7sZSIPzPeZzizm+1POHOb1s84CHmcz0xZxnnNWMJdXGm5iPsxgv/4Bashz3jRq5E33plNTnjlmUTPgvMsw8w1m//4Ee99m/ruO578kGi5TmLPjZRGeS/7Ec0kG3QRu3i5/5hbfBeQ22BnMLbvOuY5bNpo9RtsZ54yDDEffFTOfxkvHfE1Rzyr4FX1v0Ql6uYDLyrtgL2dxHU8ZKXI1zxtpblG3KOtarluCtbKOW4d1rZ5bj6T7nruBlLvR3cjz7Ifux5RhoiRU1N3mbqNsd7trYn0n3BOsd9leNpXwcrwcnnPzvDyWrjJeGZ5zK3qVqIw3yBtE5bxJ3iSefw3PKoBnFYEQKoNPVcCnquBTDeZTItUEQmgkb5A3sIxNZOzVFD64mbkJM7d9AcwQxxi1PP826CmCvzn4m3cRFHPGR4zGzxeafHKT3MRlGLm2WKK/itYEtExAxU7MfdFVMotQ92a5me/bKj/l+z6TOznlG5b4pEvcHV3hs9jgIK71CHBQHDAHeSu9ldzf1d5qxlVrvDVAbISIhE0jLFE4/k4hcjC7nKVeesTB/zTwX4DzEXDeAeclOK/A+eLG74uMjph4hUG8FiNexrrOePYE453VzrtsC/e7NstBSbcaVXGvd2+jxu597D90YWS2gK5lZPYaDWVk9hWNdr9xv6Hx7rfuT3Sju9fdS5NN5JtucU96Ft3KWK0r3ckjO5ye45EdT8sYk91JaxGTeN1b771BbwD9/l2OkxPoPf2yfpU+OG/0/xF3ngd35rBeE/Tagl6HoNdx0OsUaHEatFgw5ktiGTLa6kBbJbRVAfP9v8idaAymdRDFCGIUiGwQLTExCubNKpbRfu6NrPv3uA+znj7GM0Vt5kQG66Dpdwcg9suMHsFSRf1I4y86cg7Lb6Y/w38Fz83PlvCl5j7o3K+5Lwd+duwIRlu5DNGtLI+RsXxRvkxl5dvyfazcu5TeJ0TjdOBjMvNxPGN7w8Em4Fpr3/VLUxtwrWDHArP6syCyZ1YENAgs6nJgqS14bl8+Ji1EPAZWPrynglSu10vz8oOW5sk35N+prDrtO5Svt+vtjN5P6pPUPMPP8BH9u1QP0oP4CzeVbbPB+pIRU3G2zQbxZ7g1GTdlug3chmybDW7KBm7KdTszVsoDViohO3JfS8q5ci7P9vPlfKrkH/APclvWcL+r/KFYJ7Ew7liCe2NscgnMmK3QxqGIKY7293PrbkJMcVLMqIwJRmVKzKisCNZDDYoZlRUYFbNGr2PMqKwwUs5ywPLjXc7S4GHs8/QOvYNq6dP6NNXO4H9U5x+Mh48oF8m3eEyF/Fh+Quk++SypfsgPcalhP0zST/KTSflpPOLa93xJ2T7/oxwe8AzK9Yv52ZTn53L9Jf32fgcq73fyO1FFv4vfhcemh9+T8v3efj+q4g/wB1Itf7A/mOr4Q/2hVNe/3h9B9fzR/njspPHHjVwpnluMhVjOtqu8+4n7HdVzj7KNagt+dPdu9m6jQYw0n6IR3vPeMpriHWXLcQfwzTw5SU6mBXKZXE2L5Hr5Ki0H/16QH6tTtMrwz/rS8M/62vDP+sbwz9pl+Gd9Z/hn7TH8s/YZ/ln7Df+sA4Z/1iHDP+u44Z91wvDPOmn4Z50y/OPBYv7Z8YZ/dqLhn51k+GcnG/7Zqf4s/wvb8Y/5x+3OkKMJkK2pgcS8UGgDxsek2HQEe00MiE2zrrAM3mwfkxayatl52DOiQWxO+3goDhGngjSLbP2sNnjNgj7SeX67iTtdBBUyhtNBBCAMexDvlnHLUALiAImIAyQhmpCMaEIm7EEFoKCKsMgNZGfZmdF5d9mdrpK3yjmM0Y2dGA07MQbxyhu4BUnRJ72stz6XlcV+WxpboRzWgI6yE2tHF9mFZX+GP5Nl32ivz31ZR5m/IZrxDqIZ8YURtrHcRzOjhuUQOZQS5XA5nJL9x/0nENnKYcS0lTn0NfsccexzfMv5fpS7KUHukQcoSR6Wx0moMPsWHvsWiSRVqkojXxVRLmUopbIoW5VmH6Ik+xDlqJSqpPKpjKqialA5VZuxeL6aqWZRFbVALaAaapFaTDXVUrWMaqsVajXVVWvVemqk3lHvUAv1ntpAl6kP1UfUSn2ittLlarvaSW3VbrWb/Zs9ai91UQfVIeqmjqjj7OWcZJk3z7HKsN/3EPd1Gnt8Yfh38aw/9/Pc8aD3ICWap4WUxJ7aMcYmJ72TlMrW8VlKkz9z3zz0TaNvGehbFvpWDH3LQ9/Kom/l0LcK6Fsl9K2aqq8ac6+aqWbckzaqDdVT7VQ7qq86qA7UQHVV3aih6qF6UGPVW/WmJmod97YpensZetsSvW2N3l6B3rZDb7ugt13R2+7obU/09ho8MRtoYtJGliC1BKm1ILU2pDYEqY2D1Ia5r3MoHrKYAFlMLPTkCr69vBI+wXJGyqSv0dfg658XQoVOgHaIVkHCYMdgqcrDRjWAjeojNzFv+rFNeIX+BtRucBv5R/2jWLNnSirJ6S0ZqZyZh0z0LrqacDX/LRxFUUBOEsgpG8ipstJcdtUYnHW9wVnIl4N85ZCvHmozdj0cxVmIwDuYjbLQs4roWT48GoPVCFhN4b68oAXvBi0oj5Kro+QWaEHLwohjg0Jk/GLAk9ngyaPcqqPsB2TDD6jMPPGpKnhyw6/qnwX8W4DezLrezoW/DPduotkxT0684D/Rml9VemIUzQFXJwPTZQDTNWUpWEPtgIe7qevUDOqldrDc/eVfyvFfJznRVWBmBV3LQE7XmtHiWZl9QKeH04N5ZJ62wWM16xbQNvZozWoFTrnPvR+rgqPP5gpLs+4PSnvpoqXV5/Y9wKlznHmMsj93djK/9jsH2dM3zx8Fnj+mm/UP5CBy7vEsvplxpImfZ7hH3eOMIE38vDieUeYhil4CzyhL4hllKZ7jb2a/3sTMy8BSlUXkvBzP988zR5Z7y3luecF7gecWY7UqmZUNlI8nE1UQP68K77o6W+of2dP/Wf7MVjVVpVItHmHNtrWSqkR1VD3VkO2SsUhRK9SIrVAftkXXqRFshUyM/TI1VU1lK2Ti6q3YUs9km7tULWVbtEPtoCvZ/hykNuq0Ok1XMcpzqa1fxi9D7fz6fn1q77fz21EHv7/fnzrymM2iTv58fz519pf4S6iLv8pfRV39nf5O6uZ/739P3Q0+oB6wMFeD9wZHEWOn2jxjV9fm/bjo6vVk7ORjvohSVPZkT74fc21V4dUbhVcvIlc6aXk1ezQmT/T8RnB+EaM/xOsXRCYSC/P3DvL3DvL3Lsxvce5zv1i7DuUs8B6/JKI99yvLLweaOJf7OJ/lPQSd8aAzxaAz0IULaIspG6vDqBLKrnzeSopXYFf7m2c+7gjWx+QzeocyHJRRAmWURBmlzytjPcqY6t7LZdzPti/8O8p4lc5f0fHrOfQaOHRvELM1z9SM3fRgN4vBbl7aKz037vQ6pOpz53Mub6eznzX6oGtHn+P+ijKiPXoDXDFP5wlP50O/6e7ofLfCXcN3v8T4PuFX3h2Nf70JS2Y8AmIrcpTtynH3JHupp9k7yPhN7fgvjEtR4zl7VdhTc3/T3W/h7oneZL57Cnsjv5YH0RUif4cWLfuV90Q1zDwftr2VcjIih7F33SxvPivWF63jHdSx9ILxmah8RW38u5CweWzHTUSG7QDPENdjhriH5/373PuiWMdtyZiagKmLFJahgzLeM3U588CT2d4c5slcb0FMXcuCfBtMNMt5ADOHqdFyvnC+YLtxwDkAjNGPx9bUHkbt8ag9gWeUWexfzHHnMJpb7i5nn2Ctu5ZnmmPuMUp1T7mnKA2ziMAsUsTr7vWgdMwlDuYSF3OJh7lE8vyxlBTPHy9QBtYsFZUT5STKhs3NCXibzdzKYQ6HweH0wn7MC/rxPufT/yb9WB70IxMjXaVwpC3sBJlLrakn3cG48RmWoN2WMG+DWJ2tQdYEa6o103rOWm99aH1tHbET7Uy7ot3Ibm/3s4fb4+0p9oP20/ZztsGaZu3Xe1x6cb3XSFPsOjfNFsq9TLM2uV00y5L3tN6AnPuQM3rvRqTsj0n5ACkHkFL4DTD9Osp6C2V9iBwHz8nxBnL8HTk+Qo5D5+T4G3K8jRwfI8fhc3K8iRzvIMcnyHEkpmWbkPJzTMpmpByNSdmClGMxKVuRcjwmZRtSfolJ+RQpJ2JStiPlZEzKDqScjkn5yaRkpMSk7EFKakzKF0ixYlK+REooJuVrpIRjUr5BSnxMyi6kJMSkfI+UxDMpGcnmOqO0SWcZi9PfFl79UHi1G1fREnaiBDumzK+QEocUzh1T1meFV98FJWT9m2hZrLWYSNnAeMUDm3Hut3A3Ir5i1icaDzRZT9OPstc4XU+nkH5CP8m9m61nU4JeqBdSol6sF1OSfl4/zzmX6qWUolfoFcylVXo1pZ1n1T8wes1aaCI5KzLKFr5V82RQ94eYiaZZ5te9MWkhuo2P3fz7psLUPyLea9q53Uj4Hxg9TEDElxDxLYKIb3W0sgsivr0RMxqEiG/B+lsT8e0b+IojYqJoH4GbP2CFXfmYtBBtok34/ocqTOWZA/FdQnzXQnz3Hz0p/P81vlvkovFdE9ntDq+3LyK7Y+D7jofv+ygiuzMR2X0Ckd257A2fovkmtmptRGzVKdTGzGBkPoYMfqZP4XyXvgdjar5ocCbW+gnuMu8394tJsS1t9aEzkdZo2gTsn9sgJi1kDbA3WLXozMrsT+hCkdZUvZc1l/R+ngktfdDMbfowz04h/TPPN3H6GM8oYf0Lzxnx+iS3NyHDYruZlBFmq52SkcBWmK0vzwTmS9DeHxalnc0e7X7/CI1C3NR83TzlovFZE0dzYAtc2IKzorT+Cf8EZfqn/FPYpfx/JlZb859fKwgLH0HM10HMVyHm6yPmm4GYbxZivjmIi5ZGXLQM4qLlEBetgLhoFcRFayEuWhtx0bqIi9ZXtVU9aqKaqKbUQjVXzaml6qQ6USvVRXWh1qq76k6Xqz6qD12h+qq+dKXqpwZRGzVUDaMOiBR3QqS4GyLF3REp7olIcS9Eiq9F7HQwYqdDEDsdhtjpcMRORyN2eiNipxMQO70JsdOJiJ2adyxL/+ZIsYkRp4EXEfDCAS888EKBF1ngRS54kQdelAQvSiNGXAEx4kqIEVdDjLg6IjI1ECOuiRhxLURn6iBGXBcx4nroZyP0szH62RT9bI5+tkY/26Kf7dDPDuhnJ/SzO/S9LSPkIYHGbsLzkjvM+6p219i0cHz4YU5rdlbac/HlOS2/MM2mHhdYDWFWAMRhBUAYKwAS4HcnmjeL2LJ+63zHmrTb+Ykt615nL9vE/eyPp5u3wtjKHnOOk2veCOMZ2XIt8t0B7gDS7kh3JFbHbGbN3enupCxId1FIdzGsJ832ZnmzqDgkPQcR61zIeynIe2nIexnIe1msPKiENQf5WG1aGatNq8Da1oQe1JWvsp2tJ1+Xr1N96EQD6EQT6ERT6ERz6MRl0IkrIAftIQcdIAedIAddIAc9IQd9IQfXQg76Qw4GQieGQSdGQCdGQSdGQyfGQCdugE6MhU6Mg06MZ524jm5Wo9UYmqzGqrE0BSthb1V3qjvpNnWPuoduV/ep++gOrIf9D6yHvVNNZx36T+jQA9ChB6FDD0OHpkGHZkC2noJszYZsPQ3ZmgfZWgjZWgrZWgbZWgHZWgnZWovY7Dpgwx3Gzul97AuRPs7egaVPGPyvT2cw1sgIMQYOZ8QzAk/ISMpIwr4iZ61FxqriFKxESsVKJIEYaBGsHk7HaEewxs7BumGJuKePkczASGZG15AozbzPBe9Lgfelwfuy4H156GBlrC2uirXF9RH3bIC1xQ3B0UZYW9wYMdAW4GVL8LIV1ha3UTsKn0F1BFc6gStdwJVu4EovX/ua+vhLmDfmCU2rX6MvkO1EyHYSepsM2U6BbKdCqtMg1QJSXQRSnQ6plpBqBV744IWGVBeDVOdCkvMgyaUhyWUgyeUgyRUgyVUgybUgybUhyXUhyfUhyU3AzZbgZitw83Jw80pIcntIcmdIcldIcjdIcndIcg9Ick9I8tWQ5F6Q5GshyQMgyYPA98GQ5CGQ5KGQ5GHg/nXg/nBI8mhI8o2Q5AmQ5JsgyRMhybdCku+CJN8NSZ4KSf4zJPkBjNkjGLNHMWbTMWYzMWZPYbTmGJx6/pzAqG0Hz+FH3RMsg1lePntJ/bwhVJ4R3GSqihmjJmaMWpgxamPGqIsZox7sfX3Y+yaw901h75vB3jeHvW8Be98S9r4VVrO0Znx3jHr9ZuTgXWA+6+f1Z+ka7A1muTLalQztSkWr09BqgVYXQasjaLWDVrtotUarM9DqTLQ6C60uilZno9XGe024GEoDxooDxgoDI8XDE4kr+LI5RfdJiKYV7PsQnW02Gw/QrW6o/BFxN6w+9a7GM6uLvG+G95Y66kSdR910Od2AxuhG+mq6sxAtF7xXtMVgLTxnJ9nVvL2o1+q1jE3X6XWMTV/RrzA2fZXxbAIVrHf+da3eijbejLsO4PoW9MM8p7vUW3LENZmSmzFtzTO28cR6BnUkBDUUxYrrgh5sQx2fow7zXpyFPlrs/0WfXBi66nfyioWOBrHnMIYm0GT+fwdNpftpGs2k2TG/nsF64CVBK120rQm1pDb8vyNjjz4sl8NoVMyv8fz3aOvNN+ottQ68uR5tvT2mDz3RtyFneuJitxLnizMc9cx3GmxYpN/bR1HYrj5o53juax/0bhT3zzyDpiBfwbjX4vExo9OVr3qxD9WaCnDVdrTyHkQtvjy3J+5ytHhoYYujY2Pom/h7v4AD//xoMUJADx7kq+gXK6JXCzh1Cdey8rzRasLjZfjQl6+ipUSvJnDq5KB3n/0zvWPtOTOO/2xPLTIrsktSwfPv9KCFO9AelC7NjlWafZ3Rcoy8QY6V4+R4eaOcgLepQ3hvm7zbvTvZLpl3pBMp+j62ecfVvI9t3njF94mt/dYR65fgO48RW9lZdgm7XOjycP/wwPDg8NDwDeFx4RtFrighSokyopyoICqJyqKqqCFqiTqinmggGokmoploIVqLPmKAGCSGiOvFSDFajBM3ij+JW8St4j/E3WKq+Iu4TzwoHhbTxKNiupgpnhBPitniaTFPPCMWiEXiObFULBcviFXiRbFWvCxeFa+Lv4n/En8X74j3xPviA/GR+ERsFlvFp+Jz8ZPYJw6IQ+II9+Naa5/FqMw6bB0myzpuHWfP/rR1mkJ22A5TnJ1ip1DYTrfTKd5mWEEJdqadSYl2np1HSXZZuywlh1qHWlNKuF+4H6WGB4QHUFp4UHgQifCQ8BAqEh4THkPp4bHhsRQJjw+PJ0fkiBxyRZ7II0+UFCVJitKiNClRVpQlX5QX5UmLiqIiZYh8kU+ZooqoQlmiuqhORUVNUZOKidqiNmWLuqIuFRf1RX3KEQ1FQ8oVjUVjyhNNRVMqIZqL5lRStBKtqJToLXpTadFf9KcyYqAYSGXFYDGYyonhYjiVFyPECKogRolRVFGMFWOpkhgvxlO+mCAmUGUxWUymKmKKmEJVxR3iDqom7hJ3UXVxj7iHaog/iz9TTXGvuJdqiQfEA1RbPCQeojrir+KvVFc8Ih6heuIx8RjVFzPEDGogHhePU0MxS8yiRuIp8RQ1FnPEHGoi5oq51FTMF/OpmXhWPEvNxUKxkFqIxWIxXSaWiCXUUiwTy6iVWCFWUGuxUqyky8VqsZquEGvEGrpSrBPrqI1YL9bTVeI18Rq1FW+IN6ideFO8Se3FW+It6iDeFm9TR/GueJc6iQ1iA3UWG8VG6iI+FB9SV/Gx+Ji6iU1iE3UXW8QW6iG2iW3UU+wQO+hqsVvspl5ir9hLvcV+sZ/6iIPiIF0jDovDZHYoTKewNSjsil/iTyU2Ns/S8BVFsgZarN9xq+JWma89xp+kkPnmOZ6lsVZZw+KNZbStofGfEnasiDPPZ62Qea8+k5LjvDgZp+L8OB2XEZcZlxVXNM58186Ky44rE40qs7fa0DbRqejXmKMpV9rDqeBrxrZ1iH62q9g17TqcozmntbM72F3tHnYve4A9zB6V3D15Ev/9gkfyQ2cfXMrZR53zj+RVZx9c64WP5uccLbltZx/tzj+S9519cF8ucqTcffbBfT776HGhI2Xx2Qdz6eyjD44zvweccwzmY9hFjlEXOlJOnX2kpp9zZJxz5J19BP2Lthcl0P99dfrCX502O/plAUVGMWRP1twzOC4WxT1Dz9EKWkPr6U16lz40eJj1of7voHV+F233e+hFvmxt9ga+11gVfM3Q/KpPBTulJhbsagrEkg37YVbHxZm91YMdqJcEVwW7w57Zg7hgX+toGYMo1TwJLkSDsVy200umma9vlQPNB60JWgu0Nmgd0Lqg9UAbgnYCvdrQ3/gdxfGMToO98grRdyz2/ufa1Rz0ivPa+Lt3rIzLxve0/tGXk8dYE6zJ1h3WVOt+a5o105ptPWM9Z771Z6233jRfA7S2WDvM1wIZ3RyxTti2nWiL6NcH7dJ2RbsaS1kjtgRXsAXoyjasnz3EHhH9/qF9J76P+Kj9hP20vcBeYq+0X7Jfs9+yN9gf29vsL+xd9m77gH3UPhWKCyWH0kMqVDSUFyobyg/VCNULNQm1DLUJdQx1D/UJDQgNC40KjQ9NDN0Wujt0b+jh0PTQk6F5oUWhZaHVoZdDb4TeDm0MbQptD30Z+i60J3QodDyO4uLjUuOcOE12OCmtCsbH0FKgpUHLgJYFLQdaHrQCaEXQSqD5oJVBq4BWBa0GWh20BmhN0FqgtUHrgNYFrQdaH7QBaEPQRqCNQZuANgVtBtoctAXoZaAtQVuBtga9HPQK0CtB24C2Be0I2gm0C2hP0KtBe4H2Br0GtC9oP9D+oANAB4IOBh0COhR0GOhw0OtBR4KOAh0NegPoONDxoDeCTgD9E+jNoJNAJ4PeAnor6G2gd4DeCXoX6N2gfwb9C+i9oPeB3g/6AOiDoA+BPgz6V9BpoNNBZ4DOBH0c9AnQWaBPgj4FOht0DujToPNA54M+A/os6ALQhaCLQBeDPgf6POgS0KWgy0CXg64AfQF0Jegq0NWgL4KuAV0L+hLoOtCXQV8BXQ/6qqH/Bru2tqScyJHIz5GjkWOR45FfIiciJyOnIqcj30a+i3wf+SHyY2R35KfInsjeyL7CtP2RA5GDQdqhyGG69A6XpobPIjsin0e+iOyMfBn5KvJ15JvIrsiGyPuRjZEPIh9GPop8HPkksimyuTBtS2RrZFuQ9mlk+yVrsKx4yjlvHhhPE/GF4HvpYZpOT9I8WkTLaDW9TG/Q27SRNtF2+pK+oz3R79uT7diRz0B3gH4O+gXoTtAvQb8C/Rr0G9BdoBtA3wfdCPoB6IegH4F+DPoJ6CbQzZe8dwvoVtBtF7n3U9A/hkPh0G7Qn0D3gO4F3Qe6H/QA6EHQQ6CHDY2MAb0BdCzoONDxoDeCTgD9E+hNoDdf8t67Qe8BnXqRe1eCrro0h7BLanTtm+1QxOywG4r0ZRoXuZbO3RH1HyAjOULfCjoadJzZEU4/CfqfoH/m9JHIMxJ5RiLPUOQZijxDTZ5zVheb55pJ0bV5Z9Vry+HaAp2EXdyexfVE0FuQsgB0MlLuBzX79Z29lxyQo/cKRfddi8GE/MuOjKbormvIFTEraaL7W9xGjbStQzpOh3W8TtRJOlmnmP2zzO5Z2tWellrpDJ2ps3RRXczsoKXNLl3ldQVdUVfSlXUVXdXsn2V2zzJ7Z5mds8y+WWbXLH25vkJfqdvoq3Rb3U631x10R91Jd9ZddFfdTXfXPf7QtS355OlUXUQ7Zt8ona1zdb6uZnaJ0nV1A7M3lG5hdoXCnlD/03tzJWIFcMGOUmUp4s/yn/Sf8mf7c/yn/bn+PH++/4z/rL/AX+gv8hf7z/nP079qvyVBcWYlGP838baL7xxkkYAMsfQ4Iym6jwZaLgcHUdLoryGFfzMlz/BnYs3HpXaxsNmvayY3yc1yi9wqt8lP5Xb5mdk/RH4hd8ov5Rz5tJwr58n58hn5rFwgF8pFcrF8Tj4vl8ilcplcLlfIF+RKuUquli/KNXKtfEmuky/LV+R6+ZX8Wn4jd8lX5bfyO/m9/ME8P5Q/yT1yr9mDRB6QB+UheVgeka9Js+b+f9f+GGY1vtlR0nxJpLTZxwI7FITk9uD8ZXD+CucL73RhvhBhfPLWbA/7si9unp/czz74M+x/r2ffewt9TfvohJVoeVaOVdGqY7Ww2lu9rCHWWArLzaZklB6WW2Out8Vcfxpz/VnM9Y6Y689jrr+Iud4Zc/1NzPWumOtvY66/i7n+Pub6h5jrH2Oud8dc/xRzvSfmem/M9b6Y6/0x1wdirg/GXB+KuT4cc32k8PpS+4hYVnusHG+P5x9D8C2aKYwB7qdHGQE8Q0t4/jffu9mIr+GY/SuPsnImWunsv+ZYZdl7rWM1sVrHSMbm4LwlOG8NztuC86fnSNBnwXlHcP48OH8RnHdeUNJC8uvg/E1w3hWcvw3O3wXn74PzD8H5x+C8Ozj/FJz3BOe9wXlfcN4fnA8E54PB+VBwPhycjwS8PrPrSmvKlT/Lo/KYPC5/kSfkSXnK7E6kLGWrkIpTYRVv1hyoJJWsUsy6AyVUEZVu9ihSrvKUVEqZXfj/lfuvcJuUVhkqU2WpoqqYylbFzd5HKk+VUP/N3reHR1FkfVf1TC4zJCGZTFfPJAFyA7nEgBiB5SZiQAgRYrjITYRwlZshXAz3CIiILLcFZBUBkY2IrPqCogLrIiIishgxKJIsxgiomFXMCwHZvMz7q9OVMNOJn/ruPt/3/fE+9fzOqdNdVV1ddapO9Uyd7mTRVDQTt8idDqKlaCVS5H9ZorVoI26Tb0ASaeIO0Y72kPx733oivase1Rfpi/Ul+mP6Uv1xfZn+hL5cf1Jfof9eX6mv0lfra/S1zP89Ic1YpP4HfZ2+Xt+gP6Vv1P+oP60/o2/Sn9U361v0rfpzunxL5s33g0xlacInd9wammEz7EaQEWyEGKFyx63RwAgzwo0Io6ERaUQZLiNa7r01hGEYHsNrxBixRpzce2s0MeKNBCPRSDKSjaZGM/2w/p5+RH9f7unVi/SP9ZP6J7Sz9+feKLKa9TAeMfKN2cYcY64xz5hvLDAWGgXGo8YiY7GxxLjFaG60MFoarYwU41Yj1WhttDFuM9oatxtpxh1GO6O90cH4ndER5X2oH9f/pp/QP/K/rtFP7go2so3+xgBjoDHIuN8YLHcFG8OM4cYDxgjjQWOkMcrIkTtkvfLLD7/tbSL57HdGJ6Oz0cXoatxpdDPuMrobdxvpRg+jp3GP0cvobWQYfYxM416jr/GYsdR43FhmPGEsN540Vhi/N1Yaq4zVxhpjrTFa7k42xhnjjQnGQ8ZEY5IxWe5ONh42co1pRp4x3ZhhzDRmeb7wMi99H+NXvl1DrhX+YKwz1hvy6yfWdx3Is08ZG40/Gk+zOu944ifZBSH3qnQWXURXcafc0yO6i7tFuugheop7RC/RW2SIPiJT3Cv6iklispgipoqHRa7cxyOmixlippglHhH5YraYI+aKeWK+WCAWin4iS9wnskV/MUAMlPtGRIF4VCwSi8US8ZhYKh4Xy8RgMUQMFcPEcOmPKh4UI8UokSNGizFirBgnxgu5J2i5eFKsEL+Xu7LEarFGrBV/EOvEerFBPCU2ij/KHaNyf5bYJJ4Vm8UWsVU8J7aJ58V28SdRKF4QO8SLYqd4Se4cEi+LV8SrcveQ2CNeE6+LveIN8aZ4S+wT+8UB8RfxtvirOCjeEYfEu+KweE8cEe+Lo+IDcUx8KI7L3UXiI1EkPpY7jESxOCU+FZ+J0+JzcUaUiFLxd3FWfCHKxJeiXHwlzonz4oL4WnwjvhUXxXeiQvxD7kASl8SPolLuQhJXRJW4Kq6Jn8R18U9RLXcjGQeNd4xDxrvGYeM944jxvnHU+MA4ZnxoHDf+ZpwwPjKKjI+Nk8YnRrFxyvjU+Mw4bXxunDFKjFLj78ZZ4wujjP16f/ydLPs39Gfd3vvlvpH98i+3Cfs1fuz/ey//P94LJ389+Y0qG557msm1Anh7eoI2vfGlx4n8rUGweGaXqwhKZcba18Q8t5vr63r9xGuv4Cr0TPDsJT4evMZTW37RrY3lf7C1anfMTlrjvc2OsBOsmJ2hVd73rArrcY07a9d5qTyNd8a6PBMr80Hym1R8Is/ls/gCvpSv5Bv4Zl6IaxV61hGdQHQm0SVEpxPdrGr4OkmziG4lmk90G9HnKNVMVdYWlWeLuqv1dPTPRAuIvkRn5qv041W6Gsmsg3nsdXXFmpIkn+Z5TPFH6ewbROfTsUUqzQTFZ3rWm96viJv1WKDi8myBOrbZ7yqr1bk1iq/3vKVquz6gFv7pftlTXvrZuukfL/mLT4blVzzZvyv8fsPTonM8k6Qfndkq0fK3JylNquXm0alEHyK6lOhaoovkW0uohCmqhCmUc4oqYYoqYQqVMIVKmEIlTKESpsgSLB76cm+fE3obj5Vcit8/dwOkP7LsNdD1ROV1n1DXfcKzEXQVnV9F51fR+VXq/CoPfcEpwI///9Fvc/+XRtwa0vM1NOLW0IhbQyNuDY24NTTi1tCcIKVZRLcSzSe6jehzlGqmKmuLylPDn6WjfyZaQPQlOjNfpR+v0tVIZh3ksfHqultrS5LcHHFr1IhbQyNuDY24NRhxzwaknQnOXWsohVmPBSouzxaoY5v9rrJanatJ8yyNOFnbwJL90/3ymxfke1ATMdKy2CDa9zgBTxQz2Bx6Vvb/vTxwR8FZdo5dZJXsGrvB7dS38le/MmqpMmqpMvqNtox6q4zmjzK6mzLqyzLqqzL0kk2mV9IEoluIvkJ0N9ElRN+itGZvVCo6nuh8otOJrie6mehMoluJyitVqitV0pUq6UqVdKVKulIlXamSrlRpXqneN03INy4G13iP0+jTorfQ2N0irwmK8qOfpyPP05Hn5RHLGyekH2vNP/yBo7emF7ToPVTGHo/0ituj5oI9VPoeqfOg04nirqL3U9r9lHa/Sruf0u6ntPsp7X6Z1vL2Co5RGse64mnI3AF7Uw/k/yZLA+bc3bV6YI7wCyjrJ1yZR/9EsWdwdcjgUppJdCvRfKLPEt1CqWZSqhuU+wbFZO4bKvcNyn2Dct+g3Dco9w3KfUPl/onu8Ce695/o3nFE5Z+gSjfLknnozP/h7Ruc98S8bf3vqIDaoGaWk2PhADscMBIuYZa7zhkPrt0B0QzznPyKs+aOlbMr6CNEtxKdQfQZv/hWPNPHUmxVnTxbiD5B9HH5DO55HKlMPkPxZxXfrLjM2ZpKaa3iW4nOIPqMX1xeuTXFVtXJs4XoE0TllVurK7dWV26trtxaXbm1eWXLW0nqGS/uubJfQNcRlZZnIR1ZSEcWyiOWt5PU/sruftWziJlvH+H01VX5VgTN/Zq0xvp8Ome+ZaQ2B2bD1xhX/yQsR2ppm9vi6VrqvHWVIXVevl1hPNElRAuIvk70GaK7oE89PA8raQLRSUSnEjXL2EP0IaLziS6lfOM9i5n1jSTSSzeUfA6S6ZvXHczvYbu3SzskKbXMdmmBSHqdpElKWk/8YWmBiD/KrG8y4Ww1i6qznyhw1l+E1pFvb3iD6Hyii4hOIDqJ6LNE0b7y/QaIFRDdTHQr0dVE1xDFbCrLknoCPl7l/gOr/z0lAf9P6q2pDq2pvNbmf3kB7wfR0FYNPX/yFHpe8Oyo5bs8L3te9ez2Nve28Mj3tf1r7y+g/268Tma+tcDcUV7ji22+F0B+D6zmV536PehlnmWe5azGf5t+5/OGext6I71RXpc32qt7Da/HG+uN8zbxJngTvcnepuzf62/twfEIr9srUKkYbyNvY2+8N4n9Nu8+85sn9G+pPgr4zpXnHsZMb57Af7z8U45gdlele2F0MqvxoImrPTeShbhzpZXVh7hzTN8C8nwZwWq+Up6q57Do6CnuxdCXoUg5wZ0T3cNV5l4ov89SI4lb3Yt/VbpU0xuF/FMyaq+RrD/IIjzlZs7oPe6HUJ58QjkSLd9AtrjO2VT/s7UeFH519oxg0fWV5xpLd1mbt0661PrT1V7DbNVgPUcfrY/Rx+rjvLco/wjTWyKMMa2rJr+ZJHdw67BogkMHeQyX31lqwfshnsXxtIeV9lOIb+TyKXozfw3x1/kPiF/iPzIbr+SXEb/CqxC/yn8iD4N/Il7Nofncp3Fm0zTNzrgWpAUjHiK/yK410DAWtHANs5kWqUUh7tLciOuagbhHg4XVYrRYxOO0BMQTtSTEkzXcg9Zca4F4S036JbfSWiGeoqUgfqt2K+Kp2tOIP6NhhaBt0jYh/qyGGUXbbLuHcVsvW2/5xd4g2JogdxDuNygmqAfiPYPuYbagXkGjEM8JegjxiUHTEM8LegTx/KAliD8WhDkzaGnQQcTfCXoH8UOh8q8gLRQjMLSZYxLjjsmOyczmmBL+IuPhO8N3Mlv4S+HvIH4o/D3Ej0Q0YjyicQTaKuJqBMZ9Q9YQI72hFpnEeGRyZH9mixwQOQBxudfJFjkochDi90cORnxI5BDE5e4nW+SISGgQfevZFjky8knEV0SuQPz3LjztuYJdY6DHY/X70K3ZGFOa/iBGD9dHoe81fbTxT8aNasOH0StfaoVFiKcz5okuni6ISy8bm2e4Zxzi4+WM7Nkn31njvUVqj5wnmfy+h6lBGnuOPEu4n2cJJ88STp4lnDxLOHmWcPIs4eRZwsmzhJNnCbf1Ro9w8izh5FnCybOEk2cJJ88STp4lnDxLzJYMJv8STv4lnPxLOPmXcPIv4eRfwsm/hJN/CSf/Ek7+JZz8Szj5l3DyL+HkX8LJv4STfwkn/xJO/iWc/Es4+Zdw8i/h5F/Cyb+Ek38JJ/8STv4lnPxLOPmXcPIv4eRfwsm/hJN/CSf/Ek7+JZz8Szj5l3DyL+HkX8LJv4STfwkn/xJO/iWc/Es4+Zdw8i/h5F/Cyb+Ek38JJ/8STv4lnPxLOPmXcPIv4eRfwsm/hJN/CSf/Ek7+JZz8Szj5l3DyL+HkX8LJv4STfwkn/xJO/iWc/Es4+Zdw8i/h5F/Cyb+Ek38JJ/8STv4lnPxLOPmXcPIv4eRfwmnXika7VjTaKeKgvSsa7Rcxd7BotGvEQftYzL0jDtrNotEOEgftadFoH4mDfiXUaGeLRntKHLS/RaOdJQ7a5aKp/SVyr4tGu0wctONFo70mDtr3otGOEwftftFo34mD9sBotPvEQTthNNqD4sA44rCxIZ4QrBTkl9Wc9GU1J31ZzUlfVnPSl9Wc9GU1pyfJ0xwp5ffVnPR9NSd9X81J31dz0vfVnPR9NSd9X81J31dz0l4aJ8bmfFxrAdZWIZ6FWCMF0crFTisXu9/KxY61zg5Q+X4WG1YxuxGXaxY71ixvMTuNaDuNZifvEHSEBY3KG5XD4kfPzpvM8sfnjZ3Edk8Ym5PHDk8eNWMqK4c9tve8KzueNb83c0g8S+vfNz2edRuYDZrJmM+H2SEElqepiocyQ76Rm+Jyn9YtKu7EE1RzFW/AYlgLuSuye7/+8Syyf3b3eKy55Tk7WalY+TYikjjWWHGslZLkP1qNkFKmMo/YsDZuzG6Vv631vh91dNNx6bXURMWiWLx853DvrKxeLDm7373xrM2A7D7x8qvoVIIdq8kE+Q1zqlk0nrlbqzNBKC1JfrudpGCmYz15G2s7Ond6Lk8lmka0I9FuRHsSzSSaPWls3lQ+mOgmovuIniZaJamWRrQj0W5EexLNJEolaFSCNoLoGKITp4zKm6TlEl1HdBfRw0RLiVZJanMSbUy0LdGeRJcRPUb0LNFKSe3BUyZNmWSPIdqMaBuiHYmmE+1LdBDREUTHEZ1KdBbRBUSXKqvx62g8eqE12httzG7Hc8gdeDJsjyed3+GJpBPrzLrgiaQ/G8AG4rnkfjyVDWFD2TA8oTyAtdWDbCQbhTLCA8oIzPGvnW0UcPa31ovTPdZHI/xo/Wkioat34pnsLtad3Y1n0h54OuvFemOF2gcj8F7WT45klSbw3G8/3qDe4/fijFy72mgcYK7DyG7wLx5rgpEbidHpwphzY2wJzBsezBExGP1xaO3GSBGPkZmIMZiM2aUZZpLmmDVaYjZIwYj/d5Tw774nO7uH9cWT+n3kp2zGfykmnxDD/8f8Pb6Cb+IHeREv45fwMBmpxWtttG5aljZSy9UKtKe1ndo+7Zj2vXbDlmJPDJoXtCJoU3BMcNfg3cFljjRHumOAY4xjhmOJY51ju+Oo47Sj2pnmnOyc51zh3Oc85jzjvOi83sDZIKZBywYdG4xokN9gWYNtDXY3ONTgZJgzLCasZVjfsBFhU8MWhK0M2xFWFm4PbxyeGr4r/ED48YiIiJ4RI7F2OBdxuaG9obthcsO0hukNBzTMb7ip4cGG5yJDI1MisyJnRG6MPBB5PLI0siKyOiosKi4qJapzVGbU8KjJUfOiVkRtitoVdSDqeFRpVEVUNVYKca4UV2dXpmu4a7JrnmuFa5Nrl+uA67ir1FXhqo4Oi46LTonuHJ0ZPTx6cvS86BXRm6J3RR+IPh5dGl0RXe0Oc8e5U9yd3Znu4e7J7nnuFe5N7l3uA+7j7lJ3hbtaD9Pj9BS9s56pD9cn6/P0FfomfZd+QD+ul+oVerUIE3EiRXQWmWK4mCzmiRVik9glDojjohQ6wNSTK0atPpg56G3TYdDNOPo1gumFJt9UafLdY/zywNZt2Bkov24PlPdmBspvdQiU95cFyJqICJQ9hwLlmO6BcjLqHOwnN43zOx/MtPZjAuXOuyE71L+w8o64lmny0L3M9L5TJXUdZJF3+cmAK5Tkm60lj2UoPkjxnMAy7tpJ8s19mmaqtYpvUnyH4maNPLApXTG3yV+yR7BxbCr9c7iUrWQb2GZWyF5me9V/VJ+ys+wC+17lflPxw4oXKX5W8YuKXzN5tKZ4pOLxirdVvJviWYqPVDxP8SWKb1S8UPG9ih9R/LTi6vrRN0zudiruobtOpN8x5X8HE1me+iVvLXuabWM76Tf7Q+wYO8nOYK0n/7e5Tv/IuXgMT+QteVvekXfnGfT9H1liquIdFe+l+GDFxyk+S/Fliq9TfJviuxU/qLhqUXe54pdMrit909VOfF21pN5G8e6Kq/rpYxTPV3yp4hsUV/qg71P8hOLnFL9schGseIziLRXvrHhWoDZ26xio0UZfksNIM1Pr0Toz1QHFVX8aJxUvU1z1q1Flco9d8QjFVe3wVGFypV+ernXHk+eM4hcUv0xpGtBvyin0r3o6/Rc9XL09Uv6yOUdx1Ype1Yve7Yq/qvjbiqvW9Kpreb9RXI2LGHt9YzZml+KqT2KOKV5KqTuxeeq//U0B/7AUs1J2jlWwy6ya23kYd/M4nsxTav9BHsCH8zF8Mp/B5/ElsJPrYCm38138NX6AH+bHeTEv5ed4Bb/MqzW7Fqa5tTgtWUvR0rTOWjrNZKhDrNK7WKV3sUrvYtUIjlUjODZH8RmKK72PfVpxdY+xSt9jixVXPRx73eRxYYo3VlxdLy5dcTXO4qYqvkhxpd9x6jpxhxRXPRGnrhOnrtNIXaeRuk4jdZ1Gajw1UrNuo4mKFyiu5tdGSgMavan4ccXV+G2kNLaxmokaq+s0TlO8p+JDFVf301jNfI1VuzVW47Wxuk7jo4qfVlzdV+NqkzdRM26TRMXV9Zr0Unx44LjtzgLHbfxBi3zSIlcE2sC7y/zOQ05PDZR7xNUdifFqlMcr6xF/0ZLn1bp5ElT9EwYoblrDIPktC6xymzPVf4lKTxNTFO+guNKfxKyfybdVcaU/iaq9E5XFSywKbIekrvXW2TKykzYrvlNxVWrS0cBe6JlDKwlTRkiq9pOBZOEnw7Ymz7LI+wLlVhmB8q0LmCPEr/ZpE5hDs7RwmloxpCmNS9sbsLrBkXZKx9sVB5be/og1ZUc1Sjt+H3gfnXIt8puB9ep0nTmC6umdzqo3O6tZpnOu4qpGnc8wR00ZskZdUgPbt0dLi0bhWC9h8kEjTL6xu1+eIMjLmSPUr4znCvxknN9eHKgRd20n2a8VuqvVTPcF9egcSiisNPmLySZ/qcjkf84w+R5P3XFwt7JMd+crvjTgqtDEfeMUr2QOh1/97i4k+RcscrrS3HRlSdPVuqTncMXV/HbPApP3Uul7qfS9lO3KUHYhQ+XvM5Q5nH616XM5UM6cR7WT/4THYL0m/+NVK6xMNWPfq1YkfdWM2lf9h9ZPrQGy4qiEOrqTpVZc96kZ9j7Vcvepmfa+1dYWfOt7k/8lkUaJ069G3WtXkpR3gLJmA1UdBiYrrlaBA5WeDlStMFCtPQaq2XqQsrL3X7DW4e2pJn83kupQ206DY/zmXykXWOS1FrnQIu+zyEUW+QLJATo3+JrJhyi9HpJSN80Q1VtDlN0ckldPGmWrh6hZcci+etIo/RnyjcmHBtdNM9SjeDvFB9STRvXAUNXLQ7fVk+Y1xdVaZOjlummGqXYZ1lzxXvWkUWNj2DzFN9WTRq0UhylNGHYpYIbiea8FyjM7Bsqz+gbKjwTacZ4/0SIfCZTnrAiU524NlOdpgfL8SIs8OVBeYKnfQkv9CgKfVvmjswLsJV90OlBenGqRlwTmX3wmUH5sZKDFHHrUz5LAAowI8xs3UrZYzJHfBMo55YHyaIs8xiKP9fhdD2FsL7JcPy+PsMgz/O5Hysst8lqL/LTfbC7lbRb5eqA8LssiF1rk6kB5fLZF3mGRbwTKEwZY5J2B8kPMb36X8mCL/Gpg+omhFnmERd4bKE8Ks8g5FvlNv/5HmBxhkSN/4fxvla3luerKfr+P1ZWFRfZY5DiL3Ngix1vkZIvc3CKnWOQ2FrmtRU6zyO0sckeL3NUid7fIPS1yhkXua5GzLfIgizzUIo+wyDkWeZxFnmCRJ1rkyRZ5qkXOtch5FnmGRZ5lkfMt8jyLLJ8/nVjdNKfvA0ZgDlzEmNZGy2ILte3aZ2yr7Vnbs6zYPsP+HDsV9EnwMm5z9neO4m85H2/A+dGwyLAe2t1hw8I2a7PDx4RP1P4SvjB8hXY4QosI1U5GXI24qn2OWbtK/rcY/Gn43npDEcKZ8HN+4aIKRfWEy3KvggrNEToipCNMpLDRGsKLIrZFvBa5QYWtfmGnDFGs3uCMyqoNy6PW1YYqM7ji6gmpCGnSW7U2bDcDnbEE92730dpwQi9DuCCDsNcXXKnCJZoby/3COgqH6g1FxvWa4HF7YmpDugoZ9YYsCoMUDwwFisp0RygU1wYz91nPJW9L7xjvZu8OGayle1+uL5ile9/0lqtw+WaQV/Fep2sVSDTKTOpYGzKTsmvDGBUmIhQkTUxui9CtaWrT9KSJoKlNDzU7esunFC43H4qQ26IZQkqL8hbXgPIWN1oebbVZhhblrQ60utjqYoo9JSLFnbIPoTi1K0JW6tDWm1R4+7aC25vd/k3a2nZpCF3be9oPbZ/fYbcKBzoc6VDcsSVCh45LO5V2CaawusshCtVd23XdpcLeLtWQd3W9RNKlO7U7ta677kzptrLbgbtSewxGOHvPhC6rzdTgl8xUvbvKdL0zMxIz2mR0zdjRpxmFrD4TKeT3WdpnE2h+n2MIZZlzMgsyz96bi7Ch70ikyup7ou+JPsdAS2UMobxvRd/r/QooFPY7TuFsvwrgbL+qLHu/KpyvyBqaVZpVft8MhLXZ8UhX2K/KPJM9p19V9rns7wdmDToyePADrgfiHmg23j5+6PjT46/X8AkpCLunRk5NzM3PXZR7MLc8tyK3app9Wttp6dPGTcudNmfasmkbpu2atnfa4Wkn83Lz1ubtyKuczqa7pveanjP9wPRPZ6TNyJmxaeagmctmvj3z8qzgWSmzes7aNevCI+mPXM+Py++ZPzI/L39T/sv5p2cnzh4+e+/s07OvzwmbI+Z0mNN9zpg5hXNOz205N33uiLkb5+6cWzq3al63eXPmHZgfPL/b/Lz5r84/Mr96QcyCCQsKF1Qs7Lgwf+HLBVk/M1fttc5HgbNNwaybQc4jBVtvBnMG+Zmxl2EdcYHjxNT0emedmpnHLwTOHQVHbgY5OxQU3wzmvCDn0MidniPGOszDZ7pewqxJczBxzLdRWZhfN0Zsi9wQXlQ7ZyJtVFXSGJk3fG/Exptzp9lKmJ3Taf41UyVGbKtpPXlUzsWU9ow8T+lVC6LcveHnMJNvQ44zVFoRarcB/AyFm9bhosUqpPvZgZuWYJusd53Zf2ed2d+p5vzlNN/TLE/lIHdEOuIba2ZC9McO1V+Ym8z5x5zfVD9iTsQMKHttTO3sWNOjmOM8GQXlMsfNPk7KLigvKEdpMtVlnMvylidl19UJzIPFfjNqPfOs/7xad05VM/cR0iZzFs2smT/lvI4juGpBhXcHjmR7stql9T0h7KYdIw6bZVzXy6BVrhrrU2NVXHHCftMCmVopbRultssUyHtIuOQZeUSmksddceFFNZrqiXHFwQK6ZH4ZN4/etKP+llTWhaymspt+ltOFEqx2cl2AdSxSltFdU3ucv25eXV6/T5Ze5klHfQJaX7aabGP0lN+IrWljcyTK1jQ1JWkM2jtD9qZsCU+W+2nq7x2yb/xGdUfvy7jXGgtbbJZaUOEpKKgwg7yC5EnZsldkzNQ0yQsqmqYmtzVhWrjktmSV/IK0cKZ1I/v4PwxkU/1C3RRkaf2Csri1oW4OaWl/WyBb/KtDrcX+mWBtKRlq7fjPBLLsvzrQauNXBmvr0BrFL9RtP1q7+AWp92ZP/7ZQt+Rfrt2vC2Y7y7VLxLYuwRmJXarDz8hVD4XVdCRYrnRIWp2RKNdA6hwCVlAd5KrJPCrnfhmTgVZHg2llJddQl7peovURVkeIHeqymlYnBbWrGBkK+xX0Le1XIFcwJBWqdY4ZL8QqqFwekSsama+vCrTimUFrI6Sls4WSel9G6kK5msJs0axvKa278lXIoiPN5KqLpKy+pXJeUucQsHJrg7WaXKHJfEsphkDrtFxazyEtrdRq12t9su7UqEWqZVvcN8NsiS7BdD+osVnTPseobHmlpVQWlRs4Euv2qL8e3PKpKbFgftB3xnav74BtIGtoG8zCbHm+H21vs/ZMw5kiSOcpVmEb6DvHOOhVpoF+YBvsK2IN2Eu+anbYV81Hsmg+imXzHOblo1kCH8Oi+CQWhZRpSHmnbbLvr4yjnK+YHWnDkDYKacOQ1knlnUeq75mDj2BxOJ+E8wNxvhHOJ6GspigrAbmfQX3OsgaI7UZ9o2zzUI/5vjdQ3462r3xP2c6xNrbzrK3ta9bK9q3vY9tF6SOE0otQejmzI6bZBt/4J2qzDiW9y/JZQ5bBIoGOrAXrBIzxfczGAuOA6b6v2QzfZTYTmAU8AuQDs1kYm+M7yeYC84D5wAJgMfIvAR4DlgKPA8uAJ4DlwJPACuAt1p3tA64hfgPwsRacARzIYp34fUA20B8YADzE+vEjrAnu+CHbINbZNoyF2h4EJrNltoWsse1RFm9bzBrbt/hO2rcCzwEnWQv7J0AxcAr4FPgMOA18DpwBSoBS4O+sRVCk7+OgMt/JoO9YWFAF4v8ALvlOBgexjOAW4LezFsHtwCf7Pg6eAkwFHgZm+r4OngWgbYLRNsFom+A5ANom+BXWKfhV4A3gKusU0pI1CWkFPMhahIwEcoBpQB4wGygAHgXQRiGrgTXAFuA51j3kJfB/AN8Dl4AfgUrgKoA2DB0NjAHGAjNZEwdjnRxu+a4o6MoF6LWTYt+i168yHVq7B1q7B9rWDNp2F7RtEbStP7QtB9rWG9rWDam3Q19SbYN8K233++ZAg+6A3qxHCSNtb/sKbV9Bz84zm+0CdPBbNoz07BxSlWKZWTMqRrDWfuX3QvmzUH4PlN8eqYei7HUo+w3kuh1lb0DZz6C8AyhvEItAKT+glB9QSiRKuQWlTEUprVFKa5TSCqXcglqeRUnNUdIYlNIWJeygO/0AsVeYB2X8FWX8FWU05w/69qGc1ijnQZSThnL6o5w7+UO+j1BWa77R9yZy7kd5dpQ3CzUbhzKjUbPFKO1JW7nvMmp3zPYNRuu37FbbRTVio1BqS5T6EEptj1J7oNRklNgcpX2CnJ9g5N2LuxzIGqgZ5r8wk8iZ5Y9ssa+CLQEeA5YCjwPLgCeA5cCTwArgmO8a+xA4DvwNOAF8BBQBHwMngU+AYuAUcBr4u8/HzgJfAGXAl0A58JXvQ3YOOA9U+krYf2KcXwauAFXAVeAaZrefcP468E+gGvgv4Abq4vNVcAZwmhW/sg2Fhg33/WAbAT7S94P9pK/C/glQDJwCPgU+A04DnwNngBKgFPg78I3vmv1b4CLwHVAB/AP4HvgBuAT8CFQC/wlcBlAX+w3A5/swyOX7MKSb71pIDyAD6AP09X0dMgB8IDAU54cBI4AHfRUhI4EcYBLOTQPPA2Yg/giQD8yGPA+8APxRYCnijwPoh5BV4KvB1wB/QHwdsB7YADyF8rfg+DbEtyP+EuKvIL4fQB+FoI9C0Ech6KOQEp8vpBRAH4Wgj0LQRyFlyPMlUA6gj0K+9ZWEXAS+w71UAP/wFYV8D/yAc5dQ9o9AJXAZMvoupAr8KmT0UehoYAwwFv2lsZXMTZbLxlZCdwdCh6X1CoL0Z0gZkHpDyw/bPmKtGMfRKpYOzSyBZpZAM0ugmSXQzBJoZgk0swSaWQLNLIFmliD119C0a9C0a9C0a9C0a9C0a9C0a9CiCmhMFTSmChpTBY2pwvUO4noltgdYkG0UkAMNGu37ClpTAq0pgdaUQGtKoDUl0JoSaE0JtKYEWlMCrSmB1pRAa0rQk1XoySr0ZBV6sQS9WIKeq0KvlaDXStBbVeipKvRUCXqlBL1Rgla/hla/hla/hla/hla/hlatQKtWoEWr0KJVaNEqtGIJWrEKrViCVixBK5bQiD3DQtCWd2Ekh8L2/gW293VbEWztx7BCsDbUvhdxhx/jDr+k9p0HyQMpDu27CCV8xgbDTibATibATibATibATibATibATibATibATibATibgSu1gK5NhK5MxZosxZosxZosxZr/EmL2CMXsFY/YKxuwVjNkrsKcujNnzGLPnMWbPY8yex5hFf7M+sJtpGKdfYpx+gXH6JcbpF7Yc1sw2GpjMlsCONoEdbQI7GgvbmQDbmQDbmQDbmQDbmQDbmQDbmQDbmQDbmQDbmQDbmQDbmYCxeB5j8TzG4nmMxWKMvSsYc8UYc8UYc+dh4xJg4xJg3xJg3xJg1xIwVs7DtiXAtiVjrJyHfUuA/hdD/4uh/8XQ/2Lo/5fQ/y+h/1eg/1dg/1ywfy7o/3nofDF0/gp0/jxsYALsXwLsXwLsX4LUd18l2roS67OVvsfQA70wn3+J+XwmeqIXeuJPOLsC2t7DdhIrqWLfDdsplkO9V4LUZ5DqNCzmSt8CSDnIexJ5P8HRbsi7EnnfR94M5C1GviEsWI2j+5HyFFIWI2UGra+kzrxAJY3F+Ttx/gTOf4rznVDSEzj7KkrqjpKOoaQ2lP5zWieeJVrFnLwha8KHApOBKcDDQC4wDcgDZgDLYemj+EEWjqssQun5KOcDWhttZYZtP7vD9g76v5wlwWr3xyrRBcsdg1Viku0bzAzfogYXcew7dgfseZ7vHeQQWFMmSpuO/JNZb1iwodD5Yay3bQStvnqzCNQsFjWLRc1iUbNY1CwWNYtFzWJRs1jULBY1i0VON3JORU43ck6lnOHIGY6c4cgZjpzhyBmOnOHIGY6c4cgZjpzNkPM25GyGnLdRzjDkDEPOMOQMQ84w5AxDzjDkDEPOMOQMUznTVM403Mkw1hKxltTGe2iNcBWtVYIWzgLuA7KB/sAA5sTazYm1mxNrNyfWbk6H9Hqxo4WjkSdLrTQOUx99yYp5c185bwG0BFoBKcCtQCrQGmgD3Aa0BW4H0oA7gHZAe6AD8DugI9AJ6Ax0AboCdwLdgLuA7sDdQDrQA+gJ3AP0AnoDGUAfIBO4F+gL9AOeBp4BNgGbgS3AVuA5YBvwPLAd+BNQCLwA7ABeBHYCLwG7gD8DLwOvAK8C/wHsBvYArwGvY7V2EPwd3xl+CHgXOAy8BxzB8fd9p/hR4APgGPAhcNx3gf8NOAF8hBXEUDytjPAV2d/DSuII8D5wFPgAOAZ8CBwH/uY7ZT8BfOQ7FRTlKw9yAzogAAPwAF5fefAq4I8A2iB4s+9CcKHvh+AXgB3Ai8BO4DUcfxccq83g9xAv8p0K/gTpTyNe5SsPaQQ0BpoA8UCC74eQRCAJSAaaAs18p0JuAZr7zoS0AKALIdCFEPR7SFvIt+NcJ9+FkM7g2b4fQjVfeagNsANBQDAQAoQCDsAJNADCgHAgAmgIRAK431AXEA3gvkNx36G471DcdyjuOxT3HRoDxAJxAOofivqHov6hqH9oApAIJAHJQFOgGerU1nch9Hbgd75ToR2BTjjWDegJ3AM8iHQ54ONwbjzSTQAeAiYCM3FuPrAAWAgUAKtw/HmkfwHpd/jOhL4IeSdQiWNXfOUODuBeHdG+Uw7ch0P3XXDEQ4fmcrQOR+twtA5H63C0DkfrcLQORw6O1uFoHY6W4ZG+r3kU4AKiATegAwIwAA/gBWL+m5d7j4+zrvY9/nQmTdJkQrmW+6XcBBSQuwJe0G1FkSruDRtxq9lHQFOoIlAKrenFIIiA5U4RKiBVA9hWGwsCNhQotk1JSdrm0rQ0adMhyXSSJmlmMm3B33lPduWg55zXOf+c88fHZy7PzLPW97vW+v2eIdWe9SgcjWMwHsfiOByPE3AiPoKT3GWfjFPwUXwMp+I0nI6P4wycibNwNs7BuTgPn8AncT4uwIX4FD6Nz+CzuAifw+fxL/gCJuCLuBhfwpdxCb6CSzERX8XXwrZRl+Hr+Ff8Gy4X9xX4d1yJb6Ay9I6agZmYhdn4CapwO36KO3Anfgb3G6PuC8Oj7scDeBAP4WE8gkfxSzPycTyBX+FJPIWn8Ws8g/n4DX4LK+CoajyL5/A8fo8FWAizdpRZO+qPWIwa/AnLzPLX8DrewHK8iRVYiVWow2r88xS5PPynKX2ldWCsyX+hdWCs6X+hqd1YYOIVmHgFJl6BiVdg4hWYeAUmXoGJV2DiFZh4BSZegYlXsNA9yiL8AX/EYtTgT1iCP4fegpfwMl7BX7AUtXgVy/AaXscbWI76KFGwBm9HidH7RSWjD4xKRx+EcTgYh+DQqLTwntBbeG9IF87x+BGP54auwsesSTwYmWZPeU8uhb/xnpgLxVwo5kJTunBR2Fb4Byz2Xg3yU+4F57/otZe8/zJe8fwvEGehOEem3wrP67y32vEtr9VjDd5GQ5QoXOfa7u0K3dsVNnutJQyPTMo2sbmfK+zyWfcshWmP7a4L7a4Ld8A9S6F7lkL3LIU7MYQMsnIbDtuK9gm9RWOxL/bDIWG46FAchsNxBI6MSoqOwtE4BidGiaKP4CScjDO8dqbjWbDKFlld/2vqRoniWFRaHEcBRqMQRSjGGJSgFAmUYR+Mxb7YD/vjABwYlRQfhHE4GIfgUByGw3EExFkszmJxFouzeDyOxXE4HifgI6G3+KPu0T6GU3Ga53YKxWd4/PdJfLbH5+I8fAKflMf5+IrHl8J9bvFXfe5rYXnxZfg6vhGGi78jzmud989T2v1usfvd4qmoFMMMzMQs59/l2vp/ZGo/4jjX9z6GX+Jx/M73VePvU/x5r/GwOOOze8LwmChsGzPKXqk4pMfQc0yJ435ePyBKjEx2K9SYg712CA6FeTzmiPzvkvlO37uvqtShTSN7tNc/eP0HXr9t5HeU/H6rLxoduzj8R/zS8IbdaUn+ty3v9UYfi308pGJn4zx8BheHxtiXwurYJbjUrvzysNnuYpPdxaaSK8PqkqtwZ0iV/Ax34ee4G/fgXriXK5mD+3A/HsCDeAgP4xE8irl4DL/E43gC8/ArPImn8DR+jWcwP6QSHw2pKC7SbOxK98Q3uoe+QPwZ8Wdi54ek+DOxzzveFbbEfu7e5ZvRqebXqc5cXfKvIVnyb7gC/4Hvhi0lk3A9foAbcDPuDBm5ZeSWkVtGbhm5ZeSWkVtGbhm5ZeSWkVtGbhm5ZeSWkVtGbhm5ZeSWkVtGbhm5ZeSWkVtGbhm5ZeSWkVtGbhm5ZUq/HLaUXoKv4FJMxFfxNVwWtsg9w8PzQguH3oqN+BhWjvxyeLTcq+VdHftmWBi7GpNxV1hGg2X5+2+5V8u9Wu7Vcq+W+zK5L5P7Mrkvk/syuS8ruTUsLLkN0zEbPw0LxbVMXMvEtUxcy8S1TFzLxLVMXMuiizhQwYEKsXVyoEJ8wypoSAUNibNdJK0iaY1f/reh+JV/y1hdyjhzutWljDun773HX666hlTXkOhaRdcqulbRtYquVXStnKngTAVnKjhTwZkKzlRwpoIzFZyp4EwFZyo4U8GZCs5UcKaCMxWcqeBMBWcqOFPBmQrOVHCmgjMVnKngTAVnKjhTwZkKzlRQoJUCrRRopUArBVop0EqBVgq0cqYi+jwVyqlQzotVVCjnx6rYxdGRsp8o+4l7f2+9e+/99ClUGEeFs6gwjgpn7f2V+Bu8WsWrVbxaxatV1JhIjYnUmEiNidSYSI2J1CinRjk1yqlRTo1yapRTo5wa5dQop0Y5NcqpUU6NcmqUU6OcGuXUKKdGOTXKqVFOjXJqlFOjnBrl1CinRjk1yqlRTo1yapRTYyI1JlJjIjUmUmMiNSZSYyI1JlKjPCpSC0MyTsj4fhnfIuP9ZThDhlOjQ2m0nD7LadNMm2Y67E+D/b37oPyXy3+5/JfLf7n8m+XfLP9m+TfLv1n+zeJoFkezOJrF0SyOZnE0i6NZHM16pSL87p/m3VB0auwyM+5KVJhzk8y463A9fLeIOz6YdZVmxsywunR6SJX+GJWYgZmYhdn4CapwO36KO2A2lpqNpWZjqdlYajaWmo2lZmOp2VhqNpaajaXmYqm5WGoulpqLpeZiqblYai6Wmov7jEEJSs28/GRPjcSe0eNJPZ7U40m65e/TT/TuWr2b1LtJvZvUu0m9mxR7RuwZsWfEnhF7RuwZsWfEnhF7RuwZsWfEnhF7RuwZsWfEnhF7RuwZsWfEnhF7RuwZsWfEnhF7RuwZsWfEnhF7RuwZsWfEnhF7fmZdGTZQ+y0Kv/bBzMpn1B6dKaMa72/1/jA33uPGe9x4z7ntzi12bqlOKZHpaTqlRLan7f0N6K8ceo9D78myRpY1sqyRZY0sa2RZI8saWdbIskaWNbKskWWNLGtkWSPLGlnWyLJGljWyrJFljSxrZFkjyxpZ1siyRpY1sqyRZY0sa2RZI8saWdbIsiY6RyZVvFnJm5WxiugI/qyUwXd1wC4dkJXJ7TI5eO8vMwfnf5mRyaP5X7N4t5J3K3m3kncrebdSVlWyqpJVlayqZFUlqypZVcmqSlZVsqqSVZWsqmRVJasqWVXJqkpWVbKqklWVrKpkVSWrKllVyapKVlWyqpJVlayqZFUlqypZVcmqSlZV+vjKkT7+hCze3vvfnCaI+kFRL45K5Vsv33q51svrIDkd5J2H5VMvn3r51MunXj71UWFsCl9vCbtiU8O7sdvVxb2hL/Zw/pd2r+6O3R6y0Sj/uys62RnZ2K0q4jbcHppid0TFsTt9+p7QHXskKovNDXtij4U9pfa3pfa3pUfiKByNYzAex+Jq51yDa/E9fB8VmITrcD0m4wf4IW7Aj3AjbsLNmIJbMBW34jZMC3tG8tkt0s5YZeiSy7bYQ2FHzJ1edFXsRtV+E6Z49VZZ3oaZoSE2C7PxE9weHRS7IyyKzXHefaEjdj8ewIOYG16S30ulsfBWaRwFGI1CFKEYY1CCUiRQhn0wFvtiP+yPA3AgDsI4HIxDcCgOw+Ghj4Z9NOyjYR8N+2jYR8M+GvaVnh8aSi/AhfgUPo3P4LO4CJ/D5/Ev+AIm4Iu4GF/C1fK4Btfie/g+KjAJ1+F6TMYP8EPcgB/hRtyEmzEFt2AqbsVtmBZeigpUzmYqrqPiltgjYUAt3R4G1clw9DUu5LiQ48BuDuQrbIsVJ2vFyTojS+UclXNWmKwVJmuFyVphslaYrBUmS/0c9XPUz1E/R/0c9XPUz1E/R/0c9XPUz1E/R/0c9XPUz1E/R/0c9XPUz1E/R/0c9XPUz1E/R/0c9XdTfzf1d1N/N/V3U3839XdTf7dVLmuVy1rlsla5rFUua5XLWuWyVrksdXPUzVE3R90cdXPUzVE3R90cdXPUzVE3R90cdXPUzVE3R90cdXPUzVE3R90cdXPUzVE3p+duUd35Xqyk6QzVfXu0D7U7qb2V2juiG2hcS+Nald7tzJW07qR1Z2ya55Whx6cGVX5a5adVflrlp/nwPh9q+VDLh4HYL8IKHdCiA1p0QIsOaNFLb5kNf+VRE4+aeFTLo1oe1fKolke1PKrlUS2PanlUy6NaHtXyqJZHtTyq5VEtj2p5VMujWh7V8qiWR7U8quVRLY9qeVTLo1oe1fKolke1PKrlUS2POnnUyaNOHnXyqJNHnTzq5FGnDknrkLQOSeuQtA5J65C0DknrkLQOSeuQtA5J65C0DknrkLQOSeuQNI9reVzL41oe1/K4lse1PK7lcS2Pm3jcxOMmHjfxuInHTTxu4nETj5t43MTjJh438biJx008buJxE4+beNzE4yYeN/G4icdNPG6KKjiY5GCSgzv5/ToXd3CujXPbOdfHuT7O9XGuj/8J/i/mXpp76djdXruX03PCAg52c7Cbg90c7OZgLwcH1MlSLrZzsZ2LaS6muZjmYpqLaS6muZjkYpKLSS4muZjkYpKLSS4muZjkYpKLSS4muZjkYpKLSS4muZjkYpKLSS4muZjkYpKLSS4muZjkUh+X+rjUx6U+LvVxqY9LfVzq41Ifl/q41MelPi71camPS31c6uNSmktpLqW5lOZSmktpLqW5lOZSO5faudTOpXYutXOpnUvtXGrnUjuX2rnUzqV2LrVzqZ1L7Vxq51I7l9q51M6ldi61c6mdS+3Rx7mU5VJ2pBv/y4UhLgxwYYADWQ7k75sGqDtA3QHqDlB3gLoD1M1SN0vdLHWz1M1SN0vdLHWz1M1SN0vdLHWz1M1SN0vdLHWz1M1SN0vdLHWz1M1SN0vdLHWz1M1SZ4A6A9QZoM4AdQaoM0CdAeoMRKeYDO+ZDO/p/rT1vCR2tyzukcVI9B4/grnW+8es24fb1R2BI3EUjsYxGI9jcbVzrsG1+B6+DztIWg/TepjWw7QepvUwrYdpPUzrYVoP03qY1sO0Hqb1MK2HaT1M62FaD0ffp3U3rbtFnBZxWhekdEFKF6R0QWpE/793AN3/p8q3g4/lf9n431d7Nz+6+dHNj25+dPOjmx/d/OjmRzc/uvnRzY9ufnTzo5sf3fzo5kc3P7r50c2Pbn5086ObH9386OZHNwXTFExTME3BNAXTFExTME3BtG5I6YaUbkjphpRuSOmGlG5I6YaUbkjphpRuSOmGlG5I6YaUbkjphtT/RTekOJTiUIpDKQ6lOJTiUIpDKQ6lOJTiUIpDKQ6lOJTiUIpDKQ6lOJTiUIpDKQ6lOJTiUGpkje8f+a+Q5/Iqzau0aZM2bZK0T9M+r3Gaxmkap2mcpnGaxmkap2mcpnGaxmkap2mcpnGaxmkap2mcpnGaxmkap2mcpnGaxmkap2mcpnE+x7Qc03JMyzEtx7Qc03JMyzEtx7Qc03JMyzEtx7Qc03JMyzFdmq+FKbgFU6He5JiWYzra1yzO/GPPqLS7Rzo9a6Zm/089Yu9+iz2qO1PdltBthbpti047SKeVRBM/mChTrMaVmOG+/HbXuiv0q+x+Z+f0Zr/VecinTqNwlsJDH9o19avuftXdr7r7VXe/6u7//zRt+lVfv+rrV339qq9f9fWrvn7V1///dFeUv1vJUWrFB/ctQ1F872s5Lu2JLqdtHW3r+NfLv17a5u9s2jgxmr5d9O0amX9zPH/IPcLDdkpzvfZY6KJrF1276NpF1y66dtG1i651dK2jax1d6+haR9c6utbRtY6udXSto2sdXevoWkfXOrrW0bWOrnV0raNrHV3r6FpH1zq61tG1jq51aqpXTfWqqV411aumetVUr5rqVVO9dO+iexfdu+jeRfcuunfRvYvuXXTvonsX3bvo3kX3Lrp30b2L7l1076J7F9276N5F9y66d9G9i+5dpfk8p+AWTMWtuA3TQteIxrv2dkIuOiC2JBoXe82O83V1+UaYFVsRqmM77TMyYU5sV2iIm5zxU929nh4Wxc8OyQ/+WvmKaN/4v0eJvX9T2J3YGNZwbL7vXYjXdcAbYX1suUp/Eytcc6Xj6rAxtsad7npXa3JsRnc0JtajUzP2uFk7oWHsDgPxKHTEi1CMQ939nx4642eEnfEzcRbOCdn4BWFrojykE9eE+sR1MCMSP3S8IWxM/AhmQmK6Y6XjDNhDJ6pgxUzcC12ZmOP9B71m9iUe9XwunvAd88OuxLO+fxH+EHYm/ojFXqvx/CVHOSUavNaItWjxvBUbPd6EDuf1ho7ETgyHjrIDQ1/ZQRgHd4dl7g7Ljvf6pFBfZk9fJq6yO8NQ2b1hZ9nDeAzPhL7oy3tVbeNTjqotVO2lai9V36PqNqq2UrWFqjup2kLVFmpmqTlIzUFKDlJykJKDVNxFxQwVM1TMULCXgm0UbKFgCwXbKNhCwVYKtlKwjYKt/6RgGwV7KdhLwV4KtlKwjYJtFOylYC8FW6jXS71e6mWol6FcL8UyFMtQLEOpDKUylOql1CClBik1SKlBSg1SapBSg5QapNQgpVr2KtVGqV5KZSiVoVSGUoPRsbHnwvTYkvAHStWqwT0U+i1Vtsc2h++psymxnvCk6r4iNmSnvSt8Wp39NR4Py+OF4RfxRPiBam+KHxjGx4+Oro2fEG5W+cfGTwufo9ozqn+Cmns8/ukwI35R+Obev85qj/97eCp+ZZgUrwhL83+/JKuXzaTXrBJvYEV4xxXf5cdmV0y6Qo9v7feNW33jDr10gV76lDvC5zj2Wmj0qXy/vDXSI93RUT691idX+eQ2sSXFVuob1o/0w9lhvU++Flb51Ls+9YJPHOATW1yvfaR/3VWP9PDR+vRUz08Pm32qQ5TLoyNV1s6RTy5XWW9ipYpZ7dNrVNV6u8gmx+awTXVsUx3bVMY2lbFFZWxRFVtUxU5VsVNV7FQRORWRUxE5FbFFJeRUQk4lbOPcNs7t5Fp+8ndH+4inUOTzXe851/2zXF/CyrCbrpvomUzcGrK+f9D3D/r+wcRjnv8qZH3PYFTgU0Miv9Entubr3k74ObNkiVzeCA1e3RhrNEfyGm4OKbo1+t4W39sSXemqc5w9S091jlTLn0Olq1f65AAldlNit2/opESgxNDevhqixFCsNSz0jTUqqSGWVj0lODBcEx/HjYNxCI4LN8WPxwlhe/wkPp+MU7lH9/hnvH/RyN8unyGaM/ReJ3WHqDuk9zopPEThQOGg9zqpUEnpQIk5lJhDiTn6r5Pau6m9m9q7qR30X6f+66T6bqrvplYl5YcoVplYYBItxCvhpsRyx7dQjzXYgDa84712xy2+Y2u4qSwKfy0bHRaWFaII4z0/EZNMqNlhjh7s5ObuskfC1rJHMRe/xLywMCpVkYOqcSunzzJ93jd93jd93uf6eTr9fZ3+vk5/X1e/Hx3Bj7yXWdr3077fpwrNqAEzasCMGpD7kNyH5D4k735598u7X679cu03XwbMlwGzZcBsGTBbBtT3gNkyINYhcfabFQNmxYBZMTCqxBVnq4BHuL+M+w9w/4HYUo7W4rWwIrbcqvgmVoRnVMGe2Fqvr1dbrWFKbEP4S6wNG7EJ72BzuDPW7rgVnb5zm2MSXeiOZquWmljK4+1Iq7xexz7sCDfF+jHg8SB2hgqzqcHkbjW5W3XwFWbUmtge772H98PS2N8cg1V4FGLIz68C1Tba40JzqiTMipd6nAiTR+bZWMd9sR/2x4HhAtV6sWq9WLVebG29I35YmBo/3HtH4OjoG/HxjsfiODPveJwQ/iN+oucfwUmen4xTPP4YTg2fNyP/02RZwLXZXJvNtdmq/VLz8t74uc45D58IP4l/0vF8XBBmxi90/BQ+Hb6lKy6Of9bji8KNOuOKvX8xu0CHTI1fFR0S/zYqwtvm6+8TFaEhMQk3hD26ZI8OeUCH7FEls1XJbFUyOzHb+z/Bz3AXfo57onGJe/ELzHH+w157BI96PheP+Z7HPf+V45NhcuJpPIP54Y7Eb8JUq9nMxHOeP4/fY0GYoKsmWOFmqsDZKnC2/cEdVrmZiT+FnySW4AXnveS1V5z3F4+Xotbryz1f4fWVvrfOa6vxltfqsQYNvqsRa7HO+S3ObcUG77XB9Fbds3XthMTm8BedO8EqOlP3Xqx7JyQ6vaYGE2ow8S7UYaIbPWFZQh0m1GEiDTWY2IF+DJgAg8h6nAtLE7uw2+P3oeYSas5UmFWm7srUXVk8LC0rcBwdppgSU0yJKWXFno8xPUqgBssSYVlZGfbxeCz29fp+2B8HeP3A0Gqlb7XSt5Yd7PsOcc6hOAyH4wgc6dyjvX8Mxrv+sV4zYU2jWWUzQ4MOn112ZzSujNdlvC7jddnduAf3eu/BMFXnzzapJphUE0yqCabAbNNqQtnjvmeeuJ/0nc/4/vme/wa/xe/CTdF4U+JGU+KPIyvz6yPr+ZsmQZeOn6Ozv6Wzl+jaRbp2lTU3o2Nf1bGdurJRN9bpwqW6cJ2u+4LO+rZOWqRj7tUxb+qYLl3ysC5ZpwtqVf9vVP9XVf8y1Z//lwrnqvi3o/9mXj0rkt9bsdbGFlmllpgJf/baS3jdOveG95aHZtOz2cq1zMzqtXItsQb2irbH6rXE6rXE/Jov8jfNqR6RrzGLlou61bzZat5sFXmXeb1e5DvM7PVm9nrzZLnoF5gFC8yCBaLcI8qv5/c8Vq+1if80aa8JS6xgS6xga61gS/Rmr97stYKt1Z/P6s9e/fms/nxWfz5rBVubuN3nfoq7cU9oNtWbTfVmvdlrNVtrNVtrwjeb8M1681mr2RK9+axeWqDuF6jzBWq6x3qy3nqyXt32WFPWq9UedbpcXc5Xl/PV5Xy12KPWtqq1rWptq9rqUVs96mqrutqqrpZbi9arqeVWuCVq6lkr3ForR7P6mK8+etTHVjvIpeqgFq/Zoa0If6b0NqtDo1r4nGm+yTTfpB5WU7WDqg1UbVATL5rcmym70qTeRNmVlF2pNrarjXdN43Wm8TrTeJ0a+ZgaGTZl20zZNrWyQZ0kTdZ6k7XeZK1XM02m6QZTtNXkXGciNpqIjVTfRvVt1N5mAjaagI0mYKMJ2GgCNlJ2m6nXaOo1mnSNJlqrKdZmirWZYq2mWL0pVm+CtZpgG0ywDabVBtOqzXRqM53aTKc206nedKo3nepNpw2mUpup1LZ3KtWbRm2mUatptI47K02WTSbLJi6t5NBK02Wz6bLZBNlsWmwyLTaZDJtMhk0mwyZONXCqgVMNpsJmE2ATpxo41aDzN3Fqpc5v1PGNOr5Rxzfq+EYd36jj63V7vW5v0+1tur1Nt9fr9jbdvomLDbp8ky7fpMs36fJN7om77Y7z++qzw3vRObosf591nY6aq6Pm6qjX+TxL1+zi62/5WsPXGt2S4msnXxfydCFPF+qInC7I8WIWL2bpgBw/Zqn4nCqfq8rnqvK5vJilynOqPKfK56ryuap5F70W0mmhat5Fq4W06qRVp6reRa9OlbyLPjX0qaFPDX06VfMu1byLRjU0qqHPQtWbU71zVe4uOdfI8Y1wr4odlsFSz3aKPROeU5ubo8NkttOzpMx6ZNYjs35Z1ZsDKZnVy6xedDtFVy+6etHtFF29qHaKaKeIekTUI6Ie0ewUzU7R9IimRzT1osjfy/ZER7tSxpU2uFLSlZKu1E3D/D1qg6sNuVqDqzW4WsbVGlytwdUyrtZAi0FaDLpqhhaDrpxx5aQrJ105SYtBV8+4esbVk66edPUGV8/fHybdI2w2L3eGt2X9tisPueIms+wlE7fFxM3fH7w4MnELnTW09x4qtfffMJ0evzI6c0S5Du9s8k7HyLP8vd2eER1H7/3UoGdp39/s+wfshlvtadMU3i3PEkpEGG1PWogijPf8RMwL/b5j84gzjc7eaBXJxzgUneg73vTOn+k36Ltedsa7f7+/H1lvIvOlCMUoCS/L6jLZfJeOg3TcTMfNdMzfX2+m36AYXhbDm2J4Uwxv0vIf77sPxxEfuv8e7/zj9eKJjvOc/6TX8vfco+TcFx0svgExDYhpu5i27/0FZ4foe8S1Q1w7xLFDHDvEsMO1B1x7wLUHXHe762533e2ut931trvWDtcZcI3t0fG+/RXZ/1XmKz80ZdfTeYErZUemasnIX4r8dK+XG2Rfkf+Lnr9PHxmvdNVXXPUVV33lfzl58pNmvPPyU+ZEx/zEmOfcf54YY0ZW0Z32AbvcWxfy9fJww96/7njblb8x8hejZ4p7szNf5Fq9+4Jm8b9KpUUfmiD5laGVUvN4nV9336XWPGrNk8+rvvVu37aQi/X2bs0UnEfBeZysp+I8HdGqI1o5Wi+/V3VFqxw3y3GzHDdztd4erNkerNl+q/mfJkcrl+u5XP/B5BjvO44P8+T+qrw3c7l+ZHocTvWNVN848mtExhTZFd4QdS/lN4q4V8T533B6qb2R2htF2SvCXipvpPJGKm+k8kYqb6TyRgpvdKVeCm+k7kbqbqTuRupu1FUZU3e31U/1qLBMeDWKWQV32yntiuJ2Iys8G/CsKxrvWZ97mJz9SZ/9SZ+VcthKOWylHN77G2HKnqXfPj5nxUtZ6VJWumEr3bD9es5ql7JHz9lX9NmT56xuw1a3YavbsH13zr47Z2UbtrIN23f0WdlS9h59VpphK82w1WU4GmMt3yWSJ6zdfdbs/L7uXVft4+AzHHxmZKqMsdoPxQ80SU4NaRn0OCsdPycaa8K454nOcJ3WqMD3bPM9+d9cc/kMZJwY+QUhlT+fEgfqp3NCzuv5X2Wd4XNbo4M8y2c/JPsh2Q+NZH6VvcK3Q9OHMh+S+dBI1g2OjViLjdgE2clsSGZDMhuKjnG1NfTN0LeFvi0fvjN37bSrJGmbcYWkKyQ/uBtfPPKLX5K2Gdq20DbzD3foLZ63jvwKOHKnTtsWV0/StuXDd+vRKJlnouPjZR4dGJ60W+qzW+qzW+oT0wtieoFaGTumHjum/K9rvXTabmfUx4H3OPA8B553H7m/+8j8X0fmdz09dj094nrB7qbH7qbH7qbH7qbHbqbHbqZHPC/YyfTYxfSJ6QU7ih47ih47ih67iZ6oSDR/dOWdrphzxZ2utsvVVrva6ug4726hW5cYN4hxgzOze3/D/h8OnWNnd4G6vogO80MXDXfTcPcHLi32Wo3nLzm+Yqe1wvHDrrV43oq/u/eOczqcvzVs+AcXx1Gtg2odVOugVAelOsTdvvc3qQ6KdFCkgxod1OigRgc1OqjRQY0OSnRQooMKHVTooEIHFTqiw+T5jhzfkeM7ctwhx/VyXCfHdXJcZ6ear7p18llnV5myq0zJ5R07y3wFrpPLOrmss5NMyWOdPNbJ4x05vCOHdXJYJ4d1I/+K8rj4d6LjornR1eGx6Bpci5vCU9G0cH80HT9GJWagM8yNtiGJQefsCvdFu7EH7+H9cN+ok0LDqJNxCj6Kj+FUnIbT8XGcgTNxFs7GOTgX5+ET+CTOxwW4EJ/Cp/EZfBYX4XP4PP4FX8AEfBEX40v4Mi7BV3ApJuKrqIgOHrUsvDrqtfDiqNfxBpbjTawIS0etxCrUYXVYWvBkuL/gKTyNes/X4G3IteBvCOG+0fuGx0bvH+aOtssebZc92i579ME4BIeiI9w/Ou2cXvSH+wtPxrm4PjxWOBk/wA8xJTxVeAvoXjgnNBQ2hKWF7niKTgxLiz6Ck8KLRSfjTJzl+YW4Kswt+ia+He4rehTz0eH5FmwFz4p6wlNFKezw3pDn2XBfcSw0FMdRgNEohJ1isZ1i8RiUoBQJlGEfjMW+2A/74wB8MiwtPh/f8fhax1mOv3OsDi8WZ0LDGN815gD7429F+4c10QEw/aKDMA4H4yM4CSfjFHwUl+AruBQT8VV8DZfh6/hXXIFv4OrwhMp9QuU+oXJnRDeHedEU3IKpuBXTQrVqrlbN1aq5WjVXF/w8rCm4G/fgXvwCc3Af7scDeBAP4WE8gid97ik8Haq5/sTolrBm9Ca8g3Z0eP1dxy6kvd+Lfq+9H9YUFqIIY1CCQ3AoTsCJoEMhHVRHdeHZjuc6XuD4RXwL38Z3UI7rwxMq5wmV84TKeULlzFA5MwrlWyhfFVRd/MO8NtH9oSF6AA/iITyMR/Bb/A7VeBbPoQ6r8RbqsQZvowGNWIt1WI8mtKIzLDYTFpsJi82EVdFODCGDLIaxKywyJxaZE4vMiUXmxKKC7tBQ0IMUtiMNdycFfdiBfgxgEO5YCoaQ/9zfEMIi/ba4yCwo0vtFer1Irxfp86KJYVXRvzlejquc8018Oywqus7zmzEFU3Erfow7cCf0WxGNimhURKMiGumnRUW/dpzvuMjxFdChiA5FdCiig15brNcW67XFem2xXlul11YVbUcaO3x2yOv00HeLRp0WFUT7RaNRiCIUYwxKUIpE/v9iEvvg/GhcdAGuDtPV+HQ1Pl2NT1Hjk9T4JDU+SY1PUuOTott8w7QwWZ1PVueT1flkdT45qorGRrfjp7gDd+JnuAs/x924By9FR0UvozNM4+g0jk7j6EMcreZoNUerOVrN0eooJ+JdoZKrlVyt5GolVytH/TI0jXocT+BXeBJP4Wn8Gs9gPn6D3+J3qMazeA7P4/dYgIVYhD/gj1iMGvwpNMU+Ho2NnRGNi53t+BlcHKbHvhRuil2CyzyvCLNjk8L1setwfbjenu2S+DfDzfZtl8S/43hzqItPCY3xhmh0vDE6ML7OrrfJXXlzVBLvDNXxbfYiyeik+LuOXfn/byDH7dH+BTdH+xVMwS2YiltxG6ZhOn6MSszATDwZJpsXk82LyQVro7EF67AeTWhGC1qxAW3YiE14B/RU7ZWqvdKsmT56v9Ck6qeZMZNHb49KzJfp5st082Xy6D3RfoVxqK3C/XEAjsPJYXLhKY5n4KxonJkyufA8j68P082P6ebHdPNjuvkxxfyYYn5MMj8mFaqlwmlQS4WPhabCX478C/qmoiNxFI7GMTgDE0O1Tpum06bptMqiH0Vji27ELMzG/XjU6086Ph0dpZsqi573uMP5W7AVak7nPKRzHtI51Tqnuqg3GlPUhx3OH/K++tNBlUXD0djiA0NT8UEYh4NxCA7FYTgcR0CsxWItFmuxWIvH41gch+NxAr7ru67GNaj0fAZmhqYxo0JTyZXhppKrUBmuL5kJfVOib0r0TYm++e/EnQmYFMXZx6u7erp6enqWa1nu+/KI8YjRSNQ1ZtWoHBJFERBQMIgCciu3NwjKqYCieHB4YBDFi0M8CB6JgsAAw8AisMAuw9ILCMuxy9T362b104jR5MvzfDvPv6e7uo63qt963/9/xBmXfeOyb9zHwQQwEUwCzNedAqaCJ8CTYBqYDmaAp8DTYCZ4BjwLZgHWx30evABeBLPBHFEpNhyMACPBKDAasLYx1jb2AGB/x9jfMfZ3jP0dw84YdsawM4adMeyMYWcMO2PYGcPOGHbGsDGGjTFsjGFjDBtj2BjDxhg2emeKSllR4IIY8cGUq9kpBUSj4Cz47pEa5j1EM49o5hHNPKKZRzTziA0escgjmnnhKw6yQFWdggGkYAApGEAKBpCCAaRgACkYQAoGkIIBpGAAKSJfNSJfNZhAGiaQhgmkYQJpmEAaJpCGCaRhAmmYQBomkIYJpImSPYmSPYmSPcUd2he9wJ3gLtAb9AF9wd2gH+gPBoCBuhcRtR8RtR8RtR8RtR8RtR/RNI9omkc0zSOa5hFN84imLtHUJZq6RFOXaOoSTV2iqUs0dYmmLtHUJe9uIe9uIe9uIe9uIe9uIe9uIe9uEcHnHS+DV8CrYLGoReStRf71yb8++dcn//rkX5/865N/ffKvT/71yb8++dcn//rkX59o3Z9o3Z9o3V8UomWLwB6QBntBMdgHfFAC9oMD4KCeTmSfR2SfR2SfR2SfR2SfR1QfSlQfSlQfSlQfSlQfCqdPwumTcPoknD4Jp0/C6ZNw+iScPgmnT8Lpk3D6JJw+CadPwumTcPoknD4Jp0/C6ZNw+iScPgmnT8Lpk3D6JJw+CadPwumTcPoknD4Jp0/C6ZNw+iScPgmnT8Lpk3D6JJw+CadPwumTcPoknD5pXCdyjHbgz+B6cAN4WifIRAkyUYJMlCATJchECTJRgkyUIBMlyEQJMlGCTJQgEyXIRAkyUYJMlCATJchECTJRgkyUIBMlyEQJMlGCTJQgEyXIRAm0xCK0xDK0xDK0xDK0xDK0xDK0xCK0xCK0xCK0xCK0xCLjC+EaX4JVYLVwyWIeWcwji3lmy+D/UeX9j7z/SY8mm7Uhm7UJs1knXWz2AL3Ibt/LamYfXUxmu4TMdieZ7RIy251o8YlyoP6rXKo/lstFlvyI7LcaPb8Gnb5O1CDLpclyUm5E35/MdBEyXdPwOybTlO8l8wwSHlnOI8t5ZDmPLOeR5TyynEeW88hyHlnOI8t5ZDkPJp2GSadh0mmYdBomnYZJp2HSaZh0GiadhkmnYdJpmHQaJp22pmvfmgGeAk+DmeAZ8CyYBZ7TeWTOPDJnHrprEbprEbprEVnUJYu6ZFGXLOqSRV2yqEsWdcmiLlnUJYu6ZFGXLOrCM314pg/P9OGZPjzTh2f68EwfnunDM314pg/P9OGZPjzTtw7rYqsUHAFHwTFwHJSBcsCeIDMPJTMPJTP3JDMnyMz90X9J9F8S/ZdE/yXRf0n0XxKVkEIlpFAJaVRCigyeF9mpfZRCCqWQIpP3JJP3jGBTBJvI6HlkdA/VkIpkuNbatwUwgAmk8Mj0HooihaJIoShSKIoUmd8j83soixTKImXXpW490ISyZlw3B8RaVEYKZpAHM/Dsc7iPD8IOqqE6UjCEPBiCh/JIoTxSKI8UyiOF8kihPFIwh54wh54wh54wh542cdQmjtrEUXsgGAQG616wiV6wiX6wiX6wiDz0bBImkYBJJOxZ4Tcy5dgLwVvhtzLl2Ct5/0ovgmUkbJ4lujdpHxE5MI4EjCMB40jAOBJo4UVo4UVo4WVo4WUwkAR6eBl6eJH6vXDRxIvQBT66wEcX+OgCH12wBZYyD13gowt82Ep/2Ep/1VkXq1tAFz0UfeCr3pyzp1RfcDfoB/rT5wDAvNAOW9AOPtrBRzv4MBwXhuOiIXw0hK/GUX98+K2CPqzHRU/46AkfPeGjJ3xY0FBYkAsLqoWu8GFCQ2FCLtrCR1v4aAsfbeGjLXy0hQ9D6g9D6g9D6g9D6q920vcusBsQ6xWxHtY0HdY0HdY0D9Y0D7Y0FLbUH7Y0D7Y0FLbkovWTaP0kWj+J1k+i9ZNo/SRaP4nWT6L1k2j9JFo/idZPovWTaP0kWj+J1k+i9ZNo/SSsKwHrSsC6ErCuBKwrAetKwLoSsK4ErCsB60rAuhKwrgSsKwHrSsC6ErCuBKwrAetKOOdh02/ARXqR0xJ0pe/uXPcAt4O/UNaT9ztAL3AnuFunYWgJGFoChpZw7qPNRMpfou7LepnzCuevgsM6GRUiBwaXiDK3aDW9KFpduO71usC9AdwIOug2MLs2bmfO79XF7lAwHHzL9O7n/GEwRngwPg/G58H4PBifB+PzYHwejM+D8XkwPg/G58H4PBifB+PzYHwejM+D8XkwPg/G58H4PBifB+PzYHwejM+D8XkwPg/G58H4PBifB+Pz/h8Zn/cDxlddTNAXG11Ea6ObuN64Vdxr3CauMLqLi40e4ibzT6KD2UvcKNvry2UH/Qe5RM+Ty3VruUN/DjfMlkQ4uVtPlkX6U7lH1JFp9NZeXSoaiAmZFWK+Xiv+ptfS+6UV3wZ7Ab2fSe9n0vtlRi9dSm7dxSioOVRZe92SUS5hlMFymV4q3wfLM8XyQ/02OW6j/FivlCv0BEZ/iJGPyl26kNFbMvpERpeMPovRVwhHrtJz5FfYhJKXa3V3uU4vlglabdCbyYr58NT5+hNs+4SaN5M7V1F7OrWHy7WZDLVfoPbV5NG3aXEPLZ4Ov9vxbKwdSTavR/a+2mxNJu+le5l9hTRfhSev0LeZn+oZ5lbxW/MwGTlbVJJn67lymfDI0mczgzcY6VP0qJRr0Zrr9Vtk6Qi9Z5hRgkw9vCJTywpNKplZodzDrNKU79X7jJuEpReLCLCBAg6IAhfEgAfiIAtU0ktFZdBSbxa/Bw/qheIh8DB4BIwBY8GjYBwYDx4DE1jDxXqNWKLXGKbebEhggQiwgQIOiAIXxEAcVAZVQFVQDWSD6iAH1AA1QS1QHzQADUEj0Bg0AU1BM9ActADX6XyjHfgzuB7cAEaCUWA0uA/cDx4AD4KHwMPgETAGjAWT9CZjMpgCpoInwJNgGpiuN5nn6IXm+SAXtNPvmY/qlDlOp/Dy9jyVYvysHB9byJMoxsfa4mPlsjRTJI+wI45qJY9ljsjjmc2yTNuyPFMoT+hcmaFc61pWJFNk2fpyS2llOZkjVjSz2XK1bcUyhZanc6045VnUG6QXW4PBEHAPuBcMBcPAcDACjASjwGjwot5szQZzwFwwD7wEXgavgFfBfPAa+CtYAF4HC8Eb4E2wCLwF3gbv6XxrMVgCloJl4H2wHHwAPgQfgY/BCvA3sFYvtNaBBFgPNoCNIAk2gRTYDLaAfL0wUqYX2xLgv3ZEL7Wr8l4NNAFngHPBb/Rm+0LeH9P59jQwg2vmac/lnPnYzMdmPjbzsV+nbCF4EywC74LFlC8BS8EygO02ttt/5/wf4AvOvwSrwGqwAWzUm+wU9wrBXnAAHATfgEPgMDii81UWqAQqgyqgpt6kaoHaoA6oC87Xm9WFoL9eqAaA+8D9YDJ4Dryg16j5vB/RC50WOt85U292fs37Oby3AW05v1lvcrpzvwe4HTxK+QzKnwJPg5lgPijTm6JC50er8M7+irKvorVBXb3Z7a5T7p2gN+gL+oFBgP3ust9d9rvLfnfZ7y773X0cTAATwSSAve4UMBU8AZ4E08B0MAM8BZ4GM8Ez4FkwCzBH93nwAngRzAZz9MLYNToVuxa0Aq1BG9AWXAfageH6vdgIMBKMAqPBfeB+8AB4EDwEHgaPgDFgLHgUjAPjwWPgcTABTASTwBQwFTwBngTTwHQwAzyl3/PO1Auzovq9LBfE9HvCIlcsJPKn5Xrxa+JyuXhSDNMzxXAwAowEo8AxnUI/p9DPKfRzCv2cQj/76Gcf/eyjn330s49+9tHPPvrZRz/76Gcf/eyjn330s49+9tHPPvrZRz/76Gcf/eyjn330s49+9tHPPvrZRz/76Gcf/eyjn330s49+9tHPPvrZRz/76Gcf/eyjn330s49+9tHPPvrZD76Fy/gEOz/VxWjWYjRrMZq1GM1ajA6dgQ6dge5ch+5ch+5cZ87RReG/jzz5r462m0f0drJZkiw2U64WDciX28hgj6HhZqLhZqLhZqLhitFwxWi4QD+l0E8p9FMKzeSjmXw0k49m8tFMPprJRyPNRAfNRKfMRJPMREPMREP4aIRitIGPDihGBxSrM3RKnRl+H2cx3D/g8il4dgpunYILp+DAKfivD//14b8+/NeH//rwXx/+68N/ffivD//14b8+/NeH//rwXx/+68N/ffivD//14avF8NVi+KoPRy12BtP3fZy/FHxrmvbhmz58sziazX7qoGfAMWfAKdfBKdd5I3WRNwqM1kXxbL09Xh3kgAagIbif8tl6uzDJKq+R1+Fxcom4SC4Vt8gPxPnyQ1GT9X1XfgyTWiFayFWiDWvdBl0fgTFciravKhPiPNb9a5hDfXjODkoLxBnwhTbwheaySFxJvx9XfJZ9JiN9pOdTf2o45kLu3QmrWCqyKPucq9XB91L++Lt0jV4i99Tfp4s957I7LmbUVuTDq7HhZMm5ZMsjlF5OtlxKtkyH31G8VxiMXCDqcnVp+JliDeo2w4bgtwh2i7Oo8WuuVotcZpjNvfrMNfjWtw76SzlItMT+j61L4GsmJZ9x9Q9qk5vghCVc5XPVW8S5Os7VZ6KFsESuiAAbKOCAKHBBDHggDrIYsb2oLjvC8bqA3sxpKTzwQ3jmR3qNNUjkWoPBEHAPuBcMBcPAcDACjASjwGiRi5bPRbPnotlz0ei5aPRcNHku+jsX7Z2L3s4Nf/8iDrs9xEj5zGK3/IAnGfyayUf6HdjtXuY+iDVZgl3vU4vZMve4qGp8JZoYa8Q5rEwX1uGPsiO1OolOskv4HXOdZG/9UfCtRHKI3iGniQvkdHEh4/g86WYwmQXWReI8q6U4h9XqJOrToj7jnM/THCQaMtK+YPxwpHjF75p8KjvT+hbqd+P9Vt4H4WFf6U1w5GL48bHQfzYIh1ZS2MEvoVA7h5o51IxS06dGicgRBURROJTYBW8awEjBMx2i18G7i3nqlYi4a8L+EjzB9bSiz4ARR6rqcjR8ORq+HI1cjkYuRyOXo5HL0b7ljNleFwX/xxM9nsFOUWFv6/UhUeMHY3YmZnUDfZjbIJj4an0A60qYh4/HVWfsw7Raybgxxj36s+PGGHdH8Nss9FaVcSP0eJgei+nxED1G6e1AxSzK2WftKQ2+L7AzTL4bGMCdQaIWLaNYbNOylJbltIxjSyZYNVqWsSsKxFViJ9gFjuHZx0EZKAcniA7tUS4d9DmyM9HiFtFVduP9Vt77oH0GYM8QPVuOwC+mid/hDxez4l8xYsvw2azVz4ajJfQG9lw2Kud4hY+cZ9G3lQFatIhUFVepjqAT6CJaqOlgDtjG9XawA2CnKqHsEO+l2BZ8/2MJlh1jzsew7AzmfQzLzmDetZl3EDEc5usy10K5UVQOvW4ZLT6mxU5a1KbFTlrUpsXvqF0Zm3eHnrdWl2H3UVruDFslwt8l6Mh4nfDkLrx35X0wUXGHaEzEKyHGuETGWkTGKsS7ZeEv6gTPL0UtSUkJz6E9Zx3CvRF8G16OHIhX3UO+243dRYy4R/uhv22j3U7aufTu0LPJnZSoJXroA+J28BcwkKffnufZEbu6gMF4ZlC7AC/ZzUoXYtMe9GWaXvaSJy8RNSKV9YFIMdinD9i9QR/QF9wNBoMh9JtV8ZtASXpO0XNKDmRWg4n5O3iOBXjRTnZQOFvicBFrtEd/EWrxGthXhn1l2FdWMfvgM+Wt9LKVXkx6OQMbK9PLEXrJ0EvwTfMOPWwPfo8I+8qwrwz7yrCvDPvKsK8M+8rEWaKHaCVuB38Bw0SeGA5GgJFglMhjxEqM+CtiVoQVbkfMirDK7YhZL7HSb7LS7+Onn+KnV+OnreSrejJz+gcZovlJa8hbgTVFsImLREt8tKV1iU5az4k863nwgsiLVBatItt4L+Z9H9gv8uzTwQWgt2hl9wF9wd0gsM/BqtIKvzEr/MYMn1Wwgnt0YfhpxALsnldRK6eiVg52+9Q8L/wEYo9eh2f0zqxAC+5D+21D6+1D222zTsvswtd6Z3xKSygpsU7Tl9Jr78xWWco6l9G6nNhwQq+yIvoIuvCoFdOHqLmKmleGbT/i7hpK1lDihm19eZzxyliVE3o9GjNjRYVN2wy11qMlM9TMJS71zuxmlAwq9RCWFctjvJcxajmeebJlOaNmUKeHsLjYcnh3sSJG+cmeypnBYbyuN7r2iDDopYReMvSi6aEoHNsWBq1LaJ2htaZlUYUNpwfrlJmEDTto3YTWm2ldKo+zYwPry/HjE3hcBp6g9Qls2UFvTehtM72VWlGdCGcV4zl7ojJKOU3PJ7Dpr0EW1SY9HsWOfJkRJq2OMna+Fef8NN0oqJFZTY1CxgtWKkWNQvoMVilFH/tZ3X96Xjz9iudE6595PmHd8LlQ92eeB3P8Pz4H4um/uf5Emf/yujPHn1jv8M4p11lkWdkialXHvprCtWrTWx3a1IUz1OO8PvcacK8x95py3Yx7zbnXgnxgWTmMUIe7DXlvxjPxrGyu0BBWDcavzQh1GCnoqz7lDShvRHlTyptRTj88haB2MHKdihrBSEFfVbHL5O4uK4eSGqCmqI99Vam5iz7rY5+JfSatdlkNud8INKa8KXWaUdac8xbBr5LTSz62BjM0rVrYWltEKnoJWudjfzBD02rCvabcO9naZL7ZoDq+l4PNNem3NnOpw9Ovy1j1gnlxvwH3G3K/MfebUtaM+82534L5MQueTXX6zaG0BqipN2BDhtXZYdXlWdZjzvWp04A6DbnfCDSmThPqNKVOc+q0ILMFz8kL17WmyMaOYMWOYkc2dsSwwwvXtjHXTcMVPIoN2dgQC56KkOHca1es80nrg9WT4bxPtiipsNoUlf5Tn2DX+qzfP/kFu/1sEf93fYNW5wj1U/7B3Wai2n/LR+jtV8z6P/QTWp8mqvxffYVeLgpm9N/xF57E38Pn+B/5TJgb4v+u34RR/TRZmtlDJO1GxKlLVGstj2dKiGpXyPJMmujTg6jWkKjW0opk9hBRuxGN6hLVWlvRTAlR7QorlkkTmXoQ1RoS1Vpa2ZlSVuQsVuR0VuR0qybXtfSvWJEsrDqXVWnOqjSz6lPegHoNqdMINOa6CfWaUq8Z9ZpTrwVeE0W5eWiuXBn8rs8KUQ22mw3TbQqr+B1cYSVsr1L420JLjC7i90Y3caVxqxhv3MZ7d5R7e/2MvBEtcpNeAvN4JvylutP/Ra2VYa3gN5A2hqXfXi387spEyS83PtQLw7Pg1+12cFYJlXyWEKIlmvQM8Qde54hrxfXiXHGjuInSm+FyF4s7xGPiGjFBvCruFkvEcq4+5DVZ/F1sEFNEktdzIh918rwopMdXjDpGHbHWqG+cJdYZrYzWosBoa9wgdhkdjc5ir9HV6Cp841ajhygxeht9xTfGYGOGKDWe5lXbeIZXHWMWr7rGK8arRj3jQ2O10cA8xzzPONs837zQOM9sabY0LjAvNXONC80/mnnGReaV5pXG780/mdcaF5utzdbGZWY783rjD+aNZgcjz+xkdjKuMruaXY0/mT3M242rzZ5mT+Nas5fZ12hlDjCHGH827zXHGDeZj5qPGz3NieY0o7c5w3zKGGTOMd8whpiLzJXGQ+an5gZjupk0C4yXzD3mXmORWWLuN94xD5pHjPfMY2aZsdzUUhgfSVNKY4VUMm6slJVkVeMLmS2zja9kjqxtrJGNZGNjg2wqmxlJ2UKebqTkr+RZRr48W55tfC3PlecZ2+T58gJjh2wpf2/skpfIS41CeZm8zNgjL5eXG2mZJ/OMvbK1bGsUyxtkB6NEdpTdjUOyt+xjZOQAeY8p5Ag5wrTlKDnKVHKanG46coFcYLryLfmWGZPvyndNTy6WK8y4XCU3mjXlDrnXbCxLpTZ/ZUWsLPMCK9s6zbzMusS6xGxvDbLGmDda46y3zTut96zl5jTrS2u1+ay11tplPm8VWdp8K+JGXPOLiBfxzC8jlSNVzVWRdZFN5prIlsg2MxkpiBSY+ZHdkd3m1khRZI/5dWRvZL+5PXIwctAsjByOHDGLIscix8y9kbJImVkcOWFHzH22srPMUruyXdnM2FXt6qa2a9r1pbQb2b+Rrv1b+7eynn2hfZWsb7e128uz7VvsB+QF9kP2I7Kz/ag9Xna1J9oT5W32ZHuK7G4/aT8pb7en28/Iv9jP28/L3vZse7bsY8+158q+9nx7kbzbfsdeJu+1P7A/lqPtT+xP5YP25/Z6+bC90U7KKXbKTskn7K321/JJu9BOy+n2AbtczlRCmfIlpVRD+apqrs6Xf1MXqUvkOnWZukwm1R/VVXKTuka1kVtVO9VOFqgb1A1yp7pR3Sh3qY6qq9ytuqseslj1Ur2kr+5S98oSNUyNkifUfep+y1SPqDGWpcap8ZatJqoZlqOeVk9bVdUz6hmrmpqlnrOy1Rw1x8pR89VSq4ZaoT63TlNr1AbrbLVZHbR+qw6p41ZrVa60dYPT3GludXBOc86wbnZ+7ZxtdXbOd863ujgXOS2trs7FziXWrc5lzmVWd+dPzjVWD6eV08rq6bRx2lp3ONc77a07nZudm60+Tnenp9XXudvpbw10hjnDrCHOSGekdY9zn/OAda8zxnnUGu6Mdx6zRjkTnYnWfc4UZ4p1vzPNmWk94LzkvGyNdeY7861xzgJngTXeOeh8Yz3mHHYOWxOco85Ra2KUwGdNilpRy5oSVVHXmhr1ojWs6dFa0VrW7GidaH1rTrRhtKH1snu929F6xe3mdrPecHu4Paw33TvcXtYi9y73Luttt4/b13rH7ef2s95zh7hDrMXuMHeYtcQd4Y62lrpj3NesD9wP3c+sXe56d4vlu1vdXVapeyxW28rEmsQmRRrGpsReiEyIvRNbHpkVWx07GHnJU17NyD+8M70rIvleB++OyFHvLq+fHfUGeIPsSt4Q7167qjfMG2ZX90Z4D9s53lhvgt3Qm+RNslt4U7wn7NO8ad7z9pnei96L9gXeHO81+0Lvde8t+zLvXW+pfaX3vve+fa33gfeB3cr7yPvMbu194a2123sJL2F39jZ4SfsWL+V9bXfztnv77b9433hH7SHeca/cHuFl4sIeHTfjpv1A3Irb9oNxJx63H4lXjufYj8VrxmvaU+O143XtJ+L1403t6fHm8eb2rPjo+Gj7ufj98Yft5+Nj44/bc+OT41Pt+fEn49PsBfGn4k/ZC+Mz4zPtN+LPxl+w34zPjr9kv5tlZmXZy7KqZtWwP8+qk1XPXp11JOu4vVaYLvxdCO/yKteJ00RD8V/600t0gd4tztFFnG8+ZY2Mnqlf51Wix3F1ne5Em5WcFVXcL9Jpjtsrrkp/1D64m9aHeP3vPXWKcb4BT/ysvcPB+z8o2coIOcEoP/mH8qLeJl3GuUcm7yziXBf80MZvZ3OKMb/Q27Svv6SHHcy28Ods/AV/Dr1Oq+h9py7WK/WuiquDPxp9L8jXX+t1+qi+RkRZuzNEo+/dz/zcYPowz+4QPfyv5aw/jOXk3bl6rvDAd8/wn1rvA7t0ij62chmBZzUXl3LWILz7N71Kb8B/8B10+6nHf1W/qGfxPhbk6l/rwXoQZ99bx29nz1nxj1pn9Ce6EA/6RP8DO3gOwer9sNV3db/4maUQ6FQhssKzCRUlPn1/+a1vft8rKkoOMfODrP1m/Q18vxJF5/MUvhtd7w2f0N5va/+ofbHewx7zv13x4JPR8H3L9+v8nN0V9VI/uOr/g6vPflkf/J0b1q/wNL2R5+fojT8z8pHv7e1zxe9+pvZr+uVgR+tPfrFNP2y/O/COwGd/dGf9L2jNzPQj4dk7/7yf9W2/oD0+ot8K49bW4Ln9u3/6lTCavsK6/vjP+UU9lOglYdT8hX5xih4O/nKvOkXrigir1/5HrReGx41B5Piv//3mF4y/+2Qu02X40Tf/9gjev7zbAvw5HOXbjLf95KvifoNTtDmdVwNep//AynkV76tPvv5F+3NP2b5idfGSw0Snwz9lMPFznz5ABNsW7qnAq4+G5VPD2/X1h3q5TgQZ/Sfal3/vfLyoRfy/SbQNdkhFWT65YemPY/F3bcq+dz6JzFNJXC26cb6goqyA1Vvz01n12/FDj36K9lGiz4CKSB6Uv6lfF1K/+5Pt/9kLI7CnnpQ/XnH/M/0p6//3iqsfx+/j3zsfR+taorUImFBuRdn7ejE9/PUnx9956vIMTyyIj7qdbqN76LYVtZ/7UfsHiGJz9V/1VzrxvWJT3CIeFI9xNkFMDP6fGfEanrtAvAs7XCqWi/PCTxUuECvEBnGh2CR2iWtFoWGIDkY3o5sYiKL/sxgUaHkxJFDx4h7zTrOPGIoeT4qR5mazQIwyi8wiMcZMm3vF2ECbi3FmqXlEPGaWmWViQqDNxcRAm4vJaPOYmCobyAZihuwsbxFPyW7yVjHTesd6RwSqVotZkaqRquIL+237bfGl/b69XKyyN9tbxFe2trVYG2g6sS7QdCKprlPtRH6g6cTXaLqbxLZA04kdgaYTRYGmE+lA04m9gaYTxwJNJzJouvGGQM1NNmw1Vc0wooGmMyoFms6oHGg6o4qareYY1QJNZ1QPNJ3RHE130DgLNaeNto50IkYnx3Fco4vjOVnGrU4Vp5rRw6nu1DB6OrWdusadTn2nodHHaeI0M/o5lzq5xkBU2+3GYNTZWONe1Nl4Y1igv4zhgSYyRgSayBgZGx6bZNwfKB1julfZq2ks9V7zXjP+5hV4+42VgdYw1gVaw9gUaA1jS6A1jK8DrWFsC7SGURBoDWNPoDWM/YHWMA4EWsM4FGgNoyzQEUZ5oCOME4GOMM2saFbMVFnVs2qYbtbRrONm8N8UNoYeY4QeY+Ix01AU08XT+PRMMYeSubyUmCdeJUvNx5/s0J9s/GkZu+59vMoNvcrFqz6n/O8iIWJiPS8TL9sAq94ktsCu8sUO9lgBPtdIFIoD7PiDvBqLb8QR0UQc5dVUHBMnRDORwSOrhB5ZL/RIGXqkF3qkh0f2FpXNPvilF/plVfwyX+SYW82topr5tbld1DB3mDtETbMAf60b+mud0F9rhv5aPfTX2qG/VjO1qUU1Cf0X2XityZE/UR3fVZzz8EUtGcWPs0M/roMfdxbN5S14cwu8uRvnt+LTLUKfrodP5wvD2mrtEqa12yoUtlVk+SJmlViHRH3rsFUqKllHrHLRwDqB9zcLvb9R6P31Qu+vF3p/vdD76+H9fxTZKk/liZi6Ql0hLHUl+yHCfriGkmvVtZS0Uq2EUq1Va+GoNuyTJuyT62jbjt0SDXdLLPgERMTVTeyZLPZMJ9FIdVa3iEqqi+oimqmu7KIq4S6qEu4ig110F616q37U6a8GUDJQDRSmGqQGM8oQNYSe72Gnxdhpw2k1Qo2gfKQaSf1R7L14uPeM4PMU6oxVjzLuODWeuxPVREomqUm0mqwmU2eqmkbJdDUdS2aoGZSwP4Ub7E/6maVm0eo59Rzls9Vs+pmj5lBzvppPyWtqAW1fV6+zDgvVW6zM22oxdi5RS1iTpWopVq1QK7H2E/U5fa5ReKZar/BJtVGl6G2z+lo0VNtUAWuyUxUx1h6VFo3VXlXMSu5TvmiqSlQJI+5XB7H5kDpEzcPqMHdLVSnlR9QRLDmqjtH/cXWcnstUGT2Xq3JRTZ1QJxg9ozK01UoHv6/qRES9IJpwJJpwJJpwJJpwJJpwJJpwJJpwJJpwJJoIg2gyhuNYZ6wwg5girCCmCCOIKcIjpozgONIdLSoHkUVIIssG4cU2xpIiHtsUOygqB1FGyCDKiFpEmQJRzdvp7RTZ3i5vl4h7u73dIscr9Aq5W+QViZreHm+PqOulvX2c+55P/RKvhDr7vf3U+cb7hvND3mFR2yv1SqlzxDtKnePece6WeeUi5mU8LWrGA2ldLYhfHK24xTESt0VVopgjasSjcVdUj8fiMWp68bioS1yrRkl2PEfUDqKbyCG61eZYJ16XOvXjDUR2vGG8If00ijfmvEm8CfWbxptyTuyjnNhHybPxWYzyXPx5Wr0Qf4GeZ8fn0Ofc+EuiehANhQyioagcRENRmYj1RkU0nMRLhtEwQjScwflM4qAM46BNFHyN8wXiPY6LBd5GNPyQ84+JgVKsJA5K4uB6IuYG4qsMP793wjgowzhYPYyDOWEcdMM4WCOMgzXDOFgrjIO1wzjoGZWMSiJudDQ6cuxt9OF4tzGA4yBjEMdxxjgRJ0q2E2YYJaNEyR4cgygZC6NkNIySWWFMzDaLzWJRJYyDVcM4WM08YZ4QlcIIWFla0hJViX0O5650RRXZUXYUdWWn8F+yBbGvXhj7GsgusgvlXcN/3RbEwXphHGwgb5PdRZ3v4mChkETAQ8Ih9pULN4x6tcOolxN8asv+/IP6A7v3cnW5kGGMc9RVxDiLGHct50F0k2F0s8PoVlO1VW0pCaKbVNer6zneoNpTM4hxVhjdcsLo5obRrTbRrZvw1G3qNo7dVXfq365u59hT9eQYRDonjHRuRaQbpAZRMphIZ4cxzvkf6r4DPopq+//MnZ3Z2c1sMilAEnpvMQYIASFBQEQECw/BXnioNKUISBUQBEVFBJSiIl0UUERAEOQHFuw8RHhipVqw8iwI9vv/nrOTsEtC5+n7z3z27J1z+925537PlO8GhwSHIO/Q4FCkL7R0IxGO2rjRwTsQZkvniKUzxdKFg+OD45HrvuAEaNjqOWL1XN/qTQ5Ohp5tnyO2L1OsnilWLxB8FFbP9K3e7OBshOcE58CizQ3ORXq2g6bYwcwYO2iKHXRgB9cgHLV9a4MvIvxycDMk2z4Htu9DhNnqlRKrV1qsXlisXhmxeuli9TLE6mWK1XODPwZ/RC62faXF9qWL7cv0bd/vsHGm2DjXMRyDzKi1Cg8OD6FQeFh4GOTw8HBKCI+EbUoIjwqPgmZseCyFxE6phMkJD5ESi5Pmfgtb47nfuz9QitgXTyxLGizLQYR/dn+hJNiUPzHP2aYkR8yISUmwJkFKFDuSInYkDRYkBWG2IKmRMpEySMO2Iy1SPlIe+oq+7aiMEth2pIjt8MR2JIvtSIHteBRlzorMQq55kXlIPx9WI0WshiJV/zu+8tro83PyqC1dfiSc///Hpr/QX/LHP9pVkt/F13nkWt+Jlv0pX+ESz/sFOf6osE6Rm33v8xv2P8UX/VDv0Xvjr+gcu97CK3S674m38PRuuh08T/4+ou9dLMcX8LRfO/nrMkXlfHP4kf5epK+Hr7gfI7tH78On6MpejCeaFpP7Q6R6n/i6RxmE/CuMhd71X7SFi1oTW69LV4ju65KuLuivil+b0z/o3foDxBS7C3GyW+FV8vgjnj/+WR1zvQBtN4vC3xzpV9Y7i1/VPF1byXdwjplrvp4j37/L1fDX+cPXh/RChN7w0xSeWTyDf9JvF+pPqJ5P5Rzdc+iYr4Lp7TEp7pPrQXytfKeEPkVrYi2UP77H+/vKVes9x0534hvOtJhy9QH9Oz6/8rUu/UdcuqPdl/of2/7iOX8cm55xCpnbl1DeHqqFc7DCKZR69K0WiW1leyo2tcQNtuG47yGe+lpxWHlxrYqde8eZf5lep5f69wfS9Cy9TrSf8Ooeu3qfFH54H7Zxl+CHvYJNxJrxmqR34Xuxn2qf3G97E59XsO+Nv3ItliyDCq/NbsBa8IZ+B58Z0LbVW/Vbov93FEXIHe0rTrylxVr+ZdyRrKH6mRhNTz1P99J381V+3a9I2xS653jeFb/rSHzPtfi90K/0C+jLh6dvphaeD7yOwYIV4sI3yL8/G9sG2OWieyN8j+UYJf/rdLXxZDeMUkS+J/H95mKxA/SGuLTR7+1Y3T7hM+Qk6nuXz3rBWzJOHML6tssfNUjdQ2+S3/sgmSWsYRHKKVbmPsyDb/27SyYsR+Fdp4PR2FNf3w7dh46/X1mIUhh7ybr9KfZ9xbDnTsGeJcx2zObTbLtK2g6zZ1uLxf9+uMbX31Kynk7kPvoJb7rrCWaIPmMxTo+V7/+IBVjOH4Se0CujIYkrxGdyvxO/1OqTaN0y/Rws5rP+0Qa9iPj5oFUcxgeWE1ZsA6xEIQr+D6zvW76diN4/SyxW5mv6Wb3eLzONj3x9nHXQ+sRbK/kwS/UHRUeFvstuDhX6lVEkLhbtDT4/os+I+PPnB7HI1+j2crSe+G5eX3wGITRRT8daN8gvJebZFozA83roSbT2n3q4nqt7IfQSZvVc3U3sw31YjeZinNfrGbo71tb/8D1A6dkavUTPjtbsrxqZ+qXDytyrt8GrjM7chkUhH3fqX6Kf40fMcWXvl/le9FRQ/Col63SR5yvId5c89xD7xEV2/BMrf9UWfxdXnmD69tgtkR4Ve/7qr9jiPVkeVZzDPx7Lfsqvc9o83RPZYvEHZgN7We/h+wh3uotSfnXq7dWP6tv0GD1Nwm/jfJ/DT8r461AUL/6kV+Cz7tTqkZJyok+ynFIZn+jPsRLK+ojf9HOch0WYO/qr6++AOb4rCQGecF0ngbljcr8V/VXRFraD//KPdvrzx2/13zOfS9p0V32jXqtXkpKj4XogrHXnKCLQq/TPOBqvb9Fn6aqwo7l6kO5xCnVF8WOlU2qvb5OiPm3R84Zz4mNP56bnn4Yy+OzdFrXqwLfFfn2J36O3HFqF/94NrfkIc06ueeIcZk+xyFOJIl3EvobPEZ5V/as3tHdC7MwFvlrzd7bnyBtm2wDGTtEnXXV/oKN/Y/ZF49aL/Eiv1lfpuxG6X38c1Z1kXa+dentPsMb9sc95/e9uRRj3h1N/urKkZ91P5xZFh8Dfn2HVOw1XLI71jPJR8x7nGaWflmv7X598TTFbxmkp5bg2YKFTRq560uloyTHq8C0d0O0pX5c/Tb/SsWr5BMj2vzxTTt8G1LP/tI1Myim043TM97/wfsTJnI3APXuiOf03Owqvi2yS+wybjpq5t5926YnX+1dvJ/MORLEyjng35Ch55Go9XymKesLRKzpF94LDR/OP5dpuBvUi+8Trlfwn8ZaX3itrx6F3yQqvyR2vb5dA5514rX/rVvpkM574nSfipxr4vnSRZ6+fF/kt7PMx70b8r23A/T8d+Z2JmHQ///fbcnzb8VnIk13VS3xX6ph1yRMEh94dlDsWRWdWuMRMhWn5WlU5ugpz7m/Y4rF71GrAezqGnZU7MX/D9T79/Wksazf5V5RLfOOotrzlxHfQ3y4h9lhl83tUuwtzFobkCv9uX1NYZ1Op67B2xRzddajMwrbw+1rFWsVvZdXjuzQn47XrGXqBXlP0HpgfYkTgX9N8u6gd9Yq1d8GJ1xeX/ySeFNJb5K7Em0XH8gwQ8KZ93Hf6juPtvSPUXeK7ycfI87lcteKVXGyBHG3A3ItahvDR8KWsKEnU7Pje1ywh/8k8/7CV37eUz4HosUj/qvnRrYPfl3Lxzxvh/PpevyOfGVQGmPRL/27SruiclnOt54m39Bj9iN5hi/HWdWc9SD+uZwpvQNEzPbqdXnaCJW/4axAzt/HI9eg/S7qrHL2jeJju+2PfxTnZTZ6R8S2z/gF44gfgo/f1h4cskf4GOr5n3FhfKsfLcQZs09foV/hYr9cP6lf5irnEPRBX9vZC/Qm16GLdS4/Sbf0jCeEM7CbhBXqe7ofzYAbQ2hqsvJxipX5Wr/BXbb46X5py5J7zYH2z6KLPI84Ern6Ufw9mSSh6CijuWpD+pfBt/hNq70N6IXy1h/2jTVL3DLHzm2QM+O7rUr1fvygJom/t+08Y+GdxwxOv9e/a/itvYxevZXehxYred/67tpO5T4Vf+luKuepQxJBwPGtPKvHzO5dIuBzlwvesJHk/A+r4TFaTstRAv4sZyvt2vUOfhfnSjVwdXdd9PxWzM+pTlfGPl/l3KhQVvTEt+ieP0g95tkIPxTrnX4HULfR1+LTTXSlVR9fgQg6N4ficq5vqTtp/s0G/rj+WpyV4xn6FNWm377/WpVqyctaVVEe/ulFyu+boeZALi47XsC8X92RFRz9wFXWgxlRfeGKqS0xs38N/btEJfx6UlXKtvkkv5zVMj9B3cAil3hNXbfQZsJtOor036z7ofx85cBC6WezmHbJSv4Pfcu+f0TfpVwkrSOEmI6v7+2Uch49XYt1fHjtNsTzfyBMBjBPkbJKzeQOOAxLtHhXvcK4kykfrFW09Bo/dlT6P3Wg631BGKbpB2OkGCzvdOGGnu8e40riGJho9jB70oPDSTTFuNe6h6cZ4YxotYXY6WsPsdPQ8s9PRWmano/8zXjTepvUqR9WjTSpX5dFmZqejrepsdTb9m9np6F11vmpH76l+qj99qAarIfSxmqgeoB1qvppPe9Tjagl9olaqVfS1Wq1W07dqrVpH+9QG9Qp9r95Qb9CP6l9qE+1Xm9U7dEBtVVvpZ7VNbaNfTNeM0K+mZ6bQ78wwR1oY5kgY5iyzmlnNCArDnCOscglmnplnRIRVLlFY5TxhlUsRPrlU80rzKiPNvNa8zijN78oZ6cz6ZmQy65uRHVgVWGdcyaxvRhdmejNuZKY3o6vlWclGNyvNyjB6MN+b0cf62NptDGS+N+M25nszhjPfmzGC+d6M25nvzbjT+sn6zbiLOd6MCczxZkxjjjdjFnO8GbOZ482YzxxvxmLmeDPWMcebsZ453ozN9jX2ncZ7zO6mDGZ3UwFmd1MWs7upILO7Kceebc9TiczrplKY102lMq+bKse8bqoq87qpmvYb9vuqNjO6qbOY0U01sffaX6t8ZnRTLZjRTV3IjG6qPTO6qZ7M6KaG8PtxaoSjHKVGOrYTVLc7CU6CGu0kOZ66w0lz0tRYJ93JUHc65Z3yapxT2ami7mbGNXUvM66p8cy4pu536jn11CTmXVOTmXdNPcC8a2qK09xpoaYx75p6iHnX1AzmXVOPMu+amsW8a2qu09XppuYx75p6zBngDFBPMPuaWsjsa2oRs6+pxc7dzt1qiTPeGa+edu53JqqlzL6mljH7mlrO7GtqNbOvqeed5c46tdZ5wdmqXne2Oe+pj50PnI/UDme7s1ftdr50flTfMCubOsisbOpnR4cM9QuzsqnfmZVN/cGsbKYRyghVMCPMx2amhqqEaplpobqhbLNsqH6ovlkx1DDU0KwUahRqalYOFYRamjVCrUKtzKxQ61Ab84xQ21A7Myd0Yehis37ostDlZsNQ71A/s1G4Uriamc/sbmYLZnczz2e2NrMts7WZfZmtzRzCbG3mKGZrM+9O6JhwvbmY39ozn2e2NvNlN+gmmRuZp818173K7W5+xzxt5p/M0xYIME9bIMg8bYEw87QFEpinLVCKedoC5ZinLVCeedoClZinLVDXne8uDmQxT1sgl3naAk2Ypy1wNvO0BZozT1ugBfO0Bc5nnrZAe+ZpC/yDedoCHd3d7p7AlcyyFriaWdYC1zDLWqALs6wFujPLWuAmZlkL9EpUiU6gd6KbmBi4NTElMS0wmJnVAsMSDyYeDIxIoiQjMJKUsQdWLxEeXxJ5ZFAydpNSsA4HKB1rt4VVvTr0NbAHqSZWQYeyYCVDsIdNyYU95P95aCb/gMEWM1EsZhIs5qXIdRn2ZNjNa1DitXQ9NacbYENbwIb2A3Loj70lDaDBVIqGYC9NQ2kEah4JC5sOC+tShhExEilT3hAua3iwuWfA5taEppZRi3KM2kYd6OsadRHOgi3OEFtcD7b4Ysj2sMjnCl9ohnEN7HJ9scv1xS43gF2+Dfrhxl2Ua4wzxqHMu2Gpy8JS3095xkRjCjUypsJq1xOrXU+sdj2x2jmw2gsRXgTbnQPb/QrWg1eNV6mp8ZrxFuUbG2HNC8SaK1jzXMiGsOm22HRPbLoSm+6JTU8Tm36O2PQzxaY3FpteDjZ9IVVUi9QiKq8Wq6eosloCK19FrHwVsfKVYOXXQv4fbH0FsfXVxNaXh63/F+QmWPxKsPibId+B3a8gdr+C2P2qsPsuVTcjsP41xPrXEutfE9Y/neqYGWYG1TUzzUxqxSsBwlgJqDZWgpqQtczayIX1gLJ4PUCuJmYTyKZmU8QWmAWQzcxmSIO1ARJrAzT8rvV58q51G3m/+jx5v7qNvFPdGuvESGoWuD1wFxlYLSZSUmBSYCqdFZgWmE6pgYcCM6lJYFZgDpUJzA08RRmBJYFnKRMryiqqz2yilMvrCuXzukIuryuQnuVRCyvZSqZ6vLpQfawu/ybTetd6lypZ26xtlGS9Z71HAet96wOysOp8DM12azs0O6wdFLR2WjvJsXZZu6iUtdvaTQm8JlGE1ySk/ML6gpKtL60vKQUr09dkWN9Y36LGfdZ/KNX6zvqOyvBahRp/sn6idOuAdYAKrIPWQbTtZ+tntOcX6xeEf7V+Rfg36zdqZv1h/YGS/7QVpdqmHaBmtmVbZGCFCxIWC9uhiB2yw5RkJ9gJZNqu7VK6HbEjVGAn2olIg1WQ/9XdTkXeNLsU8qbbGUifaZelFLucXR4lV7ArEDOgVoasYldBCVXtqkhfza6G9NXtWkhf265NZew6dh3o69p1KWBn2VmUaJ9hZ6P8M+0zkTfHzkFp9ex6SFPfro+8DewG5PKKi7oa2Y2gb2w3QcqmdlOUkG83J8tuYZ+LlK3t1hS0z7PPQ5svtv+BfnWwO6H8a+zOqP2fdhfUcr3dFeV0s2+i5vbNdh9qYfe1B6DGW+2B1NIeZMN62EPsoVTaHmYPQ2tvs0egLyPt21HOKHsUShhtj0YJd9h3UII9xh6DWsbaY5HmTvtO1AIEQGUZAVAOEMAkyrUn25OpAeMAygAOmIbY6fZ0yrQfsmEH7EfsRyjfnmHPwGjPtmdDzrHnUn3mgEV6YAWUsNheDPmkjbPUXmIvQd6n7aV0rv2M/QxKXmYvR+xKeyXyrrJXQf+cvQYpn7fXIuV6+wXEvmi/RHlAGK9C/5r9GmUDZ7yB9G/ab0Lzlv0WUm6030bKzfZmtOcdewvSbLW3ooX/tt9Fm7fZ2+gM+z37PWpkv2+/j7zAKMi1w96BknfaO5Frr70XpX1hf4X0X9tfI/339k9Ic8A+gNE4aB9E2362f6cMxjHUADgmgnBiMJlygynBVCobTAuWobxgerAcNQqWD1aiekA5NSk/WCtYm84P1gnWpabBrGAWNGcEz6SCYE4wByXUC9ZDyvrB+kjTINgAsblB+I7ARmdRw2CTYBPU1TTYFOnzg/mILQgWoC7mFDAYM1F9xkyQwEyQwEyQwEyQwEyQwEyQwEyQwEyUyZiJyjJmggRmojMYMyEMzET5jJkog7lqKdtp4bRALiAnaICckAbICRLIifIYOVEjICd4Ak43pxsVAD/1oSSnr3ML0gBFIS9QFPRAUUh5u3M7yhnljEJ4tDMaeiAqtAeICunvd+6nXGeiMxG5gKuoAXDVVGimOTjrnOnOIwg/7jyOup5wnqDzGWlBA6RFYUZakEBakEBakEBakF8639PZzg/OD6jlR+dHlAPURTmMuhDWjub/3goRnRsyQgZlMAKjskBgQUgn5FDDEDbKCYVDYYTdUCJkUgjrb8gLeZQXSg6lQJMaSqX8UFoojRqESoVKUUGodKgM9BmhDMoNZYYy6YxQ2VBZhMuFyqGW8qHyiK0QqgANsB3CwHZoCbAdJLAdJLAdJLAdJLAdJLAdJLAdJLAdJLAdJLAdJLAdhRnb0dnAdpeQF+4Y7kh2uFO4E8KXhi9F+LLwZQhfHr6S0hj5QXNXeD6p8GPhJxEG/kMY+A9pgP+Q5pcEg1SCSsikcxgFUuModwOjQFKMAiGBAiGvcq+i8u7V7tVUyb3GvYaS3Wvda6mie517HVV1O7udqYr7T/efZLpd3BsR7up2Rfpubjek6e52R5qb3JsQvtntRdXc3m5vpOnj9kWafm4/xPZ3B1AFIMtB0A92B0MPfAl5m3sb5HB3BJVzR7q3U2V3lDsaKe9w70DKMe5Y1DjOvRea8e4ElAwMilomu5MhH3AfRJqp7jS0ebo7HeU85D6M8CPuI0g/w52B8KPuoyhzpjsTsbPcWVTTne3OptqMXKkWkOt8qus+5j5GrdwF7kKEF7mLkGaxuxixT7tPQy51n6Esd5m7DLHL3RWIXeU+R3Xc1e4aaJ53n4cGeBcSeBfyRfclqu6+7G5AmlfcV6mG+5r7GlK+7r6OWja6b0Oz2d2CMoGGUf42dxvke+77SPOh+xFiP3Y/Rjnb3R0I73R3Ui5Q8m6UtsfdQzUZK1MFYOXRVC5yR2QMVYmMjWCUgJvHUVbk7gjGKjI+Mp4qRu6L3AfNpMhkqht5IPIAtWI8DQ3wNGUxnqY0xtOkGE9DAk9DAk9TGuNpqg9k11zwdGvB00qQdBQ3FyJmxseJgo8T6QrsiYKM2wgybivIOEWQ8QWCjEsLMi4jyDhdkHFGDH+PJfw9jvD3WMLfYwl/T1j4eyzh77GEvyci/D2W8PdYwt9jCX9PkvD3WMLfkyT8PZbw95wv/D3thL8nVfh7LhT+nouEv+di4e9pL/w9mUDqCcDNESMiGD2DGhqZRiYwNCP1xkDqF1MTweKXGJ2MK6BnLN7U6Gp0BcK+1bgVcqAxFLj5NiDyRkDk46gAWPxuhO817kV6RuSNgMinUXNg8RnUAih8BeSzxrPU0lhprEcso/DLBIWfIyi8laDwc4HCc8gUFG7G4G8T+Pscwd/nA3+3ExTODEMBYRhKFoahZGEYKiUMQ8mC0f8hGP0sdbe6h5oxsz919JE64/K66mn1NNVWzwGXVxVEXl0QeU31lnoL+JuxeGW1RW2B/l3g78rCWlRefaC2A5HvVDshmcEoS1jd6qhP1WfQ7FV7IZnbrYIwG1VT36p9CDO/UQ31vfoBYWY5qqV+U78jzFxHFdWfSlMFYTyqYhqmQph5j2qYlmkhzOxHVYT9qJqZYCZAkwT0ny24v77g/lzB/R3MsmY56Bn9Z5tVgf7PNGsA/WcL+s8x65h1EM4ysyDrmQ2oATyBRgg3NhvTGeZZ8AeyxR+oZ+bDH8g2zzbPRvnsD2SLJ9BJPIFLxRPoJJ7ApeIDtAb6n0qJwP0zKUUQf7og/rKC+BsHVgLxNwXi30AFgVcCG6ml4P5WMZxMlnAyJQknU6pwMrUXT6CteAIthJ+pnfgDTeAPbCVbfICg9QF8AFt8gKD4AImC/oOC/tOtT61PgfI/t/ZCw7jfFsRfRhB/W0H8KYL40wXxZ1j7rf2QjOlbC6YPCqZPEUzfWjC9sm1g+qCg+aCg+QxB7a0FrwcFqacIUs8QdN5acHlQcHm64PLWwOLwe+1sIHJbsHiKYPHWPgrPtXORPs/OQ3rG4q0FhUcxd1BwdlCwdRvB1m0FW6cItr5AsHVpwdZlBFunC7bOEPScYY+3xwNT3mffBzTJ6LmJIOZ8e6o9FXpGzA0FMbewZ9ozgSMZK+fZc4GV8wUrlxWsXGAvsBcBxy8GSi4rKPkSwccF9gp7BXIxSs4TlHwJUPJzyLsaWLmsYOXGgpUL7JftDSjhFfsVpGesnCcouayg5MaCkgsEJbeytwAl5wtKbiEoOU9QcoGg5OaCks8VlNzQ3m5vRyzj4ygybmh/Y38HDePjxoKPmwg+vsT+0/4TCJWRcb4g4wIg4zIIMyZuLpi4RbBysDq1FGTcSpDxZYKMzxEc3EJw8GWCg1sJDi4bbBRsBMkI+FxBwK2CZwfPRpnMKJYkXGKWcIklCYtYkrCIWcIiFhYWsYuERcwSFjEr2CHYAbUzl5glXGJJwiLWTljEUoVFrL2wiGUKi1imsIhZwiJmCYuYJSxiScIilhrDIpYkLGJhYRFLEhaxTGERs4RFLElYxKwYFjFLWMSShEXMEhaxVGERyxQWMUtYxJKERSwzhkXMEhaxJGERay8sYpbwh1kx/GGW8IdFhD8sSfjDLOEPax/DH2YJf1iS8IdZwh+WJPxhlvCHWcIfliT8YZbwh50v/GHthD8sVfjDLhT+sIuEP+xi4Q9rL/xhmcIfZgl/WDvhD7tI+MPax/CHWcIflin8YRZ8mFRqAo+lOrUQ/6SlU9OpCd+gllMLWL+uU5caO1nOGfA3sp1s6HOcHN9vyXPqOw3oXPFe8pw8pzEk+zCtnKZOU5TDPkxLp7VzHmQbpx1Ku8C5EGkuci6ihs7F8GQKnPZOB3gIlzmXIZb9mebOdc51aE8XpwtyRZkY2cNpBQ+nJ+piDyfRucXph3L6O/2R61bnVjrHGeQMgma4MxK9YD+nifg2ZYW5MU88nHxngjMBkv2cc8XPyXemOLAS4ufkiYdT4MxyZkEzz5mH2tnbaSXezmXOQmcRcrHPU+A85TyFNE87SyGXw/NJcHY4n0B+Bp8nQXye88Tnaensd/ajZPZ5mji/Ob+hd+zzJIjPc4n4PC3E58kXbydPvJ0m4u3khSLwcPLh4SRTc/FwWomHc454OOfCwykNL6hMKB0pM+DhNBbfpqz4My3hz9RELXXgzyTAn8mFzAs1gSyAD5MgPkwCfJiLIdl7SRDvJUG8l/PgvXT0PRb2VS6HH3KleCxXh6+G5vrw9dQs3DPcE/Lm8M2QvcO9IfuG+0IOCA+AZC66ZOGiSxYuulLCRVdKuOiShYsuWTwfU3ybfySUTahCZyW0TfgHNUu4IWEodRSmuoB4OwF4OHXhRbAPU1d8mNrujfBhKrs93J5A6uy3VBaPpS48lj4I93Vvgecw0B0IDfsqVd1h7jBohrsj4aWwf1Jd/JO64p/Uhn9yDzT3wkupLV5KTfd+936kZ/+krjvFnYrYafBPasI/eQilsX9SXfyTqGdSVTyTbHeOOwdynjsPkj2TXPFMOrgL4ZnUg2fyJPRPuUsoRzyTeuKZNBDPJBeeyXJoVrjP0hnuSnclUq52V0PP/smZ7lr4J9nuOncdYjfAM8kRnyRXfJIO7pvuW4jd6G6Cnj2TBu5WdytSsk+S637gfgj9R/BJGsAn2Y7SdsAzqSCeSY67y92Fetk/qS/+yZnuJy4wnrADZgkfaR33K/cbaJgpsIq7z/0OYeYLrCF8gVWELzBL+AKrCF9gReEjreD+4f4BydyBWa52gQCFQbAagDkQoPAIVhRu0grCJlheuEkrCKdgDeEUzBJu0jqRxEgS9MwvWCOSGkmFhlkGawnLYMVIeiQTscw1mCVcgzWEa7CWcA1Wi1SJVEEsMw7WEMbBKsI4WC3SM9KTKosnVh2e2CjxxHA+RO6K3AUPbRy8r+rifTUQv6sD/K4pCE+NTKcc8b4aRB6OPIwwMxfWEObC8sJcmCXMhbWEubCGMBcGyLB2wIshak73GLnY87G3MjqoRKDO7ubowFrI7oENgY347ArsCxzA/qf1gtnd2oR9m7UtsDawlnPxd2BfNC1itzFq5bzRHVoug/ddgQNF+TcVlbKPynk36E16k9dTb9abvZtE9tXL9DJvkP5If+QN1sv1cm+4flg/7I0U/e0iR+uleql3h8gJkmailPOAxM6S8GyRj0uZS0T/tMilIpdL+c9JeI2U87zItSL/T+Q6kS9x+WREW8HfVAu78rpLCQtYUkWzk+6sO3vX6416o3ej1NxVZA+RvUT2FnmLyH4iB4ocInKoyFEix4gcK3KSyAdFThE5VeSjUtdMkXNEM1fkQpGLRC4WuUzkCpGrRa4X+QJLauR10cP1cLR9hp7h3cC9Qw9e1C+iByy7UyWqhH5wuKfep/fhd2LZSzS9Rfbxe8bhfiL7i2aA30vWDPL7yuGhIoeJ5ja/36wZI3KsyInSkkkSnuyPAYeniJwq8hFp+QyRj0r7Z4qcJXlni5wjKeeKXCB9eVzav1A0i0QuFvmk1PKUyGf8kWP9cn/8OPyshFf6Y8ma9SJfYEnK7EQuueY0fpqHAuaF3AKcG011U7OfXqAXeB0pG3suYirAr+ykX9Ov8f+/Q17BEvE1qAZ+BaTCr3BAH8CvwLK7aHpIuJfI3iL78D8oYeQ53E9kf9EMEDlQNIMpTGGMPIeHihwmsbeJHCWaMSLHipwg6SdKjZNEM1lSPijhKSKnipwlaWaLnCOauSIXiGahhBeJXCzySSnnKZHPiFwm+hUinxXNSpGrRbNe5AsiX+JWkYExw6zEdz+9Sq8iE8c9dU8czdKzMHpNsONX0C/rl3FUDjtyUGXsnPNCfSFVwvea6D8+6hkYdZb9mA0G6dMoDaPO9XcV2UNkL5G9/ZFm2c8fXZZDRA71x5LlGJFjRU7yR47lFJFTRc4ROVfkQpGLRC72R4XlCn8kWK4X+QJL9K+ff65Uw8792qV3wTJF+6so3eyEPpN5uXkFYvkagilXDwJmP7MfWeY0cxrZXkekD3rX41xzvO44v8LezV5fSvAGekPJ84Z7I6iUN8obS2W8u7x7Yanvw3lR2ZuI86KqN9l7gKp5U7ypOFcf5XnmLfSWUpa33FtBud4qbxXleau9F2BbXsLvdjb8+At4xbFnOmEqJc/E/fc28xDbZtFTTL/F/tvIcW4J0XdA9GeaebpLfKNJ4o5nc2P+PcaStZefYN0XywbK64j+xOefe8d/HruEdut79b2F7dFPYYdV0av1au4325miuHf99+JieUVrCRNh8X7swX4g/h0Sfb4+/7j6xhtsmawlfvlxZdXHfljaYm05vF1pUSZasaKxbXoz9i0D/z2DA8wwE+WYib55WfJ2ZOZVfjLyOFnpwsXfHtK8fXvoKVrhQ/vwsH/k+vPQv7Hpgz7H1Fw9lxph57HD783WTK/XYvHYotF12LFa8UyX9Hy+FI5rJvaS+nG0/m+OcjEebROkQ/LMc7HnOBkpxR3z+QpLfLRy9UK9kPsg4cewf1oyF9DhZctWIZ6PU86FTtgP30o6pw/LS62wx5b1o/6RQtEnt4u15dlCLrIjbG78P0FJWW7J/w4ldvl4toD/LCafX2mxLMwlb4fPVdlKyneEdpVYpj8/pOyc4oyDsWlKjHsryqF5zHr8ucFlsf2U78I5sfQ43uJQFMHKdhUM/bW8pnmdvW5YzXp4PSgRK1g/SvJu9W6j0t4IrFoVsGpNxbo03ZuLFWm+9xi1kJXqHKxUL1A7WZ2uQIn5sla6ctU9Iitmolx1j8i6mYg6/on1tYvXhUysmNdj3bwB62bAu9HritWzG1qQKi1IRQtuBobo5fVGbB+vD4W8vlhVw94taFkqWnYr5EBvIPSDvEFo62CgM+UNwZprecPQ7gS0ewSleCO921HyKG8Uyhnt3YEVeQzW4mTvTu9OlHCXNw613O3dg57fi36moZ/3QU7AGq28+7370VpeqQPeJG8SypnsTUaND2DVDnsPeg+ihCneFMROxegkY3TYr3nEm4HePerNRO9mYU0PeHMwao6MWipGbTE0T3pPoZwlGMEwRnA52r8CK77lPeutRMt53U/xnvOeQ67V3mqkX+OtQ8vXY6yTZawV9mYy1mEZ6wQZa1fGOkHG2i021nbMWAcFqaTIWAe9nt5NaAGPeLKMeFBG3JERD8mIB73+3gBoeMSDMuKRmBEPyog7MuKejHhIRjwoI54oIx70xmGsk2WsLRnrZBnr5COMdVDG2pGxDmGsp0Jz+PjaMeMb9BYALad4j3uPoy9PeE+gZB7roIy1I2Md8p7xnkF4mbcMeh73iIx7UMbdkXH3ZNxDMu5BGfdEGfegP+6MiQxKwacWPkRdWOed47Uj8i7yLkLO67zrYH0UclTzqkFb26uNVmd72ehlQ68JUhd4BUh3iXcJfv2rPH5HNlpqPnKxheVyr/d18JBhQ66N06VBV47a+zoD5Z7jnXeCNRpI0VZkG7/UjvhcKWXe4GtaosyLqE2cLhvf7BvkxmnTYXeryV7B13PJF4jsjFICaFlLtIxbUBEtuAbe43hvPFWN5lc5pFSeype8N/o6IHBVRTWL0zlkqkSVo+rEao0fSBk/q7w43Q4yjU+VrarEaV9HGSlxmpVIt8NYa7wUp8VZZbyOfYHxZJx+HFnGUtknGA/GxfRGOVONAcbEOO3lKOd241p8hsbpm0PfHXtro0ucvhbKb489G5+2cTGJiMmTPc3IiY2h/WQb5XinXyFLx8W9j1YR7UBcrPYl/Fpf0ev0lWHH6RdBvwX7UtoXp58MpL0G+3R8tsXFDEbMbNlH0Nq4mGvJpjtlvwGfuXFxfF71lGcLDun4vOJnFQbHafm8ai574TjFn1c88y7wZ15YZl70zJ5/1HOOU8wT+XC0HhMzz2xpjpY6uvq6WvD23jezzd5x2hR4fy9hTzcvj9WrX5GazFfNjXHaT5H6QfWVudRcGaffCO+R//F+izndnBkXswxn/XPmw3G6mSj7IjXfvDNOOw5lNzYbqwlm3zh9X8yRgWa+eW2c9kqkDqvOZg2zTZy+JVnqB+xtzEQzJy4G/VfZar9ZLk6L/quXVLraYdqxeuNXlLMIO6lX1b64mF04Bz9XE1WNOO2bKGeosVkNVV6cfhnK6aK6GM/h83NczHTMmZmqjbpB9YzT344cOcadsAoXqA5xMV3JVqVVaeNmyPqqcVxcW7SqvfGrqh+nzUUdnxpNYDnieo35YxkbsVcxNqpAXIxCjGMsMzYZvysVG0NfYF5Op33GdGOFscf4Ii5uIwXlKZQtkNONV424s4aW4KxfAasx1JgRp5+KulrTDLYaxpi4mNtQV5aRRaMh2xhx40OdUVpXw0NMxzh9G8zdn/k5G1iU/LiYbMzdHdhz8fnVqFIUZxjpsvaRr4nORYWZV8OD7+DV8epiRp7pnYkVvp5XD+tzrpeLVamp1xSrazPvbKxBLTEnE7yrMRtdmY2JyJ9shSz4EMAqmN9AgT2R/2avF1L38W5B6v5ef6zCt3pDsLIP84YBnw33RspVldGUDnQxhjKB58ZRWcEVUaxa0XsYc7w2UMFiauA95b1IZx3TJhzNojzs25VDtqNbjC3qhNFRWJczcTTCH59uRePj+f3rjBoM6aWSXtrSy7D00pVeJkkvPellKellaellhvSyrPSyXFH/5kv/XsTvxO2u7lVHHfkefkuvhdeiCKt8h090JnX3NTuwXralz+N0b2I+YHWB9Y/VrsBvnh+nmYu8iUadON0EfP+KM6V0nBaW3F9fCjVd0aYtWK9idR3wvQ77rjgt17k5TlMHeaciXayuNL5HY1/kaxkJVffy/6IRP/q5xG+lGJEckfV47mANM6g1PhdJa3uILovkWT6a7/chquVx5OuPE+hBX1t4phX276+aMUebFXzG72OkYHTwz/iefO3MaEUfYjeMZjHaABBNNm3A/v/Y+xY4p6qr33XOSTIzmWfOKye8QUSkSBEREWGAYUgyec2AOIKgIiIiIgJStEgRKRctlyIOiBQpIFpLkYtUERFREZFSX6X+kPpRa6nlUupHrVWrSJnk/vc6J5nMTFDQMt773S/7d3Z29mPttddee+219uNE6DgN8TJtFFwjlTWCINMKScjSk9kQ6BjcPDwSHWkEYRLnfTMbAu2EJiFmoe2NIGyAGwSdSKJHG0HoSnvwa1GjOJ22MQ+n41qCpwS1L3L0+DS1zy8bDv7qVnYFZEz3sqvAZRcw/S9kXuuVk9cU6FyTaFIWVW7m9ieg47/Aev62rHg39cF4ewxOjLq1WSkecGEn0EU4MQssyKS1nGT7OjRB/3n6emA5eKB3et5nnCcLung65fXxwG7zQPf0vJ6Jlz1eD7QQzwyS87p4tjTkzytxf+yG7PSMwbMqE+8S57LcB92QWR5Ya575WTW8697pBjd5IK8873omZZXZ5dnlfswNewJ1yfhV01DKvdCz2g3Lwf0pUh7z9M4qtcg91TPfPRNpGFOeVpkUt2e6Z7q71jPJDdzcO5FGWaVq3f08CTckjhuaMH4dzirXz9PP3c7Ty90ZqfcitZ97bwMl3MiA+ElpCqYxdB11n3RhRLmHI6WDp0tDCdebrv2I74tWfODxeIqyWrXPtcW1HWntAPeY++MG/Nxb3VtdK11rkeZC2lvud7JKrXTNcYGirqMijJw7ssrNcc9xjXNB0rteR+ocpK/NwrHSPdIFq8m1CWlj3bPd87JKVrq6uvu7eiC1DjWOdU9ooIi7q7urq8jdwQXL0DUTqZXuSFZJr/KhW1Ywa7lGAq7X3cXdvaGs65jrmLLPdViBXeSCpe065s53lzRQx9b8Xa1Ap6NuV1Y86/0uqMuufa4GyijKXNcyoecrHyBlm6BsJmWCa5YyGSn7kLLatTMLVkyB3ot6FNdE13xXNkUSSi8Feq+yCmUmuRY0tMrV29UbNgysdVg9sqvGNTmrlCWfVCBTlQkijJwNnOpSTion5UMydAcFGrRyUqQ3YALLALykdEfKe8oJV5ss7HfL6+VNbD/JyiGXnAVxg7JBXixjppOPI22PcjSr1GJ5ugw9Qn5XhJHz9axy05Xpcq0M7pd3InU60jc3lJT7KjGxdiCvQ9oIZaqyKKtkX7mN0lOsDMgLUOMIx36y09pgstNljAFYGTLsqxFZaQS74Lj0AdISbO21UfpmtV2cqZb4FPj7clJpGKmKtFHeCbtGkqGvyHvlw0rWSJU3SkvkR6XlbEHJIrWBt2AzLZFmyPeKtQMJOpu8Ud6bVXK6VCtPktB+Ce0HnRbLGxqwkfpi/pUkyD95RRYmneQ+mH8lCdSQ52Xl9mIGliTIP7mLPCmLiiX0sdAdRS2ObcV1S59Jn2GOh/zDbC/J/bJqeBdzL+QfNERZelfukFVml7QLc8xGnu1laZfsaShFC6XVJFZOIP+kxwSFM6UW0VTYOpB/rFPsa6CONF2aTrWwdYAb6hQrOQ2laqmflGCNC/JPqpVWZpXrJ/WjdlIvseNLkH/4PcdJbUl9/f8Vm0nonMMxz34T2ynbanJWXHgF1R4jt3Adl5eNpvRKZtMcUzI5IC/LwrzWKqC7muW8tVHOyrKgg43CerXQbyrw2ON9KsctJGHvSsxF6bjZDrywE5fmizNZXz3z1dgN7D/O2mc5c+N0R9+axvhPAF5izF6TFSv01H2MaTruzOsdwjS7oGzQKVayRZ7LW0zXC3GrxlMdfq1wWjWd42p4xXB+o7j+NIf7MzuuK/fYmEZxOq8fhjNxZ06lcIZK4lcVNayfR9m/Ngfet+XA+7YceN+WA287bhyvh4YzcWeOd2UjvIeyH2Q/8aX93TCyYlw35gbkyCWzeoMDLoNV6mVpVcTSqoSlVSnLB983KKk4I1OM0iWMx/c4TvQGNDV8z86KFdbQWITESYkJWfH2WHbxbn8rx/7+3tews0LsT4Mv3uKzHo9bGaYMI1KuFKvByi3KLdALpinToCvMUmbBsmqgoj2rCpxLfPf5lhCpN6g3k6zeot5BBZqhVZChVWojaIhWq9XSCP0VfT9doR/Q/zfdYNQYw+l7xghjFN1h3GjcSHOMm4yb6S7jbuMXNM/abr1GjwvMHC4Sp2J6UF9n/afRJ9UXblVqVSa35EhGSHe9WIccNC41LiXZTPmBs/Wu9a5IU/jMkTJX+YwK0u/NOnsfcWYj+Y7jyuHGwO2HO+S4L+DEdzpuHRzy1R+sP5haD7cwtZDjt8KJPFOTU1Mz7H+YScNO9Ur1ysAW9ZwCdhonhj0aLpQKZercbztxXrUR/j1SPXLRvWlcGu9kUbLR2QKBN3/vTO7M4L0qy5XBdYZL/37McSLs9G/Kk/IwbLhGeCA+nc584NAktdZxZY5bm+XugxPf98KJ71apVoKmAn/+DXqLb8ZXwBI4ZNP7MzhBc4GTKHcafcl9lqsvBb1zwUadpw0bfk7YR5NHG8HendydohQle8OF4fA7+ajjnocT30vgxHeaB9fXr0/dCjcuNS45G07AXgEn2iP4RKZ87SKMdeKxXsZjvSOP9U481nthTC+hCqPOWEfDrV0Y2dejjIYymB21i7WLyaP10S5DuL82AOFybSDCg7RBCA/WBiNcAeh5gF4JfyjqkLkOmetwcx1urkNBHXXwl6ImN2rahfH+srWH8q1foVZY5TSNZZuUJdsk3xgfpLHvJh+kme8Wn4i51YdZy/cDH+Yz31zfXJIg124gtzpBhf2kTlYnkwsybgrC31d/THnqfepS+MvV5fBXqCvgr1XXwn9DfY+K1T+qH1EhpKEf2LfWWsNvq3WAL2hWpl2pTUb4h9pi+A9p6+A/rj1JJdpT2naEX9PeoyLtE+1zyNPj2kkq0vP0IspjuVaqX6mPRHi0fh0V6OP0iQjfrs+Bf49+H2KW6EsQrtOXwX9QB1b64/pG8uqb9M3wn9SfhP+c/iJ8QUef/hcdtehf6F8gZ71eDz+lpyjP+I7xHSpgGaob/Y3+iCk3yuEPMgbBrzDQN0algb4xgkYQfsSIwI8bcfjDjGEkG8ONKxC+yriGVJb1HuNmyHrZuMWAbm9MMaYgdZoxA/4jkP75xgbjcSozNhrbqMh41niBSo0XjZcRv9v4NcKvGm+TYRwwPqN88zJzIOWZFSZwMCtN4GDGzBj8arMa/jDzcvi15pXwR5mj4F9tXg3/WvNa+KvMHYAgZoVS/3n+fmT4q/3j4N/unw//If8qUvxr/E9Qvv9P/j9Rof8f/k/ASdut50kFV70M/xXrFfh7rb3wX7Vehb/P2keF1lvWWwjvt/bDP2AdgP+O9Q58Mfdo1h+sP5BpHbYOU4F1xDqC+L9af4X/N+tvpAbKAqrQLiRLzE9STNpBnjN/37g4w8zn7yDX+Pdmx4n3SKblgXOeqmleCsJB2+AzdSI8Hk58i7y1cJCZQq5k8op4B2ajvG/CxVIxlqkiLOSoqEOcaUzj4Jzh5HTIEpbh6XInkyezYQs8haxhHYNYx8jDqOpFGvPmhdAohkHWCP7qzbrExcxNQmdQefwqGL8TMGZvVCdiRN/EY/lmwJKcsXyreivyTFWnIjxNnY7421RoiOr3VFjq6u2oT+b6XFyfm+uTuD6Z65O4PiFlzG8gZfJZasgsBRQe526uL49HkYvrK2CudTPXeplrvcy1XuZOF/OZh2T5EHhIlj9SKvDrK88Nnt2PfWo09Qfxpn3H381vZrb9x/gNupP4nZw8h4vZy0kttTnV1kEc3y71/dT3s3iPGoe/cb3OCMk+79qoLMYBOSdM03rHadfLeNoa1Cnr/fL21oj/qj/j9p5OvTYE+x9w7fgHxX9nNqq3WXtz9PgZ0tk5q9sfLg3BxsemM9fr5LHDMs8so4jA9S+x9VKM38MRe7lxOUbNCIwXyag1rsSoGYl8CvJth0bwnPUcydYOawfCz2O8yNYL1gtIfdF6EWNnp7UT4ZcAUYzk1d9gJKusHXjVxepiKoSOsASy5H71foTr1DqEl0JrcKnL1GWIeQC6g6w+qD6IsNAgZPUn6kqEH1IfQniVugrhn6o/RXi1uhql1qhrECO0DJf6sPowwuvUdQgL2eFhjUPIxnOgmQn9wsv6hZf1Cy9LlgLWL7wsX4pYj/Cy7uCF1lAHu2mpvhT61TLoDi79Af0BKtSX68sRflB/EPEroE249F/qv0S80B1K9OP6cYS/0E8g/l/6SeSp15NUaJBB8CVDQh/IhoKwy3Aj7DEwqxl5Rj7CFxm9HZlaxvqFl/ULL+sXXtYvvKxfeFm/8LJ+4WX9wmtcA52ilGWixhqE15htzAZkW4/43ABWxhfGF+CJE8ZJhOuNeoSThsAtZaRgFYoLES5TMmUqNBUTuJkeE7iZeWYewvlmPsIFZgHCXrMQ+YvMYsSUmCWIKTXLEPaZKsKaqSGsm36ELzX7IXyZ2Z8Uc4A5AOFysxzhgdBW3OYgcxBiBkNnUcwh5hCEheaimEPNIMIhM4Rw2AwjXGVWIRwxIygVNaOIEdqN24ybcYQT5jCEh5vDkedyaDpuc4Q5AvFXmFcgXGvWIv5K6D5uc6Q5EvGjzKsQHm2OQfzV5jWIGWuOhX+deR3ix5nXIzzehJ5rTjAnIHyjOQnhF80Xkf9l82X4r5ivwN9j7kH8r83X4L9hvgH/N+Zv4O8zf4vU/SZ0cvN35jvwD5p/gC/mqmKeq3w8V/l4rvKxDlXKOlQp61ClrEOVsg6VxzpUKetQpaxDlbIOVcpzWxHrUD7WoUpZhyplHaqUdahSXiMQ62PptVGi2/HbwzM/8Zxvz/AKz+32TJ7Hc3iBWEWw3mB/Dq8iiHN9UzN75nfwrkg36oHYMdB1smPbkIXYoFiLcU5o3iHWYzAOwWJaZ+1czOrC5nHBhgmSByMHlgmsl99h3t4FK0XsMspqF/USlIpCgtwEXL+v3gm7YzFkh9ALfoNx/kf1T7AOBEwfQ9MwwkeSoY3Tric/xvl8Cmg/0hZSa4z2VdRWW6OtpfYY8xupI8b8FjoHNsVrdK72tvY2dYFl8QmdB8viOHWFZZFH5+ut9dbUDTbFaPoObIpx1B1y4Xa6QL9Tv5N6wLK4h77LlkVPWBOP04X6E/oT1At2xHN0kf4irIne3K6L9aP6UbpEP6b/jfqyTdGPJcJlPM4HsC5TzuO2gm2BIRi906gSWv0BGmr8p/GfFMTo/ZxCGG9FFDb7YSxVsVYfY00+zhycgA6/imrMX5q/pGHm8+bzNNx8y3yLLjdTZopGgOfOoyvAc9VUC33+IboS+vwaGun/uf/nNMq/07+TrvLv9e+l0azhj+GZ4Wrmy2uYL6+13gAvjGWOvI65cBxz4fXWQesgjQcv/oFusA5Zh+hG5sWJzIs3MRdO4t7U1VGCl1Sd/QBzVCdeP53PU5zNqYNohsNJ32eO+Spreh1VsB093tGHJ4BTJjq26VTwy3TorV51JjTWYubtMlB6MqmgwWrmUb9xgQGtwrjQ6EWyf6kfkt36u/V3WDf/sP4Bq+QT6xPw5D+tf8KW+dz6HOPtC+sLKrb+Zf2LSqx6K0mlASkgky/gDrhJC+QF8kkPeAOFZAaKA8VkBUoDGgUCRsCgdgF/wKL2gdaBNtQx0D7Qns4JdAx0os6BzoFzqQuJN9VCAkszpSS0VOOrtIrsT71Sfzw5Kzm1PlFfmTwKjWVG6lh9IjkLOtNFqUnJx1JdYTP0Tc05Vfnke81z1lfWr092SJpJuX4HIM2BxTIH0HkVBmFho8S+NOd+XitK55zEOSfX70uOSQ5PTgC+W3lFa1X95OQKYeGkKtgmu1f8y4XYAcPIttD3rbRWkBNttbbk1tpr7cmjddQ6gjM6a+dhTj9fO5+KtO5adyrWemg9IA96aj0xDwptqAxz3yNkGT8zfkYB4+fGz6kVLNfPqLX/pD9FHVlXOlfYKLwiIWkW6pO5Ppnrk7g+ieuTUV8XhM9DrTLXKnOtEtcqca1CB0trWwprW25b22I8ZMZDZjxkxkNiPBTGQ2hYrZkXJeZFiXmxiHlRYl7MY17MZ170Mi8WMC/KzIsSeLGe3FYSHOlhjpSYIwuZI13gSC8pgULwpZf5UgNflsLG1sCdxcydGrjTT2UBCzzqYx7VmEd15tFS8GhnKuFRK+4n9MlI/Flinbz5OMXYrKNOPDbFfmhek7E5BbQRKyL5thXHks/LKw1ib62AW0+MqYtHkJtx9PIIKmTsihm7UsaujEeQmsGuG410sLtTrJOzzCCWGWW8ItahBTGizMlR+/z17MzqvLDCxSw8CXUrXKvQ3D3c58R9K3HfyixnFO5VN/dqXiO49mnNH2Tgypitrkd7b9Rv5JtEHusj6yNAPGGdAMSTFnRSK2WB8wJKwIXWeAIeyBubdvYuqn1HZQ5rCmJFgGybn2cFF1sKbrYRPGwd5An5bv0dlGnQFewbNHYf3MVtFXaAWKu41VlBEByvML+Sw6+C8xR23agX7wGleWyus8sn9mkSmThR6xLrfoYjWYizbrRABesuaynLdhfjS4yvxPjKjK9yBjXfnaPmu7nmH1h3/dtqlpV9gOtWjrjG8fse/02fVF2WS98DTv9+A84JZ/KzDZpVfnODaxqX/ftM8PnKcCwVO63yWfsyDbEIl6XK+HsLXCzLOWXTvzl8D1w6LNb+mq0h5MDhVucfTU6VnkXDbPqn0zIxux3nhDP5s8KN4O6DO2X7s+KdvSiGPTbLpeH2tR2H18BlwzkFzJxtc/Km62lafybNcZm4YXC7c7vsOpryYqb8j1I/4u8N4v+mGuIy5cTdfvrqdZlGeIIO6XBmPfdU5VbCZWOd3WfpdmCU+7b5dhL5dvlepQLf6743IBEhRxC7jSTfs75nSfZt921Hvud8kKm+Hb4d5PY973uePL4XfC9Qnu9F34uU79sJKAWAsgulXva9jFK7fbtR6hXfKyi1x7eHvL5f+X5Fhb69vr1U5Pu179co9apT6+tU7HsDdYsTRebXrPsl30uo48swKGQMihiD4kYYvOZ7DWUFHiWMR6kjTYWE3Ue2NJ3HmrtP9WF20IV1oPphHQjrrwtmmWKrGLNMmVUG/UezDOg/naxOPCObjl14q3ob9A9hBXrZsixiC69Ee1nbDV1EWHWq9k/tn6Tpso66dZfuIoMtPFMfog8hP1t4lj5Vn0oBtupa6ev0ddRaf0Z/htqwPdcW9txOasf2XAe2UzvxHk5nMb9aeVYeZP051nnO/NtNnGeTvE77fsjziil5+IzKZ5lYmYpUfNACQzXQ6lYq9E61p9oTc2VIDZNLvVIdh7aXWCWkWj7LR5plWibpVnerOxlWuTWQTCthjeIZx8qmhjoLtrJXfVbdDmoIypQwZcqYMipTRmfKmEwZP1PGYsoEmDKtmDKtmTJtmDJtmTLtmDLtmTIdmDIdmTKdmDKdmTJdmDJdm1Hm6/Ry9r2KWqbbfMq+VxF21jTs2PS9in7U3YkV+sibjImYnwnzcx35HS1FzOF3W/+DU5dZz2JG7ho4H1ZYGlJ3pCx0IIlcCnTcWmhVr+hHqDPrtUHElqplahnapKka2mSqJtrUWm2DPuykdkJPnKueCx2ql9oL+mYftQ9ocKnajwrUAeoAKlQHqYPABVVqhIrVuBoHtBoVNqp6vTqe5YWLtVNi7VSBVncDeaDVTSSvw2fBrBNFC2w+A016ZZ0pWtAUCltGHrY5SpxWVXKr3gaXiVadc5ZbxRJA6oAR0sfB8R7EdOedY+KdYzev+3rsnWO2zfJ5t7iQd4uLtLe1A+Dl/9D+Awj+Xvs9adpx7V8Y2a31tuDi9np7cG5HvSM49xy9Czi3q/4d8GkPvQedyzTswjTspt+pz6bu+hx9DvXgdZzv6nX6UurJO8S9eD+4N6/XXMp7wP14D/gy3mftz/usg3m1soJXIofwikylOcwcTkN5nzXEqzNVvM8a4X3WqJnySxTzK36Fqv1uv5tq/Hl+Lw3zF/lL6Qo/hgS/ZeFb6hPHRrH75F4xSsRZoW8Nm8487m1sfsRWze36LIxhsQ4lbAe3eqN6IzCYpk6D/S1wlBlHnXE8t0VwFLZS+nbUQraWDql/Ro1H1CMYdR+oH6CWD9UPyaM9pT0NXn5Ge5bfHfDt0LSbI0dtfP+nIy8qWF5UZGK/XF7I2lCWggcgBdUWkxRprlz035KikaRo8d5w1hvs3vhxRka0PB5COvR28FicQzq0PEb9+SytjdF9ZyALWhZTe41HrEQtZkyXiPGeLY14Tf0clklDBTZWkVUEupZapdCaVAsYWn7LIsVqZ7WD5tbR6gjp0MPqAc2tl9ULmtvFVh8qsC61LqVCq7/Vn4qsQdZgKrYqrUpAC1lhKrOuskZzWyXepaUceN3/7eLFO8PkSE1xcn2X07N1jtTcROLuy6ZMrGjLrarYG5PJz/vcpC5TH0Cs2MlWeA/bpa5S16DvHlYfgXb+C3UD+mijuhF9tEndgj7aqj4DXfx+/X5o4cv05dDCV+orIZV+qq+B5i32lTvqJ/ST0LaTepLONcgogLZdaBRTT6PUKKWLDJ8RoN7GRUYfGmB8bvalwS0yq2TTZ2lO+iwV9NFv0m/9/44+Nl+LE9knmBLL2HK1279SfQg1ilMMiroObXapT6ibUddT6lOo5Rm0toBb6+UTB4Xc2iJ9DVpbzO0s4Xb60E4J40OcJtD5HIHJbba4za3RZpXaGIZhUjvDQvs7cPs7nXXbRdYUTSeCtflqTsnzAGsaD4AHSN2Avpb4jIWM3vwp89W3gZ2wJu37lcsb7RBMRN2ToBMpvKvoUqer01HTjMzeYuFZxzc/x65A0tkVkMjFuwJu3uvx8F5Pvn03RYb1LE/hN9LYUlbcmbTvVIpWPiji5EN4wiQp+Zk4We4t3gsjY2Q7dyAfBLThjTQvoXN51EfV9WjP4+rjwP5p9Wlgf0h9n0p41vPxfKeqH6ufkqYeV4+TqYmXmvp5h97SJmo3UyvtFm0KtdNu02ZSB22N9jB11h7Rfkbn8Q59N+05bQd1Zz2uB+txPbU/aofoQu3P2p/pImhzJ6i3Vq+l6BLere/Hetxl+vn6+TRQ/67+XRqkX6L3o8H6AH0ADeV9kSDvi4QhjSZRlT5Fn0JR3tGP6Xfpd1Gc9bsE9Ls6qoZ+9xOq0R/SH6LL9bX6wzRCf0LfTLWs641kXW+U4TW8dJVRYpTQaNb4xrDGdx3reuNY17seut4wGs+63g2s693Iut5Ec7I5lW4ybzNvoynmD8wf0K3mXHMuTTXnmfNomnmPeS9NNxeaC2mGudhcTN/jvfyZrAne7i/2F9Odfs2v0Wx/a387+oG/o78j3c07/fP83/X3oh/6L/ZfTPf4L/NfRvf6h/iD9CN/lb+KfsznABb7r/RfRff5r/ZfTUv91/uvp2X+m/1T6AH/NP80+skZ776fTf6Hnhloy6Mgx05WgHgnSwH/805WoCBQQHmBtijB+2lsFxDv6Cq8o+vivVw379/m8/5twSn33eobjzAhs3iXl4wrjCtJNkbBOnKzdeT5mqPUxW8j7kQRtiXFm9/st7SJe72SbxprkmLFjNRR4gSFOlodDahirUyxaqwaclnDreHATOJ7PVrm5Ay+9ZvE7jOJf92VKL3a8hNn1hbrap0zcUKDFidUyHrLelvM1qipC+/bNatbpHIuysBOrzatdG6/Dc+qb6Ww1W3YRnujA3B/w/otsD5g/R762CHrL1T6FbUpXIK4hJtLFGb2GC2nlocEDP2oA6lpKt+IMlpnUsV/ElvUjjWXGifPTzP0zo2Fi6UWsbyS+VyRS7tPW0KeDMUbwZVWOnBXfwXcy6AN3I/YR9THMLOIM0356j/UT2DDivNKJZCGj2L0CWmosjTUIQ1/B0n6R+1PFGAJ2IYlYHuWgJ1Y6p3D55U6Q8bdBEtWSLcuLN3OY+nWVf8J5Nr5fF6pm/6U/hR9R39afxoWrpBrF/DppB4s13pCrpXShXwW6SI+i9SbzyJdzGeR+piWadEl5gXmBdTX7GcOoEtZ3g1gGVfO55IGmjebU2D/Crk2lGVZELLsPti84rxSFZ9Xipjvme/B5v3E/IRiLOPiLNcSLMuqWX7VsMwaxnJqOJ9dupzPLo3wb/ZvhkX8jP8ZquWzS1f6/+r/K430f+E/QaOsa61raXRWD9l8kT4dsAb0L+Sz8MTr5BKvkyt8mszNZ9PyeGW7gFe2C/nEVjHk3jwqMZYay2AxiNNqaoavhB0oduOnOvDXnrLX/521Nub1h5nf7haj1PcXXyrLumpF6XvU63LkEbi345w2nEeyUu3c2Wvs/MZ4pDyaE5LJ2r/pPEQ/ywFL4Tdw2/nsGh/LWWN2237O8Vdzvjd9R5y2ZedYzznGfkmOX3CO65rkaEyfDTnraZzn8Zw1Nc6zMUddTen8v7JS7Vqb59nUJM/YHHmeaJLnupz9tTlny5rm+mXOtjXN9WTO1jXt+6dytq9pri05W9g019M52ticj7bmqLF5rmdy1Ng817acVBXvyWuHUDt2It+zOenaPN/2nJRtnu+5nLS1+D1NvN/HZYh25KRu83zP56Rv83wv5KSwlckpOflezEnj5vl25qRy83wv5ajXnk3TOe3+2JWj3lz5Xs5Rb658u5vVK8snoU09n5xlO77ntf0r3OnkEe7Nb8lN+m/H7nT6oWmffds4p92/u/9XNXd0tt5eIEOmivcWhKEZCe0n+3MC7nRvJKTzSc5tRftuIt9KdO4g8u1DtlDe4LsLMr+twwVNbDPCnejf8pEs6i91p0VSiXjrKlx3OAvPRLSlP2ToCY75EkcN9xvsMxCSeolts1GcT0q6oB/eBKtZ3Hrw8K2HPL71UMQWQjHrjfmsMZp86yHA1kkrvvXgZ+vE4lsPrdmKaMMnP2S2IhS+9VDAtx68fAqkgG89ePnkRwlbEaV88sPHVoTKtx40tiJ0PgViOPepxa2HtmxFtOWzIIV866GQddd2fOuhPdt97TM3qZPoSaHNSnzroQPzi5tP2rr51oPOlkYeWxp5bGnksaWRx7ce0neZ0/eXr+Gby6vgCysij2895PGthzy2IkrZfihjy6GMbz242XLIY8shj2895PGthzy2HIr51GYHvvXQim89WMxFHfnWQzHfemjDtx4UvvXQkW/glPINnDK++9CR7z7ofPehLd996Ige3ckc+Kl4W3ju/8c59adeqd+TLE9eLN48kNya2pyKpbbXK8lw8mRKdt4GUZfqjO9jRCfX1I+rP1j/26Q4jT8cOT2p2pOv1x9OrkiuTu7ns/U9kjtTZalFDXCTU5HeDK6oOQP3692rKGMultnKUXgF1b5nrPA7A+x7xgrfM5b5nrHCa6r2PWMFcNP3jJXM3eKJCN+EOiSuQ4yUtt/CeXlxJ90401PzgXMD55Ih1mOZE+ZAQrgov3lvsxTeDaqLGeqYc1ZzrHNTfVE6nXO+yT1zZmfYvafTJ1zevsutcHmJywt6FzONJaaHwvSQmR55TA+F6aEwPVxMDzfTQ2F6eJgeMtNDZnrknQY9ejAX9oCbIeiRXMccLOjBXGync84Z/yXoYc+SXahn01lS/JsANX+rj32DQOIbBDaO0pdBoSn8rrWmUOz7AhKvi4tU8D//w4N9ph9jmf93ZzxF4cbTKU6wO7l+Bzv0Cfhfnms8320+FSz7/UvCImx8gpDjQYdc8ZK0hpqf8xPn5KKs15zd1WnglSxviVpSnhappX2L1PLjFqhFapFa5PqDLcJj6/7r1JIafdZrwehP/Tj1ZkvUQ7elxNrU2TyVYtezPDXprNcjeGBqi/TO0y3QOy0laWTMji0xOs9+z7TMPCP6v32ynBr2K0XrxBuxxa6Gze3jU57s39I19Z80+v2L+peyf0M7/mEWPBEzumkMLJ7K7DJNfru/eLB+ZaN9CMwhyTcaxSDXiVe/MlfOcv+qb1JO1Hi4fkmjVUjEfT43R9yTTeJEDXvPOEZg0aY59OPbcsR90Dzu5Igccd7Ti0vuzRE36zTj9spTm9UxNkdcXZO4r0elloz5Bj0it5HF/yEUUT/xZrTYOyRnPeK31OSRne+a2ObY1tiO2K7Y3tibsf2xg7FDsSOxY7GPY8djybgr7o2Xxc14m3ineNd4j3jveL/4oHgQKbH48PhIJ/6a+Pj4pPjU+Mz47Pi8+L3xxfFl8ZXxtfHH4hvjT8a3xV+I746/Gt8XPxB/N/5+/Gj8w/in8RMJSngSRQk1YSXaJTonuiV6Jvok+icqEuEEPvFlqGNfYkTiqsTYxITE5MT0xB2JOYn5zX0H2sLEksTyxKrEOsStT2xKbElsT+xM7Em8jhreSryTeC9xOPFBbDNSP0p8ljhZLVfnV5c47c1udVbbbb9ar25V3cGmQ3WX6u7VvexWA6921X2ry6srqyNOvE0H9qtrqmurxzg0yaJM9bj4SOS1fRtyNmXmAeLE6inVM6pnOZRpRpPqudULqhc5lGHfjnH8uuoV1attigHik9XiH9Jy/29hS7zneZt4Yzu40hT2Z6SCn5p433h5vDIeidfEa+Nj4uPiE+NT4mMix+Iz4rPic+MLosHY6/FF8bro4viK6JPx1fFH4xvim+Nb4zscVxffFd8bfzO+HyUPInQofgTwBEQBsyZ+DHA/BuTj8WT848ixyLHYe4AN6LE+sT7xYwJ6tCzhiq8QsBPeRBmgb04I8pjxrQmxp5n+p8WWoNEW3gss4rmQqtqBPvL/3Y5a8l9hGlEnTFQT/SD6UfSz6MmYHMuHE34Jf+uxVvjugKdLrHusV6xvrDxWGYtwWk2slnML1ys2hkvZ+eVYrYAXGweIE/FrCuJmxGbF5sYWAO4sxMgMexFy18F1YOgC9ooM7JrYan5q4Vq1KHW6850dhzrB96kouiC6KFqHZ1F0RXRBuDy6OvoonhUZrAr4P2IJmExEjPgvWAW1zySX80+rj5Q9Qvn8H6sF/O+qXv4X1ULx3xCSeJ96EbUS75wIzuRHwlMT7RPtH62IhqOJ6IjoVdGx0QnRydHp0Tuic/Ckw/OjCzO/l0SXR1dF13H8+ugmjt8S3R7dGd0TfT36VvSd6HvRww39zPlQjnsavca/sx+UEf2SqSsbvignyqTxS+OYxjNdBo/gGoGL6F2BL/9O50nj7cBmzsLD+KdxT+MtnqZ4N30E9wm8AIty/6vbtyChK9fyUxOZE5kfWRhZElkeWRV+NLIulAjG8L0+6I1simyJbEd4Z6hnZE/k9chbkXeCL1TuibwXORxKDF1tO6R8EPmo8nDks8jJqBzNj5ZUboksjOqRJdFWkeXRDtEu0e5VZtXaaK/Iqiozsj6yPto36I2WRzZFK6OVyAvo0Ui0Jlqbhp120THRcdGW/Qc4cVa9bwONhszmpygSiZQEKyIlcDUI10bGRMbhqcnC7WuPtcZSb4iXasLHwh+Hj4eTVa4qb0itKhu6o3I7vs3KO6pOVHWq6opwj6Grq3pX9asaVBUc2n1I76pY1XDkKrIdUkZWXTNkeNX4qklVU6tmVs0e0il8vGoeIN4LmIurllWtDM2PUNVawJ9fJV6z9xhgb6w6EfFEPEM6MfRtVS9U7U7DzrhXq/ZVHaD0/3e1uNQbfIyKwh+GPw2fwPNpFYU/rPJUFVWpeCiD1dfvifF8sq2IIlSKuuZ+7acoPCM8KzwXz6yKEoQXhBeF68KLKsRdym/6HzFfv3WNRv+gdfzUhD4MfRo6EaawJ1wUVsPWoM3hdvjuHO42+EC4Z7hPuH+4omJOOBxOVHwQHhG+asiu8NjwhPDk8HTHhcN3hOeE51cQYheGl4SXh1eFTjBEAdMTXhcuGrw2rIZWhtfjuzPcpnA3AX3Q/kH7kSqgTw9vAXQb9nbAmQB/e6gMteykhv9+aXEJOXAOPzWD1dC60PrQptCW0PZgMLQztCf0ejA4dEbordA7g0eE3gtZocOhD0IfDTw4GLIs9FnoZFgO54dLgu/bLvRRWA+3CncIdwl3D/cK9w2XhysBT0AUMLeEI6Htg2YGg+GacO2gmUNnDJ0x8BBgA3p4DFxEQB9UFh4H6DbsiYCeD39ieEq4JKR+mzQqv4qfmlBJqGbw/lDtwE9DY4JbQuNCEyvaBLdU1oSmhGYMnhKaNfTT0NzBydCC8q3Bw8Gi4PbQolBdaEVodSjiuAWhR0MbQptDW0M7Bh8J7QrtDb05eL+AKGAC6v7QmNDB4JaB/YIfhQ5W1lTWlO8AbEAPHYLbL6CXHwsdAXQb9jFAXwH/WOjj0OqKTi1Mo0NSCdOoHA8N6HNGT01wY/DJ4DbMhncEd1eOGLJsaCT4auWI4L7ggcqxQw8OrQy+O/AI+Opo8MPgp8ETIQp5ho4bKIeKQqrtgkfBke1CnUPdwI19gj1C/UMVgAeIAmblHeWbgrtD4coRoURoRCgMuP+HvfMBiyurEvx9rypFNSJNp9M00ohIIyIixoiINI10/aOqqHqv/v+nqqh/VDFsjIgYMxmMTGQxsvnoDBMz2RgxZphsOrKZLMZMJkY6xkyMGYyImUw2EzFmMGZZzGDETER6zzmvCui02u2un99+327ed37v5L4/9d59555z7ruXqivNPt1VPHszLI1jePZGVXNCd186d3Pnh3k4fycsXfAp9K2ev9evJv3R4/Zz50lyXrirGlQN6mp09bomWOsaGnU1z1erzrHVX0f6/X5759WfEiTJ0c5q52A5rPGpg9o5jV6r1B7WLjyf/Yf5lPoHJDnaPapp1bR2n/agpgvWh7VHQT+uPfm//SkPOCmyuvDXn+v3/EHEojqhzX/hqLbouQeqfM0mbam2omE7rKvrHdoa1UNtvWZT/VZVj2q7tkmr00w3NGlNDaNam7ZC7ZMW2OJRd2qD2pi2Rt2l7XhuVrMZzrdFW6Ttee6Bdru2TzugOqXdrR1W5cO6Gpb9cO4RbY12VDuq2Yxnb5pQFWmPrZw7vTy3oD2hrWH/J7949EfvA9ctMYsm8X/3wqRfUfqj1M4zC0X4rYA5sl3sh5ArO0Ag/qjDIAmQTpCulTWn3gpriOHqnSC7QIZA9oIcAIH8R30EZAxkHOQ0yATIBZDLIFMg10BuMl59m4Sp75Lw6nsgi6AvQQ8Ke1JKkFyQDSCFICUg5SBVIJuka9DU/ZZ1Y/pcqGvSxxhBLLSNaVwgAel66ZhD0j1qIiBJkM1SeXrNa7pJOM02kB2g96+USTIIskfS4XN5zb50+cG0HE7LUZDjICdBzoCcS+97kfZnmkmQaameNNdX6lzad4b2Y5pZkDmQBZAH6XtYlj5PK5fuVZsNkgeSL23XFqW3l6YFWqq2GgSevrYepGnlXuietToQE4gNxAMCPlkbA+kA2QLSk15vX7PO7N8HMpBed6SPG1izfTfIMMh+EOgta0dBjq2u8ZlpT4CcesNrXnt29VnRvUGk0l6Snvfvta569RrtW3tF+hyypXQ5fe5auQpyY3VN9laVtjcLXNMtKL8DMp+2PzzP/dW19iH+6In8CdWAardqWLVfNUIcJR4DnlCdAp5VnQdeUl0BXlXdAN5S3QHiUfOq+6qHaqZWqHPU69UF6mJ1mbpSvZFYu6I3qFVA3KpXC2oHxIawOgGUdImd6i71VnWveidxF3CI9CHS96oPAA+pjwDH1OPA0+oJIB51AXgZ9Cn1NfVN9W31XeA99SJwScMDoVyj1ORqNmgKNSWacmCVZpOmTtOo0WiMkH26iAFiBJjUbAZ2a7YBd2j6gYOaPcB9moNAPOqw5qjmuOak5ozmnOaiZlIzDbyumdHMEuc0C5oHmmWtXJsNzNPma5axRFsklae3QjSFeFejrcfoqTVlqNkM8a2Jyj1pYvzsgKjZQ9wO7CN9ACJnh3ZYux84AhGzQ3sMomKGp7Rntee1l7RXtFe1N7S3tHe089r7QDzbQ6lEx3SKDLEEcvn1ugJdsa5MV0ncuKJjea2uQafS6XWCzgFE3QcMg57Qdeq6dFt1vcSdK/ou3RBwr+4A8JDuCHBMNw48rZsg/QIQj72sm9Jd092EfP+u7p5uUbeUYTOvW2pWQn9kA+iFzSXN5c1VzZvwGprriI0ZvVnTbARaoI8RwB7LCrFXEWje1rwDeiXYl0DuIx5M91P6qafS33wGeir92FcBTjdfB+JRM82z1O940Lysl+uz9Xn6fH2RvhRYoa8mol6jrwfi1ia9Tm/SzOpteg8wqDfpY2l26Lfoe/Tb9X3EAeBu0neTPqzfDxzRjwKP6U8AT+nPAvGo88BLoF/RX9Xf0N/S3wHim5Mb+ocGBoTy9LuTAkOxoQxYadhoqDU0GFQGvUEwOIg+YhiYMHQCuwxbgb2GncBdhiHgXsMBIB51yHDEMGYYN5w2TBguGC4bpoDXDDcNt4l3DfcMi4YlI29UAnONGwxLWGIslMrTW0uM5cYq4yZjneakwWdszNCoMRqBUG60pCm9g0saNxO7V/Rtxh3AfuMgcI9xH/Cg8TDwqPE48KTxjPGc8aJxUs2M08brxhnjrHHOuEBne5AuWW6RG2daspFY0pLXkt9S1FLaUtFSTaxZ0bG8vqWpRddiarG1eICoB1tiLR0tW1p6Wra39LUM6O8gW3av6MMt+4EjLaPAYy0ngKdazgLPt1wCXmm5CsRjb7TcarnTMt9yv+WhiZkUppxHuN5UYGKGCVOxqcxUadpoqjU1mFRE/YoumBxAnylsSpg6TV0r3GrqBe407TINmfaaDhAPAY+QPmYaB542TQAvmC4Dp0zXgDdNt4F41F3TPdOiacnMm5XmXPMGc6G5xFxurgJuItYRceSvhLZmxv8s5ggRdRwJTI8C4gggcd8jOo4H9tOIYD+NCfbTaGA/HYVjgtdpPHDOvCCN/wlyIRuIY3sLQpFQCqwQqs3dQg2xXmgSdIJJsAkeISjEiB3ELUCT0APcLvQBB4TdwGFhP5XbhBFhVDgG+gnhlHBWOC9cEq4IV4UbwFvCHeC8cN9UhhQeikxUiDnierFA8IjFYhlwvVhJLBBG0uUSN4q1YoOoEvXmblEQHUAfMSwmgFAudopd4lbVcFrvFXeKu8QhcS/xwAoPiUeAY+I48LQ4AbwgXgZOideAN8Xb4l3xnrgoLokqC29RChWWXIsS9A0WpaXQUiJ4LOWWKuAmIpaMWOosjRaNxWixPEIsd1kCloi4y5K0bLZ0W7ZZdlj6LYOWPUDU9wEPgn7YchTvy3KceNJyRtIt5ywXgZOWaeB1ywxw1jIHXLA8AC5b5UA4Vuy0ZlvzrPnWImuptcJaba15hPXWJqDOarLarB5r0BqzdpgOIa1bVthj3Q7ssw5Yd1uHrfuBI8RR6zHgCesp61nMSaznrZeskKtgbmC9ar1hvaXear1jnQfetz6UIriNYRy0KWw5tvXaDluBrVjbgZHIVmartG3EqGSr1XVhrLE12FQ2cOk2wQZRD9uLzWcL2xKmIbRbW6ety7bV3G/rte0E7rINSTZm24vP13bAdsiGT7PXNgY1DPVgG7edtk1gndgumLulO7Vdtk0Br9luWmMYcWy3bXdt95r70fPbFm1Ldl7fY1fac4Eb7IWSf7aXoJezl9ur7JvAE7rsdcYI+hl7o11jN6LPsVta+tCT2F32gD1iqrUn7ZtNtWT5I/Zu+zb7Dnu/fdC+x77PftB+2H7Uftx+0n7Gfk5dZr9on1T77NP26/YZ2GcW9pmzL9gf2Jcdcke2I8+R7yhylDoqHNWOGke9+qZuytGku+nQOUwOm8PjCDpizYWOjuZyxxZHj2O7tsbR5xjQBh2QqziGHftNS44Rx6jjmOOE45TjrJRvOM47LjmuOK46ILfEjMJxy3HHMe+473joZPgUnIpMZHfmONcTC4DF9llnmbPSudFZ62xwqpx6p+B0OH3OsDPh7HR2Obc6e507nbucQ1JOq7E492qMUh4lZSnOA85DkLtS3ug84hwDjjtPa2bRNpwT2hHnBeeE87JzynnNedN523nXec+56Fxy8binJtel1BS6cl0bXIVS5qa66ipRDbvKXVVge5Sjuja56tRbNYOuRo3RpXFB4NMec1m0HS6XKwCMuJLaO67Nrm7IwcZc23Rdrh2ufuCga4+jSFPi2gfnP+g67DrqOu466SzDGnCdcZ1zXZRs23DXNemahvNcd83o9K5Z15xrwfXAteyWSxmmO9ud5853F7lL3RXYLtzV7hp3PWTpkKu7myS6dW6TlIG7bWvoIQbxU9wxYod7i7tHvdW93d2nvukecO+GLBoyavewe797JK2PEo9h+3KfkGoS82H3KeJZvCr3efcl9xX3eUknXnXfcN/SVrvvuOchH4as2H3f/dDDpBzYo1jDHB1rbtTe8az3FACLkZi1esokeio9G6VM1VPrafCodMUevUcAQjmUODw+KWu1NazSE8ZW70kQOyV6ujxbIReFjNTT69np2QW5KOSlniHPXs+B5nLPIc8RoMMzBjYZ8YxDbgnPxXNaomfCc8Fz2Zz0TEGEAs9s7vZc89yEuJn03Ab9rueeZ1Go8CxhRPDyXqU317tBzPEWeku85d4q7yZvnbfRq/EavRavyxuQfHvae2/zRrxJ72Zvt6Xf6vFu8+6QPKG33zvo3ePd5z3oPew9KpzyHvee9J7xnpNyACHovQixiaKMd9JyMhOjvdPe694Z76x3zrvgpWjrXfbJTWXotXzZ4mlfni/bl2/e4ysSbvlKhSu+Cl+197AUl0XBV2Pu9tX7mjCX8OlMQz6Tz4Yx3ecx9/uCPojFvg4fRGFxyteD8cu3Xdzl6/MNQPlu3zBEpWXf/kyk8I34Rn3HfCd8p+DaIJdwFfrO+s47y/DufJd8V3xXJU9rnvTd8N2C89zxzVtjGHN9930PRb2fYZzyK/w5/vX+An+xv8xf6d/or/U3YL35VXgev94v+B1+nz/sT+hy0If7O9PZDtA2nmYmq3H5u5BSiX8rsRevwb+TuMs/5N9rnvEf8B8yL/iPUDYCmYlt3D/mH5d0sRPp78VY4D+NXtd/2j/hvyDlFf7LEvEubHv9U/5rEC9IR8KeN/23xQb/Xf89yCggr/Av+pcCvJRF2MZX6e8VhYDSogzkBiD6BwoDJVLEt+1FBsoDVYFNUpQP1AUaA9jJNQYg7mM5lLgCASnKByJrmMQ4FdiM9PeS3h3YFtgBsRsieKA/MBjYA5Ea4nhgX+Bg4LDVFjgaOA48GTgD0Xk4cA5iMdR54CJxUqqZwHTguqU/MBOYtVYE5gIL1ljgQWDZNNQqb81uzWvNby1qLW2taK1urWmtb20C6lpNhqVWW6tHn98abI1pZls7Wre09sA+22FrX+tA6+7W4db9sHWkdbT1WOuJ1lOtZ1vPt17S3zBca71iuN16tfVG6y1DQ+sdg751vvV+68MgCyqCOcH1wYJgsdEVLDNGgpXBjcHaYENQFdQHhaAj6Ev3DpqC4RZTMBHsDHYFt7Z0BHuDO4O7gkPBvcED+pipMngok4cHjwTHguPB08EJ0C8ELwengteCN4O3g3eD94KLwaUQH1KGckMbQoWhklB5qCq0KVQXapR6oAYhpDHopZ6O1KcIGUOWkEvq5YUCLbuBkVDScBtjfWizcU+oO7TZ1BnaFtoR6g8NhvaE9oUOBhf1t3BPQ07osKEgdDR0PJTuZzUPhs5k+rNSHzN0DvuVBqFlAHt8oYuZTzceDE0Cqa8Umg5Bvyndxzmlvw9XNRMcc1cYikOzcP650ELoQWg5LDcuYA2Es8N54XwpV9GfDxeFS42RcEW42lQbrgnXh5vCurApbJP6g2FPOBiOhTvCW8I9mOeEt4f7wgN6Ofasw7uJw+H94RHoNUOi5T6LDI9Sb3qO9GP4KeETEsOnwtA7Dp9vOaG/Eb4UvgJ9Xuj/hq+Gb4RvpfU7xHnMl8L3pZrE3mv4YZpwVW2sTdGW08Yknbi+raCt2FjVVtZWCb1X6MO2bWyrbWuQeqxtqjXUG5fbBONMm6PNBwwjsY9pOyCxLdHWKfUr27ratrb1tpS27WzbBYRyKBlq2yv1MdsOrOEhzOLajhDHJLaNt52GniP0H9sm2i60XTYx7EW2TbVda7tpKmu73XYXeK9t0VTbthThg+P4XCJKYq4hJ7IhfDVSGClpMUXKI1UmFtkUqTPVRhojmub+iDFiibiw7yDFI/Rd4BW7I4FIJJKMbI50R7aZLZEdrsJIf2QQY0dkT2Rf5CAS9MORo5HjkZORM8BzK7wYmYxMR65HZiKzkTk4akHq00UWIg8iy1F5NDuaF82PFkVLoxXR6mhNpB/9J1LsjNZHm7zl6C2jOqJJGI1C/y7qiQajsWhHdEu0R1wf3S6MRPuiA9Hd0eHo/ugIcRT9ZPRYum8FjJ6InoqejZ6X+lnRS9Er0avRG9Fbwdroneh89H70YYzFFLGc2HpgQaw4VoY+M1ZJ3BirjTXEVEC9eSYmxBzBqZgvFg5OSTElloh1xrpiW2O9sZ2xXbGh2N7Ygdih2JHYWGzcXYFe1JuMnY5N6PNjF2KXY1Oxa7Gbsduxu7F7sUVrUWzJWhHn40prfjw3vqGlVIpQyHihtc83inq8xK+XMjd3Ubw8XhXfFK+LN5o3xDVxY9wSd8UD8Ug8GXFFLsY3R6bj3fFtkeX4jnh/fDC+J74vfjB+OH40fjx+Mn7GsBQ/FxmMX3zV2Sbj0/Hr8Zn4bHwuvhB/EF9OyBPZibxEfqIoUZqoSFQnahL1iSZIi0wJW8KTCCZiiY7ElkRPa01ie6IPOJDYHb+Y5nBiv2koMZIYTRxLnEicil5NnE2cT1xKXElcTdxI3ErcScwn7icetrN2RXtO+/r2gvbi9jJ8vu2V7Rutnvba9oZ2Vbs+frJdMCy1O9p97WHp2bUn2jvbu9q3tvc6itp3tu9qH2rf234AeKj9SPtY+3j76faJ9gvtl717xN72KXFX+7X2m8Db7Xfb77Uvti8l+aQymQvcEHMkC5MlyXLP5WRVcpNmNlmXbExqksakJelKBpIRfU8ymdyc7E5uS+5I9icHk3uS+5IHLY3uiuTh5NFoafJ48mTyDOx5Dva8mJxMTkufkryenEnOJueSC86y5IPkckputsQnzYFUdiovlS9uTBWJDanSVEWqOlWTqk81pXQpU8qW8iROpGyWulTQoknFUh2pLda+VI91d2p7qi81kNqdGk7tT42kRlPHUidSp1JnI9dT573lyNQlqdefupK6mrqRupW6k5rH7CV1H7OU1EN8i9LBpBaHOYa2KP2m4lWtA8+w+magQ9GR07E+MovxvaMA++AdxWiNHWXS2yH0D2JnR2VkEM5PmVjHxo5a82TkeEeDeVIqkd6rdKjMhR36+KYOocMh9fo7fB3hjgQ+axt+H+vT3D3u3xjjfsEtMp57yP2KyblXeI4p+HW8gj3Gv4nPYW/i8/gn2Jv5p/h89jhfyD/DnuBL+WfZk3wF/y72FP8F/gvsaZleZmAF63Trmlnhuq51H2NF615e9zIrzoWFvS23JNfMSnItuQEm5IZyP8P8uS/mfoP15V7MnWN/mzufu8iuwtVYmRxndLBc9jh7jD3BHOxNzMUiTGQx9jkWYP+J7WY72RD7PutnP2A/YpfYj7ls9k9cDvdm9gr3OPcUx3GFXAWn5Cycg3ua83HtXBGX4vq5Sm6AG+b03D7uC5yT+yr3Xc4v+4rsK1yPvFv+ce4T8h3yPu6T8gH557jt8hflL3I75J+X/xX3afkX5V/mdsrH5Me5z8pPyv+OG5R/Q/4Nbkj+Lfk/cC/K/1H+XW5YPiX/Pvd5+U35DPdX8ln5T7kD8p/Jf8aNyH8h/yX3Jfmv5a9wh9c9ue5J7m/WfX/dMndEsU5Rxk0r3ql4J3df8S5FNfcLxQcV9dyvFA2KJu4VhVqh4eUKncLMKxSiIsDnKtoUMb5IkVB08SWKjyt6+fcoPqvYzX9QMaQ4wD+v+KJilDcqXlK8xNsUY4rv8HbFpGKS/6jiiuIa36W4objB/6liRjHDb1f8RHGX/zPFnOIe/2nFzxX3+X7FomKZH8hiWW/mX8xan/UU/8Wsp7Oe5b+cVZ71Af541gtZnfxE1sey9vBzWX+Z9ZeynKzPZx2QvTnrpawx2ZNZx7PGZU9nfS3rlKwo63TWy7LirG9mXZGVZ/0g65qsJut61qysLuunWb+UaZXlyhMyh/Lnj71d9qPcX+X+Sp7HOLaVjdI4fCXLYuwd59LCp6VqRS8XI3W3xOS7A8/1VDqkv+aoG8G/z6jaotoq/Y3Ge03iQfGweFQ8Lp4UzzQ3NQ+L5/Rj4sWa7lomTorT4nVxRpxtHq6pwzkcYO/3yN5/wTiw94dg9a9wrzAZ2Hgek+d+KPdDbF3u87nP03ePvpU/zB9mjH+Jf4lx/Ff4rzCeP87/Lez9df7rbB1/nv8WtJTv8t9lSv57/PegvXyfn2bZ/DX+Gsvhf8j/EFrNj/gfsVz+Nv+v0HZ+xv8M2s4i/0u2XsbJOLZBBv/YU7J1MgXLl+XIcliBLF+Wz94iK5AVsELZM7Ii9oysQlbB3ip7n2wTK5Y1yBpYiaxR1sjeLmuSvcBK8cmzspwv5XyJvQPuKIdbvzq/QTjBtr/mnSq+UZ0HZt6lrr5PvYHvU8XK1fem+NZU9OH7UulN6cobUukt6QF6M4rvRfGt6IVXLZfp7Si+G80smXekKwv5vFzwZIvg+dYuJZZC8R6+M7VsgmPSS7rPXUeL0WIRb1tcsC90niyRzJtSOGdh5m0pzpt4rDPtU+TgU55If2MhfhsCftuenJWzd7J1rAqWLPZeWJSsHpbH6HsUslkjLG9iGqaF2sRvachlblgeZ17mY3kMui5wPkhY2JMsCcsG9jHWzZ5in2Tb2NPsU7C8hf05LIXgrV5kz7DPw/JW9p9hKWZ/Dbb/NvYSLG9nY7CUsr+D5Vn297CUsa/D8g72TXYeru8SLBXgGa+yd7Fr7J+htfwLLFXsx7C8h/0Elmq2wH4O1/6A/Tt7H1uG5f0cz2WxGi4bPGM992bwjM+BZ8xjDeAZC1kjV8y9nX2Ye5Z7lqnBU1YwDfhKC9OCr/QxHdfKhVkzF+EirIVLcAlmAu+ZYmauk+tkAvcR7iNM5D7O9TAL92dcH7OBZ+1nHvCtn2Ve7nPcIPNzQ9wQa+X2c/tZEPzsKRbiTnOnWZSb4F5mMe4C9w8swX2b+zZLct/hLrMU2e+fgI+oYJ3KSmUl+4iyWlnNtijfp9zEPqqsUdawjynrlfWsW9mobGQfV76gfIH1KE1KM/uEMqxsY59URpVR9qfwbOfh7tH2a+HpMfMhkCMgYyDjIKfTMpGWCyCXmd98xDxmHjefNk+YL5gvm6fM18w3zbeBd833zIuwLAm8oBRyhQ1CoVAilAtVwiahTmgUNIJRsAguISBEhKSwWegWtgk7hH5hUNgDyz7hoHBYOCocF04KZ4RzwkVhUpgWrm9YFGaEWWFOWBAegL4sysVsMW/DopgvFomlYoVYLdbAUi82iTrRBItN9MDWoBgTO8QtYg8s28W+fPolsHWRdSkIla25QfpLacMfzM7NsDxO1p5H1v4EWfuTZO0byNqfImvPJ2svIGsvJGt/hqy9iKy9mKz9bWTtJWTtpWTtz5K1l5G1v4OsvZys/Z1k7e9il2GpJJt/N9l8Fdl8Ndn8e8nmN5LNv49s/v1k8x8Am+dZLSfn5OyDZO11ZO313Fu5YrD/Eq6EPU/W3kjW/mGy9iaw9lb2AhfiQkxFdq4mO9eQnWvJznVg53/G9NynuE8xA/dZsHMj2XkL2bmZ+wvuL6BdoLWLYO1fhXbxNe5rzErWbiNrd3CXwc5d3CQ3ydxKp9LJPEqf0se8ypQyhd9Lnbcjbxf9NRD+vSlnegh2CY/RrACBXMi8Pl1WAFIMUgZSiWXyJ9JvzH634D6rI4ibzHWPCJZJf0Ooofdtq39J+LsF91kdYVwV/D+OMe4DWf17w98tuM+Zlb9EnKRxx9Wxxzl6ywk6jj/i6COOPeJbLBx3XBH8/+oI5O8WaXyyQ9gi9JDgqCSOSQ6nBXS8N2H/qtD/pXHKUVqjSLH19QX3W43ArxaMx5nzrhUa7VyVlVj9ekKxPB3Jf5NgdM9E+EyUfyOSyQQeFcwM1mYHb0Qy2UMmg8hkEZlMAterGYSUOTwqmfzh9WQDZBNwDsgqykkgq6BcYq3g6OujYoH8Yq0EIM94o5IZuX1UMiO5j8o+y8G1Qvf9BgR7dJbjOPZrXv6NgtvOWS7iaDDp1y0zb0hmLXM4XvwawXMsW05a5emx4zcimfHljNRY61cEtzeB4Cgz6isjzdYt9FmPCI430xrHWV5PpBHpkVcdj+PSawVHqB8VPPasNGJNY9W4vmW985uu57eJdR7HtW3sUZFGt20Fr5FiW9mrpNK2ccW3r/XFaV+Z8XG2WltDxgfhmPhaP7JiI2ue68ozSdcRjqBnrpnG0NdcE/oSWwL8CbR9W6fkA2xdUvvFdmXbasnFuIH2busF2WnblbFn25BlD34ObrftlcbcbWM40i720jjOhO0CluO94Vg7jrSjf8VxdvSTtnvSKDvGABxnJ98O94z2jiPuGf9sL5HG2/G+7XX2RqwLHG1H34nnRLFbpPF2HG1/dJSd6hfqlGIC1KH9MMTJdDyzHzXPZOrZfhzOg2PxcA7adg5H5O3TNO8lE2fXPqPMOVEyMSUdC+heITbSWD5e26x9LvOcaX94dvTsMS5jzMN7W7A/wDL7MsTwkrRgvG58RAJSXKZ4hbEYY3AmFg+mBewH7+01MXZWEodcKEWhGJuJq2lxZAs9KJkYSZKJjWti5atiZCZOpsWRB3EQYyHGPoiHjnzhDgodg7FuXpIVnwWCsxtonZ7hQG0M/Iejae0cB0cHlUMbxviB7RbbEbYnad6Dow99kWPAsRvbRaYdrPhFsC08D/o5xzD4pkwbwVkg4Lfw+IwPfLRtPdquMv5lpW3BOdBvOvY7RvCZ42yLzPH0GdDepNkXDvI7mbkX6MPxfuge0jMw6LjX80Hp63I8TPvxTPnyGh+Vvma610f9ceZ+cJZPWn6rr/st/tTJ0msF+M9Lq/IaP7nGV5J/zPjINf4Q96Xz4D7om6AOnDnW8871zgJnsbMMBXMbfN6Y09AMFCwDn5WZiZLJXzIzUigPgbwDZ6ZgPoE+LTNDJZMT4EwV8mkY/zFvAF/n3Os8gDHaeQjnp+CcCueE88JvmpPiUlI+lvaXNKcLc7NM3gSfnclR6Fzpc+A2nMOC/pLynExel8nDdq76YJJMDpPOPfBcmI+5Cl0lmO/g7JfM8bQ/3A/9H3NBaCd4bzgrhsowb8xIJk9cK4/mgpncb62k6/U1eV1GMJ/LyCM53UqO9htyM1ejJK+bm2HutTb/wpwrk3etzbHgWulY3CdTJ4+2LWh/OEvo0XblgirL5FiuAM4acm1GX5TZz9Xt2oZ2jbOHyJ4yfgz2wXaF9odrnFfk2uc6SHp6VhHK2vaG84vQR7guuibRPl3TruuvyWNAXDOuWRSyRxBqh+C3cA4SrR+4ljNtENuEWy7NRsq0P2xXOCKF7c1dIc1MwtlINM8sLXi/2MfCesJ7dpvcNrfHHaRzg/9wx9zkgzP74wwlnJ+Es5NwXhL6IveIe9R9zH3Cfcp9FuceYfxDIT8JOYH7ijT/CP0xzkBCO8VYKM1B8ig8OZ71WF+eAk8xzjDCfgLOJsJ6wjlGuD/OMsLZRZ6wJ4E5IPr/jG+WZhN5ekngfBhn0LZxXhHWuzSryHMI7cxzxDOG9YjP0TPuOU3bcD4RnuOyZwp9Oc4m8tyW5hF5ljIziFbnD2H94hwi8mNw/ziXiNYWrwvtwRvIzCLCGUTe/oz9YA6O+cfauURUnva5mVlFeH5sJ96L3snMHKIVW830A9IxCnWaX4TzjB54l7EMv/kqtz93iLH/P/7y/9D4C/7jZPSLLPxnkBx9dx7/A6KGSs6S/mXieioZJL2Q9M8SZVTyMul3iTEq+RkxSCXXiAeJb6ZvXfuPpP+QKP1u1EW6Ho6O2kK8StTSPt8gfpT2jCNfoaN4+m1g7u+JH6CSZ0jfRWyic2ZReQ+V3CP934hhKrlOZzuFXD6G/PUXqfxHRAt94iXaf4n4J1T+r6TvI9L5uU+T/hjt/2s6p/RZJ4nvoH3ozEygrfTb4MvSNXfQ1n8m2umaqQZkAeLztA9dG19OJW8ifRvtf5/0z5H+kNhN+7RR+RWikUr+J+kXSKcnzkvHbibeIlrpDN+hfZpJnyH9C8Qc2qcfKX8/lXyJmEflVOf8bSLdBfePpP+CSFbB3SRdQfrHqTbITrjHqZyeBW+gkm8S/5z2+QTVGNUSLz0RnnTJPt9De/4NXQk9cf6/Et9FJWS3PD0d7ldEB10/faJskniA+CRRqr07dNTniWS9Mqpb2XeJZJMyuhJ84Q46Wb6M7lT2IpGuQRZFrouQTvYmp1/wk8upZCfpPmI2sZfK/zvpe4n0i3eyfyHO0/VQO5W9jfh94teI1BbkHyKShciozl8hG2MvEanG2H8hUqthnUSyDUatmB2lo6Sap3bBqG7ZduI4keyKURth1LLYfyCOEP+a+HXiO+lsZAksRJSerJN0uk7234gfpD0lnXzLK9Tq07//Ta2MfZhINcY+QvxM+u4WiPN0jwvEebrTBeI83e8CcZ7ueoE4T/e+QES9nfSX05yn2lggzlOdLBDnqWYWiPNUPwvEeaqlBeI81dUCcZ5qbIE4T/W2QJyn2lsgzlMdLhDnqSYXiPNUnwvEearVBSLqk6hDTc5THS4Q56kOF4ig8+QtefpVd44skyML5MgP8O8mvYJI3oaT2q+LSK2JqyL9adJ/SST/yR0h0nOnX8LleMlP0nl4ybPVE+eIUqSYTV/JFF3JFF0JkH9f+nqwhJ4sR1cOPhO3voW2Ulvj/j19DVjuZpJPwKMeUDnZJ0e/nM3VUPk/kU4Wzv04be14LP1aFUf2xpEP5EaJUix7Px1LMYij6+e+QkwSyc6599A+1BY46ZtDyQ/w1L548lqc1GaleCFZfhfxe1RCbY07Q3oJkdo+/y26ToqV3FephNopT76LSRG5kdo4PUHZE1RC8ZSnViaj+pdTucxLpOgppxqTke/lqXXz3ybSr4pz9Ln8HtqHfgOPpxYney/pFNd4yUOSn5GRr+Yl3U/cSCVUk/ynqKSF9OdIl+xqgXieSsjeZGYi+VsZPXcZeSe5pNN9yRqI5MdkZIfyT5JOXl0m1YZIZ95BOtk8T/Ygo2ctk3wp1aRMisvSsfQE+QnSKQ7KKKbIKEbLpmgrWZSMPlFO9i+zkV5MOlmInPaXU3YkT1A5PXHZIpWEiX1UQvUskzKcn5BO1iKjDEH+dtJ/TqQMSvZW2vN/EKVoQt5SRp/OUd3yw8hXpPNT/sbP0FaKEfwyWQ7VA3+CPuUF2pMiNS/FEbJbGeV4MvLYskqidD1kw7KfEiWfQJkMv5VKSumz6DnyFOVlFOVlA0Ty2Dy1NZ5yTk6K+xQj+N20z7NEioz8/2Lv/ON9rLLF//z8HPmVdJJOJ3MykpCEjHRGkvxOOnye5/OrkpGRypgyklxJP0am5BiMkV9jjCSMJFHnSK6QDDIIybgyMkiFkXE5vmu993M46fS67ut+/7v39bzWOqv1rL322muvvfba+5wezLJHLHnEnlcBbHZ5VrpL9LpkHhefO7ngqnDIco6ZQXZSl9rJYSd1yAmO0YM33AVgo58a0mGksoo3oXkTNZhgl0woK24TvpVM67CXOSbOn0Pmo6iXTVgiuITKoSTt3S445T8muBJ0RegboW9U2npWdnW7pKnXQXAzfyBve/H2d9AvCm7ivwHdAdpouBG6G21vENwIfjOvP3q0bRN6yUjtJthPq+QZ/Zc7LX+IYPfMh3DmCc6WWBbs/0rwQlpNU0tOQ58uxqoR8B+CbgrdFLoZ/TaN8BDwL5ERnaf/w2sgeLd5q7S8TWMnHqD3rn4lxbFb1OYzr8K/DjxScGNkblTLBc/A5iHQBtcEF8I3befjn5vx4YN4qS9v4bvb4FRAxsKq1+A8Qu9zsbAz/Iuhb0XP47z9DD2fYf/FjF3ent6gPj+9wZ8Kx6dtc9r2UfuhG0M38VrC7wfdHM3wwU1524S3P/HUGz/xH8LOlkgq3dQ9goyZhRfRVoRtjIsIaepPQ17xDd5sJGfjGUbntQAXINmbvhbT12N6IlBL3FcUO3dLDS44dlA4v1bsNYDerlj4i+Eshp4DPQd6JPRI6MPQWpncnVVT2yp27i65TTO231Oq5QOK3Wb0dT30WsXO9XCe8wdolavYec5wsKQjuDKWPBd7XWViSaVVszNINXgPoGcQrXoh/zLyt9LLG7y9lbe3Mq6h4KXIVInwHDhzoEdCj4Q+DK3julx7d9+g91sZ12/RvM1/VHqcrdjZRi8rsWEwmhfgmbfQsA3730LDVOwfpv73pjELw2g7jLbdaDtd+f69vJ2ub21HaZtZkwMDHJW0M8g/Du4Mx2G+xisWWsc1QLHQOq5HFQutVrVTLPTrWimBHWzriG116b0jfY2HvlqxdQwOnnTeBRPb3o+QacJYmqDHItI6w7fgW/gfO+Xt73U3UexYeLWPejX2EHPXB/nx/s9E8/uKnfGGg5fejTAjpa9ZGtveaiJ8FpKzkNmv2L+GHt8Bz9JWwlkMPQd6DvRI6JHQh6EPQ7cV+jrFzqySNWLbcl9kYu9h53L6ugR6N1FxScSRjOSu9mtgTwvlYE8lbLhEbbY/UWvduGYD+xO8+gn+mQ7+GbP5ZySPEu3VFNtHkTyKDPL2UZXxsum9kLl4E58XYkkh/T4BXkzvhazrxXigkHW9GA8Usq4X44FCovcJPFCoK9p7AlwM5y/4/A76+hN93aF9uS8rnXWlD2042mPWVTGd64nYPDHiz4GfkLbZ6KmBnmwzOiLnFHg1lntmpFjrEc94252LT3bTajf6P0ZyN2t2rq44+6T3kdA9FdsnkTwZqyN9TVLsFoJvVWyf9I8qR7HQW6C3QBdDF9O2Nq1qQ3eibSel8clG7wOJlmsVOxvxv6O0OwwOK9cp8DYL5y3FToHhYMNyrGoM/Qx0S/8TlfSfE7o++pugbRfacpE8hWQ7OO0Y3VfItFdsf2U4SFYFd2akH4NXM8bOjHE1Y+zMGFczxs6M8VNsaK822F+xTpvSVx9P+F6eYses1j7oP4w9fbSt7Au1Nf+oBq8Bo+jDKPJ1Lrzaip182ubT9hPaduXtJG+w0vrWOs7cjVRsHTcc7GcsTkdwHcXWcZ0753nFQsu4nO6KhS6GLqatWnWzYuGLbfbvFVvHsa0K0bKU3qvgvU70vo/etxsOPfbFhn8h/x4y/+Ltv1izxYxuO/xi+MW02k6rYrJfDcV2MV51iZyZzJ2LTzrih6bg681IdVze9YyxI9bGmYUcZiFOq7hKem3BT9MqTqunaRVXbwi9BboYuphWtZGvDX0V9FXI5Ar9W8VOvOS47uPY+THR9TnWvmBoxrgHb/Tz6ipt7NHsZ3/O/E5m7MfAn+Ol2Vj+pWJ7NhpmI3kzlhPb9hgk59FXP/qah+Q8JFshMw+ZuZ7sxe6Tiu259N4e713HXLQ3HDzTAP3t8UwDPNMezzTAM+3xTAM80561cBjPtGe9H1YstHopxEuD6P0MfdVkxs+Q5eorHWuLT+objvYba+vrOaK+9iX0M0IXmxhjXCuQnwtnheEw0sfACxjvClbuAlbuW3imA555C/m3kOyF5Fus3w6s34PeLzRfKbYPInnQX6cc8FDF9jHwQX8KnCnQA6AHQN8HfR/0B9AfQB9CzyGliefLtZdYRXq8HM938f9d6Gl6dnC60PsJravddortE4aDJfdgw27wgQg/rZL+Dcon8mP+e8L5XLET07b+Nf5qoXP8FcL/yn9faXSWYMNIRl1iOPTye/BW9Jcwxq2MsYQxbmWMJYxxK2MswYat2FDCjPfy10ovKxXbNaP4l1OGu0qxvaekvmJ6WUUve9C2Cm170LYKbXv8d3QdKRb71UvT1Uty5D5I3bVSOH+mzrya7HdQ29qjFVsHI47q/zfFTi3wT8GP6wxazKCTp9hiBp2bFQv9sdAN1R6LWbMOeverZvBuLHycvnbrWKx/Qs+g338aTiRflbfaYzss2ccohjKKffjqY5V031RJ++PIZpGxn1NsHcxqJW2fAC/SeXSb6Hz5h5k7U1XmQC9TLF5Sr35Gjy0jPAXOFH1LhKzWefE6I59L282GRlsuGnYp9q5EQ662FXoK9ADoAdD3Qd8H/QE0+6/Ol3cts5brzdUaWLHol7OnO4T4f5V+h7D2txjL1W/uFvWMu52YfAD+XkNjyV58OAZcyNv1vKWiswuxvBJvhzLSXP8jYkbj8DFicrhiy6ypy70zGgmK7dBwYpeJfLZi+yk0/BKZHOZoO3gyvWzHnjrG/3h4u/Ew62U7/slhvWzHPzlE+Hb8k0NOmKxYaPXV1YrtDehfQuRsQPNOpf33FTs7DUf79d/X2wahB0Dr2iyi7TDaFjGWjXCWwtnIituI5Uvxz0bsXErb8V5GtB1XbI+PzjUqmY3ktAg/rTK6Kp216kN3h6/VZpOSrpaeaicpzmLsWbUsPQ8qpwqcpXCqaF0tJ0fOX8q394EdJGcZrBxvP/Kz/HdldMXMWiFvC3m7WN/6XzGnR5Uv1e9iql/VfBQZT2Uk3+rbg7GfsuLIGHBK4GxVjuSuKdBkA+XbGxRbtHVyDUZ+l8p7673hxKryc+BvV75vKV+8OgWv6u6wkbdL6eUk/Z6MTaUq7iL0ajjFcDrDeZMa+y5ToSnf3qFYqq9J1Bhg5UgNI/J+jqc5qj389vAbwL/d+1T3QfSvQOcC6vYV9LVAZZyFnJvMaX0vcVUXTis4deHkcfqo5GcrDedGzvUW+fbG6EainvR4RexuoZ9Cwww0fMH9xtWGZo1/xnnkGGeTJwyNhrG63uUkq3vfWGLv75z+ihTbf0emCq0KaZVT0sbSewPtd5T2673G2b+i/3PBX0L3QM+lnJsqwblUOV4Lzk3PKo5NMjT8d805WjXLXqm9X87KWs4qns+4VjGW+djTkLZL0N+wRPesLVg4Fgu3mLsjWj1Cq5bYPBufNIAz25xA9Y7OWwzuiZ34zR0ALkIyy2CVj3GCq1CsOMb5JfYbXZsVLMWxx9nruVvwf8fcLWV0PXXlemaPPq15IIblWdw/xB5BT0N9G/tIsb9WZZyRnBn3c/Y/wMl3NufNt8zNBvRN5t6AUzaS9jpazTMnzTOv0NdCsfBVbjCWGJu9+Wqz95zS+GEbIyrCn/24r3ib+4qY+s0zdzJ3xzYT4Xo2BEsmUfqB6K5G6ceQ2R/dThha+ZdwZq8E/xr4lcCLzSk+ojcTe8b/bwrnJUY3FnuWYM9Y5jErOoMvFflv2SPu5kz9CrdY3Bd5qzlfH+XewDP3gf5+Im2/0npz6zwH549wnlOOnO6VM1CxfRSOybTsXPYYE1en9R7++tg24a+NPa80GWAQ/T6ADYMMp8QB5wm+HHwruAptC2m7EgvfwsJhaJiGhmFoGMatwkvcgQwzt3OqQTK26mmHTBOwZTD3hCPRZqmM24eZ7cstRx/VH3tI9bsDkB9Pj+/T43jDQfMl+HM3/GuUdrqSzT6BH8e3n8A5k9VB9/fYcc3zWXOVzkrhedVczcwCOgtLpoKVvoP94k/c89yhetyXVT7rSmx7GUuy0VADG7LxQ1NuRE8hM44IP4bkTVqneRUVOzex4qprpS01vObkG/wc9gjhODWpuxx2NKpi/xDZrzo1zDGNLvvjqD7UCjAPnTnUimRg2RGu1BOQv0Zpk7epoz6jFqpLfE5T2vsczjRkppkKB/0h54I5ir2bqSt6w1+ku7/bnhpgEbZt0qyS1YF6YxN6NmLPIM0Pfj1yxRZyy2Yyxi1URBWoHC7XmidW0a8iHDKVk039f0Kxk001ss6cL7JaUCG0YLe9jX32PnaudexiOqK2xgbNG1kdsHO61j9ytnqHs5XB5iTyDucXg6neqUI7KbY4lzkNqMR2IbOLVg8g8xU12API7I2qNeWsoMcMnllR0lpnBJs/w+YsTlvfKrZn4UnOIDKDWi/lQm/mdLCRanApoxvEuH7FHP2KVlMUux1Vj7+bGpgbZrcj1TI1v9sRv53wZOzuQsVyNtQsUYgG9i/7Kuq9GeCrkG/DjE/EwoOaPexTxG2M/JDDiqjAui4BL4l9K5x/Vyznr/s4i2kF28JEo/JlxX1LjZRHFdeKGWyFhknUUXpXcLNitwl7UxWdL6E1Zg5rDemavJGDf5YpR1bNOnp5mlOAnv5m4sO90L9hvRfCWQ+n0FQ4sWup+fW8Xxh7SWn9bZpU8ndZeso7LfT9SN7PSHPIAzEs30C1toRqbQP27MTC96lyN9GqCHuG0WMRNfNIauaN8Jci+Qmx+hry5DG7R6yB8N8D79Q6X3ROotUhWlGXktuHktubx7SWGx57Srz3Neulhd5aeNX0xsZpwdr/ltuMbdzhfBtxVMMrnn4NodhTb9/rjRD5Avw5GNtuQU9V9Dzt6T7Yz9BE1wtoW47mXENHN7F6e9bKe1Y4H3hbNWN7zyhtbqKQv17lrRIiuQ89MlPeVXpDaHEraH+ptG1uG76B3ssdzlpDY8MVyvHXK8e9gt47mJs9bhqLqQGeVkucD3WMfiPG+CGSVzC6yxgRbe3j2NaRsRzX2sxtCb0V/kxDIzmXe6G52J9Az0j0JNDcDhsaYNVXWLsEDfVoRSVjfwHnCTjrPM3bj3iaq9dR59TWW6as1dxr1YYzR+kKXeHMYafoRy8nwNXgrNe6wn+IvPoMeRhPxh7BS/weMPaoLztXVoyarRbW3s+9Vkbv5fxruZ0zu8MAcxPL27XmzpNqrS132g+Ye7Azk0UPEZK1WscSq2qs1VqoQlet0/wS7glvJCpuJirOlPxGNPSN7sz1DrAFN6VtuRv/nLvBydBj8G22uadFQz6z2VE12Hu8VSL5umJ7FZyT3Mv15FY8zg15Dnd0K7B5gfldg693jFeTA09STRX4deXtPhP/ZMV5/uVaiyIzD85kfr9QTWXse83vO6imHHocRo+VyQPmTFoL/i742VG1o3njY4N5ez1vn8Xn+VhbG04+8vncnWZzd5pvbvi1rZzpqMTMGRD8GqOrweiKqZ1c9Zg/gxtRVzX7M1Wz66K5I301pa+OhkOrV80dMra9gN++5SZ/ts99MpzZ9LiKau3mWHPlxPZBj8Nv2rYfkvOQnIe1LUsetvS8qWM/w/3wFZwrz1BB1ddWsbZYmEerfegpRs8+bmU3kqVXwJ8LfwmReQ02r6PVW4q9bFbcPFo9Ca6vd8ui/wQ5vxORoPTJ2O1Us4LtA+ySi6mmDjC/U7hHvcO7Umk4f4HzBzh/OXOp/qaG/TGHimgBu/mnaDiN/GmqqUHs1BXhvEEvITJvkMHu4O1VSNYyNJJ57MIfgvO469ujf2vhdPP0juISxU43JNfr7Z/LHY69nn18v/4ljGSeXkpHua4X+b+X0sjkUVesiW47ZwvdGm1Poucx9utcKsnH4E+Ccz2cSXB+D2cqVWhNX29dplKH3KgaYhW4QeKk794I3/z+Oocq6DrefksNeR0yeZr9/D8rds2NwYfcVfbz9Lckr1Anj+ak/wr2H6Vtf6x9AHv+hj39sfBvvH3RvFV5a6upcMDt8d5sxRa/HXB+orTkYa3WelGtrcNj0/BhJ6ru3tz+rWQu+sP5NZwvuONdwF68GczfM9gH2KM9OF5UP1eUVi+BC9Q22SPuZ5+VHr00N2m3YE99/PM1b+tHs6wcMzvrye3Pmrs+/ZsWqQQGsreqzC/g/+NMU6HR6T6CtRXQMwarmmPVWjx/j/lNAXvZKE6sszmxjkL+gKcyS73L9YaWuejG2eQLPZs4P6ZH7redH0dxolXWbURXTXMqwZPt8eTHcIppdYNbxNp5hKjQnfqvuoJiKbwxnDGysmID4axGhmo5NgTOt2fai55BekLxpnvzlGZENTgrtWLUMzgXbFEZ/3ZktrByb9G3/mB/sNLItCPG0qxQfufrHIbTg3k5bKom7ka4JxG6JzmqJ6PQHn3VZuMN9zFdlU6RtvVtNHCz6jajJq/GSr+I2VnK24uieVeZPyl2GsCpjcwOZGqbGyQvzepOK41Vq5G5kbhdDedt7yF8/pDS5vcCJTfpGlfbLPP7+jXY+TrRsgbbLmZGOM35nOYcTnNOS+9h/a2cd4XS5p4NO6dqVDg99C/WvOHuV0oj38P9UjhPubqzjPPuEPqA/v2VM45eWmm8xf5ILm2FtkVeb6HvVywxxm8TnFeUVmxvZnSjGN3mqHbK4GHlfBFxjM91LNPgm9PrTayyKsRnE89jFIKdzxX7Sw2NVU20KvCTiiVTyVhs8qf7n+AsxbEahqbHV7GhE329CudRPLYHzqNmrZHn93t6K9hTsT2fVpchw32gu4ycXA/+MTTUw/LfYfk/sPx3cLoisxCZX3HS/4aM9yuzW7Gu81jXA6nB6uHJNuwsrQyNnn5w7oPTj1PeF8T8w1j7BNp2wmkO50F+i7Gee4DXoqpb7d+jUeGuU2zv0axuj9C/i3P+qtgeEf3m7iKR+bWRZxfI09+PxK7gtsr8vnI3s5bBtkcY9f2MmttFpxecTnB6weliflNJjq0JLgT3YL2/gAc2wCkCj49+szlB6B2Mq7PmMdl5c9mRNfu9gcw88vkZWr2Lt3Ox/F3edmPVH+NGK5f7xtzYmyJTOboZ1pzZglvc5dRs/IbaaRurRPbWE816pZ33oY942/Ck1ldnOAWc5sb4Ov27RMnquhLn4JkPmCnuZGTd/Vz/zw5H6lUnofuIW997UHv3/ih4udLOYe8bS/9mRrB7xJtl6R2CSFo7Fdt9adVBsT9HsRcDN/KGsjYfZGf8UE8EaDilb2M9aFUAbsb+dQJcwdNdYIf7pM6sq79RLVDaGa7/95zzsGJ3gLsLbSJprVFs1zat4GxS7B1SLKNQPMN9SUeBnrbkjVVGD28Tiv0RaDgB3gUeBV7o6t17PcVufcVOkZthXWhknoBT3U9hrd74VVaOtUlpa6dikVd6jcr7+ejJQ+cy2jZ29d6vrjtRI8GdgZ1z9eactgvBLcF7IxuUTtB2qjtEYxh+qwjP1dog0jBDvYRVi5W2d2OJ69iK/WOCHWjHcZRjL+Ot/u1xU3sPf5WqvxPs5ozSOk0zp1PkvKxZ1/m1Wuv8SfBWpZ3nHb2/Hebo74kclbcLwQWK3YeQGe/wN3vOGME3uC8IfgO6ofsqesZoDYYkbZ07aPsy9KVoO6pRav+N3k86sueK4RoVCacmdlbTleJo9T7biWnN4FwsON+5Vs84Km93Bd+t2PqnYtdFQwe0xZ0rNKs4G9Cp9HHnc83G0HOR7IKGEtr+CHof+H1bPbwIGw7YPxbJRrbeIOn/2WPbp+x9mjEU26ftY5pnnMaCVzjDuZ3I1v3U3q1WKbZvc2oox1mie4f9d60HwLngRopFp2Drc+gx4Or2LiR3aWaA3mkP0WyDzg32TMHj7E+1wqTtP9UGy9ITt2V5XyuOZUP/B3QV/ka9EvRP4P8Zjmjw/hCbqbhEq6Y/ZEnGjl2pnNiVcFK8TUG3hW5raJX0DsE5BOcQnDNwzijH3a+0u9/Q+tadB2eecvzKSvuVDU3bU7Q9hbZTyvFbI9NaOY6ntOMZGvmxyI+F8xJvXzI0b+vxth6930O/9xgaS3oZDGcAbwfQ7720ulfp2Cf44RMsrI8l9Q2NbVlwsuB0ge5iaN7eBecu9HyFnq/QXxv9tZHshQw2eAn4CUMbX4H3Yds+7NyHZjT4RkNtRjqKtqOUk1VL6axahubttby9Fg3voe09Q6P/GJxjaMugOYMNeNvD2+5HyHwE/wH4D0A/Dv04MsORGQ7dDbobMiOQGQE9GHow9BToKUrbRJFtoojY84g9pxVz2gqdH6LzQ/i74e+Gxj8O/nG+hv4a+S3Ib8H/MfwfQ38h+guh+0D3gZ4DPQf6Heh30PMBej6A/wb8N+B/Cf9LaObaZa7dJHQSeWLSIybd0/BPYw/jiplxrYO/DvoZ6GegH4R+EPkbkL8Bnc3Q2QwZ4sd70WDe9oPux9v/RMN/4plf4plfwl8Jf6XRRoTcTqvbmYutzMVWJJcjuRz+AfgH4P8R/h+NvGqQakf158KhX9v0y6gdM+rejKI3/c6gxxnQLaBbQOdD5yOPZ2J4xlmLnrX0fjW9X01f39DXN8jMR2Y+NGN0GKNTBF1EW6LOJer8JUT7EvhEsmsieRr0NOjroK+DJju5ZCd/HG3HQa+CXoX907F/OvQm6E20PcZaG67YNnlyDphM5V+GhstMDMC/k7Z3oocc6JEDPTPjJmNMoe0w2g7Dkmugr0EPHnPxmF8Vyap4g7XpsDadutB1yRUXkTcuQvNeetmLntfR8zr8W+Hfik70+GaNt4HfBroqNH1VeF37rUDbCoyxAmOMucysi5726GmPDW9jw9vQ2dDZyF9p8jk+XIvO8WgbjyR5Pos8722m981oroPmOoyCDOySgV3mzmXuvBT73Sfoj3KpyZn09SaSbyLZGM2NsYf1EmO9OLfhw9vQvAj5RcizI3hmR2C9+2a990WmL5azK2WxK8XI27FaZn1hw1/Q8Bc4aHPR5rxAjy/Qy0FkDqLht2j4LTQ7Y8zsjMSPQ/y4j6LnUZMTGOPVrN/5ROY39Euu8EyuOIz8Yfr6K/y/Qs+EnokMu4/L7uMehT6K/ib02wR7oGPQPrb52OY1RU9T2qZpm4YmElwiwR0DPQaaMbqM0Z0IPRFPrseT64m0OLERpy+qF5/qxcefPv6MbcCeDbRlRrKYkRhtY7T16MszfZFjXXKsezP0zSbz48NX4LxCL+xfvqmdbkLDTdC3QN8CfTf03WjYSNuNeOwLPPYF9L+g/4X888g/j4U/w8Kfwe8Ovzv9Eqs+seo3h26OntHoGQ3NOnVYpw6z5jBr3iD0DILGAx4ecLHTNXYy+y6z75JRXZNR34V+l7YP0fYhaNa1x7p2r0DmCuz/Bfb/AprVGmO1ZiGThYxHFHlEkT+EsQxBnooxRsXoke09sr3HXumxV7rsXy77l38xbS9Gpjoy1aHZoz32aJec5pLTXGxzsc2hanJM1UTN4FIz+PTl05c3ED0DoV+Dfg16NvRs5MlOvqlC4bvwXSLQJQL91cishr8L/i7GSy6NkUtdagCXGsA5gm1H6Is87JGHfWR8UycwL56Zl2LoYvRURE9F9E9G/2RkyF2eyV3LoJchX4B8AXQOdA40vnXxrUut6FIrxkaicyR24ivH+IpV5rHKvE+hP4Vmp/ZMNUIO9MiBNrWcTS0XewqdT9HXk/T1JPpPov8kfCoHl8rBG4qeodDboLchT7ZxTLYh5l1i3jpinbDOfvE/7GL9ovSrXPo1rjJf4BpqvsEVPQWA+RaXec5+kav0C1z69a2yX92KvrjFE24FzL/jZ578RJuy392KvrPV0/yLfYkxQvFdLf2m1tmnD1/V4l/oi55NfE9rcmIvVopdyOkb7Vf6kVHaVeZYjtXl/8v3zu+0qlp3yXMJ3zuvzvfOL+V755dZ+r3zGlZfq591ufWwPDl89fxKvnp+FV89/xFfPc/jq+dX89XzH/PV8zp89fwavnp+LV89r8dXz6/jq+f1+ep5A7563tBaa62zGlnr5bmRr5434avnTfnq+U189by59YX1D+sn1kF5WvLt81v49vlP+fb5rXz7vDXfPr+Nb5+34dvnbe1adi3rDjvPzrPa8e3z9nz7vAPfPu/It8878e3zznz7vAvfPr+Tb5935dvnd9n/Zj9l3W0/bT9t9eDb53G+fR7w7fMEXz1P2m/Zb1spe6m91LqHr57fy1fPe/LV817eKO831s+833kTrQe8Jd5S6+feB94q60Fvv/cP6yHvn95x6xFL/zWQYediOGhoNQka6jcJg1ZBW/3+nn5vr/Q7e8FAniH6TTa+n8cX9M5+PU//NU591ui/xKn/DifPPrD+a5y7zb/HqY9GktNAIun6KJKq07/GkCOzdq3Ek0aPJzPSROJJoydG9GRJ7NwhUaVfy79I4iUlUaURU4mIqcwX8qtI1DwksaXxUU2io1AiTCOjusTFLIkwjYls6w15LiMmahATl0tErJRI1i/hXyFRsF1iTuPgSuIgl6/fXyWxcMCqxazn2dVkvq9mpmszuz9mXuvIvPa0rmFGr5UZHWDVswfJjNbna/YN7BdlFhsyi9czi434dv0N9tv2Equx1B/NK+Sfm4/4cO+S+PDvPc/HX4yPjU88+0yNz4yeOd97FsQXx4uiZ0V8jTzrhXP+szm+I75bnn3yHOI5Aj4RLyl9Ai+oWM5TTdvLzxrRkxs9tYN68jQSaFbO0zJoHbQ7+3RB1jwF0ZP43nNv0DvoFww4+wwKhkbPiO89I4PRZ/saF0ySp4twzn+mB7OCufJofwt5lgTLBK+khXnWlqN9RLCR9iNKPRtsjZ6dwR559gvMKuc5LOM7VvpIq5OlT2iZ5/ueCmNh5WBZWP3sUzOsxVOnjCeiJ6wfNpZYKH3ErrB5mH/e00agQ9iVp4c8qYjfM+wj+OGzsVIU1AgfDQeX8wwLnw1HhWPCCTyTwxnRMzucL/+9SJ53wkXn9Jx7wuXB1nDV2Wd+uK70iby/MJiu8R1uInIXh9vCXRpj4V48cUDjI/xaqOOMNj88lXDUooSDdqNJIiVRgTkanaiayFYqkaPeT+Th6TaJurJ2xoZ1ZN3MTDQMChJNRPuyRIt4UaJVoq1E875EJ4n2ioluwclEIJHcrMeuRCbsETRLtJU4yRXZXom+if7BscTAxJCErkeN/2aJ5xnlPpmxWJCbeDHRXzSOTUyUtaMyjAhJs1Z0dnPjaxJTw8HB2vjwxEzh1xO5ifFDQb3EHKHGhscTC8TGxYmixIrEmsT6xGbW8hrzJHYkWK+JfYlD8hxJnIibR9ZqoiTp0Zv0lKwY5Car6ZpM1hDNh5K5ydrJeslGyWZB62TLaP3pCixItk7K6PSROKslb9vJTPdIdglrJQuSieS94Yxkb5ldma1E22S/5IDkIJmL/HCwxErrsHJyaHKESI+UZ3TYNdlPI5BRmrnKJ3YkYtRLyXECk2TkoiE5XfjrkrOSc5OjkwuTS8LqyWXJlcm1yY3JreJrJ7lT4z25J7k/eTh5LHmSGC8yc56yJNbeCXukYsncVGV5qqdqhg/rI+9qJXem6sgIng0nyJv64YxUY41TwYtSzVP5qTapDonNqa7B1lSPcFUqJfE4X8eW6pnqI30ukghdp+NLPRz0Sz2aGix+GZoaFp8oUTpAYq5F0Cz1bGqUZIGC1BjJEyOS7VITUpPjDYMB8f7Jk6kZqdm6riVmxFup+alFqXeSidTy1CqJUMkcEpG98U6B5KqRRkI0rkttEl2a7YhgJMkyRHDbYFJqW9A6tStIpPbKm5MiN0Ds2ZM6IFS/VCz1dTA03CTjPp46lXbSFciCUSZLV5W8JJkuuSdRIVEhnZ3OkTy30uS6dF66rvamPaUbBlvTTTSbCd6TbpJukW6VbpvulO4W1EvFTObS3CVjy0sH6bxwRjqjlqR7Scxo7MxI90331/gxT6Kt2D0iPVBzUnpIcnR6eDhGenle4ipf8kF+SnJG/Ej6xfDh9Nj0RHkzNT1TImNlek66U7x/vH96Qfhs/Eg4QXJqxfTiYEm6KL0idTy9JlyUHK1+D/rJ2tyYXi+2bk7vSI5L707MEUsHp/eF86X/hfGJYfP0mkRGLBsTLgrqpQ+lj6RPhLXSJRkvUzFTTfKclamRyc3UDiZl6mUaZSQbZFrKTrMs0zrTLpgrmhem1qVnBsvi/TNdMgWZRObeTO9MP7FxtOi2xK5lmQGZQZmhQb2MzFZmpKzjojA/M1rGkS+x0iMzLqyVmpDReV0iMTIh0TY9PFiYHJGZnpmVmZTsEpzMzM0szCxJDs0sy6zMrM1szGzN7MwsC5+Vn3uS0zP7M4dF+limYrp/5uQ9Vrjuntg9le+pfk/NTMVgf3iKaur6//uGbOx/zzdk+1oD+HeL9BvCVkGJZXf3rOzuljwxeSrLU12emt1r3ln5zsrda3Wv1S3VLdW9jjz1u9eH11ie5vIoL1+eNvJIu85OZ6d7B3m6du+qvxeu2rXqXdJHNU43FqcbhxONS83rcaLxOcXEqHmzOMVU4BRzESeXSpxcKlPzVqXmvZiatxpnlks4rVxq2dV6V+vPmGrpiaBglGUXjJGfE+TnZO+SgjEFEy4IJgvMEJj9AzA/gkURvHOBsFxgVTmwLoJNAtsuEHYJ7I3gQARfR3A8+nmqYEJ3R6CCQNVyIFsg5wIgT6CuQMMImgi0+C4wtvOge6vzoO1/AzoJdCsHgnL0KmTOg14XCH0F+gsM/AEYEsHwCJ6/QHhRYGw5MDGCqQIzLxDmCCyIYHEERRGsiH6uEVgvsFlgRzmwW2DfBcChSMeRCE4IlHwXenjlQMXzoNp/A2oI5JYDtQXqlQONvguM+wKgRzOBltH6KAf0XY/WAu0iussFQoFAohxoGcG9Ar0vEPoJDCgDg8pAqczQ6OcIgZECo8v0VRbGRT8nXQBMF5h1Xvu558HCckDbLhFYJrAy+rn2B+z5IdgosLUc2CmwpxzYfx4cLpO7y+bbKFeW5rEex87llx4nz8sfpTFSdl5L/R35KG6dszke+65NZ/NJ2RxQun6jtaV7RmnMxysXfDeme5v38eoCNQVqmRyh+0u8juHrmOL1BRqb/BpvXkCejOcLtDF7QLxDgcntOl6J93jXgrP5Od5DIGXGG+9p/BDvY/Kl6gQeFnhUYLDAMIFnBUYJlPq31J9to32ydA87cM7P6JlgdOi7uMjFZxi7vjdP583R2T0lmifGKntjfHZk2/xz7ZFvFf33bLPnMbZFEW9GGZhfDpy/L68rB7aV2V/L7rERsLeWwvn7a+l++T/ZJzsVfHcvDArO7YFl9ruzOUtj853op875qogv+SOufpQaIy5jiu+K+AvN/sG6PWzWU1xqivgBk4viX0fronQdlObFZkYPeW5QmTXS2OQt2kc58Htr67x1dTa/lNrfOPp5PJrzU2XaTzLrLZC6Jqhg7A7E10F2lMMXmjEEEhtBXtTuv8o/5+fx8mRKbS4vH5fC6DLwQ339V/l02Xlwfp4smyt3lsmRZfNhy6jt1ig3qQ8kRwdSwwUNDWhto/OtNU3QJOJJzgokRgONrah+CSQGg05RHpO6I+gW1ROSzwKJwyBzriYIekW5rKKpGzTPBVJf6R4dSI0VSJ/BEAHtU/uSPgLtQ+qhYGqUP6N8qW2pzUrrpsXn8ii6Ih3YODPKlzvKycPn5eCzNUyUh1WX1mPBHFPvBAvKtN9nxsN/D4zWiYwtWBzx+peBIeXA+bXgxHIg8uv36rpS2FwGdpwHpTXa/6Q2q1Hw3fqrdsG5uqtsjTUxaptbxifnrS1df0HR99dVsOJcjRVInRqsN7moVC7YbOI62GHi6WweWGfWlcYfP6WGDfZFtNSpwREDZddbcMLkiKDExGfoFXy/jhEIKxogHodEa0/yVlgt+lnj3BrUNRHKuMPaZdafrKuwnllvofgnlHwYtjR7TynoeDljrTdjDqW2DNtFuiV/hF2icUbyoeSfUPJPKPVi2NvkolBycKj2qPxQs/8p0E5qglBqwFBrQO1/tIlT3QtDqf1C8UM43fgrlNoulHHrOSFcaPwULjHyoYwxlNotXFtADaj5vzQ3hzLecGsEymtnYjvcafweqh/2mzgLDxs/6jyGx6J3J42OhGVyeULqpoTUPgmxPSF1TkLWbULqm4TUNYnGxr+J5lEek/En8qOfbUw8JKS+SUhNk5BaJpEqEz8Fph5ISF2TkJom8XDEj3JuQmqaxGCjX9dJQmqbhNQ2iVHnYvXsOSDao5ROjDEyiQmGp//eUpUVVfQL8P93V/a/5q7Mq++t1N+oOmutP1tWu0AgI9BLoK9Af4GBZX4OERgu8LzAiwJjBSYKTBWYKTBHYIHAYoEigRUCawTWC2wW2CGwO4J9AocEjgicECixrPaeQEWBagI1BHJNn+1r/8DPetHPRpF8M4GWht++9f+j7mvAosrONE/dKpCmSXU1QUITYoghxPanREQaqm4V9XN/KsRxCTGG2C7tOMQYYhzaGNYhxjaMcRzXJca4xnFtw/A4hHYYYxjXMbZNjDGsa1iX8fFxDDGu8WEdQlzCGsK6BIt9z3suirY93bP77Myk63m/7zvf+c6555x7zrm3TtG+gKXaxvjDqg/2UqAaqFH+B7oWqFNttesf9tluABqBLUCzU99O53otwD7goONvBdqBTqfeLuAU0A2cBy4CfcBV4Dpwy9GD0/RU/DAw6uirTrnRafnjQiSwRBOpANZqIhPIeajluCRmAQXvXE+NRWIuUKTG8h+lsx/Vcp4kSlX9vE+On9ebDh2IPdQc22znXsq60dHEMue+yjqWP9SJlcBq8R2zwzxmnjBPm2fNHqLXvGxeM2+YA+aQOWKOmROWZqVZXivLyrXyrUJrvlWMT5kVtgyr0qqyVlirrDXWOmuDtclqIrZZO5jejc9e6wBw2DpiHbWOWyfNEesMajtnXbAuEVesfuumddu6Y9217llJ22On2z7rtp1t59mz7Tm23y6xA3bEtuyldrVdY9fadXa93WA32lvsZnun3WLvsw/arXa73cn8RrvLPmV32+fti3affdW+bt8iBu1he/SJGE9gLpi9iQznk4nPk+wcfGYlChJzYRc5n9KETsTwkf8tSyxPrEysTqwl1ic24pnwnGtEMuy4fuMaE5pr3PVb4XFNakKkailaqkjTntYyRLrm057FbjJTyxZeLVd7r/Bps7UPikxtjva8yNJe1V4V2e6E+yPiPSkbU74gnvPmexeJ93oXew2xwPsH3nWiwrve+7IwvZu8fyQ+6t3qfUV8zLvd+1Xxce/Xva+LT3jf8HaLbd4L3l+KZu+wd0y0/wtumfw/jhr49yqnxTwhzGsObgADDoYcjEyzJcaACcdGnKUp20pz4HWQBeQC+UAhMF/FWsVOvPSVTUuHHW04qHx4TatKpfEUmIe19HA1ybXUw8/lR9aU+hybWlvmgOU1h2BhhZk9zhqTq6zMvIZVVozraeKZFCvFFiLlByk/EJp3lneWcHuLvcXC4zW9lkjxfsT7e2KGt8q7SmR4X/KuwX34rPdz4n3ejd4viHxvk/fLYra32fvHotB7xntGzPF+3/t98bz3jveOmPv/uXaXKBZlD//6aOE+8YxZYM41ixa2mKWmDsTMxKIN5rIXzi06aS43V8pfHn3VaNWMlKdSnhLC91nfZ+F52fey0Hxf9H1RuH2bfZuFx/dl35dFiq/Ft1/I/yvvgnaDb18W3r7EQr/QpkGmXY9B+t3TIH1Vxgmjx+g1LhvXjBvGgDFkjBhjxoSpmWmm18wyc818s9CcbxabZWbYNMxKs8pcYa4y15jrzA3mJrNpkcfcZu4wd5t7zQPmYfPIg/yj5nHzpHnGPGdeMC+ZV0pKzH7zpnnbvGPeNe+ZSctjpS9qtHxWtpVnzbbmWH6rxApYEcuyllrVVo1Va9WZ/Va91WA1WlusZmun1WLtsw5arVa71Wl1WadQuts6X5SF9uFjXbT6jAHr6sIO6zoiby2utAatYWsUOeO2sFPfSk9dx86wM+0ce5ZdYM+1i+xSW184ZsfMdXbCXla81V4u67VX2qvttfZ6o8feaG+2t9rbzbRF9fYue4+93z5kt9kd9rGp8XvTOD4+no62T9inzaP22anxtXvsXv+ofXlqHO1r9g17wB6yR9C6MXviQf7U+Do6oSXSEt5E1tR4Pz7uidxEfqLQXDGlp677+LjLcUnMTxQnyhLhhJGofDDubzHeiarEisSqxJqpcZ/SU/4Hel1iA2reNHVfrPREE1p+G7Pe7Yv7PopZv8z3MfGU7yXfS+Jd8rdSZy2s9q3GWljj+zTWwmd89SLVt973eZHu+0OsjgzfF3xfEM9gjfyR8Pm+5PuSmIk18orI9n3F1yye8233bRfv9e3w7RR5vn+HVfN+30HfEfG8r933A1FCZrvTD9fpvDuiytxobja3mtvNXeYefKTcT33IbIMuBfj2ENvj7HgyrzcWY7T8nMC+J0up+F3IkfVdQ4034B+Az3nHQL0j8MjPIUsz2/COkIb6UbusOzZrqm6zF3slEMN/Zht3iqX/NKPj6U/JEjMwOvKvh8XcS8L1BKQ62uNoN6BNy59eLuUt6vhYfMI4bBwBjsI6Hj26oNY4uaA2uiF61DhjaMY54wJwCdYVI83oN24Ct2HdiXTMW7sgfd5a467hNe4ZWUbS9BhJf4+RZaYbuabPzAbyYM0250D6jdx4wsg1mswSM2BGzMC8E4i0jNxIhrkUqJaRRv6CRrMGqDXyzbpHyyG63mww6yMxXqEw2m82Rvvj641Cc4vZXHzE3Gm2GHfMfeZB1Jm5+Gok02yVdcbPmu1mJ9AF69Rjbemed8I8P+9EPMMoNi8aZWafedXsW3TDKIvVGWHzunkLiMAajF03h81RYDyaW3zE2GQJKxXIMIyo16i0Mv37rUwrx6hc6DWq/B3WLH/H/G1GVfSCkevvsQqAuexfllVkNlhFTh9WWKWWDsRgJSK9kQxrGbA80hvrNHKtldZqayXuhiz3zlOPtNpYZa211gMbYW3G1bda262t8/PVPbJ2WXuA/SxXaB2y2oAONZ7zYtYxs8U6ocbTOu0fsk5bZ2Wk1RM9Z/UCl2Ut0Vzr2oI+65p1g63W5hVYA8DQm+eLNWKNWRPWmHHb1ublPDp77DTba2fZ3li3nTv/7qNzKTJi59uFdr6/x54vW20XF3vtYruM97bHDtsGUGlXxdfbK4wme5XRFC00mmIee41dZa+zN9ib7CbTsrfZO+zd9o7oDmNH5DRml8/eCxyQ8+zRco/Ns8dS8VlWR3yWffjNc9A+Yh+1j9tHY+ftk5hZj8xI+4x9bsFB+0Kk1L5kX3k0FT87r8DuB25yfv4DMzJ23b5t3wHuqjlonLHvAUk5BxOeRHrCl0i3MhLZibw3z8HEbH/P/CtPnoOJOZiDqXIOMuVPlCQCMpWIyPmZsKxYYumCceZVJ2oStVN5iTnzJqxUmRfpTdQl6hN11mk5C2J9iQZrGbA80RjrNJuj2xJbzJZFA3IksHs+5fuQD98QfXN98/FWtdBXImb4gj5dvMsX9lVgx4z6YuJZ3yd8nxDv9q3y/WuR5dvt282/EnrW2XdrfbXYd+Xuq3H3dXP3ncHd92nuvu/i7uvj7vssd99s7r7v4e6by903j7vv+7j75nP3ncvdV/57QDtdZ/h3PHy7+1AV4XL0P4TpMVUVRnxOoYj74yXxQDwSt+JLoyvj1fGa8Nl4bbwuXh/oijfEG+NbmG6O7wx1xVvi+0K1gVPxg5Gl8dZ4ezAR74x3xU9Fd8W74+fjF+N98avx6/FbH75QsTd2Jz4Y2Rkfjo+GauPjFbsNERVG6nTEu40MI9PIia0wZhkFxtzoNaMoVGuURlcbuhEzEoUDxjJjubGS7Ztq41Q7gQ9dNFbHqyt2VOQba2Ubw3uM9cZGY3NF/odvyvZKGFuN7bLdU203dkWLJFB2T7zT2C/bjrYcMtqMDtl21W7jmGx3pM84IdsuIW0J47RxVvYlMtvowR1I8xX4CnDHn/c9jzu+wIf3aN8SXwDzJuQL4Ukb8UVwxz/u+ziety/6Xvwne3eJiBV8dwlIDuIPFgmhH3kImQ6WPgrph9Zip2KnHnnrWua8dcl/iUZDT17km9Egv1vE0B/X7MuEOzDwwHbFWqg12vuEq+yucMMWErC95YPYLeo/NAbdEKuPNT5Zz7vhpLe8jW529M630Fve4k6VPrhTT/FOpfNOPc07lfEW757y/+Zpefg3dB+4QrgcZEdPRE9Hz0Z7iBPR3ujl6LXojehAdAh6JDoWuBWdkP6YFkt7R/BGr0nttCaO1ti+BHpQ6asUbu5W0/vlfzAD3U6/ZA/SeR/fzX5lsR8z0Y8asYNzJCzP6D8ARC4pSPuF3UJEa1U6WgfUK3+0AWgUGdHKaBU+ldEV0VXQayAro+ui8q8LZ7xNi+QYp7MtT/8joyXz9Em2eQXeykV+Ddp396Euvazs0hG0/yR891Sa+bAjSWWXoS9R3Lvy1dDpIjMiIj14u7kcuRa5ERmIDEVGImOwRiITUS2aFjkU9UazONKFznNhHlq30LcQ37YX4emQyqdDOp8OGb4Yng5ePhee4XPh2f+Hki6RK2azv/wb1PevI1yReq7FT/pq5Bs/9hKXdkMbx2zI0K6KLvSz2oHsdy21K1LnpB9CQz1vZ0/3Pcn/aHzDA1te781oRN6WaWWbHyu/84lteSftfLu4t2q7iLQA+6alD07TrY9B1tUOdDrjWvsvdIynl318jLt+Z8bYFRoOjYbGMfM9malYpCLTzqwTwRwtRxefygnnvCj2Tc1/r/CWIC5DOyzwHAtVO8A1QrWOfhSuUP3b2tN9T/I/Gt8wzd4yLab5sbidT7zmO2nP28W9VRtFCOMf2jctfXCabn0Msq52oNMZu6nx++cYx+l4fBy7flfGUbsWLHvuWDAcNIKVwargiuCq4JrgOmBVcAOwiemm4DboHcBuYG/wQPAwcCR4FDgQPA6cZPoM4g4EzwEXgEvBK8H+4M3gbeAScAe4S/se/EndI209XfcpDWQj9gp0XrBfz9Nn63Ng+/US5vv1QPCKHtEtfalerdcAEaAWqKNdD3+D3kh7i95MvRNoQawFvQ/5+/SDeivsdr2T+V36KeR16+f1i0j3Ad3AVeA67VvwD+rDtEf1calDAkhF7HnoDP1iKCOUGcqBPStUwPy5oSL9fKg0pIdioURoGVAKLAdW0l4N/9rQemnreaGN9G0GtiJWh96O/O2hXaE9sPeHDjF/f6gNeR2hY8QJ4DRw1klL9EyzT4R6Q5enpSWuOVr6b4QGgKHQCDAGTAA3whqQFvbSzgJyQyPhrHA+04XAfKA4XMZ0GP6BsBGuDBuhoXAVsAJYBRjhNcC68Abam4D54SroJqa3ATuA3eG9TB8IN6GOw+EjxFHgOHDSSUucmWYfDZ8LX5iWlrjkaOm/Eu4P3wRuA1fCd4C7sO+G7zGdrPCE+yvSAR+QLeMq8sJXKmYDcyr8FSUVASAC+CssYCnspRXVTNdU1ELXAfVAA9BYsQX+ZmBnRUvFvoqDQCvQDrRUdAJdwCnqbvjOAxcf5O+r6AOuAteZvlUxCD1cMVoxXjEaEUAq7OFIBpAJ5EgdmQV/ATB3Kh+6CCgFdMbHIgnYyyLL3zFWRlZH1gLrIxthb4YtsTGyFb7twC5gD7AfOBRpi3QAx5B/CHEdxMbICfhOA2eBHqAXkG+r7xTL8Db7JKh33SHosciEtKNaZABvvPBHvcofzZK243+LeqK50fxoITDf0cXRsmgYMBxdjO8GYcCgLntTfBW/RazAtwil1wEbgE2AzGtCuW3ADurd0b3QB4DDQFP0SPRo9Hj0JHCG+lz0AvQl4ApwNNofvRm9Hb0D3HX0PSAZvR3zQCMvlo5Xb4VsIM+xZzt6DuAHSmKBWCRmEUthL41V066J1VLXAfXwLZXXjjVIxBqjl2KNsS20m2M7qVuAfbEt8B+MtTrIBvIce7aj5wB+oCTWHuuMdQGngG6gPXY+dtFpSx9wFbiI9lx3rnsLGASu4xrDsdHYeGw0LoBU2MPxjHhmPCc+CygAMuNzaWfGi+KlcR2IOXo6Ek/wLQOW014Zi8RXA2uBlfH18Y3Umx29nvmPxmxleruDXVLH9wD744dgt0Ur46uBtUBbvCO+kfqYozuY/2jMCaa3O9gldfw0cDZ+CHZPvDd+GbgG9MRv0O6JD8SH4iPAmKOnY+LNPkMD0qRteI0sI9fINwoBac83ih9D2QM7bBhGJVAFrADCxir6JNYA64ANwCamm+iT2GbseAy7H9h7jQPGYUDqI8BR47hxEpC/iJyDvmBcMq4AF3i+fcm4bdwx7gJS3wN4em2mmz7TY2bTzjNnU88x/fCVmB48x6sBi7qWdgOf+3i+mwG92sS7QSiTOC+1fKZDD8rnuHxemxZi8B5hVps1QK1ZB11Pu8FspN5iNkPvBFrkySvQyl9C9pld0ePmqehxPWJ2m+dhXzT7iKv87aDPHORvHeNSW8Ict1KtDCvTgbRzgFnIKwDmmu1WEeqVsfLXjBiQAJY5tsRyYCWw2rHXOvnrgY3AZidO/johf5PYDxwC2hxbogM4Bpxw7NPAWaAH6AUuO3HXrBvWgDU09WuDhK1BD0jI3xkcW/qz7Fwg3y6EPZ/5xXaZnWZN2Gl6xA7j3aoa71mteO9qxTtYK9/XInqrbSjNPPnehvtmV8JfJdP2CpRr5Xtat70K71LVoQK8X10E+uR7Ft+xcuw1SjNPvqfhvtrr4N8g0/amUBHycJ/tJueXi73AAeAw0ETI3xuUvZf6OHDSPgP7HNMXUO6Ifck+IvtrX4Gv375p3wbu2Hfte3Yy4bFvEul6a8IHZIdyEnnAbORJzFG/BeCbXxq+IabjG2JGZqFIyVyAb4v5/LZYgm+LqaI6Jy1ntvhkzvP45riR3xx3yG+Vz254doMQz7787MvClfnpmeVCk//MkvZ3wpWxO+Psw++TCzUHaYDX0Y/CtTD3be3pvif5H43Pn2bPnxZT/Fhc2ROv+U7a83Zxb9VGsTAMGNPSldN01WOQda0AVjljNzV+/xzjOB2Pj+Oa35Vx1L5UPrIgo3ysfGJBUflEQAPSAt5AFpAWyA3kQxcG5geKgcJAGdLz4Q8HjEBloApYEVgVWLN4dWAdsCGwKdAEbAvsCOwG9gIHgG2Bw8AR4ChwPHASvjPAuQf5OwIXgEvAFZledDfQD30zcDtwB7gL3HNsiWTgdtADpDu2D8gG8oDZwBwVV7Q96AdKivYHS4KBYATaQnopUL0kPVizJN1fpXSwdklJsA6oDzYEG4Etjm4O7gy2APuCB4M1wYP+KqWDtQs2BuuA+mAr4lqD7Y5uDnYGu4BTC0aC3cD5BRPBi9B9wFXguj+N/lvw3/JXBgdhD0v41wW7kZZgvJM36l8FPREcRDmZJuiTdSMuOB4cLBcyrQvUMSjLlZ8GztKXCmQsmNAzoXOAWUCBP43+ufDP9VfqRbBLAd2/Tk9FWoLxTl7Mvwp6Qi9COZlOAEX0yboRVzauF5ULppehjiJZrvw0cBb2Bn05sNLfpK+GXgusBzb6t9G/Gf7N/nP6VtjbgV3+m/CfI1S8ytvjvwLdBGxjej+wlT5ZN+LKc/St5bOYPoQ6tspy5T1Ar75Vb3thg962YEzv8Gv6MaANOAGcpp0Lf75+lvb80kzqMiCsH0OZNr+BfEPv8VfBXlHey/w1ei/yemD3OFrW14N6UAdjLyN9TcaWDesog3JVqKcK16/i9dugbyjNPNkOWXYA9pBMl6fq0i/rmvKN6GP6BOqSbR3xayENSJN2yKtPhLJCubTzQ4XU84Fi3IMx6DLkl4XCIQN2ZaiK+Sv8u/WxUBh1hB0t6wuHslgHYhfoSK9i7Br/bthVKD8RMsrPynroN5xrGsyT7ZBl1yG9gelN/t2wUdcDX1uwGzhf3hu8CN0HXAWu68fov6V3AD3BQdjDeluoSe+Fv4dQ8SpvFOUHETuIcjJN0Ie6ZVxoG+whmdaFLv2y3MADXyqQgbmRCZ0DzAIK9GP0z9U7gB69CHYpoOu98PcQKl7lxVC+CLFFKCfTCaCIPtTNuAHYQ0wv06VflpvyjejLgZX6hL4aei2wHtiI+yX9m+HfjPuyFfZ2YBfu1XKkJRjv5O0JVUFPYJ6fZXo/sJU+WbeMW4f0BqYPoY6tstyUL9iwZDS0A9gN7A0dCB1eMhpsCB1x9AGZPz0m2ODPZfqog+Pw7QydBM6EziF9AbgEXJF2qD90k/q2o/uZ/2jMHabvOkB9oXuhZOhe2BM6F04PHly8OuwDshevDh5ckhfOo57j6DyZ/1iMX6YXbFQIz5Z6SQSwwnOQ9hePh0uAAOBfUrPER13r6BrmPxpTx3REYYn0RZbUAw1hq3gw2LpkNLwUqMY4tIYOhGuojzj6gMx/NAbjJ32dChy/Toxfpxq/cC1QB9RLO9QfbqC+7eh+5j8ac0emH6svGeyU44f8xpI7wF1HT8e9J/iS4cYlHtpblrQC7Y6ejs4n+LqAU9Iu31W+p3w/cMLBofK2cDOwE2gpb1uQGd4HHFywHHo59Ei4FWhfMBHuhO7yV4ZPAXg+hvFsC+M5SLubMcgvGw93lwum+8pPwz4b7vZvCLcC7f6m8FXoLv856HP0XwS6HbTLvPIclJnFdF95D+zeMPaccCvQrneET0F36T3QPfRjHwljz6HdzRiZPwB7iOm+Bzb6AbTrE+Gr0F2hcPgqIP0XgW4H7cxbF+4ObWC6b8pe2BK+DtwCBoFhYBQYX9hSIRaOVqQuHEX+KPJHkT+K/FHkjyJ/VOUXba/IKNpfkQnkFN2omFU0UlEAzC3Oqygqrq0oWjxWUVqSX6FXxCoS/5ffbVJmfmZmvRAzX575mvDM/N7MbhGaef494yKe81LOS1qTcImfaj8RklFSsgEdTkkRkmsnS/6b3WQe0qRH+wX9LdKv2IYkVZqQXHHSv0rKlMtSevz03PVckow1rKeB/gIyDw1KO3UjY9ZSJlj/MGsbJQNQjcMGVCAku49kVTlMz1cdxiC/cHiGxG/IRVT5kElIjJNbKIs8Q52UayX/kOuIrE3rU+xEys/I/bQ11jBM2UjZ4W6Rf+uL/2QbYGvbyOuzXDIPaT3kBCqhXeL+G1kD4yfJBvRuh5cIUvxcxqQUs4Z7UrqrWdYg81BAelzv9hyS48BS2WQSmsOYww7zEGRy76RkhKqavCQ5EmjXyLZpfdJ2mbRXMteg/Qbta4zcQjuNdoC5P2Spcfr/jP4C+v+C/lLac5mbSvsztP9E1SBt108YOcTczcpmbqZqGz23kpKhZz5jMllDEeUa5l5Vkrm50k5WT45hnhRKj6cw+SrGoYK5XUKy1vXT3pZ8XY6M9Lif4d2JJr8tR552mDIplsoZyHp8UroWyRhtRNpinDEHWNt/Y+4R2c6Uy4x3MbdNXsWtSTv1ffR0Mj6N8W/IXNco7T1JMkgxpjr5XdlHaaeomdNCOZdyu/LIlni2srZG9msf7QD7tYaeDnrOsF+/ZKlvsEdNvOJs9uUw+3KBkevpX8eW7OLV09W8lXWmFDP3HOVBtvwI7UrG97M99fScUtdl2Wz6z9PDO+K6yjFJOFd8jvVLHimv6jvbc5uROWzh15JYuaJbSnc+Y947OQ5Ps7yu+A3buYG19Tt9l54G1nOdMbeldIdpX6e/lTPqGK+ylVcZUHeBspTxTdLvnqBnOftYlJwgJ9yEHDfKXVK6hihv0pPHmNu0M+k/Rc8v6VlGGaD/nJTuOEeghPerh23bzKuv5XVvcuZ42KM5av5MfkLOZLYnU3rSsqWcUaNmqRyl1BzG35Z2isWYDHpWqnkry3ryVA1yprl2cPRqkpJfbT1b2EE7PflJObuSkrHs3ZTLWKqHo2fSXiMjXaMsVUR7jJE9rGEP7d30X2Wve+kvpOfXzP06Pf2s7ev0VDDyV1JiR+NMYN8TbPlS9uLnbMNNecdTOQ+1fbK/njtSYnxeZ19e50r/Nlso45Oswe/czddZQxvZaOTKzeK9+AhzA5QDnDOXWWefM2JqHGSbDfbiJkcpm/53UdYwcr1zxQnOwwnO57ucGypSjtgsaWPfuMsdQMbUUu6h55OMzOW1chl5iaV6GHPQmV0y9x7nzzYpXUlnl3uOfq5W3n1drW61v3EWDYtnuE4hZ+RxFnHHcA8yvo6Su5znOMd8RF7L3ZH8GWf+Xc58OX+WOzvPXc5qNbaytX1sv5ppuzgaQ4z5Dv3r2fIE7Y/Sf4Q9ukq7k34reYV3to12A0f7ruRg4BWXOftMsXyX4J06wTv+X+hnj7Tvs+wZ3t8N6i7LGKwUcuyxd+rZdFjddzluYr+MwZ7zOuuUkdlqB3Z26efY09fZU1nnCY5VlrRTZ3NUG3mVQ2zbIdZQ7ax0Wc8qzroCytVswx1nx5ayhvX3qp0weYB3s5g7/362pJjxgs8IWed28tUNizqujjp5Byc/BnsF7/gQYxrUTs527lajp/2Y6/d1zkzZr7PqycjIV+hfzj7u445dTc9sPgvUOHdQpjE3n/2Nsac3KFsoJ1izwbsfoZwtZfLA5C3huv9XUqJV1XJ9seW/p55NbMmu5A/Jyiz/spTP3JRmti2fkdVJvv+wbJ6YhavnOu2fRcY7+a8HpFMKz07akIr9TggyTCjuMcV4p7juFL8dOe0cNjsy2CnuOsVXpzjqFDudYqRTXHSKf85hniNvk+KZUwxzilvOYZVTTHKKQ45cYooxTnHFKZY4xQ+n2OAUA5xifVN8b4rjzWF3I6Ob4nJTLG6Kv81hblNMV4qtTXGHKIY2xc1GfizFx6aY2BQHm2Jfc3jXFOMa+TkUy5riV3OY1RSnmmJTI4+aYlBT3GkOa5riS1MsLBwrxY6meNEcRjTFhUYGEcV/5jCfKbYz8pwphjPFbaZYzRSTmeIwU+xlirdMMZYpljLFT6aYyRQnmcNGpnjIyCOiuMcU65jiG1NMYw7HmGIXUyw4HDHFJeawiCn+MMUcpmaIYgsjT5jDEEZuMMX75XB9KZYvxQioOL3I5qV4vFLIBONwd5G1S/F1KaYuxdGl2LkUL5fDyMVSacxV/FuKeUtxbjlsW+TZUnxaiklLcWgp9iyHN0sxZpFhSPFgKQYsxX2lWK8U35ViulIcV4rdSvFaKS4rxWKl+KsUc5XDWaVWDUdAMVQpDirFPuXwTpFxyuGaIj+Q5nBK8bqKCZL8Lg6PlGKQUtxRijWKfFGKKUpxRDnsUGybYoRSXFCKBUrxPznMT4rziTxPiuHJ4XZSrE6KJ4lMTg6HE9mbFG+TYmxSXE0OSxP5mRxmJsXJpBgcFQ8Tr+5wLynWJTXTFKOP4ljiHVS8Sg6jEu+aYlFS/EmKOUlxJjlsSYpTkKtDcSM5rEiKs1AxIbE2xX6keI8U45HDdaRYjshjpJiNHE4jjp7iMVIMRoq7SLEWKb4ixVSkOIocdiLyEilGIsVF5LAQkX/IYR5SnEOKbYi7mWIYUtxCDquQ4hNSOwDnm2IPUrxBijFIcQUpliCHH4jMQIoTSLEBJV/0xCFXSrbm5NO002kvor2I9mJPArIkZRP9a+j/Ju3dkMUp36WdoK3KLqJdxbILIf30l0huadQjyxaz/lWexVKmvEhm1ibYWZI9PZmVInl8uxjzLXnd+7Tvv8E2NNP/OdqLaS+mXaJa68gmypcZgzrv/9wzD/Km06N5zH2RrWJPPeXs12fZ8nXSdl+jncZcwVKv0fN5lv0oPc/QrmDZf8PanmFLKihTGFPKmLWQRbSLaBd7AvTX0y5lDfRTLmZuMXNf8ASlTPkcWxJgpLQXy9MYxKhx2M3azrC2BO1vMVLKhZ4OxihZRlnNmDrWf5L1y5F5MaVXzofUX8r5QDud9iLai2gvTnlV9i71JP0N9B+l/ZK8eupO2j+iPUz7jrRn5LDsaTkf6C9J+Qrr+Uv24jecCbL9q1KvyPkwQ/YiKzUk5Qx5la7U9XI+zPiKnA/Svv+GtJPNqV+T82HGiKw/dUDKGb+i/VNZ/4xB2r+lrWI+RrmYkb9PWSdniGzb/ZuqzanfZHwbbVVqiG0epb+Afp+UMyLsnZ/yV+zvduaeoJxB/wuMjPFad+i/yDqL6VEzQXnGmfsi43fxihc5SuOUr/DqUUZyDs+QkUW0i2gXp16g/x7teaxH+QvZkhW0n6f9Kdbzd1KmzaDNOZ+WxtwX6flT1vY9OUNYwwusYRHtRbQXp/4rxv8t7WzKmSxlss3FbPMa3uVX2dPfMJdtS22n5yXKH1GOMvc9ct7O+A7t46yzm7aa539N+Q36T9C+TPvXnMk/ZmvlPFw8+ZrkBZ/8z7T/Sl6Rsnjy27Sfp5SRRU7ua5RtjG+irWQO5dfpV2WP0T7G2jopf0bPz2hfY4z0L07myzbcn6TNe5c8KHPv/0JG3ud8SK6nR67oxfffkO1RnuQrlPmULMUaFt0/z0iWvc+Rv/8q7QHW+UPaV2kPM5ez+v5P6Pl71oPZqH1afpPSqvitgd+VtCXSIz6ovh/Jq7t4mqfx7M6lTucW0v4mJU8Fxb+nzZMlF+sR/5WS34tdRyl5LipepeS3G9cHaP8HyiwpJ/+M1+JZh2sv/X9KP7+Du8Yo1bnWLyh56iX+gvL9jORp5KRqLU+NBE8IJ39CWUs/v0OJ31Lyu57rZ5SfpKeP8hOUv6L8NMvyfCn5+4z8OP38li14vjT5Y9qqzTPpUSe6PNNz7aTkiajgWZNLnUtspIc9muSZYZKno/e/JeUEzyIEzyIEz/Qmf0rJ78uamzV8mbkcGfEleljW9Rw976H9J7Tvsyy/RSb/N/1vUL7AXHW+sYSSpwqTMUbSc5+nwa6XmctTkUmOv6bG8xo9PId0dTOGJ58ufsvmAa5L8DTVxW/f4quUPFnVeBrjukX5Iv03OcfU2Ttrc/1HSp6daqrOVyjZBtcfsJS6L1HaXYxUZ2Kz6OdJiJttcHNWuHj3NTUPOQNd+ZQ8JXbxjosblKzfpU5BG+nh2YvrXbQ5tpPskeuj9PyIkrVNcma6fk7PFcpPUfLuC979SZ4YJ7/ASH73F/+JspKSJ+eTTzOXNbt4ki84W0SIvbDp/wElf5UQ36efc8D1DXq+TskzE/GXlOpOvUb5OiVPv8X/oGRtgit38o9pf5tyCyVPe4TqlxqTz1O2UnJeiQ+zrFojL1H+kO1RK4s9En9NyRk4SXtStZzj7+H+4OYZr4st1NSew9mrqXOkbbQ5M12XKNlT92fp53mv63uUH6HcTMlzZjfrd7FH2jx6uM9o++nnehGfoU2P4A7g4im0xh3A9Tzb+RQ9vNcern3tu8z9W0qesGmcb27+uuQ6zTvO+t3cqTSu+kn+CiP+nJ6TlBHWqc7xeMdd/J1CfJEeta9yPWrsHd68pc1V7+aO4eLvDq7/RQ9ngqZ27/9JD3ctTfWRu43rb+hXNfyauV+jn/dX44mchzPZrWbjcXq4V2hcLy716xLnsHaRueydmzu/S51MqlNHznaNMy2Fq9vN31Y07jke3lM3V5mHvdP+OyXnsJs7huD+4+FM0zi7NP5u4lG/2nA2apwPk3/uzA28J7jVHH5N2pNq7ZTSz90Aa+EyZ4j0qHm+XtqaGts2Z7bA4+FzSuOzD6sGHqFmYNKZOfJ0d7mTK8+9v+vYeBYLtUv/IWvgU8+jZoKaq1yVk2oWfYst4b6H9XiZK2UEfq5TjWsQnmGuL0iPenardSQ4DpyZGvdGt7o7as26nZkg61d73c/Zd650N/coD+NTudY0zh+Pesa1snc/dWxcN7WcMXz+erhONT5PPVW0qzg+fFq51Vrj3XSrNcVfGN3c8Vxq5aperKZUv0WqJ4Va0fwFxKV+qeSK1j5EmzuVi3fKzd1Y4x10sR433yXc/5YjpvaBIsaouc14198zhrX9H+6+Bjyq6lp7n79JxPB35kzmZP6YGSbJJHMCFBERERERYxoRMcUUESONQJFijIiIiICoFCmNGCMXkVJALsU0pkqRUow0Ui5FRMqlXKQpIlKa0hgopVxKk5m71ntmSORp1ed++PS5H5v9nnfWWvt/n733yczeR/oV+CfQYhZT7NEVc7p8O3A95E6UFGVX0GoyUlHsOcu+R/CtpdoTEtxBKr6vVI4CcXermOkU+/tTjPMqVibyVZCj1RTc+5I9UmHtIWMUUr4H+U3g94CjZypoLxkrJQVztIx7SsE9peDeV/EdqIw5VLF7DlY+cfTnBMarBO64OPpJHN9RxrEyUezawNpGtr8rQV3FUVftmFPiaOV2tFp7H0gw67VjzIljHmxHTuIYtdoxzrRj5G/H94BxjGDtmJ3j9kxhz0dYyyXQUgl7rYheGscsH8cdHce3xnHMle24j+Joi3gF7O1VFsbehL2SwfpBYKyOo2biqP842qsdPSqOO6Idlu34XimOHhsvAI4G2nKsQNqx/mzHPZt4HfELcQFYA9zF+Lft4K8DyyEZD05PPbQuh6V0O3JLPPFntiSswfqZJb8D/iEZ5wIe2/l3I/LkeAZjgp5bxV+VhTzn2khtKElFju8RTqDVhCSa0vgXKU6b818PRCL+GHN+yiZke2f8I/C3gd8GTgW+hbD9EU8EMbwP+4XQ/hRyGZKTkFQAH+K/tFN/l5Sn4/eD0zOgMirxMnPtMeD3gGWw0aHtDsl0SLqB3wEOSft5SDRIHiF8KD4CEgXo43TVCYzxkcjnOsbE95CfrpAgh1o7bBzQ9oRWhiQd2t+DZwC5vZraz0GOksbHAidCci/4k+D1jHTHswS1px6F/CXgDOCz0GYhXT8kSyDxgj8I3gtoW16BeP4MjvaKPw3JH8GXIdRgLjvN6lwnd6KeP0ZNPo06Qc1rw4HfQB2eYy2tU1gyDng95G2IYTz4CcRzBpJvoZ4HQfJr2FMtyar6XcLr2vlbKhWtqXK9ySr/ZYDwSv7rZVI7BUh9TM7hv3TJ1fFTjNwuco5WCFwE3A1tAng3JGvB7wHeB8k14F8HzmFsPwr5W5BUIZWRiL8L5GOBLwIPQe6B5UxIfgI+C/xm8EnAlxDz3yH/JSSvodRvotQPo0TPAM+gvDcATSr12aT2EeBfSTJA3UO4JrGRufYXRgf1H+nDeAvwdsiPsU38ZmhfBD4HnM9Px1x70pr2v8HmDg7VTjHL3bXr+EktsYN4Af9dSO7u+AEkOiO3nVyg8Xfr3eMPw+Z14KvAl4FRhHoTNuDcnwl7E96j8q/OtsS/j3q4E9gInM7y9lPQzuTRpt1uQe5pOnqCrr0N/A3wHdY67oM9WtbBvegG5Q5IYmi1xcC/AV9F/HugdSL+Ysi5p6XznS7rPJ5Qihng58CXw/5qcLSI8mPCShrXqQVpLSbJ76HXVWslkHBZ3ovPBvaC3AKOAO4DBmG5nlH5T8TwOORXQ47+qXUFZgPRozQJ2meRh3HIgwGkUIqs3kJYkZgEzqNiRfxt5lxjxH8MHAPtGcj5O+gslUYY5frEHOb8l3DCC5wfdRuXN1ku7pPVDhrZpFMskaL23dfO9Rzlv+MRbgHKwDog98wi9WVGbimaO7wcQ3wJJHWQ9AR2hfxrhPO5NqQtSGU++uF8/tsd1f/j4PnA7wKfhjzIz1yqhfxMZa4VAHcBc4BvA39BNj+i9QuPYxMxXtUBHwX+Avgs8HXY3MmzD/coaT7y49SizOOvQl4DXgS+APynwEGM6ivIWzVzRxb4teB2z18HzEV+cpEW36Hv81hNrfk6c3U1JPOAf2J5O9LV/o4UM4A/RD1MBz6J+Lsj7CrEw7/SfF/5NSSIU+MxKreNx8zl6ieMCR6v7tO4n9/nuJHwg3hP4FqMM8ORt3sxVvdk5L9MEh8L7I4UA8jJu4z8d1oqlwnJJ+BPAB2wrINNGSRPATMh2QOtB33ABD4BRH+D5Sm2pJniA8bEeK43HtnkHzn4V6lunmEJVyDPQ5HnbyKH6cjzOfDbgHwycz7/8lNt4D4vOVX+huvf7fZV+RcX96ppPBrHz2FMXoR5PI21yRl/HPBOrE/8WJ/cgBnzL5DfDSyBFjXDd5x0L8+kFOcdjG1cM2tVnkOf5LWNtFbj1lmLe6GMLaW9yE8Zf3Mk7Y2/Bf4ptDuhfQCSMLSPgNNqUO6p7EWcf2SuxYAvot15/Lwu0Q0lakN/eAzynyBXheAHoD3N3PE4JL9EWSpRugvgCvgjiGE0wqKu2vuhp30L8ncgqQQ/Bh5FbC9B8jH3NJV/nehI8JrzA/U1vjeVH7E2sY3l/Bd76s8Ktzv/nlm8yr8Zk07xmE+SR3GXPczjhoKRhOdr0mIs4tWRVMO1p7ym8q+AXmNL5RjXgPizxvdsRaKKuaOAkb8Lk2ocTuAE5PMG5LMRcdahly5EusMh+S5wL/AeRtyJp3huIpwCfAx4CPghWp9/EafGJ0OCOS6uIU4ZklsxszwH7gPuAb4Km9PgY4G2/UvAFeirMmIu4ThV9MP4d7CW+wvumj1ce+qPGfk7VjEdfalIrYL9TNgPRQ0/Chs/MAAJn/P2vIpeHbdX+M8DDwN/ixXsFGiHQDIIiJUtrw9JixLJn4KPQWw8Ypxq5zXtq0oDcBlyOI3z1s4zSJH837Dn2F5tnwHttcDBkLyFUGsR8yn0nO9grLuXucotcq9cgzphSZ7yHu4RWzsfefsEeBw4DUgxSI8pdL9Ldyu8XlqW+A/0roXoXc3o+f8G5FFuvv3MwuOeMkP5DfexxBPM1T+hvx1grn0L2p2MiQeh/QOjrY1HUBsSauMwo7IdLeLi1VG8DO1ut/Iq3CMzcL88xaOchvVMcoVzJywXA/8GtFc4H0MbBZ8BPgha7pm/Rh/7La8QKP4M8HPgy4HD2D7ZS7+BXMmQ3Artc+A+INZR6KVb0Eu3oJdu0Wz7l4DcSx+I/x5I62HJj1WrP86/wH8AK88BWHk+wCtDal/qq5KTv5miHngFOK91ndop9BDuq8+3/xCWVzHyt5yisL0G8uGw/B36cB1sYOngZ5xrYPMq29CTbDokaznORF9C0Z4HDAO/AXwB+F3GuA/2q9DuhSxpex5300igA/GkgacDM4DlyPM58LHAicAngdcDC2EzBfzbwCzEZsfjBfYCPgu8AvgY8GngMuAQ4AOI7TmMAHim0+x+az8JngeegKQH+EZgAyR26YZD0gpEz9fwVIh7sCmOp1qtL/AXwNdxt/JfJJoSvSH5EJLd4NvA9yIsQrXjSZb7GElCwAJIBoL3AbdHAPsO/QnwDUhuR1vsQz7HomXf5/KmGbDh0cDJ6wcxnb/XJv4ELFHbaV9D/JjBeS1BkrXoLZ8inl9B0h33uwnJu+BPAPFE75gH+TxIvgfk1UtRclWAMto5caA20vAsn8Z/Iy3S/sBpcSq02ukOXgG+H7nlmr/G8Xvgv6H3vou0VkP7e6C9ttGA3TCnvIc596/Ac7hTdOA9qKtHGNs+RrugTdsw7iVuhJb7xqttH4A7oR0KbTGeTx8B8pN+NcdA+AnwD5Dz72OzORRJPhK8J4VHgw85lLSG7ek5ke/EQ4inO2J4D9r5wC3As/y0Iv2AZ3YxQIzmsx5EvkgTou/hi17qe/Qzn+W+u/ru7XuAmVD1rnoPIfQsPYv4VfpVQjNdpovfvCHknt/vSTNcen368U5nSKxP+gXka5PXz3qp76Iv5J1l/0j+Wfs3OvEtnWwaLrHb8Q/T/DL5+SK7f5ZH0Xc3+X2dPh/sdG26xHNcNDP2bU7WXar+/hX12NlfWo+t/2fqca6IS+mSLvmkHKmfNFgaIY2SyqTp0jxpqbRaekPaJu2U9kmHpeNSq3ReluUMOVMOyvnyAHmoXCiPkcfLk+QKeba8UF4qL5fXyLXyZnm7vFs+IB+Rm+UzcpviUHooHiWi9FEGKcOVYmWsUqZMpTXJXGWRskxZqaxX6pWtyg5lr3JIOaa0KOdUoXZRDTWgRtX+6hB1pDpaHaeWq9PVWeoCdYlao65WN6qb1AZ1l7pfbVJPqKfVCxqNRpqphTVLG6gN04q0Em2CNkWr1OZoz2hV2gptnVanbdEatT3aQe2odlI7q8XpiVq2yq2pVoU1k9g4q8yqtKYRm27NsGZb8y5q5xAbYs2y5loLifUn/TxrNrGR1hxrgVUKbSXrhcrhrGesJdYya7m1ylonFPtqbbTqrc2k51QmWdOsumR8Cq5rrMXWBquG9Kut9Vat9Ya1xWqwdli7SYKrtc86aDVZx6xmIcf2xg7EDltNxHbELljC2k9sa2x7bKe1l1h97ESsxdpBbH2sNvZGrIHYXGuztc1qpJw2xJbHVsU2EttKqW6w6lgb28ThiY2NLePUSVsXW83hiW2k0FQGYsmcEdtEobdbO4k1Wrs4bmKcSzss6yhuYtugp1xRPS3iUhCrsmqsPZxn1FEjwi6yllKJU2F3WnuIUTjrgEVjbEfJrePWSeuQdYTYCauF9GeItVpnrQsFglhbAYdnbbxALehS0EPIBRkFOuV7N7FuBYZ1zmoj1qMgk9MmpheYnDYxo8BTELTWEPMVhLn9iQUKIgX50OYUdON2Ixam0FFoIwWOgoBVgZiDFHchwmYWdLGGEjOtZmqzMRyzdYRKVJhMdxu0ekEG1eSAZK42WPm2NtZmyXauYmdi51O5KshButHYkdhxTte6wO1vpxvbHdvH6VpnrPNWnNOlPJXGtiVjHhV7w46ZS5UsEcVOLEgxU6nsmLm+UKJ8rkuU16KaPk0sWtDHOmqdsMNySyBsjt2CFNbHLXxR23BRu+miduPFmlydjLmOejrHHKb7Ykky3RXWAmiD1D9mJXM1xZoObcCaYJVzzBRviTUO5W20iqzRdnkp5ZHJdAdaQ5JhLat/MuawFU2ma1qBZIm6WQax/IJ+1EpdkmGPWILDxk5STZ/jsLHzBfmxFrorzsZaYxdix6hfyVZ6bH/sELEeVmZsV4x7tm6ZsYbYDu51VrBAjW2lsMIKFzhi9cRkSrUttv6idiW0Uas5tox7rBWwjsQWEQtaObGa2FxiYcsXWxKbgd4esTbEphI7anmsVbEyYk2xXVZ1bCyxQ7EGa3GsmNgB0h6ODcedEiaLQcQCViQWjfVJxhyIRRBzNGbEPMQiVn6sS4zuDyvHsmLHYw777s4flbf6f73PfIxrghCu+1z3ia7uNndCdDO3mn8SuvlpVo4YwSstWe1YXVGL/WNfLCqtAdZgaxiNrsXWGKuU2x7jcDmNxLafmfSXyuaQX0B+UZJf+nlp0rOrTvoV5Fcn/fqkryX/Rqfrli/wDZf4VP5S+dqRzEfqmvK7ye9LXg928k1Jfyzpm5Oe42slf5b8Bauc+lF5gYN8RlJOadFoV05jT8c1cImPfNZfrL/O9ZrMO907tu+X9AOTnuMZkqyfWrssBcOTZUrFNYDvSSGbaSa1ttnbjPJ6WAzufNIaVseyfr/+bVo5P6g/LK7QH9PniG76Fv3nQtff1z8QmU7FqYksp8uZKXzOiDNbBJxXOQeIoPNm50gRdt7lLBUR5yznYyLH+ZRzoYg6X3TWiHzny86VwnL+u3OD6ON8zVkr+jnfde4Q/Z3vOd8XA5x/dP5JXOP8i/OvYrAhG6q43kgz0sQw4ybjJnGjcZdxlxhujDPuFjcZFUaFuNl41HhUjDSeMp4StxjPGs+KQmONsUbcarxmvCaKjLeMt8TXjZ8bPxfFxjvGdnGb8Utjp7jdOGj8l7jDaDaaxZ1Gi/GpKDFOGafEWJfX5RV3uXq5gqLUFXaFxTjXta5rxd2u0a47xHjXZNd3xARXheshcb/rEdcjYrJrtutxMcU137VATHW94KoW01y1rlox3f2y+2XxoPsV9yuigk+rE/yN9ACZ7rTUPRY99k98s7hBzKO7dolYJpYLfirZKOrFVtEo9ogD4og4Lk6K0+KcaJNkWht2kwzJIwVpfWhJ/aVB0lBaIxZJo6Wx0nhpojSF1oozpNm0XnxGWiItk5ZLq6R10kapXtpMa8dGaZe0VzpA68ej0gmpRTojnZfiPA7klefRuJY3ATg1r+KipDiP5sy8kXk03ueNyStNStS8UrJlCyVvUt60vDKSjCTNVLJQ8kp6R/JGkYQsevsQi5lHI32enkczXV5Gni7k6Nk8Gt3zRB6NdNHm6FmWRGmmizZRbbCklXBftAmhaDbOy8/rRxgBz8ij0TPPgTgD4JFONv3A+0GeD5t8pBvhdAkzEMoB5DyYnC6hnYfWi/k0YW+yfbQU9hlsHy2GvYPt8wTsBfJ8gdqSsRa4Hria0S5ptBq4FKksAlKonCNRWs1GW6MzUeqKf3CPqvZITmN4u+hKY/hO0d3cY7YK/lYyKPcTmsiQJvCvpKP15Dd/ZV76UnbbyDeS30WeZuPoAfjONkrS43PwmFCjhz/HH/0C/eXwJ4SaU23zYPNFebrQRVQMpZqdSndnjaB2ze6X3S93Efml5KvxaQVJPdme3MXkq3JrwFfm0ro1d1m2yi53IvkpYLR6yp0TaWWXW547FdeKXGr5yKHIodxp5AeSr8QnWj1EGiONuRPJD8qdAj49t4himBCpZZfbhfxIsEySjorUsMvNyB2C6/DcAPqSZErUlyabP0Nfkqj/4LeScrW8kd8SKI0RdwiRM+dzvfwF+s/zypeyo+fiHHqOzllKvvoL7aWc1f/Uq5+juxxeI+9IfQ7UXZR3EZligBgjKsRS6im7RbPkkGgEyt6W3Uh+V3ZjOJ69N/tA9uHso8ROZLdk07MSf8o+HD5KMnK2lK7ns+M5NCbTp8bslnAjhSWXfYbD05XDnLgYdh2FXUe4Mbs+ezNdOT1a/1OKe7N3hZ/J3ht+hnBJ9rLs5XRdlU2WpN1Mdps5Z+EpsDwQnpJyqTyHiyjdIkLWj6frAf4ELaUStrLXhWkBy6llD6XrZv5EWspFdn24G33uRkjp4rqckbSc/qrQ6ex1odOElGdcZzNS71Sony6j3lptviks86fUZ4vRZxtN/MZYmibN4bdbSWOpnkXvXV+Zl76U3V7yNLL1Pkz+6Bfbe2m+6N3yOf7MF+j/372S4t4LF2US1agcCUQikfxIv8jAYGlkSGQ4Ro7J1AoCrXAbWUnmHiFp27SdGDXGiTuFCI/8yrz8peyKyVNPCJeSnyCUcDl8Sq9eYq9FDCGFp36Or/gC/eXwM4WDruwlz6yL8t6iUEwSC8UasZ3We220vhtE67kZtH6rp/Vai9xFjsoj5XJ5gbxabpCb5AuKqQxUSpRKpUqpU/YoJ9V0NUcdQfW2MLw4XBVYyi5cE14ZXhPeAF4XoJWHLQlUsAtvCNeFN4W3gm8P0MojPCs8N7wwMIYdaavYGnxNgNaA/DkwIOXClYiJ2cLAANJyqpkpl0yH2YZAph3Wfz7lwgPDQ8KTwAr950lLqfoPpxzHRNbMVvoP2yXyb0u50IWwCOczC2f4t5G2MjzLvyrlwqPCJeFxYGX+VaQto3TmpVx4GqyJhfb550Fb6J+YcmEdYZlN8k8kLcXlH5FyoQWhRaRlVu3neh5OYXNSjsKa4VFg+f4c0lIJ/ekpx7akJRYq9afbWt/JlAutCDWFh4PV+k6SNj8sfHt8e8L9GENdYM3M59tD2kjomK/OVxfOZwy2ULoBsLivTsih1rDuq/JVhU3G4N5wgOIiFqr20ZNdqDl01lfpqww7GIP1YUFxEQvN9FVy2NAiXwlZlLALLQ1VU36IBdf5SkjbFJrqG0j2A9mFKkIzQ0uZBZ/xDSTt7tA+nxk66DPZhcZQbTUxC07x0Uo6tCP0hvdCaLf3ArvQgFB5qIFZsIjHodAboS3eppQLeoJB0jKzvLT6D60P1XobUo5tQ2DBbt4G1npXd7jgEqrLWma9Tntp5R2q9i7ocKRbTfbMar0LoC3vcMHRwbGhFcx6bfLSs05ogXdkhwv2Dw4KjWHWq8ZLo1Oo1BvtcEEj6AlNYNZrljdK2mJvlw4XCoeioT5gA7xdhOxp6ex6Hep1JDQAbIiHRmTP3s6u19Ze24P1YAEPraY99Z1dr5W91gSXgQlPPWmXdXaBfb3agpAFjnmWYR7lVaDA2P4+PT+IrJysHH6LXVp52mzhSD1F+Cq+Mi9/KbuZ5Gmd56M1oW+RUHxL4VN69RJ7yVf9OX7FF+gvh6c1IV3ZS8aaDnlwJT5fQyvCxfRE3yAOiTNSBj21D5PG0ci+VNpAT+NN0jm5h5wvj5AnyLPkZXKtvFM+SqO7ofRRCpWJyhylRqlXdivHlbhqqv3VYnWSOk9doW5S96rNmqz5tIHaaG2qtlBbpW3R9mvUgwJHAycCLeYSc0ngTOA8X21HmuOBk4HTZqVZGTgXaOOr7UjTHGg1S20XOJtiZqkdmznUdhTr0JQjzaHAETNiu8DxFDNpzRvYFzhodrFdYHeKmdT3A42BXe7TtgvUp5ib1n6BDYE690HbBWpSzH2QNCsCq93bbBdYn2JuGvsDywLPuNfYLrA8xdz07BVYGFjsXmS7QCTF3PTUHZjpP+GebrtAlxRz05NZYGJgirvEdoHpKeamsS8wLlDmHmy7QEmKuQeTpti/3B10BwNjyJcysx1pRvjnuh1uR6CI/FBmtiON6W/NbMlsCQTIR5jZjjQ9Ar7M/Zn7A5nkuzCzHWnS/XrmlkC3zC2ZW/yTGG0nZP8F3/nMVQGRuSpzlb+Y0XakafFvzFzoP5O5kLA/o+1Ic8RflTnVfzxzKqHJaDvS7POXZ462na8lxTJHk2abvzFzoO38wRTLpLHfX5fpSzn/pg5OmtWZcsr5V3Rw0ixxNaecf14HF7Jrr3+Wa6/t/HM7OGk2dTh/cQcnzYoO5+/fwSmdgd7D3qOuea55/iHeFr7ajjRR7xF/H9ck1yT/AO9pvtqO1sZN3mOuYtt5m1PMRU8i3hMUR3/bec+kmKs/aU5SHKbtvIdSzGXasRlx23mbU8yI01i4xXvCOG4777wUM46TZp13uLHbdt5JKWbsJk2Vd4dRbzvv7hQzaOz3zfFuM2ps561PMaOGNFM8Z405xhxvHflNzGxHmhLPYWOiMdG7nvwKZrajXM/wFhmFRqF3Nvl5zGxHmmnefkYfo4+3kvwkZraj2DI80w3Dpxv0z9NoXPxHYeKeEucFn+q84Lzg2cBoO9Kc9jqcR73nnEedRz1LGW1HmmOeFudOb7Nzp3OnZwaj7UhzwLPdWWs7T2GKOWtJs90bcC6znWdOijlp7vN2cc5KOW+PDk5zZptzQsp5znVw0jQ7R6Scp6mDC9mZ7zngzLed53CKOfNJ06PDUUkv8s882/5MWFnRrDx6huU5+VQW9gmKIjGL3xOLvxRLRstFL9h74vT8SM9pxDVPi16r13rOAM8z0jXuVfVaWmNwSmnmVHMqpTTDnEHxP2o+SvP9fHM+5eAp8ymhmk+bTwvN/L75fZrzZfo82ZxM1g+aD5L1Q+ZDZP2sSfOu4HfcBvHXa51/X0U9RvGs8Kz2rMfT4M9QphfNFynsK+YrJFlnruMSyeMVi0NJcd7nnVGY9BHyo5LXy+VLktdxnWRlnfiky5jWNPKVnT7P6nSde4lPlXVUJ/5VlLuz71zuqn9ZufuYi80qcjXmSnONucGsI9xkboVsu7nT3EO4n/CQecQ8bp40T5M7Z7YRI58lZ6Vndcsysjx0Tc8KkpMhk+HouUqEL34T2l1oek9dF1fohu4SV+pu3SO66n49JHrqvfWIyNRz9Bxh6gX610SWfpV+tQjo1+iDREi/Th8ieutD9RtEtn6LXihy9a/rxSJPH6XfLmL6GH2iKMD3qkPNdPNKcZPZ1ewmbjF7mD3FrabTzBRfN7NMv7jd7GUGRYlJD2BirJlnFoi7zL7m18R48ypzgLjXvMYcJO4zB5vXiW/ReukGcb853LxJTDZvNkeKb5u3mt8UD3zm77P8q1KJ/m/BHVcnokKkt14efwXdf1eMuuzxRd3DyI10F7vH0LWU/AR3uXuqu8I90z3HvYD8HFpzLXVXu1e4VxOud9fCv+He4m5w76Aru93k99FKr8lNT3vURj3w6z2n7hSSnqlnCln36j6h6PSITS2erWcLh95f7y/S9IH6QJGuX6sPpj5wvX499YFh+jCRod+qF1FPuE2/TXTXR+t3iB76t/RyoZsZZoYwzO5md+EydVMXmabbNIXbDJgBkWWGzJDwmH3MPsJr9jf7C595tTlQ+M1rzWtFL3OIOUQEzWHmjSJkjjBHiN7mLWahiJjjzLtFDtqRx3WBcT1HSIqq8K/hM+Qu4kkh0kYkfZB8UfJ6ufzo5HVsJ9n4TnziZU4v5aeQn97p84xO19mX+FS5izrxr6IOOvvOdbDkX1buOUaDsYPcbmOfcZBck3HMaCZZE/lW46xxwSVcDmJNrgyj2aWzzmUaZ10BV8SVT9p+roGuIa7hxApdo1wlZDOEQp11jUs5iqfBVeaaRDjNVema5Zpr7HYtdC12VdHnGtdK10pKkUOvcW2gPOwjSR3FQMw5m1bPW0m3naQ7mVHsNa49xPe7DpH2iOs4rWFPOmeT/LTrHEnHufaQ7X7Xfv4WnfAsxdbmGmgcI3+W0h1CFgNphZ/Oa1UaYy/vWH2jfhON1Txi52PEtjBi98GI3Q8j9o0YsUdixC7CiF2MEXsURuwxGLHvwoj9TYzY4zBi34sReyJG7HKM2JMwYk/BiD0VI/Y0jNjT/7+bgSQpQ9qNGWeriAkhz/kK/EHyTZc9vqi+Sd9Kfru+U99DuF3frx8if0Q/TvKT9Pk0uUP6Ob3NKZNPd3ZzGk6PM+jMIWfpm5z99a3OQSSXyQ3VD1Hb9roMs88IfST1Ap6DemAO0jEHOTEHuTAHuTEHmZiDsjAHeTAH+TAH+TEHBTAH9cIcFMQcFMYc1BtzUARzUA7moFzMQXn/Z+fOjtMreK/jBGUzo2girFJ4Z2wVc5E65wInXNinWvzvz7NQJjkGEu4W2J/m4N1Ecd7TLl53NJJ8IWtVB7TvarzbNo5d+jlso/bhs7YpFNnIE/HujbDjFJ/kC/l+tpcXszyt0SFwFnyAz3/XRvKZufykp3yQ9hDZ47wVaYq6TCTPWHFoWjHhBLZXtqfNS52SQza8q+RR5uqVWhaH5dhI/pSQujzG7zvp8jGn7ihhSdqdif9kG94bpv4u0YPzz1yOJX7KbzLgcxkcZ8XHhLnqD0nSwDbKp46b+azzRB9OS+X9Ws/YYdu7AnlV04w62YTTQNK5NpSFvFNImYT9QvtxVsI0LjvJGyBv4DzzaaHqLdgx3lW5C/vH+G0is3iHvPYu5IPltZCPYTnv9Cb54yhRHmEj712nEnE898M+loznuwhr7/ceSvwG+eLeby2KN8qUY8fs+8qL2JXKe4CreYetuob3MUpTFC/kGSTpoTxC9lcmeHfxOt6dKF/HJ4CoMyB/kOVaH95t6MBZYxRKhmQ0S7hupXVKEPJsrlve2+l4PfEO+GzwxxHzPsTcSi2Vzntd0q5OLAfvBU4ldfye99g7qjhO4tXgVAp1u/o7ji2Zloy8fcrnufMZlMoY9e/cglwnUjf5I+Kf8m5zZR/3VbFf/gXahWJQ6/FOjlfAI9z/1Qjvz1QP8X5ytQXvGjkESSHvOtby4p8QDlI+QLvQrKGuV1uI/wm5ekd7mfjziZeQq4WoAcqD403ekeuo5J08ahvv5nU8x3tu1TbuJ+r9vL86bSZa52O+C5SZfBqIWC/xLt8a5vIpHgHsU0Lkv3Dqopi1ygPcsuqVLFdf4Df3qL8Dr+fUtSzm1PpXEX6Dd3erc3nPpJoHm7nYX13Kpw8oCxHzYu5vihe8iOtQXqvOJWxHfso4RbkUuzqDvI9OOsv1RhJ+U9G1LJFjvI9LXuzgffutdpxce/JveO83IfO1ODPlWsQ5FXF+hF2gD8D+Pd4RrYzh2JTbcPLCGJyNspnPLFA2g1/Lu0CVD9r4HIrJfCK/egxhb+baE+dQM1dzjYljiH8Dl1EsA9/JZRRzwZ9BGT/iMoqNkGzj0snTUK5WuxScZ8XL+ScsR/3zjt+VSKUv51zsZe54jk/AcazDfq3k2UM4b+iaRJlIvrFJXIO3d+Cukc6y3H5bj1yN93DgRCTJPqmwCWN7E8I2QV6SGAQsA+7Azjrmo2yEjX2aFc50k6ogr7I53oThtOMBzrcRNvOhfQ5p7YLE2ektI19LrGTk90bYb+uhXGEnM+Q4LU7KRagi2BfxqR+k5Rw6IZ+X1HIMJXhLzSTEM4tjEDg7zH4LEUnKIInyrMES+30hygf2+M/pOuyzw7bbswBjl8cwa9jliiNvH/MuYs0+lawbp2u/7UbSsLvYrmeV3/9hv4eJSsp8BlLEiVoOlCstHRxnq6lIMfk+oV2wx/lTyj5oI0CceKUWIp5B4OuB7yRTOcCjASRtQPss1KnJGbkW/ElCWsGDP0HYA3PNWWUsbJYDn8WMz7v31yh8Xslm7i32W82kRnvegXwhelEN9/NEC3ZTV0E7BrPVdoXPudDxLrRa5gIng5BlMe44tnkB2MbvNlOvorWDpK4Ef0pSKayl3I3etRT9ls9b2ZfgU2ZKuUTSqQTdWVqTchOj4FOBauQ5sOcTHyxuZbk1cb3gN68EYD8c9tmwrKS6mqLwLLCC0yVeAf5nSt2DPNyB/GwF/yHyU4T81HF+tI+R7sfJdIsgz6eyZHCKpLVTGQZ5T4r5O0jrB0jrO0jrB3hnWI1cApsB/C4BzKQPA7vw6kK7UeLzOP4mt2J1NB73NfXAxCZeoSmrMMM+ifeynAH/VJ5GNobMe9TXYaZulX4rkiemqRk8b2pl/LYV7V2OUysTCdhPJstG3u2sNLONwGmkWhnVoqTN5b3xjht5vUc2XK7FHD/J6V5zRMVoxLAW2rug3YYUaQXleJhnDccS7ieOVxWqH8cmvC3GoDZhexn2pZwi10zaFTz7pF3H/ZP4K+DdKVQD3YuEuLMMtqewGdzTmDsalP9GDNx2n/CoTrl6AjHn8El/3Pe013g2l0slPpfncbahensBsT2Eusrmvs3lojk0QvY7YN/KMSh/xHz9E57pyJLP0KliS+Vp7r3qJM4bxUZ3lro7adMTcuJqNp/cod7G9wvxbzDnmlc/5DOkqC0cnCLupiBy+yFs2mDzE+T8Fm5xeRtrtT5cJ9o5rEwM+R7UQ0/UA7Tqr5DnUuZYuxocD9nwOSOtyZZ9GPXJs2ozQq3k+5GQZkZVhk057vd3MYO/Gf8B4Vvgz0nXkbZe4vN6Ygqv8dJZq3wEPk3injwSNTxNeQErCj6T7n62p5ipZVUvJL+SfsR1pfAK5xOWSM/LXVEP3D9dLNHKOAbtNebqTajh8Qj7d4S9CS3+d5p/qLZVPt9hMPL5NsacSm5f+SDs53Lq8pt4D+Ip2AzjmlcGc+tQ3vjMkSZtE5eFU6F4+A1GL+IMprf5HpfXcovI7+GeOoiwaZD/ESevpSl8Ass6bhclnZ+qlGmokxA/I1BdVXE9oCfI3Dq0muqJ8oYoVC5q9RTXqnIn16HaEzW5imtSjnO5aG32P9VdeTiU3fufzTayjiVjjywxPDNoqJTIGmONkpLs6zBZWxkRlZKIIrtSIaLotVVUtlRSlCRblkRpEZHf8xwt3n59v9/3+8f7e6/fNZfPnHOf+7mf+5xzn89zn2eu60B6VARyFS7Qi3jEB7gXZUgr4idWGvgzB/xRBZEpBvx0QuRYLSC3A35+BX76IH7Ca2kBs8HO7g3AEoCVyDnCYK+3Efk/SfNeaB1kZ4dkm/AqiwCYBrAV6McjO0H0MIKYYkQTDY/hfOtCGWArRgXIm0B5P7JbxCQg+E0TKbeiZ4G1FNBqCiRNQDIMdEyBNVNEgliDMQEgkCCnccGacF46n4Z2Q56hyJlBsBw5EYBnHjAMcoocigegDECBb+VbQOcw0GkBOi1ADsrziUATKQvMQ0ACgb5DQP4B6COIAndBAX3UNwn4Re+rB0Dk1zrKXD4ot4DWnQAh0It0gFUAx0FfngD/3UCZAeTAPoYdSIB9zCpQzkVOw0RaYVywIwbKV0A5GCAN4AZgUwoZJbDSUcjuBpY/AHMHrCHxA1+7DrQeBBIfUAbRgqxZGMG8IJwPl0HOgMQtjMcQxLEC5AU6YAQw4P3Dgj/IioPRBrkLehTca6EXOgCLAN4COAquCgdzutDfnSDSnoCrwDhgnoH7CgFUB2gFRhVEJsjWUAjHohSQ7AieOyAB/30NhWRZcCsSyQpArvBNDtbCHLAM3jag5r0ABgJNW2CnHkj2A9QFV7WDMhHomAIkAjk4Lxd8kG8UETkVWgBk7CjiDYhJrGLlWBFtFD3FhWbDZDKJhbDoAgZOiTkhDlYWJW4shsiCgpxY8UqsaByaScWgcZnWkCWkvEgili0RLgYncsjHHLUTpng6ygfligqE/9YiH0h6kTGcQMzr+6s3jV+FDraPcrq42+LYokWeZjIFIyEmrg5iYi9lYjFoDIaAnKR6JzR8JTqI6MkADt+BuH54i2aB/QoBbmI34VgJmE3WZALEh1TYCXg7p10enn7ugXQ/Mi/EjQjZCGxWri6+dD8XsgQkhkjwBEEzT2cGfRfdLVBKj87wpzOcAj3hK6QhSaQdS1j6s93G09eVZB3o5OsvZaG3HpIQ5iKvhLQgKpmqoamhZg9XNRdVoYjSv8UzLogTaeck4MzMLazI8tDyhaqEn56nv4crQ2qDtb6UvjVtlYEGRZOkRqVSSZrrqSvJyyGZhR6J/bZH1q6MYE9nV4iJXrZ4hNEsKCwTzYOC5XgME41GFXLKiOY3xSgIrOyv89jGelAhaP0h/vy0C+qYHVmFBtfwXAV5j7gM9Icvp4u937V9nj57LYWU9ElUJuaTZelQqp3tnFlztsb1QadmdwGM8IbPsYKGmST8cdTl5kM3TFwaNWt6jyqN1kWrXVO6QSyelj/DCvlr9lQR6sPvm+xICejvraOXx68y7OPlvMSIcdgvq8f95OJ5afWYZwUh8YO9PHtPCkfLxIk8uhtwJ+9TsYVyhn2LfTH6biKzHv1FEOM65lcjjCIdYjlxeHsc9ShHRo3bSz/fxy8zTbpeJKbv3vdUyO0GeoWqufyM/eDnd+KvuXGfvPUlBPbdcDnV9eD6vEGrV+0uSQwWXkc5TDQHPCIskDg8pOLcOCGcQHvtJ0pxDJnnlUjiu7W15JmtGB4OEEPiMrilkFC4gIz656dWBv74Nzpfgr+UKhXXaZTyQDaIgiTODNoIGWcaZupH63kEBvqvUlV1Zvio+H6fJxVnuq+qv7cnIlX1Z9BdgpwDd6n+mEZkFsEkwlGpAqtAm1nZ4YXJwsIGbwJNIRPI6HsdwkSv+XaDkJCQ393AlfFvLAdCBMTf5bglEP67SSz7LwsSi0RJylbU84kcoyMDFlruibI36MdrdHq0zimbxSrnb1lLwXu1zDoI41Ig87b5JdlRL5bfwq1in6INoEtf+Om50l5qq+j7Kwa1mXuaC4WWtu5ZOyFSYFZSFESxkmVJju80eja84Uu8k9CW7fdKlDYlZVg53LwBybONPzGVDyutmzLR4BIxyyHffv6IuCxOnkNdh9qabiR2OOiw3tlORZuyfKqPQHpDqE+5yMVDoTlUlxp0wli3zgFHPl6bRBb7ZwdKFTbyp6szj6gq7KDyvnMntjN3dfVQvvSo5fTraEhXUbdSPOjNnUrDaCfnE8kxr0bfFmMuT085zPZE1KnvL7PsFpUcsxqbgWnsDUxjj3/SGFrn1IVxf9uvLWwLj5pfaSzsbyELGUh6YdETF7e7uEpZe7r7wVYXEZkmWZMCkWH2QoiMSiZDlG9VKCLy/4LIvqlj/4X6fySmro1HRrBejg2i2/AsWgOPuRMe1PceGc7lYhHZfGNNh2J3bLmH38aM/VVnqm2itS6809QQeiVe8KXI+zkHNFEh0ePz2eTMpmSjBpnY0i3y6tVJZMM0nlYdDQr168h781xibmlYVXjqOtmU+of0xweG9OIGnk+2vSpye4NbJZ14zu45tkv5jui8klb+ttpNX7uNe2xYEi+p9eTuI58zq7a9L0T2WHfQW8z3/fhj6PC4q2h6ObuY4v6T1ZP7dIM1l7Xv2fuh4npAel3iB2a0BvNcYDVGbcYmOipnec3F2O19Wo5y61OIL66/MogKrbSkYAzHBqYlq3GWQa/4U4NfRyULLMNnEaacvhOTEzwi2363ULGL2CptcNiXaVdElX0xuv1CvWO8eOvTPZAV0syHg6ko1xDS/3V+1CEKUmUhKFEoWpqQmpIbVVNjJ9kZImm4aLmR1NXIK0maLiudSFR1J9eV6hQXF1e4cTEDNvMNN7WVCW1GN1JV1ISErpuewUtCtgsMaA7BHJgJc2C0/n/FgHAww6EMR7EjBD/syCQ4ZiHAgfaLOJAGwSy4iAPX/jUO/Be2A39HeN4Dtv0dBHEpnWnfkRe0rm0Sd3zkcqYGOcKXzNv1lrU/nXYw6mU9cCvXpuLU7o9xjZGEJQG1n2crVVoEd71HedOWX/xQj2ckWmWEmCmeVGAnCz3t8Qu8VD9MEyw5zbKBRjQ2Vi4IG6+NMj/oZzhR09l2xNiTWzHyY151jqh0YXbe2niptI8Z/Nq7twS5TDzLiTpI4cdgvFxC0Oe0UkrHsxWMfQpkKQpr84+4KX/BdEaqyiScmLJznc99PGLJnvjpydyNxzek9Of0jM3Dxl1EDuyg9dU3WdMkv9if4Np6TzZy767hRt0QfkeyXGNxq/VhJ5upW3GM0+9uXxPffzH+IG5VcljhDojJUgUTXu4C4eGd1OSIIF0j/8pzjoA+8BwJcrEnJ5Vd0CJCWHjgySKQ8J+EHD/mhUyClBaIQfYnMVjR6TA7wBPl6ebp7BToKrU+KNCDzvAMDANsBkGaamQKhaylRoHZjPKtSkGq/yTR/icKu8LY4iACudSKn9khJaV7OtjaZ63oE3pL87tR76/JQrwve1YFRhLLVTMpY/MvbunSZB4zUF0advjYpiIp4w9vPQrMNsblVYdtDEg1ZHs2t7znbFDM/Yu7NhzoiOh6Xz25MrfRQf/55ULtlwoeycTzeYxdtu+EEwfmNBIZmU+CHSVC9COjNIUe7NrK8oe7VVzeFU/VZyKcXxMCFfuCVW26BaAtn9vids41NzoakC2uyxMGdKD7DEVehWV3qTTtTIp2/L0sTdYoB5otU2EFC6V8Y4e581Abaec7fe2hAnbUJ4Os9Idbj8pZD+++aDJpcJ+6RjO9LMQhTzg9rpnvuO2amwUcjthH3ylsOzwi9hAPwgwENHoexwJh4a9F9PVbJkHYSpwHh4MjMBriZ+X4tjcRRONYgGE4//0hwyBW5h6SaY/kDif1puxYnU+mn1tT1UmCRH4oCWBwSyTwKGtUELyf0UOt/xOXcRcwd+jYyicPLifMrujFWydtGciFLBa4zBiC6TNTL3N99Lq/zmU/mhlwaCMUBFjMZhGLGUEG0IZFLKb532RyyILRW7D6v/kLg0Zt0Vp7QM7g8mu6TgnlqtdrblW/fOOp145Bb0xXkzr0Cjm/No+QyDkyLXstUsKltxVoq5r+kZ1vm9bvX1lR9jnsqjFjau3o+gNNvUuEPZvz0qRIM5wW9bb3SP0mbVX+Q/lc2dg825cVhzfaTSbppr17PzHeHy2pvqbC9sxba5moFblMsZN9iWzik320z0ezmoYJeSdoDaJtxxlJKwJ8U4mfxd5aP3FvWTbvIH4v+2i1/JUwZ9sN2Zb3pkdyNtt2p2L0N6g6fnhW1M6k+M3mJhEGXnsOXchWrmlQ4uV2PXa662P2DL8ch6tm4rvdkiaVD3tthx+Enlrq0Kgh5Nh9Utz4GKmmUH2D2DivIBG1rVtjq3Rryl2O8Sjuo+a+3ASa9l5FozTGw/c+TTfH/HPsEuz2JcZlihph7afu57jjA/NWviGpCje8YlD5P9BL1rgzp62uxKkJuUpwH+7mfeHygd5q0P5IeCSsHlf26Ityj+Th9AL8F4K8TuHAdO+FAwaVbDsMXXfo0Ip1x2hvSoPDOvHqHL5i4WTJPm6b7sGsL4OGvIUuKfMWQip7a1mkd/clrZf3rDt5PKkxrjNVuojLIe1tdlG0R+QSL1JlsDdK/FThpNCeT0KRstdj7nvlG5JVzzzvD9DuQO3fafiwNaaxYukMNyPuZo72ZYyO17xn6qk+3nzeMqoF+5M6bYjJygbz98R3/hbyUAf8LfZP8DdEhdQhmLE11CAthL/JoKoGIdV/br//n9g7I8unpKfLKGHFXm8Vkd7qvv7bpy1lLApbu5fSZHnGH55/aFoYCEnxvWZ7bJMkaJwoqptQlOIAyT1DeQ/vqR6LZeOZ4salvI1tkWxWkz10dvKDu5jy7J6hGPHRIVpO1k0Z66a4Gf37HA+2X35QrIvLnj7nc9K9Q+G5gXVx9INBBQMV+YJo801WSwawyl+84uMhv0Pvt0BnZ/Y/SS4dlk7e/7mN8J693NrXqkw/PsMIZWLoxiev6JafPPCINcIke/rgeT5DAQ5mxsE3m0K/os+IW7BHoXghgzflL2QMKutJNhmXJULXk0NaUntWR57McsJcFecqmZ1KvYJuXbbRZn6ape6WFOd39r4Ej8j5f8fev90J/4m9eRezNyxBQREpC+QbEQ9FxP2efrOcc53+9vBk8oYVCmWZZOYVmu7a/IGNoOL6/4b1/9LeHR5r3uTDdQ7YDSu7R8oKQ7pawyzN0CUqgQFbfZcQLrXW7DleodLOn33Ud2eFHaaZJkWwON29W6fPrvLy5jNiveLo6ILK0MkjD8ZWo8f7ao7jWRrijPreWgt2m19KGBiK83ocfvNV4iSrahR25MQK2WX+Xz7NDoSeVuGaYuvzr1pKO3vMG89IqsjSSnMn3bbkHt3psE4o5YjUuj42ImW6hWwSTNZWYnA2jPprz0fhCT238E7H3nZUCL+mHTlwW0Npe07t66p9nLp72q0Z0uNQU2Woq8NWtDBegLvtmUDKxzXX3TaXklSHpqOiWyxth8/6J/oUaJm2fwqrvbh0907FiexURXXWEOLORm0JX0nmW867ypX39UoHp8f2Xe3PzQ/UqKDdDpDhlwvmXGN1NMDeQE+gqrS02My9IUN3PjxMOjxdEHIb1uXfTmxIXyb9QG9EaaTyg1GLcnsnJdxUboWRrKP9qO3EuRenzzatoldHyAey8o0HS9emMm/K21wr8dKOzQp2KvPLIpyrvWj4lp8+d5jic+Vrj2XDUZlGt+qz4of4XTDapMtbjlcMSA9eLW5yLgu1YWlfr2JRkFicF3qpNPNUEPFpwiFC0DJVSj67X+bWo8trMycONkk/eS1h3nhm3PjlFNqVHsu5r8Gz4ZXf6PnkVrLiPPftrQ6dZqJZnTOq6etUNgl5NxJy5shMHLyEcecxaDQEL7d/Ll/+/XuTn2+RMyPqkXTtW/xyYMlLFr+ihh34WeMkc0OLWwWRZPD7hTgyTErE2rJC59EzA+0H9F+Jhd9OrtJTsoZcFl2yhGwL2WSuCFdAmaE8Uc4oBooO3nK7oQJRUigbVBjKH665w3InuOSBCsuSC5f9l4vVJsyf7s5w8vcIU/3loYJjwrtJ1nAVnp2s5fPnghgWHUtT73dfYKql+odxK0UWpZeXvnFW4mkusQni8uko39c8BfFS/bnTGYpKnBL30jZO9FyoMQ9ARV6y5z8rlNVfOXvea8VsUc5o77G5ldKU2dbNdSk3pNomiqcV4jxEVvmacfcH8I1R5FsssoPxNL6QINm+rKPjdYHQQMPk9pyQi1z6Rt6cOrakj9XLzz7v4hNMk7kvyKHdFxf3bGX+24fXIjrL2MLUr+xeIf66j0/nvNy0wYlwDa4z67wj/BnO+wfCL9jyfkwv30GVUJS85k4bjbE4VxAjMRd77GXD5SrdodUHSBl3bQ51zj3uVTR7kVi1I7nlVslg/pEsJkYBYmJkf84RK5mJEYRFfCAqj/1jWcDvf5JYFJPboKWLQ5Lz508raPjmP1pYyDzIazaIAic2murqyGu2XyMyows9886qb1uNo+7eWxxEtRhzvl+zMSRWmKsESjpEDvmoiTFPxybwjMoVRqS/2tQn1G9ZG5CgHR3+pkW7yvqu4ugfpiiR2plG52WbD4ZhE+8QXMOJL8KK0n1x25S6pe4wKtKUJdSJn02OXy+qyS9+Y80pmnL1mFxHwH6u61vlr92tFBPOG3zfVH6280ibwHXf4j8OVZyfTWmv6phMeLR8qtzYhD38kdmQ/fo2u2Tc7eMnWOwtNUltbVTRrydiBm7FjQoWSSnGQu88eKqbAo95yY4+NTs39h67RaOvLWjkqV3qakV3L8bgyGrr/KM8E5bPtZP7uM5/Tmgw1ztkxW63ulIq+KtJ1JBEn79hOW/S0j1NS8K8T86OzVwkOWraMf8HJf0ykg0KZW5kc3RyZWFtDQplbmRvYmoNCjE5IDAgb2JqDQo8PC9UeXBlL1hSZWYvU2l6ZSAxOS9XWyAxIDQgMl0gL1Jvb3QgMSAwIFIvSW5mbyA5IDAgUi9JRFs8NUQyNDU1Njg4M0VDQUE0MUIwMzQ3QTZGMDMyMUE0MEM+PDVEMjQ1NTY4ODNFQ0FBNDFCMDM0N0E2RjAzMjFBNDBDPl0gL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNzg+Pg0Kc3RyZWFtDQp4nGNgAIL//xmBpCADA4iqhVBbwRTjYTDF9AhMMXeBKZZKCLUOQj0GygM1CDAwQShmCMUCoRghFFQJK1AD6wmwPnYPMMWpycAAABqrCWINCmVuZHN0cmVhbQ0KZW5kb2JqDQp4cmVmDQowIDIwDQowMDAwMDAwMDEwIDY1NTM1IGYNCjAwMDAwMDAwMTcgMDAwMDAgbg0KMDAwMDAwMDEyNSAwMDAwMCBuDQowMDAwMDAwMTgxIDAwMDAwIG4NCjAwMDAwMDA0NTEgMDAwMDAgbg0KMDAwMDAwMDczOCAwMDAwMCBuDQowMDAwMDAwOTA2IDAwMDAwIG4NCjAwMDAwMDExNDUgMDAwMDAgbg0KMDAwMDAwMTE5OCAwMDAwMCBuDQowMDAwMDAxMjUxIDAwMDAwIG4NCjAwMDAwMDAwMTEgNjU1MzUgZg0KMDAwMDAwMDAxMiA2NTUzNSBmDQowMDAwMDAwMDEzIDY1NTM1IGYNCjAwMDAwMDAwMTQgNjU1MzUgZg0KMDAwMDAwMDAxNSA2NTUzNSBmDQowMDAwMDAwMDE2IDY1NTM1IGYNCjAwMDAwMDAwMDAgNjU1MzUgZg0KMDAwMDAwMTg2NCAwMDAwMCBuDQowMDAwMDAyMzQ1IDAwMDAwIG4NCjAwMDAxNDkxMTMgMDAwMDAgbg0KdHJhaWxlcg0KPDwvU2l6ZSAyMC9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDVEMjQ1NTY4ODNFQ0FBNDFCMDM0N0E2RjAzMjFBNDBDPjw1RDI0NTU2ODgzRUNBQTQxQjAzNDdBNkYwMzIxQTQwQz5dID4+DQpzdGFydHhyZWYNCjE0OTM5MA0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyMC9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDVEMjQ1NTY4ODNFQ0FBNDFCMDM0N0E2RjAzMjFBNDBDPjw1RDI0NTU2ODgzRUNBQTQxQjAzNDdBNkYwMzIxQTQwQz5dIC9QcmV2IDE0OTM5MC9YUmVmU3RtIDE0OTExMz4+DQpzdGFydHhyZWYNCjE0OTk0Nw0KJSVFT0Y=</ram:AttachmentBinaryObject>
+            </ram:AdditionalReferencedDocument>
+        </ram:ApplicableHeaderTradeAgreement>
+        <ram:ApplicableHeaderTradeDelivery/>
+        <ram:ApplicableHeaderTradeSettlement>
+            <ram:CreditorReferenceID>[Bank assigned creditor identifier]</ram:CreditorReferenceID>
+            <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
+            <ram:SpecifiedTradeSettlementPaymentMeans>
+                <ram:TypeCode>59</ram:TypeCode>
+                <ram:PayerPartyDebtorFinancialAccount>
+                    <ram:IBANID>DE75512108001245126199</ram:IBANID>
+                </ram:PayerPartyDebtorFinancialAccount>
+            </ram:SpecifiedTradeSettlementPaymentMeans>
+            <ram:ApplicableTradeTax>
+                <ram:CalculatedAmount>8489.58</ram:CalculatedAmount>
+                <ram:TypeCode>VAT</ram:TypeCode>
+                <ram:BasisAmount>44682.01</ram:BasisAmount>
+                <ram:CategoryCode>S</ram:CategoryCode>
+                <ram:RateApplicablePercent>19</ram:RateApplicablePercent>
+            </ram:ApplicableTradeTax>
+            <ram:BillingSpecifiedPeriod>
+                <ram:StartDateTime>
+                    <udt:DateTimeString format="102">20160101</udt:DateTimeString>
+                </ram:StartDateTime>
+                <ram:EndDateTime>
+                    <udt:DateTimeString format="102">20160131</udt:DateTimeString>
+                </ram:EndDateTime>
+            </ram:BillingSpecifiedPeriod>
+            <ram:SpecifiedTradePaymentTerms>
+                <ram:Description>Dieses Guthaben werden wir auf Ihr Konto erstatten.</ram:Description>
+                <ram:DueDateDateTime>
+                    <udt:DateTimeString format="102">20190314</udt:DateTimeString>
+                </ram:DueDateDateTime>
+                <ram:DirectDebitMandateID>[Mandate reference identifier]</ram:DirectDebitMandateID>
+            </ram:SpecifiedTradePaymentTerms>
+            <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+                <ram:LineTotalAmount>44682.01</ram:LineTotalAmount>
+                <ram:TaxBasisTotalAmount>44682.01</ram:TaxBasisTotalAmount>
+                <ram:TaxTotalAmount currencyID="EUR">8489.58</ram:TaxTotalAmount>
+                <ram:GrandTotalAmount>53171.59</ram:GrandTotalAmount>
+                <ram:DuePayableAmount>53171.59</ram:DuePayableAmount>
+            </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
+        </ram:ApplicableHeaderTradeSettlement>
+    </rsm:SupplyChainTradeTransaction>
+</rsm:CrossIndustryInvoice>
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/BuilderEn16931Test.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/BuilderEn16931Test.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/BuilderEn16931Test.php	(revision 8435)
@@ -0,0 +1,2460 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use DateTime;
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\tests\traits\HandlesXmlTests;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentBuilder;
+
+class BuilderEn16931Test extends TestCase
+{
+    use HandlesXmlTests;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931);
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getInvoiceObject
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getSerializer
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getObjectHelper
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getProfileDefinitionParameter
+     */
+    public function testDocumentGetters(): void
+    {
+        $this->assertNotNull(self::$document->getInvoiceObject());
+        $this->assertNotNull(self::$document->getSerializer());
+        $this->assertNotNull(self::$document->getObjectHelper());
+        $this->assertEquals('en16931', self::$document->getProfileDefinitionParameter('name'));
+        $this->assertEquals('EN 16931 (COMFORT)', self::$document->getProfileDefinitionParameter('altname'));
+        $this->assertEquals('urn:cen.eu:en16931:2017', self::$document->getProfileDefinitionParameter('contextparameter'));
+        $this->assertEquals('factur-x.xml', self::$document->getProfileDefinitionParameter('attachmentfilename'));
+        $this->assertEquals('EN 16931', self::$document->getProfileDefinitionParameter('xmpname'));
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getProfileDefinitionParameter('unknownparameter');
+            }
+        );
+    }
+
+    public function testXmlGenerals(): void
+    {
+        $xml = $this->getXml();
+        $namespaces = $xml->getNamespaces(true);
+
+        $this->disableRenderXmlContent();
+        $this->assertArrayHasKey("rsm", $namespaces);
+        $this->assertArrayHasKey("ram", $namespaces);
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID', (self::$document)->getProfileDefinitionParameter("contextparameter"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInformation
+     */
+    public function testSetDocumentInformation(): void
+    {
+        (self::$document)->setDocumentInformation("471102", "380", DateTime::createFromFormat("Ymd", "20180305"), "EUR");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID', "471102");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode', "380");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString', "20180305", "format", "102");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode', "EUR");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBusinessProcess
+     */
+    public function testSetDocumentBusinessProcess(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID');
+
+        (self::$document)->setDocumentBusinessProcess("");
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID');
+
+        (self::$document)->setDocumentBusinessProcess("GENERAL INVOICE");
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID', "GENERAL INVOICE");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentGeneralPaymentInformation
+     */
+    public function testSetDocumentGeneralPaymentInformation(): void
+    {
+        (self::$document)->setDocumentGeneralPaymentInformation("1111111111", "2222222222");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID', "1111111111");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentReference', "2222222222");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setIsDocumentCopy
+     * @covers \horstoeko\zugferd\jms\ZugferdTypesHandler::serializeIndicatorType
+     */
+    public function testSetIsDocumentCopy(): void
+    {
+        (self::$document)->setIsDocumentCopy();
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CopyIndicator');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setIsTestDocument
+     * @covers \horstoeko\zugferd\jms\ZugferdTypesHandler::serializeIndicatorType
+     */
+    public function testSetIsTestDocument(): void
+    {
+        (self::$document)->setIsTestDocument();
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:TestIndicator/udt:Indicator');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentNote
+     */
+    public function testAddDocumentNote(): void
+    {
+        (self::$document)->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.');
+        (self::$document)->addDocumentNote('Lieferant GmbH', null, 'REG');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content', 0, "Rechnung gemÃ€Ã Bestellung vom 01.03.2018.");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content', 1, "Lieferant GmbH");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode', 0, "REG");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSupplyChainEvent
+     */
+    public function testSetDocumentSupplyChainEvent(): void
+    {
+        (self::$document)->setDocumentSupplyChainEvent(DateTime::createFromFormat('Ymd', '20180305'));
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString', "20180305", "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerReference
+     */
+    public function testSetDocumentBuyerReference(): void
+    {
+        (self::$document)->setDocumentBuyerReference("buyerref");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerReference', "buyerref");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSeller
+     */
+    public function testSetDocumentSeller(): void
+    {
+        (self::$document)->setDocumentSeller("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name', "Lieferant GmbH");
+
+        (self::$document)->setDocumentSeller("Lieferant 2 GmbH", "5499102");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', "5499102");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name', "Lieferant 2 GmbH");
+
+        (self::$document)->setDocumentSeller("", "5499103");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', "5499103");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerId
+     */
+    public function testAddDocumentSellerId(): void
+    {
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', 0, "5499103");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentSellerId('5499104');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', 0, "5499103");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', 1, "5499104");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerGlobalId
+     */
+    public function testAddDocumentSellerGlobalId(): void
+    {
+        (self::$document)->addDocumentSellerGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID', 0, "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerTaxRegistration
+     */
+    public function testAddDocumentSellerTaxRegistration(): void
+    {
+        (self::$document)->addDocumentSellerTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentSellerTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerAddress
+     */
+    public function testSetDocumentSellerAddress(): void
+    {
+        (self::$document)->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "80333");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineOne', "LieferantenstraÃe 20");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CityName', "MÃŒnchen");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerLegalOrganisation
+     */
+    public function testSetDocumentSellerLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentSellerLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0, "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Lieferant AG");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerContact
+     */
+    public function testSetDocumentSellerContact(): void
+    {
+        (self::$document)->setDocumentSellerContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+
+        (self::$document)->setDocumentSellerContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info@meinseller.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-4444444");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@meinseller.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+
+        (self::$document)->setDocumentSellerContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerContact
+     */
+    public function testAddDocumentSellerContact(): void
+    {
+        (self::$document)->addDocumentSellerContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info@meinseller.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        (self::$document)->addDocumentSellerContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info@meinseller.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerCommunication
+     */
+    public function testSetDocumentSellerCommunication(): void
+    {
+        (self::$document)->setDocumentSellerCommunication("EM", "seller@email.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID', 0, "seller@email.de", "schemeID", "EM");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyer
+     */
+    public function testSetDocumentBuyer(): void
+    {
+        (self::$document)->setDocumentBuyer("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name', "Kunden AG Mitte");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentBuyerId
+     */
+    public function testAddDocumentBuyerId(): void
+    {
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentBuyerId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', 1, "549911");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentBuyerGlobalId
+     */
+    public function testAddDocumentBuyerGlobalId(): void
+    {
+        (self::$document)->addDocumentBuyerGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID', 0, "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentBuyerTaxRegistration
+     */
+    public function testAddDocumentBuyerTaxRegistration(): void
+    {
+        (self::$document)->addDocumentBuyerTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentBuyerTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerAddress
+     */
+    public function testSetDocumentBuyerAddress(): void
+    {
+        (self::$document)->setDocumentBuyerAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "69876");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineOne', "Kundenstrasse 15");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CityName', "Frankfurt");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerLegalOrganisation
+     */
+    public function testSetDocumentBuyerLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentBuyerLegalOrganisation("DE12345", "FC", "Kunden Holding");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0, "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Kunden Holding");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerContact
+     */
+    public function testSetDocumentBuyerContact(): void
+    {
+        (self::$document)->setDocumentBuyerContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentBuyerContact
+     */
+    public function testAddDocumentBuyerContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        (self::$document)->addDocumentBuyerContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerCommunication
+     */
+    public function testSetDocumentBuyerCommunication(): void
+    {
+        (self::$document)->setDocumentBuyerCommunication("EM", "buyer@email.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID', 0, "buyer@email.de", "schemeID", "EM");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerTaxRepresentativeTradeParty
+     */
+    public function testSetDocumentSellerTaxRepresentativeTradeParty(): void
+    {
+        (self::$document)->setDocumentSellerTaxRepresentativeTradeParty("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Name', "Lieferant GmbH");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testAddDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        (self::$document)->addDocumentSellerTaxRepresentativeGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:GlobalID', 0, "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testAddDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        (self::$document)->addDocumentSellerTaxRepresentativeTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentSellerTaxRepresentativeTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerTaxRepresentativeAddress
+     */
+    public function testSetDocumentSellerTaxRepresentativeAddress(): void
+    {
+        (self::$document)->setDocumentSellerTaxRepresentativeAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "80333");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineOne', "LieferantenstraÃe 20");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CityName', "MÃŒnchen");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testSetDocumentSellerTaxRepresentativeLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentSellerTaxRepresentativeLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0, "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Lieferant AG");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerTaxRepresentativeContact
+     */
+    public function testSetDocumentSellerTaxRepresentativeContact(): void
+    {
+        (self::$document)->setDocumentSellerTaxRepresentativeContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerTaxRepresentativeContact
+     */
+    public function testAddDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        (self::$document)->addDocumentSellerTaxRepresentativeContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProductEndUser
+     */
+    public function testSetDocumentProductEndUser(): void
+    {
+        (self::$document)->setDocumentProductEndUser("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentProductEndUserGlobalId
+     */
+    public function testAddDocumentProductEndUserGlobalId(): void
+    {
+        (self::$document)->addDocumentProductEndUserGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:GlobalID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentProductEndUserTaxRegistration
+     */
+    public function testAddDocumentProductEndUserTaxRegistration(): void
+    {
+        (self::$document)->addDocumentProductEndUserTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentProductEndUserTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProductEndUserAddress
+     */
+    public function testSetDocumentProductEndUserAddress(): void
+    {
+        (self::$document)->setDocumentProductEndUserAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CountryID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProductEndUserLegalOrganisation
+     */
+    public function testSetDocumentProductEndUserLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentProductEndUserLegalOrganisation("DE12345", "FC", "Kunden Holding");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProductEndUserContact
+     */
+    public function testSetDocumentProductEndUserContact(): void
+    {
+        (self::$document)->setDocumentProductEndUserContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentProductEndUserContact
+     */
+    public function testAddDocumentProductEndUserContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentProductEndUserContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipTo
+     */
+    public function testSetDocumentShipTo(): void
+    {
+        (self::$document)->setDocumentShipTo("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name', "Kunden AG Mitte");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipTolId
+     */
+    public function testAddDocumentShipTolId(): void
+    {
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentShipTolId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 1, "549911");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipToGlobalId
+     */
+    public function testAddDocumentShipToGlobalId(): void
+    {
+        (self::$document)->addDocumentShipToGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID', 0, "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipToTaxRegistration
+     */
+    public function testAddDocumentShipToTaxRegistration(): void
+    {
+        (self::$document)->addDocumentShipToTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentShipToTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToAddress
+     */
+    public function testSetDocumentShipToAddress(): void
+    {
+        (self::$document)->setDocumentShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "69876");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', "Kundenstrasse 15");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName', "Frankfurt");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToLegalOrganisation
+     */
+    public function testSetDocumentShipToLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0, "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Kunden Holding");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToContact
+     */
+    public function testSetDocumentShipToContact(): void
+    {
+        (self::$document)->setDocumentShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipToContact
+     */
+    public function testAddDocumentShipToContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        (self::$document)->addDocumentShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentUltimateShipTo
+     */
+    public function testSetDocumentUltimateShipTo(): void
+    {
+        (self::$document)->setDocumentUltimateShipTo("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateShipToId
+     */
+    public function testAddDocumentUltimateShipToId(): void
+    {
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentUltimateShipToId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateShipToGlobalId
+     */
+    public function testAddDocumentUltimateShipToGlobalId(): void
+    {
+        (self::$document)->addDocumentUltimateShipToGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateShipToTaxRegistration
+     */
+    public function testAddDocumentUltimateShipToTaxRegistration(): void
+    {
+        (self::$document)->addDocumentUltimateShipToTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentUltimateShipToTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentUltimateShipToAddress
+     */
+    public function testSetDocumentUltimateShipToAddress(): void
+    {
+        (self::$document)->setDocumentUltimateShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentUltimateShipToLegalOrganisation
+     */
+    public function testSetDocumentUltimateShipToLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentUltimateShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentUltimateShipToContact
+     */
+    public function testSetDocumentUltimateShipToContact(): void
+    {
+        (self::$document)->setDocumentUltimateShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateShipToContact
+     */
+    public function testAddDocumentUltimateShipToContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentUltimateShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipFrom
+     */
+    public function testSetDocumentShipFrom(): void
+    {
+        (self::$document)->setDocumentShipFrom("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipFromId
+     */
+    public function testAddDocumentShipFromId(): void
+    {
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentShipFromId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipFromGlobalId
+     */
+    public function testAddDocumentShipFromGlobalId(): void
+    {
+        (self::$document)->addDocumentShipFromGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:GlobalID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipFromTaxRegistration
+     */
+    public function testAddDocumentShipFromTaxRegistration(): void
+    {
+        (self::$document)->addDocumentShipFromTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentShipFromTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipFromAddress
+     */
+    public function testSetDocumentShipFromAddress(): void
+    {
+        (self::$document)->setDocumentShipFromAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CountryID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipFromLegalOrganisation
+     */
+    public function testSetDocumentShipFromLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentShipFromLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipFromContact
+     */
+    public function testSetDocumentShipFromContact(): void
+    {
+        (self::$document)->setDocumentShipFromContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipFromContact
+     */
+    public function testAddDocumentShipFromContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentShipFromContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicer
+     */
+    public function testSetDocumentInvoicer(): void
+    {
+        (self::$document)->setDocumentInvoicer("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoicerId
+     */
+    public function testAddDocumentInvoicerId(): void
+    {
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentBuyerId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoicerGlobalId
+     */
+    public function testAddDocumentInvoicerGlobalId(): void
+    {
+        (self::$document)->addDocumentInvoicerGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:GlobalID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoicerTaxRegistration
+     */
+    public function testAddDocumentInvoicerTaxRegistration(): void
+    {
+        (self::$document)->addDocumentInvoicerTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentInvoicerTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicerAddress
+     */
+    public function testSetDocumentInvoicerAddress(): void
+    {
+        (self::$document)->setDocumentInvoicerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CountryID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicerLegalOrganisation
+     */
+    public function testSetDocumentInvoicerLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentInvoicerLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicerContact
+     */
+    public function testSetDocumentInvoicerContact(): void
+    {
+        (self::$document)->setDocumentInvoicerContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoicerContact
+     */
+    public function testAddDocumentInvoicerContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentInvoicerContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicee
+     */
+    public function testSetDocumentInvoicee(): void
+    {
+        (self::$document)->setDocumentInvoicee("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoiceeId
+     */
+    public function testAddDocumentInvoiceeId(): void
+    {
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentInvoiceeId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoiceeGlobalId
+     */
+    public function testAddDocumentInvoiceeGlobalId(): void
+    {
+        (self::$document)->addDocumentInvoiceeGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:GlobalID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoiceeTaxRegistration
+     */
+    public function testAddDocumentInvoiceeTaxRegistration(): void
+    {
+        (self::$document)->addDocumentInvoiceeTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentInvoiceeTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoiceeAddress
+     */
+    public function testSetDocumentInvoiceeAddress(): void
+    {
+        (self::$document)->setDocumentInvoiceeAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CountryID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoiceeLegalOrganisation
+     */
+    public function testSetDocumentInvoiceeLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentInvoiceeLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoiceeContact
+     */
+    public function testSetDocumentInvoiceeContact(): void
+    {
+        (self::$document)->setDocumentInvoiceeContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoiceeContact
+     */
+    public function testAddDocumentInvoiceeContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentInvoiceeContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPayee
+     */
+    public function testSetDocumentPayee(): void
+    {
+        (self::$document)->setDocumentPayee("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Name', "Lieferant GmbH");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPayeeId
+     */
+    public function testAddDocumentPayeeId(): void
+    {
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentPayeeId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', 1, "549911");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPayeeGlobalId
+     */
+    public function testAddDocumentPayeeGlobalId(): void
+    {
+        (self::$document)->addDocumentPayeeGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID', 0, "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPayeeTaxRegistration
+     */
+    public function testAddDocumentPayeeTaxRegistration(): void
+    {
+        (self::$document)->addDocumentPayeeTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentPayeeTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPayeeAddress
+     */
+    public function testSetDocumentPayeeAddress(): void
+    {
+        (self::$document)->setDocumentPayeeAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "80333");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineOne', "LieferantenstraÃe 20");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CityName', "MÃŒnchen");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPayeeLegalOrganisation
+     */
+    public function testSetDocumentPayeeLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentPayeeLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0, "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Lieferant AG");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPayeeContact
+     */
+    public function testSetDocumentPayeeContact(): void
+    {
+        (self::$document)->setDocumentPayeeContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPayeeContact
+     */
+    public function testAddDocumentPayeeContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        (self::$document)->addDocumentPayeeContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentDeliveryTerms
+     */
+    public function testSetDocumentDeliveryTerms(): void
+    {
+        (self::$document)->setDocumentDeliveryTerms("term");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ApplicableTradeDeliveryTerms/ram:DeliveryTypeCode');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerOrderReferencedDocument
+     */
+    public function testSetDocumentSellerOrderReferencedDocument(): void
+    {
+        (self::$document)->setDocumentSellerOrderReferencedDocument('B-1010', new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID', "B-1010");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:FormattedIssueDateTime/ram:DateTimeString');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerOrderReferencedDocument
+     */
+    public function testSetDocumentBuyerOrderReferencedDocument(): void
+    {
+        (self::$document)->setDocumentBuyerOrderReferencedDocument('O-2020', new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID', "O-2020");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime/ram:DateTimeString');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentContractReferencedDocument
+     */
+    public function testSetDocumentContractReferencedDocument(): void
+    {
+        (self::$document)->setDocumentContractReferencedDocument("CON-4711", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID', "CON-4711");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:FormattedIssueDateTime/ram:DateTimeString');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentAdditionalReferencedDocument
+     */
+    public function testAddDocumentAdditionalReferencedDocument(): void
+    {
+        (self::$document)->addDocumentAdditionalReferencedDocument("A-1011", "type", "http://lieferant.de/docs/a1011.pdf", "Leistungsnachweis", "reftype", new DateTime());
+        (self::$document)->addDocumentAdditionalReferencedDocument("B-2233", "type2", "http://lieferant.de/docs/b2233.pdf", "Lieferliste", "reftype2", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID', 0, "A-1011");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID', 1, "B-2233");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID', 0, "http://lieferant.de/docs/a1011.pdf");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID', 1, "http://lieferant.de/docs/b2233.pdf");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode', 0, "type");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode', 1, "type2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Name', 0, "Leistungsnachweis");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Name', 1, "Lieferliste");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode', 0, "reftype");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode', 1, "reftype2");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0, (new DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 1, (new DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentAdditionalReferencedDocument
+     */
+    public function testAddDocumentAdditionalReferencedDocumentWithAttachment(): void
+    {
+        (self::$document)->addDocumentAdditionalReferencedDocument("A-1011", "type", "http://lieferant.de/docs/a1011.pdf", "Leistungsnachweis", "reftype", new DateTime(), dirname(__FILE__) . "/../assets/InvalidPDF.pdf");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID', 2, "A-1011");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID', 2, "http://lieferant.de/docs/a1011.pdf");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode', 2, "type");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Name', 2, "Leistungsnachweis");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode', 2, "reftype");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 2, (new DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueStartsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject', 0, "JVBERi0xLjQKJcOkw7zDtsOfC");
+        $this->assertXPathValueStartsWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject', 0, "JVBERi0xLjQKJcOkw7zDtsOfC", "mimeCode", "application/pdf");
+        $this->assertXPathValueStartsWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject', 0, "JVBERi0xLjQKJcOkw7zDtsOfC", "filename", "InvalidPDF.pdf");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoiceReferencedDocument
+     */
+    public function testSetDocumentInvoiceReferencedDocument(): void
+    {
+        (self::$document)->setDocumentInvoiceReferencedDocument("INV-1", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID', "INV-1");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', (new DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProcuringProject
+     */
+    public function testSetDocumentProcuringProject(): void
+    {
+        (self::$document)->setDocumentProcuringProject("HB-8378732", "Hausbau");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID', "HB-8378732");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:Name', "Hausbau");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testAddDocumentUltimateCustomerOrderReferencedDocument(): void
+    {
+        (self::$document)->addDocumentUltimateCustomerOrderReferencedDocument("DOC-11", new DateTime());
+        (self::$document)->addDocumentUltimateCustomerOrderReferencedDocument("DOC-22", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentDespatchAdviceReferencedDocument
+     */
+    public function testSetDocumentDespatchAdviceReferencedDocument(): void
+    {
+        (self::$document)->setDocumentDespatchAdviceReferencedDocument("DADV-001", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID', "DADV-001");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', (new DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentReceivingAdviceReferencedDocument
+     */
+    public function testSetDocumentReceivingAdviceReferencedDocument(): void
+    {
+        (self::$document)->setDocumentReceivingAdviceReferencedDocument("RADV-002", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID', "RADV-002");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', (new DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentDeliveryNoteReferencedDocument
+     */
+    public function testSetDocumentDeliveryNoteReferencedDocument(): void
+    {
+        (self::$document)->setDocumentDeliveryNoteReferencedDocument("DNOTE-003", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentMean
+     */
+    public function testAddDocumentPaymentMean(): void
+    {
+        (self::$document)->addDocumentPaymentMean("42", "Paying information", "cardtype", "cardid", "cardholder", "DE00000000000", "DE11111111111", "Bank", "44444444", "NOLADEQLB21");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 0, "42");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 0, "Paying information");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 0, "rdid", "schemeID", "cardtype");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 0, "cardholder");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 0, "DE00000000000");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 0, "DE11111111111");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 0, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 0, "44444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 0, "NOLADEQLB21");
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentMeanToCreditTransfer
+     */
+    public function testAddDocumentPaymentMeanToCreditTransfer(): void
+    {
+        (self::$document)->addDocumentPaymentMeanToCreditTransfer("DE77777777777", "Bank", "55555555", "NOLADEQLB22");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 0, "58");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 0, "DE77777777777");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 0, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 0, "55555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 0, "NOLADEQLB22");
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentMeanToDirectDebit
+     */
+    public function testAddDocumentPaymentMeanToDirectDebit(): void
+    {
+        (self::$document)->addDocumentPaymentMeanToDirectDebit("DE8888888888");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 0, "59");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 0, "DE8888888888");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 0);
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentMeanToPaymentCard
+     */
+    public function testAddDocumentPaymentMeanToPaymentCard(): void
+    {
+        (self::$document)->addDocumentPaymentMeanToPaymentCard("cardtype", "cardid", "cardholder");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 0, "48");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 0);
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 0, "cardid", "schemeID", "cardtype");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 0, "cardholder");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 0);
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentMean
+     */
+    public function testAddDocumentPaymentMeanLastMustBeSet(): void
+    {
+        (self::$document)->addDocumentPaymentMean("42", "Paying information", "cardtype", "cardid", "cardholder", "DE00000000000", "DE11111111111", "Bank", "44444444", "NOLADEQLB21");
+        (self::$document)->addDocumentPaymentMean("49", "Paying information 2", "cardtype2", "cardid2", "cardholder2", "DE22222222222", "DE33333333333", "Bank 2", "22222222", "BIC");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 0, "49");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 0, "Paying information 2");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 0, "did2", "schemeID", "cardtype2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 0, "cardholder2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 0, "DE22222222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 0, "DE33333333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 0, "Bank 2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 0, "22222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 0, "BIC");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentTax
+     */
+    public function testAddDocumentTax(): void
+    {
+        (self::$document)->addDocumentTax("S", "VAT", 100.0, 19.0, 19, "exreason", "exreasoncode", 100.0, 1.0, new DateTime(), "duetypecode");
+        (self::$document)->addDocumentTax("S", "VAT", 200.0, 14.0, 7, "exreason2", "exreasoncode2", 200.0, 2.0, new DateTime(), "duetypecode2");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount', 0, "19.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode', 0, "VAT");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason', 0, "exreason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount', 0, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode', 0, "S");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode', 0, "exreasoncode");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString', 0, (new DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode', 0, "duetypecode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', 0, "19.0");
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount', 1, "14.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode', 1, "VAT");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason', 1, "exreason2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount', 1, "200.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode', 1, "S");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode', 1, "exreasoncode2");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString', 1, (new DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode', 1, "duetypecode2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', 1, "7.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentTaxSimple
+     */
+    public function testAddDocumentTaxSimple(): void
+    {
+        (self::$document)->addDocumentTaxSimple("S", "VAT", 100.0, 19.0, 19.0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount', 2, "19.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode', 2, "VAT");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason', 2);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount', 2, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode', 2, "S");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode', 2);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', 2, "19.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBillingPeriod
+     */
+    public function testSetDocumentBillingPeriod(): void
+    {
+        (self::$document)->setDocumentBillingPeriod(new DateTime(), new DateTime(), "Project");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTimeString', (new DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString', (new DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentAllowanceCharge
+     */
+    public function testAddDocumentAllowanceCharge(): void
+    {
+        (self::$document)->addDocumentAllowanceCharge(10.0, false, "S", "VAT", 19.0, 1, 10.0, 100.0, 1, "C62", "reasoncode", "reason");
+        (self::$document)->addDocumentAllowanceCharge(10.0, false, "S", "VAT", 19.0, 1, 10.0, 100.0, 1, "C62", "reasoncode", "reason");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount', 0, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode', 0, "reasoncode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason', 0, "reason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode', 0, "VAT");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode', 0, "S");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:RateApplicablePercent', 0, "19.0");
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent', 1, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount', 1, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount', 1, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode', 1, "reasoncode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason', 1, "reason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode', 1, "VAT");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode', 1, "S");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:RateApplicablePercent', 1, "19.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentLogisticsServiceCharge
+     */
+    public function testAddDocumentLogisticsServiceCharge(): void
+    {
+        (self::$document)->addDocumentLogisticsServiceCharge("Service", 10.0, ["S"], ["VAT"], [19.0]);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:Description', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:CategoryCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:RateApplicablePercent', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDiscountTermsToPaymentTerms
+     */
+    public function testAddDocumentPaymentTermAndDiscount(): void
+    {
+        (self::$document)->addDocumentPaymentTerm("Payment", new DateTime(), "mandate");
+        (self::$document)->addDiscountTermsToPaymentTerms(10.0, new DateTime(), 1, "DAY", 20.0, 2.0);
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:Description', 0, "Payment");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString', 0, (new DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID', 0, "mandate");
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisDateTime/udt:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisPeriodMeasure', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:CalculationPercent', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:ActualDiscountAmount', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentReceivableSpecifiedTradeAccountingAccount
+     */
+    public function testAddDocumentReceivableSpecifiedTradeAccountingAccount(): void
+    {
+        (self::$document)->addDocumentReceivableSpecifiedTradeAccountingAccount("accountid", "typecode");
+        (self::$document)->addDocumentReceivableSpecifiedTradeAccountingAccount("accountid2", "typecode2");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode', 0);
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::InitDocumentSummation
+     */
+    public function testInitDocumentSummation(): void
+    {
+        (self::$document)->initDocumentSummation();
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount', 0, "0.0", "currencyID", "EUR");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount', 0, "0.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::SetDocumentSummation
+     */
+    public function testSetDocumentSummation(): void
+    {
+        (self::$document)->setDocumentSummation(100.0, 0.0, 100.0, 5.0, 4.0, 99.0, 10.0, 0.0, 0.0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount', 0, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount', 0, "5.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount', 0, "4.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount', 0, "99.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount', 0, "10.0", "currencyID", "EUR");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount', 0, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount', 0, "0.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addNewPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionShipTo
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionShipToGlobalId
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionShipToTaxRegistration
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionShipToAddress
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionShipToLegalOrganisation
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionUltimateShipTo
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionUltimateShipToGlobalId
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionUltimateShipToTaxRegistration
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionUltimateShipToAddress
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionUltimateShipToLegalOrganisation
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionSupplyChainEvent
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionReceivableSpecifiedTradeAccountingAccount
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionProductCharacteristic
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionProductClassification
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionProductOriginTradeCountry
+     */
+    public function testPositionMethods(): void
+    {
+        (self::$document)->addNewPosition("1", "linestatuscode", "linestatusreasoncode");
+        (self::$document)->setDocumentPositionNote("content", "contentcode", "subjectcode");
+        (self::$document)->setDocumentPositionProductDetails("Product Name", "Product Description", "SellerID", "BuyerID", "0088", "11111222222");
+        (self::$document)->addDocumentPositionProductCharacteristic("attr", "attrvalue", "typecode", 10.2, "C62");
+        (self::$document)->addDocumentPositionProductClassification("classcode", "classname", "listid", "listversionid");
+        (self::$document)->setDocumentPositionProductOriginTradeCountry("DE");
+        (self::$document)->setDocumentPositionBuyerOrderReferencedDocument("B-0001", "1", new DateTime());
+        (self::$document)->setDocumentPositionContractReferencedDocument("C-0002", "2", new DateTime());
+        (self::$document)->setDocumentPositionGrossPrice(105, 1, "C62");
+        (self::$document)->addDocumentPositionGrossPriceAllowanceCharge(10, false, 10, 20, "reason", "taxtypecode", "taxcategorycode", 19.9, 1, 1, "C62", "reasoncode");
+        (self::$document)->setDocumentPositionNetPrice(20.0, 1, "C62");
+        (self::$document)->setDocumentPositionNetPriceTax("S", "VAT", 19.0, 10.0, "reason", "reasoncode");
+        (self::$document)->setDocumentPositionQuantity(10.0, "C62", 0.0, "C62", 1.0, "C62");
+        (self::$document)->setDocumentPositionShipTo("shiptoname", "shiptoid", "shiptodescription");
+        (self::$document)->addDocumentPositionShipToGlobalId("shiptoglobslid", "shiptoglobslidtype");
+        (self::$document)->addDocumentPositionShipToTaxRegistration("VA", "123");
+        (self::$document)->setDocumentPositionShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+        (self::$document)->setDocumentPositionShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+        (self::$document)->setDocumentPositionShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+        (self::$document)->addDocumentPositionShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+        (self::$document)->setDocumentPositionUltimateShipTo("shiptoname", "shiptoid", "shiptodescription");
+        (self::$document)->addDocumentPositionUltimateShipToGlobalId("shiptoglobslid", "shiptoglobslidtype");
+        (self::$document)->addDocumentPositionUltimateShipToTaxRegistration("VA", "123");
+        (self::$document)->setDocumentPositionUltimateShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+        (self::$document)->setDocumentPositionUltimateShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+        (self::$document)->setDocumentPositionUltimateShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+        (self::$document)->addDocumentPositionUltimateShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+        (self::$document)->setDocumentPositionSupplyChainEvent(new DateTime());
+        (self::$document)->setDocumentPositionDespatchAdviceReferencedDocument("DADV-001", "3", new DateTime());
+        (self::$document)->setDocumentPositionReceivingAdviceReferencedDocument("RADV-002", "4", new DateTime());
+        (self::$document)->setDocumentPositionDeliveryNoteReferencedDocument("DNOTE-003", "4", new DateTime());
+        (self::$document)->addDocumentPositionTax("S", "VAT", 19.0, 10.0, "reason", "reasoncode");
+        (self::$document)->setDocumentPositionBillingPeriod(new DateTime(), new DateTime());
+        (self::$document)->addDocumentPositionAllowanceCharge(10.0, true, 19.0, 10.0, "reasoncode", "reason");
+        (self::$document)->setDocumentPositionLineSummation(100, 10);
+        (self::$document)->addDocumentPositionReceivableSpecifiedTradeAccountingAccount("accid", "acctypecode");
+        (self::$document)->addDocumentPositionAdditionalReferencedDocument("1", "2", "3", "4", "name", "reftypecode", new DateTime());
+        (self::$document)->addDocumentPositionUltimateCustomerOrderReferencedDocument("ORDER-0001", "1.1", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID', 0, "1");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:Content', 0, "content");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode', 0, "subjectcode");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode', 0);
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID', 0, "11111222222", "schemeID", "0088");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID', 0, "SellerID");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID', 0, "BuyerID");
+        //$this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Name', 0, "Product Mame");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Description', 0, "Product Description");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Description', 0, "attr");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Value', 0, "attrvalue");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode', 0, "classcode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry/ram:ID', 0, "DE");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode', 0, "classcode", "listID", "listid");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode', 0, "classcode", "listVersionID", "listversionid");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID', 0, "B-0001");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID', 0, "1");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0, (new DateTime)->format("Ymd"), "format", "102");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:LineID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount', 0, "105.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity', 0, "1", "unitCode", "C62");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CalculationPercent', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:BasisAmount', 0, "20.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualAmount', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ReasonCode', 0, "reasoncode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:Reason', 0, "reason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode', 0, "taxtypecode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode', 0, "taxcategorycode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CategoryTradeTax/ram:RateApplicablePercent', 0, "19.9");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount', 0, "105.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount', 0, "20.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity', 0, "1.0", "unitCode", "C62");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CalculatedAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:ExemptionReason', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CategoryCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:ExemptionReasonCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:RateApplicablePercent', 0);
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity', 0, "10.0", "unitCode", "C62");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ChargeFreeQuantity', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PackageQuantity', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Name', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Description', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Name', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Description', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:Name', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:Description', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CityName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:LineID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:LineID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode', 0, "VAT");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason', 0, "reason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode', 0, "S");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode', 0, "reasoncode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', 0, "19.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTimeString', 0, (new DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString', 0, (new DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator/udt:Indicator', 0, "true");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent', 0, "19.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode', 0, "reasoncode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason', 0, "reason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount', 0, "100.0");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalAllowanceChargeAmount', 0);
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID', "accid");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode');
+
+        (self::$document)->addNewPosition("2", "linestatuscode", "linestatusreasoncode");
+        (self::$document)->setDocumentPositionNote("content2", "contentcode2", "subjectcode2");
+        (self::$document)->setDocumentPositionProductDetails("Product Name 2", "Product Description 2", "SellerID 2", "BuyerID 2", "0160", "333");
+        (self::$document)->addDocumentPositionProductCharacteristic("attr2", "attrvalue2");
+        (self::$document)->setDocumentPositionGrossPrice(200, 2, "H87");
+        (self::$document)->setDocumentPositionNetPrice(30.0, 2, "H87");
+        (self::$document)->setDocumentPositionNetPriceTax("S", "VAT", 19.0, 10.0, "reason 2", "reasoncode 2");
+        (self::$document)->setDocumentPositionQuantity(20.0, "H87", 0.0, "H87", 1.0, "H87");
+        (self::$document)->setDocumentPositionShipTo("shiptoname2", "shiptoid2", "shiptodescription2");
+        (self::$document)->addDocumentPositionShipToGlobalId("shiptoglobslid2", "shiptoglobslidtype2");
+        (self::$document)->addDocumentPositionShipToTaxRegistration("VA", "123");
+        (self::$document)->setDocumentPositionShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+        (self::$document)->setDocumentPositionShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+        (self::$document)->setDocumentPositionShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+        (self::$document)->addDocumentPositionShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+        (self::$document)->setDocumentPositionUltimateShipTo("shiptoname", "shiptoid", "shiptodescription");
+        (self::$document)->addDocumentPositionUltimateShipToGlobalId("shiptoglobslid", "shiptoglobslidtype");
+        (self::$document)->addDocumentPositionUltimateShipToTaxRegistration("VA", "123");
+        (self::$document)->setDocumentPositionUltimateShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+        (self::$document)->setDocumentPositionUltimateShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+        (self::$document)->setDocumentPositionUltimateShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+        (self::$document)->addDocumentPositionUltimateShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+        (self::$document)->setDocumentPositionSupplyChainEvent(new DateTime());
+        (self::$document)->setDocumentPositionDespatchAdviceReferencedDocument("DADV-001", "3", new DateTime());
+        (self::$document)->setDocumentPositionReceivingAdviceReferencedDocument("RADV-002", "4", new DateTime());
+        (self::$document)->setDocumentPositionDeliveryNoteReferencedDocument("DNOTE-003", "4", new DateTime());
+        (self::$document)->addDocumentPositionTax("S", "VAT", 7.0, 2.0, "reason2", "reasoncode2");
+        (self::$document)->setDocumentPositionBillingPeriod(new DateTime(), new DateTime());
+        (self::$document)->addDocumentPositionAllowanceCharge(10.0, true, 19.0, 10.0, "reasoncode", "reason");
+        (self::$document)->setDocumentPositionLineSummation(200, 20);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID', 1, "2");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode', 1);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:Content', 1, "content2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode', 1, "subjectcode2");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode', 1);
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID', 1, "333", "schemeID", "0160");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID', 1, "SellerID 2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID', 1, "BuyerID 2");
+        //$this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Name', 1, "Product Mame 2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Description', 1, "Product Description 2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Description', 1, "attr2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Value', 1, "attrvalue2");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:LineID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 1);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount', 1, "200.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity', 1, "2", "unitCode", "H87");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount', 1, "30.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity', 1, "2.0", "unitCode", "H87");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CalculatedAmount', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:TypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:ExemptionReason', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CategoryCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:ExemptionReasonCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:RateApplicablePercent', 1);
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity', 1, "20.0", "unitCode", "H87");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ChargeFreeQuantity', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PackageQuantity', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Name', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Description', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Name', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Description', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:Name', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:Description', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CityName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:LineID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:LineID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 1);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount', 1, "2.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode', 1, "VAT");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason', 1, "reason2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode', 1, "S");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode', 1, "reasoncode2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', 1, "7.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTimeString', 1, (new DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString', 1, (new DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator/udt:Indicator', 1, "true");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent', 1, "19.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount', 1, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode', 1, "reasoncode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason', 1, "reason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount', 1, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount', 1, "200.0");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalAllowanceChargeAmount', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::InitNewDocument
+     */
+    public function testInitNewDocument(): void
+    {
+        (self::$document)->InitNewDocument();
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID', "urn:cen.eu:en16931:2017");
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipTo
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToContact
+     */
+    public function testSetDocumentShipToMultipleContacts(): void
+    {
+        (self::$document)->setDocumentShipTo("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name', "Kunden AG Mitte");
+
+        (self::$document)->setDocumentShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        (self::$document)->setDocumentShipToContact("Gerd MÃŒller", "Bank", "+49-111-4444444", "+49-111-5555555", "info@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Gerd MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-4444444");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde2.de");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipTo
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToContact
+     */
+    public function testSetDocumentShipToMultipleContactsAdd(): void
+    {
+        (self::$document)->setDocumentShipTo("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name', "Kunden AG Mitte");
+
+        (self::$document)->addDocumentShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentShipToContact("Gerd MÃŒller", "Bank", "+49-111-4444444", "+49-111-5555555", "info@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::writeFile
+     */
+    public function testWriteFile(): void
+    {
+        (self::$document)->writeFile(getcwd() . "/myfile.xml");
+        $this->assertTrue(file_exists(getcwd() . "/myfile.xml"));
+        @unlink(getcwd() . "/myfile.xml");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::__toString
+     */
+    public function testToString(): void
+    {
+        $xmlContent = (string)self::$document;
+        $this->assertIsString($xmlContent);
+        $this->assertStringStartsWith("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rsm:CrossIndustryInvoice", $xmlContent);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getContentAsDomDocument
+     */
+    public function testGetContentAsDomDocument(): void
+    {
+        $domDocument = self::$document->getContentAsDomDocument();
+        $this->assertInstanceOf(\DOMDocument::class, $domDocument);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getContentAsDomXPath
+     */
+    public function testGetContentAsDomXPath(): void
+    {
+        $domXPath = self::$document->getContentAsDomXPath();
+        $this->assertInstanceOf(\DOMXpath::class, $domXPath);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/BuilderExtendedTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/BuilderExtendedTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/BuilderExtendedTest.php	(revision 8435)
@@ -0,0 +1,2316 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\tests\traits\HandlesXmlTests;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentBuilder;
+
+class BuilderExtendedTest extends TestCase
+{
+    use HandlesXmlTests;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EXTENDED);
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getInvoiceObject
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getSerializer
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getObjectHelper
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getProfileDefinitionParameter
+     */
+    public function testDocumentGetters(): void
+    {
+        $this->assertNotNull(self::$document->getInvoiceObject());
+        $this->assertNotNull(self::$document->getSerializer());
+        $this->assertNotNull(self::$document->getObjectHelper());
+        $this->assertEquals('extended', self::$document->getProfileDefinitionParameter('name'));
+        $this->assertEquals('EXTENDED', self::$document->getProfileDefinitionParameter('altname'));
+        $this->assertEquals('urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended', self::$document->getProfileDefinitionParameter('contextparameter'));
+        $this->assertEquals('factur-x.xml', self::$document->getProfileDefinitionParameter('attachmentfilename'));
+        $this->assertEquals('EXTENDED', self::$document->getProfileDefinitionParameter('xmpname'));
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getProfileDefinitionParameter('unknownparameter');
+            }
+        );
+    }
+
+    public function testXmlGenerals(): void
+    {
+        $xml = $this->getXml();
+        $namespaces = $xml->getNamespaces(true);
+
+        $this->disableRenderXmlContent();
+        $this->assertArrayHasKey("rsm", $namespaces);
+        $this->assertArrayHasKey("ram", $namespaces);
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID', (self::$document)->getProfileDefinitionParameter("contextparameter"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInformation
+     */
+    public function testSetDocumentInformation(): void
+    {
+        (self::$document)->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID', "471102");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode', "380");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString', "20180305", "format", "102");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode', "EUR");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBusinessProcess
+     */
+    public function testSetDocumentBusinessProcess(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID');
+
+        (self::$document)->setDocumentBusinessProcess("");
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID');
+
+        (self::$document)->setDocumentBusinessProcess("GENERAL INVOICE");
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID', "GENERAL INVOICE");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentGeneralPaymentInformation
+     */
+    public function testSetDocumentGeneralPaymentInformation(): void
+    {
+        (self::$document)->setDocumentGeneralPaymentInformation("1111111111", "2222222222");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID', "1111111111");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentReference', "2222222222");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setIsDocumentCopy
+     * @covers \horstoeko\zugferd\jms\ZugferdTypesHandler::serializeIndicatorType
+     */
+    public function testSetIsDocumentCopy(): void
+    {
+        (self::$document)->setIsDocumentCopy();
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CopyIndicator/udt:Indicator');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CopyIndicator/udt:Indicator', 'true');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setIsTestDocument
+     * @covers \horstoeko\zugferd\jms\ZugferdTypesHandler::serializeIndicatorType
+     */
+    public function testSetIsTestDocument(): void
+    {
+        (self::$document)->SetIsTestDocument();
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:TestIndicator/udt:Indicator');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:TestIndicator/udt:Indicator', 'true');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentNote
+     */
+    public function testAddDocumentNote(): void
+    {
+        (self::$document)->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.');
+        (self::$document)->addDocumentNote('Lieferant GmbH', null, 'REG');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content', 0, "Rechnung gemÃ€Ã Bestellung vom 01.03.2018.");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content', 1, "Lieferant GmbH");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode', 0, "REG");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSupplyChainEvent
+     */
+    public function testSetDocumentSupplyChainEvent(): void
+    {
+        (self::$document)->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'));
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString', "20180305", "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerReference
+     */
+    public function testSetDocumentBuyerReference(): void
+    {
+        (self::$document)->setDocumentBuyerReference("buyerref");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerReference', "buyerref");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSeller
+     */
+    public function testSetDocumentSeller(): void
+    {
+        (self::$document)->setDocumentSeller("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name', "Lieferant GmbH");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerId
+     */
+    public function testAddDocumentSellerId(): void
+    {
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentSellerId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', 1, "549911");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerGlobalId
+     */
+    public function testAddDocumentSellerGlobalId(): void
+    {
+        (self::$document)->addDocumentSellerGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID', 0, "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerTaxRegistration
+     */
+    public function testAddDocumentSellerTaxRegistration(): void
+    {
+        (self::$document)->addDocumentSellerTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentSellerTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerAddress
+     */
+    public function testSetDocumentSellerAddress(): void
+    {
+        (self::$document)->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "80333");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineOne', "LieferantenstraÃe 20");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CityName', "MÃŒnchen");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerLegalOrganisation
+     */
+    public function testSetDocumentSellerLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentSellerLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0, "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Lieferant AG");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerContact
+     */
+    public function testSetDocumentSellerContact(): void
+    {
+        (self::$document)->setDocumentSellerContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+
+        (self::$document)->setDocumentSellerContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info@meinseller.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-5555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@meinseller.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+
+        (self::$document)->setDocumentSellerContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerContact
+     */
+    public function testAddDocumentSellerContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        (self::$document)->addDocumentSellerContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info@meinseller.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1, "Hans Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1, "+49-111-5555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1, "info@meinseller.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerCommunication
+     */
+    public function testSetDocumentSellerCommunication(): void
+    {
+        (self::$document)->setDocumentSellerCommunication("EM", "seller@email.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID', 0, "seller@email.de", "schemeID", "EM");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyer
+     */
+    public function testSetDocumentBuyer(): void
+    {
+        (self::$document)->setDocumentBuyer("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name', "Kunden AG Mitte");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentBuyerId
+     */
+    public function testAddDocumentBuyerId(): void
+    {
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentBuyerId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', 1, "549911");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentBuyerGlobalId
+     */
+    public function testAddDocumentBuyerGlobalId(): void
+    {
+        (self::$document)->addDocumentBuyerGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID', 0, "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentBuyerTaxRegistration
+     */
+    public function testAddDocumentBuyerTaxRegistration(): void
+    {
+        (self::$document)->addDocumentBuyerTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentBuyerTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerAddress
+     */
+    public function testSetDocumentBuyerAddress(): void
+    {
+        (self::$document)->setDocumentBuyerAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "69876");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineOne', "Kundenstrasse 15");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CityName', "Frankfurt");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerLegalOrganisation
+     */
+    public function testSetDocumentBuyerLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentBuyerLegalOrganisation("DE12345", "FC", "Kunden Holding");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0, "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Kunden Holding");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerContact
+     */
+    public function testSetDocumentBuyerContact(): void
+    {
+        (self::$document)->setDocumentBuyerContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentBuyerContact
+     */
+    public function testAddDocumentBuyerContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        (self::$document)->addDocumentBuyerContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1, "Otto Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1, "+49-111-5555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1, "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerCommunication
+     */
+    public function testSetDocumentBuyerCommunication(): void
+    {
+        (self::$document)->setDocumentBuyerCommunication("EM", "buyer@email.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID', 0, "buyer@email.de", "schemeID", "EM");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerTaxRepresentativeTradeParty
+     */
+    public function testSetDocumentSellerTaxRepresentativeTradeParty(): void
+    {
+        (self::$document)->setDocumentSellerTaxRepresentativeTradeParty("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Name', "Lieferant GmbH");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testAddDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        (self::$document)->addDocumentSellerTaxRepresentativeGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:GlobalID', 0, "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testAddDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        (self::$document)->addDocumentSellerTaxRepresentativeTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentSellerTaxRepresentativeTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerTaxRepresentativeAddress
+     */
+    public function testSetDocumentSellerTaxRepresentativeAddress(): void
+    {
+        (self::$document)->setDocumentSellerTaxRepresentativeAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "80333");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineOne', "LieferantenstraÃe 20");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CityName', "MÃŒnchen");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testSetDocumentSellerTaxRepresentativeLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentSellerTaxRepresentativeLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0, "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Lieferant AG");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerTaxRepresentativeContact
+     */
+    public function testSetDocumentSellerTaxRepresentativeContact(): void
+    {
+        (self::$document)->setDocumentSellerTaxRepresentativeContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerTaxRepresentativeContact
+     */
+    public function testAddDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        (self::$document)->addDocumentSellerTaxRepresentativeContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1, "Hans Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1, "+49-111-5555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1, "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProductEndUser
+     */
+    public function testSetDocumentProductEndUser(): void
+    {
+        (self::$document)->setDocumentProductEndUser("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:Name', "Kunden AG Mitte");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentProductEndUserGlobalId
+     */
+    public function testAddDocumentProductEndUserGlobalId(): void
+    {
+        (self::$document)->addDocumentProductEndUserGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:GlobalID', 0, "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentProductEndUserTaxRegistration
+     */
+    public function testAddDocumentProductEndUserTaxRegistration(): void
+    {
+        (self::$document)->addDocumentProductEndUserTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentProductEndUserTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProductEndUserAddress
+     */
+    public function testSetDocumentProductEndUserAddress(): void
+    {
+        (self::$document)->setDocumentProductEndUserAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "69876");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineOne', "Kundenstrasse 15");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CityName', "Frankfurt");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProductEndUserLegalOrganisation
+     */
+    public function testSetDocumentProductEndUserLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentProductEndUserLegalOrganisation("DE12345", "FC", "Kunden Holding");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:ID', "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Kunden Holding");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProductEndUserContact
+     */
+    public function testSetDocumentProductEndUserContact(): void
+    {
+        (self::$document)->setDocumentProductEndUserContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentProductEndUserContact
+     */
+    public function testAddDocumentProductEndUserContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        (self::$document)->addDocumentProductEndUserContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 1, "Otto Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1, "+49-111-5555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1, "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipTo
+     */
+    public function testSetDocumentShipTo(): void
+    {
+        (self::$document)->setDocumentShipTo("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name', "Kunden AG Mitte");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipTolId
+     */
+    public function testAddDocumentShipTolId(): void
+    {
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentShipTolId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 1, "549911");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipToGlobalId
+     */
+    public function testAddDocumentShipToGlobalId(): void
+    {
+        (self::$document)->addDocumentShipToGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID', 0, "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipToTaxRegistration
+     */
+    public function testAddDocumentShipToTaxRegistration(): void
+    {
+        (self::$document)->addDocumentShipToTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentShipToTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToAddress
+     */
+    public function testSetDocumentShipToAddress(): void
+    {
+        (self::$document)->setDocumentShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "69876");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', "Kundenstrasse 15");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName', "Frankfurt");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToLegalOrganisation
+     */
+    public function testSetDocumentShipToLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0, "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Kunden Holding");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToContact
+     */
+    public function testSetDocumentShipToContact(): void
+    {
+        (self::$document)->setDocumentShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipToContact
+     */
+    public function testAddDocumentShipToContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        (self::$document)->addDocumentShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1, "Otto Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1, "+49-111-5555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1, "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentUltimateShipTo
+     */
+    public function testSetDocumentUltimateShipTo(): void
+    {
+        (self::$document)->setDocumentUltimateShipTo("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:Name', "Kunden AG Mitte");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateShipToId
+     */
+    public function testAddDocumentUltimateShipToId(): void
+    {
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentUltimateShipToId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 1, "549911");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateShipToGlobalId
+     */
+    public function testAddDocumentUltimateShipToGlobalId(): void
+    {
+        (self::$document)->addDocumentUltimateShipToGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID', "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateShipToTaxRegistration
+     */
+    public function testAddDocumentUltimateShipToTaxRegistration(): void
+    {
+        (self::$document)->addDocumentUltimateShipToTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentUltimateShipToTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentUltimateShipToAddress
+     */
+    public function testSetDocumentUltimateShipToAddress(): void
+    {
+        (self::$document)->setDocumentUltimateShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "69876");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', "Kundenstrasse 15");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CityName', "Frankfurt");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentUltimateShipToLegalOrganisation
+     */
+    public function testSetDocumentUltimateShipToLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentUltimateShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID', "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Kunden Holding");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentUltimateShipToContact
+     */
+    public function testSetDocumentUltimateShipToContact(): void
+    {
+        (self::$document)->setDocumentUltimateShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateShipToContact
+     */
+    public function testAddDocumentUltimateShipToContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        (self::$document)->addDocumentUltimateShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1, "Otto Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1, "+49-111-5555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1, "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipFrom
+     */
+    public function testSetDocumentShipFrom(): void
+    {
+        (self::$document)->setDocumentShipFrom("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:Name', "Lieferant GmbH");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipFromId
+     */
+    public function testAddDocumentShipFromId(): void
+    {
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentShipFromId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID', 1, "549911");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipFromGlobalId
+     */
+    public function testAddDocumentShipFromGlobalId(): void
+    {
+        (self::$document)->addDocumentShipFromGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:GlobalID', "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipFromTaxRegistration
+     */
+    public function testAddDocumentShipFromTaxRegistration(): void
+    {
+        (self::$document)->addDocumentShipFromTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentShipFromTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipFromAddress
+     */
+    public function testSetDocumentShipFromAddress(): void
+    {
+        (self::$document)->setDocumentShipFromAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "80333");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineOne', "LieferantenstraÃe 20");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CityName', "MÃŒnchen");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipFromLegalOrganisation
+     */
+    public function testSetDocumentShipFromLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentShipFromLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:ID', "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Lieferant AG");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipFromContact
+     */
+    public function testSetDocumentShipFromContact(): void
+    {
+        (self::$document)->setDocumentShipFromContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipFromContact
+     */
+    public function testAddDocumentShipFromContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        (self::$document)->addDocumentShipFromContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 1, "Hans Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1, "+49-111-5555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1, "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicer
+     */
+    public function testSetDocumentInvoicer(): void
+    {
+        (self::$document)->setDocumentInvoicer("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:Name', "Lieferant GmbH");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoicerId
+     */
+    public function testAddDocumentInvoicerId(): void
+    {
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentInvoicerId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID', 1, "549911");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoicerGlobalId
+     */
+    public function testAddDocumentInvoicerGlobalId(): void
+    {
+        (self::$document)->addDocumentInvoicerGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:GlobalID', "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoicerTaxRegistration
+     */
+    public function testAddDocumentInvoicerTaxRegistration(): void
+    {
+        (self::$document)->addDocumentInvoicerTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentInvoicerTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicerAddress
+     */
+    public function testSetDocumentInvoicerAddress(): void
+    {
+        (self::$document)->setDocumentInvoicerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "80333");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineOne', "LieferantenstraÃe 20");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CityName', "MÃŒnchen");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicerLegalOrganisation
+     */
+    public function testSetDocumentInvoicerLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentInvoicerLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:ID', "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Lieferant AG");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicerContact
+     */
+    public function testSetDocumentInvoicerContact(): void
+    {
+        (self::$document)->setDocumentInvoicerContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoicerContact
+     */
+    public function testAddDocumentInvoicerContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        (self::$document)->addDocumentInvoicerContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1, "Hans Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1, "+49-111-5555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1, "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicee
+     */
+    public function testSetDocumentInvoicee(): void
+    {
+        (self::$document)->setDocumentInvoicee("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:Name', "Lieferant GmbH");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoiceeId
+     */
+    public function testAddDocumentInvoiceeId(): void
+    {
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentInvoiceeId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID', 1, "549911");
+    }
+
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoiceeGlobalId
+     */
+    public function testAddDocumentInvoiceeGlobalId(): void
+    {
+        (self::$document)->addDocumentInvoiceeGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:GlobalID', 0, "4000001123452", "schemeID", "0088");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:GlobalID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoiceeTaxRegistration
+     */
+    public function testAddDocumentInvoiceeTaxRegistration(): void
+    {
+        (self::$document)->addDocumentInvoiceeTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentInvoiceeTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoiceeAddress
+     */
+    public function testSetDocumentInvoiceeAddress(): void
+    {
+        (self::$document)->setDocumentInvoiceeAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "80333");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineOne', "LieferantenstraÃe 20");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CityName', "MÃŒnchen");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoiceeLegalOrganisation
+     */
+    public function testSetDocumentInvoiceeLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentInvoiceeLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:ID', "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Lieferant AG");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoiceeContact
+     */
+    public function testSetDocumentInvoiceeContact(): void
+    {
+        (self::$document)->setDocumentInvoiceeContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoiceeContact
+     */
+    public function testAddDocumentInvoiceeContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        (self::$document)->addDocumentInvoiceeContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1, "Hans Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1, "+49-111-5555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1, "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPayee
+     */
+    public function testSetDocumentPayee(): void
+    {
+        (self::$document)->setDocumentPayee("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Name', "Lieferant GmbH");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPayeeId
+     */
+    public function testAddDocumentPayeeId(): void
+    {
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentPayeeId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', 0, "549910");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', 1, "549911");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPayeeGlobalId
+     */
+    public function testAddDocumentPayeeGlobalId(): void
+    {
+        (self::$document)->addDocumentPayeeGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID', 0, "4000001123452", "schemeID", "0088");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPayeeTaxRegistration
+     */
+    public function testAddDocumentPayeeTaxRegistration(): void
+    {
+        (self::$document)->addDocumentPayeeTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentPayeeTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPayeeAddress
+     */
+    public function testSetDocumentPayeeAddress(): void
+    {
+        (self::$document)->setDocumentPayeeAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', "80333");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineOne', "LieferantenstraÃe 20");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CityName', "MÃŒnchen");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPayeeLegalOrganisation
+     */
+    public function testSetDocumentPayeeLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentPayeeLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0, "DE12345", "schemeID", "FC");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName', "Lieferant AG");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPayeeContact
+     */
+    public function testSetDocumentPayeeContact(): void
+    {
+        (self::$document)->setDocumentPayeeContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPayeeContact
+     */
+    public function testAddDocumentPayeeContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        (self::$document)->addDocumentPayeeContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Hans MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1, "Hans Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1, "+49-111-5555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1, "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentDeliveryTerms
+     */
+    public function testSetDocumentDeliveryTerms(): void
+    {
+        (self::$document)->setDocumentDeliveryTerms("term");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ApplicableTradeDeliveryTerms/ram:DeliveryTypeCode', "term");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerOrderReferencedDocument
+     */
+    public function testSetDocumentSellerOrderReferencedDocument(): void
+    {
+        (self::$document)->setDocumentSellerOrderReferencedDocument('B-1010', new \DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID', "B-1010");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', (new \DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerOrderReferencedDocument
+     */
+    public function testSetDocumentBuyerOrderReferencedDocument(): void
+    {
+        (self::$document)->setDocumentBuyerOrderReferencedDocument('O-2020', new \DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID', "O-2020");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', (new \DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentContractReferencedDocument
+     */
+    public function testSetDocumentContractReferencedDocument(): void
+    {
+        (self::$document)->setDocumentContractReferencedDocument("CON-4711", new \DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID', "CON-4711");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', (new \DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentAdditionalReferencedDocument
+     */
+    public function testAddDocumentAdditionalReferencedDocument(): void
+    {
+        (self::$document)->addDocumentAdditionalReferencedDocument("A-1011", "type", "http://lieferant.de/docs/a1011.pdf", "Leistungsnachweis", "reftype", new \DateTime());
+        (self::$document)->addDocumentAdditionalReferencedDocument("B-2233", "type2", "http://lieferant.de/docs/b2233.pdf", "Lieferliste", "reftype2", new \DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID', 0, "A-1011");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID', 1, "B-2233");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID', 0, "http://lieferant.de/docs/a1011.pdf");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID', 1, "http://lieferant.de/docs/b2233.pdf");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode', 0, "type");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode', 1, "type2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Name', 0, "Leistungsnachweis");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Name', 1, "Lieferliste");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode', 0, "reftype");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode', 1, "reftype2");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 1, (new \DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentAdditionalReferencedDocument
+     */
+    public function testAddDocumentAdditionalReferencedDocumentWithAttachment(): void
+    {
+        (self::$document)->addDocumentAdditionalReferencedDocument("A-1011", "type", "http://lieferant.de/docs/a1011.pdf", "Leistungsnachweis", "reftype", new \DateTime(), dirname(__FILE__) . "/../assets/InvalidPDF.pdf");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID', 2, "A-1011");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID', 2, "http://lieferant.de/docs/a1011.pdf");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode', 2, "type");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Name', 2, "Leistungsnachweis");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode', 2, "reftype");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 2, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueStartsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject', 0, "JVBERi0xLjQKJcOkw7zDtsOfC");
+        $this->assertXPathValueStartsWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject', 0, "JVBERi0xLjQKJcOkw7zDtsOfC", "mimeCode", "application/pdf");
+        $this->assertXPathValueStartsWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject', 0, "JVBERi0xLjQKJcOkw7zDtsOfC", "filename", "InvalidPDF.pdf");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoiceReferencedDocument
+     */
+    public function testSetDocumentInvoiceReferencedDocument(): void
+    {
+        (self::$document)->setDocumentInvoiceReferencedDocument("INV-1", new \DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID', "INV-1");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', (new \DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProcuringProject
+     */
+    public function testSetDocumentProcuringProject(): void
+    {
+        (self::$document)->setDocumentProcuringProject("HB-8378732", "Hausbau");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID', "HB-8378732");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:Name', "Hausbau");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testAddDocumentUltimateCustomerOrderReferencedDocument(): void
+    {
+        (self::$document)->addDocumentUltimateCustomerOrderReferencedDocument("DOC-11", new \DateTime());
+        (self::$document)->addDocumentUltimateCustomerOrderReferencedDocument("DOC-22", new \DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID', 0, "DOC-11");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID', 1, "DOC-22");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 1, (new \DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentDespatchAdviceReferencedDocument
+     */
+    public function testSetDocumentDespatchAdviceReferencedDocument(): void
+    {
+        (self::$document)->setDocumentDespatchAdviceReferencedDocument("DADV-001", new \DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID', "DADV-001");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', (new \DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentReceivingAdviceReferencedDocument
+     */
+    public function testSetDocumentReceivingAdviceReferencedDocument(): void
+    {
+        (self::$document)->setDocumentReceivingAdviceReferencedDocument("RADV-002", new \DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID', "RADV-002");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', (new \DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentDeliveryNoteReferencedDocument
+     */
+    public function testSetDocumentDeliveryNoteReferencedDocument(): void
+    {
+        (self::$document)->setDocumentDeliveryNoteReferencedDocument("DNOTE-003", new \DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID', "DNOTE-003");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', (new \DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentMean
+     */
+    public function testAddDocumentPaymentMean(): void
+    {
+        (self::$document)->addDocumentPaymentMean("42", "Paying information", "cardtype", "cardid", "cardholder", "DE00000000000", "DE11111111111", "Bank", "44444444", "NOLADEQLB21");
+        (self::$document)->addDocumentPaymentMean("49", "Paying information 2", "cardtype2", "cardid2", "cardholder2", "DE22222222222", "DE33333333333", "Bank 2", "22222222", "BIC");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 0, "42");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 0, "Paying information");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 0, "rdid", "schemeID", "cardtype");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 0, "cardholder");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 0, "DE00000000000");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 0, "DE11111111111");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 0, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 0, "44444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 0, "NOLADEQLB21");
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 1, "49");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 1, "Paying information 2");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 1, "did2", "schemeID", "cardtype2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 1, "cardholder2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 1, "DE22222222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 1, "DE33333333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 1, "Bank 2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 1, "22222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 1, "BIC");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentMeanToCreditTransfer
+     */
+    public function testAddDocumentPaymentMeanToCreditTransfer(): void
+    {
+        (self::$document)->addDocumentPaymentMeanToCreditTransfer("DE77777777777", "Bank", "55555555", "NOLADEQLB22");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 2, "58");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 2);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 2, "DE77777777777");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 2, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 2, "55555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 2, "NOLADEQLB22");
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 3);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentMeanToDirectDebit
+     */
+    public function testAddDocumentPaymentMeanToDirectDebit(): void
+    {
+        (self::$document)->addDocumentPaymentMeanToDirectDebit("DE8888888888");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 3, "59");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 3);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 2, "DE8888888888");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 3);
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 4);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 4);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 4);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 4);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 3);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 4);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 4);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 4);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 4);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentTax
+     */
+    public function testAddDocumentTax(): void
+    {
+        (self::$document)->addDocumentTax("S", "VAT", 100.0, 19.0, 19, "exreason", "exreasoncode", 100.0, 1.0, new \DateTime(), "duetypecode");
+        (self::$document)->addDocumentTax("S", "VAT", 200.0, 14.0, 7, "exreason2", "exreasoncode2", 200.0, 2.0, new \DateTime(), "duetypecode2");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount', 0, "19.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode', 0, "VAT");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason', 0, "exreason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount', 0, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode', 0, "S");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode', 0, "exreasoncode");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString', 0, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode', 0, "duetypecode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', 0, "19.0");
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount', 1, "14.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode', 1, "VAT");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason', 1, "exreason2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount', 1, "200.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode', 1, "S");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode', 1, "exreasoncode2");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString', 1, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode', 1, "duetypecode2");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', 1, "7.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentTaxSimple
+     */
+    public function testAddDocumentTaxSimple(): void
+    {
+        (self::$document)->addDocumentTaxSimple("S", "VAT", 100.0, 19.0, 19.0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount', 2, "19.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode', 2, "VAT");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason', 2);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount', 2, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode', 2, "S");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode', 2);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', 2, "19.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBillingPeriod
+     */
+    public function testSetDocumentBillingPeriod(): void
+    {
+        (self::$document)->setDocumentBillingPeriod(new \DateTime(), new \DateTime(), "Project");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTimeString', (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString', (new \DateTime())->format("Ymd"), "format", "102");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentAllowanceCharge
+     */
+    public function testAddDocumentAllowanceCharge(): void
+    {
+        (self::$document)->addDocumentAllowanceCharge(10.0, false, "S", "VAT", 19.0, 1, 10.0, 100.0, 1, "C62", "reasoncode", "reason");
+        (self::$document)->addDocumentAllowanceCharge(10.0, false, "S", "VAT", 19.0, 1, 10.0, 100.0, 1, "C62", "reasoncode", "reason");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount', 0, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode', 0, "reasoncode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason', 0, "reason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode', 0, "VAT");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode', 0, "S");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:RateApplicablePercent', 0, "19.0");
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent', 1, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount', 1, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount', 1, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode', 1, "reasoncode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason', 1, "reason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode', 1, "VAT");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode', 1, "S");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:RateApplicablePercent', 1, "19.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentLogisticsServiceCharge
+     */
+    public function testAddDocumentLogisticsServiceCharge(): void
+    {
+        (self::$document)->addDocumentLogisticsServiceCharge("Service", 10.0, ["S"], ["VAT"], [19.0]);
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:Description', "Service");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount', "10.0");
+        //TODO $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:TypeCode', "S");
+        //TODO $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:CategoryCode', "VAT");
+        //TODO $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:RateApplicablePercent', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDiscountTermsToPaymentTerms
+     */
+    public function testAddDocumentPaymentTermAndDiscount(): void
+    {
+        (self::$document)->addDocumentPaymentTerm("Payment", new \DateTime(), "mandate");
+        (self::$document)->addDiscountTermsToPaymentTerms(10.0, new \DateTime(), 1, "DAY", 20.0, 2.0);
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:Description', 0, "Payment");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString', 0, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID', 0, "mandate");
+
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisDateTime/udt:DateTimeString', 0, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisPeriodMeasure', 0, "1.0", "unitCode", "DAY");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisAmount', 0, "20.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:CalculationPercent', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:ActualDiscountAmount', 0, "2.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentReceivableSpecifiedTradeAccountingAccount
+     */
+    public function testAddDocumentReceivableSpecifiedTradeAccountingAccount(): void
+    {
+        (self::$document)->addDocumentReceivableSpecifiedTradeAccountingAccount("accountid", "typecode");
+        (self::$document)->addDocumentReceivableSpecifiedTradeAccountingAccount("accountid2", "typecode2");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode', 0);
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::InitDocumentSummation
+     */
+    public function testInitDocumentSummation(): void
+    {
+        (self::$document)->initDocumentSummation();
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount', 0, "0.0", "currencyID", "EUR");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount', 0, "0.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::SetDocumentSummation
+     */
+    public function testSetDocumentSummation(): void
+    {
+        (self::$document)->setDocumentSummation(100.0, 0.0, 100.0, 5.0, 4.0, 99.0, 10.0, 0.0, 0.0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount', 0, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount', 0, "5.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount', 0, "4.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount', 0, "99.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount', 0, "10.0", "currencyID", "EUR");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount', 0, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount', 0, "0.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addNewPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionShipTo
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionShipToGlobalId
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionShipToTaxRegistration
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionShipToAddress
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionShipToLegalOrganisation
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionUltimateShipTo
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionUltimateShipToGlobalId
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionUltimateShipToTaxRegistration
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionUltimateShipToAddress
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionUltimateShipToLegalOrganisation
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionSupplyChainEvent
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionReceivableSpecifiedTradeAccountingAccount
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionProductCharacteristic
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionProductClassification
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionProductOriginTradeCountry
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionReferencedProduct
+     */
+    public function testPositionMethods(): void
+    {
+        (self::$document)->addNewPosition("1", "linestatuscode", "linestatusreasoncode");
+        (self::$document)->setDocumentPositionNote("content", "contentcode", "subjectcode");
+        (self::$document)->setDocumentPositionProductDetails("Product Name", "Product Description", "SellerID", "BuyerID", "0088", "11111222222");
+        (self::$document)->addDocumentPositionProductCharacteristic("attr", "attrvalue", "typecode", 10.2, "C62");
+        (self::$document)->addDocumentPositionProductClassification("classcode", "classname", "listid", "listversionid");
+        (self::$document)->setDocumentPositionProductOriginTradeCountry("DE");
+        (self::$document)->addDocumentPositionReferencedProduct("name", "description", "sellerid", "buyerid", "globalid", "0088", 10, "C62");
+        (self::$document)->setDocumentPositionBuyerOrderReferencedDocument("B-0001", "1", new \DateTime());
+        (self::$document)->setDocumentPositionContractReferencedDocument("C-0002", "2", new \DateTime());
+        (self::$document)->setDocumentPositionGrossPrice(105, 1, "C62");
+        (self::$document)->addDocumentPositionGrossPriceAllowanceCharge(10, false, 10, 20, "reason", "taxtypecode", "taxcategorycode", 19.9, 1, 1, "C62", "reasoncode");
+        (self::$document)->setDocumentPositionNetPrice(20.0, 1, "C62");
+        (self::$document)->setDocumentPositionNetPriceTax("S", "VAT", 19.0, 10.0, "reason", "reasoncode");
+        (self::$document)->setDocumentPositionQuantity(10.0, "C62", 0.0, "C62", 1.0, "C62");
+        (self::$document)->setDocumentPositionShipTo("shiptoname", "shiptoid", "shiptodescription");
+        (self::$document)->addDocumentPositionShipToGlobalId("shiptoglobslid", "shiptoglobslidtype");
+        (self::$document)->addDocumentPositionShipToTaxRegistration("VA", "123");
+        (self::$document)->setDocumentPositionShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+        (self::$document)->setDocumentPositionShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+        (self::$document)->setDocumentPositionShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+        (self::$document)->addDocumentPositionShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+        (self::$document)->setDocumentPositionUltimateShipTo("shiptoname", "shiptoid", "shiptodescription");
+        (self::$document)->addDocumentPositionUltimateShipToGlobalId("shiptoglobslid", "shiptoglobslidtype");
+        (self::$document)->addDocumentPositionUltimateShipToTaxRegistration("VA", "123");
+        (self::$document)->setDocumentPositionUltimateShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+        (self::$document)->setDocumentPositionUltimateShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+        (self::$document)->setDocumentPositionUltimateShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+        (self::$document)->addDocumentPositionUltimateShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+        (self::$document)->setDocumentPositionSupplyChainEvent(new \DateTime());
+        (self::$document)->setDocumentPositionDespatchAdviceReferencedDocument("DADV-001", "3", new \DateTime());
+        (self::$document)->setDocumentPositionReceivingAdviceReferencedDocument("RADV-002", "4", new \DateTime());
+        (self::$document)->setDocumentPositionDeliveryNoteReferencedDocument("DNOTE-003", "4", new \DateTime());
+        (self::$document)->addDocumentPositionTax("S", "VAT", 19.0, 10.0, "reason", "reasoncode");
+        (self::$document)->setDocumentPositionBillingPeriod(new \DateTime(), new \DateTime());
+        (self::$document)->addDocumentPositionAllowanceCharge(10.0, true, 19.0, 10.0, "reasoncode", "reason");
+        (self::$document)->setDocumentPositionLineSummation(100, 10);
+        (self::$document)->addDocumentPositionReceivableSpecifiedTradeAccountingAccount("accid", "acctypecode");
+        (self::$document)->addDocumentPositionAdditionalReferencedDocument("1", "2", "3", "4", "name", "reftypecode", new \DateTime());
+        (self::$document)->addDocumentPositionUltimateCustomerOrderReferencedDocument("ORDER-0001", "1.1", new \DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID', 0, "1");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusCode', 0, "linestatuscode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode', 0, "linestatusreasoncode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:Content', 0, "content");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode', 0, "subjectcode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode', 0, "contentcode");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID', 0, "11111222222", "schemeID", "0088");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID', 0, "SellerID");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID', 0, "BuyerID");
+        //$this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Name', 0, "Product Mame");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Description', 0, "Product Description");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Description', 0, "attr");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Value', 0, "attrvalue");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode', 0, "typecode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode', 0, "classcode");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode', 0, "classcode", "listID", "listid");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode', 0, "classcode", "listVersionID", "listversionid");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:ValueMeasure', 0, "10.2", "unitCode", "C62");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry/ram:ID', 0, "DE");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:Name', 0, "name");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:Description', 0, "description");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:SellerAssignedID', 0, "sellerid");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:BuyerAssignedID', 0, "buyerid");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:UnitQuantity', 0, "10", "unitCode", "C62");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:IncludedReferencedProduct/ram:GlobalID', 0, "globalid", "schemeID", "0088");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID', 0, "B-0001");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID', 0, "1");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0, (new \DateTime)->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID', 0, "C-0002");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:LineID', 0, "2");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount', 0, "105.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity', 0, "1", "unitCode", "C62");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CalculationPercent', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:BasisAmount', 0, "20.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualAmount', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ReasonCode', 0, "reasoncode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:Reason', 0, "reason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode', 0, "taxtypecode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode', 0, "taxcategorycode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CategoryTradeTax/ram:RateApplicablePercent', 0, "19.9");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount', 0, "105.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount', 0, "20.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity', 0, "1.0", "unitCode", "C62");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CalculatedAmount', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:TypeCode', 0, "VAT");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:ExemptionReason', 0, "reason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CategoryCode', 0, "S");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:ExemptionReasonCode', 0, "reasoncode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:RateApplicablePercent', 0, "19.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity', 0, "10.0", "unitCode", "C62");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ChargeFreeQuantity', 0, "0.0", "unitCode", "C62");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PackageQuantity', 0, "1.0", "unitCode", "C62");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID', 0, "shiptoid");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Name', 0, "shiptoname");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Description', 0, "shiptodescription");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID', 0, "shiptoglobslid", "schemeID", "shiptoglobslidtype");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "123", "schemeID", "VA");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', 0, "69876");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', 0, "Kundenstrasse 15");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName', 0, "Frankfurt");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', 0, "DE");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "123", "schemeID", "VA");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1, "Otto Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1, "+49-111-5555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1, "info2@kunde2.de");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 0, "shiptoid");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:Name', 0, "shiptoname");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:Description', 0, "shiptodescription");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID', 0, "shiptoglobslid", "schemeID", "shiptoglobslidtype");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "123", "schemeID", "VA");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', 0, "69876");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', 0, "Kundenstrasse 15");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CityName', 0, "Frankfurt");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', 0, "DE");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "123", "schemeID", "VA");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, "+49-111-3333333");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1, "Otto Meier");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1, "+49-111-5555555");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1, "info2@kunde2.de");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString', 0, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID', 0, "DADV-001");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID', 0, "3");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID', 0, "RADV-002");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:LineID', 0, "4");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID', 0, "DNOTE-003");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:LineID', 0, "4");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode', 0, "VAT");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason', 0, "reason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode', 0, "S");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode', 0, "reasoncode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', 0, "19.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTimeString', 0, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString', 0, (new \DateTime())->format("Ymd"), "format", "102");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator/udt:Indicator', 0, "true");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent', 0, "19.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode', 0, "reasoncode");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason', 0, "reason");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount', 0, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalAllowanceChargeAmount', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID', 0, "accid");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode', 0, "acctypecode");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::InitNewDocument
+     */
+    public function testInitNewDocument(): void
+    {
+        (self::$document)->InitNewDocument();
+
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID', "urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended");
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipTo
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToContact
+     */
+    public function testSetDocumentShipToMultipleContacts(): void
+    {
+        (self::$document)->setDocumentShipTo("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name', "Kunden AG Mitte");
+
+        (self::$document)->setDocumentShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, '+49-111-3333333');
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        (self::$document)->setDocumentShipToContact("Gerd MÃŒller", "Bank", "+49-111-4444444", "+49-111-5555555", "info@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Gerd MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, '+49-111-5555555');
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde2.de");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipTo
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToContact
+     */
+    public function testSetDocumentShipToMultipleContactsAdd(): void
+    {
+        (self::$document)->setDocumentShipTo("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', "549910");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name', "Kunden AG Mitte");
+
+        (self::$document)->addDocumentShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0, "Otto MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0, "Financials");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0, "+49-111-2222222");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0, '+49-111-3333333');
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0, "info@kunde.de");
+
+        (self::$document)->addDocumentShipToContact("Gerd MÃŒller", "Bank", "+49-111-4444444", "+49-111-5555555", "info@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1, "Gerd MÃŒller");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1, "Bank");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1, "+49-111-4444444");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1, '+49-111-5555555');
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1, "info@kunde2.de");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::writeFile
+     */
+    public function testWriteFile(): void
+    {
+        (self::$document)->writeFile(getcwd() . "/myfile.xml");
+        $this->assertTrue(file_exists(getcwd() . "/myfile.xml"));
+        @unlink(getcwd() . "/myfile.xml");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::__toString
+     */
+    public function testToString(): void
+    {
+        $xmlContent = (string)self::$document;
+        $this->assertIsString($xmlContent);
+        $this->assertStringStartsWith("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rsm:CrossIndustryInvoice", $xmlContent);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getContentAsDomDocument
+     */
+    public function testGetContentAsDomDocument(): void
+    {
+        $domDocument = self::$document->getContentAsDomDocument();
+        $this->assertInstanceOf(\DOMDocument::class, $domDocument);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getContentAsDomXPath
+     */
+    public function testGetContentAsDomXPath(): void
+    {
+        $domXPath = self::$document->getContentAsDomXPath();
+        $this->assertInstanceOf(\DOMXpath::class, $domXPath);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/BuilderMinimumTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/BuilderMinimumTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/BuilderMinimumTest.php	(revision 8435)
@@ -0,0 +1,2314 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use DateTime;
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\tests\traits\HandlesXmlTests;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentBuilder;
+
+class BuilderMinimumTest extends TestCase
+{
+    use HandlesXmlTests;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_MINIMUM);
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertEquals(ZugferdProfiles::PROFILE_MINIMUM, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getInvoiceObject
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getSerializer
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getObjectHelper
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getProfileDefinitionParameter
+     */
+    public function testDocumentGetters(): void
+    {
+        $this->assertNotNull(self::$document->getInvoiceObject());
+        $this->assertNotNull(self::$document->getSerializer());
+        $this->assertNotNull(self::$document->getObjectHelper());
+        $this->assertEquals('minimum', self::$document->getProfileDefinitionParameter('name'));
+        $this->assertEquals('MINIMUM', self::$document->getProfileDefinitionParameter('altname'));
+        $this->assertEquals('urn:factur-x.eu:1p0:minimum', self::$document->getProfileDefinitionParameter('contextparameter'));
+        $this->assertEquals('factur-x.xml', self::$document->getProfileDefinitionParameter('attachmentfilename'));
+        $this->assertEquals('MINIMUM', self::$document->getProfileDefinitionParameter('xmpname'));
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getProfileDefinitionParameter('unknownparameter');
+            }
+        );
+    }
+
+    public function testXmlGenerals(): void
+    {
+        $xml = $this->getXml();
+        $namespaces = $xml->getNamespaces(true);
+
+        $this->disableRenderXmlContent();
+        $this->assertArrayHasKey("rsm", $namespaces);
+        $this->assertArrayHasKey("ram", $namespaces);
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID', (self::$document)->getProfileDefinitionParameter("contextparameter"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInformation
+     */
+    public function testSetDocumentInformation(): void
+    {
+        (self::$document)->setDocumentInformation("471102", "380", DateTime::createFromFormat("Ymd", "20180305"), "EUR");
+
+        $this->disableRenderXmlContent();
+        $this->debugWriteFile();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:ID', "471102");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:TypeCode', "380");
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString', "20180305", "format", "102");
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode', "EUR");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBusinessProcess
+     */
+    public function testSetDocumentBusinessProcess(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID');
+
+        (self::$document)->setDocumentBusinessProcess("");
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID');
+
+        (self::$document)->setDocumentBusinessProcess("GENERAL INVOICE");
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:BusinessProcessSpecifiedDocumentContextParameter/ram:ID', "GENERAL INVOICE");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentGeneralPaymentInformation
+     */
+    public function testSetDocumentGeneralPaymentInformation(): void
+    {
+        (self::$document)->setDocumentGeneralPaymentInformation("1111111111", "2222222222");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:CreditorReferenceID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PaymentReference');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setIsDocumentCopy
+     * @covers \horstoeko\zugferd\jms\ZugferdTypesHandler::serializeIndicatorType
+     */
+    public function testSetIsDocumentCopy(): void
+    {
+        (self::$document)->setIsDocumentCopy();
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:CopyIndicator');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setIsTestDocument
+     * @covers \horstoeko\zugferd\jms\ZugferdTypesHandler::serializeIndicatorType
+     */
+    public function testSetIsTestDocument(): void
+    {
+        (self::$document)->setIsTestDocument();
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:TestIndicator/udt:Indicator');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentNote
+     */
+    public function testAddDocumentNote(): void
+    {
+        (self::$document)->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.');
+        (self::$document)->addDocumentNote('Lieferant GmbH', null, 'REG');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:Content', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IncludedNote/ram:SubjectCode', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSupplyChainEvent
+     */
+    public function testSetDocumentSupplyChainEvent(): void
+    {
+        (self::$document)->setDocumentSupplyChainEvent(DateTime::createFromFormat('Ymd', '20180305'));
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerReference
+     */
+    public function testSetDocumentBuyerReference(): void
+    {
+        (self::$document)->setDocumentBuyerReference("buyerref");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerReference', "buyerref");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSeller
+     */
+    public function testSetDocumentSeller(): void
+    {
+        (self::$document)->setDocumentSeller("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name', "Lieferant GmbH");
+
+        (self::$document)->setDocumentSeller("Lieferant 2 GmbH", "5499102");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name', "Lieferant 2 GmbH");
+
+        (self::$document)->setDocumentSeller("", "5499103");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerId
+     */
+    public function testAddDocumentSellerId(): void
+    {
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', 0);
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentSellerId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', 0);
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerGlobalId
+     */
+    public function testAddDocumentSellerGlobalId(): void
+    {
+        (self::$document)->addDocumentSellerGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:GlobalID', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerTaxRegistration
+     */
+    public function testAddDocumentSellerTaxRegistration(): void
+    {
+        (self::$document)->addDocumentSellerTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentSellerTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerAddress
+     */
+    public function testSetDocumentSellerAddress(): void
+    {
+        (self::$document)->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerLegalOrganisation
+     */
+    public function testSetDocumentSellerLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentSellerLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0, "DE12345", "schemeID", "FC");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerContact
+     */
+    public function testSetDocumentSellerContact(): void
+    {
+        (self::$document)->setDocumentSellerContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+
+        (self::$document)->setDocumentSellerContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info@meinseller.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+
+        (self::$document)->setDocumentSellerContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerContact
+     */
+    public function testAddDocumentSellerContact(): void
+    {
+        (self::$document)->addDocumentSellerContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info@meinseller.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentSellerContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info@meinseller.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerCommunication
+     */
+    public function testSetDocumentSellerCommunication(): void
+    {
+        (self::$document)->setDocumentSellerCommunication("EM", "seller@email.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty/ram:URIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyer
+     */
+    public function testSetDocumentBuyer(): void
+    {
+        (self::$document)->setDocumentBuyer("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name', "Kunden AG Mitte");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentBuyerId
+     */
+    public function testAddDocumentBuyerId(): void
+    {
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentBuyerId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentBuyerGlobalId
+     */
+    public function testAddDocumentBuyerGlobalId(): void
+    {
+        (self::$document)->addDocumentBuyerGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:GlobalID', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentBuyerTaxRegistration
+     */
+    public function testAddDocumentBuyerTaxRegistration(): void
+    {
+        (self::$document)->addDocumentBuyerTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentBuyerTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0, "201/113/40209", "schemeID", "FC");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1, "DE123456789", "schemeID", "VA");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerAddress
+     */
+    public function testSetDocumentBuyerAddress(): void
+    {
+        (self::$document)->setDocumentBuyerAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountryID', "DE");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerLegalOrganisation
+     */
+    public function testSetDocumentBuyerLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentBuyerLegalOrganisation("DE12345", "FC", "Kunden Holding");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0, "DE12345", "schemeID", "FC");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerContact
+     */
+    public function testSetDocumentBuyerContact(): void
+    {
+        (self::$document)->setDocumentBuyerContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentBuyerContact
+     */
+    public function testAddDocumentBuyerContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentBuyerContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerCommunication
+     */
+    public function testSetDocumentBuyerCommunication(): void
+    {
+        (self::$document)->setDocumentBuyerCommunication("EM", "buyer@email.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:URIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerTaxRepresentativeTradeParty
+     */
+    public function testSetDocumentSellerTaxRepresentativeTradeParty(): void
+    {
+        (self::$document)->setDocumentSellerTaxRepresentativeTradeParty("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testAddDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        (self::$document)->addDocumentSellerTaxRepresentativeGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:GlobalID', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testAddDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        (self::$document)->addDocumentSellerTaxRepresentativeTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentSellerTaxRepresentativeTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerTaxRepresentativeAddress
+     */
+    public function testSetDocumentSellerTaxRepresentativeAddress(): void
+    {
+        (self::$document)->setDocumentSellerTaxRepresentativeAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountryID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testSetDocumentSellerTaxRepresentativeLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentSellerTaxRepresentativeLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerTaxRepresentativeContact
+     */
+    public function testSetDocumentSellerTaxRepresentativeContact(): void
+    {
+        (self::$document)->setDocumentSellerTaxRepresentativeContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentSellerTaxRepresentativeContact
+     */
+    public function testAddDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentSellerTaxRepresentativeContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTaxRepresentativeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProductEndUser
+     */
+    public function testSetDocumentProductEndUser(): void
+    {
+        (self::$document)->setDocumentProductEndUser("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentProductEndUserGlobalId
+     */
+    public function testAddDocumentProductEndUserGlobalId(): void
+    {
+        (self::$document)->addDocumentProductEndUserGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:GlobalID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentProductEndUserTaxRegistration
+     */
+    public function testAddDocumentProductEndUserTaxRegistration(): void
+    {
+        (self::$document)->addDocumentProductEndUserTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentProductEndUserTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProductEndUserAddress
+     */
+    public function testSetDocumentProductEndUserAddress(): void
+    {
+        (self::$document)->setDocumentProductEndUserAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CountryID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProductEndUserLegalOrganisation
+     */
+    public function testSetDocumentProductEndUserLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentProductEndUserLegalOrganisation("DE12345", "FC", "Kunden Holding");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProductEndUserContact
+     */
+    public function testSetDocumentProductEndUserContact(): void
+    {
+        (self::$document)->setDocumentProductEndUserContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentProductEndUserContact
+     */
+    public function testAddDocumentProductEndUserContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentProductEndUserContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ProductEndUserTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipTo
+     */
+    public function testSetDocumentShipTo(): void
+    {
+        (self::$document)->setDocumentShipTo("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipToGlobalId
+     */
+    public function testAddDocumentShipToGlobalId(): void
+    {
+        (self::$document)->addDocumentShipToGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:GlobalID', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipTolId
+     */
+    public function testAddDocumentShipTolId(): void
+    {
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentShipTolId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipToTaxRegistration
+     */
+    public function testAddDocumentShipToTaxRegistration(): void
+    {
+        (self::$document)->addDocumentShipToTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentShipToTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToAddress
+     */
+    public function testSetDocumentShipToAddress(): void
+    {
+        (self::$document)->setDocumentShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToLegalOrganisation
+     */
+    public function testSetDocumentShipToLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToContact
+     */
+    public function testSetDocumentShipToContact(): void
+    {
+        (self::$document)->setDocumentShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipToContact
+     */
+    public function testAddDocumentShipToContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentUltimateShipTo
+     */
+    public function testSetDocumentUltimateShipTo(): void
+    {
+        (self::$document)->setDocumentUltimateShipTo("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateShipToId
+     */
+    public function testAddDocumentUltimateShipToId(): void
+    {
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentUltimateShipToId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateShipToGlobalId
+     */
+    public function testAddDocumentUltimateShipToGlobalId(): void
+    {
+        (self::$document)->addDocumentUltimateShipToGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateShipToTaxRegistration
+     */
+    public function testAddDocumentUltimateShipToTaxRegistration(): void
+    {
+        (self::$document)->addDocumentUltimateShipToTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentUltimateShipToTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentUltimateShipToAddress
+     */
+    public function testSetDocumentUltimateShipToAddress(): void
+    {
+        (self::$document)->setDocumentUltimateShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentUltimateShipToLegalOrganisation
+     */
+    public function testSetDocumentUltimateShipToLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentUltimateShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentUltimateShipToContact
+     */
+    public function testSetDocumentUltimateShipToContact(): void
+    {
+        (self::$document)->setDocumentUltimateShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateShipToContact
+     */
+    public function testAddDocumentUltimateShipToContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentUltimateShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipFrom
+     */
+    public function testSetDocumentShipFrom(): void
+    {
+        (self::$document)->setDocumentShipFrom("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipFromId
+     */
+    public function testAddDocumentShipFromId(): void
+    {
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentShipFromId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipFromGlobalId
+     */
+    public function testAddDocumentShipFromGlobalId(): void
+    {
+        (self::$document)->addDocumentShipFromGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:GlobalID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipFromTaxRegistration
+     */
+    public function testAddDocumentShipFromTaxRegistration(): void
+    {
+        (self::$document)->addDocumentShipFromTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentShipFromTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipFromAddress
+     */
+    public function testSetDocumentShipFromAddress(): void
+    {
+        (self::$document)->setDocumentShipFromAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CountryID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipFromLegalOrganisation
+     */
+    public function testSetDocumentShipFromLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentShipFromLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipFromContact
+     */
+    public function testSetDocumentShipFromContact(): void
+    {
+        (self::$document)->setDocumentShipFromContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentShipFromContact
+     */
+    public function testAddDocumentShipFromContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentShipFromContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicer
+     */
+    public function testSetDocumentInvoicer(): void
+    {
+        (self::$document)->setDocumentInvoicer("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoicerId
+     */
+    public function testAddDocumentInvoicerId(): void
+    {
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentBuyerId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoicerGlobalId
+     */
+    public function testAddDocumentInvoicerGlobalId(): void
+    {
+        (self::$document)->addDocumentInvoicerGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:GlobalID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoicerTaxRegistration
+     */
+    public function testAddDocumentInvoicerTaxRegistration(): void
+    {
+        (self::$document)->addDocumentInvoicerTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentInvoicerTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicerAddress
+     */
+    public function testSetDocumentInvoicerAddress(): void
+    {
+        (self::$document)->setDocumentInvoicerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CountryID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicerLegalOrganisation
+     */
+    public function testSetDocumentInvoicerLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentInvoicerLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicerContact
+     */
+    public function testSetDocumentInvoicerContact(): void
+    {
+        (self::$document)->setDocumentInvoicerContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoicerContact
+     */
+    public function testAddDocumentInvoicerContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentInvoicerContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:PersonName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoicerTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoicee
+     */
+    public function testSetDocumentInvoicee(): void
+    {
+        (self::$document)->setDocumentInvoicee("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoiceeGlobalId
+     */
+    public function testAddDocumentInvoiceeGlobalId(): void
+    {
+        (self::$document)->addDocumentInvoiceeGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:GlobalID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoiceeId
+     */
+    public function testAddDocumentInvoiceeId(): void
+    {
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentInvoiceeId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoiceeTaxRegistration
+     */
+    public function testAddDocumentInvoiceeTaxRegistration(): void
+    {
+        (self::$document)->addDocumentInvoiceeTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentInvoiceeTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedTaxRegistration/ram:ID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoiceeAddress
+     */
+    public function testSetDocumentInvoiceeAddress(): void
+    {
+        (self::$document)->setDocumentInvoiceeAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CountryID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoiceeLegalOrganisation
+     */
+    public function testSetDocumentInvoiceeLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentInvoiceeLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:SpecifiedLegalOrganization/ram:TradingBusinessName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoiceeContact
+     */
+    public function testSetDocumentInvoiceeContact(): void
+    {
+        (self::$document)->setDocumentInvoiceeContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentInvoiceeContact
+     */
+    public function testAddDocumentInvoiceeContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentInvoiceeContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPayee
+     */
+    public function testSetDocumentPayee(): void
+    {
+        (self::$document)->setDocumentPayee("Lieferant GmbH", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPayeeId
+     */
+    public function testAddDocumentPayeeId(): void
+    {
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', 1);
+
+        (self::$document)->addDocumentPayeeId('549911');
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPayeeGlobalId
+     */
+    public function testAddDocumentPayeeGlobalId(): void
+    {
+        (self::$document)->addDocumentPayeeGlobalId("4000001123452", "0088");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:GlobalID', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPayeeTaxRegistration
+     */
+    public function testAddDocumentPayeeTaxRegistration(): void
+    {
+        (self::$document)->addDocumentPayeeTaxRegistration("FC", "201/113/40209");
+        (self::$document)->addDocumentPayeeTaxRegistration("VA", "DE123456789");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPayeeAddress
+     */
+    public function testSetDocumentPayeeAddress(): void
+    {
+        (self::$document)->setDocumentPayeeAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:PostcodeCode');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineOne');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineTwo');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:LineThree');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CityName');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CountryID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:PostalTradeAddress/ram:CountrySubDivisionName');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPayeeLegalOrganisation
+     */
+    public function testSetDocumentPayeeLegalOrganisation(): void
+    {
+        (self::$document)->setDocumentPayeeLegalOrganisation("DE12345", "FC", "Lieferant AG");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:SpecifiedLegalOrganization/ram:ID', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPayeeContact
+     */
+    public function testSetDocumentPayeeContact(): void
+    {
+        (self::$document)->setDocumentPayeeContact("Hans MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPayeeContact
+     */
+    public function testAddDocumentPayeeContact(): void
+    {
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentPayeeContact("Hans Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@lieferant2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:PayeeTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentDeliveryTerms
+     */
+    public function testSetDocumentDeliveryTerms(): void
+    {
+        (self::$document)->setDocumentDeliveryTerms("term");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ApplicableTradeDeliveryTerms/ram:DeliveryTypeCode');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentSellerOrderReferencedDocument
+     */
+    public function testSetDocumentSellerOrderReferencedDocument(): void
+    {
+        (self::$document)->setDocumentSellerOrderReferencedDocument('B-1010', new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerOrderReferencedDocument/ram:FormattedIssueDateTime/ram:DateTimeString');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBuyerOrderReferencedDocument
+     */
+    public function testSetDocumentBuyerOrderReferencedDocument(): void
+    {
+        (self::$document)->setDocumentBuyerOrderReferencedDocument('O-2020', new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID', "O-2020");
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime/ram:DateTimeString');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentContractReferencedDocument
+     */
+    public function testSetDocumentContractReferencedDocument(): void
+    {
+        (self::$document)->setDocumentContractReferencedDocument("CON-4711", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:ContractReferencedDocument/ram:FormattedIssueDateTime/ram:DateTimeString');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentAdditionalReferencedDocument
+     */
+    public function testAddDocumentAdditionalReferencedDocument(): void
+    {
+        (self::$document)->addDocumentAdditionalReferencedDocument("A-1011", "type", "http://lieferant.de/docs/a1011.pdf", "Leistungsnachweis", "reftype", new DateTime());
+        (self::$document)->addDocumentAdditionalReferencedDocument("B-2233", "type2", "http://lieferant.de/docs/b2233.pdf", "Lieferliste", "reftype2", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Name', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Name', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentAdditionalReferencedDocument
+     */
+    public function testAddDocumentAdditionalReferencedDocumentWithAttachment(): void
+    {
+        (self::$document)->addDocumentAdditionalReferencedDocument("A-1011", "type", "http://lieferant.de/docs/a1011.pdf", "Leistungsnachweis", "reftype", new DateTime(), dirname(__FILE__) . "/../assets/InvalidPDF.pdf");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:URIID', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:TypeCode', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:Name', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:ReferenceTypeCode', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:AdditionalReferencedDocument/ram:AttachmentBinaryObject', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentInvoiceReferencedDocument
+     */
+    public function testSetDocumentInvoiceReferencedDocument(): void
+    {
+        (self::$document)->setDocumentInvoiceReferencedDocument("INV-1", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:IssuerAssignedID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentProcuringProject
+     */
+    public function testSetDocumentProcuringProject(): void
+    {
+        (self::$document)->setDocumentProcuringProject("HB-8378732", "Hausbau");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:ID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SpecifiedProcuringProject/ram:Name');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testAddDocumentUltimateCustomerOrderReferencedDocument(): void
+    {
+        (self::$document)->addDocumentUltimateCustomerOrderReferencedDocument("DOC-11", new DateTime());
+        (self::$document)->addDocumentUltimateCustomerOrderReferencedDocument("DOC-22", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:IssuerAssignedID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:UltimateCustomerOrderReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentDespatchAdviceReferencedDocument
+     */
+    public function testSetDocumentDespatchAdviceReferencedDocument(): void
+    {
+        (self::$document)->setDocumentDespatchAdviceReferencedDocument("DADV-001", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentReceivingAdviceReferencedDocument
+     */
+    public function testSetDocumentReceivingAdviceReferencedDocument(): void
+    {
+        (self::$document)->setDocumentReceivingAdviceReferencedDocument("RADV-002", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentDeliveryNoteReferencedDocument
+     */
+    public function testSetDocumentDeliveryNoteReferencedDocument(): void
+    {
+        (self::$document)->setDocumentDeliveryNoteReferencedDocument("DNOTE-003", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID');
+        $this->assertXPathNotExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentMean
+     */
+    public function testAddDocumentPaymentMean(): void
+    {
+        (self::$document)->addDocumentPaymentMean("42", "Paying information", "cardtype", "cardid", "cardholder", "DE00000000000", "DE11111111111", "Bank", "44444444", "NOLADEQLB21");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 0);
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentMeanToCreditTransfer
+     */
+    public function testAddDocumentPaymentMeanToCreditTransfer(): void
+    {
+        (self::$document)->addDocumentPaymentMeanToCreditTransfer("DE77777777777", "Bank", "55555555", "NOLADEQLB22");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 0);
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentMeanToDirectDebit
+     */
+    public function testAddDocumentPaymentMeanToDirectDebit(): void
+    {
+        (self::$document)->addDocumentPaymentMeanToDirectDebit("DE8888888888");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 0);
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentMeanToPaymentCard
+     */
+    public function testAddDocumentPaymentMeanToPaymentCard(): void
+    {
+        (self::$document)->addDocumentPaymentMeanToPaymentCard("cardtype", "cardid", "cardholder");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 0);
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentMean
+     */
+    public function testAddDocumentPaymentMeanLastMustBeSet(): void
+    {
+        (self::$document)->addDocumentPaymentMean("42", "Paying information", "cardtype", "cardid", "cardholder", "DE00000000000", "DE11111111111", "Bank", "44444444", "NOLADEQLB21");
+        (self::$document)->addDocumentPaymentMean("49", "Paying information 2", "cardtype2", "cardid2", "cardholder2", "DE22222222222", "DE33333333333", "Bank 2", "22222222", "BIC");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:Information', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:ApplicableTradeSettlementFinancialCard/ram:CardholderName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayerPartyDebtorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:IBANID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:AccountName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeePartyCreditorFinancialAccount/ram:ProprietaryID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementPaymentMeans/ram:PayeeSpecifiedCreditorFinancialInstitution/ram:BICID', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentTax
+     */
+    public function testAddDocumentTax(): void
+    {
+        (self::$document)->addDocumentTax("S", "VAT", 100.0, 19.0, 19, "exreason", "exreasoncode", 100.0, 1.0, new DateTime(), "duetypecode");
+        (self::$document)->addDocumentTax("S", "VAT", 200.0, 14.0, 7, "exreason2", "exreasoncode2", 200.0, 2.0, new DateTime(), "duetypecode2");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', 0);
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentTaxSimple
+     */
+    public function testAddDocumentTaxSimple(): void
+    {
+        (self::$document)->addDocumentTaxSimple("S", "VAT", 100.0, 19.0, 19.0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:BasisAmount', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:DueDateTypeCode', 2);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', 2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentBillingPeriod
+     */
+    public function testSetDocumentBillingPeriod(): void
+    {
+        (self::$document)->setDocumentBillingPeriod(new DateTime(), new DateTime(), "Project");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentAllowanceCharge
+     */
+    public function testAddDocumentAllowanceCharge(): void
+    {
+        (self::$document)->addDocumentAllowanceCharge(10.0, false, "S", "VAT", 19.0, 1, 10.0, 100.0, 1, "C62", "reasoncode", "reason");
+        (self::$document)->addDocumentAllowanceCharge(10.0, false, "S", "VAT", 19.0, 1, 10.0, 100.0, 1, "C62", "reasoncode", "reason");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:RateApplicablePercent', 0);
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CategoryTradeTax/ram:RateApplicablePercent', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentLogisticsServiceCharge
+     */
+    public function testAddDocumentLogisticsServiceCharge(): void
+    {
+        (self::$document)->addDocumentLogisticsServiceCharge("Service", 10.0, ["S"], ["VAT"], [19.0]);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:Description', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:CategoryCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedTradeTax/ram:RateApplicablePercent', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDiscountTermsToPaymentTerms
+     */
+    public function testAddDocumentPaymentTermAndDiscount(): void
+    {
+        (self::$document)->addDocumentPaymentTerm("Payment", new DateTime(), "mandate");
+        (self::$document)->addDiscountTermsToPaymentTerms(10.0, new DateTime(), 1, "DAY", 20.0, 2.0);
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:Description', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID', 0);
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisDateTime/udt:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisPeriodMeasure', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:BasisAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:CalculationPercent', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ApplicableTradePaymentDiscountTerms/ram:ActualDiscountAmount', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentReceivableSpecifiedTradeAccountingAccount
+     */
+    public function testAddDocumentReceivableSpecifiedTradeAccountingAccount(): void
+    {
+        (self::$document)->addDocumentReceivableSpecifiedTradeAccountingAccount("accountid", "typecode");
+        (self::$document)->addDocumentReceivableSpecifiedTradeAccountingAccount("accountid2", "typecode2");
+
+        $this->disableRenderXmlContent();
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode', 0);
+
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::InitDocumentSummation
+     */
+    public function testInitDocumentSummation(): void
+    {
+        (self::$document)->initDocumentSummation();
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount', 0, "0.0", "currencyID", "EUR");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount', 0, "0.0");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount', 0, "0.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::SetDocumentSummation
+     */
+    public function testSetDocumentSummation(): void
+    {
+        (self::$document)->setDocumentSummation(100.0, 0.0, 100.0, 5.0, 4.0, 99.0, 10.0, 0.0, 0.0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount', 0, "99.0");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount', 0, "100.0");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount', 0, "0.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addNewPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionShipTo
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionShipToGlobalId
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionShipToTaxRegistration
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionShipToAddress
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionShipToLegalOrganisation
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionUltimateShipTo
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionUltimateShipToGlobalId
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionUltimateShipToTaxRegistration
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionUltimateShipToAddress
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionUltimateShipToLegalOrganisation
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionSupplyChainEvent
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionReceivableSpecifiedTradeAccountingAccount
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionProductCharacteristic
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::addDocumentPositionProductClassification
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentPositionProductOriginTradeCountry
+     */
+    public function testPositionMethods(): void
+    {
+        (self::$document)->addNewPosition("1", "linestatuscode", "linestatusreasoncode");
+        (self::$document)->setDocumentPositionNote("content", "contentcode", "subjectcode");
+        (self::$document)->setDocumentPositionProductDetails("Product Name", "Product Description", "SellerID", "BuyerID", "0088", "11111222222");
+        (self::$document)->addDocumentPositionProductCharacteristic("attr", "attrvalue", "typecode", 10.2, "C62");
+        (self::$document)->addDocumentPositionProductClassification("classcode", "classname", "listid", "listversionid");
+        (self::$document)->setDocumentPositionProductOriginTradeCountry("DE");
+        (self::$document)->setDocumentPositionBuyerOrderReferencedDocument("B-0001", "1", new DateTime());
+        (self::$document)->setDocumentPositionContractReferencedDocument("C-0002", "2", new DateTime());
+        (self::$document)->setDocumentPositionGrossPrice(105, 1, "C62");
+        (self::$document)->addDocumentPositionGrossPriceAllowanceCharge(10, false, 10, 20, "reason", "taxtypecode", "taxcategorycode", 19.9, 1, 1, "C62", "reasoncode");
+        (self::$document)->setDocumentPositionNetPrice(20.0, 1, "C62");
+        (self::$document)->setDocumentPositionNetPriceTax("S", "VAT", 19.0, 10.0, "reason", "reasoncode");
+        (self::$document)->setDocumentPositionQuantity(10.0, "C62", 0.0, "C62", 1.0, "C62");
+        (self::$document)->setDocumentPositionShipTo("shiptoname", "shiptoid", "shiptodescription");
+        (self::$document)->addDocumentPositionShipToGlobalId("shiptoglobslid", "shiptoglobslidtype");
+        (self::$document)->addDocumentPositionShipToTaxRegistration("VA", "123");
+        (self::$document)->setDocumentPositionShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+        (self::$document)->setDocumentPositionShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+        (self::$document)->setDocumentPositionShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+        (self::$document)->addDocumentPositionShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+        (self::$document)->setDocumentPositionUltimateShipTo("shiptoname", "shiptoid", "shiptodescription");
+        (self::$document)->addDocumentPositionUltimateShipToGlobalId("shiptoglobslid", "shiptoglobslidtype");
+        (self::$document)->addDocumentPositionUltimateShipToTaxRegistration("VA", "123");
+        (self::$document)->setDocumentPositionUltimateShipToAddress("Kundenstrasse 15", "", "", "69876", "Frankfurt", "DE");
+        (self::$document)->setDocumentPositionUltimateShipToLegalOrganisation("DE12345", "FC", "Kunden Holding");
+        (self::$document)->setDocumentPositionUltimateShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+        (self::$document)->addDocumentPositionUltimateShipToContact("Otto Meier", "Bank", "+49-111-4444444", "+49-111-5555555", "info2@kunde2.de");
+        (self::$document)->setDocumentPositionSupplyChainEvent(new DateTime());
+        (self::$document)->setDocumentPositionDespatchAdviceReferencedDocument("DADV-001", "3", new DateTime());
+        (self::$document)->setDocumentPositionReceivingAdviceReferencedDocument("RADV-002", "4", new DateTime());
+        (self::$document)->setDocumentPositionDeliveryNoteReferencedDocument("DNOTE-003", "4", new DateTime());
+        (self::$document)->addDocumentPositionTax("S", "VAT", 19.0, 10.0, "reason", "reasoncode");
+        (self::$document)->setDocumentPositionBillingPeriod(new DateTime(), new DateTime());
+        (self::$document)->addDocumentPositionAllowanceCharge(10.0, true, 19.0, 10.0, "reasoncode", "reason");
+        (self::$document)->setDocumentPositionLineSummation(100, 10);
+        (self::$document)->addDocumentPositionReceivableSpecifiedTradeAccountingAccount("accid", "acctypecode");
+        (self::$document)->addDocumentPositionAdditionalReferencedDocument("1", "2", "3", "4", "name", "reftypecode", new DateTime());
+        (self::$document)->addDocumentPositionUltimateCustomerOrderReferencedDocument("ORDER-0001", "1.1", new DateTime());
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:Content', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:SubjectCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:ContentCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:GlobalID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:SellerAssignedID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:BuyerAssignedID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:Description', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Description', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:Value', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:OriginTradeCountry/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:DesignatedProductClassification/ram:ClassCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedTradeProduct/ram:ApplicableProductCharacteristic/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:IssuerAssignedID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:LineID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:ContractReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CalculationPercent', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:BasisAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ActualAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:ReasonCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:Reason', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CategoryTradeTax/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CategoryTradeTax/ram:CategoryCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:AppliedTradeAllowanceCharge/ram:CategoryTradeTax/ram:RateApplicablePercent', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CalculatedAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:ExemptionReason', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:CategoryCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:ExemptionReasonCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:IncludedTradeTax/ram:RateApplicablePercent', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:BilledQuantity', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ChargeFreeQuantity', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:PackageQuantity', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Name', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Description', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Name', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:Description', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:GlobalID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CityName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:Name', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:Description', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:GlobalID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:PostcodeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:LineOne', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CityName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:PostalTradeAddress/ram:CountryID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:SpecifiedTaxRegistration/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:UltimateShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:LineID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:LineID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:ReceivingAdviceReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:LineID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:FormattedIssueDateTime/a:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CalculatedAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:TypeCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReasonCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:RateApplicablePercent', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:StartDateTime/udt:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ChargeIndicator/udt:Indicator', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:CalculationPercent', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:BasisAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ActualAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:TotalAllowanceChargeAmount', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:TypeCode', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::InitNewDocument
+     */
+    public function testInitNewDocument(): void
+    {
+        (self::$document)->InitNewDocument();
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter');
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:ExchangedDocumentContext/ram:GuidelineSpecifiedDocumentContextParameter/ram:ID', "urn:factur-x.eu:1p0:minimum");
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery');
+        $this->assertXPathExists('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement');
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipTo
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToContact
+     */
+    public function testSetDocumentShipToMultipleContacts(): void
+    {
+        (self::$document)->setDocumentShipTo("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name', 0);
+
+        (self::$document)->setDocumentShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->setDocumentShipToContact("Gerd MÃŒller", "Bank", "+49-111-4444444", "+49-111-5555555", "info@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipTo
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::setDocumentShipToContact
+     */
+    public function testSetDocumentShipToMultipleContactsAdd(): void
+    {
+        (self::$document)->setDocumentShipTo("Kunden AG Mitte", "549910");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:ID', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:Name', 0);
+
+        (self::$document)->addDocumentShipToContact("Otto MÃŒller", "Financials", "+49-111-2222222", "+49-111-3333333", "info@kunde.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 0);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 0);
+
+        (self::$document)->addDocumentShipToContact("Gerd MÃŒller", "Bank", "+49-111-4444444", "+49-111-5555555", "info@kunde2.de");
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:PersonName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:DepartmentName', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:FaxUniversalCommunication/ram:CompleteNumber', 1);
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty/ram:DefinedTradeContact/ram:EmailURIUniversalCommunication/ram:URIID', 1);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::writeFile
+     */
+    public function testWriteFile(): void
+    {
+        (self::$document)->writeFile(getcwd() . "/myfile.xml");
+        $this->assertTrue(file_exists(getcwd() . "/myfile.xml"));
+        @unlink(getcwd() . "/myfile.xml");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::__toString
+     */
+    public function testToString(): void
+    {
+        $xmlContent = (string)self::$document;
+        $this->assertIsString($xmlContent);
+        $this->assertStringStartsWith("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rsm:CrossIndustryInvoice", $xmlContent);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getContentAsDomDocument
+     */
+    public function testGetContentAsDomDocument(): void
+    {
+        $domDocument = self::$document->getContentAsDomDocument();
+        $this->assertInstanceOf(\DOMDocument::class, $domDocument);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::getContentAsDomXPath
+     */
+    public function testGetContentAsDomXPath(): void
+    {
+        $domXPath = self::$document->getContentAsDomXPath();
+        $this->assertInstanceOf(\DOMXpath::class, $domXPath);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/DocumentTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/DocumentTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/DocumentTest.php	(revision 8435)
@@ -0,0 +1,127 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \ReflectionClass;
+use \ReflectionProperty;
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\ZugferdDocumentBuilder;
+
+class DocumentTest extends TestCase
+{
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocument::__construct
+     */
+    public function testDocumentCreationMinimum(): void
+    {
+        $doc = ZugferdDocumentBuilder::createNew(ZugferdProfiles::PROFILE_MINIMUM);
+        $this->assertNotNull($doc);
+        $this->assertEquals(ZugferdProfiles::PROFILE_MINIMUM, $doc->getProfileId());
+        $this->assertArrayHasKey("contextparameter", $doc->getProfileDefinition());
+        $this->assertArrayHasKey("name", $doc->getProfileDefinition());
+        $this->assertEquals("urn:factur-x.eu:1p0:minimum", $doc->getProfileDefinitionParameter("contextparameter"));
+        $this->assertEquals("minimum", $doc->getProfileDefinitionParameter("name"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocument::__construct
+     */
+    public function testDocumentCreationBasic(): void
+    {
+        $doc = ZugferdDocumentBuilder::createNew(ZugferdProfiles::PROFILE_BASIC);
+        $this->assertNotNull($doc);
+        $this->assertEquals(ZugferdProfiles::PROFILE_BASIC, $doc->getProfileId());
+        $this->assertArrayHasKey("contextparameter", $doc->getProfileDefinition());
+        $this->assertArrayHasKey("name", $doc->getProfileDefinition());
+        $this->assertEquals("urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:basic", $doc->getProfileDefinitionParameter("contextparameter"));
+        $this->assertEquals("basic", $doc->getProfileDefinitionParameter("name"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocument::__construct
+     */
+    public function testDocumentCreationBasicWl(): void
+    {
+        $doc = ZugferdDocumentBuilder::createNew(ZugferdProfiles::PROFILE_BASICWL);
+        $this->assertNotNull($doc);
+        $this->assertEquals(ZugferdProfiles::PROFILE_BASICWL, $doc->getProfileId());
+        $this->assertArrayHasKey("contextparameter", $doc->getProfileDefinition());
+        $this->assertArrayHasKey("name", $doc->getProfileDefinition());
+        $this->assertEquals("urn:factur-x.eu:1p0:basicwl", $doc->getProfileDefinitionParameter("contextparameter"));
+        $this->assertEquals("basicwl", $doc->getProfileDefinitionParameter("name"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocument::__construct
+     */
+    public function testDocumentCreationEn16931(): void
+    {
+        $doc = ZugferdDocumentBuilder::createNew(ZugferdProfiles::PROFILE_EN16931);
+        $this->assertNotNull($doc);
+        $this->assertEquals(ZugferdProfiles::PROFILE_EN16931, $doc->getProfileId());
+        $this->assertArrayHasKey("contextparameter", $doc->getProfileDefinition());
+        $this->assertArrayHasKey("name", $doc->getProfileDefinition());
+        $this->assertEquals("urn:cen.eu:en16931:2017", $doc->getProfileDefinitionParameter("contextparameter"));
+        $this->assertEquals("en16931", $doc->getProfileDefinitionParameter("name"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocument::__construct
+     */
+    public function testDocumentCreationExtended(): void
+    {
+        $doc = ZugferdDocumentBuilder::createNew(ZugferdProfiles::PROFILE_EXTENDED);
+        $this->assertNotNull($doc);
+        $this->assertEquals(ZugferdProfiles::PROFILE_EXTENDED, $doc->getProfileId());
+        $this->assertArrayHasKey("contextparameter", $doc->getProfileDefinition());
+        $this->assertArrayHasKey("name", $doc->getProfileDefinition());
+        $this->assertEquals("urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended", $doc->getProfileDefinitionParameter("contextparameter"));
+        $this->assertEquals("extended", $doc->getProfileDefinitionParameter("name"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocument::__construct
+     * @covers \horstoeko\zugferd\ZugferdDocument::initSerialzer()
+     */
+    public function testDocumentInternals(): void
+    {
+        $doc = ZugferdDocumentBuilder::createNew(ZugferdProfiles::PROFILE_EXTENDED);
+        $property = $this->getPrivateProperty('horstoeko\zugferd\ZugferdDocument', 'serializerBuilder');
+        $this->assertNotNull($property->getValue($doc));
+        $property = $this->getPrivateProperty('horstoeko\zugferd\ZugferdDocument', 'serializer');
+        $this->assertNotNull($property->getValue($doc));
+        $property = $this->getPrivateProperty('horstoeko\zugferd\ZugferdDocument', 'invoiceObject');
+        $this->assertNotNull($property->getValue($doc));
+        $property = $this->getPrivateProperty('horstoeko\zugferd\ZugferdDocument', 'objectHelper');
+        $this->assertNotNull($property->getValue($doc));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocument::getInvoiceObject
+     * @covers \horstoeko\zugferd\ZugferdDocument::getSerializer
+     * @covers \horstoeko\zugferd\ZugferdDocument::getObjectHelper
+     */
+    public function testDocumentGetters(): void
+    {
+        $doc = ZugferdDocumentBuilder::createNew(ZugferdProfiles::PROFILE_EXTENDED);
+        $this->assertNotNull($doc->getInvoiceObject());
+        $this->assertNotNull($doc->getSerializer());
+        $this->assertNotNull($doc->getObjectHelper());
+    }
+
+    /**
+     * Access to private properties
+     *
+     * @param  string $className
+     * @param  string $propertyName
+     * @return ReflectionProperty
+     */
+    public function getPrivateProperty($className, $propertyName): ReflectionProperty
+    {
+        $reflector = new ReflectionClass($className);
+        $property = $reflector->getProperty($propertyName);
+        $property->setAccessible(true);
+        return $property;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/JsonExporterTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/JsonExporterTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/JsonExporterTest.php	(revision 8435)
@@ -0,0 +1,56 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdDocumentJsonExporter;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+
+class JsonExporterTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/xrechnung_simple_2.xml");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentJsonExporter::toJsonString
+     */
+    public function testToJsonString(): void
+    {
+        $exporter = new ZugferdDocumentJsonExporter(static::$document);
+        $jsonString = $exporter->toJsonString();
+
+        $this->assertStringStartsWith('{"ExchangedDocumentContext"', $jsonString);
+        $this->assertStringContainsString('{"GuidelineSpecifiedDocumentContextParameter"', $jsonString);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentJsonExporter::toPrettyJsonString
+     */
+    public function testToPrettyJsonString(): void
+    {
+        $exporter = new ZugferdDocumentJsonExporter(static::$document);
+        $jsonString = $exporter->toPrettyJsonString();
+
+        $this->assertStringStartsWith("{\n    \"ExchangedDocumentContext\": {\n        \"GuidelineSpecifiedDocumentContextParameter\": {", $jsonString);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentJsonExporter::toJsonObject
+     */
+    public function testToJsonObject(): void
+    {
+        $exporter = new ZugferdDocumentJsonExporter(static::$document);
+        $jsonObject = $exporter->toJsonObject();
+
+        $this->assertInstanceOf("stdClass", $jsonObject);
+        $this->assertTrue(isset($jsonObject->ExchangedDocumentContext));
+        $this->assertTrue(isset($jsonObject->ExchangedDocumentContext->GuidelineSpecifiedDocumentContextParameter));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ObjectHelperEn16931Test.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ObjectHelperEn16931Test.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ObjectHelperEn16931Test.php	(revision 8435)
@@ -0,0 +1,1772 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use DateTime;
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdObjectHelper;
+use \horstoeko\zugferd\exception\ZugferdUnknownDateFormatException;
+
+class ObjectHelperEn16931Test extends TestCase
+{
+    /**
+     * @var ZugferdObjectHelper
+     */
+    protected static $objectHelper;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$objectHelper = new ZugferdObjectHelper(ZugferdProfiles::PROFILE_EN16931);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDocumentCodeType
+     */
+    public function testGetDocumentCodeTypeEmpty(): void
+    {
+        $codeType = self::$objectHelper->getDocumentCodeType();
+        $this->assertNull($codeType);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDocumentCodeType
+     */
+    public function testGetDocumentCodeTypeNotEmpty(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\qdt\DocumentCodeType
+         */
+        $codeType = self::$objectHelper->getDocumentCodeType("380");
+        $this->assertNotNull($codeType);
+        $this->assertEquals("380", $codeType->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType("abc");
+        $this->assertEquals("abc", $idtype->value());
+        $this->assertEquals("", $idtype->getSchemeID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeWithValueAndScheme(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType("abc", "0088");
+        $this->assertEquals("abc", $idtype->value());
+        $this->assertEquals("0088", $idtype->getSchemeID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeAllEmpty(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType("", "");
+        $this->assertNull($idtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType(null, null);
+        $this->assertNull($idtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeEmptyValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType("");
+        $this->assertNull($idtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType(null);
+        $this->assertNull($idtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeEmptyValueWithScheme(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType("", "0088");
+        $this->assertNull($idtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTextType
+     */
+    public function testGetTextTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\TextType
+         */
+        $texttype = self::$objectHelper->getTextType("test");
+        $this->assertEquals("test", $texttype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTextType
+     */
+    public function testGetTextTypeAllEmpty(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\TextType
+         */
+        $texttype = self::$objectHelper->getTextType("");
+        $this->assertNull($texttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTextType
+     */
+    public function testGetTextTypeNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\TextType
+         */
+        $texttype = self::$objectHelper->getTextType(null);
+        $this->assertNull($texttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCodeType
+     */
+    public function testGetCodeTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\CodeType
+         */
+        $texttype = self::$objectHelper->getCodeType("test");
+        $this->assertEquals("test", $texttype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCodeType2
+     */
+    public function testGetCodeType2WithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\CodeType
+         */
+        $texttype = self::$objectHelper->getCodeType2("test");
+        $this->assertEquals("test", $texttype->value());
+        $this->assertNull($texttype->getListID());
+        $this->assertNull($texttype->getListVersionID());
+
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\CodeType
+         */
+        $texttype = self::$objectHelper->getCodeType2("test", "listid");
+        $this->assertEquals("test", $texttype->value());
+        $this->assertEquals("listid", $texttype->getListID());
+        $this->assertNull($texttype->getListVersionID());
+
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\CodeType
+         */
+        $texttype = self::$objectHelper->getCodeType2("test", "listid", "listversion");
+        $this->assertEquals("test", $texttype->value());
+        $this->assertEquals("listid", $texttype->getListID());
+        $this->assertEquals("listversion", $texttype->getListVersionID());
+
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\CodeType
+         */
+        $texttype = self::$objectHelper->getCodeType2();
+        $this->assertNull($texttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCodeType
+     */
+    public function testGetCodeTypeAllEmpty(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\TextType
+         */
+        $texttype = self::$objectHelper->getCodeType("");
+        $this->assertNull($texttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCodeType
+     */
+    public function testGetCodeTypeNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\TextType
+         */
+        $texttype = self::$objectHelper->getCodeType(null);
+        $this->assertNull($texttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIndicatorType
+     */
+    public function testGetIndicatorTypeWithTrueValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\IndicatorType
+         */
+        $indicatortype = self::$objectHelper->getIndicatorType(true);
+        $this->assertTrue($indicatortype->getIndicator());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIndicatorType
+     */
+    public function testGetIndicatorTypeWithFalseValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\IndicatorType
+         */
+        $indicatortype = self::$objectHelper->getIndicatorType(false);
+        $this->assertNotNull($indicatortype);
+        $this->assertEquals(false, $indicatortype->getIndicator());
+
+        $indicatortype = self::$objectHelper->getIndicatorType(true);
+        $this->assertNotNull($indicatortype);
+        $this->assertEquals(true, $indicatortype->getIndicator());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIndicatorType
+     */
+    public function testGetIndicatorTypeNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\IndicatorType
+         */
+        $indicatortype = self::$objectHelper->getIndicatorType(null);
+        $this->assertNull($indicatortype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getNoteType
+     */
+    public function testGetNoteTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\NoteType
+         */
+        $notetype = self::$objectHelper->getNoteType("content", "contentcode", "subjectcode");
+        $this->assertEquals("content", $notetype->getContent());
+        $this->assertEquals("subjectcode", $notetype->getSubjectCode()->value());
+        $this->assertFalse(self::$objectHelper->methodExists($notetype, "getContentCode"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getNoteType
+     */
+    public function testGetNoteTypeAllNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\NoteType
+         */
+        $notetype = self::$objectHelper->getNoteType(null, null, null);
+        $this->assertNull($notetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getNoteType
+     */
+    public function testGetNoteTypeWithEmptyContent(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\NoteType
+         */
+        $notetype = self::$objectHelper->getNoteType("", "", "");
+        $this->assertNull($notetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getNoteType
+     */
+    public function testGetNoteTypeWithEmptyContentButWithSubjectCode(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\NoteType
+         */
+        $notetype = self::$objectHelper->getNoteType("", "", "subjectcode");
+        $this->assertNull($notetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getFormattedDateTimeType
+     */
+    public function testGetFormattedDateTimeType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType
+         */
+        $datetimetype = self::$objectHelper->getFormattedDateTimeType(new \DateTime());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $datetimetype->getDateTimeString());
+        $this->assertEquals("102", $datetimetype->getDateTimeString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getFormattedDateTimeType
+     */
+    public function testGetFormattedDateTimeTypeWithNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\qdt\FormattedDateTimeType
+         */
+        $datetimetype = self::$objectHelper->getFormattedDateTimeType(null);
+        $this->assertNull($datetimetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDateTimeType
+     */
+    public function testGetDateTimeType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\DateTimeType
+         */
+        $datetimetype = self::$objectHelper->getDateTimeType(new \DateTime());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $datetimetype->getDateTimeString());
+        $this->assertEquals("102", $datetimetype->getDateTimeString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDateTimeType
+     */
+    public function testGetDateTimeTypeWithNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\DateTimeType
+         */
+        $datetimetype = self::$objectHelper->getDateTimeType(null);
+        $this->assertNull($datetimetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDateType
+     */
+    public function testGetDateType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\DateType
+         */
+        $datetimetype = self::$objectHelper->getDateType(new \DateTime());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $datetimetype->getDateString());
+        $this->assertEquals("102", $datetimetype->getDateString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDateType
+     */
+    public function testGetDateTypeWithNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\DateType
+         */
+        $datetimetype = self::$objectHelper->getDateType(null);
+        $this->assertNull($datetimetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getAmountType
+     */
+    public function testGetAmountTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\AmountType
+         */
+        $amounttype = self::$objectHelper->getAmountType(100.0);
+        $this->assertEquals(100.0, $amounttype->value());
+        $this->assertEquals("", $amounttype->getCurrencyID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getAmountType
+     */
+    public function testGetAmountTypeWithValueAndCurrency(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\AmountType
+         */
+        $amounttype = self::$objectHelper->getAmountType(100.0, "EUR");
+        $this->assertEquals(100.0, $amounttype->value());
+        $this->assertEquals("EUR", $amounttype->getCurrencyID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getAmountType
+     */
+    public function testGetAmountTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\AmountType
+         */
+        $amounttype = self::$objectHelper->getAmountType(null, null);
+        $this->assertNull($amounttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getAmountType
+     */
+    public function testGetAmountTypeWithValueAndEmptyCurrency(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\AmountType
+         */
+        $amounttype = self::$objectHelper->getAmountType(100, "");
+        $this->assertEquals(100.0, $amounttype->value());
+        $this->assertEquals("", $amounttype->getCurrencyID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getAmountType
+     */
+    public function testGetAmountTypeWithNullValueAndCurrency(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\AmountType
+         */
+        $amounttype = self::$objectHelper->getAmountType(null, "EUR");
+        $this->assertNull($amounttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getPercentType
+     */
+    public function testGetPercentTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\PercentType
+         */
+        $percenttype = self::$objectHelper->getPercentType(100.0);
+        $this->assertEquals(100.0, $percenttype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getPercentType
+     */
+    public function testGetPercentTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\PercentType
+         */
+        $percenttype = self::$objectHelper->getPercentType(null);
+        $this->assertNull($percenttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getQuantityType
+     */
+    public function testGetQuantityTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\QuantityType
+         */
+        $quantitytype = self::$objectHelper->getQuantityType(100.0);
+        $this->assertEquals(100.0, $quantitytype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getQuantityType
+     */
+    public function testGetQuantityTypeWithValueAndUnitCode(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\QuantityType
+         */
+        $quantitytype = self::$objectHelper->getQuantityType(100.0, "C62");
+        $this->assertEquals(100.0, $quantitytype->value());
+        $this->assertEquals("C62", $quantitytype->getUnitCode());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getQuantityType
+     */
+    public function testGetQuantityTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\QuantityType
+         */
+        $quantitytype = self::$objectHelper->getQuantityType(null, null);
+        $this->assertNull($quantitytype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getQuantityType
+     */
+    public function testGetQuantityTypeWithNullValueAndUnitCode(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\QuantityType
+         */
+        $quantitytype = self::$objectHelper->getQuantityType(null, "C62");
+        $this->assertNull($quantitytype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getMeasureType
+     */
+    public function testGetMeasureTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\MeasureType
+         */
+        $measuretype = self::$objectHelper->getMeasureType(100.0);
+        $this->assertNull($measuretype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getMeasureType
+     */
+    public function testGetMeasureTypeWithValueAndUnitCode(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\MeasureType
+         */
+        $measuretype = self::$objectHelper->getMeasureType(100.0, "DAY");
+        $this->assertNull($measuretype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getMeasureType
+     */
+    public function testGetMeasureTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\MeasureType
+         */
+        $measuretype = self::$objectHelper->getMeasureType(null, null);
+        $this->assertNull($measuretype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getMeasureType
+     */
+    public function testGetMeasureTypeWithNullValueAndUnitCode(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\MeasureType
+         */
+        $measuretype = self::$objectHelper->getMeasureType(null, "DAY");
+        $this->assertNull($measuretype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getNumericType
+     */
+    public function testGetNumericTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\NumericType
+         */
+        $numerictype = self::$objectHelper->getNumericType(100.0);
+        $this->assertNull($numerictype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getNumericType
+     */
+    public function testGetNumericTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\NumericType
+         */
+        $numerictype = self::$objectHelper->getNumericType(null);
+        $this->assertNull($numerictype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxCategoryCodeType
+     */
+    public function testGetTaxCategoryCodeTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\qdt\TaxCategoryCodeType
+         */
+        $taxcategorycodetype = self::$objectHelper->getTaxCategoryCodeType("VAT");
+        $this->assertEquals("VAT", $taxcategorycodetype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxCategoryCodeType
+     */
+    public function testGetTaxCategoryCodeTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\qdt\TaxCategoryCodeType
+         */
+        $taxcategorycodetype = self::$objectHelper->getTaxCategoryCodeType(null);
+        $this->assertNull($taxcategorycodetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxTypeCodeType
+     */
+    public function testGetTaxTypeCodeTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\qdt\TaxTypeCodeType
+         */
+        $taxtypecodetype = self::$objectHelper->getTaxTypeCodeType("S");
+        $this->assertEquals("S", $taxtypecodetype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxTypeCodeType
+     */
+    public function testGetTaxTypeCodeTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\qdt\TaxTypeCodeType
+         */
+        $taxtypecodetype = self::$objectHelper->getTaxTypeCodeType(null);
+        $this->assertNull($taxtypecodetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTimeReferenceCodeType
+     */
+    public function testGetTimeReferenceCodeTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\qdt\TimeReferenceCodeType
+         */
+        $timereferencecodetype = self::$objectHelper->getTimeReferenceCodeType("REF");
+        $this->assertEquals("REF", $timereferencecodetype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTimeReferenceCodeType
+     */
+    public function testGetTimeReferenceCodeTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\qdt\TimeReferenceCodeType
+         */
+        $timereferencecodetype = self::$objectHelper->getTimeReferenceCodeType(null);
+        $this->assertNull($timereferencecodetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getSpecifiedPeriodType
+     */
+    public function testGetSpecifiedPeriodTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType
+         */
+        $periodtype = self::$objectHelper->getSpecifiedPeriodType(new \DateTime(), new \DateTime(), new \DateTime(), "Description");
+        $this->assertFalse(self::$objectHelper->methodExists($periodtype, "getDescription"));
+        $this->assertFalse(self::$objectHelper->methodExists($periodtype, "getCompleteDateTime"));
+        $this->assertEquals((new \DateTime())->format("Ymd"), $periodtype->getStartDateTime()->getDateTimeString());
+        $this->assertEquals("102", $periodtype->getStartDateTime()->getDateTimeString()->getFormat());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $periodtype->getEndDateTime()->getDateTimeString());
+        $this->assertEquals("102", $periodtype->getEndDateTime()->getDateTimeString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getSpecifiedPeriodType
+     */
+    public function testGetSpecifiedPeriodTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\SpecifiedPeriodType
+         */
+        $periodtype = self::$objectHelper->getSpecifiedPeriodType(null, null, null, null);
+        $this->assertNull($periodtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getBinaryObjectType
+     */
+    public function testGetBinaryObjectTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\BinaryObjectType
+         */
+        $binaryobject = self::$objectHelper->getBinaryObjectType("data", "application/pdf", "mypdf.pdf");
+        $this->assertEquals("data", $binaryobject->value());
+        $this->assertEquals("application/pdf", $binaryobject->getMimeCode());
+        $this->assertEquals("mypdf.pdf", $binaryobject->getFilename());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getBinaryObjectType
+     */
+    public function testGetBinaryObjectTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\BinaryObjectType
+         */
+        $binaryobject = self::$objectHelper->getBinaryObjectType(null, null, null);
+        $this->assertNull($binaryobject);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getBinaryObjectType
+     */
+    public function testGetBinaryObjectTypeDataNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\BinaryObjectType
+         */
+        $binaryobject = self::$objectHelper->getBinaryObjectType(null, "application/pdf", "mypdf.pdf");
+        $this->assertNull($binaryobject);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getBinaryObjectType
+     */
+    public function testGetBinaryObjectTypeMimeTypeNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\BinaryObjectType
+         */
+        $binaryobject = self::$objectHelper->getBinaryObjectType("data", null, "mypdf.pdf");
+        $this->assertNull($binaryobject);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getBinaryObjectType
+     */
+    public function testGetBinaryObjectTypeFilenameNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\BinaryObjectType
+         */
+        $binaryobject = self::$objectHelper->getBinaryObjectType("data", "application/pdf", null);
+        $this->assertNull($binaryobject);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getReferencedDocumentType
+     */
+    public function testGetReferencedDocumentTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+         */
+        $refdoctype = self::$objectHelper->getReferencedDocumentType("issuerid", "uriid", "lineid", "typecode", "name", "reftypcode", new \DateTime(), dirname(__FILE__) . "/../assets/en16931_allowancecharge.xml");
+        $this->assertEquals("issuerid", $refdoctype->getIssuerAssignedID()->value());
+        $this->assertEquals("uriid", $refdoctype->getURIID()->value());
+        $this->assertEquals("lineid", $refdoctype->getLineID()->value());
+        $this->assertEquals("typecode", $refdoctype->getTypeCode());
+        $this->assertEquals("name", $refdoctype->getName());
+        $this->assertEquals("reftypcode", $refdoctype->getReferenceTypeCode());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $refdoctype->getFormattedIssueDateTime()->getDateTimeString());
+        $this->assertEquals("102", $refdoctype->getFormattedIssueDateTime()->getDateTimeString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getReferencedDocumentType
+     */
+    public function testGetReferencedDocumentTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\ReferencedDocumentType
+         */
+        $refdoctype = self::$objectHelper->getReferencedDocumentType(null, null, null, null, null, null, null, null, null);
+        $this->assertNull($refdoctype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCrossIndustryInvoice
+     */
+    public function testCrossIndustryInvoice(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\rsm\CrossIndustryInvoice
+         */
+        $crossindusty = self::$objectHelper->getCrossIndustryInvoice();
+        $this->assertNotNull($crossindusty);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeParty
+     */
+    public function testGetTradePartyAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradePartyType
+         */
+        $tradeparty = self::$objectHelper->getTradeParty("name", "id", "description");
+        $this->assertEquals("name", $tradeparty->getName());
+        $this->assertIsArray($tradeparty->getID());
+        $this->assertArrayHasKey(0, $tradeparty->getID());
+        $this->assertEquals("id", $tradeparty->getID()[0]);
+        $this->assertEquals("description", $tradeparty->getDescription());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeParty
+     */
+    public function testGetTradePartyNullValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradePartyType
+         */
+        $tradeparty = self::$objectHelper->getTradeParty(null, null, null);
+        $this->assertNull($tradeparty);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeAddress
+     */
+    public function testGetTradeAddressAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeAddressType
+         */
+        $tradeaddress = self::$objectHelper->getTradeAddress("lineone", "linetwo", "linethree", "00000", "city", "country", "county");
+        $this->assertEquals("lineone", $tradeaddress->getLineOne());
+        $this->assertEquals("linetwo", $tradeaddress->getLineTwo());
+        $this->assertEquals("linethree", $tradeaddress->getLineThree());
+        $this->assertEquals("00000", $tradeaddress->getPostcodeCode());
+        $this->assertEquals("city", $tradeaddress->getCityName());
+        $this->assertEquals("country", $tradeaddress->getCountryID());
+        $this->assertEquals("county", $tradeaddress->getCountrySubDivisionName());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeAddress
+     */
+    public function testGetTradeAddressAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeAddressType
+         */
+        $tradeaddress = self::$objectHelper->getTradeAddress(null, null, null, null, null, null, null);
+        $this->assertNull($tradeaddress);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getLegalOrganization
+     */
+    public function testGetLegalOrganizationAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\LegalOrganizationType
+         */
+        $legalorg = self::$objectHelper->getLegalOrganization("orgid", "orgtype", "orgname");
+        $this->assertEquals("orgid", $legalorg->getID());
+        $this->assertEquals("orgtype", $legalorg->getID()->getSchemeID());
+        $this->assertEquals("orgname", $legalorg->getTradingBusinessName());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getLegalOrganization
+     */
+    public function testGetLegalOrganizationAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\LegalOrganizationType
+         */
+        $legalorg = self::$objectHelper->getLegalOrganization(null, null, null);
+        $this->assertNull($legalorg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeContact
+     */
+    public function testGetTradeContactAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeContactType
+         */
+        $tradecontact = self::$objectHelper->getTradeContact("personname", "departmentname", "phone", "fax", "mail");
+        $this->assertEquals("personname", $tradecontact->getPersonName());
+        $this->assertEquals("departmentname", $tradecontact->getDepartmentName());
+        $this->assertEquals("phone", $tradecontact->getTelephoneUniversalCommunication()->getCompleteNumber());
+        $this->assertFalse(self::$objectHelper->methodExists($tradecontact, "getFaxUniversalCommunication"));
+        $this->assertEquals("mail", $tradecontact->getEmailURIUniversalCommunication()->getURIID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeContact
+     */
+    public function testGetTradeContactAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeContactType
+         */
+        $tradecontact = self::$objectHelper->getTradeContact(null, null, null, null, null, null);
+        $this->assertNull($tradecontact);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getUniversalCommunicationType
+     */
+    public function testGetUniversalCommunicationTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType
+         */
+        $commtype = self::$objectHelper->getUniversalCommunicationType("number", "uriid", "smtp");
+        $this->assertEquals("number", $commtype->getCompleteNumber());
+        $this->assertEquals("uriid", $commtype->getURIID());
+        $this->assertEquals("smtp", $commtype->getURIID()->getSchemeID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getUniversalCommunicationType
+     */
+    public function testGetUniversalCommunicationTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\UniversalCommunicationType
+         */
+        $commtype = self::$objectHelper->getUniversalCommunicationType(null, null, null);
+        $this->assertNull($commtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxRegistrationType
+     */
+    public function testGetTaxRegistrationTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TaxRegistrationType
+         */
+        $taxregtype = self::$objectHelper->getTaxRegistrationType("taxregtype", "taxid");
+        $this->assertEquals("taxregtype", $taxregtype->getID()->getSchemeID());
+        $this->assertEquals("taxid", $taxregtype->getID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxRegistrationType
+     */
+    public function testGetTaxRegistrationTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TaxRegistrationType
+         */
+        $taxregtype = self::$objectHelper->getTaxRegistrationType(null, null);
+        $this->assertNull($taxregtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxRegistrationType
+     */
+    public function testGetTaxRegistrationTypeIdNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TaxRegistrationType
+         */
+        $taxregtype = self::$objectHelper->getTaxRegistrationType("taxregtype", null);
+        $this->assertNull($taxregtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxRegistrationType
+     */
+    public function testGetTaxRegistrationTypeTypeNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TaxRegistrationType
+         */
+        $taxregtype = self::$objectHelper->getTaxRegistrationType(null, "taxid");
+        $this->assertNull($taxregtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeDeliveryTermsType
+     */
+    public function testGetTradeDeliveryTermsTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeDeliveryTermsType
+         */
+        $devterms = self::$objectHelper->getTradeDeliveryTermsType('code');
+        $this->assertNull($devterms);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeDeliveryTermsType
+     */
+    public function testGetTradeDeliveryTermsTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeDeliveryTermsType
+         */
+        $devterms = self::$objectHelper->getTradeDeliveryTermsType(null);
+        $this->assertNull($devterms);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getProcuringProjectType
+     */
+    public function testGetProcuringProjectTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\ProcuringProjectType
+         */
+        $project = self::$objectHelper->getProcuringProjectType("projectid", "projectname");
+        $this->assertEquals("projectid", $project->getID());
+        $this->assertEquals("projectname", $project->getName());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getProcuringProjectType
+     */
+    public function testGetProcuringProjectTypeIdNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\ProcuringProjectType
+         */
+        $project = self::$objectHelper->getProcuringProjectType(null, "projectname");
+        $this->assertNull($project);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getProcuringProjectType
+     */
+    public function testGetProcuringProjectTypeNameNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\ProcuringProjectType
+         */
+        $project = self::$objectHelper->getProcuringProjectType("projectid", null);
+        $this->assertNull($project);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getProcuringProjectType
+     */
+    public function testGetProcuringProjectTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\ProcuringProjectType
+         */
+        $project = self::$objectHelper->getProcuringProjectType(null, null);
+        $this->assertNull($project);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getSupplyChainEventType
+     */
+    public function testGetSupplyChainEventTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\SupplyChainEventType
+         */
+        $supplychainevent = self::$objectHelper->getSupplyChainEventType(new \DateTime());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $supplychainevent->getOccurrenceDateTime()->getDateTimeString());
+        $this->assertEquals("102", $supplychainevent->getOccurrenceDateTime()->getDateTimeString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getSupplyChainEventType
+     */
+    public function testGetSupplyChainEventTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\SupplyChainEventType
+         */
+        $supplychainevent = self::$objectHelper->getSupplyChainEventType(null);
+        $this->assertNull($supplychainevent);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementFinancialCardType
+     */
+    public function testGetTradeSettlementFinancialCardTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeSettlementFinancialCardType
+         */
+        $fincard = self::$objectHelper->getTradeSettlementFinancialCardType("type", "id", "name");
+        $this->assertEquals("type", $fincard->getID()->getSchemeID());
+        $this->assertEquals("id", $fincard->getID());
+        $this->assertEquals("name", $fincard->getCardholderName());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementFinancialCardType
+     */
+    public function testGetTradeSettlementFinancialCardTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeSettlementFinancialCardType
+         */
+        $fincard = self::$objectHelper->getTradeSettlementFinancialCardType(null, null, null);
+        $this->assertNull($fincard);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDebtorFinancialAccountType
+     */
+    public function testGetDebtorFinancialAccountTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\DebtorFinancialAccountType
+         */
+        $finacc = self::$objectHelper->getDebtorFinancialAccountType("iban");
+        $this->assertEquals("iban", $finacc->getIBANID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDebtorFinancialAccountType
+     */
+    public function testGetDebtorFinancialAccountTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\DebtorFinancialAccountType
+         */
+        $finacc = self::$objectHelper->getDebtorFinancialAccountType(null);
+        $this->assertNull($finacc);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCreditorFinancialAccountType
+     */
+    public function testGetCreditorFinancialAccountTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\CreditorFinancialAccountType
+         */
+        $finacc = self::$objectHelper->getCreditorFinancialAccountType("iban", "accname", "propid");
+        $this->assertEquals("iban", $finacc->getIBANID());
+        $this->assertEquals("accname", $finacc->getAccountName());
+        $this->assertEquals("propid", $finacc->getProprietaryID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCreditorFinancialAccountType
+     */
+    public function testGetCreditorFinancialAccountTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\CreditorFinancialAccountType
+         */
+        $finacc = self::$objectHelper->getCreditorFinancialAccountType(null, null, null);
+        $this->assertNull($finacc);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCreditorFinancialInstitutionType
+     */
+    public function testGetCreditorFinancialInstitutionTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\CreditorFinancialInstitutionType
+         */
+        $fininst = self::$objectHelper->getCreditorFinancialInstitutionType("bic");
+        $this->assertEquals("bic", $fininst->getBICID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCreditorFinancialInstitutionType
+     */
+    public function testGetCreditorFinancialInstitutionTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\CreditorFinancialInstitutionType
+         */
+        $fininst = self::$objectHelper->getCreditorFinancialInstitutionType(null);
+        $this->assertNull($fininst);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementPaymentMeansType
+     */
+    public function testGetTradeSettlementPaymentMeansTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeSettlementPaymentMeansType
+         */
+        $paymentmeans = self::$objectHelper->getTradeSettlementPaymentMeansType("code", "info");
+        $this->assertEquals("code", $paymentmeans->getTypeCode());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementPaymentMeansType
+     */
+    public function testGetTradeSettlementPaymentMeansTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeSettlementPaymentMeansType
+         */
+        $paymentmeans = self::$objectHelper->getTradeSettlementPaymentMeansType(null, null);
+        $this->assertNull($paymentmeans);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradePaymentTermsType
+     */
+    public function testGetTradePaymentTermsTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradePaymentTermsType
+         */
+        $paymentterms = self::$objectHelper->getTradePaymentTermsType("description", new \DateTime(), "mandate");
+        $this->assertEquals((new \DateTime())->format("Ymd"), $paymentterms->getDueDateDateTime()->getDateTimeString());
+        $this->assertEquals("102", $paymentterms->getDueDateDateTime()->getDateTimeString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradePaymentTermsType
+     */
+    public function testGetTradePaymentTermsTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradePaymentTermsType
+         */
+        $paymentmeans = self::$objectHelper->getTradePaymentTermsType(null, null, null);
+        $this->assertNull($paymentmeans);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradePaymentDiscountTermsType
+     */
+    public function testGetTradePaymentDiscountTermsTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradePaymentDiscountTermsType
+         */
+        $discountterms = self::$objectHelper->getTradePaymentDiscountTermsType(new \DateTime(), 2, "DAY", 1, 1, 1);
+        $this->assertNull($discountterms);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradePaymentDiscountTermsType
+     */
+    public function testGetTradePaymentDiscountTermsTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradePaymentDiscountTermsType
+         */
+        $discountterms = self::$objectHelper->getTradePaymentDiscountTermsType(null, null, null, null, null, null);
+        $this->assertNull($discountterms);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeTaxType
+     */
+    public function testGetTradeTaxTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeTaxType
+         */
+        $tax = self::$objectHelper->getTradeTaxType("category", "type", 100, 19, 19, "reason", "reasoncode", 100, 10, new \DateTime(), "duedatecode");
+        $this->assertEquals("category", $tax->getCategoryCode());
+        $this->assertEquals("type", $tax->getTypeCode());
+        $this->assertEquals(100.0, $tax->getBasisAmount()->value());
+        $this->assertEquals(19.0, $tax->getCalculatedAmount()->value());
+        //$this->assertEquals(19.0, $tax->getRateApplicablePercent()->value());
+        $this->assertEquals("reasoncode", $tax->getExemptionReasonCode());
+        $this->assertEquals("reason", $tax->getExemptionReason());
+        $this->assertFalse(self::$objectHelper->methodExists($tax, "getLineTotalBasisAmount"));
+        $this->assertFalse(self::$objectHelper->methodExists($tax, "getAllowanceChargeBasisAmount"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeTaxType
+     */
+    public function testGetTradeTaxTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeTaxType
+         */
+        $tax = self::$objectHelper->getTradeTaxType(null, null, null, null, null, null, null, null, null, null, null);
+        $this->assertNull($tax);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeAllowanceChargeType
+     */
+    public function testGetTradeAllowanceChargeTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType
+         */
+        $allowancecharge = self::$objectHelper->getTradeAllowanceChargeType(10, true, "taxtype", "taxcategory", 19.0, 1, 2.0, 1.0, 1.0, "C62", "reasoncode", "reason");
+
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\PercentType
+         */
+        $rateapplicablepercent = $allowancecharge->getCategoryTradeTax()->getRateApplicablePercent();
+
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\udt\PercentType
+         */
+        $calculationpercent = $allowancecharge->getCalculationPercent();
+
+        $this->assertEquals(10.0, $allowancecharge->getActualAmount()->value());
+        $this->assertTrue($allowancecharge->getChargeIndicator()->getIndicator());
+        $this->assertEquals("taxtype", $allowancecharge->getCategoryTradeTax()->getTypeCode());
+        $this->assertEquals("taxcategory", $allowancecharge->getCategoryTradeTax()->getCategoryCode());
+        $this->assertEquals(19.0, $rateapplicablepercent->value());
+        $this->assertFalse(self::$objectHelper->methodExists($allowancecharge, "getSequenceNumeric"));
+        $this->assertEquals(2.0, $calculationpercent->value());
+        $this->assertFalse(self::$objectHelper->methodExists($allowancecharge, "getBasisQuantity"));
+        $this->assertFalse(self::$objectHelper->methodExists($allowancecharge, "getBasisQuantity"));
+        $this->assertEquals("reason", $allowancecharge->getReason());
+        $this->assertEquals("reasoncode", $allowancecharge->getReasonCode());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeAllowanceChargeType
+     */
+    public function testGetTradeAllowanceChargeTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeAllowanceChargeType
+         */
+        $allowancecharge = self::$objectHelper->getTradeAllowanceChargeType(null, null, null, null, null, null, null, null, null, null, null, null);
+        $this->assertNull($allowancecharge);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getLogisticsServiceChargeType
+     */
+    public function testGetLogisticsServiceChargeTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\LogisticsServiceChargeType
+         */
+        $logcharge = self::$objectHelper->getLogisticsServiceChargeType("description", 10.0, ["taxtype"], ["taxcategpry"], [19]);
+        $this->assertFalse(self::$objectHelper->methodExists($logcharge, "getDescription"));
+        $this->assertFalse(self::$objectHelper->methodExists($logcharge, "getAppliedAmount"));
+        $this->assertFalse(self::$objectHelper->methodExists($logcharge, "getAppliedTradeTax"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getLogisticsServiceChargeType
+     */
+    public function testGetLogisticsServiceChargeTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\LogisticsServiceChargeType
+         */
+        $logcharge = self::$objectHelper->getLogisticsServiceChargeType(null, null, null, null, null);
+        $this->assertNull($logcharge);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementHeaderMonetarySummationType
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementHeaderMonetarySummationTypeOnly
+     */
+    public function testGetTradeSettlementHeaderMonetarySummationTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeSettlementHeaderMonetarySummationType
+         */
+        $summation = self::$objectHelper->getTradeSettlementHeaderMonetarySummationType(119, 100, 100, 1, 2, 99, 99 * 0.19, 0.0, 10);
+        $this->assertEquals(119.0, $summation->getGrandTotalAmount()->value());
+        $this->assertEquals(100.0, $summation->getDuePayableAmount()->value());
+        $this->assertEquals(100.0, $summation->getLineTotalAmount()->value());
+        $this->assertEquals(1.0, $summation->getChargeTotalAmount()->value());
+        $this->assertEquals(2.0, $summation->getAllowanceTotalAmount()->value());
+        $this->assertEquals(99.0, $summation->getTaxBasisTotalAmount()->value());
+        $this->assertIsArray($summation->getTaxTotalAmount());
+        $this->assertArrayHasKey(0, $summation->getTaxTotalAmount());
+        $this->assertEquals(99.0 * 0.19, $summation->getTaxTotalAmount()[0]->value());
+        $this->assertEquals(0.0, $summation->getRoundingAmount()->value());
+        $this->assertEquals(10.0, $summation->getTotalPrepaidAmount()->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementHeaderMonetarySummationType
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementHeaderMonetarySummationTypeOnly
+     */
+    public function testGetTradeSettlementHeaderMonetarySummationTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeSettlementHeaderMonetarySummationType
+         */
+        $summation = self::$objectHelper->getTradeSettlementHeaderMonetarySummationType(null, null, null, null, null, null, null, null, null);
+        $this->assertNull($summation);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementHeaderMonetarySummationTypeOnly
+     */
+    public function testGetTradeSettlementHeaderMonetarySummationTypeOnly(): void
+    {
+        $summation = self::$objectHelper->getTradeSettlementHeaderMonetarySummationTypeOnly();
+        $this->assertNotNull($summation);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeAccountingAccountType
+     */
+    public function testGetTradeAccountingAccountTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType
+         */
+        $accaccount = self::$objectHelper->getTradeAccountingAccountType("accid", "acctype");
+        $this->assertEquals("accid", $accaccount->getID());
+        $this->assertFalse(self::$objectHelper->methodExists($accaccount, "getTypeCode"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeAccountingAccountType
+     */
+    public function testGetTradeAccountingAccountTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeAccountingAccountType
+         */
+        $accaccount = self::$objectHelper->getTradeAccountingAccountType(null, null);
+        $this->assertNull($accaccount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDocumentLineDocumentType
+     */
+    public function testGetDocumentLineDocumentTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\DocumentLineDocumentType
+         */
+        $doclinedoctype = self::$objectHelper->getDocumentLineDocumentType("lineid");
+        $this->assertEquals("lineid", $doclinedoctype->getLineID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDocumentLineDocumentType
+     */
+    public function testGetDocumentLineDocumentTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\DocumentLineDocumentType
+         */
+        $doclinedoctype = self::$objectHelper->getDocumentLineDocumentType(null);
+        $this->assertNull($doclinedoctype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getSupplyChainTradeLineItemType
+     */
+    public function testGetSupplyChainTradeLineItemTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeLineItemType
+         */
+        $line = self::$objectHelper->getSupplyChainTradeLineItemType("lineid", "linestatuscode", "linestatusreasoncode");
+        $this->assertNotNull($line);
+        $this->assertEquals("lineid", $line->getAssociatedDocumentLineDocument()->getLineID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getSupplyChainTradeLineItemType
+     */
+    public function testGetSupplyChainTradeLineItemTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\SupplyChainTradeLineItemType
+         */
+        $line = self::$objectHelper->getSupplyChainTradeLineItemType(null, null, null);
+        $this->assertNull($line);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeProductType
+     */
+    public function testGetTradeProductTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeProductType
+         */
+        $product = self::$objectHelper->getTradeProductType("name", "description", "sellerid", "buyerid", "globalidtype", "globalid");
+        $this->assertEquals("name", $product->getName());
+        $this->assertEquals("description", $product->getDescription());
+        $this->assertEquals("sellerid", $product->getSellerAssignedID());
+        $this->assertEquals("buyerid", $product->getBuyerAssignedID());
+        $this->assertEquals("globalidtype", $product->getGlobalID()->getSchemeID());
+        $this->assertEquals("globalid", $product->getGlobalID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getProductCharacteristicType
+     */
+    public function testGetProductCharacteristicType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\ProductCharacteristicType
+         */
+        $productCharacteristic = self::$objectHelper->getProductCharacteristicType("typecode", "description", 0, "valuemeasureunit", "value");
+        $this->assertEquals("description", $productCharacteristic->getDescription());
+        $this->assertEquals("value", $productCharacteristic->getValue());
+
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\ProductCharacteristicType
+         */
+        $productCharacteristic = self::$objectHelper->getProductCharacteristicType();
+        $this->assertNull($productCharacteristic);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getProductClassificationType
+     */
+    public function testGetProductClassificationType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\ProductClassificationType
+         */
+        $productClassification = self::$objectHelper->getProductClassificationType("classcode", "classname", "listid", "listversionid");
+        $this->assertEquals("classcode", $productClassification->getClassCode()->value());
+        $this->assertEquals("listid", $productClassification->getClassCode()->getListID());
+        $this->assertEquals("listversionid", $productClassification->getClassCode()->getListVersionID());
+
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\ProductClassificationType
+         */
+        $productClassification = self::$objectHelper->getProductClassificationType();
+        $this->assertNull($productClassification);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getReferencedProductType
+     */
+    public function testGetReferencedProductType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\ReferencedProductType
+         */
+        $referencedProduct = self::$objectHelper->getReferencedProductType("globalid", "globalidtype", "sellerid", "buyerid", "name", "description", 10, "C62");
+        $this->assertNull($referencedProduct, "The referenced product is not available in EN16931 profile");
+
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\ReferencedProductType
+         */
+        $referencedProduct = self::$objectHelper->getReferencedProductType(null, null, null, null, null, null, null, null);
+        $this->assertNull($referencedProduct);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCountryIDType
+     */
+    public function testGetCountryIDType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\qdt\CountryIDType
+         */
+        $countryId = self::$objectHelper->getCountryIDType("DE");
+        $this->assertEquals("DE", $countryId->value());
+
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\qdt\CountryIDType
+         */
+        $countryId = self::$objectHelper->getCountryIDType();
+        $this->assertNull($countryId);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeCountryType
+     */
+    public function testGetTradeCountryType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeCountryType
+         */
+        $tradeCountry = self::$objectHelper->getTradeCountryType("DE");
+        $this->assertEquals("DE", $tradeCountry->getID());
+
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeCountryType
+         */
+        $tradeCountry = self::$objectHelper->getTradeCountryType();
+        $this->assertNull($tradeCountry);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeProductType
+     */
+    public function testGetTradeProductTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeProductType
+         */
+        $product = self::$objectHelper->getTradeProductType(null, null, null, null, null, null);
+        $this->assertNull($product);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradePriceType
+     */
+    public function testGetTradePriceTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradePriceType
+         */
+        $price = self::$objectHelper->getTradePriceType(1.0, 2.0, "C62");
+        $this->assertEquals(1.0, $price->getChargeAmount()->value());
+        $this->assertEquals(2.0, $price->getBasisQuantity()->value());
+        $this->assertEquals("C62", $price->getBasisQuantity()->getUnitCode());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradePriceType
+     */
+    public function testGetTradePriceTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradePriceType
+         */
+        $price = self::$objectHelper->getTradePriceType(null, null, null);
+        $this->assertNull($price);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementLineMonetarySummationType
+     */
+    public function testGetTradeSettlementLineMonetarySummationTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeSettlementLineMonetarySummationType
+         */
+        $summation = self::$objectHelper->getTradeSettlementLineMonetarySummationType(1.0, 2.0);
+        $this->assertEquals(1.0, $summation->getLineTotalAmount()->value());
+        $this->assertFalse(self::$objectHelper->methodExists($summation, "getTotalAllowanceChargeAmount"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementLineMonetarySummationType
+     */
+    public function testGetTradeSettlementLineMonetarySummationTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\en16931\ram\TradeSettlementLineMonetarySummationType
+         */
+        $summation = self::$objectHelper->getTradeSettlementLineMonetarySummationType(null, null);
+        $this->assertNull($summation);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::toDateTime
+     */
+    public function testToDateTimeGeneral(): void
+    {
+        $this->assertEquals("20200202", self::$objectHelper->toDateTime("20200202", "102")->format("Ymd"));
+        $this->assertNull(self::$objectHelper->toDateTime("", "102"));
+        $this->assertNull(self::$objectHelper->toDateTime("20200202", ""));
+        $this->assertNull(self::$objectHelper->toDateTime(null, "102"));
+        $this->assertNull(self::$objectHelper->toDateTime("20200202", null));
+        $this->assertNull(self::$objectHelper->toDateTime("", ""));
+        $this->assertNull(self::$objectHelper->toDateTime(null, null));
+        $this->assertNull(self::$objectHelper->toDateTime("", null));
+        $this->assertNull(self::$objectHelper->toDateTime(null, ""));
+        $this->assertNull(self::$objectHelper->toDateTime(null, null));
+        $this->expectException(ZugferdUnknownDateFormatException::class);
+        $this->expectExceptionMessage("The date format identifier 999 is unknown or not supported");
+        $this->assertNull(self::$objectHelper->toDateTime("20200202", "999"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::toDateTime
+     */
+    public function testToDateTime101(): void
+    {
+        $this->assertEquals("20200202", self::$objectHelper->toDateTime("200202", "101")->format("Ymd"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::toDateTime
+     */
+    public function testToDateTime201(): void
+    {
+        $this->assertEquals("2002021031", self::$objectHelper->toDateTime("2002021031", "201")->format("ymdHi"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::toDateTime
+     */
+    public function testToDateTime202(): void
+    {
+        $this->assertEquals("200202103145", self::$objectHelper->toDateTime("200202103145", "202")->format("ymdHis"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::toDateTime
+     */
+    public function testToDateTime203(): void
+    {
+        $this->assertEquals("202002021031", self::$objectHelper->toDateTime("202002021031", "203")->format("YmdHi"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::toDateTime
+     */
+    public function testToDateTime204(): void
+    {
+        $this->assertEquals("20200202103145", self::$objectHelper->toDateTime("20200202103145", "204")->format("YmdHis"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getRateType
+     */
+    public function testGetRateType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\RateType
+         */
+        $rateType = self::$objectHelper->getRateType(10);
+        $this->assertNull($rateType);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxApplicableTradeCurrencyExchangeType
+     */
+    public function testGetTaxApplicableTradeCurrencyExchangeType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeCurrencyExchangeType
+         */
+        $currencyExchangeType = self::$objectHelper->getTaxApplicableTradeCurrencyExchangeType("EUR", "USD", 10.0, DateTime::createFromFormat("Ymd", "20180305"));
+        $this->assertNull($currencyExchangeType);
+
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeCurrencyExchangeType
+         */
+        $currencyExchangeType = self::$objectHelper->getTaxApplicableTradeCurrencyExchangeType(null, null, null, null);
+        $this->assertNull($currencyExchangeType);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::createClassInstance
+     */
+    public function testCreateClassInstance(): void
+    {
+        $instance = self::$objectHelper->createClassInstance('ram\TradeProductType');
+        $this->assertNotNull($instance);
+        $instance = self::$objectHelper->createClassInstance('ram\LogisticsServiceChargeType');
+        $this->assertNull($instance);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ObjectHelperExtendedTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ObjectHelperExtendedTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ObjectHelperExtendedTest.php	(revision 8435)
@@ -0,0 +1,1776 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use DateTime;
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdObjectHelper;
+use \horstoeko\zugferd\exception\ZugferdUnknownDateFormatException;
+
+class ObjectHelperExtendedTest extends TestCase
+{
+    /**
+     * @var ZugferdObjectHelper
+     */
+    protected static $objectHelper;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$objectHelper = new ZugferdObjectHelper(ZugferdProfiles::PROFILE_EXTENDED);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDocumentCodeType
+     */
+    public function testGetDocumentCodeTypeEmpty(): void
+    {
+        $codeType = self::$objectHelper->getDocumentCodeType();
+        $this->assertNull($codeType);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDocumentCodeType
+     */
+    public function testGetDocumentCodeTypeNotEmpty(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\qdt\DocumentCodeType
+         */
+        $codeType = self::$objectHelper->getDocumentCodeType("380");
+        $this->assertNotNull($codeType);
+        $this->assertEquals("380", $codeType->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType("abc");
+        $this->assertEquals("abc", $idtype->value());
+        $this->assertEquals("", $idtype->getSchemeID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeWithValueAndScheme(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType("abc", "0088");
+        $this->assertEquals("abc", $idtype->value());
+        $this->assertEquals("0088", $idtype->getSchemeID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeAllEmpty(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType("", "");
+        $this->assertNull($idtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType(null, null);
+        $this->assertNull($idtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeEmptyValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType("");
+        $this->assertNull($idtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType(null);
+        $this->assertNull($idtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIdType
+     */
+    public function testGetIdTypeEmptyValueWithScheme(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\IDType
+         */
+        $idtype = self::$objectHelper->getIdType("", "0088");
+        $this->assertNull($idtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTextType
+     */
+    public function testGetTextTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\TextType
+         */
+        $texttype = self::$objectHelper->getTextType("test");
+        $this->assertEquals("test", $texttype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTextType
+     */
+    public function testGetTextTypeAllEmpty(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\TextType
+         */
+        $texttype = self::$objectHelper->getTextType("");
+        $this->assertNull($texttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTextType
+     */
+    public function testGetTextTypeNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\TextType
+         */
+        $texttype = self::$objectHelper->getTextType(null);
+        $this->assertNull($texttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCodeType
+     */
+    public function testGetCodeTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\TextType
+         */
+        $texttype = self::$objectHelper->getCodeType("test");
+        $this->assertEquals("test", $texttype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCodeType2
+     */
+    public function testGetCodeType2WithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\CodeType
+         */
+        $texttype = self::$objectHelper->getCodeType2("test");
+        $this->assertEquals("test", $texttype->value());
+        $this->assertNull($texttype->getListID());
+        $this->assertNull($texttype->getListVersionID());
+
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\CodeType
+         */
+        $texttype = self::$objectHelper->getCodeType2("test", "listid");
+        $this->assertEquals("test", $texttype->value());
+        $this->assertEquals("listid", $texttype->getListID());
+        $this->assertNull($texttype->getListVersionID());
+
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\CodeType
+         */
+        $texttype = self::$objectHelper->getCodeType2("test", "listid", "listversion");
+        $this->assertEquals("test", $texttype->value());
+        $this->assertEquals("listid", $texttype->getListID());
+        $this->assertEquals("listversion", $texttype->getListVersionID());
+
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\CodeType
+         */
+        $texttype = self::$objectHelper->getCodeType2();
+        $this->assertNull($texttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCodeType
+     */
+    public function testGetCodeTypeAllEmpty(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\TextType
+         */
+        $texttype = self::$objectHelper->getCodeType("");
+        $this->assertNull($texttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCodeType
+     */
+    public function testGetCodeTypeNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\TextType
+         */
+        $texttype = self::$objectHelper->getCodeType(null);
+        $this->assertNull($texttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIndicatorType
+     */
+    public function testGetIndicatorTypeWithTrueValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\IndicatorType
+         */
+        $indicatortype = self::$objectHelper->getIndicatorType(true);
+        $this->assertTrue($indicatortype->getIndicator());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIndicatorType
+     */
+    public function testGetIndicatorTypeWithFalseValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\IndicatorType
+         */
+        $indicatortype = self::$objectHelper->getIndicatorType(false);
+        $this->assertNotNull($indicatortype);
+        $this->assertEquals(false, $indicatortype->getIndicator());
+
+        $indicatortype = self::$objectHelper->getIndicatorType(true);
+        $this->assertNotNull($indicatortype);
+        $this->assertEquals(true, $indicatortype->getIndicator());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getIndicatorType
+     */
+    public function testGetIndicatorTypeNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\IndicatorType
+         */
+        $indicatortype = self::$objectHelper->getIndicatorType(null);
+        $this->assertNull($indicatortype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getNoteType
+     */
+    public function testGetNoteTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\NoteType
+         */
+        $notetype = self::$objectHelper->getNoteType("content", "contentcode", "subjectcode");
+        $this->assertEquals("content", $notetype->getContent());
+        $this->assertEquals("subjectcode", $notetype->getSubjectCode()->value());
+        $this->assertEquals("contentcode", $notetype->getContentCode()->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getNoteType
+     */
+    public function testGetNoteTypeAllNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\NoteType
+         */
+        $notetype = self::$objectHelper->getNoteType(null, null, null);
+        $this->assertNull($notetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getNoteType
+     */
+    public function testGetNoteTypeWithEmptyContent(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\NoteType
+         */
+        $notetype = self::$objectHelper->getNoteType("", "", "");
+        $this->assertNull($notetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getNoteType
+     */
+    public function testGetNoteTypeWithEmptyContentButWithSubjectCode(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\NoteType
+         */
+        $notetype = self::$objectHelper->getNoteType("", "", "subjectcode");
+        $this->assertNull($notetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getFormattedDateTimeType
+     */
+    public function testGetFormattedDateTimeType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType
+         */
+        $datetimetype = self::$objectHelper->getFormattedDateTimeType(new \DateTime());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $datetimetype->getDateTimeString());
+        $this->assertEquals("102", $datetimetype->getDateTimeString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getFormattedDateTimeType
+     */
+    public function testGetFormattedDateTimeTypeWithNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\qdt\FormattedDateTimeType
+         */
+        $datetimetype = self::$objectHelper->getFormattedDateTimeType(null);
+        $this->assertNull($datetimetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDateTimeType
+     */
+    public function testGetDateTimeType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\DateTimeType
+         */
+        $datetimetype = self::$objectHelper->getDateTimeType(new \DateTime());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $datetimetype->getDateTimeString());
+        $this->assertEquals("102", $datetimetype->getDateTimeString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDateTimeType
+     */
+    public function testGetDateTimeTypeWithNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\DateTimeType
+         */
+        $datetimetype = self::$objectHelper->getDateTimeType(null);
+        $this->assertNull($datetimetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDateType
+     */
+    public function testGetDateType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\DateType
+         */
+        $datetimetype = self::$objectHelper->getDateType(new \DateTime());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $datetimetype->getDateString());
+        $this->assertEquals("102", $datetimetype->getDateString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDateType
+     */
+    public function testGetDateTypeWithNullValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\DateType
+         */
+        $datetimetype = self::$objectHelper->getDateType(null);
+        $this->assertNull($datetimetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getAmountType
+     */
+    public function testGetAmountTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\AmountType
+         */
+        $amounttype = self::$objectHelper->getAmountType(100.0);
+        $this->assertEquals(100.0, $amounttype->value());
+        $this->assertEquals("", $amounttype->getCurrencyID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getAmountType
+     */
+    public function testGetAmountTypeWithValueAndCurrency(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\AmountType
+         */
+        $amounttype = self::$objectHelper->getAmountType(100.0, "EUR");
+        $this->assertEquals(100.0, $amounttype->value());
+        $this->assertEquals("EUR", $amounttype->getCurrencyID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getAmountType
+     */
+    public function testGetAmountTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\AmountType
+         */
+        $amounttype = self::$objectHelper->getAmountType(null, null);
+        $this->assertNull($amounttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getAmountType
+     */
+    public function testGetAmountTypeWithValueAndEmptyCurrency(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\AmountType
+         */
+        $amounttype = self::$objectHelper->getAmountType(100, "");
+        $this->assertEquals(100.0, $amounttype->value());
+        $this->assertEquals("", $amounttype->getCurrencyID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getAmountType
+     */
+    public function testGetAmountTypeWithNullValueAndCurrency(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\AmountType
+         */
+        $amounttype = self::$objectHelper->getAmountType(null, "EUR");
+        $this->assertNull($amounttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getPercentType
+     */
+    public function testGetPercentTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\PercentType
+         */
+        $percenttype = self::$objectHelper->getPercentType(100.0);
+        $this->assertEquals(100.0, $percenttype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getPercentType
+     */
+    public function testGetPercentTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\PercentType
+         */
+        $percenttype = self::$objectHelper->getPercentType(null);
+        $this->assertNull($percenttype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getQuantityType
+     */
+    public function testGetQuantityTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\QuantityType
+         */
+        $quantitytype = self::$objectHelper->getQuantityType(100.0);
+        $this->assertEquals(100.0, $quantitytype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getQuantityType
+     */
+    public function testGetQuantityTypeWithValueAndUnitCode(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\QuantityType
+         */
+        $quantitytype = self::$objectHelper->getQuantityType(100.0, "C62");
+        $this->assertEquals(100.0, $quantitytype->value());
+        $this->assertEquals("C62", $quantitytype->getUnitCode());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getQuantityType
+     */
+    public function testGetQuantityTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\QuantityType
+         */
+        $quantitytype = self::$objectHelper->getQuantityType(null, null);
+        $this->assertNull($quantitytype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getQuantityType
+     */
+    public function testGetQuantityTypeWithNullValueAndUnitCode(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\QuantityType
+         */
+        $quantitytype = self::$objectHelper->getQuantityType(null, "C62");
+        $this->assertNull($quantitytype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getMeasureType
+     */
+    public function testGetMeasureTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\MeasureType
+         */
+        $measuretype = self::$objectHelper->getMeasureType(100.0);
+        $this->assertEquals(100.0, $measuretype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getMeasureType
+     */
+    public function testGetMeasureTypeWithValueAndUnitCode(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\MeasureType
+         */
+        $measuretype = self::$objectHelper->getMeasureType(100.0, "DAY");
+        $this->assertEquals(100.0, $measuretype->value());
+        $this->assertEquals("DAY", $measuretype->getUnitCode());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getMeasureType
+     */
+    public function testGetMeasureTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\MeasureType
+         */
+        $measuretype = self::$objectHelper->getMeasureType(null, null);
+        $this->assertNull($measuretype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getMeasureType
+     */
+    public function testGetMeasureTypeWithNullValueAndUnitCode(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\MeasureType
+         */
+        $measuretype = self::$objectHelper->getMeasureType(null, "DAY");
+        $this->assertNull($measuretype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getNumericType
+     */
+    public function testGetNumericTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\NumericType
+         */
+        $numerictype = self::$objectHelper->getNumericType(100.0);
+        $this->assertEquals(100, $numerictype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getNumericType
+     */
+    public function testGetNumericTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\NumericType
+         */
+        $numerictype = self::$objectHelper->getNumericType(null);
+        $this->assertNull($numerictype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxCategoryCodeType
+     */
+    public function testGetTaxCategoryCodeTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\qdt\TaxCategoryCodeType
+         */
+        $taxcategorycodetype = self::$objectHelper->getTaxCategoryCodeType("VAT");
+        $this->assertEquals("VAT", $taxcategorycodetype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxCategoryCodeType
+     */
+    public function testGetTaxCategoryCodeTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\qdt\TaxCategoryCodeType
+         */
+        $taxcategorycodetype = self::$objectHelper->getTaxCategoryCodeType(null);
+        $this->assertNull($taxcategorycodetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxTypeCodeType
+     */
+    public function testGetTaxTypeCodeTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\qdt\TaxTypeCodeType
+         */
+        $taxtypecodetype = self::$objectHelper->getTaxTypeCodeType("S");
+        $this->assertEquals("S", $taxtypecodetype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxTypeCodeType
+     */
+    public function testGetTaxTypeCodeTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\qdt\TaxTypeCodeType
+         */
+        $taxtypecodetype = self::$objectHelper->getTaxTypeCodeType(null);
+        $this->assertNull($taxtypecodetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTimeReferenceCodeType
+     */
+    public function testGetTimeReferenceCodeTypeWithValue(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\qdt\TimeReferenceCodeType
+         */
+        $timereferencecodetype = self::$objectHelper->getTimeReferenceCodeType("REF");
+        $this->assertEquals("REF", $timereferencecodetype->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTimeReferenceCodeType
+     */
+    public function testGetTimeReferenceCodeTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\qdt\TimeReferenceCodeType
+         */
+        $timereferencecodetype = self::$objectHelper->getTimeReferenceCodeType(null);
+        $this->assertNull($timereferencecodetype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getSpecifiedPeriodType
+     */
+    public function testGetSpecifiedPeriodTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType
+         */
+        $periodtype = self::$objectHelper->getSpecifiedPeriodType(new \DateTime(), new \DateTime(), new \DateTime(), "Description");
+        $this->assertEquals("Description", $periodtype->getDescription());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $periodtype->getCompleteDateTime()->getDateTimeString());
+        $this->assertEquals("102", $periodtype->getCompleteDateTime()->getDateTimeString()->getFormat());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $periodtype->getStartDateTime()->getDateTimeString());
+        $this->assertEquals("102", $periodtype->getStartDateTime()->getDateTimeString()->getFormat());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $periodtype->getEndDateTime()->getDateTimeString());
+        $this->assertEquals("102", $periodtype->getEndDateTime()->getDateTimeString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getSpecifiedPeriodType
+     */
+    public function testGetSpecifiedPeriodTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\SpecifiedPeriodType
+         */
+        $periodtype = self::$objectHelper->getSpecifiedPeriodType(null, null, null, null);
+        $this->assertNull($periodtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getBinaryObjectType
+     */
+    public function testGetBinaryObjectTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\BinaryObjectType
+         */
+        $binaryobject = self::$objectHelper->getBinaryObjectType("data", "application/pdf", "mypdf.pdf");
+        $this->assertEquals("data", $binaryobject->value());
+        $this->assertEquals("application/pdf", $binaryobject->getMimeCode());
+        $this->assertEquals("mypdf.pdf", $binaryobject->getFilename());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getBinaryObjectType
+     */
+    public function testGetBinaryObjectTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\BinaryObjectType
+         */
+        $binaryobject = self::$objectHelper->getBinaryObjectType(null, null, null);
+        $this->assertNull($binaryobject);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getBinaryObjectType
+     */
+    public function testGetBinaryObjectTypeDataNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\BinaryObjectType
+         */
+        $binaryobject = self::$objectHelper->getBinaryObjectType(null, "application/pdf", "mypdf.pdf");
+        $this->assertNull($binaryobject);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getBinaryObjectType
+     */
+    public function testGetBinaryObjectTypeMimeTypeNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\BinaryObjectType
+         */
+        $binaryobject = self::$objectHelper->getBinaryObjectType("data", null, "mypdf.pdf");
+        $this->assertNull($binaryobject);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getBinaryObjectType
+     */
+    public function testGetBinaryObjectTypeFilenameNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\BinaryObjectType
+         */
+        $binaryobject = self::$objectHelper->getBinaryObjectType("data", "application/pdf", null);
+        $this->assertNull($binaryobject);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getReferencedDocumentType
+     */
+    public function testGetReferencedDocumentTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+         */
+        $refdoctype = self::$objectHelper->getReferencedDocumentType("issuerid", "uriid", "lineid", "typecode", "name", "reftypcode", new \DateTime(), dirname(__FILE__) . "/../assets/en16931_allowancecharge.xml");
+        $this->assertEquals("issuerid", $refdoctype->getIssuerAssignedID()->value());
+        $this->assertEquals("uriid", $refdoctype->getURIID()->value());
+        $this->assertEquals("lineid", $refdoctype->getLineID()->value());
+        $this->assertEquals("typecode", $refdoctype->getTypeCode());
+        $this->assertIsArray($refdoctype->getName());
+        $this->assertArrayHasKey(0, $refdoctype->getName());
+        $this->assertEquals("name", $refdoctype->getName()[0]);
+        $this->assertEquals("reftypcode", $refdoctype->getReferenceTypeCode());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $refdoctype->getFormattedIssueDateTime()->getDateTimeString());
+        $this->assertEquals("102", $refdoctype->getFormattedIssueDateTime()->getDateTimeString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getReferencedDocumentType
+     */
+    public function testGetReferencedDocumentTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\ReferencedDocumentType
+         */
+        $refdoctype = self::$objectHelper->getReferencedDocumentType(null, null, null, null, null, null, null, null, null);
+        $this->assertNull($refdoctype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCrossIndustryInvoice
+     */
+    public function testCrossIndustryInvoice(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\rsm\CrossIndustryInvoice
+         */
+        $crossindusty = self::$objectHelper->getCrossIndustryInvoice();
+        $this->assertNotNull($crossindusty);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeParty
+     */
+    public function testGetTradePartyAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType
+         */
+        $tradeparty = self::$objectHelper->getTradeParty("name", "id", "description");
+        $this->assertEquals("name", $tradeparty->getName());
+        $this->assertIsArray($tradeparty->getID());
+        $this->assertArrayHasKey(0, $tradeparty->getID());
+        $this->assertEquals("id", $tradeparty->getID()[0]);
+        $this->assertEquals("description", $tradeparty->getDescription());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeParty
+     */
+    public function testGetTradePartyNullValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradePartyType
+         */
+        $tradeparty = self::$objectHelper->getTradeParty(null, null, null);
+        $this->assertNull($tradeparty);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeAddress
+     */
+    public function testGetTradeAddressAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeAddressType
+         */
+        $tradeaddress = self::$objectHelper->getTradeAddress("lineone", "linetwo", "linethree", "00000", "city", "country", "county");
+        $this->assertEquals("lineone", $tradeaddress->getLineOne());
+        $this->assertEquals("linetwo", $tradeaddress->getLineTwo());
+        $this->assertEquals("linethree", $tradeaddress->getLineThree());
+        $this->assertEquals("00000", $tradeaddress->getPostcodeCode());
+        $this->assertEquals("city", $tradeaddress->getCityName());
+        $this->assertEquals("country", $tradeaddress->getCountryID());
+        $this->assertIsArray($tradeaddress->getCountrySubDivisionName());
+        $this->assertArrayHasKey(0, $tradeaddress->getCountrySubDivisionName());
+        $this->assertEquals("county", $tradeaddress->getCountrySubDivisionName()[0]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeAddress
+     */
+    public function testGetTradeAddressAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeAddressType
+         */
+        $tradeaddress = self::$objectHelper->getTradeAddress(null, null, null, null, null, null, null);
+        $this->assertNull($tradeaddress);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getLegalOrganization
+     */
+    public function testGetLegalOrganizationAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\LegalOrganizationType
+         */
+        $legalorg = self::$objectHelper->getLegalOrganization("orgid", "orgtype", "orgname");
+        $this->assertEquals("orgid", $legalorg->getID());
+        $this->assertEquals("orgtype", $legalorg->getID()->getSchemeID());
+        $this->assertEquals("orgname", $legalorg->getTradingBusinessName());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getLegalOrganization
+     */
+    public function testGetLegalOrganizationAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\LegalOrganizationType
+         */
+        $legalorg = self::$objectHelper->getLegalOrganization(null, null, null);
+        $this->assertNull($legalorg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeContact
+     */
+    public function testGetTradeContactAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeContactType
+         */
+        $tradecontact = self::$objectHelper->getTradeContact("personname", "departmentname", "phone", "fax", "mail");
+        $this->assertEquals("personname", $tradecontact->getPersonName());
+        $this->assertEquals("departmentname", $tradecontact->getDepartmentName());
+        $this->assertEquals("phone", $tradecontact->getTelephoneUniversalCommunication()->getCompleteNumber());
+        $this->assertEquals("fax", $tradecontact->getFaxUniversalCommunication()->getCompleteNumber());
+        $this->assertEquals("mail", $tradecontact->getEmailURIUniversalCommunication()->getURIID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeContact
+     */
+    public function testGetTradeContactAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeContactType
+         */
+        $tradecontact = self::$objectHelper->getTradeContact(null, null, null, null, null, null);
+        $this->assertNull($tradecontact);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getUniversalCommunicationType
+     */
+    public function testGetUniversalCommunicationTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType
+         */
+        $commtype = self::$objectHelper->getUniversalCommunicationType("number", "uriid", "smtp");
+        $this->assertEquals("number", $commtype->getCompleteNumber());
+        $this->assertEquals("uriid", $commtype->getURIID());
+        $this->assertEquals("smtp", $commtype->getURIID()->getSchemeID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getUniversalCommunicationType
+     */
+    public function testGetUniversalCommunicationTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\UniversalCommunicationType
+         */
+        $commtype = self::$objectHelper->getUniversalCommunicationType(null, null, null);
+        $this->assertNull($commtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxRegistrationType
+     */
+    public function testGetTaxRegistrationTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TaxRegistrationType
+         */
+        $taxregtype = self::$objectHelper->getTaxRegistrationType("taxregtype", "taxid");
+        $this->assertEquals("taxregtype", $taxregtype->getID()->getSchemeID());
+        $this->assertEquals("taxid", $taxregtype->getID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxRegistrationType
+     */
+    public function testGetTaxRegistrationTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TaxRegistrationType
+         */
+        $taxregtype = self::$objectHelper->getTaxRegistrationType(null, null);
+        $this->assertNull($taxregtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxRegistrationType
+     */
+    public function testGetTaxRegistrationTypeIdNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TaxRegistrationType
+         */
+        $taxregtype = self::$objectHelper->getTaxRegistrationType("taxregtype", null);
+        $this->assertNull($taxregtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxRegistrationType
+     */
+    public function testGetTaxRegistrationTypeTypeNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TaxRegistrationType
+         */
+        $taxregtype = self::$objectHelper->getTaxRegistrationType(null, "taxid");
+        $this->assertNull($taxregtype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeDeliveryTermsType
+     */
+    public function testGetTradeDeliveryTermsTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeDeliveryTermsType
+         */
+        $devterms = self::$objectHelper->getTradeDeliveryTermsType('code');
+        $this->assertEquals("code", $devterms->getDeliveryTypeCode());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeDeliveryTermsType
+     */
+    public function testGetTradeDeliveryTermsTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeDeliveryTermsType
+         */
+        $devterms = self::$objectHelper->getTradeDeliveryTermsType(null);
+        $this->assertNull($devterms);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getProcuringProjectType
+     */
+    public function testGetProcuringProjectTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\ProcuringProjectType
+         */
+        $project = self::$objectHelper->getProcuringProjectType("projectid", "projectname");
+        $this->assertEquals("projectid", $project->getID());
+        $this->assertEquals("projectname", $project->getName());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getProcuringProjectType
+     */
+    public function testGetProcuringProjectTypeIdNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\ProcuringProjectType
+         */
+        $project = self::$objectHelper->getProcuringProjectType(null, "projectname");
+        $this->assertNull($project);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getProcuringProjectType
+     */
+    public function testGetProcuringProjectTypeNameNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\ProcuringProjectType
+         */
+        $project = self::$objectHelper->getProcuringProjectType("projectid", null);
+        $this->assertNull($project);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getProcuringProjectType
+     */
+    public function testGetProcuringProjectTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\ProcuringProjectType
+         */
+        $project = self::$objectHelper->getProcuringProjectType(null, null);
+        $this->assertNull($project);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getSupplyChainEventType
+     */
+    public function testGetSupplyChainEventTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\SupplyChainEventType
+         */
+        $supplychainevent = self::$objectHelper->getSupplyChainEventType(new \DateTime());
+        $this->assertEquals((new \DateTime())->format("Ymd"), $supplychainevent->getOccurrenceDateTime()->getDateTimeString());
+        $this->assertEquals("102", $supplychainevent->getOccurrenceDateTime()->getDateTimeString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getSupplyChainEventType
+     */
+    public function testGetSupplyChainEventTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\SupplyChainEventType
+         */
+        $supplychainevent = self::$objectHelper->getSupplyChainEventType(null);
+        $this->assertNull($supplychainevent);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementFinancialCardType
+     */
+    public function testGetTradeSettlementFinancialCardTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeSettlementFinancialCardType
+         */
+        $fincard = self::$objectHelper->getTradeSettlementFinancialCardType("type", "id", "name");
+        $this->assertEquals("type", $fincard->getID()->getSchemeID());
+        $this->assertEquals("id", $fincard->getID());
+        $this->assertEquals("name", $fincard->getCardholderName());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementFinancialCardType
+     */
+    public function testGetTradeSettlementFinancialCardTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeSettlementFinancialCardType
+         */
+        $fincard = self::$objectHelper->getTradeSettlementFinancialCardType(null, null, null);
+        $this->assertNull($fincard);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDebtorFinancialAccountType
+     */
+    public function testGetDebtorFinancialAccountTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\DebtorFinancialAccountType
+         */
+        $finacc = self::$objectHelper->getDebtorFinancialAccountType("iban");
+        $this->assertEquals("iban", $finacc->getIBANID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDebtorFinancialAccountType
+     */
+    public function testGetDebtorFinancialAccountTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\DebtorFinancialAccountType
+         */
+        $finacc = self::$objectHelper->getDebtorFinancialAccountType(null);
+        $this->assertNull($finacc);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCreditorFinancialAccountType
+     */
+    public function testGetCreditorFinancialAccountTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\CreditorFinancialAccountType
+         */
+        $finacc = self::$objectHelper->getCreditorFinancialAccountType("iban", "accname", "propid");
+        $this->assertEquals("iban", $finacc->getIBANID());
+        $this->assertEquals("accname", $finacc->getAccountName());
+        $this->assertEquals("propid", $finacc->getProprietaryID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCreditorFinancialAccountType
+     */
+    public function testGetCreditorFinancialAccountTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\CreditorFinancialAccountType
+         */
+        $finacc = self::$objectHelper->getCreditorFinancialAccountType(null, null, null);
+        $this->assertNull($finacc);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCreditorFinancialInstitutionType
+     */
+    public function testGetCreditorFinancialInstitutionTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\CreditorFinancialInstitutionType
+         */
+        $fininst = self::$objectHelper->getCreditorFinancialInstitutionType("bic");
+        $this->assertEquals("bic", $fininst->getBICID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getCreditorFinancialInstitutionType
+     */
+    public function testGetCreditorFinancialInstitutionTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\CreditorFinancialInstitutionType
+         */
+        $fininst = self::$objectHelper->getCreditorFinancialInstitutionType(null);
+        $this->assertNull($fininst);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementPaymentMeansType
+     */
+    public function testGetTradeSettlementPaymentMeansTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeSettlementPaymentMeansType
+         */
+        $paymentmeans = self::$objectHelper->getTradeSettlementPaymentMeansType("code", "info");
+        $this->assertEquals("code", $paymentmeans->getTypeCode());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementPaymentMeansType
+     */
+    public function testGetTradeSettlementPaymentMeansTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeSettlementPaymentMeansType
+         */
+        $paymentmeans = self::$objectHelper->getTradeSettlementPaymentMeansType(null, null);
+        $this->assertNull($paymentmeans);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradePaymentTermsType
+     */
+    public function testGetTradePaymentTermsTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradePaymentTermsType
+         */
+        $paymentterms = self::$objectHelper->getTradePaymentTermsType("description", new \DateTime(), "mandate");
+        $this->assertEquals((new \DateTime())->format("Ymd"), $paymentterms->getDueDateDateTime()->getDateTimeString());
+        $this->assertEquals("102", $paymentterms->getDueDateDateTime()->getDateTimeString()->getFormat());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradePaymentTermsType
+     */
+    public function testGetTradePaymentTermsTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradePaymentTermsType
+         */
+        $paymentmeans = self::$objectHelper->getTradePaymentTermsType(null, null, null);
+        $this->assertNull($paymentmeans);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradePaymentDiscountTermsType
+     */
+    public function testGetTradePaymentDiscountTermsTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradePaymentDiscountTermsType
+         */
+        $discountterms = self::$objectHelper->getTradePaymentDiscountTermsType(new \DateTime(), 2, "DAY", 1, 1, 1);
+
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\PercentType
+         */
+        $calculationpercent = $discountterms->getCalculationPercent();
+
+        $this->assertEquals((new \DateTime())->format("Ymd"), $discountterms->getBasisDateTime()->getDateTimeString());
+        $this->assertEquals("102", $discountterms->getBasisDateTime()->getDateTimeString()->getFormat());
+        $this->assertEquals(2, $discountterms->getBasisPeriodMeasure()->value());
+        $this->assertEquals("DAY", $discountterms->getBasisPeriodMeasure()->getUnitCode());
+        $this->assertEquals(1, $discountterms->getBasisAmount()->value());
+        $this->assertEquals(1, $calculationpercent->value());
+        $this->assertEquals(1, $discountterms->getActualDiscountAmount()->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradePaymentDiscountTermsType
+     */
+    public function testGetTradePaymentDiscountTermsTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradePaymentDiscountTermsType
+         */
+        $discountterms = self::$objectHelper->getTradePaymentDiscountTermsType(null, null, null, null, null, null);
+        $this->assertNull($discountterms);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeTaxType
+     */
+    public function testGetTradeTaxTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeTaxType
+         */
+        $tax = self::$objectHelper->getTradeTaxType("category", "type", 100, 19, 19, "reason", "reasoncode", 100, 10, new \DateTime(), "duedatecode");
+
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\PercentType
+         */
+        $rateapplicablepercent = $tax->getRateApplicablePercent();
+
+        $this->assertEquals("category", $tax->getCategoryCode());
+        $this->assertEquals("type", $tax->getTypeCode());
+        $this->assertEquals(100.0, $tax->getBasisAmount()->value());
+        $this->assertEquals(19.0, $tax->getCalculatedAmount()->value());
+        $this->assertEquals(19.0, $rateapplicablepercent->value());
+        $this->assertEquals("reasoncode", $tax->getExemptionReasonCode());
+        $this->assertEquals("reason", $tax->getExemptionReason());
+        $this->assertEquals(100, $tax->getLineTotalBasisAmount()->value());
+        $this->assertEquals(10, $tax->getAllowanceChargeBasisAmount()->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeTaxType
+     */
+    public function testGetTradeTaxTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeTaxType
+         */
+        $tax = self::$objectHelper->getTradeTaxType(null, null, null, null, null, null, null, null, null, null, null);
+        $this->assertNull($tax);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeAllowanceChargeType
+     */
+    public function testGetTradeAllowanceChargeTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType
+         */
+        $allowancecharge = self::$objectHelper->getTradeAllowanceChargeType(10, true, "taxtype", "taxcategory", 19.0, 1, 2.0, 1.0, 1.0, "C62", "reasoncode", "reason");
+
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\PercentType
+         */
+        $rateapplicablepercent = $allowancecharge->getCategoryTradeTax()->getRateApplicablePercent();
+
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\PercentType
+         */
+        $calculationpercent = $allowancecharge->getCalculationPercent();
+
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\NumericType
+         */
+        $sequenceNumeric = $allowancecharge->getCalculationPercent();
+
+        $this->assertEquals(10.0, $allowancecharge->getActualAmount()->value());
+        $this->assertTrue($allowancecharge->getChargeIndicator()->getIndicator());
+        $this->assertEquals("taxtype", $allowancecharge->getCategoryTradeTax()->getTypeCode());
+        $this->assertEquals("taxcategory", $allowancecharge->getCategoryTradeTax()->getCategoryCode());
+        $this->assertEquals(19.0, $rateapplicablepercent->value());
+        $this->assertEquals(2, $sequenceNumeric->value());
+        $this->assertEquals(2.0, $calculationpercent->value());
+        $this->assertEquals(1.0, $allowancecharge->getBasisQuantity()->value());
+        $this->assertEquals("C62", $allowancecharge->getBasisQuantity()->getUnitCode());
+        $this->assertEquals("reason", $allowancecharge->getReason());
+        $this->assertEquals("reasoncode", $allowancecharge->getReasonCode());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeAllowanceChargeType
+     */
+    public function testGetTradeAllowanceChargeTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeAllowanceChargeType
+         */
+        $allowancecharge = self::$objectHelper->getTradeAllowanceChargeType(null, null, null, null, null, null, null, null, null, null, null, null);
+        $this->assertNull($allowancecharge);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getLogisticsServiceChargeType
+     */
+    public function testGetLogisticsServiceChargeTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\LogisticsServiceChargeType
+         */
+        $logcharge = self::$objectHelper->getLogisticsServiceChargeType("description", 10.0, ["taxtype"], ["taxcategpry"], [19]);
+        $this->assertEquals("description", $logcharge->getDescription());
+        $this->assertEquals(10.0, $logcharge->getAppliedAmount()->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getLogisticsServiceChargeType
+     */
+    public function testGetLogisticsServiceChargeTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\LogisticsServiceChargeType
+         */
+        $logcharge = self::$objectHelper->getLogisticsServiceChargeType(null, null, null, null, null);
+        $this->assertNull($logcharge);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementHeaderMonetarySummationType
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementHeaderMonetarySummationTypeOnly
+     */
+    public function testGetTradeSettlementHeaderMonetarySummationTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeSettlementHeaderMonetarySummationType
+         */
+        $summation = self::$objectHelper->getTradeSettlementHeaderMonetarySummationType(119, 100, 100, 1, 2, 99, 99 * 0.19, 0.0, 10);
+        $this->assertIsArray($summation->getGrandTotalAmount());
+        $this->assertArrayHasKey(0, $summation->getGrandTotalAmount());
+        $this->assertEquals(119.0, $summation->getGrandTotalAmount()[0]->value());
+        $this->assertEquals(100.0, $summation->getDuePayableAmount()->value());
+        $this->assertEquals(100.0, $summation->getLineTotalAmount()->value());
+        $this->assertEquals(1.0, $summation->getChargeTotalAmount()->value());
+        $this->assertEquals(2.0, $summation->getAllowanceTotalAmount()->value());
+        $this->assertIsArray($summation->getTaxBasisTotalAmount());
+        $this->assertArrayHasKey(0, $summation->getTaxBasisTotalAmount());
+        $this->assertEquals(99.0, $summation->getTaxBasisTotalAmount()[0]->value());
+        $this->assertIsArray($summation->getTaxTotalAmount());
+        $this->assertArrayHasKey(0, $summation->getTaxTotalAmount());
+        $this->assertEquals(99.0 * 0.19, $summation->getTaxTotalAmount()[0]->value());
+        $this->assertEquals(0.0, $summation->getRoundingAmount()->value());
+        $this->assertEquals(10.0, $summation->getTotalPrepaidAmount()->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementHeaderMonetarySummationType
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementHeaderMonetarySummationTypeOnly
+     */
+    public function testGetTradeSettlementHeaderMonetarySummationTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeSettlementHeaderMonetarySummationType
+         */
+        $summation = self::$objectHelper->getTradeSettlementHeaderMonetarySummationType(null, null, null, null, null, null, null, null, null);
+        $this->assertNull($summation);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementHeaderMonetarySummationTypeOnly
+     */
+    public function testGetTradeSettlementHeaderMonetarySummationTypeOnly(): void
+    {
+        $summation = self::$objectHelper->getTradeSettlementHeaderMonetarySummationTypeOnly();
+        $this->assertNotNull($summation);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeAccountingAccountType
+     */
+    public function testGetTradeAccountingAccountTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType
+         */
+        $accaccount = self::$objectHelper->getTradeAccountingAccountType("accid", "acctype");
+        $this->assertEquals("accid", $accaccount->getID());
+        $this->assertEquals("acctype", $accaccount->getTypeCode());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeAccountingAccountType
+     */
+    public function testGetTradeAccountingAccountTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeAccountingAccountType
+         */
+        $accaccount = self::$objectHelper->getTradeAccountingAccountType(null, null);
+        $this->assertNull($accaccount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDocumentLineDocumentType
+     */
+    public function testGetDocumentLineDocumentTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\DocumentLineDocumentType
+         */
+        $doclinedoctype = self::$objectHelper->getDocumentLineDocumentType("lineid");
+        $this->assertEquals("lineid", $doclinedoctype->getLineID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getDocumentLineDocumentType
+     */
+    public function testGetDocumentLineDocumentTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\DocumentLineDocumentType
+         */
+        $doclinedoctype = self::$objectHelper->getDocumentLineDocumentType(null);
+        $this->assertNull($doclinedoctype);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getSupplyChainTradeLineItemType
+     */
+    public function testGetSupplyChainTradeLineItemTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\SupplyChainTradeLineItemType
+         */
+        $line = self::$objectHelper->getSupplyChainTradeLineItemType("lineid", "linestatuscode", "linestatusreasoncode");
+        $this->assertNotNull($line);
+        $this->assertEquals("lineid", $line->getAssociatedDocumentLineDocument()->getLineID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getSupplyChainTradeLineItemType
+     */
+    public function testGetSupplyChainTradeLineItemTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\SupplyChainTradeLineItemType
+         */
+        $line = self::$objectHelper->getSupplyChainTradeLineItemType(null, null, null);
+        $this->assertNull($line);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeProductType
+     */
+    public function testGetTradeProductTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeProductType
+         */
+        $product = self::$objectHelper->getTradeProductType("name", "description", "sellerid", "buyerid", "globalidtype", "globalid");
+        $this->assertEquals("name", $product->getName());
+        $this->assertEquals("description", $product->getDescription());
+        $this->assertEquals("sellerid", $product->getSellerAssignedID());
+        $this->assertEquals("buyerid", $product->getBuyerAssignedID());
+        $this->assertEquals("globalidtype", $product->getGlobalID()->getSchemeID());
+        $this->assertEquals("globalid", $product->getGlobalID());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeProductType
+     */
+    public function testGetTradeProductTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeProductType
+         */
+        $product = self::$objectHelper->getTradeProductType(null, null, null, null, null, null);
+        $this->assertNull($product);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getProductCharacteristicType
+     */
+    public function testGetProductCharacteristicType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\ProductCharacteristicType
+         */
+        $productCharacteristic = self::$objectHelper->getProductCharacteristicType("typecode", "description", 10.2, "valuemeasureunit", "value");
+        $this->assertEquals("description", $productCharacteristic->getDescription());
+        $this->assertEquals("value", $productCharacteristic->getValue());
+        $this->assertEquals(10.2, $productCharacteristic->getValueMeasure()->value());
+        $this->assertEquals("valuemeasureunit", $productCharacteristic->getValueMeasure()->getUnitCode());
+        $this->assertEquals("typecode", $productCharacteristic->getTypeCode()->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getProductClassificationType
+     */
+    public function testGetProductClassificationType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\ProductClassificationType
+         */
+        $productClassification = self::$objectHelper->getProductClassificationType("classcode", "classname", "listid", "listversionid");
+        $this->assertEquals("classcode", $productClassification->getClassCode()->value());
+        $this->assertEquals("listid", $productClassification->getClassCode()->getListID());
+        $this->assertEquals("listversionid", $productClassification->getClassCode()->getListVersionID());
+        $this->assertEquals("classname", $productClassification->getClassName());
+
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\ProductCharacteristicType
+         */
+        $productCharacteristic = self::$objectHelper->getProductCharacteristicType();
+        $this->assertNull($productCharacteristic);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getReferencedProductType
+     */
+    public function testGetReferencedProductType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\ReferencedProductType
+         */
+        $referencedProduct = self::$objectHelper->getReferencedProductType("globalid", "globalidtype", "sellerid", "buyerid", "name", "description", 10, "C62");
+        $this->assertEquals("globalid", $referencedProduct->getGlobalID()[0]->value());
+        $this->assertEquals("globalidtype", $referencedProduct->getGlobalID()[0]->getSchemeID());
+        $this->assertEquals("sellerid", $referencedProduct->getSellerAssignedID()->value());
+        $this->assertEquals("buyerid", $referencedProduct->getBuyerAssignedID()->value());
+        $this->assertEquals("name", $referencedProduct->getName());
+        $this->assertEquals("description", $referencedProduct->getDescription());
+        $this->assertEquals(10, $referencedProduct->getUnitQuantity()->value());
+        $this->assertEquals("C62", $referencedProduct->getUnitQuantity()->getUnitCode());
+
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\ReferencedProductType
+         */
+        $referencedProduct = self::$objectHelper->getReferencedProductType(null, null, null, null, null, null, null, null);
+        $this->assertNull($referencedProduct);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradePriceType
+     */
+    public function testGetTradePriceTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradePriceType
+         */
+        $price = self::$objectHelper->getTradePriceType(1.0, 2.0, "C62");
+        $this->assertEquals(1.0, $price->getChargeAmount()->value());
+        $this->assertEquals(2.0, $price->getBasisQuantity()->value());
+        $this->assertEquals("C62", $price->getBasisQuantity()->getUnitCode());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradePriceType
+     */
+    public function testGetTradePriceTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradePriceType
+         */
+        $price = self::$objectHelper->getTradePriceType(null, null, null);
+        $this->assertNull($price);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementLineMonetarySummationType
+     */
+    public function testGetTradeSettlementLineMonetarySummationTypeAllValues(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeSettlementLineMonetarySummationType
+         */
+        $summation = self::$objectHelper->getTradeSettlementLineMonetarySummationType(1.0, 2.0);
+        $this->assertEquals(1.0, $summation->getLineTotalAmount()->value());
+        $this->assertEquals(2.0, $summation->getTotalAllowanceChargeAmount()->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTradeSettlementLineMonetarySummationType
+     */
+    public function testGetTradeSettlementLineMonetarySummationTypeAllNull(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeSettlementLineMonetarySummationType
+         */
+        $summation = self::$objectHelper->getTradeSettlementLineMonetarySummationType(null, null);
+        $this->assertNull($summation);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::toDateTime
+     */
+    public function testToDateTimeGeneral(): void
+    {
+        $this->assertEquals("20200202", self::$objectHelper->toDateTime("20200202", "102")->format("Ymd"));
+        $this->assertNull(self::$objectHelper->toDateTime("", "102"));
+        $this->assertNull(self::$objectHelper->toDateTime("20200202", ""));
+        $this->assertNull(self::$objectHelper->toDateTime(null, "102"));
+        $this->assertNull(self::$objectHelper->toDateTime("20200202", null));
+        $this->assertNull(self::$objectHelper->toDateTime("", ""));
+        $this->assertNull(self::$objectHelper->toDateTime(null, null));
+        $this->assertNull(self::$objectHelper->toDateTime("", null));
+        $this->assertNull(self::$objectHelper->toDateTime(null, ""));
+        $this->assertNull(self::$objectHelper->toDateTime(null, null));
+        $this->expectException(ZugferdUnknownDateFormatException::class);
+        $this->expectExceptionMessage("The date format identifier 999 is unknown or not supported");
+        $this->assertNull(self::$objectHelper->toDateTime("20200202", "999"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::toDateTime
+     */
+    public function testToDateTime101(): void
+    {
+        $this->assertEquals("20200202", self::$objectHelper->toDateTime("200202", "101")->format("Ymd"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::toDateTime
+     */
+    public function testToDateTime201(): void
+    {
+        $this->assertEquals("2002021031", self::$objectHelper->toDateTime("2002021031", "201")->format("ymdHi"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::toDateTime
+     */
+    public function testToDateTime202(): void
+    {
+        $this->assertEquals("200202103145", self::$objectHelper->toDateTime("200202103145", "202")->format("ymdHis"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::toDateTime
+     */
+    public function testToDateTime203(): void
+    {
+        $this->assertEquals("202002021031", self::$objectHelper->toDateTime("202002021031", "203")->format("YmdHi"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::toDateTime
+     */
+    public function testToDateTime204(): void
+    {
+        $this->assertEquals("20200202103145", self::$objectHelper->toDateTime("20200202103145", "204")->format("YmdHis"));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getRateType
+     */
+    public function testGetRateType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\udt\RateType
+         */
+        $rateType = self::$objectHelper->getRateType(10);
+        $this->assertEquals(10, $rateType->value());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::getTaxApplicableTradeCurrencyExchangeType
+     */
+    public function testGetTaxApplicableTradeCurrencyExchangeType(): void
+    {
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeCurrencyExchangeType
+         */
+        $currencyExchangeType = self::$objectHelper->getTaxApplicableTradeCurrencyExchangeType("EUR", "USD", 10.0, DateTime::createFromFormat("Ymd", "20180305"));
+        $this->assertNotNull($currencyExchangeType);
+        $this->assertEquals("EUR", $currencyExchangeType->getSourceCurrencyCode());
+        $this->assertEquals("USD", $currencyExchangeType->getTargetCurrencyCode());
+        $this->assertEquals(10.0, $currencyExchangeType->getConversionRate()->value());
+
+        /**
+         * @var \horstoeko\zugferd\entities\extended\ram\TradeCurrencyExchangeType
+         */
+        $currencyExchangeType = self::$objectHelper->getTaxApplicableTradeCurrencyExchangeType(null, null, null, null);
+        $this->assertNull($currencyExchangeType);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdObjectHelper::createClassInstance
+     */
+    public function testCreateClassInstance(): void
+    {
+        $instance = self::$objectHelper->createClassInstance('ram\TradeProductType');
+        $this->assertNotNull($instance);
+        $instance = self::$objectHelper->createClassInstance('ram\LogisticsServiceChargeType');
+        $this->assertNotNull($instance);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PackageVersionTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PackageVersionTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PackageVersionTest.php	(revision 8435)
@@ -0,0 +1,17 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use horstoeko\zugferd\ZugferdPackageVersion;
+use horstoeko\zugferd\tests\TestCase;
+
+class PackageVersionTest extends TestCase
+{
+    /**
+     * @covers \horstoeko\zugferd\ZugferdPackageVersion
+     */
+    public function testVersion(): void
+    {
+        $this->assertNotEmpty(ZugferdPackageVersion::getInstalledVersion());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfBuilderEn16931Test.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfBuilderEn16931Test.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfBuilderEn16931Test.php	(revision 8435)
@@ -0,0 +1,214 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use DateTime;
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\tests\traits\HandlesXmlTests;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentBuilder;
+use \horstoeko\zugferd\ZugferdDocumentPdfBuilder;
+use \horstoeko\zugferd\codelists\ZugferdPaymentMeans;
+use \horstoeko\zugferd\ZugferdDocumentPdfReader;
+use \Smalot\PdfParser\Parser as PdfParser;
+
+class PdfBuilderEn16931Test extends TestCase
+{
+    use HandlesXmlTests;
+
+    /**
+     * Source pdf filename
+     *
+     * @var string
+     */
+    protected static $sourcePdfFilename = "";
+
+    /**
+     * Destination pdf filename
+     *
+     * @var string
+     */
+    protected static $destPdfFilename = "";
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$sourcePdfFilename = dirname(__FILE__) . "/../assets/EmpyPDF.pdf";
+        self::$destPdfFilename = dirname(__FILE__) . "/../assets/GeneratedPDF.pdf";
+
+        self::$document = (ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931))
+            ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+            ->addDocumentNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+            ->addDocumentNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, null, 'REG')
+            ->setDocumentSupplyChainEvent(\DateTime::createFromFormat('Ymd', '20180305'))
+            ->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null)
+            ->setDocumentSeller("Lieferant GmbH", "549910")
+            ->addDocumentSellerGlobalId("4000001123452", "0088")
+            ->addDocumentSellerTaxRegistration("FC", "201/113/40209")
+            ->addDocumentSellerTaxRegistration("VA", "DE123456789")
+            ->setDocumentSellerAddress("LieferantenstraÃe 20", "", "", "80333", "MÃŒnchen", "DE")
+            ->setDocumentSellerContact("Heinz MÃŒkker", "Buchhaltung", "+49-111-2222222", "+49-111-3333333", "info@lieferant.de")
+            ->setDocumentBuyer("Kunden AG Mitte", "GE2020211")
+            ->setDocumentBuyerReference("34676-342323")
+            ->setDocumentBuyerAddress("KundenstraÃe 15", "", "", "69876", "Frankfurt", "DE")
+            ->addDocumentTax("S", "VAT", 275.0, 19.25, 7.0)
+            ->addDocumentTax("S", "VAT", 198.0, 37.62, 19.0)
+            ->setDocumentSummation(529.87, 529.87, 473.00, 0.0, 0.0, 473.00, 56.87, null, 0.0)
+            ->addDocumentPaymentTerm("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018")
+            ->addNewPosition("1")
+            ->setDocumentPositionNote("Bemerkung zu Zeile 1")
+            ->setDocumentPositionProductDetails("TrennblÃ€tter A4", "", "TB100A4", null, "0160", "4012345001235")
+            ->addDocumentPositionProductCharacteristic("Farbe", "Gelb")
+            ->addDocumentPositionProductClassification("ClassCode", "ClassName", "ListId", "ListVersionId")
+            ->setDocumentPositionProductOriginTradeCountry("CN")
+            ->setDocumentPositionGrossPrice(9.9000)
+            ->setDocumentPositionNetPrice(9.9000)
+            ->setDocumentPositionQuantity(20, "H87")
+            ->addDocumentPositionTax('S', 'VAT', 19)
+            ->setDocumentPositionLineSummation(198.0)
+            ->addNewPosition("2")
+            ->setDocumentPositionNote("Bemerkung zu Zeile 2")
+            ->setDocumentPositionProductDetails("Joghurt Banane", "", "ARNR2", null, "0160", "4000050986428")
+            ->addDocumentPositionProductCharacteristic("Suesstoff", "Nein")
+            ->addDocumentPositionProductClassification("ClassCode", "ClassName", "ListId", "ListVersionId")
+            ->SetDocumentPositionGrossPrice(5.5000)
+            ->SetDocumentPositionNetPrice(5.5000)
+            ->SetDocumentPositionQuantity(50, "H87")
+            ->AddDocumentPositionTax('S', 'VAT', 7)
+            ->SetDocumentPositionLineSummation(275.0);
+    }
+
+    public static function tearDownAfterClass(): void
+    {
+        @unlink(self::$destPdfFilename);
+    }
+
+    public function testBuildPdf(): void
+    {
+        $pdfBuilder = new ZugferdDocumentPdfBuilder(self::$document, self::$sourcePdfFilename);
+        $pdfBuilder->generateDocument();
+        $pdfBuilder->saveDocument(self::$destPdfFilename);
+
+        $this->assertTrue(file_exists(self::$destPdfFilename));
+    }
+
+    public function testBuildPdfString(): void
+    {
+        $pdfBuilder = new ZugferdDocumentPdfBuilder(self::$document, self::$sourcePdfFilename);
+        $pdfBuilder->generateDocument();
+        $pdfBuilder->downloadString(self::$destPdfFilename);
+
+        $this->assertIsString(self::$destPdfFilename);
+    }
+
+    public function testPdfMetaData(): void
+    {
+        $pdfParser = new PdfParser();
+        $pdfParsed = $pdfParser->parseFile(self::$destPdfFilename);
+        $pdfDetails = $pdfParsed->getDetails();
+
+        $this->assertIsArray($pdfDetails);
+        $this->assertArrayHasKey("Producer", $pdfDetails); //"FPDF 1.84"
+        $this->assertArrayHasKey("CreationDate", $pdfDetails); //"2020-12-09T05:19:39+00:00"
+        $this->assertArrayHasKey("Pages", $pdfDetails); //"1"
+        $this->assertEquals("1", $pdfDetails["Pages"]);
+    }
+
+    public function testReadPdf(): void
+    {
+        $document = ZugferdDocumentPdfReader::readAndGuessFromFile(self::$destPdfFilename);
+
+        $this->assertNotNull($document);
+        $this->assertEquals(ZugferdProfiles::PROFILE_EN16931, $document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, $document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, $document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, $document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_XRECHNUNG, $document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfBuilderAbstract::getXmlContent
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfBuilder::getXmlContent
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfMerger::getXmlContent
+     *
+     * @return void
+     */
+    public function testGetXmlContent(): void
+    {
+        $mockedObject = $this->getMockBuilder(ZugferdDocumentPdfBuilder::class)
+            ->setConstructorArgs([self::$document, self::$sourcePdfFilename])
+            ->onlyMethods(['getXmlContent'])
+            ->getMock();
+
+        /**
+         * @var \PHPUnit\Framework\MockObject\MockObject $mockedObject
+         */
+        $mockedObject->expects($this->exactly(2))
+            ->method("getXmlContent")
+            ->willReturn(self::$document->getContent());
+
+        /**
+         * @var \horstoeko\zugferd\ZugferdDocumentPdfBuilder $mockedObject
+         */
+        $result = $mockedObject->generateDocument();
+
+        $this->assertInstanceOf(ZugferdDocumentPdfBuilder::class, $result);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfBuilderAbstract::getXmlAttachmentFilename
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfBuilder::getXmlAttachmentFilename
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfMerger::getXmlAttachmentFilename
+     *
+     * @return void
+     */
+    public function testGetXmlAttachmentFilename(): void
+    {
+        $mockedObject = $this->getMockBuilder(ZugferdDocumentPdfBuilder::class)
+            ->setConstructorArgs([self::$document, self::$sourcePdfFilename])
+            ->onlyMethods(['getXmlAttachmentFilename'])
+            ->getMock();
+
+        /**
+         * @var \PHPUnit\Framework\MockObject\MockObject $mockedObject
+         */
+        $mockedObject->expects($this->exactly(2))
+            ->method("getXmlAttachmentFilename")
+            ->willReturn(self::$document->getProfileDefinitionParameter('attachmentfilename'));
+
+        /**
+         * @var \horstoeko\zugferd\ZugferdDocumentPdfBuilder $mockedObject
+         */
+        $result = $mockedObject->generateDocument();
+
+        $this->assertInstanceOf(ZugferdDocumentPdfBuilder::class, $result);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfBuilderAbstract::getXmlAttachmentXmpName
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfBuilder::getXmlAttachmentXmpName
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfMerger::getXmlAttachmentXmpName
+     *
+     * @return void
+     */
+    public function testGetXmlAttachmentXmpName(): void
+    {
+        $mockedObject = $this->getMockBuilder(ZugferdDocumentPdfBuilder::class)
+            ->setConstructorArgs([self::$document, self::$sourcePdfFilename])
+            ->onlyMethods(['getXmlAttachmentXmpName'])
+            ->getMock();
+
+        /**
+         * @var \PHPUnit\Framework\MockObject\MockObject $mockedObject
+         */
+        $mockedObject->expects($this->exactly(1))
+            ->method("getXmlAttachmentXmpName")
+            ->willReturn(self::$document->getProfileDefinitionParameter("xmpname"));
+
+        /**
+         * @var \horstoeko\zugferd\ZugferdDocumentPdfBuilder $mockedObject
+         */
+        $result = $mockedObject->generateDocument();
+
+        $this->assertInstanceOf(ZugferdDocumentPdfBuilder::class, $result);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderEn16931AllowanceChargeTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderEn16931AllowanceChargeTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderEn16931AllowanceChargeTest.php	(revision 8435)
@@ -0,0 +1,1849 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdDocumentPdfReader;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+use \horstoeko\zugferd\ZugferdProfiles;
+
+class PdfReaderEn16931AllowanceChargeTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfReader::readAndGuessFromFile
+     */
+    public function testCanReadPdf(): void
+    {
+        self::$document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/zugferd_2p1_EN16931_Rabatte.pdf");
+        $this->assertNotNull(self::$document);
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_XRECHNUNG, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('471102', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180605'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+        $this->assertNotNull(self::$document->getInvoiceObject());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentNotes
+     */
+    public function testDocumentNotes(): void
+    {
+        self::$document->getDocumentNotes($notes);
+        $this->assertIsArray($notes);
+        $this->assertNotEmpty($notes);
+        $this->assertEquals(3, count($notes));
+        $this->assertArrayHasKey(0, $notes);
+        $this->assertArrayHasKey(1, $notes);
+        $this->assertArrayHasKey(2, $notes);
+        $this->assertIsArray($notes[0]);
+        $this->assertNotEmpty($notes[0]);
+        $this->assertArrayHasKey("content", $notes[0]);
+        $this->assertArrayHasKey("subjectcode", $notes[0]);
+        $this->assertArrayHasKey("contentcode", $notes[0]);
+        $this->assertIsArray($notes[1]);
+        $this->assertNotEmpty($notes[1]);
+        $this->assertArrayHasKey("content", $notes[1]);
+        $this->assertArrayHasKey("subjectcode", $notes[1]);
+        $this->assertArrayHasKey("contentcode", $notes[1]);
+        $this->assertIsArray($notes[2]);
+        $this->assertNotEmpty($notes[2]);
+        $this->assertArrayHasKey("content", $notes[2]);
+        $this->assertArrayHasKey("subjectcode", $notes[2]);
+        $this->assertArrayHasKey("contentcode", $notes[2]);
+        $this->assertEquals("", $notes[0]["contentcode"]);
+        $this->assertEquals("", $notes[0]["subjectcode"]);
+        $this->assertStringContainsString("Rechnung gemÃ€Ã Bestellung Nr. 2018-471331 vom 01.03.2018.", $notes[0]["content"]);
+        $this->assertEquals("", $notes[1]["contentcode"]);
+        $this->assertEquals("AAK", $notes[1]["subjectcode"]);
+        $this->assertStringContainsString("Es bestehen Rabatt- und Bonusvereinbarungen.", $notes[1]["content"]);
+        $this->assertEquals("", $notes[2]["contentcode"]);
+        $this->assertEquals("REG", $notes[2]["subjectcode"]);
+        $this->assertStringContainsString("Lieferant GmbH", $notes[2]["content"]);
+        $this->assertStringContainsString("LieferantenstraÃe 20", $notes[2]["content"]);
+        $this->assertStringContainsString("80333 MÃŒnchen", $notes[2]["content"]);
+        $this->assertStringContainsString("Deutschland", $notes[2]["content"]);
+        $this->assertStringContainsString("GeschÃ€ftsfÃŒhrer: Hans Muster", $notes[2]["content"]);
+        $this->assertStringContainsString("Handelsregisternummer: H A 123", $notes[2]["content"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("", $creditorReferenceID);
+        $this->assertEquals("", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsDocumentCopy
+     */
+    public function testDocumentIsCopy(): void
+    {
+        self::$document->getIsDocumentCopy($iscopy);
+        $this->assertFalse($iscopy);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsTestDocument
+     */
+    public function testDocumentIsTestDocument(): void
+    {
+        self::$document->getIsTestDocument($istest);
+        $this->assertFalse($istest);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSummation
+     */
+    public function testDocumentSummation(): void
+    {
+        self::$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+        $this->assertEquals(215.07, $grandTotalAmount);
+        $this->assertEquals(165.07, $duePayableAmount);
+        $this->assertEquals(202.70, $lineTotalAmount);
+        $this->assertEquals(5.80, $chargeTotalAmount);
+        $this->assertEquals(14.73, $allowanceTotalAmount);
+        $this->assertEquals(193.77, $taxBasisTotalAmount);
+        $this->assertEquals(21.30, $taxTotalAmount);
+        $this->assertEquals(0.00, $roundingAmount);
+        $this->assertEquals(50.00, $totalPrepaidAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerReference
+     */
+    public function testGetDocumentBuyerReference(): void
+    {
+        self::$document->getDocumentBuyerReference($buyerReference);
+        $this->assertEquals("", $buyerReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSeller
+     */
+    public function testDocumentSellerGeneral(): void
+    {
+        self::$document->getDocumentSeller($sellername, $sellerids, $sellerdescription);
+        $this->assertEquals("Lieferant GmbH", $sellername);
+        $this->assertIsArray($sellerids);
+        $this->assertArrayNotHasKey(0, $sellerids);
+        $this->assertArrayNotHasKey(1, $sellerids);
+        $this->assertEquals("", $sellerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerGlobalId
+     */
+    public function testDocumentSellerGlobalId(): void
+    {
+        self::$document->getDocumentSellerGlobalId($sellerglobalids);
+        $this->assertIsArray($sellerglobalids);
+        $this->assertArrayHasKey("0088", $sellerglobalids);
+        $this->assertEquals("4000001123452", $sellerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRegistration
+     */
+    public function testDocumentSellerTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRegistration($sellertaxreg);
+        $this->assertIsArray($sellertaxreg);
+        $this->assertArrayHasKey("VA", $sellertaxreg);
+        $this->assertArrayHasKey("FC", $sellertaxreg);
+        $this->assertArrayNotHasKey(0, $sellertaxreg);
+        $this->assertArrayNotHasKey(1, $sellertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $sellertaxreg);
+        $this->assertEquals("201/113/40209", $sellertaxreg["FC"]);
+        $this->assertEquals("DE123456789", $sellertaxreg["VA"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerAddress
+     */
+    public function testDocumentSellerAddress(): void
+    {
+        self::$document->getDocumentSellerAddress($sellerlineone, $sellerlinetwo, $sellerlinethree, $sellerpostcode, $sellercity, $sellercountry, $sellersubdivision);
+        $this->assertEquals("LieferantenstraÃe 20", $sellerlineone);
+        $this->assertEquals("", $sellerlinetwo);
+        $this->assertEquals("", $sellerlinethree);
+        $this->assertEquals("80333", $sellerpostcode);
+        $this->assertEquals("MÃŒnchen", $sellercity);
+        $this->assertEquals("DE", $sellercountry);
+        $this->assertIsArray($sellersubdivision);
+        $this->assertEmpty($sellersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerLegalOrganisation
+     */
+    public function testDocumentSellerLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerLegalOrganisation($sellerlegalorgid, $sellerlegalorgtype, $sellerlegalorgname);
+        $this->assertEquals("", $sellerlegalorgid);
+        $this->assertEquals("", $sellerlegalorgtype);
+        $this->assertEquals("", $sellerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerContact
+     */
+    public function testDocumentSellerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerContact());
+        $this->assertFalse(self::$document->nextDocumentSellerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerContact($sellercontactpersonname, $sellercontactdepartmentname, $sellercontactphoneno, $sellercontactfaxno, $sellercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyer
+     */
+    public function testDocumentBuyerGeneral(): void
+    {
+        self::$document->getDocumentBuyer($buyername, $buyerids, $buyerdescription);
+        $this->assertEquals("Kunden AG Mitte", $buyername);
+        $this->assertIsArray($buyerids);
+        $this->assertArrayHasKey(0, $buyerids);
+        $this->assertArrayNotHasKey(1, $buyerids);
+        $this->assertEquals("GE2020211", $buyerids[0]);
+        $this->assertEquals("", $buyerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerGlobalId
+     */
+    public function testDocumentBuyerGlobalId(): void
+    {
+        self::$document->getDocumentBuyerGlobalId($buyerglobalids);
+        $this->assertIsArray($buyerglobalids);
+        $this->assertEmpty($buyerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerTaxRegistration
+     */
+    public function testDocumentBuyerTaxRegistration(): void
+    {
+        self::$document->getDocumentBuyerTaxRegistration($buyertaxreg);
+        $this->assertIsArray($buyertaxreg);
+        $this->assertEmpty($buyertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerAddress
+     */
+    public function testDocumentBuyerAddress(): void
+    {
+        self::$document->getDocumentBuyerAddress($buyerlineone, $buyerlinetwo, $buyerlinethree, $buyerpostcode, $buyercity, $buyercountry, $buyersubdivision);
+        $this->assertEquals("KundenstraÃe 15", $buyerlineone);
+        $this->assertEquals("", $buyerlinetwo);
+        $this->assertEquals("", $buyerlinethree);
+        $this->assertEquals("69876", $buyerpostcode);
+        $this->assertEquals("Frankfurt", $buyercity);
+        $this->assertEquals("DE", $buyercountry);
+        $this->assertIsArray($buyersubdivision);
+        $this->assertEmpty($buyersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerLegalOrganisation
+     */
+    public function testDocumentBuyerLegalOrganization(): void
+    {
+        self::$document->getDocumentBuyerLegalOrganisation($buyerlegalorgid, $buyerlegalorgtype, $buyerlegalorgname);
+        $this->assertEquals("", $buyerlegalorgid);
+        $this->assertEquals("", $buyerlegalorgtype);
+        $this->assertEquals("", $buyerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentBuyerContact
+     */
+    public function testDocumentBuyerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentBuyerContact());
+        $this->assertFalse(self::$document->nextDocumentBuyerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentBuyerContact($buyercontactpersonname, $buyercontactdepartmentname, $buyercontactphoneno, $buyercontactfaxno, $buyercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentative
+     */
+    public function testDocumentSellerTaxRepresentativeGeneral(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentative($sellertaxreprname, $sellertaxreprids, $sellertaxreprdescription);
+        $this->assertEquals("", $sellertaxreprname);
+        $this->assertIsArray($sellertaxreprids);
+        $this->assertEmpty($sellertaxreprids);
+        $this->assertEquals("", $sellertaxreprdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeGlobalId($sellertaxreprglobalids);
+        $this->assertIsArray($sellertaxreprglobalids);
+        $this->assertEmpty($sellertaxreprglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeTaxRegistration($sellertaxreprtaxreg);
+        $this->assertIsArray($sellertaxreprtaxreg);
+        $this->assertEmpty($sellertaxreprtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeAddress
+     */
+    public function testDocumentSellerTaxRepresentativeAddress(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeAddress($sellertaxreprlineone, $sellertaxreprlinetwo, $sellertaxreprlinethree, $sellertaxreprpostcode, $sellertaxreprcity, $sellertaxreprcountry, $sellertaxreprsubdivision);
+        $this->assertEquals("", $sellertaxreprlineone);
+        $this->assertEquals("", $sellertaxreprlinetwo);
+        $this->assertEquals("", $sellertaxreprlinethree);
+        $this->assertEquals("", $sellertaxreprpostcode);
+        $this->assertEquals("", $sellertaxreprcity);
+        $this->assertEquals("", $sellertaxreprcountry);
+        $this->assertIsArray($sellertaxreprsubdivision);
+        $this->assertEmpty($sellertaxreprsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testDocumentSellerTaxRepresentativeLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeLegalOrganisation($sellertaxreprlegalorgid, $sellertaxreprlegalorgtype, $sellertaxreprlegalorgname);
+        $this->assertEquals("", $sellertaxreprlegalorgid);
+        $this->assertEquals("", $sellertaxreprlegalorgtype);
+        $this->assertEquals("", $sellertaxreprlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerTaxRepresentativeContact
+     */
+    public function testDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerTaxRepresentativeContact());
+        $this->assertFalse(self::$document->nextDocumentSellerTaxRepresentativeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerTaxRepresentativeContact($sellertaxreprcontactpersonname, $sellertaxreprcontactdepartmentname, $sellertaxreprcontactphoneno, $sellertaxreprcontactfaxno, $sellertaxreprcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipTo
+     */
+    public function testDocumentShipToGeneral(): void
+    {
+        self::$document->getDocumentShipTo($shiptoname, $shiptoids, $shiptodescription);
+        $this->assertEquals("", $shiptoname);
+        $this->assertIsArray($shiptoids);
+        $this->assertEmpty($shiptoids);
+        $this->assertEquals("", $shiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToGlobalId
+     */
+    public function testDocumentShipToGlobalId(): void
+    {
+        self::$document->getDocumentShipToGlobalId($shiptoglobalids);
+        $this->assertIsArray($shiptoglobalids);
+        $this->assertEmpty($shiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToTaxRegistration
+     */
+    public function testDocumentShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentShipToTaxRegistration($shiptotaxreg);
+        $this->assertIsArray($shiptotaxreg);
+        $this->assertEmpty($shiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToAddress
+     */
+    public function testDocumentShipToAddress(): void
+    {
+        self::$document->getDocumentShipToAddress($shiptolineone, $shiptolinetwo, $shiptolinethree, $shiptopostcode, $shiptocity, $shiptocountry, $shiptosubdivision);
+        $this->assertEquals("", $shiptolineone);
+        $this->assertEquals("", $shiptolinetwo);
+        $this->assertEquals("", $shiptolinethree);
+        $this->assertEquals("", $shiptopostcode);
+        $this->assertEquals("", $shiptocity);
+        $this->assertEquals("", $shiptocountry);
+        $this->assertIsArray($shiptosubdivision);
+        $this->assertEmpty($shiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToLegalOrganisation
+     */
+    public function testDocumentShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentShipToLegalOrganisation($shiptolegalorgid, $shiptolegalorgtype, $shiptolegalorgname);
+        $this->assertEquals("", $shiptolegalorgid);
+        $this->assertEquals("", $shiptolegalorgtype);
+        $this->assertEquals("", $shiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipToContact
+     */
+    public function testDocumentShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipToContact());
+        $this->assertFalse(self::$document->nextDocumentShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipToContact($shiptocontactpersonname, $shiptocontactdepartmentname, $shiptocontactphoneno, $shiptocontactfaxno, $shiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipTo
+     */
+    public function testDocumentUltimateShipToGeneral(): void
+    {
+        self::$document->getDocumentUltimateShipTo($ultimateshiptoname, $ultimateshiptoids, $ultimateshiptodescription);
+        $this->assertEquals("", $ultimateshiptoname);
+        $this->assertIsArray($ultimateshiptoids);
+        $this->assertEmpty($ultimateshiptoids);
+        $this->assertEquals("", $ultimateshiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToGlobalId
+     */
+    public function testDocumentUltimateShipToGlobalId(): void
+    {
+        self::$document->getDocumentUltimateShipToGlobalId($ultimateshiptoglobalids);
+        $this->assertIsArray($ultimateshiptoglobalids);
+        $this->assertEmpty($ultimateshiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToTaxRegistration
+     */
+    public function testDocumentUltimateShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentUltimateShipToTaxRegistration($ultimateshiptotaxreg);
+        $this->assertIsArray($ultimateshiptotaxreg);
+        $this->assertEmpty($ultimateshiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToAddress
+     */
+    public function testDocumentUltimateShipToAddress(): void
+    {
+        self::$document->getDocumentUltimateShipToAddress($ultimateshiptolineone, $ultimateshiptolinetwo, $ultimateshiptolinethree, $ultimateshiptopostcode, $ultimateshiptocity, $ultimateshiptocountry, $ultimateshiptosubdivision);
+        $this->assertEquals("", $ultimateshiptolineone);
+        $this->assertEquals("", $ultimateshiptolinetwo);
+        $this->assertEquals("", $ultimateshiptolinethree);
+        $this->assertEquals("", $ultimateshiptopostcode);
+        $this->assertEquals("", $ultimateshiptocity);
+        $this->assertEquals("", $ultimateshiptocountry);
+        $this->assertIsArray($ultimateshiptosubdivision);
+        $this->assertEmpty($ultimateshiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToLegalOrganisation
+     */
+    public function testDocumentUltimateShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentUltimateShipToLegalOrganisation($ultimateshiptolegalorgid, $ultimateshiptolegalorgtype, $ultimateshiptolegalorgname);
+        $this->assertEquals("", $ultimateshiptolegalorgid);
+        $this->assertEquals("", $ultimateshiptolegalorgtype);
+        $this->assertEquals("", $ultimateshiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateShipToContact
+     */
+    public function testDocumentUltimateShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFrom
+     */
+    public function testDocumentShipFromGeneral(): void
+    {
+        self::$document->getDocumentShipFrom($shipfromname, $shipfromids, $shipfromdescription);
+        $this->assertEquals("", $shipfromname);
+        $this->assertIsArray($shipfromids);
+        $this->assertEmpty($shipfromids);
+        $this->assertEquals("", $shipfromdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromGlobalId
+     */
+    public function testDocumentShipFromGlobalId(): void
+    {
+        self::$document->getDocumentShipFromGlobalId($shipfromglobalids);
+        $this->assertIsArray($shipfromglobalids);
+        $this->assertEmpty($shipfromglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromTaxRegistration
+     */
+    public function testDocumentShipFromTaxRegistration(): void
+    {
+        self::$document->getDocumentShipFromTaxRegistration($shipfromtaxreg);
+        $this->assertIsArray($shipfromtaxreg);
+        $this->assertEmpty($shipfromtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromAddress
+     */
+    public function testDocumentShipFromAddress(): void
+    {
+        self::$document->getDocumentShipFromAddress($shipfromlineone, $shipfromlinetwo, $shipfromlinethree, $shipfrompostcode, $shipfromcity, $shipfromcountry, $shipfromsubdivision);
+        $this->assertEquals("", $shipfromlineone);
+        $this->assertEquals("", $shipfromlinetwo);
+        $this->assertEquals("", $shipfromlinethree);
+        $this->assertEquals("", $shipfrompostcode);
+        $this->assertEquals("", $shipfromcity);
+        $this->assertEquals("", $shipfromcountry);
+        $this->assertIsArray($shipfromsubdivision);
+        $this->assertEmpty($shipfromsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromLegalOrganisation
+     */
+    public function testDocumentShipFromLegalOrganization(): void
+    {
+        self::$document->getDocumentShipFromLegalOrganisation($shipfromlegalorgid, $shipfromlegalorgtype, $shipfromlegalorgname);
+        $this->assertEquals("", $shipfromlegalorgid);
+        $this->assertEquals("", $shipfromlegalorgtype);
+        $this->assertEquals("", $shipfromlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipFromContact
+     */
+    public function testDocumentShipFromContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicer
+     */
+    public function testDocumentInvoicerGeneral(): void
+    {
+        self::$document->getDocumentInvoicer($invoicername, $invoicerids, $invoicerdescription);
+        $this->assertEquals("", $invoicername);
+        $this->assertIsArray($invoicerids);
+        $this->assertEmpty($invoicerids);
+        $this->assertEquals("", $invoicerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerGlobalId
+     */
+    public function testDocumentInvoicerGlobalId(): void
+    {
+        self::$document->getDocumentInvoicerGlobalId($invoicerglobalids);
+        $this->assertIsArray($invoicerglobalids);
+        $this->assertEmpty($invoicerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerTaxRegistration
+     */
+    public function testDocumentInvoicerTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoicerTaxRegistration($invoicertaxreg);
+        $this->assertIsArray($invoicertaxreg);
+        $this->assertEmpty($invoicertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerAddress
+     */
+    public function testDocumentInvoicerAddress(): void
+    {
+        self::$document->getDocumentInvoicerAddress($invoicerlineone, $invoicerlinetwo, $invoicerlinethree, $invoicerpostcode, $invoicercity, $invoicercountry, $invoicersubdivision);
+        $this->assertEquals("", $invoicerlineone);
+        $this->assertEquals("", $invoicerlinetwo);
+        $this->assertEquals("", $invoicerlinethree);
+        $this->assertEquals("", $invoicerpostcode);
+        $this->assertEquals("", $invoicercity);
+        $this->assertEquals("", $invoicercountry);
+        $this->assertIsArray($invoicersubdivision);
+        $this->assertEmpty($invoicersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerLegalOrganisation
+     */
+    public function testDocumentInvoicerLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoicerLegalOrganisation($invoicerlegalorgid, $invoicerlegalorgtype, $invoicerlegalorgname);
+        $this->assertEquals("", $invoicerlegalorgid);
+        $this->assertEquals("", $invoicerlegalorgtype);
+        $this->assertEquals("", $invoicerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoicerContact
+     */
+    public function testDocumentInvoicerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicee
+     */
+    public function testDocumentInvoiceeGeneral(): void
+    {
+        self::$document->getDocumentInvoicee($invoiceename, $invoiceeids, $invoiceedescription);
+        $this->assertEquals("", $invoiceename);
+        $this->assertIsArray($invoiceeids);
+        $this->assertEmpty($invoiceeids);
+        $this->assertEquals("", $invoiceedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeGlobalId
+     */
+    public function testDocumentInvoiceeGlobalId(): void
+    {
+        self::$document->getDocumentInvoiceeGlobalId($invoiceeglobalids);
+        $this->assertIsArray($invoiceeglobalids);
+        $this->assertEmpty($invoiceeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeTaxRegistration
+     */
+    public function testDocumentInvoiceeTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoiceeTaxRegistration($invoiceetaxreg);
+        $this->assertIsArray($invoiceetaxreg);
+        $this->assertEmpty($invoiceetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeAddress
+     */
+    public function testDocumentInvoiceeAddress(): void
+    {
+        self::$document->getDocumentInvoiceeAddress($invoiceelineone, $invoiceelinetwo, $invoiceelinethree, $invoiceepostcode, $invoiceecity, $invoiceecountry, $invoiceesubdivision);
+        $this->assertEquals("", $invoiceelineone);
+        $this->assertEquals("", $invoiceelinetwo);
+        $this->assertEquals("", $invoiceelinethree);
+        $this->assertEquals("", $invoiceepostcode);
+        $this->assertEquals("", $invoiceecity);
+        $this->assertEquals("", $invoiceecountry);
+        $this->assertIsArray($invoiceesubdivision);
+        $this->assertEmpty($invoiceesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeLegalOrganisation
+     */
+    public function testDocumentInvoiceeLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoiceeLegalOrganisation($invoiceelegalorgid, $invoiceelegalorgtype, $invoiceelegalorgname);
+        $this->assertEquals("", $invoiceelegalorgid);
+        $this->assertEquals("", $invoiceelegalorgtype);
+        $this->assertEquals("", $invoiceelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoiceeContact
+     */
+    public function testDocumentInvoiceeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayee
+     */
+    public function testDocumentPayeeGeneral(): void
+    {
+        self::$document->getDocumentPayee($payeename, $payeeids, $payeedescription);
+        $this->assertEquals("", $payeename);
+        $this->assertIsArray($payeeids);
+        $this->assertEmpty($payeeids);
+        $this->assertEquals("", $payeedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeGlobalId
+     */
+    public function testDocumentPayeeGlobalId(): void
+    {
+        self::$document->getDocumentPayeeGlobalId($payeeglobalids);
+        $this->assertIsArray($payeeglobalids);
+        $this->assertEmpty($payeeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeTaxRegistration
+     */
+    public function testDocumentPayeeTaxRegistration(): void
+    {
+        self::$document->getDocumentPayeeTaxRegistration($payeetaxreg);
+        $this->assertIsArray($payeetaxreg);
+        $this->assertEmpty($payeetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeAddress
+     */
+    public function testDocumentPayeeAddress(): void
+    {
+        self::$document->getDocumentPayeeAddress($payeelineone, $payeelinetwo, $payeelinethree, $payeepostcode, $payeecity, $payeecountry, $payeesubdivision);
+        $this->assertEquals("", $payeelineone);
+        $this->assertEquals("", $payeelinetwo);
+        $this->assertEquals("", $payeelinethree);
+        $this->assertEquals("", $payeepostcode);
+        $this->assertEquals("", $payeecity);
+        $this->assertEquals("", $payeecountry);
+        $this->assertIsArray($payeesubdivision);
+        $this->assertEmpty($payeesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeLegalOrganisation
+     */
+    public function testDocumentPayeeLegalOrganization(): void
+    {
+        self::$document->getDocumentPayeeLegalOrganisation($payeelegalorgid, $payeelegalorgtype, $payeelegalorgname);
+        $this->assertEquals("", $payeelegalorgid);
+        $this->assertEquals("", $payeelegalorgtype);
+        $this->assertEquals("", $payeelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPayeeContact
+     */
+    public function testDocumentPayeeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUser
+     */
+    public function testDocumentProductEndUserGeneral(): void
+    {
+        self::$document->getDocumentProductEndUser($producendusername, $producenduserids, $producenduserdescription);
+        $this->assertEquals("", $producendusername);
+        $this->assertIsArray($producenduserids);
+        $this->assertArrayNotHasKey(0, $producenduserids);
+        $this->assertArrayNotHasKey(1, $producenduserids);
+        $this->assertEquals("", $producenduserdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserGlobalId
+     */
+    public function testDocumentProductEndUserGlobalId(): void
+    {
+        self::$document->getDocumentProductEndUserGlobalId($producenduserglobalids);
+        $this->assertIsArray($producenduserglobalids);
+        $this->assertArrayNotHasKey("0088", $producenduserglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserTaxRegistration
+     */
+    public function testDocumentProductEndUserTaxRegistration(): void
+    {
+        self::$document->getDocumentProductEndUserTaxRegistration($producendusertaxreg);
+        $this->assertIsArray($producendusertaxreg);
+        $this->assertArrayNotHasKey("VA", $producendusertaxreg);
+        $this->assertArrayNotHasKey("FC", $producendusertaxreg);
+        $this->assertArrayNotHasKey(0, $producendusertaxreg);
+        $this->assertArrayNotHasKey(1, $producendusertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $producendusertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserAddress
+     */
+    public function testDocumentProductEndUserAddress(): void
+    {
+        self::$document->getDocumentProductEndUserAddress($producenduserlineone, $producenduserlinetwo, $producenduserlinethree, $producenduserpostcode, $producendusercity, $producendusercountry, $producendusersubdivision);
+        $this->assertEquals("", $producenduserlineone);
+        $this->assertEquals("", $producenduserlinetwo);
+        $this->assertEquals("", $producenduserlinethree);
+        $this->assertEquals("", $producenduserpostcode);
+        $this->assertEquals("", $producendusercity);
+        $this->assertEquals("", $producendusercountry);
+        $this->assertIsArray($producendusersubdivision);
+        $this->assertEmpty($producendusersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserLegalOrganisation
+     */
+    public function testDocumentProductEndUserLegalOrganization(): void
+    {
+        self::$document->getDocumentProductEndUserLegalOrganisation($producenduserlegalorgid, $producenduserlegalorgtype, $producenduserlegalorgname);
+        $this->assertEquals("", $producenduserlegalorgid);
+        $this->assertEquals("", $producenduserlegalorgtype);
+        $this->assertEquals("", $producenduserlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentProductEndUserContactContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentProductEndUserContactContact
+     */
+    public function testDocumentProductEndUserContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentProductEndUserContactContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentProductEndUserContact($producendusercontactpersonname, $producendusercontactdepartmentname, $producendusercontactphoneno, $producendusercontactfaxno, $producendusercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentProductEndUserContactContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerOrderReferencedDocument
+     */
+    public function testDocumentSellerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentSellerOrderReferencedDocument($sellerorderrefdocid, $sellerorderrefdocdate);
+        $this->assertEquals("", $sellerorderrefdocid);
+        $this->assertNull($sellerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerOrderReferencedDocument
+     */
+    public function testDocumentBuyerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentBuyerOrderReferencedDocument($buyerorderrefdocid, $buyerorderrefdocdate);
+        $this->assertEquals("2013-471331", $buyerorderrefdocid);
+        $this->assertNull($buyerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentContractReferencedDocument
+     */
+    public function testDocumentContractReferencedDocument(): void
+    {
+        self::$document->getDocumentContractReferencedDocument($contractrefdocid, $contractrefdocdate);
+        $this->assertEquals("", $contractrefdocid);
+        $this->assertNull($contractrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocuments
+     */
+    public function testDocumentAdditionalReferencedDocuments(): void
+    {
+        self::$document->getDocumentAdditionalReferencedDocuments($additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs);
+        $this->assertEmpty($additionalrefdocs);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProcuringProject
+     */
+    public function testDocumentProcuringProject(): void
+    {
+        self::$document->getDocumentProcuringProject($projectid, $projectname);
+        $this->assertEquals("", $projectid);
+        $this->assertEquals("", $projectname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSupplyChainEvent
+     */
+    public function testDocumentSupplyChainEvent(): void
+    {
+        self::$document->getDocumentSupplyChainEvent($supplychainevent);
+        $this->assertNotNull($supplychainevent);
+        $this->assertInstanceOf("DateTime", $supplychainevent);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180603'))->format('Ymd'), $supplychainevent->format('Ymd'));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDespatchAdviceReferencedDocument
+     */
+    public function testDocumentDespatchAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentDespatchAdviceReferencedDocument($despatchdocid, $despatchdocdate);
+        $this->assertEquals("", $despatchdocid);
+        $this->assertNull($despatchdocdate);
+        $this->assertNotInstanceOf("DateTime", $despatchdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentReceivingAdviceReferencedDocument
+     */
+    public function testDocumentReceivingAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentReceivingAdviceReferencedDocument($recadvid, $recadvdate);
+        $this->assertEquals("", $recadvid);
+        $this->assertNull($recadvdate);
+        $this->assertNotInstanceOf("DateTime", $recadvdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryNoteReferencedDocument
+     */
+    public function testDocumentDeliveryNoteReferencedDocument(): void
+    {
+        self::$document->getDocumentDeliveryNoteReferencedDocument($deliverynoterefdocid, $deliverynoterefdocdate);
+        $this->assertEquals("", $deliverynoterefdocid);
+        $this->assertNull($deliverynoterefdocdate);
+        $this->assertNotInstanceOf("DateTime", $deliverynoterefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBillingPeriod
+     */
+    public function testDocumentBillingPeriod(): void
+    {
+        self::$document->getDocumentBillingPeriod($docbillingperiodstart, $docbillingperiodend);
+        $this->assertNull($docbillingperiodstart);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodstart);
+        $this->assertNull($docbillingperiodend);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodend);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharges
+     */
+    public function testDocumentAllowanceCharges(): void
+    {
+        self::$document->getDocumentAllowanceCharges($docallowancecharge);
+        $this->assertIsArray($docallowancecharge);
+        $this->assertNotEmpty($docallowancecharge);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerms
+     */
+    public function testDocumentPaymentTerms(): void
+    {
+        self::$document->getDocumentPaymentTerms($docpaymentterms);
+        $this->assertIsArray($docpaymentterms);
+        $this->assertNotEmpty($docpaymentterms);
+        $this->assertArrayHasKey(0, $docpaymentterms);
+        $this->assertIsArray($docpaymentterms[0]);
+        $this->assertArrayHasKey("description", $docpaymentterms[0]);
+        $this->assertArrayHasKey("duedate", $docpaymentterms[0]);
+        $this->assertArrayHasKey("directdebitmandateid", $docpaymentterms[0]);
+        $this->assertArrayHasKey("partialpaymentamount", $docpaymentterms[0]);
+        $this->assertEquals("Zahlbar innerhalb 30 Tagen netto bis 04.07.2018, 3% Skonto innerhalb 10 Tagen bis 15.06.2018", $docpaymentterms[0]["description"]);
+        $this->assertNull($docpaymentterms[0]["duedate"]);
+        $this->assertNotInstanceOf("DateTime", $docpaymentterms[0]["duedate"]);
+        $this->assertEquals("", $docpaymentterms[0]["directdebitmandateid"]);
+        $this->assertEquals(0.0, $docpaymentterms[0]["partialpaymentamount"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryTerms
+     */
+    public function testDocumentDeliveryTerms(): void
+    {
+        self::$document->getDocumentDeliveryTerms($devtermcode);
+        $this->assertEquals("", $devtermcode);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument
+     */
+    public function testDocumentAdditionalReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentAdditionalReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testDocumentUltimateCustomerOrderReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateCustomerOrderReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentUltimateCustomerOrderReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentDocumentPaymentMeansLoop(): void
+    {
+        $this->assertFalse(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     */
+    public function testDocumentTaxLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        $this->assertTrue(self::$document->nextDocumentTax());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentTax
+     */
+    public function testDocumentTax(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(129.37, $basisAmount);
+        $this->assertEquals(9.06, $calculatedAmount);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+
+        $this->assertTrue(self::$document->nextDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(64.40, $basisAmount);
+        $this->assertEquals(12.24, $calculatedAmount);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceChargeLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAllowanceCharge());
+        $this->assertTrue(self::$document->nextDocumentAllowanceCharge());
+        $this->assertTrue(self::$document->nextDocumentAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentAllowanceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceCharge(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAllowanceCharge());
+        self::$document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->assertEquals(1.00, $actualAmount);
+        $this->assertFalse($isCharge);
+        $this->assertEquals("S", $taxCategoryCode);
+        $this->assertEquals("VAT", $taxTypeCode);
+        $this->assertEquals(19.00, $rateApplicablePercent);
+        $this->assertEquals(0, $sequence);
+        $this->assertEquals(0, $calculationPercent);
+        $this->assertEquals(10.0, $basisAmount);
+        $this->assertEquals(0, $basisQuantity);
+        $this->assertEquals("", $basisQuantityUnitCode);
+        $this->assertEquals("", $reasonCode);
+        $this->assertEquals("Sondernachlass", $reason);
+
+        $this->assertTrue(self::$document->nextDocumentAllowanceCharge());
+        self::$document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->assertEquals(13.73, $actualAmount);
+        $this->assertFalse($isCharge);
+        $this->assertEquals("S", $taxCategoryCode);
+        $this->assertEquals("VAT", $taxTypeCode);
+        $this->assertEquals(7.00, $rateApplicablePercent);
+        $this->assertEquals(0, $sequence);
+        $this->assertEquals(0, $calculationPercent);
+        $this->assertEquals(137.30, $basisAmount);
+        $this->assertEquals(0, $basisQuantity);
+        $this->assertEquals("", $basisQuantityUnitCode);
+        $this->assertEquals("", $reasonCode);
+        $this->assertEquals("Sondernachlass", $reason);
+
+        $this->assertTrue(self::$document->nextDocumentAllowanceCharge());
+        self::$document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->assertEquals(5.80, $actualAmount);
+        $this->assertTrue($isCharge);
+        $this->assertEquals("S", $taxCategoryCode);
+        $this->assertEquals("VAT", $taxTypeCode);
+        $this->assertEquals(7.00, $rateApplicablePercent);
+        $this->assertEquals(0, $sequence);
+        $this->assertEquals(0, $calculationPercent);
+        $this->assertEquals(137.30, $basisAmount);
+        $this->assertEquals(0, $basisQuantity);
+        $this->assertEquals("", $basisQuantityUnitCode);
+        $this->assertEquals("", $reasonCode);
+        $this->assertEquals("Versandkosten", $reason);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentLogisticsServiceCharge
+     */
+    public function testtDocumentLogisticsServiceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentLogisticsServiceCharge());
+        $this->assertFalse(self::$document->nextDocumentLogisticsServiceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDiscountTermsFromPaymentTerm
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        self::$document->getDocumentPaymentTerm($termdescription, $termduedate, $termmandate);
+        self::$document->getDiscountTermsFromPaymentTerm($dispercent, $discbasedatetime, $discmeasureval, $discmeasureunit, $discbaseamount, $discamount);
+
+        $this->assertEquals("Zahlbar innerhalb 30 Tagen netto bis 04.07.2018, 3% Skonto innerhalb 10 Tagen bis 15.06.2018", $termdescription);
+        $this->assertNull($termduedate);
+        $this->assertEquals("", $termmandate);
+        $this->assertEquals(0, $dispercent);
+        $this->assertNull($discbasedatetime);
+        $this->assertEquals(0, $discmeasureval);
+        $this->assertEquals("", $discmeasureunit);
+        $this->assertEquals(0, $discbaseamount);
+        $this->assertEquals(0, $discamount);
+
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     */
+    public function testDocumentPositionLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertFalse(self::$document->nextDocumentPosition());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFirst(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("1", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Kunstrasen grÃŒn 3m breit", $prodname);
+        $this->assertEquals("300cm x 100 cm", $proddesc);
+        $this->assertEquals("KR3M", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4012345001235", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(4.00, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(3.3333, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(3.0, $billedquantity);
+        $this->assertEquals("MTK", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertTrue(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertTrue(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        self::$document->firstDocumentPositionGrossPriceAllowanceCharge();
+        self::$document->getDocumentPositionGrossPriceAllowanceCharge(
+            $docPosAllowanceChargeactualAmount,
+            $docPosAllowanceChargeisCharge,
+            $docPosAllowanceChargecalculationPercent,
+            $docPosAllowanceChargebasisAmount,
+            $docPosAllowanceChargereason,
+            $docPosAllowanceChargeTaxTypeCode,
+            $docPosAllowanceChargeTaxCategoryCode,
+            $docPosAllowanceChargerateApplicablePercent,
+            $docPosAllowanceChargesequence,
+            $docPosAllowanceChargebasisQuantity,
+            $docPosAllowanceChargebasisQuantityUnitCode,
+            $docPosAllowanceChargereasonCode
+        );
+        $this->assertEquals(0.6667, $docPosAllowanceChargeactualAmount);
+        $this->assertFalse($docPosAllowanceChargeisCharge);
+        $this->assertEquals(0, $docPosAllowanceChargecalculationPercent);
+        $this->assertEquals(0, $docPosAllowanceChargebasisAmount);
+        $this->assertEquals("", $docPosAllowanceChargereason);
+        $this->assertEquals("", $docPosAllowanceChargeTaxTypeCode);
+        $this->assertEquals("", $docPosAllowanceChargeTaxCategoryCode);
+        $this->assertEquals(0, $docPosAllowanceChargerateApplicablePercent);
+        $this->assertEquals(0, $docPosAllowanceChargesequence);
+        $this->assertEquals(0, $docPosAllowanceChargebasisQuantity);
+        $this->assertEquals("", $docPosAllowanceChargebasisQuantityUnitCode);
+        $this->assertEquals("", $docPosAllowanceChargereasonCode);
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(10.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        $this->assertTrue(self::$document->firstDocumentPositionNote());
+        self::$document->getDocumentPositionNote($content, $contentcode, $subjectcode);
+        $this->assertEquals("Wir erlauben uns Ihnen folgende Positionen aus der Lieferung Nr. 2018-51112 in Rechnung zu stellen:", $content);
+        $this->assertEquals("", $contentcode);
+        $this->assertEquals("", $subjectcode);
+
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionAllowanceCharge());
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionSecond(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("2", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Schweinesteak", $prodname);
+        $this->assertEquals("aus Deutschland", $proddesc);
+        $this->assertEquals("SFK5", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4000050986428", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(5.50, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(5.50, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(5.0, $billedquantity);
+        $this->assertEquals("KGM", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(27.5, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionAllowanceCharge());
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionThird(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("3", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertStringContainsString("Mineralwasser Medium 12 x 1,0l PET", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("GTRWA5", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4000001234561", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(5.49, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(5.49, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(20.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(109.80, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionAllowanceCharge());
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFourth(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("4", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertStringContainsString("Pfand", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("PFA5", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4000001234578", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(2.77, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(2.77, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(20.0, $billedquantity);
+        $this->assertEquals("C62", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(55.40, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionAllowanceCharge());
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAdditionalReferencedDocument
+     */
+    public function testDocumentPositionAdditionalReferencedDocument(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPositionAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentPositionAdditionalReferencedDocument());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderEn16931SimpleTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderEn16931SimpleTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderEn16931SimpleTest.php	(revision 8435)
@@ -0,0 +1,1462 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdDocumentPdfReader;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\ZugferdProfiles;
+
+class PdfReaderEn16931SimpleTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfReader::readAndGuessFromFile
+     */
+    public function testCanReadPdf(): void
+    {
+        self::$document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/zugferd_2p1_EN16931_Einfach.pdf");
+        $this->assertNotNull(self::$document);
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_XRECHNUNG, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('471102', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180305'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+        $this->assertNotNull(self::$document->getInvoiceObject());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentNotes
+     */
+    public function testDocumentNotes(): void
+    {
+        self::$document->getDocumentNotes($notes);
+        $this->assertIsArray($notes);
+        $this->assertNotEmpty($notes);
+        $this->assertEquals(2, count($notes));
+        $this->assertArrayHasKey(0, $notes);
+        $this->assertArrayHasKey(1, $notes);
+        $this->assertIsArray($notes[0]);
+        $this->assertNotEmpty($notes[0]);
+        $this->assertArrayHasKey("content", $notes[0]);
+        $this->assertArrayHasKey("subjectcode", $notes[0]);
+        $this->assertArrayHasKey("contentcode", $notes[0]);
+        $this->assertIsArray($notes[1]);
+        $this->assertNotEmpty($notes[1]);
+        $this->assertArrayHasKey("content", $notes[1]);
+        $this->assertArrayHasKey("subjectcode", $notes[1]);
+        $this->assertArrayHasKey("contentcode", $notes[1]);
+        $this->assertEquals("", $notes[0]["contentcode"]);
+        $this->assertEquals("", $notes[0]["subjectcode"]);
+        $this->assertEquals("Rechnung gemÃ€Ã Bestellung vom 01.03.2018.", $notes[0]["content"]);
+        $this->assertEquals("", $notes[1]["contentcode"]);
+        $this->assertEquals("REG", $notes[1]["subjectcode"]);
+        $this->assertStringContainsString("Lieferant GmbH", $notes[1]["content"]);
+        $this->assertStringContainsString("LieferantenstraÃe 20", $notes[1]["content"]);
+        $this->assertStringContainsString("80333 MÃŒnchen", $notes[1]["content"]);
+        $this->assertStringContainsString("Deutschland", $notes[1]["content"]);
+        $this->assertStringContainsString("GeschÃ€ftsfÃŒhrer: Hans Muster", $notes[1]["content"]);
+        $this->assertStringContainsString("Handelsregisternummer: H A 123", $notes[1]["content"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("", $creditorReferenceID);
+        $this->assertEquals("", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsDocumentCopy
+     */
+    public function testDocumentIsCopy(): void
+    {
+        self::$document->getIsDocumentCopy($iscopy);
+        $this->assertFalse($iscopy);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsTestDocument
+     */
+    public function testDocumentIsTestDocument(): void
+    {
+        self::$document->getIsTestDocument($istest);
+        $this->assertFalse($istest);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSummation
+     */
+    public function testDocumentSummation(): void
+    {
+        self::$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+        $this->assertEquals(529.87, $grandTotalAmount);
+        $this->assertEquals(529.87, $duePayableAmount);
+        $this->assertEquals(473.00, $lineTotalAmount);
+        $this->assertEquals(0.00, $chargeTotalAmount);
+        $this->assertEquals(0.00, $allowanceTotalAmount);
+        $this->assertEquals(473.00, $taxBasisTotalAmount);
+        $this->assertEquals(56.87, $taxTotalAmount);
+        $this->assertEquals(0.00, $roundingAmount);
+        $this->assertEquals(0.00, $totalPrepaidAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerReference
+     */
+    public function testGetDocumentBuyerReference(): void
+    {
+        self::$document->getDocumentBuyerReference($buyerReference);
+        $this->assertEquals("", $buyerReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSeller
+     */
+    public function testDocumentSellerGeneral(): void
+    {
+        self::$document->getDocumentSeller($sellername, $sellerids, $sellerdescription);
+        $this->assertEquals("Lieferant GmbH", $sellername);
+        $this->assertIsArray($sellerids);
+        $this->assertArrayHasKey(0, $sellerids);
+        $this->assertArrayNotHasKey(1, $sellerids);
+        $this->assertEquals("549910", $sellerids[0]);
+        $this->assertEquals("", $sellerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerGlobalId
+     */
+    public function testDocumentSellerGlobalId(): void
+    {
+        self::$document->getDocumentSellerGlobalId($sellerglobalids);
+        $this->assertIsArray($sellerglobalids);
+        $this->assertArrayHasKey("0088", $sellerglobalids);
+        $this->assertEquals("4000001123452", $sellerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRegistration
+     */
+    public function testDocumentSellerTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRegistration($sellertaxreg);
+        $this->assertIsArray($sellertaxreg);
+        $this->assertArrayHasKey("VA", $sellertaxreg);
+        $this->assertArrayHasKey("FC", $sellertaxreg);
+        $this->assertArrayNotHasKey(0, $sellertaxreg);
+        $this->assertArrayNotHasKey(1, $sellertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $sellertaxreg);
+        $this->assertEquals("201/113/40209", $sellertaxreg["FC"]);
+        $this->assertEquals("DE123456789", $sellertaxreg["VA"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerAddress
+     */
+    public function testDocumentSellerAddress(): void
+    {
+        self::$document->getDocumentSellerAddress($sellerlineone, $sellerlinetwo, $sellerlinethree, $sellerpostcode, $sellercity, $sellercountry, $sellersubdivision);
+        $this->assertEquals("LieferantenstraÃe 20", $sellerlineone);
+        $this->assertEquals("", $sellerlinetwo);
+        $this->assertEquals("", $sellerlinethree);
+        $this->assertEquals("80333", $sellerpostcode);
+        $this->assertEquals("MÃŒnchen", $sellercity);
+        $this->assertEquals("DE", $sellercountry);
+        $this->assertIsArray($sellersubdivision);
+        $this->assertEmpty($sellersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerLegalOrganisation
+     */
+    public function testDocumentSellerLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerLegalOrganisation($sellerlegalorgid, $sellerlegalorgtype, $sellerlegalorgname);
+        $this->assertEquals("", $sellerlegalorgid);
+        $this->assertEquals("", $sellerlegalorgtype);
+        $this->assertEquals("", $sellerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerContact
+     */
+    public function testDocumentSellerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerContact());
+        $this->assertFalse(self::$document->nextDocumentSellerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerContact($sellercontactpersonname, $sellercontactdepartmentname, $sellercontactphoneno, $sellercontactfaxno, $sellercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyer
+     */
+    public function testDocumentBuyerGeneral(): void
+    {
+        self::$document->getDocumentBuyer($buyername, $buyerids, $buyerdescription);
+        $this->assertEquals("Kunden AG Mitte", $buyername);
+        $this->assertIsArray($buyerids);
+        $this->assertArrayHasKey(0, $buyerids);
+        $this->assertArrayNotHasKey(1, $buyerids);
+        $this->assertEquals("GE2020211", $buyerids[0]);
+        $this->assertEquals("", $buyerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerGlobalId
+     */
+    public function testDocumentBuyerGlobalId(): void
+    {
+        self::$document->getDocumentBuyerGlobalId($buyerglobalids);
+        $this->assertIsArray($buyerglobalids);
+        $this->assertEmpty($buyerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerTaxRegistration
+     */
+    public function testDocumentBuyerTaxRegistration(): void
+    {
+        self::$document->getDocumentBuyerTaxRegistration($buyertaxreg);
+        $this->assertIsArray($buyertaxreg);
+        $this->assertEmpty($buyertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerAddress
+     */
+    public function testDocumentBuyerAddress(): void
+    {
+        self::$document->getDocumentBuyerAddress($buyerlineone, $buyerlinetwo, $buyerlinethree, $buyerpostcode, $buyercity, $buyercountry, $buyersubdivision);
+        $this->assertEquals("KundenstraÃe 15", $buyerlineone);
+        $this->assertEquals("", $buyerlinetwo);
+        $this->assertEquals("", $buyerlinethree);
+        $this->assertEquals("69876", $buyerpostcode);
+        $this->assertEquals("Frankfurt", $buyercity);
+        $this->assertEquals("DE", $buyercountry);
+        $this->assertIsArray($buyersubdivision);
+        $this->assertEmpty($buyersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerLegalOrganisation
+     */
+    public function testDocumentBuyerLegalOrganization(): void
+    {
+        self::$document->getDocumentBuyerLegalOrganisation($buyerlegalorgid, $buyerlegalorgtype, $buyerlegalorgname);
+        $this->assertEquals("", $buyerlegalorgid);
+        $this->assertEquals("", $buyerlegalorgtype);
+        $this->assertEquals("", $buyerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentBuyerContact
+     */
+    public function testDocumentBuyerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentBuyerContact());
+        $this->assertFalse(self::$document->nextDocumentBuyerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentBuyerContact($buyercontactpersonname, $buyercontactdepartmentname, $buyercontactphoneno, $buyercontactfaxno, $buyercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentative
+     */
+    public function testDocumentSellerTaxRepresentativeGeneral(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentative($sellertaxreprname, $sellertaxreprids, $sellertaxreprdescription);
+        $this->assertEquals("", $sellertaxreprname);
+        $this->assertIsArray($sellertaxreprids);
+        $this->assertEmpty($sellertaxreprids);
+        $this->assertEquals("", $sellertaxreprdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeGlobalId($sellertaxreprglobalids);
+        $this->assertIsArray($sellertaxreprglobalids);
+        $this->assertEmpty($sellertaxreprglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeTaxRegistration($sellertaxreprtaxreg);
+        $this->assertIsArray($sellertaxreprtaxreg);
+        $this->assertEmpty($sellertaxreprtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeAddress
+     */
+    public function testDocumentSellerTaxRepresentativeAddress(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeAddress($sellertaxreprlineone, $sellertaxreprlinetwo, $sellertaxreprlinethree, $sellertaxreprpostcode, $sellertaxreprcity, $sellertaxreprcountry, $sellertaxreprsubdivision);
+        $this->assertEquals("", $sellertaxreprlineone);
+        $this->assertEquals("", $sellertaxreprlinetwo);
+        $this->assertEquals("", $sellertaxreprlinethree);
+        $this->assertEquals("", $sellertaxreprpostcode);
+        $this->assertEquals("", $sellertaxreprcity);
+        $this->assertEquals("", $sellertaxreprcountry);
+        $this->assertIsArray($sellertaxreprsubdivision);
+        $this->assertEmpty($sellertaxreprsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testDocumentSellerTaxRepresentativeLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeLegalOrganisation($sellertaxreprlegalorgid, $sellertaxreprlegalorgtype, $sellertaxreprlegalorgname);
+        $this->assertEquals("", $sellertaxreprlegalorgid);
+        $this->assertEquals("", $sellertaxreprlegalorgtype);
+        $this->assertEquals("", $sellertaxreprlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerTaxRepresentativeContact
+     */
+    public function testDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerTaxRepresentativeContact());
+        $this->assertFalse(self::$document->nextDocumentSellerTaxRepresentativeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerTaxRepresentativeContact($sellertaxreprcontactpersonname, $sellertaxreprcontactdepartmentname, $sellertaxreprcontactphoneno, $sellertaxreprcontactfaxno, $sellertaxreprcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipTo
+     */
+    public function testDocumentShipToGeneral(): void
+    {
+        self::$document->getDocumentShipTo($shiptoname, $shiptoids, $shiptodescription);
+        $this->assertEquals("", $shiptoname);
+        $this->assertIsArray($shiptoids);
+        $this->assertEmpty($shiptoids);
+        $this->assertEquals("", $shiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToGlobalId
+     */
+    public function testDocumentShipToGlobalId(): void
+    {
+        self::$document->getDocumentShipToGlobalId($shiptoglobalids);
+        $this->assertIsArray($shiptoglobalids);
+        $this->assertEmpty($shiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToTaxRegistration
+     */
+    public function testDocumentShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentShipToTaxRegistration($shiptotaxreg);
+        $this->assertIsArray($shiptotaxreg);
+        $this->assertEmpty($shiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToAddress
+     */
+    public function testDocumentShipToAddress(): void
+    {
+        self::$document->getDocumentShipToAddress($shiptolineone, $shiptolinetwo, $shiptolinethree, $shiptopostcode, $shiptocity, $shiptocountry, $shiptosubdivision);
+        $this->assertEquals("", $shiptolineone);
+        $this->assertEquals("", $shiptolinetwo);
+        $this->assertEquals("", $shiptolinethree);
+        $this->assertEquals("", $shiptopostcode);
+        $this->assertEquals("", $shiptocity);
+        $this->assertEquals("", $shiptocountry);
+        $this->assertIsArray($shiptosubdivision);
+        $this->assertEmpty($shiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToLegalOrganisation
+     */
+    public function testDocumentShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentShipToLegalOrganisation($shiptolegalorgid, $shiptolegalorgtype, $shiptolegalorgname);
+        $this->assertEquals("", $shiptolegalorgid);
+        $this->assertEquals("", $shiptolegalorgtype);
+        $this->assertEquals("", $shiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipToContact
+     */
+    public function testDocumentShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipToContact());
+        $this->assertFalse(self::$document->nextDocumentShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipToContact($shiptocontactpersonname, $shiptocontactdepartmentname, $shiptocontactphoneno, $shiptocontactfaxno, $shiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipTo
+     */
+    public function testDocumentUltimateShipToGeneral(): void
+    {
+        self::$document->getDocumentUltimateShipTo($ultimateshiptoname, $ultimateshiptoids, $ultimateshiptodescription);
+        $this->assertEquals("", $ultimateshiptoname);
+        $this->assertIsArray($ultimateshiptoids);
+        $this->assertEmpty($ultimateshiptoids);
+        $this->assertEquals("", $ultimateshiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToGlobalId
+     */
+    public function testDocumentUltimateShipToGlobalId(): void
+    {
+        self::$document->getDocumentUltimateShipToGlobalId($ultimateshiptoglobalids);
+        $this->assertIsArray($ultimateshiptoglobalids);
+        $this->assertEmpty($ultimateshiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToTaxRegistration
+     */
+    public function testDocumentUltimateShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentUltimateShipToTaxRegistration($ultimateshiptotaxreg);
+        $this->assertIsArray($ultimateshiptotaxreg);
+        $this->assertEmpty($ultimateshiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToAddress
+     */
+    public function testDocumentUltimateShipToAddress(): void
+    {
+        self::$document->getDocumentUltimateShipToAddress($ultimateshiptolineone, $ultimateshiptolinetwo, $ultimateshiptolinethree, $ultimateshiptopostcode, $ultimateshiptocity, $ultimateshiptocountry, $ultimateshiptosubdivision);
+        $this->assertEquals("", $ultimateshiptolineone);
+        $this->assertEquals("", $ultimateshiptolinetwo);
+        $this->assertEquals("", $ultimateshiptolinethree);
+        $this->assertEquals("", $ultimateshiptopostcode);
+        $this->assertEquals("", $ultimateshiptocity);
+        $this->assertEquals("", $ultimateshiptocountry);
+        $this->assertIsArray($ultimateshiptosubdivision);
+        $this->assertEmpty($ultimateshiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToLegalOrganisation
+     */
+    public function testDocumentUltimateShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentUltimateShipToLegalOrganisation($ultimateshiptolegalorgid, $ultimateshiptolegalorgtype, $ultimateshiptolegalorgname);
+        $this->assertEquals("", $ultimateshiptolegalorgid);
+        $this->assertEquals("", $ultimateshiptolegalorgtype);
+        $this->assertEquals("", $ultimateshiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateShipToContact
+     */
+    public function testDocumentUltimateShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFrom
+     */
+    public function testDocumentShipFromGeneral(): void
+    {
+        self::$document->getDocumentShipFrom($shipfromname, $shipfromids, $shipfromdescription);
+        $this->assertEquals("", $shipfromname);
+        $this->assertIsArray($shipfromids);
+        $this->assertEmpty($shipfromids);
+        $this->assertEquals("", $shipfromdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromGlobalId
+     */
+    public function testDocumentShipFromGlobalId(): void
+    {
+        self::$document->getDocumentShipFromGlobalId($shipfromglobalids);
+        $this->assertIsArray($shipfromglobalids);
+        $this->assertEmpty($shipfromglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromTaxRegistration
+     */
+    public function testDocumentShipFromTaxRegistration(): void
+    {
+        self::$document->getDocumentShipFromTaxRegistration($shipfromtaxreg);
+        $this->assertIsArray($shipfromtaxreg);
+        $this->assertEmpty($shipfromtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromAddress
+     */
+    public function testDocumentShipFromAddress(): void
+    {
+        self::$document->getDocumentShipFromAddress($shipfromlineone, $shipfromlinetwo, $shipfromlinethree, $shipfrompostcode, $shipfromcity, $shipfromcountry, $shipfromsubdivision);
+        $this->assertEquals("", $shipfromlineone);
+        $this->assertEquals("", $shipfromlinetwo);
+        $this->assertEquals("", $shipfromlinethree);
+        $this->assertEquals("", $shipfrompostcode);
+        $this->assertEquals("", $shipfromcity);
+        $this->assertEquals("", $shipfromcountry);
+        $this->assertIsArray($shipfromsubdivision);
+        $this->assertEmpty($shipfromsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromLegalOrganisation
+     */
+    public function testDocumentShipFromLegalOrganization(): void
+    {
+        self::$document->getDocumentShipFromLegalOrganisation($shipfromlegalorgid, $shipfromlegalorgtype, $shipfromlegalorgname);
+        $this->assertEquals("", $shipfromlegalorgid);
+        $this->assertEquals("", $shipfromlegalorgtype);
+        $this->assertEquals("", $shipfromlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipFromContact
+     */
+    public function testDocumentShipFromContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicer
+     */
+    public function testDocumentInvoicerGeneral(): void
+    {
+        self::$document->getDocumentInvoicer($invoicername, $invoicerids, $invoicerdescription);
+        $this->assertEquals("", $invoicername);
+        $this->assertIsArray($invoicerids);
+        $this->assertEmpty($invoicerids);
+        $this->assertEquals("", $invoicerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerGlobalId
+     */
+    public function testDocumentInvoicerGlobalId(): void
+    {
+        self::$document->getDocumentInvoicerGlobalId($invoicerglobalids);
+        $this->assertIsArray($invoicerglobalids);
+        $this->assertEmpty($invoicerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerTaxRegistration
+     */
+    public function testDocumentInvoicerTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoicerTaxRegistration($invoicertaxreg);
+        $this->assertIsArray($invoicertaxreg);
+        $this->assertEmpty($invoicertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerAddress
+     */
+    public function testDocumentInvoicerAddress(): void
+    {
+        self::$document->getDocumentInvoicerAddress($invoicerlineone, $invoicerlinetwo, $invoicerlinethree, $invoicerpostcode, $invoicercity, $invoicercountry, $invoicersubdivision);
+        $this->assertEquals("", $invoicerlineone);
+        $this->assertEquals("", $invoicerlinetwo);
+        $this->assertEquals("", $invoicerlinethree);
+        $this->assertEquals("", $invoicerpostcode);
+        $this->assertEquals("", $invoicercity);
+        $this->assertEquals("", $invoicercountry);
+        $this->assertIsArray($invoicersubdivision);
+        $this->assertEmpty($invoicersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerLegalOrganisation
+     */
+    public function testDocumentInvoicerLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoicerLegalOrganisation($invoicerlegalorgid, $invoicerlegalorgtype, $invoicerlegalorgname);
+        $this->assertEquals("", $invoicerlegalorgid);
+        $this->assertEquals("", $invoicerlegalorgtype);
+        $this->assertEquals("", $invoicerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoicerContact
+     */
+    public function testDocumentInvoicerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicee
+     */
+    public function testDocumentInvoiceeGeneral(): void
+    {
+        self::$document->getDocumentInvoicee($invoiceename, $invoiceeids, $invoiceedescription);
+        $this->assertEquals("", $invoiceename);
+        $this->assertIsArray($invoiceeids);
+        $this->assertEmpty($invoiceeids);
+        $this->assertEquals("", $invoiceedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeGlobalId
+     */
+    public function testDocumentInvoiceeGlobalId(): void
+    {
+        self::$document->getDocumentInvoiceeGlobalId($invoiceeglobalids);
+        $this->assertIsArray($invoiceeglobalids);
+        $this->assertEmpty($invoiceeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeTaxRegistration
+     */
+    public function testDocumentInvoiceeTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoiceeTaxRegistration($invoiceetaxreg);
+        $this->assertIsArray($invoiceetaxreg);
+        $this->assertEmpty($invoiceetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeAddress
+     */
+    public function testDocumentInvoiceeAddress(): void
+    {
+        self::$document->getDocumentInvoiceeAddress($invoiceelineone, $invoiceelinetwo, $invoiceelinethree, $invoiceepostcode, $invoiceecity, $invoiceecountry, $invoiceesubdivision);
+        $this->assertEquals("", $invoiceelineone);
+        $this->assertEquals("", $invoiceelinetwo);
+        $this->assertEquals("", $invoiceelinethree);
+        $this->assertEquals("", $invoiceepostcode);
+        $this->assertEquals("", $invoiceecity);
+        $this->assertEquals("", $invoiceecountry);
+        $this->assertIsArray($invoiceesubdivision);
+        $this->assertEmpty($invoiceesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeLegalOrganisation
+     */
+    public function testDocumentInvoiceeLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoiceeLegalOrganisation($invoiceelegalorgid, $invoiceelegalorgtype, $invoiceelegalorgname);
+        $this->assertEquals("", $invoiceelegalorgid);
+        $this->assertEquals("", $invoiceelegalorgtype);
+        $this->assertEquals("", $invoiceelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoiceeContact
+     */
+    public function testDocumentInvoiceeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayee
+     */
+    public function testDocumentPayeeGeneral(): void
+    {
+        self::$document->getDocumentPayee($payeename, $payeeids, $payeedescription);
+        $this->assertEquals("", $payeename);
+        $this->assertIsArray($payeeids);
+        $this->assertEmpty($payeeids);
+        $this->assertEquals("", $payeedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeGlobalId
+     */
+    public function testDocumentPayeeGlobalId(): void
+    {
+        self::$document->getDocumentPayeeGlobalId($payeeglobalids);
+        $this->assertIsArray($payeeglobalids);
+        $this->assertEmpty($payeeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeTaxRegistration
+     */
+    public function testDocumentPayeeTaxRegistration(): void
+    {
+        self::$document->getDocumentPayeeTaxRegistration($payeetaxreg);
+        $this->assertIsArray($payeetaxreg);
+        $this->assertEmpty($payeetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeAddress
+     */
+    public function testDocumentPayeeAddress(): void
+    {
+        self::$document->getDocumentPayeeAddress($payeelineone, $payeelinetwo, $payeelinethree, $payeepostcode, $payeecity, $payeecountry, $payeesubdivision);
+        $this->assertEquals("", $payeelineone);
+        $this->assertEquals("", $payeelinetwo);
+        $this->assertEquals("", $payeelinethree);
+        $this->assertEquals("", $payeepostcode);
+        $this->assertEquals("", $payeecity);
+        $this->assertEquals("", $payeecountry);
+        $this->assertIsArray($payeesubdivision);
+        $this->assertEmpty($payeesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeLegalOrganisation
+     */
+    public function testDocumentPayeeLegalOrganization(): void
+    {
+        self::$document->getDocumentPayeeLegalOrganisation($payeelegalorgid, $payeelegalorgtype, $payeelegalorgname);
+        $this->assertEquals("", $payeelegalorgid);
+        $this->assertEquals("", $payeelegalorgtype);
+        $this->assertEquals("", $payeelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPayeeContact
+     */
+    public function testDocumentPayeeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUser
+     */
+    public function testDocumentProductEndUserGeneral(): void
+    {
+        self::$document->getDocumentProductEndUser($producendusername, $producenduserids, $producenduserdescription);
+        $this->assertEquals("", $producendusername);
+        $this->assertIsArray($producenduserids);
+        $this->assertArrayNotHasKey(0, $producenduserids);
+        $this->assertArrayNotHasKey(1, $producenduserids);
+        $this->assertEquals("", $producenduserdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserGlobalId
+     */
+    public function testDocumentProductEndUserGlobalId(): void
+    {
+        self::$document->getDocumentProductEndUserGlobalId($producenduserglobalids);
+        $this->assertIsArray($producenduserglobalids);
+        $this->assertArrayNotHasKey("0088", $producenduserglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserTaxRegistration
+     */
+    public function testDocumentProductEndUserTaxRegistration(): void
+    {
+        self::$document->getDocumentProductEndUserTaxRegistration($producendusertaxreg);
+        $this->assertIsArray($producendusertaxreg);
+        $this->assertArrayNotHasKey("VA", $producendusertaxreg);
+        $this->assertArrayNotHasKey("FC", $producendusertaxreg);
+        $this->assertArrayNotHasKey(0, $producendusertaxreg);
+        $this->assertArrayNotHasKey(1, $producendusertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $producendusertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserAddress
+     */
+    public function testDocumentProductEndUserAddress(): void
+    {
+        self::$document->getDocumentProductEndUserAddress($producenduserlineone, $producenduserlinetwo, $producenduserlinethree, $producenduserpostcode, $producendusercity, $producendusercountry, $producendusersubdivision);
+        $this->assertEquals("", $producenduserlineone);
+        $this->assertEquals("", $producenduserlinetwo);
+        $this->assertEquals("", $producenduserlinethree);
+        $this->assertEquals("", $producenduserpostcode);
+        $this->assertEquals("", $producendusercity);
+        $this->assertEquals("", $producendusercountry);
+        $this->assertIsArray($producendusersubdivision);
+        $this->assertEmpty($producendusersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserLegalOrganisation
+     */
+    public function testDocumentProductEndUserLegalOrganization(): void
+    {
+        self::$document->getDocumentProductEndUserLegalOrganisation($producenduserlegalorgid, $producenduserlegalorgtype, $producenduserlegalorgname);
+        $this->assertEquals("", $producenduserlegalorgid);
+        $this->assertEquals("", $producenduserlegalorgtype);
+        $this->assertEquals("", $producenduserlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentProductEndUserContactContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentProductEndUserContactContact
+     */
+    public function testDocumentProductEndUserContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentProductEndUserContactContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentProductEndUserContact($producendusercontactpersonname, $producendusercontactdepartmentname, $producendusercontactphoneno, $producendusercontactfaxno, $producendusercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentProductEndUserContactContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerOrderReferencedDocument
+     */
+    public function testDocumentSellerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentSellerOrderReferencedDocument($sellerorderrefdocid, $sellerorderrefdocdate);
+        $this->assertEquals("", $sellerorderrefdocid);
+        $this->assertNull($sellerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerOrderReferencedDocument
+     */
+    public function testDocumentBuyerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentBuyerOrderReferencedDocument($buyerorderrefdocid, $buyerorderrefdocdate);
+        $this->assertEquals("", $buyerorderrefdocid);
+        $this->assertNull($buyerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentContractReferencedDocument
+     */
+    public function testDocumentContractReferencedDocument(): void
+    {
+        self::$document->getDocumentContractReferencedDocument($contractrefdocid, $contractrefdocdate);
+        $this->assertEquals("", $contractrefdocid);
+        $this->assertNull($contractrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocuments
+     */
+    public function testDocumentAdditionalReferencedDocuments(): void
+    {
+        self::$document->getDocumentAdditionalReferencedDocuments($additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs);
+        $this->assertEmpty($additionalrefdocs);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProcuringProject
+     */
+    public function testDocumentProcuringProject(): void
+    {
+        self::$document->getDocumentProcuringProject($projectid, $projectname);
+        $this->assertEquals("", $projectid);
+        $this->assertEquals("", $projectname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSupplyChainEvent
+     */
+    public function testDocumentSupplyChainEvent(): void
+    {
+        self::$document->getDocumentSupplyChainEvent($supplychainevent);
+        $this->assertNotNull($supplychainevent);
+        $this->assertInstanceOf("DateTime", $supplychainevent);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180305'))->format('Ymd'), $supplychainevent->format('Ymd'));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDespatchAdviceReferencedDocument
+     */
+    public function testDocumentDespatchAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentDespatchAdviceReferencedDocument($despatchdocid, $despatchdocdate);
+        $this->assertEquals("", $despatchdocid);
+        $this->assertNull($despatchdocdate);
+        $this->assertNotInstanceOf("DateTime", $despatchdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentReceivingAdviceReferencedDocument
+     */
+    public function testDocumentReceivingAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentReceivingAdviceReferencedDocument($recadvid, $recadvdate);
+        $this->assertEquals("", $recadvid);
+        $this->assertNull($recadvdate);
+        $this->assertNotInstanceOf("DateTime", $recadvdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryNoteReferencedDocument
+     */
+    public function testDocumentDeliveryNoteReferencedDocument(): void
+    {
+        self::$document->getDocumentDeliveryNoteReferencedDocument($deliverynoterefdocid, $deliverynoterefdocdate);
+        $this->assertEquals("", $deliverynoterefdocid);
+        $this->assertNull($deliverynoterefdocdate);
+        $this->assertNotInstanceOf("DateTime", $deliverynoterefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBillingPeriod
+     */
+    public function testDocumentBillingPeriod(): void
+    {
+        self::$document->getDocumentBillingPeriod($docbillingperiodstart, $docbillingperiodend);
+        $this->assertNull($docbillingperiodstart);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodstart);
+        $this->assertNull($docbillingperiodend);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodend);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharges
+     */
+    public function testDocumentAllowanceCharges(): void
+    {
+        self::$document->getDocumentAllowanceCharges($docallowancecharge);
+        $this->assertIsArray($docallowancecharge);
+        $this->assertEmpty($docallowancecharge);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerms
+     */
+    public function testDocumentPaymentTerms(): void
+    {
+        self::$document->getDocumentPaymentTerms($docpaymentterms);
+        $this->assertIsArray($docpaymentterms);
+        $this->assertNotEmpty($docpaymentterms);
+        $this->assertArrayHasKey(0, $docpaymentterms);
+        $this->assertIsArray($docpaymentterms[0]);
+        $this->assertArrayHasKey("description", $docpaymentterms[0]);
+        $this->assertArrayHasKey("duedate", $docpaymentterms[0]);
+        $this->assertArrayHasKey("directdebitmandateid", $docpaymentterms[0]);
+        $this->assertArrayHasKey("partialpaymentamount", $docpaymentterms[0]);
+        $this->assertEquals("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018", $docpaymentterms[0]["description"]);
+        $this->assertNull($docpaymentterms[0]["duedate"]);
+        $this->assertNotInstanceOf("DateTime", $docpaymentterms[0]["duedate"]);
+        $this->assertEquals("", $docpaymentterms[0]["directdebitmandateid"]);
+        $this->assertEquals(0.0, $docpaymentterms[0]["partialpaymentamount"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryTerms
+     */
+    public function testDocumentDeliveryTerms(): void
+    {
+        self::$document->getDocumentDeliveryTerms($devtermcode);
+        $this->assertEquals("", $devtermcode);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument
+     */
+    public function testDocumentAdditionalReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentAdditionalReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testDocumentUltimateCustomerOrderReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateCustomerOrderReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentUltimateCustomerOrderReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentPaymentMeansLoop(): void
+    {
+        $this->assertFalse(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     */
+    public function testDocumentTaxLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        $this->assertTrue(self::$document->nextDocumentTax());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentTax
+     */
+    public function testDocumentTax(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(275.0, $basisAmount);
+        $this->assertEquals(19.25, $calculatedAmount);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+
+        $this->assertTrue(self::$document->nextDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(198.0, $basisAmount);
+        $this->assertEquals(37.62, $calculatedAmount);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentAllowanceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentLogisticsServiceCharge
+     */
+    public function testtDocumentLogisticsServiceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentLogisticsServiceCharge());
+        $this->assertFalse(self::$document->nextDocumentLogisticsServiceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDiscountTermsFromPaymentTerm
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        self::$document->getDocumentPaymentTerm($termdescription, $termduedate, $termmandate);
+        self::$document->getDiscountTermsFromPaymentTerm($dispercent, $discbasedatetime, $discmeasureval, $discmeasureunit, $discbaseamount, $discamount);
+
+        $this->assertEquals("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018", $termdescription);
+        $this->assertNull($termduedate);
+        $this->assertEquals("", $termmandate);
+        $this->assertEquals(0, $dispercent);
+        $this->assertNull($discbasedatetime);
+        $this->assertEquals(0, $discmeasureval);
+        $this->assertEquals("", $discmeasureunit);
+        $this->assertEquals(0, $discbaseamount);
+        $this->assertEquals(0, $discamount);
+
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     */
+    public function testDocumentPositionLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition(), "has a first position");
+        $this->assertTrue(self::$document->nextDocumentPosition(), "has a second position");
+        $this->assertFalse(self::$document->nextDocumentPosition(), "has no third position");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFirst(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("1", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("TrennblÃ€tter A4", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("TB100A4", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4012345001235", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(9.90, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(9.90, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(20.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(198.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionSecond(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("2", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Joghurt Banane", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("ARNR2", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4000050986428", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(5.50, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(5.50, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(50.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(275.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAdditionalReferencedDocument
+     */
+    public function testDocumentPositionAdditionalReferencedDocument(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPositionAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentPositionAdditionalReferencedDocument());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderExtended2Test.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderExtended2Test.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderExtended2Test.php	(revision 8435)
@@ -0,0 +1,1669 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\ZugferdDocumentPdfReader;
+
+class PdfReaderExtended2Test extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfReader::readAndGuessFromFile
+     */
+    public function testCanReadPdf(): void
+    {
+        self::$document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/Facture_F20200027_EXTENDED.pdf");
+        $this->assertNotNull(self::$document);
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('F20200027', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20200115'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+        $this->assertNotNull(self::$document->getInvoiceObject());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentNotes
+     */
+    public function testDocumentNotes(): void
+    {
+        self::$document->getDocumentNotes($notes);
+        $this->assertIsArray($notes);
+        $this->assertNotEmpty($notes);
+        $this->assertEquals(2, count($notes));
+        $this->assertArrayHasKey(0, $notes);
+        $this->assertArrayHasKey(1, $notes);
+        $this->assertIsArray($notes[0]);
+        $this->assertNotEmpty($notes[0]);
+        $this->assertArrayHasKey("content", $notes[0]);
+        $this->assertArrayHasKey("subjectcode", $notes[0]);
+        $this->assertArrayHasKey("contentcode", $notes[0]);
+        $this->assertIsArray($notes[1]);
+        $this->assertNotEmpty($notes[1]);
+        $this->assertArrayHasKey("content", $notes[1]);
+        $this->assertArrayHasKey("subjectcode", $notes[1]);
+        $this->assertArrayHasKey("contentcode", $notes[1]);
+        $this->assertEquals("", $notes[0]["contentcode"]);
+        $this->assertEquals("REG", $notes[0]["subjectcode"]);
+        $this->assertEquals("FOURNISSEUR F SARL au capital de 50 000 EUR", $notes[0]["content"]);
+        $this->assertEquals("", $notes[1]["contentcode"]);
+        $this->assertEquals("ABL", $notes[1]["subjectcode"]);
+        $this->assertEquals("RCS MAVILLE 123 456 789", $notes[1]["content"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("", $creditorReferenceID);
+        $this->assertEquals("F20180023BUYER", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsDocumentCopy
+     */
+    public function testDocumentIsCopy(): void
+    {
+        self::$document->getIsDocumentCopy($iscopy);
+        $this->assertFalse($iscopy);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsTestDocument
+     */
+    public function testDocumentIsTestDocument(): void
+    {
+        self::$document->getIsTestDocument($istest);
+        $this->assertFalse($istest);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSummation
+     */
+    public function testDocumentSummation(): void
+    {
+        self::$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+        $this->assertEquals(110.0, $grandTotalAmount);
+        $this->assertEquals(100.0, $duePayableAmount);
+        $this->assertEquals(95.0, $lineTotalAmount);
+        $this->assertEquals(10.0, $chargeTotalAmount);
+        $this->assertEquals(5.0, $allowanceTotalAmount);
+        $this->assertEquals(100.0, $taxBasisTotalAmount);
+        $this->assertEquals(10.0, $taxTotalAmount);
+        $this->assertEquals(0.00, $roundingAmount);
+        $this->assertEquals(10.00, $totalPrepaidAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerReference
+     */
+    public function testGetDocumentBuyerReference(): void
+    {
+        self::$document->getDocumentBuyerReference($buyerReference);
+        $this->assertEquals("SERVEXEC", $buyerReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSeller
+     */
+    public function testDocumentSellerGeneral(): void
+    {
+        self::$document->getDocumentSeller($sellername, $sellerids, $sellerdescription);
+        $this->assertEquals("LE FOURNISSEUR", $sellername);
+        $this->assertIsArray($sellerids);
+        $this->assertArrayNotHasKey(0, $sellerids);
+        $this->assertArrayNotHasKey(1, $sellerids);
+        $this->assertEquals("", $sellerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerGlobalId
+     */
+    public function testDocumentSellerGlobalId(): void
+    {
+        self::$document->getDocumentSellerGlobalId($sellerglobalids);
+        $this->assertIsArray($sellerglobalids);
+        $this->assertArrayHasKey("0088", $sellerglobalids);
+        $this->assertEquals("587451236587", $sellerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRegistration
+     */
+    public function testDocumentSellerTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRegistration($sellertaxreg);
+        $this->assertIsArray($sellertaxreg);
+        $this->assertArrayHasKey("VA", $sellertaxreg);
+        $this->assertArrayNotHasKey("FC", $sellertaxreg);
+        $this->assertArrayNotHasKey(0, $sellertaxreg);
+        $this->assertArrayNotHasKey(1, $sellertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $sellertaxreg);
+        $this->assertEquals("FR32123456789", $sellertaxreg["VA"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerAddress
+     */
+    public function testDocumentSellerAddress(): void
+    {
+        self::$document->getDocumentSellerAddress($sellerlineone, $sellerlinetwo, $sellerlinethree, $sellerpostcode, $sellercity, $sellercountry, $sellersubdivision);
+        $this->assertEquals("35 rue d'ici", $sellerlineone);
+        $this->assertEquals("Seller line 2", $sellerlinetwo);
+        $this->assertEquals("", $sellerlinethree);
+        $this->assertEquals("75018", $sellerpostcode);
+        $this->assertEquals("PARIS", $sellercity);
+        $this->assertEquals("FR", $sellercountry);
+        $this->assertIsArray($sellersubdivision);
+        $this->assertEmpty($sellersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerLegalOrganisation
+     */
+    public function testDocumentSellerLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerLegalOrganisation($sellerlegalorgid, $sellerlegalorgtype, $sellerlegalorgname);
+        $this->assertEquals("12345678900014", $sellerlegalorgid);
+        $this->assertEquals("0002", $sellerlegalorgtype);
+        $this->assertEquals("SELLER TRADE NAME", $sellerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerContact
+     */
+    public function testDocumentSellerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerContact());
+        $this->assertFalse(self::$document->nextDocumentSellerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerContact($sellercontactpersonname, $sellercontactdepartmentname, $sellercontactphoneno, $sellercontactfaxno, $sellercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyer
+     */
+    public function testDocumentBuyerGeneral(): void
+    {
+        self::$document->getDocumentBuyer($buyername, $buyerids, $buyerdescription);
+        $this->assertEquals("LE CLIENT", $buyername);
+        $this->assertIsArray($buyerids);
+        $this->assertArrayNotHasKey(0, $buyerids);
+        $this->assertArrayNotHasKey(1, $buyerids);
+        $this->assertEquals("", $buyerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerGlobalId
+     */
+    public function testDocumentBuyerGlobalId(): void
+    {
+        self::$document->getDocumentBuyerGlobalId($buyerglobalids);
+        $this->assertIsArray($buyerglobalids);
+        $this->assertArrayHasKey("0088", $buyerglobalids);
+        $this->assertEquals("3654789851", $buyerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerTaxRegistration
+     */
+    public function testDocumentBuyerTaxRegistration(): void
+    {
+        self::$document->getDocumentBuyerTaxRegistration($buyertaxreg);
+        $this->assertIsArray($buyertaxreg);
+        $this->assertArrayHasKey("VA", $buyertaxreg);
+        $this->assertArrayNotHasKey("FC", $buyertaxreg);
+        $this->assertArrayNotHasKey(0, $buyertaxreg);
+        $this->assertArrayNotHasKey(1, $buyertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $buyertaxreg);
+        $this->assertEquals("FR 05 987 654 321", $buyertaxreg["VA"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerAddress
+     */
+    public function testDocumentBuyerAddress(): void
+    {
+        self::$document->getDocumentBuyerAddress($buyerlineone, $buyerlinetwo, $buyerlinethree, $buyerpostcode, $buyercity, $buyercountry, $buyersubdivision);
+        $this->assertEquals("58 rue de la mer", $buyerlineone);
+        $this->assertEquals("Buyer line 2", $buyerlinetwo);
+        $this->assertEquals("", $buyerlinethree);
+        $this->assertEquals("06000", $buyerpostcode);
+        $this->assertEquals("NICE", $buyercity);
+        $this->assertEquals("FR", $buyercountry);
+        $this->assertIsArray($buyersubdivision);
+        $this->assertEmpty($buyersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerLegalOrganisation
+     */
+    public function testDocumentBuyerLegalOrganization(): void
+    {
+        self::$document->getDocumentBuyerLegalOrganisation($buyerlegalorgid, $buyerlegalorgtype, $buyerlegalorgname);
+        $this->assertEquals("98765432100029", $buyerlegalorgid);
+        $this->assertEquals("0002", $buyerlegalorgtype);
+        $this->assertEquals("", $buyerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentBuyerContact
+     */
+    public function testDocumentBuyerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentBuyerContact());
+        $this->assertFalse(self::$document->nextDocumentBuyerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentBuyerContact($buyercontactpersonname, $buyercontactdepartmentname, $buyercontactphoneno, $buyercontactfaxno, $buyercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentative
+     */
+    public function testDocumentSellerTaxRepresentativeGeneral(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentative($sellertaxreprname, $sellertaxreprids, $sellertaxreprdescription);
+        $this->assertEquals("", $sellertaxreprname);
+        $this->assertIsArray($sellertaxreprids);
+        $this->assertEmpty($sellertaxreprids);
+        $this->assertEquals("", $sellertaxreprdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeGlobalId($sellertaxreprglobalids);
+        $this->assertIsArray($sellertaxreprglobalids);
+        $this->assertEmpty($sellertaxreprglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeTaxRegistration($sellertaxreprtaxreg);
+        $this->assertIsArray($sellertaxreprtaxreg);
+        $this->assertEmpty($sellertaxreprtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeAddress
+     */
+    public function testDocumentSellerTaxRepresentativeAddress(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeAddress($sellertaxreprlineone, $sellertaxreprlinetwo, $sellertaxreprlinethree, $sellertaxreprpostcode, $sellertaxreprcity, $sellertaxreprcountry, $sellertaxreprsubdivision);
+        $this->assertEquals("", $sellertaxreprlineone);
+        $this->assertEquals("", $sellertaxreprlinetwo);
+        $this->assertEquals("", $sellertaxreprlinethree);
+        $this->assertEquals("", $sellertaxreprpostcode);
+        $this->assertEquals("", $sellertaxreprcity);
+        $this->assertEquals("", $sellertaxreprcountry);
+        $this->assertIsArray($sellertaxreprsubdivision);
+        $this->assertEmpty($sellertaxreprsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testDocumentSellerTaxRepresentativeLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeLegalOrganisation($sellertaxreprlegalorgid, $sellertaxreprlegalorgtype, $sellertaxreprlegalorgname);
+        $this->assertEquals("", $sellertaxreprlegalorgid);
+        $this->assertEquals("", $sellertaxreprlegalorgtype);
+        $this->assertEquals("", $sellertaxreprlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerTaxRepresentativeContact
+     */
+    public function testDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerTaxRepresentativeContact());
+        $this->assertFalse(self::$document->nextDocumentSellerTaxRepresentativeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerTaxRepresentativeContact($sellertaxreprcontactpersonname, $sellertaxreprcontactdepartmentname, $sellertaxreprcontactphoneno, $sellertaxreprcontactfaxno, $sellertaxreprcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipTo
+     */
+    public function testDocumentShipToGeneral(): void
+    {
+        self::$document->getDocumentShipTo($shiptoname, $shiptoids, $shiptodescription);
+        $this->assertEquals("DEL Name", $shiptoname);
+        $this->assertIsArray($shiptoids);
+        $this->assertEmpty($shiptoids);
+        $this->assertEquals("", $shiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToGlobalId
+     */
+    public function testDocumentShipToGlobalId(): void
+    {
+        self::$document->getDocumentShipToGlobalId($shiptoglobalids);
+        $this->assertIsArray($shiptoglobalids);
+        $this->assertArrayHasKey("0088", $shiptoglobalids);
+        $this->assertEquals("3654789851", $shiptoglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToTaxRegistration
+     */
+    public function testDocumentShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentShipToTaxRegistration($shiptotaxreg);
+        $this->assertIsArray($shiptotaxreg);
+        $this->assertEmpty($shiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToAddress
+     */
+    public function testDocumentShipToAddress(): void
+    {
+        self::$document->getDocumentShipToAddress($shiptolineone, $shiptolinetwo, $shiptolinethree, $shiptopostcode, $shiptocity, $shiptocountry, $shiptosubdivision);
+        $this->assertEquals("DEL 58 rue de la mer", $shiptolineone);
+        $this->assertEquals("DEL line 2", $shiptolinetwo);
+        $this->assertEquals("", $shiptolinethree);
+        $this->assertEquals("06000", $shiptopostcode);
+        $this->assertEquals("NICE", $shiptocity);
+        $this->assertEquals("FR", $shiptocountry);
+        $this->assertIsArray($shiptosubdivision);
+        $this->assertEmpty($shiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToLegalOrganisation
+     */
+    public function testDocumentShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentShipToLegalOrganisation($shiptolegalorgid, $shiptolegalorgtype, $shiptolegalorgname);
+        $this->assertEquals("", $shiptolegalorgid);
+        $this->assertEquals("", $shiptolegalorgtype);
+        $this->assertEquals("", $shiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipToContact
+     */
+    public function testDocumentShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipToContact());
+        $this->assertFalse(self::$document->nextDocumentShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipToContact($shiptocontactpersonname, $shiptocontactdepartmentname, $shiptocontactphoneno, $shiptocontactfaxno, $shiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipTo
+     */
+    public function testDocumentUltimateShipToGeneral(): void
+    {
+        self::$document->getDocumentUltimateShipTo($ultimateshiptoname, $ultimateshiptoids, $ultimateshiptodescription);
+        $this->assertEquals("", $ultimateshiptoname);
+        $this->assertIsArray($ultimateshiptoids);
+        $this->assertEmpty($ultimateshiptoids);
+        $this->assertEquals("", $ultimateshiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToGlobalId
+     */
+    public function testDocumentUltimateShipToGlobalId(): void
+    {
+        self::$document->getDocumentUltimateShipToGlobalId($ultimateshiptoglobalids);
+        $this->assertIsArray($ultimateshiptoglobalids);
+        $this->assertEmpty($ultimateshiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToTaxRegistration
+     */
+    public function testDocumentUltimateShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentUltimateShipToTaxRegistration($ultimateshiptotaxreg);
+        $this->assertIsArray($ultimateshiptotaxreg);
+        $this->assertEmpty($ultimateshiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToAddress
+     */
+    public function testDocumentUltimateShipToAddress(): void
+    {
+        self::$document->getDocumentUltimateShipToAddress($ultimateshiptolineone, $ultimateshiptolinetwo, $ultimateshiptolinethree, $ultimateshiptopostcode, $ultimateshiptocity, $ultimateshiptocountry, $ultimateshiptosubdivision);
+        $this->assertEquals("", $ultimateshiptolineone);
+        $this->assertEquals("", $ultimateshiptolinetwo);
+        $this->assertEquals("", $ultimateshiptolinethree);
+        $this->assertEquals("", $ultimateshiptopostcode);
+        $this->assertEquals("", $ultimateshiptocity);
+        $this->assertEquals("", $ultimateshiptocountry);
+        $this->assertIsArray($ultimateshiptosubdivision);
+        $this->assertEmpty($ultimateshiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToLegalOrganisation
+     */
+    public function testDocumentUltimateShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentUltimateShipToLegalOrganisation($ultimateshiptolegalorgid, $ultimateshiptolegalorgtype, $ultimateshiptolegalorgname);
+        $this->assertEquals("", $ultimateshiptolegalorgid);
+        $this->assertEquals("", $ultimateshiptolegalorgtype);
+        $this->assertEquals("", $ultimateshiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateShipToContact
+     */
+    public function testDocumentUltimateShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFrom
+     */
+    public function testDocumentShipFromGeneral(): void
+    {
+        self::$document->getDocumentShipFrom($shipfromname, $shipfromids, $shipfromdescription);
+        $this->assertEquals("", $shipfromname);
+        $this->assertIsArray($shipfromids);
+        $this->assertEmpty($shipfromids);
+        $this->assertEquals("", $shipfromdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromGlobalId
+     */
+    public function testDocumentShipFromGlobalId(): void
+    {
+        self::$document->getDocumentShipFromGlobalId($shipfromglobalids);
+        $this->assertIsArray($shipfromglobalids);
+        $this->assertEmpty($shipfromglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromTaxRegistration
+     */
+    public function testDocumentShipFromTaxRegistration(): void
+    {
+        self::$document->getDocumentShipFromTaxRegistration($shipfromtaxreg);
+        $this->assertIsArray($shipfromtaxreg);
+        $this->assertEmpty($shipfromtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromAddress
+     */
+    public function testDocumentShipFromAddress(): void
+    {
+        self::$document->getDocumentShipFromAddress($shipfromlineone, $shipfromlinetwo, $shipfromlinethree, $shipfrompostcode, $shipfromcity, $shipfromcountry, $shipfromsubdivision);
+        $this->assertEquals("", $shipfromlineone);
+        $this->assertEquals("", $shipfromlinetwo);
+        $this->assertEquals("", $shipfromlinethree);
+        $this->assertEquals("", $shipfrompostcode);
+        $this->assertEquals("", $shipfromcity);
+        $this->assertEquals("", $shipfromcountry);
+        $this->assertIsArray($shipfromsubdivision);
+        $this->assertEmpty($shipfromsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromLegalOrganisation
+     */
+    public function testDocumentShipFromLegalOrganization(): void
+    {
+        self::$document->getDocumentShipFromLegalOrganisation($shipfromlegalorgid, $shipfromlegalorgtype, $shipfromlegalorgname);
+        $this->assertEquals("", $shipfromlegalorgid);
+        $this->assertEquals("", $shipfromlegalorgtype);
+        $this->assertEquals("", $shipfromlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipFromContact
+     */
+    public function testDocumentShipFromContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicer
+     */
+    public function testDocumentInvoicerGeneral(): void
+    {
+        self::$document->getDocumentInvoicer($invoicername, $invoicerids, $invoicerdescription);
+        $this->assertEquals("", $invoicername);
+        $this->assertIsArray($invoicerids);
+        $this->assertEmpty($invoicerids);
+        $this->assertEquals("", $invoicerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerGlobalId
+     */
+    public function testDocumentInvoicerGlobalId(): void
+    {
+        self::$document->getDocumentInvoicerGlobalId($invoicerglobalids);
+        $this->assertIsArray($invoicerglobalids);
+        $this->assertEmpty($invoicerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerTaxRegistration
+     */
+    public function testDocumentInvoicerTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoicerTaxRegistration($invoicertaxreg);
+        $this->assertIsArray($invoicertaxreg);
+        $this->assertEmpty($invoicertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerAddress
+     */
+    public function testDocumentInvoicerAddress(): void
+    {
+        self::$document->getDocumentInvoicerAddress($invoicerlineone, $invoicerlinetwo, $invoicerlinethree, $invoicerpostcode, $invoicercity, $invoicercountry, $invoicersubdivision);
+        $this->assertEquals("", $invoicerlineone);
+        $this->assertEquals("", $invoicerlinetwo);
+        $this->assertEquals("", $invoicerlinethree);
+        $this->assertEquals("", $invoicerpostcode);
+        $this->assertEquals("", $invoicercity);
+        $this->assertEquals("", $invoicercountry);
+        $this->assertIsArray($invoicersubdivision);
+        $this->assertEmpty($invoicersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerLegalOrganisation
+     */
+    public function testDocumentInvoicerLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoicerLegalOrganisation($invoicerlegalorgid, $invoicerlegalorgtype, $invoicerlegalorgname);
+        $this->assertEquals("", $invoicerlegalorgid);
+        $this->assertEquals("", $invoicerlegalorgtype);
+        $this->assertEquals("", $invoicerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoicerContact
+     */
+    public function testDocumentInvoicerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicee
+     */
+    public function testDocumentInvoiceeGeneral(): void
+    {
+        self::$document->getDocumentInvoicee($invoiceename, $invoiceeids, $invoiceedescription);
+        $this->assertEquals("", $invoiceename);
+        $this->assertIsArray($invoiceeids);
+        $this->assertEmpty($invoiceeids);
+        $this->assertEquals("", $invoiceedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeGlobalId
+     */
+    public function testDocumentInvoiceeGlobalId(): void
+    {
+        self::$document->getDocumentInvoiceeGlobalId($invoiceeglobalids);
+        $this->assertIsArray($invoiceeglobalids);
+        $this->assertEmpty($invoiceeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeTaxRegistration
+     */
+    public function testDocumentInvoiceeTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoiceeTaxRegistration($invoiceetaxreg);
+        $this->assertIsArray($invoiceetaxreg);
+        $this->assertEmpty($invoiceetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeAddress
+     */
+    public function testDocumentInvoiceeAddress(): void
+    {
+        self::$document->getDocumentInvoiceeAddress($invoiceelineone, $invoiceelinetwo, $invoiceelinethree, $invoiceepostcode, $invoiceecity, $invoiceecountry, $invoiceesubdivision);
+        $this->assertEquals("", $invoiceelineone);
+        $this->assertEquals("", $invoiceelinetwo);
+        $this->assertEquals("", $invoiceelinethree);
+        $this->assertEquals("", $invoiceepostcode);
+        $this->assertEquals("", $invoiceecity);
+        $this->assertEquals("", $invoiceecountry);
+        $this->assertIsArray($invoiceesubdivision);
+        $this->assertEmpty($invoiceesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeLegalOrganisation
+     */
+    public function testDocumentInvoiceeLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoiceeLegalOrganisation($invoiceelegalorgid, $invoiceelegalorgtype, $invoiceelegalorgname);
+        $this->assertEquals("", $invoiceelegalorgid);
+        $this->assertEquals("", $invoiceelegalorgtype);
+        $this->assertEquals("", $invoiceelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoiceeContact
+     */
+    public function testDocumentInvoiceeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayee
+     */
+    public function testDocumentPayeeGeneral(): void
+    {
+        self::$document->getDocumentPayee($payeename, $payeeids, $payeedescription);
+        $this->assertEquals("", $payeename);
+        $this->assertIsArray($payeeids);
+        $this->assertEmpty($payeeids);
+        $this->assertEquals("", $payeedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeGlobalId
+     */
+    public function testDocumentPayeeGlobalId(): void
+    {
+        self::$document->getDocumentPayeeGlobalId($payeeglobalids);
+        $this->assertIsArray($payeeglobalids);
+        $this->assertEmpty($payeeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeTaxRegistration
+     */
+    public function testDocumentPayeeTaxRegistration(): void
+    {
+        self::$document->getDocumentPayeeTaxRegistration($payeetaxreg);
+        $this->assertIsArray($payeetaxreg);
+        $this->assertEmpty($payeetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeAddress
+     */
+    public function testDocumentPayeeAddress(): void
+    {
+        self::$document->getDocumentPayeeAddress($payeelineone, $payeelinetwo, $payeelinethree, $payeepostcode, $payeecity, $payeecountry, $payeesubdivision);
+        $this->assertEquals("", $payeelineone);
+        $this->assertEquals("", $payeelinetwo);
+        $this->assertEquals("", $payeelinethree);
+        $this->assertEquals("", $payeepostcode);
+        $this->assertEquals("", $payeecity);
+        $this->assertEquals("", $payeecountry);
+        $this->assertIsArray($payeesubdivision);
+        $this->assertEmpty($payeesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeLegalOrganisation
+     */
+    public function testDocumentPayeeLegalOrganization(): void
+    {
+        self::$document->getDocumentPayeeLegalOrganisation($payeelegalorgid, $payeelegalorgtype, $payeelegalorgname);
+        $this->assertEquals("", $payeelegalorgid);
+        $this->assertEquals("", $payeelegalorgtype);
+        $this->assertEquals("", $payeelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPayeeContact
+     */
+    public function testDocumentPayeeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUser
+     */
+    public function testDocumentProductEndUserGeneral(): void
+    {
+        self::$document->getDocumentProductEndUser($producendusername, $producenduserids, $producenduserdescription);
+        $this->assertEquals("", $producendusername);
+        $this->assertIsArray($producenduserids);
+        $this->assertArrayNotHasKey(0, $producenduserids);
+        $this->assertArrayNotHasKey(1, $producenduserids);
+        $this->assertEquals("", $producenduserdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserGlobalId
+     */
+    public function testDocumentProductEndUserGlobalId(): void
+    {
+        self::$document->getDocumentProductEndUserGlobalId($producenduserglobalids);
+        $this->assertIsArray($producenduserglobalids);
+        $this->assertArrayNotHasKey("0088", $producenduserglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserTaxRegistration
+     */
+    public function testDocumentProductEndUserTaxRegistration(): void
+    {
+        self::$document->getDocumentProductEndUserTaxRegistration($producendusertaxreg);
+        $this->assertIsArray($producendusertaxreg);
+        $this->assertArrayNotHasKey("VA", $producendusertaxreg);
+        $this->assertArrayNotHasKey("FC", $producendusertaxreg);
+        $this->assertArrayNotHasKey(0, $producendusertaxreg);
+        $this->assertArrayNotHasKey(1, $producendusertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $producendusertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserAddress
+     */
+    public function testDocumentProductEndUserAddress(): void
+    {
+        self::$document->getDocumentProductEndUserAddress($producenduserlineone, $producenduserlinetwo, $producenduserlinethree, $producenduserpostcode, $producendusercity, $producendusercountry, $producendusersubdivision);
+        $this->assertEquals("", $producenduserlineone);
+        $this->assertEquals("", $producenduserlinetwo);
+        $this->assertEquals("", $producenduserlinethree);
+        $this->assertEquals("", $producenduserpostcode);
+        $this->assertEquals("", $producendusercity);
+        $this->assertEquals("", $producendusercountry);
+        $this->assertIsArray($producendusersubdivision);
+        $this->assertEmpty($producendusersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserLegalOrganisation
+     */
+    public function testDocumentProductEndUserLegalOrganization(): void
+    {
+        self::$document->getDocumentProductEndUserLegalOrganisation($producenduserlegalorgid, $producenduserlegalorgtype, $producenduserlegalorgname);
+        $this->assertEquals("", $producenduserlegalorgid);
+        $this->assertEquals("", $producenduserlegalorgtype);
+        $this->assertEquals("", $producenduserlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentProductEndUserContactContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentProductEndUserContactContact
+     */
+    public function testDocumentProductEndUserContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentProductEndUserContactContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentProductEndUserContact($producendusercontactpersonname, $producendusercontactdepartmentname, $producendusercontactphoneno, $producendusercontactfaxno, $producendusercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentProductEndUserContactContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerOrderReferencedDocument
+     */
+    public function testDocumentSellerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentSellerOrderReferencedDocument($sellerorderrefdocid, $sellerorderrefdocdate);
+        $this->assertEquals("SALES REF 2547", $sellerorderrefdocid);
+        $this->assertNull($sellerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerOrderReferencedDocument
+     */
+    public function testDocumentBuyerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentBuyerOrderReferencedDocument($buyerorderrefdocid, $buyerorderrefdocdate);
+        $this->assertEquals("PO201925478", $buyerorderrefdocid);
+        $this->assertNull($buyerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentContractReferencedDocument
+     */
+    public function testDocumentContractReferencedDocument(): void
+    {
+        self::$document->getDocumentContractReferencedDocument($contractrefdocid, $contractrefdocdate);
+        $this->assertEquals("CT2018120802", $contractrefdocid);
+        $this->assertNull($contractrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocuments
+     */
+    public function testDocumentAdditionalReferencedDocuments(): void
+    {
+        self::$document->getDocumentAdditionalReferencedDocuments($additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs);
+        $this->assertNotEmpty($additionalrefdocs);
+        $this->assertArrayHasKey(0, $additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs[0]);
+        $this->assertArrayHasKey("IssuerAssignedID", $additionalrefdocs[0]);
+        $this->assertArrayHasKey("TypeCode", $additionalrefdocs[0]);
+        $this->assertEquals("SUPPort doc", $additionalrefdocs[0]["IssuerAssignedID"]);
+        $this->assertEquals("916", $additionalrefdocs[0]["TypeCode"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProcuringProject
+     */
+    public function testDocumentProcuringProject(): void
+    {
+        self::$document->getDocumentProcuringProject($projectid, $projectname);
+        $this->assertEquals("PROJET2547", $projectid);
+        $this->assertEquals("Project reference", $projectname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSupplyChainEvent
+     */
+    public function testDocumentSupplyChainEvent(): void
+    {
+        self::$document->getDocumentSupplyChainEvent($supplychainevent);
+        $this->assertNotNull($supplychainevent);
+        $this->assertInstanceOf("DateTime", $supplychainevent);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20200115'))->format('Ymd'), $supplychainevent->format('Ymd'));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDespatchAdviceReferencedDocument
+     */
+    public function testDocumentDespatchAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentDespatchAdviceReferencedDocument($despatchdocid, $despatchdocdate);
+        $this->assertEquals("DESPADV002", $despatchdocid);
+        $this->assertNull($despatchdocdate);
+        $this->assertNotInstanceOf("DateTime", $despatchdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentReceivingAdviceReferencedDocument
+     */
+    public function testDocumentReceivingAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentReceivingAdviceReferencedDocument($recadvid, $recadvdate);
+        $this->assertEquals("RECEIV-ADV002", $recadvid);
+        $this->assertNull($recadvdate);
+        $this->assertNotInstanceOf("DateTime", $recadvdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryNoteReferencedDocument
+     */
+    public function testDocumentDeliveryNoteReferencedDocument(): void
+    {
+        self::$document->getDocumentDeliveryNoteReferencedDocument($deliverynoterefdocid, $deliverynoterefdocdate);
+        $this->assertEquals("", $deliverynoterefdocid);
+        $this->assertNull($deliverynoterefdocdate);
+        $this->assertNotInstanceOf("DateTime", $deliverynoterefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBillingPeriod
+     */
+    public function testDocumentBillingPeriod(): void
+    {
+        self::$document->getDocumentBillingPeriod($docbillingperiodstart, $docbillingperiodend);
+        $this->assertInstanceOf("DateTime", $docbillingperiodstart);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20191201'))->format('Ymd'), $docbillingperiodstart->format('Ymd'));
+        $this->assertInstanceOf("DateTime", $docbillingperiodend);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20191231'))->format('Ymd'), $docbillingperiodend->format('Ymd'));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharges
+     */
+    public function testDocumentAllowanceCharges(): void
+    {
+        self::$document->getDocumentAllowanceCharges($docallowancecharge);
+        $this->assertIsArray($docallowancecharge);
+        $this->assertNotEmpty($docallowancecharge);
+        $this->assertEquals(2, count($docallowancecharge));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerms
+     */
+    public function testDocumentPaymentTerms(): void
+    {
+        self::$document->getDocumentPaymentTerms($docpaymentterms);
+        $this->assertIsArray($docpaymentterms);
+        $this->assertNotEmpty($docpaymentterms);
+        $this->assertArrayHasKey(0, $docpaymentterms);
+        $this->assertIsArray($docpaymentterms[0]);
+        $this->assertArrayHasKey("description", $docpaymentterms[0]);
+        $this->assertArrayHasKey("duedate", $docpaymentterms[0]);
+        $this->assertArrayHasKey("directdebitmandateid", $docpaymentterms[0]);
+        $this->assertArrayHasKey("partialpaymentamount", $docpaymentterms[0]);
+        $this->assertEquals("", $docpaymentterms[0]["description"]);
+        $this->assertInstanceOf("DateTime", $docpaymentterms[0]["duedate"]);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20200215'))->format('Ymd'), $docpaymentterms[0]["duedate"]->format('Ymd'));
+        $this->assertEquals("", $docpaymentterms[0]["directdebitmandateid"]);
+        $this->assertEquals(0.0, $docpaymentterms[0]["partialpaymentamount"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryTerms
+     */
+    public function testDocumentDeliveryTerms(): void
+    {
+        self::$document->getDocumentDeliveryTerms($devtermcode);
+        $this->assertEquals("", $devtermcode);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument
+     */
+    public function testDocumentAdditionalReferencedDocumentLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAdditionalReferencedDocument());
+        $this->assertTrue(self::$document->nextDocumentAdditionalReferencedDocument());
+        $this->assertTrue(self::$document->nextDocumentAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentAdditionalReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocument
+     */
+    public function testGetDocumentAdditionalReferencedDocument(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAdditionalReferencedDocument());
+        self::$document->getDocumentAdditionalReferencedDocument($issuerassignedid, $typecode, $uriid, $name, $reftypecode, $issueddate, $binarydatafilename);
+        $this->assertEquals("SUPPort doc", $issuerassignedid);
+        $this->assertEquals("916", $typecode);
+        $this->assertEquals("url:gffter", $uriid);
+        $this->assertIsArray($name);
+        $this->assertNotEmpty($name);
+        $this->assertArrayHasKey(0, $name);
+        $this->assertEquals("", $reftypecode);
+        $this->assertNull($issueddate);
+        $this->assertEquals("", $binarydatafilename);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testDocumentUltimateCustomerOrderReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateCustomerOrderReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentUltimateCustomerOrderReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentPaymentMeansLoop(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentMeans
+     */
+    public function testGetDocumentPaymentMeans(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        self::$document->getDocumentPaymentMeans($typeCode, $information, $cardType, $cardId, $cardHolderName, $buyerIban, $payeeIban, $payeeAccountName, $payeePropId, $payeeBic);
+        $this->assertEquals("30", $typeCode);
+        $this->assertEquals("", $information);
+        $this->assertEquals("", $cardType);
+        $this->assertEquals("", $cardId);
+        $this->assertEquals("", $cardHolderName);
+        $this->assertEquals("", $buyerIban);
+        $this->assertEquals("FR76 1254 2547 2569 8542 5874 698", $payeeIban);
+        $this->assertEquals("", $payeeAccountName);
+        $this->assertEquals("", $payeePropId);
+        $this->assertEquals("", $payeeBic);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     */
+    public function testDocumentTaxLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        $this->assertFalse(self::$document->nextDocumentTax());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentTax
+     */
+    public function testDocumentTax(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(100.0, $basisAmount);
+        $this->assertEquals(10.0, $calculatedAmount);
+        $this->assertEquals(10.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $allowanceChargeBasisAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceChargeLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAllowanceCharge());
+        $this->assertTrue(self::$document->nextDocumentAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentAllowanceCharge());
+    }
+
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceCharge(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAllowanceCharge());
+        self::$document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->assertEquals(5.0, $actualAmount);
+        $this->assertFalse($isCharge);
+        $this->assertEquals("S", $taxCategoryCode);
+        $this->assertEquals("VAT", $taxTypeCode);
+        $this->assertEquals(10.00, $rateApplicablePercent);
+        $this->assertEquals(0, $sequence);
+        $this->assertEquals(0, $calculationPercent);
+        $this->assertEquals(0, $basisAmount);
+        $this->assertEquals(0, $basisQuantity);
+        $this->assertEquals("", $basisQuantityUnitCode);
+        $this->assertEquals("", $reasonCode);
+        $this->assertEquals("REMISE COMMERCIALE", $reason);
+
+        $this->assertTrue(self::$document->nextDocumentAllowanceCharge());
+        self::$document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->assertEquals(10.0, $actualAmount);
+        $this->assertTrue($isCharge);
+        $this->assertEquals("S", $taxCategoryCode);
+        $this->assertEquals("VAT", $taxTypeCode);
+        $this->assertEquals(10.00, $rateApplicablePercent);
+        $this->assertEquals(0, $sequence);
+        $this->assertEquals(0, $calculationPercent);
+        $this->assertEquals(0, $basisAmount);
+        $this->assertEquals(0, $basisQuantity);
+        $this->assertEquals("", $basisQuantityUnitCode);
+        $this->assertEquals("", $reasonCode);
+        $this->assertEquals("FRAIS DEPLACEMENT", $reason);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentLogisticsServiceCharge
+     */
+    public function testtDocumentLogisticsServiceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentLogisticsServiceCharge());
+        $this->assertFalse(self::$document->nextDocumentLogisticsServiceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDiscountTermsFromPaymentTerm
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        self::$document->getDocumentPaymentTerm($termdescription, $termduedate, $termmandate);
+        self::$document->getDiscountTermsFromPaymentTerm($dispercent, $discbasedatetime, $discmeasureval, $discmeasureunit, $discbaseamount, $discamount);
+
+        $this->assertEquals("", $termdescription);
+        $this->assertInstanceOf("DateTime", $termduedate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20200215'))->format('Ymd'), $termduedate->format('Ymd'));
+        $this->assertEquals("", $termmandate);
+        $this->assertEquals(0.0, $dispercent);
+        $this->assertNull($discbasedatetime);
+        $this->assertEquals(0, $discmeasureval);
+        $this->assertEquals("", $discmeasureunit);
+        $this->assertEquals(0, $discbaseamount);
+        $this->assertEquals(0, $discamount);
+
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     */
+    public function testDocumentPositionLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertFalse(self::$document->nextDocumentPosition());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFirst(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("1", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("PRESTATION SUPPORT", $prodname);
+        $this->assertEquals("Description", $proddesc);
+        $this->assertEquals("", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0088", $prodglobalidtype);
+        $this->assertEquals("598785412598745", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("1", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(60.0, $netpriceamount);
+        $this->assertEquals(1.0, $netpricebasisquantity);
+        $this->assertEquals("C62", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(1.0, $billedquantity);
+        $this->assertEquals("C62", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertInstanceOf("DateTime", $docposstartdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20191201'))->format('Ymd'), $docposstartdate->format('Ymd'));
+        $this->assertInstanceOf("DateTime", $docpostenddate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20191231'))->format('Ymd'), $docpostenddate->format('Ymd'));
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(10.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(60.00, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionSecond(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("2", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("FOURNITURES DIVERSES", $prodname);
+        $this->assertEquals("Description", $proddesc);
+        $this->assertEquals("", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("", $prodglobalidtype);
+        $this->assertEquals("", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("3", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(10.0, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(3, $billedquantity);
+        $this->assertEquals("C62", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertInstanceOf("DateTime", $docposstartdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20191201'))->format('Ymd'), $docposstartdate->format('Ymd'));
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(10.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(30.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionThird(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("3", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("APPEL", $prodname);
+        $this->assertEquals("Description", $proddesc);
+        $this->assertEquals("", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("", $prodglobalidtype);
+        $this->assertEquals("", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0000, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(5.0, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(1.0, $billedquantity);
+        $this->assertEquals("C62", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertInstanceOf("DateTime", $docpostenddate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20191231'))->format('Ymd'), $docpostenddate->format('Ymd'));
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(10.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(5.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAdditionalReferencedDocument
+     */
+    public function testDocumentPositionAdditionalReferencedDocument(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPositionAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentPositionAdditionalReferencedDocument());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderExtendedTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderExtendedTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderExtendedTest.php	(revision 8435)
@@ -0,0 +1,1935 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\ZugferdDocumentPdfReader;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+
+class PdfReaderExtendedTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfReader::readAndGuessFromFile
+     */
+    public function testCanReadPdf(): void
+    {
+        self::$document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/zugferd_2p1_EXTENDED_Kostenrechnung.pdf");
+        $this->assertNotNull(self::$document);
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_XRECHNUNG, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('KR87654321012', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20181006'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("KOSTENRECHNUNG", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+        $this->assertNotNull(self::$document->getInvoiceObject());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentNotes
+     */
+    public function testDocumentNotes(): void
+    {
+        self::$document->getDocumentNotes($notes);
+        $this->assertIsArray($notes);
+        $this->assertNotEmpty($notes);
+        $this->assertEquals(3, count($notes));
+        $this->assertArrayHasKey(0, $notes);
+        $this->assertArrayHasKey(1, $notes);
+        $this->assertArrayHasKey(2, $notes);
+        $this->assertIsArray($notes[0]);
+        $this->assertNotEmpty($notes[0]);
+        $this->assertArrayHasKey("content", $notes[0]);
+        $this->assertArrayHasKey("subjectcode", $notes[0]);
+        $this->assertArrayHasKey("contentcode", $notes[0]);
+        $this->assertIsArray($notes[1]);
+        $this->assertNotEmpty($notes[1]);
+        $this->assertArrayHasKey("content", $notes[1]);
+        $this->assertArrayHasKey("subjectcode", $notes[1]);
+        $this->assertArrayHasKey("contentcode", $notes[1]);
+        $this->assertIsArray($notes[2]);
+        $this->assertNotEmpty($notes[2]);
+        $this->assertArrayHasKey("content", $notes[2]);
+        $this->assertArrayHasKey("subjectcode", $notes[2]);
+        $this->assertArrayHasKey("contentcode", $notes[2]);
+        $this->assertEquals("ST3", $notes[0]["contentcode"]);
+        $this->assertEquals("AAK", $notes[0]["subjectcode"]);
+        $this->assertEquals("Es bestehen Rabatt- oder Bonusvereinbarungen.", $notes[0]["content"]);
+        $this->assertEquals("EEV", $notes[1]["contentcode"]);
+        $this->assertEquals("AAJ", $notes[1]["subjectcode"]);
+        $this->assertEquals("Der VerkÃ€ufer bleibt EigentÃŒmer der Waren bis zur vollstÃ€ndigen ErfÃŒllung der Kaufpreisforderung.", $notes[1]["content"]);
+        $this->assertEquals("", $notes[2]["contentcode"]);
+        $this->assertEquals("REG", $notes[2]["subjectcode"]);
+        $this->assertStringContainsString("MUSTERLIEFERANT GMBH", $notes[2]["content"]);
+        $this->assertStringContainsString("BAHNHOFSTRASSE 99", $notes[2]["content"]);
+        $this->assertStringContainsString("99199 MUSTERHAUSEN", $notes[2]["content"]);
+        $this->assertStringContainsString("GeschÃ€ftsfÃŒhrung:", $notes[2]["content"]);
+        $this->assertStringContainsString("Max Mustermann", $notes[2]["content"]);
+        $this->assertStringContainsString("USt-IdNr: DE123456789", $notes[2]["content"]);
+        $this->assertStringContainsString("Telefon: +49 932 431 0", $notes[2]["content"]);
+        $this->assertStringContainsString("www.musterlieferant.de", $notes[2]["content"]);
+        $this->assertStringContainsString("HRB Nr. 372876", $notes[2]["content"]);
+        $this->assertStringContainsString("Amtsgericht Musterstadt", $notes[2]["content"]);
+        $this->assertStringContainsString("GLN 4304171000002", $notes[2]["content"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("", $creditorReferenceID);
+        $this->assertEquals("", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsDocumentCopy
+     */
+    public function testDocumentIsCopy(): void
+    {
+        self::$document->getIsDocumentCopy($iscopy);
+        $this->assertFalse($iscopy);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsTestDocument
+     */
+    public function testDocumentIsTestDocument(): void
+    {
+        self::$document->getIsTestDocument($istest);
+        $this->assertTrue($istest);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSummation
+     */
+    public function testDocumentSummation(): void
+    {
+        self::$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+        $this->assertEquals(480.22, $grandTotalAmount);
+        $this->assertEquals(480.22, $duePayableAmount);
+        $this->assertEquals(410.10, $lineTotalAmount);
+        $this->assertEquals(15.00, $chargeTotalAmount);
+        $this->assertEquals(21.55, $allowanceTotalAmount);
+        $this->assertEquals(403.55, $taxBasisTotalAmount);
+        $this->assertEquals(76.67, $taxTotalAmount);
+        $this->assertEquals(0.00, $roundingAmount);
+        $this->assertEquals(0.00, $totalPrepaidAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSeller
+     */
+    public function testDocumentSellerGeneral(): void
+    {
+        self::$document->getDocumentSeller($sellername, $sellerids, $sellerdescription);
+        $this->assertEquals("MUSTERLIEFERANT GMBH", $sellername);
+        $this->assertIsArray($sellerids);
+        $this->assertArrayHasKey(0, $sellerids);
+        $this->assertArrayNotHasKey(1, $sellerids);
+        $this->assertEquals("549910", $sellerids[0]);
+        $this->assertEquals("", $sellerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerGlobalId
+     */
+    public function testDocumentSellerGlobalId(): void
+    {
+        self::$document->getDocumentSellerGlobalId($sellerglobalids);
+        $this->assertIsArray($sellerglobalids);
+        $this->assertArrayHasKey("0088", $sellerglobalids);
+        $this->assertEquals("4333741000005", $sellerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRegistration
+     */
+    public function testDocumentSellerTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRegistration($sellertaxreg);
+        $this->assertIsArray($sellertaxreg);
+        $this->assertArrayNotHasKey("VA", $sellertaxreg);
+        $this->assertArrayHasKey("FC", $sellertaxreg);
+        $this->assertArrayNotHasKey(0, $sellertaxreg);
+        $this->assertArrayNotHasKey(1, $sellertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $sellertaxreg);
+        $this->assertEquals("201/113/40209", $sellertaxreg["FC"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerAddress
+     */
+    public function testDocumentSellerAddress(): void
+    {
+        self::$document->getDocumentSellerAddress($sellerlineone, $sellerlinetwo, $sellerlinethree, $sellerpostcode, $sellercity, $sellercountry, $sellersubdivision);
+        $this->assertEquals("BAHNHOFSTRASSE 99", $sellerlineone);
+        $this->assertEquals("", $sellerlinetwo);
+        $this->assertEquals("", $sellerlinethree);
+        $this->assertEquals("99199", $sellerpostcode);
+        $this->assertEquals("MUSTERHAUSEN", $sellercity);
+        $this->assertEquals("DE", $sellercountry);
+        $this->assertIsArray($sellersubdivision);
+        $this->assertEmpty($sellersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerLegalOrganisation
+     */
+    public function testDocumentSellerLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerLegalOrganisation($sellerlegalorgid, $sellerlegalorgtype, $sellerlegalorgname);
+        $this->assertEquals("", $sellerlegalorgid);
+        $this->assertEquals("", $sellerlegalorgtype);
+        $this->assertEquals("", $sellerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerContact
+     */
+    public function testDocumentSellerContact(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentSellerContact());
+        self::$document->getDocumentSellerContact($sellercontactpersonname, $sellercontactdepartmentname, $sellercontactphoneno, $sellercontactfaxno, $sellercontactemailaddr);
+        $this->assertEquals("", $sellercontactpersonname);
+        $this->assertEquals("", $sellercontactdepartmentname);
+        $this->assertEquals("+49 932 431 500", $sellercontactphoneno);
+        $this->assertEquals("", $sellercontactfaxno);
+        $this->assertEquals("max.mustermann@musterlieferant.de", $sellercontactemailaddr);
+        $this->assertFalse(self::$document->nextDocumentSellerContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyer
+     */
+    public function testDocumentBuyerGeneral(): void
+    {
+        self::$document->getDocumentBuyer($buyername, $buyerids, $buyerdescription);
+        $this->assertEquals("MUSTER-KUNDE GMBH", $buyername);
+        $this->assertIsArray($buyerids);
+        $this->assertArrayHasKey(0, $buyerids);
+        $this->assertArrayNotHasKey(1, $buyerids);
+        $this->assertEquals("339420", $buyerids[0]);
+        $this->assertEquals("", $buyerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerGlobalId
+     */
+    public function testDocumentBuyerGlobalId(): void
+    {
+        self::$document->getDocumentBuyerGlobalId($buyerglobalids);
+        $this->assertIsArray($buyerglobalids);
+        $this->assertArrayHasKey("0088", $buyerglobalids);
+        $this->assertEquals("4304171000002", $buyerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerTaxRegistration
+     */
+    public function testDocumentBuyerTaxRegistration(): void
+    {
+        self::$document->getDocumentBuyerTaxRegistration($buyertaxreg);
+        $this->assertIsArray($buyertaxreg);
+        $this->assertEmpty($buyertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerAddress
+     */
+    public function testDocumentBuyerAddress(): void
+    {
+        self::$document->getDocumentBuyerAddress($buyerlineone, $buyerlinetwo, $buyerlinethree, $buyerpostcode, $buyercity, $buyercountry, $buyersubdivision);
+        $this->assertEquals("KUNDENWEG 88", $buyerlineone);
+        $this->assertEquals("", $buyerlinetwo);
+        $this->assertEquals("", $buyerlinethree);
+        $this->assertEquals("40235", $buyerpostcode);
+        $this->assertEquals("DUESSELDORF", $buyercity);
+        $this->assertEquals("DE", $buyercountry);
+        $this->assertIsArray($buyersubdivision);
+        $this->assertEmpty($buyersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerLegalOrganisation
+     */
+    public function testDocumentBuyerLegalOrganization(): void
+    {
+        self::$document->getDocumentBuyerLegalOrganisation($buyerlegalorgid, $buyerlegalorgtype, $buyerlegalorgname);
+        $this->assertEquals("", $buyerlegalorgid);
+        $this->assertEquals("", $buyerlegalorgtype);
+        $this->assertEquals("", $buyerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentBuyerContact
+     */
+    public function testDocumentBuyerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentBuyerContact());
+        $this->assertFalse(self::$document->nextDocumentBuyerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentBuyerContact($buyercontactpersonname, $buyercontactdepartmentname, $buyercontactphoneno, $buyercontactfaxno, $buyercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentative
+     */
+    public function testDocumentSellerTaxRepresentativeGeneral(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentative($sellertaxreprname, $sellertaxreprids, $sellertaxreprdescription);
+        $this->assertEquals("", $sellertaxreprname);
+        $this->assertIsArray($sellertaxreprids);
+        $this->assertEmpty($sellertaxreprids);
+        $this->assertEquals("", $sellertaxreprdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeGlobalId($sellertaxreprglobalids);
+        $this->assertIsArray($sellertaxreprglobalids);
+        $this->assertEmpty($sellertaxreprglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeTaxRegistration($sellertaxreprtaxreg);
+        $this->assertIsArray($sellertaxreprtaxreg);
+        $this->assertEmpty($sellertaxreprtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeAddress
+     */
+    public function testDocumentSellerTaxRepresentativeAddress(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeAddress($sellertaxreprlineone, $sellertaxreprlinetwo, $sellertaxreprlinethree, $sellertaxreprpostcode, $sellertaxreprcity, $sellertaxreprcountry, $sellertaxreprsubdivision);
+        $this->assertEquals("", $sellertaxreprlineone);
+        $this->assertEquals("", $sellertaxreprlinetwo);
+        $this->assertEquals("", $sellertaxreprlinethree);
+        $this->assertEquals("", $sellertaxreprpostcode);
+        $this->assertEquals("", $sellertaxreprcity);
+        $this->assertEquals("", $sellertaxreprcountry);
+        $this->assertIsArray($sellertaxreprsubdivision);
+        $this->assertEmpty($sellertaxreprsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testDocumentSellerTaxRepresentativeLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeLegalOrganisation($sellertaxreprlegalorgid, $sellertaxreprlegalorgtype, $sellertaxreprlegalorgname);
+        $this->assertEquals("", $sellertaxreprlegalorgid);
+        $this->assertEquals("", $sellertaxreprlegalorgtype);
+        $this->assertEquals("", $sellertaxreprlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerTaxRepresentativeContact
+     */
+    public function testDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerTaxRepresentativeContact());
+        $this->assertFalse(self::$document->nextDocumentSellerTaxRepresentativeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerTaxRepresentativeContact($sellertaxreprcontactpersonname, $sellertaxreprcontactdepartmentname, $sellertaxreprcontactphoneno, $sellertaxreprcontactfaxno, $sellertaxreprcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipTo
+     */
+    public function testDocumentShipToGeneral(): void
+    {
+        self::$document->getDocumentShipTo($shiptoname, $shiptoids, $shiptodescription);
+        $this->assertEquals("MUSTER-MARKT", $shiptoname);
+        $this->assertIsArray($shiptoids);
+        $this->assertEmpty($shiptoids);
+        $this->assertEquals("", $shiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToGlobalId
+     */
+    public function testDocumentShipToGlobalId(): void
+    {
+        self::$document->getDocumentShipToGlobalId($shiptoglobalids);
+        $this->assertIsArray($shiptoglobalids);
+        $this->assertArrayHasKey("0088", $shiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToTaxRegistration
+     */
+    public function testDocumentShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentShipToTaxRegistration($shiptotaxreg);
+        $this->assertIsArray($shiptotaxreg);
+        $this->assertEmpty($shiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToAddress
+     */
+    public function testDocumentShipToAddress(): void
+    {
+        self::$document->getDocumentShipToAddress($shiptolineone, $shiptolinetwo, $shiptolinethree, $shiptopostcode, $shiptocity, $shiptocountry, $shiptosubdivision);
+        $this->assertEquals("HAUPTSTRASSE 44", $shiptolineone);
+        $this->assertEquals("", $shiptolinetwo);
+        $this->assertEquals("", $shiptolinethree);
+        $this->assertEquals("31157", $shiptopostcode);
+        $this->assertEquals("SARSTEDT", $shiptocity);
+        $this->assertEquals("DE", $shiptocountry);
+        $this->assertIsArray($shiptosubdivision);
+        $this->assertEmpty($shiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToLegalOrganisation
+     */
+    public function testDocumentShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentShipToLegalOrganisation($shiptolegalorgid, $shiptolegalorgtype, $shiptolegalorgname);
+        $this->assertEquals("", $shiptolegalorgid);
+        $this->assertEquals("", $shiptolegalorgtype);
+        $this->assertEquals("", $shiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipToContact
+     */
+    public function testDocumentShipToContact(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentShipToContact());
+        self::$document->getDocumentShipToContact($shiptocontactpersonname, $shiptocontactdepartmentname, $shiptocontactphoneno, $shiptocontactfaxno, $shiptocontactemailaddr);
+        $this->assertEquals("", $shiptocontactpersonname);
+        $this->assertEquals("7322", $shiptocontactdepartmentname);
+        $this->assertEquals("", $shiptocontactphoneno);
+        $this->assertEquals("", $shiptocontactfaxno);
+        $this->assertEquals("", $shiptocontactemailaddr);
+        $this->assertFalse(self::$document->nextDocumentShipToContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipTo
+     */
+    public function testDocumentUltimateShipToGeneral(): void
+    {
+        self::$document->getDocumentUltimateShipTo($ultimateshiptoname, $ultimateshiptoids, $ultimateshiptodescription);
+        $this->assertEquals("", $ultimateshiptoname);
+        $this->assertIsArray($ultimateshiptoids);
+        $this->assertEmpty($ultimateshiptoids);
+        $this->assertEquals("", $ultimateshiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToGlobalId
+     */
+    public function testDocumentUltimateShipToGlobalId(): void
+    {
+        self::$document->getDocumentUltimateShipToGlobalId($ultimateshiptoglobalids);
+        $this->assertIsArray($ultimateshiptoglobalids);
+        $this->assertEmpty($ultimateshiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToTaxRegistration
+     */
+    public function testDocumentUltimateShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentUltimateShipToTaxRegistration($ultimateshiptotaxreg);
+        $this->assertIsArray($ultimateshiptotaxreg);
+        $this->assertEmpty($ultimateshiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToAddress
+     */
+    public function testDocumentUltimateShipToAddress(): void
+    {
+        self::$document->getDocumentUltimateShipToAddress($ultimateshiptolineone, $ultimateshiptolinetwo, $ultimateshiptolinethree, $ultimateshiptopostcode, $ultimateshiptocity, $ultimateshiptocountry, $ultimateshiptosubdivision);
+        $this->assertEquals("", $ultimateshiptolineone);
+        $this->assertEquals("", $ultimateshiptolinetwo);
+        $this->assertEquals("", $ultimateshiptolinethree);
+        $this->assertEquals("", $ultimateshiptopostcode);
+        $this->assertEquals("", $ultimateshiptocity);
+        $this->assertEquals("", $ultimateshiptocountry);
+        $this->assertIsArray($ultimateshiptosubdivision);
+        $this->assertEmpty($ultimateshiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToLegalOrganisation
+     */
+    public function testDocumentUltimateShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentUltimateShipToLegalOrganisation($ultimateshiptolegalorgid, $ultimateshiptolegalorgtype, $ultimateshiptolegalorgname);
+        $this->assertEquals("", $ultimateshiptolegalorgid);
+        $this->assertEquals("", $ultimateshiptolegalorgtype);
+        $this->assertEquals("", $ultimateshiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateShipToContact
+     */
+    public function testDocumentUltimateShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFrom
+     */
+    public function testDocumentShipFromGeneral(): void
+    {
+        self::$document->getDocumentShipFrom($shipfromname, $shipfromids, $shipfromdescription);
+        $this->assertEquals("", $shipfromname);
+        $this->assertIsArray($shipfromids);
+        $this->assertEmpty($shipfromids);
+        $this->assertEquals("", $shipfromdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromGlobalId
+     */
+    public function testDocumentShipFromGlobalId(): void
+    {
+        self::$document->getDocumentShipFromGlobalId($shipfromglobalids);
+        $this->assertIsArray($shipfromglobalids);
+        $this->assertEmpty($shipfromglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromTaxRegistration
+     */
+    public function testDocumentShipFromTaxRegistration(): void
+    {
+        self::$document->getDocumentShipFromTaxRegistration($shipfromtaxreg);
+        $this->assertIsArray($shipfromtaxreg);
+        $this->assertEmpty($shipfromtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromAddress
+     */
+    public function testDocumentShipFromAddress(): void
+    {
+        self::$document->getDocumentShipFromAddress($shipfromlineone, $shipfromlinetwo, $shipfromlinethree, $shipfrompostcode, $shipfromcity, $shipfromcountry, $shipfromsubdivision);
+        $this->assertEquals("", $shipfromlineone);
+        $this->assertEquals("", $shipfromlinetwo);
+        $this->assertEquals("", $shipfromlinethree);
+        $this->assertEquals("", $shipfrompostcode);
+        $this->assertEquals("", $shipfromcity);
+        $this->assertEquals("", $shipfromcountry);
+        $this->assertIsArray($shipfromsubdivision);
+        $this->assertEmpty($shipfromsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromLegalOrganisation
+     */
+    public function testDocumentShipFromLegalOrganization(): void
+    {
+        self::$document->getDocumentShipFromLegalOrganisation($shipfromlegalorgid, $shipfromlegalorgtype, $shipfromlegalorgname);
+        $this->assertEquals("", $shipfromlegalorgid);
+        $this->assertEquals("", $shipfromlegalorgtype);
+        $this->assertEquals("", $shipfromlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipFromContact
+     */
+    public function testDocumentShipFromContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicer
+     */
+    public function testDocumentInvoicerGeneral(): void
+    {
+        self::$document->getDocumentInvoicer($invoicername, $invoicerids, $invoicerdescription);
+        $this->assertEquals("", $invoicername);
+        $this->assertIsArray($invoicerids);
+        $this->assertEmpty($invoicerids);
+        $this->assertEquals("", $invoicerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerGlobalId
+     */
+    public function testDocumentInvoicerGlobalId(): void
+    {
+        self::$document->getDocumentInvoicerGlobalId($invoicerglobalids);
+        $this->assertIsArray($invoicerglobalids);
+        $this->assertEmpty($invoicerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerTaxRegistration
+     */
+    public function testDocumentInvoicerTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoicerTaxRegistration($invoicertaxreg);
+        $this->assertIsArray($invoicertaxreg);
+        $this->assertEmpty($invoicertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerAddress
+     */
+    public function testDocumentInvoicerAddress(): void
+    {
+        self::$document->getDocumentInvoicerAddress($invoicerlineone, $invoicerlinetwo, $invoicerlinethree, $invoicerpostcode, $invoicercity, $invoicercountry, $invoicersubdivision);
+        $this->assertEquals("", $invoicerlineone);
+        $this->assertEquals("", $invoicerlinetwo);
+        $this->assertEquals("", $invoicerlinethree);
+        $this->assertEquals("", $invoicerpostcode);
+        $this->assertEquals("", $invoicercity);
+        $this->assertEquals("", $invoicercountry);
+        $this->assertIsArray($invoicersubdivision);
+        $this->assertEmpty($invoicersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerLegalOrganisation
+     */
+    public function testDocumentInvoicerLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoicerLegalOrganisation($invoicerlegalorgid, $invoicerlegalorgtype, $invoicerlegalorgname);
+        $this->assertEquals("", $invoicerlegalorgid);
+        $this->assertEquals("", $invoicerlegalorgtype);
+        $this->assertEquals("", $invoicerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoicerContact
+     */
+    public function testDocumentInvoicerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicee
+     */
+    public function testDocumentInvoiceeGeneral(): void
+    {
+        self::$document->getDocumentInvoicee($invoiceename, $invoiceeids, $invoiceedescription);
+        $this->assertEquals("MUSTER-KUNDE GMBH", $invoiceename);
+        $this->assertIsArray($invoiceeids);
+        $this->assertNotEmpty($invoiceeids);
+        $this->assertArrayHasKey(0, $invoiceeids);
+        $this->assertEquals("", $invoiceedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeGlobalId
+     */
+    public function testDocumentInvoiceeGlobalId(): void
+    {
+        self::$document->getDocumentInvoiceeGlobalId($invoiceeglobalids);
+        $this->assertIsArray($invoiceeglobalids);
+        $this->assertNotEmpty($invoiceeglobalids);
+        $this->assertArrayHasKey("0088", $invoiceeglobalids);
+        $this->assertEquals("4304171000002", $invoiceeglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeTaxRegistration
+     */
+    public function testDocumentInvoiceeTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoiceeTaxRegistration($invoiceetaxreg);
+        $this->assertIsArray($invoiceetaxreg);
+        $this->assertEmpty($invoiceetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeAddress
+     */
+    public function testDocumentInvoiceeAddress(): void
+    {
+        self::$document->getDocumentInvoiceeAddress($invoiceelineone, $invoiceelinetwo, $invoiceelinethree, $invoiceepostcode, $invoiceecity, $invoiceecountry, $invoiceesubdivision);
+        $this->assertEquals("KUNDENWEG 88", $invoiceelineone);
+        $this->assertEquals("", $invoiceelinetwo);
+        $this->assertEquals("", $invoiceelinethree);
+        $this->assertEquals("40235", $invoiceepostcode);
+        $this->assertEquals("DUESSELDORF", $invoiceecity);
+        $this->assertEquals("DE", $invoiceecountry);
+        $this->assertIsArray($invoiceesubdivision);
+        $this->assertEmpty($invoiceesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeLegalOrganisation
+     */
+    public function testDocumentInvoiceeLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoiceeLegalOrganisation($invoiceelegalorgid, $invoiceelegalorgtype, $invoiceelegalorgname);
+        $this->assertEquals("", $invoiceelegalorgid);
+        $this->assertEquals("", $invoiceelegalorgtype);
+        $this->assertEquals("", $invoiceelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoiceeContact
+     */
+    public function testDocumentInvoiceeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayee
+     */
+    public function testDocumentPayeeGeneral(): void
+    {
+        self::$document->getDocumentPayee($payeename, $payeeids, $payeedescription);
+        $this->assertEquals("", $payeename);
+        $this->assertIsArray($payeeids);
+        $this->assertEmpty($payeeids);
+        $this->assertEquals("", $payeedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeGlobalId
+     */
+    public function testDocumentPayeeGlobalId(): void
+    {
+        self::$document->getDocumentPayeeGlobalId($payeeglobalids);
+        $this->assertIsArray($payeeglobalids);
+        $this->assertEmpty($payeeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeTaxRegistration
+     */
+    public function testDocumentPayeeTaxRegistration(): void
+    {
+        self::$document->getDocumentPayeeTaxRegistration($payeetaxreg);
+        $this->assertIsArray($payeetaxreg);
+        $this->assertEmpty($payeetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeAddress
+     */
+    public function testDocumentPayeeAddress(): void
+    {
+        self::$document->getDocumentPayeeAddress($payeelineone, $payeelinetwo, $payeelinethree, $payeepostcode, $payeecity, $payeecountry, $payeesubdivision);
+        $this->assertEquals("", $payeelineone);
+        $this->assertEquals("", $payeelinetwo);
+        $this->assertEquals("", $payeelinethree);
+        $this->assertEquals("", $payeepostcode);
+        $this->assertEquals("", $payeecity);
+        $this->assertEquals("", $payeecountry);
+        $this->assertIsArray($payeesubdivision);
+        $this->assertEmpty($payeesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeLegalOrganisation
+     */
+    public function testDocumentPayeeLegalOrganization(): void
+    {
+        self::$document->getDocumentPayeeLegalOrganisation($payeelegalorgid, $payeelegalorgtype, $payeelegalorgname);
+        $this->assertEquals("", $payeelegalorgid);
+        $this->assertEquals("", $payeelegalorgtype);
+        $this->assertEquals("", $payeelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPayeeContact
+     */
+    public function testDocumentPayeeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUser
+     */
+    public function testDocumentProductEndUserGeneral(): void
+    {
+        self::$document->getDocumentProductEndUser($producendusername, $producenduserids, $producenduserdescription);
+        $this->assertEquals("", $producendusername);
+        $this->assertIsArray($producenduserids);
+        $this->assertArrayNotHasKey(0, $producenduserids);
+        $this->assertArrayNotHasKey(1, $producenduserids);
+        $this->assertEquals("", $producenduserdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserGlobalId
+     */
+    public function testDocumentProductEndUserGlobalId(): void
+    {
+        self::$document->getDocumentProductEndUserGlobalId($producenduserglobalids);
+        $this->assertIsArray($producenduserglobalids);
+        $this->assertArrayNotHasKey("0088", $producenduserglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserTaxRegistration
+     */
+    public function testDocumentProductEndUserTaxRegistration(): void
+    {
+        self::$document->getDocumentProductEndUserTaxRegistration($producendusertaxreg);
+        $this->assertIsArray($producendusertaxreg);
+        $this->assertArrayNotHasKey("VA", $producendusertaxreg);
+        $this->assertArrayNotHasKey("FC", $producendusertaxreg);
+        $this->assertArrayNotHasKey(0, $producendusertaxreg);
+        $this->assertArrayNotHasKey(1, $producendusertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $producendusertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserAddress
+     */
+    public function testDocumentProductEndUserAddress(): void
+    {
+        self::$document->getDocumentProductEndUserAddress($producenduserlineone, $producenduserlinetwo, $producenduserlinethree, $producenduserpostcode, $producendusercity, $producendusercountry, $producendusersubdivision);
+        $this->assertEquals("", $producenduserlineone);
+        $this->assertEquals("", $producenduserlinetwo);
+        $this->assertEquals("", $producenduserlinethree);
+        $this->assertEquals("", $producenduserpostcode);
+        $this->assertEquals("", $producendusercity);
+        $this->assertEquals("", $producendusercountry);
+        $this->assertIsArray($producendusersubdivision);
+        $this->assertEmpty($producendusersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserLegalOrganisation
+     */
+    public function testDocumentProductEndUserLegalOrganization(): void
+    {
+        self::$document->getDocumentProductEndUserLegalOrganisation($producenduserlegalorgid, $producenduserlegalorgtype, $producenduserlegalorgname);
+        $this->assertEquals("", $producenduserlegalorgid);
+        $this->assertEquals("", $producenduserlegalorgtype);
+        $this->assertEquals("", $producenduserlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentProductEndUserContactContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentProductEndUserContactContact
+     */
+    public function testDocumentProductEndUserContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentProductEndUserContactContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentProductEndUserContact($producendusercontactpersonname, $producendusercontactdepartmentname, $producendusercontactphoneno, $producendusercontactfaxno, $producendusercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentProductEndUserContactContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerOrderReferencedDocument
+     */
+    public function testDocumentSellerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentSellerOrderReferencedDocument($sellerorderrefdocid, $sellerorderrefdocdate);
+        $this->assertEquals("", $sellerorderrefdocid);
+        $this->assertNull($sellerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerOrderReferencedDocument
+     */
+    public function testDocumentBuyerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentBuyerOrderReferencedDocument($buyerorderrefdocid, $buyerorderrefdocdate);
+        $this->assertEquals("", $buyerorderrefdocid);
+        $this->assertNull($buyerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentContractReferencedDocument
+     */
+    public function testDocumentContractReferencedDocument(): void
+    {
+        self::$document->getDocumentContractReferencedDocument($contractrefdocid, $contractrefdocdate);
+        $this->assertEquals("", $contractrefdocid);
+        $this->assertNull($contractrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocuments
+     */
+    public function testDocumentAdditionalReferencedDocuments(): void
+    {
+        self::$document->getDocumentAdditionalReferencedDocuments($additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs);
+        $this->assertNotEmpty($additionalrefdocs);
+        $this->assertArrayHasKey(0, $additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs[0]);
+        $this->assertArrayHasKey("IssuerAssignedID", $additionalrefdocs[0]);
+        $this->assertArrayHasKey("TypeCode", $additionalrefdocs[0]);
+        $this->assertEquals("A777123", $additionalrefdocs[0]["IssuerAssignedID"]);
+        $this->assertEquals("130", $additionalrefdocs[0]["TypeCode"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProcuringProject
+     */
+    public function testDocumentProcuringProject(): void
+    {
+        self::$document->getDocumentProcuringProject($projectid, $projectname);
+        $this->assertEquals("", $projectid);
+        $this->assertEquals("", $projectname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSupplyChainEvent
+     */
+    public function testDocumentSupplyChainEvent(): void
+    {
+        self::$document->getDocumentSupplyChainEvent($supplychainevent);
+        $this->assertNotNull($supplychainevent);
+        $this->assertInstanceOf("DateTime", $supplychainevent);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180930'))->format('Ymd'), $supplychainevent->format('Ymd'));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDespatchAdviceReferencedDocument
+     */
+    public function testDocumentDespatchAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentDespatchAdviceReferencedDocument($despatchdocid, $despatchdocdate);
+        $this->assertEquals("", $despatchdocid);
+        $this->assertNull($despatchdocdate);
+        $this->assertNotInstanceOf("DateTime", $despatchdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentReceivingAdviceReferencedDocument
+     */
+    public function testDocumentReceivingAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentReceivingAdviceReferencedDocument($recadvid, $recadvdate);
+        $this->assertEquals("", $recadvid);
+        $this->assertNull($recadvdate);
+        $this->assertNotInstanceOf("DateTime", $recadvdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryNoteReferencedDocument
+     */
+    public function testDocumentDeliveryNoteReferencedDocument(): void
+    {
+        self::$document->getDocumentDeliveryNoteReferencedDocument($deliverynoterefdocid, $deliverynoterefdocdate);
+        $this->assertEquals("L87654321012", $deliverynoterefdocid);
+        $this->assertNull($deliverynoterefdocdate);
+        $this->assertNotInstanceOf("DateTime", $deliverynoterefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBillingPeriod
+     */
+    public function testDocumentBillingPeriod(): void
+    {
+        self::$document->getDocumentBillingPeriod($docbillingperiodstart, $docbillingperiodend);
+        $this->assertNull($docbillingperiodstart);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodstart);
+        $this->assertNull($docbillingperiodend);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodend);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharges
+     */
+    public function testDocumentAllowanceCharges(): void
+    {
+        self::$document->getDocumentAllowanceCharges($docallowancecharge);
+        $this->assertIsArray($docallowancecharge);
+        $this->assertNotEmpty($docallowancecharge);
+        $this->assertEquals(1, count($docallowancecharge));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerms
+     */
+    public function testDocumentPaymentTerms(): void
+    {
+        self::$document->getDocumentPaymentTerms($docpaymentterms);
+        $this->assertIsArray($docpaymentterms);
+        $this->assertNotEmpty($docpaymentterms);
+        $this->assertArrayHasKey(0, $docpaymentterms);
+        $this->assertIsArray($docpaymentterms[0]);
+        $this->assertArrayHasKey("description", $docpaymentterms[0]);
+        $this->assertArrayHasKey("duedate", $docpaymentterms[0]);
+        $this->assertArrayHasKey("directdebitmandateid", $docpaymentterms[0]);
+        $this->assertArrayHasKey("partialpaymentamount", $docpaymentterms[0]);
+        $this->assertEquals("Skontovereinbarung: 2% bei Zahlung innerhalb 10 Tagen nach Rechnungsdatum", $docpaymentterms[0]["description"]);
+        $this->assertNull($docpaymentterms[0]["duedate"]);
+        $this->assertNotInstanceOf("DateTime", $docpaymentterms[0]["duedate"]);
+        $this->assertEquals("", $docpaymentterms[0]["directdebitmandateid"]);
+        $this->assertEquals(0.0, $docpaymentterms[0]["partialpaymentamount"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryTerms
+     */
+    public function testDocumentDeliveryTerms(): void
+    {
+        self::$document->getDocumentDeliveryTerms($devtermcode);
+        $this->assertEquals("", $devtermcode);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument
+     */
+    public function testDocumentAdditionalReferencedDocumentLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentAdditionalReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocument
+     */
+    public function testGetDocumentAdditionalReferencedDocument(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAdditionalReferencedDocument());
+        self::$document->getDocumentAdditionalReferencedDocument($issuerassignedid, $typecode, $uriid, $name, $reftypecode, $issueddate, $binarydatafilename);
+        $this->assertEquals("A777123", $issuerassignedid);
+        $this->assertEquals("130", $typecode);
+        $this->assertEquals("", $uriid);
+        $this->assertIsArray($name);
+        $this->assertEmpty($name);
+        $this->assertEquals("", $reftypecode);
+        $this->assertNull($issueddate);
+        $this->assertEquals("", $binarydatafilename);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testDocumentUltimateCustomerOrderReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateCustomerOrderReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentUltimateCustomerOrderReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentPaymentMeansLoop(): void
+    {
+        $this->assertFalse(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     */
+    public function testDocumentTaxLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        $this->assertFalse(self::$document->nextDocumentTax());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentTax
+     */
+    public function testDocumentTax(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(403.55, $basisAmount);
+        $this->assertEquals(76.67, $calculatedAmount);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(-6.55, $allowanceChargeBasisAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceChargeLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentAllowanceCharge());
+    }
+
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceCharge(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAllowanceCharge());
+        self::$document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->assertEquals(21.55, $actualAmount);
+        $this->assertFalse($isCharge);
+        $this->assertEquals("S", $taxCategoryCode);
+        $this->assertEquals("VAT", $taxTypeCode);
+        $this->assertEquals(19.00, $rateApplicablePercent);
+        $this->assertEquals(0, $sequence);
+        $this->assertEquals(0, $calculationPercent);
+        $this->assertEquals(410.10, $basisAmount);
+        $this->assertEquals(0, $basisQuantity);
+        $this->assertEquals("", $basisQuantityUnitCode);
+        $this->assertEquals("", $reasonCode);
+        $this->assertEquals("Sonderrabatt", $reason);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentLogisticsServiceCharge
+     */
+    public function testtDocumentLogisticsServiceChargeLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentLogisticsServiceCharge());
+        $this->assertFalse(self::$document->nextDocumentLogisticsServiceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentLogisticsServiceCharge
+     */
+    public function testGetDocumentLogisticsServiceCharge(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentLogisticsServiceCharge());
+        self::$document->getDocumentLogisticsServiceCharge($description, $appliedAmount, $taxTypeCodes, $taxCategoryCodes, $rateApplicablePercents);
+        $this->assertEquals("Transportkosten: Frachbetrag", $description);
+        $this->assertEquals(15.00, $appliedAmount);
+        $this->assertIsArray($taxTypeCodes);
+        $this->assertEquals(1, count($taxTypeCodes));
+        $this->assertArrayHasKey(0, $taxTypeCodes);
+        $this->assertEquals("VAT", $taxTypeCodes[0]);
+        $this->assertIsArray($taxCategoryCodes);
+        $this->assertEquals(1, count($taxCategoryCodes));
+        $this->assertArrayHasKey(0, $taxCategoryCodes);
+        $this->assertEquals("S", $taxCategoryCodes[0]);
+        $this->assertIsArray($rateApplicablePercents);
+        $this->assertEquals(1, count($rateApplicablePercents));
+        $this->assertArrayHasKey(0, $rateApplicablePercents);
+        $this->assertEquals(19.0, $rateApplicablePercents[0]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDiscountTermsFromPaymentTerm
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        self::$document->getDocumentPaymentTerm($termdescription, $termduedate, $termmandate);
+        self::$document->getDiscountTermsFromPaymentTerm($dispercent, $discbasedatetime, $discmeasureval, $discmeasureunit, $discbaseamount, $discamount);
+
+        $this->assertEquals("Skontovereinbarung: 2% bei Zahlung innerhalb 10 Tagen nach Rechnungsdatum", $termdescription);
+        $this->assertNull($termduedate);
+        $this->assertEquals("", $termmandate);
+        $this->assertEquals(2.0, $dispercent);
+        $this->assertNull($discbasedatetime);
+        $this->assertEquals(10, $discmeasureval);
+        $this->assertEquals("DAY", $discmeasureunit);
+        $this->assertEquals(0, $discbaseamount);
+        $this->assertEquals(0, $discamount);
+
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     */
+    public function testDocumentPositionLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertFalse(self::$document->nextDocumentPosition());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFirst(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("1", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Wirkarbeit HT", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("WA997", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0088", $prodglobalidtype);
+        $this->assertEquals("4123456000014", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0520, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(0.0520, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(10000.0, $billedquantity);
+        $this->assertEquals("KWH", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(52.00, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionSecond(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("2", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Ãkosteuer Lieferant", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("ÃST250", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0088", $prodglobalidtype);
+        $this->assertEquals("4123456000021", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0205, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(0.0205, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(10000, $billedquantity);
+        $this->assertEquals("KWH", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(20.50, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionThird(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("3", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Kommissionierer 1250032 D. Muster", $prodname);
+        $this->assertEquals("Besteller: Hr. Mayer, Personalnr. 4488", $proddesc);
+        $this->assertEquals("", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0088", $prodglobalidtype);
+        $this->assertEquals("4260331811362", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(15.0000, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(10.5000, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(27.5000, $billedquantity);
+        $this->assertEquals("HUR", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertTrue(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        self::$document->firstDocumentPositionGrossPriceAllowanceCharge();
+        self::$document->getDocumentPositionGrossPriceAllowanceCharge(
+            $docPosAllowanceChargeactualAmount,
+            $docPosAllowanceChargeisCharge,
+            $docPosAllowanceChargecalculationPercent,
+            $docPosAllowanceChargebasisAmount,
+            $docPosAllowanceChargereason,
+            $docPosAllowanceChargeTaxTypeCode,
+            $docPosAllowanceChargeTaxCategoryCode,
+            $docPosAllowanceChargerateApplicablePercent,
+            $docPosAllowanceChargesequence,
+            $docPosAllowanceChargebasisQuantity,
+            $docPosAllowanceChargebasisQuantityUnitCode,
+            $docPosAllowanceChargereasonCode
+        );
+        $this->assertEquals(4.5000, $docPosAllowanceChargeactualAmount);
+        $this->assertFalse($docPosAllowanceChargeisCharge);
+        $this->assertEquals(0, $docPosAllowanceChargecalculationPercent);
+        $this->assertEquals(0, $docPosAllowanceChargebasisAmount);
+        $this->assertEquals("Artikelrabatt 1", $docPosAllowanceChargereason);
+        $this->assertEquals("", $docPosAllowanceChargeTaxTypeCode);
+        $this->assertEquals("", $docPosAllowanceChargeTaxCategoryCode);
+        $this->assertEquals(0, $docPosAllowanceChargerateApplicablePercent);
+        $this->assertEquals(0, $docPosAllowanceChargesequence);
+        $this->assertEquals(0, $docPosAllowanceChargebasisQuantity);
+        $this->assertEquals("", $docPosAllowanceChargebasisQuantityUnitCode);
+        $this->assertEquals("", $docPosAllowanceChargereasonCode);
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(288.75, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFourth(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("4", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("FALTENBEUTEL 16x6x28 CM", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("FB05", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0088", $prodglobalidtype);
+        $this->assertEquals("2001015001325", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0105, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(0.0105, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(3500.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(36.75, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFifth(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("5", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Kopierpapier A4", $prodname);
+        $this->assertEquals("ZÃ€hlerstand von-bis: 543210 - 544420", $proddesc);
+        $this->assertEquals("KOP05", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0088", $prodglobalidtype);
+        $this->assertEquals("4123456000038", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0100, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(0.0100, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(1210.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(12.10, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAdditionalReferencedDocument
+     */
+    public function testDocumentPositionAdditionalReferencedDocument(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPositionAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentPositionAdditionalReferencedDocument());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderInvalidTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderInvalidTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderInvalidTest.php	(revision 8435)
@@ -0,0 +1,24 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdDocumentPdfReader;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+
+class PdfReaderInvalidTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfReader::readAndGuessFromFile
+     */
+    public function testCanReadPdf(): void
+    {
+        self::$document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/InvalidPDF.pdf");
+        $this->assertNull(self::$document);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderMinimumSimpleTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderMinimumSimpleTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderMinimumSimpleTest.php	(revision 8435)
@@ -0,0 +1,1156 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdDocumentPdfReader;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\ZugferdProfiles;
+
+class PdfReaderMinimumSimpleTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfReader::readAndGuessFromFile
+     */
+    public function testCanReadPdf(): void
+    {
+        self::$document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/Facture_F20220027_MINIMUM.pdf");
+        $this->assertNotNull(self::$document);
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertEquals(ZugferdProfiles::PROFILE_MINIMUM, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_XRECHNUNG, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('F20220027', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20220131'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+        $this->assertNotNull(self::$document->getInvoiceObject());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentNotes
+     */
+    public function testDocumentNotes(): void
+    {
+        self::$document->getDocumentNotes($notes);
+        $this->assertIsArray($notes);
+        $this->assertEmpty($notes);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("", $creditorReferenceID);
+        $this->assertEquals("", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsDocumentCopy
+     */
+    public function testDocumentIsCopy(): void
+    {
+        self::$document->getIsDocumentCopy($iscopy);
+        $this->assertFalse($iscopy);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsTestDocument
+     */
+    public function testDocumentIsTestDocument(): void
+    {
+        self::$document->getIsTestDocument($istest);
+        $this->assertFalse($istest);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSummation
+     */
+    public function testDocumentSummation(): void
+    {
+        self::$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+        $this->assertEquals(110.00, $grandTotalAmount);
+        $this->assertEquals(100.00, $duePayableAmount);
+        $this->assertEquals(0.0, $lineTotalAmount);
+        $this->assertEquals(0.00, $chargeTotalAmount);
+        $this->assertEquals(0.00, $allowanceTotalAmount);
+        $this->assertEquals(100.00, $taxBasisTotalAmount);
+        $this->assertEquals(10.00, $taxTotalAmount);
+        $this->assertEquals(0.00, $roundingAmount);
+        $this->assertEquals(0.00, $totalPrepaidAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerReference
+     */
+    public function testGetDocumentBuyerReference(): void
+    {
+        self::$document->getDocumentBuyerReference($buyerReference);
+        $this->assertEquals("SERVEXEC", $buyerReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSeller
+     */
+    public function testDocumentSellerGeneral(): void
+    {
+        self::$document->getDocumentSeller($sellername, $sellerids, $sellerdescription);
+        $this->assertEquals("LE FOURNISSEUR", $sellername);
+        $this->assertIsArray($sellerids);
+        $this->assertArrayNotHasKey(0, $sellerids);
+        $this->assertArrayNotHasKey(1, $sellerids);
+        $this->assertEquals("", $sellerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerGlobalId
+     */
+    public function testDocumentSellerGlobalId(): void
+    {
+        self::$document->getDocumentSellerGlobalId($sellerglobalids);
+        $this->assertIsArray($sellerglobalids);
+        $this->assertEmpty($sellerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRegistration
+     */
+    public function testDocumentSellerTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRegistration($sellertaxreg);
+        $this->assertIsArray($sellertaxreg);
+        $this->assertArrayHasKey("VA", $sellertaxreg);
+        $this->assertArrayNotHasKey("FC", $sellertaxreg);
+        $this->assertArrayNotHasKey(0, $sellertaxreg);
+        $this->assertArrayNotHasKey(1, $sellertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $sellertaxreg);
+        $this->assertEquals("FR11123456782", $sellertaxreg["VA"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerAddress
+     */
+    public function testDocumentSellerAddress(): void
+    {
+        self::$document->getDocumentSellerAddress($sellerlineone, $sellerlinetwo, $sellerlinethree, $sellerpostcode, $sellercity, $sellercountry, $sellersubdivision);
+        $this->assertEquals("", $sellerlineone);
+        $this->assertEquals("", $sellerlinetwo);
+        $this->assertEquals("", $sellerlinethree);
+        $this->assertEquals("", $sellerpostcode);
+        $this->assertEquals("", $sellercity);
+        $this->assertEquals("FR", $sellercountry);
+        $this->assertIsArray($sellersubdivision);
+        $this->assertEmpty($sellersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerLegalOrganisation
+     */
+    public function testDocumentSellerLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerLegalOrganisation($sellerlegalorgid, $sellerlegalorgtype, $sellerlegalorgname);
+        $this->assertEquals("123456782", $sellerlegalorgid);
+        $this->assertEquals("0002", $sellerlegalorgtype);
+        $this->assertEquals("", $sellerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerContact
+     */
+    public function testDocumentSellerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerContact());
+        $this->assertFalse(self::$document->nextDocumentSellerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerContact($sellercontactpersonname, $sellercontactdepartmentname, $sellercontactphoneno, $sellercontactfaxno, $sellercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyer
+     */
+    public function testDocumentBuyerGeneral(): void
+    {
+        self::$document->getDocumentBuyer($buyername, $buyerids, $buyerdescription);
+        $this->assertEquals("LE CLIENT", $buyername);
+        $this->assertIsArray($buyerids);
+        $this->assertArrayNotHasKey(0, $buyerids);
+        $this->assertArrayNotHasKey(1, $buyerids);
+        $this->assertEquals("", $buyerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerGlobalId
+     */
+    public function testDocumentBuyerGlobalId(): void
+    {
+        self::$document->getDocumentBuyerGlobalId($buyerglobalids);
+        $this->assertIsArray($buyerglobalids);
+        $this->assertEmpty($buyerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerTaxRegistration
+     */
+    public function testDocumentBuyerTaxRegistration(): void
+    {
+        self::$document->getDocumentBuyerTaxRegistration($buyertaxreg);
+        $this->assertIsArray($buyertaxreg);
+        $this->assertEmpty($buyertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerAddress
+     */
+    public function testDocumentBuyerAddress(): void
+    {
+        self::$document->getDocumentBuyerAddress($buyerlineone, $buyerlinetwo, $buyerlinethree, $buyerpostcode, $buyercity, $buyercountry, $buyersubdivision);
+        $this->assertEquals("", $buyerlineone);
+        $this->assertEquals("", $buyerlinetwo);
+        $this->assertEquals("", $buyerlinethree);
+        $this->assertEquals("", $buyerpostcode);
+        $this->assertEquals("", $buyercity);
+        $this->assertEquals("", $buyercountry);
+        $this->assertIsArray($buyersubdivision);
+        $this->assertEmpty($buyersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerLegalOrganisation
+     */
+    public function testDocumentBuyerLegalOrganization(): void
+    {
+        self::$document->getDocumentBuyerLegalOrganisation($buyerlegalorgid, $buyerlegalorgtype, $buyerlegalorgname);
+        $this->assertEquals("987654321", $buyerlegalorgid);
+        $this->assertEquals("0002", $buyerlegalorgtype);
+        $this->assertEquals("", $buyerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentBuyerContact
+     */
+    public function testDocumentBuyerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentBuyerContact());
+        $this->assertFalse(self::$document->nextDocumentBuyerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentBuyerContact($buyercontactpersonname, $buyercontactdepartmentname, $buyercontactphoneno, $buyercontactfaxno, $buyercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentative
+     */
+    public function testDocumentSellerTaxRepresentativeGeneral(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentative($sellertaxreprname, $sellertaxreprids, $sellertaxreprdescription);
+        $this->assertEquals("", $sellertaxreprname);
+        $this->assertIsArray($sellertaxreprids);
+        $this->assertEmpty($sellertaxreprids);
+        $this->assertEquals("", $sellertaxreprdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeGlobalId($sellertaxreprglobalids);
+        $this->assertIsArray($sellertaxreprglobalids);
+        $this->assertEmpty($sellertaxreprglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeTaxRegistration($sellertaxreprtaxreg);
+        $this->assertIsArray($sellertaxreprtaxreg);
+        $this->assertEmpty($sellertaxreprtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeAddress
+     */
+    public function testDocumentSellerTaxRepresentativeAddress(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeAddress($sellertaxreprlineone, $sellertaxreprlinetwo, $sellertaxreprlinethree, $sellertaxreprpostcode, $sellertaxreprcity, $sellertaxreprcountry, $sellertaxreprsubdivision);
+        $this->assertEquals("", $sellertaxreprlineone);
+        $this->assertEquals("", $sellertaxreprlinetwo);
+        $this->assertEquals("", $sellertaxreprlinethree);
+        $this->assertEquals("", $sellertaxreprpostcode);
+        $this->assertEquals("", $sellertaxreprcity);
+        $this->assertEquals("", $sellertaxreprcountry);
+        $this->assertIsArray($sellertaxreprsubdivision);
+        $this->assertEmpty($sellertaxreprsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testDocumentSellerTaxRepresentativeLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeLegalOrganisation($sellertaxreprlegalorgid, $sellertaxreprlegalorgtype, $sellertaxreprlegalorgname);
+        $this->assertEquals("", $sellertaxreprlegalorgid);
+        $this->assertEquals("", $sellertaxreprlegalorgtype);
+        $this->assertEquals("", $sellertaxreprlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerTaxRepresentativeContact
+     */
+    public function testDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerTaxRepresentativeContact());
+        $this->assertFalse(self::$document->nextDocumentSellerTaxRepresentativeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerTaxRepresentativeContact($sellertaxreprcontactpersonname, $sellertaxreprcontactdepartmentname, $sellertaxreprcontactphoneno, $sellertaxreprcontactfaxno, $sellertaxreprcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipTo
+     */
+    public function testDocumentShipToGeneral(): void
+    {
+        self::$document->getDocumentShipTo($shiptoname, $shiptoids, $shiptodescription);
+        $this->assertEquals("", $shiptoname);
+        $this->assertIsArray($shiptoids);
+        $this->assertEmpty($shiptoids);
+        $this->assertEquals("", $shiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToGlobalId
+     */
+    public function testDocumentShipToGlobalId(): void
+    {
+        self::$document->getDocumentShipToGlobalId($shiptoglobalids);
+        $this->assertIsArray($shiptoglobalids);
+        $this->assertEmpty($shiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToTaxRegistration
+     */
+    public function testDocumentShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentShipToTaxRegistration($shiptotaxreg);
+        $this->assertIsArray($shiptotaxreg);
+        $this->assertEmpty($shiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToAddress
+     */
+    public function testDocumentShipToAddress(): void
+    {
+        self::$document->getDocumentShipToAddress($shiptolineone, $shiptolinetwo, $shiptolinethree, $shiptopostcode, $shiptocity, $shiptocountry, $shiptosubdivision);
+        $this->assertEquals("", $shiptolineone);
+        $this->assertEquals("", $shiptolinetwo);
+        $this->assertEquals("", $shiptolinethree);
+        $this->assertEquals("", $shiptopostcode);
+        $this->assertEquals("", $shiptocity);
+        $this->assertEquals("", $shiptocountry);
+        $this->assertIsArray($shiptosubdivision);
+        $this->assertEmpty($shiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToLegalOrganisation
+     */
+    public function testDocumentShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentShipToLegalOrganisation($shiptolegalorgid, $shiptolegalorgtype, $shiptolegalorgname);
+        $this->assertEquals("", $shiptolegalorgid);
+        $this->assertEquals("", $shiptolegalorgtype);
+        $this->assertEquals("", $shiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipToContact
+     */
+    public function testDocumentShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipToContact());
+        $this->assertFalse(self::$document->nextDocumentShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipToContact($shiptocontactpersonname, $shiptocontactdepartmentname, $shiptocontactphoneno, $shiptocontactfaxno, $shiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipTo
+     */
+    public function testDocumentUltimateShipToGeneral(): void
+    {
+        self::$document->getDocumentUltimateShipTo($ultimateshiptoname, $ultimateshiptoids, $ultimateshiptodescription);
+        $this->assertEquals("", $ultimateshiptoname);
+        $this->assertIsArray($ultimateshiptoids);
+        $this->assertEmpty($ultimateshiptoids);
+        $this->assertEquals("", $ultimateshiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToGlobalId
+     */
+    public function testDocumentUltimateShipToGlobalId(): void
+    {
+        self::$document->getDocumentUltimateShipToGlobalId($ultimateshiptoglobalids);
+        $this->assertIsArray($ultimateshiptoglobalids);
+        $this->assertEmpty($ultimateshiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToTaxRegistration
+     */
+    public function testDocumentUltimateShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentUltimateShipToTaxRegistration($ultimateshiptotaxreg);
+        $this->assertIsArray($ultimateshiptotaxreg);
+        $this->assertEmpty($ultimateshiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToAddress
+     */
+    public function testDocumentUltimateShipToAddress(): void
+    {
+        self::$document->getDocumentUltimateShipToAddress($ultimateshiptolineone, $ultimateshiptolinetwo, $ultimateshiptolinethree, $ultimateshiptopostcode, $ultimateshiptocity, $ultimateshiptocountry, $ultimateshiptosubdivision);
+        $this->assertEquals("", $ultimateshiptolineone);
+        $this->assertEquals("", $ultimateshiptolinetwo);
+        $this->assertEquals("", $ultimateshiptolinethree);
+        $this->assertEquals("", $ultimateshiptopostcode);
+        $this->assertEquals("", $ultimateshiptocity);
+        $this->assertEquals("", $ultimateshiptocountry);
+        $this->assertIsArray($ultimateshiptosubdivision);
+        $this->assertEmpty($ultimateshiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToLegalOrganisation
+     */
+    public function testDocumentUltimateShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentUltimateShipToLegalOrganisation($ultimateshiptolegalorgid, $ultimateshiptolegalorgtype, $ultimateshiptolegalorgname);
+        $this->assertEquals("", $ultimateshiptolegalorgid);
+        $this->assertEquals("", $ultimateshiptolegalorgtype);
+        $this->assertEquals("", $ultimateshiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateShipToContact
+     */
+    public function testDocumentUltimateShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFrom
+     */
+    public function testDocumentShipFromGeneral(): void
+    {
+        self::$document->getDocumentShipFrom($shipfromname, $shipfromids, $shipfromdescription);
+        $this->assertEquals("", $shipfromname);
+        $this->assertIsArray($shipfromids);
+        $this->assertEmpty($shipfromids);
+        $this->assertEquals("", $shipfromdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromGlobalId
+     */
+    public function testDocumentShipFromGlobalId(): void
+    {
+        self::$document->getDocumentShipFromGlobalId($shipfromglobalids);
+        $this->assertIsArray($shipfromglobalids);
+        $this->assertEmpty($shipfromglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromTaxRegistration
+     */
+    public function testDocumentShipFromTaxRegistration(): void
+    {
+        self::$document->getDocumentShipFromTaxRegistration($shipfromtaxreg);
+        $this->assertIsArray($shipfromtaxreg);
+        $this->assertEmpty($shipfromtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromAddress
+     */
+    public function testDocumentShipFromAddress(): void
+    {
+        self::$document->getDocumentShipFromAddress($shipfromlineone, $shipfromlinetwo, $shipfromlinethree, $shipfrompostcode, $shipfromcity, $shipfromcountry, $shipfromsubdivision);
+        $this->assertEquals("", $shipfromlineone);
+        $this->assertEquals("", $shipfromlinetwo);
+        $this->assertEquals("", $shipfromlinethree);
+        $this->assertEquals("", $shipfrompostcode);
+        $this->assertEquals("", $shipfromcity);
+        $this->assertEquals("", $shipfromcountry);
+        $this->assertIsArray($shipfromsubdivision);
+        $this->assertEmpty($shipfromsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromLegalOrganisation
+     */
+    public function testDocumentShipFromLegalOrganization(): void
+    {
+        self::$document->getDocumentShipFromLegalOrganisation($shipfromlegalorgid, $shipfromlegalorgtype, $shipfromlegalorgname);
+        $this->assertEquals("", $shipfromlegalorgid);
+        $this->assertEquals("", $shipfromlegalorgtype);
+        $this->assertEquals("", $shipfromlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipFromContact
+     */
+    public function testDocumentShipFromContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicer
+     */
+    public function testDocumentInvoicerGeneral(): void
+    {
+        self::$document->getDocumentInvoicer($invoicername, $invoicerids, $invoicerdescription);
+        $this->assertEquals("", $invoicername);
+        $this->assertIsArray($invoicerids);
+        $this->assertEmpty($invoicerids);
+        $this->assertEquals("", $invoicerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerGlobalId
+     */
+    public function testDocumentInvoicerGlobalId(): void
+    {
+        self::$document->getDocumentInvoicerGlobalId($invoicerglobalids);
+        $this->assertIsArray($invoicerglobalids);
+        $this->assertEmpty($invoicerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerTaxRegistration
+     */
+    public function testDocumentInvoicerTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoicerTaxRegistration($invoicertaxreg);
+        $this->assertIsArray($invoicertaxreg);
+        $this->assertEmpty($invoicertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerAddress
+     */
+    public function testDocumentInvoicerAddress(): void
+    {
+        self::$document->getDocumentInvoicerAddress($invoicerlineone, $invoicerlinetwo, $invoicerlinethree, $invoicerpostcode, $invoicercity, $invoicercountry, $invoicersubdivision);
+        $this->assertEquals("", $invoicerlineone);
+        $this->assertEquals("", $invoicerlinetwo);
+        $this->assertEquals("", $invoicerlinethree);
+        $this->assertEquals("", $invoicerpostcode);
+        $this->assertEquals("", $invoicercity);
+        $this->assertEquals("", $invoicercountry);
+        $this->assertIsArray($invoicersubdivision);
+        $this->assertEmpty($invoicersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerLegalOrganisation
+     */
+    public function testDocumentInvoicerLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoicerLegalOrganisation($invoicerlegalorgid, $invoicerlegalorgtype, $invoicerlegalorgname);
+        $this->assertEquals("", $invoicerlegalorgid);
+        $this->assertEquals("", $invoicerlegalorgtype);
+        $this->assertEquals("", $invoicerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoicerContact
+     */
+    public function testDocumentInvoicerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicee
+     */
+    public function testDocumentInvoiceeGeneral(): void
+    {
+        self::$document->getDocumentInvoicee($invoiceename, $invoiceeids, $invoiceedescription);
+        $this->assertEquals("", $invoiceename);
+        $this->assertIsArray($invoiceeids);
+        $this->assertEmpty($invoiceeids);
+        $this->assertEquals("", $invoiceedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeGlobalId
+     */
+    public function testDocumentInvoiceeGlobalId(): void
+    {
+        self::$document->getDocumentInvoiceeGlobalId($invoiceeglobalids);
+        $this->assertIsArray($invoiceeglobalids);
+        $this->assertEmpty($invoiceeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeTaxRegistration
+     */
+    public function testDocumentInvoiceeTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoiceeTaxRegistration($invoiceetaxreg);
+        $this->assertIsArray($invoiceetaxreg);
+        $this->assertEmpty($invoiceetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeAddress
+     */
+    public function testDocumentInvoiceeAddress(): void
+    {
+        self::$document->getDocumentInvoiceeAddress($invoiceelineone, $invoiceelinetwo, $invoiceelinethree, $invoiceepostcode, $invoiceecity, $invoiceecountry, $invoiceesubdivision);
+        $this->assertEquals("", $invoiceelineone);
+        $this->assertEquals("", $invoiceelinetwo);
+        $this->assertEquals("", $invoiceelinethree);
+        $this->assertEquals("", $invoiceepostcode);
+        $this->assertEquals("", $invoiceecity);
+        $this->assertEquals("", $invoiceecountry);
+        $this->assertIsArray($invoiceesubdivision);
+        $this->assertEmpty($invoiceesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeLegalOrganisation
+     */
+    public function testDocumentInvoiceeLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoiceeLegalOrganisation($invoiceelegalorgid, $invoiceelegalorgtype, $invoiceelegalorgname);
+        $this->assertEquals("", $invoiceelegalorgid);
+        $this->assertEquals("", $invoiceelegalorgtype);
+        $this->assertEquals("", $invoiceelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoiceeContact
+     */
+    public function testDocumentInvoiceeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayee
+     */
+    public function testDocumentPayeeGeneral(): void
+    {
+        self::$document->getDocumentPayee($payeename, $payeeids, $payeedescription);
+        $this->assertEquals("", $payeename);
+        $this->assertIsArray($payeeids);
+        $this->assertEmpty($payeeids);
+        $this->assertEquals("", $payeedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeGlobalId
+     */
+    public function testDocumentPayeeGlobalId(): void
+    {
+        self::$document->getDocumentPayeeGlobalId($payeeglobalids);
+        $this->assertIsArray($payeeglobalids);
+        $this->assertEmpty($payeeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeTaxRegistration
+     */
+    public function testDocumentPayeeTaxRegistration(): void
+    {
+        self::$document->getDocumentPayeeTaxRegistration($payeetaxreg);
+        $this->assertIsArray($payeetaxreg);
+        $this->assertEmpty($payeetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeAddress
+     */
+    public function testDocumentPayeeAddress(): void
+    {
+        self::$document->getDocumentPayeeAddress($payeelineone, $payeelinetwo, $payeelinethree, $payeepostcode, $payeecity, $payeecountry, $payeesubdivision);
+        $this->assertEquals("", $payeelineone);
+        $this->assertEquals("", $payeelinetwo);
+        $this->assertEquals("", $payeelinethree);
+        $this->assertEquals("", $payeepostcode);
+        $this->assertEquals("", $payeecity);
+        $this->assertEquals("", $payeecountry);
+        $this->assertIsArray($payeesubdivision);
+        $this->assertEmpty($payeesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeLegalOrganisation
+     */
+    public function testDocumentPayeeLegalOrganization(): void
+    {
+        self::$document->getDocumentPayeeLegalOrganisation($payeelegalorgid, $payeelegalorgtype, $payeelegalorgname);
+        $this->assertEquals("", $payeelegalorgid);
+        $this->assertEquals("", $payeelegalorgtype);
+        $this->assertEquals("", $payeelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPayeeContact
+     */
+    public function testDocumentPayeeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUser
+     */
+    public function testDocumentProductEndUserGeneral(): void
+    {
+        self::$document->getDocumentProductEndUser($producendusername, $producenduserids, $producenduserdescription);
+        $this->assertEquals("", $producendusername);
+        $this->assertIsArray($producenduserids);
+        $this->assertArrayNotHasKey(0, $producenduserids);
+        $this->assertArrayNotHasKey(1, $producenduserids);
+        $this->assertEquals("", $producenduserdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserGlobalId
+     */
+    public function testDocumentProductEndUserGlobalId(): void
+    {
+        self::$document->getDocumentProductEndUserGlobalId($producenduserglobalids);
+        $this->assertIsArray($producenduserglobalids);
+        $this->assertArrayNotHasKey("0088", $producenduserglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserTaxRegistration
+     */
+    public function testDocumentProductEndUserTaxRegistration(): void
+    {
+        self::$document->getDocumentProductEndUserTaxRegistration($producendusertaxreg);
+        $this->assertIsArray($producendusertaxreg);
+        $this->assertArrayNotHasKey("VA", $producendusertaxreg);
+        $this->assertArrayNotHasKey("FC", $producendusertaxreg);
+        $this->assertArrayNotHasKey(0, $producendusertaxreg);
+        $this->assertArrayNotHasKey(1, $producendusertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $producendusertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserAddress
+     */
+    public function testDocumentProductEndUserAddress(): void
+    {
+        self::$document->getDocumentProductEndUserAddress($producenduserlineone, $producenduserlinetwo, $producenduserlinethree, $producenduserpostcode, $producendusercity, $producendusercountry, $producendusersubdivision);
+        $this->assertEquals("", $producenduserlineone);
+        $this->assertEquals("", $producenduserlinetwo);
+        $this->assertEquals("", $producenduserlinethree);
+        $this->assertEquals("", $producenduserpostcode);
+        $this->assertEquals("", $producendusercity);
+        $this->assertEquals("", $producendusercountry);
+        $this->assertIsArray($producendusersubdivision);
+        $this->assertEmpty($producendusersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserLegalOrganisation
+     */
+    public function testDocumentProductEndUserLegalOrganization(): void
+    {
+        self::$document->getDocumentProductEndUserLegalOrganisation($producenduserlegalorgid, $producenduserlegalorgtype, $producenduserlegalorgname);
+        $this->assertEquals("", $producenduserlegalorgid);
+        $this->assertEquals("", $producenduserlegalorgtype);
+        $this->assertEquals("", $producenduserlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentProductEndUserContactContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentProductEndUserContactContact
+     */
+    public function testDocumentProductEndUserContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentProductEndUserContactContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentProductEndUserContact($producendusercontactpersonname, $producendusercontactdepartmentname, $producendusercontactphoneno, $producendusercontactfaxno, $producendusercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentProductEndUserContactContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerOrderReferencedDocument
+     */
+    public function testDocumentSellerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentSellerOrderReferencedDocument($sellerorderrefdocid, $sellerorderrefdocdate);
+        $this->assertEquals("", $sellerorderrefdocid);
+        $this->assertNull($sellerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerOrderReferencedDocument
+     */
+    public function testDocumentBuyerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentBuyerOrderReferencedDocument($buyerorderrefdocid, $buyerorderrefdocdate);
+        $this->assertEquals("PO201925478", $buyerorderrefdocid);
+        $this->assertNull($buyerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentContractReferencedDocument
+     */
+    public function testDocumentContractReferencedDocument(): void
+    {
+        self::$document->getDocumentContractReferencedDocument($contractrefdocid, $contractrefdocdate);
+        $this->assertEquals("", $contractrefdocid);
+        $this->assertNull($contractrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocuments
+     */
+    public function testDocumentAdditionalReferencedDocuments(): void
+    {
+        self::$document->getDocumentAdditionalReferencedDocuments($additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs);
+        $this->assertEmpty($additionalrefdocs);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProcuringProject
+     */
+    public function testDocumentProcuringProject(): void
+    {
+        self::$document->getDocumentProcuringProject($projectid, $projectname);
+        $this->assertEquals("", $projectid);
+        $this->assertEquals("", $projectname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSupplyChainEvent
+     */
+    public function testDocumentSupplyChainEvent(): void
+    {
+        self::$document->getDocumentSupplyChainEvent($supplychainevent);
+        $this->assertNull($supplychainevent);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDespatchAdviceReferencedDocument
+     */
+    public function testDocumentDespatchAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentDespatchAdviceReferencedDocument($despatchdocid, $despatchdocdate);
+        $this->assertEquals("", $despatchdocid);
+        $this->assertNull($despatchdocdate);
+        $this->assertNotInstanceOf("DateTime", $despatchdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentReceivingAdviceReferencedDocument
+     */
+    public function testDocumentReceivingAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentReceivingAdviceReferencedDocument($recadvid, $recadvdate);
+        $this->assertEquals("", $recadvid);
+        $this->assertNull($recadvdate);
+        $this->assertNotInstanceOf("DateTime", $recadvdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryNoteReferencedDocument
+     */
+    public function testDocumentDeliveryNoteReferencedDocument(): void
+    {
+        self::$document->getDocumentDeliveryNoteReferencedDocument($deliverynoterefdocid, $deliverynoterefdocdate);
+        $this->assertEquals("", $deliverynoterefdocid);
+        $this->assertNull($deliverynoterefdocdate);
+        $this->assertNotInstanceOf("DateTime", $deliverynoterefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBillingPeriod
+     */
+    public function testDocumentBillingPeriod(): void
+    {
+        self::$document->getDocumentBillingPeriod($docbillingperiodstart, $docbillingperiodend);
+        $this->assertNull($docbillingperiodstart);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodstart);
+        $this->assertNull($docbillingperiodend);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodend);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharges
+     */
+    public function testDocumentAllowanceCharges(): void
+    {
+        self::$document->getDocumentAllowanceCharges($docallowancecharge);
+        $this->assertIsArray($docallowancecharge);
+        $this->assertEmpty($docallowancecharge);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerms
+     */
+    public function testDocumentPaymentTerms(): void
+    {
+        self::$document->getDocumentPaymentTerms($docpaymentterms);
+        $this->assertIsArray($docpaymentterms);
+        $this->assertEmpty($docpaymentterms);
+        $this->assertArrayNotHasKey(0, $docpaymentterms);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryTerms
+     */
+    public function testDocumentDeliveryTerms(): void
+    {
+        self::$document->getDocumentDeliveryTerms($devtermcode);
+        $this->assertEquals("", $devtermcode);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument
+     */
+    public function testDocumentAdditionalReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentAdditionalReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testDocumentUltimateCustomerOrderReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateCustomerOrderReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentUltimateCustomerOrderReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentPaymentMeansLoop(): void
+    {
+        $this->assertFalse(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     */
+    public function testDocumentTaxLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentTax());
+        $this->assertFalse(self::$document->nextDocumentTax());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     */
+    public function testDocumentTax(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentTax());
+        $this->assertFalse(self::$document->nextDocumentTax());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentAllowanceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentLogisticsServiceCharge
+     */
+    public function testtDocumentLogisticsServiceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentLogisticsServiceCharge());
+        $this->assertFalse(self::$document->nextDocumentLogisticsServiceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     */
+    public function testDocumentPositionLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPosition(), "has a first position");
+        $this->assertFalse(self::$document->nextDocumentPosition(), "has a second position");
+        $this->assertFalse(self::$document->nextDocumentPosition(), "has no third position");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     */
+    public function testDocumentPositionFirst(): void
+    {
+        $this->assertfalse(self::$document->firstDocumentPosition());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     */
+    public function testDocumentPositionSecond(): void
+    {
+        $this->assertFalse(self::$document->nextDocumentPosition());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderMultipleAttachmentsTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderMultipleAttachmentsTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderMultipleAttachmentsTest.php	(revision 8435)
@@ -0,0 +1,52 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdDocumentPdfReader;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\ZugferdProfiles;
+
+class PdfReaderMultipleAttachmentsTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfReader::readAndGuessFromFile
+     */
+    public function testCanReadPdf(): void
+    {
+        self::$document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/zugferd_2p1_EN16931_Elektron.pdf");
+        $this->assertNotNull(self::$document);
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_XRECHNUNG, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('181301674', $documentno);
+        $this->assertEquals("204", $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180425'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+        $this->assertNotNull(self::$document->getInvoiceObject());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderXRechnungSimpleTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderXRechnungSimpleTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/PdfReaderXRechnungSimpleTest.php	(revision 8435)
@@ -0,0 +1,1482 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdDocumentPdfReader;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\ZugferdProfiles;
+
+class PdfReaderXRechnungSimpleTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentPdfReader::readAndGuessFromFile
+     */
+    public function testCanReadPdf(): void
+    {
+        self::$document = ZugferdDocumentPdfReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/zugferd_2p1_XRECHNUNG_Einfach.pdf");
+        $this->assertNotNull(self::$document);
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+        $this->assertEquals(ZugferdProfiles::PROFILE_XRECHNUNG, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('471102', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180305'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+        $this->assertNotNull(self::$document->getInvoiceObject());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentNotes
+     */
+    public function testDocumentNotes(): void
+    {
+        self::$document->getDocumentNotes($notes);
+        $this->assertIsArray($notes);
+        $this->assertNotEmpty($notes);
+        $this->assertEquals(2, count($notes));
+        $this->assertArrayHasKey(0, $notes);
+        $this->assertArrayHasKey(1, $notes);
+        $this->assertIsArray($notes[0]);
+        $this->assertNotEmpty($notes[0]);
+        $this->assertArrayHasKey("content", $notes[0]);
+        $this->assertArrayHasKey("subjectcode", $notes[0]);
+        $this->assertArrayHasKey("contentcode", $notes[0]);
+        $this->assertIsArray($notes[1]);
+        $this->assertNotEmpty($notes[1]);
+        $this->assertArrayHasKey("content", $notes[1]);
+        $this->assertArrayHasKey("subjectcode", $notes[1]);
+        $this->assertArrayHasKey("contentcode", $notes[1]);
+        $this->assertEquals("", $notes[0]["contentcode"]);
+        $this->assertEquals("", $notes[0]["subjectcode"]);
+        $this->assertEquals("Rechnung gemÃ€Ã Bestellung vom 01.03.2018.", $notes[0]["content"]);
+        $this->assertEquals("", $notes[1]["contentcode"]);
+        $this->assertEquals("REG", $notes[1]["subjectcode"]);
+        $this->assertStringContainsString("Lieferant GmbH", $notes[1]["content"]);
+        $this->assertStringContainsString("LieferantenstraÃe 20", $notes[1]["content"]);
+        $this->assertStringContainsString("80333 MÃŒnchen", $notes[1]["content"]);
+        $this->assertStringContainsString("Deutschland", $notes[1]["content"]);
+        $this->assertStringContainsString("GeschÃ€ftsfÃŒhrer: Hans Muster", $notes[1]["content"]);
+        $this->assertStringContainsString("Handelsregisternummer: H A 123", $notes[1]["content"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("", $creditorReferenceID);
+        $this->assertEquals("", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsDocumentCopy
+     */
+    public function testDocumentIsCopy(): void
+    {
+        self::$document->getIsDocumentCopy($iscopy);
+        $this->assertFalse($iscopy);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsTestDocument
+     */
+    public function testDocumentIsTestDocument(): void
+    {
+        self::$document->getIsTestDocument($istest);
+        $this->assertFalse($istest);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSummation
+     */
+    public function testDocumentSummation(): void
+    {
+        self::$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+        $this->assertEquals(529.87, $grandTotalAmount);
+        $this->assertEquals(529.87, $duePayableAmount);
+        $this->assertEquals(473.00, $lineTotalAmount);
+        $this->assertEquals(0.00, $chargeTotalAmount);
+        $this->assertEquals(0.00, $allowanceTotalAmount);
+        $this->assertEquals(473.00, $taxBasisTotalAmount);
+        $this->assertEquals(56.87, $taxTotalAmount);
+        $this->assertEquals(0.00, $roundingAmount);
+        $this->assertEquals(0.00, $totalPrepaidAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerReference
+     */
+    public function testGetDocumentBuyerReference(): void
+    {
+        self::$document->getDocumentBuyerReference($buyerReference);
+        $this->assertEquals("04011000-12345-34", $buyerReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSeller
+     */
+    public function testDocumentSellerGeneral(): void
+    {
+        self::$document->getDocumentSeller($sellername, $sellerids, $sellerdescription);
+        $this->assertEquals("Lieferant GmbH", $sellername);
+        $this->assertIsArray($sellerids);
+        $this->assertArrayNotHasKey(0, $sellerids);
+        $this->assertArrayNotHasKey(1, $sellerids);
+        $this->assertEquals("", $sellerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerGlobalId
+     */
+    public function testDocumentSellerGlobalId(): void
+    {
+        self::$document->getDocumentSellerGlobalId($sellerglobalids);
+        $this->assertIsArray($sellerglobalids);
+        $this->assertArrayHasKey("0088", $sellerglobalids);
+        $this->assertEquals("4000001123452", $sellerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRegistration
+     */
+    public function testDocumentSellerTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRegistration($sellertaxreg);
+        $this->assertIsArray($sellertaxreg);
+        $this->assertArrayHasKey("VA", $sellertaxreg);
+        $this->assertArrayHasKey("FC", $sellertaxreg);
+        $this->assertArrayNotHasKey(0, $sellertaxreg);
+        $this->assertArrayNotHasKey(1, $sellertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $sellertaxreg);
+        $this->assertEquals("201/113/40209", $sellertaxreg["FC"]);
+        $this->assertEquals("DE123456789", $sellertaxreg["VA"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerAddress
+     */
+    public function testDocumentSellerAddress(): void
+    {
+        self::$document->getDocumentSellerAddress($sellerlineone, $sellerlinetwo, $sellerlinethree, $sellerpostcode, $sellercity, $sellercountry, $sellersubdivision);
+        $this->assertEquals("LieferantenstraÃe 20", $sellerlineone);
+        $this->assertEquals("", $sellerlinetwo);
+        $this->assertEquals("", $sellerlinethree);
+        $this->assertEquals("80333", $sellerpostcode);
+        $this->assertEquals("MÃŒnchen", $sellercity);
+        $this->assertEquals("DE", $sellercountry);
+        $this->assertIsArray($sellersubdivision);
+        $this->assertEmpty($sellersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerLegalOrganisation
+     */
+    public function testDocumentSellerLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerLegalOrganisation($sellerlegalorgid, $sellerlegalorgtype, $sellerlegalorgname);
+        $this->assertEquals("", $sellerlegalorgid);
+        $this->assertEquals("", $sellerlegalorgtype);
+        $this->assertEquals("", $sellerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerContact
+     */
+    public function testDocumentSellerContact(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentSellerContact());
+        self::$document->getDocumentSellerContact($sellercontactpersonname, $sellercontactdepartmentname, $sellercontactphoneno, $sellercontactfaxno, $sellercontactemailaddr);
+        $this->assertEquals("Max Mustermann", $sellercontactpersonname);
+        $this->assertEquals("Muster-Einkauf", $sellercontactdepartmentname);
+        $this->assertEquals("+49891234567", $sellercontactphoneno);
+        $this->assertEquals("", $sellercontactfaxno);
+        $this->assertEquals("Max@Mustermann.de", $sellercontactemailaddr);
+        $this->assertFalse(self::$document->nextDocumentSellerContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyer
+     */
+    public function testDocumentBuyerGeneral(): void
+    {
+        self::$document->getDocumentBuyer($buyername, $buyerids, $buyerdescription);
+        $this->assertEquals("Kunden AG Mitte", $buyername);
+        $this->assertIsArray($buyerids);
+        $this->assertArrayHasKey(0, $buyerids);
+        $this->assertArrayNotHasKey(1, $buyerids);
+        $this->assertEquals("GE2020211", $buyerids[0]);
+        $this->assertEquals("", $buyerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerGlobalId
+     */
+    public function testDocumentBuyerGlobalId(): void
+    {
+        self::$document->getDocumentBuyerGlobalId($buyerglobalids);
+        $this->assertIsArray($buyerglobalids);
+        $this->assertEmpty($buyerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerTaxRegistration
+     */
+    public function testDocumentBuyerTaxRegistration(): void
+    {
+        self::$document->getDocumentBuyerTaxRegistration($buyertaxreg);
+        $this->assertIsArray($buyertaxreg);
+        $this->assertEmpty($buyertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerAddress
+     */
+    public function testDocumentBuyerAddress(): void
+    {
+        self::$document->getDocumentBuyerAddress($buyerlineone, $buyerlinetwo, $buyerlinethree, $buyerpostcode, $buyercity, $buyercountry, $buyersubdivision);
+        $this->assertEquals("KundenstraÃe 15", $buyerlineone);
+        $this->assertEquals("", $buyerlinetwo);
+        $this->assertEquals("", $buyerlinethree);
+        $this->assertEquals("69876", $buyerpostcode);
+        $this->assertEquals("Frankfurt", $buyercity);
+        $this->assertEquals("DE", $buyercountry);
+        $this->assertIsArray($buyersubdivision);
+        $this->assertEmpty($buyersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerLegalOrganisation
+     */
+    public function testDocumentBuyerLegalOrganization(): void
+    {
+        self::$document->getDocumentBuyerLegalOrganisation($buyerlegalorgid, $buyerlegalorgtype, $buyerlegalorgname);
+        $this->assertEquals("", $buyerlegalorgid);
+        $this->assertEquals("", $buyerlegalorgtype);
+        $this->assertEquals("", $buyerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentBuyerContact
+     */
+    public function testDocumentBuyerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentBuyerContact());
+        $this->assertFalse(self::$document->nextDocumentBuyerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentBuyerContact($buyercontactpersonname, $buyercontactdepartmentname, $buyercontactphoneno, $buyercontactfaxno, $buyercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentative
+     */
+    public function testDocumentSellerTaxRepresentativeGeneral(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentative($sellertaxreprname, $sellertaxreprids, $sellertaxreprdescription);
+        $this->assertEquals("", $sellertaxreprname);
+        $this->assertIsArray($sellertaxreprids);
+        $this->assertEmpty($sellertaxreprids);
+        $this->assertEquals("", $sellertaxreprdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeGlobalId($sellertaxreprglobalids);
+        $this->assertIsArray($sellertaxreprglobalids);
+        $this->assertEmpty($sellertaxreprglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeTaxRegistration($sellertaxreprtaxreg);
+        $this->assertIsArray($sellertaxreprtaxreg);
+        $this->assertEmpty($sellertaxreprtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeAddress
+     */
+    public function testDocumentSellerTaxRepresentativeAddress(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeAddress($sellertaxreprlineone, $sellertaxreprlinetwo, $sellertaxreprlinethree, $sellertaxreprpostcode, $sellertaxreprcity, $sellertaxreprcountry, $sellertaxreprsubdivision);
+        $this->assertEquals("", $sellertaxreprlineone);
+        $this->assertEquals("", $sellertaxreprlinetwo);
+        $this->assertEquals("", $sellertaxreprlinethree);
+        $this->assertEquals("", $sellertaxreprpostcode);
+        $this->assertEquals("", $sellertaxreprcity);
+        $this->assertEquals("", $sellertaxreprcountry);
+        $this->assertIsArray($sellertaxreprsubdivision);
+        $this->assertEmpty($sellertaxreprsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testDocumentSellerTaxRepresentativeLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeLegalOrganisation($sellertaxreprlegalorgid, $sellertaxreprlegalorgtype, $sellertaxreprlegalorgname);
+        $this->assertEquals("", $sellertaxreprlegalorgid);
+        $this->assertEquals("", $sellertaxreprlegalorgtype);
+        $this->assertEquals("", $sellertaxreprlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerTaxRepresentativeContact
+     */
+    public function testDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerTaxRepresentativeContact());
+        $this->assertFalse(self::$document->nextDocumentSellerTaxRepresentativeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerTaxRepresentativeContact($sellertaxreprcontactpersonname, $sellertaxreprcontactdepartmentname, $sellertaxreprcontactphoneno, $sellertaxreprcontactfaxno, $sellertaxreprcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipTo
+     */
+    public function testDocumentShipToGeneral(): void
+    {
+        self::$document->getDocumentShipTo($shiptoname, $shiptoids, $shiptodescription);
+        $this->assertEquals("", $shiptoname);
+        $this->assertIsArray($shiptoids);
+        $this->assertEmpty($shiptoids);
+        $this->assertEquals("", $shiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToGlobalId
+     */
+    public function testDocumentShipToGlobalId(): void
+    {
+        self::$document->getDocumentShipToGlobalId($shiptoglobalids);
+        $this->assertIsArray($shiptoglobalids);
+        $this->assertEmpty($shiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToTaxRegistration
+     */
+    public function testDocumentShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentShipToTaxRegistration($shiptotaxreg);
+        $this->assertIsArray($shiptotaxreg);
+        $this->assertEmpty($shiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToAddress
+     */
+    public function testDocumentShipToAddress(): void
+    {
+        self::$document->getDocumentShipToAddress($shiptolineone, $shiptolinetwo, $shiptolinethree, $shiptopostcode, $shiptocity, $shiptocountry, $shiptosubdivision);
+        $this->assertEquals("", $shiptolineone);
+        $this->assertEquals("", $shiptolinetwo);
+        $this->assertEquals("", $shiptolinethree);
+        $this->assertEquals("", $shiptopostcode);
+        $this->assertEquals("", $shiptocity);
+        $this->assertEquals("", $shiptocountry);
+        $this->assertIsArray($shiptosubdivision);
+        $this->assertEmpty($shiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToLegalOrganisation
+     */
+    public function testDocumentShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentShipToLegalOrganisation($shiptolegalorgid, $shiptolegalorgtype, $shiptolegalorgname);
+        $this->assertEquals("", $shiptolegalorgid);
+        $this->assertEquals("", $shiptolegalorgtype);
+        $this->assertEquals("", $shiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipToContact
+     */
+    public function testDocumentShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipToContact());
+        $this->assertFalse(self::$document->nextDocumentShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipToContact($shiptocontactpersonname, $shiptocontactdepartmentname, $shiptocontactphoneno, $shiptocontactfaxno, $shiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipTo
+     */
+    public function testDocumentUltimateShipToGeneral(): void
+    {
+        self::$document->getDocumentUltimateShipTo($ultimateshiptoname, $ultimateshiptoids, $ultimateshiptodescription);
+        $this->assertEquals("", $ultimateshiptoname);
+        $this->assertIsArray($ultimateshiptoids);
+        $this->assertEmpty($ultimateshiptoids);
+        $this->assertEquals("", $ultimateshiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToGlobalId
+     */
+    public function testDocumentUltimateShipToGlobalId(): void
+    {
+        self::$document->getDocumentUltimateShipToGlobalId($ultimateshiptoglobalids);
+        $this->assertIsArray($ultimateshiptoglobalids);
+        $this->assertEmpty($ultimateshiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToTaxRegistration
+     */
+    public function testDocumentUltimateShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentUltimateShipToTaxRegistration($ultimateshiptotaxreg);
+        $this->assertIsArray($ultimateshiptotaxreg);
+        $this->assertEmpty($ultimateshiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToAddress
+     */
+    public function testDocumentUltimateShipToAddress(): void
+    {
+        self::$document->getDocumentUltimateShipToAddress($ultimateshiptolineone, $ultimateshiptolinetwo, $ultimateshiptolinethree, $ultimateshiptopostcode, $ultimateshiptocity, $ultimateshiptocountry, $ultimateshiptosubdivision);
+        $this->assertEquals("", $ultimateshiptolineone);
+        $this->assertEquals("", $ultimateshiptolinetwo);
+        $this->assertEquals("", $ultimateshiptolinethree);
+        $this->assertEquals("", $ultimateshiptopostcode);
+        $this->assertEquals("", $ultimateshiptocity);
+        $this->assertEquals("", $ultimateshiptocountry);
+        $this->assertIsArray($ultimateshiptosubdivision);
+        $this->assertEmpty($ultimateshiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToLegalOrganisation
+     */
+    public function testDocumentUltimateShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentUltimateShipToLegalOrganisation($ultimateshiptolegalorgid, $ultimateshiptolegalorgtype, $ultimateshiptolegalorgname);
+        $this->assertEquals("", $ultimateshiptolegalorgid);
+        $this->assertEquals("", $ultimateshiptolegalorgtype);
+        $this->assertEquals("", $ultimateshiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateShipToContact
+     */
+    public function testDocumentUltimateShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFrom
+     */
+    public function testDocumentShipFromGeneral(): void
+    {
+        self::$document->getDocumentShipFrom($shipfromname, $shipfromids, $shipfromdescription);
+        $this->assertEquals("", $shipfromname);
+        $this->assertIsArray($shipfromids);
+        $this->assertEmpty($shipfromids);
+        $this->assertEquals("", $shipfromdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromGlobalId
+     */
+    public function testDocumentShipFromGlobalId(): void
+    {
+        self::$document->getDocumentShipFromGlobalId($shipfromglobalids);
+        $this->assertIsArray($shipfromglobalids);
+        $this->assertEmpty($shipfromglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromTaxRegistration
+     */
+    public function testDocumentShipFromTaxRegistration(): void
+    {
+        self::$document->getDocumentShipFromTaxRegistration($shipfromtaxreg);
+        $this->assertIsArray($shipfromtaxreg);
+        $this->assertEmpty($shipfromtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromAddress
+     */
+    public function testDocumentShipFromAddress(): void
+    {
+        self::$document->getDocumentShipFromAddress($shipfromlineone, $shipfromlinetwo, $shipfromlinethree, $shipfrompostcode, $shipfromcity, $shipfromcountry, $shipfromsubdivision);
+        $this->assertEquals("", $shipfromlineone);
+        $this->assertEquals("", $shipfromlinetwo);
+        $this->assertEquals("", $shipfromlinethree);
+        $this->assertEquals("", $shipfrompostcode);
+        $this->assertEquals("", $shipfromcity);
+        $this->assertEquals("", $shipfromcountry);
+        $this->assertIsArray($shipfromsubdivision);
+        $this->assertEmpty($shipfromsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromLegalOrganisation
+     */
+    public function testDocumentShipFromLegalOrganization(): void
+    {
+        self::$document->getDocumentShipFromLegalOrganisation($shipfromlegalorgid, $shipfromlegalorgtype, $shipfromlegalorgname);
+        $this->assertEquals("", $shipfromlegalorgid);
+        $this->assertEquals("", $shipfromlegalorgtype);
+        $this->assertEquals("", $shipfromlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipFromContact
+     */
+    public function testDocumentShipFromContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicer
+     */
+    public function testDocumentInvoicerGeneral(): void
+    {
+        self::$document->getDocumentInvoicer($invoicername, $invoicerids, $invoicerdescription);
+        $this->assertEquals("", $invoicername);
+        $this->assertIsArray($invoicerids);
+        $this->assertEmpty($invoicerids);
+        $this->assertEquals("", $invoicerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerGlobalId
+     */
+    public function testDocumentInvoicerGlobalId(): void
+    {
+        self::$document->getDocumentInvoicerGlobalId($invoicerglobalids);
+        $this->assertIsArray($invoicerglobalids);
+        $this->assertEmpty($invoicerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerTaxRegistration
+     */
+    public function testDocumentInvoicerTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoicerTaxRegistration($invoicertaxreg);
+        $this->assertIsArray($invoicertaxreg);
+        $this->assertEmpty($invoicertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerAddress
+     */
+    public function testDocumentInvoicerAddress(): void
+    {
+        self::$document->getDocumentInvoicerAddress($invoicerlineone, $invoicerlinetwo, $invoicerlinethree, $invoicerpostcode, $invoicercity, $invoicercountry, $invoicersubdivision);
+        $this->assertEquals("", $invoicerlineone);
+        $this->assertEquals("", $invoicerlinetwo);
+        $this->assertEquals("", $invoicerlinethree);
+        $this->assertEquals("", $invoicerpostcode);
+        $this->assertEquals("", $invoicercity);
+        $this->assertEquals("", $invoicercountry);
+        $this->assertIsArray($invoicersubdivision);
+        $this->assertEmpty($invoicersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerLegalOrganisation
+     */
+    public function testDocumentInvoicerLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoicerLegalOrganisation($invoicerlegalorgid, $invoicerlegalorgtype, $invoicerlegalorgname);
+        $this->assertEquals("", $invoicerlegalorgid);
+        $this->assertEquals("", $invoicerlegalorgtype);
+        $this->assertEquals("", $invoicerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoicerContact
+     */
+    public function testDocumentInvoicerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicee
+     */
+    public function testDocumentInvoiceeGeneral(): void
+    {
+        self::$document->getDocumentInvoicee($invoiceename, $invoiceeids, $invoiceedescription);
+        $this->assertEquals("", $invoiceename);
+        $this->assertIsArray($invoiceeids);
+        $this->assertEmpty($invoiceeids);
+        $this->assertEquals("", $invoiceedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeGlobalId
+     */
+    public function testDocumentInvoiceeGlobalId(): void
+    {
+        self::$document->getDocumentInvoiceeGlobalId($invoiceeglobalids);
+        $this->assertIsArray($invoiceeglobalids);
+        $this->assertEmpty($invoiceeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeTaxRegistration
+     */
+    public function testDocumentInvoiceeTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoiceeTaxRegistration($invoiceetaxreg);
+        $this->assertIsArray($invoiceetaxreg);
+        $this->assertEmpty($invoiceetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeAddress
+     */
+    public function testDocumentInvoiceeAddress(): void
+    {
+        self::$document->getDocumentInvoiceeAddress($invoiceelineone, $invoiceelinetwo, $invoiceelinethree, $invoiceepostcode, $invoiceecity, $invoiceecountry, $invoiceesubdivision);
+        $this->assertEquals("", $invoiceelineone);
+        $this->assertEquals("", $invoiceelinetwo);
+        $this->assertEquals("", $invoiceelinethree);
+        $this->assertEquals("", $invoiceepostcode);
+        $this->assertEquals("", $invoiceecity);
+        $this->assertEquals("", $invoiceecountry);
+        $this->assertIsArray($invoiceesubdivision);
+        $this->assertEmpty($invoiceesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeLegalOrganisation
+     */
+    public function testDocumentInvoiceeLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoiceeLegalOrganisation($invoiceelegalorgid, $invoiceelegalorgtype, $invoiceelegalorgname);
+        $this->assertEquals("", $invoiceelegalorgid);
+        $this->assertEquals("", $invoiceelegalorgtype);
+        $this->assertEquals("", $invoiceelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoiceeContact
+     */
+    public function testDocumentInvoiceeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayee
+     */
+    public function testDocumentPayeeGeneral(): void
+    {
+        self::$document->getDocumentPayee($payeename, $payeeids, $payeedescription);
+        $this->assertEquals("", $payeename);
+        $this->assertIsArray($payeeids);
+        $this->assertEmpty($payeeids);
+        $this->assertEquals("", $payeedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeGlobalId
+     */
+    public function testDocumentPayeeGlobalId(): void
+    {
+        self::$document->getDocumentPayeeGlobalId($payeeglobalids);
+        $this->assertIsArray($payeeglobalids);
+        $this->assertEmpty($payeeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeTaxRegistration
+     */
+    public function testDocumentPayeeTaxRegistration(): void
+    {
+        self::$document->getDocumentPayeeTaxRegistration($payeetaxreg);
+        $this->assertIsArray($payeetaxreg);
+        $this->assertEmpty($payeetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeAddress
+     */
+    public function testDocumentPayeeAddress(): void
+    {
+        self::$document->getDocumentPayeeAddress($payeelineone, $payeelinetwo, $payeelinethree, $payeepostcode, $payeecity, $payeecountry, $payeesubdivision);
+        $this->assertEquals("", $payeelineone);
+        $this->assertEquals("", $payeelinetwo);
+        $this->assertEquals("", $payeelinethree);
+        $this->assertEquals("", $payeepostcode);
+        $this->assertEquals("", $payeecity);
+        $this->assertEquals("", $payeecountry);
+        $this->assertIsArray($payeesubdivision);
+        $this->assertEmpty($payeesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeLegalOrganisation
+     */
+    public function testDocumentPayeeLegalOrganization(): void
+    {
+        self::$document->getDocumentPayeeLegalOrganisation($payeelegalorgid, $payeelegalorgtype, $payeelegalorgname);
+        $this->assertEquals("", $payeelegalorgid);
+        $this->assertEquals("", $payeelegalorgtype);
+        $this->assertEquals("", $payeelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPayeeContact
+     */
+    public function testDocumentPayeeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUser
+     */
+    public function testDocumentProductEndUserGeneral(): void
+    {
+        self::$document->getDocumentProductEndUser($producendusername, $producenduserids, $producenduserdescription);
+        $this->assertEquals("", $producendusername);
+        $this->assertIsArray($producenduserids);
+        $this->assertArrayNotHasKey(0, $producenduserids);
+        $this->assertArrayNotHasKey(1, $producenduserids);
+        $this->assertEquals("", $producenduserdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserGlobalId
+     */
+    public function testDocumentProductEndUserGlobalId(): void
+    {
+        self::$document->getDocumentProductEndUserGlobalId($producenduserglobalids);
+        $this->assertIsArray($producenduserglobalids);
+        $this->assertArrayNotHasKey("0088", $producenduserglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserTaxRegistration
+     */
+    public function testDocumentProductEndUserTaxRegistration(): void
+    {
+        self::$document->getDocumentProductEndUserTaxRegistration($producendusertaxreg);
+        $this->assertIsArray($producendusertaxreg);
+        $this->assertArrayNotHasKey("VA", $producendusertaxreg);
+        $this->assertArrayNotHasKey("FC", $producendusertaxreg);
+        $this->assertArrayNotHasKey(0, $producendusertaxreg);
+        $this->assertArrayNotHasKey(1, $producendusertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $producendusertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserAddress
+     */
+    public function testDocumentProductEndUserAddress(): void
+    {
+        self::$document->getDocumentProductEndUserAddress($producenduserlineone, $producenduserlinetwo, $producenduserlinethree, $producenduserpostcode, $producendusercity, $producendusercountry, $producendusersubdivision);
+        $this->assertEquals("", $producenduserlineone);
+        $this->assertEquals("", $producenduserlinetwo);
+        $this->assertEquals("", $producenduserlinethree);
+        $this->assertEquals("", $producenduserpostcode);
+        $this->assertEquals("", $producendusercity);
+        $this->assertEquals("", $producendusercountry);
+        $this->assertIsArray($producendusersubdivision);
+        $this->assertEmpty($producendusersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserLegalOrganisation
+     */
+    public function testDocumentProductEndUserLegalOrganization(): void
+    {
+        self::$document->getDocumentProductEndUserLegalOrganisation($producenduserlegalorgid, $producenduserlegalorgtype, $producenduserlegalorgname);
+        $this->assertEquals("", $producenduserlegalorgid);
+        $this->assertEquals("", $producenduserlegalorgtype);
+        $this->assertEquals("", $producenduserlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentProductEndUserContactContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentProductEndUserContactContact
+     */
+    public function testDocumentProductEndUserContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentProductEndUserContactContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentProductEndUserContact($producendusercontactpersonname, $producendusercontactdepartmentname, $producendusercontactphoneno, $producendusercontactfaxno, $producendusercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentProductEndUserContactContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerOrderReferencedDocument
+     */
+    public function testDocumentSellerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentSellerOrderReferencedDocument($sellerorderrefdocid, $sellerorderrefdocdate);
+        $this->assertEquals("", $sellerorderrefdocid);
+        $this->assertNull($sellerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerOrderReferencedDocument
+     */
+    public function testDocumentBuyerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentBuyerOrderReferencedDocument($buyerorderrefdocid, $buyerorderrefdocdate);
+        $this->assertEquals("", $buyerorderrefdocid);
+        $this->assertNull($buyerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentContractReferencedDocument
+     */
+    public function testDocumentContractReferencedDocument(): void
+    {
+        self::$document->getDocumentContractReferencedDocument($contractrefdocid, $contractrefdocdate);
+        $this->assertEquals("", $contractrefdocid);
+        $this->assertNull($contractrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocuments
+     */
+    public function testDocumentAdditionalReferencedDocuments(): void
+    {
+        self::$document->getDocumentAdditionalReferencedDocuments($additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs);
+        $this->assertEmpty($additionalrefdocs);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProcuringProject
+     */
+    public function testDocumentProcuringProject(): void
+    {
+        self::$document->getDocumentProcuringProject($projectid, $projectname);
+        $this->assertEquals("", $projectid);
+        $this->assertEquals("", $projectname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSupplyChainEvent
+     */
+    public function testDocumentSupplyChainEvent(): void
+    {
+        self::$document->getDocumentSupplyChainEvent($supplychainevent);
+        $this->assertNotNull($supplychainevent);
+        $this->assertInstanceOf("DateTime", $supplychainevent);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180305'))->format('Ymd'), $supplychainevent->format('Ymd'));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDespatchAdviceReferencedDocument
+     */
+    public function testDocumentDespatchAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentDespatchAdviceReferencedDocument($despatchdocid, $despatchdocdate);
+        $this->assertEquals("", $despatchdocid);
+        $this->assertNull($despatchdocdate);
+        $this->assertNotInstanceOf("DateTime", $despatchdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentReceivingAdviceReferencedDocument
+     */
+    public function testDocumentReceivingAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentReceivingAdviceReferencedDocument($recadvid, $recadvdate);
+        $this->assertEquals("", $recadvid);
+        $this->assertNull($recadvdate);
+        $this->assertNotInstanceOf("DateTime", $recadvdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryNoteReferencedDocument
+     */
+    public function testDocumentDeliveryNoteReferencedDocument(): void
+    {
+        self::$document->getDocumentDeliveryNoteReferencedDocument($deliverynoterefdocid, $deliverynoterefdocdate);
+        $this->assertEquals("", $deliverynoterefdocid);
+        $this->assertNull($deliverynoterefdocdate);
+        $this->assertNotInstanceOf("DateTime", $deliverynoterefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBillingPeriod
+     */
+    public function testDocumentBillingPeriod(): void
+    {
+        self::$document->getDocumentBillingPeriod($docbillingperiodstart, $docbillingperiodend);
+        $this->assertNull($docbillingperiodstart);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodstart);
+        $this->assertNull($docbillingperiodend);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodend);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharges
+     */
+    public function testDocumentAllowanceCharges(): void
+    {
+        self::$document->getDocumentAllowanceCharges($docallowancecharge);
+        $this->assertIsArray($docallowancecharge);
+        $this->assertEmpty($docallowancecharge);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerms
+     */
+    public function testDocumentPaymentTerms(): void
+    {
+        self::$document->getDocumentPaymentTerms($docpaymentterms);
+        $this->assertIsArray($docpaymentterms);
+        $this->assertNotEmpty($docpaymentterms);
+        $this->assertArrayHasKey(0, $docpaymentterms);
+        $this->assertIsArray($docpaymentterms[0]);
+        $this->assertArrayHasKey("description", $docpaymentterms[0]);
+        $this->assertArrayHasKey("duedate", $docpaymentterms[0]);
+        $this->assertArrayHasKey("directdebitmandateid", $docpaymentterms[0]);
+        $this->assertArrayHasKey("partialpaymentamount", $docpaymentterms[0]);
+        $this->assertEquals("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018", $docpaymentterms[0]["description"]);
+        $this->assertNull($docpaymentterms[0]["duedate"]);
+        $this->assertNotInstanceOf("DateTime", $docpaymentterms[0]["duedate"]);
+        $this->assertEquals("", $docpaymentterms[0]["directdebitmandateid"]);
+        $this->assertEquals(0.0, $docpaymentterms[0]["partialpaymentamount"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryTerms
+     */
+    public function testDocumentDeliveryTerms(): void
+    {
+        self::$document->getDocumentDeliveryTerms($devtermcode);
+        $this->assertEquals("", $devtermcode);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument
+     */
+    public function testDocumentAdditionalReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentAdditionalReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testDocumentUltimateCustomerOrderReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateCustomerOrderReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentUltimateCustomerOrderReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentPaymentMeansLoop(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentMeans
+     */
+    public function testGetDocumentPaymentMeans(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        self::$document->getDocumentPaymentMeans($typeCode, $information, $cardType, $cardId, $cardHolderName, $buyerIban, $payeeIban, $payeeAccountName, $payeePropId, $payeeBic);
+        $this->assertEquals("58", $typeCode);
+        $this->assertEquals("Zahlung per SEPA Ãberweisung.", $information);
+        $this->assertEquals("", $cardType);
+        $this->assertEquals("", $cardId);
+        $this->assertEquals("", $cardHolderName);
+        $this->assertEquals("", $buyerIban);
+        $this->assertEquals("DE02120300000000202051", $payeeIban);
+        $this->assertEquals("Kunden AG", $payeeAccountName);
+        $this->assertEquals("", $payeePropId);
+        $this->assertEquals("BYLADEM1001", $payeeBic);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     */
+    public function testDocumentTaxLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        $this->assertTrue(self::$document->nextDocumentTax());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentTax
+     */
+    public function testDocumentTax(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(275.0, $basisAmount);
+        $this->assertEquals(19.25, $calculatedAmount);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+
+        $this->assertTrue(self::$document->nextDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(198.0, $basisAmount);
+        $this->assertEquals(37.62, $calculatedAmount);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentAllowanceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentLogisticsServiceCharge
+     */
+    public function testtDocumentLogisticsServiceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentLogisticsServiceCharge());
+        $this->assertFalse(self::$document->nextDocumentLogisticsServiceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDiscountTermsFromPaymentTerm
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        self::$document->getDocumentPaymentTerm($termdescription, $termduedate, $termmandate);
+        self::$document->getDiscountTermsFromPaymentTerm($dispercent, $discbasedatetime, $discmeasureval, $discmeasureunit, $discbaseamount, $discamount);
+
+        $this->assertEquals("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018", $termdescription);
+        $this->assertNull($termduedate);
+        $this->assertEquals("", $termmandate);
+        $this->assertEquals(0, $dispercent);
+        $this->assertNull($discbasedatetime);
+        $this->assertEquals(0, $discmeasureval);
+        $this->assertEquals("", $discmeasureunit);
+        $this->assertEquals(0, $discbaseamount);
+        $this->assertEquals(0, $discamount);
+
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     */
+    public function testDocumentPositionLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition(), "has a first position");
+        $this->assertTrue(self::$document->nextDocumentPosition(), "has a second position");
+        $this->assertFalse(self::$document->nextDocumentPosition(), "has no third position");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFirst(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("1", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("TrennblÃ€tter A4", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("TB100A4", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4012345001235", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(9.90, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(9.90, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(20.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(198.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionSecond(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("2", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Joghurt Banane", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("ARNR2", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4000050986428", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(5.50, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(5.50, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(50.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(275.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAdditionalReferencedDocument
+     */
+    public function testDocumentPositionAdditionalReferencedDocument(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPositionAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentPositionAdditionalReferencedDocument());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ProfileResolverTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ProfileResolverTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ProfileResolverTest.php	(revision 8435)
@@ -0,0 +1,233 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\ZugferdProfileResolver;
+use horstoeko\zugferd\exception\ZugferdUnknownProfileIdException;
+
+class ProfileResolverTest extends TestCase
+{
+    /**
+     * Internal helper - returns the EN16931 Header
+     *
+     * @return string
+     */
+    private function deliverEn16931Header(): string
+    {
+        return <<<HDR
+<?xml version="1.0" encoding="UTF-8"?>
+<rsm:CrossIndustryInvoice xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:10" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<rsm:ExchangedDocumentContext>
+<ram:GuidelineSpecifiedDocumentContextParameter>
+<ram:ID>urn:cen.eu:en16931:2017</ram:ID>
+</ram:GuidelineSpecifiedDocumentContextParameter>
+</rsm:ExchangedDocumentContext>
+</rsm:CrossIndustryInvoice>
+HDR;
+    }
+
+    /**
+     * Internal helper - returns unknown profile
+     *
+     * @return string
+     */
+    private function deliverUnknownProfile(): string
+    {
+        return <<<HDR
+<?xml version="1.0" encoding="UTF-8"?>
+<rsm:CrossIndustryInvoice xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:10" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<rsm:ExchangedDocumentContext>
+<ram:GuidelineSpecifiedDocumentContextParameter>
+<ram:ID>unknown</ram:ID>
+</ram:GuidelineSpecifiedDocumentContextParameter>
+</rsm:ExchangedDocumentContext>
+</rsm:CrossIndustryInvoice>
+HDR;
+    }
+
+    /**
+     * Internal helper - returns unknown profile
+     *
+     * @return string
+     */
+    private function deliverInvalidXml(): string
+    {
+        return <<<HDR
+<?xml version="1.0" encoding="UTF-8"?>
+<rsm:CrossIndustryInvoice xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:10" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+</rsm:CrossIndustryInvoice>
+HDR;
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdProfileResolver::resolve
+     */
+    public function testResolveEn16931()
+    {
+        $resolved = ZugferdProfileResolver::resolve($this->deliverEn16931Header());
+
+        $this->assertIsArray($resolved);
+        $this->assertArrayHasKey(0, $resolved);
+        $this->assertArrayHasKey(1, $resolved);
+        $this->assertIsInt($resolved[0]);
+        $this->assertIsArray($resolved[1]);
+        $this->assertArrayHasKey("name", $resolved[1]);
+        $this->assertArrayHasKey("altname", $resolved[1]);
+        $this->assertArrayHasKey("description", $resolved[1]);
+        $this->assertArrayHasKey("contextparameter", $resolved[1]);
+        $this->assertArrayHasKey("businessprocess", $resolved[1]);
+        $this->assertArrayHasKey("attachmentfilename", $resolved[1]);
+        $this->assertArrayHasKey("xmpname", $resolved[1]);
+        $this->assertArrayHasKey("xsdfilename", $resolved[1]);
+        $this->assertArrayHasKey("schematronfilename", $resolved[1]);
+
+        $this->assertEquals(ZugferdProfiles::PROFILE_EN16931, $resolved[0]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['name'], $resolved[1]["name"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['altname'], $resolved[1]["altname"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['description'], $resolved[1]["description"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['contextparameter'], $resolved[1]["contextparameter"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['businessprocess'], $resolved[1]["businessprocess"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['attachmentfilename'], $resolved[1]["attachmentfilename"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['xmpname'], $resolved[1]["xmpname"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['xsdfilename'], $resolved[1]["xsdfilename"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['schematronfilename'], $resolved[1]["schematronfilename"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdProfileResolver::resolveProfileId
+     */
+    public function testResolveProfileIdEn16931()
+    {
+        $resolved = ZugferdProfileResolver::resolveProfileId($this->deliverEn16931Header());
+
+        $this->assertIsInt($resolved);
+        $this->assertEquals(ZugferdProfiles::PROFILE_EN16931, $resolved);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdProfileResolver::resolveProfileDef
+     */
+    public function testResolveProfileDefEn16931()
+    {
+        $resolved = ZugferdProfileResolver::resolveProfileDef($this->deliverEn16931Header());
+
+        $this->assertIsArray($resolved);
+        $this->assertArrayHasKey("name", $resolved);
+        $this->assertArrayHasKey("altname", $resolved);
+        $this->assertArrayHasKey("description", $resolved);
+        $this->assertArrayHasKey("contextparameter", $resolved);
+        $this->assertArrayHasKey("businessprocess", $resolved);
+        $this->assertArrayHasKey("attachmentfilename", $resolved);
+        $this->assertArrayHasKey("xmpname", $resolved);
+        $this->assertArrayHasKey("xsdfilename", $resolved);
+        $this->assertArrayHasKey("schematronfilename", $resolved);
+
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['name'], $resolved["name"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['altname'], $resolved["altname"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['description'], $resolved["description"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['contextparameter'], $resolved["contextparameter"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['businessprocess'], $resolved["businessprocess"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['attachmentfilename'], $resolved["attachmentfilename"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['xmpname'], $resolved["xmpname"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['xsdfilename'], $resolved["xsdfilename"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['schematronfilename'], $resolved["schematronfilename"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdProfileResolver::resolve
+     */
+    public function testResolveUnknownProfile()
+    {
+        $this->expectException(\Exception::class);
+        $this->expectExceptionMessage('A context parameter was found, but the content of "unknown" is not a valid profile');
+
+        ZugferdProfileResolver::resolveProfileId($this->deliverUnknownProfile());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdProfileResolver::resolve
+     */
+    public function testResolveInvalidXml()
+    {
+        $this->expectException(\Exception::class);
+        $this->expectExceptionMessage('The XML does not match the requirements for an XML in CII-Syntax');
+
+        ZugferdProfileResolver::resolveProfileId($this->deliverInvalidXml());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdProfileResolver::resolveById
+     */
+    public function testResolveProfileByIdEn16931()
+    {
+        $resolved = ZugferdProfileResolver::resolveById(ZugferdProfiles::PROFILE_EN16931);
+
+        $this->assertIsArray($resolved);
+        $this->assertArrayHasKey(0, $resolved);
+        $this->assertArrayHasKey(1, $resolved);
+        $this->assertIsInt($resolved[0]);
+        $this->assertIsArray($resolved[1]);
+        $this->assertArrayHasKey("name", $resolved[1]);
+        $this->assertArrayHasKey("altname", $resolved[1]);
+        $this->assertArrayHasKey("description", $resolved[1]);
+        $this->assertArrayHasKey("contextparameter", $resolved[1]);
+        $this->assertArrayHasKey("businessprocess", $resolved[1]);
+        $this->assertArrayHasKey("attachmentfilename", $resolved[1]);
+        $this->assertArrayHasKey("xmpname", $resolved[1]);
+        $this->assertArrayHasKey("xsdfilename", $resolved[1]);
+        $this->assertArrayHasKey("schematronfilename", $resolved[1]);
+
+        $this->assertEquals(ZugferdProfiles::PROFILE_EN16931, $resolved[0]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['name'], $resolved[1]["name"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['altname'], $resolved[1]["altname"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['description'], $resolved[1]["description"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['contextparameter'], $resolved[1]["contextparameter"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['businessprocess'], $resolved[1]["businessprocess"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['attachmentfilename'], $resolved[1]["attachmentfilename"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['xmpname'], $resolved[1]["xmpname"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['xsdfilename'], $resolved[1]["xsdfilename"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['schematronfilename'], $resolved[1]["schematronfilename"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdProfileResolver::resolveProfileDefById
+     */
+    public function testResolveProfileDefByIdEn16931()
+    {
+        $resolved = ZugferdProfileResolver::resolveProfileDefById(ZugferdProfiles::PROFILE_EN16931);
+
+        $this->assertIsArray($resolved);
+        $this->assertArrayHasKey("name", $resolved);
+        $this->assertArrayHasKey("altname", $resolved);
+        $this->assertArrayHasKey("description", $resolved);
+        $this->assertArrayHasKey("contextparameter", $resolved);
+        $this->assertArrayHasKey("businessprocess", $resolved);
+        $this->assertArrayHasKey("attachmentfilename", $resolved);
+        $this->assertArrayHasKey("xmpname", $resolved);
+        $this->assertArrayHasKey("xsdfilename", $resolved);
+        $this->assertArrayHasKey("schematronfilename", $resolved);
+
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['name'], $resolved["name"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['altname'], $resolved["altname"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['description'], $resolved["description"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['contextparameter'], $resolved["contextparameter"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['businessprocess'], $resolved["businessprocess"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['attachmentfilename'], $resolved["attachmentfilename"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['xmpname'], $resolved["xmpname"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['xsdfilename'], $resolved["xsdfilename"]);
+        $this->assertEquals(ZugferdProfiles::PROFILEDEF[ZugferdProfiles::PROFILE_EN16931]['schematronfilename'], $resolved["schematronfilename"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdProfileResolver::resolveProfileDefById
+     */
+    public function testResolveProfileDefByIdUnknown()
+    {
+        $this->expectException(ZugferdUnknownProfileIdException::class);
+        $this->expectExceptionMessage('The profile id -1 is uknown');
+
+        ZugferdProfileResolver::resolveProfileDefById(-1);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderBasicSimpleTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderBasicSimpleTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderBasicSimpleTest.php	(revision 8435)
@@ -0,0 +1,1354 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+
+class ReaderBasicSimpleTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/basic_simple.xml");
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getInvoiceObject
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getSerializer
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getObjectHelper
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getProfileDefinitionParameter
+     */
+    public function testDocumentGetters(): void
+    {
+        $this->assertNotNull(self::$document->getInvoiceObject());
+        $this->assertNotNull(self::$document->getSerializer());
+        $this->assertNotNull(self::$document->getObjectHelper());
+        $this->assertEquals('basic', self::$document->getProfileDefinitionParameter('name'));
+        $this->assertEquals('BASIC', self::$document->getProfileDefinitionParameter('altname'));
+        $this->assertEquals('urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:basic', self::$document->getProfileDefinitionParameter('contextparameter'));
+        $this->assertEquals('factur-x.xml', self::$document->getProfileDefinitionParameter('attachmentfilename'));
+        $this->assertEquals('BASIC', self::$document->getProfileDefinitionParameter('xmpname'));
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getProfileDefinitionParameter('unknownparameter');
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('471102', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20200305'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentNotes
+     */
+    public function testDocumentNotes(): void
+    {
+        self::$document->getDocumentNotes($notes);
+        $this->assertIsArray($notes);
+        $this->assertNotEmpty($notes);
+        $this->assertEquals(3, count($notes));
+        $this->assertArrayHasKey(0, $notes);
+        $this->assertArrayHasKey(1, $notes);
+        $this->assertIsArray($notes[0]);
+        $this->assertNotEmpty($notes[0]);
+        $this->assertArrayHasKey("content", $notes[0]);
+        $this->assertArrayHasKey("subjectcode", $notes[0]);
+        $this->assertArrayHasKey("contentcode", $notes[0]);
+        $this->assertIsArray($notes[1]);
+        $this->assertNotEmpty($notes[1]);
+        $this->assertArrayHasKey("content", $notes[1]);
+        $this->assertArrayHasKey("subjectcode", $notes[1]);
+        $this->assertArrayHasKey("contentcode", $notes[1]);
+        $this->assertEquals("", $notes[0]["contentcode"]);
+        $this->assertEquals("", $notes[0]["subjectcode"]);
+        $this->assertEquals("Rechnung gemÃ€Ã Bestellung vom 01.03.2020.", $notes[0]["content"]);
+        $this->assertEquals("", $notes[1]["contentcode"]);
+        $this->assertEquals("", $notes[1]["subjectcode"]);
+        $this->assertStringContainsString("Lieferant GmbH", $notes[1]["content"]);
+        $this->assertStringContainsString("LieferantenstraÃe 20", $notes[1]["content"]);
+        $this->assertStringContainsString("80333 MÃŒnchen", $notes[1]["content"]);
+        $this->assertStringContainsString("Deutschland", $notes[1]["content"]);
+        $this->assertStringContainsString("GeschÃ€ftsfÃŒhrer: Hans Muster", $notes[1]["content"]);
+        $this->assertStringContainsString("Handelsregisternummer: H A 123", $notes[1]["content"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("", $creditorReferenceID);
+        $this->assertEquals("", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsDocumentCopy
+     */
+    public function testDocumentIsCopy(): void
+    {
+        self::$document->getIsDocumentCopy($iscopy);
+        $this->assertFalse($iscopy);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsTestDocument
+     */
+    public function testDocumentIsTestDocument(): void
+    {
+        self::$document->getIsTestDocument($istest);
+        $this->assertFalse($istest);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSummation
+     */
+    public function testDocumentSummation(): void
+    {
+        self::$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+        $this->assertEquals(235.62, $grandTotalAmount);
+        $this->assertEquals(235.62, $duePayableAmount);
+        $this->assertEquals(198.0, $lineTotalAmount);
+        $this->assertEquals(0.00, $chargeTotalAmount);
+        $this->assertEquals(0.00, $allowanceTotalAmount);
+        $this->assertEquals(198.0, $taxBasisTotalAmount);
+        $this->assertEquals(37.62, $taxTotalAmount);
+        $this->assertEquals(0.00, $roundingAmount);
+        $this->assertEquals(0.00, $totalPrepaidAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerReference
+     */
+    public function testGetDocumentBuyerReference(): void
+    {
+        self::$document->getDocumentBuyerReference($buyerReference);
+        $this->assertEquals("", $buyerReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSeller
+     */
+    public function testDocumentSellerGeneral(): void
+    {
+        self::$document->getDocumentSeller($sellername, $sellerids, $sellerdescription);
+        $this->assertEquals("Lieferant GmbH", $sellername);
+        $this->assertIsArray($sellerids);
+        $this->assertArrayNotHasKey(0, $sellerids);
+        $this->assertArrayNotHasKey(1, $sellerids);
+        $this->assertEquals("", $sellerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerGlobalId
+     */
+    public function testDocumentSellerGlobalId(): void
+    {
+        self::$document->getDocumentSellerGlobalId($sellerglobalids);
+        $this->assertIsArray($sellerglobalids);
+        $this->assertArrayNotHasKey("0088", $sellerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRegistration
+     */
+    public function testDocumentSellerTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRegistration($sellertaxreg);
+        $this->assertIsArray($sellertaxreg);
+        $this->assertArrayHasKey("VA", $sellertaxreg);
+        $this->assertArrayHasKey("FC", $sellertaxreg);
+        $this->assertArrayNotHasKey(0, $sellertaxreg);
+        $this->assertArrayNotHasKey(1, $sellertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $sellertaxreg);
+        $this->assertEquals("201/113/40209", $sellertaxreg["FC"]);
+        $this->assertEquals("DE123456789", $sellertaxreg["VA"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerAddress
+     */
+    public function testDocumentSellerAddress(): void
+    {
+        self::$document->getDocumentSellerAddress($sellerlineone, $sellerlinetwo, $sellerlinethree, $sellerpostcode, $sellercity, $sellercountry, $sellersubdivision);
+        $this->assertEquals("LieferantenstraÃe 20", $sellerlineone);
+        $this->assertEquals("", $sellerlinetwo);
+        $this->assertEquals("", $sellerlinethree);
+        $this->assertEquals("80333", $sellerpostcode);
+        $this->assertEquals("MÃŒnchen", $sellercity);
+        $this->assertEquals("DE", $sellercountry);
+        $this->assertIsArray($sellersubdivision);
+        $this->assertEmpty($sellersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerLegalOrganisation
+     */
+    public function testDocumentSellerLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerLegalOrganisation($sellerlegalorgid, $sellerlegalorgtype, $sellerlegalorgname);
+        $this->assertEquals("", $sellerlegalorgid);
+        $this->assertEquals("", $sellerlegalorgtype);
+        $this->assertEquals("", $sellerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerContact
+     */
+    public function testDocumentSellerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerContact());
+        $this->assertFalse(self::$document->nextDocumentSellerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerContact($sellercontactpersonname, $sellercontactdepartmentname, $sellercontactphoneno, $sellercontactfaxno, $sellercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyer
+     */
+    public function testDocumentBuyerGeneral(): void
+    {
+        self::$document->getDocumentBuyer($buyername, $buyerids, $buyerdescription);
+        $this->assertEquals("Kunden AG Mitte", $buyername);
+        $this->assertIsArray($buyerids);
+        $this->assertArrayNotHasKey(0, $buyerids);
+        $this->assertArrayNotHasKey(1, $buyerids);
+        $this->assertEquals("", $buyerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerGlobalId
+     */
+    public function testDocumentBuyerGlobalId(): void
+    {
+        self::$document->getDocumentBuyerGlobalId($buyerglobalids);
+        $this->assertIsArray($buyerglobalids);
+        $this->assertEmpty($buyerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerTaxRegistration
+     */
+    public function testDocumentBuyerTaxRegistration(): void
+    {
+        self::$document->getDocumentBuyerTaxRegistration($buyertaxreg);
+        $this->assertIsArray($buyertaxreg);
+        $this->assertEmpty($buyertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerAddress
+     */
+    public function testDocumentBuyerAddress(): void
+    {
+        self::$document->getDocumentBuyerAddress($buyerlineone, $buyerlinetwo, $buyerlinethree, $buyerpostcode, $buyercity, $buyercountry, $buyersubdivision);
+        $this->assertEquals("Hans Muster", $buyerlineone);
+        $this->assertEquals("KundenstraÃe 15", $buyerlinetwo);
+        $this->assertEquals("", $buyerlinethree);
+        $this->assertEquals("69876", $buyerpostcode);
+        $this->assertEquals("Frankfurt", $buyercity);
+        $this->assertEquals("DE", $buyercountry);
+        $this->assertIsArray($buyersubdivision);
+        $this->assertEmpty($buyersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerLegalOrganisation
+     */
+    public function testDocumentBuyerLegalOrganization(): void
+    {
+        self::$document->getDocumentBuyerLegalOrganisation($buyerlegalorgid, $buyerlegalorgtype, $buyerlegalorgname);
+        $this->assertEquals("", $buyerlegalorgid);
+        $this->assertEquals("", $buyerlegalorgtype);
+        $this->assertEquals("", $buyerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentBuyerContact
+     */
+    public function testDocumentBuyerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentBuyerContact());
+        $this->assertFalse(self::$document->nextDocumentBuyerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentBuyerContact($buyercontactpersonname, $buyercontactdepartmentname, $buyercontactphoneno, $buyercontactfaxno, $buyercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentative
+     */
+    public function testDocumentSellerTaxRepresentativeGeneral(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentative($sellertaxreprname, $sellertaxreprids, $sellertaxreprdescription);
+        $this->assertEquals("", $sellertaxreprname);
+        $this->assertIsArray($sellertaxreprids);
+        $this->assertEmpty($sellertaxreprids);
+        $this->assertEquals("", $sellertaxreprdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeGlobalId($sellertaxreprglobalids);
+        $this->assertIsArray($sellertaxreprglobalids);
+        $this->assertEmpty($sellertaxreprglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeTaxRegistration($sellertaxreprtaxreg);
+        $this->assertIsArray($sellertaxreprtaxreg);
+        $this->assertEmpty($sellertaxreprtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeAddress
+     */
+    public function testDocumentSellerTaxRepresentativeAddress(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeAddress($sellertaxreprlineone, $sellertaxreprlinetwo, $sellertaxreprlinethree, $sellertaxreprpostcode, $sellertaxreprcity, $sellertaxreprcountry, $sellertaxreprsubdivision);
+        $this->assertEquals("", $sellertaxreprlineone);
+        $this->assertEquals("", $sellertaxreprlinetwo);
+        $this->assertEquals("", $sellertaxreprlinethree);
+        $this->assertEquals("", $sellertaxreprpostcode);
+        $this->assertEquals("", $sellertaxreprcity);
+        $this->assertEquals("", $sellertaxreprcountry);
+        $this->assertIsArray($sellertaxreprsubdivision);
+        $this->assertEmpty($sellertaxreprsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testDocumentSellerTaxRepresentativeLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeLegalOrganisation($sellertaxreprlegalorgid, $sellertaxreprlegalorgtype, $sellertaxreprlegalorgname);
+        $this->assertEquals("", $sellertaxreprlegalorgid);
+        $this->assertEquals("", $sellertaxreprlegalorgtype);
+        $this->assertEquals("", $sellertaxreprlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerTaxRepresentativeContact
+     */
+    public function testDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerTaxRepresentativeContact());
+        $this->assertFalse(self::$document->nextDocumentSellerTaxRepresentativeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerTaxRepresentativeContact($sellertaxreprcontactpersonname, $sellertaxreprcontactdepartmentname, $sellertaxreprcontactphoneno, $sellertaxreprcontactfaxno, $sellertaxreprcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipTo
+     */
+    public function testDocumentShipToGeneral(): void
+    {
+        self::$document->getDocumentShipTo($shiptoname, $shiptoids, $shiptodescription);
+        $this->assertEquals("", $shiptoname);
+        $this->assertIsArray($shiptoids);
+        $this->assertEmpty($shiptoids);
+        $this->assertEquals("", $shiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToGlobalId
+     */
+    public function testDocumentShipToGlobalId(): void
+    {
+        self::$document->getDocumentShipToGlobalId($shiptoglobalids);
+        $this->assertIsArray($shiptoglobalids);
+        $this->assertEmpty($shiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToTaxRegistration
+     */
+    public function testDocumentShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentShipToTaxRegistration($shiptotaxreg);
+        $this->assertIsArray($shiptotaxreg);
+        $this->assertEmpty($shiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToAddress
+     */
+    public function testDocumentShipToAddress(): void
+    {
+        self::$document->getDocumentShipToAddress($shiptolineone, $shiptolinetwo, $shiptolinethree, $shiptopostcode, $shiptocity, $shiptocountry, $shiptosubdivision);
+        $this->assertEquals("", $shiptolineone);
+        $this->assertEquals("", $shiptolinetwo);
+        $this->assertEquals("", $shiptolinethree);
+        $this->assertEquals("", $shiptopostcode);
+        $this->assertEquals("", $shiptocity);
+        $this->assertEquals("", $shiptocountry);
+        $this->assertIsArray($shiptosubdivision);
+        $this->assertEmpty($shiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToLegalOrganisation
+     */
+    public function testDocumentShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentShipToLegalOrganisation($shiptolegalorgid, $shiptolegalorgtype, $shiptolegalorgname);
+        $this->assertEquals("", $shiptolegalorgid);
+        $this->assertEquals("", $shiptolegalorgtype);
+        $this->assertEquals("", $shiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipToContact
+     */
+    public function testDocumentShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipToContact());
+        $this->assertFalse(self::$document->nextDocumentShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipToContact($shiptocontactpersonname, $shiptocontactdepartmentname, $shiptocontactphoneno, $shiptocontactfaxno, $shiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipTo
+     */
+    public function testDocumentUltimateShipToGeneral(): void
+    {
+        self::$document->getDocumentUltimateShipTo($ultimateshiptoname, $ultimateshiptoids, $ultimateshiptodescription);
+        $this->assertEquals("", $ultimateshiptoname);
+        $this->assertIsArray($ultimateshiptoids);
+        $this->assertEmpty($ultimateshiptoids);
+        $this->assertEquals("", $ultimateshiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToGlobalId
+     */
+    public function testDocumentUltimateShipToGlobalId(): void
+    {
+        self::$document->getDocumentUltimateShipToGlobalId($ultimateshiptoglobalids);
+        $this->assertIsArray($ultimateshiptoglobalids);
+        $this->assertEmpty($ultimateshiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToTaxRegistration
+     */
+    public function testDocumentUltimateShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentUltimateShipToTaxRegistration($ultimateshiptotaxreg);
+        $this->assertIsArray($ultimateshiptotaxreg);
+        $this->assertEmpty($ultimateshiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToAddress
+     */
+    public function testDocumentUltimateShipToAddress(): void
+    {
+        self::$document->getDocumentUltimateShipToAddress($ultimateshiptolineone, $ultimateshiptolinetwo, $ultimateshiptolinethree, $ultimateshiptopostcode, $ultimateshiptocity, $ultimateshiptocountry, $ultimateshiptosubdivision);
+        $this->assertEquals("", $ultimateshiptolineone);
+        $this->assertEquals("", $ultimateshiptolinetwo);
+        $this->assertEquals("", $ultimateshiptolinethree);
+        $this->assertEquals("", $ultimateshiptopostcode);
+        $this->assertEquals("", $ultimateshiptocity);
+        $this->assertEquals("", $ultimateshiptocountry);
+        $this->assertIsArray($ultimateshiptosubdivision);
+        $this->assertEmpty($ultimateshiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToLegalOrganisation
+     */
+    public function testDocumentUltimateShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentUltimateShipToLegalOrganisation($ultimateshiptolegalorgid, $ultimateshiptolegalorgtype, $ultimateshiptolegalorgname);
+        $this->assertEquals("", $ultimateshiptolegalorgid);
+        $this->assertEquals("", $ultimateshiptolegalorgtype);
+        $this->assertEquals("", $ultimateshiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateShipToContact
+     */
+    public function testDocumentUltimateShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFrom
+     */
+    public function testDocumentShipFromGeneral(): void
+    {
+        self::$document->getDocumentShipFrom($shipfromname, $shipfromids, $shipfromdescription);
+        $this->assertEquals("", $shipfromname);
+        $this->assertIsArray($shipfromids);
+        $this->assertEmpty($shipfromids);
+        $this->assertEquals("", $shipfromdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromGlobalId
+     */
+    public function testDocumentShipFromGlobalId(): void
+    {
+        self::$document->getDocumentShipFromGlobalId($shipfromglobalids);
+        $this->assertIsArray($shipfromglobalids);
+        $this->assertEmpty($shipfromglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromTaxRegistration
+     */
+    public function testDocumentShipFromTaxRegistration(): void
+    {
+        self::$document->getDocumentShipFromTaxRegistration($shipfromtaxreg);
+        $this->assertIsArray($shipfromtaxreg);
+        $this->assertEmpty($shipfromtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromAddress
+     */
+    public function testDocumentShipFromAddress(): void
+    {
+        self::$document->getDocumentShipFromAddress($shipfromlineone, $shipfromlinetwo, $shipfromlinethree, $shipfrompostcode, $shipfromcity, $shipfromcountry, $shipfromsubdivision);
+        $this->assertEquals("", $shipfromlineone);
+        $this->assertEquals("", $shipfromlinetwo);
+        $this->assertEquals("", $shipfromlinethree);
+        $this->assertEquals("", $shipfrompostcode);
+        $this->assertEquals("", $shipfromcity);
+        $this->assertEquals("", $shipfromcountry);
+        $this->assertIsArray($shipfromsubdivision);
+        $this->assertEmpty($shipfromsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromLegalOrganisation
+     */
+    public function testDocumentShipFromLegalOrganization(): void
+    {
+        self::$document->getDocumentShipFromLegalOrganisation($shipfromlegalorgid, $shipfromlegalorgtype, $shipfromlegalorgname);
+        $this->assertEquals("", $shipfromlegalorgid);
+        $this->assertEquals("", $shipfromlegalorgtype);
+        $this->assertEquals("", $shipfromlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipFromContact
+     */
+    public function testDocumentShipFromContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicer
+     */
+    public function testDocumentInvoicerGeneral(): void
+    {
+        self::$document->getDocumentInvoicer($invoicername, $invoicerids, $invoicerdescription);
+        $this->assertEquals("", $invoicername);
+        $this->assertIsArray($invoicerids);
+        $this->assertEmpty($invoicerids);
+        $this->assertEquals("", $invoicerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerGlobalId
+     */
+    public function testDocumentInvoicerGlobalId(): void
+    {
+        self::$document->getDocumentInvoicerGlobalId($invoicerglobalids);
+        $this->assertIsArray($invoicerglobalids);
+        $this->assertEmpty($invoicerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerTaxRegistration
+     */
+    public function testDocumentInvoicerTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoicerTaxRegistration($invoicertaxreg);
+        $this->assertIsArray($invoicertaxreg);
+        $this->assertEmpty($invoicertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerAddress
+     */
+    public function testDocumentInvoicerAddress(): void
+    {
+        self::$document->getDocumentInvoicerAddress($invoicerlineone, $invoicerlinetwo, $invoicerlinethree, $invoicerpostcode, $invoicercity, $invoicercountry, $invoicersubdivision);
+        $this->assertEquals("", $invoicerlineone);
+        $this->assertEquals("", $invoicerlinetwo);
+        $this->assertEquals("", $invoicerlinethree);
+        $this->assertEquals("", $invoicerpostcode);
+        $this->assertEquals("", $invoicercity);
+        $this->assertEquals("", $invoicercountry);
+        $this->assertIsArray($invoicersubdivision);
+        $this->assertEmpty($invoicersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerLegalOrganisation
+     */
+    public function testDocumentInvoicerLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoicerLegalOrganisation($invoicerlegalorgid, $invoicerlegalorgtype, $invoicerlegalorgname);
+        $this->assertEquals("", $invoicerlegalorgid);
+        $this->assertEquals("", $invoicerlegalorgtype);
+        $this->assertEquals("", $invoicerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoicerContact
+     */
+    public function testDocumentInvoicerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicee
+     */
+    public function testDocumentInvoiceeGeneral(): void
+    {
+        self::$document->getDocumentInvoicee($invoiceename, $invoiceeids, $invoiceedescription);
+        $this->assertEquals("", $invoiceename);
+        $this->assertIsArray($invoiceeids);
+        $this->assertEmpty($invoiceeids);
+        $this->assertEquals("", $invoiceedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeGlobalId
+     */
+    public function testDocumentInvoiceeGlobalId(): void
+    {
+        self::$document->getDocumentInvoiceeGlobalId($invoiceeglobalids);
+        $this->assertIsArray($invoiceeglobalids);
+        $this->assertEmpty($invoiceeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeTaxRegistration
+     */
+    public function testDocumentInvoiceeTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoiceeTaxRegistration($invoiceetaxreg);
+        $this->assertIsArray($invoiceetaxreg);
+        $this->assertEmpty($invoiceetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeAddress
+     */
+    public function testDocumentInvoiceeAddress(): void
+    {
+        self::$document->getDocumentInvoiceeAddress($invoiceelineone, $invoiceelinetwo, $invoiceelinethree, $invoiceepostcode, $invoiceecity, $invoiceecountry, $invoiceesubdivision);
+        $this->assertEquals("", $invoiceelineone);
+        $this->assertEquals("", $invoiceelinetwo);
+        $this->assertEquals("", $invoiceelinethree);
+        $this->assertEquals("", $invoiceepostcode);
+        $this->assertEquals("", $invoiceecity);
+        $this->assertEquals("", $invoiceecountry);
+        $this->assertIsArray($invoiceesubdivision);
+        $this->assertEmpty($invoiceesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeLegalOrganisation
+     */
+    public function testDocumentInvoiceeLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoiceeLegalOrganisation($invoiceelegalorgid, $invoiceelegalorgtype, $invoiceelegalorgname);
+        $this->assertEquals("", $invoiceelegalorgid);
+        $this->assertEquals("", $invoiceelegalorgtype);
+        $this->assertEquals("", $invoiceelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoiceeContact
+     */
+    public function testDocumentInvoiceeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayee
+     */
+    public function testDocumentPayeeGeneral(): void
+    {
+        self::$document->getDocumentPayee($payeename, $payeeids, $payeedescription);
+        $this->assertEquals("", $payeename);
+        $this->assertIsArray($payeeids);
+        $this->assertEmpty($payeeids);
+        $this->assertEquals("", $payeedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeGlobalId
+     */
+    public function testDocumentPayeeGlobalId(): void
+    {
+        self::$document->getDocumentPayeeGlobalId($payeeglobalids);
+        $this->assertIsArray($payeeglobalids);
+        $this->assertEmpty($payeeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeTaxRegistration
+     */
+    public function testDocumentPayeeTaxRegistration(): void
+    {
+        self::$document->getDocumentPayeeTaxRegistration($payeetaxreg);
+        $this->assertIsArray($payeetaxreg);
+        $this->assertEmpty($payeetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeAddress
+     */
+    public function testDocumentPayeeAddress(): void
+    {
+        self::$document->getDocumentPayeeAddress($payeelineone, $payeelinetwo, $payeelinethree, $payeepostcode, $payeecity, $payeecountry, $payeesubdivision);
+        $this->assertEquals("", $payeelineone);
+        $this->assertEquals("", $payeelinetwo);
+        $this->assertEquals("", $payeelinethree);
+        $this->assertEquals("", $payeepostcode);
+        $this->assertEquals("", $payeecity);
+        $this->assertEquals("", $payeecountry);
+        $this->assertIsArray($payeesubdivision);
+        $this->assertEmpty($payeesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeLegalOrganisation
+     */
+    public function testDocumentPayeeLegalOrganization(): void
+    {
+        self::$document->getDocumentPayeeLegalOrganisation($payeelegalorgid, $payeelegalorgtype, $payeelegalorgname);
+        $this->assertEquals("", $payeelegalorgid);
+        $this->assertEquals("", $payeelegalorgtype);
+        $this->assertEquals("", $payeelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPayeeContact
+     */
+    public function testDocumentPayeeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUser
+     */
+    public function testDocumentProductEndUserGeneral(): void
+    {
+        self::$document->getDocumentProductEndUser($producendusername, $producenduserids, $producenduserdescription);
+        $this->assertEquals("", $producendusername);
+        $this->assertIsArray($producenduserids);
+        $this->assertArrayNotHasKey(0, $producenduserids);
+        $this->assertArrayNotHasKey(1, $producenduserids);
+        $this->assertEquals("", $producenduserdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserGlobalId
+     */
+    public function testDocumentProductEndUserGlobalId(): void
+    {
+        self::$document->getDocumentProductEndUserGlobalId($producenduserglobalids);
+        $this->assertIsArray($producenduserglobalids);
+        $this->assertArrayNotHasKey("0088", $producenduserglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserTaxRegistration
+     */
+    public function testDocumentProductEndUserTaxRegistration(): void
+    {
+        self::$document->getDocumentProductEndUserTaxRegistration($producendusertaxreg);
+        $this->assertIsArray($producendusertaxreg);
+        $this->assertArrayNotHasKey("VA", $producendusertaxreg);
+        $this->assertArrayNotHasKey("FC", $producendusertaxreg);
+        $this->assertArrayNotHasKey(0, $producendusertaxreg);
+        $this->assertArrayNotHasKey(1, $producendusertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $producendusertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserAddress
+     */
+    public function testDocumentProductEndUserAddress(): void
+    {
+        self::$document->getDocumentProductEndUserAddress($producenduserlineone, $producenduserlinetwo, $producenduserlinethree, $producenduserpostcode, $producendusercity, $producendusercountry, $producendusersubdivision);
+        $this->assertEquals("", $producenduserlineone);
+        $this->assertEquals("", $producenduserlinetwo);
+        $this->assertEquals("", $producenduserlinethree);
+        $this->assertEquals("", $producenduserpostcode);
+        $this->assertEquals("", $producendusercity);
+        $this->assertEquals("", $producendusercountry);
+        $this->assertIsArray($producendusersubdivision);
+        $this->assertEmpty($producendusersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserLegalOrganisation
+     */
+    public function testDocumentProductEndUserLegalOrganization(): void
+    {
+        self::$document->getDocumentProductEndUserLegalOrganisation($producenduserlegalorgid, $producenduserlegalorgtype, $producenduserlegalorgname);
+        $this->assertEquals("", $producenduserlegalorgid);
+        $this->assertEquals("", $producenduserlegalorgtype);
+        $this->assertEquals("", $producenduserlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentProductEndUserContactContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentProductEndUserContactContact
+     */
+    public function testDocumentProductEndUserContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentProductEndUserContactContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentProductEndUserContact($producendusercontactpersonname, $producendusercontactdepartmentname, $producendusercontactphoneno, $producendusercontactfaxno, $producendusercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentProductEndUserContactContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerOrderReferencedDocument
+     */
+    public function testDocumentSellerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentSellerOrderReferencedDocument($sellerorderrefdocid, $sellerorderrefdocdate);
+        $this->assertEquals("", $sellerorderrefdocid);
+        $this->assertNull($sellerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerOrderReferencedDocument
+     */
+    public function testDocumentBuyerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentBuyerOrderReferencedDocument($buyerorderrefdocid, $buyerorderrefdocdate);
+        $this->assertEquals("", $buyerorderrefdocid);
+        $this->assertNull($buyerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentContractReferencedDocument
+     */
+    public function testDocumentContractReferencedDocument(): void
+    {
+        self::$document->getDocumentContractReferencedDocument($contractrefdocid, $contractrefdocdate);
+        $this->assertEquals("", $contractrefdocid);
+        $this->assertNull($contractrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocuments
+     */
+    public function testDocumentAdditionalReferencedDocuments(): void
+    {
+        self::$document->getDocumentAdditionalReferencedDocuments($additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs);
+        $this->assertEmpty($additionalrefdocs);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProcuringProject
+     */
+    public function testDocumentProcuringProject(): void
+    {
+        self::$document->getDocumentProcuringProject($projectid, $projectname);
+        $this->assertEquals("", $projectid);
+        $this->assertEquals("", $projectname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSupplyChainEvent
+     */
+    public function testDocumentSupplyChainEvent(): void
+    {
+        self::$document->getDocumentSupplyChainEvent($supplychainevent);
+        $this->assertNotNull($supplychainevent);
+        $this->assertInstanceOf("DateTime", $supplychainevent);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20200305'))->format('Ymd'), $supplychainevent->format('Ymd'));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDespatchAdviceReferencedDocument
+     */
+    public function testDocumentDespatchAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentDespatchAdviceReferencedDocument($despatchdocid, $despatchdocdate);
+        $this->assertEquals("", $despatchdocid);
+        $this->assertNull($despatchdocdate);
+        $this->assertNotInstanceOf("DateTime", $despatchdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentReceivingAdviceReferencedDocument
+     */
+    public function testDocumentReceivingAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentReceivingAdviceReferencedDocument($recadvid, $recadvdate);
+        $this->assertEquals("", $recadvid);
+        $this->assertNull($recadvdate);
+        $this->assertNotInstanceOf("DateTime", $recadvdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryNoteReferencedDocument
+     */
+    public function testDocumentDeliveryNoteReferencedDocument(): void
+    {
+        self::$document->getDocumentDeliveryNoteReferencedDocument($deliverynoterefdocid, $deliverynoterefdocdate);
+        $this->assertEquals("", $deliverynoterefdocid);
+        $this->assertNull($deliverynoterefdocdate);
+        $this->assertNotInstanceOf("DateTime", $deliverynoterefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBillingPeriod
+     */
+    public function testDocumentBillingPeriod(): void
+    {
+        self::$document->getDocumentBillingPeriod($docbillingperiodstart, $docbillingperiodend);
+        $this->assertNull($docbillingperiodstart);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodstart);
+        $this->assertNull($docbillingperiodend);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodend);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharges
+     */
+    public function testDocumentAllowanceCharges(): void
+    {
+        self::$document->getDocumentAllowanceCharges($docallowancecharge);
+        $this->assertIsArray($docallowancecharge);
+        $this->assertEmpty($docallowancecharge);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerms
+     */
+    public function testDocumentPaymentTerms(): void
+    {
+        self::$document->getDocumentPaymentTerms($docpaymentterms);
+        $this->assertIsArray($docpaymentterms);
+        $this->assertNotEmpty($docpaymentterms);
+        $this->assertArrayHasKey(0, $docpaymentterms);
+        $this->assertIsArray($docpaymentterms[0]);
+        $this->assertArrayHasKey("description", $docpaymentterms[0]);
+        $this->assertArrayHasKey("duedate", $docpaymentterms[0]);
+        $this->assertArrayHasKey("directdebitmandateid", $docpaymentterms[0]);
+        $this->assertArrayHasKey("partialpaymentamount", $docpaymentterms[0]);
+        $this->assertEquals("", $docpaymentterms[0]["description"]);
+        $this->assertNotNull($docpaymentterms[0]["duedate"]);
+        $this->assertInstanceOf("DateTime", $docpaymentterms[0]["duedate"]);
+        $this->assertEquals("", $docpaymentterms[0]["directdebitmandateid"]);
+        $this->assertEquals(0.0, $docpaymentterms[0]["partialpaymentamount"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryTerms
+     */
+    public function testDocumentDeliveryTerms(): void
+    {
+        self::$document->getDocumentDeliveryTerms($devtermcode);
+        $this->assertEquals("", $devtermcode);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument
+     */
+    public function testDocumentAdditionalReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentAdditionalReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testDocumentUltimateCustomerOrderReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateCustomerOrderReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentUltimateCustomerOrderReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentPaymentMeansLoop(): void
+    {
+        $this->assertFalse(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentMeans
+     */
+    public function testGetDocumentPaymentMeans(): void
+    {
+        $this->assertFalse(self::$document->firstGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     */
+    public function testDocumentTaxLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        $this->assertFalse(self::$document->nextDocumentTax());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentTax
+     */
+    public function testDocumentTax(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(198.0, $basisAmount);
+        $this->assertEquals(37.62, $calculatedAmount);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentAllowanceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentLogisticsServiceCharge
+     */
+    public function testtDocumentLogisticsServiceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentLogisticsServiceCharge());
+        $this->assertFalse(self::$document->nextDocumentLogisticsServiceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDiscountTermsFromPaymentTerm
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        self::$document->getDocumentPaymentTerm($termdescription, $termduedate, $termmandate);
+        self::$document->getDiscountTermsFromPaymentTerm($dispercent, $discbasedatetime, $discmeasureval, $discmeasureunit, $discbaseamount, $discamount);
+
+        $this->assertEquals("", $termdescription);
+        $this->assertNotNull($termduedate);
+        $this->assertEquals("", $termmandate);
+        $this->assertEquals(0, $dispercent);
+        $this->assertNull($discbasedatetime);
+        $this->assertEquals(0, $discmeasureval);
+        $this->assertEquals("", $discmeasureunit);
+        $this->assertEquals(0, $discbaseamount);
+        $this->assertEquals(0, $discamount);
+
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     */
+    public function testDocumentPositionLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition(), "has a first position");
+        $this->assertFalse(self::$document->nextDocumentPosition(), "has no second position");
+        $this->assertFalse(self::$document->nextDocumentPosition(), "has no third position");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFirst(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("1", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("GTIN: 4012345001235, Unsere Art.-Nr.: TB100A4, TrennblÃ€tter A4", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4012345001235", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(9.90, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(20.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(198.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAdditionalReferencedDocument
+     */
+    public function testDocumentPositionAdditionalReferencedDocument(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPositionAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentPositionAdditionalReferencedDocument());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931AllowanceChargeTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931AllowanceChargeTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931AllowanceChargeTest.php	(revision 8435)
@@ -0,0 +1,1865 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+
+class ReaderEn16931AllowanceChargeTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/en16931_allowancecharge.xml");
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getInvoiceObject
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getSerializer
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getObjectHelper
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getProfileDefinitionParameter
+     */
+    public function testDocumentGetters(): void
+    {
+        $this->assertNotNull(self::$document->getInvoiceObject());
+        $this->assertNotNull(self::$document->getSerializer());
+        $this->assertNotNull(self::$document->getObjectHelper());
+        $this->assertEquals('en16931', self::$document->getProfileDefinitionParameter('name'));
+        $this->assertEquals('EN 16931 (COMFORT)', self::$document->getProfileDefinitionParameter('altname'));
+        $this->assertEquals('urn:cen.eu:en16931:2017', self::$document->getProfileDefinitionParameter('contextparameter'));
+        $this->assertEquals('factur-x.xml', self::$document->getProfileDefinitionParameter('attachmentfilename'));
+        $this->assertEquals('EN 16931', self::$document->getProfileDefinitionParameter('xmpname'));
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getProfileDefinitionParameter('unknownparameter');
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('471102', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180605'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentNotes
+     */
+    public function testDocumentNotes(): void
+    {
+        self::$document->getDocumentNotes($notes);
+        $this->assertIsArray($notes);
+        $this->assertNotEmpty($notes);
+        $this->assertEquals(3, count($notes));
+        $this->assertArrayHasKey(0, $notes);
+        $this->assertArrayHasKey(1, $notes);
+        $this->assertArrayHasKey(2, $notes);
+        $this->assertIsArray($notes[0]);
+        $this->assertNotEmpty($notes[0]);
+        $this->assertArrayHasKey("content", $notes[0]);
+        $this->assertArrayHasKey("subjectcode", $notes[0]);
+        $this->assertArrayHasKey("contentcode", $notes[0]);
+        $this->assertIsArray($notes[1]);
+        $this->assertNotEmpty($notes[1]);
+        $this->assertArrayHasKey("content", $notes[1]);
+        $this->assertArrayHasKey("subjectcode", $notes[1]);
+        $this->assertArrayHasKey("contentcode", $notes[1]);
+        $this->assertIsArray($notes[2]);
+        $this->assertNotEmpty($notes[2]);
+        $this->assertArrayHasKey("content", $notes[2]);
+        $this->assertArrayHasKey("subjectcode", $notes[2]);
+        $this->assertArrayHasKey("contentcode", $notes[2]);
+        $this->assertEquals("", $notes[0]["contentcode"]);
+        $this->assertEquals("", $notes[0]["subjectcode"]);
+        $this->assertStringContainsString("Rechnung gemÃ€Ã Bestellung Nr. 2018-471331 vom 01.03.2018.", $notes[0]["content"]);
+        $this->assertEquals("", $notes[1]["contentcode"]);
+        $this->assertEquals("AAK", $notes[1]["subjectcode"]);
+        $this->assertStringContainsString("Es bestehen Rabatt- und Bonusvereinbarungen.", $notes[1]["content"]);
+        $this->assertEquals("", $notes[2]["contentcode"]);
+        $this->assertEquals("REG", $notes[2]["subjectcode"]);
+        $this->assertStringContainsString("Lieferant GmbH", $notes[2]["content"]);
+        $this->assertStringContainsString("LieferantenstraÃe 20", $notes[2]["content"]);
+        $this->assertStringContainsString("80333 MÃŒnchen", $notes[2]["content"]);
+        $this->assertStringContainsString("Deutschland", $notes[2]["content"]);
+        $this->assertStringContainsString("GeschÃ€ftsfÃŒhrer: Hans Muster", $notes[2]["content"]);
+        $this->assertStringContainsString("Handelsregisternummer: H A 123", $notes[2]["content"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("", $creditorReferenceID);
+        $this->assertEquals("", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsDocumentCopy
+     */
+    public function testDocumentIsCopy(): void
+    {
+        self::$document->getIsDocumentCopy($iscopy);
+        $this->assertFalse($iscopy);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsTestDocument
+     */
+    public function testDocumentIsTestDocument(): void
+    {
+        self::$document->getIsTestDocument($istest);
+        $this->assertFalse($istest);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSummation
+     */
+    public function testDocumentSummation(): void
+    {
+        self::$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+        $this->assertEquals(215.07, $grandTotalAmount);
+        $this->assertEquals(165.07, $duePayableAmount);
+        $this->assertEquals(202.70, $lineTotalAmount);
+        $this->assertEquals(5.80, $chargeTotalAmount);
+        $this->assertEquals(14.73, $allowanceTotalAmount);
+        $this->assertEquals(193.77, $taxBasisTotalAmount);
+        $this->assertEquals(21.30, $taxTotalAmount);
+        $this->assertEquals(0.00, $roundingAmount);
+        $this->assertEquals(50.00, $totalPrepaidAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerReference
+     */
+    public function testGetDocumentBuyerReference(): void
+    {
+        self::$document->getDocumentBuyerReference($buyerReference);
+        $this->assertEquals("08154713", $buyerReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSeller
+     */
+    public function testDocumentSellerGeneral(): void
+    {
+        self::$document->getDocumentSeller($sellername, $sellerids, $sellerdescription);
+        $this->assertEquals("Lieferant GmbH", $sellername);
+        $this->assertIsArray($sellerids);
+        $this->assertArrayNotHasKey(0, $sellerids);
+        $this->assertArrayNotHasKey(1, $sellerids);
+        $this->assertEquals("", $sellerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerGlobalId
+     */
+    public function testDocumentSellerGlobalId(): void
+    {
+        self::$document->getDocumentSellerGlobalId($sellerglobalids);
+        $this->assertIsArray($sellerglobalids);
+        $this->assertArrayHasKey("0088", $sellerglobalids);
+        $this->assertEquals("4000001123452", $sellerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRegistration
+     */
+    public function testDocumentSellerTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRegistration($sellertaxreg);
+        $this->assertIsArray($sellertaxreg);
+        $this->assertArrayHasKey("VA", $sellertaxreg);
+        $this->assertArrayHasKey("FC", $sellertaxreg);
+        $this->assertArrayNotHasKey(0, $sellertaxreg);
+        $this->assertArrayNotHasKey(1, $sellertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $sellertaxreg);
+        $this->assertEquals("201/113/40209", $sellertaxreg["FC"]);
+        $this->assertEquals("DE123456789", $sellertaxreg["VA"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerAddress
+     */
+    public function testDocumentSellerAddress(): void
+    {
+        self::$document->getDocumentSellerAddress($sellerlineone, $sellerlinetwo, $sellerlinethree, $sellerpostcode, $sellercity, $sellercountry, $sellersubdivision);
+        $this->assertEquals("LieferantenstraÃe 20", $sellerlineone);
+        $this->assertEquals("", $sellerlinetwo);
+        $this->assertEquals("", $sellerlinethree);
+        $this->assertEquals("80333", $sellerpostcode);
+        $this->assertEquals("MÃŒnchen", $sellercity);
+        $this->assertEquals("DE", $sellercountry);
+        $this->assertIsArray($sellersubdivision);
+        $this->assertEmpty($sellersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerLegalOrganisation
+     */
+    public function testDocumentSellerLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerLegalOrganisation($sellerlegalorgid, $sellerlegalorgtype, $sellerlegalorgname);
+        $this->assertEquals("", $sellerlegalorgid);
+        $this->assertEquals("", $sellerlegalorgtype);
+        $this->assertEquals("", $sellerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerContact
+     */
+    public function testDocumentSellerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerContact());
+        $this->assertFalse(self::$document->nextDocumentSellerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerContact($sellercontactpersonname, $sellercontactdepartmentname, $sellercontactphoneno, $sellercontactfaxno, $sellercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyer
+     */
+    public function testDocumentBuyerGeneral(): void
+    {
+        self::$document->getDocumentBuyer($buyername, $buyerids, $buyerdescription);
+        $this->assertEquals("Kunden AG Mitte", $buyername);
+        $this->assertIsArray($buyerids);
+        $this->assertArrayHasKey(0, $buyerids);
+        $this->assertArrayNotHasKey(1, $buyerids);
+        $this->assertEquals("GE2020211", $buyerids[0]);
+        $this->assertEquals("", $buyerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerGlobalId
+     */
+    public function testDocumentBuyerGlobalId(): void
+    {
+        self::$document->getDocumentBuyerGlobalId($buyerglobalids);
+        $this->assertIsArray($buyerglobalids);
+        $this->assertEmpty($buyerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerTaxRegistration
+     */
+    public function testDocumentBuyerTaxRegistration(): void
+    {
+        self::$document->getDocumentBuyerTaxRegistration($buyertaxreg);
+        $this->assertIsArray($buyertaxreg);
+        $this->assertEmpty($buyertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerAddress
+     */
+    public function testDocumentBuyerAddress(): void
+    {
+        self::$document->getDocumentBuyerAddress($buyerlineone, $buyerlinetwo, $buyerlinethree, $buyerpostcode, $buyercity, $buyercountry, $buyersubdivision);
+        $this->assertEquals("KundenstraÃe 15", $buyerlineone);
+        $this->assertEquals("", $buyerlinetwo);
+        $this->assertEquals("", $buyerlinethree);
+        $this->assertEquals("69876", $buyerpostcode);
+        $this->assertEquals("Frankfurt", $buyercity);
+        $this->assertEquals("DE", $buyercountry);
+        $this->assertIsArray($buyersubdivision);
+        $this->assertEmpty($buyersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerLegalOrganisation
+     */
+    public function testDocumentBuyerLegalOrganization(): void
+    {
+        self::$document->getDocumentBuyerLegalOrganisation($buyerlegalorgid, $buyerlegalorgtype, $buyerlegalorgname);
+        $this->assertEquals("", $buyerlegalorgid);
+        $this->assertEquals("", $buyerlegalorgtype);
+        $this->assertEquals("", $buyerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentBuyerContact
+     */
+    public function testDocumentBuyerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentBuyerContact());
+        $this->assertFalse(self::$document->nextDocumentBuyerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentBuyerContact($buyercontactpersonname, $buyercontactdepartmentname, $buyercontactphoneno, $buyercontactfaxno, $buyercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentative
+     */
+    public function testDocumentSellerTaxRepresentativeGeneral(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentative($sellertaxreprname, $sellertaxreprids, $sellertaxreprdescription);
+        $this->assertEquals("", $sellertaxreprname);
+        $this->assertIsArray($sellertaxreprids);
+        $this->assertEmpty($sellertaxreprids);
+        $this->assertEquals("", $sellertaxreprdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeGlobalId($sellertaxreprglobalids);
+        $this->assertIsArray($sellertaxreprglobalids);
+        $this->assertEmpty($sellertaxreprglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeTaxRegistration($sellertaxreprtaxreg);
+        $this->assertIsArray($sellertaxreprtaxreg);
+        $this->assertEmpty($sellertaxreprtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeAddress
+     */
+    public function testDocumentSellerTaxRepresentativeAddress(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeAddress($sellertaxreprlineone, $sellertaxreprlinetwo, $sellertaxreprlinethree, $sellertaxreprpostcode, $sellertaxreprcity, $sellertaxreprcountry, $sellertaxreprsubdivision);
+        $this->assertEquals("", $sellertaxreprlineone);
+        $this->assertEquals("", $sellertaxreprlinetwo);
+        $this->assertEquals("", $sellertaxreprlinethree);
+        $this->assertEquals("", $sellertaxreprpostcode);
+        $this->assertEquals("", $sellertaxreprcity);
+        $this->assertEquals("", $sellertaxreprcountry);
+        $this->assertIsArray($sellertaxreprsubdivision);
+        $this->assertEmpty($sellertaxreprsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testDocumentSellerTaxRepresentativeLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeLegalOrganisation($sellertaxreprlegalorgid, $sellertaxreprlegalorgtype, $sellertaxreprlegalorgname);
+        $this->assertEquals("", $sellertaxreprlegalorgid);
+        $this->assertEquals("", $sellertaxreprlegalorgtype);
+        $this->assertEquals("", $sellertaxreprlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerTaxRepresentativeContact
+     */
+    public function testDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerTaxRepresentativeContact());
+        $this->assertFalse(self::$document->nextDocumentSellerTaxRepresentativeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerTaxRepresentativeContact($sellertaxreprcontactpersonname, $sellertaxreprcontactdepartmentname, $sellertaxreprcontactphoneno, $sellertaxreprcontactfaxno, $sellertaxreprcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipTo
+     */
+    public function testDocumentShipToGeneral(): void
+    {
+        self::$document->getDocumentShipTo($shiptoname, $shiptoids, $shiptodescription);
+        $this->assertEquals("", $shiptoname);
+        $this->assertIsArray($shiptoids);
+        $this->assertEmpty($shiptoids);
+        $this->assertEquals("", $shiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToGlobalId
+     */
+    public function testDocumentShipToGlobalId(): void
+    {
+        self::$document->getDocumentShipToGlobalId($shiptoglobalids);
+        $this->assertIsArray($shiptoglobalids);
+        $this->assertEmpty($shiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToTaxRegistration
+     */
+    public function testDocumentShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentShipToTaxRegistration($shiptotaxreg);
+        $this->assertIsArray($shiptotaxreg);
+        $this->assertEmpty($shiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToAddress
+     */
+    public function testDocumentShipToAddress(): void
+    {
+        self::$document->getDocumentShipToAddress($shiptolineone, $shiptolinetwo, $shiptolinethree, $shiptopostcode, $shiptocity, $shiptocountry, $shiptosubdivision);
+        $this->assertEquals("", $shiptolineone);
+        $this->assertEquals("", $shiptolinetwo);
+        $this->assertEquals("", $shiptolinethree);
+        $this->assertEquals("", $shiptopostcode);
+        $this->assertEquals("", $shiptocity);
+        $this->assertEquals("", $shiptocountry);
+        $this->assertIsArray($shiptosubdivision);
+        $this->assertEmpty($shiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToLegalOrganisation
+     */
+    public function testDocumentShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentShipToLegalOrganisation($shiptolegalorgid, $shiptolegalorgtype, $shiptolegalorgname);
+        $this->assertEquals("", $shiptolegalorgid);
+        $this->assertEquals("", $shiptolegalorgtype);
+        $this->assertEquals("", $shiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipToContact
+     */
+    public function testDocumentShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipToContact());
+        $this->assertFalse(self::$document->nextDocumentShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipToContact($shiptocontactpersonname, $shiptocontactdepartmentname, $shiptocontactphoneno, $shiptocontactfaxno, $shiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipTo
+     */
+    public function testDocumentUltimateShipToGeneral(): void
+    {
+        self::$document->getDocumentUltimateShipTo($ultimateshiptoname, $ultimateshiptoids, $ultimateshiptodescription);
+        $this->assertEquals("", $ultimateshiptoname);
+        $this->assertIsArray($ultimateshiptoids);
+        $this->assertEmpty($ultimateshiptoids);
+        $this->assertEquals("", $ultimateshiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToGlobalId
+     */
+    public function testDocumentUltimateShipToGlobalId(): void
+    {
+        self::$document->getDocumentUltimateShipToGlobalId($ultimateshiptoglobalids);
+        $this->assertIsArray($ultimateshiptoglobalids);
+        $this->assertEmpty($ultimateshiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToTaxRegistration
+     */
+    public function testDocumentUltimateShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentUltimateShipToTaxRegistration($ultimateshiptotaxreg);
+        $this->assertIsArray($ultimateshiptotaxreg);
+        $this->assertEmpty($ultimateshiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToAddress
+     */
+    public function testDocumentUltimateShipToAddress(): void
+    {
+        self::$document->getDocumentUltimateShipToAddress($ultimateshiptolineone, $ultimateshiptolinetwo, $ultimateshiptolinethree, $ultimateshiptopostcode, $ultimateshiptocity, $ultimateshiptocountry, $ultimateshiptosubdivision);
+        $this->assertEquals("", $ultimateshiptolineone);
+        $this->assertEquals("", $ultimateshiptolinetwo);
+        $this->assertEquals("", $ultimateshiptolinethree);
+        $this->assertEquals("", $ultimateshiptopostcode);
+        $this->assertEquals("", $ultimateshiptocity);
+        $this->assertEquals("", $ultimateshiptocountry);
+        $this->assertIsArray($ultimateshiptosubdivision);
+        $this->assertEmpty($ultimateshiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToLegalOrganisation
+     */
+    public function testDocumentUltimateShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentUltimateShipToLegalOrganisation($ultimateshiptolegalorgid, $ultimateshiptolegalorgtype, $ultimateshiptolegalorgname);
+        $this->assertEquals("", $ultimateshiptolegalorgid);
+        $this->assertEquals("", $ultimateshiptolegalorgtype);
+        $this->assertEquals("", $ultimateshiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateShipToContact
+     */
+    public function testDocumentUltimateShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFrom
+     */
+    public function testDocumentShipFromGeneral(): void
+    {
+        self::$document->getDocumentShipFrom($shipfromname, $shipfromids, $shipfromdescription);
+        $this->assertEquals("", $shipfromname);
+        $this->assertIsArray($shipfromids);
+        $this->assertEmpty($shipfromids);
+        $this->assertEquals("", $shipfromdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromGlobalId
+     */
+    public function testDocumentShipFromGlobalId(): void
+    {
+        self::$document->getDocumentShipFromGlobalId($shipfromglobalids);
+        $this->assertIsArray($shipfromglobalids);
+        $this->assertEmpty($shipfromglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromTaxRegistration
+     */
+    public function testDocumentShipFromTaxRegistration(): void
+    {
+        self::$document->getDocumentShipFromTaxRegistration($shipfromtaxreg);
+        $this->assertIsArray($shipfromtaxreg);
+        $this->assertEmpty($shipfromtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromAddress
+     */
+    public function testDocumentShipFromAddress(): void
+    {
+        self::$document->getDocumentShipFromAddress($shipfromlineone, $shipfromlinetwo, $shipfromlinethree, $shipfrompostcode, $shipfromcity, $shipfromcountry, $shipfromsubdivision);
+        $this->assertEquals("", $shipfromlineone);
+        $this->assertEquals("", $shipfromlinetwo);
+        $this->assertEquals("", $shipfromlinethree);
+        $this->assertEquals("", $shipfrompostcode);
+        $this->assertEquals("", $shipfromcity);
+        $this->assertEquals("", $shipfromcountry);
+        $this->assertIsArray($shipfromsubdivision);
+        $this->assertEmpty($shipfromsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromLegalOrganisation
+     */
+    public function testDocumentShipFromLegalOrganization(): void
+    {
+        self::$document->getDocumentShipFromLegalOrganisation($shipfromlegalorgid, $shipfromlegalorgtype, $shipfromlegalorgname);
+        $this->assertEquals("", $shipfromlegalorgid);
+        $this->assertEquals("", $shipfromlegalorgtype);
+        $this->assertEquals("", $shipfromlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipFromContact
+     */
+    public function testDocumentShipFromContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicer
+     */
+    public function testDocumentInvoicerGeneral(): void
+    {
+        self::$document->getDocumentInvoicer($invoicername, $invoicerids, $invoicerdescription);
+        $this->assertEquals("", $invoicername);
+        $this->assertIsArray($invoicerids);
+        $this->assertEmpty($invoicerids);
+        $this->assertEquals("", $invoicerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerGlobalId
+     */
+    public function testDocumentInvoicerGlobalId(): void
+    {
+        self::$document->getDocumentInvoicerGlobalId($invoicerglobalids);
+        $this->assertIsArray($invoicerglobalids);
+        $this->assertEmpty($invoicerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerTaxRegistration
+     */
+    public function testDocumentInvoicerTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoicerTaxRegistration($invoicertaxreg);
+        $this->assertIsArray($invoicertaxreg);
+        $this->assertEmpty($invoicertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerAddress
+     */
+    public function testDocumentInvoicerAddress(): void
+    {
+        self::$document->getDocumentInvoicerAddress($invoicerlineone, $invoicerlinetwo, $invoicerlinethree, $invoicerpostcode, $invoicercity, $invoicercountry, $invoicersubdivision);
+        $this->assertEquals("", $invoicerlineone);
+        $this->assertEquals("", $invoicerlinetwo);
+        $this->assertEquals("", $invoicerlinethree);
+        $this->assertEquals("", $invoicerpostcode);
+        $this->assertEquals("", $invoicercity);
+        $this->assertEquals("", $invoicercountry);
+        $this->assertIsArray($invoicersubdivision);
+        $this->assertEmpty($invoicersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerLegalOrganisation
+     */
+    public function testDocumentInvoicerLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoicerLegalOrganisation($invoicerlegalorgid, $invoicerlegalorgtype, $invoicerlegalorgname);
+        $this->assertEquals("", $invoicerlegalorgid);
+        $this->assertEquals("", $invoicerlegalorgtype);
+        $this->assertEquals("", $invoicerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoicerContact
+     */
+    public function testDocumentInvoicerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicee
+     */
+    public function testDocumentInvoiceeGeneral(): void
+    {
+        self::$document->getDocumentInvoicee($invoiceename, $invoiceeids, $invoiceedescription);
+        $this->assertEquals("", $invoiceename);
+        $this->assertIsArray($invoiceeids);
+        $this->assertEmpty($invoiceeids);
+        $this->assertEquals("", $invoiceedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeGlobalId
+     */
+    public function testDocumentInvoiceeGlobalId(): void
+    {
+        self::$document->getDocumentInvoiceeGlobalId($invoiceeglobalids);
+        $this->assertIsArray($invoiceeglobalids);
+        $this->assertEmpty($invoiceeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeTaxRegistration
+     */
+    public function testDocumentInvoiceeTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoiceeTaxRegistration($invoiceetaxreg);
+        $this->assertIsArray($invoiceetaxreg);
+        $this->assertEmpty($invoiceetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeAddress
+     */
+    public function testDocumentInvoiceeAddress(): void
+    {
+        self::$document->getDocumentInvoiceeAddress($invoiceelineone, $invoiceelinetwo, $invoiceelinethree, $invoiceepostcode, $invoiceecity, $invoiceecountry, $invoiceesubdivision);
+        $this->assertEquals("", $invoiceelineone);
+        $this->assertEquals("", $invoiceelinetwo);
+        $this->assertEquals("", $invoiceelinethree);
+        $this->assertEquals("", $invoiceepostcode);
+        $this->assertEquals("", $invoiceecity);
+        $this->assertEquals("", $invoiceecountry);
+        $this->assertIsArray($invoiceesubdivision);
+        $this->assertEmpty($invoiceesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeLegalOrganisation
+     */
+    public function testDocumentInvoiceeLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoiceeLegalOrganisation($invoiceelegalorgid, $invoiceelegalorgtype, $invoiceelegalorgname);
+        $this->assertEquals("", $invoiceelegalorgid);
+        $this->assertEquals("", $invoiceelegalorgtype);
+        $this->assertEquals("", $invoiceelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoiceeContact
+     */
+    public function testDocumentInvoiceeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayee
+     */
+    public function testDocumentPayeeGeneral(): void
+    {
+        self::$document->getDocumentPayee($payeename, $payeeids, $payeedescription);
+        $this->assertEquals("", $payeename);
+        $this->assertIsArray($payeeids);
+        $this->assertEmpty($payeeids);
+        $this->assertEquals("", $payeedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeGlobalId
+     */
+    public function testDocumentPayeeGlobalId(): void
+    {
+        self::$document->getDocumentPayeeGlobalId($payeeglobalids);
+        $this->assertIsArray($payeeglobalids);
+        $this->assertEmpty($payeeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeTaxRegistration
+     */
+    public function testDocumentPayeeTaxRegistration(): void
+    {
+        self::$document->getDocumentPayeeTaxRegistration($payeetaxreg);
+        $this->assertIsArray($payeetaxreg);
+        $this->assertEmpty($payeetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeAddress
+     */
+    public function testDocumentPayeeAddress(): void
+    {
+        self::$document->getDocumentPayeeAddress($payeelineone, $payeelinetwo, $payeelinethree, $payeepostcode, $payeecity, $payeecountry, $payeesubdivision);
+        $this->assertEquals("", $payeelineone);
+        $this->assertEquals("", $payeelinetwo);
+        $this->assertEquals("", $payeelinethree);
+        $this->assertEquals("", $payeepostcode);
+        $this->assertEquals("", $payeecity);
+        $this->assertEquals("", $payeecountry);
+        $this->assertIsArray($payeesubdivision);
+        $this->assertEmpty($payeesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeLegalOrganisation
+     */
+    public function testDocumentPayeeLegalOrganization(): void
+    {
+        self::$document->getDocumentPayeeLegalOrganisation($payeelegalorgid, $payeelegalorgtype, $payeelegalorgname);
+        $this->assertEquals("", $payeelegalorgid);
+        $this->assertEquals("", $payeelegalorgtype);
+        $this->assertEquals("", $payeelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPayeeContact
+     */
+    public function testDocumentPayeeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUser
+     */
+    public function testDocumentProductEndUserGeneral(): void
+    {
+        self::$document->getDocumentProductEndUser($producendusername, $producenduserids, $producenduserdescription);
+        $this->assertEquals("", $producendusername);
+        $this->assertIsArray($producenduserids);
+        $this->assertArrayNotHasKey(0, $producenduserids);
+        $this->assertArrayNotHasKey(1, $producenduserids);
+        $this->assertEquals("", $producenduserdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserGlobalId
+     */
+    public function testDocumentProductEndUserGlobalId(): void
+    {
+        self::$document->getDocumentProductEndUserGlobalId($producenduserglobalids);
+        $this->assertIsArray($producenduserglobalids);
+        $this->assertArrayNotHasKey("0088", $producenduserglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserTaxRegistration
+     */
+    public function testDocumentProductEndUserTaxRegistration(): void
+    {
+        self::$document->getDocumentProductEndUserTaxRegistration($producendusertaxreg);
+        $this->assertIsArray($producendusertaxreg);
+        $this->assertArrayNotHasKey("VA", $producendusertaxreg);
+        $this->assertArrayNotHasKey("FC", $producendusertaxreg);
+        $this->assertArrayNotHasKey(0, $producendusertaxreg);
+        $this->assertArrayNotHasKey(1, $producendusertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $producendusertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserAddress
+     */
+    public function testDocumentProductEndUserAddress(): void
+    {
+        self::$document->getDocumentProductEndUserAddress($producenduserlineone, $producenduserlinetwo, $producenduserlinethree, $producenduserpostcode, $producendusercity, $producendusercountry, $producendusersubdivision);
+        $this->assertEquals("", $producenduserlineone);
+        $this->assertEquals("", $producenduserlinetwo);
+        $this->assertEquals("", $producenduserlinethree);
+        $this->assertEquals("", $producenduserpostcode);
+        $this->assertEquals("", $producendusercity);
+        $this->assertEquals("", $producendusercountry);
+        $this->assertIsArray($producendusersubdivision);
+        $this->assertEmpty($producendusersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserLegalOrganisation
+     */
+    public function testDocumentProductEndUserLegalOrganization(): void
+    {
+        self::$document->getDocumentProductEndUserLegalOrganisation($producenduserlegalorgid, $producenduserlegalorgtype, $producenduserlegalorgname);
+        $this->assertEquals("", $producenduserlegalorgid);
+        $this->assertEquals("", $producenduserlegalorgtype);
+        $this->assertEquals("", $producenduserlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentProductEndUserContactContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentProductEndUserContactContact
+     */
+    public function testDocumentProductEndUserContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentProductEndUserContactContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentProductEndUserContact($producendusercontactpersonname, $producendusercontactdepartmentname, $producendusercontactphoneno, $producendusercontactfaxno, $producendusercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentProductEndUserContactContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerOrderReferencedDocument
+     */
+    public function testDocumentSellerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentSellerOrderReferencedDocument($sellerorderrefdocid, $sellerorderrefdocdate);
+        $this->assertEquals("", $sellerorderrefdocid);
+        $this->assertNull($sellerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerOrderReferencedDocument
+     */
+    public function testDocumentBuyerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentBuyerOrderReferencedDocument($buyerorderrefdocid, $buyerorderrefdocdate);
+        $this->assertEquals("2013-471331", $buyerorderrefdocid);
+        $this->assertNull($buyerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentContractReferencedDocument
+     */
+    public function testDocumentContractReferencedDocument(): void
+    {
+        self::$document->getDocumentContractReferencedDocument($contractrefdocid, $contractrefdocdate);
+        $this->assertEquals("", $contractrefdocid);
+        $this->assertNull($contractrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocuments
+     */
+    public function testDocumentAdditionalReferencedDocuments(): void
+    {
+        self::$document->getDocumentAdditionalReferencedDocuments($additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs);
+        $this->assertEmpty($additionalrefdocs);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProcuringProject
+     */
+    public function testDocumentProcuringProject(): void
+    {
+        self::$document->getDocumentProcuringProject($projectid, $projectname);
+        $this->assertEquals("", $projectid);
+        $this->assertEquals("", $projectname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSupplyChainEvent
+     */
+    public function testDocumentSupplyChainEvent(): void
+    {
+        self::$document->getDocumentSupplyChainEvent($supplychainevent);
+        $this->assertNotNull($supplychainevent);
+        $this->assertInstanceOf("DateTime", $supplychainevent);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180603'))->format('Ymd'), $supplychainevent->format('Ymd'));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDespatchAdviceReferencedDocument
+     */
+    public function testDocumentDespatchAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentDespatchAdviceReferencedDocument($despatchdocid, $despatchdocdate);
+        $this->assertEquals("", $despatchdocid);
+        $this->assertNull($despatchdocdate);
+        $this->assertNotInstanceOf("DateTime", $despatchdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentReceivingAdviceReferencedDocument
+     */
+    public function testDocumentReceivingAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentReceivingAdviceReferencedDocument($recadvid, $recadvdate);
+        $this->assertEquals("", $recadvid);
+        $this->assertNull($recadvdate);
+        $this->assertNotInstanceOf("DateTime", $recadvdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryNoteReferencedDocument
+     */
+    public function testDocumentDeliveryNoteReferencedDocument(): void
+    {
+        self::$document->getDocumentDeliveryNoteReferencedDocument($deliverynoterefdocid, $deliverynoterefdocdate);
+        $this->assertEquals("", $deliverynoterefdocid);
+        $this->assertNull($deliverynoterefdocdate);
+        $this->assertNotInstanceOf("DateTime", $deliverynoterefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBillingPeriod
+     */
+    public function testDocumentBillingPeriod(): void
+    {
+        self::$document->getDocumentBillingPeriod($docbillingperiodstart, $docbillingperiodend);
+        $this->assertNull($docbillingperiodstart);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodstart);
+        $this->assertNull($docbillingperiodend);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodend);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharges
+     */
+    public function testDocumentAllowanceCharges(): void
+    {
+        self::$document->getDocumentAllowanceCharges($docallowancecharge);
+        $this->assertIsArray($docallowancecharge);
+        $this->assertNotEmpty($docallowancecharge);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerms
+     */
+    public function testDocumentPaymentTerms(): void
+    {
+        self::$document->getDocumentPaymentTerms($docpaymentterms);
+        $this->assertIsArray($docpaymentterms);
+        $this->assertNotEmpty($docpaymentterms);
+        $this->assertArrayHasKey(0, $docpaymentterms);
+        $this->assertIsArray($docpaymentterms[0]);
+        $this->assertArrayHasKey("description", $docpaymentterms[0]);
+        $this->assertArrayHasKey("duedate", $docpaymentterms[0]);
+        $this->assertArrayHasKey("directdebitmandateid", $docpaymentterms[0]);
+        $this->assertArrayHasKey("partialpaymentamount", $docpaymentterms[0]);
+        $this->assertEquals("Zahlbar innerhalb 30 Tagen netto bis 04.07.2018, 3% Skonto innerhalb 10 Tagen bis 15.06.2018", $docpaymentterms[0]["description"]);
+        $this->assertNull($docpaymentterms[0]["duedate"]);
+        $this->assertNotInstanceOf("DateTime", $docpaymentterms[0]["duedate"]);
+        $this->assertEquals("", $docpaymentterms[0]["directdebitmandateid"]);
+        $this->assertEquals(0.0, $docpaymentterms[0]["partialpaymentamount"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryTerms
+     */
+    public function testDocumentDeliveryTerms(): void
+    {
+        self::$document->getDocumentDeliveryTerms($devtermcode);
+        $this->assertEquals("", $devtermcode);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument
+     */
+    public function testDocumentAdditionalReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentAdditionalReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testDocumentUltimateCustomerOrderReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateCustomerOrderReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentUltimateCustomerOrderReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentDocumentPaymentMeansLoop(): void
+    {
+        $this->assertFalse(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     */
+    public function testDocumentTaxLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        $this->assertTrue(self::$document->nextDocumentTax());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentTax
+     */
+    public function testDocumentTax(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(129.37, $basisAmount);
+        $this->assertEquals(9.06, $calculatedAmount);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+
+        $this->assertTrue(self::$document->nextDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(64.40, $basisAmount);
+        $this->assertEquals(12.24, $calculatedAmount);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceChargeLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAllowanceCharge());
+        $this->assertTrue(self::$document->nextDocumentAllowanceCharge());
+        $this->assertTrue(self::$document->nextDocumentAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentAllowanceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceCharge(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAllowanceCharge());
+        self::$document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->assertEquals(1.00, $actualAmount);
+        $this->assertFalse($isCharge);
+        $this->assertEquals("S", $taxCategoryCode);
+        $this->assertEquals("VAT", $taxTypeCode);
+        $this->assertEquals(19.00, $rateApplicablePercent);
+        $this->assertEquals(0, $sequence);
+        $this->assertEquals(0, $calculationPercent);
+        $this->assertEquals(10.0, $basisAmount);
+        $this->assertEquals(0, $basisQuantity);
+        $this->assertEquals("", $basisQuantityUnitCode);
+        $this->assertEquals("", $reasonCode);
+        $this->assertEquals("Sondernachlass", $reason);
+
+        $this->assertTrue(self::$document->nextDocumentAllowanceCharge());
+        self::$document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->assertEquals(13.73, $actualAmount);
+        $this->assertFalse($isCharge);
+        $this->assertEquals("S", $taxCategoryCode);
+        $this->assertEquals("VAT", $taxTypeCode);
+        $this->assertEquals(7.00, $rateApplicablePercent);
+        $this->assertEquals(0, $sequence);
+        $this->assertEquals(0, $calculationPercent);
+        $this->assertEquals(137.30, $basisAmount);
+        $this->assertEquals(0, $basisQuantity);
+        $this->assertEquals("", $basisQuantityUnitCode);
+        $this->assertEquals("", $reasonCode);
+        $this->assertEquals("Sondernachlass", $reason);
+
+        $this->assertTrue(self::$document->nextDocumentAllowanceCharge());
+        self::$document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->assertEquals(5.80, $actualAmount);
+        $this->assertTrue($isCharge);
+        $this->assertEquals("S", $taxCategoryCode);
+        $this->assertEquals("VAT", $taxTypeCode);
+        $this->assertEquals(7.00, $rateApplicablePercent);
+        $this->assertEquals(0, $sequence);
+        $this->assertEquals(0, $calculationPercent);
+        $this->assertEquals(137.30, $basisAmount);
+        $this->assertEquals(0, $basisQuantity);
+        $this->assertEquals("", $basisQuantityUnitCode);
+        $this->assertEquals("", $reasonCode);
+        $this->assertEquals("Versandkosten", $reason);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentLogisticsServiceCharge
+     */
+    public function testtDocumentLogisticsServiceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentLogisticsServiceCharge());
+        $this->assertFalse(self::$document->nextDocumentLogisticsServiceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDiscountTermsFromPaymentTerm
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        self::$document->getDocumentPaymentTerm($termdescription, $termduedate, $termmandate);
+        self::$document->getDiscountTermsFromPaymentTerm($dispercent, $discbasedatetime, $discmeasureval, $discmeasureunit, $discbaseamount, $discamount);
+
+        $this->assertEquals("Zahlbar innerhalb 30 Tagen netto bis 04.07.2018, 3% Skonto innerhalb 10 Tagen bis 15.06.2018", $termdescription);
+        $this->assertNull($termduedate);
+        $this->assertEquals("", $termmandate);
+        $this->assertEquals(0, $dispercent);
+        $this->assertNull($discbasedatetime);
+        $this->assertEquals(0, $discmeasureval);
+        $this->assertEquals("", $discmeasureunit);
+        $this->assertEquals(0, $discbaseamount);
+        $this->assertEquals(0, $discamount);
+
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     */
+    public function testDocumentPositionLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertFalse(self::$document->nextDocumentPosition());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFirst(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("1", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Kunstrasen grÃŒn 3m breit", $prodname);
+        $this->assertEquals("300cm x 100 cm", $proddesc);
+        $this->assertEquals("KR3M", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4012345001235", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(4.00, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(3.3333, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(3.0, $billedquantity);
+        $this->assertEquals("MTK", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertTrue(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertTrue(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        self::$document->firstDocumentPositionGrossPriceAllowanceCharge();
+        self::$document->getDocumentPositionGrossPriceAllowanceCharge(
+            $docPosAllowanceChargeactualAmount,
+            $docPosAllowanceChargeisCharge,
+            $docPosAllowanceChargecalculationPercent,
+            $docPosAllowanceChargebasisAmount,
+            $docPosAllowanceChargereason,
+            $docPosAllowanceChargeTaxTypeCode,
+            $docPosAllowanceChargeTaxCategoryCode,
+            $docPosAllowanceChargerateApplicablePercent,
+            $docPosAllowanceChargesequence,
+            $docPosAllowanceChargebasisQuantity,
+            $docPosAllowanceChargebasisQuantityUnitCode,
+            $docPosAllowanceChargereasonCode
+        );
+        $this->assertEquals(0.6667, $docPosAllowanceChargeactualAmount);
+        $this->assertFalse($docPosAllowanceChargeisCharge);
+        $this->assertEquals(0, $docPosAllowanceChargecalculationPercent);
+        $this->assertEquals(0, $docPosAllowanceChargebasisAmount);
+        $this->assertEquals("", $docPosAllowanceChargereason);
+        $this->assertEquals("", $docPosAllowanceChargeTaxTypeCode);
+        $this->assertEquals("", $docPosAllowanceChargeTaxCategoryCode);
+        $this->assertEquals(0, $docPosAllowanceChargerateApplicablePercent);
+        $this->assertEquals(0, $docPosAllowanceChargesequence);
+        $this->assertEquals(0, $docPosAllowanceChargebasisQuantity);
+        $this->assertEquals("", $docPosAllowanceChargebasisQuantityUnitCode);
+        $this->assertEquals("", $docPosAllowanceChargereasonCode);
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(10.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        $this->assertTrue(self::$document->firstDocumentPositionNote());
+        self::$document->getDocumentPositionNote($content, $contentcode, $subjectcode);
+        $this->assertEquals("Wir erlauben uns Ihnen folgende Positionen aus der Lieferung Nr. 2018-51112 in Rechnung zu stellen:", $content);
+        $this->assertEquals("", $contentcode);
+        $this->assertEquals("", $subjectcode);
+
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionAllowanceCharge());
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionSecond(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("2", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Schweinesteak", $prodname);
+        $this->assertEquals("aus Deutschland", $proddesc);
+        $this->assertEquals("SFK5", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4000050986428", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(5.50, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(5.50, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(5.0, $billedquantity);
+        $this->assertEquals("KGM", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(27.5, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionAllowanceCharge());
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionThird(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("3", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertStringContainsString("Mineralwasser Medium 12 x 1,0l PET", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("GTRWA5", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4000001234561", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(5.49, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(5.49, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(20.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(109.80, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionAllowanceCharge());
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFourth(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("4", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertStringContainsString("Pfand", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("PFA5", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4000001234578", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(2.77, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(2.77, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(20.0, $billedquantity);
+        $this->assertEquals("C62", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(55.40, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionAllowanceCharge());
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAdditionalReferencedDocument
+     */
+    public function testDocumentPositionAdditionalReferencedDocument(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPositionAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentPositionAdditionalReferencedDocument());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931Bank1Test.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931Bank1Test.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931Bank1Test.php	(revision 8435)
@@ -0,0 +1,145 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+use \horstoeko\zugferd\codelists\ZugferdPaymentMeans;
+
+class ReaderEn16931Bank1Test extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/en16931_sepa_prenotification.xml");
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getInvoiceObject
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getSerializer
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getObjectHelper
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getProfileDefinitionParameter
+     */
+    public function testDocumentGetters(): void
+    {
+        $this->assertNotNull(self::$document->getInvoiceObject());
+        $this->assertNotNull(self::$document->getSerializer());
+        $this->assertNotNull(self::$document->getObjectHelper());
+        $this->assertEquals('en16931', self::$document->getProfileDefinitionParameter('name'));
+        $this->assertEquals('EN 16931 (COMFORT)', self::$document->getProfileDefinitionParameter('altname'));
+        $this->assertEquals('urn:cen.eu:en16931:2017', self::$document->getProfileDefinitionParameter('contextparameter'));
+        $this->assertEquals('factur-x.xml', self::$document->getProfileDefinitionParameter('attachmentfilename'));
+        $this->assertEquals('EN 16931', self::$document->getProfileDefinitionParameter('xmpname'));
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getProfileDefinitionParameter('unknownparameter');
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('471102', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180305'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentPaymentMeansLoop(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("DE98ZZZ09999999999", $creditorReferenceID);
+        $this->assertEquals("", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentMeans
+     */
+    public function testGetDocumentPaymentMeans(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        self::$document->getDocumentPaymentMeans($typeCode, $information, $cardType, $cardId, $cardHolderName, $buyerIban, $payeeIban, $payeeAccountName, $payeePropId, $payeeBic);
+        $this->assertEquals(ZugferdPaymentMeans::UNTDID_4461_59, $typeCode);
+        $this->assertEquals("", $information);
+        $this->assertEquals("", $cardType);
+        $this->assertEquals("", $cardId);
+        $this->assertEquals("", $cardHolderName);
+        $this->assertEquals("DE21860000000086001055", $buyerIban);
+        $this->assertEquals("", $payeeIban);
+        $this->assertEquals("", $payeeAccountName);
+        $this->assertEquals("", $payeePropId);
+        $this->assertEquals("", $payeeBic);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDiscountTermsFromPaymentTerm
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        self::$document->getDocumentPaymentTerm($termdescription, $termduedate, $termmandate);
+        self::$document->getDiscountTermsFromPaymentTerm($dispercent, $discbasedatetime, $discmeasureval, $discmeasureunit, $discbaseamount, $discamount);
+
+        $this->assertEquals("Der Betrag in HÃ¶he von EUR 529,87 wird am 20.03.2018 von Ihrem Konto per SEPA-Lastschrift eingezogen.", $termdescription);
+        $this->assertNull($termduedate);
+        $this->assertEquals("REF A-123", $termmandate);
+        $this->assertEquals(0, $dispercent);
+        $this->assertNull($discbasedatetime);
+        $this->assertEquals(0, $discmeasureval);
+        $this->assertEquals("", $discmeasureunit);
+        $this->assertEquals(0, $discbaseamount);
+        $this->assertEquals(0, $discamount);
+
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931Bank2Test.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931Bank2Test.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931Bank2Test.php	(revision 8435)
@@ -0,0 +1,200 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+use \horstoeko\zugferd\codelists\ZugferdPaymentMeans;
+
+class ReaderEn16931Bank2Test extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/en16931_bank_2.xml");
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('F20200024', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20200115'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+        $this->assertNotNull(self::$document->getInvoiceObject());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentPaymentMeansLoop(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("CREDID", $creditorReferenceID);
+        $this->assertEquals("F20180023BUYER", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentMeans
+     */
+    public function testGetDocumentPaymentMeans(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        self::$document->getDocumentPaymentMeans($typeCode, $information, $cardType, $cardId, $cardHolderName, $buyerIban, $payeeIban, $payeeAccountName, $payeePropId, $payeeBic);
+        $this->assertEquals(ZugferdPaymentMeans::UNTDID_4461_30, $typeCode);
+        $this->assertEquals("", $information);
+        $this->assertEquals("", $cardType);
+        $this->assertEquals("", $cardId);
+        $this->assertEquals("", $cardHolderName);
+        $this->assertEquals("FRDEBIT", $buyerIban);
+        $this->assertEquals("FR76 1254 2547 2569 8542 5874 698", $payeeIban);
+        $this->assertEquals("", $payeeAccountName);
+        $this->assertEquals("LOC BANK ACCOUNT", $payeePropId);
+        $this->assertEquals("", $payeeBic);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDiscountTermsFromPaymentTerm
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        self::$document->getDocumentPaymentTerm($termdescription, $termduedate, $termmandate);
+        self::$document->getDiscountTermsFromPaymentTerm($dispercent, $discbasedatetime, $discmeasureval, $discmeasureunit, $discbaseamount, $discamount);
+
+        $this->assertEquals("", $termdescription);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20200215'))->format('Ymd'), $termduedate->format('Ymd'));
+        $this->assertEquals("MANDATE PT", $termmandate);
+        $this->assertEquals(0, $dispercent);
+        $this->assertNull($discbasedatetime);
+        $this->assertEquals(0, $discmeasureval);
+        $this->assertEquals("", $discmeasureunit);
+        $this->assertEquals(0, $discbaseamount);
+        $this->assertEquals(0, $discamount);
+
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentative
+     */
+    public function testDocumentSellerTaxRepresentativeGeneral(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentative($sellertaxreprname, $sellertaxreprids, $sellertaxreprdescription);
+        $this->assertEquals("SELLER TAX REP", $sellertaxreprname);
+        $this->assertIsArray($sellertaxreprids);
+        $this->assertEmpty($sellertaxreprids);
+        $this->assertEquals("", $sellertaxreprdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeGlobalId($sellertaxreprglobalids);
+        $this->assertIsArray($sellertaxreprglobalids);
+        $this->assertEmpty($sellertaxreprglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeTaxRegistration($sellertaxreprtaxreg);
+        $this->assertIsArray($sellertaxreprtaxreg);
+        $this->assertNotEmpty($sellertaxreprtaxreg);
+        $this->assertArrayHasKey("VA", $sellertaxreprtaxreg);
+        $this->assertEquals("FR 05 987 654 321", $sellertaxreprtaxreg["VA"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeAddress
+     */
+    public function testDocumentSellerTaxRepresentativeAddress(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeAddress($sellertaxreprlineone, $sellertaxreprlinetwo, $sellertaxreprlinethree, $sellertaxreprpostcode, $sellertaxreprcity, $sellertaxreprcountry, $sellertaxreprsubdivision);
+        $this->assertEquals("35 rue d'ici", $sellertaxreprlineone);
+        $this->assertEquals("Seller line 2", $sellertaxreprlinetwo);
+        $this->assertEquals("Seller line 3", $sellertaxreprlinethree);
+        $this->assertEquals("75018", $sellertaxreprpostcode);
+        $this->assertEquals("PARIS", $sellertaxreprcity);
+        $this->assertEquals("FR", $sellertaxreprcountry);
+        $this->assertIsArray($sellertaxreprsubdivision);
+        $this->assertEmpty($sellertaxreprsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testDocumentSellerTaxRepresentativeLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeLegalOrganisation($sellertaxreprlegalorgid, $sellertaxreprlegalorgtype, $sellertaxreprlegalorgname);
+        $this->assertEquals("", $sellertaxreprlegalorgid);
+        $this->assertEquals("", $sellertaxreprlegalorgtype);
+        $this->assertEquals("", $sellertaxreprlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerTaxRepresentativeContact
+     */
+    public function testDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerTaxRepresentativeContact());
+        $this->assertFalse(self::$document->nextDocumentSellerTaxRepresentativeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerTaxRepresentativeContact($sellertaxreprcontactpersonname, $sellertaxreprcontactdepartmentname, $sellertaxreprcontactphoneno, $sellertaxreprcontactfaxno, $sellertaxreprcontactemailaddr);
+            }
+        );
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931SimpleTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931SimpleTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderEn16931SimpleTest.php	(revision 8435)
@@ -0,0 +1,1498 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+
+class ReaderEn16931SimpleTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/en16931_simple.xml");
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getInvoiceObject
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getSerializer
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getObjectHelper
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getProfileDefinitionParameter
+     */
+    public function testDocumentGetters(): void
+    {
+        $this->assertNotNull(self::$document->getInvoiceObject());
+        $this->assertNotNull(self::$document->getSerializer());
+        $this->assertNotNull(self::$document->getObjectHelper());
+        $this->assertEquals('en16931', self::$document->getProfileDefinitionParameter('name'));
+        $this->assertEquals('EN 16931 (COMFORT)', self::$document->getProfileDefinitionParameter('altname'));
+        $this->assertEquals('urn:cen.eu:en16931:2017', self::$document->getProfileDefinitionParameter('contextparameter'));
+        $this->assertEquals('factur-x.xml', self::$document->getProfileDefinitionParameter('attachmentfilename'));
+        $this->assertEquals('EN 16931', self::$document->getProfileDefinitionParameter('xmpname'));
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getProfileDefinitionParameter('unknownparameter');
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('471102', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180305'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentNotes
+     */
+    public function testDocumentNotes(): void
+    {
+        self::$document->getDocumentNotes($notes);
+        $this->assertIsArray($notes);
+        $this->assertNotEmpty($notes);
+        $this->assertEquals(2, count($notes));
+        $this->assertArrayHasKey(0, $notes);
+        $this->assertArrayHasKey(1, $notes);
+        $this->assertIsArray($notes[0]);
+        $this->assertNotEmpty($notes[0]);
+        $this->assertArrayHasKey("content", $notes[0]);
+        $this->assertArrayHasKey("subjectcode", $notes[0]);
+        $this->assertArrayHasKey("contentcode", $notes[0]);
+        $this->assertIsArray($notes[1]);
+        $this->assertNotEmpty($notes[1]);
+        $this->assertArrayHasKey("content", $notes[1]);
+        $this->assertArrayHasKey("subjectcode", $notes[1]);
+        $this->assertArrayHasKey("contentcode", $notes[1]);
+        $this->assertEquals("", $notes[0]["contentcode"]);
+        $this->assertEquals("", $notes[0]["subjectcode"]);
+        $this->assertEquals("Rechnung gemÃ€Ã Bestellung vom 01.03.2018.", $notes[0]["content"]);
+        $this->assertEquals("", $notes[1]["contentcode"]);
+        $this->assertEquals("REG", $notes[1]["subjectcode"]);
+        $this->assertStringContainsString("Lieferant GmbH", $notes[1]["content"]);
+        $this->assertStringContainsString("LieferantenstraÃe 20", $notes[1]["content"]);
+        $this->assertStringContainsString("80333 MÃŒnchen", $notes[1]["content"]);
+        $this->assertStringContainsString("Deutschland", $notes[1]["content"]);
+        $this->assertStringContainsString("GeschÃ€ftsfÃŒhrer: Hans Muster", $notes[1]["content"]);
+        $this->assertStringContainsString("Handelsregisternummer: H A 123", $notes[1]["content"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("", $creditorReferenceID);
+        $this->assertEquals("", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsDocumentCopy
+     */
+    public function testDocumentIsCopy(): void
+    {
+        self::$document->getIsDocumentCopy($iscopy);
+        $this->assertFalse($iscopy);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsTestDocument
+     */
+    public function testDocumentIsTestDocument(): void
+    {
+        self::$document->getIsTestDocument($istest);
+        $this->assertFalse($istest);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSummation
+     */
+    public function testDocumentSummation(): void
+    {
+        self::$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+        $this->assertEquals(529.87, $grandTotalAmount);
+        $this->assertEquals(529.87, $duePayableAmount);
+        $this->assertEquals(473.00, $lineTotalAmount);
+        $this->assertEquals(0.00, $chargeTotalAmount);
+        $this->assertEquals(0.00, $allowanceTotalAmount);
+        $this->assertEquals(473.00, $taxBasisTotalAmount);
+        $this->assertEquals(56.87, $taxTotalAmount);
+        $this->assertEquals(0.00, $roundingAmount);
+        $this->assertEquals(0.00, $totalPrepaidAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerReference
+     */
+    public function testGetDocumentBuyerReference(): void
+    {
+        self::$document->getDocumentBuyerReference($buyerReference);
+        $this->assertEquals("08154711", $buyerReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSeller
+     */
+    public function testDocumentSellerGeneral(): void
+    {
+        self::$document->getDocumentSeller($sellername, $sellerids, $sellerdescription);
+        $this->assertEquals("Lieferant GmbH", $sellername);
+        $this->assertIsArray($sellerids);
+        $this->assertArrayHasKey(0, $sellerids);
+        $this->assertArrayNotHasKey(1, $sellerids);
+        $this->assertEquals("549910", $sellerids[0]);
+        $this->assertEquals("", $sellerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerGlobalId
+     */
+    public function testDocumentSellerGlobalId(): void
+    {
+        self::$document->getDocumentSellerGlobalId($sellerglobalids);
+        $this->assertIsArray($sellerglobalids);
+        $this->assertArrayHasKey("0088", $sellerglobalids);
+        $this->assertEquals("4000001123452", $sellerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRegistration
+     */
+    public function testDocumentSellerTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRegistration($sellertaxreg);
+        $this->assertIsArray($sellertaxreg);
+        $this->assertArrayHasKey("VA", $sellertaxreg);
+        $this->assertArrayHasKey("FC", $sellertaxreg);
+        $this->assertArrayNotHasKey(0, $sellertaxreg);
+        $this->assertArrayNotHasKey(1, $sellertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $sellertaxreg);
+        $this->assertEquals("201/113/40209", $sellertaxreg["FC"]);
+        $this->assertEquals("DE123456789", $sellertaxreg["VA"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerAddress
+     */
+    public function testDocumentSellerAddress(): void
+    {
+        self::$document->getDocumentSellerAddress($sellerlineone, $sellerlinetwo, $sellerlinethree, $sellerpostcode, $sellercity, $sellercountry, $sellersubdivision);
+        $this->assertEquals("LieferantenstraÃe 20", $sellerlineone);
+        $this->assertEquals("", $sellerlinetwo);
+        $this->assertEquals("", $sellerlinethree);
+        $this->assertEquals("80333", $sellerpostcode);
+        $this->assertEquals("MÃŒnchen", $sellercity);
+        $this->assertEquals("DE", $sellercountry);
+        $this->assertIsArray($sellersubdivision);
+        $this->assertEmpty($sellersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerLegalOrganisation
+     */
+    public function testDocumentSellerLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerLegalOrganisation($sellerlegalorgid, $sellerlegalorgtype, $sellerlegalorgname);
+        $this->assertEquals("", $sellerlegalorgid);
+        $this->assertEquals("", $sellerlegalorgtype);
+        $this->assertEquals("", $sellerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerContact
+     */
+    public function testDocumentSellerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerContact());
+        $this->assertFalse(self::$document->nextDocumentSellerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerContact($sellercontactpersonname, $sellercontactdepartmentname, $sellercontactphoneno, $sellercontactfaxno, $sellercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyer
+     */
+    public function testDocumentBuyerGeneral(): void
+    {
+        self::$document->getDocumentBuyer($buyername, $buyerids, $buyerdescription);
+        $this->assertEquals("Kunden AG Mitte", $buyername);
+        $this->assertIsArray($buyerids);
+        $this->assertArrayHasKey(0, $buyerids);
+        $this->assertArrayNotHasKey(1, $buyerids);
+        $this->assertEquals("GE2020211", $buyerids[0]);
+        $this->assertEquals("", $buyerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerGlobalId
+     */
+    public function testDocumentBuyerGlobalId(): void
+    {
+        self::$document->getDocumentBuyerGlobalId($buyerglobalids);
+        $this->assertIsArray($buyerglobalids);
+        $this->assertEmpty($buyerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerTaxRegistration
+     */
+    public function testDocumentBuyerTaxRegistration(): void
+    {
+        self::$document->getDocumentBuyerTaxRegistration($buyertaxreg);
+        $this->assertIsArray($buyertaxreg);
+        $this->assertEmpty($buyertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerAddress
+     */
+    public function testDocumentBuyerAddress(): void
+    {
+        self::$document->getDocumentBuyerAddress($buyerlineone, $buyerlinetwo, $buyerlinethree, $buyerpostcode, $buyercity, $buyercountry, $buyersubdivision);
+        $this->assertEquals("KundenstraÃe 15", $buyerlineone);
+        $this->assertEquals("", $buyerlinetwo);
+        $this->assertEquals("", $buyerlinethree);
+        $this->assertEquals("69876", $buyerpostcode);
+        $this->assertEquals("Frankfurt", $buyercity);
+        $this->assertEquals("DE", $buyercountry);
+        $this->assertIsArray($buyersubdivision);
+        $this->assertEmpty($buyersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerLegalOrganisation
+     */
+    public function testDocumentBuyerLegalOrganization(): void
+    {
+        self::$document->getDocumentBuyerLegalOrganisation($buyerlegalorgid, $buyerlegalorgtype, $buyerlegalorgname);
+        $this->assertEquals("", $buyerlegalorgid);
+        $this->assertEquals("", $buyerlegalorgtype);
+        $this->assertEquals("", $buyerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentBuyerContact
+     */
+    public function testDocumentBuyerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentBuyerContact());
+        $this->assertFalse(self::$document->nextDocumentBuyerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentBuyerContact($buyercontactpersonname, $buyercontactdepartmentname, $buyercontactphoneno, $buyercontactfaxno, $buyercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentative
+     */
+    public function testDocumentSellerTaxRepresentativeGeneral(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentative($sellertaxreprname, $sellertaxreprids, $sellertaxreprdescription);
+        $this->assertEquals("", $sellertaxreprname);
+        $this->assertIsArray($sellertaxreprids);
+        $this->assertEmpty($sellertaxreprids);
+        $this->assertEquals("", $sellertaxreprdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeGlobalId($sellertaxreprglobalids);
+        $this->assertIsArray($sellertaxreprglobalids);
+        $this->assertEmpty($sellertaxreprglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeTaxRegistration($sellertaxreprtaxreg);
+        $this->assertIsArray($sellertaxreprtaxreg);
+        $this->assertEmpty($sellertaxreprtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeAddress
+     */
+    public function testDocumentSellerTaxRepresentativeAddress(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeAddress($sellertaxreprlineone, $sellertaxreprlinetwo, $sellertaxreprlinethree, $sellertaxreprpostcode, $sellertaxreprcity, $sellertaxreprcountry, $sellertaxreprsubdivision);
+        $this->assertEquals("", $sellertaxreprlineone);
+        $this->assertEquals("", $sellertaxreprlinetwo);
+        $this->assertEquals("", $sellertaxreprlinethree);
+        $this->assertEquals("", $sellertaxreprpostcode);
+        $this->assertEquals("", $sellertaxreprcity);
+        $this->assertEquals("", $sellertaxreprcountry);
+        $this->assertIsArray($sellertaxreprsubdivision);
+        $this->assertEmpty($sellertaxreprsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testDocumentSellerTaxRepresentativeLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeLegalOrganisation($sellertaxreprlegalorgid, $sellertaxreprlegalorgtype, $sellertaxreprlegalorgname);
+        $this->assertEquals("", $sellertaxreprlegalorgid);
+        $this->assertEquals("", $sellertaxreprlegalorgtype);
+        $this->assertEquals("", $sellertaxreprlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerTaxRepresentativeContact
+     */
+    public function testDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerTaxRepresentativeContact());
+        $this->assertFalse(self::$document->nextDocumentSellerTaxRepresentativeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerTaxRepresentativeContact($sellertaxreprcontactpersonname, $sellertaxreprcontactdepartmentname, $sellertaxreprcontactphoneno, $sellertaxreprcontactfaxno, $sellertaxreprcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipTo
+     */
+    public function testDocumentShipToGeneral(): void
+    {
+        self::$document->getDocumentShipTo($shiptoname, $shiptoids, $shiptodescription);
+        $this->assertEquals("", $shiptoname);
+        $this->assertIsArray($shiptoids);
+        $this->assertEmpty($shiptoids);
+        $this->assertEquals("", $shiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToGlobalId
+     */
+    public function testDocumentShipToGlobalId(): void
+    {
+        self::$document->getDocumentShipToGlobalId($shiptoglobalids);
+        $this->assertIsArray($shiptoglobalids);
+        $this->assertEmpty($shiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToTaxRegistration
+     */
+    public function testDocumentShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentShipToTaxRegistration($shiptotaxreg);
+        $this->assertIsArray($shiptotaxreg);
+        $this->assertEmpty($shiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToAddress
+     */
+    public function testDocumentShipToAddress(): void
+    {
+        self::$document->getDocumentShipToAddress($shiptolineone, $shiptolinetwo, $shiptolinethree, $shiptopostcode, $shiptocity, $shiptocountry, $shiptosubdivision);
+        $this->assertEquals("", $shiptolineone);
+        $this->assertEquals("", $shiptolinetwo);
+        $this->assertEquals("", $shiptolinethree);
+        $this->assertEquals("", $shiptopostcode);
+        $this->assertEquals("", $shiptocity);
+        $this->assertEquals("", $shiptocountry);
+        $this->assertIsArray($shiptosubdivision);
+        $this->assertEmpty($shiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToLegalOrganisation
+     */
+    public function testDocumentShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentShipToLegalOrganisation($shiptolegalorgid, $shiptolegalorgtype, $shiptolegalorgname);
+        $this->assertEquals("", $shiptolegalorgid);
+        $this->assertEquals("", $shiptolegalorgtype);
+        $this->assertEquals("", $shiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipToContact
+     */
+    public function testDocumentShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipToContact());
+        $this->assertFalse(self::$document->nextDocumentShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipToContact($shiptocontactpersonname, $shiptocontactdepartmentname, $shiptocontactphoneno, $shiptocontactfaxno, $shiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipTo
+     */
+    public function testDocumentUltimateShipToGeneral(): void
+    {
+        self::$document->getDocumentUltimateShipTo($ultimateshiptoname, $ultimateshiptoids, $ultimateshiptodescription);
+        $this->assertEquals("", $ultimateshiptoname);
+        $this->assertIsArray($ultimateshiptoids);
+        $this->assertEmpty($ultimateshiptoids);
+        $this->assertEquals("", $ultimateshiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToGlobalId
+     */
+    public function testDocumentUltimateShipToGlobalId(): void
+    {
+        self::$document->getDocumentUltimateShipToGlobalId($ultimateshiptoglobalids);
+        $this->assertIsArray($ultimateshiptoglobalids);
+        $this->assertEmpty($ultimateshiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToTaxRegistration
+     */
+    public function testDocumentUltimateShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentUltimateShipToTaxRegistration($ultimateshiptotaxreg);
+        $this->assertIsArray($ultimateshiptotaxreg);
+        $this->assertEmpty($ultimateshiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToAddress
+     */
+    public function testDocumentUltimateShipToAddress(): void
+    {
+        self::$document->getDocumentUltimateShipToAddress($ultimateshiptolineone, $ultimateshiptolinetwo, $ultimateshiptolinethree, $ultimateshiptopostcode, $ultimateshiptocity, $ultimateshiptocountry, $ultimateshiptosubdivision);
+        $this->assertEquals("", $ultimateshiptolineone);
+        $this->assertEquals("", $ultimateshiptolinetwo);
+        $this->assertEquals("", $ultimateshiptolinethree);
+        $this->assertEquals("", $ultimateshiptopostcode);
+        $this->assertEquals("", $ultimateshiptocity);
+        $this->assertEquals("", $ultimateshiptocountry);
+        $this->assertIsArray($ultimateshiptosubdivision);
+        $this->assertEmpty($ultimateshiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToLegalOrganisation
+     */
+    public function testDocumentUltimateShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentUltimateShipToLegalOrganisation($ultimateshiptolegalorgid, $ultimateshiptolegalorgtype, $ultimateshiptolegalorgname);
+        $this->assertEquals("", $ultimateshiptolegalorgid);
+        $this->assertEquals("", $ultimateshiptolegalorgtype);
+        $this->assertEquals("", $ultimateshiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateShipToContact
+     */
+    public function testDocumentUltimateShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFrom
+     */
+    public function testDocumentShipFromGeneral(): void
+    {
+        self::$document->getDocumentShipFrom($shipfromname, $shipfromids, $shipfromdescription);
+        $this->assertEquals("", $shipfromname);
+        $this->assertIsArray($shipfromids);
+        $this->assertEmpty($shipfromids);
+        $this->assertEquals("", $shipfromdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromGlobalId
+     */
+    public function testDocumentShipFromGlobalId(): void
+    {
+        self::$document->getDocumentShipFromGlobalId($shipfromglobalids);
+        $this->assertIsArray($shipfromglobalids);
+        $this->assertEmpty($shipfromglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromTaxRegistration
+     */
+    public function testDocumentShipFromTaxRegistration(): void
+    {
+        self::$document->getDocumentShipFromTaxRegistration($shipfromtaxreg);
+        $this->assertIsArray($shipfromtaxreg);
+        $this->assertEmpty($shipfromtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromAddress
+     */
+    public function testDocumentShipFromAddress(): void
+    {
+        self::$document->getDocumentShipFromAddress($shipfromlineone, $shipfromlinetwo, $shipfromlinethree, $shipfrompostcode, $shipfromcity, $shipfromcountry, $shipfromsubdivision);
+        $this->assertEquals("", $shipfromlineone);
+        $this->assertEquals("", $shipfromlinetwo);
+        $this->assertEquals("", $shipfromlinethree);
+        $this->assertEquals("", $shipfrompostcode);
+        $this->assertEquals("", $shipfromcity);
+        $this->assertEquals("", $shipfromcountry);
+        $this->assertIsArray($shipfromsubdivision);
+        $this->assertEmpty($shipfromsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromLegalOrganisation
+     */
+    public function testDocumentShipFromLegalOrganization(): void
+    {
+        self::$document->getDocumentShipFromLegalOrganisation($shipfromlegalorgid, $shipfromlegalorgtype, $shipfromlegalorgname);
+        $this->assertEquals("", $shipfromlegalorgid);
+        $this->assertEquals("", $shipfromlegalorgtype);
+        $this->assertEquals("", $shipfromlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipFromContact
+     */
+    public function testDocumentShipFromContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicer
+     */
+    public function testDocumentInvoicerGeneral(): void
+    {
+        self::$document->getDocumentInvoicer($invoicername, $invoicerids, $invoicerdescription);
+        $this->assertEquals("", $invoicername);
+        $this->assertIsArray($invoicerids);
+        $this->assertEmpty($invoicerids);
+        $this->assertEquals("", $invoicerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerGlobalId
+     */
+    public function testDocumentInvoicerGlobalId(): void
+    {
+        self::$document->getDocumentInvoicerGlobalId($invoicerglobalids);
+        $this->assertIsArray($invoicerglobalids);
+        $this->assertEmpty($invoicerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerTaxRegistration
+     */
+    public function testDocumentInvoicerTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoicerTaxRegistration($invoicertaxreg);
+        $this->assertIsArray($invoicertaxreg);
+        $this->assertEmpty($invoicertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerAddress
+     */
+    public function testDocumentInvoicerAddress(): void
+    {
+        self::$document->getDocumentInvoicerAddress($invoicerlineone, $invoicerlinetwo, $invoicerlinethree, $invoicerpostcode, $invoicercity, $invoicercountry, $invoicersubdivision);
+        $this->assertEquals("", $invoicerlineone);
+        $this->assertEquals("", $invoicerlinetwo);
+        $this->assertEquals("", $invoicerlinethree);
+        $this->assertEquals("", $invoicerpostcode);
+        $this->assertEquals("", $invoicercity);
+        $this->assertEquals("", $invoicercountry);
+        $this->assertIsArray($invoicersubdivision);
+        $this->assertEmpty($invoicersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerLegalOrganisation
+     */
+    public function testDocumentInvoicerLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoicerLegalOrganisation($invoicerlegalorgid, $invoicerlegalorgtype, $invoicerlegalorgname);
+        $this->assertEquals("", $invoicerlegalorgid);
+        $this->assertEquals("", $invoicerlegalorgtype);
+        $this->assertEquals("", $invoicerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoicerContact
+     */
+    public function testDocumentInvoicerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicee
+     */
+    public function testDocumentInvoiceeGeneral(): void
+    {
+        self::$document->getDocumentInvoicee($invoiceename, $invoiceeids, $invoiceedescription);
+        $this->assertEquals("", $invoiceename);
+        $this->assertIsArray($invoiceeids);
+        $this->assertEmpty($invoiceeids);
+        $this->assertEquals("", $invoiceedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeGlobalId
+     */
+    public function testDocumentInvoiceeGlobalId(): void
+    {
+        self::$document->getDocumentInvoiceeGlobalId($invoiceeglobalids);
+        $this->assertIsArray($invoiceeglobalids);
+        $this->assertEmpty($invoiceeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeTaxRegistration
+     */
+    public function testDocumentInvoiceeTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoiceeTaxRegistration($invoiceetaxreg);
+        $this->assertIsArray($invoiceetaxreg);
+        $this->assertEmpty($invoiceetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeAddress
+     */
+    public function testDocumentInvoiceeAddress(): void
+    {
+        self::$document->getDocumentInvoiceeAddress($invoiceelineone, $invoiceelinetwo, $invoiceelinethree, $invoiceepostcode, $invoiceecity, $invoiceecountry, $invoiceesubdivision);
+        $this->assertEquals("", $invoiceelineone);
+        $this->assertEquals("", $invoiceelinetwo);
+        $this->assertEquals("", $invoiceelinethree);
+        $this->assertEquals("", $invoiceepostcode);
+        $this->assertEquals("", $invoiceecity);
+        $this->assertEquals("", $invoiceecountry);
+        $this->assertIsArray($invoiceesubdivision);
+        $this->assertEmpty($invoiceesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeLegalOrganisation
+     */
+    public function testDocumentInvoiceeLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoiceeLegalOrganisation($invoiceelegalorgid, $invoiceelegalorgtype, $invoiceelegalorgname);
+        $this->assertEquals("", $invoiceelegalorgid);
+        $this->assertEquals("", $invoiceelegalorgtype);
+        $this->assertEquals("", $invoiceelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoiceeContact
+     */
+    public function testDocumentInvoiceeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayee
+     */
+    public function testDocumentPayeeGeneral(): void
+    {
+        self::$document->getDocumentPayee($payeename, $payeeids, $payeedescription);
+        $this->assertEquals("", $payeename);
+        $this->assertIsArray($payeeids);
+        $this->assertEmpty($payeeids);
+        $this->assertEquals("", $payeedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeGlobalId
+     */
+    public function testDocumentPayeeGlobalId(): void
+    {
+        self::$document->getDocumentPayeeGlobalId($payeeglobalids);
+        $this->assertIsArray($payeeglobalids);
+        $this->assertEmpty($payeeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeTaxRegistration
+     */
+    public function testDocumentPayeeTaxRegistration(): void
+    {
+        self::$document->getDocumentPayeeTaxRegistration($payeetaxreg);
+        $this->assertIsArray($payeetaxreg);
+        $this->assertEmpty($payeetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeAddress
+     */
+    public function testDocumentPayeeAddress(): void
+    {
+        self::$document->getDocumentPayeeAddress($payeelineone, $payeelinetwo, $payeelinethree, $payeepostcode, $payeecity, $payeecountry, $payeesubdivision);
+        $this->assertEquals("", $payeelineone);
+        $this->assertEquals("", $payeelinetwo);
+        $this->assertEquals("", $payeelinethree);
+        $this->assertEquals("", $payeepostcode);
+        $this->assertEquals("", $payeecity);
+        $this->assertEquals("", $payeecountry);
+        $this->assertIsArray($payeesubdivision);
+        $this->assertEmpty($payeesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeLegalOrganisation
+     */
+    public function testDocumentPayeeLegalOrganization(): void
+    {
+        self::$document->getDocumentPayeeLegalOrganisation($payeelegalorgid, $payeelegalorgtype, $payeelegalorgname);
+        $this->assertEquals("", $payeelegalorgid);
+        $this->assertEquals("", $payeelegalorgtype);
+        $this->assertEquals("", $payeelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPayeeContact
+     */
+    public function testDocumentPayeeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUser
+     */
+    public function testDocumentProductEndUserGeneral(): void
+    {
+        self::$document->getDocumentProductEndUser($producendusername, $producenduserids, $producenduserdescription);
+        $this->assertEquals("", $producendusername);
+        $this->assertIsArray($producenduserids);
+        $this->assertArrayNotHasKey(0, $producenduserids);
+        $this->assertArrayNotHasKey(1, $producenduserids);
+        $this->assertEquals("", $producenduserdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserGlobalId
+     */
+    public function testDocumentProductEndUserGlobalId(): void
+    {
+        self::$document->getDocumentProductEndUserGlobalId($producenduserglobalids);
+        $this->assertIsArray($producenduserglobalids);
+        $this->assertArrayNotHasKey("0088", $producenduserglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserTaxRegistration
+     */
+    public function testDocumentProductEndUserTaxRegistration(): void
+    {
+        self::$document->getDocumentProductEndUserTaxRegistration($producendusertaxreg);
+        $this->assertIsArray($producendusertaxreg);
+        $this->assertArrayNotHasKey("VA", $producendusertaxreg);
+        $this->assertArrayNotHasKey("FC", $producendusertaxreg);
+        $this->assertArrayNotHasKey(0, $producendusertaxreg);
+        $this->assertArrayNotHasKey(1, $producendusertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $producendusertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserAddress
+     */
+    public function testDocumentProductEndUserAddress(): void
+    {
+        self::$document->getDocumentProductEndUserAddress($producenduserlineone, $producenduserlinetwo, $producenduserlinethree, $producenduserpostcode, $producendusercity, $producendusercountry, $producendusersubdivision);
+        $this->assertEquals("", $producenduserlineone);
+        $this->assertEquals("", $producenduserlinetwo);
+        $this->assertEquals("", $producenduserlinethree);
+        $this->assertEquals("", $producenduserpostcode);
+        $this->assertEquals("", $producendusercity);
+        $this->assertEquals("", $producendusercountry);
+        $this->assertIsArray($producendusersubdivision);
+        $this->assertEmpty($producendusersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserLegalOrganisation
+     */
+    public function testDocumentProductEndUserLegalOrganization(): void
+    {
+        self::$document->getDocumentProductEndUserLegalOrganisation($producenduserlegalorgid, $producenduserlegalorgtype, $producenduserlegalorgname);
+        $this->assertEquals("", $producenduserlegalorgid);
+        $this->assertEquals("", $producenduserlegalorgtype);
+        $this->assertEquals("", $producenduserlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentProductEndUserContactContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentProductEndUserContactContact
+     */
+    public function testDocumentProductEndUserContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentProductEndUserContactContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentProductEndUserContact($producendusercontactpersonname, $producendusercontactdepartmentname, $producendusercontactphoneno, $producendusercontactfaxno, $producendusercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentProductEndUserContactContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerOrderReferencedDocument
+     */
+    public function testDocumentSellerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentSellerOrderReferencedDocument($sellerorderrefdocid, $sellerorderrefdocdate);
+        $this->assertEquals("", $sellerorderrefdocid);
+        $this->assertNull($sellerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerOrderReferencedDocument
+     */
+    public function testDocumentBuyerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentBuyerOrderReferencedDocument($buyerorderrefdocid, $buyerorderrefdocdate);
+        $this->assertEquals("", $buyerorderrefdocid);
+        $this->assertNull($buyerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentContractReferencedDocument
+     */
+    public function testDocumentContractReferencedDocument(): void
+    {
+        self::$document->getDocumentContractReferencedDocument($contractrefdocid, $contractrefdocdate);
+        $this->assertEquals("", $contractrefdocid);
+        $this->assertNull($contractrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocuments
+     */
+    public function testDocumentAdditionalReferencedDocuments(): void
+    {
+        self::$document->getDocumentAdditionalReferencedDocuments($additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs);
+        $this->assertEmpty($additionalrefdocs);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProcuringProject
+     */
+    public function testDocumentProcuringProject(): void
+    {
+        self::$document->getDocumentProcuringProject($projectid, $projectname);
+        $this->assertEquals("", $projectid);
+        $this->assertEquals("", $projectname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSupplyChainEvent
+     */
+    public function testDocumentSupplyChainEvent(): void
+    {
+        self::$document->getDocumentSupplyChainEvent($supplychainevent);
+        $this->assertNotNull($supplychainevent);
+        $this->assertInstanceOf("DateTime", $supplychainevent);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180305'))->format('Ymd'), $supplychainevent->format('Ymd'));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDespatchAdviceReferencedDocument
+     */
+    public function testDocumentDespatchAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentDespatchAdviceReferencedDocument($despatchdocid, $despatchdocdate);
+        $this->assertEquals("", $despatchdocid);
+        $this->assertNull($despatchdocdate);
+        $this->assertNotInstanceOf("DateTime", $despatchdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentReceivingAdviceReferencedDocument
+     */
+    public function testDocumentReceivingAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentReceivingAdviceReferencedDocument($recadvid, $recadvdate);
+        $this->assertEquals("", $recadvid);
+        $this->assertNull($recadvdate);
+        $this->assertNotInstanceOf("DateTime", $recadvdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryNoteReferencedDocument
+     */
+    public function testDocumentDeliveryNoteReferencedDocument(): void
+    {
+        self::$document->getDocumentDeliveryNoteReferencedDocument($deliverynoterefdocid, $deliverynoterefdocdate);
+        $this->assertEquals("", $deliverynoterefdocid);
+        $this->assertNull($deliverynoterefdocdate);
+        $this->assertNotInstanceOf("DateTime", $deliverynoterefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBillingPeriod
+     */
+    public function testDocumentBillingPeriod(): void
+    {
+        self::$document->getDocumentBillingPeriod($docbillingperiodstart, $docbillingperiodend);
+        $this->assertNull($docbillingperiodstart);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodstart);
+        $this->assertNull($docbillingperiodend);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodend);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharges
+     */
+    public function testDocumentAllowanceCharges(): void
+    {
+        self::$document->getDocumentAllowanceCharges($docallowancecharge);
+        $this->assertIsArray($docallowancecharge);
+        $this->assertEmpty($docallowancecharge);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerms
+     */
+    public function testDocumentPaymentTerms(): void
+    {
+        self::$document->getDocumentPaymentTerms($docpaymentterms);
+        $this->assertIsArray($docpaymentterms);
+        $this->assertNotEmpty($docpaymentterms);
+        $this->assertArrayHasKey(0, $docpaymentterms);
+        $this->assertIsArray($docpaymentterms[0]);
+        $this->assertArrayHasKey("description", $docpaymentterms[0]);
+        $this->assertArrayHasKey("duedate", $docpaymentterms[0]);
+        $this->assertArrayHasKey("directdebitmandateid", $docpaymentterms[0]);
+        $this->assertArrayHasKey("partialpaymentamount", $docpaymentterms[0]);
+        $this->assertEquals("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018", $docpaymentterms[0]["description"]);
+        $this->assertNull($docpaymentterms[0]["duedate"]);
+        $this->assertNotInstanceOf("DateTime", $docpaymentterms[0]["duedate"]);
+        $this->assertEquals("", $docpaymentterms[0]["directdebitmandateid"]);
+        $this->assertEquals(0.0, $docpaymentterms[0]["partialpaymentamount"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryTerms
+     */
+    public function testDocumentDeliveryTerms(): void
+    {
+        self::$document->getDocumentDeliveryTerms($devtermcode);
+        $this->assertEquals("", $devtermcode);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument
+     */
+    public function testDocumentAdditionalReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentAdditionalReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testDocumentUltimateCustomerOrderReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateCustomerOrderReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentUltimateCustomerOrderReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentPaymentMeansLoop(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentMeans
+     */
+    public function testGetDocumentPaymentMeans(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        self::$document->getDocumentPaymentMeans($typeCode, $information, $cardType, $cardId, $cardHolderName, $buyerIban, $payeeIban, $payeeAccountName, $payeePropId, $payeeBic);
+        $this->assertEquals("58", $typeCode);
+        $this->assertEquals("", $information);
+        $this->assertEquals("", $cardType);
+        $this->assertEquals("", $cardId);
+        $this->assertEquals("", $cardHolderName);
+        $this->assertEquals("", $buyerIban);
+        $this->assertEquals("DE5467894567876500", $payeeIban);
+        $this->assertEquals("", $payeeAccountName);
+        $this->assertEquals("", $payeePropId);
+        $this->assertEquals("", $payeeBic);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     */
+    public function testDocumentTaxLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        $this->assertTrue(self::$document->nextDocumentTax());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentTax
+     */
+    public function testDocumentTax(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(275.0, $basisAmount);
+        $this->assertEquals(19.25, $calculatedAmount);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+
+        $this->assertTrue(self::$document->nextDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(198.0, $basisAmount);
+        $this->assertEquals(37.62, $calculatedAmount);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentAllowanceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentLogisticsServiceCharge
+     */
+    public function testtDocumentLogisticsServiceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentLogisticsServiceCharge());
+        $this->assertFalse(self::$document->nextDocumentLogisticsServiceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDiscountTermsFromPaymentTerm
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        self::$document->getDocumentPaymentTerm($termdescription, $termduedate, $termmandate);
+        self::$document->getDiscountTermsFromPaymentTerm($dispercent, $discbasedatetime, $discmeasureval, $discmeasureunit, $discbaseamount, $discamount);
+
+        $this->assertEquals("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018", $termdescription);
+        $this->assertNull($termduedate);
+        $this->assertEquals("", $termmandate);
+        $this->assertEquals(0, $dispercent);
+        $this->assertNull($discbasedatetime);
+        $this->assertEquals(0, $discmeasureval);
+        $this->assertEquals("", $discmeasureunit);
+        $this->assertEquals(0, $discbaseamount);
+        $this->assertEquals(0, $discamount);
+
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     */
+    public function testDocumentPositionLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition(), "has a first position");
+        $this->assertTrue(self::$document->nextDocumentPosition(), "has a second position");
+        $this->assertFalse(self::$document->nextDocumentPosition(), "has no third position");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFirst(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("1", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("TrennblÃ€tter A4", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("TB100A4", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4012345001235", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(9.90, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(9.90, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(20.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(198.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionSecond(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("2", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Joghurt Banane", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("ARNR2", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4000050986428", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(5.50, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(5.50, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(50.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(275.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAdditionalReferencedDocument
+     */
+    public function testDocumentPositionAdditionalReferencedDocument(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPositionAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentPositionAdditionalReferencedDocument());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderExtended2Test.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderExtended2Test.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderExtended2Test.php	(revision 8435)
@@ -0,0 +1,1686 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+
+class ReaderExtended2Test extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/extended_invoice_2.xml");
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getInvoiceObject
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getSerializer
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getObjectHelper
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getProfileDefinitionParameter
+     */
+    public function testDocumentGetters(): void
+    {
+        $this->assertNotNull(self::$document->getInvoiceObject());
+        $this->assertNotNull(self::$document->getSerializer());
+        $this->assertNotNull(self::$document->getObjectHelper());
+        $this->assertEquals('extended', self::$document->getProfileDefinitionParameter('name'));
+        $this->assertEquals('EXTENDED', self::$document->getProfileDefinitionParameter('altname'));
+        $this->assertEquals('urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended', self::$document->getProfileDefinitionParameter('contextparameter'));
+        $this->assertEquals('factur-x.xml', self::$document->getProfileDefinitionParameter('attachmentfilename'));
+        $this->assertEquals('EXTENDED', self::$document->getProfileDefinitionParameter('xmpname'));
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getProfileDefinitionParameter('unknownparameter');
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('F20200027', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20200115'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentNotes
+     */
+    public function testDocumentNotes(): void
+    {
+        self::$document->getDocumentNotes($notes);
+        $this->assertIsArray($notes);
+        $this->assertNotEmpty($notes);
+        $this->assertEquals(2, count($notes));
+        $this->assertArrayHasKey(0, $notes);
+        $this->assertArrayHasKey(1, $notes);
+        $this->assertIsArray($notes[0]);
+        $this->assertNotEmpty($notes[0]);
+        $this->assertArrayHasKey("content", $notes[0]);
+        $this->assertArrayHasKey("subjectcode", $notes[0]);
+        $this->assertArrayHasKey("contentcode", $notes[0]);
+        $this->assertIsArray($notes[1]);
+        $this->assertNotEmpty($notes[1]);
+        $this->assertArrayHasKey("content", $notes[1]);
+        $this->assertArrayHasKey("subjectcode", $notes[1]);
+        $this->assertArrayHasKey("contentcode", $notes[1]);
+        $this->assertEquals("", $notes[0]["contentcode"]);
+        $this->assertEquals("REG", $notes[0]["subjectcode"]);
+        $this->assertEquals("FOURNISSEUR F SARL au capital de 50 000 EUR", $notes[0]["content"]);
+        $this->assertEquals("", $notes[1]["contentcode"]);
+        $this->assertEquals("ABL", $notes[1]["subjectcode"]);
+        $this->assertEquals("RCS MAVILLE 123 456 789", $notes[1]["content"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("", $creditorReferenceID);
+        $this->assertEquals("F20180023BUYER", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsDocumentCopy
+     */
+    public function testDocumentIsCopy(): void
+    {
+        self::$document->getIsDocumentCopy($iscopy);
+        $this->assertFalse($iscopy);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsTestDocument
+     */
+    public function testDocumentIsTestDocument(): void
+    {
+        self::$document->getIsTestDocument($istest);
+        $this->assertFalse($istest);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSummation
+     */
+    public function testDocumentSummation(): void
+    {
+        self::$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+        $this->assertEquals(110.0, $grandTotalAmount);
+        $this->assertEquals(100.0, $duePayableAmount);
+        $this->assertEquals(95.0, $lineTotalAmount);
+        $this->assertEquals(10.0, $chargeTotalAmount);
+        $this->assertEquals(5.0, $allowanceTotalAmount);
+        $this->assertEquals(100.0, $taxBasisTotalAmount);
+        $this->assertEquals(10.0, $taxTotalAmount);
+        $this->assertEquals(0.00, $roundingAmount);
+        $this->assertEquals(10.00, $totalPrepaidAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerReference
+     */
+    public function testGetDocumentBuyerReference(): void
+    {
+        self::$document->getDocumentBuyerReference($buyerReference);
+        $this->assertEquals("SERVEXEC", $buyerReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSeller
+     */
+    public function testDocumentSellerGeneral(): void
+    {
+        self::$document->getDocumentSeller($sellername, $sellerids, $sellerdescription);
+        $this->assertEquals("LE FOURNISSEUR", $sellername);
+        $this->assertIsArray($sellerids);
+        $this->assertArrayNotHasKey(0, $sellerids);
+        $this->assertArrayNotHasKey(1, $sellerids);
+        $this->assertEquals("", $sellerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerGlobalId
+     */
+    public function testDocumentSellerGlobalId(): void
+    {
+        self::$document->getDocumentSellerGlobalId($sellerglobalids);
+        $this->assertIsArray($sellerglobalids);
+        $this->assertArrayHasKey("0088", $sellerglobalids);
+        $this->assertEquals("587451236587", $sellerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRegistration
+     */
+    public function testDocumentSellerTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRegistration($sellertaxreg);
+        $this->assertIsArray($sellertaxreg);
+        $this->assertArrayHasKey("VA", $sellertaxreg);
+        $this->assertArrayNotHasKey("FC", $sellertaxreg);
+        $this->assertArrayNotHasKey(0, $sellertaxreg);
+        $this->assertArrayNotHasKey(1, $sellertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $sellertaxreg);
+        $this->assertEquals("FR32123456789", $sellertaxreg["VA"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerAddress
+     */
+    public function testDocumentSellerAddress(): void
+    {
+        self::$document->getDocumentSellerAddress($sellerlineone, $sellerlinetwo, $sellerlinethree, $sellerpostcode, $sellercity, $sellercountry, $sellersubdivision);
+        $this->assertEquals("35 rue d'ici", $sellerlineone);
+        $this->assertEquals("Seller line 2", $sellerlinetwo);
+        $this->assertEquals("", $sellerlinethree);
+        $this->assertEquals("75018", $sellerpostcode);
+        $this->assertEquals("PARIS", $sellercity);
+        $this->assertEquals("FR", $sellercountry);
+        $this->assertIsArray($sellersubdivision);
+        $this->assertEmpty($sellersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerLegalOrganisation
+     */
+    public function testDocumentSellerLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerLegalOrganisation($sellerlegalorgid, $sellerlegalorgtype, $sellerlegalorgname);
+        $this->assertEquals("12345678900014", $sellerlegalorgid);
+        $this->assertEquals("0002", $sellerlegalorgtype);
+        $this->assertEquals("SELLER TRADE NAME", $sellerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerContact
+     */
+    public function testDocumentSellerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerContact());
+        $this->assertFalse(self::$document->nextDocumentSellerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerContact($sellercontactpersonname, $sellercontactdepartmentname, $sellercontactphoneno, $sellercontactfaxno, $sellercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyer
+     */
+    public function testDocumentBuyerGeneral(): void
+    {
+        self::$document->getDocumentBuyer($buyername, $buyerids, $buyerdescription);
+        $this->assertEquals("LE CLIENT", $buyername);
+        $this->assertIsArray($buyerids);
+        $this->assertArrayNotHasKey(0, $buyerids);
+        $this->assertArrayNotHasKey(1, $buyerids);
+        $this->assertEquals("", $buyerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerGlobalId
+     */
+    public function testDocumentBuyerGlobalId(): void
+    {
+        self::$document->getDocumentBuyerGlobalId($buyerglobalids);
+        $this->assertIsArray($buyerglobalids);
+        $this->assertArrayHasKey("0088", $buyerglobalids);
+        $this->assertEquals("3654789851", $buyerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerTaxRegistration
+     */
+    public function testDocumentBuyerTaxRegistration(): void
+    {
+        self::$document->getDocumentBuyerTaxRegistration($buyertaxreg);
+        $this->assertIsArray($buyertaxreg);
+        $this->assertArrayHasKey("VA", $buyertaxreg);
+        $this->assertArrayNotHasKey("FC", $buyertaxreg);
+        $this->assertArrayNotHasKey(0, $buyertaxreg);
+        $this->assertArrayNotHasKey(1, $buyertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $buyertaxreg);
+        $this->assertEquals("FR 05 987 654 321", $buyertaxreg["VA"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerAddress
+     */
+    public function testDocumentBuyerAddress(): void
+    {
+        self::$document->getDocumentBuyerAddress($buyerlineone, $buyerlinetwo, $buyerlinethree, $buyerpostcode, $buyercity, $buyercountry, $buyersubdivision);
+        $this->assertEquals("58 rue de la mer", $buyerlineone);
+        $this->assertEquals("Buyer line 2", $buyerlinetwo);
+        $this->assertEquals("", $buyerlinethree);
+        $this->assertEquals("06000", $buyerpostcode);
+        $this->assertEquals("NICE", $buyercity);
+        $this->assertEquals("FR", $buyercountry);
+        $this->assertIsArray($buyersubdivision);
+        $this->assertEmpty($buyersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerLegalOrganisation
+     */
+    public function testDocumentBuyerLegalOrganization(): void
+    {
+        self::$document->getDocumentBuyerLegalOrganisation($buyerlegalorgid, $buyerlegalorgtype, $buyerlegalorgname);
+        $this->assertEquals("98765432100029", $buyerlegalorgid);
+        $this->assertEquals("0002", $buyerlegalorgtype);
+        $this->assertEquals("", $buyerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentBuyerContact
+     */
+    public function testDocumentBuyerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentBuyerContact());
+        $this->assertFalse(self::$document->nextDocumentBuyerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentBuyerContact($buyercontactpersonname, $buyercontactdepartmentname, $buyercontactphoneno, $buyercontactfaxno, $buyercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentative
+     */
+    public function testDocumentSellerTaxRepresentativeGeneral(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentative($sellertaxreprname, $sellertaxreprids, $sellertaxreprdescription);
+        $this->assertEquals("", $sellertaxreprname);
+        $this->assertIsArray($sellertaxreprids);
+        $this->assertEmpty($sellertaxreprids);
+        $this->assertEquals("", $sellertaxreprdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeGlobalId($sellertaxreprglobalids);
+        $this->assertIsArray($sellertaxreprglobalids);
+        $this->assertEmpty($sellertaxreprglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeTaxRegistration($sellertaxreprtaxreg);
+        $this->assertIsArray($sellertaxreprtaxreg);
+        $this->assertEmpty($sellertaxreprtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeAddress
+     */
+    public function testDocumentSellerTaxRepresentativeAddress(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeAddress($sellertaxreprlineone, $sellertaxreprlinetwo, $sellertaxreprlinethree, $sellertaxreprpostcode, $sellertaxreprcity, $sellertaxreprcountry, $sellertaxreprsubdivision);
+        $this->assertEquals("", $sellertaxreprlineone);
+        $this->assertEquals("", $sellertaxreprlinetwo);
+        $this->assertEquals("", $sellertaxreprlinethree);
+        $this->assertEquals("", $sellertaxreprpostcode);
+        $this->assertEquals("", $sellertaxreprcity);
+        $this->assertEquals("", $sellertaxreprcountry);
+        $this->assertIsArray($sellertaxreprsubdivision);
+        $this->assertEmpty($sellertaxreprsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testDocumentSellerTaxRepresentativeLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeLegalOrganisation($sellertaxreprlegalorgid, $sellertaxreprlegalorgtype, $sellertaxreprlegalorgname);
+        $this->assertEquals("", $sellertaxreprlegalorgid);
+        $this->assertEquals("", $sellertaxreprlegalorgtype);
+        $this->assertEquals("", $sellertaxreprlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerTaxRepresentativeContact
+     */
+    public function testDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerTaxRepresentativeContact());
+        $this->assertFalse(self::$document->nextDocumentSellerTaxRepresentativeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerTaxRepresentativeContact($sellertaxreprcontactpersonname, $sellertaxreprcontactdepartmentname, $sellertaxreprcontactphoneno, $sellertaxreprcontactfaxno, $sellertaxreprcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipTo
+     */
+    public function testDocumentShipToGeneral(): void
+    {
+        self::$document->getDocumentShipTo($shiptoname, $shiptoids, $shiptodescription);
+        $this->assertEquals("DEL Name", $shiptoname);
+        $this->assertIsArray($shiptoids);
+        $this->assertEmpty($shiptoids);
+        $this->assertEquals("", $shiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToGlobalId
+     */
+    public function testDocumentShipToGlobalId(): void
+    {
+        self::$document->getDocumentShipToGlobalId($shiptoglobalids);
+        $this->assertIsArray($shiptoglobalids);
+        $this->assertArrayHasKey("0088", $shiptoglobalids);
+        $this->assertEquals("3654789851", $shiptoglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToTaxRegistration
+     */
+    public function testDocumentShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentShipToTaxRegistration($shiptotaxreg);
+        $this->assertIsArray($shiptotaxreg);
+        $this->assertEmpty($shiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToAddress
+     */
+    public function testDocumentShipToAddress(): void
+    {
+        self::$document->getDocumentShipToAddress($shiptolineone, $shiptolinetwo, $shiptolinethree, $shiptopostcode, $shiptocity, $shiptocountry, $shiptosubdivision);
+        $this->assertEquals("DEL 58 rue de la mer", $shiptolineone);
+        $this->assertEquals("DEL line 2", $shiptolinetwo);
+        $this->assertEquals("", $shiptolinethree);
+        $this->assertEquals("06000", $shiptopostcode);
+        $this->assertEquals("NICE", $shiptocity);
+        $this->assertEquals("FR", $shiptocountry);
+        $this->assertIsArray($shiptosubdivision);
+        $this->assertEmpty($shiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToLegalOrganisation
+     */
+    public function testDocumentShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentShipToLegalOrganisation($shiptolegalorgid, $shiptolegalorgtype, $shiptolegalorgname);
+        $this->assertEquals("", $shiptolegalorgid);
+        $this->assertEquals("", $shiptolegalorgtype);
+        $this->assertEquals("", $shiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipToContact
+     */
+    public function testDocumentShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipToContact());
+        $this->assertFalse(self::$document->nextDocumentShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipToContact($shiptocontactpersonname, $shiptocontactdepartmentname, $shiptocontactphoneno, $shiptocontactfaxno, $shiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipTo
+     */
+    public function testDocumentUltimateShipToGeneral(): void
+    {
+        self::$document->getDocumentUltimateShipTo($ultimateshiptoname, $ultimateshiptoids, $ultimateshiptodescription);
+        $this->assertEquals("", $ultimateshiptoname);
+        $this->assertIsArray($ultimateshiptoids);
+        $this->assertEmpty($ultimateshiptoids);
+        $this->assertEquals("", $ultimateshiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToGlobalId
+     */
+    public function testDocumentUltimateShipToGlobalId(): void
+    {
+        self::$document->getDocumentUltimateShipToGlobalId($ultimateshiptoglobalids);
+        $this->assertIsArray($ultimateshiptoglobalids);
+        $this->assertEmpty($ultimateshiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToTaxRegistration
+     */
+    public function testDocumentUltimateShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentUltimateShipToTaxRegistration($ultimateshiptotaxreg);
+        $this->assertIsArray($ultimateshiptotaxreg);
+        $this->assertEmpty($ultimateshiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToAddress
+     */
+    public function testDocumentUltimateShipToAddress(): void
+    {
+        self::$document->getDocumentUltimateShipToAddress($ultimateshiptolineone, $ultimateshiptolinetwo, $ultimateshiptolinethree, $ultimateshiptopostcode, $ultimateshiptocity, $ultimateshiptocountry, $ultimateshiptosubdivision);
+        $this->assertEquals("", $ultimateshiptolineone);
+        $this->assertEquals("", $ultimateshiptolinetwo);
+        $this->assertEquals("", $ultimateshiptolinethree);
+        $this->assertEquals("", $ultimateshiptopostcode);
+        $this->assertEquals("", $ultimateshiptocity);
+        $this->assertEquals("", $ultimateshiptocountry);
+        $this->assertIsArray($ultimateshiptosubdivision);
+        $this->assertEmpty($ultimateshiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToLegalOrganisation
+     */
+    public function testDocumentUltimateShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentUltimateShipToLegalOrganisation($ultimateshiptolegalorgid, $ultimateshiptolegalorgtype, $ultimateshiptolegalorgname);
+        $this->assertEquals("", $ultimateshiptolegalorgid);
+        $this->assertEquals("", $ultimateshiptolegalorgtype);
+        $this->assertEquals("", $ultimateshiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateShipToContact
+     */
+    public function testDocumentUltimateShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFrom
+     */
+    public function testDocumentShipFromGeneral(): void
+    {
+        self::$document->getDocumentShipFrom($shipfromname, $shipfromids, $shipfromdescription);
+        $this->assertEquals("", $shipfromname);
+        $this->assertIsArray($shipfromids);
+        $this->assertEmpty($shipfromids);
+        $this->assertEquals("", $shipfromdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromGlobalId
+     */
+    public function testDocumentShipFromGlobalId(): void
+    {
+        self::$document->getDocumentShipFromGlobalId($shipfromglobalids);
+        $this->assertIsArray($shipfromglobalids);
+        $this->assertEmpty($shipfromglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromTaxRegistration
+     */
+    public function testDocumentShipFromTaxRegistration(): void
+    {
+        self::$document->getDocumentShipFromTaxRegistration($shipfromtaxreg);
+        $this->assertIsArray($shipfromtaxreg);
+        $this->assertEmpty($shipfromtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromAddress
+     */
+    public function testDocumentShipFromAddress(): void
+    {
+        self::$document->getDocumentShipFromAddress($shipfromlineone, $shipfromlinetwo, $shipfromlinethree, $shipfrompostcode, $shipfromcity, $shipfromcountry, $shipfromsubdivision);
+        $this->assertEquals("", $shipfromlineone);
+        $this->assertEquals("", $shipfromlinetwo);
+        $this->assertEquals("", $shipfromlinethree);
+        $this->assertEquals("", $shipfrompostcode);
+        $this->assertEquals("", $shipfromcity);
+        $this->assertEquals("", $shipfromcountry);
+        $this->assertIsArray($shipfromsubdivision);
+        $this->assertEmpty($shipfromsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromLegalOrganisation
+     */
+    public function testDocumentShipFromLegalOrganization(): void
+    {
+        self::$document->getDocumentShipFromLegalOrganisation($shipfromlegalorgid, $shipfromlegalorgtype, $shipfromlegalorgname);
+        $this->assertEquals("", $shipfromlegalorgid);
+        $this->assertEquals("", $shipfromlegalorgtype);
+        $this->assertEquals("", $shipfromlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipFromContact
+     */
+    public function testDocumentShipFromContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicer
+     */
+    public function testDocumentInvoicerGeneral(): void
+    {
+        self::$document->getDocumentInvoicer($invoicername, $invoicerids, $invoicerdescription);
+        $this->assertEquals("", $invoicername);
+        $this->assertIsArray($invoicerids);
+        $this->assertEmpty($invoicerids);
+        $this->assertEquals("", $invoicerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerGlobalId
+     */
+    public function testDocumentInvoicerGlobalId(): void
+    {
+        self::$document->getDocumentInvoicerGlobalId($invoicerglobalids);
+        $this->assertIsArray($invoicerglobalids);
+        $this->assertEmpty($invoicerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerTaxRegistration
+     */
+    public function testDocumentInvoicerTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoicerTaxRegistration($invoicertaxreg);
+        $this->assertIsArray($invoicertaxreg);
+        $this->assertEmpty($invoicertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerAddress
+     */
+    public function testDocumentInvoicerAddress(): void
+    {
+        self::$document->getDocumentInvoicerAddress($invoicerlineone, $invoicerlinetwo, $invoicerlinethree, $invoicerpostcode, $invoicercity, $invoicercountry, $invoicersubdivision);
+        $this->assertEquals("", $invoicerlineone);
+        $this->assertEquals("", $invoicerlinetwo);
+        $this->assertEquals("", $invoicerlinethree);
+        $this->assertEquals("", $invoicerpostcode);
+        $this->assertEquals("", $invoicercity);
+        $this->assertEquals("", $invoicercountry);
+        $this->assertIsArray($invoicersubdivision);
+        $this->assertEmpty($invoicersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerLegalOrganisation
+     */
+    public function testDocumentInvoicerLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoicerLegalOrganisation($invoicerlegalorgid, $invoicerlegalorgtype, $invoicerlegalorgname);
+        $this->assertEquals("", $invoicerlegalorgid);
+        $this->assertEquals("", $invoicerlegalorgtype);
+        $this->assertEquals("", $invoicerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoicerContact
+     */
+    public function testDocumentInvoicerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicee
+     */
+    public function testDocumentInvoiceeGeneral(): void
+    {
+        self::$document->getDocumentInvoicee($invoiceename, $invoiceeids, $invoiceedescription);
+        $this->assertEquals("", $invoiceename);
+        $this->assertIsArray($invoiceeids);
+        $this->assertEmpty($invoiceeids);
+        $this->assertEquals("", $invoiceedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeGlobalId
+     */
+    public function testDocumentInvoiceeGlobalId(): void
+    {
+        self::$document->getDocumentInvoiceeGlobalId($invoiceeglobalids);
+        $this->assertIsArray($invoiceeglobalids);
+        $this->assertEmpty($invoiceeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeTaxRegistration
+     */
+    public function testDocumentInvoiceeTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoiceeTaxRegistration($invoiceetaxreg);
+        $this->assertIsArray($invoiceetaxreg);
+        $this->assertEmpty($invoiceetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeAddress
+     */
+    public function testDocumentInvoiceeAddress(): void
+    {
+        self::$document->getDocumentInvoiceeAddress($invoiceelineone, $invoiceelinetwo, $invoiceelinethree, $invoiceepostcode, $invoiceecity, $invoiceecountry, $invoiceesubdivision);
+        $this->assertEquals("", $invoiceelineone);
+        $this->assertEquals("", $invoiceelinetwo);
+        $this->assertEquals("", $invoiceelinethree);
+        $this->assertEquals("", $invoiceepostcode);
+        $this->assertEquals("", $invoiceecity);
+        $this->assertEquals("", $invoiceecountry);
+        $this->assertIsArray($invoiceesubdivision);
+        $this->assertEmpty($invoiceesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeLegalOrganisation
+     */
+    public function testDocumentInvoiceeLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoiceeLegalOrganisation($invoiceelegalorgid, $invoiceelegalorgtype, $invoiceelegalorgname);
+        $this->assertEquals("", $invoiceelegalorgid);
+        $this->assertEquals("", $invoiceelegalorgtype);
+        $this->assertEquals("", $invoiceelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoiceeContact
+     */
+    public function testDocumentInvoiceeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayee
+     */
+    public function testDocumentPayeeGeneral(): void
+    {
+        self::$document->getDocumentPayee($payeename, $payeeids, $payeedescription);
+        $this->assertEquals("", $payeename);
+        $this->assertIsArray($payeeids);
+        $this->assertEmpty($payeeids);
+        $this->assertEquals("", $payeedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeGlobalId
+     */
+    public function testDocumentPayeeGlobalId(): void
+    {
+        self::$document->getDocumentPayeeGlobalId($payeeglobalids);
+        $this->assertIsArray($payeeglobalids);
+        $this->assertEmpty($payeeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeTaxRegistration
+     */
+    public function testDocumentPayeeTaxRegistration(): void
+    {
+        self::$document->getDocumentPayeeTaxRegistration($payeetaxreg);
+        $this->assertIsArray($payeetaxreg);
+        $this->assertEmpty($payeetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeAddress
+     */
+    public function testDocumentPayeeAddress(): void
+    {
+        self::$document->getDocumentPayeeAddress($payeelineone, $payeelinetwo, $payeelinethree, $payeepostcode, $payeecity, $payeecountry, $payeesubdivision);
+        $this->assertEquals("", $payeelineone);
+        $this->assertEquals("", $payeelinetwo);
+        $this->assertEquals("", $payeelinethree);
+        $this->assertEquals("", $payeepostcode);
+        $this->assertEquals("", $payeecity);
+        $this->assertEquals("", $payeecountry);
+        $this->assertIsArray($payeesubdivision);
+        $this->assertEmpty($payeesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeLegalOrganisation
+     */
+    public function testDocumentPayeeLegalOrganization(): void
+    {
+        self::$document->getDocumentPayeeLegalOrganisation($payeelegalorgid, $payeelegalorgtype, $payeelegalorgname);
+        $this->assertEquals("", $payeelegalorgid);
+        $this->assertEquals("", $payeelegalorgtype);
+        $this->assertEquals("", $payeelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPayeeContact
+     */
+    public function testDocumentPayeeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUser
+     */
+    public function testDocumentProductEndUserGeneral(): void
+    {
+        self::$document->getDocumentProductEndUser($producendusername, $producenduserids, $producenduserdescription);
+        $this->assertEquals("", $producendusername);
+        $this->assertIsArray($producenduserids);
+        $this->assertArrayNotHasKey(0, $producenduserids);
+        $this->assertArrayNotHasKey(1, $producenduserids);
+        $this->assertEquals("", $producenduserdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserGlobalId
+     */
+    public function testDocumentProductEndUserGlobalId(): void
+    {
+        self::$document->getDocumentProductEndUserGlobalId($producenduserglobalids);
+        $this->assertIsArray($producenduserglobalids);
+        $this->assertArrayNotHasKey("0088", $producenduserglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserTaxRegistration
+     */
+    public function testDocumentProductEndUserTaxRegistration(): void
+    {
+        self::$document->getDocumentProductEndUserTaxRegistration($producendusertaxreg);
+        $this->assertIsArray($producendusertaxreg);
+        $this->assertArrayNotHasKey("VA", $producendusertaxreg);
+        $this->assertArrayNotHasKey("FC", $producendusertaxreg);
+        $this->assertArrayNotHasKey(0, $producendusertaxreg);
+        $this->assertArrayNotHasKey(1, $producendusertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $producendusertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserAddress
+     */
+    public function testDocumentProductEndUserAddress(): void
+    {
+        self::$document->getDocumentProductEndUserAddress($producenduserlineone, $producenduserlinetwo, $producenduserlinethree, $producenduserpostcode, $producendusercity, $producendusercountry, $producendusersubdivision);
+        $this->assertEquals("", $producenduserlineone);
+        $this->assertEquals("", $producenduserlinetwo);
+        $this->assertEquals("", $producenduserlinethree);
+        $this->assertEquals("", $producenduserpostcode);
+        $this->assertEquals("", $producendusercity);
+        $this->assertEquals("", $producendusercountry);
+        $this->assertIsArray($producendusersubdivision);
+        $this->assertEmpty($producendusersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserLegalOrganisation
+     */
+    public function testDocumentProductEndUserLegalOrganization(): void
+    {
+        self::$document->getDocumentProductEndUserLegalOrganisation($producenduserlegalorgid, $producenduserlegalorgtype, $producenduserlegalorgname);
+        $this->assertEquals("", $producenduserlegalorgid);
+        $this->assertEquals("", $producenduserlegalorgtype);
+        $this->assertEquals("", $producenduserlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentProductEndUserContactContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentProductEndUserContactContact
+     */
+    public function testDocumentProductEndUserContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentProductEndUserContactContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentProductEndUserContact($producendusercontactpersonname, $producendusercontactdepartmentname, $producendusercontactphoneno, $producendusercontactfaxno, $producendusercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentProductEndUserContactContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerOrderReferencedDocument
+     */
+    public function testDocumentSellerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentSellerOrderReferencedDocument($sellerorderrefdocid, $sellerorderrefdocdate);
+        $this->assertEquals("SALES REF 2547", $sellerorderrefdocid);
+        $this->assertNull($sellerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerOrderReferencedDocument
+     */
+    public function testDocumentBuyerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentBuyerOrderReferencedDocument($buyerorderrefdocid, $buyerorderrefdocdate);
+        $this->assertEquals("PO201925478", $buyerorderrefdocid);
+        $this->assertNull($buyerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentContractReferencedDocument
+     */
+    public function testDocumentContractReferencedDocument(): void
+    {
+        self::$document->getDocumentContractReferencedDocument($contractrefdocid, $contractrefdocdate);
+        $this->assertEquals("CT2018120802", $contractrefdocid);
+        $this->assertNull($contractrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocuments
+     */
+    public function testDocumentAdditionalReferencedDocuments(): void
+    {
+        self::$document->getDocumentAdditionalReferencedDocuments($additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs);
+        $this->assertNotEmpty($additionalrefdocs);
+        $this->assertArrayHasKey(0, $additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs[0]);
+        $this->assertArrayHasKey("IssuerAssignedID", $additionalrefdocs[0]);
+        $this->assertArrayHasKey("TypeCode", $additionalrefdocs[0]);
+        $this->assertEquals("SUPPort doc", $additionalrefdocs[0]["IssuerAssignedID"]);
+        $this->assertEquals("916", $additionalrefdocs[0]["TypeCode"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProcuringProject
+     */
+    public function testDocumentProcuringProject(): void
+    {
+        self::$document->getDocumentProcuringProject($projectid, $projectname);
+        $this->assertEquals("PROJET2547", $projectid);
+        $this->assertEquals("Project reference", $projectname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSupplyChainEvent
+     */
+    public function testDocumentSupplyChainEvent(): void
+    {
+        self::$document->getDocumentSupplyChainEvent($supplychainevent);
+        $this->assertNotNull($supplychainevent);
+        $this->assertInstanceOf("DateTime", $supplychainevent);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20200115'))->format('Ymd'), $supplychainevent->format('Ymd'));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDespatchAdviceReferencedDocument
+     */
+    public function testDocumentDespatchAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentDespatchAdviceReferencedDocument($despatchdocid, $despatchdocdate);
+        $this->assertEquals("DESPADV002", $despatchdocid);
+        $this->assertNull($despatchdocdate);
+        $this->assertNotInstanceOf("DateTime", $despatchdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentReceivingAdviceReferencedDocument
+     */
+    public function testDocumentReceivingAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentReceivingAdviceReferencedDocument($recadvid, $recadvdate);
+        $this->assertEquals("RECEIV-ADV002", $recadvid);
+        $this->assertNull($recadvdate);
+        $this->assertNotInstanceOf("DateTime", $recadvdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryNoteReferencedDocument
+     */
+    public function testDocumentDeliveryNoteReferencedDocument(): void
+    {
+        self::$document->getDocumentDeliveryNoteReferencedDocument($deliverynoterefdocid, $deliverynoterefdocdate);
+        $this->assertEquals("", $deliverynoterefdocid);
+        $this->assertNull($deliverynoterefdocdate);
+        $this->assertNotInstanceOf("DateTime", $deliverynoterefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBillingPeriod
+     */
+    public function testDocumentBillingPeriod(): void
+    {
+        self::$document->getDocumentBillingPeriod($docbillingperiodstart, $docbillingperiodend);
+        $this->assertInstanceOf("DateTime", $docbillingperiodstart);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20191201'))->format('Ymd'), $docbillingperiodstart->format('Ymd'));
+        $this->assertInstanceOf("DateTime", $docbillingperiodend);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20191231'))->format('Ymd'), $docbillingperiodend->format('Ymd'));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharges
+     */
+    public function testDocumentAllowanceCharges(): void
+    {
+        self::$document->getDocumentAllowanceCharges($docallowancecharge);
+        $this->assertIsArray($docallowancecharge);
+        $this->assertNotEmpty($docallowancecharge);
+        $this->assertEquals(2, count($docallowancecharge));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerms
+     */
+    public function testDocumentPaymentTerms(): void
+    {
+        self::$document->getDocumentPaymentTerms($docpaymentterms);
+        $this->assertIsArray($docpaymentterms);
+        $this->assertNotEmpty($docpaymentterms);
+        $this->assertArrayHasKey(0, $docpaymentterms);
+        $this->assertIsArray($docpaymentterms[0]);
+        $this->assertArrayHasKey("description", $docpaymentterms[0]);
+        $this->assertArrayHasKey("duedate", $docpaymentterms[0]);
+        $this->assertArrayHasKey("directdebitmandateid", $docpaymentterms[0]);
+        $this->assertArrayHasKey("partialpaymentamount", $docpaymentterms[0]);
+        $this->assertEquals("", $docpaymentterms[0]["description"]);
+        $this->assertInstanceOf("DateTime", $docpaymentterms[0]["duedate"]);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20200215'))->format('Ymd'), $docpaymentterms[0]["duedate"]->format('Ymd'));
+        $this->assertEquals("", $docpaymentterms[0]["directdebitmandateid"]);
+        $this->assertEquals(0.0, $docpaymentterms[0]["partialpaymentamount"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryTerms
+     */
+    public function testDocumentDeliveryTerms(): void
+    {
+        self::$document->getDocumentDeliveryTerms($devtermcode);
+        $this->assertEquals("", $devtermcode);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument
+     */
+    public function testDocumentAdditionalReferencedDocumentLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAdditionalReferencedDocument());
+        $this->assertTrue(self::$document->nextDocumentAdditionalReferencedDocument());
+        $this->assertTrue(self::$document->nextDocumentAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentAdditionalReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocument
+     */
+    public function testGetDocumentAdditionalReferencedDocument(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAdditionalReferencedDocument());
+        self::$document->getDocumentAdditionalReferencedDocument($issuerassignedid, $typecode, $uriid, $name, $reftypecode, $issueddate, $binarydatafilename);
+        $this->assertEquals("SUPPort doc", $issuerassignedid);
+        $this->assertEquals("916", $typecode);
+        $this->assertEquals("url:gffter", $uriid);
+        $this->assertIsArray($name);
+        $this->assertNotEmpty($name);
+        $this->assertArrayHasKey(0, $name);
+        $this->assertEquals("", $reftypecode);
+        $this->assertNull($issueddate);
+        $this->assertEquals("", $binarydatafilename);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testDocumentUltimateCustomerOrderReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateCustomerOrderReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentUltimateCustomerOrderReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentPaymentMeansLoop(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentMeans
+     */
+    public function testGetDocumentPaymentMeans(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        self::$document->getDocumentPaymentMeans($typeCode, $information, $cardType, $cardId, $cardHolderName, $buyerIban, $payeeIban, $payeeAccountName, $payeePropId, $payeeBic);
+        $this->assertEquals("30", $typeCode);
+        $this->assertEquals("", $information);
+        $this->assertEquals("", $cardType);
+        $this->assertEquals("", $cardId);
+        $this->assertEquals("", $cardHolderName);
+        $this->assertEquals("", $buyerIban);
+        $this->assertEquals("FR76 1254 2547 2569 8542 5874 698", $payeeIban);
+        $this->assertEquals("", $payeeAccountName);
+        $this->assertEquals("", $payeePropId);
+        $this->assertEquals("", $payeeBic);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     */
+    public function testDocumentTaxLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        $this->assertFalse(self::$document->nextDocumentTax());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentTax
+     */
+    public function testDocumentTax(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(100.0, $basisAmount);
+        $this->assertEquals(10.0, $calculatedAmount);
+        $this->assertEquals(10.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $allowanceChargeBasisAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceChargeLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAllowanceCharge());
+        $this->assertTrue(self::$document->nextDocumentAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentAllowanceCharge());
+    }
+
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceCharge(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAllowanceCharge());
+        self::$document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->assertEquals(5.0, $actualAmount);
+        $this->assertFalse($isCharge);
+        $this->assertEquals("S", $taxCategoryCode);
+        $this->assertEquals("VAT", $taxTypeCode);
+        $this->assertEquals(10.00, $rateApplicablePercent);
+        $this->assertEquals(0, $sequence);
+        $this->assertEquals(0, $calculationPercent);
+        $this->assertEquals(0, $basisAmount);
+        $this->assertEquals(0, $basisQuantity);
+        $this->assertEquals("", $basisQuantityUnitCode);
+        $this->assertEquals("", $reasonCode);
+        $this->assertEquals("REMISE COMMERCIALE", $reason);
+
+        $this->assertTrue(self::$document->nextDocumentAllowanceCharge());
+        self::$document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->assertEquals(10.0, $actualAmount);
+        $this->assertTrue($isCharge);
+        $this->assertEquals("S", $taxCategoryCode);
+        $this->assertEquals("VAT", $taxTypeCode);
+        $this->assertEquals(10.00, $rateApplicablePercent);
+        $this->assertEquals(0, $sequence);
+        $this->assertEquals(0, $calculationPercent);
+        $this->assertEquals(0, $basisAmount);
+        $this->assertEquals(0, $basisQuantity);
+        $this->assertEquals("", $basisQuantityUnitCode);
+        $this->assertEquals("", $reasonCode);
+        $this->assertEquals("FRAIS DEPLACEMENT", $reason);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentLogisticsServiceCharge
+     */
+    public function testtDocumentLogisticsServiceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentLogisticsServiceCharge());
+        $this->assertFalse(self::$document->nextDocumentLogisticsServiceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDiscountTermsFromPaymentTerm
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        self::$document->getDocumentPaymentTerm($termdescription, $termduedate, $termmandate);
+        self::$document->getDiscountTermsFromPaymentTerm($dispercent, $discbasedatetime, $discmeasureval, $discmeasureunit, $discbaseamount, $discamount);
+
+        $this->assertEquals("", $termdescription);
+        $this->assertInstanceOf("DateTime", $termduedate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20200215'))->format('Ymd'), $termduedate->format('Ymd'));
+        $this->assertEquals("", $termmandate);
+        $this->assertEquals(0.0, $dispercent);
+        $this->assertNull($discbasedatetime);
+        $this->assertEquals(0, $discmeasureval);
+        $this->assertEquals("", $discmeasureunit);
+        $this->assertEquals(0, $discbaseamount);
+        $this->assertEquals(0, $discamount);
+
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     */
+    public function testDocumentPositionLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertFalse(self::$document->nextDocumentPosition());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFirst(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("1", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("PRESTATION SUPPORT", $prodname);
+        $this->assertEquals("Description", $proddesc);
+        $this->assertEquals("", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0088", $prodglobalidtype);
+        $this->assertEquals("598785412598745", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("1", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(60.0, $netpriceamount);
+        $this->assertEquals(1.0, $netpricebasisquantity);
+        $this->assertEquals("C62", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(1.0, $billedquantity);
+        $this->assertEquals("C62", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertInstanceOf("DateTime", $docposstartdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20191201'))->format('Ymd'), $docposstartdate->format('Ymd'));
+        $this->assertInstanceOf("DateTime", $docpostenddate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20191231'))->format('Ymd'), $docpostenddate->format('Ymd'));
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(10.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(60.00, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionSecond(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("2", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("FOURNITURES DIVERSES", $prodname);
+        $this->assertEquals("Description", $proddesc);
+        $this->assertEquals("", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("", $prodglobalidtype);
+        $this->assertEquals("", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("3", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(10.0, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(3, $billedquantity);
+        $this->assertEquals("C62", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertInstanceOf("DateTime", $docposstartdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20191201'))->format('Ymd'), $docposstartdate->format('Ymd'));
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(10.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(30.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionThird(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("3", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("APPEL", $prodname);
+        $this->assertEquals("Description", $proddesc);
+        $this->assertEquals("", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("", $prodglobalidtype);
+        $this->assertEquals("", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0000, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(5.0, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(1.0, $billedquantity);
+        $this->assertEquals("C62", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertInstanceOf("DateTime", $docpostenddate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20191231'))->format('Ymd'), $docpostenddate->format('Ymd'));
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(10.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(5.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAdditionalReferencedDocument
+     */
+    public function testDocumentPositionAdditionalReferencedDocument(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPositionAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentPositionAdditionalReferencedDocument());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderExtendedTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderExtendedTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderExtendedTest.php	(revision 8435)
@@ -0,0 +1,1980 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+
+class ReaderExtendedTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/extended_invoice.xml");
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getInvoiceObject
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getSerializer
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getObjectHelper
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getProfileDefinitionParameter
+     */
+    public function testDocumentGetters(): void
+    {
+        $this->assertNotNull(self::$document->getInvoiceObject());
+        $this->assertNotNull(self::$document->getSerializer());
+        $this->assertNotNull(self::$document->getObjectHelper());
+        $this->assertEquals('extended', self::$document->getProfileDefinitionParameter('name'));
+        $this->assertEquals('EXTENDED', self::$document->getProfileDefinitionParameter('altname'));
+        $this->assertEquals('urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended', self::$document->getProfileDefinitionParameter('contextparameter'));
+        $this->assertEquals('factur-x.xml', self::$document->getProfileDefinitionParameter('attachmentfilename'));
+        $this->assertEquals('EXTENDED', self::$document->getProfileDefinitionParameter('xmpname'));
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getProfileDefinitionParameter('unknownparameter');
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('KR87654321012', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20181006'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("KOSTENRECHNUNG", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentNotes
+     */
+    public function testDocumentNotes(): void
+    {
+        self::$document->getDocumentNotes($notes);
+        $this->assertIsArray($notes);
+        $this->assertNotEmpty($notes);
+        $this->assertEquals(3, count($notes));
+        $this->assertArrayHasKey(0, $notes);
+        $this->assertArrayHasKey(1, $notes);
+        $this->assertArrayHasKey(2, $notes);
+        $this->assertIsArray($notes[0]);
+        $this->assertNotEmpty($notes[0]);
+        $this->assertArrayHasKey("content", $notes[0]);
+        $this->assertArrayHasKey("subjectcode", $notes[0]);
+        $this->assertArrayHasKey("contentcode", $notes[0]);
+        $this->assertIsArray($notes[1]);
+        $this->assertNotEmpty($notes[1]);
+        $this->assertArrayHasKey("content", $notes[1]);
+        $this->assertArrayHasKey("subjectcode", $notes[1]);
+        $this->assertArrayHasKey("contentcode", $notes[1]);
+        $this->assertIsArray($notes[2]);
+        $this->assertNotEmpty($notes[2]);
+        $this->assertArrayHasKey("content", $notes[2]);
+        $this->assertArrayHasKey("subjectcode", $notes[2]);
+        $this->assertArrayHasKey("contentcode", $notes[2]);
+        $this->assertEquals("ST3", $notes[0]["contentcode"]);
+        $this->assertEquals("AAK", $notes[0]["subjectcode"]);
+        $this->assertEquals("Es bestehen Rabatt- oder Bonusvereinbarungen.", $notes[0]["content"]);
+        $this->assertEquals("EEV", $notes[1]["contentcode"]);
+        $this->assertEquals("AAJ", $notes[1]["subjectcode"]);
+        $this->assertEquals("Der VerkÃ€ufer bleibt EigentÃŒmer der Waren bis zur vollstÃ€ndigen ErfÃŒllung der Kaufpreisforderung.", $notes[1]["content"]);
+        $this->assertEquals("", $notes[2]["contentcode"]);
+        $this->assertEquals("REG", $notes[2]["subjectcode"]);
+        $this->assertStringContainsString("MUSTERLIEFERANT GMBH", $notes[2]["content"]);
+        $this->assertStringContainsString("BAHNHOFSTRASSE 99", $notes[2]["content"]);
+        $this->assertStringContainsString("99199 MUSTERHAUSEN", $notes[2]["content"]);
+        $this->assertStringContainsString("GeschÃ€ftsfÃŒhrung:", $notes[2]["content"]);
+        $this->assertStringContainsString("Max Mustermann", $notes[2]["content"]);
+        $this->assertStringContainsString("USt-IdNr: DE123456789", $notes[2]["content"]);
+        $this->assertStringContainsString("Telefon: +49 932 431 0", $notes[2]["content"]);
+        $this->assertStringContainsString("www.musterlieferant.de", $notes[2]["content"]);
+        $this->assertStringContainsString("HRB Nr. 372876", $notes[2]["content"]);
+        $this->assertStringContainsString("Amtsgericht Musterstadt", $notes[2]["content"]);
+        $this->assertStringContainsString("GLN 4304171000002", $notes[2]["content"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("", $creditorReferenceID);
+        $this->assertEquals("", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsDocumentCopy
+     */
+    public function testDocumentIsCopy(): void
+    {
+        self::$document->getIsDocumentCopy($iscopy);
+        $this->assertFalse($iscopy);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsTestDocument
+     */
+    public function testDocumentIsTestDocument(): void
+    {
+        self::$document->getIsTestDocument($istest);
+        $this->assertTrue($istest);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSummation
+     */
+    public function testDocumentSummation(): void
+    {
+        self::$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+        $this->assertEquals(480.22, $grandTotalAmount);
+        $this->assertEquals(480.22, $duePayableAmount);
+        $this->assertEquals(410.10, $lineTotalAmount);
+        $this->assertEquals(15.00, $chargeTotalAmount);
+        $this->assertEquals(21.55, $allowanceTotalAmount);
+        $this->assertEquals(403.55, $taxBasisTotalAmount);
+        $this->assertEquals(76.67, $taxTotalAmount);
+        $this->assertEquals(0.00, $roundingAmount);
+        $this->assertEquals(0.00, $totalPrepaidAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerReference
+     */
+    public function testGetDocumentBuyerReference(): void
+    {
+        self::$document->getDocumentBuyerReference($buyerReference);
+        $this->assertEquals("08154712", $buyerReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSeller
+     */
+    public function testDocumentSellerGeneral(): void
+    {
+        self::$document->getDocumentSeller($sellername, $sellerids, $sellerdescription);
+        $this->assertEquals("MUSTERLIEFERANT GMBH", $sellername);
+        $this->assertIsArray($sellerids);
+        $this->assertArrayHasKey(0, $sellerids);
+        $this->assertArrayNotHasKey(1, $sellerids);
+        $this->assertEquals("549910", $sellerids[0]);
+        $this->assertEquals("", $sellerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerGlobalId
+     */
+    public function testDocumentSellerGlobalId(): void
+    {
+        self::$document->getDocumentSellerGlobalId($sellerglobalids);
+        $this->assertIsArray($sellerglobalids);
+        $this->assertArrayHasKey("0088", $sellerglobalids);
+        $this->assertEquals("4333741000005", $sellerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRegistration
+     */
+    public function testDocumentSellerTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRegistration($sellertaxreg);
+        $this->assertIsArray($sellertaxreg);
+        $this->assertArrayNotHasKey("VA", $sellertaxreg);
+        $this->assertArrayHasKey("FC", $sellertaxreg);
+        $this->assertArrayNotHasKey(0, $sellertaxreg);
+        $this->assertArrayNotHasKey(1, $sellertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $sellertaxreg);
+        $this->assertEquals("201/113/40209", $sellertaxreg["FC"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerAddress
+     */
+    public function testDocumentSellerAddress(): void
+    {
+        self::$document->getDocumentSellerAddress($sellerlineone, $sellerlinetwo, $sellerlinethree, $sellerpostcode, $sellercity, $sellercountry, $sellersubdivision);
+        $this->assertEquals("BAHNHOFSTRASSE 99", $sellerlineone);
+        $this->assertEquals("", $sellerlinetwo);
+        $this->assertEquals("", $sellerlinethree);
+        $this->assertEquals("99199", $sellerpostcode);
+        $this->assertEquals("MUSTERHAUSEN", $sellercity);
+        $this->assertEquals("DE", $sellercountry);
+        $this->assertIsArray($sellersubdivision);
+        $this->assertEmpty($sellersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerLegalOrganisation
+     */
+    public function testDocumentSellerLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerLegalOrganisation($sellerlegalorgid, $sellerlegalorgtype, $sellerlegalorgname);
+        $this->assertEquals("", $sellerlegalorgid);
+        $this->assertEquals("", $sellerlegalorgtype);
+        $this->assertEquals("", $sellerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerContact
+     */
+    public function testDocumentSellerContact(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentSellerContact());
+        self::$document->getDocumentSellerContact($sellercontactpersonname, $sellercontactdepartmentname, $sellercontactphoneno, $sellercontactfaxno, $sellercontactemailaddr);
+        $this->assertEquals("", $sellercontactpersonname);
+        $this->assertEquals("", $sellercontactdepartmentname);
+        $this->assertEquals("+49 932 431 500", $sellercontactphoneno);
+        $this->assertEquals("", $sellercontactfaxno);
+        $this->assertEquals("max.mustermann@musterlieferant.de", $sellercontactemailaddr);
+        $this->assertFalse(self::$document->nextDocumentSellerContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyer
+     */
+    public function testDocumentBuyerGeneral(): void
+    {
+        self::$document->getDocumentBuyer($buyername, $buyerids, $buyerdescription);
+        $this->assertEquals("MUSTER-KUNDE GMBH", $buyername);
+        $this->assertIsArray($buyerids);
+        $this->assertArrayHasKey(0, $buyerids);
+        $this->assertArrayNotHasKey(1, $buyerids);
+        $this->assertEquals("339420", $buyerids[0]);
+        $this->assertEquals("", $buyerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerGlobalId
+     */
+    public function testDocumentBuyerGlobalId(): void
+    {
+        self::$document->getDocumentBuyerGlobalId($buyerglobalids);
+        $this->assertIsArray($buyerglobalids);
+        $this->assertArrayHasKey("0088", $buyerglobalids);
+        $this->assertEquals("4304171000002", $buyerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerTaxRegistration
+     */
+    public function testDocumentBuyerTaxRegistration(): void
+    {
+        self::$document->getDocumentBuyerTaxRegistration($buyertaxreg);
+        $this->assertIsArray($buyertaxreg);
+        $this->assertEmpty($buyertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerAddress
+     */
+    public function testDocumentBuyerAddress(): void
+    {
+        self::$document->getDocumentBuyerAddress($buyerlineone, $buyerlinetwo, $buyerlinethree, $buyerpostcode, $buyercity, $buyercountry, $buyersubdivision);
+        $this->assertEquals("KUNDENWEG 88", $buyerlineone);
+        $this->assertEquals("", $buyerlinetwo);
+        $this->assertEquals("", $buyerlinethree);
+        $this->assertEquals("40235", $buyerpostcode);
+        $this->assertEquals("DUESSELDORF", $buyercity);
+        $this->assertEquals("DE", $buyercountry);
+        $this->assertIsArray($buyersubdivision);
+        $this->assertEmpty($buyersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerLegalOrganisation
+     */
+    public function testDocumentBuyerLegalOrganization(): void
+    {
+        self::$document->getDocumentBuyerLegalOrganisation($buyerlegalorgid, $buyerlegalorgtype, $buyerlegalorgname);
+        $this->assertEquals("", $buyerlegalorgid);
+        $this->assertEquals("", $buyerlegalorgtype);
+        $this->assertEquals("", $buyerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentBuyerContact
+     */
+    public function testDocumentBuyerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentBuyerContact());
+        $this->assertFalse(self::$document->nextDocumentBuyerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentBuyerContact($buyercontactpersonname, $buyercontactdepartmentname, $buyercontactphoneno, $buyercontactfaxno, $buyercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentative
+     */
+    public function testDocumentSellerTaxRepresentativeGeneral(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentative($sellertaxreprname, $sellertaxreprids, $sellertaxreprdescription);
+        $this->assertEquals("", $sellertaxreprname);
+        $this->assertIsArray($sellertaxreprids);
+        $this->assertEmpty($sellertaxreprids);
+        $this->assertEquals("", $sellertaxreprdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeGlobalId($sellertaxreprglobalids);
+        $this->assertIsArray($sellertaxreprglobalids);
+        $this->assertEmpty($sellertaxreprglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeTaxRegistration($sellertaxreprtaxreg);
+        $this->assertIsArray($sellertaxreprtaxreg);
+        $this->assertEmpty($sellertaxreprtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeAddress
+     */
+    public function testDocumentSellerTaxRepresentativeAddress(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeAddress($sellertaxreprlineone, $sellertaxreprlinetwo, $sellertaxreprlinethree, $sellertaxreprpostcode, $sellertaxreprcity, $sellertaxreprcountry, $sellertaxreprsubdivision);
+        $this->assertEquals("", $sellertaxreprlineone);
+        $this->assertEquals("", $sellertaxreprlinetwo);
+        $this->assertEquals("", $sellertaxreprlinethree);
+        $this->assertEquals("", $sellertaxreprpostcode);
+        $this->assertEquals("", $sellertaxreprcity);
+        $this->assertEquals("", $sellertaxreprcountry);
+        $this->assertIsArray($sellertaxreprsubdivision);
+        $this->assertEmpty($sellertaxreprsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testDocumentSellerTaxRepresentativeLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeLegalOrganisation($sellertaxreprlegalorgid, $sellertaxreprlegalorgtype, $sellertaxreprlegalorgname);
+        $this->assertEquals("", $sellertaxreprlegalorgid);
+        $this->assertEquals("", $sellertaxreprlegalorgtype);
+        $this->assertEquals("", $sellertaxreprlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerTaxRepresentativeContact
+     */
+    public function testDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerTaxRepresentativeContact());
+        $this->assertFalse(self::$document->nextDocumentSellerTaxRepresentativeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerTaxRepresentativeContact($sellertaxreprcontactpersonname, $sellertaxreprcontactdepartmentname, $sellertaxreprcontactphoneno, $sellertaxreprcontactfaxno, $sellertaxreprcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipTo
+     */
+    public function testDocumentShipToGeneral(): void
+    {
+        self::$document->getDocumentShipTo($shiptoname, $shiptoids, $shiptodescription);
+        $this->assertEquals("MUSTER-MARKT", $shiptoname);
+        $this->assertIsArray($shiptoids);
+        $this->assertEmpty($shiptoids);
+        $this->assertEquals("", $shiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToGlobalId
+     */
+    public function testDocumentShipToGlobalId(): void
+    {
+        self::$document->getDocumentShipToGlobalId($shiptoglobalids);
+        $this->assertIsArray($shiptoglobalids);
+        $this->assertArrayHasKey("0088", $shiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToTaxRegistration
+     */
+    public function testDocumentShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentShipToTaxRegistration($shiptotaxreg);
+        $this->assertIsArray($shiptotaxreg);
+        $this->assertEmpty($shiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToAddress
+     */
+    public function testDocumentShipToAddress(): void
+    {
+        self::$document->getDocumentShipToAddress($shiptolineone, $shiptolinetwo, $shiptolinethree, $shiptopostcode, $shiptocity, $shiptocountry, $shiptosubdivision);
+        $this->assertEquals("HAUPTSTRASSE 44", $shiptolineone);
+        $this->assertEquals("", $shiptolinetwo);
+        $this->assertEquals("", $shiptolinethree);
+        $this->assertEquals("31157", $shiptopostcode);
+        $this->assertEquals("SARSTEDT", $shiptocity);
+        $this->assertEquals("DE", $shiptocountry);
+        $this->assertIsArray($shiptosubdivision);
+        $this->assertEmpty($shiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToLegalOrganisation
+     */
+    public function testDocumentShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentShipToLegalOrganisation($shiptolegalorgid, $shiptolegalorgtype, $shiptolegalorgname);
+        $this->assertEquals("", $shiptolegalorgid);
+        $this->assertEquals("", $shiptolegalorgtype);
+        $this->assertEquals("", $shiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipToContact
+     */
+    public function testDocumentShipToContact(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentShipToContact());
+        self::$document->getDocumentShipToContact($shiptocontactpersonname, $shiptocontactdepartmentname, $shiptocontactphoneno, $shiptocontactfaxno, $shiptocontactemailaddr);
+        $this->assertEquals("", $shiptocontactpersonname);
+        $this->assertEquals("7322", $shiptocontactdepartmentname);
+        $this->assertEquals("", $shiptocontactphoneno);
+        $this->assertEquals("", $shiptocontactfaxno);
+        $this->assertEquals("", $shiptocontactemailaddr);
+        $this->assertFalse(self::$document->nextDocumentShipToContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipTo
+     */
+    public function testDocumentUltimateShipToGeneral(): void
+    {
+        self::$document->getDocumentUltimateShipTo($ultimateshiptoname, $ultimateshiptoids, $ultimateshiptodescription);
+        $this->assertEquals("", $ultimateshiptoname);
+        $this->assertIsArray($ultimateshiptoids);
+        $this->assertEmpty($ultimateshiptoids);
+        $this->assertEquals("", $ultimateshiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToGlobalId
+     */
+    public function testDocumentUltimateShipToGlobalId(): void
+    {
+        self::$document->getDocumentUltimateShipToGlobalId($ultimateshiptoglobalids);
+        $this->assertIsArray($ultimateshiptoglobalids);
+        $this->assertEmpty($ultimateshiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToTaxRegistration
+     */
+    public function testDocumentUltimateShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentUltimateShipToTaxRegistration($ultimateshiptotaxreg);
+        $this->assertIsArray($ultimateshiptotaxreg);
+        $this->assertEmpty($ultimateshiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToAddress
+     */
+    public function testDocumentUltimateShipToAddress(): void
+    {
+        self::$document->getDocumentUltimateShipToAddress($ultimateshiptolineone, $ultimateshiptolinetwo, $ultimateshiptolinethree, $ultimateshiptopostcode, $ultimateshiptocity, $ultimateshiptocountry, $ultimateshiptosubdivision);
+        $this->assertEquals("", $ultimateshiptolineone);
+        $this->assertEquals("", $ultimateshiptolinetwo);
+        $this->assertEquals("", $ultimateshiptolinethree);
+        $this->assertEquals("", $ultimateshiptopostcode);
+        $this->assertEquals("", $ultimateshiptocity);
+        $this->assertEquals("", $ultimateshiptocountry);
+        $this->assertIsArray($ultimateshiptosubdivision);
+        $this->assertEmpty($ultimateshiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToLegalOrganisation
+     */
+    public function testDocumentUltimateShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentUltimateShipToLegalOrganisation($ultimateshiptolegalorgid, $ultimateshiptolegalorgtype, $ultimateshiptolegalorgname);
+        $this->assertEquals("", $ultimateshiptolegalorgid);
+        $this->assertEquals("", $ultimateshiptolegalorgtype);
+        $this->assertEquals("", $ultimateshiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateShipToContact
+     */
+    public function testDocumentUltimateShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFrom
+     */
+    public function testDocumentShipFromGeneral(): void
+    {
+        self::$document->getDocumentShipFrom($shipfromname, $shipfromids, $shipfromdescription);
+        $this->assertEquals("", $shipfromname);
+        $this->assertIsArray($shipfromids);
+        $this->assertEmpty($shipfromids);
+        $this->assertEquals("", $shipfromdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromGlobalId
+     */
+    public function testDocumentShipFromGlobalId(): void
+    {
+        self::$document->getDocumentShipFromGlobalId($shipfromglobalids);
+        $this->assertIsArray($shipfromglobalids);
+        $this->assertEmpty($shipfromglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromTaxRegistration
+     */
+    public function testDocumentShipFromTaxRegistration(): void
+    {
+        self::$document->getDocumentShipFromTaxRegistration($shipfromtaxreg);
+        $this->assertIsArray($shipfromtaxreg);
+        $this->assertEmpty($shipfromtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromAddress
+     */
+    public function testDocumentShipFromAddress(): void
+    {
+        self::$document->getDocumentShipFromAddress($shipfromlineone, $shipfromlinetwo, $shipfromlinethree, $shipfrompostcode, $shipfromcity, $shipfromcountry, $shipfromsubdivision);
+        $this->assertEquals("", $shipfromlineone);
+        $this->assertEquals("", $shipfromlinetwo);
+        $this->assertEquals("", $shipfromlinethree);
+        $this->assertEquals("", $shipfrompostcode);
+        $this->assertEquals("", $shipfromcity);
+        $this->assertEquals("", $shipfromcountry);
+        $this->assertIsArray($shipfromsubdivision);
+        $this->assertEmpty($shipfromsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromLegalOrganisation
+     */
+    public function testDocumentShipFromLegalOrganization(): void
+    {
+        self::$document->getDocumentShipFromLegalOrganisation($shipfromlegalorgid, $shipfromlegalorgtype, $shipfromlegalorgname);
+        $this->assertEquals("", $shipfromlegalorgid);
+        $this->assertEquals("", $shipfromlegalorgtype);
+        $this->assertEquals("", $shipfromlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipFromContact
+     */
+    public function testDocumentShipFromContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicer
+     */
+    public function testDocumentInvoicerGeneral(): void
+    {
+        self::$document->getDocumentInvoicer($invoicername, $invoicerids, $invoicerdescription);
+        $this->assertEquals("", $invoicername);
+        $this->assertIsArray($invoicerids);
+        $this->assertEmpty($invoicerids);
+        $this->assertEquals("", $invoicerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerGlobalId
+     */
+    public function testDocumentInvoicerGlobalId(): void
+    {
+        self::$document->getDocumentInvoicerGlobalId($invoicerglobalids);
+        $this->assertIsArray($invoicerglobalids);
+        $this->assertEmpty($invoicerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerTaxRegistration
+     */
+    public function testDocumentInvoicerTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoicerTaxRegistration($invoicertaxreg);
+        $this->assertIsArray($invoicertaxreg);
+        $this->assertEmpty($invoicertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerAddress
+     */
+    public function testDocumentInvoicerAddress(): void
+    {
+        self::$document->getDocumentInvoicerAddress($invoicerlineone, $invoicerlinetwo, $invoicerlinethree, $invoicerpostcode, $invoicercity, $invoicercountry, $invoicersubdivision);
+        $this->assertEquals("", $invoicerlineone);
+        $this->assertEquals("", $invoicerlinetwo);
+        $this->assertEquals("", $invoicerlinethree);
+        $this->assertEquals("", $invoicerpostcode);
+        $this->assertEquals("", $invoicercity);
+        $this->assertEquals("", $invoicercountry);
+        $this->assertIsArray($invoicersubdivision);
+        $this->assertEmpty($invoicersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerLegalOrganisation
+     */
+    public function testDocumentInvoicerLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoicerLegalOrganisation($invoicerlegalorgid, $invoicerlegalorgtype, $invoicerlegalorgname);
+        $this->assertEquals("", $invoicerlegalorgid);
+        $this->assertEquals("", $invoicerlegalorgtype);
+        $this->assertEquals("", $invoicerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoicerContact
+     */
+    public function testDocumentInvoicerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicee
+     */
+    public function testDocumentInvoiceeGeneral(): void
+    {
+        self::$document->getDocumentInvoicee($invoiceename, $invoiceeids, $invoiceedescription);
+        $this->assertEquals("MUSTER-KUNDE GMBH", $invoiceename);
+        $this->assertIsArray($invoiceeids);
+        $this->assertNotEmpty($invoiceeids);
+        $this->assertArrayHasKey(0, $invoiceeids);
+        $this->assertEquals("", $invoiceedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeGlobalId
+     */
+    public function testDocumentInvoiceeGlobalId(): void
+    {
+        self::$document->getDocumentInvoiceeGlobalId($invoiceeglobalids);
+        $this->assertIsArray($invoiceeglobalids);
+        $this->assertNotEmpty($invoiceeglobalids);
+        $this->assertArrayHasKey("0088", $invoiceeglobalids);
+        $this->assertEquals("4304171000002", $invoiceeglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeTaxRegistration
+     */
+    public function testDocumentInvoiceeTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoiceeTaxRegistration($invoiceetaxreg);
+        $this->assertIsArray($invoiceetaxreg);
+        $this->assertEmpty($invoiceetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeAddress
+     */
+    public function testDocumentInvoiceeAddress(): void
+    {
+        self::$document->getDocumentInvoiceeAddress($invoiceelineone, $invoiceelinetwo, $invoiceelinethree, $invoiceepostcode, $invoiceecity, $invoiceecountry, $invoiceesubdivision);
+        $this->assertEquals("KUNDENWEG 88", $invoiceelineone);
+        $this->assertEquals("", $invoiceelinetwo);
+        $this->assertEquals("", $invoiceelinethree);
+        $this->assertEquals("40235", $invoiceepostcode);
+        $this->assertEquals("DUESSELDORF", $invoiceecity);
+        $this->assertEquals("DE", $invoiceecountry);
+        $this->assertIsArray($invoiceesubdivision);
+        $this->assertEmpty($invoiceesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeLegalOrganisation
+     */
+    public function testDocumentInvoiceeLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoiceeLegalOrganisation($invoiceelegalorgid, $invoiceelegalorgtype, $invoiceelegalorgname);
+        $this->assertEquals("", $invoiceelegalorgid);
+        $this->assertEquals("", $invoiceelegalorgtype);
+        $this->assertEquals("", $invoiceelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoiceeContact
+     */
+    public function testDocumentInvoiceeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayee
+     */
+    public function testDocumentPayeeGeneral(): void
+    {
+        self::$document->getDocumentPayee($payeename, $payeeids, $payeedescription);
+        $this->assertEquals("", $payeename);
+        $this->assertIsArray($payeeids);
+        $this->assertEmpty($payeeids);
+        $this->assertEquals("", $payeedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeGlobalId
+     */
+    public function testDocumentPayeeGlobalId(): void
+    {
+        self::$document->getDocumentPayeeGlobalId($payeeglobalids);
+        $this->assertIsArray($payeeglobalids);
+        $this->assertEmpty($payeeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeTaxRegistration
+     */
+    public function testDocumentPayeeTaxRegistration(): void
+    {
+        self::$document->getDocumentPayeeTaxRegistration($payeetaxreg);
+        $this->assertIsArray($payeetaxreg);
+        $this->assertEmpty($payeetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeAddress
+     */
+    public function testDocumentPayeeAddress(): void
+    {
+        self::$document->getDocumentPayeeAddress($payeelineone, $payeelinetwo, $payeelinethree, $payeepostcode, $payeecity, $payeecountry, $payeesubdivision);
+        $this->assertEquals("", $payeelineone);
+        $this->assertEquals("", $payeelinetwo);
+        $this->assertEquals("", $payeelinethree);
+        $this->assertEquals("", $payeepostcode);
+        $this->assertEquals("", $payeecity);
+        $this->assertEquals("", $payeecountry);
+        $this->assertIsArray($payeesubdivision);
+        $this->assertEmpty($payeesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeLegalOrganisation
+     */
+    public function testDocumentPayeeLegalOrganization(): void
+    {
+        self::$document->getDocumentPayeeLegalOrganisation($payeelegalorgid, $payeelegalorgtype, $payeelegalorgname);
+        $this->assertEquals("", $payeelegalorgid);
+        $this->assertEquals("", $payeelegalorgtype);
+        $this->assertEquals("", $payeelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPayeeContact
+     */
+    public function testDocumentPayeeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUser
+     */
+    public function testDocumentProductEndUserGeneral(): void
+    {
+        self::$document->getDocumentProductEndUser($producendusername, $producenduserids, $producenduserdescription);
+        $this->assertEquals("", $producendusername);
+        $this->assertIsArray($producenduserids);
+        $this->assertArrayNotHasKey(0, $producenduserids);
+        $this->assertArrayNotHasKey(1, $producenduserids);
+        $this->assertEquals("", $producenduserdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserGlobalId
+     */
+    public function testDocumentProductEndUserGlobalId(): void
+    {
+        self::$document->getDocumentProductEndUserGlobalId($producenduserglobalids);
+        $this->assertIsArray($producenduserglobalids);
+        $this->assertArrayNotHasKey("0088", $producenduserglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserTaxRegistration
+     */
+    public function testDocumentProductEndUserTaxRegistration(): void
+    {
+        self::$document->getDocumentProductEndUserTaxRegistration($producendusertaxreg);
+        $this->assertIsArray($producendusertaxreg);
+        $this->assertArrayNotHasKey("VA", $producendusertaxreg);
+        $this->assertArrayNotHasKey("FC", $producendusertaxreg);
+        $this->assertArrayNotHasKey(0, $producendusertaxreg);
+        $this->assertArrayNotHasKey(1, $producendusertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $producendusertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserAddress
+     */
+    public function testDocumentProductEndUserAddress(): void
+    {
+        self::$document->getDocumentProductEndUserAddress($producenduserlineone, $producenduserlinetwo, $producenduserlinethree, $producenduserpostcode, $producendusercity, $producendusercountry, $producendusersubdivision);
+        $this->assertEquals("", $producenduserlineone);
+        $this->assertEquals("", $producenduserlinetwo);
+        $this->assertEquals("", $producenduserlinethree);
+        $this->assertEquals("", $producenduserpostcode);
+        $this->assertEquals("", $producendusercity);
+        $this->assertEquals("", $producendusercountry);
+        $this->assertIsArray($producendusersubdivision);
+        $this->assertEmpty($producendusersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserLegalOrganisation
+     */
+    public function testDocumentProductEndUserLegalOrganization(): void
+    {
+        self::$document->getDocumentProductEndUserLegalOrganisation($producenduserlegalorgid, $producenduserlegalorgtype, $producenduserlegalorgname);
+        $this->assertEquals("", $producenduserlegalorgid);
+        $this->assertEquals("", $producenduserlegalorgtype);
+        $this->assertEquals("", $producenduserlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentProductEndUserContactContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentProductEndUserContactContact
+     */
+    public function testDocumentProductEndUserContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentProductEndUserContactContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentProductEndUserContact($producendusercontactpersonname, $producendusercontactdepartmentname, $producendusercontactphoneno, $producendusercontactfaxno, $producendusercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentProductEndUserContactContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerOrderReferencedDocument
+     */
+    public function testDocumentSellerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentSellerOrderReferencedDocument($sellerorderrefdocid, $sellerorderrefdocdate);
+        $this->assertEquals("", $sellerorderrefdocid);
+        $this->assertNull($sellerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerOrderReferencedDocument
+     */
+    public function testDocumentBuyerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentBuyerOrderReferencedDocument($buyerorderrefdocid, $buyerorderrefdocdate);
+        $this->assertEquals("", $buyerorderrefdocid);
+        $this->assertNull($buyerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentContractReferencedDocument
+     */
+    public function testDocumentContractReferencedDocument(): void
+    {
+        self::$document->getDocumentContractReferencedDocument($contractrefdocid, $contractrefdocdate);
+        $this->assertEquals("", $contractrefdocid);
+        $this->assertNull($contractrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocuments
+     */
+    public function testDocumentAdditionalReferencedDocuments(): void
+    {
+        self::$document->getDocumentAdditionalReferencedDocuments($additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs);
+        $this->assertNotEmpty($additionalrefdocs);
+        $this->assertArrayHasKey(0, $additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs[0]);
+        $this->assertArrayHasKey("IssuerAssignedID", $additionalrefdocs[0]);
+        $this->assertArrayHasKey("TypeCode", $additionalrefdocs[0]);
+        $this->assertEquals("A777123", $additionalrefdocs[0]["IssuerAssignedID"]);
+        $this->assertEquals("130", $additionalrefdocs[0]["TypeCode"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProcuringProject
+     */
+    public function testDocumentProcuringProject(): void
+    {
+        self::$document->getDocumentProcuringProject($projectid, $projectname);
+        $this->assertEquals("", $projectid);
+        $this->assertEquals("", $projectname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSupplyChainEvent
+     */
+    public function testDocumentSupplyChainEvent(): void
+    {
+        self::$document->getDocumentSupplyChainEvent($supplychainevent);
+        $this->assertNotNull($supplychainevent);
+        $this->assertInstanceOf("DateTime", $supplychainevent);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180930'))->format('Ymd'), $supplychainevent->format('Ymd'));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDespatchAdviceReferencedDocument
+     */
+    public function testDocumentDespatchAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentDespatchAdviceReferencedDocument($despatchdocid, $despatchdocdate);
+        $this->assertEquals("", $despatchdocid);
+        $this->assertNull($despatchdocdate);
+        $this->assertNotInstanceOf("DateTime", $despatchdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentReceivingAdviceReferencedDocument
+     */
+    public function testDocumentReceivingAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentReceivingAdviceReferencedDocument($recadvid, $recadvdate);
+        $this->assertEquals("", $recadvid);
+        $this->assertNull($recadvdate);
+        $this->assertNotInstanceOf("DateTime", $recadvdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryNoteReferencedDocument
+     */
+    public function testDocumentDeliveryNoteReferencedDocument(): void
+    {
+        self::$document->getDocumentDeliveryNoteReferencedDocument($deliverynoterefdocid, $deliverynoterefdocdate);
+        $this->assertEquals("L87654321012", $deliverynoterefdocid);
+        $this->assertNull($deliverynoterefdocdate);
+        $this->assertNotInstanceOf("DateTime", $deliverynoterefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBillingPeriod
+     */
+    public function testDocumentBillingPeriod(): void
+    {
+        self::$document->getDocumentBillingPeriod($docbillingperiodstart, $docbillingperiodend);
+        $this->assertNull($docbillingperiodstart);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodstart);
+        $this->assertNull($docbillingperiodend);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodend);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharges
+     */
+    public function testDocumentAllowanceCharges(): void
+    {
+        self::$document->getDocumentAllowanceCharges($docallowancecharge);
+        $this->assertIsArray($docallowancecharge);
+        $this->assertNotEmpty($docallowancecharge);
+        $this->assertEquals(1, count($docallowancecharge));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerms
+     */
+    public function testDocumentPaymentTerms(): void
+    {
+        self::$document->getDocumentPaymentTerms($docpaymentterms);
+        $this->assertIsArray($docpaymentterms);
+        $this->assertNotEmpty($docpaymentterms);
+        $this->assertArrayHasKey(0, $docpaymentterms);
+        $this->assertIsArray($docpaymentterms[0]);
+        $this->assertArrayHasKey("description", $docpaymentterms[0]);
+        $this->assertArrayHasKey("duedate", $docpaymentterms[0]);
+        $this->assertArrayHasKey("directdebitmandateid", $docpaymentterms[0]);
+        $this->assertArrayHasKey("partialpaymentamount", $docpaymentterms[0]);
+        $this->assertEquals("Skontovereinbarung: 2% bei Zahlung innerhalb 10 Tagen nach Rechnungsdatum", $docpaymentterms[0]["description"]);
+        $this->assertNull($docpaymentterms[0]["duedate"]);
+        $this->assertNotInstanceOf("DateTime", $docpaymentterms[0]["duedate"]);
+        $this->assertEquals("", $docpaymentterms[0]["directdebitmandateid"]);
+        $this->assertEquals(0.0, $docpaymentterms[0]["partialpaymentamount"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryTerms
+     */
+    public function testDocumentDeliveryTerms(): void
+    {
+        self::$document->getDocumentDeliveryTerms($devtermcode);
+        $this->assertEquals("", $devtermcode);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument
+     */
+    public function testDocumentAdditionalReferencedDocumentLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentAdditionalReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocument
+     */
+    public function testGetDocumentAdditionalReferencedDocument(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAdditionalReferencedDocument());
+        self::$document->getDocumentAdditionalReferencedDocument($issuerassignedid, $typecode, $uriid, $name, $reftypecode, $issueddate, $binarydatafilename);
+        $this->assertEquals("A777123", $issuerassignedid);
+        $this->assertEquals("130", $typecode);
+        $this->assertEquals("", $uriid);
+        $this->assertIsArray($name);
+        $this->assertEmpty($name);
+        $this->assertEquals("", $reftypecode);
+        $this->assertNull($issueddate);
+        $this->assertEquals("", $binarydatafilename);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testDocumentUltimateCustomerOrderReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateCustomerOrderReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentUltimateCustomerOrderReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentPaymentMeansLoop(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentMeans
+     */
+    public function testGetDocumentPaymentMeans(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        self::$document->getDocumentPaymentMeans($typeCode, $information, $cardType, $cardId, $cardHolderName, $buyerIban, $payeeIban, $payeeAccountName, $payeePropId, $payeeBic);
+        $this->assertEquals("58", $typeCode);
+        $this->assertEquals("", $information);
+        $this->assertEquals("", $cardType);
+        $this->assertEquals("", $cardId);
+        $this->assertEquals("", $cardHolderName);
+        $this->assertEquals("", $buyerIban);
+        $this->assertEquals("DE5467894567876500", $payeeIban);
+        $this->assertEquals("", $payeeAccountName);
+        $this->assertEquals("", $payeePropId);
+        $this->assertEquals("", $payeeBic);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     */
+    public function testDocumentTaxLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        $this->assertFalse(self::$document->nextDocumentTax());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentTax
+     */
+    public function testDocumentTax(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(403.55, $basisAmount);
+        $this->assertEquals(76.67, $calculatedAmount);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(-6.55, $allowanceChargeBasisAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceChargeLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentAllowanceCharge());
+    }
+
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceCharge(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentAllowanceCharge());
+        self::$document->getDocumentAllowanceCharge($actualAmount, $isCharge, $taxCategoryCode, $taxTypeCode, $rateApplicablePercent, $sequence, $calculationPercent, $basisAmount, $basisQuantity, $basisQuantityUnitCode, $reasonCode, $reason);
+        $this->assertEquals(21.55, $actualAmount);
+        $this->assertFalse($isCharge);
+        $this->assertEquals("S", $taxCategoryCode);
+        $this->assertEquals("VAT", $taxTypeCode);
+        $this->assertEquals(19.00, $rateApplicablePercent);
+        $this->assertEquals(0, $sequence);
+        $this->assertEquals(0, $calculationPercent);
+        $this->assertEquals(410.10, $basisAmount);
+        $this->assertEquals(0, $basisQuantity);
+        $this->assertEquals("", $basisQuantityUnitCode);
+        $this->assertEquals("", $reasonCode);
+        $this->assertEquals("Sonderrabatt", $reason);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentLogisticsServiceCharge
+     */
+    public function testtDocumentLogisticsServiceChargeLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentLogisticsServiceCharge());
+        $this->assertFalse(self::$document->nextDocumentLogisticsServiceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentLogisticsServiceCharge
+     */
+    public function testGetDocumentLogisticsServiceCharge(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentLogisticsServiceCharge());
+        self::$document->getDocumentLogisticsServiceCharge($description, $appliedAmount, $taxTypeCodes, $taxCategoryCodes, $rateApplicablePercents);
+        $this->assertEquals("Transportkosten: Frachbetrag", $description);
+        $this->assertEquals(15.00, $appliedAmount);
+        $this->assertIsArray($taxTypeCodes);
+        $this->assertEquals(1, count($taxTypeCodes));
+        $this->assertArrayHasKey(0, $taxTypeCodes);
+        $this->assertEquals("VAT", $taxTypeCodes[0]);
+        $this->assertIsArray($taxCategoryCodes);
+        $this->assertEquals(1, count($taxCategoryCodes));
+        $this->assertArrayHasKey(0, $taxCategoryCodes);
+        $this->assertEquals("S", $taxCategoryCodes[0]);
+        $this->assertIsArray($rateApplicablePercents);
+        $this->assertEquals(1, count($rateApplicablePercents));
+        $this->assertArrayHasKey(0, $rateApplicablePercents);
+        $this->assertEquals(19.0, $rateApplicablePercents[0]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDiscountTermsFromPaymentTerm
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        self::$document->getDocumentPaymentTerm($termdescription, $termduedate, $termmandate);
+        self::$document->getDiscountTermsFromPaymentTerm($dispercent, $discbasedatetime, $discmeasureval, $discmeasureunit, $discbaseamount, $discamount);
+
+        $this->assertEquals("Skontovereinbarung: 2% bei Zahlung innerhalb 10 Tagen nach Rechnungsdatum", $termdescription);
+        $this->assertNull($termduedate);
+        $this->assertEquals("", $termmandate);
+        $this->assertEquals(2.0, $dispercent);
+        $this->assertNull($discbasedatetime);
+        $this->assertEquals(10, $discmeasureval);
+        $this->assertEquals("DAY", $discmeasureunit);
+        $this->assertEquals(0, $discbaseamount);
+        $this->assertEquals(0, $discamount);
+
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     */
+    public function testDocumentPositionLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertTrue(self::$document->nextDocumentPosition());
+        $this->assertFalse(self::$document->nextDocumentPosition());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFirst(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("1", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Wirkarbeit HT", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("WA997", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0088", $prodglobalidtype);
+        $this->assertEquals("4123456000014", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0520, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(0.0520, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(10000.0, $billedquantity);
+        $this->assertEquals("KWH", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(52.00, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionSecond(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("2", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Ãkosteuer Lieferant", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("ÃST250", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0088", $prodglobalidtype);
+        $this->assertEquals("4123456000021", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0205, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(0.0205, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(10000, $billedquantity);
+        $this->assertEquals("KWH", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(20.50, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionThird(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("3", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Kommissionierer 1250032 D. Muster", $prodname);
+        $this->assertEquals("Besteller: Hr. Mayer, Personalnr. 4488", $proddesc);
+        $this->assertEquals("", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0088", $prodglobalidtype);
+        $this->assertEquals("4260331811362", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(15.0000, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(10.5000, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(27.5000, $billedquantity);
+        $this->assertEquals("HUR", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertTrue(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        self::$document->firstDocumentPositionGrossPriceAllowanceCharge();
+        self::$document->getDocumentPositionGrossPriceAllowanceCharge(
+            $docPosAllowanceChargeactualAmount,
+            $docPosAllowanceChargeisCharge,
+            $docPosAllowanceChargecalculationPercent,
+            $docPosAllowanceChargebasisAmount,
+            $docPosAllowanceChargereason,
+            $docPosAllowanceChargeTaxTypeCode,
+            $docPosAllowanceChargeTaxCategoryCode,
+            $docPosAllowanceChargerateApplicablePercent,
+            $docPosAllowanceChargesequence,
+            $docPosAllowanceChargebasisQuantity,
+            $docPosAllowanceChargebasisQuantityUnitCode,
+            $docPosAllowanceChargereasonCode
+        );
+        $this->assertEquals(4.5000, $docPosAllowanceChargeactualAmount);
+        $this->assertFalse($docPosAllowanceChargeisCharge);
+        $this->assertEquals(0, $docPosAllowanceChargecalculationPercent);
+        $this->assertEquals(0, $docPosAllowanceChargebasisAmount);
+        $this->assertEquals("Artikelrabatt 1", $docPosAllowanceChargereason);
+        $this->assertEquals("", $docPosAllowanceChargeTaxTypeCode);
+        $this->assertEquals("", $docPosAllowanceChargeTaxCategoryCode);
+        $this->assertEquals(0, $docPosAllowanceChargerateApplicablePercent);
+        $this->assertEquals(0, $docPosAllowanceChargesequence);
+        $this->assertEquals(0, $docPosAllowanceChargebasisQuantity);
+        $this->assertEquals("", $docPosAllowanceChargebasisQuantityUnitCode);
+        $this->assertEquals("", $docPosAllowanceChargereasonCode);
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(288.75, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFourth(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("4", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("FALTENBEUTEL 16x6x28 CM", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("FB05", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0088", $prodglobalidtype);
+        $this->assertEquals("2001015001325", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0105, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(0.0105, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(3500.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(36.75, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFifth(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("5", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Kopierpapier A4", $prodname);
+        $this->assertEquals("ZÃ€hlerstand von-bis: 543210 - 544420", $proddesc);
+        $this->assertEquals("KOP05", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0088", $prodglobalidtype);
+        $this->assertEquals("4123456000038", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(0.0100, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(0.0100, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(1210.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(12.10, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAdditionalReferencedDocument
+     */
+    public function testDocumentPositionAdditionalReferencedDocument(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPositionAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentPositionAdditionalReferencedDocument());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderXRechnungAttachedBinaryObjectTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderXRechnungAttachedBinaryObjectTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderXRechnungAttachedBinaryObjectTest.php	(revision 8435)
@@ -0,0 +1,124 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+
+class ReaderXRechnungAttachedBinaryObjectTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/xrechnung_simple_2.xml");
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_XRECHNUNG, self::$document->getProfileId());
+        $this->assertEquals(ZugferdProfiles::PROFILE_XRECHNUNG_2, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getInvoiceObject
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getSerializer
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getObjectHelper
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getProfileDefinitionParameter
+     */
+    public function testDocumentGetters(): void
+    {
+        $this->assertNotNull(self::$document->getInvoiceObject());
+        $this->assertNotNull(self::$document->getSerializer());
+        $this->assertNotNull(self::$document->getObjectHelper());
+        $this->assertEquals('en16931', self::$document->getProfileDefinitionParameter('name'));
+        $this->assertEquals('XRECHNUNG', self::$document->getProfileDefinitionParameter('altname'));
+        $this->assertEquals('urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_2.0', self::$document->getProfileDefinitionParameter('contextparameter'));
+        $this->assertEquals('xrechnung.xml', self::$document->getProfileDefinitionParameter('attachmentfilename'));
+        $this->assertEquals('EN 16931', self::$document->getProfileDefinitionParameter('xmpname'));
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getProfileDefinitionParameter('unknownparameter');
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('123456789', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180605'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     */
+    public function testFirstDocumentAdditionalReferencedDocument(): void
+    {
+        $this->assertTrue((self::$document)->firstDocumentAdditionalReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::setBinaryDataDirectory
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocument
+     */
+    public function testGetDocumentAdditionalReferencedDocumentNoDirectorySet(): void
+    {
+        self::$document->getDocumentAdditionalReferencedDocument($issuerassignedid, $typecode, $uriid, $name, $reftypecode, $issueddate, $binarydatafilename);
+        $this->assertEquals("01_15_Anhang_01.pdf", $issuerassignedid);
+        $this->assertEquals("916", $typecode);
+        $this->assertArrayHasKey(0, $name);
+        $this->assertArrayNotHasKey(1, $name);
+        $this->assertEquals("AufschlÃŒsselung der einzelnen Leistungspositionen", $name[0]);
+        $this->assertEquals("", $binarydatafilename);
+        $this->assertFalse(file_exists($binarydatafilename));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::setBinaryDataDirectory
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocument
+     */
+    public function testGetDocumentAdditionalReferencedDocument(): void
+    {
+        self::$document->setBinaryDataDirectory(dirname(__FILE__));
+        self::$document->getDocumentAdditionalReferencedDocument($issuerassignedid, $typecode, $uriid, $name, $reftypecode, $issueddate, $binarydatafilename);
+        $this->assertEquals("01_15_Anhang_01.pdf", $issuerassignedid);
+        $this->assertEquals("916", $typecode);
+        $this->assertArrayHasKey(0, $name);
+        $this->assertArrayNotHasKey(1, $name);
+        $this->assertEquals("AufschlÃŒsselung der einzelnen Leistungspositionen", $name[0]);
+        $this->assertNotEquals("", $binarydatafilename);
+        $this->assertEquals(dirname(__FILE__) . DIRECTORY_SEPARATOR . "01_15_Anhang_01.pdf", $binarydatafilename);
+        $this->assertTrue(file_exists($binarydatafilename));
+        $this->assertEquals(150128, filesize($binarydatafilename));
+        $this->assertEquals("%PDF", substr(file_get_contents($binarydatafilename), 0, 4));
+        @unlink($binarydatafilename);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument
+     */
+    public function testNextDocumentAdditionalReferencedDocument(): void
+    {
+        $this->assertFalse((self::$document)->nextDocumentAdditionalReferencedDocument());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderXRechnungSimpleTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderXRechnungSimpleTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ReaderXRechnungSimpleTest.php	(revision 8435)
@@ -0,0 +1,1499 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\codelists\ZugferdInvoiceType;
+
+class ReaderXRechnungSimpleTest extends TestCase
+{
+    /**
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/xrechnung_simple.xml");
+    }
+
+    public function testDocumentProfile(): void
+    {
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EN16931, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASIC, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_BASICWL, self::$document->getProfileId());
+        $this->assertNotEquals(ZugferdProfiles::PROFILE_EXTENDED, self::$document->getProfileId());
+        $this->assertEquals(ZugferdProfiles::PROFILE_XRECHNUNG, self::$document->getProfileId());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getInvoiceObject
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getSerializer
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getObjectHelper
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getProfileDefinitionParameter
+     */
+    public function testDocumentGetters(): void
+    {
+        $this->assertNotNull(self::$document->getInvoiceObject());
+        $this->assertNotNull(self::$document->getSerializer());
+        $this->assertNotNull(self::$document->getObjectHelper());
+        $this->assertEquals('en16931', self::$document->getProfileDefinitionParameter('name'));
+        $this->assertEquals('XRECHNUNG', self::$document->getProfileDefinitionParameter('altname'));
+        $this->assertEquals('urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_1.2', self::$document->getProfileDefinitionParameter('contextparameter'));
+        $this->assertEquals('xrechnung.xml', self::$document->getProfileDefinitionParameter('attachmentfilename'));
+        $this->assertEquals('EN 16931', self::$document->getProfileDefinitionParameter('xmpname'));
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getProfileDefinitionParameter('unknownparameter');
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInformation
+     */
+    public function testDocumentGenerals(): void
+    {
+        self::$document->getDocumentInformation($documentno, $documenttypecode, $documentdate, $invoiceCurrency, $taxCurrency, $documentname, $documentlanguage, $effectiveSpecifiedPeriod);
+        $this->assertEquals('471102', $documentno);
+        $this->assertEquals(ZugferdInvoiceType::INVOICE, $documenttypecode);
+        $this->assertNotNull($documentdate);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180305'))->format('Ymd'), $documentdate->format('Ymd'));
+        $this->assertEquals("EUR", $invoiceCurrency);
+        $this->assertEquals("", $taxCurrency);
+        $this->assertEquals("", $documentname);
+        $this->assertEquals("", $documentlanguage);
+        $this->assertNull($effectiveSpecifiedPeriod);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentNotes
+     */
+    public function testDocumentNotes(): void
+    {
+        self::$document->getDocumentNotes($notes);
+        $this->assertIsArray($notes);
+        $this->assertNotEmpty($notes);
+        $this->assertEquals(2, count($notes));
+        $this->assertArrayHasKey(0, $notes);
+        $this->assertArrayHasKey(1, $notes);
+        $this->assertIsArray($notes[0]);
+        $this->assertNotEmpty($notes[0]);
+        $this->assertArrayHasKey("content", $notes[0]);
+        $this->assertArrayHasKey("subjectcode", $notes[0]);
+        $this->assertArrayHasKey("contentcode", $notes[0]);
+        $this->assertIsArray($notes[1]);
+        $this->assertNotEmpty($notes[1]);
+        $this->assertArrayHasKey("content", $notes[1]);
+        $this->assertArrayHasKey("subjectcode", $notes[1]);
+        $this->assertArrayHasKey("contentcode", $notes[1]);
+        $this->assertEquals("", $notes[0]["contentcode"]);
+        $this->assertEquals("", $notes[0]["subjectcode"]);
+        $this->assertEquals("Rechnung gemÃ€Ã Bestellung vom 01.03.2018.", $notes[0]["content"]);
+        $this->assertEquals("", $notes[1]["contentcode"]);
+        $this->assertEquals("REG", $notes[1]["subjectcode"]);
+        $this->assertStringContainsString("Lieferant GmbH", $notes[1]["content"]);
+        $this->assertStringContainsString("LieferantenstraÃe 20", $notes[1]["content"]);
+        $this->assertStringContainsString("80333 MÃŒnchen", $notes[1]["content"]);
+        $this->assertStringContainsString("Deutschland", $notes[1]["content"]);
+        $this->assertStringContainsString("GeschÃ€ftsfÃŒhrer: Hans Muster", $notes[1]["content"]);
+        $this->assertStringContainsString("Handelsregisternummer: H A 123", $notes[1]["content"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentGeneralPaymentInformation
+     */
+    public function testDocumentGeneralPaymentInformation(): void
+    {
+        self::$document->getDocumentGeneralPaymentInformation($creditorReferenceID, $paymentReference);
+        $this->assertEquals("", $creditorReferenceID);
+        $this->assertEquals("", $paymentReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsDocumentCopy
+     */
+    public function testDocumentIsCopy(): void
+    {
+        self::$document->getIsDocumentCopy($iscopy);
+        $this->assertFalse($iscopy);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getIsTestDocument
+     */
+    public function testDocumentIsTestDocument(): void
+    {
+        self::$document->getIsTestDocument($istest);
+        $this->assertFalse($istest);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSummation
+     */
+    public function testDocumentSummation(): void
+    {
+        self::$document->getDocumentSummation($grandTotalAmount, $duePayableAmount, $lineTotalAmount, $chargeTotalAmount, $allowanceTotalAmount, $taxBasisTotalAmount, $taxTotalAmount, $roundingAmount, $totalPrepaidAmount);
+        $this->assertEquals(529.87, $grandTotalAmount);
+        $this->assertEquals(529.87, $duePayableAmount);
+        $this->assertEquals(473.00, $lineTotalAmount);
+        $this->assertEquals(0.00, $chargeTotalAmount);
+        $this->assertEquals(0.00, $allowanceTotalAmount);
+        $this->assertEquals(473.00, $taxBasisTotalAmount);
+        $this->assertEquals(56.87, $taxTotalAmount);
+        $this->assertEquals(0.00, $roundingAmount);
+        $this->assertEquals(0.00, $totalPrepaidAmount);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerReference
+     */
+    public function testGetDocumentBuyerReference(): void
+    {
+        self::$document->getDocumentBuyerReference($buyerReference);
+        $this->assertEquals("04011000-12345-34", $buyerReference);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSeller
+     */
+    public function testDocumentSellerGeneral(): void
+    {
+        self::$document->getDocumentSeller($sellername, $sellerids, $sellerdescription);
+        $this->assertEquals("Lieferant GmbH", $sellername);
+        $this->assertIsArray($sellerids);
+        $this->assertArrayNotHasKey(0, $sellerids);
+        $this->assertArrayNotHasKey(1, $sellerids);
+        $this->assertEquals("", $sellerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerGlobalId
+     */
+    public function testDocumentSellerGlobalId(): void
+    {
+        self::$document->getDocumentSellerGlobalId($sellerglobalids);
+        $this->assertIsArray($sellerglobalids);
+        $this->assertArrayHasKey("0088", $sellerglobalids);
+        $this->assertEquals("4000001123452", $sellerglobalids["0088"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRegistration
+     */
+    public function testDocumentSellerTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRegistration($sellertaxreg);
+        $this->assertIsArray($sellertaxreg);
+        $this->assertArrayHasKey("VA", $sellertaxreg);
+        $this->assertArrayHasKey("FC", $sellertaxreg);
+        $this->assertArrayNotHasKey(0, $sellertaxreg);
+        $this->assertArrayNotHasKey(1, $sellertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $sellertaxreg);
+        $this->assertEquals("201/113/40209", $sellertaxreg["FC"]);
+        $this->assertEquals("DE123456789", $sellertaxreg["VA"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerAddress
+     */
+    public function testDocumentSellerAddress(): void
+    {
+        self::$document->getDocumentSellerAddress($sellerlineone, $sellerlinetwo, $sellerlinethree, $sellerpostcode, $sellercity, $sellercountry, $sellersubdivision);
+        $this->assertEquals("LieferantenstraÃe 20", $sellerlineone);
+        $this->assertEquals("", $sellerlinetwo);
+        $this->assertEquals("", $sellerlinethree);
+        $this->assertEquals("80333", $sellerpostcode);
+        $this->assertEquals("MÃŒnchen", $sellercity);
+        $this->assertEquals("DE", $sellercountry);
+        $this->assertIsArray($sellersubdivision);
+        $this->assertEmpty($sellersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerLegalOrganisation
+     */
+    public function testDocumentSellerLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerLegalOrganisation($sellerlegalorgid, $sellerlegalorgtype, $sellerlegalorgname);
+        $this->assertEquals("", $sellerlegalorgid);
+        $this->assertEquals("", $sellerlegalorgtype);
+        $this->assertEquals("", $sellerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerContact
+     */
+    public function testDocumentSellerContact(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentSellerContact());
+        self::$document->getDocumentSellerContact($sellercontactpersonname, $sellercontactdepartmentname, $sellercontactphoneno, $sellercontactfaxno, $sellercontactemailaddr);
+        $this->assertEquals("Max Mustermann", $sellercontactpersonname);
+        $this->assertEquals("Muster-Einkauf", $sellercontactdepartmentname);
+        $this->assertEquals("+49891234567", $sellercontactphoneno);
+        $this->assertEquals("", $sellercontactfaxno);
+        $this->assertEquals("Max@Mustermann.de", $sellercontactemailaddr);
+        $this->assertFalse(self::$document->nextDocumentSellerContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyer
+     */
+    public function testDocumentBuyerGeneral(): void
+    {
+        self::$document->getDocumentBuyer($buyername, $buyerids, $buyerdescription);
+        $this->assertEquals("Kunden AG Mitte", $buyername);
+        $this->assertIsArray($buyerids);
+        $this->assertArrayHasKey(0, $buyerids);
+        $this->assertArrayNotHasKey(1, $buyerids);
+        $this->assertEquals("GE2020211", $buyerids[0]);
+        $this->assertEquals("", $buyerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerGlobalId
+     */
+    public function testDocumentBuyerGlobalId(): void
+    {
+        self::$document->getDocumentBuyerGlobalId($buyerglobalids);
+        $this->assertIsArray($buyerglobalids);
+        $this->assertEmpty($buyerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerTaxRegistration
+     */
+    public function testDocumentBuyerTaxRegistration(): void
+    {
+        self::$document->getDocumentBuyerTaxRegistration($buyertaxreg);
+        $this->assertIsArray($buyertaxreg);
+        $this->assertEmpty($buyertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerAddress
+     */
+    public function testDocumentBuyerAddress(): void
+    {
+        self::$document->getDocumentBuyerAddress($buyerlineone, $buyerlinetwo, $buyerlinethree, $buyerpostcode, $buyercity, $buyercountry, $buyersubdivision);
+        $this->assertEquals("KundenstraÃe 15", $buyerlineone);
+        $this->assertEquals("", $buyerlinetwo);
+        $this->assertEquals("", $buyerlinethree);
+        $this->assertEquals("69876", $buyerpostcode);
+        $this->assertEquals("Frankfurt", $buyercity);
+        $this->assertEquals("DE", $buyercountry);
+        $this->assertIsArray($buyersubdivision);
+        $this->assertEmpty($buyersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerLegalOrganisation
+     */
+    public function testDocumentBuyerLegalOrganization(): void
+    {
+        self::$document->getDocumentBuyerLegalOrganisation($buyerlegalorgid, $buyerlegalorgtype, $buyerlegalorgname);
+        $this->assertEquals("", $buyerlegalorgid);
+        $this->assertEquals("", $buyerlegalorgtype);
+        $this->assertEquals("", $buyerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentBuyerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentBuyerContact
+     */
+    public function testDocumentBuyerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentBuyerContact());
+        $this->assertFalse(self::$document->nextDocumentBuyerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentBuyerContact($buyercontactpersonname, $buyercontactdepartmentname, $buyercontactphoneno, $buyercontactfaxno, $buyercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentative
+     */
+    public function testDocumentSellerTaxRepresentativeGeneral(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentative($sellertaxreprname, $sellertaxreprids, $sellertaxreprdescription);
+        $this->assertEquals("", $sellertaxreprname);
+        $this->assertIsArray($sellertaxreprids);
+        $this->assertEmpty($sellertaxreprids);
+        $this->assertEquals("", $sellertaxreprdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeGlobalId
+     */
+    public function testDocumentSellerTaxRepresentativeGlobalId(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeGlobalId($sellertaxreprglobalids);
+        $this->assertIsArray($sellertaxreprglobalids);
+        $this->assertEmpty($sellertaxreprglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeTaxRegistration
+     */
+    public function testDocumentSellerTaxRepresentativeTaxRegistration(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeTaxRegistration($sellertaxreprtaxreg);
+        $this->assertIsArray($sellertaxreprtaxreg);
+        $this->assertEmpty($sellertaxreprtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeAddress
+     */
+    public function testDocumentSellerTaxRepresentativeAddress(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeAddress($sellertaxreprlineone, $sellertaxreprlinetwo, $sellertaxreprlinethree, $sellertaxreprpostcode, $sellertaxreprcity, $sellertaxreprcountry, $sellertaxreprsubdivision);
+        $this->assertEquals("", $sellertaxreprlineone);
+        $this->assertEquals("", $sellertaxreprlinetwo);
+        $this->assertEquals("", $sellertaxreprlinethree);
+        $this->assertEquals("", $sellertaxreprpostcode);
+        $this->assertEquals("", $sellertaxreprcity);
+        $this->assertEquals("", $sellertaxreprcountry);
+        $this->assertIsArray($sellertaxreprsubdivision);
+        $this->assertEmpty($sellertaxreprsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeLegalOrganisation
+     */
+    public function testDocumentSellerTaxRepresentativeLegalOrganization(): void
+    {
+        self::$document->getDocumentSellerTaxRepresentativeLegalOrganisation($sellertaxreprlegalorgid, $sellertaxreprlegalorgtype, $sellertaxreprlegalorgname);
+        $this->assertEquals("", $sellertaxreprlegalorgid);
+        $this->assertEquals("", $sellertaxreprlegalorgtype);
+        $this->assertEquals("", $sellertaxreprlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentSellerTaxRepresentativeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentSellerTaxRepresentativeContact
+     */
+    public function testDocumentSellerTaxRepresentativeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentSellerTaxRepresentativeContact());
+        $this->assertFalse(self::$document->nextDocumentSellerTaxRepresentativeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentSellerTaxRepresentativeContact($sellertaxreprcontactpersonname, $sellertaxreprcontactdepartmentname, $sellertaxreprcontactphoneno, $sellertaxreprcontactfaxno, $sellertaxreprcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipTo
+     */
+    public function testDocumentShipToGeneral(): void
+    {
+        self::$document->getDocumentShipTo($shiptoname, $shiptoids, $shiptodescription);
+        $this->assertEquals("", $shiptoname);
+        $this->assertIsArray($shiptoids);
+        $this->assertEmpty($shiptoids);
+        $this->assertEquals("", $shiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToGlobalId
+     */
+    public function testDocumentShipToGlobalId(): void
+    {
+        self::$document->getDocumentShipToGlobalId($shiptoglobalids);
+        $this->assertIsArray($shiptoglobalids);
+        $this->assertEmpty($shiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToTaxRegistration
+     */
+    public function testDocumentShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentShipToTaxRegistration($shiptotaxreg);
+        $this->assertIsArray($shiptotaxreg);
+        $this->assertEmpty($shiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToAddress
+     */
+    public function testDocumentShipToAddress(): void
+    {
+        self::$document->getDocumentShipToAddress($shiptolineone, $shiptolinetwo, $shiptolinethree, $shiptopostcode, $shiptocity, $shiptocountry, $shiptosubdivision);
+        $this->assertEquals("", $shiptolineone);
+        $this->assertEquals("", $shiptolinetwo);
+        $this->assertEquals("", $shiptolinethree);
+        $this->assertEquals("", $shiptopostcode);
+        $this->assertEquals("", $shiptocity);
+        $this->assertEquals("", $shiptocountry);
+        $this->assertIsArray($shiptosubdivision);
+        $this->assertEmpty($shiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToLegalOrganisation
+     */
+    public function testDocumentShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentShipToLegalOrganisation($shiptolegalorgid, $shiptolegalorgtype, $shiptolegalorgname);
+        $this->assertEquals("", $shiptolegalorgid);
+        $this->assertEquals("", $shiptolegalorgtype);
+        $this->assertEquals("", $shiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipToContact
+     */
+    public function testDocumentShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipToContact());
+        $this->assertFalse(self::$document->nextDocumentShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipToContact($shiptocontactpersonname, $shiptocontactdepartmentname, $shiptocontactphoneno, $shiptocontactfaxno, $shiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipTo
+     */
+    public function testDocumentUltimateShipToGeneral(): void
+    {
+        self::$document->getDocumentUltimateShipTo($ultimateshiptoname, $ultimateshiptoids, $ultimateshiptodescription);
+        $this->assertEquals("", $ultimateshiptoname);
+        $this->assertIsArray($ultimateshiptoids);
+        $this->assertEmpty($ultimateshiptoids);
+        $this->assertEquals("", $ultimateshiptodescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToGlobalId
+     */
+    public function testDocumentUltimateShipToGlobalId(): void
+    {
+        self::$document->getDocumentUltimateShipToGlobalId($ultimateshiptoglobalids);
+        $this->assertIsArray($ultimateshiptoglobalids);
+        $this->assertEmpty($ultimateshiptoglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToTaxRegistration
+     */
+    public function testDocumentUltimateShipToTaxRegistration(): void
+    {
+        self::$document->getDocumentUltimateShipToTaxRegistration($ultimateshiptotaxreg);
+        $this->assertIsArray($ultimateshiptotaxreg);
+        $this->assertEmpty($ultimateshiptotaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToAddress
+     */
+    public function testDocumentUltimateShipToAddress(): void
+    {
+        self::$document->getDocumentUltimateShipToAddress($ultimateshiptolineone, $ultimateshiptolinetwo, $ultimateshiptolinethree, $ultimateshiptopostcode, $ultimateshiptocity, $ultimateshiptocountry, $ultimateshiptosubdivision);
+        $this->assertEquals("", $ultimateshiptolineone);
+        $this->assertEquals("", $ultimateshiptolinetwo);
+        $this->assertEquals("", $ultimateshiptolinethree);
+        $this->assertEquals("", $ultimateshiptopostcode);
+        $this->assertEquals("", $ultimateshiptocity);
+        $this->assertEquals("", $ultimateshiptocountry);
+        $this->assertIsArray($ultimateshiptosubdivision);
+        $this->assertEmpty($ultimateshiptosubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToLegalOrganisation
+     */
+    public function testDocumentUltimateShipToLegalOrganization(): void
+    {
+        self::$document->getDocumentUltimateShipToLegalOrganisation($ultimateshiptolegalorgid, $ultimateshiptolegalorgtype, $ultimateshiptolegalorgname);
+        $this->assertEquals("", $ultimateshiptolegalorgid);
+        $this->assertEquals("", $ultimateshiptolegalorgtype);
+        $this->assertEquals("", $ultimateshiptolegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateShipToContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateShipToContact
+     */
+    public function testDocumentUltimateShipToContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentUltimateShipToContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentUltimateShipToContact($ultimateshiptocontactpersonname, $ultimateshiptocontactdepartmentname, $ultimateshiptocontactphoneno, $ultimateshiptocontactfaxno, $ultimateshiptocontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFrom
+     */
+    public function testDocumentShipFromGeneral(): void
+    {
+        self::$document->getDocumentShipFrom($shipfromname, $shipfromids, $shipfromdescription);
+        $this->assertEquals("", $shipfromname);
+        $this->assertIsArray($shipfromids);
+        $this->assertEmpty($shipfromids);
+        $this->assertEquals("", $shipfromdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromGlobalId
+     */
+    public function testDocumentShipFromGlobalId(): void
+    {
+        self::$document->getDocumentShipFromGlobalId($shipfromglobalids);
+        $this->assertIsArray($shipfromglobalids);
+        $this->assertEmpty($shipfromglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromTaxRegistration
+     */
+    public function testDocumentShipFromTaxRegistration(): void
+    {
+        self::$document->getDocumentShipFromTaxRegistration($shipfromtaxreg);
+        $this->assertIsArray($shipfromtaxreg);
+        $this->assertEmpty($shipfromtaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromAddress
+     */
+    public function testDocumentShipFromAddress(): void
+    {
+        self::$document->getDocumentShipFromAddress($shipfromlineone, $shipfromlinetwo, $shipfromlinethree, $shipfrompostcode, $shipfromcity, $shipfromcountry, $shipfromsubdivision);
+        $this->assertEquals("", $shipfromlineone);
+        $this->assertEquals("", $shipfromlinetwo);
+        $this->assertEquals("", $shipfromlinethree);
+        $this->assertEquals("", $shipfrompostcode);
+        $this->assertEquals("", $shipfromcity);
+        $this->assertEquals("", $shipfromcountry);
+        $this->assertIsArray($shipfromsubdivision);
+        $this->assertEmpty($shipfromsubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromLegalOrganisation
+     */
+    public function testDocumentShipFromLegalOrganization(): void
+    {
+        self::$document->getDocumentShipFromLegalOrganisation($shipfromlegalorgid, $shipfromlegalorgtype, $shipfromlegalorgname);
+        $this->assertEquals("", $shipfromlegalorgid);
+        $this->assertEquals("", $shipfromlegalorgtype);
+        $this->assertEquals("", $shipfromlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentShipFromContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentShipFromContact
+     */
+    public function testDocumentShipFromContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentShipFromContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentShipFromContact($shipfromcontactpersonname, $shipfromcontactdepartmentname, $shipfromcontactphoneno, $shipfromcontactfaxno, $shipfromcontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicer
+     */
+    public function testDocumentInvoicerGeneral(): void
+    {
+        self::$document->getDocumentInvoicer($invoicername, $invoicerids, $invoicerdescription);
+        $this->assertEquals("", $invoicername);
+        $this->assertIsArray($invoicerids);
+        $this->assertEmpty($invoicerids);
+        $this->assertEquals("", $invoicerdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerGlobalId
+     */
+    public function testDocumentInvoicerGlobalId(): void
+    {
+        self::$document->getDocumentInvoicerGlobalId($invoicerglobalids);
+        $this->assertIsArray($invoicerglobalids);
+        $this->assertEmpty($invoicerglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerTaxRegistration
+     */
+    public function testDocumentInvoicerTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoicerTaxRegistration($invoicertaxreg);
+        $this->assertIsArray($invoicertaxreg);
+        $this->assertEmpty($invoicertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerAddress
+     */
+    public function testDocumentInvoicerAddress(): void
+    {
+        self::$document->getDocumentInvoicerAddress($invoicerlineone, $invoicerlinetwo, $invoicerlinethree, $invoicerpostcode, $invoicercity, $invoicercountry, $invoicersubdivision);
+        $this->assertEquals("", $invoicerlineone);
+        $this->assertEquals("", $invoicerlinetwo);
+        $this->assertEquals("", $invoicerlinethree);
+        $this->assertEquals("", $invoicerpostcode);
+        $this->assertEquals("", $invoicercity);
+        $this->assertEquals("", $invoicercountry);
+        $this->assertIsArray($invoicersubdivision);
+        $this->assertEmpty($invoicersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerLegalOrganisation
+     */
+    public function testDocumentInvoicerLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoicerLegalOrganisation($invoicerlegalorgid, $invoicerlegalorgtype, $invoicerlegalorgname);
+        $this->assertEquals("", $invoicerlegalorgid);
+        $this->assertEquals("", $invoicerlegalorgtype);
+        $this->assertEquals("", $invoicerlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoicerContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoicerContact
+     */
+    public function testDocumentInvoicerContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoicerContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoicerContact($invoicercontactpersonname, $invoicercontactdepartmentname, $invoicercontactphoneno, $invoicercontactfaxno, $invoicercontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoicee
+     */
+    public function testDocumentInvoiceeGeneral(): void
+    {
+        self::$document->getDocumentInvoicee($invoiceename, $invoiceeids, $invoiceedescription);
+        $this->assertEquals("", $invoiceename);
+        $this->assertIsArray($invoiceeids);
+        $this->assertEmpty($invoiceeids);
+        $this->assertEquals("", $invoiceedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeGlobalId
+     */
+    public function testDocumentInvoiceeGlobalId(): void
+    {
+        self::$document->getDocumentInvoiceeGlobalId($invoiceeglobalids);
+        $this->assertIsArray($invoiceeglobalids);
+        $this->assertEmpty($invoiceeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeTaxRegistration
+     */
+    public function testDocumentInvoiceeTaxRegistration(): void
+    {
+        self::$document->getDocumentInvoiceeTaxRegistration($invoiceetaxreg);
+        $this->assertIsArray($invoiceetaxreg);
+        $this->assertEmpty($invoiceetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeAddress
+     */
+    public function testDocumentInvoiceeAddress(): void
+    {
+        self::$document->getDocumentInvoiceeAddress($invoiceelineone, $invoiceelinetwo, $invoiceelinethree, $invoiceepostcode, $invoiceecity, $invoiceecountry, $invoiceesubdivision);
+        $this->assertEquals("", $invoiceelineone);
+        $this->assertEquals("", $invoiceelinetwo);
+        $this->assertEquals("", $invoiceelinethree);
+        $this->assertEquals("", $invoiceepostcode);
+        $this->assertEquals("", $invoiceecity);
+        $this->assertEquals("", $invoiceecountry);
+        $this->assertIsArray($invoiceesubdivision);
+        $this->assertEmpty($invoiceesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeLegalOrganisation
+     */
+    public function testDocumentInvoiceeLegalOrganization(): void
+    {
+        self::$document->getDocumentInvoiceeLegalOrganisation($invoiceelegalorgid, $invoiceelegalorgtype, $invoiceelegalorgname);
+        $this->assertEquals("", $invoiceelegalorgid);
+        $this->assertEquals("", $invoiceelegalorgtype);
+        $this->assertEquals("", $invoiceelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentInvoiceeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentInvoiceeContact
+     */
+    public function testDocumentInvoiceeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentInvoiceeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentInvoiceeContact($invoiceecontactpersonname, $invoiceecontactdepartmentname, $invoiceecontactphoneno, $invoiceecontactfaxno, $invoiceecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayee
+     */
+    public function testDocumentPayeeGeneral(): void
+    {
+        self::$document->getDocumentPayee($payeename, $payeeids, $payeedescription);
+        $this->assertEquals("", $payeename);
+        $this->assertIsArray($payeeids);
+        $this->assertEmpty($payeeids);
+        $this->assertEquals("", $payeedescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeGlobalId
+     */
+    public function testDocumentPayeeGlobalId(): void
+    {
+        self::$document->getDocumentPayeeGlobalId($payeeglobalids);
+        $this->assertIsArray($payeeglobalids);
+        $this->assertEmpty($payeeglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeTaxRegistration
+     */
+    public function testDocumentPayeeTaxRegistration(): void
+    {
+        self::$document->getDocumentPayeeTaxRegistration($payeetaxreg);
+        $this->assertIsArray($payeetaxreg);
+        $this->assertEmpty($payeetaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeAddress
+     */
+    public function testDocumentPayeeAddress(): void
+    {
+        self::$document->getDocumentPayeeAddress($payeelineone, $payeelinetwo, $payeelinethree, $payeepostcode, $payeecity, $payeecountry, $payeesubdivision);
+        $this->assertEquals("", $payeelineone);
+        $this->assertEquals("", $payeelinetwo);
+        $this->assertEquals("", $payeelinethree);
+        $this->assertEquals("", $payeepostcode);
+        $this->assertEquals("", $payeecity);
+        $this->assertEquals("", $payeecountry);
+        $this->assertIsArray($payeesubdivision);
+        $this->assertEmpty($payeesubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeLegalOrganisation
+     */
+    public function testDocumentPayeeLegalOrganization(): void
+    {
+        self::$document->getDocumentPayeeLegalOrganisation($payeelegalorgid, $payeelegalorgtype, $payeelegalorgname);
+        $this->assertEquals("", $payeelegalorgid);
+        $this->assertEquals("", $payeelegalorgtype);
+        $this->assertEquals("", $payeelegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPayeeContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPayeeContact
+     */
+    public function testDocumentPayeeContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentPayeeContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentPayeeContact($payeecontactpersonname, $payeecontactdepartmentname, $payeecontactphoneno, $payeecontactfaxno, $payeecontactemailaddr);
+            }
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUser
+     */
+    public function testDocumentProductEndUserGeneral(): void
+    {
+        self::$document->getDocumentProductEndUser($producendusername, $producenduserids, $producenduserdescription);
+        $this->assertEquals("", $producendusername);
+        $this->assertIsArray($producenduserids);
+        $this->assertArrayNotHasKey(0, $producenduserids);
+        $this->assertArrayNotHasKey(1, $producenduserids);
+        $this->assertEquals("", $producenduserdescription);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserGlobalId
+     */
+    public function testDocumentProductEndUserGlobalId(): void
+    {
+        self::$document->getDocumentProductEndUserGlobalId($producenduserglobalids);
+        $this->assertIsArray($producenduserglobalids);
+        $this->assertArrayNotHasKey("0088", $producenduserglobalids);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserTaxRegistration
+     */
+    public function testDocumentProductEndUserTaxRegistration(): void
+    {
+        self::$document->getDocumentProductEndUserTaxRegistration($producendusertaxreg);
+        $this->assertIsArray($producendusertaxreg);
+        $this->assertArrayNotHasKey("VA", $producendusertaxreg);
+        $this->assertArrayNotHasKey("FC", $producendusertaxreg);
+        $this->assertArrayNotHasKey(0, $producendusertaxreg);
+        $this->assertArrayNotHasKey(1, $producendusertaxreg);
+        $this->assertArrayNotHasKey("ZZ", $producendusertaxreg);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserAddress
+     */
+    public function testDocumentProductEndUserAddress(): void
+    {
+        self::$document->getDocumentProductEndUserAddress($producenduserlineone, $producenduserlinetwo, $producenduserlinethree, $producenduserpostcode, $producendusercity, $producendusercountry, $producendusersubdivision);
+        $this->assertEquals("", $producenduserlineone);
+        $this->assertEquals("", $producenduserlinetwo);
+        $this->assertEquals("", $producenduserlinethree);
+        $this->assertEquals("", $producenduserpostcode);
+        $this->assertEquals("", $producendusercity);
+        $this->assertEquals("", $producendusercountry);
+        $this->assertIsArray($producendusersubdivision);
+        $this->assertEmpty($producendusersubdivision);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserLegalOrganisation
+     */
+    public function testDocumentProductEndUserLegalOrganization(): void
+    {
+        self::$document->getDocumentProductEndUserLegalOrganisation($producenduserlegalorgid, $producenduserlegalorgtype, $producenduserlegalorgname);
+        $this->assertEquals("", $producenduserlegalorgid);
+        $this->assertEquals("", $producenduserlegalorgtype);
+        $this->assertEquals("", $producenduserlegalorgname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProductEndUserContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentProductEndUserContactContact
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentProductEndUserContactContact
+     */
+    public function testDocumentProductEndUserContact(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentProductEndUserContactContact());
+        $this->expectNoticeOrWarningExt(
+            function () {
+                self::$document->getDocumentProductEndUserContact($producendusercontactpersonname, $producendusercontactdepartmentname, $producendusercontactphoneno, $producendusercontactfaxno, $producendusercontactemailaddr);
+            }
+        );
+        $this->assertFalse(self::$document->nextDocumentProductEndUserContactContact());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSellerOrderReferencedDocument
+     */
+    public function testDocumentSellerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentSellerOrderReferencedDocument($sellerorderrefdocid, $sellerorderrefdocdate);
+        $this->assertEquals("", $sellerorderrefdocid);
+        $this->assertNull($sellerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBuyerOrderReferencedDocument
+     */
+    public function testDocumentBuyerOrderReferencedDocument(): void
+    {
+        self::$document->getDocumentBuyerOrderReferencedDocument($buyerorderrefdocid, $buyerorderrefdocdate);
+        $this->assertEquals("", $buyerorderrefdocid);
+        $this->assertNull($buyerorderrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentContractReferencedDocument
+     */
+    public function testDocumentContractReferencedDocument(): void
+    {
+        self::$document->getDocumentContractReferencedDocument($contractrefdocid, $contractrefdocdate);
+        $this->assertEquals("", $contractrefdocid);
+        $this->assertNull($contractrefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAdditionalReferencedDocuments
+     */
+    public function testDocumentAdditionalReferencedDocuments(): void
+    {
+        self::$document->getDocumentAdditionalReferencedDocuments($additionalrefdocs);
+        $this->assertIsArray($additionalrefdocs);
+        $this->assertEmpty($additionalrefdocs);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentProcuringProject
+     */
+    public function testDocumentProcuringProject(): void
+    {
+        self::$document->getDocumentProcuringProject($projectid, $projectname);
+        $this->assertEquals("", $projectid);
+        $this->assertEquals("", $projectname);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentSupplyChainEvent
+     */
+    public function testDocumentSupplyChainEvent(): void
+    {
+        self::$document->getDocumentSupplyChainEvent($supplychainevent);
+        $this->assertNotNull($supplychainevent);
+        $this->assertInstanceOf("DateTime", $supplychainevent);
+        $this->assertEquals((\DateTime::createFromFormat('Ymd', '20180305'))->format('Ymd'), $supplychainevent->format('Ymd'));
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDespatchAdviceReferencedDocument
+     */
+    public function testDocumentDespatchAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentDespatchAdviceReferencedDocument($despatchdocid, $despatchdocdate);
+        $this->assertEquals("", $despatchdocid);
+        $this->assertNull($despatchdocdate);
+        $this->assertNotInstanceOf("DateTime", $despatchdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentReceivingAdviceReferencedDocument
+     */
+    public function testDocumentReceivingAdviceReferencedDocument(): void
+    {
+        self::$document->getDocumentReceivingAdviceReferencedDocument($recadvid, $recadvdate);
+        $this->assertEquals("", $recadvid);
+        $this->assertNull($recadvdate);
+        $this->assertNotInstanceOf("DateTime", $recadvdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryNoteReferencedDocument
+     */
+    public function testDocumentDeliveryNoteReferencedDocument(): void
+    {
+        self::$document->getDocumentDeliveryNoteReferencedDocument($deliverynoterefdocid, $deliverynoterefdocdate);
+        $this->assertEquals("", $deliverynoterefdocid);
+        $this->assertNull($deliverynoterefdocdate);
+        $this->assertNotInstanceOf("DateTime", $deliverynoterefdocdate);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentBillingPeriod
+     */
+    public function testDocumentBillingPeriod(): void
+    {
+        self::$document->getDocumentBillingPeriod($docbillingperiodstart, $docbillingperiodend);
+        $this->assertNull($docbillingperiodstart);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodstart);
+        $this->assertNull($docbillingperiodend);
+        $this->assertNotInstanceOf("DateTime", $docbillingperiodend);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentAllowanceCharges
+     */
+    public function testDocumentAllowanceCharges(): void
+    {
+        self::$document->getDocumentAllowanceCharges($docallowancecharge);
+        $this->assertIsArray($docallowancecharge);
+        $this->assertEmpty($docallowancecharge);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerms
+     */
+    public function testDocumentPaymentTerms(): void
+    {
+        self::$document->getDocumentPaymentTerms($docpaymentterms);
+        $this->assertIsArray($docpaymentterms);
+        $this->assertNotEmpty($docpaymentterms);
+        $this->assertArrayHasKey(0, $docpaymentterms);
+        $this->assertIsArray($docpaymentterms[0]);
+        $this->assertArrayHasKey("description", $docpaymentterms[0]);
+        $this->assertArrayHasKey("duedate", $docpaymentterms[0]);
+        $this->assertArrayHasKey("directdebitmandateid", $docpaymentterms[0]);
+        $this->assertArrayHasKey("partialpaymentamount", $docpaymentterms[0]);
+        $this->assertEquals("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018", $docpaymentterms[0]["description"]);
+        $this->assertNull($docpaymentterms[0]["duedate"]);
+        $this->assertNotInstanceOf("DateTime", $docpaymentterms[0]["duedate"]);
+        $this->assertEquals("", $docpaymentterms[0]["directdebitmandateid"]);
+        $this->assertEquals(0.0, $docpaymentterms[0]["partialpaymentamount"]);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentDeliveryTerms
+     */
+    public function testDocumentDeliveryTerms(): void
+    {
+        self::$document->getDocumentDeliveryTerms($devtermcode);
+        $this->assertEquals("", $devtermcode);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAdditionalReferencedDocument
+     */
+    public function testDocumentAdditionalReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentAdditionalReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentUltimateCustomerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentUltimateCustomerOrderReferencedDocument
+     */
+    public function testDocumentUltimateCustomerOrderReferencedDocumentLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentUltimateCustomerOrderReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentUltimateCustomerOrderReferencedDocument());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextGetDocumentPaymentMeans
+     */
+    public function testDocumentPaymentMeansLoop(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        $this->assertFalse(self::$document->nextGetDocumentPaymentMeans());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstGetDocumentPaymentMeans
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentMeans
+     */
+    public function testGetDocumentPaymentMeans(): void
+    {
+        $this->assertTrue(self::$document->firstGetDocumentPaymentMeans());
+        self::$document->getDocumentPaymentMeans($typeCode, $information, $cardType, $cardId, $cardHolderName, $buyerIban, $payeeIban, $payeeAccountName, $payeePropId, $payeeBic);
+        $this->assertEquals("58", $typeCode);
+        $this->assertEquals("Zahlung per SEPA Ãberweisung.", $information);
+        $this->assertEquals("", $cardType);
+        $this->assertEquals("", $cardId);
+        $this->assertEquals("", $cardHolderName);
+        $this->assertEquals("", $buyerIban);
+        $this->assertEquals("DE02120300000000202051", $payeeIban);
+        $this->assertEquals("Kunden AG", $payeeAccountName);
+        $this->assertEquals("", $payeePropId);
+        $this->assertEquals("BYLADEM1001", $payeeBic);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     */
+    public function testDocumentTaxLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        $this->assertTrue(self::$document->nextDocumentTax());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentTax
+     */
+    public function testDocumentTax(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(275.0, $basisAmount);
+        $this->assertEquals(19.25, $calculatedAmount);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+
+        $this->assertTrue(self::$document->nextDocumentTax());
+        self::$document->getDocumentTax($categoryCode, $typeCode, $basisAmount, $calculatedAmount, $rateApplicablePercent, $exemptionReason, $exemptionReasonCode, $lineTotalBasisAmount, $allowanceChargeBasisAmount, $taxPointDate, $dueDateTypeCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(198.0, $basisAmount);
+        $this->assertEquals(37.62, $calculatedAmount);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentAllowanceCharge
+     */
+    public function testtDocumentAllowanceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentAllowanceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentLogisticsServiceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentLogisticsServiceCharge
+     */
+    public function testtDocumentLogisticsServiceChargeLoop(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentLogisticsServiceCharge());
+        $this->assertFalse(self::$document->nextDocumentLogisticsServiceCharge());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     */
+    public function testtDocumentPaymentTermsLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPaymentTerms
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPaymentTerm
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDiscountTermsFromPaymentTerm
+     */
+    public function testtDocumentPaymentTerms(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPaymentTerms());
+        self::$document->getDocumentPaymentTerm($termdescription, $termduedate, $termmandate);
+        self::$document->getDiscountTermsFromPaymentTerm($dispercent, $discbasedatetime, $discmeasureval, $discmeasureunit, $discbaseamount, $discamount);
+
+        $this->assertEquals("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018, 3% Skonto innerhalb 10 Tagen bis 15.03.2018", $termdescription);
+        $this->assertNull($termduedate);
+        $this->assertEquals("", $termmandate);
+        $this->assertEquals(0, $dispercent);
+        $this->assertNull($discbasedatetime);
+        $this->assertEquals(0, $discmeasureval);
+        $this->assertEquals("", $discmeasureunit);
+        $this->assertEquals(0, $discbaseamount);
+        $this->assertEquals(0, $discamount);
+
+        $this->assertFalse(self::$document->nextDocumentPaymentTerms());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     */
+    public function testDocumentPositionLoop(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition(), "has a first position");
+        $this->assertTrue(self::$document->nextDocumentPosition(), "has a second position");
+        $this->assertFalse(self::$document->nextDocumentPosition(), "has no third position");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionFirst(): void
+    {
+        $this->assertTrue(self::$document->firstDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("1", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("TrennblÃ€tter A4", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("TB100A4", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4012345001235", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(9.90, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(9.90, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(20.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(19.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(198.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPosition
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGenerals
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionProductDetails
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBuyerOrderReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionContractReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionGrossPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPrice
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionNetPriceTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionQuantity
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDespatchAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionReceivingAdviceReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionDeliveryNoteReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionBillingPeriod
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionNote
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionGrossPriceAllowanceCharge
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionTax
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionLineSummation
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::getDocumentPositionSupplyChainEvent
+     */
+    public function testDocumentPositionSecond(): void
+    {
+        $this->assertTrue(self::$document->nextDocumentPosition());
+
+        self::$document->getDocumentPositionGenerals($lineid, $linestatuscode, $linestatusreasoncode);
+        $this->assertEquals("2", $lineid);
+        $this->assertEquals("", $linestatuscode);
+        $this->assertEquals("", $linestatusreasoncode);
+
+        self::$document->getDocumentPositionProductDetails($prodname, $proddesc, $prodsellerid, $prodbuyerid, $prodglobalidtype, $prodglobalid);
+        $this->assertEquals("Joghurt Banane", $prodname);
+        $this->assertEquals("", $proddesc);
+        $this->assertEquals("ARNR2", $prodsellerid);
+        $this->assertEquals("", $prodbuyerid);
+        $this->assertEquals("0160", $prodglobalidtype);
+        $this->assertEquals("4000050986428", $prodglobalid);
+
+        self::$document->getDocumentPositionBuyerOrderReferencedDocument($doclineorderid, $doclineorderlineid, $doclineorderdate);
+        $this->assertEquals("", $doclineorderid);
+        $this->assertEquals("", $doclineorderlineid);
+        $this->assertNull($doclineorderdate);
+
+        self::$document->getDocumentPositionContractReferencedDocument($doclinecontid, $doclinecontlineid, $doclinecontdate);
+        $this->assertEquals("", $doclinecontid);
+        $this->assertEquals("", $doclinecontlineid);
+        $this->assertNull($doclinecontdate);
+
+        self::$document->getDocumentPositionGrossPrice($grosspriceamount, $grosspricebasisquantity, $grosspricebasisquantityunitcode);
+        $this->assertEquals(5.50, $grosspriceamount);
+        $this->assertEquals(0.0, $grosspricebasisquantity);
+        $this->assertEquals("", $grosspricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPrice($netpriceamount, $netpricebasisquantity, $netpricebasisquantityunitcode);
+        $this->assertEquals(5.50, $netpriceamount);
+        $this->assertEquals(0.0, $netpricebasisquantity);
+        $this->assertEquals("", $netpricebasisquantityunitcode);
+
+        self::$document->getDocumentPositionNetPriceTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("", $categoryCode);
+        $this->assertEquals("", $typeCode);
+        $this->assertEquals(0.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionQuantity($billedquantity, $billedquantityunitcode, $chargeFreeQuantity, $chargeFreeQuantityunitcode, $packageQuantity, $packageQuantityunitcode);
+        $this->assertEquals(50.0, $billedquantity);
+        $this->assertEquals("H87", $billedquantityunitcode);
+        $this->assertEquals(0.0, $chargeFreeQuantity);
+        $this->assertEquals("", $chargeFreeQuantityunitcode);
+        $this->assertEquals(0.0, $packageQuantity);
+        $this->assertEquals("", $packageQuantityunitcode);
+
+        self::$document->getDocumentPositionDespatchAdviceReferencedDocument($docposdespadvid, $docposdespadvlineid, $docposdespadvdatetime);
+        $this->assertEquals("", $docposdespadvid);
+        $this->assertEquals("", $docposdespadvlineid);
+        $this->assertNull($docposdespadvdatetime);
+
+        self::$document->getDocumentPositionReceivingAdviceReferencedDocument($docposrecadvid, $docposrecadvlineid, $docposrecadvdatetime);
+        $this->assertEquals("", $docposrecadvid);
+        $this->assertEquals("", $docposrecadvlineid);
+        $this->assertNull($docposrecadvdatetime);
+
+        self::$document->getDocumentPositionDeliveryNoteReferencedDocument($docposdelnoteid, $docposdelnotelineid, $docposdelnotedatetime);
+        $this->assertEquals("", $docposdelnoteid);
+        $this->assertEquals("", $docposdelnotelineid);
+        $this->assertNull($docposdelnotedatetime);
+
+        self::$document->getDocumentPositionBillingPeriod($docposstartdate, $docpostenddate);
+        $this->assertNull($docposstartdate);
+        $this->assertNull($docpostenddate);
+
+        $this->assertFalse(self::$document->firstDocumentPositionNote());
+        $this->assertFalse(self::$document->nextDocumentPositionNote());
+
+        $this->assertFalse(self::$document->firstDocumentPositionGrossPriceAllowanceCharge());
+        $this->assertFalse(self::$document->nextDocumentPositionGrossPriceAllowanceCharge());
+
+        $this->assertTrue(self::$document->firstDocumentPositionTax());
+        $this->assertFalse(self::$document->nextDocumentPositionTax());
+
+        self::$document->firstDocumentPositionTax();
+        self::$document->getDocumentPositionTax($categoryCode, $typeCode, $rateApplicablePercent, $calculatedAmount, $exemptionReason, $exemptionReasonCode);
+        $this->assertEquals("S", $categoryCode);
+        $this->assertEquals("VAT", $typeCode);
+        $this->assertEquals(7.0, $rateApplicablePercent);
+        $this->assertEquals(0.0, $calculatedAmount);
+        $this->assertEquals("", $exemptionReason);
+        $this->assertEquals("", $exemptionReasonCode);
+
+        self::$document->getDocumentPositionLineSummation($lineTotalAmount, $totalAllowanceChargeAmount);
+        $this->assertEquals(275.0, $lineTotalAmount);
+        $this->assertEquals(0.0, $totalAllowanceChargeAmount);
+
+        self::$document->getDocumentPositionSupplyChainEvent($supplyeventdatetime);
+        $this->assertNull($supplyeventdatetime);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::firstDocumentPositionAdditionalReferencedDocument
+     * @covers \horstoeko\zugferd\ZugferdDocumentReader::nextDocumentPositionAdditionalReferencedDocument
+     */
+    public function testDocumentPositionAdditionalReferencedDocument(): void
+    {
+        $this->assertFalse(self::$document->firstDocumentPositionAdditionalReferencedDocument());
+        $this->assertFalse(self::$document->nextDocumentPositionAdditionalReferencedDocument());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/SettingsTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/SettingsTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/SettingsTest.php	(revision 8435)
@@ -0,0 +1,215 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use horstoeko\zugferd\ZugferdSettings;
+use horstoeko\zugferd\tests\TestCase;
+use horstoeko\stringmanagement\FileUtils;
+use horstoeko\stringmanagement\PathUtils;
+
+class SettingsTest extends TestCase
+{
+    /**
+     * @inheritDoc
+     */
+    public static function tearDownAfterClass(): void
+    {
+        ZugferdSettings::setAmountDecimals(2);
+        ZugferdSettings::setQuantityDecimals(2);
+        ZugferdSettings::setPercentDecimals(2);
+        ZugferdSettings::setDecimalSeparator(".");
+        ZugferdSettings::setThousandsSeparator("");
+        ZugferdSettings::setIccProfileFilename("sRGB_v4_ICC.icc");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdSettings
+     */
+    public function testAmountDecimals(): void
+    {
+        $this->assertEquals(2, ZugferdSettings::getAmountDecimals());
+
+        ZugferdSettings::setAmountDecimals(3);
+
+        $this->assertEquals(3, ZugferdSettings::getAmountDecimals());
+
+        $property = $this->getPrivatePropertyFromClassname(ZugferdSettings::class, "amountDecimals");
+
+        $this->assertEquals(3, $property->getValue());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdSettings
+     */
+    public function testQuantityDecimals(): void
+    {
+        $this->assertEquals(2, ZugferdSettings::getQuantityDecimals());
+
+        ZugferdSettings::setQuantityDecimals(3);
+
+        $this->assertEquals(3, ZugferdSettings::getQuantityDecimals());
+
+        $property = $this->getPrivatePropertyFromClassname(ZugferdSettings::class, "quantityDecimals");
+
+        $this->assertEquals(3, $property->getValue());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdSettings
+     */
+    public function testPercentDecimals(): void
+    {
+        $this->assertEquals(2, ZugferdSettings::getPercentDecimals());
+
+        ZugferdSettings::setPercentDecimals(3);
+
+        $this->assertEquals(3, ZugferdSettings::getPercentDecimals());
+
+        $property = $this->getPrivatePropertyFromClassname(ZugferdSettings::class, "percentDecimals");
+
+        $this->assertEquals(3, $property->getValue());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdSettings
+     */
+    public function testDecimalSeparator(): void
+    {
+        $this->assertEquals(".", ZugferdSettings::getDecimalSeparator());
+
+        ZugferdSettings::setDecimalSeparator(",");
+
+        $this->assertEquals(",", ZugferdSettings::getDecimalSeparator());
+
+        $property = $this->getPrivatePropertyFromClassname(ZugferdSettings::class, "decimalSeparator");
+
+        $this->assertEquals(",", $property->getValue());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdSettings
+     */
+    public function testThousandsSeparator(): void
+    {
+        $this->assertEquals("", ZugferdSettings::getThousandsSeparator());
+
+        ZugferdSettings::setThousandsSeparator(",");
+
+        $this->assertEquals(",", ZugferdSettings::getThousandsSeparator());
+
+        $property = $this->getPrivatePropertyFromClassname(ZugferdSettings::class, "thousandsSeparator");
+
+        $this->assertEquals(",", $property->getValue());
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdSettings
+     */
+    public function testIccProfileFilename(): void
+    {
+        $this->assertEquals("sRGB_v4_ICC.icc", ZugferdSettings::getIccProfileFilename());
+
+        ZugferdSettings::setIccProfileFilename("sRGB_v5_ICC.icc");
+
+        $this->assertEquals("sRGB_v5_ICC.icc", ZugferdSettings::getIccProfileFilename());
+
+        $property = $this->getPrivatePropertyFromClassname(ZugferdSettings::class, "iccProfileFilename");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdSettings
+     */
+    public function testGetRootDirectory(): void
+    {
+        $this->assertEquals(
+            realpath(dirname(__FILE__) . "/../../"),
+            realpath(ZugferdSettings::getRootDirectory())
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdSettings
+     */
+    public function testGetSourceDirectory(): void
+    {
+        $this->assertEquals(
+            realpath(dirname(__FILE__) . "/../../src/"),
+            realpath(ZugferdSettings::getSourceDirectory())
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdSettings
+     */
+    public function testGetAssetDirectory(): void
+    {
+        $this->assertEquals(
+            realpath(dirname(__FILE__) . "/../../src/assets/"),
+            realpath(ZugferdSettings::getAssetDirectory())
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdSettings
+     */
+    public function testGetYamlDirectory(): void
+    {
+        $this->assertEquals(
+            realpath(dirname(__FILE__) . "/../../src/yaml/"),
+            realpath(ZugferdSettings::getYamlDirectory())
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdSettings
+     */
+    public function testGetValidationDirectory(): void
+    {
+        $this->assertEquals(
+            realpath(dirname(__FILE__) . "/../../src/validation/"),
+            realpath(ZugferdSettings::getValidationDirectory())
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdSettings
+     */
+    public function testGetFullIccProfileFilename(): void
+    {
+        $expected = PathUtils::combinePathWithFile(
+            realpath(dirname(__FILE__) . "/../../src/assets/"),
+            "sRGB_v5_ICC.icc"
+        );
+        $actual = PathUtils::combinePathWithFile(
+            realpath(FileUtils::getFileDirectory(ZugferdSettings::getFullIccProfileFilename())),
+            "sRGB_v5_ICC.icc"
+        );
+
+        $this->assertEquals(
+            $expected,
+            $actual
+        );
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdSettings
+     */
+    public function testSpecialDecimalPlacesMaps(): void
+    {
+        $this->assertEquals(2, ZugferdSettings::getSpecialDecimalPlacesMap('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount', 2));
+        $this->assertEquals(2, ZugferdSettings::getSpecialDecimalPlacesMap('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount', 2));
+
+        ZugferdSettings::addSpecialDecimalPlacesMap('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount', 5);
+
+        $this->assertEquals(5, ZugferdSettings::getSpecialDecimalPlacesMap('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount', 2));
+        $this->assertEquals(2, ZugferdSettings::getSpecialDecimalPlacesMap('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount', 2));
+
+        ZugferdSettings::setSpecialDecimalPlacesMaps([
+            '/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount' => 6,
+            '/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount' => 6
+        ]);
+
+        $this->assertEquals(6, ZugferdSettings::getSpecialDecimalPlacesMap('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount', 2));
+        $this->assertEquals(6, ZugferdSettings::getSpecialDecimalPlacesMap('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount', 2));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ValidatorInvalidTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ValidatorInvalidTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ValidatorInvalidTest.php	(revision 8435)
@@ -0,0 +1,42 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\ZugferdDocumentValidator;
+
+class ValidatorInvalidTest extends TestCase
+{
+    /**
+     * The document instance
+     *
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    /**
+     * The validator instance
+     *
+     * @var ZugferdDocumentValidator
+     */
+    protected static $validator;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/en16931_simple_invalid.xml");
+        self::$validator = new ZugferdDocumentValidator(self::$document);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentValidator::validateDocument
+     */
+    public function testValidateDocument(): void
+    {
+        $validationResult = self::$validator->validateDocument();
+        $this->assertEquals(1, count($validationResult));
+        $this->assertArrayHasKey(0, $validationResult);
+        $this->assertEquals("This value should not be null.", $validationResult[0]->getMessage());
+        $this->assertEquals("supplyChainTradeTransaction.applicableHeaderTradeAgreement.sellerTradeParty", $validationResult[0]->getPropertyPath());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ValidatorValidTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ValidatorValidTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/ValidatorValidTest.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\ZugferdDocumentReader;
+use \horstoeko\zugferd\ZugferdDocumentValidator;
+
+class ValidatorValidTest extends TestCase
+{
+    /**
+     * The document instance
+     *
+     * @var ZugferdDocumentReader
+     */
+    protected static $document;
+
+    /**
+     * The validator instance
+     *
+     * @var ZugferdDocumentValidator
+     */
+    protected static $validator;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/../assets/en16931_simple.xml");
+        self::$validator = new ZugferdDocumentValidator(self::$document);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentValidator::validateDocument
+     */
+    public function testValidateDocument(): void
+    {
+        $validationResult = self::$validator->validateDocument();
+        $this->assertEquals(0, count($validationResult));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/issues/Issue10Test.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/issues/Issue10Test.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/issues/Issue10Test.php	(revision 8435)
@@ -0,0 +1,82 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases\issues;
+
+use DateTime;
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\tests\traits\HandlesXmlTests;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentBuilder;
+
+class Issue10Test extends TestCase
+{
+    use HandlesXmlTests;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_XRECHNUNG_2_2);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::SetDocumentSummation
+     * @issue  #10
+     */
+    public function testTotalPrepaidAmountPayed(): void
+    {
+        (self::$document)->setDocumentInformation("471102", "380", DateTime::createFromFormat("Ymd", "20180305"), "EUR");
+        (self::$document)->setDocumentSummation(119.0, 109.0, 100.0, 0.0, 0.0, 100.0, 19.0, null, 10.0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount', 0, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount', 0, "100.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount', 0, "19.0", "currencyID", "EUR");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount', 0, "119.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount', 0, "10.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount', 0, "109.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::SetDocumentSummation
+     * @issue  #10
+     */
+    public function testTotalPrepaidAmountUnpayed(): void
+    {
+        (self::$document)->setDocumentInformation("471102", "380", DateTime::createFromFormat("Ymd", "20180305"), "EUR");
+        (self::$document)->setDocumentSummation(119.0, 109.0, 100.0, 0.0, 0.0, 100.0, 19.0, null, 0.0);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount', 0, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount', 0, "100.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount', 0, "19.0", "currencyID", "EUR");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount', 0, "119.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount', 0, "109.0");
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::SetDocumentSummation
+     * @issue  #10
+     */
+    public function testTotalPrepaidAmountIsNull(): void
+    {
+        (self::$document)->setDocumentInformation("471102", "380", DateTime::createFromFormat("Ymd", "20180305"), "EUR");
+        (self::$document)->setDocumentSummation(119.0, 109.0, 100.0, 0.0, 0.0, 100.0, 19.0, null, null);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount', 0, "100.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount', 0, "100.0");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount', 0, "19.0", "currencyID", "EUR");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount', 0, "119.0");
+        $this->assertXPathNotExistsWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount', 0);
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount', 0, "109.0");
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/issues/Issue18Test.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/issues/Issue18Test.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/issues/Issue18Test.php	(revision 8435)
@@ -0,0 +1,29 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases\issues;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\tests\traits\HandlesXmlTests;
+use \horstoeko\zugferd\ZugferdProfiles;
+use \horstoeko\zugferd\ZugferdDocumentBuilder;
+
+class Issue18Test extends TestCase
+{
+    use HandlesXmlTests;
+
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_XRECHNUNG_3);
+    }
+
+    /**
+     * @return void
+     * @issue  #18
+     */
+    public function testBusinessProcessSpecifiedDocumentContextParameter(): void
+    {
+        $invoiceObject = self::$document->getInvoiceObject();
+        $this->assertEquals('urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0', $invoiceObject->getExchangedDocumentContext()->getGuidelineSpecifiedDocumentContextParameter()->getId());
+        $this->assertEquals('urn:fdc:peppol.eu:2017:poacc:billing:01:1.0', $invoiceObject->getExchangedDocumentContext()->getBusinessProcessSpecifiedDocumentContextParameter()->getId());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/issues/Issue32Test.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/issues/Issue32Test.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/issues/Issue32Test.php	(revision 8435)
@@ -0,0 +1,57 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases\issues;
+
+use \horstoeko\zugferd\tests\TestCase;
+use \horstoeko\zugferd\codelists\ZugferdUnitCodes;
+use \horstoeko\zugferd\tests\traits\HandlesXmlTests;
+use \horstoeko\zugferd\quick\ZugferdQuickDescriptorXRechnung3;
+use horstoeko\zugferd\codelists\ZugferdTextSubjectCodeQualifiers;
+
+class Issue32Test extends TestCase
+{
+    use HandlesXmlTests;
+
+    /**
+     * @inheritDoc
+     */
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdQuickDescriptorXRechnung3::doCreateNew();
+    }
+
+    /**
+     * @return void
+     * @issue  #32
+     */
+    public function testIssue(): void
+    {
+        self::$document
+            ->doCreateInvoice("471102", \DateTime::createFromFormat("Ymd", "20180305"), "EUR")
+            ->doSetPaymentTerms("Zahlbar sofort", new \DateTime('+3 days'))
+            ->doSetPaymentMeansForCreditTransfer(true, "DE12500105170648489890")
+            ->doAddNote('Rechnung gemÃ€Ã Bestellung vom 01.03.2018.')
+            ->doAddNote('Lieferant GmbH' . PHP_EOL . 'LieferantenstraÃe 20' . PHP_EOL . '80333 MÃŒnchen' . PHP_EOL . 'Deutschland' . PHP_EOL . 'GeschÃ€ftsfÃŒhrer: Hans Muster' . PHP_EOL . 'Handelsregisternummer: H A 123' . PHP_EOL . PHP_EOL, ZugferdTextSubjectCodeQualifiers::UNTDID_4451_REG)
+            ->doSetBuyer("Kunden AG Mitte", "69876", "Frankfurt", "LieferantenstraÃe 20", "DE", "34676-342323")
+            ->doSetBuyerContact("Hans Miller")
+            ->doSetBuyerElectronicCommunication("kunde@kunde.de")
+            ->doSetSeller("Lieferant GmbH", "80333", "MÃŒnchen", "LieferantenstraÃe 20", "DE", null, "4000001123452", "0088")
+            ->doAddSellerTaxRegistration("FC", "201/113/40209")
+            ->doAddSellerTaxRegistration("VA", "DE123456789")
+            ->doSetSellerContact("Horst Meier", null, "horst@nowhere.all", "+49-0000-8888888")
+            ->doSetSellerElectronicCommunication("lieferant@lieferant.de")
+            ->doAddTradeLineItem(1, "PositionText", 31.67, 61.64, ZugferdUnitCodes::REC20_PIECE, 0.0, '', 'S', 'VAT', 19);
+
+        $this->disableRenderXmlContent();
+        $this->assertXPathValue('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:BuyerTradeParty/ram:Name', "Kunden AG Mitte");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:LineTotalAmount', 0, "1952.14");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:AllowanceTotalAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount', 0, "1952.14");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount', 0, "370.91", "currencyID", "EUR");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:RoundingAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount', 0, "2323.05");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount', 0, "0.0");
+        $this->assertXPathValueWithIndex('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount', 0, "2323.05");
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/issues/Issue43Test.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/issues/Issue43Test.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/testcases/issues/Issue43Test.php	(revision 8435)
@@ -0,0 +1,48 @@
+<?php
+
+namespace horstoeko\zugferd\tests\testcases\issues;
+
+use horstoeko\zugferd\tests\TestCase;
+use horstoeko\zugferd\ZugferdProfiles;
+use horstoeko\zugferd\ZugferdDocumentBuilder;
+use horstoeko\zugferd\codelists\ZugferdInvoiceType;
+use horstoeko\zugferd\tests\traits\HandlesXmlTests;
+
+class Issue43Test extends TestCase
+{
+    use HandlesXmlTests;
+
+    /**
+     * @inheritDoc
+     */
+    public static function setUpBeforeClass(): void
+    {
+        self::$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_XRECHNUNG_2_2);
+    }
+
+    /**
+     * @return void
+     * @issue 43
+     */
+    public function testIssue(): void
+    {
+        $date = "05.05.24";
+        $duedate = "05.06.24";
+        $invoice = "Invoice123";
+
+        self::$document->setDocumentInformation(
+            $invoice,
+            ZugferdInvoiceType::INVOICE,
+            \DateTime::createFromFormat("d.m.y", $date),
+            "EUR",
+            $invoice,
+            null,
+            \DateTime::createFromFormat("d.m.y", $duedate)
+        );
+
+        self::$document->addDocumentPaymentTerm('PaymentTerm', \DateTime::createFromFormat("d.m.y", $duedate), "MandateId");
+
+        $this->assertXPathValueWithAttribute('/rsm:CrossIndustryInvoice/rsm:ExchangedDocument/ram:IssueDateTime/udt:DateTimeString', "20240505", "format", "102");
+        $this->assertXPathValueWithIndexAndAttribute('/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString', 0, "20240605", "format", "102");
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/traits/HandlesXmlTests.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/traits/HandlesXmlTests.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/horstoeko/zugferd/tests/traits/HandlesXmlTests.php	(revision 8435)
@@ -0,0 +1,234 @@
+<?php
+
+namespace horstoeko\zugferd\tests\traits;
+
+use \horstoeko\zugferd\ZugferdDocumentBuilder;
+
+trait HandlesXmlTests
+{
+    /**
+     * @var \horstoeko\zugferd\ZugferdDocumentBuilder|\horstoeko\zugferd\quick\ZugferdQuickDescriptor
+     */
+    protected static $document;
+
+    /**
+     * Cache for latest rendered XML
+     *
+     * @var \SimpleXMLElement
+     */
+    protected $latestXml;
+
+    /**
+     * Dont render xml content
+     *
+     * @var boolean
+     */
+    protected $renderingOfXmlDisabled = false;
+
+    /**
+     * @inheritDoc
+     */
+    protected function setUp(): void
+    {
+        $this->EnableRenderXmlContent();
+    }
+
+    /**
+     * Dummy Test
+     *
+     * @return void
+     */
+    public function testDummy()
+    {
+        $this->assertTrue(true);
+    }
+
+    /**
+     * Get XML-Object from documents content
+     *
+     * @return \SimpleXMLElement
+     */
+    protected function getXml(): \SimpleXMLElement
+    {
+        if ($this->renderingOfXmlDisabled === false) {
+            $this->latestXml = new \SimpleXMLElement((self::$document)->getContent());
+        }
+        return $this->latestXml;
+    }
+
+    /**
+     * Disable rendering of test content
+     *
+     * @return void
+     */
+    protected function disableRenderXmlContent()
+    {
+        $this->latestXml = new \SimpleXMLElement((self::$document)->getContent());
+        $this->renderingOfXmlDisabled = true;
+    }
+
+    /**
+     * Disable rendering of test content
+     *
+     * @return void
+     */
+    protected function enableRenderXmlContent()
+    {
+        $this->renderingOfXmlDisabled = false;
+    }
+
+    /**
+     * Assert a xpath with $expected value
+     *
+     * @param  string $xpath
+     * @param  string $expected
+     * @return void
+     */
+    protected function assertXPathValue(string $xpath, string $expected): void
+    {
+        $xml = $this->getXml();
+        $xmlvalue = $xml->xpath($xpath);
+        $this->assertArrayHasKey(0, $xmlvalue);
+        $this->assertEquals($expected, $xmlvalue[0]);
+    }
+
+    /**
+     * Assert a xpath with $expected value in a multiple element resultset
+     *
+     * @param  string  $xpath
+     * @param  integer $index
+     * @param  string  $expected
+     * @return void
+     */
+    protected function assertXPathValueWithIndex(string $xpath, int $index, string $expected): void
+    {
+        $xml = $this->getXml();
+        $xmlvalue = $xml->xpath($xpath);
+        $this->assertArrayHasKey($index, $xmlvalue);
+        $this->assertEquals($expected, $xmlvalue[$index]);
+    }
+
+    /**
+     * Assert a xpath with $expected value in a multiple element resultset
+     *
+     * @param  string  $xpath
+     * @param  integer $index
+     * @param  string  $expected
+     * @return void
+     */
+    protected function assertXPathValueStartsWithIndex(string $xpath, int $index, string $expected): void
+    {
+        $xml = $this->getXml();
+        $xmlvalue = $xml->xpath($xpath);
+        $this->assertArrayHasKey($index, $xmlvalue);
+        $this->assertEquals($expected, substr($xmlvalue[$index], 0, strlen($expected)));
+    }
+
+    /**
+     * Assert a xpath with $expected value and an expected attribute value
+     *
+     * @param  string $xpath
+     * @param  string $expected
+     * @param  string $expectedAttribute
+     * @param  string $expectedAttributeValue
+     * @return void
+     */
+    protected function assertXPathValueWithAttribute(string $xpath, string $expected, string $expectedAttribute, string $expectedAttributeValue): void
+    {
+        $xml = $this->getXml();
+        $xmlvalue = $xml->xpath($xpath);
+        $this->assertArrayHasKey(0, $xmlvalue);
+        $this->assertEquals($expected, $xmlvalue[0]);
+        $this->assertNotNull($xmlvalue[0]->attributes()[$expectedAttribute]);
+        $this->assertNotNull($xmlvalue[0]->attributes()[$expectedAttribute][0]);
+        $this->assertEquals($expectedAttributeValue, $xmlvalue[0]->attributes()[$expectedAttribute][0]);
+    }
+
+    /**
+     * Assert a xpath with $expected value in a multiple resule and an expected attribute value
+     *
+     * @param  string $xpath
+     * @param  string $expected
+     * @param  string $expectedAttribute
+     * @param  string $expectedAttributeValue
+     * @return void
+     */
+    protected function assertXPathValueWithIndexAndAttribute(string $xpath, int $index, string $expected, string $expectedAttribute, string $expectedAttributeValue): void
+    {
+        $xml = $this->getXml();
+        $xmlvalue = $xml->xpath($xpath);
+        $this->assertArrayHasKey($index, $xmlvalue);
+        $this->assertEquals($expected, $xmlvalue[$index]);
+        $this->assertNotNull($xmlvalue[$index]->attributes()[$expectedAttribute]);
+        $this->assertNotNull($xmlvalue[$index]->attributes()[$expectedAttribute][0]);
+        $this->assertEquals($expectedAttributeValue, $xmlvalue[$index]->attributes()[$expectedAttribute][0]);
+    }
+
+    /**
+     * Assert a xpath with $expected value in a multiple resule and an expected attribute value
+     *
+     * @param  string $xpath
+     * @param  string $expected
+     * @param  string $expectedAttribute
+     * @param  string $expectedAttributeValue
+     * @return void
+     */
+    protected function assertXPathValueStartsWithIndexAndAttribute(string $xpath, int $index, string $expected, string $expectedAttribute, string $expectedAttributeValue): void
+    {
+        $xml = $this->getXml();
+        $xmlvalue = $xml->xpath($xpath);
+        $this->assertArrayHasKey($index, $xmlvalue);
+        $this->assertEquals($expected, substr($xmlvalue[$index], 0, strlen($expected)));
+        $this->assertNotNull($xmlvalue[$index]->attributes()[$expectedAttribute]);
+        $this->assertNotNull($xmlvalue[$index]->attributes()[$expectedAttribute][0]);
+        $this->assertEquals($expectedAttributeValue, $xmlvalue[$index]->attributes()[$expectedAttribute][0]);
+    }
+
+    /**
+     * Test that an xml element does not exist
+     *
+     * @param  string $xpath
+     * @return void
+     */
+    protected function assertXPathExists(string $xpath)
+    {
+        $xml = $this->getXml();
+        $xmlvalue = $xml->xpath($xpath);
+        $this->assertNotEmpty($xmlvalue);
+    }
+
+    /**
+     * Test that an xml element does not exist
+     *
+     * @param  string $xpath
+     * @return void
+     */
+    protected function assertXPathNotExists(string $xpath)
+    {
+        $xml = $this->getXml();
+        $xmlvalue = $xml->xpath($xpath);
+        $this->assertEmpty($xmlvalue);
+    }
+
+    /**
+     * Test that an xml element does not exist at index
+     *
+     * @param  string  $xpath
+     * @param  integer $index
+     * @return void
+     */
+    protected function assertXPathNotExistsWithIndex(string $xpath, int $index)
+    {
+        $xml = $this->getXml();
+        $xmlvalue = $xml->xpath($xpath);
+        $this->assertArrayNotHasKey($index, $xmlvalue);
+    }
+
+    /**
+     * @covers \horstoeko\zugferd\ZugferdDocumentBuilder::writeFile
+     */
+    public function debugWriteFile(): void
+    {
+        (self::$document)->writeFile(getcwd() . "/myfile_dbg.xml");
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/CHANGELOG.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/CHANGELOG.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/CHANGELOG.md	(revision 8435)
@@ -0,0 +1,144 @@
+# Changelog
+
+## [2.3.0](https://github.com/schmittjoh/metadata/tree/2.3.0) (2020-06-06)
+
+**Merged pull requests:**
+
+- Allow PSR-11 container [\#92](https://github.com/schmittjoh/metadata/pull/92) ([goetas](https://github.com/goetas))
+
+## [2.2.0](https://github.com/schmittjoh/metadata/tree/2.2.0) (2020-05-31)
+
+**Merged pull requests:**
+
+- Add cache support for anonymous classes \(\#79\) [\#90](https://github.com/schmittjoh/metadata/pull/90) ([goetas](https://github.com/goetas))
+- Merge 1.x [\#91](https://github.com/schmittjoh/metadata/pull/91) ([goetas](https://github.com/goetas))
+- add .gitattributes [\#86](https://github.com/schmittjoh/metadata/pull/86) ([Tobion](https://github.com/Tobion))
+- Test enhancement [\#84](https://github.com/schmittjoh/metadata/pull/84) ([peter279k](https://github.com/peter279k))
+- Improve cache error message [\#80](https://github.com/schmittjoh/metadata/pull/80) ([thePanz](https://github.com/thePanz))
+
+## [2.1.0](https://github.com/schmittjoh/metadata/tree/2.1.0) (2019-09-17)
+
+**Merged pull requests:**
+
+- make sure we only use the cache if write was successful [\#82](https://github.com/schmittjoh/metadata/pull/82) ([dbu](https://github.com/dbu))
+- Handle errors when restoring from cache [\#81](https://github.com/schmittjoh/metadata/pull/81) ([dbu](https://github.com/dbu))
+- Do not create MethodMetadata::$reflection on constructor/unserialize,âŠ [\#78](https://github.com/schmittjoh/metadata/pull/78) ([ThomasNunninger](https://github.com/ThomasNunninger))
+
+## [2.0.0](https://github.com/schmittjoh/metadata/tree/2.0.0) (2018-11-09)
+
+No changes from **2.0.0-RC1**
+
+## [1.7.0](https://github.com/schmittjoh/metadata/tree/1.7.0) (2018-10-26)
+**Merged pull requests:**
+
+- Allow Read-only Cache [\#74](https://github.com/schmittjoh/metadata/pull/74) ([goetas](https://github.com/goetas))
+
+## [2.0.0-RC1](https://github.com/schmittjoh/metadata/tree/2.0.0-RC1) (2018-10-17)
+**Merged pull requests:**
+
+- Moved to psr-4 [\#73](https://github.com/schmittjoh/metadata/pull/73) ([samnela](https://github.com/samnela))
+
+## [2.0.0-beta1](https://github.com/schmittjoh/metadata/tree/2.0.0-beta1) (2018-09-12)
+**Closed issues:**
+
+- Read-Only Filesystem Support [\#71](https://github.com/schmittjoh/metadata/issues/71)
+- Change license to MIT [\#68](https://github.com/schmittjoh/metadata/issues/68)
+- Composer.lock is out of date [\#55](https://github.com/schmittjoh/metadata/issues/55)
+- consider changing chmod to @chmod [\#50](https://github.com/schmittjoh/metadata/issues/50)
+- Big performance hit when upgrading from 1.4.2 to 1.5.0 [\#44](https://github.com/schmittjoh/metadata/issues/44)
+- metadata name not present leads to exception [\#39](https://github.com/schmittjoh/metadata/issues/39)
+
+**Merged pull requests:**
+
+- Allow Read-only Cache [\#72](https://github.com/schmittjoh/metadata/pull/72) ([pdugas](https://github.com/pdugas))
+- Code style  [\#70](https://github.com/schmittjoh/metadata/pull/70) ([goetas](https://github.com/goetas))
+- Change license to MIT [\#69](https://github.com/schmittjoh/metadata/pull/69) ([goetas](https://github.com/goetas))
+- simplified class metadata  [\#67](https://github.com/schmittjoh/metadata/pull/67) ([goetas](https://github.com/goetas))
+- Fix an exception message [\#65](https://github.com/schmittjoh/metadata/pull/65) ([hason](https://github.com/hason))
+- Actualized version constant. [\#64](https://github.com/schmittjoh/metadata/pull/64) ([Aliance](https://github.com/Aliance))
+
+## [1.6.0](https://github.com/schmittjoh/metadata/tree/1.6.0) (2016-12-05)
+**Closed issues:**
+
+- Consider switching to the MIT/BSD license or a dual license otherwise [\#58](https://github.com/schmittjoh/metadata/issues/58)
+- Unexpected return value [\#52](https://github.com/schmittjoh/metadata/issues/52)
+- Why 0666 mode for cache file [\#48](https://github.com/schmittjoh/metadata/issues/48)
+- Tons of I/O operations caused by NullMetadata [\#45](https://github.com/schmittjoh/metadata/issues/45)
+
+**Merged pull requests:**
+
+- Add PsrCacheAdapter [\#63](https://github.com/schmittjoh/metadata/pull/63) ([nicolas-grekas](https://github.com/nicolas-grekas))
+- 50 suspress chmod warning [\#53](https://github.com/schmittjoh/metadata/pull/53) ([gusdecool](https://github.com/gusdecool))
+- Adaption for complying with SPDX identifiers [\#51](https://github.com/schmittjoh/metadata/pull/51) ([valioDOTch](https://github.com/valioDOTch))
+
+## [1.5.1](https://github.com/schmittjoh/metadata/tree/1.5.1) (2014-07-12)
+**Merged pull requests:**
+
+- Added more PHP versions and HHVM [\#47](https://github.com/schmittjoh/metadata/pull/47) ([Nyholm](https://github.com/Nyholm))
+- Fix NullMetadata performance issue [\#46](https://github.com/schmittjoh/metadata/pull/46) ([adrienbrault](https://github.com/adrienbrault))
+- Fixed logic bug. [\#41](https://github.com/schmittjoh/metadata/pull/41) ([flip111](https://github.com/flip111))
+- Update FileCache.php added fallback option when rename fails on windows [\#40](https://github.com/schmittjoh/metadata/pull/40) ([flip111](https://github.com/flip111))
+
+## [1.5.0](https://github.com/schmittjoh/metadata/tree/1.5.0) (2013-11-05)
+**Closed issues:**
+
+- Branch alias [\#38](https://github.com/schmittjoh/metadata/issues/38)
+
+**Merged pull requests:**
+
+- Don't make MetadataFactory final [\#37](https://github.com/schmittjoh/metadata/pull/37) ([bakura10](https://github.com/bakura10))
+- Cache when there is no metadata for a class [\#36](https://github.com/schmittjoh/metadata/pull/36) ([adrienbrault](https://github.com/adrienbrault))
+- Allow to add drivers to a driver chain [\#35](https://github.com/schmittjoh/metadata/pull/35) ([bakura10](https://github.com/bakura10))
+
+## [1.4.2](https://github.com/schmittjoh/metadata/tree/1.4.2) (2013-09-13)
+**Closed issues:**
+
+- Update changelog [\#33](https://github.com/schmittjoh/metadata/issues/33)
+- Error in Symfony2's production environment \(only\) caused with version \>= 1.4.0 [\#32](https://github.com/schmittjoh/metadata/issues/32)
+
+**Merged pull requests:**
+
+- Set cache files to be world readable [\#34](https://github.com/schmittjoh/metadata/pull/34) ([tommygnr](https://github.com/tommygnr))
+
+## [1.4.1](https://github.com/schmittjoh/metadata/tree/1.4.1) (2013-08-27)
+## [1.4.0](https://github.com/schmittjoh/metadata/tree/1.4.0) (2013-08-25)
+## [1.3.0](https://github.com/schmittjoh/metadata/tree/1.3.0) (2013-01-22)
+**Closed issues:**
+
+- Ability to eager-load possible metadata [\#19](https://github.com/schmittjoh/metadata/issues/19)
+
+**Merged pull requests:**
+
+- misc cleanup [\#23](https://github.com/schmittjoh/metadata/pull/23) ([vicb](https://github.com/vicb))
+- \[Cache\] Remove a race condition [\#22](https://github.com/schmittjoh/metadata/pull/22) ([vicb](https://github.com/vicb))
+- Added configs for ci services [\#21](https://github.com/schmittjoh/metadata/pull/21) ([j](https://github.com/j))
+- Advanced metadata implementation. [\#20](https://github.com/schmittjoh/metadata/pull/20) ([j](https://github.com/j))
+- Remove incorrect docblocks [\#18](https://github.com/schmittjoh/metadata/pull/18) ([adrienbrault](https://github.com/adrienbrault))
+
+## [1.2.0-RC](https://github.com/schmittjoh/metadata/tree/1.2.0-RC) (2012-08-21)
+**Closed issues:**
+
+- install version 1.0.0 with composer [\#9](https://github.com/schmittjoh/metadata/issues/9)
+- create version/tag 1.1.1 [\#3](https://github.com/schmittjoh/metadata/issues/3)
+
+**Merged pull requests:**
+
+- Added the branch alias and changed the constraint on common [\#8](https://github.com/schmittjoh/metadata/pull/8) ([stof](https://github.com/stof))
+- Add trait test [\#6](https://github.com/schmittjoh/metadata/pull/6) ([Seldaek](https://github.com/Seldaek))
+- Fix locating files for classes without namespace [\#5](https://github.com/schmittjoh/metadata/pull/5) ([Seldaek](https://github.com/Seldaek))
+- Add ApcCache [\#4](https://github.com/schmittjoh/metadata/pull/4) ([henrikbjorn](https://github.com/henrikbjorn))
+
+## [1.1.1](https://github.com/schmittjoh/metadata/tree/1.1.1) (2012-01-02)
+**Closed issues:**
+
+- More documentation requested [\#1](https://github.com/schmittjoh/metadata/issues/1)
+
+**Merged pull requests:**
+
+- Add composer.json [\#2](https://github.com/schmittjoh/metadata/pull/2) ([Seldaek](https://github.com/Seldaek))
+
+## [1.1.0](https://github.com/schmittjoh/metadata/tree/1.1.0) (2011-10-04)
+## [1.0.0](https://github.com/schmittjoh/metadata/tree/1.0.0) (2011-07-09)
+
+
+\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/CONTRIBUTING.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/CONTRIBUTING.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/CONTRIBUTING.md	(revision 8435)
@@ -0,0 +1,44 @@
+# Contribute
+
+Thank you for contributing!
+
+Before we can merge your Pull-Request here are some guidelines that you need to follow. 
+These guidelines exist not to annoy you, but to keep the code base clean, unified and future proof.
+
+## Coding Standard
+
+This project uses [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) to enforce coding standards.
+The coding standard rules are defined in the **phpcs.xml.dist** file (part of this repository).
+The project follows a relaxed version of the Doctrine Coding standards v4.
+
+Your Pull-Request must be compliant with the said standard.
+To check your code you can run `vendor/bin/phpcs`. This command will give you a list of violations in your code (if any).
+The most common errors can be automatically fixed just by running `vendor/bin/phpcbf`.
+
+## Unit-Tests
+
+Please try to add a test for your pull-request. This project uses [PHPUnit](https://phpunit.de/) as testing framework.
+
+You can run the unit-tests by calling `vendor/bin/phpunit`.
+
+New features without tests can't be merged.
+
+## CI
+
+We automatically run your pull request through [Travis CI](https://www.travis-ci.org) 
+and [Scrutinizer CI](https://scrutinizer-ci.com/).
+If you break the tests, we cannot merge your code,
+so please make sure that your code is working before opening up a Pull-Request.
+
+## Issues and Bugs
+
+To create a new issue, you can use the GitHub issue tracking system.
+Please try to avoid opening support-related tickets. For support related questions please use more appropriate
+channels as Q&A platforms (such as Stackoverflow), Forums, Local PHP user groups.
+
+## Getting merged
+
+Please allow us time to review your pull requests.
+We will give our best to review everything as fast as possible, but cannot always live up to our own expectations.
+
+Thank you very much again for your contribution!
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/LICENSE	(revision 8435)
@@ -0,0 +1,19 @@
+Copyright (c) 2018 Johannes M. Schmitt
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/README.md	(revision 8435)
@@ -0,0 +1,55 @@
+Metadata is a library for class/method/property metadata management in PHP
+==========================================================================
+
+| [Master (2.x)][Master] | [1.x][1.x] |
+|:----------------:|:----------:|
+| [![Build status][Master image]][Master] | [![Build status][1.x image]][1.x] |
+| [![Coverage Status][Master coverage image]][Master coverage] | [![Coverage Status][1.x coverage image]][1.x coverage] |
+
+
+Overview
+--------
+
+This library provides some commonly needed base classes for managing metadata
+for classes, methods and properties. The metadata can come from many different
+sources (annotations, YAML/XML/PHP configuration files).
+
+The metadata classes are used to abstract away that source and provide a common
+interface for all of them.
+
+Usage
+-----
+
+The library provides three classes that you can extend to add your application
+specific properties, and flags: ``ClassMetadata``, ``MethodMetadata``, and
+``PropertyMetadata``
+
+After you have added, your properties in sub-classes, you also need to add
+``DriverInterface`` implementations which know how to populate these classes
+from the different metadata sources.
+
+Finally, you can use the ``MetadataFactory`` to retrieve the metadata::
+
+```php
+<?php
+    
+use Metadata\MetadataFactory;
+use Metadata\Driver\DriverChain;
+
+$driver = new DriverChain(array(
+    /** Annotation, YAML, XML, PHP, ... drivers */
+));
+$factory = new MetadataFactory($driver);
+$metadata = $factory->getMetadataForClass('MyNamespace\MyObject');
+```  
+
+  [Master image]: https://img.shields.io/travis/schmittjoh/metadata/master.svg?style=flat-square
+  [Master]: https://travis-ci.org/schmittjoh/metadata
+  [Master coverage image]: https://img.shields.io/scrutinizer/coverage/g/schmittjoh/metadata/master.svg?style=flat-square
+  [Master coverage]: https://scrutinizer-ci.com/g/schmittjoh/metadata/?branch=master
+  
+  [1.x image]: https://img.shields.io/travis/schmittjoh/metadata/1.x.svg?style=flat-square
+  [1.x]: https://github.com/schmittjoh/metadata/tree/1.x
+  [1.x coverage image]: https://img.shields.io/scrutinizer/coverage/g/schmittjoh/metadata/1.x.svg?style=flat-square
+  [1.x coverage]: https://scrutinizer-ci.com/g/schmittjoh/metadata/?branch=1.x
+  
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/UPGRADING.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/UPGRADING.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/UPGRADING.md	(revision 8435)
@@ -0,0 +1,62 @@
+From 2.2.3 to 2.3.0
+====================
+
+- The `\Serializable` PHP interface is deprecated, the methods of this interface will be removed in 3.0.
+  This change is done to allow the use of the new `__serialize` and `__unserialize` PHP's strategy.
+
+  If you were extending the metadata classes, your custom serialization methods were looking probably as something as this:
+
+    ```php
+    class MyMetadata extends PropertyMetadata 
+    {
+        // ... more code
+        
+        public function serialize()
+        {
+            $data = parent::serialize();
+    
+            return \serialize([$data, $this->customMetadataProp]);
+        }
+    
+        public function unserialize($str)
+        {
+            list($str, $this->customMetadataProp) = \unserialize($str);
+    
+            parent::unserialize($str);
+        }
+    }
+    ```
+    
+    After this change, your code should look like this:
+    
+    ```php
+    class MyMetadata extends PropertyMetadata 
+    {
+        // ... more code
+        
+        protected function serializeToArray(): array
+        {
+            $data = parent::serializeToArray();
+    
+            return [$data, $this->customMetadataProp];
+        }
+    
+        protected function unserializeFromArray(array $data): void
+        {
+            list($data, $this->customMetadataProp) = $data;
+    
+            parent::unserializeFromArray($data);
+        }
+    }
+    ```
+
+From 1.7.0 to 2.0.0
+====================
+
+- Type-hinting everywhere where allowed by PHP 7.2 and strict types are used now
+- `Metadata\Cache\CacheInterface` changed, methods have different names and signature; all the classes implementing 
+that interface have been modified accordingly 
+- `getValue` and `setValue` methods have been removed from `Metadata\PropertyMetadata`, getting/setting properties is not 
+responsibility of this library anymore
+- the `$reflection` property has been removed from `Metadata\PropertyMetadata`; 
+metadata information do not require (and do not offer) reflection anymore
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/composer.json	(revision 8435)
@@ -0,0 +1,45 @@
+{
+    "name": "jms/metadata",
+    "description": "Class/method/property metadata management in PHP",
+    "keywords": ["annotations","metadata","yaml","xml"],
+    "type": "library",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Johannes M. Schmitt",
+            "email": "schmittjoh@gmail.com"
+        },
+        {
+            "name": "Asmir Mustafic",
+            "email": "goetas@gmail.com"
+        }
+    ],
+    "require": {
+        "php": "^7.2|^8.0"
+    },
+    "require-dev" : {
+        "doctrine/cache" : "^1.0",
+        "doctrine/coding-standard": "^8.0",
+        "phpunit/phpunit": "^8.5|^9.0",
+        "psr/container": "^1.0|^2.0",
+        "symfony/cache" : "^3.1|^4.0|^5.0",
+        "symfony/dependency-injection" : "^3.1|^4.0|^5.0",
+        "mikey179/vfsstream": "^1.6.7"
+    },
+    "autoload": {
+        "psr-4": { "Metadata\\": "src/" }
+    },
+    "autoload-dev": {
+        "psr-4": { "Metadata\\Tests\\": "tests/" }
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "2.x-dev"
+        }
+    },
+    "config": {
+        "allow-plugins": {
+            "dealerdirect/phpcodesniffer-composer-installer": true
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/AdvancedMetadataFactoryInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/AdvancedMetadataFactoryInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/AdvancedMetadataFactoryInterface.php	(revision 8435)
@@ -0,0 +1,23 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata;
+
+/**
+ * Interface for advanced Metadata Factory implementations.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ * @author Jordan Stout <j@jrdn.org>
+ */
+interface AdvancedMetadataFactoryInterface extends MetadataFactoryInterface
+{
+    /**
+     * Gets all the possible classes.
+     *
+     * @return string[]
+     *
+     * @throws \RuntimeException When driver does not an advanced driver.
+     */
+    public function getAllClassNames(): array;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/CacheInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/CacheInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/CacheInterface.php	(revision 8435)
@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Cache;
+
+use Metadata\ClassMetadata;
+
+interface CacheInterface
+{
+    /**
+     * Loads a class metadata instance from the cache
+     */
+    public function load(string $class): ?ClassMetadata;
+
+    /**
+     * Puts a class metadata instance into the cache
+     */
+    public function put(ClassMetadata $metadata): void;
+
+    /**
+     * Evicts the class metadata for the given class from the cache.
+     */
+    public function evict(string $class): void;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/ClearableCacheInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/ClearableCacheInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/ClearableCacheInterface.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Cache;
+
+/**
+ * @author Alexander Strizhak <gam6itko@gmail.com>
+ */
+interface ClearableCacheInterface
+{
+    /**
+     * Clear all classes metadata from the cache.
+     */
+    public function clear(): bool;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/DoctrineCacheAdapter.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/DoctrineCacheAdapter.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/DoctrineCacheAdapter.php	(revision 8435)
@@ -0,0 +1,55 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Cache;
+
+use Doctrine\Common\Cache\Cache;
+use Metadata\ClassMetadata;
+
+/**
+ * @author Henrik Bjornskov <henrik@bjrnskov.dk>
+ */
+class DoctrineCacheAdapter implements CacheInterface, ClearableCacheInterface
+{
+    /**
+     * @var string
+     */
+    private $prefix;
+    /**
+     * @var Cache
+     */
+    private $cache;
+
+    public function __construct(string $prefix, Cache $cache)
+    {
+        $this->prefix = $prefix;
+        $this->cache = $cache;
+    }
+
+    public function load(string $class): ?ClassMetadata
+    {
+        $cache = $this->cache->fetch($this->prefix . $class);
+
+        return false === $cache ? null : $cache;
+    }
+
+    public function put(ClassMetadata $metadata): void
+    {
+        $this->cache->save($this->prefix . $metadata->name, $metadata);
+    }
+
+    public function evict(string $class): void
+    {
+        $this->cache->delete($this->prefix . $class);
+    }
+
+    public function clear(): bool
+    {
+        if (method_exists($this->cache, 'deleteAll')) { // or $this->cache instanceof ClearableCache
+            return call_user_func([$this->cache, 'deleteAll']);
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/FileCache.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/FileCache.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/FileCache.php	(revision 8435)
@@ -0,0 +1,134 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Cache;
+
+use Metadata\ClassMetadata;
+
+class FileCache implements CacheInterface, ClearableCacheInterface
+{
+    /**
+     * @var string
+     */
+    private $dir;
+
+    public function __construct(string $dir)
+    {
+        if (!is_dir($dir) && false === @mkdir($dir, 0777, true)) {
+            throw new \InvalidArgumentException(sprintf('Can\'t create directory for cache at "%s"', $dir));
+        }
+
+        $this->dir = rtrim($dir, '\\/');
+    }
+
+    public function load(string $class): ?ClassMetadata
+    {
+        $path = $this->getCachePath($class);
+        if (!is_readable($path)) {
+            return null;
+        }
+
+        try {
+            $metadata = include $path;
+            if ($metadata instanceof ClassMetadata) {
+                return $metadata;
+            }
+
+            // if the file does not return anything, the return value is integer `1`.
+        } catch (\Error $e) {
+            // ignore corrupted cache
+        }
+
+        return null;
+    }
+
+    public function put(ClassMetadata $metadata): void
+    {
+        if (!is_writable($this->dir)) {
+            throw new \InvalidArgumentException(sprintf('The directory "%s" is not writable.', $this->dir));
+        }
+
+        $path = $this->getCachePath($metadata->name);
+        if (!is_writable(dirname($path))) {
+            throw new \RuntimeException(sprintf('Cache file "%s" is not writable.', $path));
+        }
+
+        $tmpFile = tempnam($this->dir, 'metadata-cache');
+        if (false === $tmpFile) {
+            $this->evict($metadata->name);
+
+            return;
+        }
+
+        $data = '<?php return unserialize(' . var_export(serialize($metadata), true) . ');';
+        $bytesWritten = file_put_contents($tmpFile, $data);
+        // use strlen and not mb_strlen. if there is utf8 in the code, it also writes more bytes.
+        if ($bytesWritten !== strlen($data)) {
+            @unlink($tmpFile);
+            // also evict the cache to not use an outdated version.
+            $this->evict($metadata->name);
+
+            return;
+        }
+
+        // Let's not break filesystems which do not support chmod.
+        @chmod($tmpFile, 0666 & ~umask());
+
+        $this->renameFile($tmpFile, $path);
+    }
+
+    /**
+     * Renames a file with fallback for windows
+     */
+    private function renameFile(string $source, string $target): void
+    {
+        if (false === @rename($source, $target)) {
+            if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+                if (false === copy($source, $target)) {
+                    throw new \RuntimeException(sprintf('(WIN) Could not write new cache file to %s.', $target));
+                }
+
+                if (false === unlink($source)) {
+                    throw new \RuntimeException(sprintf('(WIN) Could not delete temp cache file to %s.', $source));
+                }
+            } else {
+                throw new \RuntimeException(sprintf('Could not write new cache file to %s.', $target));
+            }
+        }
+    }
+
+    public function evict(string $class): void
+    {
+        $path = $this->getCachePath($class);
+        if (file_exists($path)) {
+            @unlink($path);
+        }
+    }
+
+    public function clear(): bool
+    {
+        $result = true;
+        $files = glob($this->dir . '/*.cache.php');
+        foreach ($files as $file) {
+            if (is_file($file)) {
+                $result = $result && @unlink($file);
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * This function computes the cache file path.
+     *
+     * If anonymous class is to be cached, it contains invalid path characters that need to be removed/replaced
+     * Example of anonymous class name: class@anonymous\x00/app/src/Controller/DefaultController.php0x7f82a7e026ec
+     */
+    private function getCachePath(string $key): string
+    {
+        $fileName = str_replace(['\\', "\0", '@', '/', '$', '{', '}', ':'], '-', $key);
+
+        return $this->dir . '/' . $fileName . '.cache.php';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/PsrCacheAdapter.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/PsrCacheAdapter.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Cache/PsrCacheAdapter.php	(revision 8435)
@@ -0,0 +1,69 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Cache;
+
+use Metadata\ClassMetadata;
+use Psr\Cache\CacheItemPoolInterface;
+
+class PsrCacheAdapter implements CacheInterface, ClearableCacheInterface
+{
+    /**
+     * @var string
+     */
+    private $prefix;
+
+    /**
+     * @var CacheItemPoolInterface
+     */
+    private $pool;
+
+    /**
+     * @var CacheItemPoolInterface
+     */
+    private $lastItem;
+
+    public function __construct(string $prefix, CacheItemPoolInterface $pool)
+    {
+        $this->prefix = $prefix;
+        $this->pool = $pool;
+    }
+
+    public function load(string $class): ?ClassMetadata
+    {
+        $this->lastItem = $this->pool->getItem($this->sanitizeCacheKey($this->prefix . $class));
+
+        return $this->lastItem->get();
+    }
+
+    public function put(ClassMetadata $metadata): void
+    {
+        $key = $this->sanitizeCacheKey($this->prefix . $metadata->name);
+
+        if (null === $this->lastItem || $this->lastItem->getKey() !== $key) {
+            $this->lastItem = $this->pool->getItem($key);
+        }
+
+        $this->pool->save($this->lastItem->set($metadata));
+    }
+
+    public function evict(string $class): void
+    {
+        $this->pool->deleteItem($this->sanitizeCacheKey($this->prefix . $class));
+    }
+
+    public function clear(): bool
+    {
+        return $this->pool->clear();
+    }
+
+    /**
+     * If anonymous class is to be cached, it contains invalid path characters that need to be removed/replaced
+     * Example of anonymous class name: class@anonymous\x00/app/src/Controller/DefaultController.php0x7f82a7e026ec
+     */
+    private function sanitizeCacheKey(string $key): string
+    {
+        return str_replace(['\\', "\0", '@', '/', '$', '{', '}', ':'], '-', $key);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/ClassHierarchyMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/ClassHierarchyMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/ClassHierarchyMetadata.php	(revision 8435)
@@ -0,0 +1,44 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata;
+
+/**
+ * Represents the metadata for the entire class hierarchy.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class ClassHierarchyMetadata
+{
+    /**
+     * @var ClassMetadata[]
+     */
+    public $classMetadata = [];
+
+    public function addClassMetadata(ClassMetadata $metadata): void
+    {
+        $this->classMetadata[$metadata->name] = $metadata;
+    }
+
+    public function getRootClassMetadata(): ?ClassMetadata
+    {
+        return reset($this->classMetadata);
+    }
+
+    public function getOutsideClassMetadata(): ?ClassMetadata
+    {
+        return end($this->classMetadata);
+    }
+
+    public function isFresh(int $timestamp): bool
+    {
+        foreach ($this->classMetadata as $metadata) {
+            if (!$metadata->isFresh($timestamp)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/ClassMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/ClassMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/ClassMetadata.php	(revision 8435)
@@ -0,0 +1,100 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata;
+
+/**
+ * Base class for class metadata.
+ *
+ * This class is intended to be extended to add your own application specific
+ * properties, and flags.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class ClassMetadata implements \Serializable
+{
+    use SerializationHelper;
+
+    /**
+     * @var string
+     */
+    public $name;
+
+    /**
+     * @var MethodMetadata[]
+     */
+    public $methodMetadata = [];
+
+    /**
+     * @var PropertyMetadata[]
+     */
+    public $propertyMetadata = [];
+
+    /**
+     * @var string[]
+     */
+    public $fileResources = [];
+
+    /**
+     * @var int
+     */
+    public $createdAt;
+
+    public function __construct(string $name)
+    {
+        $this->name = $name;
+        $this->createdAt = time();
+    }
+
+    public function addMethodMetadata(MethodMetadata $metadata): void
+    {
+        $this->methodMetadata[$metadata->name] = $metadata;
+    }
+
+    public function addPropertyMetadata(PropertyMetadata $metadata): void
+    {
+        $this->propertyMetadata[$metadata->name] = $metadata;
+    }
+
+    public function isFresh(?int $timestamp = null): bool
+    {
+        if (null === $timestamp) {
+            $timestamp = $this->createdAt;
+        }
+
+        foreach ($this->fileResources as $filepath) {
+            if (!file_exists($filepath)) {
+                return false;
+            }
+
+            if ($timestamp < filemtime($filepath)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    protected function serializeToArray(): array
+    {
+        return [
+            $this->name,
+            $this->methodMetadata,
+            $this->propertyMetadata,
+            $this->fileResources,
+            $this->createdAt,
+        ];
+    }
+
+    protected function unserializeFromArray(array $data): void
+    {
+        [
+            $this->name,
+            $this->methodMetadata,
+            $this->propertyMetadata,
+            $this->fileResources,
+            $this->createdAt,
+        ] = $data;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/AbstractFileDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/AbstractFileDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/AbstractFileDriver.php	(revision 8435)
@@ -0,0 +1,56 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Driver;
+
+use Metadata\ClassMetadata;
+
+/**
+ * Base file driver implementation.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+abstract class AbstractFileDriver implements AdvancedDriverInterface
+{
+    /**
+     * @var FileLocatorInterface|FileLocator
+     */
+    private $locator;
+
+    public function __construct(FileLocatorInterface $locator)
+    {
+        $this->locator = $locator;
+    }
+
+    public function loadMetadataForClass(\ReflectionClass $class): ?ClassMetadata
+    {
+        if (null === $path = $this->locator->findFileForClass($class, $this->getExtension())) {
+            return null;
+        }
+
+        return $this->loadMetadataFromFile($class, $path);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getAllClassNames(): array
+    {
+        if (!$this->locator instanceof AdvancedFileLocatorInterface) {
+            throw new \RuntimeException(sprintf('Locator "%s" must be an instance of "AdvancedFileLocatorInterface".', get_class($this->locator)));
+        }
+
+        return $this->locator->findAllClasses($this->getExtension());
+    }
+
+    /**
+     * Parses the content of the file, and converts it to the desired metadata.
+     */
+    abstract protected function loadMetadataFromFile(\ReflectionClass $class, string $file): ?ClassMetadata;
+
+    /**
+     * Returns the extension of the file.
+     */
+    abstract protected function getExtension(): string;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/AdvancedDriverInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/AdvancedDriverInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/AdvancedDriverInterface.php	(revision 8435)
@@ -0,0 +1,20 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Driver;
+
+/**
+ * Forces advanced logic to drivers.
+ *
+ * @author Jordan Stout <j@jrdn.org>
+ */
+interface AdvancedDriverInterface extends DriverInterface
+{
+    /**
+     * Gets all the metadata class names known to this driver.
+     *
+     * @return string[]
+     */
+    public function getAllClassNames(): array;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/AdvancedFileLocatorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/AdvancedFileLocatorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/AdvancedFileLocatorInterface.php	(revision 8435)
@@ -0,0 +1,20 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Driver;
+
+/**
+ * Forces advanced logic on a file locator.
+ *
+ * @author Jordan Stout <j@jrdn.org>
+ */
+interface AdvancedFileLocatorInterface extends FileLocatorInterface
+{
+    /**
+     * Finds all possible metadata files.*
+     *
+     * @return string[]
+     */
+    public function findAllClasses(string $extension): array;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/DriverChain.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/DriverChain.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/DriverChain.php	(revision 8435)
@@ -0,0 +1,65 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Driver;
+
+use Metadata\ClassMetadata;
+
+final class DriverChain implements AdvancedDriverInterface
+{
+    /**
+     * @var DriverInterface[]
+     */
+    private $drivers;
+
+    /**
+     * @param DriverInterface[] $drivers
+     */
+    public function __construct(array $drivers = [])
+    {
+        $this->drivers = $drivers;
+    }
+
+    public function addDriver(DriverInterface $driver): void
+    {
+        $this->drivers[] = $driver;
+    }
+
+    public function loadMetadataForClass(\ReflectionClass $class): ?ClassMetadata
+    {
+        foreach ($this->drivers as $driver) {
+            if (null !== $metadata = $driver->loadMetadataForClass($class)) {
+                return $metadata;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getAllClassNames(): array
+    {
+        $classes = [];
+        foreach ($this->drivers as $driver) {
+            if (!$driver instanceof AdvancedDriverInterface) {
+                throw new \RuntimeException(
+                    sprintf(
+                        'Driver "%s" must be an instance of "AdvancedDriverInterface" to use ' .
+                        '"DriverChain::getAllClassNames()".',
+                        get_class($driver)
+                    )
+                );
+            }
+
+            $driverClasses = $driver->getAllClassNames();
+            if (!empty($driverClasses)) {
+                $classes = array_merge($classes, $driverClasses);
+            }
+        }
+
+        return $classes;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/DriverInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/DriverInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/DriverInterface.php	(revision 8435)
@@ -0,0 +1,12 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Driver;
+
+use Metadata\ClassMetadata;
+
+interface DriverInterface
+{
+    public function loadMetadataForClass(\ReflectionClass $class): ?ClassMetadata;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/FileLocator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/FileLocator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/FileLocator.php	(revision 8435)
@@ -0,0 +1,80 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Driver;
+
+class FileLocator implements AdvancedFileLocatorInterface, TraceableFileLocatorInterface
+{
+    /**
+     * @var string[]
+     */
+    private $dirs;
+
+    /**
+     * @param string[] $dirs
+     */
+    public function __construct(array $dirs)
+    {
+        $this->dirs = $dirs;
+    }
+
+    /**
+     * @return array<string, bool>
+     */
+    public function getPossibleFilesForClass(\ReflectionClass $class, string $extension): array
+    {
+        $possibleFiles = [];
+        foreach ($this->dirs as $prefix => $dir) {
+            if ('' !== $prefix && 0 !== strpos($class->getNamespaceName(), $prefix)) {
+                continue;
+            }
+
+            $len = '' === $prefix ? 0 : strlen($prefix) + 1;
+            $path = $dir . '/' . str_replace('\\', '.', substr($class->name, $len)) . '.' . $extension;
+            $existsPath = file_exists($path);
+            $possibleFiles[$path] = $existsPath;
+            if ($existsPath) {
+                return $possibleFiles;
+            }
+        }
+
+        return $possibleFiles;
+    }
+
+    public function findFileForClass(\ReflectionClass $class, string $extension): ?string
+    {
+        foreach ($this->getPossibleFilesForClass($class, $extension) as $path => $existsPath) {
+            if ($existsPath) {
+                return $path;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function findAllClasses(string $extension): array
+    {
+        $classes = [];
+        foreach ($this->dirs as $prefix => $dir) {
+            /** @var \RecursiveIteratorIterator|\SplFileInfo[] $iterator */
+            $iterator = new \RecursiveIteratorIterator(
+                new \RecursiveDirectoryIterator($dir),
+                \RecursiveIteratorIterator::LEAVES_ONLY
+            );
+            $nsPrefix = '' !== $prefix ? $prefix . '\\' : '';
+            foreach ($iterator as $file) {
+                if (($fileName = $file->getBasename('.' . $extension)) === $file->getBasename()) {
+                    continue;
+                }
+
+                $classes[] = $nsPrefix . str_replace('.', '\\', $fileName);
+            }
+        }
+
+        return $classes;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/FileLocatorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/FileLocatorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/FileLocatorInterface.php	(revision 8435)
@@ -0,0 +1,10 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Driver;
+
+interface FileLocatorInterface
+{
+    public function findFileForClass(\ReflectionClass $class, string $extension): ?string;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/LazyLoadingDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/LazyLoadingDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/LazyLoadingDriver.php	(revision 8435)
@@ -0,0 +1,40 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Driver;
+
+use Metadata\ClassMetadata;
+use Psr\Container\ContainerInterface as PsrContainerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+class LazyLoadingDriver implements DriverInterface
+{
+    /**
+     * @var ContainerInterface|PsrContainerInterface
+     */
+    private $container;
+
+    /**
+     * @var string
+     */
+    private $realDriverId;
+
+    /**
+     * @param ContainerInterface|PsrContainerInterface $container
+     */
+    public function __construct($container, string $realDriverId)
+    {
+        if (!$container instanceof PsrContainerInterface && !$container instanceof ContainerInterface) {
+            throw new \InvalidArgumentException(sprintf('The container must be an instance of %s or %s (%s given).', PsrContainerInterface::class, ContainerInterface::class, \is_object($container) ? \get_class($container) : \gettype($container)));
+        }
+
+        $this->container = $container;
+        $this->realDriverId = $realDriverId;
+    }
+
+    public function loadMetadataForClass(\ReflectionClass $class): ?ClassMetadata
+    {
+        return $this->container->get($this->realDriverId)->loadMetadataForClass($class);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/TraceableFileLocatorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/TraceableFileLocatorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/Driver/TraceableFileLocatorInterface.php	(revision 8435)
@@ -0,0 +1,15 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata\Driver;
+
+interface TraceableFileLocatorInterface extends FileLocatorInterface
+{
+    /**
+     * Finds all possible metadata files for a class
+     *
+     * @return string[]
+     */
+    public function getPossibleFilesForClass(\ReflectionClass $class, string $extension): array;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MergeableClassMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MergeableClassMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MergeableClassMetadata.php	(revision 8435)
@@ -0,0 +1,24 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata;
+
+class MergeableClassMetadata extends ClassMetadata implements MergeableInterface
+{
+    public function merge(MergeableInterface $object): void
+    {
+        if (!$object instanceof MergeableClassMetadata) {
+            throw new \InvalidArgumentException('$object must be an instance of MergeableClassMetadata.');
+        }
+
+        $this->name = $object->name;
+        $this->methodMetadata = array_merge($this->methodMetadata, $object->methodMetadata);
+        $this->propertyMetadata = array_merge($this->propertyMetadata, $object->propertyMetadata);
+        $this->fileResources = array_merge($this->fileResources, $object->fileResources);
+
+        if ($object->createdAt < $this->createdAt) {
+            $this->createdAt = $object->createdAt;
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MergeableInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MergeableInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MergeableInterface.php	(revision 8435)
@@ -0,0 +1,10 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata;
+
+interface MergeableInterface
+{
+    public function merge(MergeableInterface $object): void;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MetadataFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MetadataFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MetadataFactory.php	(revision 8435)
@@ -0,0 +1,217 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata;
+
+use Metadata\Cache\CacheInterface;
+use Metadata\Driver\AdvancedDriverInterface;
+use Metadata\Driver\DriverInterface;
+
+class MetadataFactory implements AdvancedMetadataFactoryInterface
+{
+    /**
+     * @var DriverInterface
+     */
+    private $driver;
+
+    /**
+     * @var CacheInterface
+     */
+    private $cache;
+
+    /**
+     * @var ClassMetadata[]
+     */
+    private $loadedMetadata = [];
+
+    /**
+     * @var ClassMetadata[]
+     */
+    private $loadedClassMetadata = [];
+
+    /**
+     * @var string|null
+     */
+    private $hierarchyMetadataClass;
+
+    /**
+     * @var bool
+     */
+    private $includeInterfaces = false;
+
+    /**
+     * @var bool
+     */
+    private $debug = false;
+
+    public function __construct(DriverInterface $driver, ?string $hierarchyMetadataClass = 'Metadata\ClassHierarchyMetadata', bool $debug = false)
+    {
+        $this->driver = $driver;
+        $this->hierarchyMetadataClass = $hierarchyMetadataClass;
+        $this->debug = $debug;
+    }
+
+    public function setIncludeInterfaces(bool $include): void
+    {
+        $this->includeInterfaces = $include;
+    }
+
+    public function setCache(CacheInterface $cache): void
+    {
+        $this->cache = $cache;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getMetadataForClass(string $className)
+    {
+        if (isset($this->loadedMetadata[$className])) {
+            return $this->filterNullMetadata($this->loadedMetadata[$className]);
+        }
+
+        $metadata = null;
+        foreach ($this->getClassHierarchy($className) as $class) {
+            if (isset($this->loadedClassMetadata[$name = $class->getName()])) {
+                if (null !== $classMetadata = $this->filterNullMetadata($this->loadedClassMetadata[$name])) {
+                    $this->addClassMetadata($metadata, $classMetadata);
+                }
+
+                continue;
+            }
+
+            // check the cache
+            if (null !== $this->cache) {
+                if (($classMetadata = $this->cache->load($class->getName())) instanceof NullMetadata) {
+                    $this->loadedClassMetadata[$name] = $classMetadata;
+                    continue;
+                }
+
+                if (null !== $classMetadata) {
+                    if (!$classMetadata instanceof ClassMetadata) {
+                        throw new \LogicException(sprintf(
+                            'The cache must return instances of ClassMetadata for class %s, but got %s.',
+                            $className,
+                            var_export($classMetadata, true)
+                        ));
+                    }
+
+                    if ($this->debug && !$classMetadata->isFresh()) {
+                        $this->cache->evict($classMetadata->name);
+                    } else {
+                        $this->loadedClassMetadata[$name] = $classMetadata;
+                        $this->addClassMetadata($metadata, $classMetadata);
+                        continue;
+                    }
+                }
+            }
+
+            // load from source
+            if (null !== $classMetadata = $this->driver->loadMetadataForClass($class)) {
+                $this->loadedClassMetadata[$name] = $classMetadata;
+                $this->addClassMetadata($metadata, $classMetadata);
+
+                if (null !== $this->cache) {
+                    $this->cache->put($classMetadata);
+                }
+
+                continue;
+            }
+
+            if (null !== $this->cache && !$this->debug) {
+                $this->cache->put(new NullMetadata($class->getName()));
+            }
+        }
+
+        if (null === $metadata) {
+            $metadata = new NullMetadata($className);
+        }
+
+        return $this->filterNullMetadata($this->loadedMetadata[$className] = $metadata);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getAllClassNames(): array
+    {
+        if (!$this->driver instanceof AdvancedDriverInterface) {
+            throw new \RuntimeException(
+                sprintf('Driver "%s" must be an instance of "AdvancedDriverInterface".', get_class($this->driver))
+            );
+        }
+
+        return $this->driver->getAllClassNames();
+    }
+
+    /**
+     * @param MergeableInterface|ClassHierarchyMetadata $metadata
+     */
+    private function addClassMetadata(&$metadata, ClassMetadata $toAdd): void
+    {
+        if ($toAdd instanceof MergeableInterface) {
+            if (null === $metadata) {
+                $metadata = clone $toAdd;
+            } else {
+                $metadata->merge($toAdd);
+            }
+        } else {
+            if (null === $metadata) {
+                $class = $this->hierarchyMetadataClass;
+                $metadata = new $class();
+            }
+
+            $metadata->addClassMetadata($toAdd);
+        }
+    }
+
+    /**
+     * @return \ReflectionClass[]
+     */
+    private function getClassHierarchy(string $class): array
+    {
+        $classes = [];
+        $refl = new \ReflectionClass($class);
+
+        do {
+            $classes[] = $refl;
+            $refl = $refl->getParentClass();
+        } while (false !== $refl);
+
+        $classes = array_reverse($classes, false);
+
+        if (!$this->includeInterfaces) {
+            return $classes;
+        }
+
+        $addedInterfaces = [];
+        $newHierarchy = [];
+
+        foreach ($classes as $class) {
+            foreach ($class->getInterfaces() as $interface) {
+                if (isset($addedInterfaces[$interface->getName()])) {
+                    continue;
+                }
+
+                $addedInterfaces[$interface->getName()] = true;
+
+                $newHierarchy[] = $interface;
+            }
+
+            $newHierarchy[] = $class;
+        }
+
+        return $newHierarchy;
+    }
+
+    /**
+     * @param ClassMetadata|ClassHierarchyMetadata|MergeableInterface $metadata
+     *
+     * @return ClassMetadata|ClassHierarchyMetadata|MergeableInterface
+     */
+    private function filterNullMetadata($metadata = null)
+    {
+        return !$metadata instanceof NullMetadata ? $metadata : null;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MetadataFactoryInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MetadataFactoryInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MetadataFactoryInterface.php	(revision 8435)
@@ -0,0 +1,29 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata;
+
+/**
+ * Interface for Metadata Factory implementations.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+interface MetadataFactoryInterface
+{
+    /**
+     * Returns the gathered metadata for the given class name.
+     *
+     * If the drivers return instances of MergeableClassMetadata, these will be
+     * merged prior to returning. Otherwise, all metadata for the inheritance
+     * hierarchy will be returned as ClassHierarchyMetadata unmerged.
+     *
+     * If no metadata is available, null is returned.
+     *
+     * @return ClassHierarchyMetadata|MergeableClassMetadata|null
+     *
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.UselessReturnAnnotation
+     */
+    public function getMetadataForClass(string $className);
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MethodMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MethodMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/MethodMetadata.php	(revision 8435)
@@ -0,0 +1,90 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata;
+
+/**
+ * Base class for method metadata.
+ *
+ * This class is intended to be extended to add your application specific
+ * properties, and flags.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ * @property $reflection
+ */
+class MethodMetadata implements \Serializable
+{
+    use SerializationHelper;
+
+    /**
+     * @var string
+     */
+    public $class;
+
+    /**
+     * @var string
+     */
+    public $name;
+
+    /**
+     * @var \ReflectionMethod
+     */
+    private $reflection;
+
+    public function __construct(string $class, string $name)
+    {
+        $this->class = $class;
+        $this->name = $name;
+    }
+
+    /**
+     * @param mixed[] $args
+     *
+     * @return mixed
+     */
+    public function invoke(object $obj, array $args = [])
+    {
+        return $this->getReflection()->invokeArgs($obj, $args);
+    }
+
+    /**
+     * @return mixed
+     */
+    public function __get(string $propertyName)
+    {
+        if ('reflection' === $propertyName) {
+            return $this->getReflection();
+        }
+
+        return $this->$propertyName;
+    }
+
+    /**
+     * @param mixed $value
+     */
+    public function __set(string $propertyName, $value): void
+    {
+        $this->$propertyName = $value;
+    }
+
+    private function getReflection(): \ReflectionMethod
+    {
+        if (null === $this->reflection) {
+            $this->reflection = new \ReflectionMethod($this->class, $this->name);
+            $this->reflection->setAccessible(true);
+        }
+
+        return $this->reflection;
+    }
+
+    protected function serializeToArray(): array
+    {
+        return [$this->class, $this->name];
+    }
+
+    protected function unserializeFromArray(array $data): void
+    {
+        [$this->class, $this->name] = $data;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/NullMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/NullMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/NullMetadata.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata;
+
+/**
+ * Represents the metadata for a class that has not metadata.
+ *
+ * @author Adrien Brault <adrien.brault@gmail.com>
+ */
+class NullMetadata extends ClassMetadata
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/PropertyMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/PropertyMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/PropertyMetadata.php	(revision 8435)
@@ -0,0 +1,47 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata;
+
+/**
+ * Base class for property metadata.
+ *
+ * This class is intended to be extended to add your application specific
+ * properties, and flags.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class PropertyMetadata implements \Serializable
+{
+    use SerializationHelper;
+
+    /**
+     * @var string
+     */
+    public $class;
+
+    /**
+     * @var string
+     */
+    public $name;
+
+    public function __construct(string $class, string $name)
+    {
+        $this->class = $class;
+        $this->name = $name;
+    }
+
+    protected function serializeToArray(): array
+    {
+        return [
+            $this->class,
+            $this->name,
+        ];
+    }
+
+    protected function unserializeFromArray(array $data): void
+    {
+        [$this->class, $this->name] = $data;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/metadata/src/SerializationHelper.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/metadata/src/SerializationHelper.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/metadata/src/SerializationHelper.php	(revision 8435)
@@ -0,0 +1,40 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Metadata;
+
+trait SerializationHelper
+{
+    /**
+     * @deprecated Use serializeToArray
+     *
+     * @return string
+     */
+    public function serialize()
+    {
+        return serialize($this->serializeToArray());
+    }
+
+    /**
+     * @deprecated Use unserializeFromArray
+     *
+     * @param string $str
+     *
+     * @return void
+     */
+    public function unserialize($str)
+    {
+        $this->unserializeFromArray(unserialize($str));
+    }
+
+    public function __serialize(): array
+    {
+        return [$this->serialize()];
+    }
+
+    public function __unserialize(array $data): void
+    {
+        $this->unserialize($data[0]);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/.run/phpunit.run.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/.run/phpunit.run.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/.run/phpunit.run.xml	(revision 8435)
@@ -0,0 +1,6 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="phpunit" type="PHPUnitRunConfigurationType" factoryName="PHPUnit">
+    <TestRunner configuration_file="$PROJECT_DIR$/phpunit.xml.dist" scope="XML" />
+    <method v="2" />
+  </configuration>
+</component>
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/CHANGELOG.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/CHANGELOG.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/CHANGELOG.md	(revision 8435)
@@ -0,0 +1,544 @@
+# Changelog
+
+## [3.15.0](https://github.com/schmittjoh/serializer/tree/3.15.0) (2021-10-14)
+
+**Merged pull requests:**
+
+- allow the groups annotation to use "groups" as parameter name [\#1351](https://github.com/schmittjoh/serializer/pull/1351) ([goetas](https://github.com/goetas))
+- Allow stable PHPStan PHPDoc Parser [\#1346](https://github.com/schmittjoh/serializer/pull/1346) ([mbabker](https://github.com/mbabker))
+- Symfony 6 and DBAL 3 compat [\#1345](https://github.com/schmittjoh/serializer/pull/1345) ([mbabker](https://github.com/mbabker))
+- Proposed fix for serializing custom DateTimeInterface implementations [\#1344](https://github.com/schmittjoh/serializer/pull/1344) ([andrei-dascalu](https://github.com/andrei-dascalu))
+- Allow to add prefix to twig helpers [\#1341](https://github.com/schmittjoh/serializer/pull/1341) ([goetas](https://github.com/goetas))
+- Fix phpstan return type [\#1329](https://github.com/schmittjoh/serializer/pull/1329) ([dgafka](https://github.com/dgafka))
+
+## [3.14.0](https://github.com/schmittjoh/serializer/tree/3.14.0) (2021-08-06)
+
+**Merged pull requests:**
+
+- Avoid duplicate/invalid definitions when loading the php attributes using the annotation driver [\#1340](https://github.com/schmittjoh/serializer/pull/1340) ([goetas](https://github.com/goetas))
+
+## [3.14.0-rc2](https://github.com/schmittjoh/serializer/tree/3.14.0-rc2) (2021-08-06)
+
+**Merged pull requests:**
+
+- run php8 ci on high and low deps [\#1339](https://github.com/schmittjoh/serializer/pull/1339) ([goetas](https://github.com/goetas))
+- php8 attributes are enabled by default on php8 or higher [\#1338](https://github.com/schmittjoh/serializer/pull/1338) ([goetas](https://github.com/goetas))
+- Allow positional php8 attributes [\#1337](https://github.com/schmittjoh/serializer/pull/1337) ([goetas](https://github.com/goetas))
+- Drop Travis [\#1306](https://github.com/schmittjoh/serializer/pull/1306) ([simPod](https://github.com/simPod))
+
+## [3.14.0-rc1](https://github.com/schmittjoh/serializer/tree/3.14.0-rc1) (2021-08-01)
+
+**Merged pull requests:**
+
+- Add PHP attributes support [\#1332](https://github.com/schmittjoh/serializer/pull/1332) ([goetas](https://github.com/goetas))
+- Deprecate `@ReadOnly` annotation in favor of `@ReadOnlyProperty` [\#1333](https://github.com/schmittjoh/serializer/pull/1333) ([mbabker](https://github.com/mbabker))
+
+## [3.13.0](https://github.com/schmittjoh/serializer/tree/3.13.0) (2021-07-05)
+
+**Merged pull requests:**
+
+- Use FilesystemAdapter when possible to fix compatibility with doctrine/cache 2 [\#1328](https://github.com/schmittjoh/serializer/pull/1328) ([rasmustnilsson](https://github.com/rasmustnilsson))
+- Use PsrCachedReader and drop doctrine/cache [\#1327](https://github.com/schmittjoh/serializer/pull/1327) ([simPod](https://github.com/simPod))
+- Check data can be casted before actual casting [\#1317](https://github.com/schmittjoh/serializer/pull/1317) ([scaytrase](https://github.com/scaytrase))
+- Add methods for data\_collector [\#1316](https://github.com/schmittjoh/serializer/pull/1316) ([gam6itko](https://github.com/gam6itko))
+- fix iterable::class that does not exist [\#1315](https://github.com/schmittjoh/serializer/pull/1315) ([Tobion](https://github.com/Tobion))
+- useful error when data is not an object [\#1313](https://github.com/schmittjoh/serializer/pull/1313) ([dbu](https://github.com/dbu))
+- Fix callback-method setup using XmlDriver [\#1310](https://github.com/schmittjoh/serializer/pull/1310) ([curzio-della-santa](https://github.com/curzio-della-santa))
+
+## [3.12.3](https://github.com/schmittjoh/serializer/tree/3.12.3) (2021-04-25)
+
+**Merged pull requests:**
+
+- \[docs\] Add documentation to deserialize on existing objects [\#1308](https://github.com/schmittjoh/serializer/pull/1308) ([gam6itko](https://github.com/gam6itko))
+- Allow phpstan/phpdoc-parser v0.5 [\#1307](https://github.com/schmittjoh/serializer/pull/1307) ([simPod](https://github.com/simPod))
+
+## [3.12.2](https://github.com/schmittjoh/serializer/tree/3.12.2) (2021-03-23)
+
+**Fixed bugs:**
+
+- `Undefined offset: 0` when using `@var null|string` instead of `@var string|null` [\#1301](https://github.com/schmittjoh/serializer/pull/1301) ([ruudk](https://github.com/ruudk))
+
+**Merged pull requests:**
+
+- move around some doc block classes [\#1304](https://github.com/schmittjoh/serializer/pull/1304) ([goetas](https://github.com/goetas))
+
+## [3.12.1](https://github.com/schmittjoh/serializer/tree/3.12.1) (2021-03-21)
+
+**Fixed bugs:**
+
+- Fix for issue \#1286: loading fails when deserializing XML [\#1289](https://github.com/schmittjoh/serializer/pull/1289) ([jviersel-ipronto](https://github.com/jviersel-ipronto))
+- Fix DocBlockTypeResolver crash on PHP 7.3 and less [\#1288](https://github.com/schmittjoh/serializer/pull/1288) ([simPod](https://github.com/simPod))
+- Doctrine `json` field type can contain not only an array [\#1295](https://github.com/schmittjoh/serializer/pull/1295) ([gam6itko](https://github.com/gam6itko))
+
+**Merged pull requests:**
+
+- add missing CustomPropertyOrderingStrategyTest [\#1296](https://github.com/schmittjoh/serializer/pull/1296) ([gam6itko](https://github.com/gam6itko))
+- fix \#314 [\#1293](https://github.com/schmittjoh/serializer/pull/1293) ([gam6itko](https://github.com/gam6itko))
+- Show all toctree on index page [\#1292](https://github.com/schmittjoh/serializer/pull/1292) ([gam6itko](https://github.com/gam6itko))
+
+# Changelog
+
+## [3.12.0](https://github.com/schmittjoh/serializer/tree/3.12.0) (2021-03-04)
+
+**Fixed bugs:**
+
+- Remove from the serialization groups if no match [\#1291](https://github.com/schmittjoh/serializer/pull/1291) ([goetas](https://github.com/goetas))
+
+**Merged pull requests:**
+
+- \[DOCS\] Add 'Deserialization Exclusion Strategy with Groups' topic [\#1287](https://github.com/schmittjoh/serializer/pull/1287) ([gam6itko](https://github.com/gam6itko))
+- Add ascii\_string, dateinterval, and json to doctrine type mapping [\#1281](https://github.com/schmittjoh/serializer/pull/1281) ([dontub](https://github.com/dontub))
+- Cleanup [\#1278](https://github.com/schmittjoh/serializer/pull/1278) ([simPod](https://github.com/simPod))
+- Drop coverage badge [\#1277](https://github.com/schmittjoh/serializer/pull/1277) ([simPod](https://github.com/simPod))
+- Introduce PHPStan [\#1276](https://github.com/schmittjoh/serializer/pull/1276) ([simPod](https://github.com/simPod))
+- Replace Scrutinizer with GA [\#1275](https://github.com/schmittjoh/serializer/pull/1275) ([simPod](https://github.com/simPod))
+- Add throws tag [\#1273](https://github.com/schmittjoh/serializer/pull/1273) ([VincentLanglet](https://github.com/VincentLanglet))
+
+## [3.11.0](https://github.com/schmittjoh/serializer/tree/3.11.0) (2020-12-29)
+
+**Implemented enhancements:**
+
+- Allow installing and build on PHP 8 [\#1267](https://github.com/schmittjoh/serializer/pull/1267) ([sanmai](https://github.com/sanmai))
+- Use phpstan/phpdoc-parser to retrieve additional type information from PhpDoc [\#1261](https://github.com/schmittjoh/serializer/pull/1261) ([Namoshek](https://github.com/Namoshek))
+- DoctrineObjectConstructor Using array\_key\_exists\(\) on objects is deprecated in php7.4 [\#1253](https://github.com/schmittjoh/serializer/pull/1253) ([gam6itko](https://github.com/gam6itko))
+- Add Composer cache for v2 on Travis CI [\#1266](https://github.com/schmittjoh/serializer/pull/1266) ([sanmai](https://github.com/sanmai))
+- Allow interfaces for DocBlock [\#1256](https://github.com/schmittjoh/serializer/pull/1256) ([marein](https://github.com/marein))
+- Allow interfaces for typed properties [\#1254](https://github.com/schmittjoh/serializer/pull/1254) ([marein](https://github.com/marein))
+
+## [3.10.0](https://github.com/schmittjoh/serializer/tree/3.10.0) (2020-10-29)
+
+**Implemented enhancements:**
+
+- Allow null to be visited if is a root object [\#1250](https://github.com/schmittjoh/serializer/pull/1250) ([goetas](https://github.com/goetas))
+- Resolve collections from DocBlock [\#1214](https://github.com/schmittjoh/serializer/pull/1214) ([dgafka](https://github.com/dgafka))
+
+**Merged pull requests:**
+
+- Bump CS [\#1249](https://github.com/schmittjoh/serializer/pull/1249) ([simPod](https://github.com/simPod))
+- Removed redundant property initialization [\#1232](https://github.com/schmittjoh/serializer/pull/1232) ([xepozz](https://github.com/xepozz))
+
+
+## [3.9.0](https://github.com/schmittjoh/serializer/tree/3.9.0) (2020-08-26)
+
+**Implemented enhancements:**
+
+- Add support for skippable \(de\)serialization handlers [\#1238](https://github.com/schmittjoh/serializer/pull/1238) ([bobvandevijver](https://github.com/bobvandevijver))
+- added support for milliseconds in DateInterval deserialization [\#1234](https://github.com/schmittjoh/serializer/pull/1234) ([ivoba](https://github.com/ivoba))
+
+**Fixed bugs:**
+
+- Do not load entities when deserializing if their identifier is not exâŠ [\#1247](https://github.com/schmittjoh/serializer/pull/1247) ([goetas](https://github.com/goetas))
+- Do not use excluded fields when fetching entities [\#1246](https://github.com/schmittjoh/serializer/pull/1246) ([goetas](https://github.com/goetas))
+- Ensure accessors are cached per property when using reflection [\#1237](https://github.com/schmittjoh/serializer/pull/1237) ([goetas](https://github.com/goetas))
+
+**Closed issues:**
+
+- Annotation cache does not honor naming strategy [\#1244](https://github.com/schmittjoh/serializer/issues/1244)
+- Authorization Bypass Vulnerability - v1.14.1 [\#1242](https://github.com/schmittjoh/serializer/issues/1242)
+- @SkipWhenEmpty and @Exclude combination leads to unexpected behavior [\#1240](https://github.com/schmittjoh/serializer/issues/1240)
+- How to pass MetadataFactory::create\(\) into SerializationVisitorInterface::startVisitingObject\(\)? [\#1226](https://github.com/schmittjoh/serializer/issues/1226)
+- Custom type in array key is not respected when serializing to JSON [\#1223](https://github.com/schmittjoh/serializer/issues/1223)
+- xml:id or xml:lang attributes handling [\#1221](https://github.com/schmittjoh/serializer/issues/1221)
+- Accessing static property as non static [\#1156](https://github.com/schmittjoh/serializer/issues/1156)
+- AbstractVisitor::getElementType\(\) must be of the type array or null, string returned [\#1027](https://github.com/schmittjoh/serializer/issues/1027)
+
+**Merged pull requests:**
+
+- remove missing deprecated removal on hasData [\#1245](https://github.com/schmittjoh/serializer/pull/1245) ([rflavien](https://github.com/rflavien))
+- Change return type of SerializerBuilder::build\(\) to Serializer [\#1241](https://github.com/schmittjoh/serializer/pull/1241) ([icanhazstring](https://github.com/icanhazstring))
+- docs: add note about array key type being ignored when serializing [\#1235](https://github.com/schmittjoh/serializer/pull/1235) ([eduardoweiland](https://github.com/eduardoweiland))
+- Sort packages in composer.json [\#1228](https://github.com/schmittjoh/serializer/pull/1228) ([simPod](https://github.com/simPod))
+- fix xml embeddable data getReference for DoctrineObjectConstructor [\#1224](https://github.com/schmittjoh/serializer/pull/1224) ([gam6itko](https://github.com/gam6itko))
+- fixed exception for strict\_types [\#1222](https://github.com/schmittjoh/serializer/pull/1222) ([ivoba](https://github.com/ivoba))
+
+## [3.8.0](https://github.com/schmittjoh/serializer/tree/3.8.0) (2020-06-28)
+
+**Implemented enhancements:**
+
+- Use doctrine/lexer instead of hoa/compiler [\#1212](https://github.com/schmittjoh/serializer/pull/1212) ([goetas](https://github.com/goetas))
+
+**Fixed bugs:**
+
+- Consider exclude rules on parents if defined [\#1206](https://github.com/schmittjoh/serializer/pull/1206) ([goetas](https://github.com/goetas))
+
+**Closed issues:**
+
+- Serializer Group [\#1213](https://github.com/schmittjoh/serializer/issues/1213)
+- Notice: Accessing static property Proxies\\_\_CG\_\_\examplemodel\inherit\Customers::$lazyPropertiesNames as non static [\#1209](https://github.com/schmittjoh/serializer/issues/1209)
+- Unserialization failure after upgrading to 3.7.0 \(`excludeIf` related?\) [\#1207](https://github.com/schmittjoh/serializer/issues/1207)
+- \[RFC\] Removing abandoned hoa from serializer [\#1182](https://github.com/schmittjoh/serializer/issues/1182)
+- hoa/protocol package conflicts with laravel helper [\#1154](https://github.com/schmittjoh/serializer/issues/1154)
+
+**Merged pull requests:**
+
+- Remove conflicts to hoa packages [\#1216](https://github.com/schmittjoh/serializer/pull/1216) ([alexander-schranz](https://github.com/alexander-schranz))
+- Test also agains twig 3 [\#1215](https://github.com/schmittjoh/serializer/pull/1215) ([alexander-schranz](https://github.com/alexander-schranz))
+- Allow doctrine/persistence v2/v3 [\#1210](https://github.com/schmittjoh/serializer/pull/1210) ([goetas](https://github.com/goetas))
+- Fix deprecated assertFileNotExist [\#1197](https://github.com/schmittjoh/serializer/pull/1197) ([mpoiriert](https://github.com/mpoiriert))
+
+## [3.7.0](https://github.com/schmittjoh/serializer/tree/3.7.0) (2020-05-23)
+
+**Implemented enhancements:**
+
+- Allow deserialization of typehinted DateTimeInterface to DateTime class [\#1193](https://github.com/schmittjoh/serializer/pull/1193) ([goetas](https://github.com/goetas))
+- Infer types from PHP 7.4 type declarations [\#1192](https://github.com/schmittjoh/serializer/pull/1192) ([goetas](https://github.com/goetas))
+- Support conditional exclude for classes [\#1099](https://github.com/schmittjoh/serializer/pull/1099) ([arneee](https://github.com/arneee))
+
+**Fixed bugs:**
+
+- Exclude if at class level are not merge [\#1203](https://github.com/schmittjoh/serializer/issues/1203)
+- Class level expression exclusion strategy should work with hierarchies   [\#1204](https://github.com/schmittjoh/serializer/pull/1204) ([goetas](https://github.com/goetas))
+
+**Closed issues:**
+
+- Specify Type as nullable? [\#1191](https://github.com/schmittjoh/serializer/issues/1191)
+- Does someone know how to use phpdoc with serializer? [\#1185](https://github.com/schmittjoh/serializer/issues/1185)
+- Serializer doesn't keep types but convert them if not it can [\#1181](https://github.com/schmittjoh/serializer/issues/1181)
+- ConditionalExpose/Exclude annotation does not work on class level [\#1098](https://github.com/schmittjoh/serializer/issues/1098)
+
+**Merged pull requests:**
+
+- \[Docs\] Improve documentation on dynamic exclusion strategy [\#1188](https://github.com/schmittjoh/serializer/pull/1188) ([arneee](https://github.com/arneee))
+- Fix Support conditional exclude for classes [\#1187](https://github.com/schmittjoh/serializer/pull/1187) ([arneee](https://github.com/arneee))
+- Fix travis tests [\#1183](https://github.com/schmittjoh/serializer/pull/1183) ([peter279k](https://github.com/peter279k))
+- Replace "Exclude" by "Expose" [\#1180](https://github.com/schmittjoh/serializer/pull/1180) ([kpn13](https://github.com/kpn13))
+- add .gitattributes [\#1177](https://github.com/schmittjoh/serializer/pull/1177) ([Tobion](https://github.com/Tobion))
+
+## [3.6.0](https://github.com/schmittjoh/serializer/tree/3.6.0) (2020-03-21)
+
+**Implemented enhancements:**
+
+- DateTime parsed invalid date [\#1152](https://github.com/schmittjoh/serializer/issues/1152)
+- do not hide Exceptions from custom handlers but correctly handle null [\#1169](https://github.com/schmittjoh/serializer/pull/1169) ([Hikariii](https://github.com/Hikariii))
+
+**Fixed bugs:**
+
+- Handle discriminator groups [\#1175](https://github.com/schmittjoh/serializer/pull/1175) ([goetas](https://github.com/goetas))
+
+**Closed issues:**
+
+- thrown Exceptions are hidden when serializing complex objects with a handler [\#1168](https://github.com/schmittjoh/serializer/issues/1168)
+
+**Merged pull requests:**
+
+- test serializing entity that uses Discriminator and extends some baseâŠ [\#1174](https://github.com/schmittjoh/serializer/pull/1174) ([FrKevin](https://github.com/FrKevin))
+- Handle ObjectConstructor returning NULL [\#1172](https://github.com/schmittjoh/serializer/pull/1172) ([jankramer](https://github.com/jankramer))
+- test symfony translator contract [\#1171](https://github.com/schmittjoh/serializer/pull/1171) ([goetas](https://github.com/goetas))
+
+## [3.5.0](https://github.com/schmittjoh/serializer/tree/3.5.0) (2020-02-22)
+
+**Implemented enhancements:**
+
+- Improved return type for fluent methods in Context [\#1162](https://github.com/schmittjoh/serializer/pull/1162) ([wouterj](https://github.com/wouterj))
+- Handle array format for dateHandler [\#1108](https://github.com/schmittjoh/serializer/pull/1108) ([VincentLanglet](https://github.com/VincentLanglet))
+
+**Fixed bugs:**
+
+- Make sure serialzation context is immutable [\#1159](https://github.com/schmittjoh/serializer/pull/1159) ([goetas](https://github.com/goetas))
+
+**Merged pull requests:**
+
+- Allow for newer PHPUnit [\#1166](https://github.com/schmittjoh/serializer/pull/1166) ([sanmai](https://github.com/sanmai))
+- \[Docs\] Explain recursion in FileLocator [\#1155](https://github.com/schmittjoh/serializer/pull/1155) ([ruudk](https://github.com/ruudk))
+- Changed CI environment to stable PHP 7.4 [\#1153](https://github.com/schmittjoh/serializer/pull/1153) ([grogy](https://github.com/grogy))
+
+## [1.14.1](https://github.com/schmittjoh/serializer/tree/1.14.1) (2020-02-22)
+
+**Closed issues:**
+
+- Virtual Property do not get serialized if getter name conflict with a class property [\#1164](https://github.com/schmittjoh/serializer/issues/1164)
+- SerializationGraphNavigator not receiving correct serializeNull config during initialize [\#1158](https://github.com/schmittjoh/serializer/issues/1158)
+- SerializationGraphNavigator  unaware of serializeNull change of context when altered in PreSerializeEvent [\#1157](https://github.com/schmittjoh/serializer/issues/1157)
+- Memory leaks [\#1150](https://github.com/schmittjoh/serializer/issues/1150)
+- Properties with @Groups annotations included in output when no SerializationContext given. [\#1149](https://github.com/schmittjoh/serializer/issues/1149)
+
+**Merged pull requests:**
+
+- PHP7.4 ternary operator deprecation [\#1163](https://github.com/schmittjoh/serializer/pull/1163) ([adhocore](https://github.com/adhocore))
+- Test 1.x on PHP 7.3 on Travis; fix builds for PHP 5.5 [\#1119](https://github.com/schmittjoh/serializer/pull/1119) ([sanmai](https://github.com/sanmai))
+
+## [3.4.0](https://github.com/schmittjoh/serializer/tree/3.4.0) (2019-12-14)
+
+**Implemented enhancements:**
+
+- Symfony 5.0 compatibility [\#1145](https://github.com/schmittjoh/serializer/pull/1145) ([goetas](https://github.com/goetas))
+- Support new doctrine ODM proxy objects [\#1139](https://github.com/schmittjoh/serializer/pull/1139) ([notrix](https://github.com/notrix))
+- Visitor interfaces in handlers [\#1129](https://github.com/schmittjoh/serializer/pull/1129) ([derzkiy](https://github.com/derzkiy))
+
+**Closed issues:**
+
+- \[Improvement\] Ability to define a global exclusion\_policy: ALL for all classes. [\#1144](https://github.com/schmittjoh/serializer/issues/1144)
+- Embed JSON string without extra escape [\#1142](https://github.com/schmittjoh/serializer/issues/1142)
+- Make possible to set ArrayCollectionHandler classes from outside [\#1131](https://github.com/schmittjoh/serializer/issues/1131)
+
+**Merged pull requests:**
+
+- Remove PHP 7.4 from `allow\_failures` matrix [\#1138](https://github.com/schmittjoh/serializer/pull/1138) ([carusogabriel](https://github.com/carusogabriel))
+- Remove unnecessary cast [\#1133](https://github.com/schmittjoh/serializer/pull/1133) ([carusogabriel](https://github.com/carusogabriel))
+- Fix PHPUnit deprecations [\#1123](https://github.com/schmittjoh/serializer/pull/1123) ([Majkl578](https://github.com/Majkl578))
+
+## [3.3.0](https://github.com/schmittjoh/serializer/tree/3.3.0) (2019-09-20)
+
+**Implemented enhancements:**
+
+- Update major version that v2.x deprecation will be removed [\#1134](https://github.com/schmittjoh/serializer/pull/1134) ([carusogabriel](https://github.com/carusogabriel))
+- Implement short expose syntax for XML as it is available for YAML [\#1127](https://github.com/schmittjoh/serializer/pull/1127) ([goetas](https://github.com/goetas))
+
+**Fixed bugs:**
+
+- Avoid implicit expose of a property instead of virtual-property  [\#1126](https://github.com/schmittjoh/serializer/pull/1126) ([goetas](https://github.com/goetas))
+
+**Closed issues:**
+
+- Accessing static property as non static [\#1122](https://github.com/schmittjoh/serializer/issues/1122)
+- Travis builds on 1.x are failing [\#1120](https://github.com/schmittjoh/serializer/issues/1120)
+
+**Merged pull requests:**
+
+- Allow failures on php "7.4snapshot" \(waiting for stable symfony 4.4\) [\#1128](https://github.com/schmittjoh/serializer/pull/1128) ([goetas](https://github.com/goetas))
+
+## [3.2.0](https://github.com/schmittjoh/serializer/tree/3.2.0) (2019-09-04)
+
+**Fixed bugs:**
+
+- PHP7.4: Deprecated warning - serializationContext.php on line 152 [\#1111](https://github.com/schmittjoh/serializer/issues/1111)
+
+**Closed issues:**
+
+- StaticPropertyMetadata first constructor argument not nullable [\#1116](https://github.com/schmittjoh/serializer/issues/1116)
+- Add support for PSR-7 URIInterface objects [\#1115](https://github.com/schmittjoh/serializer/issues/1115)
+- Upgraded 2.4 -\> 3.4 / Symfony 4.3.3 [\#1112](https://github.com/schmittjoh/serializer/issues/1112)
+- Empty namespace [\#1087](https://github.com/schmittjoh/serializer/issues/1087)
+- Format constants \(JSON, XML\) [\#1079](https://github.com/schmittjoh/serializer/issues/1079)
+- @ExclusionPolicy\(policy="ALL"\) causes PHP notice message [\#1073](https://github.com/schmittjoh/serializer/issues/1073)
+
+**Merged pull requests:**
+
+- Explain once and for all the use of StaticPropertyMetadata [\#1118](https://github.com/schmittjoh/serializer/pull/1118) ([goetas](https://github.com/goetas))
+- PHP 7.4 compatibility  [\#1113](https://github.com/schmittjoh/serializer/pull/1113) ([goetas](https://github.com/goetas))
+- Fix typos in UPGRADING.md [\#1107](https://github.com/schmittjoh/serializer/pull/1107) ([jdreesen](https://github.com/jdreesen))
+- Fix exclusion policy bug [\#1106](https://github.com/schmittjoh/serializer/pull/1106) ([spam312sn](https://github.com/spam312sn))
+- Add Doctrine 2 immutable datetime types to field mapping. [\#1104](https://github.com/schmittjoh/serializer/pull/1104) ([Sonny812](https://github.com/Sonny812))
+
+## [3.1.1](https://github.com/schmittjoh/serializer/tree/3.1.1) (2019-06-28)
+
+**Fixed bugs:**
+
+- Could not deserialize object if all properties have not type [\#1102](https://github.com/schmittjoh/serializer/issues/1102)
+- Revert "Move type check when deserializing into the graph navigator" [\#1103](https://github.com/schmittjoh/serializer/pull/1103) ([goetas](https://github.com/goetas))
+
+## [3.1.0](https://github.com/schmittjoh/serializer/tree/3.1.0) (2019-06-25)
+
+**Implemented enhancements:**
+
+- Add support for iterable and Iterator [\#1096](https://github.com/schmittjoh/serializer/pull/1096) ([simPod](https://github.com/simPod))
+- Implement "empty" XML namespace handling [\#1095](https://github.com/schmittjoh/serializer/pull/1095) ([discordier](https://github.com/discordier))
+- Move type check when deserializing into the graph navigator [\#1080](https://github.com/schmittjoh/serializer/pull/1080) ([goetas](https://github.com/goetas))
+- Allow loading different YAML extensions [\#1078](https://github.com/schmittjoh/serializer/pull/1078) ([scaytrase](https://github.com/scaytrase))
+
+**Fixed bugs:**
+
+- Fix for failing doctrine object constructor on embeddable class [\#1031](https://github.com/schmittjoh/serializer/pull/1031) ([notrix](https://github.com/notrix))
+
+**Closed issues:**
+
+- Behavior serializeNull -\> not always honored in 2.\* \(but was in 1.\*\) [\#1101](https://github.com/schmittjoh/serializer/issues/1101)
+- Support for iterable [\#1094](https://github.com/schmittjoh/serializer/issues/1094)
+- Prevent deserialisation with missing required field [\#1090](https://github.com/schmittjoh/serializer/issues/1090)
+- Allow using @XmlValue together with @Accessor/@AccessType [\#1083](https://github.com/schmittjoh/serializer/issues/1083)
+- Support \*.yaml extension [\#1077](https://github.com/schmittjoh/serializer/issues/1077)
+- Instructions for upgrading from addData in 1.x don't work [\#1030](https://github.com/schmittjoh/serializer/issues/1030)
+
+**Merged pull requests:**
+
+- Add psalm specific generic return type for deserialize [\#1091](https://github.com/schmittjoh/serializer/pull/1091) ([bdsl](https://github.com/bdsl))
+- Fix: Typo [\#1084](https://github.com/schmittjoh/serializer/pull/1084) ([localheinz](https://github.com/localheinz))
+
+## [3.0.1](https://github.com/schmittjoh/serializer/tree/3.0.1) (2019-04-23)
+
+**Fixed bugs:**
+
+- Do not throw exception when visiting null in custom handler [\#1076](https://github.com/schmittjoh/serializer/pull/1076) ([goetas](https://github.com/goetas))
+
+## [3.0.0](https://github.com/schmittjoh/serializer/tree/3.0.0) (2019-04-23)
+
+**Breaking changes:**
+
+- Revert v2 nested groups and release 3.0 [\#1071](https://github.com/schmittjoh/serializer/pull/1071) ([goetas](https://github.com/goetas))
+
+**Implemented enhancements:**
+
+- use Twig 2.7 namespaces [\#1061](https://github.com/schmittjoh/serializer/pull/1061) ([IonBazan](https://github.com/IonBazan))
+
+**Closed issues:**
+
+- \[RFC\] revert \#946 and release new major  [\#1058](https://github.com/schmittjoh/serializer/issues/1058)
+
+**Merged pull requests:**
+
+- Fix Travis-CI scripts always passing [\#1075](https://github.com/schmittjoh/serializer/pull/1075) ([IonBazan](https://github.com/IonBazan))
+
+## [1.14.0](https://github.com/schmittjoh/serializer/tree/1.14.0) (2019-04-17)
+
+## [2.3.0](https://github.com/schmittjoh/serializer/tree/2.3.0) (2019-04-17)
+
+**Implemented enhancements:**
+
+- Expose and test GroupsExclusionStrategy::getGroupsFor\(\) [\#1069](https://github.com/schmittjoh/serializer/pull/1069) ([goetas](https://github.com/goetas))
+- add options property to XmlDeserializationVisitorFactory and XmlDeserializationVisitor, propagate defined value from factory to simplexml\_load\_string call [\#1068](https://github.com/schmittjoh/serializer/pull/1068) ([kopeckyales](https://github.com/kopeckyales))
+
+**Closed issues:**
+
+- Override existing property with another [\#1067](https://github.com/schmittjoh/serializer/issues/1067)
+- disabling cdata by default [\#1065](https://github.com/schmittjoh/serializer/issues/1065)
+- unwrap child class instance [\#1064](https://github.com/schmittjoh/serializer/issues/1064)
+- Make JsonDeserializationVisitor extendable [\#1055](https://github.com/schmittjoh/serializer/issues/1055)
+
+**Merged pull requests:**
+
+- doc update: registerHandler\(\) example [\#1072](https://github.com/schmittjoh/serializer/pull/1072) ([cebe](https://github.com/cebe))
+- Updated suggestion for `JsonSerializationVisitor::addData` replacement [\#1066](https://github.com/schmittjoh/serializer/pull/1066) ([theoboldt](https://github.com/theoboldt))
+- Add fix to UPGRADING.md [\#1062](https://github.com/schmittjoh/serializer/pull/1062) ([Jean85](https://github.com/Jean85))
+
+## [2.2.0](https://github.com/schmittjoh/serializer/tree/2.2.0) (2019-02-27)
+
+**Implemented enhancements:**
+
+- Add Iterator Handler [\#1034](https://github.com/schmittjoh/serializer/pull/1034) ([scyzoryck](https://github.com/scyzoryck))
+
+**Fixed bugs:**
+
+- xmlRootPrefix missing from unserialized metadata [\#1050](https://github.com/schmittjoh/serializer/issues/1050)
+- Non-locale aware encoding of doubles, closes \#1041 [\#1042](https://github.com/schmittjoh/serializer/pull/1042) ([Grundik](https://github.com/Grundik))
+
+**Closed issues:**
+
+- GROUP BY  [\#1051](https://github.com/schmittjoh/serializer/issues/1051)
+- Using @Until and @Since on class level [\#1048](https://github.com/schmittjoh/serializer/issues/1048)
+- \[Semantical Error\] The annotation \"@generated\" in class JMS\\Serializer\\Type\\InnerParser was never imported [\#1046](https://github.com/schmittjoh/serializer/issues/1046)
+- ReflectionException when \(de\)serializing unless fully qualified classname is used [\#1045](https://github.com/schmittjoh/serializer/issues/1045)
+- Add use of annotation registry to docs [\#1044](https://github.com/schmittjoh/serializer/issues/1044)
+- Values of type "double" should not use locale-specific encoding [\#1041](https://github.com/schmittjoh/serializer/issues/1041)
+- SF4: JMS serializer seems to be ignoring global naming strategy [\#1037](https://github.com/schmittjoh/serializer/issues/1037)
+- @SerializedName not being ignored since 2.x is bug or feature? [\#1036](https://github.com/schmittjoh/serializer/issues/1036)
+- What should I use instead of the dropped GenericDeserializationVisitor class? [\#1035](https://github.com/schmittjoh/serializer/issues/1035)
+- DateTime and DateTimeImmutable from PHP 7.1 serialization and deserialization with microseconds [\#1033](https://github.com/schmittjoh/serializer/issues/1033)
+- Provide an option to the SerializeBuilder to set AccessType to a specified value globally [\#1025](https://github.com/schmittjoh/serializer/issues/1025)
+- Serialize Generator [\#1023](https://github.com/schmittjoh/serializer/issues/1023)
+
+**Merged pull requests:**
+
+- Test on php 7.3 [\#1054](https://github.com/schmittjoh/serializer/pull/1054) ([goetas](https://github.com/goetas))
+- xmlRootPrefix missing from unserialized metadata [\#1053](https://github.com/schmittjoh/serializer/pull/1053) ([goetas](https://github.com/goetas))
+- Allow @Since and @Until within @VirtualProperty on class level [\#1049](https://github.com/schmittjoh/serializer/pull/1049) ([tjveldhuizen](https://github.com/tjveldhuizen))
+- Document use of AnnotationRegistry [\#1047](https://github.com/schmittjoh/serializer/pull/1047) ([andig](https://github.com/andig))
+- Fix result of code example [\#1039](https://github.com/schmittjoh/serializer/pull/1039) ([henrikthesing](https://github.com/henrikthesing))
+
+## [2.1.0](https://github.com/schmittjoh/serializer/tree/2.1.0) (2019-01-11)
+
+**Closed issues:**
+
+- Compile error  Declaration of \[...\] must be compatible with \[...\] [\#1024](https://github.com/schmittjoh/serializer/issues/1024)
+- Exclude field for depth [\#1022](https://github.com/schmittjoh/serializer/issues/1022)
+
+**Merged pull requests:**
+
+- fixed typo [\#1029](https://github.com/schmittjoh/serializer/pull/1029) ([sasezaki](https://github.com/sasezaki))
+
+## [2.0.2](https://github.com/schmittjoh/serializer/tree/2.0.2) (2018-12-12)
+
+**Fixed bugs:**
+
+- jms serialzier 2.0 Error in debug mode [\#1018](https://github.com/schmittjoh/serializer/issues/1018)
+- AbstractDoctrineTypeDriver::normalizeFieldType\(\) must be of the type string, null given [\#1015](https://github.com/schmittjoh/serializer/issues/1015)
+- allow empty strings and numbers as metadata type parameters [\#1019](https://github.com/schmittjoh/serializer/pull/1019) ([goetas](https://github.com/goetas))
+- internal classes have false in reflection::getFilename\(\) [\#1013](https://github.com/schmittjoh/serializer/pull/1013) ([chregu](https://github.com/chregu))
+
+**Closed issues:**
+
+- DateTime converted to ArrayObject instead of string in custom visitor class [\#1017](https://github.com/schmittjoh/serializer/issues/1017)
+
+**Merged pull requests:**
+
+- Doctrine driver normalizeFieldType method does not handle nulls [\#1020](https://github.com/schmittjoh/serializer/pull/1020) ([goetas](https://github.com/goetas))
+- fixed a typo [\#1014](https://github.com/schmittjoh/serializer/pull/1014) ([themasch](https://github.com/themasch))
+
+## [2.0.1](https://github.com/schmittjoh/serializer/tree/2.0.1) (2018-11-29)
+
+## [2.0.0](https://github.com/schmittjoh/serializer/tree/2.0.0) (2018-11-09)
+
+## [2.0.0-RC1](https://github.com/schmittjoh/serializer/tree/2.0.0-RC1) (2018-10-17)
+
+## [2.0.0-beta1](https://github.com/schmittjoh/serializer/tree/2.0.0-beta1) (2018-09-12)
+
+## [1.13.0](https://github.com/schmittjoh/serializer/tree/1.13.0) (2018-07-25)
+
+## [1.12.1](https://github.com/schmittjoh/serializer/tree/1.12.1) (2018-06-01)
+
+## [1.12.0](https://github.com/schmittjoh/serializer/tree/1.12.0) (2018-05-25)
+
+## [1.11.0](https://github.com/schmittjoh/serializer/tree/1.11.0) (2018-02-04)
+
+## [1.10.0](https://github.com/schmittjoh/serializer/tree/1.10.0) (2017-11-30)
+
+## [1.9.2](https://github.com/schmittjoh/serializer/tree/1.9.2) (2017-11-22)
+
+## [1.9.1](https://github.com/schmittjoh/serializer/tree/1.9.1) (2017-10-27)
+
+## [1.9.0](https://github.com/schmittjoh/serializer/tree/1.9.0) (2017-09-28)
+
+## [1.8.1](https://github.com/schmittjoh/serializer/tree/1.8.1) (2017-07-13)
+
+## [1.8.0](https://github.com/schmittjoh/serializer/tree/1.8.0) (2017-07-12)
+
+## [1.7.1](https://github.com/schmittjoh/serializer/tree/1.7.1) (2017-05-15)
+
+## [1.7.0](https://github.com/schmittjoh/serializer/tree/1.7.0) (2017-05-10)
+
+## [1.7.0-RC2](https://github.com/schmittjoh/serializer/tree/1.7.0-RC2) (2017-05-05)
+
+## [1.7.0-RC1](https://github.com/schmittjoh/serializer/tree/1.7.0-RC1) (2017-04-25)
+
+## [1.6.2](https://github.com/schmittjoh/serializer/tree/1.6.2) (2017-04-17)
+
+## [1.6.1](https://github.com/schmittjoh/serializer/tree/1.6.1) (2017-04-12)
+
+## [1.6.0](https://github.com/schmittjoh/serializer/tree/1.6.0) (2017-03-24)
+
+## [1.6.0-RC1](https://github.com/schmittjoh/serializer/tree/1.6.0-RC1) (2017-03-14)
+
+## [1.5.0](https://github.com/schmittjoh/serializer/tree/1.5.0) (2017-02-14)
+
+## [1.5.0-RC1](https://github.com/schmittjoh/serializer/tree/1.5.0-RC1) (2017-01-19)
+
+## [1.4.2](https://github.com/schmittjoh/serializer/tree/1.4.2) (2016-11-13)
+
+## [1.4.1](https://github.com/schmittjoh/serializer/tree/1.4.1) (2016-11-02)
+
+## [1.4.0](https://github.com/schmittjoh/serializer/tree/1.4.0) (2016-10-31)
+
+## [1.3.1](https://github.com/schmittjoh/serializer/tree/1.3.1) (2016-08-23)
+
+## [1.3.0](https://github.com/schmittjoh/serializer/tree/1.3.0) (2016-08-17)
+
+## [1.2.0](https://github.com/schmittjoh/serializer/tree/1.2.0) (2016-08-03)
+
+## [1.1.0](https://github.com/schmittjoh/serializer/tree/1.1.0) (2015-10-27)
+
+## [1.0.0](https://github.com/schmittjoh/serializer/tree/1.0.0) (2015-06-16)
+
+## [0.16.0](https://github.com/schmittjoh/serializer/tree/0.16.0) (2014-03-18)
+
+## [0.15.0](https://github.com/schmittjoh/serializer/tree/0.15.0) (2014-02-10)
+
+## [0.14.0](https://github.com/schmittjoh/serializer/tree/0.14.0) (2013-12-04)
+
+## [0.13.0](https://github.com/schmittjoh/serializer/tree/0.13.0) (2013-07-29)
+
+## [0.12.0](https://github.com/schmittjoh/serializer/tree/0.12.0) (2013-03-28)
+
+## [0.11.0](https://github.com/schmittjoh/serializer/tree/0.11.0) (2013-01-29)
+
+
+
+\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/CONTRIBUTING.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/CONTRIBUTING.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/CONTRIBUTING.md	(revision 8435)
@@ -0,0 +1,83 @@
+# Contribute
+
+Thank you for contributing!
+
+Before we can merge your Pull-Request here are some guidelines that you need to follow. 
+These guidelines exist not to annoy you, but to keep the code base clean, unified and future proof.
+
+## Coding Standard
+
+This project uses [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) to enforce coding standards.
+The coding standard rules are defined in the **phpcs.xml.dist** file (part of this repository).
+The project follows a relaxed version of the Doctrine Coding standards v4.
+
+Your Pull-Request must be compliant with the said standard.
+To check your code you can run `vendor/bin/phpcs`. This command will give you a list of violations in your code (if any).
+The most common errors can be automatically fixed just by running `vendor/bin/phpcbf`.
+
+## Dependencies
+
+We're using [`composer/composer`](https://github.com/composer/composer) to manage dependencies
+
+## Unit-Tests
+
+Please try to add a test for your pull-request. This project uses [PHPUnit](https://phpunit.de/) as testing framework.
+
+You can run the unit-tests by calling `vendor/bin/phpunit`.
+
+New features without tests can't be merged.
+
+
+## Documentation
+
+The documentation is stored in the `doc` folder and is written using the [rST](http://docutils.sourceforge.net/rst.html) language.
+If you are adding a new feature, you must update the documentation.
+
+To test doc rendering before submitting your PR, you will need [Sphinx](http://www.sphinx-doc.org/en/stable/).
+
+To install `Sphinx` just run:
+
+```bash
+pip install --requirement doc/requirements.txt --user
+```
+
+When that is done, just run:
+
+```bash
+cd doc && sphinx-build -W -b html -d _build/doctrees . _build/html
+```
+
+## CI
+
+We automatically run your pull request through [Github Actions](https://github.com/schmittjoh/serializer/actions).
+If you break the tests, we cannot merge your code,
+so please make sure that your code is working before opening up a Pull-Request.
+
+## Issues and Bugs
+
+To create a new issue, you can use the GitHub issue tracking system.
+Please try to avoid opening support-related tickets. For support related questions please use more appropriate
+channels as Q&A platforms (such as Stackoverflow), Forums, Local PHP user groups.
+
+If you are a Symfony user, please try to distinguish between issues related to the Bundle and issues related to this 
+library.  
+
+## Getting merged
+
+Please allow us time to review your pull requests.
+We will give our best to review everything as fast as possible, but cannot always live up to our own expectations.
+
+Please, write [commit messages that make
+sense](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html),
+and [rebase your branch](http://git-scm.com/book/en/Git-Branching-Rebasing)
+before submitting your Pull Request.
+
+One may ask you to [squash your
+commits](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html)
+too. This is used to "clean" your Pull Request before merging it (we don't want
+commits such as "fix tests", "fix 2", "fix 3", etc.).
+
+Pull requests without tests most probably will not be merged.
+Documentation PRs obviously do not require tests.
+
+Thank you very much again for your contribution!
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/LICENSE	(revision 8435)
@@ -0,0 +1,19 @@
+Copyright (c) 2018 Johannes M. Schmitt
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/META.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/META.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/META.md	(revision 8435)
@@ -0,0 +1,7 @@
+# Generating changelog
+
+Use: https://github.com/skywinder/Github-Changelog-Generator
+
+```bash
+github_changelog_generator --user=schmittjoh --project=serializer --pull-requests --no-compare-link -t GITHUB-TOKEN
+```
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/README.md	(revision 8435)
@@ -0,0 +1,74 @@
+> # UKRAINE NEEDS YOUR HELP NOW!
+>
+> On 24 February 2022, Russian [President Vladimir Putin ordered an invasion of Ukraine by Russian Armed Forces](https://www.bbc.com/news/world-europe-60504334).
+>
+> Your support is urgently needed.
+>
+> - Donate to the volunteers. Here is the volunteer fund helping the Ukrainian army to provide all the necessary equipment:
+>  https://bank.gov.ua/en/news/all/natsionalniy-bank-vidkriv-spetsrahunok-dlya-zboru-koshtiv-na-potrebi-armiyi or https://savelife.in.ua/en/donate/
+> - Triple-check social media sources. Russian disinformation is attempting to coverup and distort the reality in Ukraine.
+> - Help Ukrainian refugees who are fleeing Russian attacks and shellings: https://www.globalcitizen.org/en/content/ways-to-help-ukraine-conflict/
+> -  Put pressure on your political representatives to provide help to Ukraine.
+> -  Believe in the Ukrainian people, they will not surrender, they don't have another Ukraine.
+>
+> THANK YOU!
+----
+
+# jms/serializer 
+
+[![GitHub Actions][GA Image]][GA Link]
+[![Packagist][Packagist Image]][Packagist Link]
+
+![alt text](doc/logo-small.png)
+
+## Introduction
+
+This library allows you to (de-)serialize data of any complexity. Currently, it supports XML and JSON.
+
+It also provides you with a rich tool-set to adapt the output to your specific needs.
+
+Built-in features include:
+
+- (De-)serialize data of any complexity; circular references and complex exclusion strategies are handled gracefully.
+- Supports many built-in PHP types (such as dates, intervals)
+- Integrates with Doctrine ORM, et. al.
+- Supports versioning, e.g. for APIs
+- Configurable via XML, YAML, or Annotations
+
+   
+## Documentation
+
+Learn more about the serializer in its [documentation](http://jmsyst.com/libs/serializer).
+
+## Notes
+
+You are browsing the code for the 3.x version, if you are interested in the 1.x or 2.x version, 
+check the [1.x][1.x] and [2.x][2.x] branches.
+
+The version `3.x` is the supported version (`master` branch).
+The `1.x` and `2.x` versions are not supported anymore. 
+
+For the `1.x` and `2.x` branches there will be no additional feature releases.  
+Security issues will be fixed till the 1st January 2020 and 
+only critical bugs might receive fixes until the 1st September 2019.
+
+Instructions on how to upgrade to 3.x are available in the [UPGRADING][UPGRADING] document.
+
+## Professional Support
+
+For eventual paid support please write an email to [goetas@gmail.com](mailto:goetas@gmail.com).
+ 
+
+  [CHANGELOG]: https://github.com/schmittjoh/serializer/blob/master/CHANGELOG.md
+  [UPGRADING]: https://github.com/schmittjoh/serializer/blob/master/UPGRADING.md
+
+  [GA Image]: https://github.com/schmittjoh/serializer/workflows/CI/badge.svg
+  
+  [GA Link]: https://github.com/schmittjoh/serializer/actions?query=workflow%3A%22CI%22+branch%3Amaster
+  
+  [Packagist Image]: https://img.shields.io/packagist/v/jms/serializer.svg
+  
+  [Packagist Link]: https://packagist.org/packages/jms/serializer
+  
+  [1.x]: https://github.com/schmittjoh/serializer/tree/1.x
+  [2.x]: https://github.com/schmittjoh/serializer/tree/2.x
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/UPGRADING.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/UPGRADING.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/UPGRADING.md	(revision 8435)
@@ -0,0 +1,103 @@
+Unreleased
+==========
+
+- Use symfony/cache for FileSystem cache implementation instead of doctrine/cache
+- Deprecated the `@ReadOnly` annotation due to `readonly` becoming a keyword in PHP 8.1, use the `@ReadOnlyProperty` annotation instead
+- Doctrine type `decimal` is now correctly mapped to `string` instead of `float`
+
+From 2.x to 3.0.0
+=================
+
+Upgrading from 2.x to 3.x should require almost no effort.
+
+The only change is the revert of "deeper branch group exclusion strategy" introduced in 2.0.0 and now reverted as it
+was in 1.x. If you are not using this feature, then upgrading requires no changes at all.
+
+The deprecations introduced in 2.x are still present in 3.0.0, said features are most likely to be removed in the next major version. 
+
+From 1.x to 3.0.0
+=================
+
+Please follow the upgrade **"From 1.13.0 to 2.0.0"**, skipping the section:
+
+> "deeper branch group exclusion strategy" has a different behaviour, the latest group is used instead of falling back to "Default"
+
+The deprecations introduced in 2.x are still present in 3.0.0, said features are most likley to be removed in an next major.
+
+From 1.13.0 to 2.0.0
+====================
+
+If you are on version `1.x`, it is suggested to migrate directly to `3.0.0` (since `2.x` is not maintained anymore).
+
+**Main changes**
+
+- The minimum PHP version is 7.2, type hints are used almost everywhere, most of the method signatures changed
+- `JsonSerializationVisitor::getRoot` and `JsonSerializationVisitor::setRoot` have been removed, their
+  use is not necessary anymore
+- Removed `AdvancedNamingStrategyInterface`, the serialized name is now compiled and can not be changed at runtime
+- "deeper branch group exclusion strategy" has a different behaviour, the latest group is used instead of falling back 
+  to "Default" 
+- Most of the classes are marked as `final`, inheritance is discouraged for all the cases, use composition instead
+- Most of the visitor configurations and options have been moved to visitor factories
+- Removed the abstract classes `GenericSerializationVisitor` and `GenericDeserializationVisitor`.
+- Removed deprecated method `VisitorInterface::getNavigator`, use `Context::getNavigator` instead
+- Removed deprecated method `JsonSerializationVisitor::addData`, 
+  use `::visitProperty(new StaticPropertyMetadata('', 'name', 'value'), 'value')` instead
+- Removed Propel and PhpCollection support
+- Changed default date format from ISO8601 to RFC3339  
+- Event listeners/handlers class names are case sensitive now
+- Removed `AbstractVisitor::getNamingStrategy` method
+- Removed Symfony 2.x support
+- Removed YAML serialization support
+- Removed PHP Driver metadata support
+- Removed in-object handler callbacks (`@HandlerCallback` annotation), use event listeners instead
+- Changed `SerializerInterface::serialize`  signature
+- Changed `ArrayTransformerInterface::toArray` signature
+- Changed `GraphNavigator::accept` signature
+- Removed `Serializer::setSerializationContextFactory` and `Serializer::setDeserializationContextFactory`
+- Removed `Serializer::getMetadataFactory` 
+- As default now JSON preserves trailing zeros when serializing a float
+- When using a discriminator map, parent class should either be declared abstract, or included into the discriminator
+  map
+- For the `Context` class (and its childs `SerializationContext` and `DeserializationContext`), `$attributes` property has become `private`, so it's no longer accessible; use `getAttribute()` instead
+- When implementing custom type handlers and `$context->shouldSerializeNull()` is `false` (it is `false` by default),
+  handlers should throw `NotAcceptableException` exception when `null` is visited.
+  
+  Before:
+  ```php
+      public function serializeDateTimeToJson(JsonSerializationVisitor $visitor, $data, array $type, Context $context)
+      {
+        
+        // handle custom serialization here
+        return $data;
+      }
+  ```
+  
+  After:  
+  ```php
+    public function serializeDateTimeToJson(JsonSerializationVisitor $visitor, $data, array $type, Context $context)
+    {
+      if (!$context->shouldSerializeNull() && $data === null) {
+          throw new NotAcceptableException();
+      }
+      
+      // handle custom serialization here
+      return $data;
+    }
+  ```
+   
+   
+
+**Deprecations** (will be removed in 4.0)
+
+- `JsonSerializationVisitor::setData` will be removed, 
+  use `::visitProperty(new StaticPropertyMetadata('', 'name', 'value'), 'value')` instead 
+- `JsonSerializationVisitor::hasData` will be removed 
+- `VisitorInterface` is internal, use `SerializationVisitorInterface` and `DeserializationVisitorInterface` instead
+- `GraphNavigator` is internal, use `GraphNavigatorInterface` instead
+
+**Other**
+- Elements (as classes, interfaces, methods, properties...)
+  marked as `@internal` shall not be used in user-land code. BC is not guaranteed on this elements.
+- PSR-4 is used  
+- [Here](https://github.com/schmittjoh/serializer/milestone/3) a list of issues and pull requests landed in 2.0
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/composer.json	(revision 8435)
@@ -0,0 +1,83 @@
+{
+    "name": "jms/serializer",
+    "type": "library",
+    "description": "Library for (de-)serializing data of any complexity; supports XML, and JSON.",
+    "keywords": [
+        "serialization",
+        "deserialization",
+        "json",
+        "jaxb",
+        "xml"
+    ],
+    "homepage": "http://jmsyst.com/libs/serializer",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Johannes M. Schmitt",
+            "email": "schmittjoh@gmail.com"
+        },
+        {
+            "name": "Asmir Mustafic",
+            "email": "goetas@gmail.com"
+        }
+    ],
+    "require": {
+        "php": "^7.4 || ^8.0",
+        "doctrine/instantiator": "^1.3.1 || ^2.0",
+        "doctrine/lexer": "^2.0 || ^3.0",
+        "jms/metadata": "^2.6",
+        "phpstan/phpdoc-parser": "^1.20"
+    },
+    "suggest": {
+        "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.",
+        "symfony/cache": "Required if you like to use cache functionality.",
+        "symfony/uid": "Required if you'd like to serialize UID objects.",
+        "symfony/yaml": "Required if you'd like to use the YAML metadata format."
+    },
+    "require-dev": {
+        "ext-pdo_sqlite": "*",
+        "doctrine/annotations": "^1.14 || ^2.0",
+        "doctrine/coding-standard": "^12.0",
+        "doctrine/orm": "^2.14 || ^3.0",
+        "doctrine/persistence": "^2.5.2 || ^3.0",
+        "doctrine/phpcr-odm": "^1.5.2 || ^2.0",
+        "jackalope/jackalope-doctrine-dbal": "^1.3",
+        "ocramius/proxy-manager": "^1.0 || ^2.0",
+        "phpbench/phpbench": "^1.0",
+        "phpstan/phpstan": "^1.0.2",
+        "phpunit/phpunit": "^9.0 || ^10.0",
+        "psr/container": "^1.0 || ^2.0",
+        "rector/rector": "^0.19.0",
+        "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0",
+        "symfony/expression-language": "^5.4 || ^6.0 || ^7.0",
+        "symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
+        "symfony/form": "^5.4 || ^6.0 || ^7.0",
+        "symfony/translation": "^5.4 || ^6.0 || ^7.0",
+        "symfony/uid": "^5.4 || ^6.0 || ^7.0",
+        "symfony/validator": "^5.4 || ^6.0 || ^7.0",
+        "symfony/yaml": "^5.4 || ^6.0 || ^7.0",
+        "twig/twig": "^1.34 || ^2.4 || ^3.0"
+    },
+    "autoload": {
+        "psr-4": {
+            "JMS\\Serializer\\": "src/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "JMS\\Serializer\\Tests\\": "tests/"
+        }
+    },
+    "config": {
+        "sort-packages": true,
+        "allow-plugins": {
+            "composer/package-versions-deprecated": true,
+            "dealerdirect/phpcodesniffer-composer-installer": true
+        }
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "3.x-dev"
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/LICENSE	(revision 8435)
@@ -0,0 +1,55 @@
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+    "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+    "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
+    "Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership.
+    "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+    "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+    "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+    "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+    "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+    "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+    to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and,
+    to Distribute and Publicly Perform the Work including as incorporated in Collections.
+
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d).
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+    You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested.
+    You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
+    If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+
+    For the avoidance of doubt:
+        Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+        Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
+        Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b).
+    Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+    This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+    Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+    Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+    If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+    No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+    This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+    The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/conf.py
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/conf.py	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/conf.py	(revision 8435)
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+
+import sys, os
+
+# -- General configuration -----------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sensio.sphinx.configurationblock', 'sensio.sphinx.phpcode']
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The master toctree document.
+master_doc = 'index'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ['_build']
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# This will be used when using the shorthand notation
+highlight_language = 'php'
+
+# -- Options for HTML output ---------------------------------------------------
+import sphinx_rtd_theme
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+html_theme = 'sphinx_rtd_theme'
+
+# Add any paths that contain custom themes here, relative to this directory.
+html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'doc'
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/configuration.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/configuration.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/configuration.rst	(revision 8435)
@@ -0,0 +1,106 @@
+Configuration
+=============
+
+.. note ::
+
+    If you are using Symfony2, this section is mostly irrelevant for you as the entire integration is provided by
+    JMSSerializerBundle; please see `its documentation <http://jmsyst.com/bundles/JMSSerializerBundle>`_. If you are
+    using another framework, there also might be a module, or other special integration. Please check packagist, or
+    whatever registry usually holds such information for your framework.
+
+
+If you are using the standalone library and you want to use annotations, the annotation registry must be initialized::
+
+    Doctrine\Common\Annotations\AnnotationRegistry::registerLoader('class_exists');
+
+
+Constructing a Serializer
+-------------------------
+
+This library provides a special builder object which makes constructing serializer instances a breeze in any PHP
+project. In its shortest version, it's just a single line of code::
+
+    $serializer = JMS\Serializer\SerializerBuilder::create()->build();
+
+This serializer is fully functional, but you might want to tweak it a bit for example to configure a cache directory.
+
+Configuring a Cache Directory
+-----------------------------
+The serializer collects several metadata about your objects from various sources such as YML, XML, or annotations. In
+order to make this process as efficient as possible, it is encourage to let the serializer cache that information. For
+that, you can configure a cache directory::
+
+    $builder = new JMS\Serializer\SerializerBuilder();
+
+    $serializer =
+        JMS\Serializer\SerializerBuilder::create()
+        ->setCacheDir($someWritableDir)
+        ->setDebug($trueOrFalse)
+        ->build();
+
+As you can see, we also added a call to the ``setDebug`` method. In debug mode, the serializer will perform a bit more
+filesystem checks to see whether the data that it has cached is still valid. These checks are useful during development
+so that you do not need to manually clear cache folders, however in production they are just unnecessary overhead. The
+debug setting allows you to make the behavior environment specific.
+
+Adding Custom Handlers
+----------------------
+If you have created custom handlers, you can add them to the serializer easily::
+
+    $serializer =
+        JMS\Serializer\SerializerBuilder::create()
+            ->addDefaultHandlers()
+            ->configureHandlers(function(JMS\Serializer\Handler\HandlerRegistry $registry) {
+                $registry->registerHandler(JMS\Serializer\GraphNavigatorInterface::DIRECTION_SERIALIZATION, 'MyObject', 'json',
+                    function($visitor, MyObject $obj, array $type) {
+                        return $obj->getName();
+                    }
+                );
+            })
+            ->build();
+
+For more complex handlers, it is advisable to extract them to dedicated classes,
+see :doc:`handlers documentation <handlers>`.
+
+Configuring Metadata Locations
+------------------------------
+This library supports several metadata sources. By default, it uses Doctrine annotations, but you may also store
+metadata in XML, or YML files. For the latter, it is necessary to configure a metadata directory where those files
+are located::
+
+    $serializer =
+        JMS\Serializer\SerializerBuilder::create()
+            ->addMetadataDir($someDir)
+            ->build();
+
+The serializer would expect the metadata files to be named like the fully qualified class names where all ``\`` are
+replaced with ``.``. So, if you class would be named ``Vendor\Package\Foo``, the metadata file would need to be located
+at ``$someDir/Vendor.Package.Foo.(xml|yml)``. If not found, ``$someDir/Vendor.Package.(xml|yml)`` will be tried, then ``$someDir/Vendor.Package.(xml|yml)`` and so on. For more information, see the :doc:`reference <reference>`.
+
+Setting a default SerializationContext factory
+----------------------------------------------
+To avoid to pass an instance of SerializationContext
+every time you call method ``serialize()`` (or ``toArray()``),
+you can set a ``SerializationContextFactory`` to the Serializer.
+
+Example using the SerializerBuilder::
+
+    use JMS\Serializer\SerializationContext;
+
+    $serializer = JMS\Serializer\SerializerBuilder::create()
+        ->setSerializationContextFactory(function () {
+            return SerializationContext::create()
+                ->setSerializeNull(true)
+            ;
+        })
+        ->build()
+    ;
+
+Then, calling ``$serializer->serialize($data, 'json');`` will generate
+a serialization context from your callable and use it.
+
+.. note ::
+
+    You can also set a default DeserializationContextFactory with
+    ``->setDeserializationContextFactory(function () { /* ... */ })``
+    to be used with methods ``deserialize()`` and ``fromArray()``.
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook.rst	(revision 8435)
@@ -0,0 +1,7 @@
+Cookbook
+========
+
+.. toctree ::
+    :glob:
+
+    cookbook/*
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook/arrays.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook/arrays.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook/arrays.rst	(revision 8435)
@@ -0,0 +1,47 @@
+Serializing arrays and hashes
+=============================
+
+Introduction
+------------
+Serializing arrays and hashes (a concept that in PHP has not explicit boundaries)
+can be challenging. The serializer offers via ``@Type`` annotation different options
+to configure its behavior, but if we try to serialize directly an array
+(not as a property of an object), we need to use context information to determine the
+array "type"
+
+Examples
+--------
+
+In case of a JSON serialization:
+
+.. code-block :: php
+
+    <?php
+
+    // default (let the PHP's json_encode function decide)
+    $serializer->serialize([1, 2]); //  [1, 2]
+    $serializer->serialize(['a', 'b']); //  ['a', 'b']
+    $serializer->serialize(['c' => 'd']); //  {"c" => "d"}
+
+    // same as default (let the PHP's json_encode function decide)
+    $serializer->serialize([1, 2], SerializationContext::create()->setInitialType('array')); //  [1, 2]
+    $serializer->serialize([1 => 2], SerializationContext::create()->setInitialType('array')); //  {"1": 2}
+    $serializer->serialize(['a', 'b'], SerializationContext::create()->setInitialType('array')); //  ['a', 'b']
+    $serializer->serialize(['c' => 'd'], SerializationContext::create()->setInitialType('array')); //  {"c" => "d"}
+
+    // typehint as strict array, keys will be always discarded
+    $serializer->serialize([], SerializationContext::create()->setInitialType('array<integer>')); //  []
+    $serializer->serialize([1, 2], SerializationContext::create()->setInitialType('array<integer>')); //  [1, 2]
+    $serializer->serialize(['a', 'b'], SerializationContext::create()->setInitialType('array<integer>')); //  ['a', 'b']
+    $serializer->serialize(['c' => 'd'], SerializationContext::create()->setInitialType('array<string>')); //  ["d"]
+
+    // typehint as hash, keys will be always considered
+    $serializer->serialize([], SerializationContext::create()->setInitialType('array<integer,integer>')); //  {}
+    $serializer->serialize([1, 2], SerializationContext::create()->setInitialType('array<integer,integer>')); //  {"0" : 1, "1" : 2}
+    $serializer->serialize(['a', 'b'], SerializationContext::create()->setInitialType('array<integer,integer>')); //  {"0" : "a", "1" : "b"}
+    $serializer->serialize(['c' => 'd'], SerializationContext::create()->setInitialType('array<string,string>')); //  {"c" : "d"}
+
+
+.. note ::
+
+    This applies only for the JSON serialization.
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook/exclusion_strategies.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook/exclusion_strategies.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook/exclusion_strategies.rst	(revision 8435)
@@ -0,0 +1,408 @@
+Exclusion Strategies
+====================
+
+Introduction
+------------
+The serializer supports different exclusion strategies. Each strategy allows
+you to define which properties of your objects should be serialized.
+
+General Exclusion Strategies
+----------------------------
+If you would like to always expose, or exclude certain properties. Then, you can
+do this with the annotations ``@ExclusionPolicy``, ``@Exclude``, and ``@Expose``.
+
+The default exclusion policy is to exclude nothing. That is, all properties of the
+object will be serialized. If you only want to expose a few of the properties,
+then it is easier to change the exclusion policy, and only mark these few properties:
+
+.. code-block :: php
+
+    <?php
+
+    use JMS\Serializer\Annotation\ExclusionPolicy;
+    use JMS\Serializer\Annotation\Expose;
+
+    /**
+     * The following annotations tells the serializer to skip all properties which
+     * have not marked with @Expose.
+     *
+     * @ExclusionPolicy("all")
+     */
+    class MyObject
+    {
+        private $foo;
+        private $bar;
+
+        /**
+         * @Expose
+         */
+        private $name;
+    }
+
+.. note ::
+
+    A property that is excluded by ``@Exclude`` cannot be exposed anymore by any
+    of the following strategies, but is always hidden.
+
+Versioning Objects
+------------------
+JMSSerializerBundle comes by default with a very neat feature which allows
+you to add versioning support to your objects, e.g. if you want to
+expose them via an API that is consumed by a third-party:
+
+.. code-block :: php
+
+    <?php
+
+    class VersionedObject
+    {
+        /**
+         * @Until("1.0.x")
+         */
+        private $name;
+
+        /**
+         * @Since("1.1")
+         * @SerializedName("name")
+         */
+        private $name2;
+    }
+
+.. note ::
+
+    ``@Until``, and ``@Since`` both accept a standardized PHP version number.
+
+If you have annotated your objects like above, you can serializing different
+versions like this::
+
+    use JMS\Serializer\SerializationContext;
+
+    $serializer->serialize(new VersionObject(), 'json', SerializationContext::create()->setVersion(1));
+
+
+Creating Different Views of Your Objects
+----------------------------------------
+Another default exclusion strategy is to create different views of your objects.
+Let's say you would like to serialize your object in a different view depending
+whether it is displayed in a list view or in a details view.
+
+You can achieve that by using the ``@Groups`` annotation on your properties. Any
+property without an explicit ``@Groups`` annotation will be included in a
+``Default`` group, which can be used when specifying groups in the serialization
+context.
+
+.. code-block :: php
+
+    use JMS\Serializer\Annotation\Groups;
+
+    class BlogPost
+    {
+        /** @Groups({"list", "details"}) */
+        private $id;
+
+        /** @Groups({"list", "details"}) */
+        private $title;
+
+        /** @Groups({"list"}) */
+        private $nbComments;
+
+        /** @Groups({"details"}) */
+        private $comments;
+
+        private $createdAt;
+    }
+
+You can then tell the serializer which groups to serialize in your controller::
+
+    use JMS\Serializer\SerializationContext;
+
+    $serializer->serialize(new BlogPost(), 'json', SerializationContext::create()->setGroups(array('list')));
+
+    //will output $id, $title and $nbComments.
+
+    $serializer->serialize(new BlogPost(), 'json', SerializationContext::create()->setGroups(array('Default', 'list')));
+
+    //will output $id, $title, $nbComments and $createdAt.
+
+Overriding Groups of Deeper Branches of the Graph
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+In some cases you want to control more precisely what is serialized because you may have the same class at different
+depths of the object graph.
+
+For example if you have a User that has a manager and friends::
+
+    use JMS\Serializer\Annotation\Groups;
+
+    class User
+    {
+        private $name;
+
+        /** @Groups({"manager_group"}) */
+        private $manager;
+
+        /** @Groups({"friends_group"}) */
+        private $friends;
+
+        public function __construct($name, User $manager = null, array $friends = null)
+        {
+            $this->name = $name;
+            $this->manager = $manager;
+            $this->friends = $friends;
+        }
+    }
+
+And the following object graph::
+
+    $john = new User(
+        'John',
+        new User(
+            'John Manager',
+            new User('The boss'),
+            array(
+                new User('John Manager friend 1'),
+            )
+        ),
+        array(
+            new User(
+                'John friend 1',
+                new User('John friend 1 manager')
+            ),
+            new User(
+                'John friend 2',
+                new User('John friend 2 manager')
+            ),
+        )
+    );
+
+You can override groups on specific paths::
+
+    use JMS\Serializer\SerializationContext;
+
+    $context = SerializationContext::create()->setGroups(array(
+        'Default', // Serialize John's name
+        'manager_group', // Serialize John's manager
+        'friends_group', // Serialize John's friends
+
+        'manager' => array( // Override the groups for the manager of John
+            'Default', // Serialize John manager's name
+            'friends_group', // Serialize John manager's friends. If you do not override the groups for the friends, it will default to Default.
+        ),
+
+        'friends' => array( // Override the groups for the friends of John
+            'manager_group' // Serialize John friends' managers.
+
+            'manager' => array( // Override the groups for the John friends' manager
+                'Default', // This would be the default if you did not override the groups of the manager property.
+            ),
+        ),
+    ));
+    $serializer->serialize($john, 'json', $context);
+
+This would result in the following json::
+
+    {
+        "name": "John",
+        "manager": {
+            "name": "John Manager",
+            "friends": [
+                {
+                    "name": "John Manager friend 1"
+                }
+            ]
+        },
+        "friends": [
+            {
+                "manager": {
+                    "name": "John friend 1 manager"
+                },
+            },
+            {
+                "manager": {
+                    "name": "John friend 2 manager"
+                },
+            },
+        ]
+    }
+
+Deserialization Exclusion Strategy with Groups
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+You can use ``@Groups`` to cut off unwanted properties while deserialization.
+
+.. code-block:: php
+
+    use JMS\Serializer\Annotation\Groups;
+
+    class GroupsObject
+    {
+        /**
+         * @Groups({"foo"})
+         */
+        public $foo;
+
+        /**
+         * @Groups({"foo","bar"})
+         */
+        public $foobar;
+
+        /**
+         * @Groups({"bar", "Default"})
+         */
+        public $bar;
+
+        /**
+         * @Type("string")
+         */
+        public $none;
+    }
+
+.. code-block:: php
+
+    $data = [
+        'foo'    => 'foo',
+        'foobar' => 'foobar',
+        'bar'    => 'bar',
+        'none'   => 'none',
+    ];
+    $context = DeserializationContext::create()->setGroups(['foo']);
+    $object = $serializer->fromArray($data, GroupsObject::class, $context);
+    // $object->foo is 'foo'
+    // $object->foobar is 'foobar'
+    // $object->bar is null
+    // $object->none is null
+
+Limiting serialization depth of some properties
+-----------------------------------------------
+You can limit the depth of what will be serialized in a property with the
+``@MaxDepth`` annotation.
+This exclusion strategy is a bit different from the others, because it will
+affect the serialized content of others classes than the one you apply the
+annotation to.
+
+.. code-block :: php
+
+    use JMS\Serializer\Annotation\MaxDepth;
+
+    class User
+    {
+        private $username;
+
+        /** @MaxDepth(1) */
+        private $friends;
+
+        /** @MaxDepth(2) */
+        private $posts;
+    }
+
+    class Post
+    {
+        private $title;
+
+        private $author;
+    }
+
+In this example, serializing a user, because the max depth of the ``$friends``
+property is 1, the user friends would be serialized, but not their friends;
+and because the the max depth of the ``$posts`` property is 2, the posts would
+be serialized, and their author would also be serialized.
+
+You need to tell the serializer to take into account MaxDepth checks::
+
+    use JMS\Serializer\SerializationContext;
+
+    $serializer->serialize($data, 'json', SerializationContext::create()->enableMaxDepthChecks());
+
+
+Dynamic exclusion strategy
+--------------------------
+
+If the previous exclusion strategies are not enough, is possible to use the ``ExpressionLanguageExclusionStrategy``
+that uses the `symfony expression language`_ to
+allow a more sophisticated exclusion strategies using ``@Exclude(if="expression")`` and ``@Expose(if="expression")`` methods.
+This also works on class level, but is only evaluated during ``serialze`` and does not have any effect during ``deserialze``.
+
+
+.. code-block :: php
+
+    <?php
+
+    /**
+     * @Exclude(if="true")
+    */
+    class MyObject
+    {
+        /**
+         * @Exclude(if="true")
+         */
+        private $name;
+
+       /**
+         * @Expose(if="true")
+         */
+        private $name2;
+    }
+
+.. note ::
+
+    ``true`` is just a generic expression, you can use any expression allowed by the Symfony Expression Language
+
+To enable this feature you have to set the Expression Evaluator when initializing the serializer. 
+
+.. code-block :: php
+
+    <?php
+    use JMS\Serializer\Expression\ExpressionEvaluator;
+    use JMS\Serializer\Expression\SerializerBuilder;
+    use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
+    
+    $serializer = SerializerBuilder::create()
+        ->setExpressionEvaluator(new ExpressionEvaluator(new ExpressionLanguage()))
+        ->build();
+
+.. _symfony expression language: https://github.com/symfony/expression-language
+
+By default the serializer exposes three variables (`object`, `context` and `property_metadata` for use in an expression. This enables you to create custom exclusion strategies similar to i.e. the `GroupExclusionStrategy`_. In the below example, `someMethod` would receive all three variables.
+
+.. code-block :: php
+
+    <?php
+
+    class MyObject
+    {
+        /**
+         * @Exclude(if="someMethod(object, context, property_metadata)")
+         */
+        private $name;
+
+       /**
+         * @Expose(if="someMethod(object, context, property_metadata)")
+         */
+        private $name2;
+    }
+
+.. _GroupExclusionStrategy: https://github.com/schmittjoh/serializer/blob/master/src/Exclusion/GroupsExclusionStrategy.php
+
+Using dynamic excludes on class level is also handy when you need to filter out certain objects in a collection, for example based on user permissions.
+The following example shows how to exclude `Account` objects when serializing the `Person` object, if the `Account` is either expired or the user does not have the permission to view the account by calling `is_granted` with the `Account` object.
+
+.. code-block :: php
+
+    <?php
+
+    class Person
+    {
+        /**
+         * @Type("array<Account>")
+         */
+        public $accounts;
+    }
+
+    /**
+     * @Exclude(if="object.expired || !is_granted('view',object)")
+     */
+    class Account
+    {
+        /**
+         * @Type("boolean")
+         */
+        public $expired;
+    }
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook/object_constructor.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook/object_constructor.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook/object_constructor.rst	(revision 8435)
@@ -0,0 +1,56 @@
+Object constructor
+==================
+
+Deserialize on existing objects
+-------------------------------
+
+By default, a brand new instance of target class is created during deserialization. To deserialize into an existing object, you need to perform the following steps.
+
+
+1. Create new class which implements ObjectConstructorInterface
+
+.. code-block:: php
+
+    <?php declare(strict_types=1);
+
+    namespace Acme\ObjectConstructor;
+
+    use JMS\Serializer\Construction\ObjectConstructorInterface;
+    use JMS\Serializer\DeserializationContext;
+    use JMS\Serializer\Metadata\ClassMetadata;
+    use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+
+    class ExistingObjectConstructor implements ObjectConstructorInterface
+    {
+        public const ATTRIBUTE = 'deserialization-constructor-target';
+
+        private $fallbackConstructor;
+
+        public function __construct(ObjectConstructorInterface $fallbackConstructor)
+        {
+            $this->fallbackConstructor = $fallbackConstructor;
+        }
+
+        public function construct(DeserializationVisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context): ?object
+        {
+            if ($context->hasAttribute(self::ATTRIBUTE)) {
+                return $context->getAttribute(self::ATTRIBUTE);
+            }
+
+            return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context);
+        }
+    }
+
+
+2. Register ExistingObjectConstructor.
+
+You should pass ExistingObjectConstructor to DeserializationGraphNavigatorFactory constructor.
+
+
+3. Add special attribute to DeserializationContext
+
+.. code-block:: php
+
+    $context = DeserializationContext::create();
+    $context->setAttribute('deserialization-constructor-target', $document);
+    $serializer->deserialize($data, get_class($document), 'json');
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook/stdclass.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook/stdclass.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/cookbook/stdclass.rst	(revision 8435)
@@ -0,0 +1,16 @@
+stdClass
+========
+
+The serializer offers support for serializing ``stdClass`` objects, however the use of
+``stdClass`` objects is discouraged.
+
+The current implementation serializes all the properties of a ``stdClass`` object in
+the order they appear.
+
+There are many known limitations when dealing with ``stdClass`` objects.
+More in detail, it is not possible to:
+
+- change serialization order of properties
+- apply per-property exclusion policies
+- specify any extra serialization information for properties that are part of the ``stdClass`` object, as serialization name, type, xml structure and so on
+- deserialize data into ``stdClass`` objects
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/event_system.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/event_system.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/event_system.rst	(revision 8435)
@@ -0,0 +1,85 @@
+Event System
+============
+
+The serializer dispatches different events during the serialization, and
+deserialization process which you can use to hook in and alter the default
+behavior.
+
+Register an Event Listener, or Subscriber
+-----------------------------------------
+The difference between listeners, and subscribers is that listener do not know to which events they listen
+while subscribers contain that information. Thus, subscribers are easier to share, and re-use. Listeners
+on the other hand, can be simple callables and do not require a dedicated class.
+
+.. code-block :: php
+
+    class MyEventSubscriber implements JMS\Serializer\EventDispatcher\EventSubscriberInterface
+    {
+        public static function getSubscribedEvents()
+        {
+            return array(
+                array(
+                    'event' => 'serializer.pre_serialize',
+                    'method' => 'onPreSerialize',
+                    'class' => 'AppBundle\\Entity\\SpecificClass', // if no class, subscribe to every serialization
+                    'format' => 'json', // optional format
+                    'priority' => 0, // optional priority
+                ),
+            );
+        }
+
+        public function onPreSerialize(JMS\Serializer\EventDispatcher\PreSerializeEvent $event)
+        {
+            // do something
+        }
+    }
+
+    $builder
+        ->configureListeners(function(JMS\Serializer\EventDispatcher\EventDispatcher $dispatcher) {
+            $dispatcher->addListener('serializer.pre_serialize',
+                function(JMS\Serializer\EventDispatcher\PreSerializeEvent $event) {
+                    // do something
+                }
+            );
+
+            $dispatcher->addSubscriber(new MyEventSubscriber());
+        })
+    ;
+
+Events
+------
+
+serializer.pre_serialize
+~~~~~~~~~~~~~~~~~~~~~~~~
+This is dispatched before a type is visited. You have access to the visitor,
+data, and type. Listeners may modify the type that is being used for
+serialization.
+
+**Event Object**: ``JMS\Serializer\EventDispatcher\PreSerializeEvent``
+
+serializer.post_serialize
+~~~~~~~~~~~~~~~~~~~~~~~~~
+This is dispatched right before a type is left. You can for example use this
+to add additional data for an object that you normally do not save inside
+objects such as links.
+
+**Event Object**: ``JMS\Serializer\EventDispatcher\ObjectEvent``
+
+serializer.pre_deserialize
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. versionadded : 0.12
+    Event was added
+
+This is dispatched before an object is deserialized. You can use this to
+modify submitted data, or modify the type that is being used for deserialization.
+
+**Event Object**: ``JMS\Serializer\EventDispatcher\PreDeserializeEvent``
+
+serializer.post_deserialize
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+This is dispatched after a type is processed. You can use it to normalize
+submitted data if you require external services for example, or also to
+perform validation of the submitted data.
+
+**Event Object**: ``JMS\Serializer\EventDispatcher\ObjectEvent``
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/handlers.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/handlers.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/handlers.rst	(revision 8435)
@@ -0,0 +1,85 @@
+Handlers
+========
+
+Introduction
+------------
+Handlers allow you to change the serialization, or deserialization process
+for a single type/format combination.
+
+Handlers are simple callback which receive three arguments: the visitor,
+the data, and the type.
+
+Simple Callables
+----------------
+You can register simple callables on the builder object::
+
+    $builder
+        ->configureHandlers(function(JMS\Serializer\Handler\HandlerRegistry $registry) {
+            $registry->registerHandler('serialization', 'MyObject', 'json',
+                function($visitor, MyObject $obj, array $type) {
+                    return $obj->getName();
+                }
+            );
+        })
+    ;
+
+.. note ::
+
+        Be aware that when you call `configureHandlers` default handlers (like `DateHandler`)
+        won't be added and you will have to call `addDefaultHandlers` on the Builder
+
+Subscribing Handlers
+--------------------
+Subscribing handlers contain the configuration themselves which makes them easier to share with other users,
+and easier to set-up in general::
+
+    use JMS\Serializer\Handler\SubscribingHandlerInterface;
+    use JMS\Serializer\GraphNavigator;
+    use JMS\Serializer\JsonSerializationVisitor;
+    use JMS\Serializer\JsonDeserializationVisitor;
+    use JMS\Serializer\Context;
+
+    class MyHandler implements SubscribingHandlerInterface
+    {
+        public static function getSubscribingMethods()
+        {
+            return [
+                [
+                    'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
+                    'format' => 'json',
+                    'type' => 'DateTime',
+                    'method' => 'serializeDateTimeToJson',
+                ],
+                [
+                    'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
+                    'format' => 'json',
+                    'type' => 'DateTime',
+                    'method' => 'deserializeDateTimeToJson',
+                ],
+            ];
+        }
+
+        public function serializeDateTimeToJson(JsonSerializationVisitor $visitor, \DateTime $date, array $type, Context $context)
+        {
+            return $date->format($type['params'][0]);
+        }
+
+        public function deserializeDateTimeToJson(JsonDeserializationVisitor $visitor, $dateAsString, array $type, Context $context)
+        {
+            return new \DateTime($dateAsString);
+        }
+    }
+
+Also, this type of handler is registered via the builder object::
+
+    $builder
+        ->configureHandlers(function(JMS\Serializer\Handler\HandlerRegistry $registry) {
+            $registry->registerSubscribingHandler(new MyHandler());
+        })
+    ;
+
+Skippable Subscribing Handlers
+-------------------------------
+
+In case you need to be able to fall back to the default deserialization behavior instead of using your custom
+handler, you can simply throw a `SkipHandlerException` from you custom handler method to do so.
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/index.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/index.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/index.rst	(revision 8435)
@@ -0,0 +1,62 @@
+Serializer
+==========
+
+.. image:: logo-small.png
+
+Introduction
+------------
+This library allows you to (de-)serialize data of any complexity. Currently, it supports XML and JSON.
+
+It also provides you with a rich tool-set to adapt the output to your specific needs.
+
+Built-in features include:
+
+- (De-)serialize data of any complexity; circular references are handled gracefully.
+- Supports many built-in PHP types (such as dates)
+- Integrates with Doctrine ORM, et. al.
+- Supports versioning, e.g. for APIs
+- Configurable via XML, YAML, or Doctrine Annotations
+
+Installation
+------------
+This library can be easily installed via composer
+
+.. code-block :: bash
+
+    composer require jms/serializer
+
+or just add it to your ``composer.json`` file directly.
+
+Usage
+-----
+For standalone projects usage of the provided builder is encouraged::
+
+    $serializer = JMS\Serializer\SerializerBuilder::create()->build();
+    $jsonContent = $serializer->serialize($data, 'json');
+    echo $jsonContent; // or return it in a Response
+
+
+Documentation
+-------------
+
+.. toctree ::
+    :maxdepth: 2
+
+    configuration
+    usage
+    event_system
+    handlers
+    reference
+    cookbook
+
+License
+-------
+
+The code is released under the business-friendly `MIT license`_.
+
+Documentation is subject to the `Attribution-NonCommercial-NoDerivs 3.0 Unported
+license`_.
+
+.. _MIT license: https://opensource.org/licenses/MIT
+.. _Attribution-NonCommercial-NoDerivs 3.0 Unported license: http://creativecommons.org/licenses/by-nc-nd/3.0/
+
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/reference.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/reference.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/reference.rst	(revision 8435)
@@ -0,0 +1,8 @@
+Reference
+=========
+
+.. toctree ::
+    :glob:
+    :maxdepth: 1
+
+    reference/*
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/reference/annotations.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/reference/annotations.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/reference/annotations.rst	(revision 8435)
@@ -0,0 +1,1000 @@
+Annotations
+===========
+
+@ExclusionPolicy
+~~~~~~~~~~~~~~~~
+This annotation can be defined on a class to indicate the exclusion strategy
+that should be used for the class.
+
++----------+----------------------------------------------------------------+
+| Policy   | Description                                                    |
++==========+================================================================+
+| all      | all properties are excluded by default; only properties marked |
+|          | with @Expose will be serialized/unserialized                   |
++----------+----------------------------------------------------------------+
+| none     | no properties are excluded by default; all properties except   |
+|          | those marked with @Exclude will be serialized/unserialized     |
++----------+----------------------------------------------------------------+
+
+@Exclude
+~~~~~~~~
+This annotation can be defined on a property or a class to indicate that the property or class
+should not be serialized/unserialized. Works only in combination with NoneExclusionPolicy.
+
+If the ``ExpressionLanguageExclusionStrategy`` exclusion strategy is enabled, it will
+be possible to use ``@Exclude(if="expression")`` to exclude dynamically a property
+or an object if used on class level.
+
+@Expose
+~~~~~~~
+This annotation can be defined on a property to indicate that the property should
+be serialized/unserialized. Works only in combination with AllExclusionPolicy.
+
+If the ``ExpressionLanguageExclusionStrategy`` exclusion strategy is enabled, will
+be possible to use ``@Expose(if="expression")`` to expose dynamically a property.
+
+@SkipWhenEmpty
+~~~~~~~~~~~~~~
+This annotation can be defined on a property to indicate that the property should
+not be serialized if the result will be "empty".
+
+Works option works only when serializing.
+
+@SerializedName
+~~~~~~~~~~~~~~~
+This annotation can be defined on a property to define the serialized name for a
+property. If this is not defined, the property will be translated from camel-case
+to a lower-cased underscored name, e.g. camelCase -> camel_case.
+
+Note that this annotation is not used when you're using any other naming
+strategy than the default configuration (which includes the
+``SerializedNameAnnotationStrategy``). In order to re-enable the annotation, you
+will need to wrap your custom strategy with the ``SerializedNameAnnotationStrategy``.
+
+.. code-block :: php
+
+    <?php
+    $serializer = \JMS\Serializer\SerializerBuilder::create()
+        ->setPropertyNamingStrategy(
+            new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
+                new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
+            )
+        )
+        ->build();
+
+@Since
+~~~~~~
+This annotation can be defined on a property to specify starting from which
+version this property is available. If an earlier version is serialized, then
+this property is excluded automatically. The version must be in a format that is
+understood by PHP's ``version_compare`` function.
+
+@Until
+~~~~~~
+This annotation can be defined on a property to specify until which version this
+property was available. If a later version is serialized, then this property is
+excluded automatically. The version must be in a format that is understood by
+PHP's ``version_compare`` function.
+
+@Groups
+~~~~~~~
+This annotation can be defined on a property to specify if the property
+should be serialized when only serializing specific groups (see
+:doc:`../cookbook/exclusion_strategies`).
+
+@MaxDepth
+~~~~~~~~~
+This annotation can be defined on a property to limit the depth to which the
+content will be serialized. It is very useful when a property will contain a
+large object graph.
+
+@AccessType
+~~~~~~~~~~~
+This annotation can be defined on a property, or a class to specify in which way
+the properties should be accessed. By default, the serializer will retrieve, or
+set the value via reflection, but you may change this to use a public method instead:
+
+.. code-block :: php
+
+    <?php
+    use JMS\Serializer\Annotation\AccessType;
+
+    /** @AccessType("public_method") */
+    class User
+    {
+        private $name;
+
+        public function getName()
+        {
+            return $this->name;
+        }
+
+        public function setName($name)
+        {
+            $this->name = trim($name);
+        }
+    }
+
+@Accessor
+~~~~~~~~~
+This annotation can be defined on a property to specify which public method should
+be called to retrieve, or set the value of the given property:
+
+.. code-block :: php
+
+    <?php
+    use JMS\Serializer\Annotation\Accessor;
+
+    class User
+    {
+        private $id;
+
+        /** @Accessor(getter="getTrimmedName",setter="setName") */
+        private $name;
+
+        // ...
+        public function getTrimmedName()
+        {
+            return trim($this->name);
+        }
+
+        public function setName($name)
+        {
+            $this->name = $name;
+        }
+    }
+
+.. note ::
+
+    If you need only to serialize your data, you can avoid providing a setter by
+    setting the property as read-only using the ``@ReadOnlyProperty`` annotation.
+
+@AccessorOrder
+~~~~~~~~~~~~~~
+This annotation can be defined on a class to control the order of properties. By
+default the order is undefined, but you may change it to either "alphabetical", or
+"custom".
+
+.. code-block :: php
+
+    <?php
+    use JMS\Serializer\Annotation\AccessorOrder;
+
+    /**
+     * @AccessorOrder("alphabetical")
+     *
+     * Resulting Property Order: id, name
+     */
+    class User
+    {
+        private $id;
+        private $name;
+    }
+
+    /**
+     * @AccessorOrder("custom", custom = {"name", "id"})
+     *
+     * Resulting Property Order: name, id
+     */
+    class User
+    {
+        private $id;
+        private $name;
+    }
+
+    /**
+     * @AccessorOrder("custom", custom = {"name", "someMethod" ,"id"})
+     *
+     * Resulting Property Order: name, mood, id
+     */
+    class User
+    {
+        private $id;
+        private $name;
+
+        /**
+         * @Serializer\VirtualProperty
+         * @Serializer\SerializedName("mood")
+         *
+         * @return string
+         */
+        public function getSomeMethod()
+        {
+            return 'happy';
+        }
+    }
+
+@VirtualProperty
+~~~~~~~~~~~~~~~~
+This annotation can be defined on a method to indicate that the data returned by
+the method should appear like a property of the object.
+
+A virtual property can be defined for a method of an object to serialize and can be
+also defined at class level exposing data using the Symfony Expression Language.
+
+.. code-block :: php
+
+    /**
+     * @Serializer\VirtualProperty(
+     *     "firstName",
+     *     exp="object.getFirstName()",
+     *     options={@Serializer\SerializedName("my_first_name")}
+     *  )
+     */
+    class Author
+    {
+        /**
+         * @Serializer\Expose()
+         */
+        private $id;
+
+        /**
+         * @Serializer\Exclude()
+         */
+        private $firstName;
+
+        /**
+         * @Serializer\Exclude()
+         */
+        private $lastName;
+
+        /**
+         * @Serializer\VirtualProperty()
+         */
+        public function getLastName()
+        {
+            return $this->lastName;
+        }
+
+        public function getFirstName()
+        {
+            return $this->firstName;
+        }
+    }
+
+In this example:
+
+- ``id`` is exposed using the object reflection.
+- ``lastName`` is exposed using the ``getLastName`` getter method.
+- ``firstName`` is exposed using the ``object.getFirstName()`` expression (``exp`` can contain any valid symfony expression).
+
+
+``@VirtualProperty()`` can also have an optional property ``name``, used to define the internal property name
+(for sorting proposes as example). When not specified, it defaults to the method name with the "get" prefix removed.
+
+.. note ::
+
+    This only works for serialization and is completely ignored during deserialization.
+
+In PHP 8, due to the missing support for nested annotations, in the options array you need to pass an array with the class name and an array with the arguments for its constructor.
+
+.. code-block :: php
+
+    /**
+     * @Serializer\VirtualProperty(
+     *     "firstName",
+     *     exp="object.getFirstName()",
+     *     options={@Serializer\SerializedName("my_first_name")}
+     *  )
+     */
+    #[Serializer\VirtualProperty(name: "firstName", exp: "object.getFirstName()", options: [[Serializer\SerializedName::class, ["my_first_name"]]])]
+    class Author
+    {
+    ...
+
+@Inline
+~~~~~~~
+This annotation can be defined on a property to indicate that the data of the property
+should be inlined.
+
+**Note**: AccessorOrder will be using the name of the property to determine the order.
+
+@ReadOnlyProperty
+~~~~~~~~~~~~~~~~~
+This annotation can be defined on a property to indicate that the data of the property
+is read only and cannot be set during deserialization.
+
+A property can be marked as non read only with ``@ReadOnlyProperty(false)`` annotation
+(useful when a class is marked as read only).
+
+@PreSerialize
+~~~~~~~~~~~~~
+This annotation can be defined on a method which is supposed to be called before
+the serialization of the object starts.
+
+@PostSerialize
+~~~~~~~~~~~~~~
+This annotation can be defined on a method which is then called directly after the
+object has been serialized.
+
+@PostDeserialize
+~~~~~~~~~~~~~~~~
+This annotation can be defined on a method which is supposed to be called after
+the object has been deserialized.
+
+@Discriminator
+~~~~~~~~~~~~~~
+
+.. versionadded : 0.12
+
+    @Discriminator was added
+
+This annotation allows serialization/deserialization of relations which are polymorphic, but
+where a common base class exists. The ``@Discriminator`` annotation has to be applied
+to the least super type::
+
+    /**
+     * @Discriminator(field = "type", disabled = false, map = {"car": "Car", "moped": "Moped"}, groups={"foo", "bar"})
+     */
+    abstract class Vehicle { }
+    class Car extends Vehicle { }
+    class Moped extends Vehicle { }
+
+
+.. note ::
+
+    `groups` is optional and is used as exclusion policy.
+
+@Type
+~~~~~
+This annotation can be defined on a property to specify the type of that property.
+For deserialization, this annotation must be defined.
+The ``@Type`` annotation can have parameters and parameters can be used by serialization/deserialization
+handlers to enhance the serialization or deserialization result; for example, you may want to
+force a certain format to be used for serializing DateTime types and specifying at the same time a different format
+used when deserializing them.
+
+Available Types:
+
++------------------------------------------------------------+--------------------------------------------------+
+| Type                                                       | Description                                      |
++============================================================+==================================================+
+| boolean or bool                                            | Primitive boolean                                |
++------------------------------------------------------------+--------------------------------------------------+
+| integer or int                                             | Primitive integer                                |
++------------------------------------------------------------+--------------------------------------------------+
+| double or float                                            | Primitive double                                 |
++------------------------------------------------------------+--------------------------------------------------+
+| double<2> or float<2>                                      | Primitive double with precision                  |
++------------------------------------------------------------+--------------------------------------------------+
+| double<2, 'HALF_DOWN'> or float<2, 'HALF_DOWN'>            | Primitive double with precision and              |
+|                                                            | Rounding Mode.                                   |
+|                                                            | (HALF_UP, HALF_DOWN, HALF_EVEN HALF_ODD)         |
++------------------------------------------------------------+--------------------------------------------------+
+| double<2, 'HALF_DOWN', 2> or float<2, 'HALF_DOWN', 2>      | Primitive double with precision,                 |
+| double<2, 'HALF_DOWN', 3> or float<2, 'HALF_DOWN', 3>      | Rounding Mode and decimals padding up to         |
+|                                                            | N digits. As example, the float ``1.23456`` when |
+|                                                            | specified as  ``double<2, 'HALF_DOWN', 5>`` will |
+|                                                            | be serialized as ``1.23000``.                    |
+|                                                            | NOTE: this is available only for the XML         |
+|                                                            | serializer.                                      |
++------------------------------------------------------------+--------------------------------------------------+
+| string                                                     | Primitive string                                 |
++------------------------------------------------------------+--------------------------------------------------+
+| array                                                      | An array with arbitrary keys, and values.        |
++------------------------------------------------------------+--------------------------------------------------+
+| list                                                       | A list with arbitrary values.                    |
++------------------------------------------------------------+--------------------------------------------------+
+| array<T>                                                   | An array of type T (T can be any available type).|
+|                                                            | Examples:                                        |
+|                                                            | array<string>, array<MyNamespace\MyObject>, etc. |
++------------------------------------------------------------+--------------------------------------------------+
+| list<T>                                                    | A list of type T (T can be any available type).  |
+|                                                            | Examples:                                        |
+|                                                            | list<string>, list<MyNamespace\MyObject>, etc.   |
++------------------------------------------------------------+--------------------------------------------------+
+| array<K, V>                                                | A map of keys of type K to values of type V.     |
+|                                                            | Examples: array<string, string>,                 |
+|                                                            | array<string, MyNamespace\MyObject>, etc.        |
++------------------------------------------------------------+--------------------------------------------------+
+| enum<'Color'>                                              | Enum of type Color, use its case values          |
+|                                                            | for serialization and deserialization            |
+|                                                            | if the enum is a backed enum,                    |
+|                                                            | use its case names if it is not a backed enum.   |
++------------------------------------------------------------+--------------------------------------------------+
+| enum<'Color', 'name'>                                      | Enum of type Color, use its case names           |
+|                                                            | (as string) for serialization                    |
+|                                                            | and deserialization.                             |
++------------------------------------------------------------+--------------------------------------------------+
+| enum<'Color', 'value'>                                     | Backed Enum of type Color, use its case value    |
+|                                                            | for serialization and deserialization.           |
++------------------------------------------------------------+--------------------------------------------------+
+| enum<'Color', 'value', 'integer'>                          | Backed Enum of type Color, use its case value    |
+|                                                            | (forced as integer) for serialization            |
+|                                                            | and deserialization.                             |
++------------------------------------------------------------+--------------------------------------------------+
+| DateTime                                                   | PHP's DateTime object (default format*/timezone) |
++------------------------------------------------------------+--------------------------------------------------+
+| DateTime<'format'>                                         | PHP's DateTime object (custom format/default     |
+|                                                            | timezone).                                       |
++------------------------------------------------------------+--------------------------------------------------+
+| DateTime<'format', 'zone'>                                 | PHP's DateTime object (custom format/timezone)   |
++------------------------------------------------------------+--------------------------------------------------+
+| DateTime<'format', 'zone', 'deserializeFormats'>           | PHP's DateTime object (custom format/timezone,   |
+|                                                            | deserialize format). If you do not want to       |
+|                                                            | specify a specific timezone, use an empty        |
+|                                                            | string (''). DeserializeFormats can either be a  |
+|                                                            | string or an array of string.                    |
++------------------------------------------------------------+--------------------------------------------------+
+| DateTimeImmutable                                          | PHP's DateTimeImmutable object (default format*/ |
+|                                                            | timezone).                                       |
++------------------------------------------------------------+--------------------------------------------------+
+| DateTimeImmutable<'format'>                                | PHP's DateTimeImmutable object (custom format/   |
+|                                                            | default timezone)                                |
++------------------------------------------------------------+--------------------------------------------------+
+| DateTimeImmutable<'format', 'zone'>                        | PHP's DateTimeImmutable object (custom format/   |
+|                                                            | timezone)                                        |
++------------------------------------------------------------+--------------------------------------------------+
+| DateTimeImmutable<'format', 'zone', 'deserializeFormats'>  | PHP's DateTimeImmutable object (custom format/   |
+|                                                            | timezone/deserialize format). If you do not want |
+|                                                            | to specify a specific timezone, use an empty     |
+|                                                            | string (''). DeserializeFormats can either be a  |
+|                                                            | string or an array of string.                    |
++------------------------------------------------------------+--------------------------------------------------+
+| DateTimeInterface                                          | PHP's DateTimeInterface interface (default       |
+|                                                            | format*/timezone).                               |
+|                                                            | Data will be always deserialised into            |
+|                                                            | `\DateTime` object                               |
++------------------------------------------------------------+--------------------------------------------------+
+| DateTimeInterface<'format'>                                | PHP's DateTimeInterface interface (custom        |
+|                                                            | format/default timezone)                         |
+|                                                            | Data will be deserialised into                   |
+|                                                            | `\\DateTime` object                              |
++------------------------------------------------------------+--------------------------------------------------+
+| DateTimeInterface<'format', 'zone'>                        | PHP's DateTimeInterface interface (custom        |
+|                                                            | format/timezone)                                 |
+|                                                            | Data will be deserialised into                   |
+|                                                            | `\\DateTime` object                              |
++------------------------------------------------------------+--------------------------------------------------+
+| DateTimeInterface<'format', 'zone', 'deserializeFormats'>  | PHP's DateTimeInterface interface (custom        |
+|                                                            | format/timezone/deserialize format). If you do   |
+|                                                            | not want to specify a specific timezone, use an  |
+|                                                            | empty string (''). DeserializeFormats can either |
+|                                                            | be a string or an array of string.               |
+|                                                            | Data will be deserialised into                   |
+|                                                            | `\\DateTime` object                              |
++------------------------------------------------------------+--------------------------------------------------+
+| DateInterval                                               | PHP's DateInterval object using ISO 8601 format  |
++------------------------------------------------------------+--------------------------------------------------+
+| T                                                          | Where T is a fully qualified class name.         |
++------------------------------------------------------------+--------------------------------------------------+
+| iterable                                                   | Similar to array. Will always be deserialized    |
+|                                                            | into array as implementation info is lost during |
+|                                                            | serialization.                                   |
++------------------------------------------------------------+--------------------------------------------------+
+| iterable<T>                                                | Similar to array<T>. Will always be deserialized |
+|                                                            | into array as implementation info is lost during |
+|                                                            | serialization.                                   |
++------------------------------------------------------------+--------------------------------------------------+
+| iterable<K, V>                                             | Similar to array<K, V>. Will always be           |
+|                                                            | deserialized into array as implementation info   |
+|                                                            | is lost during serialization.                    |
++------------------------------------------------------------+--------------------------------------------------+
+| ArrayCollection<T>                                         | Similar to array<T>, but will be deserialized    |
+|                                                            | into Doctrine's ArrayCollection class.           |
++------------------------------------------------------------+--------------------------------------------------+
+| ArrayCollection<K, V>                                      | Similar to array<K, V>, but will be deserialized |
+|                                                            | into Doctrine's ArrayCollection class.           |
++------------------------------------------------------------+--------------------------------------------------+
+| Generator                                                  | Similar to array, but will be deserialized       |
+|                                                            | into Generator class.                            |
++------------------------------------------------------------+--------------------------------------------------+
+| Generator<T>                                               | Similar to array<T>, but will be deserialized    |
+|                                                            | into Generator class.                            |
++------------------------------------------------------------+--------------------------------------------------+
+| Generator<K, V>                                            | Similar to array<K, V>, but will be deserialized |
+|                                                            | into Generator class.                            |
++------------------------------------------------------------+--------------------------------------------------+
+| ArrayIterator                                              | Similar to array, but will be deserialized       |
+|                                                            | into ArrayIterator class.                        |
++------------------------------------------------------------+--------------------------------------------------+
+| ArrayIterator<T>                                           | Similar to array<T>, but will be deserialized    |
+|                                                            | into ArrayIterator class.                        |
++------------------------------------------------------------+--------------------------------------------------+
+| ArrayIterator<K, V>                                        | Similar to array<K, V>, but will be deserialized |
+|                                                            | into ArrayIterator class.                        |
++------------------------------------------------------------+--------------------------------------------------+
+| Iterator                                                   | Similar to array, but will be deserialized       |
+|                                                            | into ArrayIterator class.                        |
++------------------------------------------------------------+--------------------------------------------------+
+| Iterator<T>                                                | Similar to array<T>, but will be deserialized    |
+|                                                            | into ArrayIterator class.                        |
++------------------------------------------------------------+--------------------------------------------------+
+| Iterator<K, V>                                             | Similar to array<K, V>, but will be deserialized |
+|                                                            | into ArrayIterator class.                        |
++------------------------------------------------------------+--------------------------------------------------+
+
+(*) If the standalone jms/serializer is used then default format is `\DateTime::ISO8601` (which is not compatible with ISO-8601 despite the name). For jms/serializer-bundle the default format is `\DateTime::ATOM` (the real ISO-8601 format) but it can be changed in `configuration`_.
+
+(**) The key type K for array-linke formats as ``array``. ``ArrayCollection``, ``iterable``, etc., is only used for deserialization,
+for serializaiton is treated as ``string``.
+
+Examples:
+
+.. code-block :: php
+
+    <?php
+
+    namespace MyNamespace;
+
+    use JMS\Serializer\Annotation\Type;
+
+    class BlogPost
+    {
+        /**
+         * @Type("ArrayCollection<MyNamespace\Comment>")
+         */
+        private $comments;
+
+        /**
+         * @Type("string")
+         */
+        private $title;
+
+        /**
+         * @Type("MyNamespace\Author")
+         */
+        private $author;
+
+        /**
+         * @Type("DateTime")
+         */
+        private $startAt;
+
+        /**
+         * @Type("DateTime<'Y-m-d'>")
+         */
+        private $endAt;
+
+        /**
+         * @Type("DateTime<'Y-m-d', '', ['Y-m-d', 'Y/m/d']>")
+         */
+        private $publishedAt;
+
+        /**
+         * @Type("DateTimeImmutable")
+         */
+        private $createdAt;
+
+        /**
+         * @Type("DateTimeImmutable<'Y-m-d'>")
+         */
+        private $updatedAt;
+
+        /**
+         * @Type("DateTimeImmutable<'Y-m-d', '', ['Y-m-d', 'Y/m/d']>")
+         */
+        private $deletedAt;
+
+        /**
+         * @Type("boolean")
+         */
+        private $published;
+
+        /**
+         * @Type("array<string, string>")
+         */
+        private $keyValueStore;
+    }
+
+.. note ::
+
+    if you are using ``PHP attributes`` with PHP 8.1 you can pass an object which implements ``__toString()`` method as a value for ``#[Type]`` attribute.
+    
+    .. code-block :: php
+
+		  <?php
+
+		  namespace MyNamespace;
+
+		  use JMS\Serializer\Annotation\Type;
+
+		  class BlogPost
+		  {
+		      #[Type(new ArrayOf(Comment::class))]
+		      private $comments;
+		  }
+		  
+		  class ArrayOf
+		  {
+		  		public function __construct(private string $className) {}
+		  		
+		  		public function __toString(): string
+		  		{
+		  				return "array<$className>";
+		  		}
+		  }
+
+.. _configuration: https://jmsyst.com/bundles/JMSSerializerBundle/master/configuration#configuration-block-2-0
+
+@XmlRoot
+~~~~~~~~
+This allows you to specify the name of the top-level element.
+
+.. code-block :: php
+
+    <?php
+
+    use JMS\Serializer\Annotation\XmlRoot;
+
+    /** @XmlRoot("user") */
+    class User
+    {
+        private $name = 'Johannes';
+    }
+
+Resulting XML:
+
+.. code-block :: xml
+
+    <user>
+        <name><![CDATA[Johannes]]></name>
+    </user>
+
+.. note ::
+
+    @XmlRoot only applies to the root element, but is for example not taken into
+    account for collections. You can define the entry name for collections using
+    @XmlList, or @XmlMap.
+
+@XmlAttribute
+~~~~~~~~~~~~~
+This allows you to mark properties which should be set as attributes,
+and not as child elements.
+
+.. code-block :: php
+
+    <?php
+
+    use JMS\Serializer\Annotation\XmlAttribute;
+
+    class User
+    {
+        /** @XmlAttribute */
+        private $id = 1;
+        private $name = 'Johannes';
+    }
+
+Resulting XML:
+
+.. code-block :: xml
+
+    <result id="1">
+        <name><![CDATA[Johannes]]></name>
+    </result>
+
+
+@XmlDiscriminator
+~~~~~~~~~~~~~~~~~
+This annotation allows to modify the behaviour of @Discriminator regarding handling of XML.
+
+
+Available Options:
+
++-------------------------------------+--------------------------------------------------+
+| Type                                | Description                                      |
++=====================================+==================================================+
+| attribute                           | use an attribute instead of a child node         |
++-------------------------------------+--------------------------------------------------+
+| cdata                               | render child node content with or without cdata  |
++-------------------------------------+--------------------------------------------------+
+| namespace                           | render child node using the specified namespace  |
++-------------------------------------+--------------------------------------------------+
+
+Example for "attribute":
+
+.. code-block :: php
+
+    <?php
+
+    use JMS\Serializer\Annotation\Discriminator;
+    use JMS\Serializer\Annotation\XmlDiscriminator;
+
+    /**
+     * @Discriminator(field = "type", map = {"car": "Car", "moped": "Moped"}, groups={"foo", "bar"})
+     * @XmlDiscriminator(attribute=true)
+     */
+    abstract class Vehicle { }
+    class Car extends Vehicle { }
+
+Resulting XML:
+
+.. code-block :: xml
+
+    <vehicle type="car" />
+
+
+Example for "cdata":
+
+.. code-block :: php
+
+    <?php
+
+    use JMS\Serializer\Annotation\Discriminator;
+    use JMS\Serializer\Annotation\XmlDiscriminator;
+
+
+
+    /**
+     * @Discriminator(field = "type", map = {"car": "Car", "moped": "Moped"}, groups={"foo", "bar"})
+     * @XmlDiscriminator(attribute=true)
+     */
+    abstract class Vehicle { }
+    class Car extends Vehicle { }
+
+Resulting XML:
+
+.. code-block :: xml
+
+    <vehicle><type>car</type></vehicle>
+
+
+@XmlValue
+~~~~~~~~~
+This allows you to mark properties which should be set as the value of the
+current element. Note that this has the limitation that any additional
+properties of that object must have the @XmlAttribute annotation.
+XMlValue also has property cdata. Which has the same meaning as the one in
+XMLElement.
+
+.. code-block :: php
+
+    <?php
+
+    use JMS\Serializer\Annotation\XmlAttribute;
+    use JMS\Serializer\Annotation\XmlValue;
+    use JMS\Serializer\Annotation\XmlRoot;
+
+    /** @XmlRoot("price") */
+    class Price
+    {
+        /** @XmlAttribute */
+        private $currency = 'EUR';
+
+        /** @XmlValue */
+        private $amount = 1.23;
+    }
+
+Resulting XML:
+
+.. code-block :: xml
+
+    <price currency="EUR">1.23</price>
+
+@XmlList
+~~~~~~~~
+This allows you to define several properties of how arrays should be
+serialized. This is very similar to @XmlMap, and should be used if the
+keys of the array are not important.
+
+.. code-block :: php
+
+    <?php
+
+    use JMS\Serializer\Annotation\XmlList;
+    use JMS\Serializer\Annotation\XmlRoot;
+
+    /** @XmlRoot("post") */
+    class Post
+    {
+        /**
+         * @XmlList(inline = true, entry = "comment")
+         */
+        private $comments = [];
+
+        public function __construct(array $comments)
+        {
+            $this->comments = $comments;
+        }
+    }
+
+    class Comment
+    {
+        private $text;
+
+        public function __construct(string $text)
+        {
+            $this->text = $text;
+        }
+    }
+
+    // usage
+    $post = new Post(
+        new Comment('Foo'),
+        new Comment('Bar'),
+    );
+    $xml = $serializer->serialize($post, 'xml');
+
+Resulting XML:
+
+.. code-block :: xml
+
+    <post>
+        <comment>
+            <text><![CDATA[Foo]]></text>
+        </comment>
+        <comment>
+            <text><![CDATA[Bar]]></text>
+        </comment>
+    </post>
+
+You can also specify the entry tag namespace using the ``namespace`` attribute (``@XmlList(inline = true, entry = "comment", namespace="http://www.example.com/ns")``).
+
+@XmlMap
+~~~~~~~
+Similar to @XmlList, but the keys of the array are meaningful.
+
+@XmlKeyValuePairs
+~~~~~~~~~~~~~~~~~
+This allows you to use the keys of an array as xml tags.
+
+.. note ::
+
+    When a key is an invalid xml tag name (e.g. 1_foo) the tag name *entry* will be used instead of the key.
+
+@XmlAttributeMap
+~~~~~~~~~~~~~~~~
+
+This is similar to the @XmlKeyValuePairs, but instead of creating child elements, it creates attributes.
+
+.. code-block :: php
+
+    <?php
+
+    use JMS\Serializer\Annotation\XmlAttribute;
+
+    class Input
+    {
+        /** @XmlAttributeMap */
+        private $id = array(
+            'name' => 'firstname',
+            'value' => 'Adrien',
+        );
+    }
+
+Resulting XML:
+
+.. code-block :: xml
+
+    <result name="firstname" value="Adrien"/>
+
+@XmlElement
+~~~~~~~~~~~
+This annotation can be defined on a property to add additional xml serialization/deserialization properties.
+
+.. code-block :: php
+
+    <?php
+
+    use JMS\Serializer\Annotation\XmlElement;
+
+    /**
+     * @XmlNamespace(uri="http://www.w3.org/2005/Atom", prefix="atom")
+     */
+    class User
+    {
+        /**
+        * @XmlElement(cdata=false, namespace="http://www.w3.org/2005/Atom")
+        */
+        private $id = 'my_id';
+    }
+
+Resulting XML:
+
+.. code-block :: xml
+
+    <atom:id>my_id</atom:id>
+
+@XmlNamespace
+~~~~~~~~~~~~~
+This annotation allows you to specify Xml namespace/s and prefix used.
+
+.. code-block :: php
+
+    <?php
+
+    use JMS\Serializer\Annotation\XmlNamespace;
+
+    /**
+     * @XmlNamespace(uri="http://example.com/namespace")
+     * @XmlNamespace(uri="http://www.w3.org/2005/Atom", prefix="atom")
+     */
+    class BlogPost
+    {
+        /**
+         * @Type("JMS\Serializer\Tests\Fixtures\Author")
+         * @Groups({"post"})
+         * @XmlElement(namespace="http://www.w3.org/2005/Atom")
+         */
+         private $author;
+    }
+
+    class Author
+    {
+        /**
+         * @Type("string")
+         * @SerializedName("full_name")
+         */
+         private $name;
+    }
+
+Resulting XML:
+
+.. code-block :: xml
+
+    <?xml version="1.0" encoding="UTF-8"?>
+    <blog-post xmlns="http://example.com/namespace" xmlns:atom="http://www.w3.org/2005/Atom">
+        <atom:author>
+            <full_name><![CDATA[Foo Bar]]></full_name>
+        </atom:author>
+    </blog>
+
+
+PHP 8 support
+~~~~~~~~~~~~~
+
+JMS serializer now supports PHP 8 attributes, with a few caveats:
+- Due to the missing support for nested annotations, the syntax for a few annotations has changed
+(see the ``VirtualProperty`` ``options`` syntax here below)
+- There is an edge case when setting this exact serialization group ``#[Groups(['value' => 'any value here'])]``.
+(when there is only one item in th serialization groups array and has as key ``value`` the attribute will not work as expected,
+please use the alternative syntax ``#[Groups(groups: ['value' => 'any value here'])]`` that works with no issues),
+
+Converting your annotations to attributes
+-----------------------------------------
+
+Example:
+
+.. code-block :: php
+
+    /**
+     * @VirtualProperty(
+     *     "classlow",
+     *     exp="object.getVirtualValue(1)",
+     *     options={@Until("8")}
+     * )
+     * @VirtualProperty(
+     *     "classhigh",
+     *     exp="object.getVirtualValue(8)",
+     *     options={@Since("6")}
+     * )
+     */
+    #[VirtualProperty('classlow', exp: 'object.getVirtualValue(1)', options: [[Until::class, ['8']]])]
+    #[VirtualProperty('classhigh', exp: 'object.getVirtualValue(8)', options: [[Since::class, ['6']]])]
+    class ObjectWithVersionedVirtualProperties
+    {
+        /**
+         * @Groups({"versions"})
+         * @VirtualProperty
+         * @SerializedName("low")
+         * @Until("8")
+         */
+        #[Groups(['versions'])]
+        #[VirtualProperty]
+        #[SerializedName('low')]
+        #[Until('8')]
+        public function getVirtualLowValue()
+        {
+            return 1;
+        }
+    ...
+
+Enum support
+~~~~~~~~~~~~
+
+Enum support is disabled by default, to enable it run:
+
+.. code-block :: php
+
+    $builder = SerializerBuilder::create();
+    $builder->enableEnumSupport();
+
+    $serializer = $builder->build();
+
+
+With the enum support enabled, enums are automatically detected using typed properties typehints.
+When typed properties are no available (virtual properties as example), it is necessary to explicitly typehint
+the underlying type using the ``@Type`` annotation.
+
+- If the enum is a ``BackedEnum``, the case value will be used for serialization and deserialization by default;
+- If the enum is not a ``BackedEnum``, the case name will be used for serialization and deserialization by default;
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/reference/xml_reference.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/reference/xml_reference.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/reference/xml_reference.rst	(revision 8435)
@@ -0,0 +1,105 @@
+XML Reference
+-------------
+::
+
+    <!-- MyBundle\Resources\config\serializer\Fully.Qualified.ClassName.xml -->
+    <?xml version="1.0" encoding="UTF-8" ?>
+    <serializer>
+        <class name="Fully\Qualified\ClassName" exclusion-policy="ALL" xml-root-name="foo-bar" exclude="true"
+            exclude-if="expr" accessor-order="custom" custom-accessor-order="propertyName1,propertyName2,...,propertyNameN"
+            access-type="public_method" discriminator-field-name="type" discriminator-disabled="false" read-only="false">
+            <xml-namespace prefix="atom" uri="http://www.w3.org/2005/Atom"/>
+            <xml-discriminator attribute="true" cdata="false" namespace=""/>
+            <discriminator-class value="some-value">ClassName</discriminator-class>
+            <discriminator-groups>
+                <group>foo</group>
+            </discriminator-groups>
+            <property name="some-property"
+                      exclude="true"
+                      expose="true"
+                      exclude-if="expr"
+                      expose-if="expr"
+                      skip-when-empty="false"
+                      type="string"
+                      serialized-name="foo"
+                      since-version="1.0"
+                      until-version="1.1"
+                      xml-attribute="true"
+                      xml-value="true"
+                      access-type="public_method"
+                      accessor-getter="getSomeProperty"
+                      accessor-setter="setSomeProperty"
+                      inline="true"
+                      read-only="true"
+                      groups="foo,bar"
+                      xml-key-value-pairs="true"
+                      xml-attribute-map="true"
+                      max-depth="2"
+            >
+                <!-- You can also specify the type as element which is necessary if
+                     your type contains "<" or ">" characters. -->
+                <type><![CDATA[]]></type>
+                <xml-list inline="true" entry-name="foobar" namespace="http://www.w3.org/2005/Atom" skip-when-empty="true" />
+                <xml-map inline="true" key-attribute-name="foo" entry-name="bar" namespace="http://www.w3.org/2005/Atom" />
+                <xml-element cdata="false" namespace="http://www.w3.org/2005/Atom"/>
+                <groups>
+                    <value>foo</value>
+                    <value>bar</value>
+                </groups>
+            </property>
+            <callback-method name="foo" type="pre-serialize" />
+            <callback-method name="bar" type="post-serialize" />
+            <callback-method name="baz" type="post-deserialize" />
+
+            <virtual-property method="public_method"
+                      name="some-property"
+                      exclude="true"
+                      expose="true"
+                      skip-when-empty="false"
+                      type="string"
+                      serialized-name="foo"
+                      since-version="1.0"
+                      until-version="1.1"
+                      xml-attribute="true"
+                      access-type="public_method"
+                      accessor-getter="getSomeProperty"
+                      accessor-setter="setSomeProperty"
+                      inline="true"
+                      read-only="true"
+                      groups="foo,bar"
+                      xml-key-value-pairs="true"
+                      xml-attribute-map="true"
+                      max-depth="2"
+            >
+            <virtual-property expression="object.getName()"
+                      name="some-property"
+                      exclude="true"
+                      expose="true"
+                      type="string"
+                      serialized-name="foo"
+                      since-version="1.0"
+                      until-version="1.1"
+                      xml-attribute="true"
+                      access-type="public_method"
+                      accessor-getter="getSomeProperty"
+                      accessor-setter="setSomeProperty"
+                      inline="true"
+                      read-only="true"
+                      groups="foo,bar"
+                      xml-key-value-pairs="true"
+                      xml-attribute-map="true"
+                      max-depth="2"
+            >
+                <!-- You can also specify the type as element which is necessary if
+                     your type contains "<" or ">" characters. -->
+                <type><![CDATA[]]></type>
+                <groups>
+                    <value>foo</value>
+                    <value>bar</value>
+                </groups>
+                <xml-list inline="true" entry-name="foobar" namespace="http://www.w3.org/2005/Atom" skip-when-empty="true" />
+                <xml-map inline="true" key-attribute-name="foo" entry-name="bar" namespace="http://www.w3.org/2005/Atom" />
+            </virtual-property>
+            
+        </class>
+    </serializer>
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/reference/yml_reference.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/reference/yml_reference.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/reference/yml_reference.rst	(revision 8435)
@@ -0,0 +1,92 @@
+YAML Reference
+--------------
+
+.. code-block :: yaml
+
+    # Vendor\MyBundle\Resources\config\serializer\Model.ClassName.yml
+    Vendor\MyBundle\Model\ClassName:
+        exclusion_policy: ALL
+        xml_root_name: foobar
+        xml_root_namespace: http://your.default.namespace
+        exclude: true
+        exclude_if: expr
+        read_only: false
+        access_type: public_method # defaults to property
+        accessor_order: custom
+        custom_accessor_order: [propertyName1, propertyName2, ..., propertyNameN]
+        discriminator:
+            field_name: type
+            disabled: false
+            map:
+                some-value: ClassName
+            groups: [foo, bar]
+            xml_attribute: true
+            xml_element:
+                cdata: false
+                namespace: http://www.w3.org/2005/Atom
+        virtual_properties:
+            getSomeProperty:
+                name: optional-prop-name
+                serialized_name: foo
+                type: integer
+            expression_prop:
+                name: optional-prop-name
+                exp: object.getName()
+                serialized_name: foo
+                type: integer
+        xml_namespaces:
+            "": http://your.default.namespace
+            atom: http://www.w3.org/2005/Atom
+        properties:
+            some-property:
+                exclude: true
+                expose: true
+                exclude_if: expr
+                expose_if: expr
+                skip_when_empty: false
+                access_type: public_method # defaults to property
+                accessor: # access_type must be set to public_method
+                    getter: getSomeOtherProperty
+                    setter: setSomeOtherProperty
+                type: string
+                serialized_name: foo
+                since_version: 1.0
+                until_version: 1.1
+                groups: [foo, bar]
+                xml_attribute: true
+                xml_value: true
+                inline: true
+                read_only: true
+                xml_key_value_pairs: true
+                xml_list:
+                    inline: true
+                    entry_name: foo
+                    namespace: http://www.w3.org/2005/Atom
+                xml_map:
+                    inline: true
+                    key_attribute_name: foo
+                    entry_name: bar
+                    namespace: http://www.w3.org/2005/Atom
+                xml_attribute_map: true
+                xml_element:
+                    cdata: false
+                    namespace: http://www.w3.org/2005/Atom
+                max_depth: 2
+
+        callback_methods:
+            pre_serialize: [foo, bar]
+            post_serialize: [foo, bar]
+            post_deserialize: [foo, bar]
+
+Constants
+---------
+
+In some cases, it may be helpful to reference constants in your YAML files.
+You can do this by prefixing the constant with the special `!php/const` syntax.
+
+.. code-block :: yaml
+
+    Vendor\MyBundle\Model\ClassName:
+        properties:
+            some-property:
+                serialized_name: !php/const Vendor\MyBundle\Model\ClassName::SOME_CONSTANT
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/requirements.txt
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/requirements.txt	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/requirements.txt	(revision 8435)
@@ -0,0 +1,6 @@
+Sphinx==1.8.5
+git+https://github.com/fabpot/sphinx-php.git
+sphinx_rtd_theme
+Jinja2<3.0
+MarkupSafe<2.1
+alabaster<0.7.14
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/usage.rst
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/usage.rst	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/doc/usage.rst	(revision 8435)
@@ -0,0 +1,36 @@
+Usage
+=====
+
+Serializing Objects
+-------------------
+Most common usage is probably to serialize objects. This can be achieved
+very easily:
+
+.. configuration-block ::
+
+    .. code-block :: php
+
+        <?php
+
+        $serializer = JMS\Serializer\SerializerBuilder::create()->build();
+        $serializer->serialize($object, 'json');
+        $serializer->serialize($object, 'xml');
+
+    .. code-block :: jinja
+
+        {{ object | serialize }} {# uses JSON #}
+        {{ object | serialize('json') }}
+        {{ object | serialize('xml') }}
+
+Deserializing Objects
+---------------------
+You can also deserialize objects from their XML, or JSON representation. For
+example, when accepting data via an API.
+
+.. code-block :: php
+
+    <?php
+
+    $serializer = JMS\Serializer\SerializerBuilder::create()->build();
+    $object = $serializer->deserialize($jsonData, \MyNamespace\MyObject::class, 'json');
+
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/phpbench.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/phpbench.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/phpbench.json	(revision 8435)
@@ -0,0 +1,15 @@
+{
+  "runner.bootstrap": "tests/bootstrap.php",
+  "runner.iterations": 3,
+  "runner.revs": 1,
+  "report.generators": {
+    "memory": {
+      "extends": "aggregate",
+      "cols": [ 
+        "benchmark",
+        "mem_peak"
+      ]
+    }
+  }
+
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/phpstan.neon.dist
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/phpstan.neon.dist	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/phpstan.neon.dist	(revision 8435)
@@ -0,0 +1,26 @@
+includes:
+    - phpstan/ignore-by-php-version.neon.php
+parameters:
+    level: 3
+    ignoreErrors:
+        - '~Class Doctrine\\Common\\Persistence\\Proxy not found~'
+        - '~Class Doctrine\\ODM\\MongoDB\\PersistentCollection not found~'
+        - '~Class Symfony\\(Contracts|Component)\\Translation\\TranslatorInterface not found~'
+        - '#Constructor of class JMS\\Serializer\\Annotation\\.*? has an unused parameter#'
+        - '#Class JMS\\Serializer\\Annotation\\DeprecatedReadOnly extends @final class JMS\\Serializer\\Annotation\\ReadOnlyProperty.#'
+        - '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
+        - '#^Call to an undefined method JMS\\Serializer\\Visitor\\DeserializationVisitorInterface\:\:getCurrentObject\(\)\.$#'
+        - '#^Call to method trans\(\) on an unknown class Symfony\\Component\\Translation\\TranslatorInterface\.$#'
+        - '#^Call to method transChoice\(\) on an unknown class Symfony\\Component\\Translation\\TranslatorInterface\.$#'
+        - '#^Property JMS\\Serializer\\Handler\\FormErrorHandler\:\:\$translator has unknown class Symfony\\Component\\Translation\\TranslatorInterface as its type\.$#'
+        - '#^Cannot call method appendChild\(\) on null\.$#'
+        - '#^Call to an undefined method JMS\\Serializer\\VisitorInterface\:\:setData\(\)\.$#'
+        - '#^Property JMS\\Serializer\\Tests\\Fixtures\\DocBlockType\\Collection\\CollectionOfNotExistingClasses\:\:\$productIds has unknown class JMS\\Serializer\\Tests\\Fixtures\\DocBlockType\\Collection\\NotExistingClass as its type\.$#'
+        - '#^Call to method expects\(\) on an unknown class Symfony\\Component\\Translation\\TranslatorInterface\.$#'
+        - '#^Call to an undefined method JMS\\Serializer\\VisitorInterface\:\:hasData\(\)\.$#'
+        - '#^Property JMS\\Serializer\\Tests\\Fixtures\\DocBlockType\\Collection\\CollectionOfClassesWithFullNamespacePath\:\:\$productIds has unknown class JMS\\Serializer\\Tests\\Fixtures\\DocBlockType\\Collection\\JMS\\Serializer\\Tests\\Fixtures\\DocBlockType\\Collection\\Product as its type\.$#'
+        - '#^Property JMS\\Serializer\\Tests\\Fixtures\\DocBlockType\\Collection\\CollectionOfInterfacesWithFullNamespacePath\:\:\$productColors has unknown class JMS\\Serializer\\Tests\\Fixtures\\DocBlockType\\Collection\\JMS\\Serializer\\Tests\\Fixtures\\DocBlockType\\Collection\\Details\\ProductColor as its type\.$#'
+        - '#^Method JMS\\Serializer\\GraphNavigator\\DeserializationGraphNavigator\:\:resolveMetadata\(\) should return JMS\\Serializer\\Metadata\\ClassMetadata\|null#'
+    paths:
+        - %currentWorkingDirectory%/src
+        - %currentWorkingDirectory%/tests
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/rector.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/rector.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/rector.php	(revision 8435)
@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+
+use Rector\Config\RectorConfig;
+use Rector\Set\ValueObject\LevelSetList;
+
+return static function (RectorConfig $rectorConfig) {
+    $rectorConfig->paths([
+        __DIR__ . '/src',
+    ]);
+    $rectorConfig->sets([LevelSetList::UP_TO_PHP_74]);
+};
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/AbstractVisitor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/AbstractVisitor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/AbstractVisitor.php	(revision 8435)
@@ -0,0 +1,109 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use JMS\Serializer\Exception\NonFloatCastableTypeException;
+use JMS\Serializer\Exception\NonIntCastableTypeException;
+use JMS\Serializer\Exception\NonStringCastableTypeException;
+
+/**
+ * @internal
+ */
+abstract class AbstractVisitor implements VisitorInterface
+{
+    /**
+     * @var GraphNavigatorInterface
+     */
+    protected $navigator;
+
+    public function setNavigator(GraphNavigatorInterface $navigator): void
+    {
+        $this->navigator = $navigator;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function prepare($data)
+    {
+        return $data;
+    }
+
+    protected function getElementType(array $typeArray): ?array
+    {
+        if (false === isset($typeArray['params'][0])) {
+            return null;
+        }
+
+        if (isset($typeArray['params'][1]) && \is_array($typeArray['params'][1])) {
+            return $typeArray['params'][1];
+        } else {
+            return $typeArray['params'][0];
+        }
+    }
+
+    /**
+     * logic according to strval https://www.php.net/manual/en/function.strval.php
+     * "You cannot use strval() on arrays or on objects that do not implement the __toString() method."
+     *
+     * @param mixed $value
+     */
+    protected function assertValueCanBeCastToString($value): void
+    {
+        if (is_array($value)) {
+            throw new NonStringCastableTypeException($value);
+        }
+
+        if (is_object($value) && !method_exists($value, '__toString')) {
+            throw new NonStringCastableTypeException($value);
+        }
+    }
+
+    /**
+     * logic according to intval https://www.php.net/manual/en/function.intval.php
+     * "intval() should not be used on objects, as doing so will emit an E_NOTICE level error and return 1."
+     *
+     * @param mixed $value
+     */
+    protected function assertValueCanBeCastToInt($value): void
+    {
+        if (is_object($value) && !$value instanceof \SimpleXMLElement) {
+            throw new NonIntCastableTypeException($value);
+        }
+    }
+
+    /**
+     *  logic according to floatval https://www.php.net/manual/en/function.floatval.php
+     * "floatval() should not be used on objects, as doing so will emit an E_NOTICE level error and return 1."
+     *
+     * @param mixed $value
+     */
+    protected function assertValueCanCastToFloat($value): void
+    {
+        if (is_object($value) && !$value instanceof \SimpleXMLElement) {
+            throw new NonFloatCastableTypeException($value);
+        }
+    }
+
+    protected function mapRoundMode(?string $roundMode = null): int
+    {
+        switch ($roundMode) {
+            case 'HALF_DOWN':
+                $roundMode = PHP_ROUND_HALF_DOWN;
+                break;
+            case 'HALF_EVEN':
+                $roundMode = PHP_ROUND_HALF_EVEN;
+                break;
+            case 'HALF_ODD':
+                $roundMode = PHP_ROUND_HALF_ODD;
+                break;
+            case 'HALF_UP':
+            default:
+                $roundMode = PHP_ROUND_HALF_UP;
+        }
+
+        return $roundMode;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Accessor/AccessorStrategyInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Accessor/AccessorStrategyInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Accessor/AccessorStrategyInterface.php	(revision 8435)
@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Accessor;
+
+use JMS\Serializer\DeserializationContext;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\SerializationContext;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+interface AccessorStrategyInterface
+{
+    /**
+     * @return mixed
+     */
+    public function getValue(object $object, PropertyMetadata $metadata, SerializationContext $context);
+
+    /**
+     * @param mixed $value
+     */
+    public function setValue(object $object, $value, PropertyMetadata $metadata, DeserializationContext $context): void;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Accessor/DefaultAccessorStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Accessor/DefaultAccessorStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Accessor/DefaultAccessorStrategy.php	(revision 8435)
@@ -0,0 +1,143 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Accessor;
+
+use JMS\Serializer\DeserializationContext;
+use JMS\Serializer\Exception\ExpressionLanguageRequiredException;
+use JMS\Serializer\Exception\LogicException;
+use JMS\Serializer\Exception\UninitializedPropertyException;
+use JMS\Serializer\Expression\CompilableExpressionEvaluatorInterface;
+use JMS\Serializer\Expression\Expression;
+use JMS\Serializer\Expression\ExpressionEvaluatorInterface;
+use JMS\Serializer\Metadata\ExpressionPropertyMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Metadata\StaticPropertyMetadata;
+use JMS\Serializer\SerializationContext;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+final class DefaultAccessorStrategy implements AccessorStrategyInterface
+{
+    /**
+     * @var callable[]
+     */
+    private $readAccessors = [];
+
+    /**
+     * @var callable[]
+     */
+    private $writeAccessors = [];
+
+    /**
+     * @var \ReflectionProperty[]
+     */
+    private $propertyReflectionCache = [];
+
+    /**
+     * @var ExpressionEvaluatorInterface
+     */
+    private $evaluator;
+
+    public function __construct(?ExpressionEvaluatorInterface $evaluator = null)
+    {
+        $this->evaluator = $evaluator;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getValue(object $object, PropertyMetadata $metadata, SerializationContext $context)
+    {
+        if ($metadata instanceof StaticPropertyMetadata) {
+            return $metadata->getValue();
+        }
+
+        if ($metadata instanceof ExpressionPropertyMetadata) {
+            if (null === $this->evaluator) {
+                throw new ExpressionLanguageRequiredException(sprintf('The property %s on %s requires the expression accessor strategy to be enabled.', $metadata->name, $metadata->class));
+            }
+
+            $variables = ['object' => $object, 'context' => $context, 'property_metadata' => $metadata];
+
+            if (($metadata->expression instanceof Expression) && ($this->evaluator instanceof CompilableExpressionEvaluatorInterface)) {
+                return $this->evaluator->evaluateParsed($metadata->expression, $variables);
+            }
+
+            return $this->evaluator->evaluate($metadata->expression, $variables);
+        }
+
+        if (null !== $metadata->getter) {
+            return $object->{$metadata->getter}();
+        }
+
+        if ($metadata->forceReflectionAccess) {
+            $ref = $this->propertyReflectionCache[$metadata->class][$metadata->name] ?? null;
+            if (null === $ref) {
+                $ref = new \ReflectionProperty($metadata->class, $metadata->name);
+                $ref->setAccessible(true);
+                $this->propertyReflectionCache[$metadata->class][$metadata->name] = $ref;
+            }
+
+            return $ref->getValue($object);
+        }
+
+        $accessor = $this->readAccessors[$metadata->class] ?? null;
+        if (null === $accessor) {
+            $accessor = \Closure::bind(static fn ($o, $name) => $o->$name, null, $metadata->class);
+            $this->readAccessors[$metadata->class] = $accessor;
+        }
+
+        try {
+            return $accessor($object, $metadata->name);
+        } catch (\Error $e) {
+            // handle uninitialized properties in PHP >= 7.4
+            if (preg_match('/^Typed property ([\w\\\\@]+)::\$(\w+) must not be accessed before initialization$/', $e->getMessage(), $matches)) {
+                throw new UninitializedPropertyException(sprintf('Uninitialized property "%s::$%s".', $metadata->class, $metadata->name), 0, $e);
+            }
+
+            throw $e;
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function setValue(object $object, $value, PropertyMetadata $metadata, DeserializationContext $context): void
+    {
+        if (true === $metadata->readOnly) {
+            throw new LogicException(sprintf('%s on %s is read only.', $metadata->name, $metadata->class));
+        }
+
+        if (null !== $metadata->setter) {
+            $object->{$metadata->setter}($value);
+
+            return;
+        }
+
+        if ($metadata->forceReflectionAccess) {
+            $ref = $this->propertyReflectionCache[$metadata->class][$metadata->name] ?? null;
+            if (null === $ref) {
+                $ref = new \ReflectionProperty($metadata->class, $metadata->name);
+                $ref->setAccessible(true);
+                $this->propertyReflectionCache[$metadata->class][$metadata->name] = $ref;
+            }
+
+            $ref->setValue($object, $value);
+
+            return;
+        }
+
+        $accessor = $this->writeAccessors[$metadata->class] ?? null;
+        if (null === $accessor) {
+            $accessor = \Closure::bind(static function ($o, $name, $value): void {
+                $o->$name = $value;
+            }, null, $metadata->class);
+            $this->writeAccessors[$metadata->class] = $accessor;
+        }
+
+        $accessor($object, $metadata->name, $value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/AccessType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/AccessType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/AccessType.php	(revision 8435)
@@ -0,0 +1,28 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"CLASS", "PROPERTY"})
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_PROPERTY)]
+final class AccessType implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @Required
+     * @var string|null
+     */
+    public $type;
+
+    public function __construct(array $values = [], ?string $type = null)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Accessor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Accessor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Accessor.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target("PROPERTY")
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY)]
+final class Accessor implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @var string|null
+     */
+    public $getter = null;
+
+    /**
+     * @var string|null
+     */
+    public $setter = null;
+
+    public function __construct(array $values = [], ?string $getter = null, ?string $setter = null)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/AccessorOrder.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/AccessorOrder.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/AccessorOrder.php	(revision 8435)
@@ -0,0 +1,35 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * Controls the order of properties in a class.
+ *
+ * @Annotation
+ * @Target("CLASS")
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_CLASS)]
+final class AccessorOrder implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @Required
+     * @var string|null
+     */
+    public $order = null;
+
+    /**
+     * @var array<string>
+     */
+    public $custom = [];
+
+    public function __construct(array $values = [], ?string $order = null, array $custom = [])
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/AnnotationUtilsTrait.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/AnnotationUtilsTrait.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/AnnotationUtilsTrait.php	(revision 8435)
@@ -0,0 +1,40 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+use JMS\Serializer\Exception\InvalidArgumentException;
+
+trait AnnotationUtilsTrait
+{
+    private function loadAnnotationParameters(array $vars): void
+    {
+        if (!array_key_exists('values', $vars)) {
+            $values = [];
+        } elseif (!is_array($vars['values'])) {
+            $values = ['value' => $vars['values']];
+        } else {
+            $values = $vars['values'];
+        }
+
+        unset($vars['values']);
+
+        if (array_key_exists('value', $values)) {
+            $values[key($vars)] = $values['value'];
+            unset($values['value']);
+        }
+
+        foreach ($values as $key => $value) {
+            $vars[$key] = $value;
+        }
+
+        foreach ($vars as $key => $value) {
+            if (!property_exists(static::class, $key)) {
+                throw new InvalidArgumentException(sprintf('Unknown property "%s" on annotation "%s".', $key, static::class));
+            }
+
+            $this->{$key} = $value;
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/DeprecatedReadOnly.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/DeprecatedReadOnly.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/DeprecatedReadOnly.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"CLASS","PROPERTY"})
+ *
+ * @deprecated use `@ReadOnlyProperty` instead
+ */
+#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_PROPERTY)]
+final class DeprecatedReadOnly extends ReadOnlyProperty
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Discriminator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Discriminator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Discriminator.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target("CLASS")
+ */
+#[\Attribute(\Attribute::TARGET_CLASS)]
+class Discriminator implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /** @var array<string> */
+    public $map = [];
+
+    /** @var string */
+    public $field = 'type';
+
+    /** @var bool */
+    public $disabled = false;
+
+    /** @var string[] */
+    public $groups = [];
+
+    public function __construct(array $values = [], string $field = 'type', array $groups = [], array $map = [], bool $disabled = false)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Exclude.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Exclude.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Exclude.php	(revision 8435)
@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "CLASS", "METHOD", "ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD)]
+final class Exclude implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @var string|null
+     */
+    public $if;
+
+    public function __construct(array $values = [], ?string $if = null)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/ExclusionPolicy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/ExclusionPolicy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/ExclusionPolicy.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+use JMS\Serializer\Exception\RuntimeException;
+
+/**
+ * @Annotation
+ * @Target("CLASS")
+ */
+#[\Attribute(\Attribute::TARGET_CLASS)]
+final class ExclusionPolicy implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    public const NONE = 'NONE';
+    public const ALL = 'ALL';
+
+    /**
+     * @var string|null
+     */
+    public $policy = 'NONE';
+
+    public function __construct($values = [], ?string $policy = null)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+
+        $this->policy = strtoupper($this->policy);
+
+        if (self::NONE !== $this->policy && self::ALL !== $this->policy) {
+            throw new RuntimeException('Exclusion policy must either be "ALL", or "NONE".');
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Expose.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Expose.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Expose.php	(revision 8435)
@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class Expose implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @var string|null
+     */
+    public $if = null;
+
+    public function __construct(array $values = [], ?string $if = null)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Groups.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Groups.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Groups.php	(revision 8435)
@@ -0,0 +1,35 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY","METHOD","ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class Groups implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /** @var array<string> @Required */
+    public $groups = [];
+
+    public function __construct(array $values = [], array $groups = [])
+    {
+        $vars = get_defined_vars();
+        /*
+            if someone wants to set as Groups(['value' => '...']) this check will miserably fail (only one group with 'value' as only key).
+            That is because doctrine annotations uses for @Groups("abc") the same values content (buy validation will fail since groups has to be an array).
+            All the other cases should work as expected.
+            The alternative here is to use the explicit syntax  Groups(groups=['value' => '...'])
+        */
+        if (count($values) > 0 && ((!isset($values['value']) && !isset($values['groups'])) || count($values) > 1) && 0 === count($groups)) {
+            $vars['groups'] = $values;
+            $vars['values'] = [];
+        }
+
+        $this->loadAnnotationParameters($vars);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Inline.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Inline.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Inline.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY","METHOD","ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class Inline implements SerializerAttribute
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/MaxDepth.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/MaxDepth.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/MaxDepth.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY","METHOD","ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class MaxDepth implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @Required
+     * @var int
+     */
+    public $depth;
+
+    public function __construct($values = [], int $depth = 0)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/PostDeserialize.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/PostDeserialize.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/PostDeserialize.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * This annotation can be defined on methods which are called after the
+ * deserialization of the object is complete.
+ *
+ * These methods do not necessarily have to be public.
+ *
+ * @Annotation
+ * @Target("METHOD")
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_METHOD)]
+final class PostDeserialize implements SerializerAttribute
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/PostSerialize.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/PostSerialize.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/PostSerialize.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target("METHOD")
+ */
+#[\Attribute(\Attribute::TARGET_METHOD)]
+final class PostSerialize implements SerializerAttribute
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/PreSerialize.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/PreSerialize.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/PreSerialize.php	(revision 8435)
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * This annotation can be declared on methods which should be called
+ * before the Serialization process.
+ *
+ * These methods do not need to be public, and should do any clean-up, or
+ * preparation of the object that is necessary.
+ *
+ * @Annotation
+ * @Target("METHOD")
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_METHOD)]
+final class PreSerialize implements SerializerAttribute
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/ReadOnly.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/ReadOnly.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/ReadOnly.php	(revision 8435)
@@ -0,0 +1,7 @@
+<?php
+
+declare(strict_types=1);
+
+use JMS\Serializer\Annotation\DeprecatedReadOnly;
+
+class_alias(DeprecatedReadOnly::class, 'JMS\Serializer\Annotation\ReadOnly');
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/ReadOnlyProperty.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/ReadOnlyProperty.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/ReadOnlyProperty.php	(revision 8435)
@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"CLASS","PROPERTY"})
+ *
+ * @final
+ */
+#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_PROPERTY)]
+/* final */ class ReadOnlyProperty implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @var bool
+     */
+    public $readOnly = true;
+
+    public function __construct(array $values = [], bool $readOnly = true)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/SerializedName.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/SerializedName.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/SerializedName.php	(revision 8435)
@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY","METHOD", "ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class SerializedName implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @var string|null
+     */
+    public $name = null;
+
+    public function __construct($values = [], ?string $name = null)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/SerializerAttribute.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/SerializerAttribute.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/SerializerAttribute.php	(revision 8435)
@@ -0,0 +1,12 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * Marker interface for serializer attributes
+ */
+interface SerializerAttribute
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Since.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Since.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Since.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class Since extends Version
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/SkipWhenEmpty.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/SkipWhenEmpty.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/SkipWhenEmpty.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY","METHOD","ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class SkipWhenEmpty implements SerializerAttribute
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Type.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Type.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Type.php	(revision 8435)
@@ -0,0 +1,46 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD","ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class Type implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @Required
+     * @var string|\Stringable|null
+     */
+    public $name = null;
+
+    public function __construct($values = [], $name = null)
+    {
+        if ((null !== $name) && !is_string($name) && !(is_object($name) && method_exists($name, '__toString'))) {
+            throw new \RuntimeException(
+                'Type must be either string, null or object implements __toString() method.',
+            );
+        }
+
+        if (is_object($name)) {
+            $name = (string) $name;
+        }
+
+        if (is_object($values)) {
+            if (false === method_exists($values, '__toString')) {
+                throw new \RuntimeException(
+                    'Type must be either string or object implements __toString() method.',
+                );
+            }
+
+            $values = (string) $values;
+        }
+
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Until.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Until.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Until.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class Until extends Version
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Version.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Version.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/Version.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+abstract class Version implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @Required
+     * @var string|null
+     */
+    public $version = null;
+
+    public function __construct($values = [], ?string $version = null)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/VirtualProperty.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/VirtualProperty.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/VirtualProperty.php	(revision 8435)
@@ -0,0 +1,53 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"METHOD", "CLASS"})
+ *
+ * @author Alexander Klimenkov <alx.devel@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)]
+final class VirtualProperty implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @var string|null
+     */
+    public $exp = null;
+
+    /**
+     * @var string|null
+     */
+    public $name = null;
+
+    /**
+     * @var array
+     */
+    public $options = [];
+
+    public function __construct($values = [], ?string $name = null, ?string $exp = null, array $options = [])
+    {
+        $vars = get_defined_vars();
+        unset($vars['options']);
+        $this->loadAnnotationParameters($vars);
+
+        if (0 !== count($options)) {
+            $this->options = $options;
+        }
+
+        foreach ($options as $option) {
+            if (is_array($option) && class_exists($option[0])) {
+                $this->options[] = new $option[0]([], ...$option[1]);
+
+                continue;
+            }
+
+            $this->options[] = $option;
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlAttribute.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlAttribute.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlAttribute.php	(revision 8435)
@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD","ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class XmlAttribute implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @var string|null
+     */
+    public $namespace = null;
+
+    public function __construct($values = [], ?string $namespace = null)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlAttributeMap.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlAttributeMap.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlAttributeMap.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class XmlAttributeMap implements SerializerAttribute
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlCollection.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlCollection.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlCollection.php	(revision 8435)
@@ -0,0 +1,35 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+abstract class XmlCollection implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @var string
+     */
+    public $entry = 'entry';
+
+    /**
+     * @var bool
+     */
+    public $inline = false;
+
+    /**
+     * @var string|null
+     */
+    public $namespace = null;
+
+    /**
+     * @var bool
+     */
+    public $skipWhenEmpty = true;
+
+    public function __construct(array $values = [], string $entry = 'entry', bool $inline = false, ?string $namespace = null, bool $skipWhenEmpty = true)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlDiscriminator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlDiscriminator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlDiscriminator.php	(revision 8435)
@@ -0,0 +1,35 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target("CLASS")
+ */
+#[\Attribute(\Attribute::TARGET_CLASS)]
+class XmlDiscriminator implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @var bool
+     */
+    public $attribute = false;
+
+    /**
+     * @var bool
+     */
+    public $cdata = true;
+
+    /**
+     * @var string|null
+     */
+    public $namespace = null;
+
+    public function __construct(array $values = [], bool $attribute = false, bool $cdata = false, ?string $namespace = null)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlElement.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlElement.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlElement.php	(revision 8435)
@@ -0,0 +1,30 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD","ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class XmlElement implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @var bool
+     */
+    public $cdata = true;
+
+    /**
+     * @var string|null
+     */
+    public $namespace = null;
+
+    public function __construct(array $values = [], bool $cdata = true, ?string $namespace = null)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlKeyValuePairs.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlKeyValuePairs.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlKeyValuePairs.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY","METHOD","ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class XmlKeyValuePairs implements SerializerAttribute
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlList.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlList.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlList.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY","METHOD","ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class XmlList extends XmlCollection
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlMap.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlMap.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlMap.php	(revision 8435)
@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY","METHOD","ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class XmlMap extends XmlCollection
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @var string
+     */
+    public $keyAttribute = '_key';
+
+    public function __construct(array $values = [], string $keyAttribute = '_key', string $entry = 'entry', bool $inline = false, ?string $namespace = null, bool $skipWhenEmpty = true)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlNamespace.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlNamespace.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlNamespace.php	(revision 8435)
@@ -0,0 +1,31 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target("CLASS")
+ */
+#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)]
+final class XmlNamespace implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @Required
+     * @var string|null
+     */
+    public $uri = null;
+
+    /**
+     * @var string
+     */
+    public $prefix = '';
+
+    public function __construct(array $values = [], ?string $uri = null, string $prefix = '')
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlRoot.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlRoot.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlRoot.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target("CLASS")
+ */
+#[\Attribute(\Attribute::TARGET_CLASS)]
+final class XmlRoot implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @Required
+     * @var string|null
+     */
+    public $name = null;
+
+    /**
+     * @var string|null
+     */
+    public $namespace = null;
+
+    /**
+     * @var string|null
+     */
+    public $prefix = null;
+
+    public function __construct($values = [], ?string $name = null, ?string $namespace = null, ?string $prefix = null)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlValue.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlValue.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Annotation/XmlValue.php	(revision 8435)
@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Annotation;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY","METHOD","ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)]
+final class XmlValue implements SerializerAttribute
+{
+    use AnnotationUtilsTrait;
+
+    /**
+     * @var bool
+     */
+    public $cdata = true;
+
+    public function __construct(array $values = [], bool $cdata = true)
+    {
+        $this->loadAnnotationParameters(get_defined_vars());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ArrayTransformerInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ArrayTransformerInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ArrayTransformerInterface.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+/**
+ * Interface for array transformation.
+ *
+ * @author Daniel Bojdo <daniel@bojdo.eu>
+ */
+interface ArrayTransformerInterface
+{
+    /**
+     * Converts objects to an array structure.
+     *
+     * This is useful when the data needs to be passed on to other methods which expect array data.
+     *
+     * @param mixed $data anything that converts to an array, typically an object or an array of objects
+     *
+     * @return array
+     */
+    public function toArray($data, ?SerializationContext $context = null, ?string $type = null): array;
+
+    /**
+     * Restores objects from an array structure.
+     *
+     * @param array $data
+     *
+     * @return mixed this returns whatever the passed type is, typically an object or an array of objects
+     */
+    public function fromArray(array $data, string $type, ?DeserializationContext $context = null);
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Builder/CallbackDriverFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Builder/CallbackDriverFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Builder/CallbackDriverFactory.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Builder;
+
+use Doctrine\Common\Annotations\Reader;
+use JMS\Serializer\Exception\LogicException;
+use Metadata\Driver\DriverInterface;
+
+final class CallbackDriverFactory implements DriverFactoryInterface
+{
+    /**
+     * @var callable
+     * @phpstan-var callable(array $metadataDirs, Reader|null $reader): DriverInterface
+     */
+    private $callback;
+
+    /**
+     * @phpstan-param callable(array $metadataDirs, Reader|null $reader): DriverInterface $callable
+     */
+    public function __construct(callable $callable)
+    {
+        $this->callback = $callable;
+    }
+
+    public function createDriver(array $metadataDirs, ?Reader $reader = null): DriverInterface
+    {
+        $driver = \call_user_func($this->callback, $metadataDirs, $reader);
+        if (!$driver instanceof DriverInterface) {
+            throw new LogicException('The callback must return an instance of DriverInterface.');
+        }
+
+        return $driver;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Builder/DefaultDriverFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Builder/DefaultDriverFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Builder/DefaultDriverFactory.php	(revision 8435)
@@ -0,0 +1,104 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Builder;
+
+use Doctrine\Common\Annotations\Reader;
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\Expression\CompilableExpressionEvaluatorInterface;
+use JMS\Serializer\Metadata\Driver\AnnotationOrAttributeDriver;
+use JMS\Serializer\Metadata\Driver\DefaultValuePropertyDriver;
+use JMS\Serializer\Metadata\Driver\EnumPropertiesDriver;
+use JMS\Serializer\Metadata\Driver\NullDriver;
+use JMS\Serializer\Metadata\Driver\TypedPropertiesDriver;
+use JMS\Serializer\Metadata\Driver\XmlDriver;
+use JMS\Serializer\Metadata\Driver\YamlDriver;
+use JMS\Serializer\Naming\PropertyNamingStrategyInterface;
+use JMS\Serializer\Type\Parser;
+use JMS\Serializer\Type\ParserInterface;
+use Metadata\Driver\DriverChain;
+use Metadata\Driver\DriverInterface;
+use Metadata\Driver\FileLocator;
+use Symfony\Component\Yaml\Yaml;
+
+final class DefaultDriverFactory implements DriverFactoryInterface
+{
+    /**
+     * @var ParserInterface
+     */
+    private $typeParser;
+
+    /**
+     * @var bool
+     */
+    private $enableEnumSupport = false;
+
+    /**
+     * @var PropertyNamingStrategyInterface
+     */
+    private $propertyNamingStrategy;
+
+    /**
+     * @var CompilableExpressionEvaluatorInterface
+     */
+    private $expressionEvaluator;
+
+    public function __construct(PropertyNamingStrategyInterface $propertyNamingStrategy, ?ParserInterface $typeParser = null, ?CompilableExpressionEvaluatorInterface $expressionEvaluator = null)
+    {
+        $this->typeParser = $typeParser ?: new Parser();
+        $this->propertyNamingStrategy = $propertyNamingStrategy;
+        $this->expressionEvaluator = $expressionEvaluator;
+    }
+
+    public function enableEnumSupport(bool $enableEnumSupport = true): void
+    {
+        $this->enableEnumSupport = $enableEnumSupport;
+    }
+
+    public function createDriver(array $metadataDirs, ?Reader $annotationReader = null): DriverInterface
+    {
+        if (PHP_VERSION_ID < 80000 && empty($metadataDirs) && !interface_exists(Reader::class)) {
+            throw new RuntimeException(sprintf('To use "%s", either a list of metadata directories must be provided, the "doctrine/annotations" package installed, or use PHP 8.0 or later.', self::class));
+        }
+
+        /*
+         * Build the sorted list of metadata drivers based on the environment. The final order should be:
+         *
+         * - YAML Driver
+         * - XML Driver
+         * - Annotations/Attributes Driver
+         * - Null (Fallback) Driver
+         */
+        $metadataDrivers = [];
+
+        if (PHP_VERSION_ID >= 80000 || $annotationReader instanceof Reader) {
+            $metadataDrivers[] = new AnnotationOrAttributeDriver($this->propertyNamingStrategy, $this->typeParser, $this->expressionEvaluator, $annotationReader);
+        }
+
+        if (!empty($metadataDirs)) {
+            $fileLocator = new FileLocator($metadataDirs);
+
+            array_unshift($metadataDrivers, new XmlDriver($fileLocator, $this->propertyNamingStrategy, $this->typeParser, $this->expressionEvaluator));
+
+            if (class_exists(Yaml::class)) {
+                array_unshift($metadataDrivers, new YamlDriver($fileLocator, $this->propertyNamingStrategy, $this->typeParser, $this->expressionEvaluator));
+            }
+        }
+
+        $driver = new DriverChain($metadataDrivers);
+        $driver->addDriver(new NullDriver($this->propertyNamingStrategy));
+
+        if ($this->enableEnumSupport) {
+            $driver = new EnumPropertiesDriver($driver);
+        }
+
+        $driver = new TypedPropertiesDriver($driver, $this->typeParser);
+
+        if (PHP_VERSION_ID >= 80000) {
+            $driver = new DefaultValuePropertyDriver($driver);
+        }
+
+        return $driver;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Builder/DocBlockDriverFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Builder/DocBlockDriverFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Builder/DocBlockDriverFactory.php	(revision 8435)
@@ -0,0 +1,35 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Builder;
+
+use Doctrine\Common\Annotations\Reader;
+use JMS\Serializer\Metadata\Driver\DocBlockDriver;
+use JMS\Serializer\Type\ParserInterface;
+use Metadata\Driver\DriverInterface;
+
+class DocBlockDriverFactory implements DriverFactoryInterface
+{
+    /**
+     * @var DriverFactoryInterface
+     */
+    private $driverFactoryToDecorate;
+    /**
+     * @var ParserInterface|null
+     */
+    private $typeParser;
+
+    public function __construct(DriverFactoryInterface $driverFactoryToDecorate, ?ParserInterface $typeParser = null)
+    {
+        $this->driverFactoryToDecorate = $driverFactoryToDecorate;
+        $this->typeParser = $typeParser;
+    }
+
+    public function createDriver(array $metadataDirs, ?Reader $annotationReader = null): DriverInterface
+    {
+        $driver = $this->driverFactoryToDecorate->createDriver($metadataDirs, $annotationReader);
+
+        return new DocBlockDriver($driver, $this->typeParser);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Builder/DriverFactoryInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Builder/DriverFactoryInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Builder/DriverFactoryInterface.php	(revision 8435)
@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Builder;
+
+use Doctrine\Common\Annotations\Reader;
+use Metadata\Driver\DriverInterface;
+
+interface DriverFactoryInterface
+{
+    public function createDriver(array $metadataDirs, ?Reader $annotationReader = null): DriverInterface;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Construction/DoctrineObjectConstructor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Construction/DoctrineObjectConstructor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Construction/DoctrineObjectConstructor.php	(revision 8435)
@@ -0,0 +1,161 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Construction;
+
+use Doctrine\ODM\PHPCR\DocumentManagerInterface;
+use Doctrine\ORM\EntityManagerInterface;
+use Doctrine\Persistence\ManagerRegistry;
+use JMS\Serializer\DeserializationContext;
+use JMS\Serializer\Exception\InvalidArgumentException;
+use JMS\Serializer\Exception\ObjectConstructionException;
+use JMS\Serializer\Exclusion\ExpressionLanguageExclusionStrategy;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+
+use function is_array;
+
+/**
+ * Doctrine object constructor for new (or existing) objects during deserialization.
+ */
+final class DoctrineObjectConstructor implements ObjectConstructorInterface
+{
+    public const ON_MISSING_NULL = 'null';
+    public const ON_MISSING_EXCEPTION = 'exception';
+    public const ON_MISSING_FALLBACK = 'fallback';
+    /**
+     * @var string
+     */
+    private $fallbackStrategy;
+
+    /**
+     * @var ManagerRegistry
+     */
+    private $managerRegistry;
+
+    /**
+     * @var ObjectConstructorInterface
+     */
+    private $fallbackConstructor;
+
+    /**
+     * @var ExpressionLanguageExclusionStrategy|null
+     */
+    private $expressionLanguageExclusionStrategy;
+
+    /**
+     * @param ManagerRegistry $managerRegistry     Manager registry
+     * @param ObjectConstructorInterface $fallbackConstructor Fallback object constructor
+     */
+    public function __construct(
+        ManagerRegistry $managerRegistry,
+        ObjectConstructorInterface $fallbackConstructor,
+        string $fallbackStrategy = self::ON_MISSING_NULL,
+        ?ExpressionLanguageExclusionStrategy $expressionLanguageExclusionStrategy = null
+    ) {
+        $this->managerRegistry = $managerRegistry;
+        $this->fallbackConstructor = $fallbackConstructor;
+        $this->fallbackStrategy = $fallbackStrategy;
+        $this->expressionLanguageExclusionStrategy = $expressionLanguageExclusionStrategy;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function construct(DeserializationVisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context): ?object
+    {
+        $objectManager = $this->managerRegistry->getManagerForClass($metadata->name);
+
+        if (!$objectManager) {
+            // No ObjectManager found, proceed with normal deserialization
+            return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context);
+        }
+
+        // Locate possible ClassMetadata
+        $classMetadataFactory = $objectManager->getMetadataFactory();
+
+        if ($classMetadataFactory->isTransient($metadata->name)) {
+            // No ClassMetadata found, proceed with normal deserialization
+            return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context);
+        }
+
+        // Managed entity, check for proxy load
+        if (!is_array($data) && !(is_object($data) && 'SimpleXMLElement' === get_class($data))) {
+            \assert($objectManager instanceof EntityManagerInterface || $objectManager instanceof DocumentManagerInterface);
+
+            // Single identifier, load proxy
+            return $objectManager->getReference($metadata->name, $data);
+        }
+
+        // Fallback to default constructor if missing identifier(s)
+        $classMetadata = $objectManager->getClassMetadata($metadata->name);
+        $identifierList = [];
+
+        foreach ($classMetadata->getIdentifierFieldNames() as $name) {
+            // Avoid calling objectManager->find if some identification properties are excluded
+            if (!isset($metadata->propertyMetadata[$name])) {
+                return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context);
+            }
+
+            $propertyMetadata = $metadata->propertyMetadata[$name];
+
+            // Avoid calling objectManager->find if some identification properties are excluded by some exclusion strategy
+            if ($this->isIdentifierFieldExcluded($propertyMetadata, $context)) {
+                return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context);
+            }
+
+            if (is_array($data) && !array_key_exists($propertyMetadata->serializedName, $data)) {
+                return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context);
+            } elseif (is_object($data) && !property_exists($data, $propertyMetadata->serializedName)) {
+                return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context);
+            }
+
+            if (is_object($data) && 'SimpleXMLElement' === get_class($data)) {
+                $identifierList[$name] = (string) $data->{$propertyMetadata->serializedName};
+            } else {
+                $identifierList[$name] = $data[$propertyMetadata->serializedName];
+            }
+        }
+
+        if (empty($identifierList)) {
+            // $classMetadataFactory->isTransient() fails on embeddable class with file metadata driver
+            // https://github.com/doctrine/persistence/issues/37
+            return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context);
+        }
+
+        // Entity update, load it from database
+        $object = $objectManager->find($metadata->name, $identifierList);
+
+        if (null === $object) {
+            switch ($this->fallbackStrategy) {
+                case self::ON_MISSING_NULL:
+                    return null;
+
+                case self::ON_MISSING_EXCEPTION:
+                    throw new ObjectConstructionException(sprintf('Entity %s can not be found', $metadata->name));
+
+                case self::ON_MISSING_FALLBACK:
+                    return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context);
+
+                default:
+                    throw new InvalidArgumentException('The provided fallback strategy for the object constructor is not valid');
+            }
+        }
+
+        $objectManager->initializeObject($object);
+
+        return $object;
+    }
+
+    private function isIdentifierFieldExcluded(PropertyMetadata $propertyMetadata, DeserializationContext $context): bool
+    {
+        $exclusionStrategy = $context->getExclusionStrategy();
+        if (null !== $exclusionStrategy && $exclusionStrategy->shouldSkipProperty($propertyMetadata, $context)) {
+            return true;
+        }
+
+        return null !== $this->expressionLanguageExclusionStrategy && $this->expressionLanguageExclusionStrategy->shouldSkipProperty($propertyMetadata, $context);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Construction/ObjectConstructorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Construction/ObjectConstructorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Construction/ObjectConstructorInterface.php	(revision 8435)
@@ -0,0 +1,28 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Construction;
+
+use JMS\Serializer\DeserializationContext;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+
+/**
+ * Implementations of this interface construct new objects during deserialization.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+interface ObjectConstructorInterface
+{
+    /**
+     * Constructs a new object.
+     *
+     * Implementations could for example create a new object calling "new", use
+     * "unserialize" techniques, reflection, or other means.
+     *
+     * @param mixed $data
+     * @param array $type ["name" => string, "params" => array]
+     */
+    public function construct(DeserializationVisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context): ?object;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Construction/UnserializeObjectConstructor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Construction/UnserializeObjectConstructor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Construction/UnserializeObjectConstructor.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Construction;
+
+use Doctrine\Instantiator\Instantiator;
+use JMS\Serializer\DeserializationContext;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+
+final class UnserializeObjectConstructor implements ObjectConstructorInterface
+{
+    /** @var Instantiator */
+    private $instantiator;
+
+    /**
+     * {@inheritdoc}
+     */
+    public function construct(DeserializationVisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context): ?object
+    {
+        return $this->getInstantiator()->instantiate($metadata->name);
+    }
+
+    private function getInstantiator(): Instantiator
+    {
+        if (null === $this->instantiator) {
+            $this->instantiator = new Instantiator();
+        }
+
+        return $this->instantiator;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Context.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Context.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Context.php	(revision 8435)
@@ -0,0 +1,271 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use JMS\Serializer\Exception\LogicException;
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\Exclusion\DepthExclusionStrategy;
+use JMS\Serializer\Exclusion\DisjunctExclusionStrategy;
+use JMS\Serializer\Exclusion\ExclusionStrategyInterface;
+use JMS\Serializer\Exclusion\GroupsExclusionStrategy;
+use JMS\Serializer\Exclusion\VersionExclusionStrategy;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use Metadata\MetadataFactoryInterface;
+
+abstract class Context
+{
+    /**
+     * @var array
+     */
+    private $attributes = [];
+
+    /**
+     * @var string
+     */
+    private $format;
+
+    /**
+     * @var VisitorInterface
+     */
+    private $visitor;
+
+    /**
+     * @var GraphNavigatorInterface
+     */
+    private $navigator;
+
+    /**
+     * @var MetadataFactoryInterface
+     */
+    private $metadataFactory;
+
+    /** @var ExclusionStrategyInterface */
+    private $exclusionStrategy;
+
+    /**
+     * @var bool
+     */
+    private $initialized = false;
+
+    /** @var \SplStack */
+    private $metadataStack;
+
+    public function __construct()
+    {
+        $this->metadataStack = new \SplStack();
+    }
+
+    public function initialize(string $format, VisitorInterface $visitor, GraphNavigatorInterface $navigator, MetadataFactoryInterface $factory): void
+    {
+        if ($this->initialized) {
+            throw new LogicException('This context was already initialized, and cannot be re-used.');
+        }
+
+        $this->format = $format;
+        $this->visitor = $visitor;
+        $this->navigator = $navigator;
+        $this->metadataFactory = $factory;
+        $this->metadataStack = new \SplStack();
+
+        if (isset($this->attributes['groups'])) {
+            $this->addExclusionStrategy(new GroupsExclusionStrategy($this->attributes['groups']));
+        }
+
+        if (isset($this->attributes['version'])) {
+            $this->addExclusionStrategy(new VersionExclusionStrategy($this->attributes['version']));
+        }
+
+        if (!empty($this->attributes['max_depth_checks'])) {
+            $this->addExclusionStrategy(new DepthExclusionStrategy());
+        }
+
+        $this->initialized = true;
+    }
+
+    public function getMetadataFactory(): MetadataFactoryInterface
+    {
+        return $this->metadataFactory;
+    }
+
+    public function getVisitor(): VisitorInterface
+    {
+        return $this->visitor;
+    }
+
+    public function getNavigator(): GraphNavigatorInterface
+    {
+        return $this->navigator;
+    }
+
+    public function getExclusionStrategy(): ?ExclusionStrategyInterface
+    {
+        return $this->exclusionStrategy;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getAttribute(string $key)
+    {
+        return $this->attributes[$key];
+    }
+
+    public function hasAttribute(string $key): bool
+    {
+        return isset($this->attributes[$key]);
+    }
+
+    /**
+     * @param mixed $value
+     *
+     * @return $this
+     */
+    public function setAttribute(string $key, $value): self
+    {
+        $this->assertMutable();
+        $this->attributes[$key] = $value;
+
+        return $this;
+    }
+
+    final protected function assertMutable(): void
+    {
+        if (!$this->initialized) {
+            return;
+        }
+
+        throw new LogicException('This context was already initialized and is immutable; you cannot modify it anymore.');
+    }
+
+    /**
+     * @return $this
+     */
+    public function addExclusionStrategy(ExclusionStrategyInterface $strategy): self
+    {
+        $this->assertMutable();
+
+        if (null === $this->exclusionStrategy) {
+            $this->exclusionStrategy = $strategy;
+
+            return $this;
+        }
+
+        if ($this->exclusionStrategy instanceof DisjunctExclusionStrategy) {
+            $this->exclusionStrategy->addStrategy($strategy);
+
+            return $this;
+        }
+
+        $this->exclusionStrategy = new DisjunctExclusionStrategy([
+            $this->exclusionStrategy,
+            $strategy,
+        ]);
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function setVersion(string $version): self
+    {
+        $this->attributes['version'] = $version;
+
+        return $this;
+    }
+
+    /**
+     * @param array|string $groups
+     *
+     * @return $this
+     */
+    public function setGroups($groups): self
+    {
+        if (empty($groups)) {
+            throw new LogicException('The groups must not be empty.');
+        }
+
+        $this->attributes['groups'] = (array) $groups;
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function enableMaxDepthChecks(): self
+    {
+        $this->attributes['max_depth_checks'] = true;
+
+        return $this;
+    }
+
+    public function getFormat(): string
+    {
+        return $this->format;
+    }
+
+    public function pushClassMetadata(ClassMetadata $metadata): void
+    {
+        $this->metadataStack->push($metadata);
+    }
+
+    public function pushPropertyMetadata(PropertyMetadata $metadata): void
+    {
+        $this->metadataStack->push($metadata);
+    }
+
+    public function popPropertyMetadata(): void
+    {
+        $metadata = $this->metadataStack->pop();
+
+        if (!$metadata instanceof PropertyMetadata) {
+            throw new RuntimeException('Context metadataStack not working well');
+        }
+    }
+
+    public function popClassMetadata(): void
+    {
+        $metadata = $this->metadataStack->pop();
+
+        if (!$metadata instanceof ClassMetadata) {
+            throw new RuntimeException('Context metadataStack not working well');
+        }
+    }
+
+    public function getMetadataStack(): \SplStack
+    {
+        return $this->metadataStack;
+    }
+
+    /**
+     * @return array
+     */
+    public function getCurrentPath(): array
+    {
+        if (!$this->metadataStack) {
+            return [];
+        }
+
+        $paths = [];
+        foreach ($this->metadataStack as $metadata) {
+            if ($metadata instanceof PropertyMetadata) {
+                array_unshift($paths, $metadata->name);
+            }
+        }
+
+        return $paths;
+    }
+
+    abstract public function getDepth(): int;
+
+    abstract public function getDirection(): int;
+
+    public function close(): void
+    {
+        unset($this->visitor, $this->navigator);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/CallableContextFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/CallableContextFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/CallableContextFactory.php	(revision 8435)
@@ -0,0 +1,12 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\ContextFactory;
+
+/**
+ * @deprecated
+ */
+abstract class CallableContextFactory
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/CallableDeserializationContextFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/CallableDeserializationContextFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/CallableDeserializationContextFactory.php	(revision 8435)
@@ -0,0 +1,31 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\ContextFactory;
+
+use JMS\Serializer\DeserializationContext;
+
+final class CallableDeserializationContextFactory implements
+    DeserializationContextFactoryInterface
+{
+    /**
+     * @var callable():DeserializationContext
+     */
+    private $callable;
+
+    /**
+     * @param callable():DeserializationContext $callable
+     */
+    public function __construct(callable $callable)
+    {
+        $this->callable = $callable;
+    }
+
+    public function createDeserializationContext(): DeserializationContext
+    {
+        $callable = $this->callable;
+
+        return $callable();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/CallableSerializationContextFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/CallableSerializationContextFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/CallableSerializationContextFactory.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\ContextFactory;
+
+use JMS\Serializer\SerializationContext;
+
+/**
+ * Serialization Context Factory using a callable.
+ */
+final class CallableSerializationContextFactory implements SerializationContextFactoryInterface
+{
+    /**
+     * @var callable():SerializationContext
+     */
+    private $callable;
+
+    /**
+     * @param callable():SerializationContext $callable
+     */
+    public function __construct(callable $callable)
+    {
+        $this->callable = $callable;
+    }
+
+    public function createSerializationContext(): SerializationContext
+    {
+        $callable = $this->callable;
+
+        return $callable();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/DefaultDeserializationContextFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/DefaultDeserializationContextFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/DefaultDeserializationContextFactory.php	(revision 8435)
@@ -0,0 +1,18 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\ContextFactory;
+
+use JMS\Serializer\DeserializationContext;
+
+/**
+ * Default Deserialization Context Factory.
+ */
+final class DefaultDeserializationContextFactory implements DeserializationContextFactoryInterface
+{
+    public function createDeserializationContext(): DeserializationContext
+    {
+        return new DeserializationContext();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/DefaultSerializationContextFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/DefaultSerializationContextFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/DefaultSerializationContextFactory.php	(revision 8435)
@@ -0,0 +1,18 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\ContextFactory;
+
+use JMS\Serializer\SerializationContext;
+
+/**
+ * Default Serialization Context Factory.
+ */
+final class DefaultSerializationContextFactory implements SerializationContextFactoryInterface
+{
+    public function createSerializationContext(): SerializationContext
+    {
+        return new SerializationContext();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/DeserializationContextFactoryInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/DeserializationContextFactoryInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/DeserializationContextFactoryInterface.php	(revision 8435)
@@ -0,0 +1,15 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\ContextFactory;
+
+use JMS\Serializer\DeserializationContext;
+
+/**
+ * Deserialization Context Factory Interface.
+ */
+interface DeserializationContextFactoryInterface
+{
+    public function createDeserializationContext(): DeserializationContext;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/SerializationContextFactoryInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/SerializationContextFactoryInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/ContextFactory/SerializationContextFactoryInterface.php	(revision 8435)
@@ -0,0 +1,15 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\ContextFactory;
+
+use JMS\Serializer\SerializationContext;
+
+/**
+ * Serialization Context Factory Interface.
+ */
+interface SerializationContextFactoryInterface
+{
+    public function createSerializationContext(): SerializationContext;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/DeserializationContext.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/DeserializationContext.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/DeserializationContext.php	(revision 8435)
@@ -0,0 +1,44 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use JMS\Serializer\Exception\LogicException;
+
+class DeserializationContext extends Context
+{
+    /**
+     * @var int
+     */
+    private $depth = 0;
+
+    public static function create(): self
+    {
+        return new self();
+    }
+
+    public function getDirection(): int
+    {
+        return GraphNavigatorInterface::DIRECTION_DESERIALIZATION;
+    }
+
+    public function getDepth(): int
+    {
+        return $this->depth;
+    }
+
+    public function increaseDepth(): void
+    {
+        $this->depth += 1;
+    }
+
+    public function decreaseDepth(): void
+    {
+        if ($this->depth <= 0) {
+            throw new LogicException('Depth cannot be smaller than zero.');
+        }
+
+        $this->depth -= 1;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Event.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Event.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Event.php	(revision 8435)
@@ -0,0 +1,71 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\EventDispatcher;
+
+use JMS\Serializer\Context;
+use JMS\Serializer\VisitorInterface;
+
+class Event
+{
+    /**
+     * @var bool Whether no further event listeners should be triggered
+     */
+    private $propagationStopped = false;
+
+    /**
+     * @var array
+     */
+    protected $type;
+
+    /**
+     * @var Context
+     */
+    private $context;
+
+    public function __construct(Context $context, array $type)
+    {
+        $this->context = $context;
+        $this->type = $type;
+    }
+
+    public function getVisitor(): VisitorInterface
+    {
+        return $this->context->getVisitor();
+    }
+
+    public function getContext(): Context
+    {
+        return $this->context;
+    }
+
+    public function getType(): array
+    {
+        return $this->type;
+    }
+
+    /**
+     * Returns whether further event listeners should be triggered.
+     *
+     * @see Event::stopPropagation()
+     *
+     * @return bool Whether propagation was already stopped for this event
+     */
+    public function isPropagationStopped(): bool
+    {
+        return $this->propagationStopped;
+    }
+
+    /**
+     * Stops the propagation of the event to further event listeners.
+     *
+     * If multiple event listeners are connected to the same event, no
+     * further event listener will be triggered once any trigger calls
+     * stopPropagation().
+     */
+    public function stopPropagation(): void
+    {
+        $this->propagationStopped = true;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/EventDispatcher.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/EventDispatcher.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/EventDispatcher.php	(revision 8435)
@@ -0,0 +1,140 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\EventDispatcher;
+
+use JMS\Serializer\Exception\InvalidArgumentException;
+
+/**
+ * Light-weight event dispatcher.
+ *
+ * This implementation focuses primarily on performance, and dispatching
+ * events for certain classes. It is not a general purpose event dispatcher.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class EventDispatcher implements EventDispatcherInterface
+{
+    /**
+     * @var array
+     */
+    private $listeners = [];
+
+    /**
+     * ClassListeners cache
+     *
+     * @var array
+     */
+    private $classListeners = [];
+
+    public static function getDefaultMethodName(string $eventName): string
+    {
+        return 'on' . str_replace(['_', '.'], '', $eventName);
+    }
+
+    /**
+     * Sets the listeners.
+     *
+     * @param array $listeners
+     */
+    public function setListeners(array $listeners): void
+    {
+        $this->listeners = $listeners;
+        $this->classListeners = [];
+    }
+
+    /**
+     * @internal Used for profiling
+     */
+    public function getListeners(): array
+    {
+        return $this->listeners;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function addListener(string $eventName, $callable, ?string $class = null, ?string $format = null, ?string $interface = null): void
+    {
+        $this->listeners[$eventName][] = [$callable, $class, $format, $interface];
+        unset($this->classListeners[$eventName]);
+    }
+
+    public function addSubscriber(EventSubscriberInterface $subscriber): void
+    {
+        foreach ($subscriber->getSubscribedEvents() as $eventData) {
+            if (!isset($eventData['event'])) {
+                throw new InvalidArgumentException(sprintf('Each event must have a "event" key.'));
+            }
+
+            $method = $eventData['method'] ?? self::getDefaultMethodName($eventData['event']);
+            $class = $eventData['class'] ?? null;
+            $format = $eventData['format'] ?? null;
+            $interface = $eventData['interface'] ?? null;
+            $this->listeners[$eventData['event']][] = [[$subscriber, $method], $class, $format, $interface];
+            unset($this->classListeners[$eventData['event']]);
+        }
+    }
+
+    public function hasListeners(string $eventName, string $class, string $format): bool
+    {
+        if (!isset($this->listeners[$eventName])) {
+            return false;
+        }
+
+        if (!isset($this->classListeners[$eventName][$class][$format])) {
+            $this->classListeners[$eventName][$class][$format] = $this->initializeListeners($eventName, $class, $format);
+        }
+
+        return !!$this->classListeners[$eventName][$class][$format];
+    }
+
+    public function dispatch(string $eventName, string $class, string $format, Event $event): void
+    {
+        if (!isset($this->listeners[$eventName])) {
+            return;
+        }
+
+        $object = $event instanceof ObjectEvent ? $event->getObject() : null;
+        $realClass = is_object($object) ? get_class($object) : '';
+        $objectClass = $realClass !== $class ? $realClass . $class : $class;
+
+        if (!isset($this->classListeners[$eventName][$objectClass][$format])) {
+            $this->classListeners[$eventName][$objectClass][$format] = $this->initializeListeners($eventName, $class, $format);
+        }
+
+        foreach ($this->classListeners[$eventName][$objectClass][$format] as $listener) {
+            if (!empty($listener[3]) && !($object instanceof $listener[3])) {
+                continue;
+            }
+
+            \call_user_func($listener[0], $event, $eventName, $class, $format, $this);
+
+            if ($event->isPropagationStopped()) {
+                break;
+            }
+        }
+    }
+
+    /**
+     * @return array An array of listeners
+     */
+    protected function initializeListeners(string $eventName, string $loweredClass, string $format): array
+    {
+        $listeners = [];
+        foreach ($this->listeners[$eventName] as $listener) {
+            if (null !== $listener[1] && $loweredClass !== $listener[1]) {
+                continue;
+            }
+
+            if (null !== $listener[2] && $format !== $listener[2]) {
+                continue;
+            }
+
+            $listeners[] = $listener;
+        }
+
+        return $listeners;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/EventDispatcherInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/EventDispatcherInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/EventDispatcherInterface.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\EventDispatcher;
+
+interface EventDispatcherInterface
+{
+    /**
+     * Returns whether there are listeners.
+     */
+    public function hasListeners(string $eventName, string $class, string $format): bool;
+
+    /**
+     * Dispatches an event.
+     *
+     * The listeners/subscribers are called in the same order in which they
+     * were added to the dispatcher.
+     */
+    public function dispatch(string $eventName, string $class, string $format, Event $event): void;
+
+    /**
+     * Adds a listener.
+     *
+     * @param mixed $callable
+     */
+    public function addListener(string $eventName, $callable, ?string $class = null, ?string $format = null, ?string $interface = null): void;
+
+    /**
+     * Adds a subscribers.
+     */
+    public function addSubscriber(EventSubscriberInterface $subscriber): void;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/EventSubscriberInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/EventSubscriberInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/EventSubscriberInterface.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\EventDispatcher;
+
+interface EventSubscriberInterface
+{
+    /**
+     * Returns the events to which this class has subscribed.
+     *
+     * Return format:
+     *     array(
+     *         array('event' => 'the-event-name', 'method' => 'onEventName', 'class' => 'some-class', 'format' => 'json'),
+     *         array(...),
+     *     )
+     *
+     * The class may be omitted if the class wants to subscribe to events of all classes.
+     * Same goes for the format key.
+     *
+     * @return array
+     *
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint
+     */
+    public static function getSubscribedEvents();
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Events.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Events.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Events.php	(revision 8435)
@@ -0,0 +1,17 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\EventDispatcher;
+
+abstract class Events
+{
+    public const PRE_SERIALIZE = 'serializer.pre_serialize';
+    public const POST_SERIALIZE = 'serializer.post_serialize';
+    public const PRE_DESERIALIZE = 'serializer.pre_deserialize';
+    public const POST_DESERIALIZE = 'serializer.post_deserialize';
+
+    final private function __construct()
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/LazyEventDispatcher.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/LazyEventDispatcher.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/LazyEventDispatcher.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\EventDispatcher;
+
+use JMS\Serializer\Exception\InvalidArgumentException;
+use Psr\Container\ContainerInterface as PsrContainerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+class LazyEventDispatcher extends EventDispatcher
+{
+    /**
+     * @var PsrContainerInterface|ContainerInterface
+     */
+    private $container;
+
+    /**
+     * @param PsrContainerInterface|ContainerInterface $container
+     */
+    public function __construct($container)
+    {
+        if (!$container instanceof PsrContainerInterface && !$container instanceof ContainerInterface) {
+            throw new InvalidArgumentException(sprintf('The container must be an instance of %s or %s (%s given).', PsrContainerInterface::class, ContainerInterface::class, \is_object($container) ? \get_class($container) : \gettype($container)));
+        }
+
+        $this->container = $container;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function initializeListeners(string $eventName, string $loweredClass, string $format): array
+    {
+        $listeners = parent::initializeListeners($eventName, $loweredClass, $format);
+
+        foreach ($listeners as &$listener) {
+            if (!\is_array($listener[0]) || !\is_string($listener[0][0])) {
+                continue;
+            }
+
+            if (!$this->container->has($listener[0][0])) {
+                continue;
+            }
+
+            $listener[0][0] = $this->container->get($listener[0][0]);
+        }
+
+        return $listeners;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/ObjectEvent.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/ObjectEvent.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/ObjectEvent.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\EventDispatcher;
+
+use JMS\Serializer\Context;
+
+class ObjectEvent extends Event
+{
+    /**
+     * @var mixed
+     */
+    private $object;
+
+    /**
+     * @param mixed $object
+     */
+    public function __construct(Context $context, $object, array $type)
+    {
+        parent::__construct($context, $type);
+
+        $this->object = $object;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getObject()
+    {
+        return $this->object;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/PreDeserializeEvent.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/PreDeserializeEvent.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/PreDeserializeEvent.php	(revision 8435)
@@ -0,0 +1,47 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\EventDispatcher;
+
+use JMS\Serializer\DeserializationContext;
+
+class PreDeserializeEvent extends Event
+{
+    /**
+     * @var mixed
+     */
+    private $data;
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     */
+    public function __construct(DeserializationContext $context, $data, array $type)
+    {
+        parent::__construct($context, $type);
+
+        $this->data = $data;
+    }
+
+    public function setType(string $name, array $params = []): void
+    {
+        $this->type = ['name' => $name, 'params' => $params];
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getData()
+    {
+        return $this->data;
+    }
+
+    /**
+     * @param mixed $data
+     */
+    public function setData($data): void
+    {
+        $this->data = $data;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/PreSerializeEvent.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/PreSerializeEvent.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/PreSerializeEvent.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\EventDispatcher;
+
+class PreSerializeEvent extends ObjectEvent
+{
+    /**
+     * @param array $params
+     */
+    public function setType(string $typeName, array $params = []): void
+    {
+        $this->type = ['name' => $typeName, 'params' => $params];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Subscriber/DoctrineProxySubscriber.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Subscriber/DoctrineProxySubscriber.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Subscriber/DoctrineProxySubscriber.php	(revision 8435)
@@ -0,0 +1,126 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\EventDispatcher\Subscriber;
+
+use Doctrine\Common\Persistence\Proxy as LegacyProxy;
+use Doctrine\ODM\MongoDB\PersistentCollection as MongoDBPersistentCollection;
+use Doctrine\ODM\PHPCR\PersistentCollection as PHPCRPersistentCollection;
+use Doctrine\ORM\PersistentCollection;
+use Doctrine\Persistence\Proxy;
+use JMS\Serializer\EventDispatcher\EventDispatcherInterface;
+use JMS\Serializer\EventDispatcher\EventSubscriberInterface;
+use JMS\Serializer\EventDispatcher\PreSerializeEvent;
+use ProxyManager\Proxy\LazyLoadingInterface;
+
+final class DoctrineProxySubscriber implements EventSubscriberInterface
+{
+    /**
+     * @var bool
+     */
+    private $skipVirtualTypeInit;
+
+    /**
+     * @var bool
+     */
+    private $initializeExcluded;
+
+    public function __construct(bool $skipVirtualTypeInit = true, bool $initializeExcluded = false)
+    {
+        $this->skipVirtualTypeInit = $skipVirtualTypeInit;
+        $this->initializeExcluded = $initializeExcluded;
+    }
+
+    public function onPreSerialize(PreSerializeEvent $event): void
+    {
+        $object = $event->getObject();
+        $type = $event->getType();
+
+        // If the set type name is not an actual class, but a faked type for which a custom handler exists, we do not
+        // modify it with this subscriber. Also, we forgo autoloading here as an instance of this type is already created,
+        // so it must be loaded if its a real class.
+        $virtualType = !class_exists($type['name'], false);
+
+        if (
+            $object instanceof PersistentCollection
+            || $object instanceof MongoDBPersistentCollection
+            || $object instanceof PHPCRPersistentCollection
+        ) {
+            if (!$virtualType) {
+                $event->setType('ArrayCollection');
+            }
+
+            return;
+        }
+
+        if (
+            ($this->skipVirtualTypeInit && $virtualType) ||
+            (!$object instanceof Proxy && !$object instanceof LazyLoadingInterface)
+        ) {
+            return;
+        }
+
+        // do not initialize the proxy if is going to be excluded by-class by some exclusion strategy
+        if (false === $this->initializeExcluded && !$virtualType) {
+            $context = $event->getContext();
+            $exclusionStrategy = $context->getExclusionStrategy();
+            $metadata = $context->getMetadataFactory()->getMetadataForClass(get_parent_class($object));
+            if (null !== $metadata && null !== $exclusionStrategy && $exclusionStrategy->shouldSkipClass($metadata, $context)) {
+                return;
+            }
+        }
+
+        if ($object instanceof LazyLoadingInterface) {
+            $object->initializeProxy();
+        } else {
+            $object->__load();
+        }
+
+        if (!$virtualType) {
+            $event->setType(get_parent_class($object), $type['params']);
+        }
+    }
+
+    public function onPreSerializeTypedProxy(PreSerializeEvent $event, string $eventName, string $class, string $format, EventDispatcherInterface $dispatcher): void
+    {
+        $type = $event->getType();
+        // is a virtual type? then there is no need to change the event name
+        if (!class_exists($type['name'], false)) {
+            return;
+        }
+
+        $object = $event->getObject();
+        if ($object instanceof Proxy) {
+            $parentClassName = get_parent_class($object);
+
+            // check if this is already a re-dispatch
+            if (strtolower($class) !== strtolower($parentClassName)) {
+                $event->stopPropagation();
+                $newEvent = new PreSerializeEvent($event->getContext(), $object, ['name' => $parentClassName, 'params' => $type['params']]);
+                $dispatcher->dispatch($eventName, $parentClassName, $format, $newEvent);
+
+                // update the type in case some listener changed it
+                $newType = $newEvent->getType();
+                $event->setType($newType['name'], $newType['params']);
+            }
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public static function getSubscribedEvents()
+    {
+        return [
+            ['event' => 'serializer.pre_serialize', 'method' => 'onPreSerializeTypedProxy', 'interface' => Proxy::class],
+            ['event' => 'serializer.pre_serialize', 'method' => 'onPreSerializeTypedProxy', 'interface' => LegacyProxy::class],
+            ['event' => 'serializer.pre_serialize', 'method' => 'onPreSerialize', 'interface' => PersistentCollection::class],
+            ['event' => 'serializer.pre_serialize', 'method' => 'onPreSerialize', 'interface' => MongoDBPersistentCollection::class],
+            ['event' => 'serializer.pre_serialize', 'method' => 'onPreSerialize', 'interface' => PHPCRPersistentCollection::class],
+            ['event' => 'serializer.pre_serialize', 'method' => 'onPreSerialize', 'interface' => Proxy::class],
+            ['event' => 'serializer.pre_serialize', 'method' => 'onPreSerialize', 'interface' => LegacyProxy::class],
+            ['event' => 'serializer.pre_serialize', 'method' => 'onPreSerialize', 'interface' => LazyLoadingInterface::class],
+        ];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Subscriber/EnumSubscriber.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Subscriber/EnumSubscriber.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Subscriber/EnumSubscriber.php	(revision 8435)
@@ -0,0 +1,34 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\EventDispatcher\Subscriber;
+
+use JMS\Serializer\EventDispatcher\EventSubscriberInterface;
+use JMS\Serializer\EventDispatcher\PreSerializeEvent;
+
+final class EnumSubscriber implements EventSubscriberInterface
+{
+    public function onPreSerializeEnum(PreSerializeEvent $event): void
+    {
+        $type = $event->getType();
+
+        if (isset($type['name']) && ('enum' === $type['name'] || !is_a($type['name'], \UnitEnum::class, true))) {
+            return;
+        }
+
+        $object = $event->getObject();
+        $params = [get_class($object), $object instanceof \BackedEnum ? 'value' : 'name'];
+        $event->setType('enum', $params);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public static function getSubscribedEvents()
+    {
+        return [
+            ['event' => 'serializer.pre_serialize', 'method' => 'onPreSerializeEnum', 'interface' => \UnitEnum::class],
+        ];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriber.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriber.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriber.php	(revision 8435)
@@ -0,0 +1,57 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\EventDispatcher\Subscriber;
+
+use JMS\Serializer\EventDispatcher\EventSubscriberInterface;
+use JMS\Serializer\EventDispatcher\ObjectEvent;
+use JMS\Serializer\Exception\ValidationFailedException;
+use Symfony\Component\Validator\Validator\ValidatorInterface;
+
+final class SymfonyValidatorValidatorSubscriber implements EventSubscriberInterface
+{
+    /**
+     * @var ValidatorInterface
+     */
+    private $validator;
+
+    public function __construct(ValidatorInterface $validator)
+    {
+        $this->validator = $validator;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public static function getSubscribedEvents()
+    {
+        return [
+            ['event' => 'serializer.post_deserialize', 'method' => 'onPostDeserialize'],
+        ];
+    }
+
+    public function onPostDeserialize(ObjectEvent $event): void
+    {
+        $context = $event->getContext();
+
+        if ($context->getDepth() > 0) {
+            return;
+        }
+
+        $validator = $this->validator;
+        $groups = $context->hasAttribute('validation_groups') ? $context->getAttribute('validation_groups') : null;
+
+        if (!$groups) {
+            return;
+        }
+
+        $constraints = $context->hasAttribute('validation_constraints') ? $context->getAttribute('validation_constraints') : null;
+
+        $list = $validator->validate($event->getObject(), $constraints, $groups);
+
+        if ($list->count() > 0) {
+            throw new ValidationFailedException($list);
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/CircularReferenceDetectedException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/CircularReferenceDetectedException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/CircularReferenceDetectedException.php	(revision 8435)
@@ -0,0 +1,12 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+class CircularReferenceDetectedException extends NotAcceptableException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/Exception.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/Exception.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/Exception.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+/**
+ * Base exception for the Serializer.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+interface Exception extends \Throwable
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/ExcludedClassException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/ExcludedClassException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/ExcludedClassException.php	(revision 8435)
@@ -0,0 +1,12 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+class ExcludedClassException extends NotAcceptableException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/ExpressionLanguageRequiredException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/ExpressionLanguageRequiredException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/ExpressionLanguageRequiredException.php	(revision 8435)
@@ -0,0 +1,12 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+class ExpressionLanguageRequiredException extends LogicException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/InvalidArgumentException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/InvalidArgumentException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/InvalidArgumentException.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+/**
+ * InvalidArgumentException for the Serializer.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class InvalidArgumentException extends \InvalidArgumentException implements Exception
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/InvalidMetadataException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/InvalidMetadataException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/InvalidMetadataException.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+/**
+ * InvalidArgumentException for the Serializer.
+ *
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+class InvalidMetadataException extends \Exception implements Exception
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/LogicException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/LogicException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/LogicException.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+/**
+ * LogicException for the Serializer.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class LogicException extends \LogicException implements Exception
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonCastableTypeException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonCastableTypeException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonCastableTypeException.php	(revision 8435)
@@ -0,0 +1,37 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+abstract class NonCastableTypeException extends RuntimeException
+{
+    /**
+     * @var mixed
+     */
+    private $value;
+
+    /**
+     * @param mixed $value
+     */
+    public function __construct(string $expectedType, $value)
+    {
+        $this->value = $value;
+
+        parent::__construct(
+            sprintf(
+                'Cannot convert value of type "%s" to %s',
+                gettype($value),
+                $expectedType,
+            ),
+        );
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getValue()
+    {
+        return $this->value;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonFloatCastableTypeException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonFloatCastableTypeException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonFloatCastableTypeException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+final class NonFloatCastableTypeException extends NonCastableTypeException
+{
+    /**
+     * @param mixed $value
+     */
+    public function __construct($value)
+    {
+        parent::__construct('float', $value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonIntCastableTypeException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonIntCastableTypeException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonIntCastableTypeException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+final class NonIntCastableTypeException extends NonCastableTypeException
+{
+    /**
+     * @param mixed $value
+     */
+    public function __construct($value)
+    {
+        parent::__construct('int', $value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonStringCastableTypeException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonStringCastableTypeException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonStringCastableTypeException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+final class NonStringCastableTypeException extends NonCastableTypeException
+{
+    /**
+     * @param mixed $value
+     */
+    public function __construct($value)
+    {
+        parent::__construct('string', $value);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonVisitableTypeException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonVisitableTypeException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NonVisitableTypeException.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+use function get_debug_type;
+
+final class NonVisitableTypeException extends RuntimeException
+{
+    /**
+     * @param mixed $data
+     * @param array{name: string} $type
+     * @param RuntimeException|null $previous
+     *
+     * @return NonVisitableTypeException
+     */
+    public static function fromDataAndType($data, array $type, ?RuntimeException $previous = null): self
+    {
+        return new self(
+            sprintf('Type %s cannot be visited as %s', get_debug_type($data), $type['name']),
+            0,
+            $previous,
+        );
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NotAcceptableException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NotAcceptableException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/NotAcceptableException.php	(revision 8435)
@@ -0,0 +1,12 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+class NotAcceptableException extends LogicException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/ObjectConstructionException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/ObjectConstructionException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/ObjectConstructionException.php	(revision 8435)
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+/**
+ * InvalidArgumentException for the Serializer.
+ *
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+class ObjectConstructionException extends RuntimeException implements Exception
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/RuntimeException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/RuntimeException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/RuntimeException.php	(revision 8435)
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+/**
+ * RuntimeException for the Serializer.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class RuntimeException extends \RuntimeException implements Exception
+{
+    public static function noMetadataForProperty(string $class, string $prop): self
+    {
+        return new RuntimeException(sprintf(
+            'You must define a type for %s::$%s.',
+            $class,
+            $prop,
+        ));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/SkipHandlerException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/SkipHandlerException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/SkipHandlerException.php	(revision 8435)
@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+/**
+ * Throw this exception from you custom (de)serialization handler
+ * in order to fallback to the default (de)serialization behavior.
+ */
+class SkipHandlerException extends RuntimeException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/UninitializedPropertyException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/UninitializedPropertyException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/UninitializedPropertyException.php	(revision 8435)
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+class UninitializedPropertyException extends RuntimeException implements Exception
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/UnsupportedFormatException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/UnsupportedFormatException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/UnsupportedFormatException.php	(revision 8435)
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+class UnsupportedFormatException extends InvalidArgumentException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/ValidationFailedException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/ValidationFailedException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/ValidationFailedException.php	(revision 8435)
@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+use Symfony\Component\Validator\ConstraintViolationListInterface;
+
+class ValidationFailedException extends RuntimeException
+{
+    /**
+     * @var ConstraintViolationListInterface
+     */
+    private $list;
+
+    public function __construct(ConstraintViolationListInterface $list)
+    {
+        parent::__construct(sprintf('Validation failed with %d error(s).', \count($list)));
+
+        $this->list = $list;
+    }
+
+    public function getConstraintViolationList(): ConstraintViolationListInterface
+    {
+        return $this->list;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/XmlErrorException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/XmlErrorException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exception/XmlErrorException.php	(revision 8435)
@@ -0,0 +1,42 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exception;
+
+class XmlErrorException extends RuntimeException
+{
+    /**
+     * @var \LibXMLError
+     */
+    private $xmlError;
+
+    public function __construct(\LibXMLError $error)
+    {
+        switch ($error->level) {
+            case LIBXML_ERR_WARNING:
+                $level = 'WARNING';
+                break;
+
+            case LIBXML_ERR_FATAL:
+                $level = 'FATAL';
+                break;
+
+            case LIBXML_ERR_ERROR:
+                $level = 'ERROR';
+                break;
+
+            default:
+                $level = 'UNKNOWN';
+        }
+
+        parent::__construct(sprintf('[%s] %s in %s (line: %d, column: %d)', $level, $error->message, $error->file, $error->line, $error->column));
+
+        $this->xmlError = $error;
+    }
+
+    public function getXmlError(): \LibXMLError
+    {
+        return $this->xmlError;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/DepthExclusionStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/DepthExclusionStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/DepthExclusionStrategy.php	(revision 8435)
@@ -0,0 +1,48 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exclusion;
+
+use JMS\Serializer\Context;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+
+/**
+ * @author Adrien Brault <adrien.brault@gmail.com>
+ */
+final class DepthExclusionStrategy implements ExclusionStrategyInterface
+{
+    public function shouldSkipClass(ClassMetadata $metadata, Context $context): bool
+    {
+        return $this->isTooDeep($context);
+    }
+
+    public function shouldSkipProperty(PropertyMetadata $property, Context $context): bool
+    {
+        return $this->isTooDeep($context);
+    }
+
+    private function isTooDeep(Context $context): bool
+    {
+        $relativeDepth = 0;
+
+        foreach ($context->getMetadataStack() as $metadata) {
+            if (!$metadata instanceof PropertyMetadata) {
+                continue;
+            }
+
+            $relativeDepth++;
+
+            if (0 === $metadata->maxDepth && $context->getMetadataStack()->top() === $metadata) {
+                continue;
+            }
+
+            if (null !== $metadata->maxDepth && $relativeDepth > $metadata->maxDepth) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/DisjunctExclusionStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/DisjunctExclusionStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/DisjunctExclusionStrategy.php	(revision 8435)
@@ -0,0 +1,67 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exclusion;
+
+use JMS\Serializer\Context;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+
+/**
+ * Disjunct Exclusion Strategy.
+ *
+ * This strategy is short-circuiting and will skip a class, or property as soon as one of the delegates skips it.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+final class DisjunctExclusionStrategy implements ExclusionStrategyInterface
+{
+    /**
+     * @var ExclusionStrategyInterface[]
+     */
+    private $delegates;
+
+    /**
+     * @param ExclusionStrategyInterface[] $delegates
+     */
+    public function __construct(array $delegates = [])
+    {
+        $this->delegates = $delegates;
+    }
+
+    public function addStrategy(ExclusionStrategyInterface $strategy): void
+    {
+        $this->delegates[] = $strategy;
+    }
+
+    /**
+     * Whether the class should be skipped.
+     */
+    public function shouldSkipClass(ClassMetadata $metadata, Context $context): bool
+    {
+        foreach ($this->delegates as $delegate) {
+            \assert($delegate instanceof ExclusionStrategyInterface);
+            if ($delegate->shouldSkipClass($metadata, $context)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Whether the property should be skipped.
+     */
+    public function shouldSkipProperty(PropertyMetadata $property, Context $context): bool
+    {
+        foreach ($this->delegates as $delegate) {
+            \assert($delegate instanceof ExclusionStrategyInterface);
+            if ($delegate->shouldSkipProperty($property, $context)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/ExclusionStrategyInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/ExclusionStrategyInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/ExclusionStrategyInterface.php	(revision 8435)
@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exclusion;
+
+use JMS\Serializer\Context;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+
+/**
+ * Interface for exclusion strategies.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+interface ExclusionStrategyInterface
+{
+    /**
+     * Whether the class should be skipped.
+     */
+    public function shouldSkipClass(ClassMetadata $metadata, Context $context): bool;
+
+    /**
+     * Whether the property should be skipped.
+     */
+    public function shouldSkipProperty(PropertyMetadata $property, Context $context): bool;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/ExpressionLanguageExclusionStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/ExpressionLanguageExclusionStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/ExpressionLanguageExclusionStrategy.php	(revision 8435)
@@ -0,0 +1,80 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exclusion;
+
+use JMS\Serializer\Context;
+use JMS\Serializer\Expression\CompilableExpressionEvaluatorInterface;
+use JMS\Serializer\Expression\Expression;
+use JMS\Serializer\Expression\ExpressionEvaluatorInterface;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\SerializationContext;
+
+/**
+ * Exposes an exclusion strategy based on the Symfony's expression language.
+ * This is not a standard exclusion strategy and can not be used in user applications.
+ *
+ * @internal
+ *
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+final class ExpressionLanguageExclusionStrategy
+{
+    /**
+     * @var ExpressionEvaluatorInterface
+     */
+    private $expressionEvaluator;
+
+    public function __construct(ExpressionEvaluatorInterface $expressionEvaluator)
+    {
+        $this->expressionEvaluator = $expressionEvaluator;
+    }
+
+    public function shouldSkipClass(ClassMetadata $class, Context $navigatorContext): bool
+    {
+        if (null === $class->excludeIf) {
+            return false;
+        }
+
+        $variables = [
+            'context' => $navigatorContext,
+            'class_metadata' => $class,
+        ];
+        if ($navigatorContext instanceof SerializationContext) {
+            $variables['object'] = $navigatorContext->getObject();
+        } else {
+            $variables['object'] = null;
+        }
+
+        if (($class->excludeIf instanceof Expression) && ($this->expressionEvaluator instanceof CompilableExpressionEvaluatorInterface)) {
+            return $this->expressionEvaluator->evaluateParsed($class->excludeIf, $variables);
+        }
+
+        return $this->expressionEvaluator->evaluate($class->excludeIf, $variables);
+    }
+
+    public function shouldSkipProperty(PropertyMetadata $property, Context $navigatorContext): bool
+    {
+        if (null === $property->excludeIf) {
+            return false;
+        }
+
+        $variables = [
+            'context' => $navigatorContext,
+            'property_metadata' => $property,
+        ];
+        if ($navigatorContext instanceof SerializationContext) {
+            $variables['object'] = $navigatorContext->getObject();
+        } else {
+            $variables['object'] = null;
+        }
+
+        if (($property->excludeIf instanceof Expression) && ($this->expressionEvaluator instanceof CompilableExpressionEvaluatorInterface)) {
+            return $this->expressionEvaluator->evaluateParsed($property->excludeIf, $variables);
+        }
+
+        return $this->expressionEvaluator->evaluate($property->excludeIf, $variables);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/GroupsExclusionStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/GroupsExclusionStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/GroupsExclusionStrategy.php	(revision 8435)
@@ -0,0 +1,115 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exclusion;
+
+use JMS\Serializer\Context;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+
+final class GroupsExclusionStrategy implements ExclusionStrategyInterface
+{
+    public const DEFAULT_GROUP = 'Default';
+
+    /**
+     * @var array
+     */
+    private $groups = [];
+
+    /**
+     * @var bool
+     */
+    private $nestedGroups = false;
+
+    public function __construct(array $groups)
+    {
+        if (empty($groups)) {
+            $groups = [self::DEFAULT_GROUP];
+        }
+
+        foreach ($groups as $group) {
+            if (is_array($group)) {
+                $this->nestedGroups = true;
+                break;
+            }
+        }
+
+        if ($this->nestedGroups) {
+            $this->groups = $groups;
+        } else {
+            foreach ($groups as $group) {
+                $this->groups[$group] = true;
+            }
+        }
+    }
+
+    public function shouldSkipClass(ClassMetadata $metadata, Context $navigatorContext): bool
+    {
+        return false;
+    }
+
+    public function shouldSkipProperty(PropertyMetadata $property, Context $navigatorContext): bool
+    {
+        if ($this->nestedGroups) {
+            $groups = $this->getGroupsFor($navigatorContext);
+
+            if (!$property->groups) {
+                return !in_array(self::DEFAULT_GROUP, $groups);
+            }
+
+            return $this->shouldSkipUsingGroups($property, $groups);
+        } else {
+            if (!$property->groups) {
+                return !isset($this->groups[self::DEFAULT_GROUP]);
+            }
+
+            foreach ($property->groups as $group) {
+                if (is_scalar($group) && isset($this->groups[$group])) {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+    }
+
+    private function shouldSkipUsingGroups(PropertyMetadata $property, array $groups): bool
+    {
+        foreach ($property->groups as $group) {
+            if (in_array($group, $groups)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    public function getGroupsFor(Context $navigatorContext): array
+    {
+        if (!$this->nestedGroups) {
+            return array_keys($this->groups);
+        }
+
+        $paths = $navigatorContext->getCurrentPath();
+        $groups = $this->groups;
+        foreach ($paths as $index => $path) {
+            if (!array_key_exists($path, $groups)) {
+                if ($index > 0) {
+                    $groups = [self::DEFAULT_GROUP];
+                } else {
+                    $groups = array_filter($groups, 'is_string') ?: [self::DEFAULT_GROUP];
+                }
+
+                break;
+            }
+
+            $groups = $groups[$path];
+            if (!array_filter($groups, 'is_string')) {
+                $groups += [self::DEFAULT_GROUP];
+            }
+        }
+
+        return $groups;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/VersionExclusionStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/VersionExclusionStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Exclusion/VersionExclusionStrategy.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Exclusion;
+
+use JMS\Serializer\Context;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+
+final class VersionExclusionStrategy implements ExclusionStrategyInterface
+{
+    /**
+     * @var string
+     */
+    private $version;
+
+    public function __construct(string $version)
+    {
+        $this->version = $version;
+    }
+
+    public function shouldSkipClass(ClassMetadata $metadata, Context $navigatorContext): bool
+    {
+        return false;
+    }
+
+    public function shouldSkipProperty(PropertyMetadata $property, Context $navigatorContext): bool
+    {
+        if ((null !== $version = $property->sinceVersion) && version_compare($this->version, $version, '<')) {
+            return true;
+        }
+
+        return (null !== $version = $property->untilVersion) && version_compare($this->version, $version, '>');
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Expression/CompilableExpressionEvaluatorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Expression/CompilableExpressionEvaluatorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Expression/CompilableExpressionEvaluatorInterface.php	(revision 8435)
@@ -0,0 +1,18 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Expression;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+interface CompilableExpressionEvaluatorInterface
+{
+    public function parse(string $expression, array $names = []): Expression;
+
+    /**
+     * @return mixed
+     */
+    public function evaluateParsed(Expression $expression, array $data = []);
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Expression/Expression.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Expression/Expression.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Expression/Expression.php	(revision 8435)
@@ -0,0 +1,77 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Expression;
+
+use Symfony\Component\ExpressionLanguage\ParsedExpression as BaseExpression;
+use Symfony\Component\ExpressionLanguage\SerializedParsedExpression;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+class Expression implements \Serializable
+{
+    /**
+     * @var BaseExpression
+     */
+    private $expression;
+
+    public function __construct(BaseExpression $expression)
+    {
+        $this->expression = $expression;
+    }
+
+    public function getExpression(): BaseExpression
+    {
+        return $this->expression;
+    }
+
+    /**
+     * @return string
+     *
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.UselessReturnAnnotation
+     */
+    public function __toString()
+    {
+        return (string) $this->expression;
+    }
+
+    /**
+     * @return string
+     *
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingParameterTypeHint
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.UselessReturnAnnotation
+     */
+    public function serialize()
+    {
+        return serialize([(string) $this->expression, serialize($this->expression->getNodes())]);
+    }
+
+    /**
+     * @param string $str
+     *
+     * @return void
+     *
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingParameterTypeHint
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.UselessReturnAnnotation
+     */
+    public function unserialize($str): void
+    {
+        $this->expression = new SerializedParsedExpression(...unserialize($str));
+    }
+
+    public function __serialize(): array
+    {
+        return [(string) $this->expression, $this->expression->getNodes()];
+    }
+
+    public function __unserialize(array $data): void
+    {
+        [$expression, $nodes] = $data;
+        $this->expression = new BaseExpression($expression, $nodes);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Expression/ExpressionEvaluator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Expression/ExpressionEvaluator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Expression/ExpressionEvaluator.php	(revision 8435)
@@ -0,0 +1,58 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Expression;
+
+use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+class ExpressionEvaluator implements CompilableExpressionEvaluatorInterface, ExpressionEvaluatorInterface
+{
+    /**
+     * @var ExpressionLanguage
+     */
+    private $expressionLanguage;
+
+    /**
+     * @var array
+     */
+    private $context;
+
+    public function __construct(ExpressionLanguage $expressionLanguage, array $context = [])
+    {
+        $this->expressionLanguage = $expressionLanguage;
+        $this->context = $context;
+    }
+
+    /**
+     * @param mixed $value
+     */
+    public function setContextVariable(string $name, $value): void
+    {
+        $this->context[$name] = $value;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function evaluate(string $expression, array $data = [])
+    {
+        return $this->expressionLanguage->evaluate($expression, $data + $this->context);
+    }
+
+    /**
+     * @return mixed
+     */
+    public function evaluateParsed(Expression $expression, array $data = [])
+    {
+        return $this->expressionLanguage->evaluate($expression->getExpression(), $data + $this->context);
+    }
+
+    public function parse(string $expression, array $names = []): Expression
+    {
+        return new Expression($this->expressionLanguage->parse($expression, array_merge(array_keys($this->context), $names)));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Expression/ExpressionEvaluatorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Expression/ExpressionEvaluatorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Expression/ExpressionEvaluatorInterface.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Expression;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+interface ExpressionEvaluatorInterface
+{
+    /**
+     * @return mixed
+     */
+    public function evaluate(string $expression, array $data = []);
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Functions.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Functions.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Functions.php	(revision 8435)
@@ -0,0 +1,20 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use function iterator_to_array;
+
+final class Functions
+{
+    /**
+     * Copy the iterable into an array. If the iterable is already an array, return it.
+     *
+     * @return mixed[]
+     */
+    public static function iterableToArray(iterable $iterable): array
+    {
+        return is_array($iterable) ? $iterable : iterator_to_array($iterable);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator.php	(revision 8435)
@@ -0,0 +1,48 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use JMS\Serializer\Exclusion\ExclusionStrategyInterface;
+
+/**
+ * Handles traversal along the object graph.
+ *
+ * This class handles traversal along the graph, and calls different methods
+ * on visitors, or custom handlers to process its nodes.
+ *
+ * @internal
+ *
+ * @author Asmir Mustafic <goetas@gmail.com>
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+abstract class GraphNavigator implements GraphNavigatorInterface
+{
+    /**
+     * @var VisitorInterface
+     */
+    protected $visitor;
+    /**
+     * @var Context
+     */
+    protected $context;
+    /***
+     * @var string
+     */
+    protected $format;
+    /**
+     * @var ExclusionStrategyInterface
+     */
+    protected $exclusionStrategy;
+
+    public function initialize(VisitorInterface $visitor, Context $context): void
+    {
+        $this->visitor = $visitor;
+        $this->context = $context;
+
+        // cache value
+        $this->format = $context->getFormat();
+        $this->exclusionStrategy = $context->getExclusionStrategy();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/DeserializationGraphNavigator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/DeserializationGraphNavigator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/DeserializationGraphNavigator.php	(revision 8435)
@@ -0,0 +1,266 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\GraphNavigator;
+
+use JMS\Serializer\Accessor\AccessorStrategyInterface;
+use JMS\Serializer\Construction\ObjectConstructorInterface;
+use JMS\Serializer\DeserializationContext;
+use JMS\Serializer\EventDispatcher\EventDispatcher;
+use JMS\Serializer\EventDispatcher\EventDispatcherInterface;
+use JMS\Serializer\EventDispatcher\ObjectEvent;
+use JMS\Serializer\EventDispatcher\PreDeserializeEvent;
+use JMS\Serializer\Exception\ExpressionLanguageRequiredException;
+use JMS\Serializer\Exception\LogicException;
+use JMS\Serializer\Exception\NotAcceptableException;
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\Exception\SkipHandlerException;
+use JMS\Serializer\Exclusion\ExpressionLanguageExclusionStrategy;
+use JMS\Serializer\Expression\ExpressionEvaluatorInterface;
+use JMS\Serializer\GraphNavigator;
+use JMS\Serializer\GraphNavigatorInterface;
+use JMS\Serializer\Handler\HandlerRegistryInterface;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\NullAwareVisitorInterface;
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+use Metadata\MetadataFactoryInterface;
+
+/**
+ * Handles traversal along the object graph.
+ *
+ * This class handles traversal along the graph, and calls different methods
+ * on visitors, or custom handlers to process its nodes.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+final class DeserializationGraphNavigator extends GraphNavigator implements GraphNavigatorInterface
+{
+    /**
+     * @var DeserializationVisitorInterface
+     */
+    protected $visitor;
+
+    /**
+     * @var DeserializationContext
+     */
+    protected $context;
+
+    /**
+     * @var ExpressionLanguageExclusionStrategy
+     */
+    private $expressionExclusionStrategy;
+
+    /**
+     * @var EventDispatcherInterface
+     */
+    private $dispatcher;
+
+    /**
+     * @var MetadataFactoryInterface
+     */
+    private $metadataFactory;
+
+    /**
+     * @var HandlerRegistryInterface
+     */
+    private $handlerRegistry;
+
+    /**
+     * @var ObjectConstructorInterface
+     */
+    private $objectConstructor;
+    /**
+     * @var AccessorStrategyInterface
+     */
+    private $accessor;
+
+    public function __construct(
+        MetadataFactoryInterface $metadataFactory,
+        HandlerRegistryInterface $handlerRegistry,
+        ObjectConstructorInterface $objectConstructor,
+        AccessorStrategyInterface $accessor,
+        ?EventDispatcherInterface $dispatcher = null,
+        ?ExpressionEvaluatorInterface $expressionEvaluator = null
+    ) {
+        $this->dispatcher = $dispatcher ?: new EventDispatcher();
+        $this->metadataFactory = $metadataFactory;
+        $this->handlerRegistry = $handlerRegistry;
+        $this->objectConstructor = $objectConstructor;
+        $this->accessor = $accessor;
+        if ($expressionEvaluator) {
+            $this->expressionExclusionStrategy = new ExpressionLanguageExclusionStrategy($expressionEvaluator);
+        }
+    }
+
+    /**
+     * Called for each node of the graph that is being traversed.
+     *
+     * @param mixed $data the data depends on the direction, and type of visitor
+     * @param array|null $type array has the format ["name" => string, "params" => array]
+     *
+     * @return mixed the return value depends on the direction, and type of visitor
+     */
+    public function accept($data, ?array $type = null)
+    {
+        // If the type was not given, we infer the most specific type from the
+        // input data in serialization mode.
+        if (null === $type) {
+            throw new RuntimeException('The type must be given for all properties when deserializing.');
+        }
+
+        // Sometimes data can convey null but is not of a null type.
+        // Visitors can have the power to add this custom null evaluation
+        if ($this->visitor instanceof NullAwareVisitorInterface && true === $this->visitor->isNull($data)) {
+            $type = ['name' => 'NULL', 'params' => []];
+        }
+
+        switch ($type['name']) {
+            case 'NULL':
+                return $this->visitor->visitNull($data, $type);
+
+            case 'string':
+                return $this->visitor->visitString($data, $type);
+
+            case 'int':
+            case 'integer':
+                return $this->visitor->visitInteger($data, $type);
+
+            case 'bool':
+            case 'boolean':
+                return $this->visitor->visitBoolean($data, $type);
+
+            case 'double':
+            case 'float':
+                return $this->visitor->visitDouble($data, $type);
+
+            case 'array':
+            case 'iterable':
+            case 'list':
+                return $this->visitor->visitArray($data, $type);
+
+            case 'resource':
+                throw new RuntimeException('Resources are not supported in serialized data.');
+
+            default:
+                $this->context->increaseDepth();
+
+                // Trigger pre-serialization callbacks, and listeners if they exist.
+                // Dispatch pre-serialization event before handling data to have ability change type in listener
+                if ($this->dispatcher->hasListeners('serializer.pre_deserialize', $type['name'], $this->format)) {
+                    $this->dispatcher->dispatch('serializer.pre_deserialize', $type['name'], $this->format, $event = new PreDeserializeEvent($this->context, $data, $type));
+                    $type = $event->getType();
+                    $data = $event->getData();
+                }
+
+                // First, try whether a custom handler exists for the given type. This is done
+                // before loading metadata because the type name might not be a class, but
+                // could also simply be an artifical type.
+                if (null !== $handler = $this->handlerRegistry->getHandler(GraphNavigatorInterface::DIRECTION_DESERIALIZATION, $type['name'], $this->format)) {
+                    try {
+                        $rs = \call_user_func($handler, $this->visitor, $data, $type, $this->context);
+                        $this->context->decreaseDepth();
+
+                        return $rs;
+                    } catch (SkipHandlerException $e) {
+                        // Skip handler, fallback to default behavior
+                    }
+                }
+
+                $metadata = $this->metadataFactory->getMetadataForClass($type['name']);
+                \assert($metadata instanceof ClassMetadata);
+
+                if ($metadata->usingExpression && !$this->expressionExclusionStrategy) {
+                    throw new ExpressionLanguageRequiredException(sprintf('To use conditional exclude/expose in %s you must configure the expression language.', $metadata->name));
+                }
+
+                if (!empty($metadata->discriminatorMap) && $type['name'] === $metadata->discriminatorBaseClass) {
+                    $metadata = $this->resolveMetadata($data, $metadata);
+                }
+
+                if (null !== $this->exclusionStrategy && $this->exclusionStrategy->shouldSkipClass($metadata, $this->context)) {
+                    $this->context->decreaseDepth();
+
+                    return null;
+                }
+
+                $this->context->pushClassMetadata($metadata);
+
+                $object = $this->objectConstructor->construct($this->visitor, $metadata, $data, $type, $this->context);
+
+                if (null === $object) {
+                    $this->context->popClassMetadata();
+                    $this->context->decreaseDepth();
+
+                    return $this->visitor->visitNull($data, $type);
+                }
+
+                $this->visitor->startVisitingObject($metadata, $object, $type);
+                foreach ($metadata->propertyMetadata as $propertyMetadata) {
+                    if (null !== $this->exclusionStrategy && $this->exclusionStrategy->shouldSkipProperty($propertyMetadata, $this->context)) {
+                        continue;
+                    }
+
+                    if (null !== $this->expressionExclusionStrategy && $this->expressionExclusionStrategy->shouldSkipProperty($propertyMetadata, $this->context)) {
+                        continue;
+                    }
+
+                    if ($propertyMetadata->readOnly) {
+                        continue;
+                    }
+
+                    $this->context->pushPropertyMetadata($propertyMetadata);
+                    try {
+                        $v = $this->visitor->visitProperty($propertyMetadata, $data);
+                        $this->accessor->setValue($object, $v, $propertyMetadata, $this->context);
+                    } catch (NotAcceptableException $e) {
+                        if (true === $propertyMetadata->hasDefault) {
+                            $cloned = clone $propertyMetadata;
+                            $cloned->setter = null;
+                            $this->accessor->setValue($object, $cloned->defaultValue, $cloned, $this->context);
+                        }
+                    }
+
+                    $this->context->popPropertyMetadata();
+                }
+
+                $rs = $this->visitor->endVisitingObject($metadata, $data, $type);
+                $this->afterVisitingObject($metadata, $rs, $type);
+
+                return $rs;
+        }
+    }
+
+    /**
+     * @param mixed $data
+     */
+    private function resolveMetadata($data, ClassMetadata $metadata): ?ClassMetadata
+    {
+        $typeValue = $this->visitor->visitDiscriminatorMapProperty($data, $metadata);
+
+        if (!isset($metadata->discriminatorMap[$typeValue])) {
+            throw new LogicException(sprintf(
+                'The type value "%s" does not exist in the discriminator map of class "%s". Available types: %s',
+                $typeValue,
+                $metadata->name,
+                implode(', ', array_keys($metadata->discriminatorMap)),
+            ));
+        }
+
+        return $this->metadataFactory->getMetadataForClass($metadata->discriminatorMap[$typeValue]);
+    }
+
+    private function afterVisitingObject(ClassMetadata $metadata, object $object, array $type): void
+    {
+        $this->context->decreaseDepth();
+        $this->context->popClassMetadata();
+
+        foreach ($metadata->postDeserializeMethods as $method) {
+            $method->invoke($object);
+        }
+
+        if ($this->dispatcher->hasListeners('serializer.post_deserialize', $metadata->name, $this->format)) {
+            $this->dispatcher->dispatch('serializer.post_deserialize', $metadata->name, $this->format, new ObjectEvent($this->context, $object, $type));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/Factory/DeserializationGraphNavigatorFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/Factory/DeserializationGraphNavigatorFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/Factory/DeserializationGraphNavigatorFactory.php	(revision 8435)
@@ -0,0 +1,63 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\GraphNavigator\Factory;
+
+use JMS\Serializer\Accessor\AccessorStrategyInterface;
+use JMS\Serializer\Construction\ObjectConstructorInterface;
+use JMS\Serializer\EventDispatcher\EventDispatcherInterface;
+use JMS\Serializer\Expression\ExpressionEvaluatorInterface;
+use JMS\Serializer\GraphNavigator\DeserializationGraphNavigator;
+use JMS\Serializer\GraphNavigatorInterface;
+use JMS\Serializer\Handler\HandlerRegistryInterface;
+use Metadata\MetadataFactoryInterface;
+
+final class DeserializationGraphNavigatorFactory implements GraphNavigatorFactoryInterface
+{
+    /**
+     * @var MetadataFactoryInterface
+     */
+    private $metadataFactory;
+    /**
+     * @var HandlerRegistryInterface
+     */
+    private $handlerRegistry;
+    /**
+     * @var ObjectConstructorInterface
+     */
+    private $objectConstructor;
+    /**
+     * @var AccessorStrategyInterface
+     */
+    private $accessor;
+    /**
+     * @var EventDispatcherInterface
+     */
+    private $dispatcher;
+    /**
+     * @var ExpressionEvaluatorInterface
+     */
+    private $expressionEvaluator;
+
+    public function __construct(
+        MetadataFactoryInterface $metadataFactory,
+        HandlerRegistryInterface $handlerRegistry,
+        ObjectConstructorInterface $objectConstructor,
+        AccessorStrategyInterface $accessor,
+        ?EventDispatcherInterface $dispatcher = null,
+        ?ExpressionEvaluatorInterface $expressionEvaluator = null
+    ) {
+        $this->metadataFactory = $metadataFactory;
+        $this->handlerRegistry = $handlerRegistry;
+        $this->objectConstructor = $objectConstructor;
+        $this->accessor = $accessor;
+        $this->dispatcher = $dispatcher;
+        $this->expressionEvaluator = $expressionEvaluator;
+    }
+
+    public function getGraphNavigator(): GraphNavigatorInterface
+    {
+        return new DeserializationGraphNavigator($this->metadataFactory, $this->handlerRegistry, $this->objectConstructor, $this->accessor, $this->dispatcher, $this->expressionEvaluator);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/Factory/GraphNavigatorFactoryInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/Factory/GraphNavigatorFactoryInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/Factory/GraphNavigatorFactoryInterface.php	(revision 8435)
@@ -0,0 +1,12 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\GraphNavigator\Factory;
+
+use JMS\Serializer\GraphNavigatorInterface;
+
+interface GraphNavigatorFactoryInterface
+{
+    public function getGraphNavigator(): GraphNavigatorInterface;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/Factory/SerializationGraphNavigatorFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/Factory/SerializationGraphNavigatorFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/Factory/SerializationGraphNavigatorFactory.php	(revision 8435)
@@ -0,0 +1,58 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\GraphNavigator\Factory;
+
+use JMS\Serializer\Accessor\AccessorStrategyInterface;
+use JMS\Serializer\Accessor\DefaultAccessorStrategy;
+use JMS\Serializer\EventDispatcher\EventDispatcher;
+use JMS\Serializer\EventDispatcher\EventDispatcherInterface;
+use JMS\Serializer\Expression\ExpressionEvaluatorInterface;
+use JMS\Serializer\GraphNavigator\SerializationGraphNavigator;
+use JMS\Serializer\GraphNavigatorInterface;
+use JMS\Serializer\Handler\HandlerRegistryInterface;
+use Metadata\MetadataFactoryInterface;
+
+final class SerializationGraphNavigatorFactory implements GraphNavigatorFactoryInterface
+{
+    /**
+     * @var MetadataFactoryInterface
+     */
+    private $metadataFactory;
+    /**
+     * @var HandlerRegistryInterface
+     */
+    private $handlerRegistry;
+    /**
+     * @var AccessorStrategyInterface
+     */
+    private $accessor;
+    /**
+     * @var EventDispatcherInterface
+     */
+    private $dispatcher;
+    /**
+     * @var ExpressionEvaluatorInterface
+     */
+    private $expressionEvaluator;
+
+    public function __construct(
+        MetadataFactoryInterface $metadataFactory,
+        HandlerRegistryInterface $handlerRegistry,
+        ?AccessorStrategyInterface $accessor = null,
+        ?EventDispatcherInterface $dispatcher = null,
+        ?ExpressionEvaluatorInterface $expressionEvaluator = null
+    ) {
+        $this->metadataFactory = $metadataFactory;
+        $this->handlerRegistry = $handlerRegistry;
+        $this->accessor = $accessor ?: new DefaultAccessorStrategy();
+        $this->dispatcher = $dispatcher ?: new EventDispatcher();
+        $this->expressionEvaluator = $expressionEvaluator;
+    }
+
+    public function getGraphNavigator(): GraphNavigatorInterface
+    {
+        return new SerializationGraphNavigator($this->metadataFactory, $this->handlerRegistry, $this->accessor, $this->dispatcher, $this->expressionEvaluator);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/SerializationGraphNavigator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/SerializationGraphNavigator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigator/SerializationGraphNavigator.php	(revision 8435)
@@ -0,0 +1,300 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\GraphNavigator;
+
+use JMS\Serializer\Accessor\AccessorStrategyInterface;
+use JMS\Serializer\Context;
+use JMS\Serializer\EventDispatcher\EventDispatcher;
+use JMS\Serializer\EventDispatcher\EventDispatcherInterface;
+use JMS\Serializer\EventDispatcher\ObjectEvent;
+use JMS\Serializer\EventDispatcher\PreSerializeEvent;
+use JMS\Serializer\Exception\CircularReferenceDetectedException;
+use JMS\Serializer\Exception\ExcludedClassException;
+use JMS\Serializer\Exception\ExpressionLanguageRequiredException;
+use JMS\Serializer\Exception\InvalidArgumentException;
+use JMS\Serializer\Exception\NotAcceptableException;
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\Exception\SkipHandlerException;
+use JMS\Serializer\Exception\UninitializedPropertyException;
+use JMS\Serializer\Exclusion\ExpressionLanguageExclusionStrategy;
+use JMS\Serializer\Expression\ExpressionEvaluatorInterface;
+use JMS\Serializer\Functions;
+use JMS\Serializer\GraphNavigator;
+use JMS\Serializer\GraphNavigatorInterface;
+use JMS\Serializer\Handler\HandlerRegistryInterface;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\NullAwareVisitorInterface;
+use JMS\Serializer\SerializationContext;
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+use JMS\Serializer\VisitorInterface;
+use Metadata\MetadataFactoryInterface;
+
+use function assert;
+
+/**
+ * Handles traversal along the object graph.
+ *
+ * This class handles traversal along the graph, and calls different methods
+ * on visitors, or custom handlers to process its nodes.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+final class SerializationGraphNavigator extends GraphNavigator
+{
+    /**
+     * @var SerializationVisitorInterface
+     */
+    protected $visitor;
+
+    /**
+     * @var SerializationContext
+     */
+    protected $context;
+
+    /**
+     * @var ExpressionLanguageExclusionStrategy
+     */
+    private $expressionExclusionStrategy;
+
+    /**
+     * @var EventDispatcherInterface
+     */
+    private $dispatcher;
+
+    /**
+     * @var MetadataFactoryInterface
+     */
+    private $metadataFactory;
+
+    /**
+     * @var HandlerRegistryInterface
+     */
+    private $handlerRegistry;
+    /**
+     * @var AccessorStrategyInterface
+     */
+    private $accessor;
+
+    /**
+     * @var bool
+     */
+    private $shouldSerializeNull;
+
+    public function __construct(
+        MetadataFactoryInterface $metadataFactory,
+        HandlerRegistryInterface $handlerRegistry,
+        AccessorStrategyInterface $accessor,
+        ?EventDispatcherInterface $dispatcher = null,
+        ?ExpressionEvaluatorInterface $expressionEvaluator = null
+    ) {
+        $this->dispatcher = $dispatcher ?: new EventDispatcher();
+        $this->metadataFactory = $metadataFactory;
+        $this->handlerRegistry = $handlerRegistry;
+        $this->accessor = $accessor;
+
+        if ($expressionEvaluator) {
+            $this->expressionExclusionStrategy = new ExpressionLanguageExclusionStrategy($expressionEvaluator);
+        }
+    }
+
+    public function initialize(VisitorInterface $visitor, Context $context): void
+    {
+        assert($context instanceof SerializationContext);
+
+        parent::initialize($visitor, $context);
+
+        $this->shouldSerializeNull = $context->shouldSerializeNull();
+    }
+
+    /**
+     * Called for each node of the graph that is being traversed.
+     *
+     * @param mixed $data the data depends on the direction, and type of visitor
+     * @param array|null $type array has the format ["name" => string, "params" => array]
+     *
+     * @return mixed the return value depends on the direction, and type of visitor
+     */
+    public function accept($data, ?array $type = null)
+    {
+        // If the type was not given, we infer the most specific type from the
+        // input data in serialization mode.
+        if (null === $type) {
+            $typeName = \gettype($data);
+            if ('object' === $typeName) {
+                $typeName = \get_class($data);
+            }
+
+            $type = ['name' => $typeName, 'params' => []];
+        } elseif (null === $data) {
+            // If the data is null, we have to force the type to null regardless of the input in order to
+            // guarantee correct handling of null values, and not have any internal auto-casting behavior.
+            $type = ['name' => 'NULL', 'params' => []];
+        }
+
+        // Sometimes data can convey null but is not of a null type.
+        // Visitors can have the power to add this custom null evaluation
+        if ($this->visitor instanceof NullAwareVisitorInterface && true === $this->visitor->isNull($data)) {
+            $type = ['name' => 'NULL', 'params' => []];
+        }
+
+        switch ($type['name']) {
+            case 'NULL':
+                if (!$this->shouldSerializeNull && !$this->isRootNullAllowed()) {
+                    throw new NotAcceptableException();
+                }
+
+                return $this->visitor->visitNull($data, $type);
+
+            case 'string':
+                return $this->visitor->visitString((string) $data, $type);
+
+            case 'int':
+            case 'integer':
+                return $this->visitor->visitInteger((int) $data, $type);
+
+            case 'bool':
+            case 'boolean':
+                return $this->visitor->visitBoolean((bool) $data, $type);
+
+            case 'double':
+            case 'float':
+                return $this->visitor->visitDouble((float) $data, $type);
+
+            case 'iterable':
+                return $this->visitor->visitArray(Functions::iterableToArray($data), $type);
+
+            case 'array':
+            case 'list':
+                return $this->visitor->visitArray((array) $data, $type);
+
+            case 'resource':
+                $msg = 'Resources are not supported in serialized data.';
+                if (null !== $path = $this->context->getPath()) {
+                    $msg .= ' Path: ' . $path;
+                }
+
+                throw new RuntimeException($msg);
+
+            default:
+                if (null !== $data) {
+                    if ($this->context->isVisiting($data)) {
+                        throw new CircularReferenceDetectedException();
+                    }
+
+                    $this->context->startVisiting($data);
+                }
+
+                // If we're serializing a polymorphic type, then we'll be interested in the
+                // metadata for the actual type of the object, not the base class.
+                if (class_exists($type['name'], false) || interface_exists($type['name'], false)) {
+                    if (is_subclass_of($data, $type['name'], false) && null === $this->handlerRegistry->getHandler(GraphNavigatorInterface::DIRECTION_SERIALIZATION, $type['name'], $this->format)) {
+                        $type = ['name' => \get_class($data), 'params' => $type['params'] ?? []];
+                    }
+                }
+
+                // Trigger pre-serialization callbacks, and listeners if they exist.
+                // Dispatch pre-serialization event before handling data to have ability change type in listener
+                if ($this->dispatcher->hasListeners('serializer.pre_serialize', $type['name'], $this->format)) {
+                    $this->dispatcher->dispatch('serializer.pre_serialize', $type['name'], $this->format, $event = new PreSerializeEvent($this->context, $data, $type));
+                    $type = $event->getType();
+                }
+
+                // First, try whether a custom handler exists for the given type. This is done
+                // before loading metadata because the type name might not be a class, but
+                // could also simply be an artifical type.
+                if (null !== $handler = $this->handlerRegistry->getHandler(GraphNavigatorInterface::DIRECTION_SERIALIZATION, $type['name'], $this->format)) {
+                    try {
+                        $rs = \call_user_func($handler, $this->visitor, $data, $type, $this->context);
+                        $this->context->stopVisiting($data);
+
+                        return $rs;
+                    } catch (SkipHandlerException $e) {
+                        // Skip handler, fallback to default behavior
+                    } catch (NotAcceptableException $e) {
+                        $this->context->stopVisiting($data);
+
+                        throw $e;
+                    }
+                }
+
+                $metadata = $this->metadataFactory->getMetadataForClass($type['name']);
+                \assert($metadata instanceof ClassMetadata);
+
+                if ($metadata->usingExpression && null === $this->expressionExclusionStrategy) {
+                    throw new ExpressionLanguageRequiredException(sprintf('To use conditional exclude/expose in %s you must configure the expression language.', $metadata->name));
+                }
+
+                if (null !== $this->exclusionStrategy && $this->exclusionStrategy->shouldSkipClass($metadata, $this->context)) {
+                    $this->context->stopVisiting($data);
+
+                    throw new ExcludedClassException();
+                }
+
+                if (null !== $this->expressionExclusionStrategy && $this->expressionExclusionStrategy->shouldSkipClass($metadata, $this->context)) {
+                    $this->context->stopVisiting($data);
+
+                    throw new ExcludedClassException();
+                }
+
+                if (!is_object($data)) {
+                    throw new InvalidArgumentException('Value at ' . $this->context->getPath() . ' is expected to be an object of class ' . $type['name'] . ' but is of type ' . gettype($data));
+                }
+
+                $this->context->pushClassMetadata($metadata);
+
+                foreach ($metadata->preSerializeMethods as $method) {
+                    $method->invoke($data);
+                }
+
+                $this->visitor->startVisitingObject($metadata, $data, $type);
+                foreach ($metadata->propertyMetadata as $propertyMetadata) {
+                    if (null !== $this->exclusionStrategy && $this->exclusionStrategy->shouldSkipProperty($propertyMetadata, $this->context)) {
+                        continue;
+                    }
+
+                    if (null !== $this->expressionExclusionStrategy && $this->expressionExclusionStrategy->shouldSkipProperty($propertyMetadata, $this->context)) {
+                        continue;
+                    }
+
+                    try {
+                        $v = $this->accessor->getValue($data, $propertyMetadata, $this->context);
+                    } catch (UninitializedPropertyException $e) {
+                        continue;
+                    }
+
+                    if (null === $v && true !== $this->shouldSerializeNull) {
+                        continue;
+                    }
+
+                    $this->context->pushPropertyMetadata($propertyMetadata);
+                    $this->visitor->visitProperty($propertyMetadata, $v);
+                    $this->context->popPropertyMetadata();
+                }
+
+                $this->afterVisitingObject($metadata, $data, $type);
+
+                return $this->visitor->endVisitingObject($metadata, $data, $type);
+        }
+    }
+
+    private function isRootNullAllowed(): bool
+    {
+        return $this->context->hasAttribute('allows_root_null') && $this->context->getAttribute('allows_root_null') && 0 === $this->context->getVisitingSet()->count();
+    }
+
+    private function afterVisitingObject(ClassMetadata $metadata, object $object, array $type): void
+    {
+        $this->context->stopVisiting($object);
+        $this->context->popClassMetadata();
+
+        foreach ($metadata->postSerializeMethods as $method) {
+            $method->invoke($object);
+        }
+
+        if ($this->dispatcher->hasListeners('serializer.post_serialize', $metadata->name, $this->format)) {
+            $this->dispatcher->dispatch('serializer.post_serialize', $metadata->name, $this->format, new ObjectEvent($this->context, $object, $type));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigatorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigatorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/GraphNavigatorInterface.php	(revision 8435)
@@ -0,0 +1,31 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use JMS\Serializer\Exception\NotAcceptableException;
+
+interface GraphNavigatorInterface
+{
+    public const DIRECTION_SERIALIZATION = 1;
+    public const DIRECTION_DESERIALIZATION = 2;
+
+    /**
+     * Called at the beginning of the serialization process. The navigator should use the traverse the object graph
+     * and pass to the $visitor the value of found nodes (following the rules obtained from $context).
+     */
+    public function initialize(VisitorInterface $visitor, Context $context): void;
+
+    /**
+     * Called for each node of the graph that is being traversed.
+     *
+     * @param mixed $data the data depends on the direction, and type of visitor
+     * @param array|null $type array has the format ["name" => string, "params" => array]
+     *
+     * @return mixed the return value depends on the direction, and type of visitor
+     *
+     * @throws NotAcceptableException
+     */
+    public function accept($data, ?array $type = null);
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/ArrayCollectionHandler.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/ArrayCollectionHandler.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/ArrayCollectionHandler.php	(revision 8435)
@@ -0,0 +1,161 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Handler;
+
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\Common\Collections\Collection;
+use Doctrine\ODM\MongoDB\PersistentCollection as MongoPersistentCollection;
+use Doctrine\ODM\PHPCR\PersistentCollection as PhpcrPersistentCollection;
+use Doctrine\ORM\PersistentCollection as OrmPersistentCollection;
+use Doctrine\Persistence\ManagerRegistry;
+use JMS\Serializer\DeserializationContext;
+use JMS\Serializer\GraphNavigatorInterface;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\SerializationContext;
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+
+final class ArrayCollectionHandler implements SubscribingHandlerInterface
+{
+    public const COLLECTION_TYPES = [
+        'ArrayCollection',
+        ArrayCollection::class,
+        OrmPersistentCollection::class,
+        MongoPersistentCollection::class,
+        PhpcrPersistentCollection::class,
+    ];
+
+    /**
+     * @var bool
+     */
+    private $initializeExcluded;
+
+    /**
+     * @var ManagerRegistry|null
+     */
+    private $managerRegistry;
+
+    public function __construct(
+        bool $initializeExcluded = true,
+        ?ManagerRegistry $managerRegistry = null
+    ) {
+        $this->initializeExcluded = $initializeExcluded;
+        $this->managerRegistry = $managerRegistry;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public static function getSubscribingMethods()
+    {
+        $methods = [];
+        $formats = ['json', 'xml'];
+
+        foreach (self::COLLECTION_TYPES as $type) {
+            foreach ($formats as $format) {
+                $methods[] = [
+                    'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+                    'type' => $type,
+                    'format' => $format,
+                    'method' => 'serializeCollection',
+                ];
+
+                $methods[] = [
+                    'direction' => GraphNavigatorInterface::DIRECTION_DESERIALIZATION,
+                    'type' => $type,
+                    'format' => $format,
+                    'method' => 'deserializeCollection',
+                ];
+            }
+        }
+
+        return $methods;
+    }
+
+    /**
+     * @return array|\ArrayObject
+     */
+    public function serializeCollection(SerializationVisitorInterface $visitor, Collection $collection, array $type, SerializationContext $context)
+    {
+        // We change the base type, and pass through possible parameters.
+        $type['name'] = 'array';
+
+        $context->stopVisiting($collection);
+
+        if (false === $this->initializeExcluded) {
+            $exclusionStrategy = $context->getExclusionStrategy();
+            if (null !== $exclusionStrategy && $exclusionStrategy->shouldSkipClass($context->getMetadataFactory()->getMetadataForClass(\get_class($collection)), $context)) {
+                $context->startVisiting($collection);
+
+                return $visitor->visitArray([], $type);
+            }
+        }
+
+        $result = $visitor->visitArray($collection->toArray(), $type);
+
+        $context->startVisiting($collection);
+
+        return $result;
+    }
+
+    /**
+     * @param mixed $data
+     */
+    public function deserializeCollection(
+        DeserializationVisitorInterface $visitor,
+        $data,
+        array $type,
+        DeserializationContext $context
+    ): Collection {
+        // See above.
+        $type['name'] = 'array';
+
+        $elements = new ArrayCollection($visitor->visitArray($data, $type));
+
+        if (null === $this->managerRegistry) {
+            return $elements;
+        }
+
+        $propertyMetadata = $context->getMetadataStack()->top();
+        if (!$propertyMetadata instanceof PropertyMetadata) {
+            return $elements;
+        }
+
+        $objectManager = $this->managerRegistry->getManagerForClass($propertyMetadata->class);
+        if (null === $objectManager) {
+            return $elements;
+        }
+
+        $classMetadata = $objectManager->getClassMetadata($propertyMetadata->class);
+        $currentObject = $visitor->getCurrentObject();
+
+        if (
+            array_key_exists('name', $propertyMetadata->type)
+            && in_array($propertyMetadata->type['name'], self::COLLECTION_TYPES)
+            && $classMetadata->isCollectionValuedAssociation($propertyMetadata->name)
+        ) {
+            $existingCollection = $classMetadata->getFieldValue($currentObject, $propertyMetadata->name);
+            if (!$existingCollection instanceof OrmPersistentCollection) {
+                return $elements;
+            }
+
+            foreach ($elements as $element) {
+                if (!$existingCollection->contains($element)) {
+                    $existingCollection->add($element);
+                }
+            }
+
+            foreach ($existingCollection as $collectionElement) {
+                if (!$elements->contains($collectionElement)) {
+                    $existingCollection->removeElement($collectionElement);
+                }
+            }
+
+            return $existingCollection;
+        }
+
+        return $elements;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/ConstraintViolationHandler.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/ConstraintViolationHandler.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/ConstraintViolationHandler.php	(revision 8435)
@@ -0,0 +1,83 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Handler;
+
+use JMS\Serializer\GraphNavigatorInterface;
+use JMS\Serializer\SerializationContext;
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+use JMS\Serializer\XmlSerializationVisitor;
+use Symfony\Component\Validator\ConstraintViolation;
+use Symfony\Component\Validator\ConstraintViolationList;
+
+final class ConstraintViolationHandler implements SubscribingHandlerInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public static function getSubscribingMethods()
+    {
+        $methods = [];
+        $formats = ['xml', 'json'];
+        $types = [ConstraintViolationList::class => 'serializeList', ConstraintViolation::class => 'serializeViolation'];
+
+        foreach ($types as $type => $method) {
+            foreach ($formats as $format) {
+                $methods[] = [
+                    'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+                    'type' => $type,
+                    'format' => $format,
+                    'method' => $method . 'To' . $format,
+                ];
+            }
+        }
+
+        return $methods;
+    }
+
+    public function serializeListToXml(XmlSerializationVisitor $visitor, ConstraintViolationList $list, array $type): void
+    {
+        $currentNode = $visitor->getCurrentNode();
+        if (!$currentNode) {
+            $visitor->createRoot();
+        }
+
+        foreach ($list as $violation) {
+            $this->serializeViolationToXml($visitor, $violation);
+        }
+    }
+
+    /**
+     * @return array|\ArrayObject
+     */
+    public function serializeListToJson(SerializationVisitorInterface $visitor, ConstraintViolationList $list, array $type, SerializationContext $context)
+    {
+        return $visitor->visitArray(iterator_to_array($list), $type);
+    }
+
+    public function serializeViolationToXml(XmlSerializationVisitor $visitor, ConstraintViolation $violation, ?array $type = null): void
+    {
+        $violationNode = $visitor->getDocument()->createElement('violation');
+
+        $parent = $visitor->getCurrentNode();
+        if (!$parent) {
+            $visitor->setCurrentAndRootNode($violationNode);
+        } else {
+            $parent->appendChild($violationNode);
+        }
+
+        $violationNode->setAttribute('property_path', $violation->getPropertyPath());
+        $violationNode->appendChild($messageNode = $visitor->getDocument()->createElement('message'));
+
+        $messageNode->appendChild($visitor->getDocument()->createCDATASection($violation->getMessage()));
+    }
+
+    public function serializeViolationToJson(SerializationVisitorInterface $visitor, ConstraintViolation $violation, ?array $type = null): array
+    {
+        return [
+            'property_path' => $violation->getPropertyPath(),
+            'message' => $violation->getMessage(),
+        ];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/DateHandler.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/DateHandler.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/DateHandler.php	(revision 8435)
@@ -0,0 +1,340 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Handler;
+
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\GraphNavigatorInterface;
+use JMS\Serializer\SerializationContext;
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+use JMS\Serializer\XmlSerializationVisitor;
+
+final class DateHandler implements SubscribingHandlerInterface
+{
+    /**
+     * @var string
+     */
+    private $defaultFormat;
+
+    /**
+     * @var \DateTimeZone
+     */
+    private $defaultTimezone;
+
+    /**
+     * @var bool
+     */
+    private $xmlCData;
+
+    /**
+     * {@inheritdoc}
+     */
+    public static function getSubscribingMethods()
+    {
+        $methods = [];
+        $types = [\DateTime::class, \DateTimeImmutable::class, \DateInterval::class];
+
+        foreach (['json', 'xml'] as $format) {
+            foreach ($types as $type) {
+                $methods[] = [
+                    'type' => $type,
+                    'direction' => GraphNavigatorInterface::DIRECTION_DESERIALIZATION,
+                    'format' => $format,
+                ];
+                $methods[] = [
+                    'type' => $type,
+                    'format' => $format,
+                    'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+                    'method' => 'serialize' . $type,
+                ];
+            }
+
+            $methods[] = [
+                'type' => \DateTimeInterface::class,
+                'direction' => GraphNavigatorInterface::DIRECTION_DESERIALIZATION,
+                'format' => $format,
+                'method' => 'deserializeDateTimeFrom' . ucfirst($format),
+            ];
+
+            $methods[] = [
+                'type' => \DateTimeInterface::class,
+                'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+                'format' => $format,
+                'method' => 'serializeDateTimeInterface',
+            ];
+        }
+
+        return $methods;
+    }
+
+    public function __construct(string $defaultFormat = \DateTime::ATOM, string $defaultTimezone = 'UTC', bool $xmlCData = true)
+    {
+        $this->defaultFormat = $defaultFormat;
+        $this->defaultTimezone = new \DateTimeZone($defaultTimezone);
+        $this->xmlCData = $xmlCData;
+    }
+
+    /**
+     * @return \DOMCdataSection|\DOMText|mixed
+     */
+    public function serializeDateTimeInterface(
+        SerializationVisitorInterface $visitor,
+        \DateTimeInterface $date,
+        array $type,
+        SerializationContext $context
+    ) {
+        if ($visitor instanceof XmlSerializationVisitor && false === $this->xmlCData) {
+            return $visitor->visitSimpleString($date->format($this->getFormat($type)), $type);
+        }
+
+        $format = $this->getFormat($type);
+        if ('U' === $format) {
+            return $visitor->visitInteger((int) $date->format($format), $type);
+        }
+
+        return $visitor->visitString($date->format($this->getFormat($type)), $type);
+    }
+
+    /**
+     * @param array $type
+     *
+     * @return \DOMCdataSection|\DOMText|mixed
+     */
+    public function serializeDateTime(SerializationVisitorInterface $visitor, \DateTime $date, array $type, SerializationContext $context)
+    {
+        return $this->serializeDateTimeInterface($visitor, $date, $type, $context);
+    }
+
+    /**
+     * @param array $type
+     *
+     * @return \DOMCdataSection|\DOMText|mixed
+     */
+    public function serializeDateTimeImmutable(
+        SerializationVisitorInterface $visitor,
+        \DateTimeImmutable $date,
+        array $type,
+        SerializationContext $context
+    ) {
+        return $this->serializeDateTimeInterface($visitor, $date, $type, $context);
+    }
+
+    /**
+     * @param array $type
+     *
+     * @return \DOMCdataSection|\DOMText|mixed
+     */
+    public function serializeDateInterval(SerializationVisitorInterface $visitor, \DateInterval $date, array $type, SerializationContext $context)
+    {
+        $iso8601DateIntervalString = $this->format($date);
+
+        if ($visitor instanceof XmlSerializationVisitor && false === $this->xmlCData) {
+            return $visitor->visitSimpleString($iso8601DateIntervalString, $type);
+        }
+
+        return $visitor->visitString($iso8601DateIntervalString, $type);
+    }
+
+    /**
+     * @param mixed $data
+     */
+    private function isDataXmlNull($data): bool
+    {
+        $attributes = $data->attributes('xsi', true);
+
+        return isset($attributes['nil'][0]) && 'true' === (string) $attributes['nil'][0];
+    }
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     */
+    public function deserializeDateTimeFromXml(DeserializationVisitorInterface $visitor, $data, array $type): ?\DateTimeInterface
+    {
+        if ($this->isDataXmlNull($data)) {
+            return null;
+        }
+
+        return $this->parseDateTime($data, $type);
+    }
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     */
+    public function deserializeDateTimeImmutableFromXml(DeserializationVisitorInterface $visitor, $data, array $type): ?\DateTimeInterface
+    {
+        if ($this->isDataXmlNull($data)) {
+            return null;
+        }
+
+        return $this->parseDateTime($data, $type, true);
+    }
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     */
+    public function deserializeDateIntervalFromXml(DeserializationVisitorInterface $visitor, $data, array $type): ?\DateInterval
+    {
+        if ($this->isDataXmlNull($data)) {
+            return null;
+        }
+
+        return $this->parseDateInterval((string) $data);
+    }
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     */
+    public function deserializeDateTimeFromJson(DeserializationVisitorInterface $visitor, $data, array $type): ?\DateTimeInterface
+    {
+        if (null === $data) {
+            return null;
+        }
+
+        return $this->parseDateTime($data, $type);
+    }
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     */
+    public function deserializeDateTimeImmutableFromJson(DeserializationVisitorInterface $visitor, $data, array $type): ?\DateTimeInterface
+    {
+        if (null === $data) {
+            return null;
+        }
+
+        return $this->parseDateTime($data, $type, true);
+    }
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     */
+    public function deserializeDateIntervalFromJson(DeserializationVisitorInterface $visitor, $data, array $type): ?\DateInterval
+    {
+        if (null === $data) {
+            return null;
+        }
+
+        return $this->parseDateInterval($data);
+    }
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     */
+    private function parseDateTime($data, array $type, bool $immutable = false): \DateTimeInterface
+    {
+        $timezone = !empty($type['params'][1]) ? new \DateTimeZone($type['params'][1]) : $this->defaultTimezone;
+        $formats = $this->getDeserializationFormats($type);
+
+        $formatTried = [];
+        foreach ($formats as $format) {
+            if ($immutable) {
+                $datetime = \DateTimeImmutable::createFromFormat($format, (string) $data, $timezone);
+            } else {
+                $datetime = \DateTime::createFromFormat($format, (string) $data, $timezone);
+            }
+
+            if (false !== $datetime) {
+                if ('U' === $format) {
+                    $datetime = $datetime->setTimezone($timezone);
+                }
+
+                return $datetime;
+            }
+
+            $formatTried[] = $format;
+        }
+
+        throw new RuntimeException(sprintf(
+            'Invalid datetime "%s", expected one of the format %s.',
+            $data,
+            '"' . implode('", "', $formatTried) . '"',
+        ));
+    }
+
+    private function parseDateInterval(string $data): \DateInterval
+    {
+        $dateInterval = null;
+        try {
+            $f = 0.0;
+            if (preg_match('~\.\d+~', $data, $match)) {
+                $data = str_replace($match[0], '', $data);
+                $f = (float) $match[0];
+            }
+
+            $dateInterval = new \DateInterval($data);
+            $dateInterval->f = $f;
+        } catch (\Throwable $e) {
+            throw new RuntimeException(sprintf('Invalid dateinterval "%s", expected ISO 8601 format', $data), 0, $e);
+        }
+
+        return $dateInterval;
+    }
+
+    /**
+     * @param array $type
+     */
+    private function getDeserializationFormats(array $type): array
+    {
+        if (isset($type['params'][2])) {
+            return is_array($type['params'][2]) ? $type['params'][2] : [$type['params'][2]];
+        }
+
+        return [$this->getFormat($type)];
+    }
+
+    /**
+     * @param array $type
+     */
+    private function getFormat(array $type): string
+    {
+        return $type['params'][0] ?? $this->defaultFormat;
+    }
+
+    public function format(\DateInterval $dateInterval): string
+    {
+        $format = 'P';
+
+        if (0 < $dateInterval->y) {
+            $format .= $dateInterval->y . 'Y';
+        }
+
+        if (0 < $dateInterval->m) {
+            $format .= $dateInterval->m . 'M';
+        }
+
+        if (0 < $dateInterval->d) {
+            $format .= $dateInterval->d . 'D';
+        }
+
+        if (0 < $dateInterval->h || 0 < $dateInterval->i || 0 < $dateInterval->s) {
+            $format .= 'T';
+        }
+
+        if (0 < $dateInterval->h) {
+            $format .= $dateInterval->h . 'H';
+        }
+
+        if (0 < $dateInterval->i) {
+            $format .= $dateInterval->i . 'M';
+        }
+
+        if (0 < $dateInterval->s) {
+            $format .= $dateInterval->s . 'S';
+        }
+
+        if ('P' === $format) {
+            $format = 'P0DT0S';
+        }
+
+        return $format;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/EnumHandler.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/EnumHandler.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/EnumHandler.php	(revision 8435)
@@ -0,0 +1,92 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Handler;
+
+use JMS\Serializer\Exception\InvalidMetadataException;
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\GraphNavigatorInterface;
+use JMS\Serializer\SerializationContext;
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+
+final class EnumHandler implements SubscribingHandlerInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public static function getSubscribingMethods()
+    {
+        $methods = [];
+
+        foreach (['json', 'xml'] as $format) {
+            $methods[] = [
+                'type' => 'enum',
+                'direction' => GraphNavigatorInterface::DIRECTION_DESERIALIZATION,
+                'format' => $format,
+                'method' => 'deserializeEnum',
+            ];
+            $methods[] = [
+                'type' => 'enum',
+                'format' => $format,
+                'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+                'method' => 'serializeEnum',
+            ];
+        }
+
+        return $methods;
+    }
+
+    public function serializeEnum(
+        SerializationVisitorInterface $visitor,
+        \UnitEnum $enum,
+        array $type,
+        SerializationContext $context
+    ) {
+        if ((isset($type['params'][1]) && 'value' === $type['params'][1]) || (!isset($type['params'][1]) && $enum instanceof \BackedEnum)) {
+            if (!$enum instanceof \BackedEnum) {
+                throw new InvalidMetadataException(sprintf('The type "%s" is not a backed enum, thus you can not use "value" as serialization mode for its value.', get_class($enum)));
+            }
+
+            $valueType = isset($type['params'][2]) ? ['name' => $type['params'][2]] : null;
+
+            return $context->getNavigator()->accept($enum->value, $valueType);
+        } else {
+            return $context->getNavigator()->accept($enum->name);
+        }
+    }
+
+    /**
+     * @param int|string|\SimpleXMLElement $data
+     * @param array $type
+     */
+    public function deserializeEnum(DeserializationVisitorInterface $visitor, $data, array $type): ?\UnitEnum
+    {
+        $enumType = $type['params'][0];
+        $caseValue = (string) $data;
+
+        $ref = new \ReflectionEnum($enumType);
+        if (isset($type['params'][1]) && 'value' === $type['params'][1] || (!isset($type['params'][1]) && is_a($enumType, \BackedEnum::class, true))) {
+            if (!is_a($enumType, \BackedEnum::class, true)) {
+                throw new InvalidMetadataException(sprintf('The type "%s" is not a backed enum, thus you can not use "value" as serialization mode for its value.', $enumType));
+            }
+
+            if ('int' === $ref->getBackingType()->getName()) {
+                if (!is_numeric($caseValue)) {
+                    throw new RuntimeException(sprintf('"%s" is not a valid backing value for enum "%s"', $caseValue, $enumType));
+                }
+
+                $caseValue = (int) $caseValue;
+            }
+
+            return $enumType::from($caseValue);
+        } else {
+            if (!$ref->hasCase($caseValue)) {
+                throw new InvalidMetadataException(sprintf('The type "%s" does not have the case "%s"', $ref->getName(), $caseValue));
+            }
+
+            return $ref->getCase($caseValue)->getValue();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/FormErrorHandler.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/FormErrorHandler.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/FormErrorHandler.php	(revision 8435)
@@ -0,0 +1,168 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Handler;
+
+use JMS\Serializer\GraphNavigatorInterface;
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+use JMS\Serializer\XmlSerializationVisitor;
+use Symfony\Component\Form\Form;
+use Symfony\Component\Form\FormError;
+use Symfony\Component\Form\FormInterface;
+use Symfony\Component\Translation\TranslatorInterface;
+use Symfony\Contracts\Translation\TranslatorInterface as TranslatorContract;
+
+use function get_class;
+
+final class FormErrorHandler implements SubscribingHandlerInterface
+{
+    /**
+     * @var TranslatorInterface|TranslatorContract|null
+     */
+    private $translator;
+
+    /**
+     * @var string
+     */
+    private $translationDomain;
+
+    /**
+     * {@inheritdoc}
+     */
+    public static function getSubscribingMethods()
+    {
+        $methods = [];
+        foreach (['xml', 'json'] as $format) {
+            $methods[] = [
+                'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+                'type' => Form::class,
+                'format' => $format,
+            ];
+            $methods[] = [
+                'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+                'type' => FormInterface::class,
+                'format' => $format,
+                'method' => 'serializeFormTo' . ucfirst($format),
+            ];
+            $methods[] = [
+                'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+                'type' => FormError::class,
+                'format' => $format,
+            ];
+        }
+
+        return $methods;
+    }
+
+    public function __construct(?object $translator = null, string $translationDomain = 'validators')
+    {
+        if (null !== $translator && (!$translator instanceof TranslatorInterface && !$translator instanceof TranslatorContract)) {
+            throw new \InvalidArgumentException(sprintf(
+                'The first argument passed to %s must be instance of %s or %s, %s given',
+                self::class,
+                TranslatorInterface::class,
+                TranslatorContract::class,
+                get_class($translator),
+            ));
+        }
+
+        $this->translator = $translator;
+        $this->translationDomain = $translationDomain;
+    }
+
+    /**
+     * @param array $type
+     */
+    public function serializeFormToXml(XmlSerializationVisitor $visitor, FormInterface $form, array $type): \DOMElement
+    {
+        $formNode = $visitor->getDocument()->createElement('form');
+
+        $formNode->setAttribute('name', $form->getName());
+
+        $formNode->appendChild($errorsNode = $visitor->getDocument()->createElement('errors'));
+        foreach ($form->getErrors() as $error) {
+            $errorNode = $visitor->getDocument()->createElement('entry');
+            $errorNode->appendChild($this->serializeFormErrorToXml($visitor, $error, []));
+            $errorsNode->appendChild($errorNode);
+        }
+
+        foreach ($form->all() as $child) {
+            if ($child instanceof Form) {
+                if (null !== $node = $this->serializeFormToXml($visitor, $child, [])) {
+                    $formNode->appendChild($node);
+                }
+            }
+        }
+
+        return $formNode;
+    }
+
+    /**
+     * @param array $type
+     */
+    public function serializeFormToJson(SerializationVisitorInterface $visitor, FormInterface $form, array $type): \ArrayObject
+    {
+        return $this->convertFormToArray($visitor, $form);
+    }
+
+    /**
+     * @param array $type
+     */
+    public function serializeFormErrorToXml(XmlSerializationVisitor $visitor, FormError $formError, array $type): \DOMCdataSection
+    {
+        return $visitor->getDocument()->createCDATASection($this->getErrorMessage($formError));
+    }
+
+    /**
+     * @param array $type
+     */
+    public function serializeFormErrorToJson(SerializationVisitorInterface $visitor, FormError $formError, array $type): string
+    {
+        return $this->getErrorMessage($formError);
+    }
+
+    private function getErrorMessage(FormError $error): ?string
+    {
+        if (null === $this->translator) {
+            return $error->getMessage();
+        }
+
+        if (null !== $error->getMessagePluralization()) {
+            if ($this->translator instanceof TranslatorContract) {
+                return $this->translator->trans($error->getMessageTemplate(), ['%count%' => $error->getMessagePluralization()] + $error->getMessageParameters(), $this->translationDomain);
+            } else {
+                return $this->translator->transChoice($error->getMessageTemplate(), $error->getMessagePluralization(), $error->getMessageParameters(), $this->translationDomain);
+            }
+        }
+
+        return $this->translator->trans($error->getMessageTemplate(), $error->getMessageParameters(), $this->translationDomain);
+    }
+
+    private function convertFormToArray(SerializationVisitorInterface $visitor, FormInterface $data): \ArrayObject
+    {
+        /** @var \ArrayObject{errors?:array<string>,children?:array<string,\ArrayObject>} $form */
+        $form = new \ArrayObject();
+        $errors = [];
+        foreach ($data->getErrors() as $error) {
+            $errors[] = $this->getErrorMessage($error);
+        }
+
+        if ($errors) {
+            $form['errors'] = $errors;
+        }
+
+        $children = [];
+        foreach ($data->all() as $child) {
+            if ($child instanceof FormInterface) {
+                $children[$child->getName()] = $this->convertFormToArray($visitor, $child);
+            }
+        }
+
+        if ($children) {
+            $form['children'] = $children;
+        }
+
+        return $form;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/HandlerRegistry.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/HandlerRegistry.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/HandlerRegistry.php	(revision 8435)
@@ -0,0 +1,87 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Handler;
+
+use JMS\Serializer\Exception\LogicException;
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\GraphNavigatorInterface;
+
+class HandlerRegistry implements HandlerRegistryInterface
+{
+    /**
+     * @var callable[]
+     */
+    protected $handlers;
+
+    public static function getDefaultMethod(int $direction, string $type, string $format): string
+    {
+        if (false !== $pos = strrpos($type, '\\')) {
+            $type = substr($type, $pos + 1);
+        }
+
+        switch ($direction) {
+            case GraphNavigatorInterface::DIRECTION_DESERIALIZATION:
+                return 'deserialize' . $type . 'From' . $format;
+
+            case GraphNavigatorInterface::DIRECTION_SERIALIZATION:
+                return 'serialize' . $type . 'To' . $format;
+
+            default:
+                throw new LogicException(sprintf('The direction %s does not exist; see GraphNavigatorInterface::DIRECTION_??? constants.', json_encode($direction)));
+        }
+    }
+
+    public function __construct(array $handlers = [])
+    {
+        $this->handlers = $handlers;
+    }
+
+    public function registerSubscribingHandler(SubscribingHandlerInterface $handler): void
+    {
+        foreach ($handler->getSubscribingMethods() as $methodData) {
+            if (!isset($methodData['type'], $methodData['format'])) {
+                throw new RuntimeException(sprintf('For each subscribing method a "type" and "format" attribute must be given, but only got "%s" for %s.', implode('" and "', array_keys($methodData)), \get_class($handler)));
+            }
+
+            $directions = [GraphNavigatorInterface::DIRECTION_DESERIALIZATION, GraphNavigatorInterface::DIRECTION_SERIALIZATION];
+            if (isset($methodData['direction'])) {
+                $directions = [$methodData['direction']];
+            }
+
+            foreach ($directions as $direction) {
+                $method = $methodData['method'] ?? self::getDefaultMethod($direction, $methodData['type'], $methodData['format']);
+                $this->registerHandler($direction, $methodData['type'], $methodData['format'], [$handler, $method]);
+            }
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function registerHandler(int $direction, string $typeName, string $format, $handler): void
+    {
+        $this->handlers[$direction][$typeName][$format] = $handler;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getHandler(int $direction, string $typeName, string $format)
+    {
+        if (!isset($this->handlers[$direction][$typeName][$format])) {
+            return null;
+        }
+
+        return $this->handlers[$direction][$typeName][$format];
+    }
+
+    /**
+     * @internal Used for profiling
+     */
+    public function getHandlers(): array
+    {
+        return $this->handlers;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/HandlerRegistryInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/HandlerRegistryInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/HandlerRegistryInterface.php	(revision 8435)
@@ -0,0 +1,30 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Handler;
+
+/**
+ * Handler Registry Interface.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+interface HandlerRegistryInterface
+{
+    public function registerSubscribingHandler(SubscribingHandlerInterface $handler): void;
+
+    /**
+     * Registers a handler in the registry.
+     *
+     * @param int $direction one of the GraphNavigatorInterface::DIRECTION_??? constants
+     * @param object|callable $handler   function(visitor, mixed $data, array $type): mixed
+     */
+    public function registerHandler(int $direction, string $typeName, string $format, $handler): void;
+
+    /**
+     * @param int $direction one of the GraphNavigatorInterface::DIRECTION_??? constants
+     *
+     * @return callable|object|null
+     */
+    public function getHandler(int $direction, string $typeName, string $format);
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/IteratorHandler.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/IteratorHandler.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/IteratorHandler.php	(revision 8435)
@@ -0,0 +1,125 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Handler;
+
+use ArrayIterator;
+use Generator;
+use Iterator;
+use JMS\Serializer\DeserializationContext;
+use JMS\Serializer\Functions;
+use JMS\Serializer\GraphNavigatorInterface;
+use JMS\Serializer\SerializationContext;
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+
+final class IteratorHandler implements SubscribingHandlerInterface
+{
+    private const SUPPORTED_FORMATS = ['json', 'xml'];
+
+    /**
+     * {@inheritdoc}
+     */
+    public static function getSubscribingMethods()
+    {
+        $methods = [];
+
+        foreach (self::SUPPORTED_FORMATS as $format) {
+            $methods[] = [
+                'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+                'type' => Iterator::class,
+                'format' => $format,
+                'method' => 'serializeIterable',
+            ];
+
+            $methods[] = [
+                'direction' => GraphNavigatorInterface::DIRECTION_DESERIALIZATION,
+                'type' => Iterator::class,
+                'format' => $format,
+                'method' => 'deserializeIterator',
+            ];
+        }
+
+        foreach (self::SUPPORTED_FORMATS as $format) {
+            $methods[] = [
+                'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+                'type' => ArrayIterator::class,
+                'format' => $format,
+                'method' => 'serializeIterable',
+            ];
+
+            $methods[] = [
+                'direction' => GraphNavigatorInterface::DIRECTION_DESERIALIZATION,
+                'type' => ArrayIterator::class,
+                'format' => $format,
+                'method' => 'deserializeIterator',
+            ];
+        }
+
+        foreach (self::SUPPORTED_FORMATS as $format) {
+            $methods[] = [
+                'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+                'type' => Generator::class,
+                'format' => $format,
+                'method' => 'serializeIterable',
+            ];
+
+            $methods[] = [
+                'direction' => GraphNavigatorInterface::DIRECTION_DESERIALIZATION,
+                'type' => Generator::class,
+                'format' => $format,
+                'method' => 'deserializeGenerator',
+            ];
+        }
+
+        return $methods;
+    }
+
+    /**
+     * @return array|\ArrayObject|null
+     */
+    public function serializeIterable(
+        SerializationVisitorInterface $visitor,
+        iterable $iterable,
+        array $type,
+        SerializationContext $context
+    ): ?iterable {
+        $type['name'] = 'array';
+
+        $context->stopVisiting($iterable);
+        $result = $visitor->visitArray(Functions::iterableToArray($iterable), $type);
+        $context->startVisiting($iterable);
+
+        return $result;
+    }
+
+    /**
+     * @param mixed $data
+     */
+    public function deserializeIterator(
+        DeserializationVisitorInterface $visitor,
+        $data,
+        array $type,
+        DeserializationContext $context
+    ): \Iterator {
+        $type['name'] = 'array';
+
+        return new ArrayIterator($visitor->visitArray($data, $type));
+    }
+
+    /**
+     * @param mixed $data
+     */
+    public function deserializeGenerator(
+        DeserializationVisitorInterface $visitor,
+        $data,
+        array $type,
+        DeserializationContext $context
+    ): Generator {
+        return (static function () use (&$visitor, &$data, &$type): Generator {
+            $type['name'] = 'array';
+            yield from $visitor->visitArray($data, $type);
+        })();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/LazyHandlerRegistry.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/LazyHandlerRegistry.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/LazyHandlerRegistry.php	(revision 8435)
@@ -0,0 +1,68 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Handler;
+
+use JMS\Serializer\Exception\InvalidArgumentException;
+use Psr\Container\ContainerInterface as PsrContainerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+final class LazyHandlerRegistry extends HandlerRegistry
+{
+    /**
+     * @var PsrContainerInterface|ContainerInterface
+     */
+    private $container;
+
+    /**
+     * @var array
+     */
+    private $initializedHandlers = [];
+
+    /**
+     * @param PsrContainerInterface|ContainerInterface $container
+     * @param array $handlers
+     */
+    public function __construct($container, array $handlers = [])
+    {
+        if (!$container instanceof PsrContainerInterface && !$container instanceof ContainerInterface) {
+            throw new InvalidArgumentException(sprintf('The container must be an instance of %s or %s (%s given).', PsrContainerInterface::class, ContainerInterface::class, \is_object($container) ? \get_class($container) : \gettype($container)));
+        }
+
+        parent::__construct($handlers);
+
+        $this->container = $container;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function registerHandler(int $direction, string $typeName, string $format, $handler): void
+    {
+        parent::registerHandler($direction, $typeName, $format, $handler);
+
+        unset($this->initializedHandlers[$direction][$typeName][$format]);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getHandler(int $direction, string $typeName, string $format)
+    {
+        if (isset($this->initializedHandlers[$direction][$typeName][$format])) {
+            return $this->initializedHandlers[$direction][$typeName][$format];
+        }
+
+        if (!isset($this->handlers[$direction][$typeName][$format])) {
+            return null;
+        }
+
+        $handler = $this->handlers[$direction][$typeName][$format];
+        if (\is_array($handler) && \is_string($handler[0]) && $this->container->has($handler[0])) {
+            $handler[0] = $this->container->get($handler[0]);
+        }
+
+        return $this->initializedHandlers[$direction][$typeName][$format] = $handler;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/StdClassHandler.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/StdClassHandler.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/StdClassHandler.php	(revision 8435)
@@ -0,0 +1,52 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Handler;
+
+use JMS\Serializer\GraphNavigatorInterface;
+use JMS\Serializer\Metadata\StaticPropertyMetadata;
+use JMS\Serializer\SerializationContext;
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+final class StdClassHandler implements SubscribingHandlerInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public static function getSubscribingMethods()
+    {
+        $methods = [];
+        $formats = ['json', 'xml'];
+
+        foreach ($formats as $format) {
+            $methods[] = [
+                'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+                'type' => \stdClass::class,
+                'format' => $format,
+                'method' => 'serializeStdClass',
+            ];
+        }
+
+        return $methods;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function serializeStdClass(SerializationVisitorInterface $visitor, \stdClass $stdClass, array $type, SerializationContext $context)
+    {
+        $classMetadata = $context->getMetadataFactory()->getMetadataForClass('stdClass');
+        $visitor->startVisitingObject($classMetadata, $stdClass, ['name' => 'stdClass']);
+
+        foreach ((array) $stdClass as $name => $value) {
+            $metadata = new StaticPropertyMetadata('stdClass', $name, $value);
+            $visitor->visitProperty($metadata, $value);
+        }
+
+        return $visitor->endVisitingObject($classMetadata, $stdClass, ['name' => 'stdClass']);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/SubscribingHandlerInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/SubscribingHandlerInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/SubscribingHandlerInterface.php	(revision 8435)
@@ -0,0 +1,28 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Handler;
+
+interface SubscribingHandlerInterface
+{
+    /**
+     * Return format:
+     *
+     *      array(
+     *          array(
+     *              'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+     *              'format' => 'json',
+     *              'type' => 'DateTime',
+     *              'method' => 'serializeDateTimeToJson',
+     *          ),
+     *      )
+     *
+     * The direction and method keys can be omitted.
+     *
+     * @return array
+     *
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint
+     */
+    public static function getSubscribingMethods();
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/SymfonyUidHandler.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/SymfonyUidHandler.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Handler/SymfonyUidHandler.php	(revision 8435)
@@ -0,0 +1,173 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Handler;
+
+use JMS\Serializer\DeserializationContext;
+use JMS\Serializer\Exception\InvalidArgumentException;
+use JMS\Serializer\GraphNavigatorInterface;
+use JMS\Serializer\SerializationContext;
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+use JMS\Serializer\XmlSerializationVisitor;
+use Symfony\Component\Uid\AbstractUid;
+use Symfony\Component\Uid\Ulid;
+use Symfony\Component\Uid\Uuid;
+use Symfony\Component\Uid\UuidV1;
+use Symfony\Component\Uid\UuidV3;
+use Symfony\Component\Uid\UuidV4;
+use Symfony\Component\Uid\UuidV5;
+use Symfony\Component\Uid\UuidV6;
+use Symfony\Component\Uid\UuidV7;
+use Symfony\Component\Uid\UuidV8;
+
+final class SymfonyUidHandler implements SubscribingHandlerInterface
+{
+    public const FORMAT_BASE32    = 'base32';
+    public const FORMAT_BASE58    = 'base58';
+    public const FORMAT_CANONICAL = 'canonical';
+    public const FORMAT_RFC4122   = 'rfc4122';
+
+    private const UID_CLASSES = [
+        Ulid::class,
+        Uuid::class,
+        UuidV1::class,
+        UuidV3::class,
+        UuidV4::class,
+        UuidV5::class,
+        UuidV6::class,
+        UuidV7::class,
+        UuidV8::class,
+    ];
+
+    /**
+     * @var string
+     * @phpstan-var self::FORMAT_*
+     */
+    private $defaultFormat;
+
+    /**
+     * @var bool
+     */
+    private $xmlCData;
+
+    public function __construct(string $defaultFormat = self::FORMAT_CANONICAL, bool $xmlCData = true)
+    {
+        $this->defaultFormat = $defaultFormat;
+        $this->xmlCData = $xmlCData;
+    }
+
+    public static function getSubscribingMethods(): array
+    {
+        $methods = [];
+        $formats = ['json', 'xml'];
+
+        foreach ($formats as $format) {
+            foreach (self::UID_CLASSES as $class) {
+                $methods[] = [
+                    'direction' => GraphNavigatorInterface::DIRECTION_SERIALIZATION,
+                    'format'    => $format,
+                    'type'      => $class,
+                    'method'    => 'serializeUid',
+                ];
+
+                $methods[] = [
+                    'direction' => GraphNavigatorInterface::DIRECTION_DESERIALIZATION,
+                    'format'    => $format,
+                    'type'      => $class,
+                    'method'    => 'deserializeUidFrom' . ucfirst($format),
+                ];
+            }
+        }
+
+        return $methods;
+    }
+
+    /**
+     * @phpstan-param array{name: class-string<AbstractUid>, params: array} $type
+     */
+    public function deserializeUidFromJson(DeserializationVisitorInterface $visitor, ?string $data, array $type, DeserializationContext $context): ?AbstractUid
+    {
+        if (null === $data) {
+            return null;
+        }
+
+        return $this->deserializeUid($data, $type);
+    }
+
+    /**
+     * @phpstan-param array{name: class-string<AbstractUid>, params: array} $type
+     */
+    public function deserializeUidFromXml(DeserializationVisitorInterface $visitor, \SimpleXMLElement $data, array $type, DeserializationContext $context): ?AbstractUid
+    {
+        if ($this->isDataXmlNull($data)) {
+            return null;
+        }
+
+        return $this->deserializeUid((string) $data, $type);
+    }
+
+    /**
+     * @phpstan-param array{name: class-string<AbstractUid>, params: array} $type
+     */
+    private function deserializeUid(string $data, array $type): ?AbstractUid
+    {
+        /** @var class-string<AbstractUid> $uidClass */
+        $uidClass = $type['name'];
+
+        try {
+            return $uidClass::fromString($data);
+        } catch (\InvalidArgumentException | \TypeError $exception) {
+            throw new InvalidArgumentException(sprintf('"%s" is not a valid UID string.', $data), 0, $exception);
+        }
+    }
+
+    /**
+     * @return \DOMText|string
+     *
+     * @phpstan-param array{name: class-string<AbstractUid>, params: array} $type
+     */
+    public function serializeUid(SerializationVisitorInterface $visitor, AbstractUid $uid, array $type, SerializationContext $context)
+    {
+        /** @phpstan-var self::FORMAT_* $format */
+        $format = $type['params'][0]['name'] ?? $this->defaultFormat;
+
+        switch ($format) {
+            case self::FORMAT_BASE32:
+                $serialized = $uid->toBase32();
+                break;
+
+            case self::FORMAT_BASE58:
+                $serialized = $uid->toBase58();
+                break;
+
+            case self::FORMAT_CANONICAL:
+                $serialized = (string) $uid;
+                break;
+
+            case self::FORMAT_RFC4122:
+                $serialized = $uid->toRfc4122();
+                break;
+
+            default:
+                throw new InvalidArgumentException(sprintf('The "%s" format is not valid.', $format));
+        }
+
+        if ($visitor instanceof XmlSerializationVisitor && false === $this->xmlCData) {
+            return $visitor->visitSimpleString($serialized, $type);
+        }
+
+        return $visitor->visitString($serialized, $type);
+    }
+
+    /**
+     * @param mixed $data
+     */
+    private function isDataXmlNull($data): bool
+    {
+        $attributes = $data->attributes('xsi', true);
+
+        return isset($attributes['nil'][0]) && 'true' === (string) $attributes['nil'][0];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/JsonDeserializationStrictVisitor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/JsonDeserializationStrictVisitor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/JsonDeserializationStrictVisitor.php	(revision 8435)
@@ -0,0 +1,172 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use JMS\Serializer\Exception\NonVisitableTypeException;
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+
+use function is_float;
+use function is_int;
+use function is_string;
+
+final class JsonDeserializationStrictVisitor extends AbstractVisitor implements DeserializationVisitorInterface
+{
+    /** @var JsonDeserializationVisitor */
+    private $wrappedDeserializationVisitor;
+
+    public function __construct(
+        int $options = 0,
+        int $depth = 512
+    ) {
+        $this->wrappedDeserializationVisitor = new JsonDeserializationVisitor($options, $depth);
+    }
+
+    public function setNavigator(GraphNavigatorInterface $navigator): void
+    {
+        parent::setNavigator($navigator);
+
+        $this->wrappedDeserializationVisitor->setNavigator($navigator);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitNull($data, array $type)
+    {
+        return null;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitString($data, array $type): ?string
+    {
+        if (null === $data) {
+            return null;
+        }
+
+        if (! is_string($data)) {
+            throw NonVisitableTypeException::fromDataAndType($data, $type);
+        }
+
+        return $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitBoolean($data, array $type): ?bool
+    {
+        if (null === $data) {
+            return null;
+        }
+
+        if (! is_bool($data)) {
+            throw NonVisitableTypeException::fromDataAndType($data, $type);
+        }
+
+        return $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitInteger($data, array $type): ?int
+    {
+        if (null === $data) {
+            return null;
+        }
+
+        if (! is_int($data)) {
+            throw NonVisitableTypeException::fromDataAndType($data, $type);
+        }
+
+        return $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitDouble($data, array $type): ?float
+    {
+        if (null === $data) {
+            return null;
+        }
+
+        if (! is_float($data)) {
+            throw NonVisitableTypeException::fromDataAndType($data, $type);
+        }
+
+        return $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitArray($data, array $type): array
+    {
+        try {
+            return $this->wrappedDeserializationVisitor->visitArray($data, $type);
+        } catch (RuntimeException $e) {
+            throw NonVisitableTypeException::fromDataAndType($data, $type, $e);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitDiscriminatorMapProperty($data, ClassMetadata $metadata): string
+    {
+        return $this->wrappedDeserializationVisitor->visitDiscriminatorMapProperty($data, $metadata);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function startVisitingObject(ClassMetadata $metadata, object $object, array $type): void
+    {
+        $this->wrappedDeserializationVisitor->startVisitingObject($metadata, $object, $type);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitProperty(PropertyMetadata $metadata, $data)
+    {
+        return $this->wrappedDeserializationVisitor->visitProperty($metadata, $data);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function endVisitingObject(ClassMetadata $metadata, $data, array $type): object
+    {
+        return $this->wrappedDeserializationVisitor->endVisitingObject($metadata, $data, $type);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getResult($data)
+    {
+        return $this->wrappedDeserializationVisitor->getResult($data);
+    }
+
+    public function getCurrentObject(): ?object
+    {
+        return $this->wrappedDeserializationVisitor->getCurrentObject();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function prepare($data)
+    {
+        return $this->wrappedDeserializationVisitor->prepare($data);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/JsonDeserializationVisitor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/JsonDeserializationVisitor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/JsonDeserializationVisitor.php	(revision 8435)
@@ -0,0 +1,258 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use JMS\Serializer\Exception\LogicException;
+use JMS\Serializer\Exception\NotAcceptableException;
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+
+final class JsonDeserializationVisitor extends AbstractVisitor implements DeserializationVisitorInterface
+{
+    /**
+     * @var int
+     */
+    private $options;
+
+    /**
+     * @var int
+     */
+    private $depth;
+
+    /**
+     * @var \SplStack
+     */
+    private $objectStack;
+
+    /**
+     * @var object|null
+     */
+    private $currentObject;
+
+    public function __construct(
+        int $options = 0,
+        int $depth = 512
+    ) {
+        $this->objectStack = new \SplStack();
+        $this->options = $options;
+        $this->depth = $depth;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitNull($data, array $type)
+    {
+        return null;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitString($data, array $type): string
+    {
+        $this->assertValueCanBeCastToString($data);
+
+        return (string) $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitBoolean($data, array $type): bool
+    {
+        return (bool) $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitInteger($data, array $type): int
+    {
+        $this->assertValueCanBeCastToInt($data);
+
+        return (int) $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitDouble($data, array $type): float
+    {
+        $this->assertValueCanCastToFloat($data);
+
+        return (float) $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitArray($data, array $type): array
+    {
+        if (!\is_array($data)) {
+            throw new RuntimeException(sprintf('Expected array, but got %s: %s', \gettype($data), json_encode($data)));
+        }
+
+        // If no further parameters were given, keys/values are just passed as is.
+        if (!$type['params']) {
+            return $data;
+        }
+
+        switch (\count($type['params'])) {
+            case 1: // Array is a list.
+                $listType = $type['params'][0];
+
+                $result = [];
+
+                foreach ($data as $v) {
+                    $result[] = $this->navigator->accept($v, $listType);
+                }
+
+                return $result;
+
+            case 2: // Array is a map.
+                [$keyType, $entryType] = $type['params'];
+
+                $result = [];
+
+                foreach ($data as $k => $v) {
+                    $result[$this->navigator->accept($k, $keyType)] = $this->navigator->accept($v, $entryType);
+                }
+
+                return $result;
+
+            default:
+                throw new RuntimeException(sprintf('Array type cannot have more than 2 parameters, but got %s.', json_encode($type['params'])));
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitDiscriminatorMapProperty($data, ClassMetadata $metadata): string
+    {
+        if (isset($data[$metadata->discriminatorFieldName])) {
+            return (string) $data[$metadata->discriminatorFieldName];
+        }
+
+        throw new LogicException(sprintf(
+            'The discriminator field name "%s" for base-class "%s" was not found in input data.',
+            $metadata->discriminatorFieldName,
+            $metadata->name,
+        ));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function startVisitingObject(ClassMetadata $metadata, object $object, array $type): void
+    {
+        $this->setCurrentObject($object);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitProperty(PropertyMetadata $metadata, $data)
+    {
+        $name = $metadata->serializedName;
+
+        if (null === $data) {
+            return;
+        }
+
+        if (!\is_array($data)) {
+            throw new RuntimeException(sprintf('Invalid data %s (%s), expected "%s".', json_encode($data), $metadata->type['name'], $metadata->class));
+        }
+
+        if (true === $metadata->inline) {
+            if (!$metadata->type) {
+                throw RuntimeException::noMetadataForProperty($metadata->class, $metadata->name);
+            }
+
+            return $this->navigator->accept($data, $metadata->type);
+        }
+
+        if (!array_key_exists($name, $data)) {
+            throw new NotAcceptableException();
+        }
+
+        if (!$metadata->type) {
+            throw RuntimeException::noMetadataForProperty($metadata->class, $metadata->name);
+        }
+
+        return null !== $data[$name] ? $this->navigator->accept($data[$name], $metadata->type) : null;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function endVisitingObject(ClassMetadata $metadata, $data, array $type): object
+    {
+        $obj = $this->currentObject;
+        $this->revertCurrentObject();
+
+        return $obj;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getResult($data)
+    {
+        unset($this->navigator);
+
+        return $data;
+    }
+
+    public function setCurrentObject(object $object): void
+    {
+        $this->objectStack->push($this->currentObject);
+        $this->currentObject = $object;
+    }
+
+    public function getCurrentObject(): ?object
+    {
+        return $this->currentObject;
+    }
+
+    public function revertCurrentObject(): ?object
+    {
+        return $this->currentObject = $this->objectStack->pop();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function prepare($str)
+    {
+        $decoded = json_decode($str, true, $this->depth, $this->options);
+
+        switch (json_last_error()) {
+            case JSON_ERROR_NONE:
+                return $decoded;
+
+            case JSON_ERROR_DEPTH:
+                throw new RuntimeException('Could not decode JSON, maximum stack depth exceeded.');
+
+            case JSON_ERROR_STATE_MISMATCH:
+                throw new RuntimeException('Could not decode JSON, underflow or the nodes mismatch.');
+
+            case JSON_ERROR_CTRL_CHAR:
+                throw new RuntimeException('Could not decode JSON, unexpected control character found.');
+
+            case JSON_ERROR_SYNTAX:
+                throw new RuntimeException('Could not decode JSON, syntax error - malformed JSON.');
+
+            case JSON_ERROR_UTF8:
+                throw new RuntimeException('Could not decode JSON, malformed UTF-8 characters (incorrectly encoded?)');
+
+            default:
+                throw new RuntimeException('Could not decode JSON.');
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/JsonSerializationVisitor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/JsonSerializationVisitor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/JsonSerializationVisitor.php	(revision 8435)
@@ -0,0 +1,208 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use JMS\Serializer\Exception\NotAcceptableException;
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+
+final class JsonSerializationVisitor extends AbstractVisitor implements SerializationVisitorInterface
+{
+    /**
+     * @var int
+     */
+    private $options;
+
+    /**
+     * @var array
+     */
+    private $dataStack;
+    /**
+     * @var \ArrayObject|array
+     */
+    private $data;
+
+    public function __construct(
+        int $options = JSON_PRESERVE_ZERO_FRACTION
+    ) {
+        $this->dataStack = [];
+        $this->options = $options;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitNull($data, array $type)
+    {
+        return null;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitString(string $data, array $type)
+    {
+        return $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitBoolean(bool $data, array $type)
+    {
+        return $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitInteger(int $data, array $type)
+    {
+        return $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitDouble(float $data, array $type)
+    {
+        $precision = $type['params'][0] ?? null;
+        if (!is_int($precision)) {
+            return $data;
+        }
+
+        $roundMode = $type['params'][1] ?? null;
+        $roundMode = $this->mapRoundMode($roundMode);
+
+        return round($data, $precision, $roundMode);
+    }
+
+    /**
+     * @param array $data
+     * @param array $type
+     *
+     * @return array|\ArrayObject
+     */
+    public function visitArray(array $data, array $type)
+    {
+        \array_push($this->dataStack, $data);
+
+        $rs = isset($type['params'][1]) ? new \ArrayObject() : [];
+
+        $isList = isset($type['params'][0]) && !isset($type['params'][1]);
+
+        $elType = $this->getElementType($type);
+        foreach ($data as $k => $v) {
+            try {
+                $v = $this->navigator->accept($v, $elType);
+            } catch (NotAcceptableException $e) {
+                continue;
+            }
+
+            if ($isList) {
+                $rs[] = $v;
+            } else {
+                $rs[$k] = $v;
+            }
+        }
+
+        \array_pop($this->dataStack);
+
+        return $rs;
+    }
+
+    public function startVisitingObject(ClassMetadata $metadata, object $data, array $type): void
+    {
+        \array_push($this->dataStack, $this->data);
+        $this->data = true === $metadata->isMap ? new \ArrayObject() : [];
+    }
+
+    /**
+     * @return array|\ArrayObject
+     */
+    public function endVisitingObject(ClassMetadata $metadata, object $data, array $type)
+    {
+        $rs = $this->data;
+        $this->data = \array_pop($this->dataStack);
+
+        if (true !== $metadata->isList && empty($rs)) {
+            return new \ArrayObject();
+        }
+
+        return $rs;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitProperty(PropertyMetadata $metadata, $v): void
+    {
+        try {
+            $v = $this->navigator->accept($v, $metadata->type);
+        } catch (NotAcceptableException $e) {
+            return;
+        }
+
+        if (true === $metadata->skipWhenEmpty && ($v instanceof \ArrayObject || \is_array($v)) && 0 === count($v)) {
+            return;
+        }
+
+        if ($metadata->inline) {
+            if (\is_array($v) || ($v instanceof \ArrayObject)) {
+                // concatenate the two array-like structures
+                // is there anything faster?
+                foreach ($v as $key => $value) {
+                    $this->data[$key] = $value;
+                }
+            }
+        } else {
+            $this->data[$metadata->serializedName] = $v;
+        }
+    }
+
+    /**
+     * Checks if some data key exists.
+     */
+    public function hasData(string $key): bool
+    {
+        return isset($this->data[$key]);
+    }
+
+    /**
+     * @deprecated Use `::visitProperty(new StaticPropertyMetadata('', 'name', 'value'), 'value')` instead
+     *
+     * Allows you to replace existing data on the current object element.
+     *
+     * @param mixed $value This value must either be a regular scalar, or an array.
+     *                                                       It must not contain any objects anymore.
+     */
+    public function setData(string $key, $value): void
+    {
+        $this->data[$key] = $value;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getResult($data)
+    {
+        unset($this->navigator);
+
+        $result = @json_encode($data, $this->options);
+
+        switch (json_last_error()) {
+            case JSON_ERROR_NONE:
+                return $result;
+
+            case JSON_ERROR_UTF8:
+                throw new RuntimeException('Your data could not be encoded because it contains invalid UTF8 characters.');
+
+            default:
+                throw new RuntimeException(sprintf('An error occurred while encoding your data (error code %d).', json_last_error()));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/ClassMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/ClassMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/ClassMetadata.php	(revision 8435)
@@ -0,0 +1,410 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata;
+
+use JMS\Serializer\Exception\InvalidMetadataException;
+use JMS\Serializer\Expression\Expression;
+use JMS\Serializer\Ordering\AlphabeticalPropertyOrderingStrategy;
+use JMS\Serializer\Ordering\CustomPropertyOrderingStrategy;
+use JMS\Serializer\Ordering\IdenticalPropertyOrderingStrategy;
+use Metadata\MergeableClassMetadata;
+use Metadata\MergeableInterface;
+use Metadata\MethodMetadata;
+use Metadata\PropertyMetadata as BasePropertyMetadata;
+
+/**
+ * Class Metadata used to customize the serialization process.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ *
+ * @property PropertyMetadata[] $propertyMetadata
+ */
+class ClassMetadata extends MergeableClassMetadata
+{
+    public const ACCESSOR_ORDER_UNDEFINED = 'undefined';
+    public const ACCESSOR_ORDER_ALPHABETICAL = 'alphabetical';
+    public const ACCESSOR_ORDER_CUSTOM = 'custom';
+
+    /** @var \ReflectionMethod[] */
+    public $preSerializeMethods = [];
+
+    /** @var \ReflectionMethod[] */
+    public $postSerializeMethods = [];
+
+    /** @var \ReflectionMethod[] */
+    public $postDeserializeMethods = [];
+
+    /**
+     * @var string
+     */
+    public $xmlRootName;
+
+    /**
+     * @var string
+     */
+    public $xmlRootNamespace;
+
+    /**
+     * @var string
+     */
+    public $xmlRootPrefix;
+    /**
+     * @var string[]
+     */
+    public $xmlNamespaces = [];
+
+    /**
+     * @var string
+     */
+    public $accessorOrder;
+
+    /**
+     * @var string[]
+     */
+    public $customOrder;
+
+    /**
+     * @internal
+     *
+     * @var bool
+     */
+    public $usingExpression = false;
+
+    /**
+     * @internal
+     *
+     * @var bool
+     */
+    public $isList = false;
+
+    /**
+     * @internal
+     *
+     * @var bool
+     */
+    public $isMap = false;
+
+    /**
+     * @var bool
+     */
+    public $discriminatorDisabled = false;
+
+    /**
+     * @var string
+     */
+    public $discriminatorBaseClass;
+    /**
+     * @var string
+     */
+    public $discriminatorFieldName;
+    /**
+     * @var string
+     */
+    public $discriminatorValue;
+
+    /**
+     * @var string[]
+     */
+    public $discriminatorMap = [];
+
+    /**
+     * @var string[]
+     */
+    public $discriminatorGroups = [];
+
+    /**
+     * @var bool
+     */
+    public $xmlDiscriminatorAttribute = false;
+
+    /**
+     * @var bool
+     */
+    public $xmlDiscriminatorCData = true;
+
+    /**
+     * @var string
+     */
+    public $xmlDiscriminatorNamespace;
+
+    /**
+     * @var string|Expression
+     */
+    public $excludeIf;
+
+    public function setDiscriminator(string $fieldName, array $map, array $groups = []): void
+    {
+        if (empty($fieldName)) {
+            throw new InvalidMetadataException('The $fieldName cannot be empty.');
+        }
+
+        if (empty($map)) {
+            throw new InvalidMetadataException('The discriminator map cannot be empty.');
+        }
+
+        $this->discriminatorBaseClass = $this->name;
+        $this->discriminatorFieldName = $fieldName;
+        $this->discriminatorMap = $map;
+        $this->discriminatorGroups = $groups;
+
+        $this->handleDiscriminatorProperty();
+    }
+
+    private function getReflection(): \ReflectionClass
+    {
+        return new \ReflectionClass($this->name);
+    }
+
+    /**
+     * Sets the order of properties in the class.
+     *
+     * @param array $customOrder
+     *
+     * @throws InvalidMetadataException When the accessor order is not valid.
+     * @throws InvalidMetadataException When the custom order is not valid.
+     */
+    public function setAccessorOrder(string $order, array $customOrder = []): void
+    {
+        if (!in_array($order, [self::ACCESSOR_ORDER_UNDEFINED, self::ACCESSOR_ORDER_ALPHABETICAL, self::ACCESSOR_ORDER_CUSTOM], true)) {
+            throw new InvalidMetadataException(sprintf('The accessor order "%s" is invalid.', $order));
+        }
+
+        foreach ($customOrder as $name) {
+            if (!\is_string($name)) {
+                throw new InvalidMetadataException(sprintf('$customOrder is expected to be a list of strings, but got element of value %s.', json_encode($name)));
+            }
+        }
+
+        $this->accessorOrder = $order;
+        $this->customOrder = array_flip($customOrder);
+        $this->sortProperties();
+    }
+
+    public function addPropertyMetadata(BasePropertyMetadata $metadata): void
+    {
+        parent::addPropertyMetadata($metadata);
+
+        $this->sortProperties();
+        if ($metadata instanceof PropertyMetadata && $metadata->excludeIf) {
+            $this->usingExpression = true;
+        }
+    }
+
+    public function addPreSerializeMethod(MethodMetadata $method): void
+    {
+        $this->preSerializeMethods[] = $method;
+    }
+
+    public function addPostSerializeMethod(MethodMetadata $method): void
+    {
+        $this->postSerializeMethods[] = $method;
+    }
+
+    public function addPostDeserializeMethod(MethodMetadata $method): void
+    {
+        $this->postDeserializeMethods[] = $method;
+    }
+
+    public function merge(MergeableInterface $object): void
+    {
+        if (!$object instanceof ClassMetadata) {
+            throw new InvalidMetadataException('$object must be an instance of ClassMetadata.');
+        }
+
+        parent::merge($object);
+
+        $this->preSerializeMethods = array_merge($this->preSerializeMethods, $object->preSerializeMethods);
+        $this->postSerializeMethods = array_merge($this->postSerializeMethods, $object->postSerializeMethods);
+        $this->postDeserializeMethods = array_merge($this->postDeserializeMethods, $object->postDeserializeMethods);
+        $this->xmlRootName = $object->xmlRootName;
+        $this->xmlRootPrefix = $object->xmlRootPrefix;
+        $this->xmlRootNamespace = $object->xmlRootNamespace;
+        if (null !== $object->excludeIf) {
+            $this->excludeIf = $object->excludeIf;
+        }
+
+        $this->isMap = $object->isMap;
+        $this->isList = $object->isList;
+
+        $this->xmlNamespaces = array_merge($this->xmlNamespaces, $object->xmlNamespaces);
+
+        if ($object->accessorOrder) {
+            $this->accessorOrder = $object->accessorOrder;
+            $this->customOrder = $object->customOrder;
+        }
+
+        if ($object->discriminatorFieldName && $this->discriminatorFieldName && $object->discriminatorFieldName !== $this->discriminatorFieldName) {
+            throw new InvalidMetadataException(sprintf(
+                'The discriminator of class "%s" would overwrite the discriminator of the parent class "%s". Please define all possible sub-classes in the discriminator of %s.',
+                $object->name,
+                $this->discriminatorBaseClass,
+                $this->discriminatorBaseClass,
+            ));
+        } elseif (!$this->discriminatorFieldName && $object->discriminatorFieldName) {
+            $this->discriminatorFieldName = $object->discriminatorFieldName;
+            $this->discriminatorMap = $object->discriminatorMap;
+        }
+
+        if (null !== $object->discriminatorDisabled) {
+            $this->discriminatorDisabled = $object->discriminatorDisabled;
+        }
+
+        if ($object->discriminatorMap) {
+            $this->discriminatorFieldName = $object->discriminatorFieldName;
+            $this->discriminatorMap = $object->discriminatorMap;
+            $this->discriminatorBaseClass = $object->discriminatorBaseClass;
+            $this->discriminatorGroups = $object->discriminatorGroups;
+
+            $this->xmlDiscriminatorCData = $object->xmlDiscriminatorCData;
+            $this->xmlDiscriminatorAttribute = $object->xmlDiscriminatorAttribute;
+            $this->xmlDiscriminatorNamespace = $object->xmlDiscriminatorNamespace;
+        }
+
+        $this->handleDiscriminatorProperty();
+
+        $this->sortProperties();
+    }
+
+    public function registerNamespace(string $uri, ?string $prefix = null): void
+    {
+        if (!\is_string($uri)) {
+            throw new InvalidMetadataException(sprintf('$uri is expected to be a strings, but got value %s.', json_encode($uri)));
+        }
+
+        if (null !== $prefix) {
+            if (!\is_string($prefix)) {
+                throw new InvalidMetadataException(sprintf('$prefix is expected to be a strings, but got value %s.', json_encode($prefix)));
+            }
+        } else {
+            $prefix = '';
+        }
+
+        $this->xmlNamespaces[$prefix] = $uri;
+    }
+
+    protected function serializeToArray(): array
+    {
+        $this->sortProperties();
+
+        return [
+            $this->preSerializeMethods,
+            $this->postSerializeMethods,
+            $this->postDeserializeMethods,
+            $this->xmlRootName,
+            $this->xmlRootNamespace,
+            $this->xmlNamespaces,
+            $this->accessorOrder,
+            $this->customOrder,
+            $this->discriminatorDisabled,
+            $this->discriminatorBaseClass,
+            $this->discriminatorFieldName,
+            $this->discriminatorValue,
+            $this->discriminatorMap,
+            $this->discriminatorGroups,
+            $this->excludeIf,
+            $this->discriminatorGroups,
+            $this->xmlDiscriminatorAttribute,
+            $this->xmlDiscriminatorCData,
+            $this->usingExpression,
+            $this->xmlDiscriminatorNamespace,
+            $this->xmlRootPrefix,
+            $this->isList,
+            $this->isMap,
+            parent::serializeToArray(),
+        ];
+    }
+
+    protected function unserializeFromArray(array $data): void
+    {
+        [
+            $this->preSerializeMethods,
+            $this->postSerializeMethods,
+            $this->postDeserializeMethods,
+            $this->xmlRootName,
+            $this->xmlRootNamespace,
+            $this->xmlNamespaces,
+            $this->accessorOrder,
+            $this->customOrder,
+            $this->discriminatorDisabled,
+            $this->discriminatorBaseClass,
+            $this->discriminatorFieldName,
+            $this->discriminatorValue,
+            $this->discriminatorMap,
+            $this->discriminatorGroups,
+            $this->excludeIf,
+            $this->discriminatorGroups,
+            $this->xmlDiscriminatorAttribute,
+            $this->xmlDiscriminatorCData,
+            $this->usingExpression,
+            $this->xmlDiscriminatorNamespace,
+            $this->xmlRootPrefix,
+            $this->isList,
+            $this->isMap,
+            $parentData,
+        ] = $data;
+
+        parent::unserializeFromArray($parentData);
+    }
+
+    private function handleDiscriminatorProperty(): void
+    {
+        if (
+            $this->discriminatorMap
+            && !$this->getReflection()->isAbstract()
+            && !$this->getReflection()->isInterface()
+        ) {
+            if (false === $typeValue = array_search($this->name, $this->discriminatorMap, true)) {
+                throw new InvalidMetadataException(sprintf(
+                    'The sub-class "%s" is not listed in the discriminator of the base class "%s".',
+                    $this->name,
+                    $this->discriminatorBaseClass,
+                ));
+            }
+
+            $this->discriminatorValue = $typeValue;
+
+            if (
+                isset($this->propertyMetadata[$this->discriminatorFieldName])
+                && !$this->propertyMetadata[$this->discriminatorFieldName] instanceof StaticPropertyMetadata
+            ) {
+                throw new InvalidMetadataException(sprintf(
+                    'The discriminator field name "%s" of the base-class "%s" conflicts with a regular property of the sub-class "%s".',
+                    $this->discriminatorFieldName,
+                    $this->discriminatorBaseClass,
+                    $this->name,
+                ));
+            }
+
+            $discriminatorProperty = new StaticPropertyMetadata(
+                $this->name,
+                $this->discriminatorFieldName,
+                $typeValue,
+                $this->discriminatorGroups,
+            );
+            $discriminatorProperty->serializedName = $this->discriminatorFieldName;
+            $discriminatorProperty->xmlAttribute = $this->xmlDiscriminatorAttribute;
+            $discriminatorProperty->xmlElementCData = $this->xmlDiscriminatorCData;
+            $discriminatorProperty->xmlNamespace = $this->xmlDiscriminatorNamespace;
+            $this->propertyMetadata[$this->discriminatorFieldName] = $discriminatorProperty;
+        }
+    }
+
+    private function sortProperties(): void
+    {
+        switch ($this->accessorOrder) {
+            case self::ACCESSOR_ORDER_UNDEFINED:
+                $this->propertyMetadata = (new IdenticalPropertyOrderingStrategy())->order($this->propertyMetadata);
+                break;
+
+            case self::ACCESSOR_ORDER_ALPHABETICAL:
+                $this->propertyMetadata = (new AlphabeticalPropertyOrderingStrategy())->order($this->propertyMetadata);
+                break;
+
+            case self::ACCESSOR_ORDER_CUSTOM:
+                $this->propertyMetadata = (new CustomPropertyOrderingStrategy($this->customOrder))->order($this->propertyMetadata);
+                break;
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AbstractDoctrineTypeDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AbstractDoctrineTypeDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AbstractDoctrineTypeDriver.php	(revision 8435)
@@ -0,0 +1,159 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use Doctrine\Persistence\ManagerRegistry;
+use Doctrine\Persistence\Mapping\ClassMetadata as DoctrineClassMetadata;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\ExpressionPropertyMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Metadata\StaticPropertyMetadata;
+use JMS\Serializer\Metadata\VirtualPropertyMetadata;
+use JMS\Serializer\Type\Parser;
+use JMS\Serializer\Type\ParserInterface;
+use Metadata\ClassMetadata as BaseClassMetadata;
+use Metadata\Driver\DriverInterface;
+
+/**
+ * This class decorates any other driver. If the inner driver does not provide a
+ * a property type, the decorator will guess based on Doctrine 2 metadata.
+ */
+abstract class AbstractDoctrineTypeDriver implements DriverInterface
+{
+    /**
+     * Map of doctrine 2 field types to JMS\Serializer types
+     *
+     * @var array
+     */
+    protected $fieldMapping = [
+        'string' => 'string',
+        'ascii_string' => 'string',
+        'text' => 'string',
+        'blob' => 'string',
+        'guid' => 'string',
+        'decimal' => 'string',
+
+        'integer' => 'integer',
+        'smallint' => 'integer',
+        'bigint' => 'integer',
+
+        'datetime' => 'DateTime',
+        'datetimetz' => 'DateTime',
+        'time' => 'DateTime',
+        'date' => 'DateTime',
+
+        'datetime_immutable' => 'DateTimeImmutable',
+        'datetimetz_immutable' => 'DateTimeImmutable',
+        'time_immutable' => 'DateTimeImmutable',
+        'date_immutable' => 'DateTimeImmutable',
+
+        'dateinterval' => 'DateInterval',
+
+        'float' => 'float',
+
+        'boolean' => 'boolean',
+
+        'array' => 'array',
+        'json_array' => 'array',
+        'simple_array' => 'array<string>',
+    ];
+    /**
+     * @var DriverInterface
+     */
+    protected $delegate;
+    /**
+     * @var ManagerRegistry
+     */
+    protected $registry;
+
+    /**
+     * @var ParserInterface
+     */
+    protected $typeParser;
+
+    public function __construct(DriverInterface $delegate, ManagerRegistry $registry, ?ParserInterface $typeParser = null)
+    {
+        $this->delegate = $delegate;
+        $this->registry = $registry;
+        $this->typeParser = $typeParser ?: new Parser();
+    }
+
+    public function loadMetadataForClass(\ReflectionClass $class): ?BaseClassMetadata
+    {
+        $classMetadata = $this->delegate->loadMetadataForClass($class);
+
+        if (null === $classMetadata) {
+            return null;
+        }
+
+        \assert($classMetadata instanceof ClassMetadata);
+
+        // Abort if the given class is not a mapped entity
+        if (!$doctrineMetadata = $this->tryLoadingDoctrineMetadata($class->name)) {
+            return $classMetadata;
+        }
+
+        $this->setDiscriminator($doctrineMetadata, $classMetadata);
+
+        // We base our scan on the internal driver's property list so that we
+        // respect any internal allow/blocklist like in the AnnotationDriver
+        foreach ($classMetadata->propertyMetadata as $key => $propertyMetadata) {
+            // If the inner driver provides a type, don't guess anymore.
+            if ($propertyMetadata->type || $this->isVirtualProperty($propertyMetadata)) {
+                continue;
+            }
+
+            if ($this->hideProperty($doctrineMetadata, $propertyMetadata)) {
+                unset($classMetadata->propertyMetadata[$key]);
+            }
+
+            $this->setPropertyType($doctrineMetadata, $propertyMetadata);
+        }
+
+        return $classMetadata;
+    }
+
+    private function isVirtualProperty(PropertyMetadata $propertyMetadata): bool
+    {
+        return $propertyMetadata instanceof VirtualPropertyMetadata
+            || $propertyMetadata instanceof StaticPropertyMetadata
+            || $propertyMetadata instanceof ExpressionPropertyMetadata;
+    }
+
+    protected function setDiscriminator(DoctrineClassMetadata $doctrineMetadata, ClassMetadata $classMetadata): void
+    {
+    }
+
+    protected function hideProperty(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata): bool
+    {
+        return false;
+    }
+
+    protected function setPropertyType(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata): void
+    {
+    }
+
+    protected function tryLoadingDoctrineMetadata(string $className): ?DoctrineClassMetadata
+    {
+        if (!$manager = $this->registry->getManagerForClass($className)) {
+            return null;
+        }
+
+        if ($manager->getMetadataFactory()->isTransient($className)) {
+            return null;
+        }
+
+        return $manager->getClassMetadata($className);
+    }
+
+    protected function normalizeFieldType(string $type): ?string
+    {
+        if (!isset($this->fieldMapping[$type])) {
+            return null;
+        }
+
+        return $this->fieldMapping[$type];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AnnotationDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AnnotationDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AnnotationDriver.php	(revision 8435)
@@ -0,0 +1,52 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use Doctrine\Common\Annotations\Reader;
+use JMS\Serializer\Expression\CompilableExpressionEvaluatorInterface;
+use JMS\Serializer\Naming\PropertyNamingStrategyInterface;
+use JMS\Serializer\Type\ParserInterface;
+
+/**
+ * @deprecated
+ */
+class AnnotationDriver extends AnnotationOrAttributeDriver
+{
+    /**
+     * @var Reader
+     */
+    private $reader;
+
+    public function __construct(Reader $reader, PropertyNamingStrategyInterface $namingStrategy, ?ParserInterface $typeParser = null, ?CompilableExpressionEvaluatorInterface $expressionEvaluator = null)
+    {
+        parent::__construct($namingStrategy, $typeParser, $expressionEvaluator, $reader);
+
+        $this->reader = $reader;
+    }
+
+    /**
+     * @return list<object>
+     */
+    protected function getClassAnnotations(\ReflectionClass $class): array
+    {
+        return $this->reader->getClassAnnotations($class);
+    }
+
+    /**
+     * @return list<object>
+     */
+    protected function getMethodAnnotations(\ReflectionMethod $method): array
+    {
+        return $this->reader->getMethodAnnotations($method);
+    }
+
+    /**
+     * @return list<object>
+     */
+    protected function getPropertyAnnotations(\ReflectionProperty $property): array
+    {
+        return $this->reader->getPropertyAnnotations($property);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AnnotationOrAttributeDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AnnotationOrAttributeDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AnnotationOrAttributeDriver.php	(revision 8435)
@@ -0,0 +1,363 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use Doctrine\Common\Annotations\Reader;
+use JMS\Serializer\Annotation\Accessor;
+use JMS\Serializer\Annotation\AccessorOrder;
+use JMS\Serializer\Annotation\AccessType;
+use JMS\Serializer\Annotation\Discriminator;
+use JMS\Serializer\Annotation\Exclude;
+use JMS\Serializer\Annotation\ExclusionPolicy;
+use JMS\Serializer\Annotation\Expose;
+use JMS\Serializer\Annotation\Groups;
+use JMS\Serializer\Annotation\Inline;
+use JMS\Serializer\Annotation\MaxDepth;
+use JMS\Serializer\Annotation\PostDeserialize;
+use JMS\Serializer\Annotation\PostSerialize;
+use JMS\Serializer\Annotation\PreSerialize;
+use JMS\Serializer\Annotation\ReadOnlyProperty;
+use JMS\Serializer\Annotation\SerializedName;
+use JMS\Serializer\Annotation\SerializerAttribute;
+use JMS\Serializer\Annotation\Since;
+use JMS\Serializer\Annotation\SkipWhenEmpty;
+use JMS\Serializer\Annotation\Type;
+use JMS\Serializer\Annotation\Until;
+use JMS\Serializer\Annotation\VirtualProperty;
+use JMS\Serializer\Annotation\XmlAttribute;
+use JMS\Serializer\Annotation\XmlAttributeMap;
+use JMS\Serializer\Annotation\XmlDiscriminator;
+use JMS\Serializer\Annotation\XmlElement;
+use JMS\Serializer\Annotation\XmlKeyValuePairs;
+use JMS\Serializer\Annotation\XmlList;
+use JMS\Serializer\Annotation\XmlMap;
+use JMS\Serializer\Annotation\XmlNamespace;
+use JMS\Serializer\Annotation\XmlRoot;
+use JMS\Serializer\Annotation\XmlValue;
+use JMS\Serializer\Exception\InvalidMetadataException;
+use JMS\Serializer\Expression\CompilableExpressionEvaluatorInterface;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\ExpressionPropertyMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Metadata\VirtualPropertyMetadata;
+use JMS\Serializer\Naming\PropertyNamingStrategyInterface;
+use JMS\Serializer\Type\Parser;
+use JMS\Serializer\Type\ParserInterface;
+use Metadata\ClassMetadata as BaseClassMetadata;
+use Metadata\Driver\DriverInterface;
+use Metadata\MethodMetadata;
+
+class AnnotationOrAttributeDriver implements DriverInterface
+{
+    use ExpressionMetadataTrait;
+
+    /**
+     * @var ParserInterface
+     */
+    private $typeParser;
+
+    /**
+     * @var PropertyNamingStrategyInterface
+     */
+    private $namingStrategy;
+
+    /**
+     * @var Reader
+     */
+    private $reader;
+
+    public function __construct(PropertyNamingStrategyInterface $namingStrategy, ?ParserInterface $typeParser = null, ?CompilableExpressionEvaluatorInterface $expressionEvaluator = null, ?Reader $reader = null)
+    {
+        $this->typeParser = $typeParser ?: new Parser();
+        $this->namingStrategy = $namingStrategy;
+        $this->expressionEvaluator = $expressionEvaluator;
+        $this->reader = $reader;
+    }
+
+    public function loadMetadataForClass(\ReflectionClass $class): ?BaseClassMetadata
+    {
+        $configured = false;
+
+        $classMetadata = new ClassMetadata($name = $class->name);
+        $fileResource =  $class->getFilename();
+
+        if (false !== $fileResource) {
+            $classMetadata->fileResources[] = $fileResource;
+        }
+
+        $propertiesMetadata = [];
+        $propertiesAnnotations = [];
+
+        $exclusionPolicy = ExclusionPolicy::NONE;
+        $excludeAll = false;
+        $classAccessType = PropertyMetadata::ACCESS_TYPE_PROPERTY;
+        $readOnlyClass = false;
+
+        foreach ($this->getClassAnnotations($class) as $annot) {
+            $configured = true;
+
+            if ($annot instanceof ExclusionPolicy) {
+                $exclusionPolicy = $annot->policy;
+            } elseif ($annot instanceof XmlRoot) {
+                $classMetadata->xmlRootName = $annot->name;
+                $classMetadata->xmlRootNamespace = $annot->namespace;
+                $classMetadata->xmlRootPrefix = $annot->prefix;
+            } elseif ($annot instanceof XmlNamespace) {
+                $classMetadata->registerNamespace($annot->uri, $annot->prefix);
+            } elseif ($annot instanceof Exclude) {
+                if (null !== $annot->if) {
+                    $classMetadata->excludeIf = $this->parseExpression($annot->if);
+                } else {
+                    $excludeAll = true;
+                }
+            } elseif ($annot instanceof AccessType) {
+                $classAccessType = $annot->type;
+            } elseif ($annot instanceof ReadOnlyProperty) {
+                $readOnlyClass = true;
+            } elseif ($annot instanceof AccessorOrder) {
+                $classMetadata->setAccessorOrder($annot->order, $annot->custom);
+            } elseif ($annot instanceof Discriminator) {
+                if ($annot->disabled) {
+                    $classMetadata->discriminatorDisabled = true;
+                } else {
+                    $classMetadata->setDiscriminator($annot->field, $annot->map, $annot->groups);
+                }
+            } elseif ($annot instanceof XmlDiscriminator) {
+                $classMetadata->xmlDiscriminatorAttribute = (bool) $annot->attribute;
+                $classMetadata->xmlDiscriminatorCData = (bool) $annot->cdata;
+                $classMetadata->xmlDiscriminatorNamespace = $annot->namespace ? (string) $annot->namespace : null;
+            } elseif ($annot instanceof VirtualProperty) {
+                $virtualPropertyMetadata = new ExpressionPropertyMetadata(
+                    $name,
+                    $annot->name,
+                    $this->parseExpression($annot->exp),
+                );
+                $propertiesMetadata[] = $virtualPropertyMetadata;
+                $propertiesAnnotations[] = $annot->options;
+            }
+        }
+
+        foreach ($class->getMethods() as $method) {
+            if ($method->class !== $name) {
+                continue;
+            }
+
+            $methodAnnotations = $this->getMethodAnnotations($method);
+
+            foreach ($methodAnnotations as $annot) {
+                $configured = true;
+
+                if ($annot instanceof PreSerialize) {
+                    $classMetadata->addPreSerializeMethod(new MethodMetadata($name, $method->name));
+                    continue 2;
+                } elseif ($annot instanceof PostDeserialize) {
+                    $classMetadata->addPostDeserializeMethod(new MethodMetadata($name, $method->name));
+                    continue 2;
+                } elseif ($annot instanceof PostSerialize) {
+                    $classMetadata->addPostSerializeMethod(new MethodMetadata($name, $method->name));
+                    continue 2;
+                } elseif ($annot instanceof VirtualProperty) {
+                    $virtualPropertyMetadata = new VirtualPropertyMetadata($name, $method->name);
+                    $propertiesMetadata[] = $virtualPropertyMetadata;
+                    $propertiesAnnotations[] = $methodAnnotations;
+                    continue 2;
+                }
+            }
+        }
+
+        if (!$excludeAll) {
+            foreach ($class->getProperties() as $property) {
+                if ($property->class !== $name || (isset($property->info) && $property->info['class'] !== $name)) {
+                    continue;
+                }
+
+                $propertiesMetadata[] = new PropertyMetadata($name, $property->getName());
+                $propertiesAnnotations[] = $this->getPropertyAnnotations($property);
+            }
+
+            foreach ($propertiesMetadata as $propertyKey => $propertyMetadata) {
+                $isExclude = false;
+                $isExpose = $propertyMetadata instanceof VirtualPropertyMetadata
+                    || $propertyMetadata instanceof ExpressionPropertyMetadata;
+                $propertyMetadata->readOnly = $propertyMetadata->readOnly || $readOnlyClass;
+                $accessType = $classAccessType;
+                $accessor = [null, null];
+
+                $propertyAnnotations = $propertiesAnnotations[$propertyKey];
+
+                foreach ($propertyAnnotations as $annot) {
+                    $configured = true;
+
+                    if ($annot instanceof Since) {
+                        $propertyMetadata->sinceVersion = $annot->version;
+                    } elseif ($annot instanceof Until) {
+                        $propertyMetadata->untilVersion = $annot->version;
+                    } elseif ($annot instanceof SerializedName) {
+                        $propertyMetadata->serializedName = $annot->name;
+                    } elseif ($annot instanceof SkipWhenEmpty) {
+                        $propertyMetadata->skipWhenEmpty = true;
+                    } elseif ($annot instanceof Expose) {
+                        $isExpose = true;
+                        if (null !== $annot->if) {
+                            $propertyMetadata->excludeIf = $this->parseExpression('!(' . $annot->if . ')');
+                        }
+                    } elseif ($annot instanceof Exclude) {
+                        if (null !== $annot->if) {
+                            $propertyMetadata->excludeIf = $this->parseExpression($annot->if);
+                        } else {
+                            $isExclude = true;
+                        }
+                    } elseif ($annot instanceof Type) {
+                        $propertyMetadata->setType($this->typeParser->parse($annot->name));
+                    } elseif ($annot instanceof XmlElement) {
+                        $propertyMetadata->xmlAttribute = false;
+                        $propertyMetadata->xmlElementCData = $annot->cdata;
+                        $propertyMetadata->xmlNamespace = $annot->namespace;
+                    } elseif ($annot instanceof XmlList) {
+                        $propertyMetadata->xmlCollection = true;
+                        $propertyMetadata->xmlCollectionInline = $annot->inline;
+                        $propertyMetadata->xmlEntryName = $annot->entry;
+                        $propertyMetadata->xmlEntryNamespace = $annot->namespace;
+                        $propertyMetadata->xmlCollectionSkipWhenEmpty = $annot->skipWhenEmpty;
+                    } elseif ($annot instanceof XmlMap) {
+                        $propertyMetadata->xmlCollection = true;
+                        $propertyMetadata->xmlCollectionInline = $annot->inline;
+                        $propertyMetadata->xmlEntryName = $annot->entry;
+                        $propertyMetadata->xmlEntryNamespace = $annot->namespace;
+                        $propertyMetadata->xmlKeyAttribute = $annot->keyAttribute;
+                    } elseif ($annot instanceof XmlKeyValuePairs) {
+                        $propertyMetadata->xmlKeyValuePairs = true;
+                    } elseif ($annot instanceof XmlAttribute) {
+                        $propertyMetadata->xmlAttribute = true;
+                        $propertyMetadata->xmlNamespace = $annot->namespace;
+                    } elseif ($annot instanceof XmlValue) {
+                        $propertyMetadata->xmlValue = true;
+                        $propertyMetadata->xmlElementCData = $annot->cdata;
+                    } elseif ($annot instanceof AccessType) {
+                        $accessType = $annot->type;
+                    } elseif ($annot instanceof ReadOnlyProperty) {
+                        $propertyMetadata->readOnly = $annot->readOnly;
+                    } elseif ($annot instanceof Accessor) {
+                        $accessor = [$annot->getter, $annot->setter];
+                    } elseif ($annot instanceof Groups) {
+                        $propertyMetadata->groups = $annot->groups;
+                        foreach ((array) $propertyMetadata->groups as $groupName) {
+                            if (false !== strpos($groupName, ',')) {
+                                throw new InvalidMetadataException(sprintf(
+                                    'Invalid group name "%s" on "%s", did you mean to create multiple groups?',
+                                    implode(', ', $propertyMetadata->groups),
+                                    $propertyMetadata->class . '->' . $propertyMetadata->name,
+                                ));
+                            }
+                        }
+                    } elseif ($annot instanceof Inline) {
+                        $propertyMetadata->inline = true;
+                    } elseif ($annot instanceof XmlAttributeMap) {
+                        $propertyMetadata->xmlAttributeMap = true;
+                    } elseif ($annot instanceof MaxDepth) {
+                        $propertyMetadata->maxDepth = $annot->depth;
+                    }
+                }
+
+                if ($propertyMetadata->inline) {
+                    $classMetadata->isList = $classMetadata->isList || PropertyMetadata::isCollectionList($propertyMetadata->type);
+                    $classMetadata->isMap = $classMetadata->isMap || PropertyMetadata::isCollectionMap($propertyMetadata->type);
+
+                    if ($classMetadata->isMap && $classMetadata->isList) {
+                        throw new InvalidMetadataException('Can not have an inline map and and inline map on the same class');
+                    }
+                }
+
+                if (!$propertyMetadata->serializedName) {
+                    $propertyMetadata->serializedName = $this->namingStrategy->translateName($propertyMetadata);
+                }
+
+                foreach ($propertyAnnotations as $annot) {
+                    if ($annot instanceof VirtualProperty && null !== $annot->name) {
+                        $propertyMetadata->name = $annot->name;
+                    }
+                }
+
+                if (
+                    (ExclusionPolicy::NONE === $exclusionPolicy && !$isExclude)
+                    || (ExclusionPolicy::ALL === $exclusionPolicy && $isExpose)
+                ) {
+                    $propertyMetadata->setAccessor($accessType, $accessor[0], $accessor[1]);
+                    $classMetadata->addPropertyMetadata($propertyMetadata);
+                }
+            }
+        }
+
+        // if (!$configured) {
+            // return null;
+            // uncomment the above line afetr a couple of months
+        // }
+
+        return $classMetadata;
+    }
+
+    /**
+     * @return list<SerializerAttribute>
+     */
+    protected function getClassAnnotations(\ReflectionClass $class): array
+    {
+        $annotations = [];
+
+        if (PHP_VERSION_ID >= 80000) {
+            $annotations = array_map(
+                static fn (\ReflectionAttribute $attribute): object => $attribute->newInstance(),
+                $class->getAttributes(SerializerAttribute::class, \ReflectionAttribute::IS_INSTANCEOF),
+            );
+        }
+
+        if (null !== $this->reader) {
+            $annotations = array_merge($annotations, $this->reader->getClassAnnotations($class));
+        }
+
+        return $annotations;
+    }
+
+    /**
+     * @return list<SerializerAttribute>
+     */
+    protected function getMethodAnnotations(\ReflectionMethod $method): array
+    {
+        $annotations = [];
+
+        if (PHP_VERSION_ID >= 80000) {
+            $annotations = array_map(
+                static fn (\ReflectionAttribute $attribute): object => $attribute->newInstance(),
+                $method->getAttributes(SerializerAttribute::class, \ReflectionAttribute::IS_INSTANCEOF),
+            );
+        }
+
+        if (null !== $this->reader) {
+            $annotations = array_merge($annotations, $this->reader->getMethodAnnotations($method));
+        }
+
+        return $annotations;
+    }
+
+    /**
+     * @return list<SerializerAttribute>
+     */
+    protected function getPropertyAnnotations(\ReflectionProperty $property): array
+    {
+        $annotations = [];
+
+        if (PHP_VERSION_ID >= 80000) {
+            $annotations = array_map(
+                static fn (\ReflectionAttribute $attribute): object => $attribute->newInstance(),
+                $property->getAttributes(SerializerAttribute::class, \ReflectionAttribute::IS_INSTANCEOF),
+            );
+        }
+
+        if (null !== $this->reader) {
+            $annotations = array_merge($annotations, $this->reader->getPropertyAnnotations($property));
+        }
+
+        return $annotations;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver.php	(revision 8435)
@@ -0,0 +1,43 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use JMS\Serializer\Annotation\SerializerAttribute;
+
+class AttributeDriver extends AnnotationOrAttributeDriver
+{
+    /**
+     * @return list<SerializerAttribute>
+     */
+    protected function getClassAnnotations(\ReflectionClass $class): array
+    {
+        return array_map(
+            static fn (\ReflectionAttribute $attribute): object => $attribute->newInstance(),
+            $class->getAttributes(SerializerAttribute::class, \ReflectionAttribute::IS_INSTANCEOF),
+        );
+    }
+
+    /**
+     * @return list<SerializerAttribute>
+     */
+    protected function getMethodAnnotations(\ReflectionMethod $method): array
+    {
+        return array_map(
+            static fn (\ReflectionAttribute $attribute): object => $attribute->newInstance(),
+            $method->getAttributes(SerializerAttribute::class, \ReflectionAttribute::IS_INSTANCEOF),
+        );
+    }
+
+    /**
+     * @return list<SerializerAttribute>
+     */
+    protected function getPropertyAnnotations(\ReflectionProperty $property): array
+    {
+        return array_map(
+            static fn (\ReflectionAttribute $attribute): object => $attribute->newInstance(),
+            $property->getAttributes(SerializerAttribute::class, \ReflectionAttribute::IS_INSTANCEOF),
+        );
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/AttributeDriver/AttributeReader.php	(revision 8435)
@@ -0,0 +1,92 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver\AttributeDriver;
+
+use Doctrine\Common\Annotations\Reader;
+use JMS\Serializer\Annotation\SerializerAttribute;
+use ReflectionClass;
+use ReflectionMethod;
+use ReflectionProperty;
+
+/**
+ * @deprecated use {@see \JMS\Serializer\Metadata\Driver\AttributeDriver} instead
+ */
+class AttributeReader implements Reader
+{
+    /**
+     * @var Reader
+     */
+    private $reader;
+
+    public function __construct(Reader $reader)
+    {
+        $this->reader = $reader;
+    }
+
+    public function getClassAnnotations(ReflectionClass $class): array
+    {
+        $attributes = $class->getAttributes(SerializerAttribute::class, \ReflectionAttribute::IS_INSTANCEOF);
+
+        return array_merge($this->reader->getClassAnnotations($class), $this->buildAnnotations($attributes));
+    }
+
+    public function getClassAnnotation(ReflectionClass $class, $annotationName): ?object
+    {
+        $attributes = $class->getAttributes($annotationName, \ReflectionAttribute::IS_INSTANCEOF);
+
+        return $this->reader->getClassAnnotation($class, $annotationName) ?? $this->buildAnnotation($attributes);
+    }
+
+    public function getMethodAnnotations(ReflectionMethod $method): array
+    {
+        $attributes = $method->getAttributes(SerializerAttribute::class, \ReflectionAttribute::IS_INSTANCEOF);
+
+        return array_merge($this->reader->getMethodAnnotations($method), $this->buildAnnotations($attributes));
+    }
+
+    public function getMethodAnnotation(ReflectionMethod $method, $annotationName): ?object
+    {
+        $attributes = $method->getAttributes($annotationName, \ReflectionAttribute::IS_INSTANCEOF);
+
+        return $this->reader->getClassAnnotation($method, $annotationName) ?? $this->buildAnnotation($attributes);
+    }
+
+    public function getPropertyAnnotations(ReflectionProperty $property): array
+    {
+        $attributes = $property->getAttributes(SerializerAttribute::class, \ReflectionAttribute::IS_INSTANCEOF);
+
+        return array_merge($this->reader->getPropertyAnnotations($property), $this->buildAnnotations($attributes));
+    }
+
+    public function getPropertyAnnotation(ReflectionProperty $property, $annotationName): ?object
+    {
+        $attributes = $property->getAttributes($annotationName, \ReflectionAttribute::IS_INSTANCEOF);
+
+        return $this->reader->getClassAnnotation($property, $annotationName) ?? $this->buildAnnotation($attributes);
+    }
+
+    /**
+     * @param list<\ReflectionAttribute<SerializerAttribute>> $attributes
+     */
+    private function buildAnnotation(array $attributes): ?SerializerAttribute
+    {
+        if (!isset($attributes[0])) {
+            return null;
+        }
+
+        return $attributes[0]->newInstance();
+    }
+
+    /**
+     * @return list<SerializerAttribute>
+     */
+    private function buildAnnotations(array $attributes): array
+    {
+        return array_map(
+            static fn (\ReflectionAttribute $attribute): object => $attribute->newInstance(),
+            $attributes,
+        );
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DefaultValuePropertyDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DefaultValuePropertyDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DefaultValuePropertyDriver.php	(revision 8435)
@@ -0,0 +1,84 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use JMS\Serializer\Metadata\ClassMetadata as SerializerClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use Metadata\ClassMetadata;
+use Metadata\Driver\DriverInterface;
+use ReflectionClass;
+use ReflectionException;
+use ReflectionProperty;
+
+class DefaultValuePropertyDriver implements DriverInterface
+{
+    /**
+     * @var DriverInterface
+     */
+    protected $delegate;
+
+    public function __construct(DriverInterface $delegate)
+    {
+        $this->delegate = $delegate;
+    }
+
+    /**
+     * @return SerializerClassMetadata|null
+     */
+    public function loadMetadataForClass(ReflectionClass $class): ?ClassMetadata
+    {
+        $classMetadata = $this->delegate->loadMetadataForClass($class);
+
+        if (null === $classMetadata) {
+            return null;
+        }
+
+        \assert($classMetadata instanceof SerializerClassMetadata);
+
+        foreach ($classMetadata->propertyMetadata as $key => $propertyMetadata) {
+            \assert($propertyMetadata instanceof PropertyMetadata);
+            if (null !== $propertyMetadata->hasDefault) {
+                continue;
+            }
+
+            try {
+                $propertyReflection = $this->getPropertyReflection($propertyMetadata);
+                $propertyMetadata->hasDefault = false;
+                if ($propertyReflection->hasDefaultValue() && $propertyReflection->hasType()) {
+                    $propertyMetadata->hasDefault = true;
+                    $propertyMetadata->defaultValue = $propertyReflection->getDefaultValue();
+                } elseif ($propertyReflection->isPromoted()) {
+                    // need to get the parameter in the constructor to check for default values
+                    $classReflection = $this->getClassReflection($propertyMetadata);
+                    $params = $classReflection->getConstructor()->getParameters();
+                    foreach ($params as $parameter) {
+                        if ($parameter->getName() === $propertyMetadata->name) {
+                            if ($parameter->isDefaultValueAvailable()) {
+                                $propertyMetadata->hasDefault = true;
+                                $propertyMetadata->defaultValue = $parameter->getDefaultValue();
+                            }
+
+                            break;
+                        }
+                    }
+                }
+            } catch (ReflectionException $e) {
+                continue;
+            }
+        }
+
+        return $classMetadata;
+    }
+
+    private function getPropertyReflection(PropertyMetadata $propertyMetadata): ReflectionProperty
+    {
+        return new ReflectionProperty($propertyMetadata->class, $propertyMetadata->name);
+    }
+
+    private function getClassReflection(PropertyMetadata $propertyMetadata): ReflectionClass
+    {
+        return new ReflectionClass($propertyMetadata->class);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DocBlockDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DocBlockDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DocBlockDriver.php	(revision 8435)
@@ -0,0 +1,97 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use JMS\Serializer\Metadata\ClassMetadata as SerializerClassMetadata;
+use JMS\Serializer\Metadata\Driver\DocBlockDriver\DocBlockTypeResolver;
+use JMS\Serializer\Metadata\ExpressionPropertyMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Metadata\StaticPropertyMetadata;
+use JMS\Serializer\Metadata\VirtualPropertyMetadata;
+use JMS\Serializer\Type\Parser;
+use JMS\Serializer\Type\ParserInterface;
+use Metadata\ClassMetadata;
+use Metadata\Driver\DriverInterface;
+use ReflectionClass;
+use ReflectionException;
+use ReflectionMethod;
+use ReflectionProperty;
+
+class DocBlockDriver implements DriverInterface
+{
+    /**
+     * @var DriverInterface
+     */
+    protected $delegate;
+
+    /**
+     * @var ParserInterface
+     */
+    protected $typeParser;
+    /**
+     * @var DocBlockTypeResolver
+     */
+    private $docBlockTypeResolver;
+
+    public function __construct(DriverInterface $delegate, ?ParserInterface $typeParser = null)
+    {
+        $this->delegate = $delegate;
+        $this->typeParser = $typeParser ?: new Parser();
+        $this->docBlockTypeResolver = new DocBlockTypeResolver();
+    }
+
+    /**
+     * @return SerializerClassMetadata|null
+     */
+    public function loadMetadataForClass(ReflectionClass $class): ?ClassMetadata
+    {
+        $classMetadata = $this->delegate->loadMetadataForClass($class);
+
+        if (null === $classMetadata) {
+            return null;
+        }
+
+        \assert($classMetadata instanceof SerializerClassMetadata);
+
+        // We base our scan on the internal driver's property list so that we
+        // respect any internal allow/blocklist like in the AnnotationDriver
+        foreach ($classMetadata->propertyMetadata as $key => $propertyMetadata) {
+            // If the inner driver provides a type, don't guess anymore.
+            if ($propertyMetadata->type) {
+                continue;
+            }
+
+            if ($this->isNotSupportedVirtualProperty($propertyMetadata)) {
+                continue;
+            }
+
+            try {
+                if ($propertyMetadata instanceof VirtualPropertyMetadata) {
+                    $type = $this->docBlockTypeResolver->getMethodDocblockTypeHint(
+                        new ReflectionMethod($propertyMetadata->class, $propertyMetadata->getter),
+                    );
+                } else {
+                    $type = $this->docBlockTypeResolver->getPropertyDocblockTypeHint(
+                        new ReflectionProperty($propertyMetadata->class, $propertyMetadata->name),
+                    );
+                }
+
+                if ($type) {
+                    $propertyMetadata->setType($this->typeParser->parse($type));
+                }
+            } catch (ReflectionException $e) {
+                continue;
+            }
+        }
+
+        return $classMetadata;
+    }
+
+    private function isNotSupportedVirtualProperty(PropertyMetadata $propertyMetadata): bool
+    {
+        return $propertyMetadata instanceof StaticPropertyMetadata
+            || $propertyMetadata instanceof ExpressionPropertyMetadata;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DocBlockDriver/DocBlockTypeResolver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DocBlockDriver/DocBlockTypeResolver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DocBlockDriver/DocBlockTypeResolver.php	(revision 8435)
@@ -0,0 +1,432 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver\DocBlockDriver;
+
+use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode;
+use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use PHPStan\PhpDocParser\Ast\Type\UnionTypeNode;
+use PHPStan\PhpDocParser\Lexer\Lexer;
+use PHPStan\PhpDocParser\Parser\ConstExprParser;
+use PHPStan\PhpDocParser\Parser\PhpDocParser;
+use PHPStan\PhpDocParser\Parser\TokenIterator;
+use PHPStan\PhpDocParser\Parser\TypeParser;
+
+/**
+ * @internal
+ */
+final class DocBlockTypeResolver
+{
+    /** resolve single use statements */
+    private const SINGLE_USE_STATEMENTS_REGEX = '/^[^\S\r\n]*use[\s]*([^;\n]*)[\s]*;$/m';
+
+    /** resolve group use statements */
+    private const GROUP_USE_STATEMENTS_REGEX = '/^[^\S\r\n]*use[[\s]*([^;\n]*)[\s]*{([a-zA-Z0-9\s\n\r,]*)};$/m';
+    private const GLOBAL_NAMESPACE_PREFIX = '\\';
+    private const PHPSTAN_ARRAY_SHAPE = '/^([^\s]*) array{.*/m';
+    private const PHPSTAN_ARRAY_TYPE = '/^([^\s]*) array<(.*)>/m';
+
+    /**
+     * @var PhpDocParser
+     */
+    protected $phpDocParser;
+
+    /**
+     * @var Lexer
+     */
+    protected $lexer;
+
+    public function __construct()
+    {
+        $constExprParser = new ConstExprParser();
+        $typeParser = new TypeParser($constExprParser);
+
+        $this->phpDocParser = new PhpDocParser($typeParser, $constExprParser);
+        $this->lexer = new Lexer();
+    }
+
+    /**
+     * Attempts to retrieve additional type information from a PhpDoc block. Throws in case of ambiguous type
+     * information and will return null if no helpful type information could be retrieved.
+     *
+     * @param \ReflectionMethod $reflectionMethod
+     *
+     * @return string|null
+     */
+    public function getMethodDocblockTypeHint(\ReflectionMethod $reflectionMethod): ?string
+    {
+        return $this->getDocBlocTypeHint($reflectionMethod);
+    }
+
+    /**
+     * Attempts to retrieve additional type information from a PhpDoc block. Throws in case of ambiguous type
+     * information and will return null if no helpful type information could be retrieved.
+     *
+     * @param \ReflectionProperty $reflectionProperty
+     *
+     * @return string|null
+     */
+    public function getPropertyDocblockTypeHint(\ReflectionProperty $reflectionProperty): ?string
+    {
+        return $this->getDocBlocTypeHint($reflectionProperty);
+    }
+
+    /**
+     * @param \ReflectionMethod|\ReflectionProperty $reflector
+     *
+     * @return string|null
+     */
+    private function getDocBlocTypeHint($reflector): ?string
+    {
+        $types = $this->resolveTypeFromDocblock($reflector);
+
+        // The PhpDoc does not contain additional type information.
+        if (0 === count($types)) {
+            return null;
+        }
+
+        // The PhpDoc contains multiple non-null types which produces ambiguity when deserializing.
+        if (count($types) > 1) {
+            return null;
+        }
+
+        // Only one type is left, so we only need to differentiate between arrays, generics and other types.
+        $type = $types[0];
+
+        // Simple array without concrete type: array
+        if ($this->isSimpleType($type, 'array') || $this->isSimpleType($type, 'list')) {
+            return null;
+        }
+
+        // Normal array syntax: Product[] | \Foo\Bar\Product[]
+        if ($type instanceof ArrayTypeNode) {
+            $resolvedType = $this->resolveTypeFromTypeNode($type->type, $reflector);
+
+            return 'array<' . $resolvedType . '>';
+        }
+
+        // Generic array syntax: array<Product> | array<\Foo\Bar\Product> | array<int,Product>
+        if ($type instanceof GenericTypeNode) {
+            if ($this->isSimpleType($type->type, 'array')) {
+                $resolvedTypes = array_map(fn (TypeNode $node) => $this->resolveTypeFromTypeNode($node, $reflector), $type->genericTypes);
+
+                return 'array<' . implode(',', $resolvedTypes) . '>';
+            }
+
+            if ($this->isSimpleType($type->type, 'list')) {
+                $resolvedTypes = array_map(fn (TypeNode $node) => $this->resolveTypeFromTypeNode($node, $reflector), $type->genericTypes);
+
+                return 'array<int, ' . implode(',', $resolvedTypes) . '>';
+            }
+
+            throw new \InvalidArgumentException(sprintf("Can't use non-array generic type %s for collection in %s:%s", (string) $type->type, $reflector->getDeclaringClass()->getName(), $reflector->getName()));
+        }
+
+        // Primitives and class names: Collection | \Foo\Bar\Product | string
+        return $this->resolveTypeFromTypeNode($type, $reflector);
+    }
+
+    /**
+     * Returns a flat list of types of the given var tags. Union types are flattened as well.
+     *
+     * @param ReturnTagValueNode[]|VarTagValueNode[] $tagValues
+     *
+     * @return TypeNode[]
+     */
+    private function flattenTagValueTypes(array $tagValues): array
+    {
+        if ([] === $tagValues) {
+            return [];
+        }
+
+        return array_merge(...array_map(static function ($node) {
+            if ($node->type instanceof UnionTypeNode) {
+                return $node->type->types;
+            }
+
+            return [$node->type];
+        }, $tagValues));
+    }
+
+    /**
+     * Returns a flat list of types of the given param tags. Union types are flattened as well.
+     *
+     * @param ParamTagValueNode[] $varTagValues
+     *
+     * @return TypeNode[]
+     */
+    private function flattenParamTagValueTypes(string $parameterName, array $varTagValues): array
+    {
+        if ([] === $varTagValues) {
+            return [];
+        }
+
+        $parameterName = sprintf('$%s', $parameterName);
+        $types = [];
+        foreach ($varTagValues as $node) {
+            if ($parameterName !== $node->parameterName) {
+                continue;
+            }
+
+            $types[] = $node->type;
+        }
+
+        return $types;
+    }
+
+    /**
+     * Filters the null type from the given types array. If no null type is found, the array is returned unchanged.
+     *
+     * @param TypeNode[] $types
+     *
+     * @return TypeNode[]
+     */
+    private function filterNullFromTypes(array $types): array
+    {
+        return array_values(array_filter(array_map(fn (TypeNode $node) => $this->isNullType($node) ? null : $node, $types)));
+    }
+
+    /**
+     * Determines if the given type is a null type.
+     *
+     * @param TypeNode $typeNode
+     *
+     * @return bool
+     */
+    private function isNullType(TypeNode $typeNode): bool
+    {
+        return $this->isSimpleType($typeNode, 'null');
+    }
+
+    /**
+     * Determines if the given node represents a simple type.
+     *
+     * @param TypeNode $typeNode
+     * @param string $simpleType
+     *
+     * @return bool
+     */
+    private function isSimpleType(TypeNode $typeNode, string $simpleType): bool
+    {
+        return $typeNode instanceof IdentifierTypeNode && $typeNode->name === $simpleType;
+    }
+
+    /**
+     * Attempts to resolve the fully qualified type from the given node. If the node is not suitable for type
+     * retrieval, an exception is thrown.
+     *
+     * @param TypeNode $typeNode
+     * @param \ReflectionMethod|\ReflectionProperty $reflector
+     *
+     * @return string
+     *
+     * @throws \InvalidArgumentException
+     */
+    private function resolveTypeFromTypeNode(TypeNode $typeNode, $reflector): string
+    {
+        if (!($typeNode instanceof IdentifierTypeNode)) {
+            throw new \InvalidArgumentException(sprintf("Can't use unsupported type %s for collection in %s:%s", (string) $typeNode, $reflector->getDeclaringClass()->getName(), $reflector->getName()));
+        }
+
+        return $this->resolveType($typeNode->name, $reflector);
+    }
+
+    /**
+     * @param \ReflectionMethod|\ReflectionProperty $reflector
+     */
+    private function expandClassNameUsingUseStatements(string $typeHint, \ReflectionClass $declaringClass, $reflector): string
+    {
+        $expandedClassName = $declaringClass->getNamespaceName() . '\\' . $typeHint;
+        if ($this->isClassOrInterface($expandedClassName)) {
+            return $expandedClassName;
+        }
+
+        $classContents = file_get_contents($declaringClass->getFileName());
+        $foundUseStatements = $this->gatherGroupUseStatements($classContents);
+        $foundUseStatements = array_merge($this->gatherSingleUseStatements($classContents), $foundUseStatements);
+
+        foreach ($foundUseStatements as $statementClassName) {
+            if ($alias = explode('as', $statementClassName)) {
+                if (array_key_exists(1, $alias) && trim($alias[1]) === $typeHint) {
+                    return trim($alias[0]);
+                }
+            }
+
+            if ($this->endsWith($statementClassName, $typeHint)) {
+                return $statementClassName;
+            }
+        }
+
+        if ($declaringClass->getDocComment()) {
+            $phpstanArrayType = $this->getPhpstanType($declaringClass, $typeHint, $reflector);
+
+            if ($phpstanArrayType) {
+                return $phpstanArrayType;
+            }
+        }
+
+        if ($this->isClassOrInterface($typeHint)) {
+            return $typeHint;
+        }
+
+        throw new \InvalidArgumentException(sprintf("Can't use incorrect type %s for collection in %s:%s", $typeHint, $declaringClass->getName(), $reflector->getName()));
+    }
+
+    private function endsWith(string $statementClassToCheck, string $typeHintToSearchFor): bool
+    {
+        $typeHintToSearchFor = '\\' . $typeHintToSearchFor;
+
+        return substr($statementClassToCheck, -strlen($typeHintToSearchFor)) === $typeHintToSearchFor;
+    }
+
+    private function isPrimitiveType(string $type): bool
+    {
+        return in_array($type, ['int', 'integer', 'float', 'bool', 'boolean', 'double', 'string']);
+    }
+
+    private function hasGlobalNamespacePrefix(string $typeHint): bool
+    {
+        return self::GLOBAL_NAMESPACE_PREFIX === $typeHint[0];
+    }
+
+    private function gatherGroupUseStatements(string $classContents): array
+    {
+        $foundUseStatements = [];
+        preg_match_all(self::GROUP_USE_STATEMENTS_REGEX, $classContents, $foundGroupUseStatements);
+        for ($useStatementIndex = 0; $useStatementIndex < count($foundGroupUseStatements[0]); $useStatementIndex++) {
+            foreach (explode(',', $foundGroupUseStatements[2][$useStatementIndex]) as $singleUseStatement) {
+                $foundUseStatements[] = trim($foundGroupUseStatements[1][$useStatementIndex]) . trim($singleUseStatement);
+            }
+        }
+
+        return $foundUseStatements;
+    }
+
+    private function gatherSingleUseStatements(string $classContents): array
+    {
+        $foundUseStatements = [];
+        preg_match_all(self::SINGLE_USE_STATEMENTS_REGEX, $classContents, $foundSingleUseStatements);
+        for ($useStatementIndex = 0; $useStatementIndex < count($foundSingleUseStatements[0]); $useStatementIndex++) {
+            $foundUseStatements[] = trim($foundSingleUseStatements[1][$useStatementIndex]);
+        }
+
+        return $foundUseStatements;
+    }
+
+    /**
+     * @param \ReflectionMethod|\ReflectionProperty $reflector
+     */
+    private function getDeclaringClassOrTrait($reflector): \ReflectionClass
+    {
+        foreach ($reflector->getDeclaringClass()->getTraits() as $trait) {
+            foreach ($trait->getProperties() as $traitProperty) {
+                if ($traitProperty->getName() === $reflector->getName()) {
+                    return $this->getDeclaringClassOrTrait($traitProperty);
+                }
+            }
+        }
+
+        return $reflector->getDeclaringClass();
+    }
+
+    /**
+     * @param \ReflectionMethod|\ReflectionProperty $reflector
+     */
+    private function resolveType(string $typeHint, $reflector): string
+    {
+        if (!$this->hasGlobalNamespacePrefix($typeHint) && !$this->isPrimitiveType($typeHint)) {
+            $typeHint = $this->expandClassNameUsingUseStatements($typeHint, $this->getDeclaringClassOrTrait($reflector), $reflector);
+        }
+
+        return ltrim($typeHint, '\\');
+    }
+
+    private function isClassOrInterface(string $typeHint): bool
+    {
+        return class_exists($typeHint) || interface_exists($typeHint);
+    }
+
+    /**
+     * @param \ReflectionMethod|\ReflectionProperty $reflector
+     */
+    private function resolveTypeFromDocblock($reflector): array
+    {
+        $docComment = $reflector->getDocComment();
+        if (!$docComment && PHP_VERSION_ID >= 80000 && $reflector instanceof \ReflectionProperty && $reflector->isPromoted()) {
+            $constructor = $reflector->getDeclaringClass()->getConstructor();
+            if (!$constructor) {
+                return [];
+            }
+
+            $docComment = $constructor->getDocComment();
+
+            if (!$docComment) {
+                return [];
+            }
+
+            $tokens = $this->lexer->tokenize($docComment);
+            $phpDocNode = $this->phpDocParser->parse(new TokenIterator($tokens));
+
+            return $this->flattenParamTagValueTypes($reflector->getName(), $phpDocNode->getParamTagValues());
+        }
+
+        if (!$docComment) {
+            return [];
+        }
+
+        // First we tokenize the PhpDoc comment and parse the tokens into a PhpDocNode.
+        $tokens = $this->lexer->tokenize($docComment);
+        $phpDocNode = $this->phpDocParser->parse(new TokenIterator($tokens));
+
+        if ($reflector instanceof \ReflectionProperty) {
+            // Then we retrieve a flattened list of annotated types excluding null.
+            $tagValues = $phpDocNode->getVarTagValues();
+        } else {
+            // Then we retrieve a flattened list of annotated types including null.
+            $tagValues = $phpDocNode->getReturnTagValues();
+        }
+
+        $types = $this->flattenTagValueTypes($tagValues);
+
+        return $this->filterNullFromTypes($types);
+    }
+
+    /**
+     * @param \ReflectionMethod|\ReflectionProperty $reflector
+     */
+    private function getPhpstanType(\ReflectionClass $declaringClass, string $typeHint, $reflector): ?string
+    {
+        $tokens = $this->lexer->tokenize($declaringClass->getDocComment());
+        $phpDocNode = $this->phpDocParser->parse(new TokenIterator($tokens));
+        $self = $this;
+
+        foreach ($phpDocNode->children as $node) {
+            if ($node instanceof PhpDocTagNode && '@phpstan-type' === $node->name) {
+                $phpstanType = (string) $node->value;
+                preg_match_all(self::PHPSTAN_ARRAY_SHAPE, $phpstanType, $foundPhpstanArray);
+                if (isset($foundPhpstanArray[1][0]) && $foundPhpstanArray[1][0] === $typeHint) {
+                    return 'array';
+                }
+
+                preg_match_all(self::PHPSTAN_ARRAY_TYPE, $phpstanType, $foundPhpstanArray);
+                if (isset($foundPhpstanArray[2][0]) && $foundPhpstanArray[1][0] === $typeHint) {
+                    $types = explode(',', $foundPhpstanArray[2][0]);
+
+                    return sprintf('array<%s>', implode(
+                        ',',
+                        array_map(static fn (string $type) => $self->resolveType(trim($type), $reflector), $types),
+                    ));
+                }
+            }
+        }
+
+        return null;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DoctrinePHPCRTypeDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DoctrinePHPCRTypeDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DoctrinePHPCRTypeDriver.php	(revision 8435)
@@ -0,0 +1,64 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use Doctrine\ODM\PHPCR\Mapping\ClassMetadata as PHPCRClassMetadata;
+use Doctrine\Persistence\Mapping\ClassMetadata as DoctrineClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+
+/**
+ * This class decorates any other driver. If the inner driver does not provide a
+ * a property type, the decorator will guess based on Doctrine 2 metadata.
+ */
+class DoctrinePHPCRTypeDriver extends AbstractDoctrineTypeDriver
+{
+    /**
+     * @param PHPCRClassMetadata $doctrineMetadata
+     * @param PropertyMetadata $propertyMetadata
+     */
+    protected function hideProperty(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata): bool
+    {
+        return 'lazyPropertiesDefaults' === $propertyMetadata->name
+            || $doctrineMetadata->parentMapping === $propertyMetadata->name
+            || $doctrineMetadata->node === $propertyMetadata->name;
+    }
+
+    /**
+     * @param PHPCRClassMetadata $doctrineMetadata
+     * @param PropertyMetadata $propertyMetadata
+     */
+    protected function setPropertyType(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata): void
+    {
+        $propertyName = $propertyMetadata->name;
+        if (
+            $doctrineMetadata->hasField($propertyName)
+            && ($typeOfFiled = $doctrineMetadata->getTypeOfField($propertyName))
+            && ($fieldType = $this->normalizeFieldType($typeOfFiled))
+        ) {
+            $field = $doctrineMetadata->getFieldMapping($propertyName);
+            if (!empty($field['multivalue'])) {
+                $fieldType = 'array';
+            }
+
+            $propertyMetadata->setType($this->typeParser->parse($fieldType));
+        } elseif ($doctrineMetadata->hasAssociation($propertyName)) {
+            try {
+                $targetEntity = $doctrineMetadata->getAssociationTargetClass($propertyName);
+            } catch (\Throwable $e) {
+                return;
+            }
+
+            if (null === $this->tryLoadingDoctrineMetadata($targetEntity)) {
+                return;
+            }
+
+            if (!$doctrineMetadata->isSingleValuedAssociation($propertyName)) {
+                $targetEntity = sprintf('ArrayCollection<%s>', $targetEntity);
+            }
+
+            $propertyMetadata->setType($this->typeParser->parse($targetEntity));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DoctrineTypeDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DoctrineTypeDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/DoctrineTypeDriver.php	(revision 8435)
@@ -0,0 +1,65 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use Doctrine\ORM\Mapping\ClassMetadataInfo;
+use Doctrine\Persistence\Mapping\ClassMetadata as DoctrineClassMetadata;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+
+/**
+ * This class decorates any other driver. If the inner driver does not provide a
+ * a property type, the decorator will guess based on Doctrine 2 metadata.
+ */
+class DoctrineTypeDriver extends AbstractDoctrineTypeDriver
+{
+    /**
+     * @param ClassMetadataInfo $doctrineMetadata
+     * @param ClassMetadata $classMetadata
+     */
+    protected function setDiscriminator(DoctrineClassMetadata $doctrineMetadata, ClassMetadata $classMetadata): void
+    {
+        if (
+            empty($classMetadata->discriminatorMap) && !$classMetadata->discriminatorDisabled
+            && !empty($doctrineMetadata->discriminatorMap) && $doctrineMetadata->isRootEntity()
+        ) {
+            $classMetadata->setDiscriminator(
+                $doctrineMetadata->discriminatorColumn['name'],
+                $doctrineMetadata->discriminatorMap,
+            );
+        }
+    }
+
+    protected function setPropertyType(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata): void
+    {
+        $propertyName = $propertyMetadata->name;
+        if (
+            $doctrineMetadata->hasField($propertyName)
+            && ($typeOfFiled = $doctrineMetadata->getTypeOfField($propertyName))
+            && ($fieldType = $this->normalizeFieldType($typeOfFiled))
+        ) {
+            $propertyMetadata->setType($this->typeParser->parse($fieldType));
+        } elseif ($doctrineMetadata->hasAssociation($propertyName)) {
+            $targetEntity = $doctrineMetadata->getAssociationTargetClass($propertyName);
+
+            if (null === $targetMetadata = $this->tryLoadingDoctrineMetadata($targetEntity)) {
+                return;
+            }
+
+            // For inheritance schemes, we cannot add any type as we would only add the super-type of the hierarchy.
+            // On serialization, this would lead to only the supertype being serialized, and properties of subtypes
+            // being ignored.
+            if ($targetMetadata instanceof ClassMetadataInfo && !$targetMetadata->isInheritanceTypeNone()) {
+                return;
+            }
+
+            if (!$doctrineMetadata->isSingleValuedAssociation($propertyName)) {
+                $targetEntity = sprintf('ArrayCollection<%s>', $targetEntity);
+            }
+
+            $propertyMetadata->setType($this->typeParser->parse($targetEntity));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/EnumPropertiesDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/EnumPropertiesDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/EnumPropertiesDriver.php	(revision 8435)
@@ -0,0 +1,84 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use JMS\Serializer\Metadata\ClassMetadata as SerializerClassMetadata;
+use JMS\Serializer\Metadata\ExpressionPropertyMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Metadata\StaticPropertyMetadata;
+use JMS\Serializer\Metadata\VirtualPropertyMetadata;
+use Metadata\ClassMetadata;
+use Metadata\Driver\DriverInterface;
+use ReflectionClass;
+use ReflectionException;
+use ReflectionProperty;
+
+class EnumPropertiesDriver implements DriverInterface
+{
+    /**
+     * @var DriverInterface
+     */
+    protected $delegate;
+
+    public function __construct(DriverInterface $delegate)
+    {
+        $this->delegate = $delegate;
+    }
+
+    public function loadMetadataForClass(ReflectionClass $class): ?ClassMetadata
+    {
+        $classMetadata = $this->delegate->loadMetadataForClass($class);
+
+        if (null === $classMetadata) {
+            return null;
+        }
+
+        \assert($classMetadata instanceof SerializerClassMetadata);
+
+        // We base our scan on the internal driver's property list so that we
+        // respect any internal allow/blocklist like in the AnnotationDriver
+        foreach ($classMetadata->propertyMetadata as $propertyMetadata) {
+            // If the inner driver provides a type, don't guess anymore.
+            if ($propertyMetadata->type || $this->isVirtualProperty($propertyMetadata)) {
+                continue;
+            }
+
+            try {
+                $propertyReflection = $this->getReflection($propertyMetadata);
+                if ($enum = $this->getEnumReflection($propertyReflection)) {
+                    $serializerType = ['name' => 'enum', 'params' => [$enum->getName(), $enum->isBacked() ? 'value' : 'name']];
+                    $propertyMetadata->setType($serializerType);
+                }
+            } catch (ReflectionException $e) {
+                continue;
+            }
+        }
+
+        return $classMetadata;
+    }
+
+    private function isVirtualProperty(PropertyMetadata $propertyMetadata): bool
+    {
+        return $propertyMetadata instanceof VirtualPropertyMetadata
+            || $propertyMetadata instanceof StaticPropertyMetadata
+            || $propertyMetadata instanceof ExpressionPropertyMetadata;
+    }
+
+    private function getReflection(PropertyMetadata $propertyMetadata): ReflectionProperty
+    {
+        return new ReflectionProperty($propertyMetadata->class, $propertyMetadata->name);
+    }
+
+    private function getEnumReflection(ReflectionProperty $propertyReflection): ?\ReflectionEnum
+    {
+        $reflectionType = $propertyReflection->getType();
+
+        if (!($reflectionType instanceof \ReflectionNamedType)) {
+            return null;
+        }
+
+        return enum_exists($reflectionType->getName()) ? new \ReflectionEnum($reflectionType->getName()) : null;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/ExpressionMetadataTrait.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/ExpressionMetadataTrait.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/ExpressionMetadataTrait.php	(revision 8435)
@@ -0,0 +1,35 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use JMS\Serializer\Exception\InvalidMetadataException;
+use JMS\Serializer\Expression\CompilableExpressionEvaluatorInterface;
+use JMS\Serializer\Expression\Expression;
+
+trait ExpressionMetadataTrait
+{
+    /**
+     * @var CompilableExpressionEvaluatorInterface
+     */
+    private $expressionEvaluator;
+
+    /**
+     * @return Expression|string
+     *
+     * @throws InvalidMetadataException
+     */
+    private function parseExpression(string $expression, array $names = [])
+    {
+        if (null === $this->expressionEvaluator) {
+            return $expression;
+        }
+
+        try {
+            return $this->expressionEvaluator->parse($expression, array_merge(['context', 'property_metadata', 'object'], $names));
+        } catch (\LogicException $e) {
+            throw new InvalidMetadataException(sprintf('Can not parse the expression "%s"', $expression), 0, $e);
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/NullDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/NullDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/NullDriver.php	(revision 8435)
@@ -0,0 +1,49 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Naming\PropertyNamingStrategyInterface;
+use Metadata\ClassMetadata as BaseClassMetadata;
+use Metadata\Driver\DriverInterface;
+
+class NullDriver implements DriverInterface
+{
+    /**
+     * @var PropertyNamingStrategyInterface
+     */
+    private $namingStrategy;
+
+    public function __construct(PropertyNamingStrategyInterface $namingStrategy)
+    {
+        $this->namingStrategy = $namingStrategy;
+    }
+
+    public function loadMetadataForClass(\ReflectionClass $class): ?BaseClassMetadata
+    {
+        $classMetadata = new ClassMetadata($name = $class->name);
+        $fileResource =  $class->getFilename();
+        if (false !== $fileResource) {
+            $classMetadata->fileResources[] = $fileResource;
+        }
+
+        foreach ($class->getProperties() as $property) {
+            if ($property->class !== $name || (isset($property->info) && $property->info['class'] !== $name)) {
+                continue;
+            }
+
+            $propertyMetadata = new PropertyMetadata($name, $property->getName());
+
+            if (!$propertyMetadata->serializedName) {
+                $propertyMetadata->serializedName = $this->namingStrategy->translateName($propertyMetadata);
+            }
+
+            $classMetadata->addPropertyMetadata($propertyMetadata);
+        }
+
+        return $classMetadata;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/TypedPropertiesDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/TypedPropertiesDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/TypedPropertiesDriver.php	(revision 8435)
@@ -0,0 +1,138 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use JMS\Serializer\Metadata\ClassMetadata as SerializerClassMetadata;
+use JMS\Serializer\Metadata\ExpressionPropertyMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Metadata\StaticPropertyMetadata;
+use JMS\Serializer\Metadata\VirtualPropertyMetadata;
+use JMS\Serializer\Type\Parser;
+use JMS\Serializer\Type\ParserInterface;
+use Metadata\ClassMetadata;
+use Metadata\Driver\DriverInterface;
+use ReflectionClass;
+use ReflectionException;
+use ReflectionMethod;
+use ReflectionNamedType;
+use ReflectionProperty;
+use ReflectionType;
+
+class TypedPropertiesDriver implements DriverInterface
+{
+    /**
+     * @var DriverInterface
+     */
+    protected $delegate;
+
+    /**
+     * @var ParserInterface
+     */
+    protected $typeParser;
+
+    /**
+     * @var string[]
+     */
+    private $allowList;
+
+    /**
+     * @param string[] $allowList
+     */
+    public function __construct(DriverInterface $delegate, ?ParserInterface $typeParser = null, array $allowList = [])
+    {
+        $this->delegate = $delegate;
+        $this->typeParser = $typeParser ?: new Parser();
+        $this->allowList = array_merge($allowList, $this->getDefaultWhiteList());
+    }
+
+    private function getDefaultWhiteList(): array
+    {
+        return [
+            'int',
+            'float',
+            'bool',
+            'boolean',
+            'string',
+            'double',
+            'iterable',
+            'resource',
+        ];
+    }
+
+    /**
+     * @return SerializerClassMetadata|null
+     */
+    public function loadMetadataForClass(ReflectionClass $class): ?ClassMetadata
+    {
+        $classMetadata = $this->delegate->loadMetadataForClass($class);
+
+        if (null === $classMetadata) {
+            return null;
+        }
+
+        \assert($classMetadata instanceof SerializerClassMetadata);
+
+        // We base our scan on the internal driver's property list so that we
+        // respect any internal allow/blocklist like in the AnnotationDriver
+        foreach ($classMetadata->propertyMetadata as $propertyMetadata) {
+            // If the inner driver provides a type, don't guess anymore.
+            if ($propertyMetadata->type) {
+                continue;
+            }
+
+            try {
+                $reflectionType = $this->getReflectionType($propertyMetadata);
+
+                if ($this->shouldTypeHint($reflectionType)) {
+                    $type = $reflectionType->getName();
+
+                    $propertyMetadata->setType($this->typeParser->parse($type));
+                }
+            } catch (ReflectionException $e) {
+                continue;
+            }
+        }
+
+        return $classMetadata;
+    }
+
+    private function getReflectionType(PropertyMetadata $propertyMetadata): ?ReflectionType
+    {
+        if ($this->isNotSupportedVirtualProperty($propertyMetadata)) {
+            return null;
+        }
+
+        if ($propertyMetadata instanceof VirtualPropertyMetadata) {
+            return (new ReflectionMethod($propertyMetadata->class, $propertyMetadata->getter))
+                ->getReturnType();
+        }
+
+        return (new ReflectionProperty($propertyMetadata->class, $propertyMetadata->name))
+            ->getType();
+    }
+
+    private function isNotSupportedVirtualProperty(PropertyMetadata $propertyMetadata): bool
+    {
+        return $propertyMetadata instanceof StaticPropertyMetadata
+            || $propertyMetadata instanceof ExpressionPropertyMetadata;
+    }
+
+    /**
+     * @phpstan-assert-if-true \ReflectionNamedType $reflectionType
+     */
+    private function shouldTypeHint(?ReflectionType $reflectionType): bool
+    {
+        if (!$reflectionType instanceof ReflectionNamedType) {
+            return false;
+        }
+
+        if (in_array($reflectionType->getName(), $this->allowList, true)) {
+            return true;
+        }
+
+        return class_exists($reflectionType->getName())
+            || interface_exists($reflectionType->getName());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/XmlDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/XmlDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/XmlDriver.php	(revision 8435)
@@ -0,0 +1,404 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use JMS\Serializer\Annotation\ExclusionPolicy;
+use JMS\Serializer\Exception\InvalidMetadataException;
+use JMS\Serializer\Exception\XmlErrorException;
+use JMS\Serializer\Expression\CompilableExpressionEvaluatorInterface;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\ExpressionPropertyMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Metadata\VirtualPropertyMetadata;
+use JMS\Serializer\Naming\PropertyNamingStrategyInterface;
+use JMS\Serializer\Type\Parser;
+use JMS\Serializer\Type\ParserInterface;
+use Metadata\ClassMetadata as BaseClassMetadata;
+use Metadata\Driver\AbstractFileDriver;
+use Metadata\Driver\FileLocatorInterface;
+use Metadata\MethodMetadata;
+
+/**
+ * @method ClassMetadata|null loadMetadataForClass(\ReflectionClass $class)
+ */
+class XmlDriver extends AbstractFileDriver
+{
+    use ExpressionMetadataTrait;
+
+    /**
+     * @var ParserInterface
+     */
+    private $typeParser;
+    /**
+     * @var PropertyNamingStrategyInterface
+     */
+    private $namingStrategy;
+
+    public function __construct(FileLocatorInterface $locator, PropertyNamingStrategyInterface $namingStrategy, ?ParserInterface $typeParser = null, ?CompilableExpressionEvaluatorInterface $expressionEvaluator = null)
+    {
+        parent::__construct($locator);
+
+        $this->typeParser = $typeParser ?? new Parser();
+        $this->namingStrategy = $namingStrategy;
+        $this->expressionEvaluator = $expressionEvaluator;
+    }
+
+    protected function loadMetadataFromFile(\ReflectionClass $class, string $path): ?BaseClassMetadata
+    {
+        $previous = libxml_use_internal_errors(true);
+        libxml_clear_errors();
+
+        $elem = simplexml_load_file($path);
+        libxml_use_internal_errors($previous);
+
+        if (false === $elem) {
+            throw new InvalidMetadataException('Invalid XML content for metadata', 0, new XmlErrorException(libxml_get_last_error()));
+        }
+
+        $metadata = new ClassMetadata($name = $class->name);
+        if (!$elems = $elem->xpath("./class[@name = '" . $name . "']")) {
+            throw new InvalidMetadataException(sprintf('Could not find class %s inside XML element.', $name));
+        }
+
+        $elem = reset($elems);
+
+        $metadata->fileResources[] = $path;
+        $fileResource =  $class->getFilename();
+        if (false !== $fileResource) {
+            $metadata->fileResources[] = $fileResource;
+        }
+
+        $exclusionPolicy = strtoupper((string) $elem->attributes()->{'exclusion-policy'}) ?: 'NONE';
+        $exclude = $elem->attributes()->exclude;
+        $excludeAll = null !== $exclude ? 'true' === strtolower((string) $exclude) : false;
+
+        if (null !== $excludeIf = $elem->attributes()->{'exclude-if'}) {
+            $metadata->excludeIf = $this->parseExpression((string) $excludeIf);
+        }
+
+        $classAccessType = (string) ($elem->attributes()->{'access-type'} ?: PropertyMetadata::ACCESS_TYPE_PROPERTY);
+
+        $propertiesMetadata = [];
+        $propertiesNodes = [];
+
+        if (null !== $accessorOrder = $elem->attributes()->{'accessor-order'}) {
+            $metadata->setAccessorOrder((string) $accessorOrder, preg_split('/\s*,\s*/', (string) $elem->attributes()->{'custom-accessor-order'}));
+        }
+
+        if (null !== $xmlRootName = $elem->attributes()->{'xml-root-name'}) {
+            $metadata->xmlRootName = (string) $xmlRootName;
+        }
+
+        if (null !== $xmlRootNamespace = $elem->attributes()->{'xml-root-namespace'}) {
+            $metadata->xmlRootNamespace = (string) $xmlRootNamespace;
+        }
+
+        if (null !== $xmlRootPrefix = $elem->attributes()->{'xml-root-prefix'}) {
+            $metadata->xmlRootPrefix = (string) $xmlRootPrefix;
+        }
+
+        $readOnlyClass = 'true' === strtolower((string) $elem->attributes()->{'read-only'});
+
+        $discriminatorFieldName = (string) $elem->attributes()->{'discriminator-field-name'};
+        $discriminatorMap = [];
+        foreach ($elem->xpath('./discriminator-class') as $entry) {
+            if (!isset($entry->attributes()->value)) {
+                throw new InvalidMetadataException('Each discriminator-class element must have a "value" attribute.');
+            }
+
+            $discriminatorMap[(string) $entry->attributes()->value] = (string) $entry;
+        }
+
+        if ('true' === (string) $elem->attributes()->{'discriminator-disabled'}) {
+            $metadata->discriminatorDisabled = true;
+        } elseif (!empty($discriminatorFieldName) || !empty($discriminatorMap)) {
+            $discriminatorGroups = [];
+            foreach ($elem->xpath('./discriminator-groups/group') as $entry) {
+                $discriminatorGroups[] = (string) $entry;
+            }
+
+            $metadata->setDiscriminator($discriminatorFieldName, $discriminatorMap, $discriminatorGroups);
+        }
+
+        foreach ($elem->xpath('./xml-namespace') as $xmlNamespace) {
+            if (!isset($xmlNamespace->attributes()->uri)) {
+                throw new InvalidMetadataException('The prefix attribute must be set for all xml-namespace elements.');
+            }
+
+            if (isset($xmlNamespace->attributes()->prefix)) {
+                $prefix = (string) $xmlNamespace->attributes()->prefix;
+            } else {
+                $prefix = null;
+            }
+
+            $metadata->registerNamespace((string) $xmlNamespace->attributes()->uri, $prefix);
+        }
+
+        foreach ($elem->xpath('./xml-discriminator') as $xmlDiscriminator) {
+            if (isset($xmlDiscriminator->attributes()->attribute)) {
+                $metadata->xmlDiscriminatorAttribute = 'true' === (string) $xmlDiscriminator->attributes()->attribute;
+            }
+
+            if (isset($xmlDiscriminator->attributes()->cdata)) {
+                $metadata->xmlDiscriminatorCData = 'true' === (string) $xmlDiscriminator->attributes()->cdata;
+            }
+
+            if (isset($xmlDiscriminator->attributes()->namespace)) {
+                $metadata->xmlDiscriminatorNamespace = (string) $xmlDiscriminator->attributes()->namespace;
+            }
+        }
+
+        foreach ($elem->xpath('./virtual-property') as $method) {
+            if (isset($method->attributes()->expression)) {
+                $virtualPropertyMetadata = new ExpressionPropertyMetadata(
+                    $name,
+                    (string) $method->attributes()->name,
+                    $this->parseExpression((string) $method->attributes()->expression),
+                );
+            } else {
+                if (!isset($method->attributes()->method)) {
+                    throw new InvalidMetadataException('The method attribute must be set for all virtual-property elements.');
+                }
+
+                $virtualPropertyMetadata = new VirtualPropertyMetadata($name, (string) $method->attributes()->method);
+            }
+
+            $propertiesMetadata[] = $virtualPropertyMetadata;
+            $propertiesNodes[] = $method;
+        }
+
+        if (!$excludeAll) {
+            foreach ($class->getProperties() as $property) {
+                if ($property->class !== $name || (isset($property->info) && $property->info['class'] !== $name)) {
+                    continue;
+                }
+
+                $pName = $property->getName();
+                $propertiesMetadata[] = new PropertyMetadata($name, $pName);
+
+                $pElems = $elem->xpath("./property[@name = '" . $pName . "']");
+                $propertiesNodes[] = $pElems ? reset($pElems) : null;
+            }
+
+            foreach ($propertiesMetadata as $propertyKey => $pMetadata) {
+                $isExclude = false;
+                $isExpose = $pMetadata instanceof VirtualPropertyMetadata
+                    || $pMetadata instanceof ExpressionPropertyMetadata
+                    || isset($propertiesNodes[$propertyKey]);
+
+                $pElem = $propertiesNodes[$propertyKey];
+                if (!empty($pElem)) {
+                    if (null !== $exclude = $pElem->attributes()->exclude) {
+                        $isExclude = 'true' === strtolower((string) $exclude);
+                    }
+
+                    if ($isExclude) {
+                        continue;
+                    }
+
+                    if (null !== $expose = $pElem->attributes()->expose) {
+                        $isExpose = 'true' === strtolower((string) $expose);
+                    }
+
+                    if (null !== $excludeIf = $pElem->attributes()->{'exclude-if'}) {
+                        $pMetadata->excludeIf = $this->parseExpression((string) $excludeIf);
+                    }
+
+                    if (null !== $skip = $pElem->attributes()->{'skip-when-empty'}) {
+                        $pMetadata->skipWhenEmpty = 'true' === strtolower((string) $skip);
+                    }
+
+                    if (null !== $excludeIf = $pElem->attributes()->{'expose-if'}) {
+                        $pMetadata->excludeIf = $this->parseExpression('!(' . (string) $excludeIf . ')');
+                        $isExpose = true;
+                    }
+
+                    if (null !== $version = $pElem->attributes()->{'since-version'}) {
+                        $pMetadata->sinceVersion = (string) $version;
+                    }
+
+                    if (null !== $version = $pElem->attributes()->{'until-version'}) {
+                        $pMetadata->untilVersion = (string) $version;
+                    }
+
+                    if (null !== $serializedName = $pElem->attributes()->{'serialized-name'}) {
+                        $pMetadata->serializedName = (string) $serializedName;
+                    }
+
+                    if (null !== $type = $pElem->attributes()->type) {
+                        $pMetadata->setType($this->typeParser->parse((string) $type));
+                    } elseif (isset($pElem->type)) {
+                        $pMetadata->setType($this->typeParser->parse((string) $pElem->type));
+                    }
+
+                    if (null !== $groups = $pElem->attributes()->groups) {
+                        $pMetadata->groups = preg_split('/\s*,\s*/', trim((string) $groups));
+                    } elseif (isset($pElem->groups)) {
+                        $pMetadata->groups = (array) $pElem->groups->value;
+                    }
+
+                    if (isset($pElem->{'xml-list'})) {
+                        $pMetadata->xmlCollection = true;
+
+                        $colConfig = $pElem->{'xml-list'};
+                        if (isset($colConfig->attributes()->inline)) {
+                            $pMetadata->xmlCollectionInline = 'true' === (string) $colConfig->attributes()->inline;
+                        }
+
+                        if (isset($colConfig->attributes()->{'entry-name'})) {
+                            $pMetadata->xmlEntryName = (string) $colConfig->attributes()->{'entry-name'};
+                        }
+
+                        if (isset($colConfig->attributes()->{'skip-when-empty'})) {
+                            $pMetadata->xmlCollectionSkipWhenEmpty = 'true' === (string) $colConfig->attributes()->{'skip-when-empty'};
+                        } else {
+                            $pMetadata->xmlCollectionSkipWhenEmpty = true;
+                        }
+
+                        if (isset($colConfig->attributes()->namespace)) {
+                            $pMetadata->xmlEntryNamespace = (string) $colConfig->attributes()->namespace;
+                        }
+                    }
+
+                    if (isset($pElem->{'xml-map'})) {
+                        $pMetadata->xmlCollection = true;
+
+                        $colConfig = $pElem->{'xml-map'};
+                        if (isset($colConfig->attributes()->inline)) {
+                            $pMetadata->xmlCollectionInline = 'true' === (string) $colConfig->attributes()->inline;
+                        }
+
+                        if (isset($colConfig->attributes()->{'entry-name'})) {
+                            $pMetadata->xmlEntryName = (string) $colConfig->attributes()->{'entry-name'};
+                        }
+
+                        if (isset($colConfig->attributes()->namespace)) {
+                            $pMetadata->xmlEntryNamespace = (string) $colConfig->attributes()->namespace;
+                        }
+
+                        if (isset($colConfig->attributes()->{'key-attribute-name'})) {
+                            $pMetadata->xmlKeyAttribute = (string) $colConfig->attributes()->{'key-attribute-name'};
+                        }
+                    }
+
+                    if (isset($pElem->{'xml-element'})) {
+                        $colConfig = $pElem->{'xml-element'};
+                        if (isset($colConfig->attributes()->cdata)) {
+                            $pMetadata->xmlElementCData = 'true' === (string) $colConfig->attributes()->cdata;
+                        }
+
+                        if (isset($colConfig->attributes()->namespace)) {
+                            $pMetadata->xmlNamespace = (string) $colConfig->attributes()->namespace;
+                        }
+                    }
+
+                    if (isset($pElem->attributes()->{'xml-attribute'})) {
+                        $pMetadata->xmlAttribute = 'true' === (string) $pElem->attributes()->{'xml-attribute'};
+                    }
+
+                    if (isset($pElem->attributes()->{'xml-attribute-map'})) {
+                        $pMetadata->xmlAttributeMap = 'true' === (string) $pElem->attributes()->{'xml-attribute-map'};
+                    }
+
+                    if (isset($pElem->attributes()->{'xml-value'})) {
+                        $pMetadata->xmlValue = 'true' === (string) $pElem->attributes()->{'xml-value'};
+                    }
+
+                    if (isset($pElem->attributes()->{'xml-key-value-pairs'})) {
+                        $pMetadata->xmlKeyValuePairs = 'true' === (string) $pElem->attributes()->{'xml-key-value-pairs'};
+                    }
+
+                    if (isset($pElem->attributes()->{'max-depth'})) {
+                        $pMetadata->maxDepth = (int) $pElem->attributes()->{'max-depth'};
+                    }
+
+                    //we need read-only before setter and getter set, because that method depends on flag being set
+                    if (null !== $readOnly = $pElem->attributes()->{'read-only'}) {
+                        $pMetadata->readOnly = 'true' === strtolower((string) $readOnly);
+                    } else {
+                        $pMetadata->readOnly = $pMetadata->readOnly || $readOnlyClass;
+                    }
+
+                    $getter = $pElem->attributes()->{'accessor-getter'};
+                    $setter = $pElem->attributes()->{'accessor-setter'};
+                    $pMetadata->setAccessor(
+                        (string) ($pElem->attributes()->{'access-type'} ?: $classAccessType),
+                        $getter ? (string) $getter : null,
+                        $setter ? (string) $setter : null,
+                    );
+
+                    if (null !== $inline = $pElem->attributes()->inline) {
+                        $pMetadata->inline = 'true' === strtolower((string) $inline);
+                    }
+                }
+
+                if ($pMetadata->inline) {
+                    $metadata->isList = $metadata->isList || PropertyMetadata::isCollectionList($pMetadata->type);
+                    $metadata->isMap = $metadata->isMap || PropertyMetadata::isCollectionMap($pMetadata->type);
+                }
+
+                if (!$pMetadata->serializedName) {
+                    $pMetadata->serializedName = $this->namingStrategy->translateName($pMetadata);
+                }
+
+                if (!empty($pElem) && null !== $name = $pElem->attributes()->name) {
+                    $pMetadata->name = (string) $name;
+                }
+
+                if (
+                    (ExclusionPolicy::NONE === (string) $exclusionPolicy && !$isExclude)
+                    || (ExclusionPolicy::ALL === (string) $exclusionPolicy && $isExpose)
+                ) {
+                    $metadata->addPropertyMetadata($pMetadata);
+                }
+            }
+        }
+
+        foreach ($elem->xpath('./callback-method') as $method) {
+            if (!isset($method->attributes()->type)) {
+                throw new InvalidMetadataException('The type attribute must be set for all callback-method elements.');
+            }
+
+            if (!isset($method->attributes()->name)) {
+                throw new InvalidMetadataException('The name attribute must be set for all callback-method elements.');
+            }
+
+            switch ((string) $method->attributes()->type) {
+                case 'pre-serialize':
+                    $metadata->addPreSerializeMethod(new MethodMetadata($class->name, (string) $method->attributes()->name));
+                    break;
+
+                case 'post-serialize':
+                    $metadata->addPostSerializeMethod(new MethodMetadata($class->name, (string) $method->attributes()->name));
+                    break;
+
+                case 'post-deserialize':
+                    $metadata->addPostDeserializeMethod(new MethodMetadata($class->name, (string) $method->attributes()->name));
+                    break;
+
+                case 'handler':
+                    if (!isset($method->attributes()->format)) {
+                        throw new InvalidMetadataException('The format attribute must be set for "handler" callback methods.');
+                    }
+
+                    if (!isset($method->attributes()->direction)) {
+                        throw new InvalidMetadataException('The direction attribute must be set for "handler" callback methods.');
+                    }
+
+                    break;
+
+                default:
+                    throw new InvalidMetadataException(sprintf('The type "%s" is not supported.', $method->attributes()->name));
+            }
+        }
+
+        return $metadata;
+    }
+
+    protected function getExtension(): string
+    {
+        return 'xml';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/YamlDriver.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/YamlDriver.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/Driver/YamlDriver.php	(revision 8435)
@@ -0,0 +1,457 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata\Driver;
+
+use JMS\Serializer\Annotation\ExclusionPolicy;
+use JMS\Serializer\Exception\InvalidMetadataException;
+use JMS\Serializer\Expression\CompilableExpressionEvaluatorInterface;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\ExpressionPropertyMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Metadata\VirtualPropertyMetadata;
+use JMS\Serializer\Naming\PropertyNamingStrategyInterface;
+use JMS\Serializer\Type\Parser;
+use JMS\Serializer\Type\ParserInterface;
+use Metadata\ClassMetadata as BaseClassMetadata;
+use Metadata\Driver\AbstractFileDriver;
+use Metadata\Driver\AdvancedFileLocatorInterface;
+use Metadata\Driver\FileLocatorInterface;
+use Metadata\MethodMetadata;
+use ReflectionClass;
+use RuntimeException;
+use Symfony\Component\Yaml\Yaml;
+
+class YamlDriver extends AbstractFileDriver
+{
+    use ExpressionMetadataTrait;
+
+    /**
+     * @var ParserInterface
+     */
+    private $typeParser;
+    /**
+     * @var PropertyNamingStrategyInterface
+     */
+    private $namingStrategy;
+    /**
+     * @var FileLocatorInterface
+     */
+    private $locator;
+
+    public function __construct(FileLocatorInterface $locator, PropertyNamingStrategyInterface $namingStrategy, ?ParserInterface $typeParser = null, ?CompilableExpressionEvaluatorInterface $expressionEvaluator = null)
+    {
+        $this->locator = $locator;
+        $this->typeParser = $typeParser ?? new Parser();
+        $this->namingStrategy = $namingStrategy;
+        $this->expressionEvaluator = $expressionEvaluator;
+    }
+
+    public function loadMetadataForClass(ReflectionClass $class): ?BaseClassMetadata
+    {
+        $path = null;
+        foreach ($this->getExtensions() as $extension) {
+            $path = $this->locator->findFileForClass($class, $extension);
+            if (null !== $path) {
+                break;
+            }
+        }
+
+        if (null === $path) {
+            return null;
+        }
+
+        return $this->loadMetadataFromFile($class, $path);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getAllClassNames(): array
+    {
+        if (!$this->locator instanceof AdvancedFileLocatorInterface) {
+            throw new RuntimeException(
+                sprintf(
+                    'Locator "%s" must be an instance of "AdvancedFileLocatorInterface".',
+                    get_class($this->locator),
+                ),
+            );
+        }
+
+        $classes = [];
+        foreach ($this->getExtensions() as $extension) {
+            foreach ($this->locator->findAllClasses($extension) as $class) {
+                $classes[$class] = $class;
+            }
+        }
+
+        return array_values($classes);
+    }
+
+    protected function loadMetadataFromFile(ReflectionClass $class, string $file): ?BaseClassMetadata
+    {
+        $config = Yaml::parseFile($file, Yaml::PARSE_CONSTANT);
+
+        if (!isset($config[$name = $class->name])) {
+            throw new InvalidMetadataException(
+                sprintf('Expected metadata for class %s to be defined in %s.', $class->name, $file),
+            );
+        }
+
+        $config = $config[$name];
+        $metadata = new ClassMetadata($name);
+        $metadata->fileResources[] = $file;
+        $fileResource = $class->getFilename();
+        if (false !== $fileResource) {
+            $metadata->fileResources[] = $fileResource;
+        }
+
+        $exclusionPolicy = isset($config['exclusion_policy']) ? strtoupper($config['exclusion_policy']) : 'NONE';
+        $excludeAll = isset($config['exclude']) ? (bool) $config['exclude'] : false;
+
+        if (isset($config['exclude_if'])) {
+            $metadata->excludeIf = $this->parseExpression((string) $config['exclude_if']);
+        }
+
+        $classAccessType = $config['access_type'] ?? PropertyMetadata::ACCESS_TYPE_PROPERTY;
+        $readOnlyClass = isset($config['read_only']) ? (bool) $config['read_only'] : false;
+        $this->addClassProperties($metadata, $config);
+
+        $propertiesMetadata = [];
+        $propertiesData = [];
+        if (array_key_exists('virtual_properties', $config)) {
+            foreach ($config['virtual_properties'] as $methodName => $propertySettings) {
+                if (isset($propertySettings['exp'])) {
+                    $virtualPropertyMetadata = new ExpressionPropertyMetadata(
+                        $name,
+                        $methodName,
+                        $this->parseExpression($propertySettings['exp']),
+                    );
+                    unset($propertySettings['exp']);
+                } else {
+                    if (!$class->hasMethod($methodName)) {
+                        throw new InvalidMetadataException(
+                            'The method ' . $methodName . ' not found in class ' . $class->name,
+                        );
+                    }
+
+                    $virtualPropertyMetadata = new VirtualPropertyMetadata($name, $methodName);
+                }
+
+                $propertiesMetadata[] = $virtualPropertyMetadata;
+                $propertiesData[] = $propertySettings;
+            }
+        }
+
+        if (!$excludeAll) {
+            foreach ($class->getProperties() as $property) {
+                if ($property->class !== $name || (isset($property->info) && $property->info['class'] !== $name)) {
+                    continue;
+                }
+
+                $pName = $property->getName();
+                $propertiesMetadata[] = new PropertyMetadata($name, $pName);
+                $propertiesData[] =  !empty($config['properties']) && true === array_key_exists($pName, $config['properties'])
+                    ? (array) $config['properties'][$pName]
+                    : null;
+            }
+
+            foreach ($propertiesMetadata as $propertyKey => $pMetadata) {
+                $isExclude = false;
+                $isExpose = $pMetadata instanceof VirtualPropertyMetadata
+                    || $pMetadata instanceof ExpressionPropertyMetadata
+                    || isset($propertiesData[$propertyKey]);
+
+                $pConfig = $propertiesData[$propertyKey];
+                if (!empty($pConfig)) {
+                    if (isset($pConfig['exclude'])) {
+                        $isExclude = (bool) $pConfig['exclude'];
+                    }
+
+                    if ($isExclude) {
+                        continue;
+                    }
+
+                    if (isset($pConfig['expose'])) {
+                        $isExpose = (bool) $pConfig['expose'];
+                    }
+
+                    if (isset($pConfig['skip_when_empty'])) {
+                        $pMetadata->skipWhenEmpty = (bool) $pConfig['skip_when_empty'];
+                    }
+
+                    if (isset($pConfig['since_version'])) {
+                        $pMetadata->sinceVersion = (string) $pConfig['since_version'];
+                    }
+
+                    if (isset($pConfig['until_version'])) {
+                        $pMetadata->untilVersion = (string) $pConfig['until_version'];
+                    }
+
+                    if (isset($pConfig['exclude_if'])) {
+                        $pMetadata->excludeIf = $this->parseExpression((string) $pConfig['exclude_if']);
+                    }
+
+                    if (isset($pConfig['expose_if'])) {
+                        $pMetadata->excludeIf = $this->parseExpression('!(' . $pConfig['expose_if'] . ')');
+                    }
+
+                    if (isset($pConfig['serialized_name'])) {
+                        $pMetadata->serializedName = (string) $pConfig['serialized_name'];
+                    }
+
+                    if (isset($pConfig['type'])) {
+                        $pMetadata->setType($this->typeParser->parse((string) $pConfig['type']));
+                    }
+
+                    if (isset($pConfig['groups'])) {
+                        $pMetadata->groups = $pConfig['groups'];
+                    }
+
+                    if (isset($pConfig['xml_list'])) {
+                        $pMetadata->xmlCollection = true;
+
+                        $colConfig = $pConfig['xml_list'];
+                        if (isset($colConfig['inline'])) {
+                            $pMetadata->xmlCollectionInline = (bool) $colConfig['inline'];
+                        }
+
+                        if (isset($colConfig['entry_name'])) {
+                            $pMetadata->xmlEntryName = (string) $colConfig['entry_name'];
+                        }
+
+                        if (isset($colConfig['skip_when_empty'])) {
+                            $pMetadata->xmlCollectionSkipWhenEmpty = (bool) $colConfig['skip_when_empty'];
+                        } else {
+                            $pMetadata->xmlCollectionSkipWhenEmpty = true;
+                        }
+
+                        if (isset($colConfig['namespace'])) {
+                            $pMetadata->xmlEntryNamespace = (string) $colConfig['namespace'];
+                        }
+                    }
+
+                    if (isset($pConfig['xml_map'])) {
+                        $pMetadata->xmlCollection = true;
+
+                        $colConfig = $pConfig['xml_map'];
+                        if (isset($colConfig['inline'])) {
+                            $pMetadata->xmlCollectionInline = (bool) $colConfig['inline'];
+                        }
+
+                        if (isset($colConfig['entry_name'])) {
+                            $pMetadata->xmlEntryName = (string) $colConfig['entry_name'];
+                        }
+
+                        if (isset($colConfig['namespace'])) {
+                            $pMetadata->xmlEntryNamespace = (string) $colConfig['namespace'];
+                        }
+
+                        if (isset($colConfig['key_attribute_name'])) {
+                            $pMetadata->xmlKeyAttribute = $colConfig['key_attribute_name'];
+                        }
+                    }
+
+                    if (isset($pConfig['xml_element'])) {
+                        $colConfig = $pConfig['xml_element'];
+                        if (isset($colConfig['cdata'])) {
+                            $pMetadata->xmlElementCData = (bool) $colConfig['cdata'];
+                        }
+
+                        if (isset($colConfig['namespace'])) {
+                            $pMetadata->xmlNamespace = (string) $colConfig['namespace'];
+                        }
+                    }
+
+                    if (isset($pConfig['xml_attribute'])) {
+                        $pMetadata->xmlAttribute = (bool) $pConfig['xml_attribute'];
+                    }
+
+                    if (isset($pConfig['xml_attribute_map'])) {
+                        $pMetadata->xmlAttributeMap = (bool) $pConfig['xml_attribute_map'];
+                    }
+
+                    if (isset($pConfig['xml_value'])) {
+                        $pMetadata->xmlValue = (bool) $pConfig['xml_value'];
+                    }
+
+                    if (isset($pConfig['xml_key_value_pairs'])) {
+                        $pMetadata->xmlKeyValuePairs = (bool) $pConfig['xml_key_value_pairs'];
+                    }
+
+                    //we need read_only before setter and getter set, because that method depends on flag being set
+                    if (isset($pConfig['read_only'])) {
+                        $pMetadata->readOnly = (bool) $pConfig['read_only'];
+                    } else {
+                        $pMetadata->readOnly = $pMetadata->readOnly || $readOnlyClass;
+                    }
+
+                    $pMetadata->setAccessor(
+                        $pConfig['access_type'] ?? $classAccessType,
+                        $pConfig['accessor']['getter'] ?? null,
+                        $pConfig['accessor']['setter'] ?? null,
+                    );
+
+                    if (isset($pConfig['inline'])) {
+                        $pMetadata->inline = (bool) $pConfig['inline'];
+                    }
+
+                    if (isset($pConfig['max_depth'])) {
+                        $pMetadata->maxDepth = (int) $pConfig['max_depth'];
+                    }
+                }
+
+                if (!$pMetadata->serializedName) {
+                    $pMetadata->serializedName = $this->namingStrategy->translateName($pMetadata);
+                }
+
+                if ($pMetadata->inline) {
+                    $metadata->isList = $metadata->isList || PropertyMetadata::isCollectionList($pMetadata->type);
+                    $metadata->isMap = $metadata->isMap || PropertyMetadata::isCollectionMap($pMetadata->type);
+                }
+
+                if (!empty($pConfig) && !empty($pConfig['name'])) {
+                    $pMetadata->name = (string) $pConfig['name'];
+                }
+
+                if (
+                    (ExclusionPolicy::NONE === $exclusionPolicy && !$isExclude)
+                    || (ExclusionPolicy::ALL === $exclusionPolicy && $isExpose)
+                ) {
+                    $metadata->addPropertyMetadata($pMetadata);
+                }
+            }
+        }
+
+        if (isset($config['callback_methods'])) {
+            $cConfig = $config['callback_methods'];
+
+            if (isset($cConfig['pre_serialize'])) {
+                $metadata->preSerializeMethods = $this->getCallbackMetadata($class, $cConfig['pre_serialize']);
+            }
+
+            if (isset($cConfig['post_serialize'])) {
+                $metadata->postSerializeMethods = $this->getCallbackMetadata($class, $cConfig['post_serialize']);
+            }
+
+            if (isset($cConfig['post_deserialize'])) {
+                $metadata->postDeserializeMethods = $this->getCallbackMetadata($class, $cConfig['post_deserialize']);
+            }
+        }
+
+        return $metadata;
+    }
+
+    /**
+     * @return string[]
+     */
+    protected function getExtensions(): array
+    {
+        return array_unique([$this->getExtension(), 'yaml', 'yml']);
+    }
+
+    /**
+     * @deprecated use getExtensions instead.
+     */
+    protected function getExtension(): string
+    {
+        return 'yml';
+    }
+
+    private function addClassProperties(ClassMetadata $metadata, array $config): void
+    {
+        if (isset($config['custom_accessor_order']) && !isset($config['accessor_order'])) {
+            $config['accessor_order'] = 'custom';
+        }
+
+        if (isset($config['accessor_order'])) {
+            $metadata->setAccessorOrder($config['accessor_order'], $config['custom_accessor_order'] ?? []);
+        }
+
+        if (isset($config['xml_root_name'])) {
+            $metadata->xmlRootName = (string) $config['xml_root_name'];
+        }
+
+        if (isset($config['xml_root_prefix'])) {
+            $metadata->xmlRootPrefix = (string) $config['xml_root_prefix'];
+        }
+
+        if (isset($config['xml_root_namespace'])) {
+            $metadata->xmlRootNamespace = (string) $config['xml_root_namespace'];
+        }
+
+        if (array_key_exists('xml_namespaces', $config)) {
+            foreach ($config['xml_namespaces'] as $prefix => $uri) {
+                $metadata->registerNamespace($uri, $prefix);
+            }
+        }
+
+        if (isset($config['discriminator'])) {
+            if (isset($config['discriminator']['disabled']) && true === $config['discriminator']['disabled']) {
+                $metadata->discriminatorDisabled = true;
+            } else {
+                if (!isset($config['discriminator']['field_name'])) {
+                    throw new InvalidMetadataException('The "field_name" attribute must be set for discriminators.');
+                }
+
+                if (!isset($config['discriminator']['map']) || !is_array($config['discriminator']['map'])) {
+                    throw new InvalidMetadataException(
+                        'The "map" attribute must be set, and be an array for discriminators.',
+                    );
+                }
+
+                $groups = $config['discriminator']['groups'] ?? [];
+                $metadata->setDiscriminator(
+                    $config['discriminator']['field_name'],
+                    $config['discriminator']['map'],
+                    $groups,
+                );
+
+                if (isset($config['discriminator']['xml_attribute'])) {
+                    $metadata->xmlDiscriminatorAttribute = (bool) $config['discriminator']['xml_attribute'];
+                }
+
+                if (isset($config['discriminator']['xml_element'])) {
+                    if (isset($config['discriminator']['xml_element']['cdata'])) {
+                        $metadata->xmlDiscriminatorCData = (bool) $config['discriminator']['xml_element']['cdata'];
+                    }
+
+                    if (isset($config['discriminator']['xml_element']['namespace'])) {
+                        $metadata->xmlDiscriminatorNamespace = (string) $config['discriminator']['xml_element']['namespace'];
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * @param string|string[] $config
+     */
+    private function getCallbackMetadata(ReflectionClass $class, $config): array
+    {
+        if (is_string($config)) {
+            $config = [$config];
+        } elseif (!is_array($config)) {
+            throw new InvalidMetadataException(
+                sprintf(
+                    'callback methods expects a string, or an array of strings that represent method names, but got %s.',
+                    json_encode($config['pre_serialize']),
+                ),
+            );
+        }
+
+        $methods = [];
+        foreach ($config as $name) {
+            if (!$class->hasMethod($name)) {
+                throw new InvalidMetadataException(
+                    sprintf('The method %s does not exist in class %s.', $name, $class->name),
+                );
+            }
+
+            $methods[] = new MethodMetadata($class->name, $name);
+        }
+
+        return $methods;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/ExpressionPropertyMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/ExpressionPropertyMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/ExpressionPropertyMetadata.php	(revision 8435)
@@ -0,0 +1,58 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata;
+
+use JMS\Serializer\Expression\Expression;
+
+/**
+ * @Annotation
+ * @Target("METHOD")
+ *
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_METHOD)]
+class ExpressionPropertyMetadata extends PropertyMetadata
+{
+    /**
+     * @var string|Expression
+     */
+    public $expression;
+
+    /**
+     * @param string|Expression $expression
+     */
+    public function __construct(string $class, string $fieldName, $expression)
+    {
+        $this->class = $class;
+        $this->name = $fieldName;
+        $this->expression = $expression;
+        $this->readOnly = true;
+    }
+
+    public function setAccessor(string $type, ?string $getter = null, ?string $setter = null): void
+    {
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function serializeToArray(): array
+    {
+        return [
+            $this->expression,
+            parent::serializeToArray(),
+        ];
+    }
+
+    protected function unserializeFromArray(array $data): void
+    {
+        [
+            $this->expression,
+            $parentData,
+        ] = $data;
+
+        parent::unserializeFromArray($parentData);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/PropertyMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/PropertyMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/PropertyMetadata.php	(revision 8435)
@@ -0,0 +1,289 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata;
+
+use JMS\Serializer\Exception\InvalidMetadataException;
+use JMS\Serializer\Expression\Expression;
+use Metadata\PropertyMetadata as BasePropertyMetadata;
+
+class PropertyMetadata extends BasePropertyMetadata
+{
+    public const ACCESS_TYPE_PROPERTY = 'property';
+    public const ACCESS_TYPE_PUBLIC_METHOD = 'public_method';
+
+    /**
+     * @var string|null
+     */
+    public $sinceVersion;
+
+    /**
+     * @var string|null
+     */
+    public $untilVersion;
+
+    /**
+     * @var string[]|null
+     */
+    public $groups;
+
+    /**
+     * @var string|null
+     */
+    public $serializedName;
+
+    /**
+     * @var array|null
+     */
+    public $type;
+
+    /**
+     * @var bool
+     */
+    public $xmlCollection = false;
+
+    /**
+     * @var bool
+     */
+    public $xmlCollectionInline = false;
+
+    /**
+     * @var bool
+     */
+    public $xmlCollectionSkipWhenEmpty = true;
+
+    /**
+     * @var string|null
+     */
+    public $xmlEntryName;
+
+    /**
+     * @var string|null
+     */
+    public $xmlEntryNamespace;
+
+    /**
+     * @var string|null
+     */
+    public $xmlKeyAttribute;
+
+    /**
+     * @var bool
+     */
+    public $xmlAttribute = false;
+
+    /**
+     * @var bool
+     */
+    public $xmlValue = false;
+
+    /**
+     * @var string|null
+     */
+    public $xmlNamespace;
+
+    /**
+     * @var bool
+     */
+    public $xmlKeyValuePairs = false;
+
+    /**
+     * @var bool
+     */
+    public $xmlElementCData = true;
+
+    /**
+     * @var string|null
+     */
+    public $getter;
+
+    /**
+     * @var string|null
+     */
+    public $setter;
+
+    /**
+     * @var bool
+     */
+    public $inline = false;
+
+    /**
+     * @var bool
+     */
+    public $skipWhenEmpty = false;
+
+    /**
+     * @var bool
+     */
+    public $readOnly = false;
+
+    /**
+     * @var bool
+     */
+    public $xmlAttributeMap = false;
+
+    /**
+     * @var int|null
+     */
+    public $maxDepth = null;
+
+    /**
+     * @var string|Expression|null
+     */
+    public $excludeIf = null;
+
+    /**
+     * @var bool|null
+     */
+    public $hasDefault;
+
+    /**
+     * @var mixed|null
+     */
+    public $defaultValue;
+
+    /**
+     * @internal
+     *
+     * @var bool
+     */
+    public $forceReflectionAccess = false;
+
+    public function __construct(string $class, string $name)
+    {
+        parent::__construct($class, $name);
+
+        try {
+            $class = $this->getReflection()->getDeclaringClass();
+            $this->forceReflectionAccess = $class->isInternal() || $class->getProperty($name)->isStatic();
+        } catch (\ReflectionException $e) {
+        }
+    }
+
+    private function getReflection(): \ReflectionProperty
+    {
+        return new \ReflectionProperty($this->class, $this->name);
+    }
+
+    public function setAccessor(string $type, ?string $getter = null, ?string $setter = null): void
+    {
+        if (self::ACCESS_TYPE_PUBLIC_METHOD === $type) {
+            $class = $this->getReflection()->getDeclaringClass();
+
+            if (empty($getter)) {
+                if ($class->hasMethod('get' . $this->name) && $class->getMethod('get' . $this->name)->isPublic()) {
+                    $getter = 'get' . $this->name;
+                } elseif ($class->hasMethod('is' . $this->name) && $class->getMethod('is' . $this->name)->isPublic()) {
+                    $getter = 'is' . $this->name;
+                } elseif ($class->hasMethod('has' . $this->name) && $class->getMethod('has' . $this->name)->isPublic()) {
+                    $getter = 'has' . $this->name;
+                } else {
+                    throw new InvalidMetadataException(sprintf('There is neither a public %s method, nor a public %s method, nor a public %s method in class %s. Please specify which public method should be used for retrieving the value of the property %s.', 'get' . ucfirst($this->name), 'is' . ucfirst($this->name), 'has' . ucfirst($this->name), $this->class, $this->name));
+                }
+            }
+
+            if (empty($setter) && !$this->readOnly) {
+                if ($class->hasMethod('set' . $this->name) && $class->getMethod('set' . $this->name)->isPublic()) {
+                    $setter = 'set' . $this->name;
+                } else {
+                    throw new InvalidMetadataException(sprintf('There is no public %s method in class %s. Please specify which public method should be used for setting the value of the property %s.', 'set' . ucfirst($this->name), $this->class, $this->name));
+                }
+            }
+        }
+
+        $this->getter = $getter;
+        $this->setter = $setter;
+    }
+
+    public function setType(array $type): void
+    {
+        $this->type = $type;
+    }
+
+    public static function isCollectionList(?array $type = null): bool
+    {
+        return is_array($type)
+            && 'array' === $type['name']
+            && isset($type['params'][0])
+            && !isset($type['params'][1]);
+    }
+
+    public static function isCollectionMap(?array $type = null): bool
+    {
+        return is_array($type)
+            && 'array' === $type['name']
+            && isset($type['params'][0])
+            && isset($type['params'][1]);
+    }
+
+    protected function serializeToArray(): array
+    {
+        return [
+            $this->sinceVersion,
+            $this->untilVersion,
+            $this->groups,
+            $this->serializedName,
+            $this->type,
+            $this->xmlCollection,
+            $this->xmlCollectionInline,
+            $this->xmlEntryName,
+            $this->xmlKeyAttribute,
+            $this->xmlAttribute,
+            $this->xmlValue,
+            $this->xmlNamespace,
+            $this->xmlKeyValuePairs,
+            $this->xmlElementCData,
+            $this->getter,
+            $this->setter,
+            $this->inline,
+            $this->readOnly,
+            $this->xmlAttributeMap,
+            $this->maxDepth,
+            $this->xmlEntryNamespace,
+            $this->xmlCollectionSkipWhenEmpty,
+            $this->excludeIf,
+            $this->skipWhenEmpty,
+            $this->forceReflectionAccess,
+            $this->hasDefault,
+            $this->defaultValue,
+            parent::serializeToArray(),
+        ];
+    }
+
+    protected function unserializeFromArray(array $data): void
+    {
+        [
+            $this->sinceVersion,
+            $this->untilVersion,
+            $this->groups,
+            $this->serializedName,
+            $this->type,
+            $this->xmlCollection,
+            $this->xmlCollectionInline,
+            $this->xmlEntryName,
+            $this->xmlKeyAttribute,
+            $this->xmlAttribute,
+            $this->xmlValue,
+            $this->xmlNamespace,
+            $this->xmlKeyValuePairs,
+            $this->xmlElementCData,
+            $this->getter,
+            $this->setter,
+            $this->inline,
+            $this->readOnly,
+            $this->xmlAttributeMap,
+            $this->maxDepth,
+            $this->xmlEntryNamespace,
+            $this->xmlCollectionSkipWhenEmpty,
+            $this->excludeIf,
+            $this->skipWhenEmpty,
+            $this->forceReflectionAccess,
+            $this->hasDefault,
+            $this->defaultValue,
+            $parentData,
+        ] = $data;
+
+        parent::unserializeFromArray($parentData);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/StaticPropertyMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/StaticPropertyMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/StaticPropertyMetadata.php	(revision 8435)
@@ -0,0 +1,59 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata;
+
+class StaticPropertyMetadata extends PropertyMetadata
+{
+    /**
+     * @var mixed
+     */
+    private $value;
+
+    /**
+     * StaticPropertyMetadata constructor.
+     *
+     * @param mixed $fieldValue
+     * @param array $groups
+     */
+    public function __construct(string $className, string $fieldName, $fieldValue, array $groups = [])
+    {
+        $this->class = $className;
+        $this->name = $fieldName;
+        $this->serializedName = $fieldName;
+        $this->value = $fieldValue;
+        $this->readOnly = true;
+        $this->groups = $groups;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getValue()
+    {
+        return $this->value;
+    }
+
+    public function setAccessor(string $type, ?string $getter = null, ?string $setter = null): void
+    {
+    }
+
+    protected function serializeToArray(): array
+    {
+        return [
+            $this->value,
+            parent::serializeToArray(),
+        ];
+    }
+
+    protected function unserializeFromArray(array $data): void
+    {
+        [
+            $this->value,
+            $parentData,
+        ] = $data;
+
+        parent::unserializeFromArray($parentData);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/VirtualPropertyMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/VirtualPropertyMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Metadata/VirtualPropertyMetadata.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Metadata;
+
+class VirtualPropertyMetadata extends PropertyMetadata
+{
+    public function __construct(string $class, string $methodName)
+    {
+        if (0 === strpos($methodName, 'get')) {
+            $fieldName = lcfirst(substr($methodName, 3));
+        } else {
+            $fieldName = $methodName;
+        }
+
+        $this->class = $class;
+        $this->name = $fieldName;
+        $this->getter = $methodName;
+        $this->readOnly = true;
+    }
+
+    public function setAccessor(string $type, ?string $getter = null, ?string $setter = null): void
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Naming/CamelCaseNamingStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Naming/CamelCaseNamingStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Naming/CamelCaseNamingStrategy.php	(revision 8435)
@@ -0,0 +1,42 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Naming;
+
+use JMS\Serializer\Metadata\PropertyMetadata;
+
+/**
+ * Generic naming strategy which translates a camel-cased property name.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+final class CamelCaseNamingStrategy implements PropertyNamingStrategyInterface
+{
+    /**
+     * @var string
+     */
+    private $separator;
+
+    /**
+     * @var bool
+     */
+    private $lowerCase;
+
+    public function __construct(string $separator = '_', bool $lowerCase = true)
+    {
+        $this->separator = $separator;
+        $this->lowerCase = $lowerCase;
+    }
+
+    public function translateName(PropertyMetadata $property): string
+    {
+        $name = preg_replace('/[A-Z]+/', $this->separator . '\\0', $property->name);
+
+        if ($this->lowerCase) {
+            return strtolower($name);
+        }
+
+        return ucfirst($name);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Naming/IdenticalPropertyNamingStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Naming/IdenticalPropertyNamingStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Naming/IdenticalPropertyNamingStrategy.php	(revision 8435)
@@ -0,0 +1,15 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Naming;
+
+use JMS\Serializer\Metadata\PropertyMetadata;
+
+final class IdenticalPropertyNamingStrategy implements PropertyNamingStrategyInterface
+{
+    public function translateName(PropertyMetadata $property): string
+    {
+        return $property->name;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Naming/PropertyNamingStrategyInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Naming/PropertyNamingStrategyInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Naming/PropertyNamingStrategyInterface.php	(revision 8435)
@@ -0,0 +1,23 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Naming;
+
+use JMS\Serializer\Metadata\PropertyMetadata;
+
+/**
+ * Interface for property naming strategies.
+ *
+ * Implementations translate the property name to a serialized name that is
+ * displayed.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+interface PropertyNamingStrategyInterface
+{
+    /**
+     * Translates the name of the property to the serialized version.
+     */
+    public function translateName(PropertyMetadata $property): string;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Naming/SerializedNameAnnotationStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Naming/SerializedNameAnnotationStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Naming/SerializedNameAnnotationStrategy.php	(revision 8435)
@@ -0,0 +1,34 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Naming;
+
+use JMS\Serializer\Metadata\PropertyMetadata;
+
+/**
+ * Naming strategy which uses an annotation to translate the property name.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+final class SerializedNameAnnotationStrategy implements PropertyNamingStrategyInterface
+{
+    /**
+     * @var PropertyNamingStrategyInterface
+     */
+    private $delegate;
+
+    public function __construct(PropertyNamingStrategyInterface $namingStrategy)
+    {
+        $this->delegate = $namingStrategy;
+    }
+
+    public function translateName(PropertyMetadata $property): string
+    {
+        if (null !== $name = $property->serializedName) {
+            return $name;
+        }
+
+        return $this->delegate->translateName($property);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/NullAwareVisitorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/NullAwareVisitorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/NullAwareVisitorInterface.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+interface NullAwareVisitorInterface
+{
+    /**
+     * Determine if a value conveys a null value.
+     * An example could be an xml element (Dom, SimpleXml, ...) that is tagged with a xsi:nil attribute
+     *
+     * @param mixed $value
+     */
+    public function isNull($value): bool;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Ordering/AlphabeticalPropertyOrderingStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Ordering/AlphabeticalPropertyOrderingStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Ordering/AlphabeticalPropertyOrderingStrategy.php	(revision 8435)
@@ -0,0 +1,23 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Ordering;
+
+use JMS\Serializer\Metadata\PropertyMetadata;
+
+final class AlphabeticalPropertyOrderingStrategy implements PropertyOrderingInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function order(array $properties): array
+    {
+        uasort(
+            $properties,
+            static fn (PropertyMetadata $a, PropertyMetadata $b): int => strcmp($a->name, $b->name),
+        );
+
+        return $properties;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Ordering/CustomPropertyOrderingStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Ordering/CustomPropertyOrderingStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Ordering/CustomPropertyOrderingStrategy.php	(revision 8435)
@@ -0,0 +1,48 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Ordering;
+
+final class CustomPropertyOrderingStrategy implements PropertyOrderingInterface
+{
+    /** @var int[] property => weight */
+    private $ordering;
+
+    /**
+     * @param int[] $ordering property => weight
+     */
+    public function __construct(array $ordering)
+    {
+        $this->ordering = $ordering;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function order(array $properties): array
+    {
+        $currentSorting = $properties ? array_combine(array_keys($properties), range(1, \count($properties))) : [];
+
+        uksort($properties, function ($a, $b) use ($currentSorting) {
+            $existsA = isset($this->ordering[$a]);
+            $existsB = isset($this->ordering[$b]);
+
+            if (!$existsA && !$existsB) {
+                return $currentSorting[$a] - $currentSorting[$b];
+            }
+
+            if (!$existsA) {
+                return 1;
+            }
+
+            if (!$existsB) {
+                return -1;
+            }
+
+            return $this->ordering[$a] < $this->ordering[$b] ? -1 : 1;
+        });
+
+        return $properties;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Ordering/IdenticalPropertyOrderingStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Ordering/IdenticalPropertyOrderingStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Ordering/IdenticalPropertyOrderingStrategy.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Ordering;
+
+final class IdenticalPropertyOrderingStrategy implements PropertyOrderingInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function order(array $properties): array
+    {
+        return $properties;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Ordering/PropertyOrderingInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Ordering/PropertyOrderingInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Ordering/PropertyOrderingInterface.php	(revision 8435)
@@ -0,0 +1,17 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Ordering;
+
+use JMS\Serializer\Metadata\PropertyMetadata;
+
+interface PropertyOrderingInterface
+{
+    /**
+     * @param PropertyMetadata[] $properties name => property
+     *
+     * @return PropertyMetadata[] name => property
+     */
+    public function order(array $properties): array;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/SerializationContext.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/SerializationContext.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/SerializationContext.php	(revision 8435)
@@ -0,0 +1,160 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use JMS\Serializer\Exception\RuntimeException;
+use Metadata\MetadataFactoryInterface;
+
+class SerializationContext extends Context
+{
+    /** @var \SplObjectStorage */
+    private $visitingSet;
+
+    /** @var \SplStack */
+    private $visitingStack;
+
+    /**
+     * @var string
+     */
+    private $initialType;
+
+    /**
+     * @var bool
+     */
+    private $serializeNull = false;
+
+    public static function create(): self
+    {
+        return new self();
+    }
+
+    public function initialize(string $format, VisitorInterface $visitor, GraphNavigatorInterface $navigator, MetadataFactoryInterface $factory): void
+    {
+        parent::initialize($format, $visitor, $navigator, $factory);
+
+        $this->visitingSet = new \SplObjectStorage();
+        $this->visitingStack = new \SplStack();
+    }
+
+    /**
+     * Set if NULLs should be serialized (TRUE) ot not (FALSE)
+     */
+    public function setSerializeNull(bool $bool): self
+    {
+        $this->assertMutable();
+
+        $this->serializeNull = $bool;
+
+        return $this;
+    }
+
+    /**
+     * Returns TRUE when NULLs should be serialized
+     * Returns FALSE when NULLs should not be serialized
+     */
+    public function shouldSerializeNull(): bool
+    {
+        return $this->serializeNull;
+    }
+
+    /**
+     * @param mixed $object
+     */
+    public function startVisiting($object): void
+    {
+        if (!\is_object($object)) {
+            return;
+        }
+
+        $this->visitingSet->attach($object);
+        $this->visitingStack->push($object);
+    }
+
+    /**
+     * @param mixed $object
+     */
+    public function stopVisiting($object): void
+    {
+        if (!\is_object($object)) {
+            return;
+        }
+
+        $this->visitingSet->detach($object);
+        $poppedObject = $this->visitingStack->pop();
+
+        if ($object !== $poppedObject) {
+            throw new RuntimeException('Context visitingStack not working well');
+        }
+    }
+
+    /**
+     * @param mixed $object
+     */
+    public function isVisiting($object): bool
+    {
+        if (!\is_object($object)) {
+            return false;
+        }
+
+        return $this->visitingSet->contains($object);
+    }
+
+    public function getPath(): ?string
+    {
+        $path = [];
+        foreach ($this->visitingStack as $obj) {
+            $path[] = \get_class($obj);
+        }
+
+        if (!$path) {
+            return null;
+        }
+
+        return implode(' -> ', $path);
+    }
+
+    public function getDirection(): int
+    {
+        return GraphNavigatorInterface::DIRECTION_SERIALIZATION;
+    }
+
+    public function getDepth(): int
+    {
+        return $this->visitingStack->count();
+    }
+
+    public function getObject(): ?object
+    {
+        return !$this->visitingStack->isEmpty() ? $this->visitingStack->top() : null;
+    }
+
+    public function getVisitingStack(): \SplStack
+    {
+        return $this->visitingStack;
+    }
+
+    public function getVisitingSet(): \SplObjectStorage
+    {
+        return $this->visitingSet;
+    }
+
+    /**
+     * @return $this
+     */
+    public function setInitialType(string $type): self
+    {
+        $this->assertMutable();
+
+        $this->initialType = $type;
+        $this->setAttribute('initial_type', $type);
+
+        return $this;
+    }
+
+    public function getInitialType(): ?string
+    {
+        return $this->initialType ?: ($this->hasAttribute('initial_type') ? $this->getAttribute('initial_type') : null);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Serializer.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Serializer.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Serializer.php	(revision 8435)
@@ -0,0 +1,278 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use JMS\Serializer\ContextFactory\DefaultDeserializationContextFactory;
+use JMS\Serializer\ContextFactory\DefaultSerializationContextFactory;
+use JMS\Serializer\ContextFactory\DeserializationContextFactoryInterface;
+use JMS\Serializer\ContextFactory\SerializationContextFactoryInterface;
+use JMS\Serializer\Exception\InvalidArgumentException;
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\Exception\UnsupportedFormatException;
+use JMS\Serializer\GraphNavigator\Factory\GraphNavigatorFactoryInterface;
+use JMS\Serializer\Type\Parser;
+use JMS\Serializer\Type\ParserInterface;
+use JMS\Serializer\Visitor\Factory\DeserializationVisitorFactory;
+use JMS\Serializer\Visitor\Factory\SerializationVisitorFactory;
+use Metadata\MetadataFactoryInterface;
+
+/**
+ * Serializer Implementation.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+final class Serializer implements SerializerInterface, ArrayTransformerInterface
+{
+    /**
+     * @var MetadataFactoryInterface
+     */
+    private $factory;
+
+    /**
+     * @var ParserInterface
+     */
+    private $typeParser;
+
+    /**
+     * @var SerializationVisitorFactory[]
+     */
+    private $serializationVisitors;
+
+    /**
+     * @var DeserializationVisitorFactory[]
+     */
+    private $deserializationVisitors;
+
+    /**
+     * @var SerializationContextFactoryInterface
+     */
+    private $serializationContextFactory;
+
+    /**
+     * @var DeserializationContextFactoryInterface
+     */
+    private $deserializationContextFactory;
+
+    /**
+     * @var GraphNavigatorFactoryInterface[]
+     */
+    private $graphNavigators;
+
+    /**
+     * @param GraphNavigatorFactoryInterface[] $graphNavigators
+     * @param SerializationVisitorFactory[] $serializationVisitors
+     * @param DeserializationVisitorFactory[] $deserializationVisitors
+     */
+    public function __construct(
+        MetadataFactoryInterface $factory,
+        array $graphNavigators,
+        array $serializationVisitors,
+        array $deserializationVisitors,
+        ?SerializationContextFactoryInterface $serializationContextFactory = null,
+        ?DeserializationContextFactoryInterface $deserializationContextFactory = null,
+        ?ParserInterface $typeParser = null
+    ) {
+        $this->factory = $factory;
+        $this->graphNavigators = $graphNavigators;
+        $this->serializationVisitors = $serializationVisitors;
+        $this->deserializationVisitors = $deserializationVisitors;
+
+        $this->typeParser = $typeParser ?? new Parser();
+
+        $this->serializationContextFactory = $serializationContextFactory ?: new DefaultSerializationContextFactory();
+        $this->deserializationContextFactory = $deserializationContextFactory ?: new DefaultDeserializationContextFactory();
+    }
+
+    /**
+     * Parses a direction string to one of the direction constants.
+     */
+    public static function parseDirection(string $dirStr): int
+    {
+        switch (strtolower($dirStr)) {
+            case 'serialization':
+                return GraphNavigatorInterface::DIRECTION_SERIALIZATION;
+
+            case 'deserialization':
+                return GraphNavigatorInterface::DIRECTION_DESERIALIZATION;
+
+            default:
+                throw new InvalidArgumentException(sprintf('The direction "%s" does not exist.', $dirStr));
+        }
+    }
+
+    private function findInitialType(?string $type, SerializationContext $context): ?string
+    {
+        if (null !== $type) {
+            return $type;
+        } elseif ($context->hasAttribute('initial_type')) {
+            return $context->getAttribute('initial_type');
+        }
+
+        return null;
+    }
+
+    private function getNavigator(int $direction): GraphNavigatorInterface
+    {
+        if (!isset($this->graphNavigators[$direction])) {
+            throw new RuntimeException(
+                sprintf(
+                    'Can not find a graph navigator for the direction "%s".',
+                    GraphNavigatorInterface::DIRECTION_SERIALIZATION === $direction ? 'serialization' : 'deserialization',
+                ),
+            );
+        }
+
+        return $this->graphNavigators[$direction]->getGraphNavigator();
+    }
+
+    private function getVisitor(int $direction, string $format): VisitorInterface
+    {
+        $factories = GraphNavigatorInterface::DIRECTION_SERIALIZATION === $direction
+            ? $this->serializationVisitors
+            : $this->deserializationVisitors;
+
+        if (!isset($factories[$format])) {
+            throw new UnsupportedFormatException(
+                sprintf(
+                    'The format "%s" is not supported for %s.',
+                    $format,
+                    GraphNavigatorInterface::DIRECTION_SERIALIZATION === $direction ? 'serialization' : 'deserialization',
+                ),
+            );
+        }
+
+        return $factories[$format]->getVisitor();
+    }
+
+    /**
+     * {@InheritDoc}
+     */
+    public function serialize($data, string $format, ?SerializationContext $context = null, ?string $type = null): string
+    {
+        if (null === $context) {
+            $context = $this->serializationContextFactory->createSerializationContext();
+        }
+
+        $visitor = $this->getVisitor(GraphNavigatorInterface::DIRECTION_SERIALIZATION, $format);
+        $navigator = $this->getNavigator(GraphNavigatorInterface::DIRECTION_SERIALIZATION);
+
+        $type = $this->findInitialType($type, $context);
+
+        $result = $this->visit($navigator, $visitor, $context, $data, $format, $type);
+
+        $context->close();
+
+        return $visitor->getResult($result);
+    }
+
+    /**
+     * {@InheritDoc}
+     */
+    public function deserialize(string $data, string $type, string $format, ?DeserializationContext $context = null)
+    {
+        if (null === $context) {
+            $context = $this->deserializationContextFactory->createDeserializationContext();
+        }
+
+        $visitor = $this->getVisitor(GraphNavigatorInterface::DIRECTION_DESERIALIZATION, $format);
+        $navigator = $this->getNavigator(GraphNavigatorInterface::DIRECTION_DESERIALIZATION);
+
+        $result = $this->visit($navigator, $visitor, $context, $data, $format, $type);
+
+        $context->close();
+
+        return $visitor->getResult($result);
+    }
+
+    /**
+     * {@InheritDoc}
+     */
+    public function toArray($data, ?SerializationContext $context = null, ?string $type = null): array
+    {
+        if (null === $context) {
+            $context = $this->serializationContextFactory->createSerializationContext();
+        }
+
+        $visitor = $this->getVisitor(GraphNavigatorInterface::DIRECTION_SERIALIZATION, 'json');
+        $navigator = $this->getNavigator(GraphNavigatorInterface::DIRECTION_SERIALIZATION);
+
+        $type = $this->findInitialType($type, $context);
+        $result = $this->visit($navigator, $visitor, $context, $data, 'json', $type);
+        $result = $this->convertArrayObjects($result);
+
+        if (!\is_array($result)) {
+            throw new RuntimeException(sprintf(
+                'The input data of type "%s" did not convert to an array, but got a result of type "%s".',
+                \is_object($data) ? \get_class($data) : \gettype($data),
+                \is_object($result) ? \get_class($result) : \gettype($result),
+            ));
+        }
+
+        return $result;
+    }
+
+    /**
+     * {@InheritDoc}
+     */
+    public function fromArray(array $data, string $type, ?DeserializationContext $context = null)
+    {
+        if (null === $context) {
+            $context = $this->deserializationContextFactory->createDeserializationContext();
+        }
+
+        $visitor = $this->getVisitor(GraphNavigatorInterface::DIRECTION_DESERIALIZATION, 'json');
+        $navigator = $this->getNavigator(GraphNavigatorInterface::DIRECTION_DESERIALIZATION);
+
+        return $this->visit($navigator, $visitor, $context, $data, 'json', $type, false);
+    }
+
+    /**
+     * @param mixed $data
+     *
+     * @return mixed
+     */
+    private function visit(GraphNavigatorInterface $navigator, VisitorInterface $visitor, Context $context, $data, string $format, ?string $type = null, bool $prepare = true)
+    {
+        $context->initialize(
+            $format,
+            $visitor,
+            $navigator,
+            $this->factory,
+        );
+
+        $visitor->setNavigator($navigator);
+        $navigator->initialize($visitor, $context);
+
+        if ($prepare) {
+            $data = $visitor->prepare($data);
+        }
+
+        if (null !== $type) {
+            $type = $this->typeParser->parse($type);
+        }
+
+        return $navigator->accept($data, $type);
+    }
+
+    /**
+     * @param mixed $data
+     *
+     * @return mixed
+     */
+    private function convertArrayObjects($data)
+    {
+        if ($data instanceof \ArrayObject || $data instanceof \stdClass) {
+            $data = (array) $data;
+        }
+
+        if (\is_array($data)) {
+            foreach ($data as $k => $v) {
+                $data[$k] = $this->convertArrayObjects($v);
+            }
+        }
+
+        return $data;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/SerializerBuilder.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/SerializerBuilder.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/SerializerBuilder.php	(revision 8435)
@@ -0,0 +1,675 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use Doctrine\Common\Annotations\AnnotationReader;
+use Doctrine\Common\Annotations\CachedReader;
+use Doctrine\Common\Annotations\PsrCachedReader;
+use Doctrine\Common\Annotations\Reader;
+use Doctrine\Common\Cache\FilesystemCache;
+use JMS\Serializer\Accessor\AccessorStrategyInterface;
+use JMS\Serializer\Accessor\DefaultAccessorStrategy;
+use JMS\Serializer\Builder\DefaultDriverFactory;
+use JMS\Serializer\Builder\DocBlockDriverFactory;
+use JMS\Serializer\Builder\DriverFactoryInterface;
+use JMS\Serializer\Construction\ObjectConstructorInterface;
+use JMS\Serializer\Construction\UnserializeObjectConstructor;
+use JMS\Serializer\ContextFactory\CallableDeserializationContextFactory;
+use JMS\Serializer\ContextFactory\CallableSerializationContextFactory;
+use JMS\Serializer\ContextFactory\DeserializationContextFactoryInterface;
+use JMS\Serializer\ContextFactory\SerializationContextFactoryInterface;
+use JMS\Serializer\EventDispatcher\EventDispatcher;
+use JMS\Serializer\EventDispatcher\EventDispatcherInterface;
+use JMS\Serializer\EventDispatcher\Subscriber\DoctrineProxySubscriber;
+use JMS\Serializer\EventDispatcher\Subscriber\EnumSubscriber;
+use JMS\Serializer\Exception\InvalidArgumentException;
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\Expression\CompilableExpressionEvaluatorInterface;
+use JMS\Serializer\Expression\ExpressionEvaluatorInterface;
+use JMS\Serializer\GraphNavigator\Factory\DeserializationGraphNavigatorFactory;
+use JMS\Serializer\GraphNavigator\Factory\GraphNavigatorFactoryInterface;
+use JMS\Serializer\GraphNavigator\Factory\SerializationGraphNavigatorFactory;
+use JMS\Serializer\Handler\ArrayCollectionHandler;
+use JMS\Serializer\Handler\DateHandler;
+use JMS\Serializer\Handler\EnumHandler;
+use JMS\Serializer\Handler\HandlerRegistry;
+use JMS\Serializer\Handler\HandlerRegistryInterface;
+use JMS\Serializer\Handler\IteratorHandler;
+use JMS\Serializer\Handler\StdClassHandler;
+use JMS\Serializer\Naming\CamelCaseNamingStrategy;
+use JMS\Serializer\Naming\PropertyNamingStrategyInterface;
+use JMS\Serializer\Naming\SerializedNameAnnotationStrategy;
+use JMS\Serializer\Type\Parser;
+use JMS\Serializer\Type\ParserInterface;
+use JMS\Serializer\Visitor\Factory\DeserializationVisitorFactory;
+use JMS\Serializer\Visitor\Factory\JsonDeserializationVisitorFactory;
+use JMS\Serializer\Visitor\Factory\JsonSerializationVisitorFactory;
+use JMS\Serializer\Visitor\Factory\SerializationVisitorFactory;
+use JMS\Serializer\Visitor\Factory\XmlDeserializationVisitorFactory;
+use JMS\Serializer\Visitor\Factory\XmlSerializationVisitorFactory;
+use Metadata\Cache\CacheInterface;
+use Metadata\Cache\FileCache;
+use Metadata\MetadataFactory;
+use Metadata\MetadataFactoryInterface;
+use Symfony\Component\Cache\Adapter\FilesystemAdapter;
+
+/**
+ * Builder for serializer instances.
+ *
+ * This object makes serializer construction a breeze for projects that do not use
+ * any special dependency injection container.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+final class SerializerBuilder
+{
+    /**
+     * @var string[]
+     */
+    private $metadataDirs = [];
+
+    /**
+     * @var HandlerRegistryInterface
+     */
+    private $handlerRegistry;
+
+    /**
+     * @var bool
+     */
+    private $handlersConfigured = false;
+
+    /**
+     * @var EventDispatcherInterface
+     */
+    private $eventDispatcher;
+
+    /**
+     * @var bool
+     */
+    private $enableEnumSupport = false;
+
+    /**
+     * @var bool
+     */
+    private $listenersConfigured = false;
+
+    /**
+     * @var ObjectConstructorInterface
+     */
+    private $objectConstructor;
+
+    /**
+     * @var SerializationVisitorFactory[]
+     */
+    private $serializationVisitors;
+
+    /**
+     * @var DeserializationVisitorFactory[]
+     */
+    private $deserializationVisitors;
+
+    /**
+     * @var bool
+     */
+    private $deserializationVisitorsAdded = false;
+
+    /**
+     * @var bool
+     */
+    private $serializationVisitorsAdded = false;
+
+    /**
+     * @var PropertyNamingStrategyInterface
+     */
+    private $propertyNamingStrategy;
+
+    /**
+     * @var bool
+     */
+    private $debug = false;
+
+    /**
+     * @var string
+     */
+    private $cacheDir;
+
+    /**
+     * @var Reader
+     */
+    private $annotationReader;
+
+    /**
+     * @var bool
+     */
+    private $includeInterfaceMetadata = false;
+
+    /**
+     * @var DriverFactoryInterface
+     */
+    private $driverFactory;
+
+    /**
+     * @var SerializationContextFactoryInterface
+     */
+    private $serializationContextFactory;
+
+    /**
+     * @var DeserializationContextFactoryInterface
+     */
+    private $deserializationContextFactory;
+
+    /**
+     * @var ParserInterface
+     */
+    private $typeParser;
+
+    /**
+     * @var ExpressionEvaluatorInterface
+     */
+    private $expressionEvaluator;
+
+    /**
+     * @var AccessorStrategyInterface
+     */
+    private $accessorStrategy;
+
+    /**
+     * @var CacheInterface
+     */
+    private $metadataCache;
+
+    /**
+     * @var bool
+     */
+    private $docBlockTyperResolver;
+
+    /**
+     * @param mixed ...$args
+     *
+     * @return SerializerBuilder
+     */
+    public static function create(...$args): self
+    {
+        return new static(...$args);
+    }
+
+    public function __construct(?HandlerRegistryInterface $handlerRegistry = null, ?EventDispatcherInterface $eventDispatcher = null)
+    {
+        $this->typeParser = new Parser();
+        $this->handlerRegistry = $handlerRegistry ?: new HandlerRegistry();
+        $this->eventDispatcher = $eventDispatcher ?: new EventDispatcher();
+        $this->serializationVisitors = [];
+        $this->deserializationVisitors = [];
+
+        if ($handlerRegistry) {
+            $this->handlersConfigured = true;
+        }
+
+        if ($eventDispatcher) {
+            $this->listenersConfigured = true;
+        }
+    }
+
+    public function setAccessorStrategy(AccessorStrategyInterface $accessorStrategy): self
+    {
+        $this->accessorStrategy = $accessorStrategy;
+
+        return $this;
+    }
+
+    private function getAccessorStrategy(): AccessorStrategyInterface
+    {
+        if (!$this->accessorStrategy) {
+            $this->accessorStrategy = new DefaultAccessorStrategy($this->expressionEvaluator);
+        }
+
+        return $this->accessorStrategy;
+    }
+
+    public function setExpressionEvaluator(ExpressionEvaluatorInterface $expressionEvaluator): self
+    {
+        $this->expressionEvaluator = $expressionEvaluator;
+
+        return $this;
+    }
+
+    public function setTypeParser(ParserInterface $parser): self
+    {
+        $this->typeParser = $parser;
+
+        return $this;
+    }
+
+    public function setAnnotationReader(Reader $reader): self
+    {
+        $this->annotationReader = $reader;
+
+        return $this;
+    }
+
+    public function setDebug(bool $bool): self
+    {
+        $this->debug = $bool;
+
+        return $this;
+    }
+
+    public function setCacheDir(string $dir): self
+    {
+        if (!is_dir($dir)) {
+            $this->createDir($dir);
+        }
+
+        if (!is_writable($dir)) {
+            throw new InvalidArgumentException(sprintf('The cache directory "%s" is not writable.', $dir));
+        }
+
+        $this->cacheDir = $dir;
+
+        return $this;
+    }
+
+    public function addDefaultHandlers(): self
+    {
+        $this->handlersConfigured = true;
+        $this->handlerRegistry->registerSubscribingHandler(new DateHandler());
+        $this->handlerRegistry->registerSubscribingHandler(new StdClassHandler());
+        $this->handlerRegistry->registerSubscribingHandler(new ArrayCollectionHandler());
+        $this->handlerRegistry->registerSubscribingHandler(new IteratorHandler());
+
+        if ($this->enableEnumSupport) {
+            $this->handlerRegistry->registerSubscribingHandler(new EnumHandler());
+        }
+
+        return $this;
+    }
+
+    public function configureHandlers(\Closure $closure): self
+    {
+        $this->handlersConfigured = true;
+        $closure($this->handlerRegistry);
+
+        return $this;
+    }
+
+    public function addDefaultListeners(): self
+    {
+        $this->listenersConfigured = true;
+        $this->eventDispatcher->addSubscriber(new DoctrineProxySubscriber());
+        if ($this->enableEnumSupport) {
+            $this->eventDispatcher->addSubscriber(new EnumSubscriber());
+        }
+
+        return $this;
+    }
+
+    public function configureListeners(\Closure $closure): self
+    {
+        $this->listenersConfigured = true;
+        $closure($this->eventDispatcher);
+
+        return $this;
+    }
+
+    public function setObjectConstructor(ObjectConstructorInterface $constructor): self
+    {
+        $this->objectConstructor = $constructor;
+
+        return $this;
+    }
+
+    public function setPropertyNamingStrategy(PropertyNamingStrategyInterface $propertyNamingStrategy): self
+    {
+        $this->propertyNamingStrategy = $propertyNamingStrategy;
+
+        return $this;
+    }
+
+    public function setSerializationVisitor(string $format, SerializationVisitorFactory $visitor): self
+    {
+        $this->serializationVisitorsAdded = true;
+        $this->serializationVisitors[$format] = $visitor;
+
+        return $this;
+    }
+
+    public function setDeserializationVisitor(string $format, DeserializationVisitorFactory $visitor): self
+    {
+        $this->deserializationVisitorsAdded = true;
+        $this->deserializationVisitors[$format] = $visitor;
+
+        return $this;
+    }
+
+    public function addDefaultSerializationVisitors(): self
+    {
+        $this->serializationVisitorsAdded = true;
+        $this->serializationVisitors = [
+            'xml' => new XmlSerializationVisitorFactory(),
+            'json' => new JsonSerializationVisitorFactory(),
+        ];
+
+        return $this;
+    }
+
+    public function addDefaultDeserializationVisitors(): self
+    {
+        $this->deserializationVisitorsAdded = true;
+        $this->deserializationVisitors = [
+            'xml' => new XmlDeserializationVisitorFactory(),
+            'json' => new JsonDeserializationVisitorFactory(),
+        ];
+
+        return $this;
+    }
+
+    /**
+     * @param bool $include Whether to include the metadata from the interfaces
+     *
+     * @return SerializerBuilder
+     */
+    public function includeInterfaceMetadata(bool $include): self
+    {
+        $this->includeInterfaceMetadata = $include;
+
+        return $this;
+    }
+
+    /**
+     * Sets a map of namespace prefixes to directories.
+     *
+     * This method overrides any previously defined directories.
+     *
+     * @param array <string,string> $namespacePrefixToDirMap
+     *
+     * @return SerializerBuilder
+     *
+     * @throws InvalidArgumentException When a directory does not exist.
+     */
+    public function setMetadataDirs(array $namespacePrefixToDirMap): self
+    {
+        foreach ($namespacePrefixToDirMap as $dir) {
+            if (!is_dir($dir)) {
+                throw new InvalidArgumentException(sprintf('The directory "%s" does not exist.', $dir));
+            }
+        }
+
+        $this->metadataDirs = $namespacePrefixToDirMap;
+
+        return $this;
+    }
+
+    /**
+     * Adds a directory where the serializer will look for class metadata.
+     *
+     * The namespace prefix will make the names of the actual metadata files a bit shorter. For example, let's assume
+     * that you have a directory where you only store metadata files for the ``MyApplication\Entity`` namespace.
+     *
+     * If you use an empty prefix, your metadata files would need to look like:
+     *
+     * ``my-dir/MyApplication.Entity.SomeObject.yml``
+     * ``my-dir/MyApplication.Entity.OtherObject.xml``
+     *
+     * If you use ``MyApplication\Entity`` as prefix, your metadata files would need to look like:
+     *
+     * ``my-dir/SomeObject.yml``
+     * ``my-dir/OtherObject.yml``
+     *
+     * Please keep in mind that you currently may only have one directory per namespace prefix.
+     *
+     * @param string $dir             The directory where metadata files are located.
+     * @param string $namespacePrefix An optional prefix if you only store metadata for specific namespaces in this directory.
+     *
+     * @return SerializerBuilder
+     *
+     * @throws InvalidArgumentException When a directory does not exist.
+     * @throws InvalidArgumentException When a directory has already been registered.
+     */
+    public function addMetadataDir(string $dir, string $namespacePrefix = ''): self
+    {
+        if (!is_dir($dir)) {
+            throw new InvalidArgumentException(sprintf('The directory "%s" does not exist.', $dir));
+        }
+
+        if (isset($this->metadataDirs[$namespacePrefix])) {
+            throw new InvalidArgumentException(sprintf('There is already a directory configured for the namespace prefix "%s". Please use replaceMetadataDir() to override directories.', $namespacePrefix));
+        }
+
+        $this->metadataDirs[$namespacePrefix] = $dir;
+
+        return $this;
+    }
+
+    /**
+     * Adds a map of namespace prefixes to directories.
+     *
+     * @param array <string,string> $namespacePrefixToDirMap
+     *
+     * @return SerializerBuilder
+     */
+    public function addMetadataDirs(array $namespacePrefixToDirMap): self
+    {
+        foreach ($namespacePrefixToDirMap as $prefix => $dir) {
+            $this->addMetadataDir($dir, $prefix);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Similar to addMetadataDir(), but overrides an existing entry.
+     *
+     * @return SerializerBuilder
+     *
+     * @throws InvalidArgumentException When a directory does not exist.
+     * @throws InvalidArgumentException When no directory is configured for the ns prefix.
+     */
+    public function replaceMetadataDir(string $dir, string $namespacePrefix = ''): self
+    {
+        if (!is_dir($dir)) {
+            throw new InvalidArgumentException(sprintf('The directory "%s" does not exist.', $dir));
+        }
+
+        if (!isset($this->metadataDirs[$namespacePrefix])) {
+            throw new InvalidArgumentException(sprintf('There is no directory configured for namespace prefix "%s". Please use addMetadataDir() for adding new directories.', $namespacePrefix));
+        }
+
+        $this->metadataDirs[$namespacePrefix] = $dir;
+
+        return $this;
+    }
+
+    public function setMetadataDriverFactory(DriverFactoryInterface $driverFactory): self
+    {
+        $this->driverFactory = $driverFactory;
+
+        return $this;
+    }
+
+    /**
+     * @param SerializationContextFactoryInterface|callable $serializationContextFactory
+     */
+    public function setSerializationContextFactory($serializationContextFactory): self
+    {
+        if ($serializationContextFactory instanceof SerializationContextFactoryInterface) {
+            $this->serializationContextFactory = $serializationContextFactory;
+        } elseif (is_callable($serializationContextFactory)) {
+            $this->serializationContextFactory = new CallableSerializationContextFactory(
+                $serializationContextFactory,
+            );
+        } else {
+            throw new InvalidArgumentException('expected SerializationContextFactoryInterface or callable.');
+        }
+
+        return $this;
+    }
+
+    /**
+     * @param DeserializationContextFactoryInterface|callable $deserializationContextFactory
+     */
+    public function setDeserializationContextFactory($deserializationContextFactory): self
+    {
+        if ($deserializationContextFactory instanceof DeserializationContextFactoryInterface) {
+            $this->deserializationContextFactory = $deserializationContextFactory;
+        } elseif (is_callable($deserializationContextFactory)) {
+            $this->deserializationContextFactory = new CallableDeserializationContextFactory(
+                $deserializationContextFactory,
+            );
+        } else {
+            throw new InvalidArgumentException('expected DeserializationContextFactoryInterface or callable.');
+        }
+
+        return $this;
+    }
+
+    public function enableEnumSupport(bool $enableEnumSupport = true): self
+    {
+        if ($enableEnumSupport && PHP_VERSION_ID < 80100) {
+            throw new InvalidArgumentException('Enum support can be enabled only on PHP 8.1 or higher.');
+        }
+
+        $this->enableEnumSupport = $enableEnumSupport;
+
+        return $this;
+    }
+
+    public function setMetadataCache(CacheInterface $cache): self
+    {
+        $this->metadataCache = $cache;
+
+        return $this;
+    }
+
+    public function setDocBlockTypeResolver(bool $docBlockTypeResolver): self
+    {
+        $this->docBlockTyperResolver = $docBlockTypeResolver;
+
+        return $this;
+    }
+
+    public function build(): Serializer
+    {
+        $annotationReader = $this->annotationReader;
+        if (null === $annotationReader && class_exists(AnnotationReader::class)) {
+            $annotationReader = $this->decorateAnnotationReader(new AnnotationReader());
+        }
+
+        if (null === $this->driverFactory) {
+            $this->initializePropertyNamingStrategy();
+            $this->driverFactory = new DefaultDriverFactory(
+                $this->propertyNamingStrategy,
+                $this->typeParser,
+                $this->expressionEvaluator instanceof CompilableExpressionEvaluatorInterface ? $this->expressionEvaluator : null,
+            );
+            $this->driverFactory->enableEnumSupport($this->enableEnumSupport);
+        }
+
+        if ($this->docBlockTyperResolver) {
+            $this->driverFactory = new DocBlockDriverFactory($this->driverFactory, $this->typeParser);
+        }
+
+        $metadataDriver = $this->driverFactory->createDriver($this->metadataDirs, $annotationReader);
+        $metadataFactory = new MetadataFactory($metadataDriver, null, $this->debug);
+
+        $metadataFactory->setIncludeInterfaces($this->includeInterfaceMetadata);
+
+        if (null !== $this->metadataCache) {
+            $metadataFactory->setCache($this->metadataCache);
+        } elseif (null !== $this->cacheDir) {
+            $this->createDir($this->cacheDir . '/metadata');
+            $metadataFactory->setCache(new FileCache($this->cacheDir . '/metadata'));
+        }
+
+        if (!$this->handlersConfigured) {
+            $this->addDefaultHandlers();
+        }
+
+        if (!$this->listenersConfigured) {
+            $this->addDefaultListeners();
+        }
+
+        if (!$this->serializationVisitorsAdded) {
+            $this->addDefaultSerializationVisitors();
+        }
+
+        if (!$this->deserializationVisitorsAdded) {
+            $this->addDefaultDeserializationVisitors();
+        }
+
+        $navigatorFactories = [
+            GraphNavigatorInterface::DIRECTION_SERIALIZATION => $this->getSerializationNavigatorFactory($metadataFactory),
+            GraphNavigatorInterface::DIRECTION_DESERIALIZATION => $this->getDeserializationNavigatorFactory($metadataFactory),
+        ];
+
+        return new Serializer(
+            $metadataFactory,
+            $navigatorFactories,
+            $this->serializationVisitors,
+            $this->deserializationVisitors,
+            $this->serializationContextFactory,
+            $this->deserializationContextFactory,
+            $this->typeParser,
+        );
+    }
+
+    private function getSerializationNavigatorFactory(MetadataFactoryInterface $metadataFactory): GraphNavigatorFactoryInterface
+    {
+        return new SerializationGraphNavigatorFactory(
+            $metadataFactory,
+            $this->handlerRegistry,
+            $this->getAccessorStrategy(),
+            $this->eventDispatcher,
+            $this->expressionEvaluator,
+        );
+    }
+
+    private function getDeserializationNavigatorFactory(MetadataFactoryInterface $metadataFactory): GraphNavigatorFactoryInterface
+    {
+        return new DeserializationGraphNavigatorFactory(
+            $metadataFactory,
+            $this->handlerRegistry,
+            $this->objectConstructor ?: new UnserializeObjectConstructor(),
+            $this->getAccessorStrategy(),
+            $this->eventDispatcher,
+            $this->expressionEvaluator,
+        );
+    }
+
+    private function initializePropertyNamingStrategy(): void
+    {
+        if (null !== $this->propertyNamingStrategy) {
+            return;
+        }
+
+        $this->propertyNamingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy());
+    }
+
+    private function createDir(string $dir): void
+    {
+        if (is_dir($dir)) {
+            return;
+        }
+
+        if (false === @mkdir($dir, 0777, true) && false === is_dir($dir)) {
+            throw new RuntimeException(sprintf('Could not create directory "%s".', $dir));
+        }
+    }
+
+    private function decorateAnnotationReader(Reader $annotationReader): Reader
+    {
+        if (null !== $this->cacheDir) {
+            $this->createDir($this->cacheDir . '/annotations');
+            if (class_exists(FilesystemAdapter::class)) {
+                $annotationsCache = new FilesystemAdapter('', 0, $this->cacheDir . '/annotations');
+                $annotationReader = new PsrCachedReader($annotationReader, $annotationsCache, $this->debug);
+            } elseif (class_exists(FilesystemCache::class) && class_exists(CachedReader::class)) {
+                $annotationsCache = new FilesystemCache($this->cacheDir . '/annotations');
+                $annotationReader = new CachedReader($annotationReader, $annotationsCache, $this->debug);
+            }
+        }
+
+        return $annotationReader;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/SerializerInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/SerializerInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/SerializerInterface.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use JMS\Serializer\Exception\RuntimeException;
+
+/**
+ * Serializer Interface.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+interface SerializerInterface
+{
+    /**
+     * Serializes the given data to the specified output format.
+     *
+     * @param mixed $data
+     *
+     * @throws RuntimeException
+     */
+    public function serialize($data, string $format, ?SerializationContext $context = null, ?string $type = null): string;
+
+    /**
+     * Deserializes the given data to the specified type.
+     *
+     * @return mixed
+     *
+     * @throws RuntimeException
+     */
+    public function deserialize(string $data, string $type, string $format, ?DeserializationContext $context = null);
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Twig/SerializerBaseExtension.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Twig/SerializerBaseExtension.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Twig/SerializerBaseExtension.php	(revision 8435)
@@ -0,0 +1,30 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Twig;
+
+use Twig\Extension\AbstractExtension;
+
+abstract class SerializerBaseExtension extends AbstractExtension
+{
+    /**
+     * @var string
+     */
+    protected $serializationFunctionsPrefix;
+
+    /**
+     * @return string
+     *
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint
+     */
+    public function getName()
+    {
+        return 'jms_serializer';
+    }
+
+    public function __construct(string $serializationFunctionsPrefix = '')
+    {
+        $this->serializationFunctionsPrefix = $serializationFunctionsPrefix;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Twig/SerializerExtension.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Twig/SerializerExtension.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Twig/SerializerExtension.php	(revision 8435)
@@ -0,0 +1,59 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Twig;
+
+use JMS\Serializer\SerializationContext;
+use JMS\Serializer\SerializerInterface;
+use Twig\TwigFilter;
+use Twig\TwigFunction;
+
+/**
+ * Serializer helper twig extension
+ *
+ * Basically provides access to JMSSerializer from Twig
+ */
+class SerializerExtension extends SerializerBaseExtension
+{
+    /**
+     * @var SerializerInterface
+     */
+    protected $serializer;
+
+    public function __construct(SerializerInterface $serializer, string $serializationFunctionsPrefix = '')
+    {
+        $this->serializer = $serializer;
+
+        parent::__construct($serializationFunctionsPrefix);
+    }
+
+    /**
+     * @return TwigFilter[]
+     *
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint
+     */
+    public function getFilters()
+    {
+        return [
+            new TwigFilter($this->serializationFunctionsPrefix . 'serialize', [$this, 'serialize']),
+        ];
+    }
+
+    /**
+     * @return TwigFunction[]
+     *
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint
+     */
+    public function getFunctions()
+    {
+        return [
+            new TwigFunction($this->serializationFunctionsPrefix . 'serialization_context', '\JMS\Serializer\SerializationContext::create'),
+        ];
+    }
+
+    public function serialize(object $object, string $type = 'json', ?SerializationContext $context = null): string
+    {
+        return $this->serializer->serialize($object, $type, $context);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Twig/SerializerRuntimeExtension.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Twig/SerializerRuntimeExtension.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Twig/SerializerRuntimeExtension.php	(revision 8435)
@@ -0,0 +1,38 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Twig;
+
+use Twig\TwigFilter;
+use Twig\TwigFunction;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+final class SerializerRuntimeExtension extends SerializerBaseExtension
+{
+    /**
+     * @return TwigFilter[]
+     *
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint
+     */
+    public function getFilters()
+    {
+        return [
+            new TwigFilter($this->serializationFunctionsPrefix . 'serialize', [SerializerRuntimeHelper::class, 'serialize']),
+        ];
+    }
+
+    /**
+     * @return TwigFunction[]
+     *
+     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint
+     */
+    public function getFunctions()
+    {
+        return [
+            new TwigFunction($this->serializationFunctionsPrefix . 'serialization_context', '\JMS\Serializer\SerializationContext::create'),
+        ];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Twig/SerializerRuntimeHelper.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Twig/SerializerRuntimeHelper.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Twig/SerializerRuntimeHelper.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Twig;
+
+use JMS\Serializer\SerializationContext;
+use JMS\Serializer\SerializerInterface;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+final class SerializerRuntimeHelper
+{
+    /**
+     * @var SerializerInterface
+     */
+    protected $serializer;
+
+    public function __construct(SerializerInterface $serializer)
+    {
+        $this->serializer = $serializer;
+    }
+
+    /**
+     * @param mixed $object
+     */
+    public function serialize($object, string $type = 'json', ?SerializationContext $context = null): string
+    {
+        return $this->serializer->serialize($object, $type, $context);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Exception/Exception.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Exception/Exception.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Exception/Exception.php	(revision 8435)
@@ -0,0 +1,11 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Type\Exception;
+
+use JMS\Serializer\Exception\Exception as BaseException;
+
+interface Exception extends BaseException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Exception/InvalidNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Exception/InvalidNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Exception/InvalidNode.php	(revision 8435)
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Type\Exception;
+
+final class InvalidNode extends \LogicException implements Exception
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Exception/SyntaxError.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Exception/SyntaxError.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Exception/SyntaxError.php	(revision 8435)
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Type\Exception;
+
+final class SyntaxError extends \RuntimeException implements Exception
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Lexer.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Lexer.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Lexer.php	(revision 8435)
@@ -0,0 +1,113 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Type;
+
+use Doctrine\Common\Lexer\AbstractLexer;
+use JMS\Serializer\Type\Exception\SyntaxError;
+
+/**
+ * @internal
+ */
+final class Lexer extends AbstractLexer
+{
+    public const T_UNKNOWN = 0;
+    public const T_INTEGER = 1;
+    public const T_STRING = 2;
+    public const T_FLOAT = 3;
+    public const T_ARRAY_START = 4;
+    public const T_ARRAY_END = 5;
+    public const T_COMMA = 6;
+    public const T_TYPE_START = 7;
+    public const T_TYPE_END = 8;
+    public const T_IDENTIFIER = 9;
+    public const T_NULL = 10;
+
+    public function parse(string $type)
+    {
+        try {
+            return $this->getType($type);
+        } catch (\Throwable $e) {
+            throw new SyntaxError($e->getMessage(), 0, $e);
+        }
+    }
+
+    protected function getCatchablePatterns(): array
+    {
+        return [
+            '[a-z][a-z_\\\\0-9]*', // identifier or qualified name
+            "'(?:[^']|'')*'", // single quoted strings
+            '(?:[0-9]+(?:[\.][0-9]+)*)(?:e[+-]?[0-9]+)?', // numbers
+            '"(?:[^"]|"")*"', // double quoted strings
+            '<',
+            '>',
+            '\\[',
+            '\\]',
+        ];
+    }
+
+    protected function getNonCatchablePatterns(): array
+    {
+        return ['\s+'];
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @return int|string|null
+     */
+    protected function getType(&$value)
+    {
+        $type = self::T_UNKNOWN;
+
+        switch (true) {
+            // Recognize numeric values
+            case is_numeric($value):
+                if (false !== strpos($value, '.') || false !== stripos($value, 'e')) {
+                    return self::T_FLOAT;
+                }
+
+                return self::T_INTEGER;
+
+            // Recognize quoted strings
+            case "'" === $value[0]:
+                $value = str_replace("''", "'", substr($value, 1, strlen($value) - 2));
+
+                return self::T_STRING;
+
+            case '"' === $value[0]:
+                $value = str_replace('""', '"', substr($value, 1, strlen($value) - 2));
+
+                return self::T_STRING;
+
+            case 'null' === $value:
+                return self::T_NULL;
+
+            // Recognize identifiers, aliased or qualified names
+            case ctype_alpha($value[0]) || '\\' === $value[0]:
+                return self::T_IDENTIFIER;
+
+            case ',' === $value:
+                return self::T_COMMA;
+
+            case '>' === $value:
+                return self::T_TYPE_END;
+
+            case '<' === $value:
+                return self::T_TYPE_START;
+
+            case ']' === $value:
+                return self::T_ARRAY_END;
+
+            case '[' === $value:
+                return self::T_ARRAY_START;
+
+            // Default
+            default:
+                // Do nothing
+        }
+
+        return $type;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Parser.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Parser.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/Parser.php	(revision 8435)
@@ -0,0 +1,162 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Type;
+
+use JMS\Serializer\Type\Exception\SyntaxError;
+
+/**
+ * @internal
+ */
+final class Parser implements ParserInterface
+{
+    /**
+     * @var Lexer
+     */
+    private $lexer;
+
+    /**
+     * @var bool
+     */
+    private $root = true;
+
+    public function parse(string $string): array
+    {
+        $this->lexer = new Lexer();
+        $this->lexer->setInput($string);
+        $this->lexer->moveNext();
+
+        return $this->visit();
+    }
+
+    /**
+     * @return mixed
+     */
+    private function visit()
+    {
+        $this->lexer->moveNext();
+
+        if (!$this->lexer->token) {
+            throw new SyntaxError(
+                'Syntax error, unexpected end of stream',
+            );
+        }
+
+        if (Lexer::T_FLOAT === $this->lexer->token->type) {
+            return floatval($this->lexer->token->value);
+        } elseif (Lexer::T_INTEGER === $this->lexer->token->type) {
+            return intval($this->lexer->token->value);
+        } elseif (Lexer::T_NULL === $this->lexer->token->type) {
+            return null;
+        } elseif (Lexer::T_STRING === $this->lexer->token->type) {
+            return $this->lexer->token->value;
+        } elseif (Lexer::T_IDENTIFIER === $this->lexer->token->type) {
+            if ($this->lexer->isNextToken(Lexer::T_TYPE_START)) {
+                return $this->visitCompoundType();
+            } elseif ($this->lexer->isNextToken(Lexer::T_ARRAY_START)) {
+                return $this->visitArrayType();
+            }
+
+            return $this->visitSimpleType();
+        } elseif (!$this->root && Lexer::T_ARRAY_START === $this->lexer->token->type) {
+            return $this->visitArrayType();
+        }
+
+        throw new SyntaxError(sprintf(
+            'Syntax error, unexpected "%s" (%s)',
+            $this->lexer->token->value,
+            $this->getConstant($this->lexer->token->type),
+        ));
+    }
+
+    /**
+     * @return string|mixed[]
+     */
+    private function visitSimpleType()
+    {
+        $value = $this->lexer->token->value;
+
+        return ['name' => $value, 'params' => []];
+    }
+
+    private function visitCompoundType(): array
+    {
+        $this->root = false;
+        $name = $this->lexer->token->value;
+        $this->match(Lexer::T_TYPE_START);
+
+        $params = [];
+        if (!$this->lexer->isNextToken(Lexer::T_TYPE_END)) {
+            while (true) {
+                $params[] = $this->visit();
+
+                if ($this->lexer->isNextToken(Lexer::T_TYPE_END)) {
+                    break;
+                }
+
+                $this->match(Lexer::T_COMMA);
+            }
+        }
+
+        $this->match(Lexer::T_TYPE_END);
+
+        return [
+            'name' => $name,
+            'params' => $params,
+        ];
+    }
+
+    private function visitArrayType(): array
+    {
+        /*
+         * Here we should call $this->match(Lexer::T_ARRAY_START); to make it clean
+         * but the token has already been consumed by moveNext() in visit()
+         */
+
+        $params = [];
+        if (!$this->lexer->isNextToken(Lexer::T_ARRAY_END)) {
+            while (true) {
+                $params[] = $this->visit();
+                if ($this->lexer->isNextToken(Lexer::T_ARRAY_END)) {
+                    break;
+                }
+
+                $this->match(Lexer::T_COMMA);
+            }
+        }
+
+        $this->match(Lexer::T_ARRAY_END);
+
+        return $params;
+    }
+
+    private function match(int $token): void
+    {
+        if (!$this->lexer->lookahead) {
+            throw new SyntaxError(
+                sprintf('Syntax error, unexpected end of stream, expected %s', $this->getConstant($token)),
+            );
+        }
+
+        if ($this->lexer->lookahead->type === $token) {
+            $this->lexer->moveNext();
+
+            return;
+        }
+
+        throw new SyntaxError(sprintf(
+            'Syntax error, unexpected "%s" (%s), expected was %s',
+            $this->lexer->lookahead->value,
+            $this->getConstant($this->lexer->lookahead->type),
+            $this->getConstant($token),
+        ));
+    }
+
+    private function getConstant(int $value): string
+    {
+        $oClass = new \ReflectionClass(Lexer::class);
+
+        return array_search($value, $oClass->getConstants());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/ParserInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/ParserInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Type/ParserInterface.php	(revision 8435)
@@ -0,0 +1,10 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Type;
+
+interface ParserInterface
+{
+    public function parse(string $type): array;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/DeserializationVisitorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/DeserializationVisitorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/DeserializationVisitorInterface.php	(revision 8435)
@@ -0,0 +1,97 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Visitor;
+
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\VisitorInterface;
+
+/**
+ * Interface for visitors.
+ *
+ * This contains the minimal set of values that must be supported for any
+ * output format.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+interface DeserializationVisitorInterface extends VisitorInterface
+{
+    /**
+     * @param mixed $data
+     * @param array $type
+     *
+     * @return null
+     */
+    public function visitNull($data, array $type);
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     */
+    public function visitString($data, array $type): ?string;
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     */
+    public function visitBoolean($data, array $type): ?bool;
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     */
+    public function visitDouble($data, array $type): ?float;
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     */
+    public function visitInteger($data, array $type): ?int;
+
+    /**
+     * Returns the class name based on the type of the discriminator map value
+     *
+     * @param mixed $data
+     */
+    public function visitDiscriminatorMapProperty($data, ClassMetadata $metadata): string;
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     *
+     * @return array<mixed>
+     */
+    public function visitArray($data, array $type): array;
+
+    /**
+     * Called before the properties of the object are being visited.
+     *
+     * @param array $type
+     */
+    public function startVisitingObject(ClassMetadata $metadata, object $data, array $type): void;
+
+    /**
+     * @param mixed $data
+     *
+     * @return mixed
+     */
+    public function visitProperty(PropertyMetadata $metadata, $data);
+
+    /**
+     * Called after all properties of the object have been visited.
+     *
+     * @param mixed $data
+     * @param array $type
+     */
+    public function endVisitingObject(ClassMetadata $metadata, $data, array $type): object;
+
+    /**
+     * @param mixed $data
+     *
+     * @return mixed
+     */
+    public function getResult($data);
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/DeserializationVisitorFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/DeserializationVisitorFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/DeserializationVisitorFactory.php	(revision 8435)
@@ -0,0 +1,15 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Visitor\Factory;
+
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+interface DeserializationVisitorFactory
+{
+    public function getVisitor(): DeserializationVisitorInterface;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/JsonDeserializationVisitorFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/JsonDeserializationVisitorFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/JsonDeserializationVisitorFactory.php	(revision 8435)
@@ -0,0 +1,58 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Visitor\Factory;
+
+use JMS\Serializer\JsonDeserializationStrictVisitor;
+use JMS\Serializer\JsonDeserializationVisitor;
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+final class JsonDeserializationVisitorFactory implements DeserializationVisitorFactory
+{
+    /**
+     * @var int
+     */
+    private $options = 0;
+
+    /**
+     * @var int
+     */
+    private $depth = 512;
+
+    /**
+     * @var bool
+     */
+    private $strict;
+
+    public function __construct(bool $strict = false)
+    {
+        $this->strict = $strict;
+    }
+
+    public function getVisitor(): DeserializationVisitorInterface
+    {
+        if ($this->strict) {
+            return new JsonDeserializationStrictVisitor($this->options, $this->depth);
+        }
+
+        return new JsonDeserializationVisitor($this->options, $this->depth);
+    }
+
+    public function setOptions(int $options): self
+    {
+        $this->options = $options;
+
+        return $this;
+    }
+
+    public function setDepth(int $depth): self
+    {
+        $this->depth = $depth;
+
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/JsonSerializationVisitorFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/JsonSerializationVisitorFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/JsonSerializationVisitorFactory.php	(revision 8435)
@@ -0,0 +1,31 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Visitor\Factory;
+
+use JMS\Serializer\JsonSerializationVisitor;
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+final class JsonSerializationVisitorFactory implements SerializationVisitorFactory
+{
+    /**
+     * @var int
+     */
+    private $options = JSON_PRESERVE_ZERO_FRACTION;
+
+    public function getVisitor(): SerializationVisitorInterface
+    {
+        return new JsonSerializationVisitor($this->options);
+    }
+
+    public function setOptions(int $options): self
+    {
+        $this->options = $options;
+
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/SerializationVisitorFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/SerializationVisitorFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/SerializationVisitorFactory.php	(revision 8435)
@@ -0,0 +1,15 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Visitor\Factory;
+
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+interface SerializationVisitorFactory
+{
+    public function getVisitor(): SerializationVisitorInterface;
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/XmlDeserializationVisitorFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/XmlDeserializationVisitorFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/XmlDeserializationVisitorFactory.php	(revision 8435)
@@ -0,0 +1,61 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Visitor\Factory;
+
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+use JMS\Serializer\XmlDeserializationVisitor;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+final class XmlDeserializationVisitorFactory implements DeserializationVisitorFactory
+{
+    /**
+     * @var bool
+     */
+    private $disableExternalEntities = true;
+
+    /**
+     * @var string[]
+     */
+    private $doctypeWhitelist = [];
+
+    /**
+     * @var int
+     */
+    private $options = 0;
+
+    /**
+     * @return XmlDeserializationVisitor
+     */
+    public function getVisitor(): DeserializationVisitorInterface
+    {
+        return new XmlDeserializationVisitor($this->disableExternalEntities, $this->doctypeWhitelist, $this->options);
+    }
+
+    public function enableExternalEntities(bool $enable = true): self
+    {
+        $this->disableExternalEntities = !$enable;
+
+        return $this;
+    }
+
+    /**
+     * @param string[] $doctypeWhitelist
+     */
+    public function setDoctypeWhitelist(array $doctypeWhitelist): self
+    {
+        $this->doctypeWhitelist = $doctypeWhitelist;
+
+        return $this;
+    }
+
+    public function setOptions(int $options): self
+    {
+        $this->options = $options;
+
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/XmlSerializationVisitorFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/XmlSerializationVisitorFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/Factory/XmlSerializationVisitorFactory.php	(revision 8435)
@@ -0,0 +1,79 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Visitor\Factory;
+
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+use JMS\Serializer\XmlSerializationVisitor;
+
+/**
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+final class XmlSerializationVisitorFactory implements SerializationVisitorFactory
+{
+    /**
+     * @var string
+     */
+    private $defaultRootName = 'result';
+
+    /**
+     * @var string
+     */
+    private $defaultVersion = '1.0';
+
+    /**
+     * @var string
+     */
+    private $defaultEncoding = 'UTF-8';
+
+    /**
+     * @var bool
+     */
+    private $formatOutput = true;
+
+    /**
+     * @var string|null
+     */
+    private $defaultRootNamespace;
+
+    public function getVisitor(): SerializationVisitorInterface
+    {
+        return new XmlSerializationVisitor(
+            $this->formatOutput,
+            $this->defaultEncoding,
+            $this->defaultVersion,
+            $this->defaultRootName,
+            $this->defaultRootNamespace,
+        );
+    }
+
+    public function setDefaultRootName(string $name, ?string $namespace = null): self
+    {
+        $this->defaultRootName = $name;
+        $this->defaultRootNamespace = $namespace;
+
+        return $this;
+    }
+
+    public function setDefaultVersion(string $version): self
+    {
+        $this->defaultVersion = $version;
+
+        return $this;
+    }
+
+    public function setDefaultEncoding(string $encoding): self
+    {
+        $this->defaultEncoding = $encoding;
+
+        return $this;
+    }
+
+    public function setFormatOutput(bool $formatOutput): self
+    {
+        $this->formatOutput = (bool) $formatOutput;
+
+        return $this;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/SerializationVisitorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/SerializationVisitorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/Visitor/SerializationVisitorInterface.php	(revision 8435)
@@ -0,0 +1,70 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer\Visitor;
+
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\VisitorInterface;
+
+/**
+ * Interface for visitors.
+ *
+ * This contains the minimal set of values that must be supported for any
+ * output format.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+interface SerializationVisitorInterface extends VisitorInterface
+{
+    /**
+     * @param mixed $data
+     *
+     * @return mixed
+     */
+    public function visitNull($data, array $type);
+
+    /**
+     * @return mixed
+     */
+    public function visitString(string $data, array $type);
+
+    /**
+     * @return mixed
+     */
+    public function visitBoolean(bool $data, array $type);
+
+    /**
+     * @return mixed
+     */
+    public function visitDouble(float $data, array $type);
+
+    /**
+     * @return mixed
+     */
+    public function visitInteger(int $data, array $type);
+
+    /**
+     * @return array|\ArrayObject|void
+     */
+    public function visitArray(array $data, array $type);
+
+    /**
+     * Called before the properties of the object are being visited.
+     */
+    public function startVisitingObject(ClassMetadata $metadata, object $data, array $type): void;
+
+    /**
+     * @param mixed $data
+     */
+    public function visitProperty(PropertyMetadata $metadata, $data): void;
+
+    /**
+     * Called after all properties of the object have been visited.
+     *
+     * @return array|\ArrayObject|void
+     */
+    public function endVisitingObject(ClassMetadata $metadata, object $data, array $type);
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/VisitorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/VisitorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/VisitorInterface.php	(revision 8435)
@@ -0,0 +1,43 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+/**
+ * Interface for visitors.
+ *
+ * This contains the minimal set of values that must be supported for any
+ * output format.
+ *
+ * @internal
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ * @author Asmir Mustafic <goetas@gmail.com>
+ */
+interface VisitorInterface
+{
+    /**
+     * Allows visitors to convert the input data to a different representation
+     * before the actual serialization/deserialization process starts.
+     *
+     * @param mixed $data
+     *
+     * @return mixed
+     */
+    public function prepare($data);
+
+    /**
+     * Called before serialization/deserialization starts.
+     */
+    public function setNavigator(GraphNavigatorInterface $navigator): void;
+
+    /**
+     * Get the result of the serialization/deserialization process.
+     *
+     * @param mixed $data
+     *
+     * @return mixed
+     */
+    public function getResult($data);
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/XmlDeserializationVisitor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/XmlDeserializationVisitor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/XmlDeserializationVisitor.php	(revision 8435)
@@ -0,0 +1,508 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use JMS\Serializer\Exception\InvalidArgumentException;
+use JMS\Serializer\Exception\LogicException;
+use JMS\Serializer\Exception\NotAcceptableException;
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\Exception\XmlErrorException;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Visitor\DeserializationVisitorInterface;
+
+final class XmlDeserializationVisitor extends AbstractVisitor implements NullAwareVisitorInterface, DeserializationVisitorInterface
+{
+    /**
+     * @var \SplStack
+     */
+    private $objectStack;
+
+    /**
+     * @var \SplStack
+     */
+    private $metadataStack;
+
+    /**
+     * @var \SplStack
+     */
+    private $objectMetadataStack;
+
+    /**
+     * @var object|null
+     */
+    private $currentObject;
+
+    /**
+     * @var ClassMetadata|PropertyMetadata|null
+     */
+    private $currentMetadata;
+
+    /**
+     * @var bool
+     */
+    private $disableExternalEntities;
+
+    /**
+     * @var string[]
+     */
+    private $doctypeAllowList;
+    /**
+     * @var int
+     */
+    private $options;
+
+    public function __construct(
+        bool $disableExternalEntities = true,
+        array $doctypeAllowList = [],
+        int $options = 0
+    ) {
+        $this->objectStack = new \SplStack();
+        $this->metadataStack = new \SplStack();
+        $this->objectMetadataStack = new \SplStack();
+        $this->disableExternalEntities = $disableExternalEntities;
+        $this->doctypeAllowList = $doctypeAllowList;
+        $this->options = $options;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function prepare($data)
+    {
+        $data = $this->emptyStringToSpaceCharacter($data);
+
+        $previous = libxml_use_internal_errors(true);
+        libxml_clear_errors();
+
+        $previousEntityLoaderState = null;
+        if (\LIBXML_VERSION < 20900) {
+            // phpcs:ignore Generic.PHP.DeprecatedFunctions.Deprecated
+            $previousEntityLoaderState = libxml_disable_entity_loader($this->disableExternalEntities);
+        }
+
+        if (false !== stripos($data, '<!doctype')) {
+            $internalSubset = $this->getDomDocumentTypeEntitySubset($data);
+            if (!in_array($internalSubset, $this->doctypeAllowList, true)) {
+                throw new InvalidArgumentException(sprintf(
+                    'The document type "%s" is not allowed. If it is safe, you may add it to the allowlist configuration.',
+                    $internalSubset,
+                ));
+            }
+        }
+
+        $doc = simplexml_load_string($data, 'SimpleXMLElement', $this->options);
+
+        libxml_use_internal_errors($previous);
+
+        if (\LIBXML_VERSION < 20900) {
+            // phpcs:ignore Generic.PHP.DeprecatedFunctions.Deprecated
+            libxml_disable_entity_loader($previousEntityLoaderState);
+        }
+
+        if (false === $doc) {
+            throw new XmlErrorException(libxml_get_last_error());
+        }
+
+        return $doc;
+    }
+
+    /**
+     * @param mixed $data
+     */
+    private function emptyStringToSpaceCharacter($data): string
+    {
+        return '' === $data ? ' ' : (string) $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitNull($data, array $type)
+    {
+        return null;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitString($data, array $type): string
+    {
+        $this->assertValueCanBeCastToString($data);
+
+        return (string) $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitBoolean($data, array $type): bool
+    {
+        $this->assertValueCanBeCastToString($data);
+
+        $data = (string) $data;
+
+        if ('true' === $data || '1' === $data) {
+            return true;
+        } elseif ('false' === $data || '0' === $data) {
+            return false;
+        } else {
+            throw new RuntimeException(sprintf('Could not convert data to boolean. Expected "true", "false", "1" or "0", but got %s.', json_encode($data)));
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitInteger($data, array $type): int
+    {
+        $this->assertValueCanBeCastToInt($data);
+
+        return (int) $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitDouble($data, array $type): float
+    {
+        $this->assertValueCanCastToFloat($data);
+
+        return (float) $data;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitArray($data, array $type): array
+    {
+        // handle key-value-pairs
+        if (null !== $this->currentMetadata && $this->currentMetadata->xmlKeyValuePairs) {
+            if (2 !== count($type['params'])) {
+                throw new RuntimeException('The array type must be specified as "array<K,V>" for Key-Value-Pairs.');
+            }
+
+            $this->revertCurrentMetadata();
+
+            [$keyType, $entryType] = $type['params'];
+
+            $result = [];
+            foreach ($data as $key => $v) {
+                $k = $this->navigator->accept($key, $keyType);
+                $result[$k] = $this->navigator->accept($v, $entryType);
+            }
+
+            return $result;
+        }
+
+        $entryName = null !== $this->currentMetadata && $this->currentMetadata->xmlEntryName ? $this->currentMetadata->xmlEntryName : 'entry';
+        $namespace = null !== $this->currentMetadata && $this->currentMetadata->xmlEntryNamespace ? $this->currentMetadata->xmlEntryNamespace : null;
+
+        if (null === $namespace && $this->objectMetadataStack->count()) {
+            $classMetadata = $this->objectMetadataStack->top();
+            $namespace = $classMetadata->xmlNamespaces[''] ?? $namespace;
+            if (null === $namespace) {
+                $namespaces = $data->getDocNamespaces();
+                if (isset($namespaces[''])) {
+                    $namespace = $namespaces[''];
+                }
+            }
+        }
+
+        if (null !== $namespace) {
+            $prefix = uniqid('ns-');
+            $data->registerXPathNamespace($prefix, $namespace);
+            $nodes = $data->xpath(sprintf('%s:%s', $prefix, $entryName));
+        } else {
+            $nodes = $data->xpath($entryName);
+        }
+
+        if (null === $nodes || !\count($nodes)) {
+            return [];
+        }
+
+        switch (\count($type['params'])) {
+            case 0:
+                throw new RuntimeException(sprintf('The array type must be specified either as "array<T>", or "array<K,V>".'));
+
+            case 1:
+                $result = [];
+
+                foreach ($nodes as $v) {
+                    $result[] = $this->navigator->accept($v, $type['params'][0]);
+                }
+
+                return $result;
+
+            case 2:
+                if (null === $this->currentMetadata) {
+                    throw new RuntimeException('Maps are not supported on top-level without metadata.');
+                }
+
+                [$keyType, $entryType] = $type['params'];
+                $result = [];
+
+                $nodes = $data->children($namespace)->$entryName;
+                foreach ($nodes as $v) {
+                    $attrs = $v->attributes();
+                    if (!isset($attrs[$this->currentMetadata->xmlKeyAttribute])) {
+                        throw new RuntimeException(sprintf('The key attribute "%s" must be set for each entry of the map.', $this->currentMetadata->xmlKeyAttribute));
+                    }
+
+                    $k = $this->navigator->accept($attrs[$this->currentMetadata->xmlKeyAttribute], $keyType);
+                    $result[$k] = $this->navigator->accept($v, $entryType);
+                }
+
+                return $result;
+
+            default:
+                throw new LogicException(sprintf('The array type does not support more than 2 parameters, but got %s.', json_encode($type['params'])));
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitDiscriminatorMapProperty($data, ClassMetadata $metadata): string
+    {
+        switch (true) {
+            // Check XML attribute without namespace for discriminatorFieldName
+            case $metadata->xmlDiscriminatorAttribute && null === $metadata->xmlDiscriminatorNamespace && isset($data->attributes()->{$metadata->discriminatorFieldName}):
+                return (string) $data->attributes()->{$metadata->discriminatorFieldName};
+
+            // Check XML attribute with namespace for discriminatorFieldName
+            case $metadata->xmlDiscriminatorAttribute && null !== $metadata->xmlDiscriminatorNamespace && isset($data->attributes($metadata->xmlDiscriminatorNamespace)->{$metadata->discriminatorFieldName}):
+                return (string) $data->attributes($metadata->xmlDiscriminatorNamespace)->{$metadata->discriminatorFieldName};
+
+            // Check XML element with namespace for discriminatorFieldName
+            case !$metadata->xmlDiscriminatorAttribute && null !== $metadata->xmlDiscriminatorNamespace && isset($data->children($metadata->xmlDiscriminatorNamespace)->{$metadata->discriminatorFieldName}):
+                return (string) $data->children($metadata->xmlDiscriminatorNamespace)->{$metadata->discriminatorFieldName};
+
+            // Check XML element for discriminatorFieldName
+            case isset($data->{$metadata->discriminatorFieldName}):
+                return (string) $data->{$metadata->discriminatorFieldName};
+
+            default:
+                throw new LogicException(sprintf(
+                    'The discriminator field name "%s" for base-class "%s" was not found in input data.',
+                    $metadata->discriminatorFieldName,
+                    $metadata->name,
+                ));
+        }
+    }
+
+    public function startVisitingObject(ClassMetadata $metadata, object $object, array $type): void
+    {
+        $this->setCurrentObject($object);
+        $this->objectMetadataStack->push($metadata);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitProperty(PropertyMetadata $metadata, $data)
+    {
+        $name = $metadata->serializedName;
+
+        if (true === $metadata->inline) {
+            if (!$metadata->type) {
+                throw RuntimeException::noMetadataForProperty($metadata->class, $metadata->name);
+            }
+
+            return $this->navigator->accept($data, $metadata->type);
+        }
+
+        if ($metadata->xmlAttribute) {
+            $attributes = $data->attributes($metadata->xmlNamespace);
+            if (isset($attributes[$name])) {
+                if (!$metadata->type) {
+                    throw RuntimeException::noMetadataForProperty($metadata->class, $metadata->name);
+                }
+
+                return $this->navigator->accept($attributes[$name], $metadata->type);
+            }
+
+            throw new NotAcceptableException();
+        }
+
+        if ($metadata->xmlValue) {
+            if (!$metadata->type) {
+                throw RuntimeException::noMetadataForProperty($metadata->class, $metadata->name);
+            }
+
+            return $this->navigator->accept($data, $metadata->type);
+        }
+
+        if ($metadata->xmlCollection) {
+            $enclosingElem = $data;
+            if (!$metadata->xmlCollectionInline) {
+                $enclosingElem = $data->children($metadata->xmlNamespace)->$name;
+            }
+
+            $this->setCurrentMetadata($metadata);
+            if (!$metadata->type) {
+                throw RuntimeException::noMetadataForProperty($metadata->class, $metadata->name);
+            }
+
+            $v = $this->navigator->accept($enclosingElem, $metadata->type);
+            $this->revertCurrentMetadata();
+
+            return $v;
+        }
+
+        if ($metadata->xmlNamespace) {
+            $node = $data->children($metadata->xmlNamespace)->$name;
+            if (!$node->count()) {
+                throw new NotAcceptableException();
+            }
+        } elseif ('' === $metadata->xmlNamespace) {
+            // See #1087 - element must be like: <element xmlns="" /> - https://www.w3.org/TR/REC-xml-names/#iri-use
+            // Use of an empty string in a namespace declaration turns it into an "undeclaration".
+            $nodes = $data->xpath('./' . $name);
+            if (empty($nodes)) {
+                throw new NotAcceptableException();
+            }
+
+            $node = reset($nodes);
+        } else {
+            $namespaces = $data->getDocNamespaces();
+            if (isset($namespaces[''])) {
+                $prefix = uniqid('ns-');
+                $data->registerXPathNamespace($prefix, $namespaces['']);
+                $nodes = $data->xpath('./' . $prefix . ':' . $name);
+            } else {
+                $nodes = $data->xpath('./' . $name);
+            }
+
+            if (empty($nodes)) {
+                throw new NotAcceptableException();
+            }
+
+            $node = reset($nodes);
+        }
+
+        if ($metadata->xmlKeyValuePairs) {
+            $this->setCurrentMetadata($metadata);
+        }
+
+        if (!$metadata->type) {
+            throw RuntimeException::noMetadataForProperty($metadata->class, $metadata->name);
+        }
+
+        return $this->navigator->accept($node, $metadata->type);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function endVisitingObject(ClassMetadata $metadata, $data, array $type): object
+    {
+        $rs = $this->currentObject;
+        $this->objectMetadataStack->pop();
+        $this->revertCurrentObject();
+
+        return $rs;
+    }
+
+    public function setCurrentObject(object $object): void
+    {
+        $this->objectStack->push($this->currentObject);
+        $this->currentObject = $object;
+    }
+
+    public function getCurrentObject(): ?object
+    {
+        return $this->currentObject;
+    }
+
+    public function revertCurrentObject(): ?object
+    {
+        return $this->currentObject = $this->objectStack->pop();
+    }
+
+    public function setCurrentMetadata(PropertyMetadata $metadata): void
+    {
+        $this->metadataStack->push($this->currentMetadata);
+        $this->currentMetadata = $metadata;
+    }
+
+    /**
+     * @return ClassMetadata|PropertyMetadata|null
+     */
+    public function getCurrentMetadata()
+    {
+        return $this->currentMetadata;
+    }
+
+    /**
+     * @return ClassMetadata|PropertyMetadata|null
+     */
+    public function revertCurrentMetadata()
+    {
+        return $this->currentMetadata = $this->metadataStack->pop();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getResult($data)
+    {
+        unset($this->navigator);
+
+        return $data;
+    }
+
+    /**
+     * Retrieves internalSubset even in bugfixed php versions
+     */
+    private function getDomDocumentTypeEntitySubset(string $data): string
+    {
+        $startPos = $endPos = stripos($data, '<!doctype');
+        $braces = 0;
+        do {
+            $char = $data[$endPos++];
+            if ('<' === $char) {
+                ++$braces;
+            }
+
+            if ('>' === $char) {
+                --$braces;
+            }
+        } while ($braces > 0);
+
+        $internalSubset = substr($data, $startPos, $endPos - $startPos);
+        $internalSubset = str_replace(["\n", "\r"], '', $internalSubset);
+        $internalSubset = preg_replace('/\s{2,}/', ' ', $internalSubset);
+        $internalSubset = str_replace(['[ <!', '> ]>'], ['[<!', '>]>'], $internalSubset);
+
+        return $internalSubset;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function isNull($value): bool
+    {
+        if ($value instanceof \SimpleXMLElement) {
+            // Workaround for https://bugs.php.net/bug.php?id=75168 and https://github.com/schmittjoh/serializer/issues/817
+            // If the "name" is empty means that we are on an not-existent node and subsequent operations on the object will trigger the warning:
+            // "Node no longer exists"
+            if ('' === $value->getName()) {
+                // @todo should be "true", but for collections needs a default collection value. maybe something for the 2.0
+                return false;
+            }
+
+            $xsiAttributes = $value->attributes('http://www.w3.org/2001/XMLSchema-instance');
+            if (
+                isset($xsiAttributes['nil'])
+                && ('true' === (string) $xsiAttributes['nil'] || '1' === (string) $xsiAttributes['nil'])
+            ) {
+                return true;
+            }
+        }
+
+        return null === $value;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/jms/serializer/src/XmlSerializationVisitor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/jms/serializer/src/XmlSerializationVisitor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/jms/serializer/src/XmlSerializationVisitor.php	(revision 8435)
@@ -0,0 +1,537 @@
+<?php
+
+declare(strict_types=1);
+
+namespace JMS\Serializer;
+
+use JMS\Serializer\Exception\NotAcceptableException;
+use JMS\Serializer\Exception\RuntimeException;
+use JMS\Serializer\Metadata\ClassMetadata;
+use JMS\Serializer\Metadata\PropertyMetadata;
+use JMS\Serializer\Visitor\SerializationVisitorInterface;
+
+/**
+ * XmlSerializationVisitor.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+final class XmlSerializationVisitor extends AbstractVisitor implements SerializationVisitorInterface
+{
+    /**
+     * @var \DOMDocument
+     */
+    private $document;
+
+    /**
+     * @var string
+     */
+    private $defaultRootName;
+
+    /**
+     * @var string|null
+     */
+    private $defaultRootNamespace;
+
+    /**
+     * @var string|null
+     */
+    private $defaultRootPrefix;
+
+    /**
+     * @var \SplStack
+     */
+    private $stack;
+
+    /**
+     * @var \SplStack
+     */
+    private $metadataStack;
+
+    /**
+     * @var \DOMNode|\DOMElement|null
+     */
+    private $currentNode;
+
+    /**
+     * @var ClassMetadata|PropertyMetadata|null
+     */
+    private $currentMetadata;
+
+    /**
+     * @var bool
+     */
+    private $hasValue;
+
+    /**
+     * @var bool
+     */
+    private $nullWasVisited;
+
+    /**
+     * @var \SplStack
+     */
+    private $objectMetadataStack;
+
+    public function __construct(
+        bool $formatOutput = true,
+        string $defaultEncoding = 'UTF-8',
+        string $defaultVersion = '1.0',
+        string $defaultRootName = 'result',
+        ?string $defaultRootNamespace = null,
+        ?string $defaultRootPrefix = null
+    ) {
+        $this->objectMetadataStack = new \SplStack();
+        $this->stack = new \SplStack();
+        $this->metadataStack = new \SplStack();
+
+        $this->currentNode = null;
+        $this->nullWasVisited = false;
+
+        $this->document = $this->createDocument($formatOutput, $defaultVersion, $defaultEncoding);
+
+        $this->defaultRootName = $defaultRootName;
+        $this->defaultRootNamespace = $defaultRootNamespace;
+        $this->defaultRootPrefix = $defaultRootPrefix;
+    }
+
+    private function createDocument(bool $formatOutput, string $defaultVersion, string $defaultEncoding): \DOMDocument
+    {
+        $document = new \DOMDocument($defaultVersion, $defaultEncoding);
+        $document->formatOutput = $formatOutput;
+
+        return $document;
+    }
+
+    public function createRoot(?ClassMetadata $metadata = null, ?string $rootName = null, ?string $rootNamespace = null, ?string $rootPrefix = null): \DOMElement
+    {
+        if (null !== $metadata && !empty($metadata->xmlRootName)) {
+            $rootPrefix = $metadata->xmlRootPrefix;
+            $rootName = $metadata->xmlRootName;
+            $rootNamespace = $metadata->xmlRootNamespace ?: $this->getClassDefaultNamespace($metadata);
+        } else {
+            $rootName = $rootName ?: $this->defaultRootName;
+            $rootNamespace = $rootNamespace ?: $this->defaultRootNamespace;
+            $rootPrefix = $rootPrefix ?: $this->defaultRootPrefix;
+        }
+
+        $document = $this->getDocument();
+        if ($rootNamespace) {
+            $rootNode = $document->createElementNS($rootNamespace, (null !== $rootPrefix ? $rootPrefix . ':' : '') . $rootName);
+        } else {
+            $rootNode = $document->createElement($rootName);
+        }
+
+        $document->appendChild($rootNode);
+        $this->setCurrentNode($rootNode);
+
+        return $rootNode;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitNull($data, array $type)
+    {
+        $node = $this->document->createAttribute('xsi:nil');
+        $node->value = 'true';
+        $this->nullWasVisited = true;
+
+        return $node;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitString(string $data, array $type)
+    {
+        $doCData = null !== $this->currentMetadata ? $this->currentMetadata->xmlElementCData : true;
+
+        return $doCData ? $this->document->createCDATASection($data) : $this->document->createTextNode((string) $data);
+    }
+
+    /**
+     * @param mixed $data
+     * @param array $type
+     */
+    public function visitSimpleString($data, array $type): \DOMText
+    {
+        return $this->document->createTextNode((string) $data);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitBoolean(bool $data, array $type)
+    {
+        return $this->document->createTextNode($data ? 'true' : 'false');
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitInteger(int $data, array $type)
+    {
+        return $this->document->createTextNode((string) $data);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitDouble(float $data, array $type)
+    {
+        $dataResult = $data;
+        $precision = $type['params'][0] ?? null;
+        if (is_int($precision)) {
+            $roundMode = $type['params'][1] ?? null;
+            $roundMode = $this->mapRoundMode($roundMode);
+            $dataResult = round($dataResult, $precision, $roundMode);
+        }
+
+        $decimalsNumbers = $type['params'][2] ?? null;
+        if (null === $decimalsNumbers) {
+            $parts = explode('.', (string) $dataResult);
+            if (count($parts) < 2 || !$parts[1]) {
+                $decimalsNumbers = 1;
+            }
+        }
+
+        if (null !== $decimalsNumbers) {
+            $dataResult = number_format($dataResult, $decimalsNumbers, '.', '');
+        }
+
+        return $this->document->createTextNode((string) $dataResult);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitArray(array $data, array $type): void
+    {
+        if (null === $this->currentNode) {
+            $this->createRoot();
+        }
+
+        $entryName = null !== $this->currentMetadata && null !== $this->currentMetadata->xmlEntryName ? $this->currentMetadata->xmlEntryName : 'entry';
+        $keyAttributeName = null !== $this->currentMetadata && null !== $this->currentMetadata->xmlKeyAttribute ? $this->currentMetadata->xmlKeyAttribute : null;
+        $namespace = null !== $this->currentMetadata && null !== $this->currentMetadata->xmlEntryNamespace ? $this->currentMetadata->xmlEntryNamespace : null;
+
+        $elType = $this->getElementType($type);
+        foreach ($data as $k => $v) {
+            $tagName = null !== $this->currentMetadata && $this->currentMetadata->xmlKeyValuePairs && $this->isElementNameValid((string) $k) ? $k : $entryName;
+
+            $entryNode = $this->createElement($tagName, $namespace);
+            $this->currentNode->appendChild($entryNode);
+            $this->setCurrentNode($entryNode);
+
+            if (null !== $keyAttributeName) {
+                $entryNode->setAttribute($keyAttributeName, (string) $k);
+            }
+
+            try {
+                if (null !== $node = $this->navigator->accept($v, $elType)) {
+                    $this->currentNode->appendChild($node);
+                }
+            } catch (NotAcceptableException $e) {
+                $this->currentNode->parentNode->removeChild($this->currentNode);
+            }
+
+            $this->revertCurrentNode();
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function startVisitingObject(ClassMetadata $metadata, object $data, array $type): void
+    {
+        $this->objectMetadataStack->push($metadata);
+
+        if (null === $this->currentNode) {
+            $this->createRoot($metadata);
+        }
+
+        $this->addNamespaceAttributes($metadata, $this->currentNode);
+
+        $this->hasValue = false;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visitProperty(PropertyMetadata $metadata, $v): void
+    {
+        if ($metadata->xmlAttribute) {
+            $this->setCurrentMetadata($metadata);
+            $node = $this->navigator->accept($v, $metadata->type);
+            $this->revertCurrentMetadata();
+
+            if (!$node instanceof \DOMCharacterData) {
+                throw new RuntimeException(sprintf('Unsupported value for XML attribute for %s. Expected character data, but got %s.', $metadata->name, json_encode($v)));
+            }
+
+            $this->setAttributeOnNode($this->currentNode, $metadata->serializedName, $node->nodeValue, $metadata->xmlNamespace);
+
+            return;
+        }
+
+        if (
+            ($metadata->xmlValue && $this->currentNode->childNodes->length > 0)
+            || (!$metadata->xmlValue && $this->hasValue)
+        ) {
+            throw new RuntimeException(sprintf('If you make use of @XmlValue, all other properties in the class must have the @XmlAttribute annotation. Invalid usage detected in class %s.', $metadata->class));
+        }
+
+        if ($metadata->xmlValue) {
+            $this->hasValue = true;
+
+            $this->setCurrentMetadata($metadata);
+            $node = $this->navigator->accept($v, $metadata->type);
+            $this->revertCurrentMetadata();
+
+            if (!$node instanceof \DOMCharacterData) {
+                throw new RuntimeException(sprintf('Unsupported value for property %s::$%s. Expected character data, but got %s.', $metadata->class, $metadata->name, \is_object($node) ? \get_class($node) : \gettype($node)));
+            }
+
+            $this->currentNode->appendChild($node);
+
+            return;
+        }
+
+        if ($metadata->xmlAttributeMap) {
+            if (!\is_array($v)) {
+                throw new RuntimeException(sprintf('Unsupported value type for XML attribute map. Expected array but got %s.', \gettype($v)));
+            }
+
+            foreach ($v as $key => $value) {
+                $this->setCurrentMetadata($metadata);
+                $node = $this->navigator->accept($value, null);
+                $this->revertCurrentMetadata();
+
+                if (!$node instanceof \DOMCharacterData) {
+                    throw new RuntimeException(sprintf('Unsupported value for a XML attribute map value. Expected character data, but got %s.', json_encode($v)));
+                }
+
+                $this->setAttributeOnNode($this->currentNode, $key, $node->nodeValue, $metadata->xmlNamespace);
+            }
+
+            return;
+        }
+
+        if ($addEnclosingElement = !$this->isInLineCollection($metadata) && !$metadata->inline) {
+            $namespace = $metadata->xmlNamespace ?? $this->getClassDefaultNamespace($this->objectMetadataStack->top());
+
+            $element = $this->createElement($metadata->serializedName, $namespace);
+            $this->currentNode->appendChild($element);
+            $this->setCurrentNode($element);
+        }
+
+        $this->setCurrentMetadata($metadata);
+
+        try {
+            if (null !== $node = $this->navigator->accept($v, $metadata->type)) {
+                $this->currentNode->appendChild($node);
+            }
+        } catch (NotAcceptableException $e) {
+            $this->currentNode->parentNode->removeChild($this->currentNode);
+            $this->revertCurrentMetadata();
+            $this->revertCurrentNode();
+            $this->hasValue = false;
+
+            return;
+        }
+
+        $this->revertCurrentMetadata();
+
+        if ($addEnclosingElement) {
+            $this->revertCurrentNode();
+
+            if ($this->isElementEmpty($element) && (null === $v || $this->isSkippableCollection($metadata) || $this->isSkippableEmptyObject($node, $metadata))) {
+                $this->currentNode->removeChild($element);
+            }
+        }
+
+        $this->hasValue = false;
+    }
+
+    private function isInLineCollection(PropertyMetadata $metadata): bool
+    {
+        return $metadata->xmlCollection && $metadata->xmlCollectionInline;
+    }
+
+    private function isSkippableEmptyObject(?\DOMElement $node, PropertyMetadata $metadata): bool
+    {
+        return null === $node && !$metadata->xmlCollection && $metadata->skipWhenEmpty;
+    }
+
+    private function isSkippableCollection(PropertyMetadata $metadata): bool
+    {
+        return $metadata->xmlCollection && $metadata->xmlCollectionSkipWhenEmpty;
+    }
+
+    private function isElementEmpty(\DOMElement $element): bool
+    {
+        return !$element->hasChildNodes() && !$element->hasAttributes();
+    }
+
+    public function endVisitingObject(ClassMetadata $metadata, object $data, array $type): void
+    {
+        $this->objectMetadataStack->pop();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getResult($node)
+    {
+        unset($this->navigator);
+        if (null === $this->document->documentElement) {
+            if ($node instanceof \DOMElement) {
+                $this->document->appendChild($node);
+            } else {
+                $this->createRoot();
+                if ($node) {
+                    $this->document->documentElement->appendChild($node);
+                }
+            }
+        }
+
+        if ($this->nullWasVisited) {
+            $this->document->documentElement->setAttributeNS(
+                'http://www.w3.org/2000/xmlns/',
+                'xmlns:xsi',
+                'http://www.w3.org/2001/XMLSchema-instance',
+            );
+        }
+
+        return $this->document->saveXML();
+    }
+
+    public function getCurrentNode(): ?\DOMNode
+    {
+        return $this->currentNode;
+    }
+
+    public function getCurrentMetadata(): ?PropertyMetadata
+    {
+        return $this->currentMetadata;
+    }
+
+    public function getDocument(): \DOMDocument
+    {
+        return $this->document;
+    }
+
+    public function setCurrentMetadata(PropertyMetadata $metadata): void
+    {
+        $this->metadataStack->push($this->currentMetadata);
+        $this->currentMetadata = $metadata;
+    }
+
+    public function setCurrentNode(\DOMNode $node): void
+    {
+        $this->stack->push($this->currentNode);
+        $this->currentNode = $node;
+    }
+
+    public function setCurrentAndRootNode(\DOMNode $node): void
+    {
+        $this->setCurrentNode($node);
+        $this->document->appendChild($node);
+    }
+
+    public function revertCurrentNode(): ?\DOMNode
+    {
+        return $this->currentNode = $this->stack->pop();
+    }
+
+    public function revertCurrentMetadata(): ?PropertyMetadata
+    {
+        return $this->currentMetadata = $this->metadataStack->pop();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function prepare($data)
+    {
+        $this->nullWasVisited = false;
+
+        return $data;
+    }
+
+    /**
+     * Checks that the name is a valid XML element name.
+     */
+    private function isElementNameValid(string $name): bool
+    {
+        return $name && false === strpos($name, ' ') && preg_match('#^[\pL_][\pL0-9._-]*$#ui', $name);
+    }
+
+    /**
+     * Adds namespace attributes to the XML root element
+     */
+    private function addNamespaceAttributes(ClassMetadata $metadata, \DOMElement $element): void
+    {
+        foreach ($metadata->xmlNamespaces as $prefix => $uri) {
+            $attribute = 'xmlns';
+            if ('' !== $prefix) {
+                $attribute .= ':' . $prefix;
+            } elseif ($element->namespaceURI === $uri) {
+                continue;
+            }
+
+            $element->setAttributeNS('http://www.w3.org/2000/xmlns/', $attribute, $uri);
+        }
+    }
+
+    private function createElement(string $tagName, ?string $namespace = null): \DOMElement
+    {
+        // See #1087 - element must be like: <element xmlns="" /> - https://www.w3.org/TR/REC-xml-names/#iri-use
+        // Use of an empty string in a namespace declaration turns it into an "undeclaration".
+        if ('' === $namespace) {
+            // If we have a default namespace, we need to create namespaced.
+            if ($this->parentHasNonEmptyDefaultNs()) {
+                return $this->document->createElementNS($namespace, $tagName);
+            }
+
+            return $this->document->createElement($tagName);
+        }
+
+        if (null === $namespace) {
+            return $this->document->createElement($tagName);
+        }
+
+        if ($this->currentNode->isDefaultNamespace($namespace)) {
+            return $this->document->createElementNS($namespace, $tagName);
+        }
+
+        if (!($prefix = $this->currentNode->lookupPrefix($namespace)) && !($prefix = $this->document->lookupPrefix($namespace))) {
+            $prefix = 'ns-' . substr(sha1($namespace), 0, 8);
+        }
+
+        return $this->document->createElementNS($namespace, $prefix . ':' . $tagName);
+    }
+
+    private function setAttributeOnNode(\DOMElement $node, string $name, string $value, ?string $namespace = null): void
+    {
+        if (null !== $namespace) {
+            if (!$prefix = $node->lookupPrefix($namespace)) {
+                $prefix = 'ns-' . substr(sha1($namespace), 0, 8);
+            }
+
+            $node->setAttributeNS($namespace, $prefix . ':' . $name, $value);
+        } else {
+            $node->setAttribute($name, $value);
+        }
+    }
+
+    private function getClassDefaultNamespace(ClassMetadata $metadata): ?string
+    {
+        return $metadata->xmlNamespaces[''] ?? null;
+    }
+
+    private function parentHasNonEmptyDefaultNs(): bool
+    {
+        return null !== ($uri = $this->currentNode->lookupNamespaceUri(null)) && ('' !== $uri);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/LICENSE	(revision 8435)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 OndÅej Mirtes
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/README.md	(revision 8435)
@@ -0,0 +1,121 @@
+<h1 align="center">PHPDoc Parser for PHPStan</h1>
+
+<p align="center">
+	<a href="https://github.com/phpstan/phpdoc-parser/actions"><img src="https://github.com/phpstan/phpdoc-parser/workflows/Build/badge.svg" alt="Build Status"></a>
+	<a href="https://packagist.org/packages/phpstan/phpdoc-parser"><img src="https://poser.pugx.org/phpstan/phpdoc-parser/v/stable" alt="Latest Stable Version"></a>
+	<a href="https://choosealicense.com/licenses/mit/"><img src="https://poser.pugx.org/phpstan/phpstan/license" alt="License"></a>
+	<a href="https://phpstan.org/"><img src="https://img.shields.io/badge/PHPStan-enabled-brightgreen.svg?style=flat" alt="PHPStan Enabled"></a>
+</p>
+
+This library `phpstan/phpdoc-parser` represents PHPDocs with an AST (Abstract Syntax Tree). It supports parsing and modifying PHPDocs.
+
+For the complete list of supported PHPDoc features check out PHPStan documentation. PHPStan is the main (but not the only) user of this library.
+
+* [PHPDoc Basics](https://phpstan.org/writing-php-code/phpdocs-basics) (list of PHPDoc tags)
+* [PHPDoc Types](https://phpstan.org/writing-php-code/phpdoc-types) (list of PHPDoc types)
+* [phpdoc-parser API Reference](https://phpstan.github.io/phpdoc-parser/namespace-PHPStan.PhpDocParser.html) with all the AST node types etc.
+
+This parser also supports parsing [Doctrine Annotations](https://github.com/doctrine/annotations). The AST nodes live in the [PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine namespace](https://phpstan.github.io/phpdoc-parser/namespace-PHPStan.PhpDocParser.Ast.PhpDoc.Doctrine.html). The support needs to be turned on by setting `bool $parseDoctrineAnnotations` to `true` in `Lexer` and `PhpDocParser` class constructors.
+
+## Installation
+
+```
+composer require phpstan/phpdoc-parser
+```
+
+## Basic usage
+
+```php
+<?php
+
+require_once __DIR__ . '/vendor/autoload.php';
+
+use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode;
+use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
+use PHPStan\PhpDocParser\Lexer\Lexer;
+use PHPStan\PhpDocParser\Parser\ConstExprParser;
+use PHPStan\PhpDocParser\Parser\PhpDocParser;
+use PHPStan\PhpDocParser\Parser\TokenIterator;
+use PHPStan\PhpDocParser\Parser\TypeParser;
+
+// basic setup
+
+$lexer = new Lexer();
+$constExprParser = new ConstExprParser();
+$typeParser = new TypeParser($constExprParser);
+$phpDocParser = new PhpDocParser($typeParser, $constExprParser);
+
+// parsing and reading a PHPDoc string
+
+$tokens = new TokenIterator($lexer->tokenize('/** @param Lorem $a */'));
+$phpDocNode = $phpDocParser->parse($tokens); // PhpDocNode
+$paramTags = $phpDocNode->getParamTagValues(); // ParamTagValueNode[]
+echo $paramTags[0]->parameterName; // '$a'
+echo $paramTags[0]->type; // IdentifierTypeNode - 'Lorem'
+```
+
+### Format-preserving printer
+
+This component can be used to modify the AST
+and print it again as close as possible to the original.
+
+It's heavily inspired by format-preserving printer component in [nikic/PHP-Parser](https://github.com/nikic/PHP-Parser).
+
+```php
+<?php
+
+require_once __DIR__ . '/vendor/autoload.php';
+
+use PHPStan\PhpDocParser\Ast\NodeTraverser;
+use PHPStan\PhpDocParser\Ast\NodeVisitor\CloningVisitor;
+use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode;
+use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
+use PHPStan\PhpDocParser\Lexer\Lexer;
+use PHPStan\PhpDocParser\Parser\ConstExprParser;
+use PHPStan\PhpDocParser\Parser\PhpDocParser;
+use PHPStan\PhpDocParser\Parser\TokenIterator;
+use PHPStan\PhpDocParser\Parser\TypeParser;
+use PHPStan\PhpDocParser\Printer\Printer;
+
+// basic setup with enabled required lexer attributes
+
+$usedAttributes = ['lines' => true, 'indexes' => true];
+
+$lexer = new Lexer();
+$constExprParser = new ConstExprParser(true, true, $usedAttributes);
+$typeParser = new TypeParser($constExprParser, true, $usedAttributes);
+$phpDocParser = new PhpDocParser($typeParser, $constExprParser, true, true, $usedAttributes);
+
+$tokens = new TokenIterator($lexer->tokenize('/** @param Lorem $a */'));
+$phpDocNode = $phpDocParser->parse($tokens); // PhpDocNode
+
+$cloningTraverser = new NodeTraverser([new CloningVisitor()]);
+
+/** @var PhpDocNode $newPhpDocNode */
+[$newPhpDocNode] = $cloningTraverser->traverse([$phpDocNode]);
+
+// change something in $newPhpDocNode
+$newPhpDocNode->getParamTagValues()[0]->type = new IdentifierTypeNode('Ipsum');
+
+// print changed PHPDoc
+$printer = new Printer();
+$newPhpDoc = $printer->printFormatPreserving($newPhpDocNode, $phpDocNode, $tokens);
+echo $newPhpDoc; // '/** @param Ipsum $a */'
+```
+
+## Code of Conduct
+
+This project adheres to a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project and its community, you are expected to uphold this code.
+
+## Building
+
+Initially you need to run `composer install`, or `composer update` in case you aren't working in a folder which was built before.
+
+Afterwards you can either run the whole build including linting and coding standards using
+
+    make
+
+or run only tests using
+
+    make tests
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/composer.json	(revision 8435)
@@ -0,0 +1,44 @@
+{
+	"name": "phpstan/phpdoc-parser",
+	"description": "PHPDoc parser with support for nullable, intersection and generic types",
+	"license": "MIT",
+	"require": {
+		"php": "^7.2 || ^8.0"
+	},
+	"require-dev": {
+		"doctrine/annotations": "^2.0",
+		"nikic/php-parser": "^4.15",
+		"php-parallel-lint/php-parallel-lint": "^1.2",
+		"phpstan/extension-installer": "^1.0",
+		"phpstan/phpstan": "^1.5",
+		"phpstan/phpstan-phpunit": "^1.1",
+		"phpstan/phpstan-strict-rules": "^1.0",
+		"phpunit/phpunit": "^9.5",
+		"symfony/process": "^5.2"
+	},
+	"config": {
+		"platform": {
+			"php": "7.4.6"
+		},
+		"sort-packages": true,
+		"allow-plugins": {
+			"phpstan/extension-installer": true
+		}
+	},
+	"autoload": {
+		"psr-4": {
+			"PHPStan\\PhpDocParser\\": [
+				"src/"
+			]
+		}
+	},
+	"autoload-dev": {
+		"psr-4": {
+			"PHPStan\\PhpDocParser\\": [
+				"tests/PHPStan"
+			]
+		}
+	},
+	"minimum-stability": "dev",
+	"prefer-stable": true
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/AbstractNodeVisitor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/AbstractNodeVisitor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/AbstractNodeVisitor.php	(revision 8435)
@@ -0,0 +1,34 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast;
+
+/**
+ * Inspired by https://github.com/nikic/PHP-Parser/tree/36a6dcd04e7b0285e8f0868f44bd4927802f7df1
+ *
+ * Copyright (c) 2011, Nikita Popov
+ * All rights reserved.
+ */
+abstract class AbstractNodeVisitor implements NodeVisitor // phpcs:ignore SlevomatCodingStandard.Classes.SuperfluousAbstractClassNaming.SuperfluousPrefix
+{
+
+	public function beforeTraverse(array $nodes): ?array
+	{
+		return null;
+	}
+
+	public function enterNode(Node $node)
+	{
+		return null;
+	}
+
+	public function leaveNode(Node $node)
+	{
+		return null;
+	}
+
+	public function afterTraverse(array $nodes): ?array
+	{
+		return null;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Attribute.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Attribute.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Attribute.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast;
+
+final class Attribute
+{
+
+	public const START_LINE = 'startLine';
+	public const END_LINE = 'endLine';
+
+	public const START_INDEX = 'startIndex';
+	public const END_INDEX = 'endIndex';
+
+	public const ORIGINAL_NODE = 'originalNode';
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayItemNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayItemNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayItemNode.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\ConstExpr;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function sprintf;
+
+class ConstExprArrayItemNode implements ConstExprNode
+{
+
+	use NodeAttributes;
+
+	/** @var ConstExprNode|null */
+	public $key;
+
+	/** @var ConstExprNode */
+	public $value;
+
+	public function __construct(?ConstExprNode $key, ConstExprNode $value)
+	{
+		$this->key = $key;
+		$this->value = $value;
+	}
+
+
+	public function __toString(): string
+	{
+		if ($this->key !== null) {
+			return sprintf('%s => %s', $this->key, $this->value);
+
+		}
+
+		return (string) $this->value;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayNode.php	(revision 8435)
@@ -0,0 +1,30 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\ConstExpr;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function implode;
+
+class ConstExprArrayNode implements ConstExprNode
+{
+
+	use NodeAttributes;
+
+	/** @var ConstExprArrayItemNode[] */
+	public $items;
+
+	/**
+	 * @param ConstExprArrayItemNode[] $items
+	 */
+	public function __construct(array $items)
+	{
+		$this->items = $items;
+	}
+
+
+	public function __toString(): string
+	{
+		return '[' . implode(', ', $this->items) . ']';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFalseNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFalseNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFalseNode.php	(revision 8435)
@@ -0,0 +1,17 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\ConstExpr;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class ConstExprFalseNode implements ConstExprNode
+{
+
+	use NodeAttributes;
+
+	public function __toString(): string
+	{
+		return 'false';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFloatNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFloatNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFloatNode.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\ConstExpr;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class ConstExprFloatNode implements ConstExprNode
+{
+
+	use NodeAttributes;
+
+	/** @var string */
+	public $value;
+
+	public function __construct(string $value)
+	{
+		$this->value = $value;
+	}
+
+
+	public function __toString(): string
+	{
+		return $this->value;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprIntegerNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprIntegerNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprIntegerNode.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\ConstExpr;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class ConstExprIntegerNode implements ConstExprNode
+{
+
+	use NodeAttributes;
+
+	/** @var string */
+	public $value;
+
+	public function __construct(string $value)
+	{
+		$this->value = $value;
+	}
+
+
+	public function __toString(): string
+	{
+		return $this->value;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNode.php	(revision 8435)
@@ -0,0 +1,10 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\ConstExpr;
+
+use PHPStan\PhpDocParser\Ast\Node;
+
+interface ConstExprNode extends Node
+{
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNullNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNullNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNullNode.php	(revision 8435)
@@ -0,0 +1,17 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\ConstExpr;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class ConstExprNullNode implements ConstExprNode
+{
+
+	use NodeAttributes;
+
+	public function __toString(): string
+	{
+		return 'null';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprStringNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprStringNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprStringNode.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\ConstExpr;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class ConstExprStringNode implements ConstExprNode
+{
+
+	use NodeAttributes;
+
+	/** @var string */
+	public $value;
+
+	public function __construct(string $value)
+	{
+		$this->value = $value;
+	}
+
+
+	public function __toString(): string
+	{
+		return $this->value;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprTrueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprTrueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprTrueNode.php	(revision 8435)
@@ -0,0 +1,17 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\ConstExpr;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class ConstExprTrueNode implements ConstExprNode
+{
+
+	use NodeAttributes;
+
+	public function __toString(): string
+	{
+		return 'true';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstFetchNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstFetchNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstFetchNode.php	(revision 8435)
@@ -0,0 +1,35 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\ConstExpr;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class ConstFetchNode implements ConstExprNode
+{
+
+	use NodeAttributes;
+
+	/** @var string class name for class constants or empty string for non-class constants */
+	public $className;
+
+	/** @var string */
+	public $name;
+
+	public function __construct(string $className, string $name)
+	{
+		$this->className = $className;
+		$this->name = $name;
+	}
+
+
+	public function __toString(): string
+	{
+		if ($this->className === '') {
+			return $this->name;
+
+		}
+
+		return "{$this->className}::{$this->name}";
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/DoctrineConstExprStringNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/DoctrineConstExprStringNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/DoctrineConstExprStringNode.php	(revision 8435)
@@ -0,0 +1,42 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\ConstExpr;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function sprintf;
+use function str_replace;
+use function strlen;
+use function substr;
+
+class DoctrineConstExprStringNode extends ConstExprStringNode
+{
+
+	use NodeAttributes;
+
+	/** @var string */
+	public $value;
+
+	public function __construct(string $value)
+	{
+		parent::__construct($value);
+		$this->value = $value;
+	}
+
+	public function __toString(): string
+	{
+		return self::escape($this->value);
+	}
+
+	public static function unescape(string $value): string
+	{
+		// from https://github.com/doctrine/annotations/blob/a9ec7af212302a75d1f92fa65d3abfbd16245a2a/lib/Doctrine/Common/Annotations/DocLexer.php#L103-L107
+		return str_replace('""', '"', substr($value, 1, strlen($value) - 2));
+	}
+
+	private static function escape(string $value): string
+	{
+		// from https://github.com/phpstan/phpdoc-parser/issues/205#issuecomment-1662323656
+		return sprintf('"%s"', str_replace('"', '""', $value));
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/QuoteAwareConstExprStringNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/QuoteAwareConstExprStringNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/QuoteAwareConstExprStringNode.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\ConstExpr;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function addcslashes;
+use function assert;
+use function dechex;
+use function ord;
+use function preg_replace_callback;
+use function sprintf;
+use function str_pad;
+use function strlen;
+use const STR_PAD_LEFT;
+
+class QuoteAwareConstExprStringNode extends ConstExprStringNode implements ConstExprNode
+{
+
+	public const SINGLE_QUOTED = 1;
+	public const DOUBLE_QUOTED = 2;
+
+	use NodeAttributes;
+
+	/** @var self::SINGLE_QUOTED|self::DOUBLE_QUOTED */
+	public $quoteType;
+
+	/**
+	 * @param self::SINGLE_QUOTED|self::DOUBLE_QUOTED $quoteType
+	 */
+	public function __construct(string $value, int $quoteType)
+	{
+		parent::__construct($value);
+		$this->quoteType = $quoteType;
+	}
+
+
+	public function __toString(): string
+	{
+		if ($this->quoteType === self::SINGLE_QUOTED) {
+			// from https://github.com/nikic/PHP-Parser/blob/0ffddce52d816f72d0efc4d9b02e276d3309ef01/lib/PhpParser/PrettyPrinter/Standard.php#L1007
+			return sprintf("'%s'", addcslashes($this->value, '\'\\'));
+		}
+
+		// from https://github.com/nikic/PHP-Parser/blob/0ffddce52d816f72d0efc4d9b02e276d3309ef01/lib/PhpParser/PrettyPrinter/Standard.php#L1010-L1040
+		return sprintf('"%s"', $this->escapeDoubleQuotedString());
+	}
+
+	private function escapeDoubleQuotedString(): string
+	{
+		$quote = '"';
+		$escaped = addcslashes($this->value, "\n\r\t\f\v$" . $quote . '\\');
+
+		// Escape control characters and non-UTF-8 characters.
+		// Regex based on https://stackoverflow.com/a/11709412/385378.
+		$regex = '/(
+              [\x00-\x08\x0E-\x1F] # Control characters
+            | [\xC0-\xC1] # Invalid UTF-8 Bytes
+            | [\xF5-\xFF] # Invalid UTF-8 Bytes
+            | \xE0(?=[\x80-\x9F]) # Overlong encoding of prior code point
+            | \xF0(?=[\x80-\x8F]) # Overlong encoding of prior code point
+            | [\xC2-\xDF](?![\x80-\xBF]) # Invalid UTF-8 Sequence Start
+            | [\xE0-\xEF](?![\x80-\xBF]{2}) # Invalid UTF-8 Sequence Start
+            | [\xF0-\xF4](?![\x80-\xBF]{3}) # Invalid UTF-8 Sequence Start
+            | (?<=[\x00-\x7F\xF5-\xFF])[\x80-\xBF] # Invalid UTF-8 Sequence Middle
+            | (?<![\xC2-\xDF]|[\xE0-\xEF]|[\xE0-\xEF][\x80-\xBF]|[\xF0-\xF4]|[\xF0-\xF4][\x80-\xBF]|[\xF0-\xF4][\x80-\xBF]{2})[\x80-\xBF] # Overlong Sequence
+            | (?<=[\xE0-\xEF])[\x80-\xBF](?![\x80-\xBF]) # Short 3 byte sequence
+            | (?<=[\xF0-\xF4])[\x80-\xBF](?![\x80-\xBF]{2}) # Short 4 byte sequence
+            | (?<=[\xF0-\xF4][\x80-\xBF])[\x80-\xBF](?![\x80-\xBF]) # Short 4 byte sequence (2)
+        )/x';
+		return preg_replace_callback($regex, static function ($matches) {
+			assert(strlen($matches[0]) === 1);
+			$hex = dechex(ord($matches[0]));
+
+			return '\\x' . str_pad($hex, 2, '0', STR_PAD_LEFT);
+		}, $escaped);
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Node.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Node.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Node.php	(revision 8435)
@@ -0,0 +1,22 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast;
+
+interface Node
+{
+
+	public function __toString(): string;
+
+	/**
+	 * @param mixed $value
+	 */
+	public function setAttribute(string $key, $value): void;
+
+	public function hasAttribute(string $key): bool;
+
+	/**
+	 * @return mixed
+	 */
+	public function getAttribute(string $key);
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/NodeAttributes.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/NodeAttributes.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/NodeAttributes.php	(revision 8435)
@@ -0,0 +1,38 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast;
+
+use function array_key_exists;
+
+trait NodeAttributes
+{
+
+	/** @var array<string, mixed> */
+	private $attributes = [];
+
+	/**
+	 * @param mixed $value
+	 */
+	public function setAttribute(string $key, $value): void
+	{
+		$this->attributes[$key] = $value;
+	}
+
+	public function hasAttribute(string $key): bool
+	{
+		return array_key_exists($key, $this->attributes);
+	}
+
+	/**
+	 * @return mixed
+	 */
+	public function getAttribute(string $key)
+	{
+		if ($this->hasAttribute($key)) {
+			return $this->attributes[$key];
+		}
+
+		return null;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/NodeTraverser.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/NodeTraverser.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/NodeTraverser.php	(revision 8435)
@@ -0,0 +1,312 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast;
+
+use LogicException;
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocChildNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagValueNode;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function array_keys;
+use function array_pop;
+use function array_splice;
+use function count;
+use function get_class;
+use function get_object_vars;
+use function gettype;
+use function is_array;
+use function sprintf;
+
+/**
+ * Inspired by https://github.com/nikic/PHP-Parser/tree/36a6dcd04e7b0285e8f0868f44bd4927802f7df1
+ *
+ * Copyright (c) 2011, Nikita Popov
+ * All rights reserved.
+ */
+final class NodeTraverser
+{
+
+	/**
+	 * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CHILDREN, child nodes
+	 * of the current node will not be traversed for any visitors.
+	 *
+	 * For subsequent visitors enterNode() will still be called on the current
+	 * node and leaveNode() will also be invoked for the current node.
+	 */
+	public const DONT_TRAVERSE_CHILDREN = 1;
+
+	/**
+	 * If NodeVisitor::enterNode() or NodeVisitor::leaveNode() returns
+	 * STOP_TRAVERSAL, traversal is aborted.
+	 *
+	 * The afterTraverse() method will still be invoked.
+	 */
+	public const STOP_TRAVERSAL = 2;
+
+	/**
+	 * If NodeVisitor::leaveNode() returns REMOVE_NODE for a node that occurs
+	 * in an array, it will be removed from the array.
+	 *
+	 * For subsequent visitors leaveNode() will still be invoked for the
+	 * removed node.
+	 */
+	public const REMOVE_NODE = 3;
+
+	/**
+	 * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CURRENT_AND_CHILDREN, child nodes
+	 * of the current node will not be traversed for any visitors.
+	 *
+	 * For subsequent visitors enterNode() will not be called as well.
+	 * leaveNode() will be invoked for visitors that has enterNode() method invoked.
+	 */
+	public const DONT_TRAVERSE_CURRENT_AND_CHILDREN = 4;
+
+	/** @var list<NodeVisitor> Visitors */
+	private $visitors = [];
+
+	/** @var bool Whether traversal should be stopped */
+	private $stopTraversal;
+
+	/**
+	 * @param list<NodeVisitor> $visitors
+	 */
+	public function __construct(array $visitors)
+	{
+		$this->visitors = $visitors;
+	}
+
+	/**
+	 * Traverses an array of nodes using the registered visitors.
+	 *
+	 * @param Node[] $nodes Array of nodes
+	 *
+	 * @return Node[] Traversed array of nodes
+	 */
+	public function traverse(array $nodes): array
+	{
+		$this->stopTraversal = false;
+
+		foreach ($this->visitors as $visitor) {
+			$return = $visitor->beforeTraverse($nodes);
+			if ($return === null) {
+				continue;
+			}
+
+			$nodes = $return;
+		}
+
+		$nodes = $this->traverseArray($nodes);
+
+		foreach ($this->visitors as $visitor) {
+			$return = $visitor->afterTraverse($nodes);
+			if ($return === null) {
+				continue;
+			}
+
+			$nodes = $return;
+		}
+
+		return $nodes;
+	}
+
+	/**
+	 * Recursively traverse a node.
+	 *
+	 * @param Node $node Node to traverse.
+	 *
+	 * @return Node Result of traversal (may be original node or new one)
+	 */
+	private function traverseNode(Node $node): Node
+	{
+		$subNodeNames = array_keys(get_object_vars($node));
+		foreach ($subNodeNames as $name) {
+			$subNode =& $node->$name;
+
+			if (is_array($subNode)) {
+				$subNode = $this->traverseArray($subNode);
+				if ($this->stopTraversal) {
+					break;
+				}
+			} elseif ($subNode instanceof Node) {
+				$traverseChildren = true;
+				$breakVisitorIndex = null;
+
+				foreach ($this->visitors as $visitorIndex => $visitor) {
+					$return = $visitor->enterNode($subNode);
+					if ($return === null) {
+						continue;
+					}
+
+					if ($return instanceof Node) {
+						$this->ensureReplacementReasonable($subNode, $return);
+						$subNode = $return;
+					} elseif ($return === self::DONT_TRAVERSE_CHILDREN) {
+						$traverseChildren = false;
+					} elseif ($return === self::DONT_TRAVERSE_CURRENT_AND_CHILDREN) {
+						$traverseChildren = false;
+						$breakVisitorIndex = $visitorIndex;
+						break;
+					} elseif ($return === self::STOP_TRAVERSAL) {
+						$this->stopTraversal = true;
+						break 2;
+					} else {
+						throw new LogicException(
+							'enterNode() returned invalid value of type ' . gettype($return)
+						);
+					}
+				}
+
+				if ($traverseChildren) {
+					$subNode = $this->traverseNode($subNode);
+					if ($this->stopTraversal) {
+						break;
+					}
+				}
+
+				foreach ($this->visitors as $visitorIndex => $visitor) {
+					$return = $visitor->leaveNode($subNode);
+
+					if ($return !== null) {
+						if ($return instanceof Node) {
+							$this->ensureReplacementReasonable($subNode, $return);
+							$subNode = $return;
+						} elseif ($return === self::STOP_TRAVERSAL) {
+							$this->stopTraversal = true;
+							break 2;
+						} elseif (is_array($return)) {
+							throw new LogicException(
+								'leaveNode() may only return an array ' .
+								'if the parent structure is an array'
+							);
+						} else {
+							throw new LogicException(
+								'leaveNode() returned invalid value of type ' . gettype($return)
+							);
+						}
+					}
+
+					if ($breakVisitorIndex === $visitorIndex) {
+						break;
+					}
+				}
+			}
+		}
+
+		return $node;
+	}
+
+	/**
+	 * Recursively traverse array (usually of nodes).
+	 *
+	 * @param mixed[] $nodes Array to traverse
+	 *
+	 * @return mixed[] Result of traversal (may be original array or changed one)
+	 */
+	private function traverseArray(array $nodes): array
+	{
+		$doNodes = [];
+
+		foreach ($nodes as $i => &$node) {
+			if ($node instanceof Node) {
+				$traverseChildren = true;
+				$breakVisitorIndex = null;
+
+				foreach ($this->visitors as $visitorIndex => $visitor) {
+					$return = $visitor->enterNode($node);
+					if ($return === null) {
+						continue;
+					}
+
+					if ($return instanceof Node) {
+						$this->ensureReplacementReasonable($node, $return);
+						$node = $return;
+					} elseif (is_array($return)) {
+						$doNodes[] = [$i, $return];
+						continue 2;
+					} elseif ($return === self::REMOVE_NODE) {
+						$doNodes[] = [$i, []];
+						continue 2;
+					} elseif ($return === self::DONT_TRAVERSE_CHILDREN) {
+						$traverseChildren = false;
+					} elseif ($return === self::DONT_TRAVERSE_CURRENT_AND_CHILDREN) {
+						$traverseChildren = false;
+						$breakVisitorIndex = $visitorIndex;
+						break;
+					} elseif ($return === self::STOP_TRAVERSAL) {
+						$this->stopTraversal = true;
+						break 2;
+					} else {
+						throw new LogicException(
+							'enterNode() returned invalid value of type ' . gettype($return)
+						);
+					}
+				}
+
+				if ($traverseChildren) {
+					$node = $this->traverseNode($node);
+					if ($this->stopTraversal) {
+						break;
+					}
+				}
+
+				foreach ($this->visitors as $visitorIndex => $visitor) {
+					$return = $visitor->leaveNode($node);
+
+					if ($return !== null) {
+						if ($return instanceof Node) {
+							$this->ensureReplacementReasonable($node, $return);
+							$node = $return;
+						} elseif (is_array($return)) {
+							$doNodes[] = [$i, $return];
+							break;
+						} elseif ($return === self::REMOVE_NODE) {
+							$doNodes[] = [$i, []];
+							break;
+						} elseif ($return === self::STOP_TRAVERSAL) {
+							$this->stopTraversal = true;
+							break 2;
+						} else {
+							throw new LogicException(
+								'leaveNode() returned invalid value of type ' . gettype($return)
+							);
+						}
+					}
+
+					if ($breakVisitorIndex === $visitorIndex) {
+						break;
+					}
+				}
+			} elseif (is_array($node)) {
+				throw new LogicException('Invalid node structure: Contains nested arrays');
+			}
+		}
+
+		if (count($doNodes) > 0) {
+			while ([$i, $replace] = array_pop($doNodes)) {
+				array_splice($nodes, $i, 1, $replace);
+			}
+		}
+
+		return $nodes;
+	}
+
+	private function ensureReplacementReasonable(Node $old, Node $new): void
+	{
+		if ($old instanceof TypeNode && !$new instanceof TypeNode) {
+			throw new LogicException(sprintf('Trying to replace TypeNode with %s', get_class($new)));
+		}
+
+		if ($old instanceof ConstExprNode && !$new instanceof ConstExprNode) {
+			throw new LogicException(sprintf('Trying to replace ConstExprNode with %s', get_class($new)));
+		}
+
+		if ($old instanceof PhpDocChildNode && !$new instanceof PhpDocChildNode) {
+			throw new LogicException(sprintf('Trying to replace PhpDocChildNode with %s', get_class($new)));
+		}
+
+		if ($old instanceof PhpDocTagValueNode && !$new instanceof PhpDocTagValueNode) {
+			throw new LogicException(sprintf('Trying to replace PhpDocTagValueNode with %s', get_class($new)));
+		}
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor.php	(revision 8435)
@@ -0,0 +1,87 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast;
+
+/**
+ * Inspired by https://github.com/nikic/PHP-Parser/tree/36a6dcd04e7b0285e8f0868f44bd4927802f7df1
+ *
+ * Copyright (c) 2011, Nikita Popov
+ * All rights reserved.
+ */
+interface NodeVisitor
+{
+
+	/**
+	 * Called once before traversal.
+	 *
+	 * Return value semantics:
+	 *  * null:      $nodes stays as-is
+	 *  * otherwise: $nodes is set to the return value
+	 *
+	 * @param Node[] $nodes Array of nodes
+	 *
+	 * @return Node[]|null Array of nodes
+	 */
+	public function beforeTraverse(array $nodes): ?array;
+
+	/**
+	 * Called when entering a node.
+	 *
+	 * Return value semantics:
+	 *  * null
+	 *        => $node stays as-is
+	 *  * array (of Nodes)
+	 *        => The return value is merged into the parent array (at the position of the $node)
+	 *  * NodeTraverser::REMOVE_NODE
+	 *        => $node is removed from the parent array
+	 *  * NodeTraverser::DONT_TRAVERSE_CHILDREN
+	 *        => Children of $node are not traversed. $node stays as-is
+	 *  * NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN
+	 *        => Further visitors for the current node are skipped, and its children are not
+	 *           traversed. $node stays as-is.
+	 *  * NodeTraverser::STOP_TRAVERSAL
+	 *        => Traversal is aborted. $node stays as-is
+	 *  * otherwise
+	 *        => $node is set to the return value
+	 *
+	 * @param Node $node Node
+	 *
+	 * @return Node|Node[]|NodeTraverser::*|null Replacement node (or special return value)
+	 */
+	public function enterNode(Node $node);
+
+	/**
+	 * Called when leaving a node.
+	 *
+	 * Return value semantics:
+	 *  * null
+	 *        => $node stays as-is
+	 *  * NodeTraverser::REMOVE_NODE
+	 *        => $node is removed from the parent array
+	 *  * NodeTraverser::STOP_TRAVERSAL
+	 *        => Traversal is aborted. $node stays as-is
+	 *  * array (of Nodes)
+	 *        => The return value is merged into the parent array (at the position of the $node)
+	 *  * otherwise
+	 *        => $node is set to the return value
+	 *
+	 * @param Node $node Node
+	 *
+	 * @return Node|Node[]|NodeTraverser::REMOVE_NODE|NodeTraverser::STOP_TRAVERSAL|null Replacement node (or special return value)
+	 */
+	public function leaveNode(Node $node);
+
+	/**
+	 * Called once after traversal.
+	 *
+	 * Return value semantics:
+	 *  * null:      $nodes stays as-is
+	 *  * otherwise: $nodes is set to the return value
+	 *
+	 * @param Node[] $nodes Array of nodes
+	 *
+	 * @return Node[]|null Array of nodes
+	 */
+	public function afterTraverse(array $nodes): ?array;
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor/CloningVisitor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor/CloningVisitor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor/CloningVisitor.php	(revision 8435)
@@ -0,0 +1,20 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\NodeVisitor;
+
+use PHPStan\PhpDocParser\Ast\AbstractNodeVisitor;
+use PHPStan\PhpDocParser\Ast\Attribute;
+use PHPStan\PhpDocParser\Ast\Node;
+
+final class CloningVisitor extends AbstractNodeVisitor
+{
+
+	public function enterNode(Node $originalNode)
+	{
+		$node = clone $originalNode;
+		$node->setAttribute(Attribute::ORIGINAL_NODE, $originalNode);
+
+		return $node;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagMethodValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagMethodValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagMethodValueNode.php	(revision 8435)
@@ -0,0 +1,50 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class AssertTagMethodValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var string */
+	public $parameter;
+
+	/** @var string */
+	public $method;
+
+	/** @var bool */
+	public $isNegated;
+
+	/** @var bool */
+	public $isEquality;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, string $parameter, string $method, bool $isNegated, string $description, bool $isEquality = false)
+	{
+		$this->type = $type;
+		$this->parameter = $parameter;
+		$this->method = $method;
+		$this->isNegated = $isNegated;
+		$this->isEquality = $isEquality;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		$isNegated = $this->isNegated ? '!' : '';
+		$isEquality = $this->isEquality ? '=' : '';
+		return trim("{$isNegated}{$isEquality}{$this->type} {$this->parameter}->{$this->method}() {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagPropertyValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagPropertyValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagPropertyValueNode.php	(revision 8435)
@@ -0,0 +1,50 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class AssertTagPropertyValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var string */
+	public $parameter;
+
+	/** @var string */
+	public $property;
+
+	/** @var bool */
+	public $isNegated;
+
+	/** @var bool */
+	public $isEquality;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, string $parameter, string $property, bool $isNegated, string $description, bool $isEquality = false)
+	{
+		$this->type = $type;
+		$this->parameter = $parameter;
+		$this->property = $property;
+		$this->isNegated = $isNegated;
+		$this->isEquality = $isEquality;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		$isNegated = $this->isNegated ? '!' : '';
+		$isEquality = $this->isEquality ? '=' : '';
+		return trim("{$isNegated}{$isEquality}{$this->type} {$this->parameter}->{$this->property} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagValueNode.php	(revision 8435)
@@ -0,0 +1,46 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class AssertTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var string */
+	public $parameter;
+
+	/** @var bool */
+	public $isNegated;
+
+	/** @var bool */
+	public $isEquality;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, string $parameter, bool $isNegated, string $description, bool $isEquality = false)
+	{
+		$this->type = $type;
+		$this->parameter = $parameter;
+		$this->isNegated = $isNegated;
+		$this->isEquality = $isEquality;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		$isNegated = $this->isNegated ? '!' : '';
+		$isEquality = $this->isEquality ? '=' : '';
+		return trim("{$isNegated}{$isEquality}{$this->type} {$this->parameter} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/DeprecatedTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/DeprecatedTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/DeprecatedTagValueNode.php	(revision 8435)
@@ -0,0 +1,27 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function trim;
+
+class DeprecatedTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(string $description)
+	{
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim($this->description);
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineAnnotation.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineAnnotation.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineAnnotation.php	(revision 8435)
@@ -0,0 +1,35 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine;
+
+use PHPStan\PhpDocParser\Ast\Node;
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function implode;
+
+class DoctrineAnnotation implements Node
+{
+
+	use NodeAttributes;
+
+	/** @var string */
+	public $name;
+
+	/** @var list<DoctrineArgument> */
+	public $arguments;
+
+	/**
+	 * @param list<DoctrineArgument> $arguments
+	 */
+	public function __construct(string $name, array $arguments)
+	{
+		$this->name = $name;
+		$this->arguments = $arguments;
+	}
+
+	public function __toString(): string
+	{
+		$arguments = implode(', ', $this->arguments);
+		return $this->name . '(' . $arguments . ')';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArgument.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArgument.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArgument.php	(revision 8435)
@@ -0,0 +1,43 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine;
+
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprNode;
+use PHPStan\PhpDocParser\Ast\Node;
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
+
+/**
+ * @phpstan-type ValueType = DoctrineAnnotation|IdentifierTypeNode|DoctrineArray|ConstExprNode
+ */
+class DoctrineArgument implements Node
+{
+
+	use NodeAttributes;
+
+	/** @var IdentifierTypeNode|null */
+	public $key;
+
+	/** @var ValueType */
+	public $value;
+
+	/**
+	 * @param ValueType $value
+	 */
+	public function __construct(?IdentifierTypeNode $key, $value)
+	{
+		$this->key = $key;
+		$this->value = $value;
+	}
+
+
+	public function __toString(): string
+	{
+		if ($this->key === null) {
+			return (string) $this->value;
+		}
+
+		return $this->key . '=' . $this->value;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArray.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArray.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArray.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine;
+
+use PHPStan\PhpDocParser\Ast\Node;
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function implode;
+
+class DoctrineArray implements Node
+{
+
+	use NodeAttributes;
+
+	/** @var list<DoctrineArrayItem> */
+	public $items;
+
+	/**
+	 * @param list<DoctrineArrayItem> $items
+	 */
+	public function __construct(array $items)
+	{
+		$this->items = $items;
+	}
+
+	public function __toString(): string
+	{
+		$items = implode(', ', $this->items);
+
+		return '{' . $items . '}';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArrayItem.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArrayItem.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArrayItem.php	(revision 8435)
@@ -0,0 +1,47 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine;
+
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprIntegerNode;
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprStringNode;
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstFetchNode;
+use PHPStan\PhpDocParser\Ast\Node;
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
+
+/**
+ * @phpstan-import-type ValueType from DoctrineArgument
+ * @phpstan-type KeyType = ConstExprIntegerNode|ConstExprStringNode|IdentifierTypeNode|ConstFetchNode|null
+ */
+class DoctrineArrayItem implements Node
+{
+
+	use NodeAttributes;
+
+	/** @var KeyType */
+	public $key;
+
+	/** @var ValueType */
+	public $value;
+
+	/**
+	 * @param KeyType $key
+	 * @param ValueType $value
+	 */
+	public function __construct($key, $value)
+	{
+		$this->key = $key;
+		$this->value = $value;
+	}
+
+
+	public function __toString(): string
+	{
+		if ($this->key === null) {
+			return (string) $this->value;
+		}
+
+		return $this->key . '=' . $this->value;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineTagValueNode.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagValueNode;
+use function trim;
+
+class DoctrineTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var DoctrineAnnotation */
+	public $annotation;
+
+	/** @var string (may be empty) */
+	public $description;
+
+
+	public function __construct(
+		DoctrineAnnotation $annotation,
+		string $description
+	)
+	{
+		$this->annotation = $annotation;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim("{$this->annotation} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ExtendsTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ExtendsTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ExtendsTagValueNode.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
+use function trim;
+
+class ExtendsTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var GenericTypeNode */
+	public $type;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(GenericTypeNode $type, string $description)
+	{
+		$this->type = $type;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim("{$this->type} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/GenericTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/GenericTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/GenericTagValueNode.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class GenericTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var string (may be empty) */
+	public $value;
+
+	public function __construct(string $value)
+	{
+		$this->value = $value;
+	}
+
+
+	public function __toString(): string
+	{
+		return $this->value;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ImplementsTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ImplementsTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ImplementsTagValueNode.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
+use function trim;
+
+class ImplementsTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var GenericTypeNode */
+	public $type;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(GenericTypeNode $type, string $description)
+	{
+		$this->type = $type;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim("{$this->type} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/InvalidTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/InvalidTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/InvalidTagValueNode.php	(revision 8435)
@@ -0,0 +1,53 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Parser\ParserException;
+use function sprintf;
+use function trigger_error;
+use const E_USER_WARNING;
+
+/**
+ * @property ParserException $exception
+ */
+class InvalidTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var string (may be empty) */
+	public $value;
+
+	/** @var mixed[] */
+	private $exceptionArgs;
+
+	public function __construct(string $value, ParserException $exception)
+	{
+		$this->value = $value;
+		$this->exceptionArgs = [
+			$exception->getCurrentTokenValue(),
+			$exception->getCurrentTokenType(),
+			$exception->getCurrentOffset(),
+			$exception->getExpectedTokenType(),
+			$exception->getExpectedTokenValue(),
+			$exception->getCurrentTokenLine(),
+		];
+	}
+
+	public function __get(string $name): ?ParserException
+	{
+		if ($name !== 'exception') {
+			trigger_error(sprintf('Undefined property: %s::$%s', self::class, $name), E_USER_WARNING);
+			return null;
+		}
+
+		return new ParserException(...$this->exceptionArgs);
+	}
+
+	public function __toString(): string
+	{
+		return $this->value;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueNode.php	(revision 8435)
@@ -0,0 +1,58 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function count;
+use function implode;
+
+class MethodTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var bool */
+	public $isStatic;
+
+	/** @var TypeNode|null */
+	public $returnType;
+
+	/** @var string */
+	public $methodName;
+
+	/** @var TemplateTagValueNode[] */
+	public $templateTypes;
+
+	/** @var MethodTagValueParameterNode[] */
+	public $parameters;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	/**
+	 * @param MethodTagValueParameterNode[] $parameters
+	 * @param TemplateTagValueNode[] $templateTypes
+	 */
+	public function __construct(bool $isStatic, ?TypeNode $returnType, string $methodName, array $parameters, string $description, array $templateTypes = [])
+	{
+		$this->isStatic = $isStatic;
+		$this->returnType = $returnType;
+		$this->methodName = $methodName;
+		$this->parameters = $parameters;
+		$this->description = $description;
+		$this->templateTypes = $templateTypes;
+	}
+
+
+	public function __toString(): string
+	{
+		$static = $this->isStatic ? 'static ' : '';
+		$returnType = $this->returnType !== null ? "{$this->returnType} " : '';
+		$parameters = implode(', ', $this->parameters);
+		$description = $this->description !== '' ? " {$this->description}" : '';
+		$templateTypes = count($this->templateTypes) > 0 ? '<' . implode(', ', $this->templateTypes) . '>' : '';
+		return "{$static}{$returnType}{$this->methodName}{$templateTypes}({$parameters}){$description}";
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueParameterNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueParameterNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueParameterNode.php	(revision 8435)
@@ -0,0 +1,49 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprNode;
+use PHPStan\PhpDocParser\Ast\Node;
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+
+class MethodTagValueParameterNode implements Node
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode|null */
+	public $type;
+
+	/** @var bool */
+	public $isReference;
+
+	/** @var bool */
+	public $isVariadic;
+
+	/** @var string */
+	public $parameterName;
+
+	/** @var ConstExprNode|null */
+	public $defaultValue;
+
+	public function __construct(?TypeNode $type, bool $isReference, bool $isVariadic, string $parameterName, ?ConstExprNode $defaultValue)
+	{
+		$this->type = $type;
+		$this->isReference = $isReference;
+		$this->isVariadic = $isVariadic;
+		$this->parameterName = $parameterName;
+		$this->defaultValue = $defaultValue;
+	}
+
+
+	public function __toString(): string
+	{
+		$type = $this->type !== null ? "{$this->type} " : '';
+		$isReference = $this->isReference ? '&' : '';
+		$isVariadic = $this->isVariadic ? '...' : '';
+		$default = $this->defaultValue !== null ? " = {$this->defaultValue}" : '';
+		return "{$type}{$isReference}{$isVariadic}{$this->parameterName}{$default}";
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MixinTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MixinTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MixinTagValueNode.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class MixinTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, string $description)
+	{
+		$this->type = $type;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim("{$this->type} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamClosureThisTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamClosureThisTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamClosureThisTagValueNode.php	(revision 8435)
@@ -0,0 +1,35 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class ParamClosureThisTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var string */
+	public $parameterName;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, string $parameterName, string $description)
+	{
+		$this->type = $type;
+		$this->parameterName = $parameterName;
+		$this->description = $description;
+	}
+
+	public function __toString(): string
+	{
+		return trim("{$this->type} {$this->parameterName} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamImmediatelyInvokedCallableTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamImmediatelyInvokedCallableTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamImmediatelyInvokedCallableTagValueNode.php	(revision 8435)
@@ -0,0 +1,30 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function trim;
+
+class ParamImmediatelyInvokedCallableTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var string */
+	public $parameterName;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(string $parameterName, string $description)
+	{
+		$this->parameterName = $parameterName;
+		$this->description = $description;
+	}
+
+	public function __toString(): string
+	{
+		return trim("{$this->parameterName} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamLaterInvokedCallableTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamLaterInvokedCallableTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamLaterInvokedCallableTagValueNode.php	(revision 8435)
@@ -0,0 +1,30 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function trim;
+
+class ParamLaterInvokedCallableTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var string */
+	public $parameterName;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(string $parameterName, string $description)
+	{
+		$this->parameterName = $parameterName;
+		$this->description = $description;
+	}
+
+	public function __toString(): string
+	{
+		return trim("{$this->parameterName} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamOutTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamOutTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamOutTagValueNode.php	(revision 8435)
@@ -0,0 +1,35 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class ParamOutTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var string */
+	public $parameterName;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, string $parameterName, string $description)
+	{
+		$this->type = $type;
+		$this->parameterName = $parameterName;
+		$this->description = $description;
+	}
+
+	public function __toString(): string
+	{
+		return trim("{$this->type} {$this->parameterName} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamTagValueNode.php	(revision 8435)
@@ -0,0 +1,46 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class ParamTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var bool */
+	public $isReference;
+
+	/** @var bool */
+	public $isVariadic;
+
+	/** @var string */
+	public $parameterName;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, bool $isVariadic, string $parameterName, string $description, bool $isReference = false)
+	{
+		$this->type = $type;
+		$this->isReference = $isReference;
+		$this->isVariadic = $isVariadic;
+		$this->parameterName = $parameterName;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		$reference = $this->isReference ? '&' : '';
+		$variadic = $this->isVariadic ? '...' : '';
+		return trim("{$this->type} {$reference}{$variadic}{$this->parameterName} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocChildNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocChildNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocChildNode.php	(revision 8435)
@@ -0,0 +1,10 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\Node;
+
+interface PhpDocChildNode extends Node
+{
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocNode.php	(revision 8435)
@@ -0,0 +1,438 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\Node;
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function array_column;
+use function array_filter;
+use function array_map;
+use function implode;
+
+class PhpDocNode implements Node
+{
+
+	use NodeAttributes;
+
+	/** @var PhpDocChildNode[] */
+	public $children;
+
+	/**
+	 * @param PhpDocChildNode[] $children
+	 */
+	public function __construct(array $children)
+	{
+		$this->children = $children;
+	}
+
+
+	/**
+	 * @return PhpDocTagNode[]
+	 */
+	public function getTags(): array
+	{
+		return array_filter($this->children, static function (PhpDocChildNode $child): bool {
+			return $child instanceof PhpDocTagNode;
+		});
+	}
+
+
+	/**
+	 * @return PhpDocTagNode[]
+	 */
+	public function getTagsByName(string $tagName): array
+	{
+		return array_filter($this->getTags(), static function (PhpDocTagNode $tag) use ($tagName): bool {
+			return $tag->name === $tagName;
+		});
+	}
+
+
+	/**
+	 * @return VarTagValueNode[]
+	 */
+	public function getVarTagValues(string $tagName = '@var'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof VarTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return ParamTagValueNode[]
+	 */
+	public function getParamTagValues(string $tagName = '@param'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof ParamTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return TypelessParamTagValueNode[]
+	 */
+	public function getTypelessParamTagValues(string $tagName = '@param'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof TypelessParamTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return ParamImmediatelyInvokedCallableTagValueNode[]
+	 */
+	public function getParamImmediatelyInvokedCallableTagValues(string $tagName = '@param-immediately-invoked-callable'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof ParamImmediatelyInvokedCallableTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return ParamLaterInvokedCallableTagValueNode[]
+	 */
+	public function getParamLaterInvokedCallableTagValues(string $tagName = '@param-later-invoked-callable'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof ParamLaterInvokedCallableTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return ParamClosureThisTagValueNode[]
+	 */
+	public function getParamClosureThisTagValues(string $tagName = '@param-closure-this'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof ParamClosureThisTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return TemplateTagValueNode[]
+	 */
+	public function getTemplateTagValues(string $tagName = '@template'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof TemplateTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return ExtendsTagValueNode[]
+	 */
+	public function getExtendsTagValues(string $tagName = '@extends'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof ExtendsTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return ImplementsTagValueNode[]
+	 */
+	public function getImplementsTagValues(string $tagName = '@implements'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof ImplementsTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return UsesTagValueNode[]
+	 */
+	public function getUsesTagValues(string $tagName = '@use'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof UsesTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return ReturnTagValueNode[]
+	 */
+	public function getReturnTagValues(string $tagName = '@return'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof ReturnTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return ThrowsTagValueNode[]
+	 */
+	public function getThrowsTagValues(string $tagName = '@throws'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof ThrowsTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return MixinTagValueNode[]
+	 */
+	public function getMixinTagValues(string $tagName = '@mixin'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof MixinTagValueNode;
+			}
+		);
+	}
+
+	/**
+	 * @return RequireExtendsTagValueNode[]
+	 */
+	public function getRequireExtendsTagValues(string $tagName = '@phpstan-require-extends'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof RequireExtendsTagValueNode;
+			}
+		);
+	}
+
+	/**
+	 * @return RequireImplementsTagValueNode[]
+	 */
+	public function getRequireImplementsTagValues(string $tagName = '@phpstan-require-implements'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof RequireImplementsTagValueNode;
+			}
+		);
+	}
+
+	/**
+	 * @return DeprecatedTagValueNode[]
+	 */
+	public function getDeprecatedTagValues(): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName('@deprecated'), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof DeprecatedTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return PropertyTagValueNode[]
+	 */
+	public function getPropertyTagValues(string $tagName = '@property'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof PropertyTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return PropertyTagValueNode[]
+	 */
+	public function getPropertyReadTagValues(string $tagName = '@property-read'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof PropertyTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return PropertyTagValueNode[]
+	 */
+	public function getPropertyWriteTagValues(string $tagName = '@property-write'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof PropertyTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return MethodTagValueNode[]
+	 */
+	public function getMethodTagValues(string $tagName = '@method'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof MethodTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return TypeAliasTagValueNode[]
+	 */
+	public function getTypeAliasTagValues(string $tagName = '@phpstan-type'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof TypeAliasTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return TypeAliasImportTagValueNode[]
+	 */
+	public function getTypeAliasImportTagValues(string $tagName = '@phpstan-import-type'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof TypeAliasImportTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return AssertTagValueNode[]
+	 */
+	public function getAssertTagValues(string $tagName = '@phpstan-assert'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof AssertTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return AssertTagPropertyValueNode[]
+	 */
+	public function getAssertPropertyTagValues(string $tagName = '@phpstan-assert'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof AssertTagPropertyValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return AssertTagMethodValueNode[]
+	 */
+	public function getAssertMethodTagValues(string $tagName = '@phpstan-assert'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof AssertTagMethodValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return SelfOutTagValueNode[]
+	 */
+	public function getSelfOutTypeTagValues(string $tagName = '@phpstan-this-out'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof SelfOutTagValueNode;
+			}
+		);
+	}
+
+
+	/**
+	 * @return ParamOutTagValueNode[]
+	 */
+	public function getParamOutTypeTagValues(string $tagName = '@param-out'): array
+	{
+		return array_filter(
+			array_column($this->getTagsByName($tagName), 'value'),
+			static function (PhpDocTagValueNode $value): bool {
+				return $value instanceof ParamOutTagValueNode;
+			}
+		);
+	}
+
+
+	public function __toString(): string
+	{
+		$children = array_map(
+			static function (PhpDocChildNode $child): string {
+				$s = (string) $child;
+				return $s === '' ? '' : ' ' . $s;
+			},
+			$this->children
+		);
+		return "/**\n *" . implode("\n *", $children) . "\n */";
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagNode.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine\DoctrineTagValueNode;
+use function trim;
+
+class PhpDocTagNode implements PhpDocChildNode
+{
+
+	use NodeAttributes;
+
+	/** @var string */
+	public $name;
+
+	/** @var PhpDocTagValueNode */
+	public $value;
+
+	public function __construct(string $name, PhpDocTagValueNode $value)
+	{
+		$this->name = $name;
+		$this->value = $value;
+	}
+
+
+	public function __toString(): string
+	{
+		if ($this->value instanceof DoctrineTagValueNode) {
+			return (string) $this->value;
+		}
+
+		return trim("{$this->name} {$this->value}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagValueNode.php	(revision 8435)
@@ -0,0 +1,10 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\Node;
+
+interface PhpDocTagValueNode extends Node
+{
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTextNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTextNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTextNode.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class PhpDocTextNode implements PhpDocChildNode
+{
+
+	use NodeAttributes;
+
+	/** @var string */
+	public $text;
+
+	public function __construct(string $text)
+	{
+		$this->text = $text;
+	}
+
+
+	public function __toString(): string
+	{
+		return $this->text;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PropertyTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PropertyTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PropertyTagValueNode.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class PropertyTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var string */
+	public $propertyName;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, string $propertyName, string $description)
+	{
+		$this->type = $type;
+		$this->propertyName = $propertyName;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim("{$this->type} {$this->propertyName} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireExtendsTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireExtendsTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireExtendsTagValueNode.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class RequireExtendsTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, string $description)
+	{
+		$this->type = $type;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim("{$this->type} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireImplementsTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireImplementsTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireImplementsTagValueNode.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class RequireImplementsTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, string $description)
+	{
+		$this->type = $type;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim("{$this->type} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ReturnTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ReturnTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ReturnTagValueNode.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class ReturnTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, string $description)
+	{
+		$this->type = $type;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim("{$this->type} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/SelfOutTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/SelfOutTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/SelfOutTagValueNode.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class SelfOutTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, string $description)
+	{
+		$this->type = $type;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim($this->type . ' ' . $this->description);
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php	(revision 8435)
@@ -0,0 +1,45 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class TemplateTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var non-empty-string */
+	public $name;
+
+	/** @var TypeNode|null */
+	public $bound;
+
+	/** @var TypeNode|null */
+	public $default;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	/**
+	 * @param non-empty-string $name
+	 */
+	public function __construct(string $name, ?TypeNode $bound, string $description, ?TypeNode $default = null)
+	{
+		$this->name = $name;
+		$this->bound = $bound;
+		$this->default = $default;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		$bound = $this->bound !== null ? " of {$this->bound}" : '';
+		$default = $this->default !== null ? " = {$this->default}" : '';
+		return trim("{$this->name}{$bound}{$default} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ThrowsTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ThrowsTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ThrowsTagValueNode.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class ThrowsTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, string $description)
+	{
+		$this->type = $type;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim("{$this->type} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasImportTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasImportTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasImportTagValueNode.php	(revision 8435)
@@ -0,0 +1,38 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
+use function trim;
+
+class TypeAliasImportTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var string */
+	public $importedAlias;
+
+	/** @var IdentifierTypeNode */
+	public $importedFrom;
+
+	/** @var string|null */
+	public $importedAs;
+
+	public function __construct(string $importedAlias, IdentifierTypeNode $importedFrom, ?string $importedAs)
+	{
+		$this->importedAlias = $importedAlias;
+		$this->importedFrom = $importedFrom;
+		$this->importedAs = $importedAs;
+	}
+
+	public function __toString(): string
+	{
+		return trim(
+			"{$this->importedAlias} from {$this->importedFrom}"
+			. ($this->importedAs !== null ? " as {$this->importedAs}" : '')
+		);
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasTagValueNode.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class TypeAliasTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var string */
+	public $alias;
+
+	/** @var TypeNode */
+	public $type;
+
+	public function __construct(string $alias, TypeNode $type)
+	{
+		$this->alias = $alias;
+		$this->type = $type;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim("{$this->alias} {$this->type}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypelessParamTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypelessParamTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypelessParamTagValueNode.php	(revision 8435)
@@ -0,0 +1,41 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function trim;
+
+class TypelessParamTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var bool */
+	public $isReference;
+
+	/** @var bool */
+	public $isVariadic;
+
+	/** @var string */
+	public $parameterName;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(bool $isVariadic, string $parameterName, string $description, bool $isReference = false)
+	{
+		$this->isReference = $isReference;
+		$this->isVariadic = $isVariadic;
+		$this->parameterName = $parameterName;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		$reference = $this->isReference ? '&' : '';
+		$variadic = $this->isVariadic ? '...' : '';
+		return trim("{$reference}{$variadic}{$this->parameterName} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/UsesTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/UsesTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/UsesTagValueNode.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
+use function trim;
+
+class UsesTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var GenericTypeNode */
+	public $type;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(GenericTypeNode $type, string $description)
+	{
+		$this->type = $type;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim("{$this->type} {$this->description}");
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/VarTagValueNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/VarTagValueNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/VarTagValueNode.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\PhpDoc;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use function trim;
+
+class VarTagValueNode implements PhpDocTagValueNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var string (may be empty) */
+	public $variableName;
+
+	/** @var string (may be empty) */
+	public $description;
+
+	public function __construct(TypeNode $type, string $variableName, string $description)
+	{
+		$this->type = $type;
+		$this->variableName = $variableName;
+		$this->description = $description;
+	}
+
+
+	public function __toString(): string
+	{
+		return trim("$this->type " . trim("{$this->variableName} {$this->description}"));
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeItemNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeItemNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeItemNode.php	(revision 8435)
@@ -0,0 +1,49 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprIntegerNode;
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprStringNode;
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function sprintf;
+
+class ArrayShapeItemNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var ConstExprIntegerNode|ConstExprStringNode|IdentifierTypeNode|null */
+	public $keyName;
+
+	/** @var bool */
+	public $optional;
+
+	/** @var TypeNode */
+	public $valueType;
+
+	/**
+	 * @param ConstExprIntegerNode|ConstExprStringNode|IdentifierTypeNode|null $keyName
+	 */
+	public function __construct($keyName, bool $optional, TypeNode $valueType)
+	{
+		$this->keyName = $keyName;
+		$this->optional = $optional;
+		$this->valueType = $valueType;
+	}
+
+
+	public function __toString(): string
+	{
+		if ($this->keyName !== null) {
+			return sprintf(
+				'%s%s: %s',
+				(string) $this->keyName,
+				$this->optional ? '?' : '',
+				(string) $this->valueType
+			);
+		}
+
+		return (string) $this->valueType;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php	(revision 8435)
@@ -0,0 +1,48 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function implode;
+
+class ArrayShapeNode implements TypeNode
+{
+
+	public const KIND_ARRAY = 'array';
+	public const KIND_LIST = 'list';
+
+	use NodeAttributes;
+
+	/** @var ArrayShapeItemNode[] */
+	public $items;
+
+	/** @var bool */
+	public $sealed;
+
+	/** @var self::KIND_* */
+	public $kind;
+
+	/**
+	 * @param ArrayShapeItemNode[] $items
+	 * @param self::KIND_* $kind
+	 */
+	public function __construct(array $items, bool $sealed = true, string $kind = self::KIND_ARRAY)
+	{
+		$this->items = $items;
+		$this->sealed = $sealed;
+		$this->kind = $kind;
+	}
+
+
+	public function __toString(): string
+	{
+		$items = $this->items;
+
+		if (! $this->sealed) {
+			$items[] = '...';
+		}
+
+		return $this->kind . '{' . implode(', ', $items) . '}';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayTypeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayTypeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayTypeNode.php	(revision 8435)
@@ -0,0 +1,34 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class ArrayTypeNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	public function __construct(TypeNode $type)
+	{
+		$this->type = $type;
+	}
+
+
+	public function __toString(): string
+	{
+		if (
+			$this->type instanceof CallableTypeNode
+			|| $this->type instanceof ConstTypeNode
+			|| $this->type instanceof NullableTypeNode
+		) {
+			return '(' . $this->type . ')[]';
+		}
+
+		return $this->type . '[]';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeNode.php	(revision 8435)
@@ -0,0 +1,52 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Ast\PhpDoc\TemplateTagValueNode;
+use function implode;
+
+class CallableTypeNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var IdentifierTypeNode */
+	public $identifier;
+
+	/** @var TemplateTagValueNode[] */
+	public $templateTypes;
+
+	/** @var CallableTypeParameterNode[] */
+	public $parameters;
+
+	/** @var TypeNode */
+	public $returnType;
+
+	/**
+	 * @param CallableTypeParameterNode[] $parameters
+	 * @param TemplateTagValueNode[]  $templateTypes
+	 */
+	public function __construct(IdentifierTypeNode $identifier, array $parameters, TypeNode $returnType, array $templateTypes = [])
+	{
+		$this->identifier = $identifier;
+		$this->parameters = $parameters;
+		$this->returnType = $returnType;
+		$this->templateTypes = $templateTypes;
+	}
+
+
+	public function __toString(): string
+	{
+		$returnType = $this->returnType;
+		if ($returnType instanceof self) {
+			$returnType = "({$returnType})";
+		}
+		$template = $this->templateTypes !== []
+			? '<' . implode(', ', $this->templateTypes) . '>'
+			: '';
+		$parameters = implode(', ', $this->parameters);
+		return "{$this->identifier}{$template}({$parameters}): {$returnType}";
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeParameterNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeParameterNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeParameterNode.php	(revision 8435)
@@ -0,0 +1,48 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\Node;
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function trim;
+
+class CallableTypeParameterNode implements Node
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var bool */
+	public $isReference;
+
+	/** @var bool */
+	public $isVariadic;
+
+	/** @var string (may be empty) */
+	public $parameterName;
+
+	/** @var bool */
+	public $isOptional;
+
+	public function __construct(TypeNode $type, bool $isReference, bool $isVariadic, string $parameterName, bool $isOptional)
+	{
+		$this->type = $type;
+		$this->isReference = $isReference;
+		$this->isVariadic = $isVariadic;
+		$this->parameterName = $parameterName;
+		$this->isOptional = $isOptional;
+	}
+
+
+	public function __toString(): string
+	{
+		$type = "{$this->type} ";
+		$isReference = $this->isReference ? '&' : '';
+		$isVariadic = $this->isVariadic ? '...' : '';
+		$isOptional = $this->isOptional ? '=' : '';
+		return trim("{$type}{$isReference}{$isVariadic}{$this->parameterName}") . $isOptional;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeForParameterNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeForParameterNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeForParameterNode.php	(revision 8435)
@@ -0,0 +1,49 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function sprintf;
+
+class ConditionalTypeForParameterNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var string */
+	public $parameterName;
+
+	/** @var TypeNode */
+	public $targetType;
+
+	/** @var TypeNode */
+	public $if;
+
+	/** @var TypeNode */
+	public $else;
+
+	/** @var bool */
+	public $negated;
+
+	public function __construct(string $parameterName, TypeNode $targetType, TypeNode $if, TypeNode $else, bool $negated)
+	{
+		$this->parameterName = $parameterName;
+		$this->targetType = $targetType;
+		$this->if = $if;
+		$this->else = $else;
+		$this->negated = $negated;
+	}
+
+	public function __toString(): string
+	{
+		return sprintf(
+			'(%s %s %s ? %s : %s)',
+			$this->parameterName,
+			$this->negated ? 'is not' : 'is',
+			$this->targetType,
+			$this->if,
+			$this->else
+		);
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeNode.php	(revision 8435)
@@ -0,0 +1,49 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function sprintf;
+
+class ConditionalTypeNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $subjectType;
+
+	/** @var TypeNode */
+	public $targetType;
+
+	/** @var TypeNode */
+	public $if;
+
+	/** @var TypeNode */
+	public $else;
+
+	/** @var bool */
+	public $negated;
+
+	public function __construct(TypeNode $subjectType, TypeNode $targetType, TypeNode $if, TypeNode $else, bool $negated)
+	{
+		$this->subjectType = $subjectType;
+		$this->targetType = $targetType;
+		$this->if = $if;
+		$this->else = $else;
+		$this->negated = $negated;
+	}
+
+	public function __toString(): string
+	{
+		return sprintf(
+			'(%s %s %s ? %s : %s)',
+			$this->subjectType,
+			$this->negated ? 'is not' : 'is',
+			$this->targetType,
+			$this->if,
+			$this->else
+		);
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConstTypeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConstTypeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConstTypeNode.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprNode;
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class ConstTypeNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var ConstExprNode */
+	public $constExpr;
+
+	public function __construct(ConstExprNode $constExpr)
+	{
+		$this->constExpr = $constExpr;
+	}
+
+	public function __toString(): string
+	{
+		return $this->constExpr->__toString();
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/GenericTypeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/GenericTypeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/GenericTypeNode.php	(revision 8435)
@@ -0,0 +1,58 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function implode;
+use function sprintf;
+
+class GenericTypeNode implements TypeNode
+{
+
+	public const VARIANCE_INVARIANT = 'invariant';
+	public const VARIANCE_COVARIANT = 'covariant';
+	public const VARIANCE_CONTRAVARIANT = 'contravariant';
+	public const VARIANCE_BIVARIANT = 'bivariant';
+
+	use NodeAttributes;
+
+	/** @var IdentifierTypeNode */
+	public $type;
+
+	/** @var TypeNode[] */
+	public $genericTypes;
+
+	/** @var (self::VARIANCE_*)[] */
+	public $variances;
+
+	/**
+	 * @param TypeNode[] $genericTypes
+	 * @param (self::VARIANCE_*)[] $variances
+	 */
+	public function __construct(IdentifierTypeNode $type, array $genericTypes, array $variances = [])
+	{
+		$this->type = $type;
+		$this->genericTypes = $genericTypes;
+		$this->variances = $variances;
+	}
+
+
+	public function __toString(): string
+	{
+		$genericTypes = [];
+
+		foreach ($this->genericTypes as $index => $type) {
+			$variance = $this->variances[$index] ?? self::VARIANCE_INVARIANT;
+			if ($variance === self::VARIANCE_INVARIANT) {
+				$genericTypes[] = (string) $type;
+			} elseif ($variance === self::VARIANCE_BIVARIANT) {
+				$genericTypes[] = '*';
+			} else {
+				$genericTypes[] = sprintf('%s %s', $variance, $type);
+			}
+		}
+
+		return $this->type . '<' . implode(', ', $genericTypes) . '>';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/IdentifierTypeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/IdentifierTypeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/IdentifierTypeNode.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class IdentifierTypeNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var string */
+	public $name;
+
+	public function __construct(string $name)
+	{
+		$this->name = $name;
+	}
+
+
+	public function __toString(): string
+	{
+		return $this->name;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/IntersectionTypeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/IntersectionTypeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/IntersectionTypeNode.php	(revision 8435)
@@ -0,0 +1,37 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function array_map;
+use function implode;
+
+class IntersectionTypeNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode[] */
+	public $types;
+
+	/**
+	 * @param TypeNode[] $types
+	 */
+	public function __construct(array $types)
+	{
+		$this->types = $types;
+	}
+
+
+	public function __toString(): string
+	{
+		return '(' . implode(' & ', array_map(static function (TypeNode $type): string {
+			if ($type instanceof NullableTypeNode) {
+				return '(' . $type . ')';
+			}
+
+			return (string) $type;
+		}, $this->types)) . ')';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/InvalidTypeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/InvalidTypeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/InvalidTypeNode.php	(revision 8435)
@@ -0,0 +1,38 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use PHPStan\PhpDocParser\Parser\ParserException;
+
+class InvalidTypeNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var mixed[] */
+	private $exceptionArgs;
+
+	public function __construct(ParserException $exception)
+	{
+		$this->exceptionArgs = [
+			$exception->getCurrentTokenValue(),
+			$exception->getCurrentTokenType(),
+			$exception->getCurrentOffset(),
+			$exception->getExpectedTokenType(),
+			$exception->getExpectedTokenValue(),
+			$exception->getCurrentTokenLine(),
+		];
+	}
+
+	public function getException(): ParserException
+	{
+		return new ParserException(...$this->exceptionArgs);
+	}
+
+	public function __toString(): string
+	{
+		return '*Invalid type*';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/NullableTypeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/NullableTypeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/NullableTypeNode.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class NullableTypeNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	public function __construct(TypeNode $type)
+	{
+		$this->type = $type;
+	}
+
+
+	public function __toString(): string
+	{
+		return '?' . $this->type;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeItemNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeItemNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeItemNode.php	(revision 8435)
@@ -0,0 +1,48 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprStringNode;
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function sprintf;
+
+class ObjectShapeItemNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var ConstExprStringNode|IdentifierTypeNode */
+	public $keyName;
+
+	/** @var bool */
+	public $optional;
+
+	/** @var TypeNode */
+	public $valueType;
+
+	/**
+	 * @param ConstExprStringNode|IdentifierTypeNode $keyName
+	 */
+	public function __construct($keyName, bool $optional, TypeNode $valueType)
+	{
+		$this->keyName = $keyName;
+		$this->optional = $optional;
+		$this->valueType = $valueType;
+	}
+
+
+	public function __toString(): string
+	{
+		if ($this->keyName !== null) {
+			return sprintf(
+				'%s%s: %s',
+				(string) $this->keyName,
+				$this->optional ? '?' : '',
+				(string) $this->valueType
+			);
+		}
+
+		return (string) $this->valueType;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeNode.php	(revision 8435)
@@ -0,0 +1,31 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function implode;
+
+class ObjectShapeNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var ObjectShapeItemNode[] */
+	public $items;
+
+	/**
+	 * @param ObjectShapeItemNode[] $items
+	 */
+	public function __construct(array $items)
+	{
+		$this->items = $items;
+	}
+
+	public function __toString(): string
+	{
+		$items = $this->items;
+
+		return 'object{' . implode(', ', $items) . '}';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/OffsetAccessTypeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/OffsetAccessTypeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/OffsetAccessTypeNode.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class OffsetAccessTypeNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode */
+	public $type;
+
+	/** @var TypeNode */
+	public $offset;
+
+	public function __construct(TypeNode $type, TypeNode $offset)
+	{
+		$this->type = $type;
+		$this->offset = $offset;
+	}
+
+	public function __toString(): string
+	{
+		if (
+			$this->type instanceof CallableTypeNode
+			|| $this->type instanceof NullableTypeNode
+		) {
+			return '(' . $this->type . ')[' . $this->offset . ']';
+		}
+
+		return $this->type . '[' . $this->offset . ']';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ThisTypeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ThisTypeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/ThisTypeNode.php	(revision 8435)
@@ -0,0 +1,17 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+
+class ThisTypeNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	public function __toString(): string
+	{
+		return '$this';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/TypeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/TypeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/TypeNode.php	(revision 8435)
@@ -0,0 +1,10 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\Node;
+
+interface TypeNode extends Node
+{
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/UnionTypeNode.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/UnionTypeNode.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Ast/Type/UnionTypeNode.php	(revision 8435)
@@ -0,0 +1,37 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Ast\Type;
+
+use PHPStan\PhpDocParser\Ast\NodeAttributes;
+use function array_map;
+use function implode;
+
+class UnionTypeNode implements TypeNode
+{
+
+	use NodeAttributes;
+
+	/** @var TypeNode[] */
+	public $types;
+
+	/**
+	 * @param TypeNode[] $types
+	 */
+	public function __construct(array $types)
+	{
+		$this->types = $types;
+	}
+
+
+	public function __toString(): string
+	{
+		return '(' . implode(' | ', array_map(static function (TypeNode $type): string {
+			if ($type instanceof NullableTypeNode) {
+				return '(' . $type . ')';
+			}
+
+				return (string) $type;
+		}, $this->types)) . ')';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.php	(revision 8435)
@@ -0,0 +1,198 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Lexer;
+
+use function implode;
+use function preg_match_all;
+use const PREG_SET_ORDER;
+
+/**
+ * Implementation based on Nette Tokenizer (New BSD License; https://github.com/nette/tokenizer)
+ */
+class Lexer
+{
+
+	public const TOKEN_REFERENCE = 0;
+	public const TOKEN_UNION = 1;
+	public const TOKEN_INTERSECTION = 2;
+	public const TOKEN_NULLABLE = 3;
+	public const TOKEN_OPEN_PARENTHESES = 4;
+	public const TOKEN_CLOSE_PARENTHESES = 5;
+	public const TOKEN_OPEN_ANGLE_BRACKET = 6;
+	public const TOKEN_CLOSE_ANGLE_BRACKET = 7;
+	public const TOKEN_OPEN_SQUARE_BRACKET = 8;
+	public const TOKEN_CLOSE_SQUARE_BRACKET = 9;
+	public const TOKEN_COMMA = 10;
+	public const TOKEN_VARIADIC = 11;
+	public const TOKEN_DOUBLE_COLON = 12;
+	public const TOKEN_DOUBLE_ARROW = 13;
+	public const TOKEN_EQUAL = 14;
+	public const TOKEN_OPEN_PHPDOC = 15;
+	public const TOKEN_CLOSE_PHPDOC = 16;
+	public const TOKEN_PHPDOC_TAG = 17;
+	public const TOKEN_DOCTRINE_TAG = 18;
+	public const TOKEN_FLOAT = 19;
+	public const TOKEN_INTEGER = 20;
+	public const TOKEN_SINGLE_QUOTED_STRING = 21;
+	public const TOKEN_DOUBLE_QUOTED_STRING = 22;
+	public const TOKEN_DOCTRINE_ANNOTATION_STRING = 23;
+	public const TOKEN_IDENTIFIER = 24;
+	public const TOKEN_THIS_VARIABLE = 25;
+	public const TOKEN_VARIABLE = 26;
+	public const TOKEN_HORIZONTAL_WS = 27;
+	public const TOKEN_PHPDOC_EOL = 28;
+	public const TOKEN_OTHER = 29;
+	public const TOKEN_END = 30;
+	public const TOKEN_COLON = 31;
+	public const TOKEN_WILDCARD = 32;
+	public const TOKEN_OPEN_CURLY_BRACKET = 33;
+	public const TOKEN_CLOSE_CURLY_BRACKET = 34;
+	public const TOKEN_NEGATED = 35;
+	public const TOKEN_ARROW = 36;
+
+	public const TOKEN_LABELS = [
+		self::TOKEN_REFERENCE => '\'&\'',
+		self::TOKEN_UNION => '\'|\'',
+		self::TOKEN_INTERSECTION => '\'&\'',
+		self::TOKEN_NULLABLE => '\'?\'',
+		self::TOKEN_NEGATED => '\'!\'',
+		self::TOKEN_OPEN_PARENTHESES => '\'(\'',
+		self::TOKEN_CLOSE_PARENTHESES => '\')\'',
+		self::TOKEN_OPEN_ANGLE_BRACKET => '\'<\'',
+		self::TOKEN_CLOSE_ANGLE_BRACKET => '\'>\'',
+		self::TOKEN_OPEN_SQUARE_BRACKET => '\'[\'',
+		self::TOKEN_CLOSE_SQUARE_BRACKET => '\']\'',
+		self::TOKEN_OPEN_CURLY_BRACKET => '\'{\'',
+		self::TOKEN_CLOSE_CURLY_BRACKET => '\'}\'',
+		self::TOKEN_COMMA => '\',\'',
+		self::TOKEN_COLON => '\':\'',
+		self::TOKEN_VARIADIC => '\'...\'',
+		self::TOKEN_DOUBLE_COLON => '\'::\'',
+		self::TOKEN_DOUBLE_ARROW => '\'=>\'',
+		self::TOKEN_ARROW => '\'->\'',
+		self::TOKEN_EQUAL => '\'=\'',
+		self::TOKEN_OPEN_PHPDOC => '\'/**\'',
+		self::TOKEN_CLOSE_PHPDOC => '\'*/\'',
+		self::TOKEN_PHPDOC_TAG => 'TOKEN_PHPDOC_TAG',
+		self::TOKEN_DOCTRINE_TAG => 'TOKEN_DOCTRINE_TAG',
+		self::TOKEN_PHPDOC_EOL => 'TOKEN_PHPDOC_EOL',
+		self::TOKEN_FLOAT => 'TOKEN_FLOAT',
+		self::TOKEN_INTEGER => 'TOKEN_INTEGER',
+		self::TOKEN_SINGLE_QUOTED_STRING => 'TOKEN_SINGLE_QUOTED_STRING',
+		self::TOKEN_DOUBLE_QUOTED_STRING => 'TOKEN_DOUBLE_QUOTED_STRING',
+		self::TOKEN_DOCTRINE_ANNOTATION_STRING => 'TOKEN_DOCTRINE_ANNOTATION_STRING',
+		self::TOKEN_IDENTIFIER => 'type',
+		self::TOKEN_THIS_VARIABLE => '\'$this\'',
+		self::TOKEN_VARIABLE => 'variable',
+		self::TOKEN_HORIZONTAL_WS => 'TOKEN_HORIZONTAL_WS',
+		self::TOKEN_OTHER => 'TOKEN_OTHER',
+		self::TOKEN_END => 'TOKEN_END',
+		self::TOKEN_WILDCARD => '*',
+	];
+
+	public const VALUE_OFFSET = 0;
+	public const TYPE_OFFSET = 1;
+	public const LINE_OFFSET = 2;
+
+	/** @var bool */
+	private $parseDoctrineAnnotations;
+
+	/** @var string|null */
+	private $regexp;
+
+	public function __construct(bool $parseDoctrineAnnotations = false)
+	{
+		$this->parseDoctrineAnnotations = $parseDoctrineAnnotations;
+	}
+
+	/**
+	 * @return list<array{string, int, int}>
+	 */
+	public function tokenize(string $s): array
+	{
+		if ($this->regexp === null) {
+			$this->regexp = $this->generateRegexp();
+		}
+
+		preg_match_all($this->regexp, $s, $matches, PREG_SET_ORDER);
+
+		$tokens = [];
+		$line = 1;
+		foreach ($matches as $match) {
+			$type = (int) $match['MARK'];
+			$tokens[] = [$match[0], $type, $line];
+			if ($type !== self::TOKEN_PHPDOC_EOL) {
+				continue;
+			}
+
+			$line++;
+		}
+
+		$tokens[] = ['', self::TOKEN_END, $line];
+
+		return $tokens;
+	}
+
+
+	private function generateRegexp(): string
+	{
+		$patterns = [
+			self::TOKEN_HORIZONTAL_WS => '[\\x09\\x20]++',
+
+			self::TOKEN_IDENTIFIER => '(?:[\\\\]?+[a-z_\\x80-\\xFF][0-9a-z_\\x80-\\xFF-]*+)++',
+			self::TOKEN_THIS_VARIABLE => '\\$this(?![0-9a-z_\\x80-\\xFF])',
+			self::TOKEN_VARIABLE => '\\$[a-z_\\x80-\\xFF][0-9a-z_\\x80-\\xFF]*+',
+
+			// '&' followed by TOKEN_VARIADIC, TOKEN_VARIABLE, TOKEN_EQUAL, TOKEN_EQUAL or TOKEN_CLOSE_PARENTHESES
+			self::TOKEN_REFERENCE => '&(?=\\s*+(?:[.,=)]|(?:\\$(?!this(?![0-9a-z_\\x80-\\xFF])))))',
+			self::TOKEN_UNION => '\\|',
+			self::TOKEN_INTERSECTION => '&',
+			self::TOKEN_NULLABLE => '\\?',
+			self::TOKEN_NEGATED => '!',
+
+			self::TOKEN_OPEN_PARENTHESES => '\\(',
+			self::TOKEN_CLOSE_PARENTHESES => '\\)',
+			self::TOKEN_OPEN_ANGLE_BRACKET => '<',
+			self::TOKEN_CLOSE_ANGLE_BRACKET => '>',
+			self::TOKEN_OPEN_SQUARE_BRACKET => '\\[',
+			self::TOKEN_CLOSE_SQUARE_BRACKET => '\\]',
+			self::TOKEN_OPEN_CURLY_BRACKET => '\\{',
+			self::TOKEN_CLOSE_CURLY_BRACKET => '\\}',
+
+			self::TOKEN_COMMA => ',',
+			self::TOKEN_VARIADIC => '\\.\\.\\.',
+			self::TOKEN_DOUBLE_COLON => '::',
+			self::TOKEN_DOUBLE_ARROW => '=>',
+			self::TOKEN_ARROW => '->',
+			self::TOKEN_EQUAL => '=',
+			self::TOKEN_COLON => ':',
+
+			self::TOKEN_OPEN_PHPDOC => '/\\*\\*(?=\\s)\\x20?+',
+			self::TOKEN_CLOSE_PHPDOC => '\\*/',
+			self::TOKEN_PHPDOC_TAG => '@(?:[a-z][a-z0-9-\\\\]+:)?[a-z][a-z0-9-\\\\]*+',
+			self::TOKEN_PHPDOC_EOL => '\\r?+\\n[\\x09\\x20]*+(?:\\*(?!/)\\x20?+)?',
+
+			self::TOKEN_FLOAT => '[+\-]?(?:(?:[0-9]++(_[0-9]++)*\\.[0-9]*+(_[0-9]++)*(?:e[+\-]?[0-9]++(_[0-9]++)*)?)|(?:[0-9]*+(_[0-9]++)*\\.[0-9]++(_[0-9]++)*(?:e[+\-]?[0-9]++(_[0-9]++)*)?)|(?:[0-9]++(_[0-9]++)*e[+\-]?[0-9]++(_[0-9]++)*))',
+			self::TOKEN_INTEGER => '[+\-]?(?:(?:0b[0-1]++(_[0-1]++)*)|(?:0o[0-7]++(_[0-7]++)*)|(?:0x[0-9a-f]++(_[0-9a-f]++)*)|(?:[0-9]++(_[0-9]++)*))',
+			self::TOKEN_SINGLE_QUOTED_STRING => '\'(?:\\\\[^\\r\\n]|[^\'\\r\\n\\\\])*+\'',
+			self::TOKEN_DOUBLE_QUOTED_STRING => '"(?:\\\\[^\\r\\n]|[^"\\r\\n\\\\])*+"',
+
+			self::TOKEN_WILDCARD => '\\*',
+		];
+
+		if ($this->parseDoctrineAnnotations) {
+			$patterns[self::TOKEN_DOCTRINE_TAG] = '@[a-z_\\\\][a-z0-9_\:\\\\]*[a-z_][a-z0-9_]*';
+			$patterns[self::TOKEN_DOCTRINE_ANNOTATION_STRING] = '"(?:""|[^"])*+"';
+		}
+
+		// anything but TOKEN_CLOSE_PHPDOC or TOKEN_HORIZONTAL_WS or TOKEN_EOL
+		$patterns[self::TOKEN_OTHER] = '(?:(?!\\*/)[^\\s])++';
+
+		foreach ($patterns as $type => &$pattern) {
+			$pattern = '(?:' . $pattern . ')(*MARK:' . $type . ')';
+		}
+
+		return '~' . implode('|', $patterns) . '~Asi';
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/ConstExprParser.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/ConstExprParser.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/ConstExprParser.php	(revision 8435)
@@ -0,0 +1,333 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Parser;
+
+use PHPStan\PhpDocParser\Ast;
+use PHPStan\PhpDocParser\Lexer\Lexer;
+use function str_replace;
+use function strtolower;
+use function substr;
+
+class ConstExprParser
+{
+
+	/** @var bool */
+	private $unescapeStrings;
+
+	/** @var bool */
+	private $quoteAwareConstExprString;
+
+	/** @var bool */
+	private $useLinesAttributes;
+
+	/** @var bool */
+	private $useIndexAttributes;
+
+	/** @var bool */
+	private $parseDoctrineStrings;
+
+	/**
+	 * @param array{lines?: bool, indexes?: bool} $usedAttributes
+	 */
+	public function __construct(
+		bool $unescapeStrings = false,
+		bool $quoteAwareConstExprString = false,
+		array $usedAttributes = []
+	)
+	{
+		$this->unescapeStrings = $unescapeStrings;
+		$this->quoteAwareConstExprString = $quoteAwareConstExprString;
+		$this->useLinesAttributes = $usedAttributes['lines'] ?? false;
+		$this->useIndexAttributes = $usedAttributes['indexes'] ?? false;
+		$this->parseDoctrineStrings = false;
+	}
+
+	/**
+	 * @internal
+	 */
+	public function toDoctrine(): self
+	{
+		$self = new self(
+			$this->unescapeStrings,
+			$this->quoteAwareConstExprString,
+			[
+				'lines' => $this->useLinesAttributes,
+				'indexes' => $this->useIndexAttributes,
+			]
+		);
+		$self->parseDoctrineStrings = true;
+		return $self;
+	}
+
+	public function parse(TokenIterator $tokens, bool $trimStrings = false): Ast\ConstExpr\ConstExprNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_FLOAT)) {
+			$value = $tokens->currentTokenValue();
+			$tokens->next();
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Ast\ConstExpr\ConstExprFloatNode(str_replace('_', '', $value)),
+				$startLine,
+				$startIndex
+			);
+		}
+
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_INTEGER)) {
+			$value = $tokens->currentTokenValue();
+			$tokens->next();
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Ast\ConstExpr\ConstExprIntegerNode(str_replace('_', '', $value)),
+				$startLine,
+				$startIndex
+			);
+		}
+
+		if ($this->parseDoctrineStrings && $tokens->isCurrentTokenType(Lexer::TOKEN_DOCTRINE_ANNOTATION_STRING)) {
+			$value = $tokens->currentTokenValue();
+			$tokens->next();
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Ast\ConstExpr\DoctrineConstExprStringNode(Ast\ConstExpr\DoctrineConstExprStringNode::unescape($value)),
+				$startLine,
+				$startIndex
+			);
+		}
+
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_SINGLE_QUOTED_STRING, Lexer::TOKEN_DOUBLE_QUOTED_STRING)) {
+			if ($this->parseDoctrineStrings) {
+				if ($tokens->isCurrentTokenType(Lexer::TOKEN_SINGLE_QUOTED_STRING)) {
+					throw new ParserException(
+						$tokens->currentTokenValue(),
+						$tokens->currentTokenType(),
+						$tokens->currentTokenOffset(),
+						Lexer::TOKEN_DOUBLE_QUOTED_STRING,
+						null,
+						$tokens->currentTokenLine()
+					);
+				}
+
+				$value = $tokens->currentTokenValue();
+				$tokens->next();
+
+				return $this->enrichWithAttributes(
+					$tokens,
+					$this->parseDoctrineString($value, $tokens),
+					$startLine,
+					$startIndex
+				);
+			}
+			$value = $tokens->currentTokenValue();
+			$type = $tokens->currentTokenType();
+			if ($trimStrings) {
+				if ($this->unescapeStrings) {
+					$value = StringUnescaper::unescapeString($value);
+				} else {
+					$value = substr($value, 1, -1);
+				}
+			}
+			$tokens->next();
+
+			if ($this->quoteAwareConstExprString) {
+				return $this->enrichWithAttributes(
+					$tokens,
+					new Ast\ConstExpr\QuoteAwareConstExprStringNode(
+						$value,
+						$type === Lexer::TOKEN_SINGLE_QUOTED_STRING
+							? Ast\ConstExpr\QuoteAwareConstExprStringNode::SINGLE_QUOTED
+							: Ast\ConstExpr\QuoteAwareConstExprStringNode::DOUBLE_QUOTED
+					),
+					$startLine,
+					$startIndex
+				);
+			}
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Ast\ConstExpr\ConstExprStringNode($value),
+				$startLine,
+				$startIndex
+			);
+
+		} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_IDENTIFIER)) {
+			$identifier = $tokens->currentTokenValue();
+			$tokens->next();
+
+			switch (strtolower($identifier)) {
+				case 'true':
+					return $this->enrichWithAttributes(
+						$tokens,
+						new Ast\ConstExpr\ConstExprTrueNode(),
+						$startLine,
+						$startIndex
+					);
+				case 'false':
+					return $this->enrichWithAttributes(
+						$tokens,
+						new Ast\ConstExpr\ConstExprFalseNode(),
+						$startLine,
+						$startIndex
+					);
+				case 'null':
+					return $this->enrichWithAttributes(
+						$tokens,
+						new Ast\ConstExpr\ConstExprNullNode(),
+						$startLine,
+						$startIndex
+					);
+				case 'array':
+					$tokens->consumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES);
+					return $this->parseArray($tokens, Lexer::TOKEN_CLOSE_PARENTHESES, $startIndex);
+			}
+
+			if ($tokens->tryConsumeTokenType(Lexer::TOKEN_DOUBLE_COLON)) {
+				$classConstantName = '';
+				$lastType = null;
+				while (true) {
+					if ($lastType !== Lexer::TOKEN_IDENTIFIER && $tokens->currentTokenType() === Lexer::TOKEN_IDENTIFIER) {
+						$classConstantName .= $tokens->currentTokenValue();
+						$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+						$lastType = Lexer::TOKEN_IDENTIFIER;
+
+						continue;
+					}
+
+					if ($lastType !== Lexer::TOKEN_WILDCARD && $tokens->tryConsumeTokenType(Lexer::TOKEN_WILDCARD)) {
+						$classConstantName .= '*';
+						$lastType = Lexer::TOKEN_WILDCARD;
+
+						if ($tokens->getSkippedHorizontalWhiteSpaceIfAny() !== '') {
+							break;
+						}
+
+						continue;
+					}
+
+					if ($lastType === null) {
+						// trigger parse error if nothing valid was consumed
+						$tokens->consumeTokenType(Lexer::TOKEN_WILDCARD);
+					}
+
+					break;
+				}
+
+				return $this->enrichWithAttributes(
+					$tokens,
+					new Ast\ConstExpr\ConstFetchNode($identifier, $classConstantName),
+					$startLine,
+					$startIndex
+				);
+
+			}
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Ast\ConstExpr\ConstFetchNode('', $identifier),
+				$startLine,
+				$startIndex
+			);
+
+		} elseif ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+			return $this->parseArray($tokens, Lexer::TOKEN_CLOSE_SQUARE_BRACKET, $startIndex);
+		}
+
+		throw new ParserException(
+			$tokens->currentTokenValue(),
+			$tokens->currentTokenType(),
+			$tokens->currentTokenOffset(),
+			Lexer::TOKEN_IDENTIFIER,
+			null,
+			$tokens->currentTokenLine()
+		);
+	}
+
+
+	private function parseArray(TokenIterator $tokens, int $endToken, int $startIndex): Ast\ConstExpr\ConstExprArrayNode
+	{
+		$items = [];
+
+		$startLine = $tokens->currentTokenLine();
+
+		if (!$tokens->tryConsumeTokenType($endToken)) {
+			do {
+				$items[] = $this->parseArrayItem($tokens);
+			} while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA) && !$tokens->isCurrentTokenType($endToken));
+			$tokens->consumeTokenType($endToken);
+		}
+
+		return $this->enrichWithAttributes(
+			$tokens,
+			new Ast\ConstExpr\ConstExprArrayNode($items),
+			$startLine,
+			$startIndex
+		);
+	}
+
+
+	/**
+	 * This method is supposed to be called with TokenIterator after reading TOKEN_DOUBLE_QUOTED_STRING and shifting
+	 * to the next token.
+	 */
+	public function parseDoctrineString(string $text, TokenIterator $tokens): Ast\ConstExpr\DoctrineConstExprStringNode
+	{
+		// Because of how Lexer works, a valid Doctrine string
+		// can consist of a sequence of TOKEN_DOUBLE_QUOTED_STRING and TOKEN_DOCTRINE_ANNOTATION_STRING
+		while ($tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_QUOTED_STRING, Lexer::TOKEN_DOCTRINE_ANNOTATION_STRING)) {
+			$text .= $tokens->currentTokenValue();
+			$tokens->next();
+		}
+
+		return new Ast\ConstExpr\DoctrineConstExprStringNode(Ast\ConstExpr\DoctrineConstExprStringNode::unescape($text));
+	}
+
+
+	private function parseArrayItem(TokenIterator $tokens): Ast\ConstExpr\ConstExprArrayItemNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+
+		$expr = $this->parse($tokens);
+
+		if ($tokens->tryConsumeTokenType(Lexer::TOKEN_DOUBLE_ARROW)) {
+			$key = $expr;
+			$value = $this->parse($tokens);
+
+		} else {
+			$key = null;
+			$value = $expr;
+		}
+
+		return $this->enrichWithAttributes(
+			$tokens,
+			new Ast\ConstExpr\ConstExprArrayItemNode($key, $value),
+			$startLine,
+			$startIndex
+		);
+	}
+
+	/**
+	 * @template T of Ast\ConstExpr\ConstExprNode
+	 * @param T $node
+	 * @return T
+	 */
+	private function enrichWithAttributes(TokenIterator $tokens, Ast\ConstExpr\ConstExprNode $node, int $startLine, int $startIndex): Ast\ConstExpr\ConstExprNode
+	{
+		if ($this->useLinesAttributes) {
+			$node->setAttribute(Ast\Attribute::START_LINE, $startLine);
+			$node->setAttribute(Ast\Attribute::END_LINE, $tokens->currentTokenLine());
+		}
+
+		if ($this->useIndexAttributes) {
+			$node->setAttribute(Ast\Attribute::START_INDEX, $startIndex);
+			$node->setAttribute(Ast\Attribute::END_INDEX, $tokens->endIndexOfLastRelevantToken());
+		}
+
+		return $node;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/ParserException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/ParserException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/ParserException.php	(revision 8435)
@@ -0,0 +1,106 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Parser;
+
+use Exception;
+use PHPStan\PhpDocParser\Lexer\Lexer;
+use function assert;
+use function json_encode;
+use function sprintf;
+use const JSON_INVALID_UTF8_SUBSTITUTE;
+use const JSON_UNESCAPED_SLASHES;
+use const JSON_UNESCAPED_UNICODE;
+
+class ParserException extends Exception
+{
+
+	/** @var string */
+	private $currentTokenValue;
+
+	/** @var int */
+	private $currentTokenType;
+
+	/** @var int */
+	private $currentOffset;
+
+	/** @var int */
+	private $expectedTokenType;
+
+	/** @var string|null */
+	private $expectedTokenValue;
+
+	/** @var int|null */
+	private $currentTokenLine;
+
+	public function __construct(
+		string $currentTokenValue,
+		int $currentTokenType,
+		int $currentOffset,
+		int $expectedTokenType,
+		?string $expectedTokenValue = null,
+		?int $currentTokenLine = null
+	)
+	{
+		$this->currentTokenValue = $currentTokenValue;
+		$this->currentTokenType = $currentTokenType;
+		$this->currentOffset = $currentOffset;
+		$this->expectedTokenType = $expectedTokenType;
+		$this->expectedTokenValue = $expectedTokenValue;
+		$this->currentTokenLine = $currentTokenLine;
+
+		parent::__construct(sprintf(
+			'Unexpected token %s, expected %s%s at offset %d%s',
+			$this->formatValue($currentTokenValue),
+			Lexer::TOKEN_LABELS[$expectedTokenType],
+			$expectedTokenValue !== null ? sprintf(' (%s)', $this->formatValue($expectedTokenValue)) : '',
+			$currentOffset,
+			$currentTokenLine === null ? '' : sprintf(' on line %d', $currentTokenLine)
+		));
+	}
+
+
+	public function getCurrentTokenValue(): string
+	{
+		return $this->currentTokenValue;
+	}
+
+
+	public function getCurrentTokenType(): int
+	{
+		return $this->currentTokenType;
+	}
+
+
+	public function getCurrentOffset(): int
+	{
+		return $this->currentOffset;
+	}
+
+
+	public function getExpectedTokenType(): int
+	{
+		return $this->expectedTokenType;
+	}
+
+
+	public function getExpectedTokenValue(): ?string
+	{
+		return $this->expectedTokenValue;
+	}
+
+
+	public function getCurrentTokenLine(): ?int
+	{
+		return $this->currentTokenLine;
+	}
+
+
+	private function formatValue(string $value): string
+	{
+		$json = json_encode($value, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_INVALID_UTF8_SUBSTITUTE);
+		assert($json !== false);
+
+		return $json;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php	(revision 8435)
@@ -0,0 +1,1289 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Parser;
+
+use LogicException;
+use PHPStan\PhpDocParser\Ast;
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprIntegerNode;
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprStringNode;
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstFetchNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine;
+use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
+use PHPStan\PhpDocParser\Lexer\Lexer;
+use PHPStan\ShouldNotHappenException;
+use function array_key_exists;
+use function array_values;
+use function count;
+use function rtrim;
+use function str_replace;
+use function trim;
+
+/**
+ * @phpstan-import-type ValueType from Doctrine\DoctrineArgument as DoctrineValueType
+ */
+class PhpDocParser
+{
+
+	private const DISALLOWED_DESCRIPTION_START_TOKENS = [
+		Lexer::TOKEN_UNION,
+		Lexer::TOKEN_INTERSECTION,
+	];
+
+	/** @var TypeParser */
+	private $typeParser;
+
+	/** @var ConstExprParser */
+	private $constantExprParser;
+
+	/** @var ConstExprParser */
+	private $doctrineConstantExprParser;
+
+	/** @var bool */
+	private $requireWhitespaceBeforeDescription;
+
+	/** @var bool */
+	private $preserveTypeAliasesWithInvalidTypes;
+
+	/** @var bool */
+	private $parseDoctrineAnnotations;
+
+	/** @var bool */
+	private $useLinesAttributes;
+
+	/** @var bool */
+	private $useIndexAttributes;
+
+	/** @var bool */
+	private $textBetweenTagsBelongsToDescription;
+
+	/**
+	 * @param array{lines?: bool, indexes?: bool} $usedAttributes
+	 */
+	public function __construct(
+		TypeParser $typeParser,
+		ConstExprParser $constantExprParser,
+		bool $requireWhitespaceBeforeDescription = false,
+		bool $preserveTypeAliasesWithInvalidTypes = false,
+		array $usedAttributes = [],
+		bool $parseDoctrineAnnotations = false,
+		bool $textBetweenTagsBelongsToDescription = false
+	)
+	{
+		$this->typeParser = $typeParser;
+		$this->constantExprParser = $constantExprParser;
+		$this->doctrineConstantExprParser = $constantExprParser->toDoctrine();
+		$this->requireWhitespaceBeforeDescription = $requireWhitespaceBeforeDescription;
+		$this->preserveTypeAliasesWithInvalidTypes = $preserveTypeAliasesWithInvalidTypes;
+		$this->parseDoctrineAnnotations = $parseDoctrineAnnotations;
+		$this->useLinesAttributes = $usedAttributes['lines'] ?? false;
+		$this->useIndexAttributes = $usedAttributes['indexes'] ?? false;
+		$this->textBetweenTagsBelongsToDescription = $textBetweenTagsBelongsToDescription;
+	}
+
+
+	public function parse(TokenIterator $tokens): Ast\PhpDoc\PhpDocNode
+	{
+		$tokens->consumeTokenType(Lexer::TOKEN_OPEN_PHPDOC);
+		$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+
+		$children = [];
+
+		if ($this->parseDoctrineAnnotations) {
+			if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) {
+				$lastChild = $this->parseChild($tokens);
+				$children[] = $lastChild;
+				while (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) {
+					if (
+						$lastChild instanceof Ast\PhpDoc\PhpDocTagNode
+						&& (
+							$lastChild->value instanceof Doctrine\DoctrineTagValueNode
+							|| $lastChild->value instanceof Ast\PhpDoc\GenericTagValueNode
+						)
+					) {
+						$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+						if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) {
+							break;
+						}
+						$lastChild = $this->parseChild($tokens);
+						$children[] = $lastChild;
+						continue;
+					}
+
+					if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL)) {
+						break;
+					}
+					if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) {
+						break;
+					}
+
+					$lastChild = $this->parseChild($tokens);
+					$children[] = $lastChild;
+				}
+			}
+		} else {
+			if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) {
+				$children[] = $this->parseChild($tokens);
+				while ($tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL) && !$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) {
+					$children[] = $this->parseChild($tokens);
+				}
+			}
+		}
+
+		try {
+			$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PHPDOC);
+		} catch (ParserException $e) {
+			$name = '';
+			$startLine = $tokens->currentTokenLine();
+			$startIndex = $tokens->currentTokenIndex();
+			if (count($children) > 0) {
+				$lastChild = $children[count($children) - 1];
+				if ($lastChild instanceof Ast\PhpDoc\PhpDocTagNode) {
+					$name = $lastChild->name;
+					$startLine = $tokens->currentTokenLine();
+					$startIndex = $tokens->currentTokenIndex();
+				}
+			}
+
+			$tag = new Ast\PhpDoc\PhpDocTagNode(
+				$name,
+				$this->enrichWithAttributes(
+					$tokens,
+					new Ast\PhpDoc\InvalidTagValueNode($e->getMessage(), $e),
+					$startLine,
+					$startIndex
+				)
+			);
+
+			$tokens->forwardToTheEnd();
+
+			return $this->enrichWithAttributes($tokens, new Ast\PhpDoc\PhpDocNode([$this->enrichWithAttributes($tokens, $tag, $startLine, $startIndex)]), 1, 0);
+		}
+
+		return $this->enrichWithAttributes($tokens, new Ast\PhpDoc\PhpDocNode(array_values($children)), 1, 0);
+	}
+
+
+	/** @phpstan-impure */
+	private function parseChild(TokenIterator $tokens): Ast\PhpDoc\PhpDocChildNode
+	{
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG)) {
+			$startLine = $tokens->currentTokenLine();
+			$startIndex = $tokens->currentTokenIndex();
+			return $this->enrichWithAttributes($tokens, $this->parseTag($tokens), $startLine, $startIndex);
+		}
+
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_DOCTRINE_TAG)) {
+			$startLine = $tokens->currentTokenLine();
+			$startIndex = $tokens->currentTokenIndex();
+			$tag = $tokens->currentTokenValue();
+			$tokens->next();
+
+			$tagStartLine = $tokens->currentTokenLine();
+			$tagStartIndex = $tokens->currentTokenIndex();
+
+			return $this->enrichWithAttributes($tokens, new Ast\PhpDoc\PhpDocTagNode(
+				$tag,
+				$this->enrichWithAttributes(
+					$tokens,
+					$this->parseDoctrineTagValue($tokens, $tag),
+					$tagStartLine,
+					$tagStartIndex
+				)
+			), $startLine, $startIndex);
+		}
+
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+		$text = $this->parseText($tokens);
+
+		return $this->enrichWithAttributes($tokens, $text, $startLine, $startIndex);
+	}
+
+	/**
+	 * @template T of Ast\Node
+	 * @param T $tag
+	 * @return T
+	 */
+	private function enrichWithAttributes(TokenIterator $tokens, Ast\Node $tag, int $startLine, int $startIndex): Ast\Node
+	{
+		if ($this->useLinesAttributes) {
+			$tag->setAttribute(Ast\Attribute::START_LINE, $startLine);
+			$tag->setAttribute(Ast\Attribute::END_LINE, $tokens->currentTokenLine());
+		}
+
+		if ($this->useIndexAttributes) {
+			$tag->setAttribute(Ast\Attribute::START_INDEX, $startIndex);
+			$tag->setAttribute(Ast\Attribute::END_INDEX, $tokens->endIndexOfLastRelevantToken());
+		}
+
+		return $tag;
+	}
+
+
+	private function parseText(TokenIterator $tokens): Ast\PhpDoc\PhpDocTextNode
+	{
+		$text = '';
+
+		$endTokens = [Lexer::TOKEN_PHPDOC_EOL, Lexer::TOKEN_CLOSE_PHPDOC, Lexer::TOKEN_END];
+		if ($this->textBetweenTagsBelongsToDescription) {
+			$endTokens = [Lexer::TOKEN_CLOSE_PHPDOC, Lexer::TOKEN_END];
+		}
+
+		$savepoint = false;
+
+		// if the next token is EOL, everything below is skipped and empty string is returned
+		while ($this->textBetweenTagsBelongsToDescription || !$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL)) {
+			$tmpText = $tokens->getSkippedHorizontalWhiteSpaceIfAny() . $tokens->joinUntil(Lexer::TOKEN_PHPDOC_EOL, ...$endTokens);
+			$text .= $tmpText;
+
+			// stop if we're not at EOL - meaning it's the end of PHPDoc
+			if (!$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL)) {
+				break;
+			}
+
+			if ($this->textBetweenTagsBelongsToDescription) {
+				if (!$savepoint) {
+					$tokens->pushSavePoint();
+					$savepoint = true;
+				} elseif ($tmpText !== '') {
+					$tokens->dropSavePoint();
+					$tokens->pushSavePoint();
+				}
+			}
+
+			$tokens->pushSavePoint();
+			$tokens->next();
+
+			// if we're at EOL, check what's next
+			// if next is a PHPDoc tag, EOL, or end of PHPDoc, stop
+			if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG, Lexer::TOKEN_DOCTRINE_TAG, ...$endTokens)) {
+				$tokens->rollback();
+				break;
+			}
+
+			// otherwise if the next is text, continue building the description string
+
+			$tokens->dropSavePoint();
+			$text .= $tokens->getDetectedNewline() ?? "\n";
+		}
+
+		if ($savepoint) {
+			$tokens->rollback();
+			$text = rtrim($text, $tokens->getDetectedNewline() ?? "\n");
+		}
+
+		return new Ast\PhpDoc\PhpDocTextNode(trim($text, " \t"));
+	}
+
+
+	private function parseOptionalDescriptionAfterDoctrineTag(TokenIterator $tokens): string
+	{
+		$text = '';
+
+		$endTokens = [Lexer::TOKEN_PHPDOC_EOL, Lexer::TOKEN_CLOSE_PHPDOC, Lexer::TOKEN_END];
+		if ($this->textBetweenTagsBelongsToDescription) {
+			$endTokens = [Lexer::TOKEN_CLOSE_PHPDOC, Lexer::TOKEN_END];
+		}
+
+		$savepoint = false;
+
+		// if the next token is EOL, everything below is skipped and empty string is returned
+		while ($this->textBetweenTagsBelongsToDescription || !$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL)) {
+			$tmpText = $tokens->getSkippedHorizontalWhiteSpaceIfAny() . $tokens->joinUntil(Lexer::TOKEN_PHPDOC_TAG, Lexer::TOKEN_DOCTRINE_TAG, Lexer::TOKEN_PHPDOC_EOL, ...$endTokens);
+			$text .= $tmpText;
+
+			// stop if we're not at EOL - meaning it's the end of PHPDoc
+			if (!$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL)) {
+				if (!$tokens->isPrecededByHorizontalWhitespace()) {
+					return trim($text . $this->parseText($tokens)->text, " \t");
+				}
+				if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG)) {
+					$tokens->pushSavePoint();
+					$child = $this->parseChild($tokens);
+					if ($child instanceof Ast\PhpDoc\PhpDocTagNode) {
+						if (
+							$child->value instanceof Ast\PhpDoc\GenericTagValueNode
+							|| $child->value instanceof Doctrine\DoctrineTagValueNode
+						) {
+							$tokens->rollback();
+							break;
+						}
+						if ($child->value instanceof Ast\PhpDoc\InvalidTagValueNode) {
+							$tokens->rollback();
+							$tokens->pushSavePoint();
+							$tokens->next();
+							if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
+								$tokens->rollback();
+								break;
+							}
+							$tokens->rollback();
+							return trim($text . $this->parseText($tokens)->text, " \t");
+						}
+					}
+
+					$tokens->rollback();
+					return trim($text . $this->parseText($tokens)->text, " \t");
+				}
+				break;
+			}
+
+			if ($this->textBetweenTagsBelongsToDescription) {
+				if (!$savepoint) {
+					$tokens->pushSavePoint();
+					$savepoint = true;
+				} elseif ($tmpText !== '') {
+					$tokens->dropSavePoint();
+					$tokens->pushSavePoint();
+				}
+			}
+
+			$tokens->pushSavePoint();
+			$tokens->next();
+
+			// if we're at EOL, check what's next
+			// if next is a PHPDoc tag, EOL, or end of PHPDoc, stop
+			if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG, Lexer::TOKEN_DOCTRINE_TAG, ...$endTokens)) {
+				$tokens->rollback();
+				break;
+			}
+
+			// otherwise if the next is text, continue building the description string
+
+			$tokens->dropSavePoint();
+			$text .= $tokens->getDetectedNewline() ?? "\n";
+		}
+
+		if ($savepoint) {
+			$tokens->rollback();
+			$text = rtrim($text, $tokens->getDetectedNewline() ?? "\n");
+		}
+
+		return trim($text, " \t");
+	}
+
+
+	public function parseTag(TokenIterator $tokens): Ast\PhpDoc\PhpDocTagNode
+	{
+		$tag = $tokens->currentTokenValue();
+		$tokens->next();
+		$value = $this->parseTagValue($tokens, $tag);
+
+		return new Ast\PhpDoc\PhpDocTagNode($tag, $value);
+	}
+
+
+	public function parseTagValue(TokenIterator $tokens, string $tag): Ast\PhpDoc\PhpDocTagValueNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+
+		try {
+			$tokens->pushSavePoint();
+
+			switch ($tag) {
+				case '@param':
+				case '@phpstan-param':
+				case '@psalm-param':
+				case '@phan-param':
+					$tagValue = $this->parseParamTagValue($tokens);
+					break;
+
+				case '@param-immediately-invoked-callable':
+				case '@phpstan-param-immediately-invoked-callable':
+					$tagValue = $this->parseParamImmediatelyInvokedCallableTagValue($tokens);
+					break;
+
+				case '@param-later-invoked-callable':
+				case '@phpstan-param-later-invoked-callable':
+					$tagValue = $this->parseParamLaterInvokedCallableTagValue($tokens);
+					break;
+
+				case '@param-closure-this':
+				case '@phpstan-param-closure-this':
+					$tagValue = $this->parseParamClosureThisTagValue($tokens);
+					break;
+
+				case '@var':
+				case '@phpstan-var':
+				case '@psalm-var':
+				case '@phan-var':
+					$tagValue = $this->parseVarTagValue($tokens);
+					break;
+
+				case '@return':
+				case '@phpstan-return':
+				case '@psalm-return':
+				case '@phan-return':
+				case '@phan-real-return':
+					$tagValue = $this->parseReturnTagValue($tokens);
+					break;
+
+				case '@throws':
+				case '@phpstan-throws':
+					$tagValue = $this->parseThrowsTagValue($tokens);
+					break;
+
+				case '@mixin':
+				case '@phan-mixin':
+					$tagValue = $this->parseMixinTagValue($tokens);
+					break;
+
+				case '@psalm-require-extends':
+				case '@phpstan-require-extends':
+					$tagValue = $this->parseRequireExtendsTagValue($tokens);
+					break;
+
+				case '@psalm-require-implements':
+				case '@phpstan-require-implements':
+					$tagValue = $this->parseRequireImplementsTagValue($tokens);
+					break;
+
+				case '@deprecated':
+					$tagValue = $this->parseDeprecatedTagValue($tokens);
+					break;
+
+				case '@property':
+				case '@property-read':
+				case '@property-write':
+				case '@phpstan-property':
+				case '@phpstan-property-read':
+				case '@phpstan-property-write':
+				case '@psalm-property':
+				case '@psalm-property-read':
+				case '@psalm-property-write':
+				case '@phan-property':
+				case '@phan-property-read':
+				case '@phan-property-write':
+					$tagValue = $this->parsePropertyTagValue($tokens);
+					break;
+
+				case '@method':
+				case '@phpstan-method':
+				case '@psalm-method':
+				case '@phan-method':
+					$tagValue = $this->parseMethodTagValue($tokens);
+					break;
+
+				case '@template':
+				case '@phpstan-template':
+				case '@psalm-template':
+				case '@phan-template':
+				case '@template-covariant':
+				case '@phpstan-template-covariant':
+				case '@psalm-template-covariant':
+				case '@template-contravariant':
+				case '@phpstan-template-contravariant':
+				case '@psalm-template-contravariant':
+					$tagValue = $this->typeParser->parseTemplateTagValue(
+						$tokens,
+						function ($tokens) {
+							return $this->parseOptionalDescription($tokens);
+						}
+					);
+					break;
+
+				case '@extends':
+				case '@phpstan-extends':
+				case '@phan-extends':
+				case '@phan-inherits':
+				case '@template-extends':
+					$tagValue = $this->parseExtendsTagValue('@extends', $tokens);
+					break;
+
+				case '@implements':
+				case '@phpstan-implements':
+				case '@template-implements':
+					$tagValue = $this->parseExtendsTagValue('@implements', $tokens);
+					break;
+
+				case '@use':
+				case '@phpstan-use':
+				case '@template-use':
+					$tagValue = $this->parseExtendsTagValue('@use', $tokens);
+					break;
+
+				case '@phpstan-type':
+				case '@psalm-type':
+				case '@phan-type':
+					$tagValue = $this->parseTypeAliasTagValue($tokens);
+					break;
+
+				case '@phpstan-import-type':
+				case '@psalm-import-type':
+					$tagValue = $this->parseTypeAliasImportTagValue($tokens);
+					break;
+
+				case '@phpstan-assert':
+				case '@phpstan-assert-if-true':
+				case '@phpstan-assert-if-false':
+				case '@psalm-assert':
+				case '@psalm-assert-if-true':
+				case '@psalm-assert-if-false':
+				case '@phan-assert':
+				case '@phan-assert-if-true':
+				case '@phan-assert-if-false':
+					$tagValue = $this->parseAssertTagValue($tokens);
+					break;
+
+				case '@phpstan-this-out':
+				case '@phpstan-self-out':
+				case '@psalm-this-out':
+				case '@psalm-self-out':
+					$tagValue = $this->parseSelfOutTagValue($tokens);
+					break;
+
+				case '@param-out':
+				case '@phpstan-param-out':
+				case '@psalm-param-out':
+					$tagValue = $this->parseParamOutTagValue($tokens);
+					break;
+
+				default:
+					if ($this->parseDoctrineAnnotations) {
+						if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
+							$tagValue = $this->parseDoctrineTagValue($tokens, $tag);
+						} else {
+							$tagValue = new Ast\PhpDoc\GenericTagValueNode($this->parseOptionalDescriptionAfterDoctrineTag($tokens));
+						}
+						break;
+					}
+
+					$tagValue = new Ast\PhpDoc\GenericTagValueNode($this->parseOptionalDescription($tokens));
+
+					break;
+			}
+
+			$tokens->dropSavePoint();
+
+		} catch (ParserException $e) {
+			$tokens->rollback();
+			$tagValue = new Ast\PhpDoc\InvalidTagValueNode($this->parseOptionalDescription($tokens), $e);
+		}
+
+		return $this->enrichWithAttributes($tokens, $tagValue, $startLine, $startIndex);
+	}
+
+
+	private function parseDoctrineTagValue(TokenIterator $tokens, string $tag): Ast\PhpDoc\PhpDocTagValueNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+
+		return new Doctrine\DoctrineTagValueNode(
+			$this->enrichWithAttributes(
+				$tokens,
+				new Doctrine\DoctrineAnnotation($tag, $this->parseDoctrineArguments($tokens, false)),
+				$startLine,
+				$startIndex
+			),
+			$this->parseOptionalDescriptionAfterDoctrineTag($tokens)
+		);
+	}
+
+
+	/**
+	 * @return list<Doctrine\DoctrineArgument>
+	 */
+	private function parseDoctrineArguments(TokenIterator $tokens, bool $deep): array
+	{
+		if (!$tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
+			return [];
+		}
+
+		if (!$deep) {
+			$tokens->addEndOfLineToSkippedTokens();
+		}
+
+		$arguments = [];
+
+		try {
+			$tokens->consumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES);
+
+			do {
+				if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PARENTHESES)) {
+					break;
+				}
+				$arguments[] = $this->parseDoctrineArgument($tokens);
+			} while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA));
+		} finally {
+			if (!$deep) {
+				$tokens->removeEndOfLineFromSkippedTokens();
+			}
+		}
+
+		$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);
+
+		return $arguments;
+	}
+
+
+	private function parseDoctrineArgument(TokenIterator $tokens): Doctrine\DoctrineArgument
+	{
+		if (!$tokens->isCurrentTokenType(Lexer::TOKEN_IDENTIFIER)) {
+			$startLine = $tokens->currentTokenLine();
+			$startIndex = $tokens->currentTokenIndex();
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Doctrine\DoctrineArgument(null, $this->parseDoctrineArgumentValue($tokens)),
+				$startLine,
+				$startIndex
+			);
+		}
+
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+
+		try {
+			$tokens->pushSavePoint();
+			$currentValue = $tokens->currentTokenValue();
+			$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+
+			$key = $this->enrichWithAttributes(
+				$tokens,
+				new IdentifierTypeNode($currentValue),
+				$startLine,
+				$startIndex
+			);
+			$tokens->consumeTokenType(Lexer::TOKEN_EQUAL);
+
+			$value = $this->parseDoctrineArgumentValue($tokens);
+
+			$tokens->dropSavePoint();
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Doctrine\DoctrineArgument($key, $value),
+				$startLine,
+				$startIndex
+			);
+		} catch (ParserException $e) {
+			$tokens->rollback();
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Doctrine\DoctrineArgument(null, $this->parseDoctrineArgumentValue($tokens)),
+				$startLine,
+				$startIndex
+			);
+		}
+	}
+
+
+	/**
+	 * @return DoctrineValueType
+	 */
+	private function parseDoctrineArgumentValue(TokenIterator $tokens)
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG, Lexer::TOKEN_DOCTRINE_TAG)) {
+			$name = $tokens->currentTokenValue();
+			$tokens->next();
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Doctrine\DoctrineAnnotation($name, $this->parseDoctrineArguments($tokens, true)),
+				$startLine,
+				$startIndex
+			);
+		}
+
+		if ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET)) {
+			$items = [];
+			do {
+				if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET)) {
+					break;
+				}
+				$items[] = $this->parseDoctrineArrayItem($tokens);
+			} while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA));
+
+			$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET);
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Doctrine\DoctrineArray($items),
+				$startLine,
+				$startIndex
+			);
+		}
+
+		$currentTokenValue = $tokens->currentTokenValue();
+		$tokens->pushSavePoint(); // because of ConstFetchNode
+		if ($tokens->tryConsumeTokenType(Lexer::TOKEN_IDENTIFIER)) {
+			$identifier = $this->enrichWithAttributes(
+				$tokens,
+				new Ast\Type\IdentifierTypeNode($currentTokenValue),
+				$startLine,
+				$startIndex
+			);
+			if (!$tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_COLON)) {
+				$tokens->dropSavePoint();
+				return $identifier;
+			}
+
+			$tokens->rollback(); // because of ConstFetchNode
+		} else {
+			$tokens->dropSavePoint(); // because of ConstFetchNode
+		}
+
+		$currentTokenValue = $tokens->currentTokenValue();
+		$currentTokenType = $tokens->currentTokenType();
+		$currentTokenOffset = $tokens->currentTokenOffset();
+		$currentTokenLine = $tokens->currentTokenLine();
+
+		try {
+			$constExpr = $this->doctrineConstantExprParser->parse($tokens, true);
+			if ($constExpr instanceof Ast\ConstExpr\ConstExprArrayNode) {
+				throw new ParserException(
+					$currentTokenValue,
+					$currentTokenType,
+					$currentTokenOffset,
+					Lexer::TOKEN_IDENTIFIER,
+					null,
+					$currentTokenLine
+				);
+			}
+
+			return $constExpr;
+		} catch (LogicException $e) {
+			throw new ParserException(
+				$currentTokenValue,
+				$currentTokenType,
+				$currentTokenOffset,
+				Lexer::TOKEN_IDENTIFIER,
+				null,
+				$currentTokenLine
+			);
+		}
+	}
+
+
+	private function parseDoctrineArrayItem(TokenIterator $tokens): Doctrine\DoctrineArrayItem
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+
+		try {
+			$tokens->pushSavePoint();
+
+			$key = $this->parseDoctrineArrayKey($tokens);
+			if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL)) {
+				if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_COLON)) {
+					$tokens->consumeTokenType(Lexer::TOKEN_EQUAL); // will throw exception
+				}
+			}
+
+			$value = $this->parseDoctrineArgumentValue($tokens);
+
+			$tokens->dropSavePoint();
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Doctrine\DoctrineArrayItem($key, $value),
+				$startLine,
+				$startIndex
+			);
+		} catch (ParserException $e) {
+			$tokens->rollback();
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Doctrine\DoctrineArrayItem(null, $this->parseDoctrineArgumentValue($tokens)),
+				$startLine,
+				$startIndex
+			);
+		}
+	}
+
+
+	/**
+	 * @return ConstExprIntegerNode|ConstExprStringNode|IdentifierTypeNode|ConstFetchNode
+	 */
+	private function parseDoctrineArrayKey(TokenIterator $tokens)
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_INTEGER)) {
+			$key = new Ast\ConstExpr\ConstExprIntegerNode(str_replace('_', '', $tokens->currentTokenValue()));
+			$tokens->next();
+
+		} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_DOCTRINE_ANNOTATION_STRING)) {
+			$key = new Ast\ConstExpr\DoctrineConstExprStringNode(Ast\ConstExpr\DoctrineConstExprStringNode::unescape($tokens->currentTokenValue()));
+
+			$tokens->next();
+
+		} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_QUOTED_STRING)) {
+			$value = $tokens->currentTokenValue();
+			$tokens->next();
+			$key = $this->doctrineConstantExprParser->parseDoctrineString($value, $tokens);
+
+		} else {
+			$currentTokenValue = $tokens->currentTokenValue();
+			$tokens->pushSavePoint(); // because of ConstFetchNode
+			if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_IDENTIFIER)) {
+				$tokens->dropSavePoint();
+				throw new ParserException(
+					$tokens->currentTokenValue(),
+					$tokens->currentTokenType(),
+					$tokens->currentTokenOffset(),
+					Lexer::TOKEN_IDENTIFIER,
+					null,
+					$tokens->currentTokenLine()
+				);
+			}
+
+			if (!$tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_COLON)) {
+				$tokens->dropSavePoint();
+
+				return $this->enrichWithAttributes(
+					$tokens,
+					new IdentifierTypeNode($currentTokenValue),
+					$startLine,
+					$startIndex
+				);
+			}
+
+			$tokens->rollback();
+			$constExpr = $this->doctrineConstantExprParser->parse($tokens, true);
+			if (!$constExpr instanceof Ast\ConstExpr\ConstFetchNode) {
+				throw new ParserException(
+					$tokens->currentTokenValue(),
+					$tokens->currentTokenType(),
+					$tokens->currentTokenOffset(),
+					Lexer::TOKEN_IDENTIFIER,
+					null,
+					$tokens->currentTokenLine()
+				);
+			}
+
+			return $constExpr;
+		}
+
+		return $this->enrichWithAttributes($tokens, $key, $startLine, $startIndex);
+	}
+
+
+	/**
+	 * @return Ast\PhpDoc\ParamTagValueNode|Ast\PhpDoc\TypelessParamTagValueNode
+	 */
+	private function parseParamTagValue(TokenIterator $tokens): Ast\PhpDoc\PhpDocTagValueNode
+	{
+		if (
+			$tokens->isCurrentTokenType(Lexer::TOKEN_REFERENCE, Lexer::TOKEN_VARIADIC, Lexer::TOKEN_VARIABLE)
+		) {
+			$type = null;
+		} else {
+			$type = $this->typeParser->parse($tokens);
+		}
+
+		$isReference = $tokens->tryConsumeTokenType(Lexer::TOKEN_REFERENCE);
+		$isVariadic = $tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC);
+		$parameterName = $this->parseRequiredVariableName($tokens);
+		$description = $this->parseOptionalDescription($tokens);
+
+		if ($type !== null) {
+			return new Ast\PhpDoc\ParamTagValueNode($type, $isVariadic, $parameterName, $description, $isReference);
+		}
+
+		return new Ast\PhpDoc\TypelessParamTagValueNode($isVariadic, $parameterName, $description, $isReference);
+	}
+
+
+	private function parseParamImmediatelyInvokedCallableTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamImmediatelyInvokedCallableTagValueNode
+	{
+		$parameterName = $this->parseRequiredVariableName($tokens);
+		$description = $this->parseOptionalDescription($tokens);
+
+		return new Ast\PhpDoc\ParamImmediatelyInvokedCallableTagValueNode($parameterName, $description);
+	}
+
+
+	private function parseParamLaterInvokedCallableTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamLaterInvokedCallableTagValueNode
+	{
+		$parameterName = $this->parseRequiredVariableName($tokens);
+		$description = $this->parseOptionalDescription($tokens);
+
+		return new Ast\PhpDoc\ParamLaterInvokedCallableTagValueNode($parameterName, $description);
+	}
+
+
+	private function parseParamClosureThisTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamClosureThisTagValueNode
+	{
+		$type = $this->typeParser->parse($tokens);
+		$parameterName = $this->parseRequiredVariableName($tokens);
+		$description = $this->parseOptionalDescription($tokens);
+
+		return new Ast\PhpDoc\ParamClosureThisTagValueNode($type, $parameterName, $description);
+	}
+
+
+	private function parseVarTagValue(TokenIterator $tokens): Ast\PhpDoc\VarTagValueNode
+	{
+		$type = $this->typeParser->parse($tokens);
+		$variableName = $this->parseOptionalVariableName($tokens);
+		$description = $this->parseOptionalDescription($tokens, $variableName === '');
+		return new Ast\PhpDoc\VarTagValueNode($type, $variableName, $description);
+	}
+
+
+	private function parseReturnTagValue(TokenIterator $tokens): Ast\PhpDoc\ReturnTagValueNode
+	{
+		$type = $this->typeParser->parse($tokens);
+		$description = $this->parseOptionalDescription($tokens, true);
+		return new Ast\PhpDoc\ReturnTagValueNode($type, $description);
+	}
+
+
+	private function parseThrowsTagValue(TokenIterator $tokens): Ast\PhpDoc\ThrowsTagValueNode
+	{
+		$type = $this->typeParser->parse($tokens);
+		$description = $this->parseOptionalDescription($tokens, true);
+		return new Ast\PhpDoc\ThrowsTagValueNode($type, $description);
+	}
+
+	private function parseMixinTagValue(TokenIterator $tokens): Ast\PhpDoc\MixinTagValueNode
+	{
+		$type = $this->typeParser->parse($tokens);
+		$description = $this->parseOptionalDescription($tokens, true);
+		return new Ast\PhpDoc\MixinTagValueNode($type, $description);
+	}
+
+	private function parseRequireExtendsTagValue(TokenIterator $tokens): Ast\PhpDoc\RequireExtendsTagValueNode
+	{
+		$type = $this->typeParser->parse($tokens);
+		$description = $this->parseOptionalDescription($tokens, true);
+		return new Ast\PhpDoc\RequireExtendsTagValueNode($type, $description);
+	}
+
+	private function parseRequireImplementsTagValue(TokenIterator $tokens): Ast\PhpDoc\RequireImplementsTagValueNode
+	{
+		$type = $this->typeParser->parse($tokens);
+		$description = $this->parseOptionalDescription($tokens, true);
+		return new Ast\PhpDoc\RequireImplementsTagValueNode($type, $description);
+	}
+
+	private function parseDeprecatedTagValue(TokenIterator $tokens): Ast\PhpDoc\DeprecatedTagValueNode
+	{
+		$description = $this->parseOptionalDescription($tokens);
+		return new Ast\PhpDoc\DeprecatedTagValueNode($description);
+	}
+
+
+	private function parsePropertyTagValue(TokenIterator $tokens): Ast\PhpDoc\PropertyTagValueNode
+	{
+		$type = $this->typeParser->parse($tokens);
+		$parameterName = $this->parseRequiredVariableName($tokens);
+		$description = $this->parseOptionalDescription($tokens);
+		return new Ast\PhpDoc\PropertyTagValueNode($type, $parameterName, $description);
+	}
+
+
+	private function parseMethodTagValue(TokenIterator $tokens): Ast\PhpDoc\MethodTagValueNode
+	{
+		$staticKeywordOrReturnTypeOrMethodName = $this->typeParser->parse($tokens);
+
+		if ($staticKeywordOrReturnTypeOrMethodName instanceof Ast\Type\IdentifierTypeNode && $staticKeywordOrReturnTypeOrMethodName->name === 'static') {
+			$isStatic = true;
+			$returnTypeOrMethodName = $this->typeParser->parse($tokens);
+
+		} else {
+			$isStatic = false;
+			$returnTypeOrMethodName = $staticKeywordOrReturnTypeOrMethodName;
+		}
+
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_IDENTIFIER)) {
+			$returnType = $returnTypeOrMethodName;
+			$methodName = $tokens->currentTokenValue();
+			$tokens->next();
+
+		} elseif ($returnTypeOrMethodName instanceof Ast\Type\IdentifierTypeNode) {
+			$returnType = $isStatic ? $staticKeywordOrReturnTypeOrMethodName : null;
+			$methodName = $returnTypeOrMethodName->name;
+			$isStatic = false;
+
+		} else {
+			$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); // will throw exception
+			exit;
+		}
+
+		$templateTypes = [];
+
+		if ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)) {
+			do {
+				$startLine = $tokens->currentTokenLine();
+				$startIndex = $tokens->currentTokenIndex();
+				$templateTypes[] = $this->enrichWithAttributes(
+					$tokens,
+					$this->typeParser->parseTemplateTagValue($tokens),
+					$startLine,
+					$startIndex
+				);
+			} while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA));
+			$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET);
+		}
+
+		$parameters = [];
+		$tokens->consumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES);
+		if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PARENTHESES)) {
+			$parameters[] = $this->parseMethodTagValueParameter($tokens);
+			while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) {
+				$parameters[] = $this->parseMethodTagValueParameter($tokens);
+			}
+		}
+		$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);
+
+		$description = $this->parseOptionalDescription($tokens);
+		return new Ast\PhpDoc\MethodTagValueNode($isStatic, $returnType, $methodName, $parameters, $description, $templateTypes);
+	}
+
+	private function parseMethodTagValueParameter(TokenIterator $tokens): Ast\PhpDoc\MethodTagValueParameterNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+
+		switch ($tokens->currentTokenType()) {
+			case Lexer::TOKEN_IDENTIFIER:
+			case Lexer::TOKEN_OPEN_PARENTHESES:
+			case Lexer::TOKEN_NULLABLE:
+				$parameterType = $this->typeParser->parse($tokens);
+				break;
+
+			default:
+				$parameterType = null;
+		}
+
+		$isReference = $tokens->tryConsumeTokenType(Lexer::TOKEN_REFERENCE);
+		$isVariadic = $tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC);
+
+		$parameterName = $tokens->currentTokenValue();
+		$tokens->consumeTokenType(Lexer::TOKEN_VARIABLE);
+
+		if ($tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL)) {
+			$defaultValue = $this->constantExprParser->parse($tokens);
+
+		} else {
+			$defaultValue = null;
+		}
+
+		return $this->enrichWithAttributes(
+			$tokens,
+			new Ast\PhpDoc\MethodTagValueParameterNode($parameterType, $isReference, $isVariadic, $parameterName, $defaultValue),
+			$startLine,
+			$startIndex
+		);
+	}
+
+	private function parseExtendsTagValue(string $tagName, TokenIterator $tokens): Ast\PhpDoc\PhpDocTagValueNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+		$baseType = new IdentifierTypeNode($tokens->currentTokenValue());
+		$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+
+		$type = $this->typeParser->parseGeneric(
+			$tokens,
+			$this->typeParser->enrichWithAttributes($tokens, $baseType, $startLine, $startIndex)
+		);
+
+		$description = $this->parseOptionalDescription($tokens);
+
+		switch ($tagName) {
+			case '@extends':
+				return new Ast\PhpDoc\ExtendsTagValueNode($type, $description);
+			case '@implements':
+				return new Ast\PhpDoc\ImplementsTagValueNode($type, $description);
+			case '@use':
+				return new Ast\PhpDoc\UsesTagValueNode($type, $description);
+		}
+
+		throw new ShouldNotHappenException();
+	}
+
+	private function parseTypeAliasTagValue(TokenIterator $tokens): Ast\PhpDoc\TypeAliasTagValueNode
+	{
+		$alias = $tokens->currentTokenValue();
+		$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+
+		// support phan-type/psalm-type syntax
+		$tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL);
+
+		if ($this->preserveTypeAliasesWithInvalidTypes) {
+			$startLine = $tokens->currentTokenLine();
+			$startIndex = $tokens->currentTokenIndex();
+			try {
+				$type = $this->typeParser->parse($tokens);
+				if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) {
+					if (!$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL)) {
+						throw new ParserException(
+							$tokens->currentTokenValue(),
+							$tokens->currentTokenType(),
+							$tokens->currentTokenOffset(),
+							Lexer::TOKEN_PHPDOC_EOL,
+							null,
+							$tokens->currentTokenLine()
+						);
+					}
+				}
+
+				return new Ast\PhpDoc\TypeAliasTagValueNode($alias, $type);
+			} catch (ParserException $e) {
+				$this->parseOptionalDescription($tokens);
+				return new Ast\PhpDoc\TypeAliasTagValueNode(
+					$alias,
+					$this->enrichWithAttributes($tokens, new Ast\Type\InvalidTypeNode($e), $startLine, $startIndex)
+				);
+			}
+		}
+
+		$type = $this->typeParser->parse($tokens);
+
+		return new Ast\PhpDoc\TypeAliasTagValueNode($alias, $type);
+	}
+
+	private function parseTypeAliasImportTagValue(TokenIterator $tokens): Ast\PhpDoc\TypeAliasImportTagValueNode
+	{
+		$importedAlias = $tokens->currentTokenValue();
+		$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+
+		$tokens->consumeTokenValue(Lexer::TOKEN_IDENTIFIER, 'from');
+
+		$identifierStartLine = $tokens->currentTokenLine();
+		$identifierStartIndex = $tokens->currentTokenIndex();
+		$importedFrom = $tokens->currentTokenValue();
+		$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+		$importedFromType = $this->enrichWithAttributes(
+			$tokens,
+			new IdentifierTypeNode($importedFrom),
+			$identifierStartLine,
+			$identifierStartIndex
+		);
+
+		$importedAs = null;
+		if ($tokens->tryConsumeTokenValue('as')) {
+			$importedAs = $tokens->currentTokenValue();
+			$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+		}
+
+		return new Ast\PhpDoc\TypeAliasImportTagValueNode($importedAlias, $importedFromType, $importedAs);
+	}
+
+	/**
+	 * @return Ast\PhpDoc\AssertTagValueNode|Ast\PhpDoc\AssertTagPropertyValueNode|Ast\PhpDoc\AssertTagMethodValueNode
+	 */
+	private function parseAssertTagValue(TokenIterator $tokens): Ast\PhpDoc\PhpDocTagValueNode
+	{
+		$isNegated = $tokens->tryConsumeTokenType(Lexer::TOKEN_NEGATED);
+		$isEquality = $tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL);
+		$type = $this->typeParser->parse($tokens);
+		$parameter = $this->parseAssertParameter($tokens);
+		$description = $this->parseOptionalDescription($tokens);
+
+		if (array_key_exists('method', $parameter)) {
+			return new Ast\PhpDoc\AssertTagMethodValueNode($type, $parameter['parameter'], $parameter['method'], $isNegated, $description, $isEquality);
+		} elseif (array_key_exists('property', $parameter)) {
+			return new Ast\PhpDoc\AssertTagPropertyValueNode($type, $parameter['parameter'], $parameter['property'], $isNegated, $description, $isEquality);
+		}
+
+		return new Ast\PhpDoc\AssertTagValueNode($type, $parameter['parameter'], $isNegated, $description, $isEquality);
+	}
+
+	/**
+	 * @return array{parameter: string}|array{parameter: string, property: string}|array{parameter: string, method: string}
+	 */
+	private function parseAssertParameter(TokenIterator $tokens): array
+	{
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_THIS_VARIABLE)) {
+			$parameter = '$this';
+			$tokens->next();
+		} else {
+			$parameter = $tokens->currentTokenValue();
+			$tokens->consumeTokenType(Lexer::TOKEN_VARIABLE);
+		}
+
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_ARROW)) {
+			$tokens->consumeTokenType(Lexer::TOKEN_ARROW);
+
+			$propertyOrMethod = $tokens->currentTokenValue();
+			$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+
+			if ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
+				$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);
+
+				return ['parameter' => $parameter, 'method' => $propertyOrMethod];
+			}
+
+			return ['parameter' => $parameter, 'property' => $propertyOrMethod];
+		}
+
+		return ['parameter' => $parameter];
+	}
+
+	private function parseSelfOutTagValue(TokenIterator $tokens): Ast\PhpDoc\SelfOutTagValueNode
+	{
+		$type = $this->typeParser->parse($tokens);
+		$description = $this->parseOptionalDescription($tokens);
+
+		return new Ast\PhpDoc\SelfOutTagValueNode($type, $description);
+	}
+
+	private function parseParamOutTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamOutTagValueNode
+	{
+		$type = $this->typeParser->parse($tokens);
+		$parameterName = $this->parseRequiredVariableName($tokens);
+		$description = $this->parseOptionalDescription($tokens);
+
+		return new Ast\PhpDoc\ParamOutTagValueNode($type, $parameterName, $description);
+	}
+
+	private function parseOptionalVariableName(TokenIterator $tokens): string
+	{
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_VARIABLE)) {
+			$parameterName = $tokens->currentTokenValue();
+			$tokens->next();
+		} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_THIS_VARIABLE)) {
+			$parameterName = '$this';
+			$tokens->next();
+
+		} else {
+			$parameterName = '';
+		}
+
+		return $parameterName;
+	}
+
+
+	private function parseRequiredVariableName(TokenIterator $tokens): string
+	{
+		$parameterName = $tokens->currentTokenValue();
+		$tokens->consumeTokenType(Lexer::TOKEN_VARIABLE);
+
+		return $parameterName;
+	}
+
+	private function parseOptionalDescription(TokenIterator $tokens, bool $limitStartToken = false): string
+	{
+		if ($limitStartToken) {
+			foreach (self::DISALLOWED_DESCRIPTION_START_TOKENS as $disallowedStartToken) {
+				if (!$tokens->isCurrentTokenType($disallowedStartToken)) {
+					continue;
+				}
+
+				$tokens->consumeTokenType(Lexer::TOKEN_OTHER); // will throw exception
+			}
+
+			if (
+				$this->requireWhitespaceBeforeDescription
+				&& !$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL, Lexer::TOKEN_CLOSE_PHPDOC, Lexer::TOKEN_END)
+				&& !$tokens->isPrecededByHorizontalWhitespace()
+			) {
+				$tokens->consumeTokenType(Lexer::TOKEN_HORIZONTAL_WS); // will throw exception
+			}
+		}
+
+		return $this->parseText($tokens)->text;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php	(revision 8435)
@@ -0,0 +1,96 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Parser;
+
+use function chr;
+use function hexdec;
+use function octdec;
+use function preg_replace_callback;
+use function str_replace;
+use function substr;
+
+class StringUnescaper
+{
+
+	private const REPLACEMENTS = [
+		'\\' => '\\',
+		'n' => "\n",
+		'r' => "\r",
+		't' => "\t",
+		'f' => "\f",
+		'v' => "\v",
+		'e' => "\x1B",
+	];
+
+	public static function unescapeString(string $string): string
+	{
+		$quote = $string[0];
+
+		if ($quote === '\'') {
+			return str_replace(
+				['\\\\', '\\\''],
+				['\\', '\''],
+				substr($string, 1, -1)
+			);
+		}
+
+		return self::parseEscapeSequences(substr($string, 1, -1), '"');
+	}
+
+	/**
+	 * Implementation based on https://github.com/nikic/PHP-Parser/blob/b0edd4c41111042d43bb45c6c657b2e0db367d9e/lib/PhpParser/Node/Scalar/String_.php#L90-L130
+	 */
+	private static function parseEscapeSequences(string $str, string $quote): string
+	{
+		$str = str_replace('\\' . $quote, $quote, $str);
+
+		return preg_replace_callback(
+			'~\\\\([\\\\nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3}|u\{([0-9a-fA-F]+)\})~',
+			static function ($matches) {
+				$str = $matches[1];
+
+				if (isset(self::REPLACEMENTS[$str])) {
+					return self::REPLACEMENTS[$str];
+				}
+				if ($str[0] === 'x' || $str[0] === 'X') {
+					return chr((int) hexdec(substr($str, 1)));
+				}
+				if ($str[0] === 'u') {
+					return self::codePointToUtf8((int) hexdec($matches[2]));
+				}
+
+				return chr((int) octdec($str));
+			},
+			$str
+		);
+	}
+
+	/**
+	 * Implementation based on https://github.com/nikic/PHP-Parser/blob/b0edd4c41111042d43bb45c6c657b2e0db367d9e/lib/PhpParser/Node/Scalar/String_.php#L132-L154
+	 */
+	private static function codePointToUtf8(int $num): string
+	{
+		if ($num <= 0x7F) {
+			return chr($num);
+		}
+		if ($num <= 0x7FF) {
+			return chr(($num >> 6) + 0xC0)
+				. chr(($num & 0x3F) + 0x80);
+		}
+		if ($num <= 0xFFFF) {
+			return chr(($num >> 12) + 0xE0)
+				. chr((($num >> 6) & 0x3F) + 0x80)
+				. chr(($num & 0x3F) + 0x80);
+		}
+		if ($num <= 0x1FFFFF) {
+			return chr(($num >> 18) + 0xF0)
+				. chr((($num >> 12) & 0x3F) + 0x80)
+				. chr((($num >> 6) & 0x3F) + 0x80)
+				. chr(($num & 0x3F) + 0x80);
+		}
+
+		// Invalid UTF-8 codepoint escape sequence: Codepoint too large
+		return "\xef\xbf\xbd";
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/TokenIterator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/TokenIterator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/TokenIterator.php	(revision 8435)
@@ -0,0 +1,383 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Parser;
+
+use LogicException;
+use PHPStan\PhpDocParser\Lexer\Lexer;
+use function array_pop;
+use function assert;
+use function count;
+use function in_array;
+use function strlen;
+use function substr;
+
+class TokenIterator
+{
+
+	/** @var list<array{string, int, int}> */
+	private $tokens;
+
+	/** @var int */
+	private $index;
+
+	/** @var int[] */
+	private $savePoints = [];
+
+	/** @var list<int> */
+	private $skippedTokenTypes = [Lexer::TOKEN_HORIZONTAL_WS];
+
+	/** @var string|null */
+	private $newline = null;
+
+	/**
+	 * @param list<array{string, int, int}> $tokens
+	 */
+	public function __construct(array $tokens, int $index = 0)
+	{
+		$this->tokens = $tokens;
+		$this->index = $index;
+
+		$this->skipIrrelevantTokens();
+	}
+
+
+	/**
+	 * @return list<array{string, int, int}>
+	 */
+	public function getTokens(): array
+	{
+		return $this->tokens;
+	}
+
+
+	public function getContentBetween(int $startPos, int $endPos): string
+	{
+		if ($startPos < 0 || $endPos > count($this->tokens)) {
+			throw new LogicException();
+		}
+
+		$content = '';
+		for ($i = $startPos; $i < $endPos; $i++) {
+			$content .= $this->tokens[$i][Lexer::VALUE_OFFSET];
+		}
+
+		return $content;
+	}
+
+
+	public function getTokenCount(): int
+	{
+		return count($this->tokens);
+	}
+
+
+	public function currentTokenValue(): string
+	{
+		return $this->tokens[$this->index][Lexer::VALUE_OFFSET];
+	}
+
+
+	public function currentTokenType(): int
+	{
+		return $this->tokens[$this->index][Lexer::TYPE_OFFSET];
+	}
+
+
+	public function currentTokenOffset(): int
+	{
+		$offset = 0;
+		for ($i = 0; $i < $this->index; $i++) {
+			$offset += strlen($this->tokens[$i][Lexer::VALUE_OFFSET]);
+		}
+
+		return $offset;
+	}
+
+
+	public function currentTokenLine(): int
+	{
+		return $this->tokens[$this->index][Lexer::LINE_OFFSET];
+	}
+
+
+	public function currentTokenIndex(): int
+	{
+		return $this->index;
+	}
+
+
+	public function endIndexOfLastRelevantToken(): int
+	{
+		$endIndex = $this->currentTokenIndex();
+		$endIndex--;
+		while (in_array($this->tokens[$endIndex][Lexer::TYPE_OFFSET], $this->skippedTokenTypes, true)) {
+			if (!isset($this->tokens[$endIndex - 1])) {
+				break;
+			}
+			$endIndex--;
+		}
+
+		return $endIndex;
+	}
+
+
+	public function isCurrentTokenValue(string $tokenValue): bool
+	{
+		return $this->tokens[$this->index][Lexer::VALUE_OFFSET] === $tokenValue;
+	}
+
+
+	public function isCurrentTokenType(int ...$tokenType): bool
+	{
+		return in_array($this->tokens[$this->index][Lexer::TYPE_OFFSET], $tokenType, true);
+	}
+
+
+	public function isPrecededByHorizontalWhitespace(): bool
+	{
+		return ($this->tokens[$this->index - 1][Lexer::TYPE_OFFSET] ?? -1) === Lexer::TOKEN_HORIZONTAL_WS;
+	}
+
+
+	/**
+	 * @throws ParserException
+	 */
+	public function consumeTokenType(int $tokenType): void
+	{
+		if ($this->tokens[$this->index][Lexer::TYPE_OFFSET] !== $tokenType) {
+			$this->throwError($tokenType);
+		}
+
+		if ($tokenType === Lexer::TOKEN_PHPDOC_EOL) {
+			if ($this->newline === null) {
+				$this->detectNewline();
+			}
+		}
+
+		$this->index++;
+		$this->skipIrrelevantTokens();
+	}
+
+
+	/**
+	 * @throws ParserException
+	 */
+	public function consumeTokenValue(int $tokenType, string $tokenValue): void
+	{
+		if ($this->tokens[$this->index][Lexer::TYPE_OFFSET] !== $tokenType || $this->tokens[$this->index][Lexer::VALUE_OFFSET] !== $tokenValue) {
+			$this->throwError($tokenType, $tokenValue);
+		}
+
+		$this->index++;
+		$this->skipIrrelevantTokens();
+	}
+
+
+	/** @phpstan-impure */
+	public function tryConsumeTokenValue(string $tokenValue): bool
+	{
+		if ($this->tokens[$this->index][Lexer::VALUE_OFFSET] !== $tokenValue) {
+			return false;
+		}
+
+		$this->index++;
+		$this->skipIrrelevantTokens();
+
+		return true;
+	}
+
+
+	/** @phpstan-impure */
+	public function tryConsumeTokenType(int $tokenType): bool
+	{
+		if ($this->tokens[$this->index][Lexer::TYPE_OFFSET] !== $tokenType) {
+			return false;
+		}
+
+		if ($tokenType === Lexer::TOKEN_PHPDOC_EOL) {
+			if ($this->newline === null) {
+				$this->detectNewline();
+			}
+		}
+
+		$this->index++;
+		$this->skipIrrelevantTokens();
+
+		return true;
+	}
+
+
+	private function detectNewline(): void
+	{
+		$value = $this->currentTokenValue();
+		if (substr($value, 0, 2) === "\r\n") {
+			$this->newline = "\r\n";
+		} elseif (substr($value, 0, 1) === "\n") {
+			$this->newline = "\n";
+		}
+	}
+
+
+	public function getSkippedHorizontalWhiteSpaceIfAny(): string
+	{
+		if ($this->index > 0 && $this->tokens[$this->index - 1][Lexer::TYPE_OFFSET] === Lexer::TOKEN_HORIZONTAL_WS) {
+			return $this->tokens[$this->index - 1][Lexer::VALUE_OFFSET];
+		}
+
+		return '';
+	}
+
+
+	/** @phpstan-impure */
+	public function joinUntil(int ...$tokenType): string
+	{
+		$s = '';
+		while (!in_array($this->tokens[$this->index][Lexer::TYPE_OFFSET], $tokenType, true)) {
+			$s .= $this->tokens[$this->index++][Lexer::VALUE_OFFSET];
+		}
+		return $s;
+	}
+
+
+	public function next(): void
+	{
+		$this->index++;
+		$this->skipIrrelevantTokens();
+	}
+
+
+	private function skipIrrelevantTokens(): void
+	{
+		if (!isset($this->tokens[$this->index])) {
+			return;
+		}
+
+		while (in_array($this->tokens[$this->index][Lexer::TYPE_OFFSET], $this->skippedTokenTypes, true)) {
+			if (!isset($this->tokens[$this->index + 1])) {
+				break;
+			}
+			$this->index++;
+		}
+	}
+
+
+	public function addEndOfLineToSkippedTokens(): void
+	{
+		$this->skippedTokenTypes = [Lexer::TOKEN_HORIZONTAL_WS, Lexer::TOKEN_PHPDOC_EOL];
+	}
+
+
+	public function removeEndOfLineFromSkippedTokens(): void
+	{
+		$this->skippedTokenTypes = [Lexer::TOKEN_HORIZONTAL_WS];
+	}
+
+	/** @phpstan-impure */
+	public function forwardToTheEnd(): void
+	{
+		$lastToken = count($this->tokens) - 1;
+		$this->index = $lastToken;
+	}
+
+
+	public function pushSavePoint(): void
+	{
+		$this->savePoints[] = $this->index;
+	}
+
+
+	public function dropSavePoint(): void
+	{
+		array_pop($this->savePoints);
+	}
+
+
+	public function rollback(): void
+	{
+		$index = array_pop($this->savePoints);
+		assert($index !== null);
+		$this->index = $index;
+	}
+
+
+	/**
+	 * @throws ParserException
+	 */
+	private function throwError(int $expectedTokenType, ?string $expectedTokenValue = null): void
+	{
+		throw new ParserException(
+			$this->currentTokenValue(),
+			$this->currentTokenType(),
+			$this->currentTokenOffset(),
+			$expectedTokenType,
+			$expectedTokenValue,
+			$this->currentTokenLine()
+		);
+	}
+
+	/**
+	 * Check whether the position is directly preceded by a certain token type.
+	 *
+	 * During this check TOKEN_HORIZONTAL_WS and TOKEN_PHPDOC_EOL are skipped
+	 */
+	public function hasTokenImmediatelyBefore(int $pos, int $expectedTokenType): bool
+	{
+		$tokens = $this->tokens;
+		$pos--;
+		for (; $pos >= 0; $pos--) {
+			$token = $tokens[$pos];
+			$type = $token[Lexer::TYPE_OFFSET];
+			if ($type === $expectedTokenType) {
+				return true;
+			}
+			if (!in_array($type, [
+				Lexer::TOKEN_HORIZONTAL_WS,
+				Lexer::TOKEN_PHPDOC_EOL,
+			], true)) {
+				break;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Check whether the position is directly followed by a certain token type.
+	 *
+	 * During this check TOKEN_HORIZONTAL_WS and TOKEN_PHPDOC_EOL are skipped
+	 */
+	public function hasTokenImmediatelyAfter(int $pos, int $expectedTokenType): bool
+	{
+		$tokens = $this->tokens;
+		$pos++;
+		for ($c = count($tokens); $pos < $c; $pos++) {
+			$token = $tokens[$pos];
+			$type = $token[Lexer::TYPE_OFFSET];
+			if ($type === $expectedTokenType) {
+				return true;
+			}
+			if (!in_array($type, [
+				Lexer::TOKEN_HORIZONTAL_WS,
+				Lexer::TOKEN_PHPDOC_EOL,
+			], true)) {
+				break;
+			}
+		}
+
+		return false;
+	}
+
+	public function getDetectedNewline(): ?string
+	{
+		return $this->newline;
+	}
+
+	/**
+	 * Whether the given position is immediately surrounded by parenthesis.
+	 */
+	public function hasParentheses(int $startPos, int $endPos): bool
+	{
+		return $this->hasTokenImmediatelyBefore($startPos, Lexer::TOKEN_OPEN_PARENTHESES)
+			&& $this->hasTokenImmediatelyAfter($endPos, Lexer::TOKEN_CLOSE_PARENTHESES);
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php	(revision 8435)
@@ -0,0 +1,1026 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Parser;
+
+use LogicException;
+use PHPStan\PhpDocParser\Ast;
+use PHPStan\PhpDocParser\Ast\PhpDoc\TemplateTagValueNode;
+use PHPStan\PhpDocParser\Lexer\Lexer;
+use function in_array;
+use function str_replace;
+use function strlen;
+use function strpos;
+use function substr_compare;
+use function trim;
+
+class TypeParser
+{
+
+	/** @var ConstExprParser|null */
+	private $constExprParser;
+
+	/** @var bool */
+	private $quoteAwareConstExprString;
+
+	/** @var bool */
+	private $useLinesAttributes;
+
+	/** @var bool */
+	private $useIndexAttributes;
+
+	/**
+	 * @param array{lines?: bool, indexes?: bool} $usedAttributes
+	 */
+	public function __construct(
+		?ConstExprParser $constExprParser = null,
+		bool $quoteAwareConstExprString = false,
+		array $usedAttributes = []
+	)
+	{
+		$this->constExprParser = $constExprParser;
+		$this->quoteAwareConstExprString = $quoteAwareConstExprString;
+		$this->useLinesAttributes = $usedAttributes['lines'] ?? false;
+		$this->useIndexAttributes = $usedAttributes['indexes'] ?? false;
+	}
+
+	/** @phpstan-impure */
+	public function parse(TokenIterator $tokens): Ast\Type\TypeNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_NULLABLE)) {
+			$type = $this->parseNullable($tokens);
+
+		} else {
+			$type = $this->parseAtomic($tokens);
+
+			if ($tokens->isCurrentTokenType(Lexer::TOKEN_UNION)) {
+				$type = $this->parseUnion($tokens, $type);
+
+			} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_INTERSECTION)) {
+				$type = $this->parseIntersection($tokens, $type);
+			}
+		}
+
+		return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex);
+	}
+
+	/**
+	 * @internal
+	 * @template T of Ast\Node
+	 * @param T $type
+	 * @return T
+	 */
+	public function enrichWithAttributes(TokenIterator $tokens, Ast\Node $type, int $startLine, int $startIndex): Ast\Node
+	{
+		if ($this->useLinesAttributes) {
+			$type->setAttribute(Ast\Attribute::START_LINE, $startLine);
+			$type->setAttribute(Ast\Attribute::END_LINE, $tokens->currentTokenLine());
+		}
+
+		if ($this->useIndexAttributes) {
+			$type->setAttribute(Ast\Attribute::START_INDEX, $startIndex);
+			$type->setAttribute(Ast\Attribute::END_INDEX, $tokens->endIndexOfLastRelevantToken());
+		}
+
+		return $type;
+	}
+
+	/** @phpstan-impure */
+	private function subParse(TokenIterator $tokens): Ast\Type\TypeNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_NULLABLE)) {
+			$type = $this->parseNullable($tokens);
+
+		} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_VARIABLE)) {
+			$type = $this->parseConditionalForParameter($tokens, $tokens->currentTokenValue());
+
+		} else {
+			$type = $this->parseAtomic($tokens);
+
+			if ($tokens->isCurrentTokenValue('is')) {
+				$type = $this->parseConditional($tokens, $type);
+			} else {
+				$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+
+				if ($tokens->isCurrentTokenType(Lexer::TOKEN_UNION)) {
+					$type = $this->subParseUnion($tokens, $type);
+
+				} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_INTERSECTION)) {
+					$type = $this->subParseIntersection($tokens, $type);
+				}
+			}
+		}
+
+		return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex);
+	}
+
+
+	/** @phpstan-impure */
+	private function parseAtomic(TokenIterator $tokens): Ast\Type\TypeNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+
+		if ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+			$type = $this->subParse($tokens);
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+
+			$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);
+
+			if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+				$type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
+			}
+
+			return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex);
+		}
+
+		if ($tokens->tryConsumeTokenType(Lexer::TOKEN_THIS_VARIABLE)) {
+			$type = $this->enrichWithAttributes($tokens, new Ast\Type\ThisTypeNode(), $startLine, $startIndex);
+
+			if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+				$type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
+			}
+
+			return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex);
+		}
+
+		$currentTokenValue = $tokens->currentTokenValue();
+		$tokens->pushSavePoint(); // because of ConstFetchNode
+		if ($tokens->tryConsumeTokenType(Lexer::TOKEN_IDENTIFIER)) {
+			$type = $this->enrichWithAttributes($tokens, new Ast\Type\IdentifierTypeNode($currentTokenValue), $startLine, $startIndex);
+
+			if (!$tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_COLON)) {
+				$tokens->dropSavePoint(); // because of ConstFetchNode
+				if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)) {
+					$tokens->pushSavePoint();
+
+					$isHtml = $this->isHtml($tokens);
+					$tokens->rollback();
+					if ($isHtml) {
+						return $type;
+					}
+
+					$origType = $type;
+					$type = $this->tryParseCallable($tokens, $type, true);
+					if ($type === $origType) {
+						$type = $this->parseGeneric($tokens, $type);
+
+						if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+							$type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
+						}
+					}
+				} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
+					$type = $this->tryParseCallable($tokens, $type, false);
+
+				} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+					$type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
+
+				} elseif (in_array($type->name, ['array', 'list', 'object'], true) && $tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET) && !$tokens->isPrecededByHorizontalWhitespace()) {
+					if ($type->name === 'object') {
+						$type = $this->parseObjectShape($tokens);
+					} else {
+						$type = $this->parseArrayShape($tokens, $type, $type->name);
+					}
+
+					if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+						$type = $this->tryParseArrayOrOffsetAccess(
+							$tokens,
+							$this->enrichWithAttributes($tokens, $type, $startLine, $startIndex)
+						);
+					}
+				}
+
+				return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex);
+			} else {
+				$tokens->rollback(); // because of ConstFetchNode
+			}
+		} else {
+			$tokens->dropSavePoint(); // because of ConstFetchNode
+		}
+
+		$currentTokenValue = $tokens->currentTokenValue();
+		$currentTokenType = $tokens->currentTokenType();
+		$currentTokenOffset = $tokens->currentTokenOffset();
+		$currentTokenLine = $tokens->currentTokenLine();
+
+		if ($this->constExprParser === null) {
+			throw new ParserException(
+				$currentTokenValue,
+				$currentTokenType,
+				$currentTokenOffset,
+				Lexer::TOKEN_IDENTIFIER,
+				null,
+				$currentTokenLine
+			);
+		}
+
+		try {
+			$constExpr = $this->constExprParser->parse($tokens, true);
+			if ($constExpr instanceof Ast\ConstExpr\ConstExprArrayNode) {
+				throw new ParserException(
+					$currentTokenValue,
+					$currentTokenType,
+					$currentTokenOffset,
+					Lexer::TOKEN_IDENTIFIER,
+					null,
+					$currentTokenLine
+				);
+			}
+
+			$type = $this->enrichWithAttributes(
+				$tokens,
+				new Ast\Type\ConstTypeNode($constExpr),
+				$startLine,
+				$startIndex
+			);
+			if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+				$type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
+			}
+
+			return $type;
+		} catch (LogicException $e) {
+			throw new ParserException(
+				$currentTokenValue,
+				$currentTokenType,
+				$currentTokenOffset,
+				Lexer::TOKEN_IDENTIFIER,
+				null,
+				$currentTokenLine
+			);
+		}
+	}
+
+
+	/** @phpstan-impure */
+	private function parseUnion(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode
+	{
+		$types = [$type];
+
+		while ($tokens->tryConsumeTokenType(Lexer::TOKEN_UNION)) {
+			$types[] = $this->parseAtomic($tokens);
+		}
+
+		return new Ast\Type\UnionTypeNode($types);
+	}
+
+
+	/** @phpstan-impure */
+	private function subParseUnion(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode
+	{
+		$types = [$type];
+
+		while ($tokens->tryConsumeTokenType(Lexer::TOKEN_UNION)) {
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+			$types[] = $this->parseAtomic($tokens);
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+		}
+
+		return new Ast\Type\UnionTypeNode($types);
+	}
+
+
+	/** @phpstan-impure */
+	private function parseIntersection(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode
+	{
+		$types = [$type];
+
+		while ($tokens->tryConsumeTokenType(Lexer::TOKEN_INTERSECTION)) {
+			$types[] = $this->parseAtomic($tokens);
+		}
+
+		return new Ast\Type\IntersectionTypeNode($types);
+	}
+
+
+	/** @phpstan-impure */
+	private function subParseIntersection(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode
+	{
+		$types = [$type];
+
+		while ($tokens->tryConsumeTokenType(Lexer::TOKEN_INTERSECTION)) {
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+			$types[] = $this->parseAtomic($tokens);
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+		}
+
+		return new Ast\Type\IntersectionTypeNode($types);
+	}
+
+
+	/** @phpstan-impure */
+	private function parseConditional(TokenIterator $tokens, Ast\Type\TypeNode $subjectType): Ast\Type\TypeNode
+	{
+		$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+
+		$negated = false;
+		if ($tokens->isCurrentTokenValue('not')) {
+			$negated = true;
+			$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+		}
+
+		$targetType = $this->parse($tokens);
+
+		$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+		$tokens->consumeTokenType(Lexer::TOKEN_NULLABLE);
+		$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+
+		$ifType = $this->parse($tokens);
+
+		$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+		$tokens->consumeTokenType(Lexer::TOKEN_COLON);
+		$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+
+		$elseType = $this->subParse($tokens);
+
+		return new Ast\Type\ConditionalTypeNode($subjectType, $targetType, $ifType, $elseType, $negated);
+	}
+
+	/** @phpstan-impure */
+	private function parseConditionalForParameter(TokenIterator $tokens, string $parameterName): Ast\Type\TypeNode
+	{
+		$tokens->consumeTokenType(Lexer::TOKEN_VARIABLE);
+		$tokens->consumeTokenValue(Lexer::TOKEN_IDENTIFIER, 'is');
+
+		$negated = false;
+		if ($tokens->isCurrentTokenValue('not')) {
+			$negated = true;
+			$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+		}
+
+		$targetType = $this->parse($tokens);
+
+		$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+		$tokens->consumeTokenType(Lexer::TOKEN_NULLABLE);
+		$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+
+		$ifType = $this->parse($tokens);
+
+		$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+		$tokens->consumeTokenType(Lexer::TOKEN_COLON);
+		$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+
+		$elseType = $this->subParse($tokens);
+
+		return new Ast\Type\ConditionalTypeForParameterNode($parameterName, $targetType, $ifType, $elseType, $negated);
+	}
+
+
+	/** @phpstan-impure */
+	private function parseNullable(TokenIterator $tokens): Ast\Type\TypeNode
+	{
+		$tokens->consumeTokenType(Lexer::TOKEN_NULLABLE);
+
+		$type = $this->parseAtomic($tokens);
+
+		return new Ast\Type\NullableTypeNode($type);
+	}
+
+	/** @phpstan-impure */
+	public function isHtml(TokenIterator $tokens): bool
+	{
+		$tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET);
+
+		if (!$tokens->isCurrentTokenType(Lexer::TOKEN_IDENTIFIER)) {
+			return false;
+		}
+
+		$htmlTagName = $tokens->currentTokenValue();
+
+		$tokens->next();
+
+		if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET)) {
+			return false;
+		}
+
+		$endTag = '</' . $htmlTagName . '>';
+		$endTagSearchOffset = - strlen($endTag);
+
+		while (!$tokens->isCurrentTokenType(Lexer::TOKEN_END)) {
+			if (
+				(
+					$tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)
+					&& strpos($tokens->currentTokenValue(), '/' . $htmlTagName . '>') !== false
+				)
+				|| substr_compare($tokens->currentTokenValue(), $endTag, $endTagSearchOffset) === 0
+			) {
+				return true;
+			}
+
+			$tokens->next();
+		}
+
+		return false;
+	}
+
+	/** @phpstan-impure */
+	public function parseGeneric(TokenIterator $tokens, Ast\Type\IdentifierTypeNode $baseType): Ast\Type\GenericTypeNode
+	{
+		$tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET);
+
+		$startLine = $baseType->getAttribute(Ast\Attribute::START_LINE);
+		$startIndex = $baseType->getAttribute(Ast\Attribute::START_INDEX);
+		$genericTypes = [];
+		$variances = [];
+
+		$isFirst = true;
+		while ($isFirst || $tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) {
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+
+			// trailing comma case
+			if (!$isFirst && $tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET)) {
+				break;
+			}
+			$isFirst = false;
+
+			[$genericTypes[], $variances[]] = $this->parseGenericTypeArgument($tokens);
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+		}
+
+		$type = new Ast\Type\GenericTypeNode($baseType, $genericTypes, $variances);
+		if ($startLine !== null && $startIndex !== null) {
+			$type = $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex);
+		}
+
+		$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET);
+
+		return $type;
+	}
+
+
+	/**
+	 * @phpstan-impure
+	 * @return array{Ast\Type\TypeNode, Ast\Type\GenericTypeNode::VARIANCE_*}
+	 */
+	public function parseGenericTypeArgument(TokenIterator $tokens): array
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+		if ($tokens->tryConsumeTokenType(Lexer::TOKEN_WILDCARD)) {
+			return [
+				$this->enrichWithAttributes($tokens, new Ast\Type\IdentifierTypeNode('mixed'), $startLine, $startIndex),
+				Ast\Type\GenericTypeNode::VARIANCE_BIVARIANT,
+			];
+		}
+
+		if ($tokens->tryConsumeTokenValue('contravariant')) {
+			$variance = Ast\Type\GenericTypeNode::VARIANCE_CONTRAVARIANT;
+		} elseif ($tokens->tryConsumeTokenValue('covariant')) {
+			$variance = Ast\Type\GenericTypeNode::VARIANCE_COVARIANT;
+		} else {
+			$variance = Ast\Type\GenericTypeNode::VARIANCE_INVARIANT;
+		}
+
+		$type = $this->parse($tokens);
+		return [$type, $variance];
+	}
+
+	/**
+	 * @throws ParserException
+	 * @param ?callable(TokenIterator): string $parseDescription
+	 */
+	public function parseTemplateTagValue(
+		TokenIterator $tokens,
+		?callable $parseDescription = null
+	): TemplateTagValueNode
+	{
+		$name = $tokens->currentTokenValue();
+		$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+
+		if ($tokens->tryConsumeTokenValue('of') || $tokens->tryConsumeTokenValue('as')) {
+			$bound = $this->parse($tokens);
+
+		} else {
+			$bound = null;
+		}
+
+		if ($tokens->tryConsumeTokenValue('=')) {
+			$default = $this->parse($tokens);
+		} else {
+			$default = null;
+		}
+
+		if ($parseDescription !== null) {
+			$description = $parseDescription($tokens);
+		} else {
+			$description = '';
+		}
+
+		if ($name === '') {
+			throw new LogicException('Template tag name cannot be empty.');
+		}
+
+		return new Ast\PhpDoc\TemplateTagValueNode($name, $bound, $description, $default);
+	}
+
+
+	/** @phpstan-impure */
+	private function parseCallable(TokenIterator $tokens, Ast\Type\IdentifierTypeNode $identifier, bool $hasTemplate): Ast\Type\TypeNode
+	{
+		$templates = $hasTemplate
+			? $this->parseCallableTemplates($tokens)
+			: [];
+
+		$tokens->consumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES);
+		$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+
+		$parameters = [];
+		if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PARENTHESES)) {
+			$parameters[] = $this->parseCallableParameter($tokens);
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+			while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) {
+				$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+				if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PARENTHESES)) {
+					break;
+				}
+				$parameters[] = $this->parseCallableParameter($tokens);
+				$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+			}
+		}
+
+		$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);
+		$tokens->consumeTokenType(Lexer::TOKEN_COLON);
+
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+		$returnType = $this->enrichWithAttributes($tokens, $this->parseCallableReturnType($tokens), $startLine, $startIndex);
+
+		return new Ast\Type\CallableTypeNode($identifier, $parameters, $returnType, $templates);
+	}
+
+
+	/**
+	 * @return Ast\PhpDoc\TemplateTagValueNode[]
+	 *
+	 * @phpstan-impure
+	 */
+	private function parseCallableTemplates(TokenIterator $tokens): array
+	{
+		$tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET);
+
+		$templates = [];
+
+		$isFirst = true;
+		while ($isFirst || $tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) {
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+
+			// trailing comma case
+			if (!$isFirst && $tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET)) {
+				break;
+			}
+			$isFirst = false;
+
+			$templates[] = $this->parseCallableTemplateArgument($tokens);
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+		}
+
+		$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET);
+
+		return $templates;
+	}
+
+
+	private function parseCallableTemplateArgument(TokenIterator $tokens): Ast\PhpDoc\TemplateTagValueNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+
+		return $this->enrichWithAttributes(
+			$tokens,
+			$this->parseTemplateTagValue($tokens),
+			$startLine,
+			$startIndex
+		);
+	}
+
+
+	/** @phpstan-impure */
+	private function parseCallableParameter(TokenIterator $tokens): Ast\Type\CallableTypeParameterNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+		$type = $this->parse($tokens);
+		$isReference = $tokens->tryConsumeTokenType(Lexer::TOKEN_REFERENCE);
+		$isVariadic = $tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC);
+
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_VARIABLE)) {
+			$parameterName = $tokens->currentTokenValue();
+			$tokens->consumeTokenType(Lexer::TOKEN_VARIABLE);
+
+		} else {
+			$parameterName = '';
+		}
+
+		$isOptional = $tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL);
+		return $this->enrichWithAttributes(
+			$tokens,
+			new Ast\Type\CallableTypeParameterNode($type, $isReference, $isVariadic, $parameterName, $isOptional),
+			$startLine,
+			$startIndex
+		);
+	}
+
+
+	/** @phpstan-impure */
+	private function parseCallableReturnType(TokenIterator $tokens): Ast\Type\TypeNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_NULLABLE)) {
+			return $this->parseNullable($tokens);
+
+		} elseif ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
+			$type = $this->subParse($tokens);
+			$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);
+			if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+				$type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
+			}
+
+			return $type;
+		} elseif ($tokens->tryConsumeTokenType(Lexer::TOKEN_THIS_VARIABLE)) {
+			$type = new Ast\Type\ThisTypeNode();
+			if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+				$type = $this->tryParseArrayOrOffsetAccess($tokens, $this->enrichWithAttributes(
+					$tokens,
+					$type,
+					$startLine,
+					$startIndex
+				));
+			}
+
+			return $type;
+		} else {
+			$currentTokenValue = $tokens->currentTokenValue();
+			$tokens->pushSavePoint(); // because of ConstFetchNode
+			if ($tokens->tryConsumeTokenType(Lexer::TOKEN_IDENTIFIER)) {
+				$type = new Ast\Type\IdentifierTypeNode($currentTokenValue);
+
+				if (!$tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_COLON)) {
+					if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)) {
+						$type = $this->parseGeneric(
+							$tokens,
+							$this->enrichWithAttributes(
+								$tokens,
+								$type,
+								$startLine,
+								$startIndex
+							)
+						);
+						if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+							$type = $this->tryParseArrayOrOffsetAccess($tokens, $this->enrichWithAttributes(
+								$tokens,
+								$type,
+								$startLine,
+								$startIndex
+							));
+						}
+
+					} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+						$type = $this->tryParseArrayOrOffsetAccess($tokens, $this->enrichWithAttributes(
+							$tokens,
+							$type,
+							$startLine,
+							$startIndex
+						));
+
+					} elseif (in_array($type->name, ['array', 'list', 'object'], true) && $tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET) && !$tokens->isPrecededByHorizontalWhitespace()) {
+						if ($type->name === 'object') {
+							$type = $this->parseObjectShape($tokens);
+						} else {
+							$type = $this->parseArrayShape($tokens, $this->enrichWithAttributes(
+								$tokens,
+								$type,
+								$startLine,
+								$startIndex
+							), $type->name);
+						}
+
+						if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+							$type = $this->tryParseArrayOrOffsetAccess($tokens, $this->enrichWithAttributes(
+								$tokens,
+								$type,
+								$startLine,
+								$startIndex
+							));
+						}
+					}
+
+					return $type;
+				} else {
+					$tokens->rollback(); // because of ConstFetchNode
+				}
+			} else {
+				$tokens->dropSavePoint(); // because of ConstFetchNode
+			}
+		}
+
+		$currentTokenValue = $tokens->currentTokenValue();
+		$currentTokenType = $tokens->currentTokenType();
+		$currentTokenOffset = $tokens->currentTokenOffset();
+		$currentTokenLine = $tokens->currentTokenLine();
+
+		if ($this->constExprParser === null) {
+			throw new ParserException(
+				$currentTokenValue,
+				$currentTokenType,
+				$currentTokenOffset,
+				Lexer::TOKEN_IDENTIFIER,
+				null,
+				$currentTokenLine
+			);
+		}
+
+		try {
+			$constExpr = $this->constExprParser->parse($tokens, true);
+			if ($constExpr instanceof Ast\ConstExpr\ConstExprArrayNode) {
+				throw new ParserException(
+					$currentTokenValue,
+					$currentTokenType,
+					$currentTokenOffset,
+					Lexer::TOKEN_IDENTIFIER,
+					null,
+					$currentTokenLine
+				);
+			}
+
+			$type = $this->enrichWithAttributes(
+				$tokens,
+				new Ast\Type\ConstTypeNode($constExpr),
+				$startLine,
+				$startIndex
+			);
+			if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+				$type = $this->tryParseArrayOrOffsetAccess($tokens, $type);
+			}
+
+			return $type;
+		} catch (LogicException $e) {
+			throw new ParserException(
+				$currentTokenValue,
+				$currentTokenType,
+				$currentTokenOffset,
+				Lexer::TOKEN_IDENTIFIER,
+				null,
+				$currentTokenLine
+			);
+		}
+	}
+
+
+	/** @phpstan-impure */
+	private function tryParseCallable(TokenIterator $tokens, Ast\Type\IdentifierTypeNode $identifier, bool $hasTemplate): Ast\Type\TypeNode
+	{
+		try {
+			$tokens->pushSavePoint();
+			$type = $this->parseCallable($tokens, $identifier, $hasTemplate);
+			$tokens->dropSavePoint();
+
+		} catch (ParserException $e) {
+			$tokens->rollback();
+			$type = $identifier;
+		}
+
+		return $type;
+	}
+
+
+	/** @phpstan-impure */
+	private function tryParseArrayOrOffsetAccess(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode
+	{
+		$startLine = $type->getAttribute(Ast\Attribute::START_LINE);
+		$startIndex = $type->getAttribute(Ast\Attribute::START_INDEX);
+		try {
+			while ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
+				$tokens->pushSavePoint();
+
+				$canBeOffsetAccessType = !$tokens->isPrecededByHorizontalWhitespace();
+				$tokens->consumeTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET);
+
+				if ($canBeOffsetAccessType && !$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_SQUARE_BRACKET)) {
+					$offset = $this->parse($tokens);
+					$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_SQUARE_BRACKET);
+					$tokens->dropSavePoint();
+					$type = new Ast\Type\OffsetAccessTypeNode($type, $offset);
+
+					if ($startLine !== null && $startIndex !== null) {
+						$type = $this->enrichWithAttributes(
+							$tokens,
+							$type,
+							$startLine,
+							$startIndex
+						);
+					}
+				} else {
+					$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_SQUARE_BRACKET);
+					$tokens->dropSavePoint();
+					$type = new Ast\Type\ArrayTypeNode($type);
+
+					if ($startLine !== null && $startIndex !== null) {
+						$type = $this->enrichWithAttributes(
+							$tokens,
+							$type,
+							$startLine,
+							$startIndex
+						);
+					}
+				}
+			}
+
+		} catch (ParserException $e) {
+			$tokens->rollback();
+		}
+
+		return $type;
+	}
+
+
+	/**
+	 * @phpstan-impure
+	 * @param Ast\Type\ArrayShapeNode::KIND_* $kind
+	 */
+	private function parseArrayShape(TokenIterator $tokens, Ast\Type\TypeNode $type, string $kind): Ast\Type\ArrayShapeNode
+	{
+		$tokens->consumeTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET);
+
+		$items = [];
+		$sealed = true;
+
+		do {
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+
+			if ($tokens->tryConsumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET)) {
+				return new Ast\Type\ArrayShapeNode($items, true, $kind);
+			}
+
+			if ($tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC)) {
+				$sealed = false;
+				$tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA);
+				break;
+			}
+
+			$items[] = $this->parseArrayShapeItem($tokens);
+
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+		} while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA));
+
+		$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+		$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET);
+
+		return new Ast\Type\ArrayShapeNode($items, $sealed, $kind);
+	}
+
+
+	/** @phpstan-impure */
+	private function parseArrayShapeItem(TokenIterator $tokens): Ast\Type\ArrayShapeItemNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+		try {
+			$tokens->pushSavePoint();
+			$key = $this->parseArrayShapeKey($tokens);
+			$optional = $tokens->tryConsumeTokenType(Lexer::TOKEN_NULLABLE);
+			$tokens->consumeTokenType(Lexer::TOKEN_COLON);
+			$value = $this->parse($tokens);
+			$tokens->dropSavePoint();
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Ast\Type\ArrayShapeItemNode($key, $optional, $value),
+				$startLine,
+				$startIndex
+			);
+		} catch (ParserException $e) {
+			$tokens->rollback();
+			$value = $this->parse($tokens);
+
+			return $this->enrichWithAttributes(
+				$tokens,
+				new Ast\Type\ArrayShapeItemNode(null, false, $value),
+				$startLine,
+				$startIndex
+			);
+		}
+	}
+
+	/**
+	 * @phpstan-impure
+	 * @return Ast\ConstExpr\ConstExprIntegerNode|Ast\ConstExpr\ConstExprStringNode|Ast\Type\IdentifierTypeNode
+	 */
+	private function parseArrayShapeKey(TokenIterator $tokens)
+	{
+		$startIndex = $tokens->currentTokenIndex();
+		$startLine = $tokens->currentTokenLine();
+
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_INTEGER)) {
+			$key = new Ast\ConstExpr\ConstExprIntegerNode(str_replace('_', '', $tokens->currentTokenValue()));
+			$tokens->next();
+
+		} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_SINGLE_QUOTED_STRING)) {
+			if ($this->quoteAwareConstExprString) {
+				$key = new Ast\ConstExpr\QuoteAwareConstExprStringNode(StringUnescaper::unescapeString($tokens->currentTokenValue()), Ast\ConstExpr\QuoteAwareConstExprStringNode::SINGLE_QUOTED);
+			} else {
+				$key = new Ast\ConstExpr\ConstExprStringNode(trim($tokens->currentTokenValue(), "'"));
+			}
+			$tokens->next();
+
+		} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_QUOTED_STRING)) {
+			if ($this->quoteAwareConstExprString) {
+				$key = new Ast\ConstExpr\QuoteAwareConstExprStringNode(StringUnescaper::unescapeString($tokens->currentTokenValue()), Ast\ConstExpr\QuoteAwareConstExprStringNode::DOUBLE_QUOTED);
+			} else {
+				$key = new Ast\ConstExpr\ConstExprStringNode(trim($tokens->currentTokenValue(), '"'));
+			}
+
+			$tokens->next();
+
+		} else {
+			$key = new Ast\Type\IdentifierTypeNode($tokens->currentTokenValue());
+			$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+		}
+
+		return $this->enrichWithAttributes(
+			$tokens,
+			$key,
+			$startLine,
+			$startIndex
+		);
+	}
+
+	/**
+	 * @phpstan-impure
+	 */
+	private function parseObjectShape(TokenIterator $tokens): Ast\Type\ObjectShapeNode
+	{
+		$tokens->consumeTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET);
+
+		$items = [];
+
+		do {
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+
+			if ($tokens->tryConsumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET)) {
+				return new Ast\Type\ObjectShapeNode($items);
+			}
+
+			$items[] = $this->parseObjectShapeItem($tokens);
+
+			$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+		} while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA));
+
+		$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
+		$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET);
+
+		return new Ast\Type\ObjectShapeNode($items);
+	}
+
+	/** @phpstan-impure */
+	private function parseObjectShapeItem(TokenIterator $tokens): Ast\Type\ObjectShapeItemNode
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+
+		$key = $this->parseObjectShapeKey($tokens);
+		$optional = $tokens->tryConsumeTokenType(Lexer::TOKEN_NULLABLE);
+		$tokens->consumeTokenType(Lexer::TOKEN_COLON);
+		$value = $this->parse($tokens);
+
+		return $this->enrichWithAttributes($tokens, new Ast\Type\ObjectShapeItemNode($key, $optional, $value), $startLine, $startIndex);
+	}
+
+	/**
+	 * @phpstan-impure
+	 * @return Ast\ConstExpr\ConstExprStringNode|Ast\Type\IdentifierTypeNode
+	 */
+	private function parseObjectShapeKey(TokenIterator $tokens)
+	{
+		$startLine = $tokens->currentTokenLine();
+		$startIndex = $tokens->currentTokenIndex();
+
+		if ($tokens->isCurrentTokenType(Lexer::TOKEN_SINGLE_QUOTED_STRING)) {
+			if ($this->quoteAwareConstExprString) {
+				$key = new Ast\ConstExpr\QuoteAwareConstExprStringNode(StringUnescaper::unescapeString($tokens->currentTokenValue()), Ast\ConstExpr\QuoteAwareConstExprStringNode::SINGLE_QUOTED);
+			} else {
+				$key = new Ast\ConstExpr\ConstExprStringNode(trim($tokens->currentTokenValue(), "'"));
+			}
+			$tokens->next();
+
+		} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_QUOTED_STRING)) {
+			if ($this->quoteAwareConstExprString) {
+				$key = new Ast\ConstExpr\QuoteAwareConstExprStringNode(StringUnescaper::unescapeString($tokens->currentTokenValue()), Ast\ConstExpr\QuoteAwareConstExprStringNode::DOUBLE_QUOTED);
+			} else {
+				$key = new Ast\ConstExpr\ConstExprStringNode(trim($tokens->currentTokenValue(), '"'));
+			}
+			$tokens->next();
+
+		} else {
+			$key = new Ast\Type\IdentifierTypeNode($tokens->currentTokenValue());
+			$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
+		}
+
+		return $this->enrichWithAttributes($tokens, $key, $startLine, $startIndex);
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Printer/DiffElem.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Printer/DiffElem.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Printer/DiffElem.php	(revision 8435)
@@ -0,0 +1,44 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Printer;
+
+/**
+ * Inspired by https://github.com/nikic/PHP-Parser/tree/36a6dcd04e7b0285e8f0868f44bd4927802f7df1
+ *
+ * Copyright (c) 2011, Nikita Popov
+ * All rights reserved.
+ *
+ * Implements the Myers diff algorithm.
+ *
+ * @internal
+ */
+class DiffElem
+{
+
+	public const TYPE_KEEP = 0;
+	public const TYPE_REMOVE = 1;
+	public const TYPE_ADD = 2;
+	public const TYPE_REPLACE = 3;
+
+	/** @var self::TYPE_* */
+	public $type;
+
+	/** @var mixed Is null for add operations */
+	public $old;
+
+	/** @var mixed Is null for remove operations */
+	public $new;
+
+	/**
+	 * @param self::TYPE_* $type
+	 * @param mixed $old Is null for add operations
+	 * @param mixed $new Is null for remove operations
+	 */
+	public function __construct(int $type, $old, $new)
+	{
+		$this->type = $type;
+		$this->old = $old;
+		$this->new = $new;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Printer/Differ.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Printer/Differ.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Printer/Differ.php	(revision 8435)
@@ -0,0 +1,196 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Printer;
+
+use Exception;
+use function array_reverse;
+use function count;
+
+/**
+ * Inspired by https://github.com/nikic/PHP-Parser/tree/36a6dcd04e7b0285e8f0868f44bd4927802f7df1
+ *
+ * Copyright (c) 2011, Nikita Popov
+ * All rights reserved.
+ *
+ * Implements the Myers diff algorithm.
+ *
+ * Myers, Eugene W. "An O (ND) difference algorithm and its variations."
+ * Algorithmica 1.1 (1986): 251-266.
+ *
+ * @template T
+ * @internal
+ */
+class Differ
+{
+
+	/** @var callable(T, T): bool */
+	private $isEqual;
+
+	/**
+	 * Create differ over the given equality relation.
+	 *
+	 * @param callable(T, T): bool $isEqual Equality relation
+	 */
+	public function __construct(callable $isEqual)
+	{
+		$this->isEqual = $isEqual;
+	}
+
+	/**
+	 * Calculate diff (edit script) from $old to $new.
+	 *
+	 * @param T[] $old Original array
+	 * @param T[] $new New array
+	 *
+	 * @return DiffElem[] Diff (edit script)
+	 */
+	public function diff(array $old, array $new): array
+	{
+		[$trace, $x, $y] = $this->calculateTrace($old, $new);
+		return $this->extractDiff($trace, $x, $y, $old, $new);
+	}
+
+	/**
+	 * Calculate diff, including "replace" operations.
+	 *
+	 * If a sequence of remove operations is followed by the same number of add operations, these
+	 * will be coalesced into replace operations.
+	 *
+	 * @param T[] $old Original array
+	 * @param T[] $new New array
+	 *
+	 * @return DiffElem[] Diff (edit script), including replace operations
+	 */
+	public function diffWithReplacements(array $old, array $new): array
+	{
+		return $this->coalesceReplacements($this->diff($old, $new));
+	}
+
+	/**
+	 * @param T[] $old
+	 * @param T[] $new
+	 * @return array{array<int, array<int, int>>, int, int}
+	 */
+	private function calculateTrace(array $old, array $new): array
+	{
+		$n = count($old);
+		$m = count($new);
+		$max = $n + $m;
+		$v = [1 => 0];
+		$trace = [];
+		for ($d = 0; $d <= $max; $d++) {
+			$trace[] = $v;
+			for ($k = -$d; $k <= $d; $k += 2) {
+				if ($k === -$d || ($k !== $d && $v[$k - 1] < $v[$k + 1])) {
+					$x = $v[$k + 1];
+				} else {
+					$x = $v[$k - 1] + 1;
+				}
+
+				$y = $x - $k;
+				while ($x < $n && $y < $m && ($this->isEqual)($old[$x], $new[$y])) {
+					$x++;
+					$y++;
+				}
+
+				$v[$k] = $x;
+				if ($x >= $n && $y >= $m) {
+					return [$trace, $x, $y];
+				}
+			}
+		}
+		throw new Exception('Should not happen');
+	}
+
+	/**
+	 * @param array<int, array<int, int>> $trace
+	 * @param T[] $old
+	 * @param T[] $new
+	 * @return DiffElem[]
+	 */
+	private function extractDiff(array $trace, int $x, int $y, array $old, array $new): array
+	{
+		$result = [];
+		for ($d = count($trace) - 1; $d >= 0; $d--) {
+			$v = $trace[$d];
+			$k = $x - $y;
+
+			if ($k === -$d || ($k !== $d && $v[$k - 1] < $v[$k + 1])) {
+				$prevK = $k + 1;
+			} else {
+				$prevK = $k - 1;
+			}
+
+			$prevX = $v[$prevK];
+			$prevY = $prevX - $prevK;
+
+			while ($x > $prevX && $y > $prevY) {
+				$result[] = new DiffElem(DiffElem::TYPE_KEEP, $old[$x - 1], $new[$y - 1]);
+				$x--;
+				$y--;
+			}
+
+			if ($d === 0) {
+				break;
+			}
+
+			while ($x > $prevX) {
+				$result[] = new DiffElem(DiffElem::TYPE_REMOVE, $old[$x - 1], null);
+				$x--;
+			}
+
+			while ($y > $prevY) {
+				$result[] = new DiffElem(DiffElem::TYPE_ADD, null, $new[$y - 1]);
+				$y--;
+			}
+		}
+		return array_reverse($result);
+	}
+
+	/**
+	 * Coalesce equal-length sequences of remove+add into a replace operation.
+	 *
+	 * @param DiffElem[] $diff
+	 * @return DiffElem[]
+	 */
+	private function coalesceReplacements(array $diff): array
+	{
+		$newDiff = [];
+		$c = count($diff);
+		for ($i = 0; $i < $c; $i++) {
+			$diffType = $diff[$i]->type;
+			if ($diffType !== DiffElem::TYPE_REMOVE) {
+				$newDiff[] = $diff[$i];
+				continue;
+			}
+
+			$j = $i;
+			while ($j < $c && $diff[$j]->type === DiffElem::TYPE_REMOVE) {
+				$j++;
+			}
+
+			$k = $j;
+			while ($k < $c && $diff[$k]->type === DiffElem::TYPE_ADD) {
+				$k++;
+			}
+
+			if ($j - $i === $k - $j) {
+				$len = $j - $i;
+				for ($n = 0; $n < $len; $n++) {
+					$newDiff[] = new DiffElem(
+						DiffElem::TYPE_REPLACE,
+						$diff[$i + $n]->old,
+						$diff[$j + $n]->new
+					);
+				}
+			} else {
+				for (; $i < $k; $i++) {
+					$newDiff[] = $diff[$i];
+				}
+			}
+			$i = $k - 1;
+		}
+		return $newDiff;
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Printer/Printer.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Printer/Printer.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/phpstan/phpdoc-parser/src/Printer/Printer.php	(revision 8435)
@@ -0,0 +1,858 @@
+<?php declare(strict_types = 1);
+
+namespace PHPStan\PhpDocParser\Printer;
+
+use LogicException;
+use PHPStan\PhpDocParser\Ast\Attribute;
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprArrayNode;
+use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprNode;
+use PHPStan\PhpDocParser\Ast\Node;
+use PHPStan\PhpDocParser\Ast\PhpDoc\AssertTagMethodValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\AssertTagPropertyValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\AssertTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine\DoctrineAnnotation;
+use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine\DoctrineArgument;
+use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine\DoctrineArray;
+use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine\DoctrineArrayItem;
+use PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine\DoctrineTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\ExtendsTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\ImplementsTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\MethodTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\MethodTagValueParameterNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\MixinTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\ParamClosureThisTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\ParamImmediatelyInvokedCallableTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\ParamLaterInvokedCallableTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\ParamOutTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocChildNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTextNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\PropertyTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\RequireExtendsTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\RequireImplementsTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\SelfOutTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\TemplateTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\ThrowsTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\TypeAliasImportTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\TypeAliasTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\UsesTagValueNode;
+use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode;
+use PHPStan\PhpDocParser\Ast\Type\ArrayShapeItemNode;
+use PHPStan\PhpDocParser\Ast\Type\ArrayShapeNode;
+use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\CallableTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\CallableTypeParameterNode;
+use PHPStan\PhpDocParser\Ast\Type\ConditionalTypeForParameterNode;
+use PHPStan\PhpDocParser\Ast\Type\ConditionalTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\ConstTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\IntersectionTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\InvalidTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\NullableTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\ObjectShapeItemNode;
+use PHPStan\PhpDocParser\Ast\Type\ObjectShapeNode;
+use PHPStan\PhpDocParser\Ast\Type\OffsetAccessTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\ThisTypeNode;
+use PHPStan\PhpDocParser\Ast\Type\TypeNode;
+use PHPStan\PhpDocParser\Ast\Type\UnionTypeNode;
+use PHPStan\PhpDocParser\Lexer\Lexer;
+use PHPStan\PhpDocParser\Parser\TokenIterator;
+use function array_keys;
+use function array_map;
+use function count;
+use function get_class;
+use function get_object_vars;
+use function implode;
+use function in_array;
+use function is_array;
+use function preg_match_all;
+use function sprintf;
+use function strlen;
+use function strpos;
+use function trim;
+use const PREG_SET_ORDER;
+
+/**
+ * Inspired by https://github.com/nikic/PHP-Parser/tree/36a6dcd04e7b0285e8f0868f44bd4927802f7df1
+ *
+ * Copyright (c) 2011, Nikita Popov
+ * All rights reserved.
+ */
+final class Printer
+{
+
+	/** @var Differ<Node> */
+	private $differ;
+
+	/**
+	 * Map From "{$class}->{$subNode}" to string that should be inserted
+	 * between elements of this list subnode
+	 *
+	 * @var array<string, string>
+	 */
+	private $listInsertionMap = [
+		PhpDocNode::class . '->children' => "\n * ",
+		UnionTypeNode::class . '->types' => '|',
+		IntersectionTypeNode::class . '->types' => '&',
+		ArrayShapeNode::class . '->items' => ', ',
+		ObjectShapeNode::class . '->items' => ', ',
+		CallableTypeNode::class . '->parameters' => ', ',
+		CallableTypeNode::class . '->templateTypes' => ', ',
+		GenericTypeNode::class . '->genericTypes' => ', ',
+		ConstExprArrayNode::class . '->items' => ', ',
+		MethodTagValueNode::class . '->parameters' => ', ',
+		DoctrineArray::class . '->items' => ', ',
+		DoctrineAnnotation::class . '->arguments' => ', ',
+	];
+
+	/**
+	 * [$find, $extraLeft, $extraRight]
+	 *
+	 * @var array<string, array{string|null, string, string}>
+	 */
+	private $emptyListInsertionMap = [
+		CallableTypeNode::class . '->parameters' => ['(', '', ''],
+		ArrayShapeNode::class . '->items' => ['{', '', ''],
+		ObjectShapeNode::class . '->items' => ['{', '', ''],
+		DoctrineArray::class . '->items' => ['{', '', ''],
+		DoctrineAnnotation::class . '->arguments' => ['(', '', ''],
+	];
+
+	/** @var array<string, list<class-string<TypeNode>>> */
+	private $parenthesesMap = [
+		CallableTypeNode::class . '->returnType' => [
+			CallableTypeNode::class,
+			UnionTypeNode::class,
+			IntersectionTypeNode::class,
+		],
+		ArrayTypeNode::class . '->type' => [
+			CallableTypeNode::class,
+			UnionTypeNode::class,
+			IntersectionTypeNode::class,
+			ConstTypeNode::class,
+			NullableTypeNode::class,
+		],
+		OffsetAccessTypeNode::class . '->type' => [
+			CallableTypeNode::class,
+			UnionTypeNode::class,
+			IntersectionTypeNode::class,
+			NullableTypeNode::class,
+		],
+	];
+
+	/** @var array<string, list<class-string<TypeNode>>> */
+	private $parenthesesListMap = [
+		IntersectionTypeNode::class . '->types' => [
+			IntersectionTypeNode::class,
+			UnionTypeNode::class,
+			NullableTypeNode::class,
+		],
+		UnionTypeNode::class . '->types' => [
+			IntersectionTypeNode::class,
+			UnionTypeNode::class,
+			NullableTypeNode::class,
+		],
+	];
+
+	public function printFormatPreserving(PhpDocNode $node, PhpDocNode $originalNode, TokenIterator $originalTokens): string
+	{
+		$this->differ = new Differ(static function ($a, $b) {
+			if ($a instanceof Node && $b instanceof Node) {
+				return $a === $b->getAttribute(Attribute::ORIGINAL_NODE);
+			}
+
+			return false;
+		});
+
+		$tokenIndex = 0;
+		$result = $this->printArrayFormatPreserving(
+			$node->children,
+			$originalNode->children,
+			$originalTokens,
+			$tokenIndex,
+			PhpDocNode::class,
+			'children'
+		);
+		if ($result !== null) {
+			return $result . $originalTokens->getContentBetween($tokenIndex, $originalTokens->getTokenCount());
+		}
+
+		return $this->print($node);
+	}
+
+	public function print(Node $node): string
+	{
+		if ($node instanceof PhpDocNode) {
+			return "/**\n *" . implode("\n *", array_map(
+				function (PhpDocChildNode $child): string {
+					$s = $this->print($child);
+					return $s === '' ? '' : ' ' . $s;
+				},
+				$node->children
+			)) . "\n */";
+		}
+		if ($node instanceof PhpDocTextNode) {
+			return $node->text;
+		}
+		if ($node instanceof PhpDocTagNode) {
+			if ($node->value instanceof DoctrineTagValueNode) {
+				return $this->print($node->value);
+			}
+
+			return trim(sprintf('%s %s', $node->name, $this->print($node->value)));
+		}
+		if ($node instanceof PhpDocTagValueNode) {
+			return $this->printTagValue($node);
+		}
+		if ($node instanceof TypeNode) {
+			return $this->printType($node);
+		}
+		if ($node instanceof ConstExprNode) {
+			return $this->printConstExpr($node);
+		}
+		if ($node instanceof MethodTagValueParameterNode) {
+			$type = $node->type !== null ? $this->print($node->type) . ' ' : '';
+			$isReference = $node->isReference ? '&' : '';
+			$isVariadic = $node->isVariadic ? '...' : '';
+			$default = $node->defaultValue !== null ? ' = ' . $this->print($node->defaultValue) : '';
+			return "{$type}{$isReference}{$isVariadic}{$node->parameterName}{$default}";
+		}
+		if ($node instanceof CallableTypeParameterNode) {
+			$type = $this->print($node->type) . ' ';
+			$isReference = $node->isReference ? '&' : '';
+			$isVariadic = $node->isVariadic ? '...' : '';
+			$isOptional = $node->isOptional ? '=' : '';
+			return trim("{$type}{$isReference}{$isVariadic}{$node->parameterName}") . $isOptional;
+		}
+		if ($node instanceof DoctrineAnnotation) {
+			return (string) $node;
+		}
+		if ($node instanceof DoctrineArgument) {
+			return (string) $node;
+		}
+		if ($node instanceof DoctrineArray) {
+			return (string) $node;
+		}
+		if ($node instanceof DoctrineArrayItem) {
+			return (string) $node;
+		}
+
+		throw new LogicException(sprintf('Unknown node type %s', get_class($node)));
+	}
+
+	private function printTagValue(PhpDocTagValueNode $node): string
+	{
+		// only nodes that contain another node are handled here
+		// the rest falls back on (string) $node
+
+		if ($node instanceof AssertTagMethodValueNode) {
+			$isNegated = $node->isNegated ? '!' : '';
+			$isEquality = $node->isEquality ? '=' : '';
+			$type = $this->printType($node->type);
+			return trim("{$isNegated}{$isEquality}{$type} {$node->parameter}->{$node->method}() {$node->description}");
+		}
+		if ($node instanceof AssertTagPropertyValueNode) {
+			$isNegated = $node->isNegated ? '!' : '';
+			$isEquality = $node->isEquality ? '=' : '';
+			$type = $this->printType($node->type);
+			return trim("{$isNegated}{$isEquality}{$type} {$node->parameter}->{$node->property} {$node->description}");
+		}
+		if ($node instanceof AssertTagValueNode) {
+			$isNegated = $node->isNegated ? '!' : '';
+			$isEquality = $node->isEquality ? '=' : '';
+			$type = $this->printType($node->type);
+			return trim("{$isNegated}{$isEquality}{$type} {$node->parameter} {$node->description}");
+		}
+		if ($node instanceof ExtendsTagValueNode || $node instanceof ImplementsTagValueNode) {
+			$type = $this->printType($node->type);
+			return trim("{$type} {$node->description}");
+		}
+		if ($node instanceof MethodTagValueNode) {
+			$static = $node->isStatic ? 'static ' : '';
+			$returnType = $node->returnType !== null ? $this->printType($node->returnType) . ' ' : '';
+			$parameters = implode(', ', array_map(function (MethodTagValueParameterNode $parameter): string {
+				return $this->print($parameter);
+			}, $node->parameters));
+			$description = $node->description !== '' ? " {$node->description}" : '';
+			$templateTypes = count($node->templateTypes) > 0 ? '<' . implode(', ', array_map(function (TemplateTagValueNode $templateTag): string {
+				return $this->print($templateTag);
+			}, $node->templateTypes)) . '>' : '';
+			return "{$static}{$returnType}{$node->methodName}{$templateTypes}({$parameters}){$description}";
+		}
+		if ($node instanceof MixinTagValueNode) {
+			$type = $this->printType($node->type);
+			return trim("{$type} {$node->description}");
+		}
+		if ($node instanceof RequireExtendsTagValueNode) {
+			$type = $this->printType($node->type);
+			return trim("{$type} {$node->description}");
+		}
+		if ($node instanceof RequireImplementsTagValueNode) {
+			$type = $this->printType($node->type);
+			return trim("{$type} {$node->description}");
+		}
+		if ($node instanceof ParamOutTagValueNode) {
+			$type = $this->printType($node->type);
+			return trim("{$type} {$node->parameterName} {$node->description}");
+		}
+		if ($node instanceof ParamTagValueNode) {
+			$reference = $node->isReference ? '&' : '';
+			$variadic = $node->isVariadic ? '...' : '';
+			$type = $this->printType($node->type);
+			return trim("{$type} {$reference}{$variadic}{$node->parameterName} {$node->description}");
+		}
+		if ($node instanceof ParamImmediatelyInvokedCallableTagValueNode) {
+			return trim("{$node->parameterName} {$node->description}");
+		}
+		if ($node instanceof ParamLaterInvokedCallableTagValueNode) {
+			return trim("{$node->parameterName} {$node->description}");
+		}
+		if ($node instanceof ParamClosureThisTagValueNode) {
+			return trim("{$node->type} {$node->parameterName} {$node->description}");
+		}
+		if ($node instanceof PropertyTagValueNode) {
+			$type = $this->printType($node->type);
+			return trim("{$type} {$node->propertyName} {$node->description}");
+		}
+		if ($node instanceof ReturnTagValueNode) {
+			$type = $this->printType($node->type);
+			return trim("{$type} {$node->description}");
+		}
+		if ($node instanceof SelfOutTagValueNode) {
+			$type = $this->printType($node->type);
+			return trim($type . ' ' . $node->description);
+		}
+		if ($node instanceof TemplateTagValueNode) {
+			$bound = $node->bound !== null ? ' of ' . $this->printType($node->bound) : '';
+			$default = $node->default !== null ? ' = ' . $this->printType($node->default) : '';
+			return trim("{$node->name}{$bound}{$default} {$node->description}");
+		}
+		if ($node instanceof ThrowsTagValueNode) {
+			$type = $this->printType($node->type);
+			return trim("{$type} {$node->description}");
+		}
+		if ($node instanceof TypeAliasImportTagValueNode) {
+			return trim(
+				"{$node->importedAlias} from " . $this->printType($node->importedFrom)
+				. ($node->importedAs !== null ? " as {$node->importedAs}" : '')
+			);
+		}
+		if ($node instanceof TypeAliasTagValueNode) {
+			$type = $this->printType($node->type);
+			return trim("{$node->alias} {$type}");
+		}
+		if ($node instanceof UsesTagValueNode) {
+			$type = $this->printType($node->type);
+			return trim("{$type} {$node->description}");
+		}
+		if ($node instanceof VarTagValueNode) {
+			$type = $this->printType($node->type);
+			return trim("{$type} " . trim("{$node->variableName} {$node->description}"));
+		}
+
+		return (string) $node;
+	}
+
+	private function printType(TypeNode $node): string
+	{
+		if ($node instanceof ArrayShapeNode) {
+			$items = array_map(function (ArrayShapeItemNode $item): string {
+				return $this->printType($item);
+			}, $node->items);
+
+			if (! $node->sealed) {
+				$items[] = '...';
+			}
+
+			return $node->kind . '{' . implode(', ', $items) . '}';
+		}
+		if ($node instanceof ArrayShapeItemNode) {
+			if ($node->keyName !== null) {
+				return sprintf(
+					'%s%s: %s',
+					$this->print($node->keyName),
+					$node->optional ? '?' : '',
+					$this->printType($node->valueType)
+				);
+			}
+
+			return $this->printType($node->valueType);
+		}
+		if ($node instanceof ArrayTypeNode) {
+			return $this->printOffsetAccessType($node->type) . '[]';
+		}
+		if ($node instanceof CallableTypeNode) {
+			if ($node->returnType instanceof CallableTypeNode || $node->returnType instanceof UnionTypeNode || $node->returnType instanceof IntersectionTypeNode) {
+				$returnType = $this->wrapInParentheses($node->returnType);
+			} else {
+				$returnType = $this->printType($node->returnType);
+			}
+			$template = $node->templateTypes !== []
+				? '<' . implode(', ', array_map(function (TemplateTagValueNode $templateNode): string {
+					return $this->print($templateNode);
+				}, $node->templateTypes)) . '>'
+				: '';
+			$parameters = implode(', ', array_map(function (CallableTypeParameterNode $parameterNode): string {
+				return $this->print($parameterNode);
+			}, $node->parameters));
+			return "{$node->identifier}{$template}({$parameters}): {$returnType}";
+		}
+		if ($node instanceof ConditionalTypeForParameterNode) {
+			return sprintf(
+				'(%s %s %s ? %s : %s)',
+				$node->parameterName,
+				$node->negated ? 'is not' : 'is',
+				$this->printType($node->targetType),
+				$this->printType($node->if),
+				$this->printType($node->else)
+			);
+		}
+		if ($node instanceof ConditionalTypeNode) {
+			return sprintf(
+				'(%s %s %s ? %s : %s)',
+				$this->printType($node->subjectType),
+				$node->negated ? 'is not' : 'is',
+				$this->printType($node->targetType),
+				$this->printType($node->if),
+				$this->printType($node->else)
+			);
+		}
+		if ($node instanceof ConstTypeNode) {
+			return $this->printConstExpr($node->constExpr);
+		}
+		if ($node instanceof GenericTypeNode) {
+			$genericTypes = [];
+
+			foreach ($node->genericTypes as $index => $type) {
+				$variance = $node->variances[$index] ?? GenericTypeNode::VARIANCE_INVARIANT;
+				if ($variance === GenericTypeNode::VARIANCE_INVARIANT) {
+					$genericTypes[] = $this->printType($type);
+				} elseif ($variance === GenericTypeNode::VARIANCE_BIVARIANT) {
+					$genericTypes[] = '*';
+				} else {
+					$genericTypes[] = sprintf('%s %s', $variance, $this->print($type));
+				}
+			}
+
+			return $node->type . '<' . implode(', ', $genericTypes) . '>';
+		}
+		if ($node instanceof IdentifierTypeNode) {
+			return $node->name;
+		}
+		if ($node instanceof IntersectionTypeNode || $node instanceof UnionTypeNode) {
+			$items = [];
+			foreach ($node->types as $type) {
+				if (
+					$type instanceof IntersectionTypeNode
+					|| $type instanceof UnionTypeNode
+					|| $type instanceof NullableTypeNode
+				) {
+					$items[] = $this->wrapInParentheses($type);
+					continue;
+				}
+
+				$items[] = $this->printType($type);
+			}
+
+			return implode($node instanceof IntersectionTypeNode ? '&' : '|', $items);
+		}
+		if ($node instanceof InvalidTypeNode) {
+			return (string) $node;
+		}
+		if ($node instanceof NullableTypeNode) {
+			if ($node->type instanceof IntersectionTypeNode || $node->type instanceof UnionTypeNode) {
+				return '?(' . $this->printType($node->type) . ')';
+			}
+
+			return '?' . $this->printType($node->type);
+		}
+		if ($node instanceof ObjectShapeNode) {
+			$items = array_map(function (ObjectShapeItemNode $item): string {
+				return $this->printType($item);
+			}, $node->items);
+
+			return 'object{' . implode(', ', $items) . '}';
+		}
+		if ($node instanceof ObjectShapeItemNode) {
+			if ($node->keyName !== null) {
+				return sprintf(
+					'%s%s: %s',
+					$this->print($node->keyName),
+					$node->optional ? '?' : '',
+					$this->printType($node->valueType)
+				);
+			}
+
+			return $this->printType($node->valueType);
+		}
+		if ($node instanceof OffsetAccessTypeNode) {
+			return $this->printOffsetAccessType($node->type) . '[' . $this->printType($node->offset) . ']';
+		}
+		if ($node instanceof ThisTypeNode) {
+			return (string) $node;
+		}
+
+		throw new LogicException(sprintf('Unknown node type %s', get_class($node)));
+	}
+
+	private function wrapInParentheses(TypeNode $node): string
+	{
+		return '(' . $this->printType($node) . ')';
+	}
+
+	private function printOffsetAccessType(TypeNode $type): string
+	{
+		if (
+			$type instanceof CallableTypeNode
+			|| $type instanceof UnionTypeNode
+			|| $type instanceof IntersectionTypeNode
+			|| $type instanceof NullableTypeNode
+		) {
+			return $this->wrapInParentheses($type);
+		}
+
+		return $this->printType($type);
+	}
+
+	private function printConstExpr(ConstExprNode $node): string
+	{
+		// this is fine - ConstExprNode classes do not contain nodes that need smart printer logic
+		return (string) $node;
+	}
+
+	/**
+	 * @param Node[] $nodes
+	 * @param Node[] $originalNodes
+	 */
+	private function printArrayFormatPreserving(array $nodes, array $originalNodes, TokenIterator $originalTokens, int &$tokenIndex, string $parentNodeClass, string $subNodeName): ?string
+	{
+		$diff = $this->differ->diffWithReplacements($originalNodes, $nodes);
+		$mapKey = $parentNodeClass . '->' . $subNodeName;
+		$insertStr = $this->listInsertionMap[$mapKey] ?? null;
+		$result = '';
+		$beforeFirstKeepOrReplace = true;
+		$delayedAdd = [];
+
+		$insertNewline = false;
+		[$isMultiline, $beforeAsteriskIndent, $afterAsteriskIndent] = $this->isMultiline($tokenIndex, $originalNodes, $originalTokens);
+
+		if ($insertStr === "\n * ") {
+			$insertStr = sprintf('%s%s*%s', $originalTokens->getDetectedNewline() ?? "\n", $beforeAsteriskIndent, $afterAsteriskIndent);
+		}
+
+		foreach ($diff as $i => $diffElem) {
+			$diffType = $diffElem->type;
+			$newNode = $diffElem->new;
+			$originalNode = $diffElem->old;
+			if ($diffType === DiffElem::TYPE_KEEP || $diffType === DiffElem::TYPE_REPLACE) {
+				$beforeFirstKeepOrReplace = false;
+				if (!$newNode instanceof Node || !$originalNode instanceof Node) {
+					return null;
+				}
+				$itemStartPos = $originalNode->getAttribute(Attribute::START_INDEX);
+				$itemEndPos = $originalNode->getAttribute(Attribute::END_INDEX);
+				if ($itemStartPos < 0 || $itemEndPos < 0 || $itemStartPos < $tokenIndex) {
+					throw new LogicException();
+				}
+
+				$result .= $originalTokens->getContentBetween($tokenIndex, $itemStartPos);
+
+				if (count($delayedAdd) > 0) {
+					foreach ($delayedAdd as $delayedAddNode) {
+						$parenthesesNeeded = isset($this->parenthesesListMap[$mapKey])
+							&& in_array(get_class($delayedAddNode), $this->parenthesesListMap[$mapKey], true);
+						if ($parenthesesNeeded) {
+							$result .= '(';
+						}
+						$result .= $this->printNodeFormatPreserving($delayedAddNode, $originalTokens);
+						if ($parenthesesNeeded) {
+							$result .= ')';
+						}
+
+						if ($insertNewline) {
+							$result .= $insertStr . sprintf('%s%s*%s', $originalTokens->getDetectedNewline() ?? "\n", $beforeAsteriskIndent, $afterAsteriskIndent);
+						} else {
+							$result .= $insertStr;
+						}
+					}
+
+					$delayedAdd = [];
+				}
+
+				$parenthesesNeeded = isset($this->parenthesesListMap[$mapKey])
+					&& in_array(get_class($newNode), $this->parenthesesListMap[$mapKey], true)
+					&& !in_array(get_class($originalNode), $this->parenthesesListMap[$mapKey], true);
+				$addParentheses = $parenthesesNeeded && !$originalTokens->hasParentheses($itemStartPos, $itemEndPos);
+				if ($addParentheses) {
+					$result .= '(';
+				}
+
+				$result .= $this->printNodeFormatPreserving($newNode, $originalTokens);
+				if ($addParentheses) {
+					$result .= ')';
+				}
+				$tokenIndex = $itemEndPos + 1;
+
+			} elseif ($diffType === DiffElem::TYPE_ADD) {
+				if ($insertStr === null) {
+					return null;
+				}
+				if (!$newNode instanceof Node) {
+					return null;
+				}
+
+				if ($insertStr === ', ' && $isMultiline) {
+					$insertStr = ',';
+					$insertNewline = true;
+				}
+
+				if ($beforeFirstKeepOrReplace) {
+					// Will be inserted at the next "replace" or "keep" element
+					$delayedAdd[] = $newNode;
+					continue;
+				}
+
+				$itemEndPos = $tokenIndex - 1;
+				if ($insertNewline) {
+					$result .= $insertStr . sprintf('%s%s*%s', $originalTokens->getDetectedNewline() ?? "\n", $beforeAsteriskIndent, $afterAsteriskIndent);
+				} else {
+					$result .= $insertStr;
+				}
+
+				$parenthesesNeeded = isset($this->parenthesesListMap[$mapKey])
+					&& in_array(get_class($newNode), $this->parenthesesListMap[$mapKey], true);
+				if ($parenthesesNeeded) {
+					$result .= '(';
+				}
+
+				$result .= $this->printNodeFormatPreserving($newNode, $originalTokens);
+				if ($parenthesesNeeded) {
+					$result .= ')';
+				}
+
+				$tokenIndex = $itemEndPos + 1;
+
+			} elseif ($diffType === DiffElem::TYPE_REMOVE) {
+				if (!$originalNode instanceof Node) {
+					return null;
+				}
+
+				$itemStartPos = $originalNode->getAttribute(Attribute::START_INDEX);
+				$itemEndPos = $originalNode->getAttribute(Attribute::END_INDEX);
+				if ($itemStartPos < 0 || $itemEndPos < 0) {
+					throw new LogicException();
+				}
+
+				if ($i === 0) {
+					// If we're removing from the start, keep the tokens before the node and drop those after it,
+					// instead of the other way around.
+					$originalTokensArray = $originalTokens->getTokens();
+					for ($j = $tokenIndex; $j < $itemStartPos; $j++) {
+						if ($originalTokensArray[$j][Lexer::TYPE_OFFSET] === Lexer::TOKEN_PHPDOC_EOL) {
+							break;
+						}
+						$result .= $originalTokensArray[$j][Lexer::VALUE_OFFSET];
+					}
+				}
+
+				$tokenIndex = $itemEndPos + 1;
+			}
+		}
+
+		if (count($delayedAdd) > 0) {
+			if (!isset($this->emptyListInsertionMap[$mapKey])) {
+				return null;
+			}
+
+			[$findToken, $extraLeft, $extraRight] = $this->emptyListInsertionMap[$mapKey];
+			if ($findToken !== null) {
+				$originalTokensArray = $originalTokens->getTokens();
+				for (; $tokenIndex < count($originalTokensArray); $tokenIndex++) {
+					$result .= $originalTokensArray[$tokenIndex][Lexer::VALUE_OFFSET];
+					if ($originalTokensArray[$tokenIndex][Lexer::VALUE_OFFSET] !== $findToken) {
+						continue;
+					}
+
+					$tokenIndex++;
+					break;
+				}
+			}
+			$first = true;
+			$result .= $extraLeft;
+			foreach ($delayedAdd as $delayedAddNode) {
+				if (!$first) {
+					$result .= $insertStr;
+					if ($insertNewline) {
+						$result .= sprintf('%s%s*%s', $originalTokens->getDetectedNewline() ?? "\n", $beforeAsteriskIndent, $afterAsteriskIndent);
+					}
+				}
+
+				$result .= $this->printNodeFormatPreserving($delayedAddNode, $originalTokens);
+				$first = false;
+			}
+			$result .= $extraRight;
+		}
+
+		return $result;
+	}
+
+	/**
+	 * @param Node[] $nodes
+	 * @return array{bool, string, string}
+	 */
+	private function isMultiline(int $initialIndex, array $nodes, TokenIterator $originalTokens): array
+	{
+		$isMultiline = count($nodes) > 1;
+		$pos = $initialIndex;
+		$allText = '';
+		/** @var Node|null $node */
+		foreach ($nodes as $node) {
+			if (!$node instanceof Node) {
+				continue;
+			}
+
+			$endPos = $node->getAttribute(Attribute::END_INDEX) + 1;
+			$text = $originalTokens->getContentBetween($pos, $endPos);
+			$allText .= $text;
+			if (strpos($text, "\n") === false) {
+				// We require that a newline is present between *every* item. If the formatting
+				// is inconsistent, with only some items having newlines, we don't consider it
+				// as multiline
+				$isMultiline = false;
+			}
+			$pos = $endPos;
+		}
+
+		$c = preg_match_all('~\n(?<before>[\\x09\\x20]*)\*(?<after>\\x20*)~', $allText, $matches, PREG_SET_ORDER);
+		if ($c === 0) {
+			return [$isMultiline, '', ''];
+		}
+
+		$before = '';
+		$after = '';
+		foreach ($matches as $match) {
+			if (strlen($match['before']) > strlen($before)) {
+				$before = $match['before'];
+			}
+			if (strlen($match['after']) <= strlen($after)) {
+				continue;
+			}
+
+			$after = $match['after'];
+		}
+
+		return [$isMultiline, $before, $after];
+	}
+
+	private function printNodeFormatPreserving(Node $node, TokenIterator $originalTokens): string
+	{
+		/** @var Node|null $originalNode */
+		$originalNode = $node->getAttribute(Attribute::ORIGINAL_NODE);
+		if ($originalNode === null) {
+			return $this->print($node);
+		}
+
+		$class = get_class($node);
+		if ($class !== get_class($originalNode)) {
+			throw new LogicException();
+		}
+
+		$startPos = $originalNode->getAttribute(Attribute::START_INDEX);
+		$endPos = $originalNode->getAttribute(Attribute::END_INDEX);
+		if ($startPos < 0 || $endPos < 0) {
+			throw new LogicException();
+		}
+
+		$result = '';
+		$pos = $startPos;
+		$subNodeNames = array_keys(get_object_vars($node));
+		foreach ($subNodeNames as $subNodeName) {
+			$subNode = $node->$subNodeName;
+			$origSubNode = $originalNode->$subNodeName;
+
+			if (
+				(!$subNode instanceof Node && $subNode !== null)
+				|| (!$origSubNode instanceof Node && $origSubNode !== null)
+			) {
+				if ($subNode === $origSubNode) {
+					// Unchanged, can reuse old code
+					continue;
+				}
+
+				if (is_array($subNode) && is_array($origSubNode)) {
+					// Array subnode changed, we might be able to reconstruct it
+					$listResult = $this->printArrayFormatPreserving(
+						$subNode,
+						$origSubNode,
+						$originalTokens,
+						$pos,
+						$class,
+						$subNodeName
+					);
+
+					if ($listResult === null) {
+						return $this->print($node);
+					}
+
+					$result .= $listResult;
+					continue;
+				}
+
+				return $this->print($node);
+			}
+
+			if ($origSubNode === null) {
+				if ($subNode === null) {
+					// Both null, nothing to do
+					continue;
+				}
+
+				return $this->print($node);
+			}
+
+			$subStartPos = $origSubNode->getAttribute(Attribute::START_INDEX);
+			$subEndPos = $origSubNode->getAttribute(Attribute::END_INDEX);
+			if ($subStartPos < 0 || $subEndPos < 0) {
+				throw new LogicException();
+			}
+
+			if ($subEndPos < $subStartPos) {
+				return $this->print($node);
+			}
+
+			if ($subNode === null) {
+				return $this->print($node);
+			}
+
+			$result .= $originalTokens->getContentBetween($pos, $subStartPos);
+			$mapKey = get_class($node) . '->' . $subNodeName;
+			$parenthesesNeeded = isset($this->parenthesesMap[$mapKey])
+				&& in_array(get_class($subNode), $this->parenthesesMap[$mapKey], true);
+
+			if ($subNode->getAttribute(Attribute::ORIGINAL_NODE) !== null) {
+				$parenthesesNeeded = $parenthesesNeeded
+					&& !in_array(get_class($subNode->getAttribute(Attribute::ORIGINAL_NODE)), $this->parenthesesMap[$mapKey], true);
+			}
+
+			$addParentheses = $parenthesesNeeded && !$originalTokens->hasParentheses($subStartPos, $subEndPos);
+			if ($addParentheses) {
+				$result .= '(';
+			}
+
+			$result .= $this->printNodeFormatPreserving($subNode, $originalTokens);
+			if ($addParentheses) {
+				$result .= ')';
+			}
+
+			$pos = $subEndPos + 1;
+		}
+
+		return $result . $originalTokens->getContentBetween($pos, $endPos + 1);
+	}
+
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/FAQ.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/FAQ.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/FAQ.htm	(revision 8435)
@@ -0,0 +1,272 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>FAQ</title>
+<link type="text/css" rel="stylesheet" href="fpdf.css">
+<style type="text/css">
+ul {list-style-type:none; margin:0; padding:0}
+ul#answers li {margin-top:1.8em}
+.question {font-weight:bold; color:#900000}
+</style>
+</head>
+<body>
+<h1>FAQ</h1>
+<ul>
+<li><b>1.</b> <a href='#q1'>What's exactly the license of FPDF? Are there any usage restrictions?</a></li>
+<li><b>2.</b> <a href='#q2'>I get the following error when I try to generate a PDF: Some data has already been output, can't send PDF file</a></li>
+<li><b>3.</b> <a href='#q3'>Accented letters are replaced with some strange characters like Ã©.</a></li>
+<li><b>4.</b> <a href='#q4'>I try to display the Euro symbol but it doesn't work.</a></li>
+<li><b>5.</b> <a href='#q5'>I try to display a variable in the Header method but nothing prints.</a></li>
+<li><b>6.</b> <a href='#q6'>I have defined the Header and Footer methods in my PDF class but nothing shows.</a></li>
+<li><b>7.</b> <a href='#q7'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</a></li>
+<li><b>8.</b> <a href='#q8'>I use jQuery to generate the PDF but it doesn't show.</a></li>
+<li><b>9.</b> <a href='#q9'>I draw a frame with very precise dimensions, but when printed I notice some differences.</a></li>
+<li><b>10.</b> <a href='#q10'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</a></li>
+<li><b>11.</b> <a href='#q11'>How can I put a background in my PDF?</a></li>
+<li><b>12.</b> <a href='#q12'>How can I set a specific header or footer on the first page?</a></li>
+<li><b>13.</b> <a href='#q13'>I'd like to use extensions provided by different scripts. How can I combine them?</a></li>
+<li><b>14.</b> <a href='#q14'>How can I open the PDF in a new tab?</a></li>
+<li><b>15.</b> <a href='#q15'>How can I send the PDF by email?</a></li>
+<li><b>16.</b> <a href='#q16'>What's the limit of the file sizes I can generate with FPDF?</a></li>
+<li><b>17.</b> <a href='#q17'>Can I modify a PDF with FPDF?</a></li>
+<li><b>18.</b> <a href='#q18'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</a></li>
+<li><b>19.</b> <a href='#q19'>Can I convert an HTML page to PDF with FPDF?</a></li>
+<li><b>20.</b> <a href='#q20'>Can I concatenate PDF files with FPDF?</a></li>
+</ul>
+
+<ul id='answers'>
+<li id='q1'>
+<p><b>1.</b> <span class='question'>What's exactly the license of FPDF? Are there any usage restrictions?</span></p>
+FPDF is released under a permissive license: there is no usage restriction. You may embed it
+freely in your application (commercial or not), with or without modifications.
+</li>
+
+<li id='q2'>
+<p><b>2.</b> <span class='question'>I get the following error when I try to generate a PDF: Some data has already been output, can't send PDF file</span></p>
+You must send nothing to the browser except the PDF itself: no HTML, no space, no carriage return. A common
+case is having extra blank at the end of an included script file.<br>
+If you can't figure out where the problem comes from, this other message appearing just before can help you:<br>
+<br>
+<b>Warning:</b> Cannot modify header information - headers already sent by (output started at script.php:X)<br>
+<br>
+It means that script.php outputs something at line X. Go to this line and fix it.
+In case the message doesn't show, first check that you didn't disable warnings, then add this at the very
+beginning of your script:
+<div class="doc-source">
+<pre><code>ob_end_clean();</code></pre>
+</div>
+If you still don't see it, disable zlib.output_compression in your php.ini and it should appear.
+</li>
+
+<li id='q3'>
+<p><b>3.</b> <span class='question'>Accented letters are replaced with some strange characters like Ã©.</span></p>
+Don't use UTF-8 with the standard fonts; they expect text encoded in ISO-8859-1 or windows-1252.
+You can use utf8_decode() to perform a conversion to ISO-8859-1:
+<div class="doc-source">
+<pre><code>$str = utf8_decode($str);</code></pre>
+</div>
+But some characters such as Euro won't be translated correctly. If the iconv extension is available, the
+right way to do it is the following:
+<div class="doc-source">
+<pre><code>$str = iconv('UTF-8', 'windows-1252', $str);</code></pre>
+</div>
+In case you need characters outside windows-1252, take a look at tutorial #7 or
+<a href="http://www.fpdf.org/?go=script&amp;id=92" target="_blank">tFPDF</a>.
+</li>
+
+<li id='q4'>
+<p><b>4.</b> <span class='question'>I try to display the Euro symbol but it doesn't work.</span></p>
+The standard fonts have the Euro character at position 128. You can define a constant like this
+for convenience:
+<div class="doc-source">
+<pre><code>define('EURO', chr(128));</code></pre>
+</div>
+</li>
+
+<li id='q5'>
+<p><b>5.</b> <span class='question'>I try to display a variable in the Header method but nothing prints.</span></p>
+You have to use the <code>global</code> keyword to access global variables, for example:
+<div class="doc-source">
+<pre><code>function Header()
+{
+    global $title;
+
+    $this-&gt;SetFont('Arial', 'B', 15);
+    $this-&gt;Cell(0, 10, $title, 1, 1, 'C');
+}
+
+$title = 'My title';</code></pre>
+</div>
+Alternatively, you can use an object property:
+<div class="doc-source">
+<pre><code>function Header()
+{
+    $this-&gt;SetFont('Arial', 'B', 15);
+    $this-&gt;Cell(0, 10, $this-&gt;title, 1, 1, 'C');
+}
+
+$pdf-&gt;title = 'My title';</code></pre>
+</div>
+</li>
+
+<li id='q6'>
+<p><b>6.</b> <span class='question'>I have defined the Header and Footer methods in my PDF class but nothing shows.</span></p>
+You have to create an object from the PDF class, not FPDF:
+<div class="doc-source">
+<pre><code>$pdf = new PDF();</code></pre>
+</div>
+</li>
+
+<li id='q7'>
+<p><b>7.</b> <span class='question'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</span></p>
+You have to enclose your string with double quotes, not single ones.
+</li>
+
+<li id='q8'>
+<p><b>8.</b> <span class='question'>I use jQuery to generate the PDF but it doesn't show.</span></p>
+Don't use an AJAX request to retrieve the PDF.
+</li>
+
+<li id='q9'>
+<p><b>9.</b> <span class='question'>I draw a frame with very precise dimensions, but when printed I notice some differences.</span></p>
+To respect dimensions, select "None" for the Page Scaling setting instead of "Shrink to Printable Area" in the print dialog box.
+</li>
+
+<li id='q10'>
+<p><b>10.</b> <span class='question'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</span></p>
+Printers have physical margins (different depending on the models); it is therefore impossible to remove
+them and print on the whole surface of the paper.
+</li>
+
+<li id='q11'>
+<p><b>11.</b> <span class='question'>How can I put a background in my PDF?</span></p>
+For a picture, call Image() in the Header() method, before any other output. To set a background color, use Rect().
+</li>
+
+<li id='q12'>
+<p><b>12.</b> <span class='question'>How can I set a specific header or footer on the first page?</span></p>
+Just test the page number:
+<div class="doc-source">
+<pre><code>function Header()
+{
+    if($this-&gt;PageNo()==1)
+    {
+        //First page
+        ...
+    }
+    else
+    {
+        //Other pages
+        ...
+    }
+}</code></pre>
+</div>
+</li>
+
+<li id='q13'>
+<p><b>13.</b> <span class='question'>I'd like to use extensions provided by different scripts. How can I combine them?</span></p>
+Use an inheritance chain. If you have two classes, say A in a.php:
+<div class="doc-source">
+<pre><code>require('fpdf.php');
+
+class A extends FPDF
+{
+...
+}</code></pre>
+</div>
+and B in b.php:
+<div class="doc-source">
+<pre><code>require('fpdf.php');
+
+class B extends FPDF
+{
+...
+}</code></pre>
+</div>
+then make B extend A:
+<div class="doc-source">
+<pre><code>require('a.php');
+
+class B extends A
+{
+...
+}</code></pre>
+</div>
+and make your own class extend B:
+<div class="doc-source">
+<pre><code>require('b.php');
+
+class PDF extends B
+{
+...
+}
+
+$pdf = new PDF();</code></pre>
+</div>
+</li>
+
+<li id='q14'>
+<p><b>14.</b> <span class='question'>How can I open the PDF in a new tab?</span></p>
+Just do the same as you would for an HTML page or anything else: add a target="_blank" to your link or form.
+</li>
+
+<li id='q15'>
+<p><b>15.</b> <span class='question'>How can I send the PDF by email?</span></p>
+As for any other file, but an easy way is to use <a href="https://github.com/PHPMailer/PHPMailer" target="_blank">PHPMailer</a> and
+its in-memory attachment:
+<div class="doc-source">
+<pre><code>$mail = new PHPMailer();
+...
+$doc = $pdf-&gt;Output('S');
+$mail-&gt;AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf');
+$mail-&gt;Send();</code></pre>
+</div>
+</li>
+
+<li id='q16'>
+<p><b>16.</b> <span class='question'>What's the limit of the file sizes I can generate with FPDF?</span></p>
+There is no particular limit. There are some constraints, however:
+<br>
+<br>
+- There is usually a maximum memory size allocated to PHP scripts. For very big documents,
+especially with images, the limit may be reached (the file being built in memory). The
+parameter is configured in the php.ini file.
+<br>
+<br>
+- The maximum execution time allocated to scripts defaults to 30 seconds. This limit can of course
+be easily reached. It is configured in php.ini and may be altered dynamically with set_time_limit().
+<br>
+<br>
+You can work around the memory limit with <a href="http://www.fpdf.org/?go=script&amp;id=76" target="_blank">this script</a>.
+</li>
+
+<li id='q17'>
+<p><b>17.</b> <span class='question'>Can I modify a PDF with FPDF?</span></p>
+It's possible to import pages from an existing PDF document thanks to the
+<a href="https://www.setasign.com/products/fpdi/about/" target="_blank">FPDI</a> extension.
+Then you can add some content to them.
+</li>
+
+<li id='q18'>
+<p><b>18.</b> <span class='question'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</span></p>
+No. But a GPL C utility does exist, pdftotext, which is able to extract the textual content from a PDF.
+It's provided with the <a href="https://www.xpdfreader.com" target="_blank">Xpdf</a> package.
+</li>
+
+<li id='q19'>
+<p><b>19.</b> <span class='question'>Can I convert an HTML page to PDF with FPDF?</span></p>
+Not real-world pages. But a GPL C utility does exist, <a href="https://www.msweet.org/htmldoc/" target="_blank">HTMLDOC</a>,
+which allows to do it and gives good results.
+</li>
+
+<li id='q20'>
+<p><b>20.</b> <span class='question'>Can I concatenate PDF files with FPDF?</span></p>
+Not directly, but it's possible to use <a href="https://www.setasign.com/products/fpdi/demos/concatenate-fake/" target="_blank">FPDI</a>
+to perform that task. Some free command-line tools also exist:
+<a href="https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/" target="_blank">pdftk</a> and
+<a href="http://thierry.schmit.free.fr/spip/spip.php?article15" target="_blank">mbtPdfAsm</a>.
+</li>
+</ul>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/README.md	(revision 8435)
@@ -0,0 +1,21 @@
+# FPDF
+**This repository is only made for cloning official FPDF releases which are available at: http://www.fpdf.org**
+**THERE WILL BE NO DEVELOPMENT IN THIS REPOSITORY!**
+
+FPDF is a PHP class which allows to generate PDF files with pure PHP. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.
+
+## Installation with [Composer](https://packagist.org/packages/setasign/fpdf)
+
+If you're using Composer to manage dependencies, you can use
+
+    $ composer require setasign/fpdf:^1.8
+
+or you can include the following in your composer.json file:
+
+```json
+{
+    "require": {
+        "setasign/fpdf": "^1.8"
+    }
+}
+```
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/changelog.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/changelog.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/changelog.htm	(revision 8435)
@@ -0,0 +1,167 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Changelog</title>
+<link type="text/css" rel="stylesheet" href="fpdf.css">
+<style type="text/css">
+dd {margin:1em 0 1em 1em}
+</style>
+</head>
+<body>
+<h1>Changelog</h1>
+<dl>
+<dt><strong>v1.82</strong> (2019-12-07)</dt>
+<dd>
+- Removed a deprecation notice under PHP 7.4.<br>
+</dd>
+<dt><strong>v1.81</strong> (2015-12-20)</dt>
+<dd>
+- Added GetPageWidth() and GetPageHeight().<br>
+- Fixed a bug in SetXY().<br>
+</dd>
+<dt><strong>v1.8</strong> (2015-11-29)</dt>
+<dd>
+- PHP 5.1.0 or higher is now required.<br>
+- The MakeFont utility now subsets fonts, which can greatly reduce font sizes.<br>
+- Added ToUnicode CMaps to improve text extraction.<br>
+- Added a parameter to AddPage() to rotate the page.<br>
+- Added a parameter to SetY() to indicate whether the x position should be reset or not.<br>
+- Added a parameter to Output() to specify the encoding of the name, and special characters are now properly encoded. Additionally the order of the first two parameters was reversed to be more logical (however the old order is still supported for compatibility).<br>
+- The Error() method now throws an exception.<br>
+- Adding contents before the first AddPage() or after Close() now raises an error.<br>
+- Outputting text with no font selected now raises an error.<br>
+</dd>
+<dt><strong>v1.7</strong> (2011-06-18)</dt>
+<dd>
+- The MakeFont utility has been completely rewritten and doesn't depend on ttf2pt1 anymore.<br>
+- Alpha channel is now supported for PNGs.<br>
+- When inserting an image, it's now possible to specify its resolution.<br>
+- Default resolution for images was increased from 72 to 96 dpi.<br>
+- When inserting a GIF image, no temporary file is used anymore if the PHP version is 5.1 or higher.<br>
+- When output buffering is enabled and the PDF is about to be sent, the buffer is now cleared if it contains only a UTF-8 BOM and/or whitespace (instead of throwing an error).<br>
+- Symbol and ZapfDingbats fonts now support underline style.<br>
+- Custom page sizes are now checked to ensure that width is smaller than height.<br>
+- Standard font files were changed to use the same format as user fonts.<br>
+- A bug in the embedding of Type1 fonts was fixed.<br>
+- A bug related to SetDisplayMode() and the current locale was fixed.<br>
+- A display issue occurring with the Adobe Reader X plug-in was fixed.<br>
+- An issue related to transparency with some versions of Adobe Reader was fixed.<br>
+- The Content-Length header was removed because it caused an issue when the HTTP server applies compression.<br>
+</dd>
+<dt><strong>v1.6</strong> (2008-08-03)</dt>
+<dd>
+- PHP 4.3.10 or higher is now required.<br>
+- GIF image support.<br>
+- Images can now trigger page breaks.<br>
+- Possibility to have different page formats in a single document.<br>
+- Document properties (author, creator, keywords, subject and title) can now be specified in UTF-8.<br>
+- Fixed a bug: when a PNG was inserted through a URL, an error sometimes occurred.<br>
+- An automatic page break in Header() doesn't cause an infinite loop any more.<br>
+- Removed some warning messages appearing with recent PHP versions.<br>
+- Added HTTP headers to reduce problems with IE.<br>
+</dd>
+<dt><strong>v1.53</strong> (2004-12-31)</dt>
+<dd>
+- When the font subdirectory is in the same directory as fpdf.php, it's no longer necessary to define the FPDF_FONTPATH constant.<br>
+- The array $HTTP_SERVER_VARS is no longer used. It could cause trouble on PHP5-based configurations with the register_long_arrays option disabled.<br>
+- Fixed a problem related to Type1 font embedding which caused trouble to some PDF processors.<br>
+- The file name sent to the browser could not contain a space character.<br>
+- The Cell() method could not print the number 0 (you had to pass the string '0').<br>
+</dd>
+<dt><strong>v1.52</strong> (2003-12-30)</dt>
+<dd>
+- Image() now displays the image at 72 dpi if no dimension is given.<br>
+- Output() takes a string as second parameter to indicate destination.<br>
+- Open() is now called automatically by AddPage().<br>
+- Inserting remote JPEG images doesn't generate an error any longer.<br>
+- Decimal separator is forced to dot in the constructor.<br>
+- Added several encodings (Turkish, Thai, Hebrew, Ukrainian and Vietnamese).<br>
+- The last line of a right-aligned MultiCell() was not correctly aligned if it was terminated by a carriage return.<br>
+- No more error message about already sent headers when outputting the PDF to the standard output from the command line.<br>
+- The underlining was going too far for text containing characters \, ( or ).<br>
+- $HTTP_ENV_VARS has been replaced by $HTTP_SERVER_VARS.<br>
+</dd>
+<dt><strong>v1.51</strong> (2002-08-03)</dt>
+<dd>
+- Type1 font support.<br>
+- Added Baltic encoding.<br>
+- The class now works internally in points with the origin at the bottom in order to avoid two bugs occurring with Acrobat 5:<br>&nbsp;&nbsp;* The line thickness was too large when printed under Windows 98 SE and ME.<br>&nbsp;&nbsp;* TrueType fonts didn't appear immediately inside the plug-in (a substitution font was used), one had to cause a window refresh to make them show up.<br>
+- It's no longer necessary to set the decimal separator as dot to produce valid documents.<br>
+- The clickable area in a cell was always on the left independently from the text alignment.<br>
+- JPEG images in CMYK mode appeared in inverted colors.<br>
+- Transparent PNG images in grayscale or true color mode were incorrectly handled.<br>
+- Adding new fonts now works correctly even with the magic_quotes_runtime option set to on.<br>
+</dd>
+<dt><strong>v1.5</strong> (2002-05-28)</dt>
+<dd>
+- TrueType font (AddFont()) and encoding support (Western and Eastern Europe, Cyrillic and Greek).<br>
+- Added Write() method.<br>
+- Added underlined style.<br>
+- Internal and external link support (AddLink(), SetLink(), Link()).<br>
+- Added right margin management and methods SetRightMargin(), SetTopMargin().<br>
+- Modification of SetDisplayMode() to select page layout.<br>
+- The border parameter of MultiCell() now lets choose borders to draw as Cell().<br>
+- When a document contains no page, Close() now calls AddPage() instead of causing a fatal error.<br>
+</dd>
+<dt><strong>v1.41</strong> (2002-03-13)</dt>
+<dd>
+- Fixed SetDisplayMode() which no longer worked (the PDF viewer used its default display).<br>
+</dd>
+<dt><strong>v1.4</strong> (2002-03-02)</dt>
+<dd>
+- PHP3 is no longer supported.<br>
+- Page compression (SetCompression()).<br>
+- Choice of page format and possibility to change orientation inside document.<br>
+- Added AcceptPageBreak() method.<br>
+- Ability to print the total number of pages (AliasNbPages()).<br>
+- Choice of cell borders to draw.<br>
+- New mode for Cell(): the current position can now move under the cell.<br>
+- Ability to include an image by specifying height only (width is calculated automatically).<br>
+- Fixed a bug: when a justified line triggered a page break, the footer inherited the corresponding word spacing.<br>
+</dd>
+<dt><strong>v1.31</strong> (2002-01-12)</dt>
+<dd>
+- Fixed a bug in drawing frame with MultiCell(): the last line always started from the left margin.<br>
+- Removed Expires HTTP header (gives trouble in some situations).<br>
+- Added Content-disposition HTTP header (seems to help in some situations).<br>
+</dd>
+<dt><strong>v1.3</strong> (2001-12-03)</dt>
+<dd>
+- Line break and text justification support (MultiCell()).<br>
+- Color support (SetDrawColor(), SetFillColor(), SetTextColor()). Possibility to draw filled rectangles and paint cell background.<br>
+- A cell whose width is declared null extends up to the right margin of the page.<br>
+- Line width is now retained from page to page and defaults to 0.2 mm.<br>
+- Added SetXY() method.<br>
+- Fixed a passing by reference done in a deprecated manner for PHP4.<br>
+</dd>
+<dt><strong>v1.2</strong> (2001-11-11)</dt>
+<dd>
+- Added font metric files and GetStringWidth() method.<br>
+- Centering and right-aligning text in cells.<br>
+- Display mode control (SetDisplayMode()).<br>
+- Added methods to set document properties (SetAuthor(), SetCreator(), SetKeywords(), SetSubject(), SetTitle()).<br>
+- Possibility to force PDF download by browser.<br>
+- Added SetX() and GetX() methods.<br>
+- During automatic page break, current abscissa is now retained.<br>
+</dd>
+<dt><strong>v1.11</strong> (2001-10-20)</dt>
+<dd>
+- PNG support doesn't require PHP4/zlib any more. Data are now put directly into PDF without any decompression/recompression stage.<br>
+- Image insertion now works correctly even with magic_quotes_runtime option set to on.<br>
+</dd>
+<dt><strong>v1.1</strong> (2001-10-07)</dt>
+<dd>
+- JPEG and PNG image support.<br>
+</dd>
+<dt><strong>v1.01</strong> (2001-10-03)</dt>
+<dd>
+- Fixed a bug involving page break: in case when Header() doesn't specify a font, the one from previous page was not restored and produced an incorrect document.<br>
+</dd>
+<dt><strong>v1.0</strong> (2001-09-17)</dt>
+<dd>
+- First version.<br>
+</dd>
+</dl>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/composer.json	(revision 8435)
@@ -0,0 +1,20 @@
+{
+    "name": "setasign/fpdf",
+    "homepage": "http://www.fpdf.org",
+    "description": "FPDF is a PHP class which allows to generate PDF files with pure PHP. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.",
+    "type": "library",
+    "keywords": ["pdf", "fpdf"],
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Olivier Plathey",
+            "email": "oliver@fpdf.org",
+            "homepage": "http://fpdf.org/"
+        }
+    ],
+    "autoload": {
+        "classmap": [
+            "fpdf.php"
+        ]
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/__construct.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/__construct.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/__construct.htm	(revision 8435)
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>__construct</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>__construct</h1>
+<code>__construct([<b>string</b> orientation [, <b>string</b> unit [, <b>mixed</b> size]]])</code>
+<h2>Description</h2>
+This is the class constructor. It allows to set up the page size, the orientation and the
+unit of measure used in all methods (except for font sizes).
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>orientation</code></dt>
+<dd>
+Default page orientation. Possible values are (case insensitive):
+<ul>
+<li><code>P</code> or <code>Portrait</code></li>
+<li><code>L</code> or <code>Landscape</code></li>
+</ul>
+Default value is <code>P</code>.
+</dd>
+<dt><code>unit</code></dt>
+<dd>
+User unit. Possible values are:
+<ul>
+<li><code>pt</code>: point</li>
+<li><code>mm</code>: millimeter</li>
+<li><code>cm</code>: centimeter</li>
+<li><code>in</code>: inch</li>
+</ul>
+A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This
+is a very common unit in typography; font sizes are expressed in that unit.
+<br>
+<br>
+Default value is <code>mm</code>.
+</dd>
+<dt><code>size</code></dt>
+<dd>
+The size used for pages. It can be either one of the following values (case insensitive):
+<ul>
+<li><code>A3</code></li>
+<li><code>A4</code></li>
+<li><code>A5</code></li>
+<li><code>Letter</code></li>
+<li><code>Legal</code></li>
+</ul>
+or an array containing the width and the height (expressed in the unit given by <code>unit</code>).<br>
+<br>
+Default value is <code>A4</code>.
+</dd>
+</dl>
+<h2>Example</h2>
+Example with a custom 100x150 mm page size:
+<div class="doc-source">
+<pre><code>$pdf = new FPDF('P','mm',array(100,150));</code></pre>
+</div>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/acceptpagebreak.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/acceptpagebreak.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/acceptpagebreak.htm	(revision 8435)
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>AcceptPageBreak</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>AcceptPageBreak</h1>
+<code><b>boolean</b> AcceptPageBreak()</code>
+<h2>Description</h2>
+Whenever a page break condition is met, the method is called, and the break is issued or not
+depending on the returned value. The default implementation returns a value according to the
+mode selected by SetAutoPageBreak().
+<br>
+This method is called automatically and should not be called directly by the application.
+<h2>Example</h2>
+The method is overriden in an inherited class in order to obtain a 3 column layout:
+<div class="doc-source">
+<pre><code>class PDF extends FPDF
+{
+var $col = 0;
+
+function SetCol($col)
+{
+    // Move position to a column
+    $this-&gt;col = $col;
+    $x = 10+$col*65;
+    $this-&gt;SetLeftMargin($x);
+    $this-&gt;SetX($x);
+}
+
+function AcceptPageBreak()
+{
+    if($this-&gt;col&lt;2)
+    {
+        // Go to next column
+        $this-&gt;SetCol($this-&gt;col+1);
+        $this-&gt;SetY(10);
+        return false;
+    }
+    else
+    {
+        // Go back to first column and issue page break
+        $this-&gt;SetCol(0);
+        return true;
+    }
+}
+}
+
+$pdf = new PDF();
+$pdf-&gt;AddPage();
+$pdf-&gt;SetFont('Arial','',12);
+for($i=1;$i&lt;=300;$i++)
+    $pdf-&gt;Cell(0,5,"Line $i",0,1);
+$pdf-&gt;Output();</code></pre>
+</div>
+<h2>See also</h2>
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/addfont.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/addfont.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/addfont.htm	(revision 8435)
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>AddFont</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>AddFont</h1>
+<code>AddFont(<b>string</b> family [, <b>string</b> style [, <b>string</b> file]])</code>
+<h2>Description</h2>
+Imports a TrueType, OpenType or Type1 font and makes it available. It is necessary to generate a font
+definition file first with the MakeFont utility.
+<br>
+The definition file (and the font file itself when embedding) must be present in the font directory.
+If it is not found, the error "Could not include font definition file" is raised.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>family</code></dt>
+<dd>
+Font family. The name can be chosen arbitrarily. If it is a standard family name, it will
+override the corresponding font.
+</dd>
+<dt><code>style</code></dt>
+<dd>
+Font style. Possible values are (case insensitive):
+<ul>
+<li>empty string: regular</li>
+<li><code>B</code>: bold</li>
+<li><code>I</code>: italic</li>
+<li><code>BI</code> or <code>IB</code>: bold italic</li>
+</ul>
+The default value is regular.
+</dd>
+<dt><code>file</code></dt>
+<dd>
+The font definition file.
+<br>
+By default, the name is built from the family and style, in lower case with no space.
+</dd>
+</dl>
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>$pdf-&gt;AddFont('Comic','I');</code></pre>
+</div>
+is equivalent to:
+<div class="doc-source">
+<pre><code>$pdf-&gt;AddFont('Comic','I','comici.php');</code></pre>
+</div>
+<h2>See also</h2>
+<a href="setfont.htm">SetFont</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/addlink.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/addlink.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/addlink.htm	(revision 8435)
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>AddLink</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>AddLink</h1>
+<code><b>int</b> AddLink()</code>
+<h2>Description</h2>
+Creates a new internal link and returns its identifier. An internal link is a clickable area
+which directs to another place within the document.
+<br>
+The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is
+defined with SetLink().
+<h2>See also</h2>
+<a href="cell.htm">Cell</a>,
+<a href="write.htm">Write</a>,
+<a href="image.htm">Image</a>,
+<a href="link.htm">Link</a>,
+<a href="setlink.htm">SetLink</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/addpage.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/addpage.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/addpage.htm	(revision 8435)
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>AddPage</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>AddPage</h1>
+<code>AddPage([<b>string</b> orientation [, <b>mixed</b> size [, <b>int</b> rotation]]])</code>
+<h2>Description</h2>
+Adds a new page to the document. If a page is already present, the Footer() method is called
+first to output the footer. Then the page is added, the current position set to the top-left
+corner according to the left and top margins, and Header() is called to display the header.
+<br>
+The font which was set before calling is automatically restored. There is no need to call
+SetFont() again if you want to continue with the same font. The same is true for colors and
+line width.
+<br>
+The origin of the coordinate system is at the top-left corner and increasing ordinates go
+downwards.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>orientation</code></dt>
+<dd>
+Page orientation. Possible values are (case insensitive):
+<ul>
+<li><code>P</code> or <code>Portrait</code></li>
+<li><code>L</code> or <code>Landscape</code></li>
+</ul>
+The default value is the one passed to the constructor.
+</dd>
+<dt><code>size</code></dt>
+<dd>
+Page size. It can be either one of the following values (case insensitive):
+<ul>
+<li><code>A3</code></li>
+<li><code>A4</code></li>
+<li><code>A5</code></li>
+<li><code>Letter</code></li>
+<li><code>Legal</code></li>
+</ul>
+or an array containing the width and the height (expressed in user unit).<br>
+<br>
+The default value is the one passed to the constructor.
+</dd>
+<dt><code>rotation</code></dt>
+<dd>
+Angle by which to rotate the page. It must be a multiple of 90; positive values
+mean clockwise rotation. The default value is <code>0</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="__construct.htm">__construct</a>,
+<a href="header.htm">Header</a>,
+<a href="footer.htm">Footer</a>,
+<a href="setmargins.htm">SetMargins</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/aliasnbpages.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/aliasnbpages.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/aliasnbpages.htm	(revision 8435)
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>AliasNbPages</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>AliasNbPages</h1>
+<code>AliasNbPages([<b>string</b> alias])</code>
+<h2>Description</h2>
+Defines an alias for the total number of pages. It will be substituted as the document is
+closed.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>alias</code></dt>
+<dd>
+The alias. Default value: <code>{nb}</code>.
+</dd>
+</dl>
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>class PDF extends FPDF
+{
+function Footer()
+{
+    // Go to 1.5 cm from bottom
+    $this-&gt;SetY(-15);
+    // Select Arial italic 8
+    $this-&gt;SetFont('Arial','I',8);
+    // Print current and total page numbers
+    $this-&gt;Cell(0,10,'Page '.$this-&gt;PageNo().'/{nb}',0,0,'C');
+}
+}
+
+$pdf = new PDF();
+$pdf-&gt;AliasNbPages();</code></pre>
+</div>
+<h2>See also</h2>
+<a href="pageno.htm">PageNo</a>,
+<a href="footer.htm">Footer</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/cell.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/cell.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/cell.htm	(revision 8435)
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Cell</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Cell</h1>
+<code>Cell(<b>float</b> w [, <b>float</b> h [, <b>string</b> txt [, <b>mixed</b> border [, <b>int</b> ln [, <b>string</b> align [, <b>boolean</b> fill [, <b>mixed</b> link]]]]]]])</code>
+<h2>Description</h2>
+Prints a cell (rectangular area) with optional borders, background color and character string.
+The upper-left corner of the cell corresponds to the current position. The text can be aligned
+or centered. After the call, the current position moves to the right or to the next line. It is
+possible to put a link on the text.
+<br>
+If automatic page breaking is enabled and the cell goes beyond the limit, a page break is
+done before outputting.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>w</code></dt>
+<dd>
+Cell width. If <code>0</code>, the cell extends up to the right margin.
+</dd>
+<dt><code>h</code></dt>
+<dd>
+Cell height.
+Default value: <code>0</code>.
+</dd>
+<dt><code>txt</code></dt>
+<dd>
+String to print.
+Default value: empty string.
+</dd>
+<dt><code>border</code></dt>
+<dd>
+Indicates if borders must be drawn around the cell. The value can be either a number:
+<ul>
+<li><code>0</code>: no border</li>
+<li><code>1</code>: frame</li>
+</ul>
+or a string containing some or all of the following characters (in any order):
+<ul>
+<li><code>L</code>: left</li>
+<li><code>T</code>: top</li>
+<li><code>R</code>: right</li>
+<li><code>B</code>: bottom</li>
+</ul>
+Default value: <code>0</code>.
+</dd>
+<dt><code>ln</code></dt>
+<dd>
+Indicates where the current position should go after the call. Possible values are:
+<ul>
+<li><code>0</code>: to the right</li>
+<li><code>1</code>: to the beginning of the next line</li>
+<li><code>2</code>: below</li>
+</ul>
+Putting <code>1</code> is equivalent to putting <code>0</code> and calling Ln() just after.
+Default value: <code>0</code>.
+</dd>
+<dt><code>align</code></dt>
+<dd>
+Allows to center or align the text. Possible values are:
+<ul>
+<li><code>L</code> or empty string: left align (default value)</li>
+<li><code>C</code>: center</li>
+<li><code>R</code>: right align</li>
+</ul>
+</dd>
+<dt><code>fill</code></dt>
+<dd>
+Indicates if the cell background must be painted (<code>true</code>) or transparent (<code>false</code>).
+Default value: <code>false</code>.
+</dd>
+<dt><code>link</code></dt>
+<dd>
+URL or identifier returned by AddLink().
+</dd>
+</dl>
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>// Set font
+$pdf-&gt;SetFont('Arial','B',16);
+// Move to 8 cm to the right
+$pdf-&gt;Cell(80);
+// Centered text in a framed 20*10 mm cell and line break
+$pdf-&gt;Cell(20,10,'Title',1,1,'C');</code></pre>
+</div>
+<h2>See also</h2>
+<a href="setfont.htm">SetFont</a>,
+<a href="setdrawcolor.htm">SetDrawColor</a>,
+<a href="setfillcolor.htm">SetFillColor</a>,
+<a href="settextcolor.htm">SetTextColor</a>,
+<a href="setlinewidth.htm">SetLineWidth</a>,
+<a href="addlink.htm">AddLink</a>,
+<a href="ln.htm">Ln</a>,
+<a href="multicell.htm">MultiCell</a>,
+<a href="write.htm">Write</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/close.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/close.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/close.htm	(revision 8435)
@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Close</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Close</h1>
+<code>Close()</code>
+<h2>Description</h2>
+Terminates the PDF document. It is not necessary to call this method explicitly because Output()
+does it automatically.
+<br>
+If the document contains no page, AddPage() is called to prevent from getting an invalid document.
+<h2>See also</h2>
+<a href="output.htm">Output</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/error.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/error.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/error.htm	(revision 8435)
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Error</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Error</h1>
+<code>Error(<b>string</b> msg)</code>
+<h2>Description</h2>
+This method is automatically called in case of a fatal error; it simply throws an exception
+with the provided message.<br>
+An inherited class may override it to customize the error handling but the method should
+never return, otherwise the resulting document would probably be invalid.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>msg</code></dt>
+<dd>
+The error message.
+</dd>
+</dl>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/footer.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/footer.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/footer.htm	(revision 8435)
@@ -0,0 +1,35 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Footer</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Footer</h1>
+<code>Footer()</code>
+<h2>Description</h2>
+This method is used to render the page footer. It is automatically called by AddPage() and
+Close() and should not be called directly by the application. The implementation in FPDF is
+empty, so you have to subclass it and override the method if you want a specific processing.
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>class PDF extends FPDF
+{
+function Footer()
+{
+    // Go to 1.5 cm from bottom
+    $this-&gt;SetY(-15);
+    // Select Arial italic 8
+    $this-&gt;SetFont('Arial','I',8);
+    // Print centered page number
+    $this-&gt;Cell(0,10,'Page '.$this-&gt;PageNo(),0,0,'C');
+}
+}</code></pre>
+</div>
+<h2>See also</h2>
+<a href="header.htm">Header</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/getpageheight.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/getpageheight.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/getpageheight.htm	(revision 8435)
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>GetPageHeight</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>GetPageHeight</h1>
+<code><b>float</b> GetPageHeight()</code>
+<h2>Description</h2>
+Returns the current page height.
+<h2>See also</h2>
+<a href="getpagewidth.htm">GetPageWidth</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/getpagewidth.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/getpagewidth.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/getpagewidth.htm	(revision 8435)
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>GetPageWidth</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>GetPageWidth</h1>
+<code><b>float</b> GetPageWidth()</code>
+<h2>Description</h2>
+Returns the current page width.
+<h2>See also</h2>
+<a href="getpageheight.htm">GetPageHeight</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/getstringwidth.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/getstringwidth.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/getstringwidth.htm	(revision 8435)
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>GetStringWidth</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>GetStringWidth</h1>
+<code><b>float</b> GetStringWidth(<b>string</b> s)</code>
+<h2>Description</h2>
+Returns the length of a string in user unit. A font must be selected.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>s</code></dt>
+<dd>
+The string whose length is to be computed.
+</dd>
+</dl>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/getx.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/getx.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/getx.htm	(revision 8435)
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>GetX</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>GetX</h1>
+<code><b>float</b> GetX()</code>
+<h2>Description</h2>
+Returns the abscissa of the current position.
+<h2>See also</h2>
+<a href="setx.htm">SetX</a>,
+<a href="gety.htm">GetY</a>,
+<a href="sety.htm">SetY</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/gety.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/gety.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/gety.htm	(revision 8435)
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>GetY</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>GetY</h1>
+<code><b>float</b> GetY()</code>
+<h2>Description</h2>
+Returns the ordinate of the current position.
+<h2>See also</h2>
+<a href="sety.htm">SetY</a>,
+<a href="getx.htm">GetX</a>,
+<a href="setx.htm">SetX</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/header.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/header.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/header.htm	(revision 8435)
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Header</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Header</h1>
+<code>Header()</code>
+<h2>Description</h2>
+This method is used to render the page header. It is automatically called by AddPage() and
+should not be called directly by the application. The implementation in FPDF is empty, so
+you have to subclass it and override the method if you want a specific processing.
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>class PDF extends FPDF
+{
+function Header()
+{
+    // Select Arial bold 15
+    $this-&gt;SetFont('Arial','B',15);
+    // Move to the right
+    $this-&gt;Cell(80);
+    // Framed title
+    $this-&gt;Cell(30,10,'Title',1,0,'C');
+    // Line break
+    $this-&gt;Ln(20);
+}
+}</code></pre>
+</div>
+<h2>See also</h2>
+<a href="footer.htm">Footer</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/image.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/image.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/image.htm	(revision 8435)
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Image</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Image</h1>
+<code>Image(<b>string</b> file [, <b>float</b> x [, <b>float</b> y [, <b>float</b> w [, <b>float</b> h [, <b>string</b> type [, <b>mixed</b> link]]]]]])</code>
+<h2>Description</h2>
+Puts an image. The size it will take on the page can be specified in different ways:
+<ul>
+<li>explicit width and height (expressed in user unit or dpi)</li>
+<li>one explicit dimension, the other being calculated automatically in order to keep the original proportions</li>
+<li>no explicit dimension, in which case the image is put at 96 dpi</li>
+</ul>
+Supported formats are JPEG, PNG and GIF. The GD extension is required for GIF.
+<br>
+<br>
+For JPEGs, all flavors are allowed:
+<ul>
+<li>gray scales</li>
+<li>true colors (24 bits)</li>
+<li>CMYK (32 bits)</li>
+</ul>
+For PNGs, are allowed:
+<ul>
+<li>gray scales on at most 8 bits (256 levels)</li>
+<li>indexed colors</li>
+<li>true colors (24 bits)</li>
+</ul>
+For GIFs: in case of an animated GIF, only the first frame is displayed.<br>
+<br>
+Transparency is supported.<br>
+<br>
+The format can be specified explicitly or inferred from the file extension.<br>
+<br>
+It is possible to put a link on the image.<br>
+<br>
+Remark: if an image is used several times, only one copy is embedded in the file.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>file</code></dt>
+<dd>
+Path or URL of the image.
+</dd>
+<dt><code>x</code></dt>
+<dd>
+Abscissa of the upper-left corner. If not specified or equal to <code>null</code>, the current abscissa
+is used.
+</dd>
+<dt><code>y</code></dt>
+<dd>
+Ordinate of the upper-left corner. If not specified or equal to <code>null</code>, the current ordinate
+is used; moreover, a page break is triggered first if necessary (in case automatic page breaking is enabled)
+and, after the call, the current ordinate is moved to the bottom of the image.
+</dd>
+<dt><code>w</code></dt>
+<dd>
+Width of the image in the page. There are three cases:
+<ul>
+<li>If the value is positive, it represents the width in user unit</li>
+<li>If the value is negative, the absolute value represents the horizontal resolution in dpi</li>
+<li>If the value is not specified or equal to zero, it is automatically calculated</li>
+</ul>
+</dd>
+<dt><code>h</code></dt>
+<dd>
+Height of the image in the page. There are three cases:
+<ul>
+<li>If the value is positive, it represents the height in user unit</li>
+<li>If the value is negative, the absolute value represents the vertical resolution in dpi</li>
+<li>If the value is not specified or equal to zero, it is automatically calculated</li>
+</ul>
+</dd>
+<dt><code>type</code></dt>
+<dd>
+Image format. Possible values are (case insensitive): <code>JPG</code>, <code>JPEG</code>, <code>PNG</code> and <code>GIF</code>.
+If not specified, the type is inferred from the file extension.
+</dd>
+<dt><code>link</code></dt>
+<dd>
+URL or identifier returned by AddLink().
+</dd>
+</dl>
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>// Insert a logo in the top-left corner at 300 dpi
+$pdf-&gt;Image('logo.png',10,10,-300);
+// Insert a dynamic image from a URL
+$pdf-&gt;Image('http://chart.googleapis.com/chart?cht=p3&amp;chd=t:60,40&amp;chs=250x100&amp;chl=Hello|World',60,30,90,0,'PNG');</code></pre>
+</div>
+<h2>See also</h2>
+<a href="addlink.htm">AddLink</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/index.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/index.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/index.htm	(revision 8435)
@@ -0,0 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>FPDF 1.82 Reference Manual</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>FPDF 1.82 Reference Manual</h1>
+<a href="__construct.htm">__construct</a> - constructor<br>
+<a href="acceptpagebreak.htm">AcceptPageBreak</a> - accept or not automatic page break<br>
+<a href="addfont.htm">AddFont</a> - add a new font<br>
+<a href="addlink.htm">AddLink</a> - create an internal link<br>
+<a href="addpage.htm">AddPage</a> - add a new page<br>
+<a href="aliasnbpages.htm">AliasNbPages</a> - define an alias for number of pages<br>
+<a href="cell.htm">Cell</a> - print a cell<br>
+<a href="close.htm">Close</a> - terminate the document<br>
+<a href="error.htm">Error</a> - fatal error<br>
+<a href="footer.htm">Footer</a> - page footer<br>
+<a href="getpageheight.htm">GetPageHeight</a> - get current page height<br>
+<a href="getpagewidth.htm">GetPageWidth</a> - get current page width<br>
+<a href="getstringwidth.htm">GetStringWidth</a> - compute string length<br>
+<a href="getx.htm">GetX</a> - get current x position<br>
+<a href="gety.htm">GetY</a> - get current y position<br>
+<a href="header.htm">Header</a> - page header<br>
+<a href="image.htm">Image</a> - output an image<br>
+<a href="line.htm">Line</a> - draw a line<br>
+<a href="link.htm">Link</a> - put a link<br>
+<a href="ln.htm">Ln</a> - line break<br>
+<a href="multicell.htm">MultiCell</a> - print text with line breaks<br>
+<a href="output.htm">Output</a> - save or send the document<br>
+<a href="pageno.htm">PageNo</a> - page number<br>
+<a href="rect.htm">Rect</a> - draw a rectangle<br>
+<a href="setauthor.htm">SetAuthor</a> - set the document author<br>
+<a href="setautopagebreak.htm">SetAutoPageBreak</a> - set the automatic page breaking mode<br>
+<a href="setcompression.htm">SetCompression</a> - turn compression on or off<br>
+<a href="setcreator.htm">SetCreator</a> - set document creator<br>
+<a href="setdisplaymode.htm">SetDisplayMode</a> - set display mode<br>
+<a href="setdrawcolor.htm">SetDrawColor</a> - set drawing color<br>
+<a href="setfillcolor.htm">SetFillColor</a> - set filling color<br>
+<a href="setfont.htm">SetFont</a> - set font<br>
+<a href="setfontsize.htm">SetFontSize</a> - set font size<br>
+<a href="setkeywords.htm">SetKeywords</a> - associate keywords with document<br>
+<a href="setleftmargin.htm">SetLeftMargin</a> - set left margin<br>
+<a href="setlinewidth.htm">SetLineWidth</a> - set line width<br>
+<a href="setlink.htm">SetLink</a> - set internal link destination<br>
+<a href="setmargins.htm">SetMargins</a> - set margins<br>
+<a href="setrightmargin.htm">SetRightMargin</a> - set right margin<br>
+<a href="setsubject.htm">SetSubject</a> - set document subject<br>
+<a href="settextcolor.htm">SetTextColor</a> - set text color<br>
+<a href="settitle.htm">SetTitle</a> - set document title<br>
+<a href="settopmargin.htm">SetTopMargin</a> - set top margin<br>
+<a href="setx.htm">SetX</a> - set current x position<br>
+<a href="setxy.htm">SetXY</a> - set current x and y positions<br>
+<a href="sety.htm">SetY</a> - set current y position and optionally reset x<br>
+<a href="text.htm">Text</a> - print a string<br>
+<a href="write.htm">Write</a> - print flowing text<br>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/line.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/line.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/line.htm	(revision 8435)
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Line</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Line</h1>
+<code>Line(<b>float</b> x1, <b>float</b> y1, <b>float</b> x2, <b>float</b> y2)</code>
+<h2>Description</h2>
+Draws a line between two points.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>x1</code></dt>
+<dd>
+Abscissa of first point.
+</dd>
+<dt><code>y1</code></dt>
+<dd>
+Ordinate of first point.
+</dd>
+<dt><code>x2</code></dt>
+<dd>
+Abscissa of second point.
+</dd>
+<dt><code>y2</code></dt>
+<dd>
+Ordinate of second point.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setlinewidth.htm">SetLineWidth</a>,
+<a href="setdrawcolor.htm">SetDrawColor</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/link.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/link.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/link.htm	(revision 8435)
@@ -0,0 +1,46 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Link</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Link</h1>
+<code>Link(<b>float</b> x, <b>float</b> y, <b>float</b> w, <b>float</b> h, <b>mixed</b> link)</code>
+<h2>Description</h2>
+Puts a link on a rectangular area of the page. Text or image links are generally put via Cell(),
+Write() or Image(), but this method can be useful for instance to define a clickable area inside
+an image.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>x</code></dt>
+<dd>
+Abscissa of the upper-left corner of the rectangle.
+</dd>
+<dt><code>y</code></dt>
+<dd>
+Ordinate of the upper-left corner of the rectangle.
+</dd>
+<dt><code>w</code></dt>
+<dd>
+Width of the rectangle.
+</dd>
+<dt><code>h</code></dt>
+<dd>
+Height of the rectangle.
+</dd>
+<dt><code>link</code></dt>
+<dd>
+URL or identifier returned by AddLink().
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="addlink.htm">AddLink</a>,
+<a href="cell.htm">Cell</a>,
+<a href="write.htm">Write</a>,
+<a href="image.htm">Image</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/ln.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/ln.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/ln.htm	(revision 8435)
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Ln</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Ln</h1>
+<code>Ln([<b>float</b> h])</code>
+<h2>Description</h2>
+Performs a line break. The current abscissa goes back to the left margin and the ordinate
+increases by the amount passed in parameter.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>h</code></dt>
+<dd>
+The height of the break.
+<br>
+By default, the value equals the height of the last printed cell.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="cell.htm">Cell</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/multicell.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/multicell.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/multicell.htm	(revision 8435)
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>MultiCell</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>MultiCell</h1>
+<code>MultiCell(<b>float</b> w, <b>float</b> h, <b>string</b> txt [, <b>mixed</b> border [, <b>string</b> align [, <b>boolean</b> fill]]])</code>
+<h2>Description</h2>
+This method allows printing text with line breaks. They can be automatic (as soon as the
+text reaches the right border of the cell) or explicit (via the \n character). As many cells
+as necessary are output, one below the other.
+<br>
+Text can be aligned, centered or justified. The cell block can be framed and the background
+painted.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>w</code></dt>
+<dd>
+Width of cells. If <code>0</code>, they extend up to the right margin of the page.
+</dd>
+<dt><code>h</code></dt>
+<dd>
+Height of cells.
+</dd>
+<dt><code>txt</code></dt>
+<dd>
+String to print.
+</dd>
+<dt><code>border</code></dt>
+<dd>
+Indicates if borders must be drawn around the cell block. The value can be either a number:
+<ul>
+<li><code>0</code>: no border</li>
+<li><code>1</code>: frame</li>
+</ul>
+or a string containing some or all of the following characters (in any order):
+<ul>
+<li><code>L</code>: left</li>
+<li><code>T</code>: top</li>
+<li><code>R</code>: right</li>
+<li><code>B</code>: bottom</li>
+</ul>
+Default value: <code>0</code>.
+</dd>
+<dt><code>align</code></dt>
+<dd>
+Sets the text alignment. Possible values are:
+<ul>
+<li><code>L</code>: left alignment</li>
+<li><code>C</code>: center</li>
+<li><code>R</code>: right alignment</li>
+<li><code>J</code>: justification (default value)</li>
+</ul>
+</dd>
+<dt><code>fill</code></dt>
+<dd>
+Indicates if the cell background must be painted (<code>true</code>) or transparent (<code>false</code>).
+Default value: <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setfont.htm">SetFont</a>,
+<a href="setdrawcolor.htm">SetDrawColor</a>,
+<a href="setfillcolor.htm">SetFillColor</a>,
+<a href="settextcolor.htm">SetTextColor</a>,
+<a href="setlinewidth.htm">SetLineWidth</a>,
+<a href="cell.htm">Cell</a>,
+<a href="write.htm">Write</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/output.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/output.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/output.htm	(revision 8435)
@@ -0,0 +1,46 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Output</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Output</h1>
+<code><b>string</b> Output([<b>string</b> dest [, <b>string</b> name [, <b>boolean</b> isUTF8]]])</code>
+<h2>Description</h2>
+Send the document to a given destination: browser, file or string. In the case of a browser, the
+PDF viewer may be used or a download may be forced.
+<br>
+The method first calls Close() if necessary to terminate the document.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>dest</code></dt>
+<dd>
+Destination where to send the document. It can be one of the following:
+<ul>
+<li><code>I</code>: send the file inline to the browser. The PDF viewer is used if available.</li>
+<li><code>D</code>: send to the browser and force a file download with the name given by <code>name</code>.</li>
+<li><code>F</code>: save to a local file with the name given by <code>name</code> (may include a path).</li>
+<li><code>S</code>: return the document as a string.</li>
+</ul>
+The default value is <code>I</code>.
+</dd>
+<dt><code>name</code></dt>
+<dd>
+The name of the file. It is ignored in case of destination <code>S</code>.<br>
+The default value is <code>doc.pdf</code>.
+</dd>
+<dt><code>isUTF8</code></dt>
+<dd>
+Indicates if <code>name</code> is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).
+Only used for destinations <code>I</code> and <code>D</code>.<br>
+The default value is <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="close.htm">Close</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/pageno.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/pageno.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/pageno.htm	(revision 8435)
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>PageNo</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>PageNo</h1>
+<code><b>int</b> PageNo()</code>
+<h2>Description</h2>
+Returns the current page number.
+<h2>See also</h2>
+<a href="aliasnbpages.htm">AliasNbPages</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/rect.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/rect.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/rect.htm	(revision 8435)
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Rect</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Rect</h1>
+<code>Rect(<b>float</b> x, <b>float</b> y, <b>float</b> w, <b>float</b> h [, <b>string</b> style])</code>
+<h2>Description</h2>
+Outputs a rectangle. It can be drawn (border only), filled (with no border) or both.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>x</code></dt>
+<dd>
+Abscissa of upper-left corner.
+</dd>
+<dt><code>y</code></dt>
+<dd>
+Ordinate of upper-left corner.
+</dd>
+<dt><code>w</code></dt>
+<dd>
+Width.
+</dd>
+<dt><code>h</code></dt>
+<dd>
+Height.
+</dd>
+<dt><code>style</code></dt>
+<dd>
+Style of rendering. Possible values are:
+<ul>
+<li><code>D</code> or empty string: draw. This is the default value.</li>
+<li><code>F</code>: fill</li>
+<li><code>DF</code> or <code>FD</code>: draw and fill</li>
+</ul>
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setlinewidth.htm">SetLineWidth</a>,
+<a href="setdrawcolor.htm">SetDrawColor</a>,
+<a href="setfillcolor.htm">SetFillColor</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setauthor.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setauthor.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setauthor.htm	(revision 8435)
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetAuthor</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetAuthor</h1>
+<code>SetAuthor(<b>string</b> author [, <b>boolean</b> isUTF8])</code>
+<h2>Description</h2>
+Defines the author of the document.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>author</code></dt>
+<dd>
+The name of the author.
+</dd>
+<dt><code>isUTF8</code></dt>
+<dd>
+Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br>
+Default value: <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setcreator.htm">SetCreator</a>,
+<a href="setkeywords.htm">SetKeywords</a>,
+<a href="setsubject.htm">SetSubject</a>,
+<a href="settitle.htm">SetTitle</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setautopagebreak.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setautopagebreak.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setautopagebreak.htm	(revision 8435)
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetAutoPageBreak</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetAutoPageBreak</h1>
+<code>SetAutoPageBreak(<b>boolean</b> auto [, <b>float</b> margin])</code>
+<h2>Description</h2>
+Enables or disables the automatic page breaking mode. When enabling, the second parameter is
+the distance from the bottom of the page that defines the triggering limit. By default, the
+mode is on and the margin is 2 cm.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>auto</code></dt>
+<dd>
+Boolean indicating if mode should be on or off.
+</dd>
+<dt><code>margin</code></dt>
+<dd>
+Distance from the bottom of the page.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>,
+<a href="acceptpagebreak.htm">AcceptPageBreak</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setcompression.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setcompression.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setcompression.htm	(revision 8435)
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetCompression</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetCompression</h1>
+<code>SetCompression(<b>boolean</b> compress)</code>
+<h2>Description</h2>
+Activates or deactivates page compression. When activated, the internal representation of
+each page is compressed, which leads to a compression ratio of about 2 for the resulting
+document.
+<br>
+Compression is on by default.
+<br>
+<br>
+<strong>Note:</strong> the Zlib extension is required for this feature. If not present, compression
+will be turned off.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>compress</code></dt>
+<dd>
+Boolean indicating if compression must be enabled.
+</dd>
+</dl>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setcreator.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setcreator.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setcreator.htm	(revision 8435)
@@ -0,0 +1,34 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetCreator</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetCreator</h1>
+<code>SetCreator(<b>string</b> creator [, <b>boolean</b> isUTF8])</code>
+<h2>Description</h2>
+Defines the creator of the document. This is typically the name of the application that
+generates the PDF.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>creator</code></dt>
+<dd>
+The name of the creator.
+</dd>
+<dt><code>isUTF8</code></dt>
+<dd>
+Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br>
+Default value: <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setauthor.htm">SetAuthor</a>,
+<a href="setkeywords.htm">SetKeywords</a>,
+<a href="setsubject.htm">SetSubject</a>,
+<a href="settitle.htm">SetTitle</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setdisplaymode.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setdisplaymode.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setdisplaymode.htm	(revision 8435)
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetDisplayMode</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetDisplayMode</h1>
+<code>SetDisplayMode(<b>mixed</b> zoom [, <b>string</b> layout])</code>
+<h2>Description</h2>
+Defines the way the document is to be displayed by the viewer. The zoom level can be set: pages can be
+displayed entirely on screen, occupy the full width of the window, use real size, be scaled by a
+specific zooming factor or use viewer default (configured in the Preferences menu of Adobe Reader).
+The page layout can be specified too: single at once, continuous display, two columns or viewer
+default.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>zoom</code></dt>
+<dd>
+The zoom to use. It can be one of the following string values:
+<ul>
+<li><code>fullpage</code>: displays the entire page on screen</li>
+<li><code>fullwidth</code>: uses maximum width of window</li>
+<li><code>real</code>: uses real size (equivalent to 100% zoom)</li>
+<li><code>default</code>: uses viewer default mode</li>
+</ul>
+or a number indicating the zooming factor to use.
+</dd>
+<dt><code>layout</code></dt>
+<dd>
+The page layout. Possible values are:
+<ul>
+<li><code>single</code>: displays one page at once</li>
+<li><code>continuous</code>: displays pages continuously</li>
+<li><code>two</code>: displays two pages on two columns</li>
+<li><code>default</code>: uses viewer default mode</li>
+</ul>
+Default value is <code>default</code>.
+</dd>
+</dl>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setdrawcolor.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setdrawcolor.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setdrawcolor.htm	(revision 8435)
@@ -0,0 +1,41 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetDrawColor</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetDrawColor</h1>
+<code>SetDrawColor(<b>int</b> r [, <b>int</b> g, <b>int</b> b])</code>
+<h2>Description</h2>
+Defines the color used for all drawing operations (lines, rectangles and cell borders). It
+can be expressed in RGB components or gray scale. The method can be called before the first
+page is created and the value is retained from page to page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>r</code></dt>
+<dd>
+If <code>g</code> et <code>b</code> are given, red component; if not, indicates the gray level.
+Value between 0 and 255.
+</dd>
+<dt><code>g</code></dt>
+<dd>
+Green component (between 0 and 255).
+</dd>
+<dt><code>b</code></dt>
+<dd>
+Blue component (between 0 and 255).
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setfillcolor.htm">SetFillColor</a>,
+<a href="settextcolor.htm">SetTextColor</a>,
+<a href="line.htm">Line</a>,
+<a href="rect.htm">Rect</a>,
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setfillcolor.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setfillcolor.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setfillcolor.htm	(revision 8435)
@@ -0,0 +1,40 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetFillColor</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetFillColor</h1>
+<code>SetFillColor(<b>int</b> r [, <b>int</b> g, <b>int</b> b])</code>
+<h2>Description</h2>
+Defines the color used for all filling operations (filled rectangles and cell backgrounds).
+It can be expressed in RGB components or gray scale. The method can be called before the first
+page is created and the value is retained from page to page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>r</code></dt>
+<dd>
+If <code>g</code> and <code>b</code> are given, red component; if not, indicates the gray level.
+Value between 0 and 255.
+</dd>
+<dt><code>g</code></dt>
+<dd>
+Green component (between 0 and 255).
+</dd>
+<dt><code>b</code></dt>
+<dd>
+Blue component (between 0 and 255).
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setdrawcolor.htm">SetDrawColor</a>,
+<a href="settextcolor.htm">SetTextColor</a>,
+<a href="rect.htm">Rect</a>,
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setfont.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setfont.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setfont.htm	(revision 8435)
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetFont</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetFont</h1>
+<code>SetFont(<b>string</b> family [, <b>string</b> style [, <b>float</b> size]])</code>
+<h2>Description</h2>
+Sets the font used to print character strings. It is mandatory to call this method
+at least once before printing text or the resulting document would not be valid.
+<br>
+The font can be either a standard one or a font added via the AddFont() method. Standard fonts
+use the Windows encoding cp1252 (Western Europe).
+<br>
+The method can be called before the first page is created and the font is kept from page
+to page.
+<br>
+If you just wish to change the current font size, it is simpler to call SetFontSize().
+<br>
+<br>
+<strong>Note:</strong> the font definition files must be accessible. They are searched successively in:
+<ul>
+<li>The directory defined by the <code>FPDF_FONTPATH</code> constant (if this constant is defined)</li>
+<li>The <code>font</code> directory located in the same directory as <code>fpdf.php</code> (if it exists)</li>
+<li>The directories accessible through <code>include()</code></li>
+</ul>
+Example using <code>FPDF_FONTPATH</code>:
+<div class="doc-source">
+<pre><code>define('FPDF_FONTPATH','/home/www/font');
+require('fpdf.php');</code></pre>
+</div>
+If the file corresponding to the requested font is not found, the error "Could not include font
+definition file" is raised.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>family</code></dt>
+<dd>
+Family font. It can be either a name defined by AddFont() or one of the standard families (case
+insensitive):
+<ul>
+<li><code>Courier</code> (fixed-width)</li>
+<li><code>Helvetica</code> or <code>Arial</code> (synonymous; sans serif)</li>
+<li><code>Times</code> (serif)</li>
+<li><code>Symbol</code> (symbolic)</li>
+<li><code>ZapfDingbats</code> (symbolic)</li>
+</ul>
+It is also possible to pass an empty string. In that case, the current family is kept.
+</dd>
+<dt><code>style</code></dt>
+<dd>
+Font style. Possible values are (case insensitive):
+<ul>
+<li>empty string: regular</li>
+<li><code>B</code>: bold</li>
+<li><code>I</code>: italic</li>
+<li><code>U</code>: underline</li>
+</ul>
+or any combination. The default value is regular.
+Bold and italic styles do not apply to <code>Symbol</code> and <code>ZapfDingbats</code>.
+</dd>
+<dt><code>size</code></dt>
+<dd>
+Font size in points.
+<br>
+The default value is the current size. If no size has been specified since the beginning of
+the document, the value taken is 12.
+</dd>
+</dl>
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>// Times regular 12
+$pdf-&gt;SetFont('Times');
+// Arial bold 14
+$pdf-&gt;SetFont('Arial','B',14);
+// Removes bold
+$pdf-&gt;SetFont('');
+// Times bold, italic and underlined 14
+$pdf-&gt;SetFont('Times','BIU');</code></pre>
+</div>
+<h2>See also</h2>
+<a href="addfont.htm">AddFont</a>,
+<a href="setfontsize.htm">SetFontSize</a>,
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>,
+<a href="write.htm">Write</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setfontsize.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setfontsize.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setfontsize.htm	(revision 8435)
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetFontSize</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetFontSize</h1>
+<code>SetFontSize(<b>float</b> size)</code>
+<h2>Description</h2>
+Defines the size of the current font.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>size</code></dt>
+<dd>
+The size (in points).
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setfont.htm">SetFont</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setkeywords.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setkeywords.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setkeywords.htm	(revision 8435)
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetKeywords</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetKeywords</h1>
+<code>SetKeywords(<b>string</b> keywords [, <b>boolean</b> isUTF8])</code>
+<h2>Description</h2>
+Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>keywords</code></dt>
+<dd>
+The list of keywords.
+</dd>
+<dt><code>isUTF8</code></dt>
+<dd>
+Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br>
+Default value: <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setauthor.htm">SetAuthor</a>,
+<a href="setcreator.htm">SetCreator</a>,
+<a href="setsubject.htm">SetSubject</a>,
+<a href="settitle.htm">SetTitle</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setleftmargin.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setleftmargin.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setleftmargin.htm	(revision 8435)
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetLeftMargin</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetLeftMargin</h1>
+<code>SetLeftMargin(<b>float</b> margin)</code>
+<h2>Description</h2>
+Defines the left margin. The method can be called before creating the first page.
+<br>
+If the current abscissa gets out of page, it is brought back to the margin.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>margin</code></dt>
+<dd>
+The margin.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="settopmargin.htm">SetTopMargin</a>,
+<a href="setrightmargin.htm">SetRightMargin</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>,
+<a href="setmargins.htm">SetMargins</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setlinewidth.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setlinewidth.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setlinewidth.htm	(revision 8435)
@@ -0,0 +1,29 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetLineWidth</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetLineWidth</h1>
+<code>SetLineWidth(<b>float</b> width)</code>
+<h2>Description</h2>
+Defines the line width. By default, the value equals 0.2 mm. The method can be called before
+the first page is created and the value is retained from page to page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>width</code></dt>
+<dd>
+The width.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="line.htm">Line</a>,
+<a href="rect.htm">Rect</a>,
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setlink.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setlink.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setlink.htm	(revision 8435)
@@ -0,0 +1,34 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetLink</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetLink</h1>
+<code>SetLink(<b>int</b> link [, <b>float</b> y [, <b>int</b> page]])</code>
+<h2>Description</h2>
+Defines the page and position a link points to.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>link</code></dt>
+<dd>
+The link identifier returned by AddLink().
+</dd>
+<dt><code>y</code></dt>
+<dd>
+Ordinate of target position; <code>-1</code> indicates the current position.
+The default value is <code>0</code> (top of page).
+</dd>
+<dt><code>page</code></dt>
+<dd>
+Number of target page; <code>-1</code> indicates the current page. This is the default value.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="addlink.htm">AddLink</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setmargins.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setmargins.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setmargins.htm	(revision 8435)
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetMargins</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetMargins</h1>
+<code>SetMargins(<b>float</b> left, <b>float</b> top [, <b>float</b> right])</code>
+<h2>Description</h2>
+Defines the left, top and right margins. By default, they equal 1 cm. Call this method to change
+them.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>left</code></dt>
+<dd>
+Left margin.
+</dd>
+<dt><code>top</code></dt>
+<dd>
+Top margin.
+</dd>
+<dt><code>right</code></dt>
+<dd>
+Right margin. Default value is the left one.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setleftmargin.htm">SetLeftMargin</a>,
+<a href="settopmargin.htm">SetTopMargin</a>,
+<a href="setrightmargin.htm">SetRightMargin</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setrightmargin.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setrightmargin.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setrightmargin.htm	(revision 8435)
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetRightMargin</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetRightMargin</h1>
+<code>SetRightMargin(<b>float</b> margin)</code>
+<h2>Description</h2>
+Defines the right margin. The method can be called before creating the first page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>margin</code></dt>
+<dd>
+The margin.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setleftmargin.htm">SetLeftMargin</a>,
+<a href="settopmargin.htm">SetTopMargin</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>,
+<a href="setmargins.htm">SetMargins</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setsubject.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setsubject.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setsubject.htm	(revision 8435)
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetSubject</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetSubject</h1>
+<code>SetSubject(<b>string</b> subject [, <b>boolean</b> isUTF8])</code>
+<h2>Description</h2>
+Defines the subject of the document.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>subject</code></dt>
+<dd>
+The subject.
+</dd>
+<dt><code>isUTF8</code></dt>
+<dd>
+Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br>
+Default value: <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setauthor.htm">SetAuthor</a>,
+<a href="setcreator.htm">SetCreator</a>,
+<a href="setkeywords.htm">SetKeywords</a>,
+<a href="settitle.htm">SetTitle</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/settextcolor.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/settextcolor.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/settextcolor.htm	(revision 8435)
@@ -0,0 +1,40 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetTextColor</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetTextColor</h1>
+<code>SetTextColor(<b>int</b> r [, <b>int</b> g, <b>int</b> b])</code>
+<h2>Description</h2>
+Defines the color used for text. It can be expressed in RGB components or gray scale. The
+method can be called before the first page is created and the value is retained from page to
+page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>r</code></dt>
+<dd>
+If <code>g</code> et <code>b</code> are given, red component; if not, indicates the gray level.
+Value between 0 and 255.
+</dd>
+<dt><code>g</code></dt>
+<dd>
+Green component (between 0 and 255).
+</dd>
+<dt><code>b</code></dt>
+<dd>
+Blue component (between 0 and 255).
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setdrawcolor.htm">SetDrawColor</a>,
+<a href="setfillcolor.htm">SetFillColor</a>,
+<a href="text.htm">Text</a>,
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/settitle.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/settitle.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/settitle.htm	(revision 8435)
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetTitle</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetTitle</h1>
+<code>SetTitle(<b>string</b> title [, <b>boolean</b> isUTF8])</code>
+<h2>Description</h2>
+Defines the title of the document.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>title</code></dt>
+<dd>
+The title.
+</dd>
+<dt><code>isUTF8</code></dt>
+<dd>
+Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br>
+Default value: <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setauthor.htm">SetAuthor</a>,
+<a href="setcreator.htm">SetCreator</a>,
+<a href="setkeywords.htm">SetKeywords</a>,
+<a href="setsubject.htm">SetSubject</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/settopmargin.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/settopmargin.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/settopmargin.htm	(revision 8435)
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetTopMargin</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetTopMargin</h1>
+<code>SetTopMargin(<b>float</b> margin)</code>
+<h2>Description</h2>
+Defines the top margin. The method can be called before creating the first page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>margin</code></dt>
+<dd>
+The margin.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setleftmargin.htm">SetLeftMargin</a>,
+<a href="setrightmargin.htm">SetRightMargin</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>,
+<a href="setmargins.htm">SetMargins</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setx.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setx.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setx.htm	(revision 8435)
@@ -0,0 +1,29 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetX</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetX</h1>
+<code>SetX(<b>float</b> x)</code>
+<h2>Description</h2>
+Defines the abscissa of the current position. If the passed value is negative, it is relative
+to the right of the page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>x</code></dt>
+<dd>
+The value of the abscissa.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="getx.htm">GetX</a>,
+<a href="gety.htm">GetY</a>,
+<a href="sety.htm">SetY</a>,
+<a href="setxy.htm">SetXY</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setxy.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setxy.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/setxy.htm	(revision 8435)
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetXY</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetXY</h1>
+<code>SetXY(<b>float</b> x, <b>float</b> y)</code>
+<h2>Description</h2>
+Defines the abscissa and ordinate of the current position. If the passed values are negative,
+they are relative respectively to the right and bottom of the page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>x</code></dt>
+<dd>
+The value of the abscissa.
+</dd>
+<dt><code>y</code></dt>
+<dd>
+The value of the ordinate.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setx.htm">SetX</a>,
+<a href="sety.htm">SetY</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/sety.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/sety.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/sety.htm	(revision 8435)
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetY</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetY</h1>
+<code>SetY(<b>float</b> y [, <b>boolean</b> resetX])</code>
+<h2>Description</h2>
+Sets the ordinate and optionally moves the current abscissa back to the left margin. If the value
+is negative, it is relative to the bottom of the page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>y</code></dt>
+<dd>
+The value of the ordinate.
+</dd>
+<dt><code>resetX</code></dt>
+<dd>
+Whether to reset the abscissa. Default value: <code>true</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="getx.htm">GetX</a>,
+<a href="gety.htm">GetY</a>,
+<a href="setx.htm">SetX</a>,
+<a href="setxy.htm">SetXY</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/text.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/text.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/text.htm	(revision 8435)
@@ -0,0 +1,39 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Text</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Text</h1>
+<code>Text(<b>float</b> x, <b>float</b> y, <b>string</b> txt)</code>
+<h2>Description</h2>
+Prints a character string. The origin is on the left of the first character, on the baseline.
+This method allows to place a string precisely on the page, but it is usually easier to use
+Cell(), MultiCell() or Write() which are the standard methods to print text.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>x</code></dt>
+<dd>
+Abscissa of the origin.
+</dd>
+<dt><code>y</code></dt>
+<dd>
+Ordinate of the origin.
+</dd>
+<dt><code>txt</code></dt>
+<dd>
+String to print.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setfont.htm">SetFont</a>,
+<a href="settextcolor.htm">SetTextColor</a>,
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>,
+<a href="write.htm">Write</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/write.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/write.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/doc/write.htm	(revision 8435)
@@ -0,0 +1,51 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Write</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Write</h1>
+<code>Write(<b>float</b> h, <b>string</b> txt [, <b>mixed</b> link])</code>
+<h2>Description</h2>
+This method prints text from the current position. When the right margin is reached (or the \n
+character is met) a line break occurs and text continues from the left margin. Upon method exit,
+the current position is left just at the end of the text.
+<br>
+It is possible to put a link on the text.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>h</code></dt>
+<dd>
+Line height.
+</dd>
+<dt><code>txt</code></dt>
+<dd>
+String to print.
+</dd>
+<dt><code>link</code></dt>
+<dd>
+URL or identifier returned by AddLink().
+</dd>
+</dl>
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>// Begin with regular font
+$pdf-&gt;SetFont('Arial','',14);
+$pdf-&gt;Write(5,'Visit ');
+// Then put a blue underlined link
+$pdf-&gt;SetTextColor(0,0,255);
+$pdf-&gt;SetFont('','U');
+$pdf-&gt;Write(5,'www.fpdf.org','http://www.fpdf.org');</code></pre>
+</div>
+<h2>See also</h2>
+<a href="setfont.htm">SetFont</a>,
+<a href="settextcolor.htm">SetTextColor</a>,
+<a href="addlink.htm">AddLink</a>,
+<a href="multicell.htm">MultiCell</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/courier.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/courier.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/courier.php	(revision 8435)
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+	$cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/courierb.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/courierb.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/courierb.php	(revision 8435)
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier-Bold';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+	$cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/courierbi.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/courierbi.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/courierbi.php	(revision 8435)
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier-BoldOblique';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+	$cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/courieri.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/courieri.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/courieri.php	(revision 8435)
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier-Oblique';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+	$cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/helvetica.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/helvetica.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/helvetica.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+	'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
+	chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
+	chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/helveticab.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/helveticab.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/helveticab.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica-Bold';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+	'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+	'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
+	chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
+	chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/helveticabi.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/helveticabi.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/helveticabi.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica-BoldOblique';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+	'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+	'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
+	chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
+	chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/helveticai.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/helveticai.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/helveticai.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica-Oblique';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+	'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
+	chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
+	chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/symbol.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/symbol.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/symbol.php	(revision 8435)
@@ -0,0 +1,20 @@
+<?php
+$type = 'Core';
+$name = 'Symbol';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549,
+	','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722,
+	'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768,
+	'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576,
+	'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0,
+	chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
+	chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603,
+	chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768,
+	chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042,
+	chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329,
+	chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0);
+$uv = array(32=>160,33=>33,34=>8704,35=>35,36=>8707,37=>array(37,2),39=>8715,40=>array(40,2),42=>8727,43=>array(43,2),45=>8722,46=>array(46,18),64=>8773,65=>array(913,2),67=>935,68=>array(916,2),70=>934,71=>915,72=>919,73=>921,74=>977,75=>array(922,4),79=>array(927,2),81=>920,82=>929,83=>array(931,3),86=>962,87=>937,88=>926,89=>936,90=>918,91=>91,92=>8756,93=>93,94=>8869,95=>95,96=>63717,97=>array(945,2),99=>967,100=>array(948,2),102=>966,103=>947,104=>951,105=>953,106=>981,107=>array(954,4),111=>array(959,2),113=>952,114=>961,115=>array(963,3),118=>982,119=>969,120=>958,121=>968,122=>950,123=>array(123,3),126=>8764,160=>8364,161=>978,162=>8242,163=>8804,164=>8725,165=>8734,166=>402,167=>9827,168=>9830,169=>9829,170=>9824,171=>8596,172=>array(8592,4),176=>array(176,2),178=>8243,179=>8805,180=>215,181=>8733,182=>8706,183=>8226,184=>247,185=>array(8800,2),187=>8776,188=>8230,189=>array(63718,2),191=>8629,192=>8501,193=>8465,194=>8476,195=>8472,196=>8855,197=>8853,198=>8709,199=>array(8745,2),201=>8835,202=>8839,203=>8836,204=>8834,205=>8838,206=>array(8712,2),208=>8736,209=>8711,210=>63194,211=>63193,212=>63195,213=>8719,214=>8730,215=>8901,216=>172,217=>array(8743,2),219=>8660,220=>array(8656,4),224=>9674,225=>9001,226=>array(63720,3),229=>8721,230=>array(63723,10),241=>9002,242=>8747,243=>8992,244=>63733,245=>8993,246=>array(63734,9));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/times.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/times.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/times.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-Roman';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
+	'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
+	'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
+	'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+	chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
+	chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
+	chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+	chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
+	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/timesb.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/timesb.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/timesb.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-Bold';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722,
+	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000,
+	'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833,
+	'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+	chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333,
+	chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
+	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/timesbi.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/timesbi.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/timesbi.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-BoldItalic';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667,
+	'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889,
+	'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
+	'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+	chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333,
+	chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+	chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
+	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/timesi.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/timesi.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/timesi.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-Italic';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611,
+	'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833,
+	'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722,
+	'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+	chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980,
+	chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333,
+	chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611,
+	chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
+	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/zapfdingbats.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/zapfdingbats.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/font/zapfdingbats.php	(revision 8435)
@@ -0,0 +1,20 @@
+<?php
+$type = 'Core';
+$name = 'ZapfDingbats';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0,
+	chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939,
+	','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692,
+	'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776,
+	'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873,
+	'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317,
+	chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
+	chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788,
+	chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788,
+	chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918,
+	chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874,
+	chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0);
+$uv = array(32=>32,33=>array(9985,4),37=>9742,38=>array(9990,4),42=>9755,43=>9758,44=>array(9996,28),72=>9733,73=>array(10025,35),108=>9679,109=>10061,110=>9632,111=>array(10063,4),115=>9650,116=>9660,117=>9670,118=>10070,119=>9687,120=>array(10072,7),128=>array(10088,14),161=>array(10081,7),168=>9827,169=>9830,170=>9829,171=>9824,172=>array(9312,10),182=>array(10102,31),213=>8594,214=>array(8596,2),216=>array(10136,24),241=>array(10161,14));
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/fpdf.css
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/fpdf.css	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/fpdf.css	(revision 8435)
@@ -0,0 +1,21 @@
+body {font-family:"Times New Roman",serif}
+h1 {font:bold 135% Arial,sans-serif; color:#4000A0; margin-bottom:0.9em}
+h2 {font:bold 95% Arial,sans-serif; color:#900000; margin-top:1.5em; margin-bottom:1em}
+dl.param dt {text-decoration:underline}
+dl.param dd {margin-top:1em; margin-bottom:1em}
+dl.param ul {margin-top:1em; margin-bottom:1em}
+tt, code, kbd {font-family:"Courier New",Courier,monospace; font-size:82%}
+div.source {margin-top:1.4em; margin-bottom:1.3em}
+div.source pre {display:table; border:1px solid #24246A; width:100%; margin:0em; font-family:inherit; font-size:100%}
+div.source code {display:block; border:1px solid #C5C5EC; background-color:#F0F5FF; padding:6px; color:#000000}
+div.doc-source {margin-top:1.4em; margin-bottom:1.3em}
+div.doc-source pre {display:table; width:100%; margin:0em; font-family:inherit; font-size:100%}
+div.doc-source code {display:block; background-color:#E0E0E0; padding:4px}
+.kw {color:#000080; font-weight:bold}
+.str {color:#CC0000}
+.cmt {color:#008000}
+p.demo {text-align:center; margin-top:-0.9em}
+a.demo {text-decoration:none; font-weight:bold; color:#0000CC}
+a.demo:link {text-decoration:none; font-weight:bold; color:#0000CC}
+a.demo:hover {text-decoration:none; font-weight:bold; color:#0000FF}
+a.demo:active {text-decoration:none; font-weight:bold; color:#0000FF}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/fpdf.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/fpdf.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/fpdf.php	(revision 8435)
@@ -0,0 +1,1895 @@
+<?php
+/*******************************************************************************
+* FPDF                                                                         *
+*                                                                              *
+* Version: 1.82                                                                *
+* Date:    2019-12-07                                                          *
+* Author:  Olivier PLATHEY                                                     *
+*******************************************************************************/
+
+define('FPDF_VERSION','1.82');
+
+class FPDF
+{
+protected $page;               // current page number
+protected $n;                  // current object number
+protected $offsets;            // array of object offsets
+protected $buffer;             // buffer holding in-memory PDF
+protected $pages;              // array containing pages
+protected $state;              // current document state
+protected $compress;           // compression flag
+protected $k;                  // scale factor (number of points in user unit)
+protected $DefOrientation;     // default orientation
+protected $CurOrientation;     // current orientation
+protected $StdPageSizes;       // standard page sizes
+protected $DefPageSize;        // default page size
+protected $CurPageSize;        // current page size
+protected $CurRotation;        // current page rotation
+protected $PageInfo;           // page-related data
+protected $wPt, $hPt;          // dimensions of current page in points
+protected $w, $h;              // dimensions of current page in user unit
+protected $lMargin;            // left margin
+protected $tMargin;            // top margin
+protected $rMargin;            // right margin
+protected $bMargin;            // page break margin
+protected $cMargin;            // cell margin
+protected $x, $y;              // current position in user unit
+protected $lasth;              // height of last printed cell
+protected $LineWidth;          // line width in user unit
+protected $fontpath;           // path containing fonts
+protected $CoreFonts;          // array of core font names
+protected $fonts;              // array of used fonts
+protected $FontFiles;          // array of font files
+protected $encodings;          // array of encodings
+protected $cmaps;              // array of ToUnicode CMaps
+protected $FontFamily;         // current font family
+protected $FontStyle;          // current font style
+protected $underline;          // underlining flag
+protected $CurrentFont;        // current font info
+protected $FontSizePt;         // current font size in points
+protected $FontSize;           // current font size in user unit
+protected $DrawColor;          // commands for drawing color
+protected $FillColor;          // commands for filling color
+protected $TextColor;          // commands for text color
+protected $ColorFlag;          // indicates whether fill and text colors are different
+protected $WithAlpha;          // indicates whether alpha channel is used
+protected $ws;                 // word spacing
+protected $images;             // array of used images
+protected $PageLinks;          // array of links in pages
+protected $links;              // array of internal links
+protected $AutoPageBreak;      // automatic page breaking
+protected $PageBreakTrigger;   // threshold used to trigger page breaks
+protected $InHeader;           // flag set when processing header
+protected $InFooter;           // flag set when processing footer
+protected $AliasNbPages;       // alias for total number of pages
+protected $ZoomMode;           // zoom display mode
+protected $LayoutMode;         // layout display mode
+protected $metadata;           // document properties
+protected $PDFVersion;         // PDF version number
+
+/*******************************************************************************
+*                               Public methods                                 *
+*******************************************************************************/
+
+function __construct($orientation='P', $unit='mm', $size='A4')
+{
+	// Some checks
+	$this->_dochecks();
+	// Initialization of properties
+	$this->state = 0;
+	$this->page = 0;
+	$this->n = 2;
+	$this->buffer = '';
+	$this->pages = array();
+	$this->PageInfo = array();
+	$this->fonts = array();
+	$this->FontFiles = array();
+	$this->encodings = array();
+	$this->cmaps = array();
+	$this->images = array();
+	$this->links = array();
+	$this->InHeader = false;
+	$this->InFooter = false;
+	$this->lasth = 0;
+	$this->FontFamily = '';
+	$this->FontStyle = '';
+	$this->FontSizePt = 12;
+	$this->underline = false;
+	$this->DrawColor = '0 G';
+	$this->FillColor = '0 g';
+	$this->TextColor = '0 g';
+	$this->ColorFlag = false;
+	$this->WithAlpha = false;
+	$this->ws = 0;
+	// Font path
+	if(defined('FPDF_FONTPATH'))
+	{
+		$this->fontpath = FPDF_FONTPATH;
+		if(substr($this->fontpath,-1)!='/' && substr($this->fontpath,-1)!='\\')
+			$this->fontpath .= '/';
+	}
+	elseif(is_dir(dirname(__FILE__).'/font'))
+		$this->fontpath = dirname(__FILE__).'/font/';
+	else
+		$this->fontpath = '';
+	// Core fonts
+	$this->CoreFonts = array('courier', 'helvetica', 'times', 'symbol', 'zapfdingbats');
+	// Scale factor
+	if($unit=='pt')
+		$this->k = 1;
+	elseif($unit=='mm')
+		$this->k = 72/25.4;
+	elseif($unit=='cm')
+		$this->k = 72/2.54;
+	elseif($unit=='in')
+		$this->k = 72;
+	else
+		$this->Error('Incorrect unit: '.$unit);
+	// Page sizes
+	$this->StdPageSizes = array('a3'=>array(841.89,1190.55), 'a4'=>array(595.28,841.89), 'a5'=>array(420.94,595.28),
+		'letter'=>array(612,792), 'legal'=>array(612,1008));
+	$size = $this->_getpagesize($size);
+	$this->DefPageSize = $size;
+	$this->CurPageSize = $size;
+	// Page orientation
+	$orientation = strtolower($orientation);
+	if($orientation=='p' || $orientation=='portrait')
+	{
+		$this->DefOrientation = 'P';
+		$this->w = $size[0];
+		$this->h = $size[1];
+	}
+	elseif($orientation=='l' || $orientation=='landscape')
+	{
+		$this->DefOrientation = 'L';
+		$this->w = $size[1];
+		$this->h = $size[0];
+	}
+	else
+		$this->Error('Incorrect orientation: '.$orientation);
+	$this->CurOrientation = $this->DefOrientation;
+	$this->wPt = $this->w*$this->k;
+	$this->hPt = $this->h*$this->k;
+	// Page rotation
+	$this->CurRotation = 0;
+	// Page margins (1 cm)
+	$margin = 28.35/$this->k;
+	$this->SetMargins($margin,$margin);
+	// Interior cell margin (1 mm)
+	$this->cMargin = $margin/10;
+	// Line width (0.2 mm)
+	$this->LineWidth = .567/$this->k;
+	// Automatic page break
+	$this->SetAutoPageBreak(true,2*$margin);
+	// Default display mode
+	$this->SetDisplayMode('default');
+	// Enable compression
+	$this->SetCompression(true);
+	// Set default PDF version number
+	$this->PDFVersion = '1.3';
+}
+
+function SetMargins($left, $top, $right=null)
+{
+	// Set left, top and right margins
+	$this->lMargin = $left;
+	$this->tMargin = $top;
+	if($right===null)
+		$right = $left;
+	$this->rMargin = $right;
+}
+
+function SetLeftMargin($margin)
+{
+	// Set left margin
+	$this->lMargin = $margin;
+	if($this->page>0 && $this->x<$margin)
+		$this->x = $margin;
+}
+
+function SetTopMargin($margin)
+{
+	// Set top margin
+	$this->tMargin = $margin;
+}
+
+function SetRightMargin($margin)
+{
+	// Set right margin
+	$this->rMargin = $margin;
+}
+
+function SetAutoPageBreak($auto, $margin=0)
+{
+	// Set auto page break mode and triggering margin
+	$this->AutoPageBreak = $auto;
+	$this->bMargin = $margin;
+	$this->PageBreakTrigger = $this->h-$margin;
+}
+
+function SetDisplayMode($zoom, $layout='default')
+{
+	// Set display mode in viewer
+	if($zoom=='fullpage' || $zoom=='fullwidth' || $zoom=='real' || $zoom=='default' || !is_string($zoom))
+		$this->ZoomMode = $zoom;
+	else
+		$this->Error('Incorrect zoom display mode: '.$zoom);
+	if($layout=='single' || $layout=='continuous' || $layout=='two' || $layout=='default')
+		$this->LayoutMode = $layout;
+	else
+		$this->Error('Incorrect layout display mode: '.$layout);
+}
+
+function SetCompression($compress)
+{
+	// Set page compression
+	if(function_exists('gzcompress'))
+		$this->compress = $compress;
+	else
+		$this->compress = false;
+}
+
+function SetTitle($title, $isUTF8=false)
+{
+	// Title of document
+	$this->metadata['Title'] = $isUTF8 ? $title : utf8_encode($title);
+}
+
+function SetAuthor($author, $isUTF8=false)
+{
+	// Author of document
+	$this->metadata['Author'] = $isUTF8 ? $author : utf8_encode($author);
+}
+
+function SetSubject($subject, $isUTF8=false)
+{
+	// Subject of document
+	$this->metadata['Subject'] = $isUTF8 ? $subject : utf8_encode($subject);
+}
+
+function SetKeywords($keywords, $isUTF8=false)
+{
+	// Keywords of document
+	$this->metadata['Keywords'] = $isUTF8 ? $keywords : utf8_encode($keywords);
+}
+
+function SetCreator($creator, $isUTF8=false)
+{
+	// Creator of document
+	$this->metadata['Creator'] = $isUTF8 ? $creator : utf8_encode($creator);
+}
+
+function AliasNbPages($alias='{nb}')
+{
+	// Define an alias for total number of pages
+	$this->AliasNbPages = $alias;
+}
+
+function Error($msg)
+{
+	// Fatal error
+	throw new Exception('FPDF error: '.$msg);
+}
+
+function Close()
+{
+	// Terminate document
+	if($this->state==3)
+		return;
+	if($this->page==0)
+		$this->AddPage();
+	// Page footer
+	$this->InFooter = true;
+	$this->Footer();
+	$this->InFooter = false;
+	// Close page
+	$this->_endpage();
+	// Close document
+	$this->_enddoc();
+}
+
+function AddPage($orientation='', $size='', $rotation=0)
+{
+	// Start a new page
+	if($this->state==3)
+		$this->Error('The document is closed');
+	$family = $this->FontFamily;
+	$style = $this->FontStyle.($this->underline ? 'U' : '');
+	$fontsize = $this->FontSizePt;
+	$lw = $this->LineWidth;
+	$dc = $this->DrawColor;
+	$fc = $this->FillColor;
+	$tc = $this->TextColor;
+	$cf = $this->ColorFlag;
+	if($this->page>0)
+	{
+		// Page footer
+		$this->InFooter = true;
+		$this->Footer();
+		$this->InFooter = false;
+		// Close page
+		$this->_endpage();
+	}
+	// Start new page
+	$this->_beginpage($orientation,$size,$rotation);
+	// Set line cap style to square
+	$this->_out('2 J');
+	// Set line width
+	$this->LineWidth = $lw;
+	$this->_out(sprintf('%.2F w',$lw*$this->k));
+	// Set font
+	if($family)
+		$this->SetFont($family,$style,$fontsize);
+	// Set colors
+	$this->DrawColor = $dc;
+	if($dc!='0 G')
+		$this->_out($dc);
+	$this->FillColor = $fc;
+	if($fc!='0 g')
+		$this->_out($fc);
+	$this->TextColor = $tc;
+	$this->ColorFlag = $cf;
+	// Page header
+	$this->InHeader = true;
+	$this->Header();
+	$this->InHeader = false;
+	// Restore line width
+	if($this->LineWidth!=$lw)
+	{
+		$this->LineWidth = $lw;
+		$this->_out(sprintf('%.2F w',$lw*$this->k));
+	}
+	// Restore font
+	if($family)
+		$this->SetFont($family,$style,$fontsize);
+	// Restore colors
+	if($this->DrawColor!=$dc)
+	{
+		$this->DrawColor = $dc;
+		$this->_out($dc);
+	}
+	if($this->FillColor!=$fc)
+	{
+		$this->FillColor = $fc;
+		$this->_out($fc);
+	}
+	$this->TextColor = $tc;
+	$this->ColorFlag = $cf;
+}
+
+function Header()
+{
+	// To be implemented in your own inherited class
+}
+
+function Footer()
+{
+	// To be implemented in your own inherited class
+}
+
+function PageNo()
+{
+	// Get current page number
+	return $this->page;
+}
+
+function SetDrawColor($r, $g=null, $b=null)
+{
+	// Set color for all stroking operations
+	if(($r==0 && $g==0 && $b==0) || $g===null)
+		$this->DrawColor = sprintf('%.3F G',$r/255);
+	else
+		$this->DrawColor = sprintf('%.3F %.3F %.3F RG',$r/255,$g/255,$b/255);
+	if($this->page>0)
+		$this->_out($this->DrawColor);
+}
+
+function SetFillColor($r, $g=null, $b=null)
+{
+	// Set color for all filling operations
+	if(($r==0 && $g==0 && $b==0) || $g===null)
+		$this->FillColor = sprintf('%.3F g',$r/255);
+	else
+		$this->FillColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255);
+	$this->ColorFlag = ($this->FillColor!=$this->TextColor);
+	if($this->page>0)
+		$this->_out($this->FillColor);
+}
+
+function SetTextColor($r, $g=null, $b=null)
+{
+	// Set color for text
+	if(($r==0 && $g==0 && $b==0) || $g===null)
+		$this->TextColor = sprintf('%.3F g',$r/255);
+	else
+		$this->TextColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255);
+	$this->ColorFlag = ($this->FillColor!=$this->TextColor);
+}
+
+function GetStringWidth($s)
+{
+	// Get width of a string in the current font
+	$s = (string)$s;
+	$cw = &$this->CurrentFont['cw'];
+	$w = 0;
+	$l = strlen($s);
+	for($i=0;$i<$l;$i++)
+		$w += $cw[$s[$i]];
+	return $w*$this->FontSize/1000;
+}
+
+function SetLineWidth($width)
+{
+	// Set line width
+	$this->LineWidth = $width;
+	if($this->page>0)
+		$this->_out(sprintf('%.2F w',$width*$this->k));
+}
+
+function Line($x1, $y1, $x2, $y2)
+{
+	// Draw a line
+	$this->_out(sprintf('%.2F %.2F m %.2F %.2F l S',$x1*$this->k,($this->h-$y1)*$this->k,$x2*$this->k,($this->h-$y2)*$this->k));
+}
+
+function Rect($x, $y, $w, $h, $style='')
+{
+	// Draw a rectangle
+	if($style=='F')
+		$op = 'f';
+	elseif($style=='FD' || $style=='DF')
+		$op = 'B';
+	else
+		$op = 'S';
+	$this->_out(sprintf('%.2F %.2F %.2F %.2F re %s',$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k,$op));
+}
+
+function AddFont($family, $style='', $file='')
+{
+	// Add a TrueType, OpenType or Type1 font
+	$family = strtolower($family);
+	if($file=='')
+		$file = str_replace(' ','',$family).strtolower($style).'.php';
+	$style = strtoupper($style);
+	if($style=='IB')
+		$style = 'BI';
+	$fontkey = $family.$style;
+	if(isset($this->fonts[$fontkey]))
+		return;
+	$info = $this->_loadfont($file);
+	$info['i'] = count($this->fonts)+1;
+	if(!empty($info['file']))
+	{
+		// Embedded font
+		if($info['type']=='TrueType')
+			$this->FontFiles[$info['file']] = array('length1'=>$info['originalsize']);
+		else
+			$this->FontFiles[$info['file']] = array('length1'=>$info['size1'], 'length2'=>$info['size2']);
+	}
+	$this->fonts[$fontkey] = $info;
+}
+
+function SetFont($family, $style='', $size=0)
+{
+	// Select a font; size given in points
+	if($family=='')
+		$family = $this->FontFamily;
+	else
+		$family = strtolower($family);
+	$style = strtoupper($style);
+	if(strpos($style,'U')!==false)
+	{
+		$this->underline = true;
+		$style = str_replace('U','',$style);
+	}
+	else
+		$this->underline = false;
+	if($style=='IB')
+		$style = 'BI';
+	if($size==0)
+		$size = $this->FontSizePt;
+	// Test if font is already selected
+	if($this->FontFamily==$family && $this->FontStyle==$style && $this->FontSizePt==$size)
+		return;
+	// Test if font is already loaded
+	$fontkey = $family.$style;
+	if(!isset($this->fonts[$fontkey]))
+	{
+		// Test if one of the core fonts
+		if($family=='arial')
+			$family = 'helvetica';
+		if(in_array($family,$this->CoreFonts))
+		{
+			if($family=='symbol' || $family=='zapfdingbats')
+				$style = '';
+			$fontkey = $family.$style;
+			if(!isset($this->fonts[$fontkey]))
+				$this->AddFont($family,$style);
+		}
+		else
+			$this->Error('Undefined font: '.$family.' '.$style);
+	}
+	// Select it
+	$this->FontFamily = $family;
+	$this->FontStyle = $style;
+	$this->FontSizePt = $size;
+	$this->FontSize = $size/$this->k;
+	$this->CurrentFont = &$this->fonts[$fontkey];
+	if($this->page>0)
+		$this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt));
+}
+
+function SetFontSize($size)
+{
+	// Set font size in points
+	if($this->FontSizePt==$size)
+		return;
+	$this->FontSizePt = $size;
+	$this->FontSize = $size/$this->k;
+	if($this->page>0)
+		$this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt));
+}
+
+function AddLink()
+{
+	// Create a new internal link
+	$n = count($this->links)+1;
+	$this->links[$n] = array(0, 0);
+	return $n;
+}
+
+function SetLink($link, $y=0, $page=-1)
+{
+	// Set destination of internal link
+	if($y==-1)
+		$y = $this->y;
+	if($page==-1)
+		$page = $this->page;
+	$this->links[$link] = array($page, $y);
+}
+
+function Link($x, $y, $w, $h, $link)
+{
+	// Put a link on the page
+	$this->PageLinks[$this->page][] = array($x*$this->k, $this->hPt-$y*$this->k, $w*$this->k, $h*$this->k, $link);
+}
+
+function Text($x, $y, $txt)
+{
+	// Output a string
+	if(!isset($this->CurrentFont))
+		$this->Error('No font has been set');
+	$s = sprintf('BT %.2F %.2F Td (%s) Tj ET',$x*$this->k,($this->h-$y)*$this->k,$this->_escape($txt));
+	if($this->underline && $txt!='')
+		$s .= ' '.$this->_dounderline($x,$y,$txt);
+	if($this->ColorFlag)
+		$s = 'q '.$this->TextColor.' '.$s.' Q';
+	$this->_out($s);
+}
+
+function AcceptPageBreak()
+{
+	// Accept automatic page break or not
+	return $this->AutoPageBreak;
+}
+
+function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='')
+{
+	// Output a cell
+	$k = $this->k;
+	if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
+	{
+		// Automatic page break
+		$x = $this->x;
+		$ws = $this->ws;
+		if($ws>0)
+		{
+			$this->ws = 0;
+			$this->_out('0 Tw');
+		}
+		$this->AddPage($this->CurOrientation,$this->CurPageSize,$this->CurRotation);
+		$this->x = $x;
+		if($ws>0)
+		{
+			$this->ws = $ws;
+			$this->_out(sprintf('%.3F Tw',$ws*$k));
+		}
+	}
+	if($w==0)
+		$w = $this->w-$this->rMargin-$this->x;
+	$s = '';
+	if($fill || $border==1)
+	{
+		if($fill)
+			$op = ($border==1) ? 'B' : 'f';
+		else
+			$op = 'S';
+		$s = sprintf('%.2F %.2F %.2F %.2F re %s ',$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op);
+	}
+	if(is_string($border))
+	{
+		$x = $this->x;
+		$y = $this->y;
+		if(strpos($border,'L')!==false)
+			$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k);
+		if(strpos($border,'T')!==false)
+			$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k);
+		if(strpos($border,'R')!==false)
+			$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
+		if(strpos($border,'B')!==false)
+			$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
+	}
+	if($txt!=='')
+	{
+		if(!isset($this->CurrentFont))
+			$this->Error('No font has been set');
+		if($align=='R')
+			$dx = $w-$this->cMargin-$this->GetStringWidth($txt);
+		elseif($align=='C')
+			$dx = ($w-$this->GetStringWidth($txt))/2;
+		else
+			$dx = $this->cMargin;
+		if($this->ColorFlag)
+			$s .= 'q '.$this->TextColor.' ';
+		$s .= sprintf('BT %.2F %.2F Td (%s) Tj ET',($this->x+$dx)*$k,($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,$this->_escape($txt));
+		if($this->underline)
+			$s .= ' '.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt);
+		if($this->ColorFlag)
+			$s .= ' Q';
+		if($link)
+			$this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$this->GetStringWidth($txt),$this->FontSize,$link);
+	}
+	if($s)
+		$this->_out($s);
+	$this->lasth = $h;
+	if($ln>0)
+	{
+		// Go to next line
+		$this->y += $h;
+		if($ln==1)
+			$this->x = $this->lMargin;
+	}
+	else
+		$this->x += $w;
+}
+
+function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false)
+{
+	// Output text with automatic or explicit line breaks
+	if(!isset($this->CurrentFont))
+		$this->Error('No font has been set');
+	$cw = &$this->CurrentFont['cw'];
+	if($w==0)
+		$w = $this->w-$this->rMargin-$this->x;
+	$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
+	$s = str_replace("\r",'',$txt);
+	$nb = strlen($s);
+	if($nb>0 && $s[$nb-1]=="\n")
+		$nb--;
+	$b = 0;
+	if($border)
+	{
+		if($border==1)
+		{
+			$border = 'LTRB';
+			$b = 'LRT';
+			$b2 = 'LR';
+		}
+		else
+		{
+			$b2 = '';
+			if(strpos($border,'L')!==false)
+				$b2 .= 'L';
+			if(strpos($border,'R')!==false)
+				$b2 .= 'R';
+			$b = (strpos($border,'T')!==false) ? $b2.'T' : $b2;
+		}
+	}
+	$sep = -1;
+	$i = 0;
+	$j = 0;
+	$l = 0;
+	$ns = 0;
+	$nl = 1;
+	while($i<$nb)
+	{
+		// Get next character
+		$c = $s[$i];
+		if($c=="\n")
+		{
+			// Explicit line break
+			if($this->ws>0)
+			{
+				$this->ws = 0;
+				$this->_out('0 Tw');
+			}
+			$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
+			$i++;
+			$sep = -1;
+			$j = $i;
+			$l = 0;
+			$ns = 0;
+			$nl++;
+			if($border && $nl==2)
+				$b = $b2;
+			continue;
+		}
+		if($c==' ')
+		{
+			$sep = $i;
+			$ls = $l;
+			$ns++;
+		}
+		$l += $cw[$c];
+		if($l>$wmax)
+		{
+			// Automatic line break
+			if($sep==-1)
+			{
+				if($i==$j)
+					$i++;
+				if($this->ws>0)
+				{
+					$this->ws = 0;
+					$this->_out('0 Tw');
+				}
+				$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
+			}
+			else
+			{
+				if($align=='J')
+				{
+					$this->ws = ($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0;
+					$this->_out(sprintf('%.3F Tw',$this->ws*$this->k));
+				}
+				$this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill);
+				$i = $sep+1;
+			}
+			$sep = -1;
+			$j = $i;
+			$l = 0;
+			$ns = 0;
+			$nl++;
+			if($border && $nl==2)
+				$b = $b2;
+		}
+		else
+			$i++;
+	}
+	// Last chunk
+	if($this->ws>0)
+	{
+		$this->ws = 0;
+		$this->_out('0 Tw');
+	}
+	if($border && strpos($border,'B')!==false)
+		$b .= 'B';
+	$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
+	$this->x = $this->lMargin;
+}
+
+function Write($h, $txt, $link='')
+{
+	// Output text in flowing mode
+	if(!isset($this->CurrentFont))
+		$this->Error('No font has been set');
+	$cw = &$this->CurrentFont['cw'];
+	$w = $this->w-$this->rMargin-$this->x;
+	$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
+	$s = str_replace("\r",'',$txt);
+	$nb = strlen($s);
+	$sep = -1;
+	$i = 0;
+	$j = 0;
+	$l = 0;
+	$nl = 1;
+	while($i<$nb)
+	{
+		// Get next character
+		$c = $s[$i];
+		if($c=="\n")
+		{
+			// Explicit line break
+			$this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',false,$link);
+			$i++;
+			$sep = -1;
+			$j = $i;
+			$l = 0;
+			if($nl==1)
+			{
+				$this->x = $this->lMargin;
+				$w = $this->w-$this->rMargin-$this->x;
+				$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
+			}
+			$nl++;
+			continue;
+		}
+		if($c==' ')
+			$sep = $i;
+		$l += $cw[$c];
+		if($l>$wmax)
+		{
+			// Automatic line break
+			if($sep==-1)
+			{
+				if($this->x>$this->lMargin)
+				{
+					// Move to next line
+					$this->x = $this->lMargin;
+					$this->y += $h;
+					$w = $this->w-$this->rMargin-$this->x;
+					$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
+					$i++;
+					$nl++;
+					continue;
+				}
+				if($i==$j)
+					$i++;
+				$this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',false,$link);
+			}
+			else
+			{
+				$this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',false,$link);
+				$i = $sep+1;
+			}
+			$sep = -1;
+			$j = $i;
+			$l = 0;
+			if($nl==1)
+			{
+				$this->x = $this->lMargin;
+				$w = $this->w-$this->rMargin-$this->x;
+				$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
+			}
+			$nl++;
+		}
+		else
+			$i++;
+	}
+	// Last chunk
+	if($i!=$j)
+		$this->Cell($l/1000*$this->FontSize,$h,substr($s,$j),0,0,'',false,$link);
+}
+
+function Ln($h=null)
+{
+	// Line feed; default value is the last cell height
+	$this->x = $this->lMargin;
+	if($h===null)
+		$this->y += $this->lasth;
+	else
+		$this->y += $h;
+}
+
+function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='')
+{
+	// Put an image on the page
+	if($file=='')
+		$this->Error('Image file name is empty');
+	if(!isset($this->images[$file]))
+	{
+		// First use of this image, get info
+		if($type=='')
+		{
+			$pos = strrpos($file,'.');
+			if(!$pos)
+				$this->Error('Image file has no extension and no type was specified: '.$file);
+			$type = substr($file,$pos+1);
+		}
+		$type = strtolower($type);
+		if($type=='jpeg')
+			$type = 'jpg';
+		$mtd = '_parse'.$type;
+		if(!method_exists($this,$mtd))
+			$this->Error('Unsupported image type: '.$type);
+		$info = $this->$mtd($file);
+		$info['i'] = count($this->images)+1;
+		$this->images[$file] = $info;
+	}
+	else
+		$info = $this->images[$file];
+
+	// Automatic width and height calculation if needed
+	if($w==0 && $h==0)
+	{
+		// Put image at 96 dpi
+		$w = -96;
+		$h = -96;
+	}
+	if($w<0)
+		$w = -$info['w']*72/$w/$this->k;
+	if($h<0)
+		$h = -$info['h']*72/$h/$this->k;
+	if($w==0)
+		$w = $h*$info['w']/$info['h'];
+	if($h==0)
+		$h = $w*$info['h']/$info['w'];
+
+	// Flowing mode
+	if($y===null)
+	{
+		if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
+		{
+			// Automatic page break
+			$x2 = $this->x;
+			$this->AddPage($this->CurOrientation,$this->CurPageSize,$this->CurRotation);
+			$this->x = $x2;
+		}
+		$y = $this->y;
+		$this->y += $h;
+	}
+
+	if($x===null)
+		$x = $this->x;
+	$this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info['i']));
+	if($link)
+		$this->Link($x,$y,$w,$h,$link);
+}
+
+function GetPageWidth()
+{
+	// Get current page width
+	return $this->w;
+}
+
+function GetPageHeight()
+{
+	// Get current page height
+	return $this->h;
+}
+
+function GetX()
+{
+	// Get x position
+	return $this->x;
+}
+
+function SetX($x)
+{
+	// Set x position
+	if($x>=0)
+		$this->x = $x;
+	else
+		$this->x = $this->w+$x;
+}
+
+function GetY()
+{
+	// Get y position
+	return $this->y;
+}
+
+function SetY($y, $resetX=true)
+{
+	// Set y position and optionally reset x
+	if($y>=0)
+		$this->y = $y;
+	else
+		$this->y = $this->h+$y;
+	if($resetX)
+		$this->x = $this->lMargin;
+}
+
+function SetXY($x, $y)
+{
+	// Set x and y positions
+	$this->SetX($x);
+	$this->SetY($y,false);
+}
+
+function Output($dest='', $name='', $isUTF8=false)
+{
+	// Output PDF to some destination
+	$this->Close();
+	if(strlen($name)==1 && strlen($dest)!=1)
+	{
+		// Fix parameter order
+		$tmp = $dest;
+		$dest = $name;
+		$name = $tmp;
+	}
+	if($dest=='')
+		$dest = 'I';
+	if($name=='')
+		$name = 'doc.pdf';
+	switch(strtoupper($dest))
+	{
+		case 'I':
+			// Send to standard output
+			$this->_checkoutput();
+			if(PHP_SAPI!='cli')
+			{
+				// We send to a browser
+				header('Content-Type: application/pdf');
+				header('Content-Disposition: inline; '.$this->_httpencode('filename',$name,$isUTF8));
+				header('Cache-Control: private, max-age=0, must-revalidate');
+				header('Pragma: public');
+			}
+			echo $this->buffer;
+			break;
+		case 'D':
+			// Download file
+			$this->_checkoutput();
+			header('Content-Type: application/x-download');
+			header('Content-Disposition: attachment; '.$this->_httpencode('filename',$name,$isUTF8));
+			header('Cache-Control: private, max-age=0, must-revalidate');
+			header('Pragma: public');
+			echo $this->buffer;
+			break;
+		case 'F':
+			// Save to local file
+			if(!file_put_contents($name,$this->buffer))
+				$this->Error('Unable to create output file: '.$name);
+			break;
+		case 'S':
+			// Return as a string
+			return $this->buffer;
+		default:
+			$this->Error('Incorrect output destination: '.$dest);
+	}
+	return '';
+}
+
+/*******************************************************************************
+*                              Protected methods                               *
+*******************************************************************************/
+
+protected function _dochecks()
+{
+	// Check mbstring overloading
+	if(ini_get('mbstring.func_overload') & 2)
+		$this->Error('mbstring overloading must be disabled');
+}
+
+protected function _checkoutput()
+{
+	if(PHP_SAPI!='cli')
+	{
+		if(headers_sent($file,$line))
+			$this->Error("Some data has already been output, can't send PDF file (output started at $file:$line)");
+	}
+	if(ob_get_length())
+	{
+		// The output buffer is not empty
+		if(preg_match('/^(\xEF\xBB\xBF)?\s*$/',ob_get_contents()))
+		{
+			// It contains only a UTF-8 BOM and/or whitespace, let's clean it
+			ob_clean();
+		}
+		else
+			$this->Error("Some data has already been output, can't send PDF file");
+	}
+}
+
+protected function _getpagesize($size)
+{
+	if(is_string($size))
+	{
+		$size = strtolower($size);
+		if(!isset($this->StdPageSizes[$size]))
+			$this->Error('Unknown page size: '.$size);
+		$a = $this->StdPageSizes[$size];
+		return array($a[0]/$this->k, $a[1]/$this->k);
+	}
+	else
+	{
+		if($size[0]>$size[1])
+			return array($size[1], $size[0]);
+		else
+			return $size;
+	}
+}
+
+protected function _beginpage($orientation, $size, $rotation)
+{
+	$this->page++;
+	$this->pages[$this->page] = '';
+	$this->state = 2;
+	$this->x = $this->lMargin;
+	$this->y = $this->tMargin;
+	$this->FontFamily = '';
+	// Check page size and orientation
+	if($orientation=='')
+		$orientation = $this->DefOrientation;
+	else
+		$orientation = strtoupper($orientation[0]);
+	if($size=='')
+		$size = $this->DefPageSize;
+	else
+		$size = $this->_getpagesize($size);
+	if($orientation!=$this->CurOrientation || $size[0]!=$this->CurPageSize[0] || $size[1]!=$this->CurPageSize[1])
+	{
+		// New size or orientation
+		if($orientation=='P')
+		{
+			$this->w = $size[0];
+			$this->h = $size[1];
+		}
+		else
+		{
+			$this->w = $size[1];
+			$this->h = $size[0];
+		}
+		$this->wPt = $this->w*$this->k;
+		$this->hPt = $this->h*$this->k;
+		$this->PageBreakTrigger = $this->h-$this->bMargin;
+		$this->CurOrientation = $orientation;
+		$this->CurPageSize = $size;
+	}
+	if($orientation!=$this->DefOrientation || $size[0]!=$this->DefPageSize[0] || $size[1]!=$this->DefPageSize[1])
+		$this->PageInfo[$this->page]['size'] = array($this->wPt, $this->hPt);
+	if($rotation!=0)
+	{
+		if($rotation%90!=0)
+			$this->Error('Incorrect rotation value: '.$rotation);
+		$this->CurRotation = $rotation;
+		$this->PageInfo[$this->page]['rotation'] = $rotation;
+	}
+}
+
+protected function _endpage()
+{
+	$this->state = 1;
+}
+
+protected function _loadfont($font)
+{
+	// Load a font definition file from the font directory
+	if(strpos($font,'/')!==false || strpos($font,"\\")!==false)
+		$this->Error('Incorrect font definition file name: '.$font);
+	include($this->fontpath.$font);
+	if(!isset($name))
+		$this->Error('Could not include font definition file');
+	if(isset($enc))
+		$enc = strtolower($enc);
+	if(!isset($subsetted))
+		$subsetted = false;
+	return get_defined_vars();
+}
+
+protected function _isascii($s)
+{
+	// Test if string is ASCII
+	$nb = strlen($s);
+	for($i=0;$i<$nb;$i++)
+	{
+		if(ord($s[$i])>127)
+			return false;
+	}
+	return true;
+}
+
+protected function _httpencode($param, $value, $isUTF8)
+{
+	// Encode HTTP header field parameter
+	if($this->_isascii($value))
+		return $param.'="'.$value.'"';
+	if(!$isUTF8)
+		$value = utf8_encode($value);
+	if(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')!==false)
+		return $param.'="'.rawurlencode($value).'"';
+	else
+		return $param."*=UTF-8''".rawurlencode($value);
+}
+
+protected function _UTF8toUTF16($s)
+{
+	// Convert UTF-8 to UTF-16BE with BOM
+	$res = "\xFE\xFF";
+	$nb = strlen($s);
+	$i = 0;
+	while($i<$nb)
+	{
+		$c1 = ord($s[$i++]);
+		if($c1>=224)
+		{
+			// 3-byte character
+			$c2 = ord($s[$i++]);
+			$c3 = ord($s[$i++]);
+			$res .= chr((($c1 & 0x0F)<<4) + (($c2 & 0x3C)>>2));
+			$res .= chr((($c2 & 0x03)<<6) + ($c3 & 0x3F));
+		}
+		elseif($c1>=192)
+		{
+			// 2-byte character
+			$c2 = ord($s[$i++]);
+			$res .= chr(($c1 & 0x1C)>>2);
+			$res .= chr((($c1 & 0x03)<<6) + ($c2 & 0x3F));
+		}
+		else
+		{
+			// Single-byte character
+			$res .= "\0".chr($c1);
+		}
+	}
+	return $res;
+}
+
+protected function _escape($s)
+{
+	// Escape special characters
+	if(strpos($s,'(')!==false || strpos($s,')')!==false || strpos($s,'\\')!==false || strpos($s,"\r")!==false)
+		return str_replace(array('\\','(',')',"\r"), array('\\\\','\\(','\\)','\\r'), $s);
+	else
+		return $s;
+}
+
+protected function _textstring($s)
+{
+	// Format a text string
+	if(!$this->_isascii($s))
+		$s = $this->_UTF8toUTF16($s);
+	return '('.$this->_escape($s).')';
+}
+
+protected function _dounderline($x, $y, $txt)
+{
+	// Underline text
+	$up = $this->CurrentFont['up'];
+	$ut = $this->CurrentFont['ut'];
+	$w = $this->GetStringWidth($txt)+$this->ws*substr_count($txt,' ');
+	return sprintf('%.2F %.2F %.2F %.2F re f',$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt);
+}
+
+protected function _parsejpg($file)
+{
+	// Extract info from a JPEG file
+	$a = getimagesize($file);
+	if(!$a)
+		$this->Error('Missing or incorrect image file: '.$file);
+	if($a[2]!=2)
+		$this->Error('Not a JPEG file: '.$file);
+	if(!isset($a['channels']) || $a['channels']==3)
+		$colspace = 'DeviceRGB';
+	elseif($a['channels']==4)
+		$colspace = 'DeviceCMYK';
+	else
+		$colspace = 'DeviceGray';
+	$bpc = isset($a['bits']) ? $a['bits'] : 8;
+	$data = file_get_contents($file);
+	return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=>$data);
+}
+
+protected function _parsepng($file)
+{
+	// Extract info from a PNG file
+	$f = fopen($file,'rb');
+	if(!$f)
+		$this->Error('Can\'t open image file: '.$file);
+	$info = $this->_parsepngstream($f,$file);
+	fclose($f);
+	return $info;
+}
+
+protected function _parsepngstream($f, $file)
+{
+	// Check signature
+	if($this->_readstream($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10))
+		$this->Error('Not a PNG file: '.$file);
+
+	// Read header chunk
+	$this->_readstream($f,4);
+	if($this->_readstream($f,4)!='IHDR')
+		$this->Error('Incorrect PNG file: '.$file);
+	$w = $this->_readint($f);
+	$h = $this->_readint($f);
+	$bpc = ord($this->_readstream($f,1));
+	if($bpc>8)
+		$this->Error('16-bit depth not supported: '.$file);
+	$ct = ord($this->_readstream($f,1));
+	if($ct==0 || $ct==4)
+		$colspace = 'DeviceGray';
+	elseif($ct==2 || $ct==6)
+		$colspace = 'DeviceRGB';
+	elseif($ct==3)
+		$colspace = 'Indexed';
+	else
+		$this->Error('Unknown color type: '.$file);
+	if(ord($this->_readstream($f,1))!=0)
+		$this->Error('Unknown compression method: '.$file);
+	if(ord($this->_readstream($f,1))!=0)
+		$this->Error('Unknown filter method: '.$file);
+	if(ord($this->_readstream($f,1))!=0)
+		$this->Error('Interlacing not supported: '.$file);
+	$this->_readstream($f,4);
+	$dp = '/Predictor 15 /Colors '.($colspace=='DeviceRGB' ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w;
+
+	// Scan chunks looking for palette, transparency and image data
+	$pal = '';
+	$trns = '';
+	$data = '';
+	do
+	{
+		$n = $this->_readint($f);
+		$type = $this->_readstream($f,4);
+		if($type=='PLTE')
+		{
+			// Read palette
+			$pal = $this->_readstream($f,$n);
+			$this->_readstream($f,4);
+		}
+		elseif($type=='tRNS')
+		{
+			// Read transparency info
+			$t = $this->_readstream($f,$n);
+			if($ct==0)
+				$trns = array(ord(substr($t,1,1)));
+			elseif($ct==2)
+				$trns = array(ord(substr($t,1,1)), ord(substr($t,3,1)), ord(substr($t,5,1)));
+			else
+			{
+				$pos = strpos($t,chr(0));
+				if($pos!==false)
+					$trns = array($pos);
+			}
+			$this->_readstream($f,4);
+		}
+		elseif($type=='IDAT')
+		{
+			// Read image data block
+			$data .= $this->_readstream($f,$n);
+			$this->_readstream($f,4);
+		}
+		elseif($type=='IEND')
+			break;
+		else
+			$this->_readstream($f,$n+4);
+	}
+	while($n);
+
+	if($colspace=='Indexed' && empty($pal))
+		$this->Error('Missing palette in '.$file);
+	$info = array('w'=>$w, 'h'=>$h, 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'FlateDecode', 'dp'=>$dp, 'pal'=>$pal, 'trns'=>$trns);
+	if($ct>=4)
+	{
+		// Extract alpha channel
+		if(!function_exists('gzuncompress'))
+			$this->Error('Zlib not available, can\'t handle alpha channel: '.$file);
+		$data = gzuncompress($data);
+		$color = '';
+		$alpha = '';
+		if($ct==4)
+		{
+			// Gray image
+			$len = 2*$w;
+			for($i=0;$i<$h;$i++)
+			{
+				$pos = (1+$len)*$i;
+				$color .= $data[$pos];
+				$alpha .= $data[$pos];
+				$line = substr($data,$pos+1,$len);
+				$color .= preg_replace('/(.)./s','$1',$line);
+				$alpha .= preg_replace('/.(.)/s','$1',$line);
+			}
+		}
+		else
+		{
+			// RGB image
+			$len = 4*$w;
+			for($i=0;$i<$h;$i++)
+			{
+				$pos = (1+$len)*$i;
+				$color .= $data[$pos];
+				$alpha .= $data[$pos];
+				$line = substr($data,$pos+1,$len);
+				$color .= preg_replace('/(.{3})./s','$1',$line);
+				$alpha .= preg_replace('/.{3}(.)/s','$1',$line);
+			}
+		}
+		unset($data);
+		$data = gzcompress($color);
+		$info['smask'] = gzcompress($alpha);
+		$this->WithAlpha = true;
+		if($this->PDFVersion<'1.4')
+			$this->PDFVersion = '1.4';
+	}
+	$info['data'] = $data;
+	return $info;
+}
+
+protected function _readstream($f, $n)
+{
+	// Read n bytes from stream
+	$res = '';
+	while($n>0 && !feof($f))
+	{
+		$s = fread($f,$n);
+		if($s===false)
+			$this->Error('Error while reading stream');
+		$n -= strlen($s);
+		$res .= $s;
+	}
+	if($n>0)
+		$this->Error('Unexpected end of stream');
+	return $res;
+}
+
+protected function _readint($f)
+{
+	// Read a 4-byte integer from stream
+	$a = unpack('Ni',$this->_readstream($f,4));
+	return $a['i'];
+}
+
+protected function _parsegif($file)
+{
+	// Extract info from a GIF file (via PNG conversion)
+	if(!function_exists('imagepng'))
+		$this->Error('GD extension is required for GIF support');
+	if(!function_exists('imagecreatefromgif'))
+		$this->Error('GD has no GIF read support');
+	$im = imagecreatefromgif($file);
+	if(!$im)
+		$this->Error('Missing or incorrect image file: '.$file);
+	imageinterlace($im,0);
+	ob_start();
+	imagepng($im);
+	$data = ob_get_clean();
+	imagedestroy($im);
+	$f = fopen('php://temp','rb+');
+	if(!$f)
+		$this->Error('Unable to create memory stream');
+	fwrite($f,$data);
+	rewind($f);
+	$info = $this->_parsepngstream($f,$file);
+	fclose($f);
+	return $info;
+}
+
+protected function _out($s)
+{
+	// Add a line to the document
+	if($this->state==2)
+		$this->pages[$this->page] .= $s."\n";
+	elseif($this->state==1)
+		$this->_put($s);
+	elseif($this->state==0)
+		$this->Error('No page has been added yet');
+	elseif($this->state==3)
+		$this->Error('The document is closed');
+}
+
+protected function _put($s)
+{
+	$this->buffer .= $s."\n";
+}
+
+protected function _getoffset()
+{
+	return strlen($this->buffer);
+}
+
+protected function _newobj($n=null)
+{
+	// Begin a new object
+	if($n===null)
+		$n = ++$this->n;
+	$this->offsets[$n] = $this->_getoffset();
+	$this->_put($n.' 0 obj');
+}
+
+protected function _putstream($data)
+{
+	$this->_put('stream');
+	$this->_put($data);
+	$this->_put('endstream');
+}
+
+protected function _putstreamobject($data)
+{
+	if($this->compress)
+	{
+		$entries = '/Filter /FlateDecode ';
+		$data = gzcompress($data);
+	}
+	else
+		$entries = '';
+	$entries .= '/Length '.strlen($data);
+	$this->_newobj();
+	$this->_put('<<'.$entries.'>>');
+	$this->_putstream($data);
+	$this->_put('endobj');
+}
+
+protected function _putpage($n)
+{
+	$this->_newobj();
+	$this->_put('<</Type /Page');
+	$this->_put('/Parent 1 0 R');
+	if(isset($this->PageInfo[$n]['size']))
+		$this->_put(sprintf('/MediaBox [0 0 %.2F %.2F]',$this->PageInfo[$n]['size'][0],$this->PageInfo[$n]['size'][1]));
+	if(isset($this->PageInfo[$n]['rotation']))
+		$this->_put('/Rotate '.$this->PageInfo[$n]['rotation']);
+	$this->_put('/Resources 2 0 R');
+	if(isset($this->PageLinks[$n]))
+	{
+		// Links
+		$annots = '/Annots [';
+		foreach($this->PageLinks[$n] as $pl)
+		{
+			$rect = sprintf('%.2F %.2F %.2F %.2F',$pl[0],$pl[1],$pl[0]+$pl[2],$pl[1]-$pl[3]);
+			$annots .= '<</Type /Annot /Subtype /Link /Rect ['.$rect.'] /Border [0 0 0] ';
+			if(is_string($pl[4]))
+				$annots .= '/A <</S /URI /URI '.$this->_textstring($pl[4]).'>>>>';
+			else
+			{
+				$l = $this->links[$pl[4]];
+				if(isset($this->PageInfo[$l[0]]['size']))
+					$h = $this->PageInfo[$l[0]]['size'][1];
+				else
+					$h = ($this->DefOrientation=='P') ? $this->DefPageSize[1]*$this->k : $this->DefPageSize[0]*$this->k;
+				$annots .= sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]>>',$this->PageInfo[$l[0]]['n'],$h-$l[1]*$this->k);
+			}
+		}
+		$this->_put($annots.']');
+	}
+	if($this->WithAlpha)
+		$this->_put('/Group <</Type /Group /S /Transparency /CS /DeviceRGB>>');
+	$this->_put('/Contents '.($this->n+1).' 0 R>>');
+	$this->_put('endobj');
+	// Page content
+	if(!empty($this->AliasNbPages))
+		$this->pages[$n] = str_replace($this->AliasNbPages,$this->page,$this->pages[$n]);
+	$this->_putstreamobject($this->pages[$n]);
+}
+
+protected function _putpages()
+{
+	$nb = $this->page;
+	for($n=1;$n<=$nb;$n++)
+		$this->PageInfo[$n]['n'] = $this->n+1+2*($n-1);
+	for($n=1;$n<=$nb;$n++)
+		$this->_putpage($n);
+	// Pages root
+	$this->_newobj(1);
+	$this->_put('<</Type /Pages');
+	$kids = '/Kids [';
+	for($n=1;$n<=$nb;$n++)
+		$kids .= $this->PageInfo[$n]['n'].' 0 R ';
+	$this->_put($kids.']');
+	$this->_put('/Count '.$nb);
+	if($this->DefOrientation=='P')
+	{
+		$w = $this->DefPageSize[0];
+		$h = $this->DefPageSize[1];
+	}
+	else
+	{
+		$w = $this->DefPageSize[1];
+		$h = $this->DefPageSize[0];
+	}
+	$this->_put(sprintf('/MediaBox [0 0 %.2F %.2F]',$w*$this->k,$h*$this->k));
+	$this->_put('>>');
+	$this->_put('endobj');
+}
+
+protected function _putfonts()
+{
+	foreach($this->FontFiles as $file=>$info)
+	{
+		// Font file embedding
+		$this->_newobj();
+		$this->FontFiles[$file]['n'] = $this->n;
+		$font = file_get_contents($this->fontpath.$file,true);
+		if(!$font)
+			$this->Error('Font file not found: '.$file);
+		$compressed = (substr($file,-2)=='.z');
+		if(!$compressed && isset($info['length2']))
+			$font = substr($font,6,$info['length1']).substr($font,6+$info['length1']+6,$info['length2']);
+		$this->_put('<</Length '.strlen($font));
+		if($compressed)
+			$this->_put('/Filter /FlateDecode');
+		$this->_put('/Length1 '.$info['length1']);
+		if(isset($info['length2']))
+			$this->_put('/Length2 '.$info['length2'].' /Length3 0');
+		$this->_put('>>');
+		$this->_putstream($font);
+		$this->_put('endobj');
+	}
+	foreach($this->fonts as $k=>$font)
+	{
+		// Encoding
+		if(isset($font['diff']))
+		{
+			if(!isset($this->encodings[$font['enc']]))
+			{
+				$this->_newobj();
+				$this->_put('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$font['diff'].']>>');
+				$this->_put('endobj');
+				$this->encodings[$font['enc']] = $this->n;
+			}
+		}
+		// ToUnicode CMap
+		if(isset($font['uv']))
+		{
+			if(isset($font['enc']))
+				$cmapkey = $font['enc'];
+			else
+				$cmapkey = $font['name'];
+			if(!isset($this->cmaps[$cmapkey]))
+			{
+				$cmap = $this->_tounicodecmap($font['uv']);
+				$this->_putstreamobject($cmap);
+				$this->cmaps[$cmapkey] = $this->n;
+			}
+		}
+		// Font object
+		$this->fonts[$k]['n'] = $this->n+1;
+		$type = $font['type'];
+		$name = $font['name'];
+		if($font['subsetted'])
+			$name = 'AAAAAA+'.$name;
+		if($type=='Core')
+		{
+			// Core font
+			$this->_newobj();
+			$this->_put('<</Type /Font');
+			$this->_put('/BaseFont /'.$name);
+			$this->_put('/Subtype /Type1');
+			if($name!='Symbol' && $name!='ZapfDingbats')
+				$this->_put('/Encoding /WinAnsiEncoding');
+			if(isset($font['uv']))
+				$this->_put('/ToUnicode '.$this->cmaps[$cmapkey].' 0 R');
+			$this->_put('>>');
+			$this->_put('endobj');
+		}
+		elseif($type=='Type1' || $type=='TrueType')
+		{
+			// Additional Type1 or TrueType/OpenType font
+			$this->_newobj();
+			$this->_put('<</Type /Font');
+			$this->_put('/BaseFont /'.$name);
+			$this->_put('/Subtype /'.$type);
+			$this->_put('/FirstChar 32 /LastChar 255');
+			$this->_put('/Widths '.($this->n+1).' 0 R');
+			$this->_put('/FontDescriptor '.($this->n+2).' 0 R');
+			if(isset($font['diff']))
+				$this->_put('/Encoding '.$this->encodings[$font['enc']].' 0 R');
+			else
+				$this->_put('/Encoding /WinAnsiEncoding');
+			if(isset($font['uv']))
+				$this->_put('/ToUnicode '.$this->cmaps[$cmapkey].' 0 R');
+			$this->_put('>>');
+			$this->_put('endobj');
+			// Widths
+			$this->_newobj();
+			$cw = &$font['cw'];
+			$s = '[';
+			for($i=32;$i<=255;$i++)
+				$s .= $cw[chr($i)].' ';
+			$this->_put($s.']');
+			$this->_put('endobj');
+			// Descriptor
+			$this->_newobj();
+			$s = '<</Type /FontDescriptor /FontName /'.$name;
+			foreach($font['desc'] as $k=>$v)
+				$s .= ' /'.$k.' '.$v;
+			if(!empty($font['file']))
+				$s .= ' /FontFile'.($type=='Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R';
+			$this->_put($s.'>>');
+			$this->_put('endobj');
+		}
+		else
+		{
+			// Allow for additional types
+			$mtd = '_put'.strtolower($type);
+			if(!method_exists($this,$mtd))
+				$this->Error('Unsupported font type: '.$type);
+			$this->$mtd($font);
+		}
+	}
+}
+
+protected function _tounicodecmap($uv)
+{
+	$ranges = '';
+	$nbr = 0;
+	$chars = '';
+	$nbc = 0;
+	foreach($uv as $c=>$v)
+	{
+		if(is_array($v))
+		{
+			$ranges .= sprintf("<%02X> <%02X> <%04X>\n",$c,$c+$v[1]-1,$v[0]);
+			$nbr++;
+		}
+		else
+		{
+			$chars .= sprintf("<%02X> <%04X>\n",$c,$v);
+			$nbc++;
+		}
+	}
+	$s = "/CIDInit /ProcSet findresource begin\n";
+	$s .= "12 dict begin\n";
+	$s .= "begincmap\n";
+	$s .= "/CIDSystemInfo\n";
+	$s .= "<</Registry (Adobe)\n";
+	$s .= "/Ordering (UCS)\n";
+	$s .= "/Supplement 0\n";
+	$s .= ">> def\n";
+	$s .= "/CMapName /Adobe-Identity-UCS def\n";
+	$s .= "/CMapType 2 def\n";
+	$s .= "1 begincodespacerange\n";
+	$s .= "<00> <FF>\n";
+	$s .= "endcodespacerange\n";
+	if($nbr>0)
+	{
+		$s .= "$nbr beginbfrange\n";
+		$s .= $ranges;
+		$s .= "endbfrange\n";
+	}
+	if($nbc>0)
+	{
+		$s .= "$nbc beginbfchar\n";
+		$s .= $chars;
+		$s .= "endbfchar\n";
+	}
+	$s .= "endcmap\n";
+	$s .= "CMapName currentdict /CMap defineresource pop\n";
+	$s .= "end\n";
+	$s .= "end";
+	return $s;
+}
+
+protected function _putimages()
+{
+	foreach(array_keys($this->images) as $file)
+	{
+		$this->_putimage($this->images[$file]);
+		unset($this->images[$file]['data']);
+		unset($this->images[$file]['smask']);
+	}
+}
+
+protected function _putimage(&$info)
+{
+	$this->_newobj();
+	$info['n'] = $this->n;
+	$this->_put('<</Type /XObject');
+	$this->_put('/Subtype /Image');
+	$this->_put('/Width '.$info['w']);
+	$this->_put('/Height '.$info['h']);
+	if($info['cs']=='Indexed')
+		$this->_put('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal'])/3-1).' '.($this->n+1).' 0 R]');
+	else
+	{
+		$this->_put('/ColorSpace /'.$info['cs']);
+		if($info['cs']=='DeviceCMYK')
+			$this->_put('/Decode [1 0 1 0 1 0 1 0]');
+	}
+	$this->_put('/BitsPerComponent '.$info['bpc']);
+	if(isset($info['f']))
+		$this->_put('/Filter /'.$info['f']);
+	if(isset($info['dp']))
+		$this->_put('/DecodeParms <<'.$info['dp'].'>>');
+	if(isset($info['trns']) && is_array($info['trns']))
+	{
+		$trns = '';
+		for($i=0;$i<count($info['trns']);$i++)
+			$trns .= $info['trns'][$i].' '.$info['trns'][$i].' ';
+		$this->_put('/Mask ['.$trns.']');
+	}
+	if(isset($info['smask']))
+		$this->_put('/SMask '.($this->n+1).' 0 R');
+	$this->_put('/Length '.strlen($info['data']).'>>');
+	$this->_putstream($info['data']);
+	$this->_put('endobj');
+	// Soft mask
+	if(isset($info['smask']))
+	{
+		$dp = '/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns '.$info['w'];
+		$smask = array('w'=>$info['w'], 'h'=>$info['h'], 'cs'=>'DeviceGray', 'bpc'=>8, 'f'=>$info['f'], 'dp'=>$dp, 'data'=>$info['smask']);
+		$this->_putimage($smask);
+	}
+	// Palette
+	if($info['cs']=='Indexed')
+		$this->_putstreamobject($info['pal']);
+}
+
+protected function _putxobjectdict()
+{
+	foreach($this->images as $image)
+		$this->_put('/I'.$image['i'].' '.$image['n'].' 0 R');
+}
+
+protected function _putresourcedict()
+{
+	$this->_put('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
+	$this->_put('/Font <<');
+	foreach($this->fonts as $font)
+		$this->_put('/F'.$font['i'].' '.$font['n'].' 0 R');
+	$this->_put('>>');
+	$this->_put('/XObject <<');
+	$this->_putxobjectdict();
+	$this->_put('>>');
+}
+
+protected function _putresources()
+{
+	$this->_putfonts();
+	$this->_putimages();
+	// Resource dictionary
+	$this->_newobj(2);
+	$this->_put('<<');
+	$this->_putresourcedict();
+	$this->_put('>>');
+	$this->_put('endobj');
+}
+
+protected function _putinfo()
+{
+	$this->metadata['Producer'] = 'FPDF '.FPDF_VERSION;
+	$this->metadata['CreationDate'] = 'D:'.@date('YmdHis');
+	foreach($this->metadata as $key=>$value)
+		$this->_put('/'.$key.' '.$this->_textstring($value));
+}
+
+protected function _putcatalog()
+{
+	$n = $this->PageInfo[1]['n'];
+	$this->_put('/Type /Catalog');
+	$this->_put('/Pages 1 0 R');
+	if($this->ZoomMode=='fullpage')
+		$this->_put('/OpenAction ['.$n.' 0 R /Fit]');
+	elseif($this->ZoomMode=='fullwidth')
+		$this->_put('/OpenAction ['.$n.' 0 R /FitH null]');
+	elseif($this->ZoomMode=='real')
+		$this->_put('/OpenAction ['.$n.' 0 R /XYZ null null 1]');
+	elseif(!is_string($this->ZoomMode))
+		$this->_put('/OpenAction ['.$n.' 0 R /XYZ null null '.sprintf('%.2F',$this->ZoomMode/100).']');
+	if($this->LayoutMode=='single')
+		$this->_put('/PageLayout /SinglePage');
+	elseif($this->LayoutMode=='continuous')
+		$this->_put('/PageLayout /OneColumn');
+	elseif($this->LayoutMode=='two')
+		$this->_put('/PageLayout /TwoColumnLeft');
+}
+
+protected function _putheader()
+{
+	$this->_put('%PDF-'.$this->PDFVersion);
+}
+
+protected function _puttrailer()
+{
+	$this->_put('/Size '.($this->n+1));
+	$this->_put('/Root '.$this->n.' 0 R');
+	$this->_put('/Info '.($this->n-1).' 0 R');
+}
+
+protected function _enddoc()
+{
+	$this->_putheader();
+	$this->_putpages();
+	$this->_putresources();
+	// Info
+	$this->_newobj();
+	$this->_put('<<');
+	$this->_putinfo();
+	$this->_put('>>');
+	$this->_put('endobj');
+	// Catalog
+	$this->_newobj();
+	$this->_put('<<');
+	$this->_putcatalog();
+	$this->_put('>>');
+	$this->_put('endobj');
+	// Cross-ref
+	$offset = $this->_getoffset();
+	$this->_put('xref');
+	$this->_put('0 '.($this->n+1));
+	$this->_put('0000000000 65535 f ');
+	for($i=1;$i<=$this->n;$i++)
+		$this->_put(sprintf('%010d 00000 n ',$this->offsets[$i]));
+	// Trailer
+	$this->_put('trailer');
+	$this->_put('<<');
+	$this->_puttrailer();
+	$this->_put('>>');
+	$this->_put('startxref');
+	$this->_put($offset);
+	$this->_put('%%EOF');
+	$this->state = 3;
+}
+}
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/install.txt
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/install.txt	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/install.txt	(revision 8435)
@@ -0,0 +1,15 @@
+The FPDF library is made up of the following elements:
+
+- the main file, fpdf.php, which contains the class
+- the font definition files located in the font directory
+
+The font definition files are necessary as soon as you want to output some text in a document.
+If they are not accessible, the SetFont() method will produce the following error:
+
+FPDF error: Could not include font definition file
+
+
+Remarks:
+
+- Only the files corresponding to the fonts actually used are necessary
+- The tutorials provided in this package are ready to be executed
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/license.txt
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/license.txt	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/license.txt	(revision 8435)
@@ -0,0 +1,6 @@
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software to use, copy, modify, distribute, sublicense, and/or sell
+copies of the software, and to permit persons to whom the software is furnished
+to do so.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED.
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1250.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1250.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1250.map	(revision 8435)
@@ -0,0 +1,251 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!89 U+2030 perthousand
+!8A U+0160 Scaron
+!8B U+2039 guilsinglleft
+!8C U+015A Sacute
+!8D U+0164 Tcaron
+!8E U+017D Zcaron
+!8F U+0179 Zacute
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!99 U+2122 trademark
+!9A U+0161 scaron
+!9B U+203A guilsinglright
+!9C U+015B sacute
+!9D U+0165 tcaron
+!9E U+017E zcaron
+!9F U+017A zacute
+!A0 U+00A0 space
+!A1 U+02C7 caron
+!A2 U+02D8 breve
+!A3 U+0141 Lslash
+!A4 U+00A4 currency
+!A5 U+0104 Aogonek
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+015E Scedilla
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+017B Zdotaccent
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+02DB ogonek
+!B3 U+0142 lslash
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+0105 aogonek
+!BA U+015F scedilla
+!BB U+00BB guillemotright
+!BC U+013D Lcaron
+!BD U+02DD hungarumlaut
+!BE U+013E lcaron
+!BF U+017C zdotaccent
+!C0 U+0154 Racute
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+0102 Abreve
+!C4 U+00C4 Adieresis
+!C5 U+0139 Lacute
+!C6 U+0106 Cacute
+!C7 U+00C7 Ccedilla
+!C8 U+010C Ccaron
+!C9 U+00C9 Eacute
+!CA U+0118 Eogonek
+!CB U+00CB Edieresis
+!CC U+011A Ecaron
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+010E Dcaron
+!D0 U+0110 Dcroat
+!D1 U+0143 Nacute
+!D2 U+0147 Ncaron
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+0150 Ohungarumlaut
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+0158 Rcaron
+!D9 U+016E Uring
+!DA U+00DA Uacute
+!DB U+0170 Uhungarumlaut
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+0162 Tcommaaccent
+!DF U+00DF germandbls
+!E0 U+0155 racute
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+0103 abreve
+!E4 U+00E4 adieresis
+!E5 U+013A lacute
+!E6 U+0107 cacute
+!E7 U+00E7 ccedilla
+!E8 U+010D ccaron
+!E9 U+00E9 eacute
+!EA U+0119 eogonek
+!EB U+00EB edieresis
+!EC U+011B ecaron
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+010F dcaron
+!F0 U+0111 dcroat
+!F1 U+0144 nacute
+!F2 U+0148 ncaron
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+0151 ohungarumlaut
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+0159 rcaron
+!F9 U+016F uring
+!FA U+00FA uacute
+!FB U+0171 uhungarumlaut
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+0163 tcommaaccent
+!FF U+02D9 dotaccent
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1251.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1251.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1251.map	(revision 8435)
@@ -0,0 +1,255 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0402 afii10051
+!81 U+0403 afii10052
+!82 U+201A quotesinglbase
+!83 U+0453 afii10100
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+20AC Euro
+!89 U+2030 perthousand
+!8A U+0409 afii10058
+!8B U+2039 guilsinglleft
+!8C U+040A afii10059
+!8D U+040C afii10061
+!8E U+040B afii10060
+!8F U+040F afii10145
+!90 U+0452 afii10099
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!99 U+2122 trademark
+!9A U+0459 afii10106
+!9B U+203A guilsinglright
+!9C U+045A afii10107
+!9D U+045C afii10109
+!9E U+045B afii10108
+!9F U+045F afii10193
+!A0 U+00A0 space
+!A1 U+040E afii10062
+!A2 U+045E afii10110
+!A3 U+0408 afii10057
+!A4 U+00A4 currency
+!A5 U+0490 afii10050
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+0401 afii10023
+!A9 U+00A9 copyright
+!AA U+0404 afii10053
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+0407 afii10056
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+0406 afii10055
+!B3 U+0456 afii10103
+!B4 U+0491 afii10098
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+0451 afii10071
+!B9 U+2116 afii61352
+!BA U+0454 afii10101
+!BB U+00BB guillemotright
+!BC U+0458 afii10105
+!BD U+0405 afii10054
+!BE U+0455 afii10102
+!BF U+0457 afii10104
+!C0 U+0410 afii10017
+!C1 U+0411 afii10018
+!C2 U+0412 afii10019
+!C3 U+0413 afii10020
+!C4 U+0414 afii10021
+!C5 U+0415 afii10022
+!C6 U+0416 afii10024
+!C7 U+0417 afii10025
+!C8 U+0418 afii10026
+!C9 U+0419 afii10027
+!CA U+041A afii10028
+!CB U+041B afii10029
+!CC U+041C afii10030
+!CD U+041D afii10031
+!CE U+041E afii10032
+!CF U+041F afii10033
+!D0 U+0420 afii10034
+!D1 U+0421 afii10035
+!D2 U+0422 afii10036
+!D3 U+0423 afii10037
+!D4 U+0424 afii10038
+!D5 U+0425 afii10039
+!D6 U+0426 afii10040
+!D7 U+0427 afii10041
+!D8 U+0428 afii10042
+!D9 U+0429 afii10043
+!DA U+042A afii10044
+!DB U+042B afii10045
+!DC U+042C afii10046
+!DD U+042D afii10047
+!DE U+042E afii10048
+!DF U+042F afii10049
+!E0 U+0430 afii10065
+!E1 U+0431 afii10066
+!E2 U+0432 afii10067
+!E3 U+0433 afii10068
+!E4 U+0434 afii10069
+!E5 U+0435 afii10070
+!E6 U+0436 afii10072
+!E7 U+0437 afii10073
+!E8 U+0438 afii10074
+!E9 U+0439 afii10075
+!EA U+043A afii10076
+!EB U+043B afii10077
+!EC U+043C afii10078
+!ED U+043D afii10079
+!EE U+043E afii10080
+!EF U+043F afii10081
+!F0 U+0440 afii10082
+!F1 U+0441 afii10083
+!F2 U+0442 afii10084
+!F3 U+0443 afii10085
+!F4 U+0444 afii10086
+!F5 U+0445 afii10087
+!F6 U+0446 afii10088
+!F7 U+0447 afii10089
+!F8 U+0448 afii10090
+!F9 U+0449 afii10091
+!FA U+044A afii10092
+!FB U+044B afii10093
+!FC U+044C afii10094
+!FD U+044D afii10095
+!FE U+044E afii10096
+!FF U+044F afii10097
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1252.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1252.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1252.map	(revision 8435)
@@ -0,0 +1,251 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+02C6 circumflex
+!89 U+2030 perthousand
+!8A U+0160 Scaron
+!8B U+2039 guilsinglleft
+!8C U+0152 OE
+!8E U+017D Zcaron
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!98 U+02DC tilde
+!99 U+2122 trademark
+!9A U+0161 scaron
+!9B U+203A guilsinglright
+!9C U+0153 oe
+!9E U+017E zcaron
+!9F U+0178 Ydieresis
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+00D0 Eth
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+00DE Thorn
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+00F0 eth
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+00FE thorn
+!FF U+00FF ydieresis
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1253.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1253.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1253.map	(revision 8435)
@@ -0,0 +1,239 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!89 U+2030 perthousand
+!8B U+2039 guilsinglleft
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!99 U+2122 trademark
+!9B U+203A guilsinglright
+!A0 U+00A0 space
+!A1 U+0385 dieresistonos
+!A2 U+0386 Alphatonos
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+2015 afii00208
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+0384 tonos
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+0388 Epsilontonos
+!B9 U+0389 Etatonos
+!BA U+038A Iotatonos
+!BB U+00BB guillemotright
+!BC U+038C Omicrontonos
+!BD U+00BD onehalf
+!BE U+038E Upsilontonos
+!BF U+038F Omegatonos
+!C0 U+0390 iotadieresistonos
+!C1 U+0391 Alpha
+!C2 U+0392 Beta
+!C3 U+0393 Gamma
+!C4 U+0394 Delta
+!C5 U+0395 Epsilon
+!C6 U+0396 Zeta
+!C7 U+0397 Eta
+!C8 U+0398 Theta
+!C9 U+0399 Iota
+!CA U+039A Kappa
+!CB U+039B Lambda
+!CC U+039C Mu
+!CD U+039D Nu
+!CE U+039E Xi
+!CF U+039F Omicron
+!D0 U+03A0 Pi
+!D1 U+03A1 Rho
+!D3 U+03A3 Sigma
+!D4 U+03A4 Tau
+!D5 U+03A5 Upsilon
+!D6 U+03A6 Phi
+!D7 U+03A7 Chi
+!D8 U+03A8 Psi
+!D9 U+03A9 Omega
+!DA U+03AA Iotadieresis
+!DB U+03AB Upsilondieresis
+!DC U+03AC alphatonos
+!DD U+03AD epsilontonos
+!DE U+03AE etatonos
+!DF U+03AF iotatonos
+!E0 U+03B0 upsilondieresistonos
+!E1 U+03B1 alpha
+!E2 U+03B2 beta
+!E3 U+03B3 gamma
+!E4 U+03B4 delta
+!E5 U+03B5 epsilon
+!E6 U+03B6 zeta
+!E7 U+03B7 eta
+!E8 U+03B8 theta
+!E9 U+03B9 iota
+!EA U+03BA kappa
+!EB U+03BB lambda
+!EC U+03BC mu
+!ED U+03BD nu
+!EE U+03BE xi
+!EF U+03BF omicron
+!F0 U+03C0 pi
+!F1 U+03C1 rho
+!F2 U+03C2 sigma1
+!F3 U+03C3 sigma
+!F4 U+03C4 tau
+!F5 U+03C5 upsilon
+!F6 U+03C6 phi
+!F7 U+03C7 chi
+!F8 U+03C8 psi
+!F9 U+03C9 omega
+!FA U+03CA iotadieresis
+!FB U+03CB upsilondieresis
+!FC U+03CC omicrontonos
+!FD U+03CD upsilontonos
+!FE U+03CE omegatonos
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1254.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1254.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1254.map	(revision 8435)
@@ -0,0 +1,249 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+02C6 circumflex
+!89 U+2030 perthousand
+!8A U+0160 Scaron
+!8B U+2039 guilsinglleft
+!8C U+0152 OE
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!98 U+02DC tilde
+!99 U+2122 trademark
+!9A U+0161 scaron
+!9B U+203A guilsinglright
+!9C U+0153 oe
+!9F U+0178 Ydieresis
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+011E Gbreve
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+0130 Idotaccent
+!DE U+015E Scedilla
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+011F gbreve
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+0131 dotlessi
+!FE U+015F scedilla
+!FF U+00FF ydieresis
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1255.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1255.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1255.map	(revision 8435)
@@ -0,0 +1,233 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+02C6 circumflex
+!89 U+2030 perthousand
+!8B U+2039 guilsinglleft
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!98 U+02DC tilde
+!99 U+2122 trademark
+!9B U+203A guilsinglright
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+20AA afii57636
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00D7 multiply
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD sfthyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 middot
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00F7 divide
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+05B0 afii57799
+!C1 U+05B1 afii57801
+!C2 U+05B2 afii57800
+!C3 U+05B3 afii57802
+!C4 U+05B4 afii57793
+!C5 U+05B5 afii57794
+!C6 U+05B6 afii57795
+!C7 U+05B7 afii57798
+!C8 U+05B8 afii57797
+!C9 U+05B9 afii57806
+!CB U+05BB afii57796
+!CC U+05BC afii57807
+!CD U+05BD afii57839
+!CE U+05BE afii57645
+!CF U+05BF afii57841
+!D0 U+05C0 afii57842
+!D1 U+05C1 afii57804
+!D2 U+05C2 afii57803
+!D3 U+05C3 afii57658
+!D4 U+05F0 afii57716
+!D5 U+05F1 afii57717
+!D6 U+05F2 afii57718
+!D7 U+05F3 gereshhebrew
+!D8 U+05F4 gershayimhebrew
+!E0 U+05D0 afii57664
+!E1 U+05D1 afii57665
+!E2 U+05D2 afii57666
+!E3 U+05D3 afii57667
+!E4 U+05D4 afii57668
+!E5 U+05D5 afii57669
+!E6 U+05D6 afii57670
+!E7 U+05D7 afii57671
+!E8 U+05D8 afii57672
+!E9 U+05D9 afii57673
+!EA U+05DA afii57674
+!EB U+05DB afii57675
+!EC U+05DC afii57676
+!ED U+05DD afii57677
+!EE U+05DE afii57678
+!EF U+05DF afii57679
+!F0 U+05E0 afii57680
+!F1 U+05E1 afii57681
+!F2 U+05E2 afii57682
+!F3 U+05E3 afii57683
+!F4 U+05E4 afii57684
+!F5 U+05E5 afii57685
+!F6 U+05E6 afii57686
+!F7 U+05E7 afii57687
+!F8 U+05E8 afii57688
+!F9 U+05E9 afii57689
+!FA U+05EA afii57690
+!FD U+200E afii299
+!FE U+200F afii300
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1257.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1257.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1257.map	(revision 8435)
@@ -0,0 +1,244 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!89 U+2030 perthousand
+!8B U+2039 guilsinglleft
+!8D U+00A8 dieresis
+!8E U+02C7 caron
+!8F U+00B8 cedilla
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!99 U+2122 trademark
+!9B U+203A guilsinglright
+!9D U+00AF macron
+!9E U+02DB ogonek
+!A0 U+00A0 space
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00D8 Oslash
+!A9 U+00A9 copyright
+!AA U+0156 Rcommaaccent
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00C6 AE
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00F8 oslash
+!B9 U+00B9 onesuperior
+!BA U+0157 rcommaaccent
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00E6 ae
+!C0 U+0104 Aogonek
+!C1 U+012E Iogonek
+!C2 U+0100 Amacron
+!C3 U+0106 Cacute
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+0118 Eogonek
+!C7 U+0112 Emacron
+!C8 U+010C Ccaron
+!C9 U+00C9 Eacute
+!CA U+0179 Zacute
+!CB U+0116 Edotaccent
+!CC U+0122 Gcommaaccent
+!CD U+0136 Kcommaaccent
+!CE U+012A Imacron
+!CF U+013B Lcommaaccent
+!D0 U+0160 Scaron
+!D1 U+0143 Nacute
+!D2 U+0145 Ncommaaccent
+!D3 U+00D3 Oacute
+!D4 U+014C Omacron
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+0172 Uogonek
+!D9 U+0141 Lslash
+!DA U+015A Sacute
+!DB U+016A Umacron
+!DC U+00DC Udieresis
+!DD U+017B Zdotaccent
+!DE U+017D Zcaron
+!DF U+00DF germandbls
+!E0 U+0105 aogonek
+!E1 U+012F iogonek
+!E2 U+0101 amacron
+!E3 U+0107 cacute
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+0119 eogonek
+!E7 U+0113 emacron
+!E8 U+010D ccaron
+!E9 U+00E9 eacute
+!EA U+017A zacute
+!EB U+0117 edotaccent
+!EC U+0123 gcommaaccent
+!ED U+0137 kcommaaccent
+!EE U+012B imacron
+!EF U+013C lcommaaccent
+!F0 U+0161 scaron
+!F1 U+0144 nacute
+!F2 U+0146 ncommaaccent
+!F3 U+00F3 oacute
+!F4 U+014D omacron
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+0173 uogonek
+!F9 U+0142 lslash
+!FA U+015B sacute
+!FB U+016B umacron
+!FC U+00FC udieresis
+!FD U+017C zdotaccent
+!FE U+017E zcaron
+!FF U+02D9 dotaccent
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1258.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1258.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp1258.map	(revision 8435)
@@ -0,0 +1,247 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+02C6 circumflex
+!89 U+2030 perthousand
+!8B U+2039 guilsinglleft
+!8C U+0152 OE
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!98 U+02DC tilde
+!99 U+2122 trademark
+!9B U+203A guilsinglright
+!9C U+0153 oe
+!9F U+0178 Ydieresis
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+0102 Abreve
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+0300 gravecomb
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+0110 Dcroat
+!D1 U+00D1 Ntilde
+!D2 U+0309 hookabovecomb
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+01A0 Ohorn
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+01AF Uhorn
+!DE U+0303 tildecomb
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+0103 abreve
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+0301 acutecomb
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+0111 dcroat
+!F1 U+00F1 ntilde
+!F2 U+0323 dotbelowcomb
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+01A1 ohorn
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+01B0 uhorn
+!FE U+20AB dong
+!FF U+00FF ydieresis
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp874.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp874.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/cp874.map	(revision 8435)
@@ -0,0 +1,225 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!85 U+2026 ellipsis
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!A0 U+00A0 space
+!A1 U+0E01 kokaithai
+!A2 U+0E02 khokhaithai
+!A3 U+0E03 khokhuatthai
+!A4 U+0E04 khokhwaithai
+!A5 U+0E05 khokhonthai
+!A6 U+0E06 khorakhangthai
+!A7 U+0E07 ngonguthai
+!A8 U+0E08 chochanthai
+!A9 U+0E09 chochingthai
+!AA U+0E0A chochangthai
+!AB U+0E0B sosothai
+!AC U+0E0C chochoethai
+!AD U+0E0D yoyingthai
+!AE U+0E0E dochadathai
+!AF U+0E0F topatakthai
+!B0 U+0E10 thothanthai
+!B1 U+0E11 thonangmonthothai
+!B2 U+0E12 thophuthaothai
+!B3 U+0E13 nonenthai
+!B4 U+0E14 dodekthai
+!B5 U+0E15 totaothai
+!B6 U+0E16 thothungthai
+!B7 U+0E17 thothahanthai
+!B8 U+0E18 thothongthai
+!B9 U+0E19 nonuthai
+!BA U+0E1A bobaimaithai
+!BB U+0E1B poplathai
+!BC U+0E1C phophungthai
+!BD U+0E1D fofathai
+!BE U+0E1E phophanthai
+!BF U+0E1F fofanthai
+!C0 U+0E20 phosamphaothai
+!C1 U+0E21 momathai
+!C2 U+0E22 yoyakthai
+!C3 U+0E23 roruathai
+!C4 U+0E24 ruthai
+!C5 U+0E25 lolingthai
+!C6 U+0E26 luthai
+!C7 U+0E27 wowaenthai
+!C8 U+0E28 sosalathai
+!C9 U+0E29 sorusithai
+!CA U+0E2A sosuathai
+!CB U+0E2B hohipthai
+!CC U+0E2C lochulathai
+!CD U+0E2D oangthai
+!CE U+0E2E honokhukthai
+!CF U+0E2F paiyannoithai
+!D0 U+0E30 saraathai
+!D1 U+0E31 maihanakatthai
+!D2 U+0E32 saraaathai
+!D3 U+0E33 saraamthai
+!D4 U+0E34 saraithai
+!D5 U+0E35 saraiithai
+!D6 U+0E36 sarauethai
+!D7 U+0E37 saraueethai
+!D8 U+0E38 sarauthai
+!D9 U+0E39 sarauuthai
+!DA U+0E3A phinthuthai
+!DF U+0E3F bahtthai
+!E0 U+0E40 saraethai
+!E1 U+0E41 saraaethai
+!E2 U+0E42 saraothai
+!E3 U+0E43 saraaimaimuanthai
+!E4 U+0E44 saraaimaimalaithai
+!E5 U+0E45 lakkhangyaothai
+!E6 U+0E46 maiyamokthai
+!E7 U+0E47 maitaikhuthai
+!E8 U+0E48 maiekthai
+!E9 U+0E49 maithothai
+!EA U+0E4A maitrithai
+!EB U+0E4B maichattawathai
+!EC U+0E4C thanthakhatthai
+!ED U+0E4D nikhahitthai
+!EE U+0E4E yamakkanthai
+!EF U+0E4F fongmanthai
+!F0 U+0E50 zerothai
+!F1 U+0E51 onethai
+!F2 U+0E52 twothai
+!F3 U+0E53 threethai
+!F4 U+0E54 fourthai
+!F5 U+0E55 fivethai
+!F6 U+0E56 sixthai
+!F7 U+0E57 seventhai
+!F8 U+0E58 eightthai
+!F9 U+0E59 ninethai
+!FA U+0E5A angkhankhuthai
+!FB U+0E5B khomutthai
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-1.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-1.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-1.map	(revision 8435)
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+00D0 Eth
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+00DE Thorn
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+00F0 eth
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+00FE thorn
+!FF U+00FF ydieresis
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-11.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-11.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-11.map	(revision 8435)
@@ -0,0 +1,248 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0E01 kokaithai
+!A2 U+0E02 khokhaithai
+!A3 U+0E03 khokhuatthai
+!A4 U+0E04 khokhwaithai
+!A5 U+0E05 khokhonthai
+!A6 U+0E06 khorakhangthai
+!A7 U+0E07 ngonguthai
+!A8 U+0E08 chochanthai
+!A9 U+0E09 chochingthai
+!AA U+0E0A chochangthai
+!AB U+0E0B sosothai
+!AC U+0E0C chochoethai
+!AD U+0E0D yoyingthai
+!AE U+0E0E dochadathai
+!AF U+0E0F topatakthai
+!B0 U+0E10 thothanthai
+!B1 U+0E11 thonangmonthothai
+!B2 U+0E12 thophuthaothai
+!B3 U+0E13 nonenthai
+!B4 U+0E14 dodekthai
+!B5 U+0E15 totaothai
+!B6 U+0E16 thothungthai
+!B7 U+0E17 thothahanthai
+!B8 U+0E18 thothongthai
+!B9 U+0E19 nonuthai
+!BA U+0E1A bobaimaithai
+!BB U+0E1B poplathai
+!BC U+0E1C phophungthai
+!BD U+0E1D fofathai
+!BE U+0E1E phophanthai
+!BF U+0E1F fofanthai
+!C0 U+0E20 phosamphaothai
+!C1 U+0E21 momathai
+!C2 U+0E22 yoyakthai
+!C3 U+0E23 roruathai
+!C4 U+0E24 ruthai
+!C5 U+0E25 lolingthai
+!C6 U+0E26 luthai
+!C7 U+0E27 wowaenthai
+!C8 U+0E28 sosalathai
+!C9 U+0E29 sorusithai
+!CA U+0E2A sosuathai
+!CB U+0E2B hohipthai
+!CC U+0E2C lochulathai
+!CD U+0E2D oangthai
+!CE U+0E2E honokhukthai
+!CF U+0E2F paiyannoithai
+!D0 U+0E30 saraathai
+!D1 U+0E31 maihanakatthai
+!D2 U+0E32 saraaathai
+!D3 U+0E33 saraamthai
+!D4 U+0E34 saraithai
+!D5 U+0E35 saraiithai
+!D6 U+0E36 sarauethai
+!D7 U+0E37 saraueethai
+!D8 U+0E38 sarauthai
+!D9 U+0E39 sarauuthai
+!DA U+0E3A phinthuthai
+!DF U+0E3F bahtthai
+!E0 U+0E40 saraethai
+!E1 U+0E41 saraaethai
+!E2 U+0E42 saraothai
+!E3 U+0E43 saraaimaimuanthai
+!E4 U+0E44 saraaimaimalaithai
+!E5 U+0E45 lakkhangyaothai
+!E6 U+0E46 maiyamokthai
+!E7 U+0E47 maitaikhuthai
+!E8 U+0E48 maiekthai
+!E9 U+0E49 maithothai
+!EA U+0E4A maitrithai
+!EB U+0E4B maichattawathai
+!EC U+0E4C thanthakhatthai
+!ED U+0E4D nikhahitthai
+!EE U+0E4E yamakkanthai
+!EF U+0E4F fongmanthai
+!F0 U+0E50 zerothai
+!F1 U+0E51 onethai
+!F2 U+0E52 twothai
+!F3 U+0E53 threethai
+!F4 U+0E54 fourthai
+!F5 U+0E55 fivethai
+!F6 U+0E56 sixthai
+!F7 U+0E57 seventhai
+!F8 U+0E58 eightthai
+!F9 U+0E59 ninethai
+!FA U+0E5A angkhankhuthai
+!FB U+0E5B khomutthai
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-15.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-15.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-15.map	(revision 8435)
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+20AC Euro
+!A5 U+00A5 yen
+!A6 U+0160 Scaron
+!A7 U+00A7 section
+!A8 U+0161 scaron
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+017D Zcaron
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+017E zcaron
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+0152 OE
+!BD U+0153 oe
+!BE U+0178 Ydieresis
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+00D0 Eth
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+00DE Thorn
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+00F0 eth
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+00FE thorn
+!FF U+00FF ydieresis
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-16.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-16.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-16.map	(revision 8435)
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0104 Aogonek
+!A2 U+0105 aogonek
+!A3 U+0141 Lslash
+!A4 U+20AC Euro
+!A5 U+201E quotedblbase
+!A6 U+0160 Scaron
+!A7 U+00A7 section
+!A8 U+0161 scaron
+!A9 U+00A9 copyright
+!AA U+0218 Scommaaccent
+!AB U+00AB guillemotleft
+!AC U+0179 Zacute
+!AD U+00AD hyphen
+!AE U+017A zacute
+!AF U+017B Zdotaccent
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+010C Ccaron
+!B3 U+0142 lslash
+!B4 U+017D Zcaron
+!B5 U+201D quotedblright
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+017E zcaron
+!B9 U+010D ccaron
+!BA U+0219 scommaaccent
+!BB U+00BB guillemotright
+!BC U+0152 OE
+!BD U+0153 oe
+!BE U+0178 Ydieresis
+!BF U+017C zdotaccent
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+0102 Abreve
+!C4 U+00C4 Adieresis
+!C5 U+0106 Cacute
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+0110 Dcroat
+!D1 U+0143 Nacute
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+0150 Ohungarumlaut
+!D6 U+00D6 Odieresis
+!D7 U+015A Sacute
+!D8 U+0170 Uhungarumlaut
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+0118 Eogonek
+!DE U+021A Tcommaaccent
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+0103 abreve
+!E4 U+00E4 adieresis
+!E5 U+0107 cacute
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+0111 dcroat
+!F1 U+0144 nacute
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+0151 ohungarumlaut
+!F6 U+00F6 odieresis
+!F7 U+015B sacute
+!F8 U+0171 uhungarumlaut
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+0119 eogonek
+!FE U+021B tcommaaccent
+!FF U+00FF ydieresis
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-2.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-2.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-2.map	(revision 8435)
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0104 Aogonek
+!A2 U+02D8 breve
+!A3 U+0141 Lslash
+!A4 U+00A4 currency
+!A5 U+013D Lcaron
+!A6 U+015A Sacute
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+0160 Scaron
+!AA U+015E Scedilla
+!AB U+0164 Tcaron
+!AC U+0179 Zacute
+!AD U+00AD hyphen
+!AE U+017D Zcaron
+!AF U+017B Zdotaccent
+!B0 U+00B0 degree
+!B1 U+0105 aogonek
+!B2 U+02DB ogonek
+!B3 U+0142 lslash
+!B4 U+00B4 acute
+!B5 U+013E lcaron
+!B6 U+015B sacute
+!B7 U+02C7 caron
+!B8 U+00B8 cedilla
+!B9 U+0161 scaron
+!BA U+015F scedilla
+!BB U+0165 tcaron
+!BC U+017A zacute
+!BD U+02DD hungarumlaut
+!BE U+017E zcaron
+!BF U+017C zdotaccent
+!C0 U+0154 Racute
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+0102 Abreve
+!C4 U+00C4 Adieresis
+!C5 U+0139 Lacute
+!C6 U+0106 Cacute
+!C7 U+00C7 Ccedilla
+!C8 U+010C Ccaron
+!C9 U+00C9 Eacute
+!CA U+0118 Eogonek
+!CB U+00CB Edieresis
+!CC U+011A Ecaron
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+010E Dcaron
+!D0 U+0110 Dcroat
+!D1 U+0143 Nacute
+!D2 U+0147 Ncaron
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+0150 Ohungarumlaut
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+0158 Rcaron
+!D9 U+016E Uring
+!DA U+00DA Uacute
+!DB U+0170 Uhungarumlaut
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+0162 Tcommaaccent
+!DF U+00DF germandbls
+!E0 U+0155 racute
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+0103 abreve
+!E4 U+00E4 adieresis
+!E5 U+013A lacute
+!E6 U+0107 cacute
+!E7 U+00E7 ccedilla
+!E8 U+010D ccaron
+!E9 U+00E9 eacute
+!EA U+0119 eogonek
+!EB U+00EB edieresis
+!EC U+011B ecaron
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+010F dcaron
+!F0 U+0111 dcroat
+!F1 U+0144 nacute
+!F2 U+0148 ncaron
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+0151 ohungarumlaut
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+0159 rcaron
+!F9 U+016F uring
+!FA U+00FA uacute
+!FB U+0171 uhungarumlaut
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+0163 tcommaaccent
+!FF U+02D9 dotaccent
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-4.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-4.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-4.map	(revision 8435)
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0104 Aogonek
+!A2 U+0138 kgreenlandic
+!A3 U+0156 Rcommaaccent
+!A4 U+00A4 currency
+!A5 U+0128 Itilde
+!A6 U+013B Lcommaaccent
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+0160 Scaron
+!AA U+0112 Emacron
+!AB U+0122 Gcommaaccent
+!AC U+0166 Tbar
+!AD U+00AD hyphen
+!AE U+017D Zcaron
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+0105 aogonek
+!B2 U+02DB ogonek
+!B3 U+0157 rcommaaccent
+!B4 U+00B4 acute
+!B5 U+0129 itilde
+!B6 U+013C lcommaaccent
+!B7 U+02C7 caron
+!B8 U+00B8 cedilla
+!B9 U+0161 scaron
+!BA U+0113 emacron
+!BB U+0123 gcommaaccent
+!BC U+0167 tbar
+!BD U+014A Eng
+!BE U+017E zcaron
+!BF U+014B eng
+!C0 U+0100 Amacron
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+012E Iogonek
+!C8 U+010C Ccaron
+!C9 U+00C9 Eacute
+!CA U+0118 Eogonek
+!CB U+00CB Edieresis
+!CC U+0116 Edotaccent
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+012A Imacron
+!D0 U+0110 Dcroat
+!D1 U+0145 Ncommaaccent
+!D2 U+014C Omacron
+!D3 U+0136 Kcommaaccent
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+0172 Uogonek
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+0168 Utilde
+!DE U+016A Umacron
+!DF U+00DF germandbls
+!E0 U+0101 amacron
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+012F iogonek
+!E8 U+010D ccaron
+!E9 U+00E9 eacute
+!EA U+0119 eogonek
+!EB U+00EB edieresis
+!EC U+0117 edotaccent
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+012B imacron
+!F0 U+0111 dcroat
+!F1 U+0146 ncommaaccent
+!F2 U+014D omacron
+!F3 U+0137 kcommaaccent
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+0173 uogonek
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+0169 utilde
+!FE U+016B umacron
+!FF U+02D9 dotaccent
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-5.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-5.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-5.map	(revision 8435)
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0401 afii10023
+!A2 U+0402 afii10051
+!A3 U+0403 afii10052
+!A4 U+0404 afii10053
+!A5 U+0405 afii10054
+!A6 U+0406 afii10055
+!A7 U+0407 afii10056
+!A8 U+0408 afii10057
+!A9 U+0409 afii10058
+!AA U+040A afii10059
+!AB U+040B afii10060
+!AC U+040C afii10061
+!AD U+00AD hyphen
+!AE U+040E afii10062
+!AF U+040F afii10145
+!B0 U+0410 afii10017
+!B1 U+0411 afii10018
+!B2 U+0412 afii10019
+!B3 U+0413 afii10020
+!B4 U+0414 afii10021
+!B5 U+0415 afii10022
+!B6 U+0416 afii10024
+!B7 U+0417 afii10025
+!B8 U+0418 afii10026
+!B9 U+0419 afii10027
+!BA U+041A afii10028
+!BB U+041B afii10029
+!BC U+041C afii10030
+!BD U+041D afii10031
+!BE U+041E afii10032
+!BF U+041F afii10033
+!C0 U+0420 afii10034
+!C1 U+0421 afii10035
+!C2 U+0422 afii10036
+!C3 U+0423 afii10037
+!C4 U+0424 afii10038
+!C5 U+0425 afii10039
+!C6 U+0426 afii10040
+!C7 U+0427 afii10041
+!C8 U+0428 afii10042
+!C9 U+0429 afii10043
+!CA U+042A afii10044
+!CB U+042B afii10045
+!CC U+042C afii10046
+!CD U+042D afii10047
+!CE U+042E afii10048
+!CF U+042F afii10049
+!D0 U+0430 afii10065
+!D1 U+0431 afii10066
+!D2 U+0432 afii10067
+!D3 U+0433 afii10068
+!D4 U+0434 afii10069
+!D5 U+0435 afii10070
+!D6 U+0436 afii10072
+!D7 U+0437 afii10073
+!D8 U+0438 afii10074
+!D9 U+0439 afii10075
+!DA U+043A afii10076
+!DB U+043B afii10077
+!DC U+043C afii10078
+!DD U+043D afii10079
+!DE U+043E afii10080
+!DF U+043F afii10081
+!E0 U+0440 afii10082
+!E1 U+0441 afii10083
+!E2 U+0442 afii10084
+!E3 U+0443 afii10085
+!E4 U+0444 afii10086
+!E5 U+0445 afii10087
+!E6 U+0446 afii10088
+!E7 U+0447 afii10089
+!E8 U+0448 afii10090
+!E9 U+0449 afii10091
+!EA U+044A afii10092
+!EB U+044B afii10093
+!EC U+044C afii10094
+!ED U+044D afii10095
+!EE U+044E afii10096
+!EF U+044F afii10097
+!F0 U+2116 afii61352
+!F1 U+0451 afii10071
+!F2 U+0452 afii10099
+!F3 U+0453 afii10100
+!F4 U+0454 afii10101
+!F5 U+0455 afii10102
+!F6 U+0456 afii10103
+!F7 U+0457 afii10104
+!F8 U+0458 afii10105
+!F9 U+0459 afii10106
+!FA U+045A afii10107
+!FB U+045B afii10108
+!FC U+045C afii10109
+!FD U+00A7 section
+!FE U+045E afii10110
+!FF U+045F afii10193
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-7.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-7.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-7.map	(revision 8435)
@@ -0,0 +1,250 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+2018 quoteleft
+!A2 U+2019 quoteright
+!A3 U+00A3 sterling
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AF U+2015 afii00208
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+0384 tonos
+!B5 U+0385 dieresistonos
+!B6 U+0386 Alphatonos
+!B7 U+00B7 periodcentered
+!B8 U+0388 Epsilontonos
+!B9 U+0389 Etatonos
+!BA U+038A Iotatonos
+!BB U+00BB guillemotright
+!BC U+038C Omicrontonos
+!BD U+00BD onehalf
+!BE U+038E Upsilontonos
+!BF U+038F Omegatonos
+!C0 U+0390 iotadieresistonos
+!C1 U+0391 Alpha
+!C2 U+0392 Beta
+!C3 U+0393 Gamma
+!C4 U+0394 Delta
+!C5 U+0395 Epsilon
+!C6 U+0396 Zeta
+!C7 U+0397 Eta
+!C8 U+0398 Theta
+!C9 U+0399 Iota
+!CA U+039A Kappa
+!CB U+039B Lambda
+!CC U+039C Mu
+!CD U+039D Nu
+!CE U+039E Xi
+!CF U+039F Omicron
+!D0 U+03A0 Pi
+!D1 U+03A1 Rho
+!D3 U+03A3 Sigma
+!D4 U+03A4 Tau
+!D5 U+03A5 Upsilon
+!D6 U+03A6 Phi
+!D7 U+03A7 Chi
+!D8 U+03A8 Psi
+!D9 U+03A9 Omega
+!DA U+03AA Iotadieresis
+!DB U+03AB Upsilondieresis
+!DC U+03AC alphatonos
+!DD U+03AD epsilontonos
+!DE U+03AE etatonos
+!DF U+03AF iotatonos
+!E0 U+03B0 upsilondieresistonos
+!E1 U+03B1 alpha
+!E2 U+03B2 beta
+!E3 U+03B3 gamma
+!E4 U+03B4 delta
+!E5 U+03B5 epsilon
+!E6 U+03B6 zeta
+!E7 U+03B7 eta
+!E8 U+03B8 theta
+!E9 U+03B9 iota
+!EA U+03BA kappa
+!EB U+03BB lambda
+!EC U+03BC mu
+!ED U+03BD nu
+!EE U+03BE xi
+!EF U+03BF omicron
+!F0 U+03C0 pi
+!F1 U+03C1 rho
+!F2 U+03C2 sigma1
+!F3 U+03C3 sigma
+!F4 U+03C4 tau
+!F5 U+03C5 upsilon
+!F6 U+03C6 phi
+!F7 U+03C7 chi
+!F8 U+03C8 psi
+!F9 U+03C9 omega
+!FA U+03CA iotadieresis
+!FB U+03CB upsilondieresis
+!FC U+03CC omicrontonos
+!FD U+03CD upsilontonos
+!FE U+03CE omegatonos
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-9.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-9.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/iso-8859-9.map	(revision 8435)
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+011E Gbreve
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+0130 Idotaccent
+!DE U+015E Scedilla
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+011F gbreve
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+0131 dotlessi
+!FE U+015F scedilla
+!FF U+00FF ydieresis
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/koi8-r.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/koi8-r.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/koi8-r.map	(revision 8435)
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+2500 SF100000
+!81 U+2502 SF110000
+!82 U+250C SF010000
+!83 U+2510 SF030000
+!84 U+2514 SF020000
+!85 U+2518 SF040000
+!86 U+251C SF080000
+!87 U+2524 SF090000
+!88 U+252C SF060000
+!89 U+2534 SF070000
+!8A U+253C SF050000
+!8B U+2580 upblock
+!8C U+2584 dnblock
+!8D U+2588 block
+!8E U+258C lfblock
+!8F U+2590 rtblock
+!90 U+2591 ltshade
+!91 U+2592 shade
+!92 U+2593 dkshade
+!93 U+2320 integraltp
+!94 U+25A0 filledbox
+!95 U+2219 periodcentered
+!96 U+221A radical
+!97 U+2248 approxequal
+!98 U+2264 lessequal
+!99 U+2265 greaterequal
+!9A U+00A0 space
+!9B U+2321 integralbt
+!9C U+00B0 degree
+!9D U+00B2 twosuperior
+!9E U+00B7 periodcentered
+!9F U+00F7 divide
+!A0 U+2550 SF430000
+!A1 U+2551 SF240000
+!A2 U+2552 SF510000
+!A3 U+0451 afii10071
+!A4 U+2553 SF520000
+!A5 U+2554 SF390000
+!A6 U+2555 SF220000
+!A7 U+2556 SF210000
+!A8 U+2557 SF250000
+!A9 U+2558 SF500000
+!AA U+2559 SF490000
+!AB U+255A SF380000
+!AC U+255B SF280000
+!AD U+255C SF270000
+!AE U+255D SF260000
+!AF U+255E SF360000
+!B0 U+255F SF370000
+!B1 U+2560 SF420000
+!B2 U+2561 SF190000
+!B3 U+0401 afii10023
+!B4 U+2562 SF200000
+!B5 U+2563 SF230000
+!B6 U+2564 SF470000
+!B7 U+2565 SF480000
+!B8 U+2566 SF410000
+!B9 U+2567 SF450000
+!BA U+2568 SF460000
+!BB U+2569 SF400000
+!BC U+256A SF540000
+!BD U+256B SF530000
+!BE U+256C SF440000
+!BF U+00A9 copyright
+!C0 U+044E afii10096
+!C1 U+0430 afii10065
+!C2 U+0431 afii10066
+!C3 U+0446 afii10088
+!C4 U+0434 afii10069
+!C5 U+0435 afii10070
+!C6 U+0444 afii10086
+!C7 U+0433 afii10068
+!C8 U+0445 afii10087
+!C9 U+0438 afii10074
+!CA U+0439 afii10075
+!CB U+043A afii10076
+!CC U+043B afii10077
+!CD U+043C afii10078
+!CE U+043D afii10079
+!CF U+043E afii10080
+!D0 U+043F afii10081
+!D1 U+044F afii10097
+!D2 U+0440 afii10082
+!D3 U+0441 afii10083
+!D4 U+0442 afii10084
+!D5 U+0443 afii10085
+!D6 U+0436 afii10072
+!D7 U+0432 afii10067
+!D8 U+044C afii10094
+!D9 U+044B afii10093
+!DA U+0437 afii10073
+!DB U+0448 afii10090
+!DC U+044D afii10095
+!DD U+0449 afii10091
+!DE U+0447 afii10089
+!DF U+044A afii10092
+!E0 U+042E afii10048
+!E1 U+0410 afii10017
+!E2 U+0411 afii10018
+!E3 U+0426 afii10040
+!E4 U+0414 afii10021
+!E5 U+0415 afii10022
+!E6 U+0424 afii10038
+!E7 U+0413 afii10020
+!E8 U+0425 afii10039
+!E9 U+0418 afii10026
+!EA U+0419 afii10027
+!EB U+041A afii10028
+!EC U+041B afii10029
+!ED U+041C afii10030
+!EE U+041D afii10031
+!EF U+041E afii10032
+!F0 U+041F afii10033
+!F1 U+042F afii10049
+!F2 U+0420 afii10034
+!F3 U+0421 afii10035
+!F4 U+0422 afii10036
+!F5 U+0423 afii10037
+!F6 U+0416 afii10024
+!F7 U+0412 afii10019
+!F8 U+042C afii10046
+!F9 U+042B afii10045
+!FA U+0417 afii10025
+!FB U+0428 afii10042
+!FC U+042D afii10047
+!FD U+0429 afii10043
+!FE U+0427 afii10041
+!FF U+042A afii10044
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/koi8-u.map
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/koi8-u.map	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/koi8-u.map	(revision 8435)
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+2500 SF100000
+!81 U+2502 SF110000
+!82 U+250C SF010000
+!83 U+2510 SF030000
+!84 U+2514 SF020000
+!85 U+2518 SF040000
+!86 U+251C SF080000
+!87 U+2524 SF090000
+!88 U+252C SF060000
+!89 U+2534 SF070000
+!8A U+253C SF050000
+!8B U+2580 upblock
+!8C U+2584 dnblock
+!8D U+2588 block
+!8E U+258C lfblock
+!8F U+2590 rtblock
+!90 U+2591 ltshade
+!91 U+2592 shade
+!92 U+2593 dkshade
+!93 U+2320 integraltp
+!94 U+25A0 filledbox
+!95 U+2022 bullet
+!96 U+221A radical
+!97 U+2248 approxequal
+!98 U+2264 lessequal
+!99 U+2265 greaterequal
+!9A U+00A0 space
+!9B U+2321 integralbt
+!9C U+00B0 degree
+!9D U+00B2 twosuperior
+!9E U+00B7 periodcentered
+!9F U+00F7 divide
+!A0 U+2550 SF430000
+!A1 U+2551 SF240000
+!A2 U+2552 SF510000
+!A3 U+0451 afii10071
+!A4 U+0454 afii10101
+!A5 U+2554 SF390000
+!A6 U+0456 afii10103
+!A7 U+0457 afii10104
+!A8 U+2557 SF250000
+!A9 U+2558 SF500000
+!AA U+2559 SF490000
+!AB U+255A SF380000
+!AC U+255B SF280000
+!AD U+0491 afii10098
+!AE U+255D SF260000
+!AF U+255E SF360000
+!B0 U+255F SF370000
+!B1 U+2560 SF420000
+!B2 U+2561 SF190000
+!B3 U+0401 afii10023
+!B4 U+0404 afii10053
+!B5 U+2563 SF230000
+!B6 U+0406 afii10055
+!B7 U+0407 afii10056
+!B8 U+2566 SF410000
+!B9 U+2567 SF450000
+!BA U+2568 SF460000
+!BB U+2569 SF400000
+!BC U+256A SF540000
+!BD U+0490 afii10050
+!BE U+256C SF440000
+!BF U+00A9 copyright
+!C0 U+044E afii10096
+!C1 U+0430 afii10065
+!C2 U+0431 afii10066
+!C3 U+0446 afii10088
+!C4 U+0434 afii10069
+!C5 U+0435 afii10070
+!C6 U+0444 afii10086
+!C7 U+0433 afii10068
+!C8 U+0445 afii10087
+!C9 U+0438 afii10074
+!CA U+0439 afii10075
+!CB U+043A afii10076
+!CC U+043B afii10077
+!CD U+043C afii10078
+!CE U+043D afii10079
+!CF U+043E afii10080
+!D0 U+043F afii10081
+!D1 U+044F afii10097
+!D2 U+0440 afii10082
+!D3 U+0441 afii10083
+!D4 U+0442 afii10084
+!D5 U+0443 afii10085
+!D6 U+0436 afii10072
+!D7 U+0432 afii10067
+!D8 U+044C afii10094
+!D9 U+044B afii10093
+!DA U+0437 afii10073
+!DB U+0448 afii10090
+!DC U+044D afii10095
+!DD U+0449 afii10091
+!DE U+0447 afii10089
+!DF U+044A afii10092
+!E0 U+042E afii10048
+!E1 U+0410 afii10017
+!E2 U+0411 afii10018
+!E3 U+0426 afii10040
+!E4 U+0414 afii10021
+!E5 U+0415 afii10022
+!E6 U+0424 afii10038
+!E7 U+0413 afii10020
+!E8 U+0425 afii10039
+!E9 U+0418 afii10026
+!EA U+0419 afii10027
+!EB U+041A afii10028
+!EC U+041B afii10029
+!ED U+041C afii10030
+!EE U+041D afii10031
+!EF U+041E afii10032
+!F0 U+041F afii10033
+!F1 U+042F afii10049
+!F2 U+0420 afii10034
+!F3 U+0421 afii10035
+!F4 U+0422 afii10036
+!F5 U+0423 afii10037
+!F6 U+0416 afii10024
+!F7 U+0412 afii10019
+!F8 U+042C afii10046
+!F9 U+042B afii10045
+!FA U+0417 afii10025
+!FB U+0428 afii10042
+!FC U+042D afii10047
+!FD U+0429 afii10043
+!FE U+0427 afii10041
+!FF U+042A afii10044
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/makefont.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/makefont.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/makefont.php	(revision 8435)
@@ -0,0 +1,447 @@
+<?php
+/*******************************************************************************
+* Utility to generate font definition files                                    *
+*                                                                              *
+* Version: 1.31                                                                *
+* Date:    2019-12-07                                                          *
+* Author:  Olivier PLATHEY                                                     *
+*******************************************************************************/
+
+require('ttfparser.php');
+
+function Message($txt, $severity='')
+{
+	if(PHP_SAPI=='cli')
+	{
+		if($severity)
+			echo "$severity: ";
+		echo "$txt\n";
+	}
+	else
+	{
+		if($severity)
+			echo "<b>$severity</b>: ";
+		echo "$txt<br>";
+	}
+}
+
+function Notice($txt)
+{
+	Message($txt, 'Notice');
+}
+
+function Warning($txt)
+{
+	Message($txt, 'Warning');
+}
+
+function Error($txt)
+{
+	Message($txt, 'Error');
+	exit;
+}
+
+function LoadMap($enc)
+{
+	$file = dirname(__FILE__).'/'.strtolower($enc).'.map';
+	$a = file($file);
+	if(empty($a))
+		Error('Encoding not found: '.$enc);
+	$map = array_fill(0, 256, array('uv'=>-1, 'name'=>'.notdef'));
+	foreach($a as $line)
+	{
+		$e = explode(' ', rtrim($line));
+		$c = hexdec(substr($e[0],1));
+		$uv = hexdec(substr($e[1],2));
+		$name = $e[2];
+		$map[$c] = array('uv'=>$uv, 'name'=>$name);
+	}
+	return $map;
+}
+
+function GetInfoFromTrueType($file, $embed, $subset, $map)
+{
+	// Return information from a TrueType font
+	try
+	{
+		$ttf = new TTFParser($file);
+		$ttf->Parse();
+	}
+	catch(Exception $e)
+	{
+		Error($e->getMessage());
+	}
+	if($embed)
+	{
+		if(!$ttf->embeddable)
+			Error('Font license does not allow embedding');
+		if($subset)
+		{
+			$chars = array();
+			foreach($map as $v)
+			{
+				if($v['name']!='.notdef')
+					$chars[] = $v['uv'];
+			}
+			$ttf->Subset($chars);
+			$info['Data'] = $ttf->Build();
+		}
+		else
+			$info['Data'] = file_get_contents($file);
+		$info['OriginalSize'] = strlen($info['Data']);
+	}
+	$k = 1000/$ttf->unitsPerEm;
+	$info['FontName'] = $ttf->postScriptName;
+	$info['Bold'] = $ttf->bold;
+	$info['ItalicAngle'] = $ttf->italicAngle;
+	$info['IsFixedPitch'] = $ttf->isFixedPitch;
+	$info['Ascender'] = round($k*$ttf->typoAscender);
+	$info['Descender'] = round($k*$ttf->typoDescender);
+	$info['UnderlineThickness'] = round($k*$ttf->underlineThickness);
+	$info['UnderlinePosition'] = round($k*$ttf->underlinePosition);
+	$info['FontBBox'] = array(round($k*$ttf->xMin), round($k*$ttf->yMin), round($k*$ttf->xMax), round($k*$ttf->yMax));
+	$info['CapHeight'] = round($k*$ttf->capHeight);
+	$info['MissingWidth'] = round($k*$ttf->glyphs[0]['w']);
+	$widths = array_fill(0, 256, $info['MissingWidth']);
+	foreach($map as $c=>$v)
+	{
+		if($v['name']!='.notdef')
+		{
+			if(isset($ttf->chars[$v['uv']]))
+			{
+				$id = $ttf->chars[$v['uv']];
+				$w = $ttf->glyphs[$id]['w'];
+				$widths[$c] = round($k*$w);
+			}
+			else
+				Warning('Character '.$v['name'].' is missing');
+		}
+	}
+	$info['Widths'] = $widths;
+	return $info;
+}
+
+function GetInfoFromType1($file, $embed, $map)
+{
+	// Return information from a Type1 font
+	if($embed)
+	{
+		$f = fopen($file, 'rb');
+		if(!$f)
+			Error('Can\'t open font file');
+		// Read first segment
+		$a = unpack('Cmarker/Ctype/Vsize', fread($f,6));
+		if($a['marker']!=128)
+			Error('Font file is not a valid binary Type1');
+		$size1 = $a['size'];
+		$data = fread($f, $size1);
+		// Read second segment
+		$a = unpack('Cmarker/Ctype/Vsize', fread($f,6));
+		if($a['marker']!=128)
+			Error('Font file is not a valid binary Type1');
+		$size2 = $a['size'];
+		$data .= fread($f, $size2);
+		fclose($f);
+		$info['Data'] = $data;
+		$info['Size1'] = $size1;
+		$info['Size2'] = $size2;
+	}
+
+	$afm = substr($file, 0, -3).'afm';
+	if(!file_exists($afm))
+		Error('AFM font file not found: '.$afm);
+	$a = file($afm);
+	if(empty($a))
+		Error('AFM file empty or not readable');
+	foreach($a as $line)
+	{
+		$e = explode(' ', rtrim($line));
+		if(count($e)<2)
+			continue;
+		$entry = $e[0];
+		if($entry=='C')
+		{
+			$w = $e[4];
+			$name = $e[7];
+			$cw[$name] = $w;
+		}
+		elseif($entry=='FontName')
+			$info['FontName'] = $e[1];
+		elseif($entry=='Weight')
+			$info['Weight'] = $e[1];
+		elseif($entry=='ItalicAngle')
+			$info['ItalicAngle'] = (int)$e[1];
+		elseif($entry=='Ascender')
+			$info['Ascender'] = (int)$e[1];
+		elseif($entry=='Descender')
+			$info['Descender'] = (int)$e[1];
+		elseif($entry=='UnderlineThickness')
+			$info['UnderlineThickness'] = (int)$e[1];
+		elseif($entry=='UnderlinePosition')
+			$info['UnderlinePosition'] = (int)$e[1];
+		elseif($entry=='IsFixedPitch')
+			$info['IsFixedPitch'] = ($e[1]=='true');
+		elseif($entry=='FontBBox')
+			$info['FontBBox'] = array((int)$e[1], (int)$e[2], (int)$e[3], (int)$e[4]);
+		elseif($entry=='CapHeight')
+			$info['CapHeight'] = (int)$e[1];
+		elseif($entry=='StdVW')
+			$info['StdVW'] = (int)$e[1];
+	}
+
+	if(!isset($info['FontName']))
+		Error('FontName missing in AFM file');
+	if(!isset($info['Ascender']))
+		$info['Ascender'] = $info['FontBBox'][3];
+	if(!isset($info['Descender']))
+		$info['Descender'] = $info['FontBBox'][1];
+	$info['Bold'] = isset($info['Weight']) && preg_match('/bold|black/i', $info['Weight']);
+	if(isset($cw['.notdef']))
+		$info['MissingWidth'] = $cw['.notdef'];
+	else
+		$info['MissingWidth'] = 0;
+	$widths = array_fill(0, 256, $info['MissingWidth']);
+	foreach($map as $c=>$v)
+	{
+		if($v['name']!='.notdef')
+		{
+			if(isset($cw[$v['name']]))
+				$widths[$c] = $cw[$v['name']];
+			else
+				Warning('Character '.$v['name'].' is missing');
+		}
+	}
+	$info['Widths'] = $widths;
+	return $info;
+}
+
+function MakeFontDescriptor($info)
+{
+	// Ascent
+	$fd = "array('Ascent'=>".$info['Ascender'];
+	// Descent
+	$fd .= ",'Descent'=>".$info['Descender'];
+	// CapHeight
+	if(!empty($info['CapHeight']))
+		$fd .= ",'CapHeight'=>".$info['CapHeight'];
+	else
+		$fd .= ",'CapHeight'=>".$info['Ascender'];
+	// Flags
+	$flags = 0;
+	if($info['IsFixedPitch'])
+		$flags += 1<<0;
+	$flags += 1<<5;
+	if($info['ItalicAngle']!=0)
+		$flags += 1<<6;
+	$fd .= ",'Flags'=>".$flags;
+	// FontBBox
+	$fbb = $info['FontBBox'];
+	$fd .= ",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'";
+	// ItalicAngle
+	$fd .= ",'ItalicAngle'=>".$info['ItalicAngle'];
+	// StemV
+	if(isset($info['StdVW']))
+		$stemv = $info['StdVW'];
+	elseif($info['Bold'])
+		$stemv = 120;
+	else
+		$stemv = 70;
+	$fd .= ",'StemV'=>".$stemv;
+	// MissingWidth
+	$fd .= ",'MissingWidth'=>".$info['MissingWidth'].')';
+	return $fd;
+}
+
+function MakeWidthArray($widths)
+{
+	$s = "array(\n\t";
+	for($c=0;$c<=255;$c++)
+	{
+		if(chr($c)=="'")
+			$s .= "'\\''";
+		elseif(chr($c)=="\\")
+			$s .= "'\\\\'";
+		elseif($c>=32 && $c<=126)
+			$s .= "'".chr($c)."'";
+		else
+			$s .= "chr($c)";
+		$s .= '=>'.$widths[$c];
+		if($c<255)
+			$s .= ',';
+		if(($c+1)%22==0)
+			$s .= "\n\t";
+	}
+	$s .= ')';
+	return $s;
+}
+
+function MakeFontEncoding($map)
+{
+	// Build differences from reference encoding
+	$ref = LoadMap('cp1252');
+	$s = '';
+	$last = 0;
+	for($c=32;$c<=255;$c++)
+	{
+		if($map[$c]['name']!=$ref[$c]['name'])
+		{
+			if($c!=$last+1)
+				$s .= $c.' ';
+			$last = $c;
+			$s .= '/'.$map[$c]['name'].' ';
+		}
+	}
+	return rtrim($s);
+}
+
+function MakeUnicodeArray($map)
+{
+	// Build mapping to Unicode values
+	$ranges = array();
+	foreach($map as $c=>$v)
+	{
+		$uv = $v['uv'];
+		if($uv!=-1)
+		{
+			if(isset($range))
+			{
+				if($c==$range[1]+1 && $uv==$range[3]+1)
+				{
+					$range[1]++;
+					$range[3]++;
+				}
+				else
+				{
+					$ranges[] = $range;
+					$range = array($c, $c, $uv, $uv);
+				}
+			}
+			else
+				$range = array($c, $c, $uv, $uv);
+		}
+	}
+	$ranges[] = $range;
+
+	foreach($ranges as $range)
+	{
+		if(isset($s))
+			$s .= ',';
+		else
+			$s = 'array(';
+		$s .= $range[0].'=>';
+		$nb = $range[1]-$range[0]+1;
+		if($nb>1)
+			$s .= 'array('.$range[2].','.$nb.')';
+		else
+			$s .= $range[2];
+	}
+	$s .= ')';
+	return $s;
+}
+
+function SaveToFile($file, $s, $mode)
+{
+	$f = fopen($file, 'w'.$mode);
+	if(!$f)
+		Error('Can\'t write to file '.$file);
+	fwrite($f, $s);
+	fclose($f);
+}
+
+function MakeDefinitionFile($file, $type, $enc, $embed, $subset, $map, $info)
+{
+	$s = "<?php\n";
+	$s .= '$type = \''.$type."';\n";
+	$s .= '$name = \''.$info['FontName']."';\n";
+	$s .= '$desc = '.MakeFontDescriptor($info).";\n";
+	$s .= '$up = '.$info['UnderlinePosition'].";\n";
+	$s .= '$ut = '.$info['UnderlineThickness'].";\n";
+	$s .= '$cw = '.MakeWidthArray($info['Widths']).";\n";
+	$s .= '$enc = \''.$enc."';\n";
+	$diff = MakeFontEncoding($map);
+	if($diff)
+		$s .= '$diff = \''.$diff."';\n";
+	$s .= '$uv = '.MakeUnicodeArray($map).";\n";
+	if($embed)
+	{
+		$s .= '$file = \''.$info['File']."';\n";
+		if($type=='Type1')
+		{
+			$s .= '$size1 = '.$info['Size1'].";\n";
+			$s .= '$size2 = '.$info['Size2'].";\n";
+		}
+		else
+		{
+			$s .= '$originalsize = '.$info['OriginalSize'].";\n";
+			if($subset)
+				$s .= "\$subsetted = true;\n";
+		}
+	}
+	$s .= "?>\n";
+	SaveToFile($file, $s, 't');
+}
+
+function MakeFont($fontfile, $enc='cp1252', $embed=true, $subset=true)
+{
+	// Generate a font definition file
+	if(!file_exists($fontfile))
+		Error('Font file not found: '.$fontfile);
+	$ext = strtolower(substr($fontfile,-3));
+	if($ext=='ttf' || $ext=='otf')
+		$type = 'TrueType';
+	elseif($ext=='pfb')
+		$type = 'Type1';
+	else
+		Error('Unrecognized font file extension: '.$ext);
+
+	$map = LoadMap($enc);
+
+	if($type=='TrueType')
+		$info = GetInfoFromTrueType($fontfile, $embed, $subset, $map);
+	else
+		$info = GetInfoFromType1($fontfile, $embed, $map);
+
+	$basename = substr(basename($fontfile), 0, -4);
+	if($embed)
+	{
+		if(function_exists('gzcompress'))
+		{
+			$file = $basename.'.z';
+			SaveToFile($file, gzcompress($info['Data']), 'b');
+			$info['File'] = $file;
+			Message('Font file compressed: '.$file);
+		}
+		else
+		{
+			$info['File'] = basename($fontfile);
+			$subset = false;
+			Notice('Font file could not be compressed (zlib extension not available)');
+		}
+	}
+
+	MakeDefinitionFile($basename.'.php', $type, $enc, $embed, $subset, $map, $info);
+	Message('Font definition file generated: '.$basename.'.php');
+}
+
+if(PHP_SAPI=='cli')
+{
+	// Command-line interface
+	ini_set('log_errors', '0');
+	if($argc==1)
+		die("Usage: php makefont.php fontfile [encoding] [embed] [subset]\n");
+	$fontfile = $argv[1];
+	if($argc>=3)
+		$enc = $argv[2];
+	else
+		$enc = 'cp1252';
+	if($argc>=4)
+		$embed = ($argv[3]=='true' || $argv[3]=='1');
+	else
+		$embed = true;
+	if($argc>=5)
+		$subset = ($argv[4]=='true' || $argv[4]=='1');
+	else
+		$subset = true;
+	MakeFont($fontfile, $enc, $embed, $subset);
+}
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/ttfparser.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/ttfparser.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/makefont/ttfparser.php	(revision 8435)
@@ -0,0 +1,723 @@
+<?php
+/*******************************************************************************
+* Class to parse and subset TrueType fonts                                     *
+*                                                                              *
+* Version: 1.1                                                                 *
+* Date:    2015-11-29                                                          *
+* Author:  Olivier PLATHEY                                                     *
+*******************************************************************************/
+
+class TTFParser
+{
+	protected $f;
+	protected $tables;
+	protected $numberOfHMetrics;
+	protected $numGlyphs;
+	protected $glyphNames;
+	protected $indexToLocFormat;
+	protected $subsettedChars;
+	protected $subsettedGlyphs;
+	public $chars;
+	public $glyphs;
+	public $unitsPerEm;
+	public $xMin, $yMin, $xMax, $yMax;
+	public $postScriptName;
+	public $embeddable;
+	public $bold;
+	public $typoAscender;
+	public $typoDescender;
+	public $capHeight;
+	public $italicAngle;
+	public $underlinePosition;
+	public $underlineThickness;
+	public $isFixedPitch;
+
+	function __construct($file)
+	{
+		$this->f = fopen($file, 'rb');
+		if(!$this->f)
+			$this->Error('Can\'t open file: '.$file);
+	}
+
+	function __destruct()
+	{
+		if(is_resource($this->f))
+			fclose($this->f);
+	}
+
+	function Parse()
+	{
+		$this->ParseOffsetTable();
+		$this->ParseHead();
+		$this->ParseHhea();
+		$this->ParseMaxp();
+		$this->ParseHmtx();
+		$this->ParseLoca();
+		$this->ParseGlyf();
+		$this->ParseCmap();
+		$this->ParseName();
+		$this->ParseOS2();
+		$this->ParsePost();
+	}
+
+	function ParseOffsetTable()
+	{
+		$version = $this->Read(4);
+		if($version=='OTTO')
+			$this->Error('OpenType fonts based on PostScript outlines are not supported');
+		if($version!="\x00\x01\x00\x00")
+			$this->Error('Unrecognized file format');
+		$numTables = $this->ReadUShort();
+		$this->Skip(3*2); // searchRange, entrySelector, rangeShift
+		$this->tables = array();
+		for($i=0;$i<$numTables;$i++)
+		{
+			$tag = $this->Read(4);
+			$checkSum = $this->Read(4);
+			$offset = $this->ReadULong();
+			$length = $this->ReadULong(4);
+			$this->tables[$tag] = array('offset'=>$offset, 'length'=>$length, 'checkSum'=>$checkSum);
+		}
+	}	
+
+	function ParseHead()
+	{
+		$this->Seek('head');
+		$this->Skip(3*4); // version, fontRevision, checkSumAdjustment
+		$magicNumber = $this->ReadULong();
+		if($magicNumber!=0x5F0F3CF5)
+			$this->Error('Incorrect magic number');
+		$this->Skip(2); // flags
+		$this->unitsPerEm = $this->ReadUShort();
+		$this->Skip(2*8); // created, modified
+		$this->xMin = $this->ReadShort();
+		$this->yMin = $this->ReadShort();
+		$this->xMax = $this->ReadShort();
+		$this->yMax = $this->ReadShort();
+		$this->Skip(3*2); // macStyle, lowestRecPPEM, fontDirectionHint
+		$this->indexToLocFormat = $this->ReadShort();
+	}
+
+	function ParseHhea()
+	{
+		$this->Seek('hhea');
+		$this->Skip(4+15*2);
+		$this->numberOfHMetrics = $this->ReadUShort();
+	}
+
+	function ParseMaxp()
+	{
+		$this->Seek('maxp');
+		$this->Skip(4);
+		$this->numGlyphs = $this->ReadUShort();
+	}
+
+	function ParseHmtx()
+	{
+		$this->Seek('hmtx');
+		$this->glyphs = array();
+		for($i=0;$i<$this->numberOfHMetrics;$i++)
+		{
+			$advanceWidth = $this->ReadUShort();
+			$lsb = $this->ReadShort();
+			$this->glyphs[$i] = array('w'=>$advanceWidth, 'lsb'=>$lsb);
+		}
+		for($i=$this->numberOfHMetrics;$i<$this->numGlyphs;$i++)
+		{
+			$lsb = $this->ReadShort();
+			$this->glyphs[$i] = array('w'=>$advanceWidth, 'lsb'=>$lsb);
+		}
+	}
+
+	function ParseLoca()
+	{
+		$this->Seek('loca');
+		$offsets = array();
+		if($this->indexToLocFormat==0)
+		{
+			// Short format
+			for($i=0;$i<=$this->numGlyphs;$i++)
+				$offsets[] = 2*$this->ReadUShort();
+		}
+		else
+		{
+			// Long format
+			for($i=0;$i<=$this->numGlyphs;$i++)
+				$offsets[] = $this->ReadULong();
+		}
+		for($i=0;$i<$this->numGlyphs;$i++)
+		{
+			$this->glyphs[$i]['offset'] = $offsets[$i];
+			$this->glyphs[$i]['length'] = $offsets[$i+1] - $offsets[$i];
+		}
+	}
+
+	function ParseGlyf()
+	{
+		$tableOffset = $this->tables['glyf']['offset'];
+		foreach($this->glyphs as &$glyph)
+		{
+			if($glyph['length']>0)
+			{
+				fseek($this->f, $tableOffset+$glyph['offset'], SEEK_SET);
+				if($this->ReadShort()<0)
+				{
+					// Composite glyph
+					$this->Skip(4*2); // xMin, yMin, xMax, yMax
+					$offset = 5*2;
+					$a = array();
+					do
+					{
+						$flags = $this->ReadUShort();
+						$index = $this->ReadUShort();
+						$a[$offset+2] = $index;
+						if($flags & 1) // ARG_1_AND_2_ARE_WORDS
+							$skip = 2*2;
+						else
+							$skip = 2;
+						if($flags & 8) // WE_HAVE_A_SCALE
+							$skip += 2;
+						elseif($flags & 64) // WE_HAVE_AN_X_AND_Y_SCALE
+							$skip += 2*2;
+						elseif($flags & 128) // WE_HAVE_A_TWO_BY_TWO
+							$skip += 4*2;
+						$this->Skip($skip);
+						$offset += 2*2 + $skip;
+					}
+					while($flags & 32); // MORE_COMPONENTS
+					$glyph['components'] = $a;
+				}
+			}
+		}
+	}
+
+	function ParseCmap()
+	{
+		$this->Seek('cmap');
+		$this->Skip(2); // version
+		$numTables = $this->ReadUShort();
+		$offset31 = 0;
+		for($i=0;$i<$numTables;$i++)
+		{
+			$platformID = $this->ReadUShort();
+			$encodingID = $this->ReadUShort();
+			$offset = $this->ReadULong();
+			if($platformID==3 && $encodingID==1)
+				$offset31 = $offset;
+		}
+		if($offset31==0)
+			$this->Error('No Unicode encoding found');
+
+		$startCount = array();
+		$endCount = array();
+		$idDelta = array();
+		$idRangeOffset = array();
+		$this->chars = array();
+		fseek($this->f, $this->tables['cmap']['offset']+$offset31, SEEK_SET);
+		$format = $this->ReadUShort();
+		if($format!=4)
+			$this->Error('Unexpected subtable format: '.$format);
+		$this->Skip(2*2); // length, language
+		$segCount = $this->ReadUShort()/2;
+		$this->Skip(3*2); // searchRange, entrySelector, rangeShift
+		for($i=0;$i<$segCount;$i++)
+			$endCount[$i] = $this->ReadUShort();
+		$this->Skip(2); // reservedPad
+		for($i=0;$i<$segCount;$i++)
+			$startCount[$i] = $this->ReadUShort();
+		for($i=0;$i<$segCount;$i++)
+			$idDelta[$i] = $this->ReadShort();
+		$offset = ftell($this->f);
+		for($i=0;$i<$segCount;$i++)
+			$idRangeOffset[$i] = $this->ReadUShort();
+
+		for($i=0;$i<$segCount;$i++)
+		{
+			$c1 = $startCount[$i];
+			$c2 = $endCount[$i];
+			$d = $idDelta[$i];
+			$ro = $idRangeOffset[$i];
+			if($ro>0)
+				fseek($this->f, $offset+2*$i+$ro, SEEK_SET);
+			for($c=$c1;$c<=$c2;$c++)
+			{
+				if($c==0xFFFF)
+					break;
+				if($ro>0)
+				{
+					$gid = $this->ReadUShort();
+					if($gid>0)
+						$gid += $d;
+				}
+				else
+					$gid = $c+$d;
+				if($gid>=65536)
+					$gid -= 65536;
+				if($gid>0)
+					$this->chars[$c] = $gid;
+			}
+		}
+	}
+
+	function ParseName()
+	{
+		$this->Seek('name');
+		$tableOffset = $this->tables['name']['offset'];
+		$this->postScriptName = '';
+		$this->Skip(2); // format
+		$count = $this->ReadUShort();
+		$stringOffset = $this->ReadUShort();
+		for($i=0;$i<$count;$i++)
+		{
+			$this->Skip(3*2); // platformID, encodingID, languageID
+			$nameID = $this->ReadUShort();
+			$length = $this->ReadUShort();
+			$offset = $this->ReadUShort();
+			if($nameID==6)
+			{
+				// PostScript name
+				fseek($this->f, $tableOffset+$stringOffset+$offset, SEEK_SET);
+				$s = $this->Read($length);
+				$s = str_replace(chr(0), '', $s);
+				$s = preg_replace('|[ \[\](){}<>/%]|', '', $s);
+				$this->postScriptName = $s;
+				break;
+			}
+		}
+		if($this->postScriptName=='')
+			$this->Error('PostScript name not found');
+	}
+
+	function ParseOS2()
+	{
+		$this->Seek('OS/2');
+		$version = $this->ReadUShort();
+		$this->Skip(3*2); // xAvgCharWidth, usWeightClass, usWidthClass
+		$fsType = $this->ReadUShort();
+		$this->embeddable = ($fsType!=2) && ($fsType & 0x200)==0;
+		$this->Skip(11*2+10+4*4+4);
+		$fsSelection = $this->ReadUShort();
+		$this->bold = ($fsSelection & 32)!=0;
+		$this->Skip(2*2); // usFirstCharIndex, usLastCharIndex
+		$this->typoAscender = $this->ReadShort();
+		$this->typoDescender = $this->ReadShort();
+		if($version>=2)
+		{
+			$this->Skip(3*2+2*4+2);
+			$this->capHeight = $this->ReadShort();
+		}
+		else
+			$this->capHeight = 0;
+	}
+
+	function ParsePost()
+	{
+		$this->Seek('post');
+		$version = $this->ReadULong();
+		$this->italicAngle = $this->ReadShort();
+		$this->Skip(2); // Skip decimal part
+		$this->underlinePosition = $this->ReadShort();
+		$this->underlineThickness = $this->ReadShort();
+		$this->isFixedPitch = ($this->ReadULong()!=0);
+		if($version==0x20000)
+		{
+			// Extract glyph names
+			$this->Skip(4*4); // min/max usage
+			$this->Skip(2); // numberOfGlyphs
+			$glyphNameIndex = array();
+			$names = array();
+			$numNames = 0;
+			for($i=0;$i<$this->numGlyphs;$i++)
+			{
+				$index = $this->ReadUShort();
+				$glyphNameIndex[] = $index;
+				if($index>=258 && $index-257>$numNames)
+					$numNames = $index-257;
+			}
+			for($i=0;$i<$numNames;$i++)
+			{
+				$len = ord($this->Read(1));
+				$names[] = $this->Read($len);
+			}
+			foreach($glyphNameIndex as $i=>$index)
+			{
+				if($index>=258)
+					$this->glyphs[$i]['name'] = $names[$index-258];
+				else
+					$this->glyphs[$i]['name'] = $index;
+			}
+			$this->glyphNames = true;
+		}
+		else
+			$this->glyphNames = false;
+	}
+
+	function Subset($chars)
+	{
+/*		$chars = array_keys($this->chars);
+		$this->subsettedChars = $chars;
+		$this->subsettedGlyphs = array();
+		for($i=0;$i<$this->numGlyphs;$i++)
+		{
+			$this->subsettedGlyphs[] = $i;
+			$this->glyphs[$i]['ssid'] = $i;
+		}*/
+
+		$this->AddGlyph(0);
+		$this->subsettedChars = array();
+		foreach($chars as $char)
+		{
+			if(isset($this->chars[$char]))
+			{
+				$this->subsettedChars[] = $char;
+				$this->AddGlyph($this->chars[$char]);
+			}
+		}
+	}
+
+	function AddGlyph($id)
+	{
+		if(!isset($this->glyphs[$id]['ssid']))
+		{
+			$this->glyphs[$id]['ssid'] = count($this->subsettedGlyphs);
+			$this->subsettedGlyphs[] = $id;
+			if(isset($this->glyphs[$id]['components']))
+			{
+				foreach($this->glyphs[$id]['components'] as $cid)
+					$this->AddGlyph($cid);
+			}
+		}
+	}
+
+	function Build()
+	{
+		$this->BuildCmap();
+		$this->BuildHhea();
+		$this->BuildHmtx();
+		$this->BuildLoca();
+		$this->BuildGlyf();
+		$this->BuildMaxp();
+		$this->BuildPost();
+		return $this->BuildFont();
+	}
+
+	function BuildCmap()
+	{
+		if(!isset($this->subsettedChars))
+			return;
+
+		// Divide charset in contiguous segments
+		$chars = $this->subsettedChars;
+		sort($chars);
+		$segments = array();
+		$segment = array($chars[0], $chars[0]);
+		for($i=1;$i<count($chars);$i++)
+		{
+			if($chars[$i]>$segment[1]+1)
+			{
+				$segments[] = $segment;
+				$segment = array($chars[$i], $chars[$i]);
+			}
+			else
+				$segment[1]++;
+		}
+		$segments[] = $segment;
+		$segments[] = array(0xFFFF, 0xFFFF);
+		$segCount = count($segments);
+
+		// Build a Format 4 subtable
+		$startCount = array();
+		$endCount = array();
+		$idDelta = array();
+		$idRangeOffset = array();
+		$glyphIdArray = '';
+		for($i=0;$i<$segCount;$i++)
+		{
+			list($start, $end) = $segments[$i];
+			$startCount[] = $start;
+			$endCount[] = $end;
+			if($start!=$end)
+			{
+				// Segment with multiple chars
+				$idDelta[] = 0;
+				$idRangeOffset[] = strlen($glyphIdArray) + ($segCount-$i)*2;
+				for($c=$start;$c<=$end;$c++)
+				{
+					$ssid = $this->glyphs[$this->chars[$c]]['ssid'];
+					$glyphIdArray .= pack('n', $ssid);
+				}
+			}
+			else
+			{
+				// Segment with a single char
+				if($start<0xFFFF)
+					$ssid = $this->glyphs[$this->chars[$start]]['ssid'];
+				else
+					$ssid = 0;
+				$idDelta[] = $ssid - $start;
+				$idRangeOffset[] = 0;
+			}
+		}
+		$entrySelector = 0;
+		$n = $segCount;
+		while($n!=1)
+		{
+			$n = $n>>1;
+			$entrySelector++;
+		}
+		$searchRange = (1<<$entrySelector)*2;
+		$rangeShift = 2*$segCount - $searchRange;
+		$cmap = pack('nnnn', 2*$segCount, $searchRange, $entrySelector, $rangeShift);
+		foreach($endCount as $val)
+			$cmap .= pack('n', $val);
+		$cmap .= pack('n', 0); // reservedPad
+		foreach($startCount as $val)
+			$cmap .= pack('n', $val);
+		foreach($idDelta as $val)
+			$cmap .= pack('n', $val);
+		foreach($idRangeOffset as $val)
+			$cmap .= pack('n', $val);
+		$cmap .= $glyphIdArray;
+
+		$data = pack('nn', 0, 1); // version, numTables
+		$data .= pack('nnN', 3, 1, 12); // platformID, encodingID, offset
+		$data .= pack('nnn', 4, 6+strlen($cmap), 0); // format, length, language
+		$data .= $cmap;
+		$this->SetTable('cmap', $data);
+	}
+
+	function BuildHhea()
+	{
+		$this->LoadTable('hhea');
+		$numberOfHMetrics = count($this->subsettedGlyphs);
+		$data = substr_replace($this->tables['hhea']['data'], pack('n',$numberOfHMetrics), 4+15*2, 2);
+		$this->SetTable('hhea', $data);
+	}
+
+	function BuildHmtx()
+	{
+		$data = '';
+		foreach($this->subsettedGlyphs as $id)
+		{
+			$glyph = $this->glyphs[$id];
+			$data .= pack('nn', $glyph['w'], $glyph['lsb']);
+		}
+		$this->SetTable('hmtx', $data);
+	}
+
+	function BuildLoca()
+	{
+		$data = '';
+		$offset = 0;
+		foreach($this->subsettedGlyphs as $id)
+		{
+			if($this->indexToLocFormat==0)
+				$data .= pack('n', $offset/2);
+			else
+				$data .= pack('N', $offset);
+			$offset += $this->glyphs[$id]['length'];
+		}
+		if($this->indexToLocFormat==0)
+			$data .= pack('n', $offset/2);
+		else
+			$data .= pack('N', $offset);
+		$this->SetTable('loca', $data);
+	}
+
+	function BuildGlyf()
+	{
+		$tableOffset = $this->tables['glyf']['offset'];
+		$data = '';
+		foreach($this->subsettedGlyphs as $id)
+		{
+			$glyph = $this->glyphs[$id];
+			fseek($this->f, $tableOffset+$glyph['offset'], SEEK_SET);
+			$glyph_data = $this->Read($glyph['length']);
+			if(isset($glyph['components']))
+			{
+				// Composite glyph
+				foreach($glyph['components'] as $offset=>$cid)
+				{
+					$ssid = $this->glyphs[$cid]['ssid'];
+					$glyph_data = substr_replace($glyph_data, pack('n',$ssid), $offset, 2);
+				}
+			}
+			$data .= $glyph_data;
+		}
+		$this->SetTable('glyf', $data);
+	}
+
+	function BuildMaxp()
+	{
+		$this->LoadTable('maxp');
+		$numGlyphs = count($this->subsettedGlyphs);
+		$data = substr_replace($this->tables['maxp']['data'], pack('n',$numGlyphs), 4, 2);
+		$this->SetTable('maxp', $data);
+	}
+
+	function BuildPost()
+	{
+		$this->Seek('post');
+		if($this->glyphNames)
+		{
+			// Version 2.0
+			$numberOfGlyphs = count($this->subsettedGlyphs);
+			$numNames = 0;
+			$names = '';
+			$data = $this->Read(2*4+2*2+5*4);
+			$data .= pack('n', $numberOfGlyphs);
+			foreach($this->subsettedGlyphs as $id)
+			{
+				$name = $this->glyphs[$id]['name'];
+				if(is_string($name))
+				{
+					$data .= pack('n', 258+$numNames);
+					$names .= chr(strlen($name)).$name;
+					$numNames++;
+				}
+				else
+					$data .= pack('n', $name);
+			}
+			$data .= $names;
+		}
+		else
+		{
+			// Version 3.0
+			$this->Skip(4);
+			$data = "\x00\x03\x00\x00";
+			$data .= $this->Read(4+2*2+5*4);
+		}
+		$this->SetTable('post', $data);
+	}
+
+	function BuildFont()
+	{
+		$tags = array();
+		foreach(array('cmap', 'cvt ', 'fpgm', 'glyf', 'head', 'hhea', 'hmtx', 'loca', 'maxp', 'name', 'post', 'prep') as $tag)
+		{
+			if(isset($this->tables[$tag]))
+				$tags[] = $tag;
+		}
+		$numTables = count($tags);
+		$offset = 12 + 16*$numTables;
+		foreach($tags as $tag)
+		{
+			if(!isset($this->tables[$tag]['data']))
+				$this->LoadTable($tag);
+			$this->tables[$tag]['offset'] = $offset;
+			$offset += strlen($this->tables[$tag]['data']);
+		}
+//		$this->tables['head']['data'] = substr_replace($this->tables['head']['data'], "\x00\x00\x00\x00", 8, 4);
+
+		// Build offset table
+		$entrySelector = 0;
+		$n = $numTables;
+		while($n!=1)
+		{
+			$n = $n>>1;
+			$entrySelector++;
+		}
+		$searchRange = 16*(1<<$entrySelector);
+		$rangeShift = 16*$numTables - $searchRange;
+		$offsetTable = pack('nnnnnn', 1, 0, $numTables, $searchRange, $entrySelector, $rangeShift);
+		foreach($tags as $tag)
+		{
+			$table = $this->tables[$tag];
+			$offsetTable .= $tag.$table['checkSum'].pack('NN', $table['offset'], $table['length']);
+		}
+
+		// Compute checkSumAdjustment (0xB1B0AFBA - font checkSum)
+		$s = $this->CheckSum($offsetTable);
+		foreach($tags as $tag)
+			$s .= $this->tables[$tag]['checkSum'];
+		$a = unpack('n2', $this->CheckSum($s));
+		$high = 0xB1B0 + ($a[1]^0xFFFF);
+		$low = 0xAFBA + ($a[2]^0xFFFF) + 1;
+		$checkSumAdjustment = pack('nn', $high+($low>>16), $low);
+		$this->tables['head']['data'] = substr_replace($this->tables['head']['data'], $checkSumAdjustment, 8, 4);
+
+		$font = $offsetTable;
+		foreach($tags as $tag)
+			$font .= $this->tables[$tag]['data'];
+
+		return $font;
+	}
+
+	function LoadTable($tag)
+	{
+		$this->Seek($tag);
+		$length = $this->tables[$tag]['length'];
+		$n = $length % 4;
+		if($n>0)
+			$length += 4 - $n;
+		$this->tables[$tag]['data'] = $this->Read($length);
+	}
+
+	function SetTable($tag, $data)
+	{
+		$length = strlen($data);
+		$n = $length % 4;
+		if($n>0)
+			$data = str_pad($data, $length+4-$n, "\x00");
+		$this->tables[$tag]['data'] = $data;
+		$this->tables[$tag]['length'] = $length;
+		$this->tables[$tag]['checkSum'] = $this->CheckSum($data);
+	}
+
+	function Seek($tag)
+	{
+		if(!isset($this->tables[$tag]))
+			$this->Error('Table not found: '.$tag);
+		fseek($this->f, $this->tables[$tag]['offset'], SEEK_SET);
+	}
+
+	function Skip($n)
+	{
+		fseek($this->f, $n, SEEK_CUR);
+	}
+
+	function Read($n)
+	{
+		return $n>0 ? fread($this->f, $n) : '';
+	}
+
+	function ReadUShort()
+	{
+		$a = unpack('nn', fread($this->f,2));
+		return $a['n'];
+	}
+
+	function ReadShort()
+	{
+		$a = unpack('nn', fread($this->f,2));
+		$v = $a['n'];
+		if($v>=0x8000)
+			$v -= 65536;
+		return $v;
+	}
+
+	function ReadULong()
+	{
+		$a = unpack('NN', fread($this->f,4));
+		return $a['N'];
+	}
+
+	function CheckSum($s)
+	{
+		$n = strlen($s);
+		$high = 0;
+		$low = 0;
+		for($i=0;$i<$n;$i+=4)
+		{
+			$high += (ord($s[$i])<<8) + ord($s[$i+1]);
+			$low += (ord($s[$i+2])<<8) + ord($s[$i+3]);
+		}
+		return pack('nn', $high+($low>>16), $low);
+	}
+
+	function Error($msg)
+	{
+		throw new Exception($msg);
+	}
+}
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/20k_c1.txt
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/20k_c1.txt	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/20k_c1.txt	(revision 8435)
@@ -0,0 +1,10 @@
+The year 1866 was marked by a bizarre development, an unexplained and downright inexplicable phenomenon that surely no one has forgotten. Without getting into those rumors that upset civilians in the seaports and deranged the public mind even far inland, it must be said that professional seamen were especially alarmed. Traders, shipowners, captains of vessels, skippers, and master mariners from Europe and America, naval officers from every country, and at their heels the various national governments on these two continents, were all extremely disturbed by the business.
+In essence, over a period of time several ships had encountered "an enormous thing" at sea, a long spindle-shaped object, sometimes giving off a phosphorescent glow, infinitely bigger and faster than any whale.
+The relevant data on this apparition, as recorded in various logbooks, agreed pretty closely as to the structure of the object or creature in question, its unprecedented speed of movement, its startling locomotive power, and the unique vitality with which it seemed to be gifted.  If it was a cetacean, it exceeded in bulk any whale previously classified by science.  No naturalist, neither Cuvier nor Lacépède, neither Professor Dumeril nor Professor de Quatrefages, would have accepted the existence of such a monster sight unseen -- specifically, unseen by their own scientific eyes.
+Striking an average of observations taken at different times -- rejecting those timid estimates that gave the object a length of 200 feet, and ignoring those exaggerated views that saw it as a mile wide and three long--you could still assert that this phenomenal creature greatly exceeded the dimensions of anything then known to ichthyologists, if it existed at all.
+Now then, it did exist, this was an undeniable fact; and since the human mind dotes on objects of wonder, you can understand the worldwide excitement caused by this unearthly apparition. As for relegating it to the realm of fiction, that charge had to be dropped.
+In essence, on July 20, 1866, the steamer Governor Higginson, from the Calcutta & Burnach Steam Navigation Co., encountered this moving mass five miles off the eastern shores of Australia. Captain Baker at first thought he was in the presence of an unknown reef; he was even about to fix its exact position when two waterspouts shot out of this inexplicable object and sprang hissing into the air some 150 feet.  So, unless this reef was subject to the intermittent eruptions of a geyser, the Governor Higginson had fair and honest dealings with some aquatic mammal, until then unknown, that could spurt from its blowholes waterspouts mixed with air and steam.
+Similar events were likewise observed in Pacific seas, on July 23 of the same year, by the Christopher Columbus from the West India & Pacific Steam Navigation Co.  Consequently, this extraordinary cetacean could transfer itself from one locality to another with startling swiftness, since within an interval of just three days, the Governor Higginson and the Christopher Columbus had observed it at two positions on the charts separated by a distance of more than 700 nautical leagues.
+Fifteen days later and 2,000 leagues farther, the Helvetia from the Compagnie Nationale and the Shannon from the Royal Mail line, running on opposite tacks in that part of the Atlantic lying between the United States and Europe, respectively signaled each other that the monster had been sighted in latitude 42 degrees 15' north and longitude 60 degrees 35' west of the meridian of Greenwich.  From their simultaneous observations, they were able to estimate the mammal's minimum length at more than 350 English feet; this was because both the Shannon and the Helvetia were of smaller dimensions, although each measured 100 meters stem to stern. Now then, the biggest whales, those rorqual whales that frequent the waterways of the Aleutian Islands, have never exceeded a length of 56 meters--if they reach even that.
+One after another, reports arrived that would profoundly affect public opinion:  new observations taken by the transatlantic liner Pereire, the Inman line's Etna running afoul of the monster, an official report drawn up by officers on the French frigate Normandy, dead-earnest reckonings obtained by the general staff of Commodore Fitz-James aboard the Lord Clyde. In lighthearted countries, people joked about this phenomenon, but such serious, practical countries as England, America, and Germany were deeply concerned.
+In every big city the monster was the latest rage; they sang about it in the coffee houses, they ridiculed it in the newspapers, they dramatized it in the theaters.  The tabloids found it a fine opportunity for hatching all sorts of hoaxes. In those newspapers short of copy, you saw the reappearance of every gigantic imaginary creature, from "Moby Dick," that dreadful white whale from the High Arctic regions, to the stupendous kraken whose tentacles could entwine a 500-ton craft and drag it into the ocean depths. They even reprinted reports from ancient times: the views of Aristotle and Pliny accepting the existence of such monsters, then the Norwegian stories of Bishop Pontoppidan, the narratives of Paul Egede, and finally the reports of Captain Harrington -- whose good faith is above suspicion--in which he claims he saw, while aboard the Castilian in 1857, one of those enormous serpents that, until then, had frequented only the seas of France's old extremist newspaper, The Constitutionalist.
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/20k_c2.txt
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/20k_c2.txt	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/20k_c2.txt	(revision 8435)
@@ -0,0 +1,23 @@
+During the period in which these developments were occurring, I had returned from a scientific undertaking organized to explore the Nebraska badlands in the United States. In my capacity as Assistant Professor at the Paris Museum of Natural History, I had been attached to this expedition by the French government. After spending six months in Nebraska, I arrived in New York laden with valuable collections near the end of March. My departure for France was set for early May. In the meantime, then, I was busy classifying my mineralogical, botanical, and zoological treasures when that incident took place with the Scotia.
+I was perfectly abreast of this question, which was the big news of the day, and how could I not have been? I had read and reread every American and European newspaper without being any farther along. This mystery puzzled me. Finding it impossible to form any views, I drifted from one extreme to the other. Something was out there, that much was certain, and any doubting Thomas was invited to place his finger on the Scotia's wound.
+When I arrived in New York, the question was at the boiling point. The hypothesis of a drifting islet or an elusive reef, put forward by people not quite in their right minds, was completely eliminated. And indeed, unless this reef had an engine in its belly, how could it move about with such prodigious speed?
+Also discredited was the idea of a floating hull or some other enormous wreckage, and again because of this speed of movement.
+So only two possible solutions to the question were left, creating two very distinct groups of supporters: on one side, those favoring a monster of colossal strength; on the other, those favoring an "underwater boat" of tremendous motor power.
+Now then, although the latter hypothesis was completely admissible, it couldn't stand up to inquiries conducted in both the New World and the Old. That a private individual had such a mechanism at his disposal was less than probable. Where and when had he built it, and how could he have built it in secret?
+Only some government could own such an engine of destruction, and in these disaster-filled times, when men tax their ingenuity to build increasingly powerful aggressive weapons, it was possible that, unknown to the rest of the world, some nation could have been testing such a fearsome machine. The Chassepot rifle led to the torpedo, and the torpedo has led to this underwater battering ram, which in turn will lead to the world putting its foot down. At least I hope it will.
+But this hypothesis of a war machine collapsed in the face of formal denials from the various governments. Since the public interest was at stake and transoceanic travel was suffering, the sincerity of these governments could not be doubted. Besides, how could the assembly of this underwater boat have escaped public notice? Keeping a secret under such circumstances would be difficult enough for an individual, and certainly impossible for a nation whose every move is under constant surveillance by rival powers.
+So, after inquiries conducted in England, France, Russia, Prussia, Spain, Italy, America, and even Turkey, the hypothesis of an underwater Monitor was ultimately rejected.
+After I arrived in New York, several people did me the honor of consulting me on the phenomenon in question. In France I had published a two-volume work, in quarto, entitled The Mysteries of the Great Ocean Depths. Well received in scholarly circles, this book had established me as a specialist in this pretty obscure field of natural history. My views were in demand. As long as I could deny the reality of the business, I confined myself to a flat "no comment." But soon, pinned to the wall, I had to explain myself straight out. And in this vein, "the honorable Pierre Aronnax, Professor at the Paris Museum," was summoned by The New York Herald to formulate his views no matter what.
+I complied. Since I could no longer hold my tongue, I let it wag. I discussed the question in its every aspect, both political and scientific, and this is an excerpt from the well-padded article I published in the issue of April 30.
+
+"Therefore," I wrote, "after examining these different hypotheses one by one, we are forced, every other supposition having been refuted, to accept the existence of an extremely powerful marine animal.
+"The deepest parts of the ocean are totally unknown to us. No soundings have been able to reach them. What goes on in those distant depths? What creatures inhabit, or could inhabit, those regions twelve or fifteen miles beneath the surface of the water? What is the constitution of these animals? It's almost beyond conjecture.
+"However, the solution to this problem submitted to me can take the form of a choice between two alternatives.
+"Either we know every variety of creature populating our planet, or we do not.
+"If we do not know every one of them, if nature still keeps ichthyological secrets from us, nothing is more admissible than to accept the existence of fish or cetaceans of new species or even new genera, animals with a basically 'cast-iron' constitution that inhabit strata beyond the reach of our soundings, and which some development or other, an urge or a whim if you prefer, can bring to the upper level of the ocean for long intervals.
+"If, on the other hand, we do know every living species, we must look for the animal in question among those marine creatures already cataloged, and in this event I would be inclined to accept the existence of a giant narwhale.
+"The common narwhale, or sea unicorn, often reaches a length of sixty feet. Increase its dimensions fivefold or even tenfold, then give this cetacean a strength in proportion to its size while enlarging its offensive weapons, and you have the animal we're looking for. It would have the proportions determined by the officers of the Shannon, the instrument needed to perforate the Scotia, and the power to pierce a steamer's hull.
+"In essence, the narwhale is armed with a sort of ivory sword, or lance, as certain naturalists have expressed it. It's a king-sized tooth as hard as steel. Some of these teeth have been found buried in the bodies of baleen whales, which the narwhale attacks with invariable success. Others have been wrenched, not without difficulty, from the undersides of vessels that narwhales have pierced clean through, as a gimlet pierces a wine barrel. The museum at the Faculty of Medicine in Paris owns one of these tusks with a length of 2.25 meters and a width at its base of forty-eight centimeters!
+"All right then! Imagine this weapon to be ten times stronger and the animal ten times more powerful, launch it at a speed of twenty miles per hour, multiply its mass times its velocity, and you get just the collision we need to cause the specified catastrophe.
+"So, until information becomes more abundant, I plump for a sea unicorn of colossal dimensions, no longer armed with a mere lance but with an actual spur, like ironclad frigates or those warships called 'rams,' whose mass and motor power it would possess simultaneously.
+"This inexplicable phenomenon is thus explained away--unless it's something else entirely, which, despite everything that has been sighted, studied, explored and experienced, is still possible!"
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/calligra.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/calligra.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/calligra.php	(revision 8435)
@@ -0,0 +1,25 @@
+<?php
+$type = 'TrueType';
+$name = 'CalligrapherRegular';
+$desc = array('Ascent'=>899,'Descent'=>-234,'CapHeight'=>899,'Flags'=>32,'FontBBox'=>'[-173 -234 1328 899]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>800);
+$up = -200;
+$ut = 20;
+$cw = array(
+	chr(0)=>800,chr(1)=>800,chr(2)=>800,chr(3)=>800,chr(4)=>800,chr(5)=>800,chr(6)=>800,chr(7)=>800,chr(8)=>800,chr(9)=>800,chr(10)=>800,chr(11)=>800,chr(12)=>800,chr(13)=>800,chr(14)=>800,chr(15)=>800,chr(16)=>800,chr(17)=>800,chr(18)=>800,chr(19)=>800,chr(20)=>800,chr(21)=>800,
+	chr(22)=>800,chr(23)=>800,chr(24)=>800,chr(25)=>800,chr(26)=>800,chr(27)=>800,chr(28)=>800,chr(29)=>800,chr(30)=>800,chr(31)=>800,' '=>282,'!'=>324,'"'=>405,'#'=>584,'$'=>632,'%'=>980,'&'=>776,'\''=>259,'('=>299,')'=>299,'*'=>377,'+'=>600,
+	','=>259,'-'=>432,'.'=>254,'/'=>597,'0'=>529,'1'=>298,'2'=>451,'3'=>359,'4'=>525,'5'=>423,'6'=>464,'7'=>417,'8'=>457,'9'=>479,':'=>275,';'=>282,'<'=>600,'='=>600,'>'=>600,'?'=>501,'@'=>800,'A'=>743,
+	'B'=>636,'C'=>598,'D'=>712,'E'=>608,'F'=>562,'G'=>680,'H'=>756,'I'=>308,'J'=>314,'K'=>676,'L'=>552,'M'=>1041,'N'=>817,'O'=>729,'P'=>569,'Q'=>698,'R'=>674,'S'=>618,'T'=>673,'U'=>805,'V'=>753,'W'=>1238,
+	'X'=>716,'Y'=>754,'Z'=>599,'['=>315,'\\'=>463,']'=>315,'^'=>600,'_'=>547,'`'=>278,'a'=>581,'b'=>564,'c'=>440,'d'=>571,'e'=>450,'f'=>347,'g'=>628,'h'=>611,'i'=>283,'j'=>283,'k'=>560,'l'=>252,'m'=>976,
+	'n'=>595,'o'=>508,'p'=>549,'q'=>540,'r'=>395,'s'=>441,'t'=>307,'u'=>614,'v'=>556,'w'=>915,'x'=>559,'y'=>597,'z'=>452,'{'=>315,'|'=>222,'}'=>315,'~'=>600,chr(127)=>800,chr(128)=>800,chr(129)=>800,chr(130)=>0,chr(131)=>0,
+	chr(132)=>0,chr(133)=>780,chr(134)=>0,chr(135)=>0,chr(136)=>278,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>1064,chr(141)=>800,chr(142)=>0,chr(143)=>800,chr(144)=>800,chr(145)=>259,chr(146)=>259,chr(147)=>470,chr(148)=>470,chr(149)=>500,chr(150)=>300,chr(151)=>600,chr(152)=>278,chr(153)=>990,
+	chr(154)=>0,chr(155)=>0,chr(156)=>790,chr(157)=>800,chr(158)=>800,chr(159)=>754,chr(160)=>282,chr(161)=>324,chr(162)=>450,chr(163)=>640,chr(164)=>518,chr(165)=>603,chr(166)=>0,chr(167)=>519,chr(168)=>254,chr(169)=>800,chr(170)=>349,chr(171)=>0,chr(172)=>0,chr(173)=>432,chr(174)=>800,chr(175)=>278,
+	chr(176)=>0,chr(177)=>0,chr(178)=>0,chr(179)=>0,chr(180)=>278,chr(181)=>614,chr(182)=>0,chr(183)=>254,chr(184)=>278,chr(185)=>0,chr(186)=>305,chr(187)=>0,chr(188)=>0,chr(189)=>0,chr(190)=>0,chr(191)=>501,chr(192)=>743,chr(193)=>743,chr(194)=>743,chr(195)=>743,chr(196)=>743,chr(197)=>743,
+	chr(198)=>1060,chr(199)=>598,chr(200)=>608,chr(201)=>608,chr(202)=>608,chr(203)=>608,chr(204)=>308,chr(205)=>308,chr(206)=>308,chr(207)=>308,chr(208)=>0,chr(209)=>817,chr(210)=>729,chr(211)=>729,chr(212)=>729,chr(213)=>729,chr(214)=>729,chr(215)=>0,chr(216)=>729,chr(217)=>805,chr(218)=>805,chr(219)=>805,
+	chr(220)=>805,chr(221)=>0,chr(222)=>0,chr(223)=>688,chr(224)=>581,chr(225)=>581,chr(226)=>581,chr(227)=>581,chr(228)=>581,chr(229)=>581,chr(230)=>792,chr(231)=>440,chr(232)=>450,chr(233)=>450,chr(234)=>450,chr(235)=>450,chr(236)=>283,chr(237)=>283,chr(238)=>283,chr(239)=>283,chr(240)=>0,chr(241)=>595,
+	chr(242)=>508,chr(243)=>508,chr(244)=>508,chr(245)=>508,chr(246)=>508,chr(247)=>0,chr(248)=>508,chr(249)=>614,chr(250)=>614,chr(251)=>614,chr(252)=>614,chr(253)=>0,chr(254)=>0,chr(255)=>597);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+$file = 'calligra.z';
+$originalsize = 33948;
+$subsetted = true;
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/countries.txt
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/countries.txt	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/countries.txt	(revision 8435)
@@ -0,0 +1,15 @@
+Austria;Vienna;83859;8075
+Belgium;Brussels;30518;10192
+Denmark;Copenhagen;43094;5295
+Finland;Helsinki;304529;5147
+France;Paris;543965;58728
+Germany;Berlin;357022;82057
+Greece;Athens;131625;10511
+Ireland;Dublin;70723;3694
+Italy;Roma;301316;57563
+Luxembourg;Luxembourg;2586;424
+Netherlands;Amsterdam;41526;15654
+Portugal;Lisbon;91906;9957
+Spain;Madrid;504790;39348
+Sweden;Stockholm;410934;8839
+United Kingdom;London;243820;58862
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/index.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/index.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/index.htm	(revision 8435)
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Tutorials</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Tutorials</h1>
+<ul style="list-style-type:none; margin-left:0; padding-left:0">
+<li><a href="tuto1.htm">Tutorial 1</a>: Minimal example</li>
+<li><a href="tuto2.htm">Tutorial 2</a>: Header, footer, page break and image</li>
+<li><a href="tuto3.htm">Tutorial 3</a>: Line breaks and colors</li>
+<li><a href="tuto4.htm">Tutorial 4</a>: Multi-columns</li>
+<li><a href="tuto5.htm">Tutorial 5</a>: Tables</li>
+<li><a href="tuto6.htm">Tutorial 6</a>: Links and flowing text</li>
+<li><a href="tuto7.htm">Tutorial 7</a>: Adding new fonts and encodings</li>
+</ul>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/makefont.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/makefont.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/makefont.php	(revision 8435)
@@ -0,0 +1,6 @@
+<?php
+// Generation of font definition file for tutorial 7
+require('../makefont/makefont.php');
+
+MakeFont('calligra.ttf','cp1252');
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto1.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto1.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto1.htm	(revision 8435)
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Minimal example</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Minimal example</h1>
+Let's start with the classic example:
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+</span>$pdf <span class="kw">= new </span>FPDF<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>16<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Cell<span class="kw">(</span>40<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Hello World!'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto1.php' target='_blank' class='demo'>[Demo]</a></p>
+After including the library file, we create an FPDF object.
+The <a href='../doc/__construct.htm'>constructor</a> is used here with the default values: pages are in A4 portrait and
+the unit of measure is millimeter. It could have been specified explicitly with:
+<div class="source">
+<pre><code>$pdf <span class="kw">= new </span>FPDF<span class="kw">(</span><span class="str">'P'</span><span class="kw">,</span><span class="str">'mm'</span><span class="kw">,</span><span class="str">'A4'</span><span class="kw">);
+</span></code></pre>
+</div>
+It's possible to use landscape (<code>L</code>), other page sizes (such as <code>Letter</code> and
+<code>Legal</code>) and units (<code>pt</code>, <code>cm</code>, <code>in</code>).
+<br>
+<br>
+There's no page at the moment, so we have to add one with <a href='../doc/addpage.htm'>AddPage()</a>. The origin
+is at the upper-left corner and the current position is by default set at 1 cm from the
+borders; the margins can be changed with <a href='../doc/setmargins.htm'>SetMargins()</a>.
+<br>
+<br>
+Before we can print text, it's mandatory to select a font with <a href='../doc/setfont.htm'>SetFont()</a>.
+We choose Arial bold 16:
+<div class="source">
+<pre><code>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>16<span class="kw">);
+</span></code></pre>
+</div>
+We could have specified italics with I, underlined with U or a regular font with an empty string
+(or any combination). Note that the font size is given in points, not millimeters (or another user
+unit); it's the only exception. The other standard fonts are Times, Courier, Symbol and ZapfDingbats.
+<br>
+<br>
+We can now print a cell with <a href='../doc/cell.htm'>Cell()</a>. A cell is a rectangular area, possibly framed,
+which contains a line of text. It is output at the current position. We specify its dimensions,
+its text (centered or aligned), if borders should be drawn, and where the current position
+moves after it (to the right, below or to the beginning of the next line). To add a frame, we would do this:
+<div class="source">
+<pre><code>$pdf<span class="kw">-&gt;</span>Cell<span class="kw">(</span>40<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Hello World !'</span><span class="kw">,</span>1<span class="kw">);
+</span></code></pre>
+</div>
+To add a new cell next to it with centered text and go to the next line, we would do:
+<div class="source">
+<pre><code>$pdf<span class="kw">-&gt;</span>Cell<span class="kw">(</span>60<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Powered by FPDF.'</span><span class="kw">,</span>0<span class="kw">,</span>1<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
+</span></code></pre>
+</div>
+Remark: the line break can also be done with <a href='../doc/ln.htm'>Ln()</a>. This method additionnaly allows to specify
+the height of the break.
+<br>
+<br>
+Finally, the document is closed and sent to the browser with <a href='../doc/output.htm'>Output()</a>. We could have saved
+it to a file by passing the appropriate parameters.
+<br>
+<br>
+<strong>Caution:</strong> in case when the PDF is sent to the browser, nothing else must be output by the
+script, neither before nor after (no HTML, not even a space or a carriage return). If you send something
+before, you will get the error message: "Some data has already been output, can't send PDF file". If you
+send something after, the document might not display.
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto1.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto1.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto1.php	(revision 8435)
@@ -0,0 +1,9 @@
+<?php
+require('../fpdf.php');
+
+$pdf = new FPDF();
+$pdf->AddPage();
+$pdf->SetFont('Arial','B',16);
+$pdf->Cell(40,10,'Hello World!');
+$pdf->Output();
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto2.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto2.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto2.htm	(revision 8435)
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Header, footer, page break and image</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Header, footer, page break and image</h1>
+Here's a two page example with header, footer and logo:
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+class </span>PDF <span class="kw">extends </span>FPDF
+<span class="kw">{
+</span><span class="cmt">// Page header
+</span><span class="kw">function </span>Header<span class="kw">()
+{
+    </span><span class="cmt">// Logo
+    </span>$<span class="kw">this-&gt;</span>Image<span class="kw">(</span><span class="str">'logo.png'</span><span class="kw">,</span>10<span class="kw">,</span>6<span class="kw">,</span>30<span class="kw">);
+    </span><span class="cmt">// Arial bold 15
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>15<span class="kw">);
+    </span><span class="cmt">// Move to the right
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>80<span class="kw">);
+    </span><span class="cmt">// Title
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>30<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Title'</span><span class="kw">,</span>1<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
+    </span><span class="cmt">// Line break
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>20<span class="kw">);
+}
+
+</span><span class="cmt">// Page footer
+</span><span class="kw">function </span>Footer<span class="kw">()
+{
+    </span><span class="cmt">// Position at 1.5 cm from bottom
+    </span>$<span class="kw">this-&gt;</span>SetY<span class="kw">(-</span>15<span class="kw">);
+    </span><span class="cmt">// Arial italic 8
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">,</span>8<span class="kw">);
+    </span><span class="cmt">// Page number
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Page '</span><span class="kw">.</span>$<span class="kw">this-&gt;</span>PageNo<span class="kw">().</span><span class="str">'/{nb}'</span><span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
+}
+}
+
+</span><span class="cmt">// Instanciation of inherited class
+</span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>AliasNbPages<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Times'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">);
+for(</span>$i<span class="kw">=</span>1<span class="kw">;</span>$i<span class="kw">&lt;=</span>40<span class="kw">;</span>$i<span class="kw">++)
+    </span>$pdf<span class="kw">-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Printing line number '</span><span class="kw">.</span>$i<span class="kw">,</span>0<span class="kw">,</span>1<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto2.php' target='_blank' class='demo'>[Demo]</a></p>
+This example makes use of the <a href='../doc/header.htm'>Header()</a> and <a href='../doc/footer.htm'>Footer()</a> methods to process page headers and
+footers. They are called automatically. They already exist in the FPDF class but do nothing,
+therefore we have to extend the class and override them.
+<br>
+<br>
+The logo is printed with the <a href='../doc/image.htm'>Image()</a> method by specifying its upper-left corner and
+its width. The height is calculated automatically to respect the image proportions.
+<br>
+<br>
+To print the page number, a null value is passed as the cell width. It means that the cell
+should extend up to the right margin of the page; this is handy to center text. The current page
+number is returned by the <a href='../doc/pageno.htm'>PageNo()</a> method; as for the total number of pages, it's obtained
+via the special value <code>{nb}</code> which is substituted when the document is finished
+(provided you first called <a href='../doc/aliasnbpages.htm'>AliasNbPages()</a>).
+<br>
+Note the use of the <a href='../doc/sety.htm'>SetY()</a> method which allows to set position at an absolute location in
+the page, starting from the top or the bottom.
+<br>
+<br>
+Another interesting feature is used here: the automatic page breaking. As soon as a cell would
+cross a limit in the page (at 2 centimeters from the bottom by default), a break is issued
+and the font restored. Although the header and footer select their own font (Arial), the body
+continues with Times. This mechanism of automatic restoration also applies to colors and line
+width. The limit which triggers page breaks can be set with <a href='../doc/setautopagebreak.htm'>SetAutoPageBreak()</a>.
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto2.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto2.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto2.php	(revision 8435)
@@ -0,0 +1,41 @@
+<?php
+require('../fpdf.php');
+
+class PDF extends FPDF
+{
+// Page header
+function Header()
+{
+	// Logo
+	$this->Image('logo.png',10,6,30);
+	// Arial bold 15
+	$this->SetFont('Arial','B',15);
+	// Move to the right
+	$this->Cell(80);
+	// Title
+	$this->Cell(30,10,'Title',1,0,'C');
+	// Line break
+	$this->Ln(20);
+}
+
+// Page footer
+function Footer()
+{
+	// Position at 1.5 cm from bottom
+	$this->SetY(-15);
+	// Arial italic 8
+	$this->SetFont('Arial','I',8);
+	// Page number
+	$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
+}
+}
+
+// Instanciation of inherited class
+$pdf = new PDF();
+$pdf->AliasNbPages();
+$pdf->AddPage();
+$pdf->SetFont('Times','',12);
+for($i=1;$i<=40;$i++)
+	$pdf->Cell(0,10,'Printing line number '.$i,0,1);
+$pdf->Output();
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto3.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto3.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto3.htm	(revision 8435)
@@ -0,0 +1,115 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Line breaks and colors</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Line breaks and colors</h1>
+Let's continue with an example which prints justified paragraphs. It also illustrates the use
+of colors.
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+class </span>PDF <span class="kw">extends </span>FPDF
+<span class="kw">{
+function </span>Header<span class="kw">()
+{
+    global </span>$title<span class="kw">;
+
+    </span><span class="cmt">// Arial bold 15
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>15<span class="kw">);
+    </span><span class="cmt">// Calculate width of title and position
+    </span>$w <span class="kw">= </span>$<span class="kw">this-&gt;</span>GetStringWidth<span class="kw">(</span>$title<span class="kw">)+</span>6<span class="kw">;
+    </span>$<span class="kw">this-&gt;</span>SetX<span class="kw">((</span>210<span class="kw">-</span>$w<span class="kw">)/</span>2<span class="kw">);
+    </span><span class="cmt">// Colors of frame, background and text
+    </span>$<span class="kw">this-&gt;</span>SetDrawColor<span class="kw">(</span>0<span class="kw">,</span>80<span class="kw">,</span>180<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>230<span class="kw">,</span>230<span class="kw">,</span>0<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>220<span class="kw">,</span>50<span class="kw">,</span>50<span class="kw">);
+    </span><span class="cmt">// Thickness of frame (1 mm)
+    </span>$<span class="kw">this-&gt;</span>SetLineWidth<span class="kw">(</span>1<span class="kw">);
+    </span><span class="cmt">// Title
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">,</span>9<span class="kw">,</span>$title<span class="kw">,</span>1<span class="kw">,</span>1<span class="kw">,</span><span class="str">'C'</span><span class="kw">,</span>true<span class="kw">);
+    </span><span class="cmt">// Line break
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>10<span class="kw">);
+}
+
+function </span>Footer<span class="kw">()
+{
+    </span><span class="cmt">// Position at 1.5 cm from bottom
+    </span>$<span class="kw">this-&gt;</span>SetY<span class="kw">(-</span>15<span class="kw">);
+    </span><span class="cmt">// Arial italic 8
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">,</span>8<span class="kw">);
+    </span><span class="cmt">// Text color in gray
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>128<span class="kw">);
+    </span><span class="cmt">// Page number
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Page '</span><span class="kw">.</span>$<span class="kw">this-&gt;</span>PageNo<span class="kw">(),</span>0<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
+}
+
+function </span>ChapterTitle<span class="kw">(</span>$num<span class="kw">, </span>$label<span class="kw">)
+{
+    </span><span class="cmt">// Arial 12
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">);
+    </span><span class="cmt">// Background color
+    </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>200<span class="kw">,</span>220<span class="kw">,</span>255<span class="kw">);
+    </span><span class="cmt">// Title
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>6<span class="kw">,</span><span class="str">"Chapter </span>$num<span class="str"> : </span>$label<span class="str">"</span><span class="kw">,</span>0<span class="kw">,</span>1<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>true<span class="kw">);
+    </span><span class="cmt">// Line break
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>4<span class="kw">);
+}
+
+function </span>ChapterBody<span class="kw">(</span>$file<span class="kw">)
+{
+    </span><span class="cmt">// Read text file
+    </span>$txt <span class="kw">= </span>file_get_contents<span class="kw">(</span>$file<span class="kw">);
+    </span><span class="cmt">// Times 12
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Times'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">);
+    </span><span class="cmt">// Output justified text
+    </span>$<span class="kw">this-&gt;</span>MultiCell<span class="kw">(</span>0<span class="kw">,</span>5<span class="kw">,</span>$txt<span class="kw">);
+    </span><span class="cmt">// Line break
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    </span><span class="cmt">// Mention in italics
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>5<span class="kw">,</span><span class="str">'(end of excerpt)'</span><span class="kw">);
+}
+
+function </span>PrintChapter<span class="kw">(</span>$num<span class="kw">, </span>$title<span class="kw">, </span>$file<span class="kw">)
+{
+    </span>$<span class="kw">this-&gt;</span>AddPage<span class="kw">();
+    </span>$<span class="kw">this-&gt;</span>ChapterTitle<span class="kw">(</span>$num<span class="kw">,</span>$title<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>ChapterBody<span class="kw">(</span>$file<span class="kw">);
+}
+}
+
+</span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
+</span>$title <span class="kw">= </span><span class="str">'20000 Leagues Under the Seas'</span><span class="kw">;
+</span>$pdf<span class="kw">-&gt;</span>SetTitle<span class="kw">(</span>$title<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetAuthor<span class="kw">(</span><span class="str">'Jules Verne'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>PrintChapter<span class="kw">(</span>1<span class="kw">,</span><span class="str">'A RUNAWAY REEF'</span><span class="kw">,</span><span class="str">'20k_c1.txt'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>PrintChapter<span class="kw">(</span>2<span class="kw">,</span><span class="str">'THE PROS AND CONS'</span><span class="kw">,</span><span class="str">'20k_c2.txt'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto3.php' target='_blank' class='demo'>[Demo]</a></p>
+The <a href='../doc/getstringwidth.htm'>GetStringWidth()</a> method allows to determine the length of a string in the current font,
+which is used here to calculate the position and the width of the frame surrounding the title.
+Then colors are set (via <a href='../doc/setdrawcolor.htm'>SetDrawColor()</a>, <a href='../doc/setfillcolor.htm'>SetFillColor()</a> and <a href='../doc/settextcolor.htm'>SetTextColor()</a>) and the
+thickness of the line is set to 1 mm (instead of 0.2 by default) with <a href='../doc/setlinewidth.htm'>SetLineWidth()</a>. Finally,
+we output the cell (the last parameter <code>true</code> indicates that the background must
+be filled).
+<br>
+<br>
+The method used to print the paragraphs is <a href='../doc/multicell.htm'>MultiCell()</a>. Each time a line reaches the
+right extremity of the cell or a carriage return character is met, a line break is issued
+and a new cell automatically created under the current one. Text is justified by default.
+<br>
+<br>
+Two document properties are defined: the title (<a href='../doc/settitle.htm'>SetTitle()</a>) and the author (<a href='../doc/setauthor.htm'>SetAuthor()</a>).
+There are several ways to view them in Adobe Reader. The first one is to open the file directly with
+the reader, go to the File menu and choose the Properties option. The second one, also available from
+the plug-in, is to right-click and select Document Properties. The third method is to type the Ctrl+D
+key combination.
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto3.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto3.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto3.php	(revision 8435)
@@ -0,0 +1,81 @@
+<?php
+require('../fpdf.php');
+
+class PDF extends FPDF
+{
+function Header()
+{
+	global $title;
+
+	// Arial bold 15
+	$this->SetFont('Arial','B',15);
+	// Calculate width of title and position
+	$w = $this->GetStringWidth($title)+6;
+	$this->SetX((210-$w)/2);
+	// Colors of frame, background and text
+	$this->SetDrawColor(0,80,180);
+	$this->SetFillColor(230,230,0);
+	$this->SetTextColor(220,50,50);
+	// Thickness of frame (1 mm)
+	$this->SetLineWidth(1);
+	// Title
+	$this->Cell($w,9,$title,1,1,'C',true);
+	// Line break
+	$this->Ln(10);
+}
+
+function Footer()
+{
+	// Position at 1.5 cm from bottom
+	$this->SetY(-15);
+	// Arial italic 8
+	$this->SetFont('Arial','I',8);
+	// Text color in gray
+	$this->SetTextColor(128);
+	// Page number
+	$this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
+}
+
+function ChapterTitle($num, $label)
+{
+	// Arial 12
+	$this->SetFont('Arial','',12);
+	// Background color
+	$this->SetFillColor(200,220,255);
+	// Title
+	$this->Cell(0,6,"Chapter $num : $label",0,1,'L',true);
+	// Line break
+	$this->Ln(4);
+}
+
+function ChapterBody($file)
+{
+	// Read text file
+	$txt = file_get_contents($file);
+	// Times 12
+	$this->SetFont('Times','',12);
+	// Output justified text
+	$this->MultiCell(0,5,$txt);
+	// Line break
+	$this->Ln();
+	// Mention in italics
+	$this->SetFont('','I');
+	$this->Cell(0,5,'(end of excerpt)');
+}
+
+function PrintChapter($num, $title, $file)
+{
+	$this->AddPage();
+	$this->ChapterTitle($num,$title);
+	$this->ChapterBody($file);
+}
+}
+
+$pdf = new PDF();
+$title = '20000 Leagues Under the Seas';
+$pdf->SetTitle($title);
+$pdf->SetAuthor('Jules Verne');
+$pdf->PrintChapter(1,'A RUNAWAY REEF','20k_c1.txt');
+$pdf->PrintChapter(2,'THE PROS AND CONS','20k_c2.txt');
+$pdf->Output();
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto4.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto4.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto4.htm	(revision 8435)
@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Multi-columns</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Multi-columns</h1>
+This example is a variant of the previous one showing how to lay the text across multiple
+columns.
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+class </span>PDF <span class="kw">extends </span>FPDF
+<span class="kw">{
+protected </span>$col <span class="kw">= </span>0<span class="kw">; </span><span class="cmt">// Current column
+</span><span class="kw">protected </span>$y0<span class="kw">;      </span><span class="cmt">// Ordinate of column start
+
+</span><span class="kw">function </span>Header<span class="kw">()
+{
+    </span><span class="cmt">// Page header
+    </span><span class="kw">global </span>$title<span class="kw">;
+
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>15<span class="kw">);
+    </span>$w <span class="kw">= </span>$<span class="kw">this-&gt;</span>GetStringWidth<span class="kw">(</span>$title<span class="kw">)+</span>6<span class="kw">;
+    </span>$<span class="kw">this-&gt;</span>SetX<span class="kw">((</span>210<span class="kw">-</span>$w<span class="kw">)/</span>2<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetDrawColor<span class="kw">(</span>0<span class="kw">,</span>80<span class="kw">,</span>180<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>230<span class="kw">,</span>230<span class="kw">,</span>0<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>220<span class="kw">,</span>50<span class="kw">,</span>50<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetLineWidth<span class="kw">(</span>1<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">,</span>9<span class="kw">,</span>$title<span class="kw">,</span>1<span class="kw">,</span>1<span class="kw">,</span><span class="str">'C'</span><span class="kw">,</span>true<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>10<span class="kw">);
+    </span><span class="cmt">// Save ordinate
+    </span>$<span class="kw">this-&gt;</span>y0 <span class="kw">= </span>$<span class="kw">this-&gt;</span>GetY<span class="kw">();
+}
+
+function </span>Footer<span class="kw">()
+{
+    </span><span class="cmt">// Page footer
+    </span>$<span class="kw">this-&gt;</span>SetY<span class="kw">(-</span>15<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">,</span>8<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>128<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Page '</span><span class="kw">.</span>$<span class="kw">this-&gt;</span>PageNo<span class="kw">(),</span>0<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
+}
+
+function </span>SetCol<span class="kw">(</span>$col<span class="kw">)
+{
+    </span><span class="cmt">// Set position at a given column
+    </span>$<span class="kw">this-&gt;</span>col <span class="kw">= </span>$col<span class="kw">;
+    </span>$x <span class="kw">= </span>10<span class="kw">+</span>$col<span class="kw">*</span>65<span class="kw">;
+    </span>$<span class="kw">this-&gt;</span>SetLeftMargin<span class="kw">(</span>$x<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetX<span class="kw">(</span>$x<span class="kw">);
+}
+
+function </span>AcceptPageBreak<span class="kw">()
+{
+    </span><span class="cmt">// Method accepting or not automatic page break
+    </span><span class="kw">if(</span>$<span class="kw">this-&gt;</span>col<span class="kw">&lt;</span>2<span class="kw">)
+    {
+        </span><span class="cmt">// Go to next column
+        </span>$<span class="kw">this-&gt;</span>SetCol<span class="kw">(</span>$<span class="kw">this-&gt;</span>col<span class="kw">+</span>1<span class="kw">);
+        </span><span class="cmt">// Set ordinate to top
+        </span>$<span class="kw">this-&gt;</span>SetY<span class="kw">(</span>$<span class="kw">this-&gt;</span>y0<span class="kw">);
+        </span><span class="cmt">// Keep on page
+        </span><span class="kw">return </span>false<span class="kw">;
+    }
+    else
+    {
+        </span><span class="cmt">// Go back to first column
+        </span>$<span class="kw">this-&gt;</span>SetCol<span class="kw">(</span>0<span class="kw">);
+        </span><span class="cmt">// Page break
+        </span><span class="kw">return </span>true<span class="kw">;
+    }
+}
+
+function </span>ChapterTitle<span class="kw">(</span>$num<span class="kw">, </span>$label<span class="kw">)
+{
+    </span><span class="cmt">// Title
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>200<span class="kw">,</span>220<span class="kw">,</span>255<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>6<span class="kw">,</span><span class="str">"Chapter </span>$num<span class="str"> : </span>$label<span class="str">"</span><span class="kw">,</span>0<span class="kw">,</span>1<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>true<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>4<span class="kw">);
+    </span><span class="cmt">// Save ordinate
+    </span>$<span class="kw">this-&gt;</span>y0 <span class="kw">= </span>$<span class="kw">this-&gt;</span>GetY<span class="kw">();
+}
+
+function </span>ChapterBody<span class="kw">(</span>$file<span class="kw">)
+{
+    </span><span class="cmt">// Read text file
+    </span>$txt <span class="kw">= </span>file_get_contents<span class="kw">(</span>$file<span class="kw">);
+    </span><span class="cmt">// Font
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Times'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">);
+    </span><span class="cmt">// Output text in a 6 cm width column
+    </span>$<span class="kw">this-&gt;</span>MultiCell<span class="kw">(</span>60<span class="kw">,</span>5<span class="kw">,</span>$txt<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    </span><span class="cmt">// Mention
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>5<span class="kw">,</span><span class="str">'(end of excerpt)'</span><span class="kw">);
+    </span><span class="cmt">// Go back to first column
+    </span>$<span class="kw">this-&gt;</span>SetCol<span class="kw">(</span>0<span class="kw">);
+}
+
+function </span>PrintChapter<span class="kw">(</span>$num<span class="kw">, </span>$title<span class="kw">, </span>$file<span class="kw">)
+{
+    </span><span class="cmt">// Add chapter
+    </span>$<span class="kw">this-&gt;</span>AddPage<span class="kw">();
+    </span>$<span class="kw">this-&gt;</span>ChapterTitle<span class="kw">(</span>$num<span class="kw">,</span>$title<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>ChapterBody<span class="kw">(</span>$file<span class="kw">);
+}
+}
+
+</span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
+</span>$title <span class="kw">= </span><span class="str">'20000 Leagues Under the Seas'</span><span class="kw">;
+</span>$pdf<span class="kw">-&gt;</span>SetTitle<span class="kw">(</span>$title<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetAuthor<span class="kw">(</span><span class="str">'Jules Verne'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>PrintChapter<span class="kw">(</span>1<span class="kw">,</span><span class="str">'A RUNAWAY REEF'</span><span class="kw">,</span><span class="str">'20k_c1.txt'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>PrintChapter<span class="kw">(</span>2<span class="kw">,</span><span class="str">'THE PROS AND CONS'</span><span class="kw">,</span><span class="str">'20k_c2.txt'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto4.php' target='_blank' class='demo'>[Demo]</a></p>
+The key method used is <a href='../doc/acceptpagebreak.htm'>AcceptPageBreak()</a>. It allows to accept or not an automatic page
+break. By refusing it and altering the margin and current position, the desired column layout
+is achieved.
+<br>
+For the rest, not many changes; two properties have been added to the class to save the current
+column number and the position where columns begin, and the MultiCell() call specifies a
+6 centimeter width.
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto4.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto4.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto4.php	(revision 8435)
@@ -0,0 +1,109 @@
+<?php
+require('../fpdf.php');
+
+class PDF extends FPDF
+{
+protected $col = 0; // Current column
+protected $y0;      // Ordinate of column start
+
+function Header()
+{
+	// Page header
+	global $title;
+
+	$this->SetFont('Arial','B',15);
+	$w = $this->GetStringWidth($title)+6;
+	$this->SetX((210-$w)/2);
+	$this->SetDrawColor(0,80,180);
+	$this->SetFillColor(230,230,0);
+	$this->SetTextColor(220,50,50);
+	$this->SetLineWidth(1);
+	$this->Cell($w,9,$title,1,1,'C',true);
+	$this->Ln(10);
+	// Save ordinate
+	$this->y0 = $this->GetY();
+}
+
+function Footer()
+{
+	// Page footer
+	$this->SetY(-15);
+	$this->SetFont('Arial','I',8);
+	$this->SetTextColor(128);
+	$this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
+}
+
+function SetCol($col)
+{
+	// Set position at a given column
+	$this->col = $col;
+	$x = 10+$col*65;
+	$this->SetLeftMargin($x);
+	$this->SetX($x);
+}
+
+function AcceptPageBreak()
+{
+	// Method accepting or not automatic page break
+	if($this->col<2)
+	{
+		// Go to next column
+		$this->SetCol($this->col+1);
+		// Set ordinate to top
+		$this->SetY($this->y0);
+		// Keep on page
+		return false;
+	}
+	else
+	{
+		// Go back to first column
+		$this->SetCol(0);
+		// Page break
+		return true;
+	}
+}
+
+function ChapterTitle($num, $label)
+{
+	// Title
+	$this->SetFont('Arial','',12);
+	$this->SetFillColor(200,220,255);
+	$this->Cell(0,6,"Chapter $num : $label",0,1,'L',true);
+	$this->Ln(4);
+	// Save ordinate
+	$this->y0 = $this->GetY();
+}
+
+function ChapterBody($file)
+{
+	// Read text file
+	$txt = file_get_contents($file);
+	// Font
+	$this->SetFont('Times','',12);
+	// Output text in a 6 cm width column
+	$this->MultiCell(60,5,$txt);
+	$this->Ln();
+	// Mention
+	$this->SetFont('','I');
+	$this->Cell(0,5,'(end of excerpt)');
+	// Go back to first column
+	$this->SetCol(0);
+}
+
+function PrintChapter($num, $title, $file)
+{
+	// Add chapter
+	$this->AddPage();
+	$this->ChapterTitle($num,$title);
+	$this->ChapterBody($file);
+}
+}
+
+$pdf = new PDF();
+$title = '20000 Leagues Under the Seas';
+$pdf->SetTitle($title);
+$pdf->SetAuthor('Jules Verne');
+$pdf->PrintChapter(1,'A RUNAWAY REEF','20k_c1.txt');
+$pdf->PrintChapter(2,'THE PROS AND CONS','20k_c2.txt');
+$pdf->Output();
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto5.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto5.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto5.htm	(revision 8435)
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Tables</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Tables</h1>
+This tutorial shows different ways to make tables.
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+class </span>PDF <span class="kw">extends </span>FPDF
+<span class="kw">{
+</span><span class="cmt">// Load data
+</span><span class="kw">function </span>LoadData<span class="kw">(</span>$file<span class="kw">)
+{
+    </span><span class="cmt">// Read file lines
+    </span>$lines <span class="kw">= </span>file<span class="kw">(</span>$file<span class="kw">);
+    </span>$data <span class="kw">= array();
+    foreach(</span>$lines <span class="kw">as </span>$line<span class="kw">)
+        </span>$data<span class="kw">[] = </span>explode<span class="kw">(</span><span class="str">';'</span><span class="kw">,</span>trim<span class="kw">(</span>$line<span class="kw">));
+    return </span>$data<span class="kw">;
+}
+
+</span><span class="cmt">// Simple table
+</span><span class="kw">function </span>BasicTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
+{
+    </span><span class="cmt">// Header
+    </span><span class="kw">foreach(</span>$header <span class="kw">as </span>$col<span class="kw">)
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>40<span class="kw">,</span>7<span class="kw">,</span>$col<span class="kw">,</span>1<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    </span><span class="cmt">// Data
+    </span><span class="kw">foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
+    {
+        foreach(</span>$row <span class="kw">as </span>$col<span class="kw">)
+            </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>40<span class="kw">,</span>6<span class="kw">,</span>$col<span class="kw">,</span>1<span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    }
+}
+
+</span><span class="cmt">// Better table
+</span><span class="kw">function </span>ImprovedTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
+{
+    </span><span class="cmt">// Column widths
+    </span>$w <span class="kw">= array(</span>40<span class="kw">, </span>35<span class="kw">, </span>40<span class="kw">, </span>45<span class="kw">);
+    </span><span class="cmt">// Header
+    </span><span class="kw">for(</span>$i<span class="kw">=</span>0<span class="kw">;</span>$i<span class="kw">&lt;</span>count<span class="kw">(</span>$header<span class="kw">);</span>$i<span class="kw">++)
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>$i<span class="kw">],</span>7<span class="kw">,</span>$header<span class="kw">[</span>$i<span class="kw">],</span>1<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    </span><span class="cmt">// Data
+    </span><span class="kw">foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
+    {
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>0<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>0<span class="kw">],</span><span class="str">'LR'</span><span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>1<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>1<span class="kw">],</span><span class="str">'LR'</span><span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>2<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>2<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>3<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>3<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    }
+    </span><span class="cmt">// Closing line
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>array_sum<span class="kw">(</span>$w<span class="kw">),</span>0<span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'T'</span><span class="kw">);
+}
+
+</span><span class="cmt">// Colored table
+</span><span class="kw">function </span>FancyTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
+{
+    </span><span class="cmt">// Colors, line width and bold font
+    </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>255<span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>255<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetDrawColor<span class="kw">(</span>128<span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetLineWidth<span class="kw">(</span>.3<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">);
+    </span><span class="cmt">// Header
+    </span>$w <span class="kw">= array(</span>40<span class="kw">, </span>35<span class="kw">, </span>40<span class="kw">, </span>45<span class="kw">);
+    for(</span>$i<span class="kw">=</span>0<span class="kw">;</span>$i<span class="kw">&lt;</span>count<span class="kw">(</span>$header<span class="kw">);</span>$i<span class="kw">++)
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>$i<span class="kw">],</span>7<span class="kw">,</span>$header<span class="kw">[</span>$i<span class="kw">],</span>1<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">,</span>true<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    </span><span class="cmt">// Color and font restoration
+    </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>224<span class="kw">,</span>235<span class="kw">,</span>255<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>0<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">);
+    </span><span class="cmt">// Data
+    </span>$fill <span class="kw">= </span>false<span class="kw">;
+    foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
+    {
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>0<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>0<span class="kw">],</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>$fill<span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>1<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>1<span class="kw">],</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>$fill<span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>2<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>2<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">,</span>$fill<span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>3<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>3<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">,</span>$fill<span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+        </span>$fill <span class="kw">= !</span>$fill<span class="kw">;
+    }
+    </span><span class="cmt">// Closing line
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>array_sum<span class="kw">(</span>$w<span class="kw">),</span>0<span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'T'</span><span class="kw">);
+}
+}
+
+</span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
+</span><span class="cmt">// Column headings
+</span>$header <span class="kw">= array(</span><span class="str">'Country'</span><span class="kw">, </span><span class="str">'Capital'</span><span class="kw">, </span><span class="str">'Area (sq km)'</span><span class="kw">, </span><span class="str">'Pop. (thousands)'</span><span class="kw">);
+</span><span class="cmt">// Data loading
+</span>$data <span class="kw">= </span>$pdf<span class="kw">-&gt;</span>LoadData<span class="kw">(</span><span class="str">'countries.txt'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>14<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>BasicTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>ImprovedTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>FancyTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto5.php' target='_blank' class='demo'>[Demo]</a></p>
+A table being just a collection of cells, it's natural to build one from them. The first
+example is achieved in the most basic way possible: simple framed cells, all of the same size
+and left aligned. The result is rudimentary but very quick to obtain.
+<br>
+<br>
+The second table brings some improvements: each column has its own width, headings are centered,
+and numbers right aligned. Moreover, horizontal lines have been removed. This is done by means
+of the <code>border</code> parameter of the <a href='../doc/cell.htm'>Cell()</a> method, which specifies which sides of the
+cell must be drawn. Here we want the left (<code>L</code>) and right (<code>R</code>) ones. It remains
+the problem of the horizontal line to finish the table. There are two possibilities: either
+check for the last line in the loop, in which case we use <code>LRB</code> for the <code>border</code>
+parameter; or, as done here, add the line once the loop is over.
+<br>
+<br>
+The third table is similar to the second one but uses colors. Fill, text and line colors are
+simply specified. Alternate coloring for rows is obtained by using alternatively transparent
+and filled cells.
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto5.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto5.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto5.php	(revision 8435)
@@ -0,0 +1,102 @@
+<?php
+require('../fpdf.php');
+
+class PDF extends FPDF
+{
+// Load data
+function LoadData($file)
+{
+	// Read file lines
+	$lines = file($file);
+	$data = array();
+	foreach($lines as $line)
+		$data[] = explode(';',trim($line));
+	return $data;
+}
+
+// Simple table
+function BasicTable($header, $data)
+{
+	// Header
+	foreach($header as $col)
+		$this->Cell(40,7,$col,1);
+	$this->Ln();
+	// Data
+	foreach($data as $row)
+	{
+		foreach($row as $col)
+			$this->Cell(40,6,$col,1);
+		$this->Ln();
+	}
+}
+
+// Better table
+function ImprovedTable($header, $data)
+{
+	// Column widths
+	$w = array(40, 35, 40, 45);
+	// Header
+	for($i=0;$i<count($header);$i++)
+		$this->Cell($w[$i],7,$header[$i],1,0,'C');
+	$this->Ln();
+	// Data
+	foreach($data as $row)
+	{
+		$this->Cell($w[0],6,$row[0],'LR');
+		$this->Cell($w[1],6,$row[1],'LR');
+		$this->Cell($w[2],6,number_format($row[2]),'LR',0,'R');
+		$this->Cell($w[3],6,number_format($row[3]),'LR',0,'R');
+		$this->Ln();
+	}
+	// Closing line
+	$this->Cell(array_sum($w),0,'','T');
+}
+
+// Colored table
+function FancyTable($header, $data)
+{
+	// Colors, line width and bold font
+	$this->SetFillColor(255,0,0);
+	$this->SetTextColor(255);
+	$this->SetDrawColor(128,0,0);
+	$this->SetLineWidth(.3);
+	$this->SetFont('','B');
+	// Header
+	$w = array(40, 35, 40, 45);
+	for($i=0;$i<count($header);$i++)
+		$this->Cell($w[$i],7,$header[$i],1,0,'C',true);
+	$this->Ln();
+	// Color and font restoration
+	$this->SetFillColor(224,235,255);
+	$this->SetTextColor(0);
+	$this->SetFont('');
+	// Data
+	$fill = false;
+	foreach($data as $row)
+	{
+		$this->Cell($w[0],6,$row[0],'LR',0,'L',$fill);
+		$this->Cell($w[1],6,$row[1],'LR',0,'L',$fill);
+		$this->Cell($w[2],6,number_format($row[2]),'LR',0,'R',$fill);
+		$this->Cell($w[3],6,number_format($row[3]),'LR',0,'R',$fill);
+		$this->Ln();
+		$fill = !$fill;
+	}
+	// Closing line
+	$this->Cell(array_sum($w),0,'','T');
+}
+}
+
+$pdf = new PDF();
+// Column headings
+$header = array('Country', 'Capital', 'Area (sq km)', 'Pop. (thousands)');
+// Data loading
+$data = $pdf->LoadData('countries.txt');
+$pdf->SetFont('Arial','',14);
+$pdf->AddPage();
+$pdf->BasicTable($header,$data);
+$pdf->AddPage();
+$pdf->ImprovedTable($header,$data);
+$pdf->AddPage();
+$pdf->FancyTable($header,$data);
+$pdf->Output();
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto6.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto6.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto6.htm	(revision 8435)
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Links and flowing text</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Links and flowing text</h1>
+This tutorial explains how to insert links (internal and external) and shows a new text writing
+mode. It also contains a basic HTML parser.
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+class </span>PDF <span class="kw">extends </span>FPDF
+<span class="kw">{
+protected </span>$B <span class="kw">= </span>0<span class="kw">;
+protected </span>$I <span class="kw">= </span>0<span class="kw">;
+protected </span>$U <span class="kw">= </span>0<span class="kw">;
+protected </span>$HREF <span class="kw">= </span><span class="str">''</span><span class="kw">;
+
+function </span>WriteHTML<span class="kw">(</span>$html<span class="kw">)
+{
+    </span><span class="cmt">// HTML parser
+    </span>$html <span class="kw">= </span>str_replace<span class="kw">(</span><span class="str">"\n"</span><span class="kw">,</span><span class="str">' '</span><span class="kw">,</span>$html<span class="kw">);
+    </span>$a <span class="kw">= </span>preg_split<span class="kw">(</span><span class="str">'/&lt;(.*)&gt;/U'</span><span class="kw">,</span>$html<span class="kw">,-</span>1<span class="kw">,</span>PREG_SPLIT_DELIM_CAPTURE<span class="kw">);
+    foreach(</span>$a <span class="kw">as </span>$i<span class="kw">=&gt;</span>$e<span class="kw">)
+    {
+        if(</span>$i<span class="kw">%</span>2<span class="kw">==</span>0<span class="kw">)
+        {
+            </span><span class="cmt">// Text
+            </span><span class="kw">if(</span>$<span class="kw">this-&gt;</span>HREF<span class="kw">)
+                </span>$<span class="kw">this-&gt;</span>PutLink<span class="kw">(</span>$<span class="kw">this-&gt;</span>HREF<span class="kw">,</span>$e<span class="kw">);
+            else
+                </span>$<span class="kw">this-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span>$e<span class="kw">);
+        }
+        else
+        {
+            </span><span class="cmt">// Tag
+            </span><span class="kw">if(</span>$e<span class="kw">[</span>0<span class="kw">]==</span><span class="str">'/'</span><span class="kw">)
+                </span>$<span class="kw">this-&gt;</span>CloseTag<span class="kw">(</span>strtoupper<span class="kw">(</span>substr<span class="kw">(</span>$e<span class="kw">,</span>1<span class="kw">)));
+            else
+            {
+                </span><span class="cmt">// Extract attributes
+                </span>$a2 <span class="kw">= </span>explode<span class="kw">(</span><span class="str">' '</span><span class="kw">,</span>$e<span class="kw">);
+                </span>$tag <span class="kw">= </span>strtoupper<span class="kw">(</span>array_shift<span class="kw">(</span>$a2<span class="kw">));
+                </span>$attr <span class="kw">= array();
+                foreach(</span>$a2 <span class="kw">as </span>$v<span class="kw">)
+                {
+                    if(</span>preg_match<span class="kw">(</span><span class="str">'/([^=]*)=["\']?([^"\']*)/'</span><span class="kw">,</span>$v<span class="kw">,</span>$a3<span class="kw">))
+                        </span>$attr<span class="kw">[</span>strtoupper<span class="kw">(</span>$a3<span class="kw">[</span>1<span class="kw">])] = </span>$a3<span class="kw">[</span>2<span class="kw">];
+                }
+                </span>$<span class="kw">this-&gt;</span>OpenTag<span class="kw">(</span>$tag<span class="kw">,</span>$attr<span class="kw">);
+            }
+        }
+    }
+}
+
+function </span>OpenTag<span class="kw">(</span>$tag<span class="kw">, </span>$attr<span class="kw">)
+{
+    </span><span class="cmt">// Opening tag
+    </span><span class="kw">if(</span>$tag<span class="kw">==</span><span class="str">'B' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'I' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'U'</span><span class="kw">)
+        </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span>$tag<span class="kw">,</span>true<span class="kw">);
+    if(</span>$tag<span class="kw">==</span><span class="str">'A'</span><span class="kw">)
+        </span>$<span class="kw">this-&gt;</span>HREF <span class="kw">= </span>$attr<span class="kw">[</span><span class="str">'HREF'</span><span class="kw">];
+    if(</span>$tag<span class="kw">==</span><span class="str">'BR'</span><span class="kw">)
+        </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>5<span class="kw">);
+}
+
+function </span>CloseTag<span class="kw">(</span>$tag<span class="kw">)
+{
+    </span><span class="cmt">// Closing tag
+    </span><span class="kw">if(</span>$tag<span class="kw">==</span><span class="str">'B' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'I' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'U'</span><span class="kw">)
+        </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span>$tag<span class="kw">,</span>false<span class="kw">);
+    if(</span>$tag<span class="kw">==</span><span class="str">'A'</span><span class="kw">)
+        </span>$<span class="kw">this-&gt;</span>HREF <span class="kw">= </span><span class="str">''</span><span class="kw">;
+}
+
+function </span>SetStyle<span class="kw">(</span>$tag<span class="kw">, </span>$enable<span class="kw">)
+{
+    </span><span class="cmt">// Modify style and select corresponding font
+    </span>$<span class="kw">this-&gt;</span>$tag <span class="kw">+= (</span>$enable <span class="kw">? </span>1 <span class="kw">: -</span>1<span class="kw">);
+    </span>$style <span class="kw">= </span><span class="str">''</span><span class="kw">;
+    foreach(array(</span><span class="str">'B'</span><span class="kw">, </span><span class="str">'I'</span><span class="kw">, </span><span class="str">'U'</span><span class="kw">) as </span>$s<span class="kw">)
+    {
+        if(</span>$<span class="kw">this-&gt;</span>$s<span class="kw">&gt;</span>0<span class="kw">)
+            </span>$style <span class="kw">.= </span>$s<span class="kw">;
+    }
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span>$style<span class="kw">);
+}
+
+function </span>PutLink<span class="kw">(</span>$URL<span class="kw">, </span>$txt<span class="kw">)
+{
+    </span><span class="cmt">// Put a hyperlink
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>0<span class="kw">,</span>0<span class="kw">,</span>255<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>true<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span>$txt<span class="kw">,</span>$URL<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>false<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>0<span class="kw">);
+}
+}
+
+</span>$html <span class="kw">= </span><span class="str">'You can now easily print text mixing different styles: &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;,
+&lt;u&gt;underlined&lt;/u&gt;, or &lt;b&gt;&lt;i&gt;&lt;u&gt;all at once&lt;/u&gt;&lt;/i&gt;&lt;/b&gt;!&lt;br&gt;&lt;br&gt;You can also insert links on
+text, such as &lt;a href="http://www.fpdf.org"&gt;www.fpdf.org&lt;/a&gt;, or on an image: click on the logo.'</span><span class="kw">;
+
+</span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
+</span><span class="cmt">// First page
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>20<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span><span class="str">"To find out what's new in this tutorial, click "</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'U'</span><span class="kw">);
+</span>$link <span class="kw">= </span>$pdf<span class="kw">-&gt;</span>AddLink<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span><span class="str">'here'</span><span class="kw">,</span>$link<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">);
+</span><span class="cmt">// Second page
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>SetLink<span class="kw">(</span>$link<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Image<span class="kw">(</span><span class="str">'logo.png'</span><span class="kw">,</span>10<span class="kw">,</span>12<span class="kw">,</span>30<span class="kw">,</span>0<span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'http://www.fpdf.org'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetLeftMargin<span class="kw">(</span>45<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetFontSize<span class="kw">(</span>14<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>WriteHTML<span class="kw">(</span>$html<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto6.php' target='_blank' class='demo'>[Demo]</a></p>
+The new method to print text is <a href='../doc/write.htm'>Write()</a>. It's very close to <a href='../doc/multicell.htm'>MultiCell()</a>; the differences are:
+<ul>
+<li>The end of line is at the right margin and the next line begins at the left one</li>
+<li>The current position moves at the end of the text</li>
+</ul>
+So it allows to write a chunk of text, alter the font style, then continue from the exact
+place we left it. On the other hand, you cannot justify it.
+<br>
+<br>
+The method is used on the first page to put a link pointing to the second one. The beginning of
+the sentence is written in regular style, then we switch to underline and finish it. The link
+is created with <a href='../doc/addlink.htm'>AddLink()</a>, which returns a link identifier. The identifier is
+passed as third parameter of Write(). Once the second page is created, we use <a href='../doc/setlink.htm'>SetLink()</a> to
+make the link point to the beginning of the current page.
+<br>
+<br>
+Then we put an image with an external link on it. An external link is just a URL. It's passed as
+last parameter of <a href='../doc/image.htm'>Image()</a>.
+<br>
+<br>
+Finally, the left margin is moved after the image with <a href='../doc/setleftmargin.htm'>SetLeftMargin()</a> and some text in
+HTML format is output. A very simple HTML parser is used for this, based on regular expressions.
+Recognized tags are &lt;b&gt;, &lt;i&gt;, &lt;u&gt;, &lt;a&gt; and &lt;br&gt;; the others are
+ignored. The parser also makes use of the Write() method. An external link is put the same way as
+an internal one (third parameter of Write()). Note that <a href='../doc/cell.htm'>Cell()</a> also allows to put links.
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto6.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto6.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto6.php	(revision 8435)
@@ -0,0 +1,113 @@
+<?php
+require('../fpdf.php');
+
+class PDF extends FPDF
+{
+protected $B = 0;
+protected $I = 0;
+protected $U = 0;
+protected $HREF = '';
+
+function WriteHTML($html)
+{
+	// HTML parser
+	$html = str_replace("\n",' ',$html);
+	$a = preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
+	foreach($a as $i=>$e)
+	{
+		if($i%2==0)
+		{
+			// Text
+			if($this->HREF)
+				$this->PutLink($this->HREF,$e);
+			else
+				$this->Write(5,$e);
+		}
+		else
+		{
+			// Tag
+			if($e[0]=='/')
+				$this->CloseTag(strtoupper(substr($e,1)));
+			else
+			{
+				// Extract attributes
+				$a2 = explode(' ',$e);
+				$tag = strtoupper(array_shift($a2));
+				$attr = array();
+				foreach($a2 as $v)
+				{
+					if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
+						$attr[strtoupper($a3[1])] = $a3[2];
+				}
+				$this->OpenTag($tag,$attr);
+			}
+		}
+	}
+}
+
+function OpenTag($tag, $attr)
+{
+	// Opening tag
+	if($tag=='B' || $tag=='I' || $tag=='U')
+		$this->SetStyle($tag,true);
+	if($tag=='A')
+		$this->HREF = $attr['HREF'];
+	if($tag=='BR')
+		$this->Ln(5);
+}
+
+function CloseTag($tag)
+{
+	// Closing tag
+	if($tag=='B' || $tag=='I' || $tag=='U')
+		$this->SetStyle($tag,false);
+	if($tag=='A')
+		$this->HREF = '';
+}
+
+function SetStyle($tag, $enable)
+{
+	// Modify style and select corresponding font
+	$this->$tag += ($enable ? 1 : -1);
+	$style = '';
+	foreach(array('B', 'I', 'U') as $s)
+	{
+		if($this->$s>0)
+			$style .= $s;
+	}
+	$this->SetFont('',$style);
+}
+
+function PutLink($URL, $txt)
+{
+	// Put a hyperlink
+	$this->SetTextColor(0,0,255);
+	$this->SetStyle('U',true);
+	$this->Write(5,$txt,$URL);
+	$this->SetStyle('U',false);
+	$this->SetTextColor(0);
+}
+}
+
+$html = 'You can now easily print text mixing different styles: <b>bold</b>, <i>italic</i>,
+<u>underlined</u>, or <b><i><u>all at once</u></i></b>!<br><br>You can also insert links on
+text, such as <a href="http://www.fpdf.org">www.fpdf.org</a>, or on an image: click on the logo.';
+
+$pdf = new PDF();
+// First page
+$pdf->AddPage();
+$pdf->SetFont('Arial','',20);
+$pdf->Write(5,"To find out what's new in this tutorial, click ");
+$pdf->SetFont('','U');
+$link = $pdf->AddLink();
+$pdf->Write(5,'here',$link);
+$pdf->SetFont('');
+// Second page
+$pdf->AddPage();
+$pdf->SetLink($link);
+$pdf->Image('logo.png',10,12,30,0,'','http://www.fpdf.org');
+$pdf->SetLeftMargin(45);
+$pdf->SetFontSize(14);
+$pdf->WriteHTML($html);
+$pdf->Output();
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto7.htm
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto7.htm	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto7.htm	(revision 8435)
@@ -0,0 +1,187 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Adding new fonts and encodings</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Adding new fonts and encodings</h1>
+This tutorial explains how to use TrueType, OpenType and Type1 fonts so that you are not limited to the
+standard fonts anymore. The other benefit is that you can choose the text encoding, which allows you to
+use other languages than the Western ones (the standard fonts support only cp1252 aka windows-1252).
+<br>
+<br>
+For OpenType, only the format based on TrueType is supported (not the one based on Type1).<br>
+For Type1, you will need the corresponding AFM file (it is usually provided with the font).
+<br>
+<br>
+Adding a new font requires two steps:
+<ul>
+<li>Generation of the font definition file</li>
+<li>Declaration of the font in the script</li>
+</ul>
+
+<h2>Generation of the font definition file</h2>
+The first step consists in generating a PHP file containing all the information needed by FPDF;
+in addition, the font file is compressed. To do this, a helper script is provided in the makefont
+directory of the package: makefont.php. It contains the following function:
+<br>
+<br>
+<code>MakeFont(<b>string</b> fontfile [, <b>string</b> enc [, <b>boolean</b> embed [, <b>boolean</b> subset]]])</code>
+<dl class="param" style="margin-bottom:2em">
+<dt><code>fontfile</code></dt>
+<dd>
+<p>Path to the .ttf, .otf or .pfb file.</p>
+</dd>
+<dt><code>enc</code></dt>
+<dd>
+<p>Name of the encoding to use. Default value: <code>cp1252</code>.</p>
+</dd>
+<dt><code>embed</code></dt>
+<dd>
+<p>Whether to embed the font or not. Default value: <code>true</code>.</p>
+</dd>
+<dt><code>subset</code></dt>
+<dd>
+<p>Whether to subset the font or not. Default value: <code>true</code>.</p>
+</dd>
+</dl>
+The first parameter is the name of the font file. The extension must be either .ttf, .otf or .pfb and
+determines the font type. If your Type1 font is in ASCII format (.pfa), you can convert it to binary
+(.pfb) with the help of <a href="http://www.lcdf.org/~eddietwo/type/#t1utils" target="_blank">t1utils</a>.
+<br>
+<br>
+For Type1 fonts, the corresponding .afm file must be present in the same directory.
+<br>
+<br>
+The encoding defines the association between a code (from 0 to 255) and a character. The first 128 are
+always the same and correspond to ASCII; the following are variable. Encodings are stored in .map
+files. The available ones are:
+<ul>
+<li>cp1250 (Central Europe)</li>
+<li>cp1251 (Cyrillic)</li>
+<li>cp1252 (Western Europe)</li>
+<li>cp1253 (Greek)</li>
+<li>cp1254 (Turkish)</li>
+<li>cp1255 (Hebrew)</li>
+<li>cp1257 (Baltic)</li>
+<li>cp1258 (Vietnamese)</li>
+<li>cp874 (Thai)</li>
+<li>ISO-8859-1 (Western Europe)</li>
+<li>ISO-8859-2 (Central Europe)</li>
+<li>ISO-8859-4 (Baltic)</li>
+<li>ISO-8859-5 (Cyrillic)</li>
+<li>ISO-8859-7 (Greek)</li>
+<li>ISO-8859-9 (Turkish)</li>
+<li>ISO-8859-11 (Thai)</li>
+<li>ISO-8859-15 (Western Europe)</li>
+<li>ISO-8859-16 (Central Europe)</li>
+<li>KOI8-R (Russian)</li>
+<li>KOI8-U (Ukrainian)</li>
+</ul>
+Of course, the font must contain the characters corresponding to the selected encoding.
+<br>
+<br>
+The third parameter indicates whether the font should be embedded in the PDF or not. When a font is
+not embedded, it is searched in the system. The advantage is that the PDF file is smaller; on the
+other hand, if it is not available, then a substitution font is used. So you should ensure that the
+needed font is installed on the client systems. Embedding is the recommended option to guarantee a
+correct rendering.
+<br>
+<br>
+The last parameter indicates whether subsetting should be used, that is to say, whether only
+the characters from the selected encoding should be kept in the embedded font. As a result,
+the size of the PDF file can be greatly reduced, especially if the original font was big.
+<br>
+<br>
+After you have called the function (create a new file for this and include makefont.php), a .php file
+is created, with the same name as the font file. You may rename it if you wish. If the case of embedding,
+the font file is compressed and gives a second file with .z as extension (except if the compression
+function is not available, it requires Zlib). You may rename it too, but in this case you have to change
+the variable <code>$file</code> in the .php file accordingly.
+<br>
+<br>
+Example:
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'makefont/makefont.php'</span><span class="kw">);
+
+</span>MakeFont<span class="kw">(</span><span class="str">'C:\\Windows\\Fonts\\comic.ttf'</span><span class="kw">,</span><span class="str">'cp1252'</span><span class="kw">);
+</span>?&gt;</code></pre>
+</div>
+which gives the files comic.php and comic.z.
+<br>
+<br>
+Then copy the generated files to the font directory. If the font file could not be compressed, copy
+it directly instead of the .z version.
+<br>
+<br>
+Another way to call MakeFont() is through the command line:
+<br>
+<br>
+<kbd>php makefont\makefont.php C:\Windows\Fonts\comic.ttf cp1252</kbd>
+<br>
+<br>
+Finally, for TrueType and OpenType fonts, you can also generate the files
+<a href="http://www.fpdf.org/makefont/">online</a> instead of doing it manually.
+
+<h2>Declaration of the font in the script</h2>
+The second step is simple. You just need to call the <a href='../doc/addfont.htm'>AddFont()</a> method:
+<div class="source">
+<pre><code>$pdf<span class="kw">-&gt;</span>AddFont<span class="kw">(</span><span class="str">'Comic'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'comic.php'</span><span class="kw">);
+</span></code></pre>
+</div>
+And the font is now available (in regular and underlined styles), usable like the others. If we
+had worked with Comic Sans MS Bold (comicbd.ttf), we would have written:
+<div class="source">
+<pre><code>$pdf<span class="kw">-&gt;</span>AddFont<span class="kw">(</span><span class="str">'Comic'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span><span class="str">'comicbd.php'</span><span class="kw">);
+</span></code></pre>
+</div>
+
+<h2>Example</h2>
+Let's now see a complete example. We will use the font <a href="http://www.abstractfonts.com/font/52" target="_blank">Calligrapher</a>.
+The first step is the generation of the font files:
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'makefont/makefont.php'</span><span class="kw">);
+
+</span>MakeFont<span class="kw">(</span><span class="str">'calligra.ttf'</span><span class="kw">,</span><span class="str">'cp1252'</span><span class="kw">);
+</span>?&gt;</code></pre>
+</div>
+The script gives the following report:
+<br>
+<br>
+<b>Warning:</b> character Euro is missing<br>
+<b>Warning:</b> character zcaron is missing<br>
+Font file compressed: calligra.z<br>
+Font definition file generated: calligra.php<br>
+<br>
+The euro character is not present in the font (it's too old). Another character is missing too.
+<br>
+<br>
+Alternatively we could have used the command line:
+<br>
+<br>
+<kbd>php makefont\makefont.php calligra.ttf cp1252</kbd>
+<br>
+<br>
+or used the online generator.
+<br>
+<br>
+We can now copy the two generated files to the font directory and write the script:
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+</span>$pdf <span class="kw">= new </span>FPDF<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>AddFont<span class="kw">(</span><span class="str">'Calligrapher'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'calligra.php'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Calligrapher'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>35<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Write<span class="kw">(</span>10<span class="kw">,</span><span class="str">'Enjoy new fonts with FPDF!'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto7.php' target='_blank' class='demo'>[Demo]</a></p>
+</body>
+</html>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto7.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto7.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdf/tutorial/tuto7.php	(revision 8435)
@@ -0,0 +1,11 @@
+<?php
+define('FPDF_FONTPATH','.');
+require('../fpdf.php');
+
+$pdf = new FPDF();
+$pdf->AddFont('Calligrapher','','calligra.php');
+$pdf->AddPage();
+$pdf->SetFont('Calligrapher','',35);
+$pdf->Cell(0,10,'Enjoy new fonts with FPDF!');
+$pdf->Output();
+?>
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/LICENSE.txt
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/LICENSE.txt	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/LICENSE.txt	(revision 8435)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2023 Setasign GmbH & Co. KG, https://www.setasign.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/README.md	(revision 8435)
@@ -0,0 +1,131 @@
+FPDI - Free PDF Document Importer
+=================================
+
+[![Latest Stable Version](https://poser.pugx.org/setasign/fpdi/v/stable.svg)](https://packagist.org/packages/setasign/fpdi)
+[![Total Downloads](https://poser.pugx.org/setasign/fpdi/downloads.svg)](https://packagist.org/packages/setasign/fpdi)
+[![Latest Unstable Version](https://poser.pugx.org/setasign/fpdi/v/unstable.svg)](https://packagist.org/packages/setasign/fpdi)
+[![License](https://poser.pugx.org/setasign/fpdi/license.svg)](https://packagist.org/packages/setasign/fpdi)
+
+:heavy_exclamation_mark: This document refers to FPDI 2. Version 1 is deprecated and development is discontinued. :heavy_exclamation_mark: 
+
+FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF
+documents and use them as templates in [FPDF](http://www.fpdf.org), which was developed by Olivier Plathey. Apart
+from a copy of [FPDF](http://www.fpdf.org), FPDI does not require any special PHP extensions.
+
+FPDI can also be used as an extension for [TCPDF](https://github.com/tecnickcom/TCPDF) or 
+[tFPDF](http://fpdf.org/en/script/script92.php), too.
+
+## Installation with [Composer](https://packagist.org/packages/setasign/fpdi)
+
+Because FPDI can be used with FPDF, TCPDF or tFPDF we haven't added a fixed dependency in the main
+composer.json file. You need to add the dependency to the PDF generation library of your choice
+yourself.
+
+To use FPDI with FPDF include following in your composer.json file:
+
+```json
+{
+    "require": {
+        "setasign/fpdf": "1.8.*",
+        "setasign/fpdi": "^2.5"
+    }
+}
+```
+
+If you want to use TCPDF, you have to update your composer.json to:
+
+```json
+{
+    "require": {
+        "tecnickcom/tcpdf": "6.6.*",
+        "setasign/fpdi": "^2.5"
+    }
+}
+```
+
+If you want to use tFPDF, you have to update your composer.json to:
+
+```json
+{
+    "require": {
+        "setasign/tfpdf": "1.33.*",
+        "setasign/fpdi": "^2.3"
+    }
+}
+```
+
+## Manual Installation
+
+If you do not use composer, just require the autoload.php in the /src folder:
+
+```php
+require_once('src/autoload.php');
+```
+
+If you have a PSR-4 autoloader implemented, just register the src path as follows:
+```php
+$loader = new \Example\Psr4AutoloaderClass;
+$loader->register();
+$loader->addNamespace('setasign\Fpdi', 'path/to/src/');
+```
+
+## Changes to Version 1
+
+Version 2 is a complete rewrite from scratch of FPDI which comes with:
+- Namespaced code
+- Clean and up-to-date code base and style
+- PSR-4 compatible autoloading
+- Performance improvements by up to 100%
+- Less memory consumption
+- Native support for reading PDFs from strings or stream-resources
+- Support for documents with "invalid" data before their file-header
+- Optimized page tree resolving
+- Usage of individual exceptions
+- Several test types (unit, functional and visual tests)
+
+We tried to keep the main methods and logical workflow the same as in version 1 but please
+notice that there were incompatible changes which you should consider when updating to
+version 2:
+- You need to load the code using the `src/autoload.php` file instead of `classes/FPDI.php`.
+- The classes and traits are namespaced now: `setasign\Fpdi`
+- Page boundaries beginning with a slash, such as `/MediaBox`, are not supported anymore. Remove
+  the slash or use a constant of `PdfReader\PageBoundaries`.
+- The parameters $x, $y, $width and $height of the `useTemplate()` or `getTemplateSize()`
+  method have more logical correct default values now. Passing `0` as width or height will
+  result in an `InvalidArgumentException` now.
+- The return value of `getTemplateSize()` had changed to an array with more speaking keys
+  and reusability: Use `width` instead of `w` and `height` instead of `h`.
+- If you want to use **FPDI with TCPDF** you need to refactor your code to use the class `Tcpdf\Fpdi`
+(since 2.1; before it was `TcpdfFpdi`) instead of `FPDI`.
+
+## Example and Documentation
+
+A simple example, that imports a single page and places this onto a new created page:
+
+```php
+<?php
+use setasign\Fpdi\Fpdi;
+// or for usage with TCPDF:
+// use setasign\Fpdi\Tcpdf\Fpdi;
+
+// or for usage with tFPDF:
+// use setasign\Fpdi\Tfpdf\Fpdi;
+
+// setup the autoload function
+require_once('vendor/autoload.php');
+
+// initiate FPDI
+$pdf = new Fpdi();
+// add a page
+$pdf->AddPage();
+// set the source file
+$pdf->setSourceFile("Fantastic-Speaker.pdf");
+// import page 1
+$tplId = $pdf->importPage(1);
+// use the imported page and place it at point 10,10 with a width of 100 mm
+$pdf->useTemplate($tplId, 10, 10, 100);
+
+$pdf->Output();            
+```
+
+A full end-user documentation and API reference is available [here](https://manuals.setasign.com/fpdi-manual/).
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/SECURITY.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/SECURITY.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/SECURITY.md	(revision 8435)
@@ -0,0 +1,5 @@
+## Security contact information
+
+To report a security vulnerability, please use the
+[Tidelift security contact](https://tidelift.com/security).
+Tidelift will coordinate the fix and disclosure.
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/composer.json	(revision 8435)
@@ -0,0 +1,51 @@
+{
+    "name": "setasign/fpdi",
+    "homepage": "https://www.setasign.com/fpdi",
+    "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
+    "type": "library",
+    "keywords": [
+        "pdf",
+        "fpdi",
+        "fpdf"
+    ],
+    "license": "MIT",
+    "autoload": {
+        "psr-4": {
+            "setasign\\Fpdi\\": "src/"
+        }
+    },
+    "require": {
+        "php": "^5.6 || ^7.0 || ^8.0",
+        "ext-zlib": "*"
+    },
+    "conflict": {
+        "setasign/tfpdf": "<1.31"
+    },
+    "authors": [
+        {
+            "name": "Jan Slabon",
+            "email": "jan.slabon@setasign.com",
+            "homepage": "https://www.setasign.com"
+        },
+        {
+            "name": "Maximilian Kresse",
+            "email": "maximilian.kresse@setasign.com",
+            "homepage": "https://www.setasign.com"
+        }
+    ],
+    "suggest": {
+        "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured."
+    },
+    "require-dev": {
+        "phpunit/phpunit": "~5.7",
+        "setasign/fpdf": "~1.8.6",
+        "tecnickcom/tcpdf": "~6.2",
+        "setasign/tfpdf": "~1.33",
+        "squizlabs/php_codesniffer": "^3.5"
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "setasign\\Fpdi\\": "tests/"
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdfTpl.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdfTpl.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdfTpl.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+/**
+ * Class FpdfTpl
+ *
+ * This class adds a templating feature to FPDF.
+ */
+class FpdfTpl extends \FPDF
+{
+    use FpdfTplTrait;
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdfTplTrait.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdfTplTrait.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdfTplTrait.php	(revision 8435)
@@ -0,0 +1,473 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+/**
+ * Trait FpdfTplTrait
+ *
+ * This trait adds a templating feature to FPDF and tFPDF.
+ */
+trait FpdfTplTrait
+{
+    /**
+     * Data of all created templates.
+     *
+     * @var array
+     */
+    protected $templates = [];
+
+    /**
+     * The template id for the currently created template.
+     *
+     * @var null|int
+     */
+    protected $currentTemplateId;
+
+    /**
+     * A counter for template ids.
+     *
+     * @var int
+     */
+    protected $templateId = 0;
+
+    /**
+     * Set the page format of the current page.
+     *
+     * @param array $size An array with two values defining the size.
+     * @param string $orientation "L" for landscape, "P" for portrait.
+     * @throws \BadMethodCallException
+     */
+    public function setPageFormat($size, $orientation)
+    {
+        if ($this->currentTemplateId !== null) {
+            throw new \BadMethodCallException('The page format cannot be changed when writing to a template.');
+        }
+
+        if (!\in_array($orientation, ['P', 'L'], true)) {
+            throw new \InvalidArgumentException(\sprintf(
+                'Invalid page orientation "%s"! Only "P" and "L" are allowed!',
+                $orientation
+            ));
+        }
+
+        $size = $this->_getpagesize($size);
+
+        if (
+            $orientation != $this->CurOrientation
+            || $size[0] != $this->CurPageSize[0]
+            || $size[1] != $this->CurPageSize[1]
+        ) {
+            // New size or orientation
+            if ($orientation === 'P') {
+                $this->w = $size[0];
+                $this->h = $size[1];
+            } else {
+                $this->w = $size[1];
+                $this->h = $size[0];
+            }
+            $this->wPt = $this->w * $this->k;
+            $this->hPt = $this->h * $this->k;
+            $this->PageBreakTrigger = $this->h - $this->bMargin;
+            $this->CurOrientation = $orientation;
+            $this->CurPageSize = $size;
+
+            $this->PageInfo[$this->page]['size'] = array($this->wPt, $this->hPt);
+        }
+    }
+
+    /**
+     * Draws a template onto the page or another template.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param array|float|int $x The abscissa of upper-left corner. Alternatively you could use an assoc array
+     *                           with the keys "x", "y", "width", "height", "adjustPageSize".
+     * @param float|int $y The ordinate of upper-left corner.
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @param bool $adjustPageSize
+     * @return array The size
+     * @see FpdfTplTrait::getTemplateSize()
+     */
+    public function useTemplate($tpl, $x = 0, $y = 0, $width = null, $height = null, $adjustPageSize = false)
+    {
+        if (!isset($this->templates[$tpl])) {
+            throw new \InvalidArgumentException('Template does not exist!');
+        }
+
+        if (\is_array($x)) {
+            unset($x['tpl']);
+            \extract($x, EXTR_IF_EXISTS);
+            /** @noinspection NotOptimalIfConditionsInspection */
+            /** @noinspection PhpConditionAlreadyCheckedInspection */
+            if (\is_array($x)) {
+                $x = 0;
+            }
+        }
+
+        $template = $this->templates[$tpl];
+
+        $originalSize = $this->getTemplateSize($tpl);
+        $newSize = $this->getTemplateSize($tpl, $width, $height);
+        if ($adjustPageSize) {
+            $this->setPageFormat($newSize, $newSize['orientation']);
+        }
+
+        $this->_out(
+        // reset standard values, translate and scale
+            \sprintf(
+                'q 0 J 1 w 0 j 0 G 0 g %.4F 0 0 %.4F %.4F %.4F cm /%s Do Q',
+                ($newSize['width'] / $originalSize['width']),
+                ($newSize['height'] / $originalSize['height']),
+                $x * $this->k,
+                ($this->h - $y - $newSize['height']) * $this->k,
+                $template['id']
+            )
+        );
+
+        return $newSize;
+    }
+
+    /**
+     * Get the size of a template.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @return array|bool An array with following keys: width, height, 0 (=width), 1 (=height), orientation (L or P)
+     */
+    public function getTemplateSize($tpl, $width = null, $height = null)
+    {
+        if (!isset($this->templates[$tpl])) {
+            return false;
+        }
+
+        if ($width === null && $height === null) {
+            $width = $this->templates[$tpl]['width'];
+            $height = $this->templates[$tpl]['height'];
+        } elseif ($width === null) {
+            $width = $height * $this->templates[$tpl]['width'] / $this->templates[$tpl]['height'];
+        }
+
+        if ($height === null) {
+            $height = $width * $this->templates[$tpl]['height'] / $this->templates[$tpl]['width'];
+        }
+
+        if ($height <= 0. || $width <= 0.) {
+            throw new \InvalidArgumentException('Width or height parameter needs to be larger than zero.');
+        }
+
+        return [
+            'width' => $width,
+            'height' => $height,
+            0 => $width,
+            1 => $height,
+            'orientation' => $width > $height ? 'L' : 'P'
+        ];
+    }
+
+    /**
+     * Begins a new template.
+     *
+     * @param float|int|null $width The width of the template. If null, the current page width is used.
+     * @param float|int|null $height The height of the template. If null, the current page height is used.
+     * @param bool $groupXObject Define the form XObject as a group XObject to support transparency (if used).
+     * @return int A template identifier.
+     */
+    public function beginTemplate($width = null, $height = null, $groupXObject = false)
+    {
+        if ($width === null) {
+            $width = $this->w;
+        }
+
+        if ($height === null) {
+            $height = $this->h;
+        }
+
+        $templateId = $this->getNextTemplateId();
+
+        // initiate buffer with current state of FPDF
+        $buffer = "2 J\n"
+            . \sprintf('%.2F w', $this->LineWidth * $this->k) . "\n";
+
+        if ($this->FontFamily) {
+            $buffer .= \sprintf("BT /F%d %.2F Tf ET\n", $this->CurrentFont['i'], $this->FontSizePt);
+        }
+
+        if ($this->DrawColor !== '0 G') {
+            $buffer .= $this->DrawColor . "\n";
+        }
+        if ($this->FillColor !== '0 g') {
+            $buffer .= $this->FillColor . "\n";
+        }
+
+        if ($groupXObject && \version_compare('1.4', $this->PDFVersion, '>')) {
+            $this->PDFVersion = '1.4';
+        }
+
+        $this->templates[$templateId] = [
+            'objectNumber' => null,
+            'id' => 'TPL' . $templateId,
+            'buffer' => $buffer,
+            'width' => $width,
+            'height' => $height,
+            'groupXObject' => $groupXObject,
+            'state' => [
+                'x' => $this->x,
+                'y' => $this->y,
+                'AutoPageBreak' => $this->AutoPageBreak,
+                'bMargin' => $this->bMargin,
+                'tMargin' => $this->tMargin,
+                'lMargin' => $this->lMargin,
+                'rMargin' => $this->rMargin,
+                'h' => $this->h,
+                'hPt' => $this->hPt,
+                'w' => $this->w,
+                'wPt' => $this->wPt,
+                'FontFamily' => $this->FontFamily,
+                'FontStyle' => $this->FontStyle,
+                'FontSizePt' => $this->FontSizePt,
+                'FontSize' => $this->FontSize,
+                'underline' => $this->underline,
+                'TextColor' => $this->TextColor,
+                'DrawColor' => $this->DrawColor,
+                'FillColor' => $this->FillColor,
+                'ColorFlag' => $this->ColorFlag
+            ]
+        ];
+
+        $this->SetAutoPageBreak(false);
+        $this->currentTemplateId = $templateId;
+
+        $this->h = $height;
+        $this->hPt = $height / $this->k;
+        $this->w = $width;
+        $this->wPt = $width / $this->k;
+
+        $this->SetXY($this->lMargin, $this->tMargin);
+        $this->SetRightMargin($this->w - $width + $this->rMargin);
+
+        return $templateId;
+    }
+
+    /**
+     * Ends a template.
+     *
+     * @return bool|int|null A template identifier.
+     */
+    public function endTemplate()
+    {
+        if ($this->currentTemplateId === null) {
+            return false;
+        }
+
+        $templateId = $this->currentTemplateId;
+        $template = $this->templates[$templateId];
+
+        $state = $template['state'];
+        $this->SetXY($state['x'], $state['y']);
+        $this->tMargin = $state['tMargin'];
+        $this->lMargin = $state['lMargin'];
+        $this->rMargin = $state['rMargin'];
+        $this->h = $state['h'];
+        $this->hPt = $state['hPt'];
+        $this->w = $state['w'];
+        $this->wPt = $state['wPt'];
+        $this->SetAutoPageBreak($state['AutoPageBreak'], $state['bMargin']);
+
+        $this->FontFamily = $state['FontFamily'];
+        $this->FontStyle = $state['FontStyle'];
+        $this->FontSizePt = $state['FontSizePt'];
+        $this->FontSize = $state['FontSize'];
+
+        $this->TextColor = $state['TextColor'];
+        $this->DrawColor = $state['DrawColor'];
+        $this->FillColor = $state['FillColor'];
+        $this->ColorFlag = $state['ColorFlag'];
+
+        $this->underline = $state['underline'];
+
+        $fontKey = $this->FontFamily . $this->FontStyle;
+        if ($fontKey) {
+            $this->CurrentFont =& $this->fonts[$fontKey];
+        } else {
+            unset($this->CurrentFont);
+        }
+
+        $this->currentTemplateId = null;
+
+        return $templateId;
+    }
+
+    /**
+     * Get the next template id.
+     *
+     * @return int
+     */
+    protected function getNextTemplateId()
+    {
+        return $this->templateId++;
+    }
+
+    /* overwritten FPDF methods: */
+
+    /**
+     * @inheritdoc
+     */
+    public function AddPage($orientation = '', $size = '', $rotation = 0)
+    {
+        if ($this->currentTemplateId !== null) {
+            throw new \BadMethodCallException('Pages cannot be added when writing to a template.');
+        }
+        parent::AddPage($orientation, $size, $rotation);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function Link($x, $y, $w, $h, $link)
+    {
+        if ($this->currentTemplateId !== null) {
+            throw new \BadMethodCallException('Links cannot be set when writing to a template.');
+        }
+        parent::Link($x, $y, $w, $h, $link);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function SetLink($link, $y = 0, $page = -1)
+    {
+        if ($this->currentTemplateId !== null) {
+            throw new \BadMethodCallException('Links cannot be set when writing to a template.');
+        }
+        return parent::SetLink($link, $y, $page);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function SetDrawColor($r, $g = null, $b = null)
+    {
+        parent::SetDrawColor($r, $g, $b);
+        if ($this->page === 0 && $this->currentTemplateId !== null) {
+            $this->_out($this->DrawColor);
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function SetFillColor($r, $g = null, $b = null)
+    {
+        parent::SetFillColor($r, $g, $b);
+        if ($this->page === 0 && $this->currentTemplateId !== null) {
+            $this->_out($this->FillColor);
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function SetLineWidth($width)
+    {
+        parent::SetLineWidth($width);
+        if ($this->page === 0 && $this->currentTemplateId !== null) {
+            $this->_out(\sprintf('%.2F w', $width * $this->k));
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function SetFont($family, $style = '', $size = 0)
+    {
+        parent::SetFont($family, $style, $size);
+        if ($this->page === 0 && $this->currentTemplateId !== null) {
+            $this->_out(\sprintf('BT /F%d %.2F Tf ET', $this->CurrentFont['i'], $this->FontSizePt));
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function SetFontSize($size)
+    {
+        parent::SetFontSize($size);
+        if ($this->page === 0 && $this->currentTemplateId !== null) {
+            $this->_out(sprintf('BT /F%d %.2F Tf ET', $this->CurrentFont['i'], $this->FontSizePt));
+        }
+    }
+
+    protected function _putimages()
+    {
+        parent::_putimages();
+
+        foreach ($this->templates as $key => $template) {
+            $this->_newobj();
+            $this->templates[$key]['objectNumber'] = $this->n;
+
+            $this->_put('<</Type /XObject /Subtype /Form /FormType 1');
+            $this->_put(\sprintf(
+                '/BBox[0 0 %.2F %.2F]',
+                $template['width'] * $this->k,
+                $template['height'] * $this->k
+            ));
+            $this->_put('/Resources 2 0 R'); // default resources dictionary of FPDF
+
+            if ($this->compress) {
+                $buffer = \gzcompress($template['buffer']);
+                $this->_put('/Filter/FlateDecode');
+            } else {
+                $buffer = $template['buffer'];
+            }
+
+            $this->_put('/Length ' . \strlen($buffer));
+
+            if ($template['groupXObject']) {
+                $this->_put('/Group <</Type/Group/S/Transparency>>');
+            }
+
+            $this->_put('>>');
+            $this->_putstream($buffer);
+            $this->_put('endobj');
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function _putxobjectdict()
+    {
+        foreach ($this->templates as $key => $template) {
+            $this->_put('/' . $template['id'] . ' ' . $template['objectNumber'] . ' 0 R');
+        }
+
+        parent::_putxobjectdict();
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function _out($s)
+    {
+        if ($this->currentTemplateId !== null) {
+            $this->templates[$this->currentTemplateId]['buffer'] .= $s . "\n";
+        } else {
+            parent::_out($s);
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdfTrait.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdfTrait.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdfTrait.php	(revision 8435)
@@ -0,0 +1,192 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfNull;
+use setasign\Fpdi\PdfParser\Type\PdfType;
+
+/**
+ * This trait is used for the implementation of FPDI in FPDF and tFPDF.
+ */
+trait FpdfTrait
+{
+    protected function _enddoc()
+    {
+        parent::_enddoc();
+        $this->cleanUp();
+    }
+
+    /**
+     * Draws an imported page or a template onto the page or another template.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|array $x The abscissa of upper-left corner. Alternatively you could use an assoc array
+     *                           with the keys "x", "y", "width", "height", "adjustPageSize".
+     * @param float|int $y The ordinate of upper-left corner.
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @param bool $adjustPageSize
+     * @return array The size
+     * @see Fpdi::getTemplateSize()
+     */
+    public function useTemplate($tpl, $x = 0, $y = 0, $width = null, $height = null, $adjustPageSize = false)
+    {
+        if (isset($this->importedPages[$tpl])) {
+            $size = $this->useImportedPage($tpl, $x, $y, $width, $height, $adjustPageSize);
+            if ($this->currentTemplateId !== null) {
+                $this->templates[$this->currentTemplateId]['resources']['templates']['importedPages'][$tpl] = $tpl;
+            }
+            return $size;
+        }
+
+        return parent::useTemplate($tpl, $x, $y, $width, $height, $adjustPageSize);
+    }
+
+    /**
+     * Get the size of an imported page or template.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @return array|bool An array with following keys: width, height, 0 (=width), 1 (=height), orientation (L or P)
+     */
+    public function getTemplateSize($tpl, $width = null, $height = null)
+    {
+        $size = parent::getTemplateSize($tpl, $width, $height);
+        if ($size === false) {
+            return $this->getImportedPageSize($tpl, $width, $height);
+        }
+
+        return $size;
+    }
+
+    /**
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    protected function _putimages()
+    {
+        $this->currentReaderId = null;
+        parent::_putimages();
+
+        foreach ($this->importedPages as $key => $pageData) {
+            $this->_newobj();
+            $this->importedPages[$key]['objectNumber'] = $this->n;
+            $this->currentReaderId = $pageData['readerId'];
+            $this->writePdfType($pageData['stream']);
+            $this->_put('endobj');
+        }
+
+        foreach (\array_keys($this->readers) as $readerId) {
+            $parser = $this->getPdfReader($readerId)->getParser();
+            $this->currentReaderId = $readerId;
+
+            while (($objectNumber = \array_pop($this->objectsToCopy[$readerId])) !== null) {
+                try {
+                    $object = $parser->getIndirectObject($objectNumber);
+                } catch (CrossReferenceException $e) {
+                    if ($e->getCode() === CrossReferenceException::OBJECT_NOT_FOUND) {
+                        $object = PdfIndirectObject::create($objectNumber, 0, new PdfNull());
+                    } else {
+                        throw $e;
+                    }
+                }
+
+                $this->writePdfType($object);
+            }
+        }
+
+        $this->currentReaderId = null;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function _putxobjectdict()
+    {
+        foreach ($this->importedPages as $pageData) {
+            $this->_put('/' . $pageData['id'] . ' ' . $pageData['objectNumber'] . ' 0 R');
+        }
+
+        parent::_putxobjectdict();
+    }
+
+    /**
+     * @param int $n
+     * @return void
+     * @throws PdfParser\Type\PdfTypeException
+     */
+    protected function _putlinks($n)
+    {
+        foreach ($this->PageLinks[$n] as $pl) {
+            $this->_newobj();
+            $rect = sprintf('%.2F %.2F %.2F %.2F', $pl[0], $pl[1], $pl[0] + $pl[2], $pl[1] - $pl[3]);
+            $this->_put('<</Type /Annot /Subtype /Link /Rect [' . $rect . ']', false);
+            if (is_string($pl[4])) {
+                $this->_put('/A <</S /URI /URI ' . $this->_textstring($pl[4]) . '>>');
+                if (isset($pl['importedLink'])) {
+                    $values = $pl['importedLink']['pdfObject']->value;
+
+                    foreach ($values as $name => $entry) {
+                        $this->_put('/' . $name . ' ', false);
+                        $this->writePdfType($entry);
+                    }
+
+                    if (isset($pl['quadPoints'])) {
+                        $s = '/QuadPoints[';
+                        foreach ($pl['quadPoints'] as $value) {
+                            $s .= sprintf('%.2F ', $value);
+                        }
+                        $s .= ']';
+                        $this->_put($s);
+                    }
+                } else {
+                    $this->_put('/Border [0 0 0]', false);
+                }
+                $this->_put('>>');
+            } else {
+                $this->_put('/Border [0 0 0] ', false);
+                $l = $this->links[$pl[4]];
+                if (isset($this->PageInfo[$l[0]]['size'])) {
+                    $h = $this->PageInfo[$l[0]]['size'][1];
+                } else {
+                    $h = ($this->DefOrientation === 'P')
+                        ? $this->DefPageSize[1] * $this->k
+                        : $this->DefPageSize[0] * $this->k;
+                }
+                $this->_put(sprintf(
+                    '/Dest [%d 0 R /XYZ 0 %.2F null]>>',
+                    $this->PageInfo[$l[0]]['n'],
+                    $h - $l[1] * $this->k
+                ));
+            }
+            $this->_put('endobj');
+        }
+    }
+
+    protected function _put($s, $newLine = true)
+    {
+        if ($newLine) {
+            $this->buffer .= $s . "\n";
+        } else {
+            $this->buffer .= $s;
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Fpdi.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Fpdi.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Fpdi.php	(revision 8435)
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfNull;
+
+/**
+ * Class Fpdi
+ *
+ * This class let you import pages of existing PDF documents into a reusable structure for FPDF.
+ */
+class Fpdi extends FpdfTpl
+{
+    use FpdiTrait;
+    use FpdfTrait;
+
+    /**
+     * FPDI version
+     *
+     * @string
+     */
+    const VERSION = '2.6.0';
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdiException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdiException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdiException.php	(revision 8435)
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+/**
+ * Base exception class for the FPDI package.
+ */
+class FpdiException extends \Exception
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdiTrait.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdiTrait.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/FpdiTrait.php	(revision 8435)
@@ -0,0 +1,655 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\Filter\FilterException;
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\StreamReader;
+use setasign\Fpdi\PdfParser\Type\PdfArray;
+use setasign\Fpdi\PdfParser\Type\PdfBoolean;
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+use setasign\Fpdi\PdfParser\Type\PdfHexString;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObjectReference;
+use setasign\Fpdi\PdfParser\Type\PdfName;
+use setasign\Fpdi\PdfParser\Type\PdfNull;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfStream;
+use setasign\Fpdi\PdfParser\Type\PdfString;
+use setasign\Fpdi\PdfParser\Type\PdfToken;
+use setasign\Fpdi\PdfParser\Type\PdfType;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+use setasign\Fpdi\PdfReader\DataStructure\Rectangle;
+use setasign\Fpdi\PdfReader\PageBoundaries;
+use setasign\Fpdi\PdfReader\PdfReader;
+use setasign\Fpdi\PdfReader\PdfReaderException;
+use /* This namespace/class is used by the commercial FPDI PDF-Parser add-on. */
+    /** @noinspection PhpUndefinedClassInspection */
+    /** @noinspection PhpUndefinedNamespaceInspection */
+    setasign\FpdiPdfParser\PdfParser\PdfParser as FpdiPdfParser;
+
+/**
+ * The FpdiTrait
+ *
+ * This trait offers the core functionalities of FPDI. By passing them to a trait we can reuse it with e.g. TCPDF in a
+ * very easy way.
+ */
+trait FpdiTrait
+{
+    /**
+     * The pdf reader instances.
+     *
+     * @var PdfReader[]
+     */
+    protected $readers = [];
+
+    /**
+     * Instances created internally.
+     *
+     * @var array
+     */
+    protected $createdReaders = [];
+
+    /**
+     * The current reader id.
+     *
+     * @var string|null
+     */
+    protected $currentReaderId;
+
+    /**
+     * Data of all imported pages.
+     *
+     * @var array
+     */
+    protected $importedPages = [];
+
+    /**
+     * A map from object numbers of imported objects to new assigned object numbers by FPDF.
+     *
+     * @var array
+     */
+    protected $objectMap = [];
+
+    /**
+     * An array with information about objects, which needs to be copied to the resulting document.
+     *
+     * @var array
+     */
+    protected $objectsToCopy = [];
+
+    /**
+     * Release resources and file handles.
+     *
+     * This method is called internally when the document is created successfully. By default it only cleans up
+     * stream reader instances which were created internally.
+     *
+     * @param bool $allReaders
+     */
+    public function cleanUp($allReaders = false)
+    {
+        $readers = $allReaders ? array_keys($this->readers) : $this->createdReaders;
+        foreach ($readers as $id) {
+            $this->readers[$id]->getParser()->getStreamReader()->cleanUp();
+            unset($this->readers[$id]);
+        }
+
+        $this->createdReaders = [];
+    }
+
+    /**
+     * Set the minimal PDF version.
+     *
+     * @param string $pdfVersion
+     */
+    protected function setMinPdfVersion($pdfVersion)
+    {
+        if (\version_compare($pdfVersion, $this->PDFVersion, '>')) {
+            $this->PDFVersion = $pdfVersion;
+        }
+    }
+
+    /** @noinspection PhpUndefinedClassInspection */
+    /**
+     * Get a new pdf parser instance.
+     *
+     * @param StreamReader $streamReader
+     * @param array $parserParams Individual parameters passed to the parser instance.
+     * @return PdfParser|FpdiPdfParser
+     */
+    protected function getPdfParserInstance(StreamReader $streamReader, array $parserParams = [])
+    {
+        // note: if you get an exception here - turn off errors/warnings on not found classes for your autoloader.
+        // psr-4 (https://www.php-fig.org/psr/psr-4/) says: Autoloader implementations MUST NOT throw
+        // exceptions, MUST NOT raise errors of any level, and SHOULD NOT return a value.
+        /** @noinspection PhpUndefinedClassInspection */
+        if (\class_exists(FpdiPdfParser::class)) {
+            /** @noinspection PhpUndefinedClassInspection */
+            return new FpdiPdfParser($streamReader, $parserParams);
+        }
+
+        return new PdfParser($streamReader);
+    }
+
+    /**
+     * Get an unique reader id by the $file parameter.
+     *
+     * @param string|resource|PdfReader|StreamReader $file An open file descriptor, a path to a file, a PdfReader
+     *                                                     instance or a StreamReader instance.
+     * @param array $parserParams Individual parameters passed to the parser instance.
+     * @return string
+     */
+    protected function getPdfReaderId($file, array $parserParams = [])
+    {
+        if (\is_resource($file)) {
+            $id = (string) $file;
+        } elseif (\is_string($file)) {
+            $id = \realpath($file);
+            if ($id === false) {
+                $id = $file;
+            }
+        } elseif (\is_object($file)) {
+            $id = \spl_object_hash($file);
+        } else {
+            throw new \InvalidArgumentException(
+                \sprintf('Invalid type in $file parameter (%s)', \gettype($file))
+            );
+        }
+
+        /** @noinspection OffsetOperationsInspection */
+        if (isset($this->readers[$id])) {
+            return $id;
+        }
+
+        if (\is_resource($file)) {
+            $streamReader = new StreamReader($file);
+        } elseif (\is_string($file)) {
+            $streamReader = StreamReader::createByFile($file);
+            $this->createdReaders[] = $id;
+        } else {
+            $streamReader = $file;
+        }
+
+        $reader = new PdfReader($this->getPdfParserInstance($streamReader, $parserParams));
+        /** @noinspection OffsetOperationsInspection */
+        $this->readers[$id] = $reader;
+
+        return $id;
+    }
+
+    /**
+     * Get a pdf reader instance by its id.
+     *
+     * @param string $id
+     * @return PdfReader
+     */
+    protected function getPdfReader($id)
+    {
+        if (isset($this->readers[$id])) {
+            return $this->readers[$id];
+        }
+
+        throw new \InvalidArgumentException(
+            \sprintf('No pdf reader with the given id (%s) exists.', $id)
+        );
+    }
+
+    /**
+     * Set the source PDF file.
+     *
+     * @param string|resource|StreamReader $file Path to the file or a stream resource or a StreamReader instance.
+     * @return int The page count of the PDF document.
+     * @throws PdfParserException
+     */
+    public function setSourceFile($file)
+    {
+        return $this->setSourceFileWithParserParams($file);
+    }
+
+    /**
+     * Set the source PDF file with parameters which are passed to the parser instance.
+     *
+     * This method allows us to pass e.g. authentication information to the parser instance.
+     *
+     * @param string|resource|StreamReader $file Path to the file or a stream resource or a StreamReader instance.
+     * @param array $parserParams Individual parameters passed to the parser instance.
+     * @return int The page count of the PDF document.
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     */
+    public function setSourceFileWithParserParams($file, array $parserParams = [])
+    {
+        $this->currentReaderId = $this->getPdfReaderId($file, $parserParams);
+        $this->objectsToCopy[$this->currentReaderId] = [];
+
+        $reader = $this->getPdfReader($this->currentReaderId);
+        $this->setMinPdfVersion($reader->getPdfVersion());
+
+        return $reader->getPageCount();
+    }
+
+    /**
+     * Imports a page.
+     *
+     * @param int $pageNumber The page number.
+     * @param string $box The page boundary to import. Default set to PageBoundaries::CROP_BOX.
+     * @param bool $groupXObject Define the form XObject as a group XObject to support transparency (if used).
+     * @param bool $importExternalLinks Define whether external links are imported or not.
+     * @return string A unique string identifying the imported page.
+     * @throws CrossReferenceException
+     * @throws FilterException
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     * @throws PdfReaderException
+     * @see PageBoundaries
+     */
+    public function importPage(
+        $pageNumber,
+        $box = PageBoundaries::CROP_BOX,
+        $groupXObject = true,
+        $importExternalLinks = false
+    ) {
+        if ($this->currentReaderId === null) {
+            throw new \BadMethodCallException('No reader initiated. Call setSourceFile() first.');
+        }
+
+        $pageId = $this->currentReaderId;
+
+        $pageNumber = (int)$pageNumber;
+        $pageId .= '|' . $pageNumber . '|' . ($groupXObject ? '1' : '0') . '|' . ($importExternalLinks ? '1' : '0');
+
+        // for backwards compatibility with FPDI 1
+        $box = \ltrim($box, '/');
+        if (!PageBoundaries::isValidName($box)) {
+            throw new \InvalidArgumentException(
+                \sprintf('Box name is invalid: "%s"', $box)
+            );
+        }
+
+        $pageId .= '|' . $box;
+
+        if (isset($this->importedPages[$pageId])) {
+            return $pageId;
+        }
+
+        $reader = $this->getPdfReader($this->currentReaderId);
+        $page = $reader->getPage($pageNumber);
+
+        $bbox = $page->getBoundary($box);
+        if ($bbox === false) {
+            throw new PdfReaderException(
+                \sprintf("Page doesn't have a boundary box (%s).", $box),
+                PdfReaderException::MISSING_DATA
+            );
+        }
+
+        $dict = new PdfDictionary();
+        $dict->value['Type'] = PdfName::create('XObject');
+        $dict->value['Subtype'] = PdfName::create('Form');
+        $dict->value['FormType'] = PdfNumeric::create(1);
+        $dict->value['BBox'] = $bbox->toPdfArray();
+
+        if ($groupXObject) {
+            $this->setMinPdfVersion('1.4');
+            $dict->value['Group'] = PdfDictionary::create([
+                'Type' => PdfName::create('Group'),
+                'S' => PdfName::create('Transparency')
+            ]);
+        }
+
+        $resources = $page->getAttribute('Resources');
+        if ($resources !== null) {
+            $dict->value['Resources'] = $resources;
+        }
+
+        list($width, $height) = $page->getWidthAndHeight($box);
+
+        $a = 1;
+        $b = 0;
+        $c = 0;
+        $d = 1;
+        $e = -$bbox->getLlx();
+        $f = -$bbox->getLly();
+
+        $rotation = $page->getRotation();
+
+        if ($rotation !== 0) {
+            $rotation *= -1;
+            $angle = $rotation * M_PI / 180;
+            $a = \cos($angle);
+            $b = \sin($angle);
+            $c = -$b;
+            $d = $a;
+
+            switch ($rotation) {
+                case -90:
+                    $e = -$bbox->getLly();
+                    $f = $bbox->getUrx();
+                    break;
+                case -180:
+                    $e = $bbox->getUrx();
+                    $f = $bbox->getUry();
+                    break;
+                case -270:
+                    $e = $bbox->getUry();
+                    $f = -$bbox->getLlx();
+                    break;
+            }
+        }
+
+        // we need to rotate/translate
+        if ($a != 1 || $b != 0 || $c != 0 || $d != 1 || $e != 0 || $f != 0) {
+            $dict->value['Matrix'] = PdfArray::create([
+                PdfNumeric::create($a), PdfNumeric::create($b), PdfNumeric::create($c),
+                PdfNumeric::create($d), PdfNumeric::create($e), PdfNumeric::create($f)
+            ]);
+        }
+
+        // try to use the existing content stream
+        $pageDict = $page->getPageDictionary();
+
+        try {
+            $contentsObject = PdfType::resolve(PdfDictionary::get($pageDict, 'Contents'), $reader->getParser(), true);
+            $contents =  PdfType::resolve($contentsObject, $reader->getParser());
+
+            // just copy the stream reference if it is only a single stream
+            if (
+                ($contentsIsStream = ($contents instanceof PdfStream))
+                || ($contents instanceof PdfArray && \count($contents->value) === 1)
+            ) {
+                if ($contentsIsStream) {
+                    /**
+                     * @var PdfIndirectObject $contentsObject
+                     */
+                    $stream = $contents;
+                } else {
+                    $stream = PdfType::resolve($contents->value[0], $reader->getParser());
+                }
+
+                $filter = PdfDictionary::get($stream->value, 'Filter');
+                if (!$filter instanceof PdfNull) {
+                    $dict->value['Filter'] = $filter;
+                }
+                $length = PdfType::resolve(PdfDictionary::get($stream->value, 'Length'), $reader->getParser());
+                $dict->value['Length'] = $length;
+                $stream->value = $dict;
+                // otherwise extract it from the array and re-compress the whole stream
+            } else {
+                $streamContent = $this->compress
+                    ? \gzcompress($page->getContentStream())
+                    : $page->getContentStream();
+
+                $dict->value['Length'] = PdfNumeric::create(\strlen($streamContent));
+                if ($this->compress) {
+                    $dict->value['Filter'] = PdfName::create('FlateDecode');
+                }
+
+                $stream = PdfStream::create($dict, $streamContent);
+            }
+        // Catch faulty pages and use an empty content stream
+        } catch (FpdiException $e) {
+            $dict->value['Length'] = PdfNumeric::create(0);
+            $stream = PdfStream::create($dict, '');
+        }
+
+        $externalLinks = [];
+        if ($importExternalLinks) {
+            $externalLinks = $page->getExternalLinks($box);
+        }
+
+        $this->importedPages[$pageId] = [
+            'objectNumber' => null,
+            'readerId' => $this->currentReaderId,
+            'id' => 'TPL' . $this->getNextTemplateId(),
+            'width' => $width / $this->k,
+            'height' => $height / $this->k,
+            'stream' => $stream,
+            'externalLinks' => $externalLinks
+        ];
+
+        return $pageId;
+    }
+
+    /**
+     * Draws an imported page onto the page.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $pageId The page id
+     * @param float|int|array $x The abscissa of upper-left corner. Alternatively you could use an assoc array
+     *                           with the keys "x", "y", "width", "height", "adjustPageSize".
+     * @param float|int $y The ordinate of upper-left corner.
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @param bool $adjustPageSize
+     * @return array The size.
+     * @see Fpdi::getTemplateSize()
+     */
+    public function useImportedPage($pageId, $x = 0, $y = 0, $width = null, $height = null, $adjustPageSize = false)
+    {
+        if (\is_array($x)) {
+            /** @noinspection OffsetOperationsInspection */
+            unset($x['pageId']);
+            \extract($x, EXTR_IF_EXISTS);
+            /** @noinspection NotOptimalIfConditionsInspection */
+            if (\is_array($x)) {
+                $x = 0;
+            }
+        }
+
+        if (!isset($this->importedPages[$pageId])) {
+            throw new \InvalidArgumentException('Imported page does not exist!');
+        }
+
+        $importedPage = $this->importedPages[$pageId];
+
+        $originalSize = $this->getTemplateSize($pageId);
+        $newSize = $this->getTemplateSize($pageId, $width, $height);
+        if ($adjustPageSize) {
+            $this->setPageFormat($newSize, $newSize['orientation']);
+        }
+
+        $scaleX = ($newSize['width'] / $originalSize['width']);
+        $scaleY = ($newSize['height'] / $originalSize['height']);
+        $xPt = $x * $this->k;
+        $yPt = $y * $this->k;
+        $newHeightPt = $newSize['height'] * $this->k;
+
+        $this->_out(
+            // reset standard values, translate and scale
+            \sprintf(
+                'q 0 J 1 w 0 j 0 G 0 g %.4F 0 0 %.4F %.4F %.4F cm /%s Do Q',
+                $scaleX,
+                $scaleY,
+                $xPt,
+                $this->hPt - $yPt - $newHeightPt,
+                $importedPage['id']
+            )
+        );
+
+        if (count($importedPage['externalLinks']) > 0) {
+            foreach ($importedPage['externalLinks'] as $externalLink) {
+                // mPDF uses also 'externalLinks' but doesn't come with a rect-value
+                if (!isset($externalLink['rect'])) {
+                    continue;
+                }
+
+                /** @var Rectangle $rect */
+                $rect = $externalLink['rect'];
+                $this->Link(
+                    $x + $rect->getLlx() / $this->k * $scaleX,
+                    $y + $newSize['height'] - ($rect->getLly() + $rect->getHeight()) / $this->k * $scaleY,
+                    $rect->getWidth() / $this->k * $scaleX,
+                    $rect->getHeight()  / $this->k * $scaleY,
+                    $externalLink['uri']
+                );
+
+                $this->adjustLastLink($externalLink, $xPt, $scaleX, $yPt, $newHeightPt, $scaleY, $importedPage);
+            }
+        }
+
+        return $newSize;
+    }
+
+    /**
+     * This method will add additional data to the last created link/annotation.
+     *
+     * It is separated because TCPDF uses its own logic to handle link annotations.
+     * This method is overwritten in the TCPDF implementation.
+     *
+     * @param array $externalLink
+     * @param float|int $xPt
+     * @param float|int $scaleX
+     * @param float|int $yPt
+     * @param float|int $newHeightPt
+     * @param float|int $scaleY
+     * @param array $importedPage
+     * @return void
+     */
+    protected function adjustLastLink($externalLink, $xPt, $scaleX, $yPt, $newHeightPt, $scaleY, $importedPage)
+    {
+        // let's create a relation of the newly created link to the data of the external link
+        $lastLink = count($this->PageLinks[$this->page]);
+        $this->PageLinks[$this->page][$lastLink - 1]['importedLink'] = $externalLink;
+        if (count($externalLink['quadPoints']) > 0) {
+            $quadPoints = [];
+            for ($i = 0, $n = count($externalLink['quadPoints']); $i < $n; $i += 2) {
+                $quadPoints[] = $xPt + $externalLink['quadPoints'][$i] * $scaleX;
+                $quadPoints[] = $this->hPt - $yPt - $newHeightPt + $externalLink['quadPoints'][$i + 1] * $scaleY;
+            }
+
+            $this->PageLinks[$this->page][$lastLink - 1]['quadPoints'] = $quadPoints;
+        }
+    }
+
+    /**
+     * Get the size of an imported page.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @return array|bool An array with following keys: width, height, 0 (=width), 1 (=height), orientation (L or P)
+     */
+    public function getImportedPageSize($tpl, $width = null, $height = null)
+    {
+        if (isset($this->importedPages[$tpl])) {
+            $importedPage = $this->importedPages[$tpl];
+
+            if ($width === null && $height === null) {
+                $width = $importedPage['width'];
+                $height = $importedPage['height'];
+            } elseif ($width === null) {
+                $width = $height * $importedPage['width'] / $importedPage['height'];
+            }
+
+            if ($height  === null) {
+                $height = $width * $importedPage['height'] / $importedPage['width'];
+            }
+
+            if ($height <= 0. || $width <= 0.) {
+                throw new \InvalidArgumentException('Width or height parameter needs to be larger than zero.');
+            }
+
+            return [
+                'width' => $width,
+                'height' => $height,
+                0 => $width,
+                1 => $height,
+                'orientation' => $width > $height ? 'L' : 'P'
+            ];
+        }
+
+        return false;
+    }
+
+    /**
+     * Writes a PdfType object to the resulting buffer.
+     *
+     * @param PdfType $value
+     * @throws PdfTypeException
+     */
+    protected function writePdfType(PdfType $value)
+    {
+        if ($value instanceof PdfNumeric) {
+            if (\is_int($value->value)) {
+                $this->_put($value->value . ' ', false);
+            } else {
+                $this->_put(\rtrim(\rtrim(\sprintf('%.5F', $value->value), '0'), '.') . ' ', false);
+            }
+        } elseif ($value instanceof PdfName) {
+            $this->_put('/' . $value->value . ' ', false);
+        } elseif ($value instanceof PdfString) {
+            $this->_put('(' . $value->value . ')', false);
+        } elseif ($value instanceof PdfHexString) {
+            $this->_put('<' . $value->value . '>', false);
+        } elseif ($value instanceof PdfBoolean) {
+            $this->_put($value->value ? 'true ' : 'false ', false);
+        } elseif ($value instanceof PdfArray) {
+            $this->_put('[', false);
+            foreach ($value->value as $entry) {
+                $this->writePdfType($entry);
+            }
+            $this->_put(']');
+        } elseif ($value instanceof PdfDictionary) {
+            $this->_put('<<', false);
+            foreach ($value->value as $name => $entry) {
+                $this->_put('/' . $name . ' ', false);
+                $this->writePdfType($entry);
+            }
+            $this->_put('>>');
+        } elseif ($value instanceof PdfToken) {
+            $this->_put($value->value);
+        } elseif ($value instanceof PdfNull) {
+            $this->_put('null ', false);
+        } elseif ($value instanceof PdfStream) {
+            $this->writePdfType($value->value);
+            $this->_put('stream');
+            $this->_put($value->getStream());
+            $this->_put('endstream');
+        } elseif ($value instanceof PdfIndirectObjectReference) {
+            if (!isset($this->objectMap[$this->currentReaderId])) {
+                $this->objectMap[$this->currentReaderId] = [];
+            }
+
+            if (!isset($this->objectMap[$this->currentReaderId][$value->value])) {
+                $this->objectMap[$this->currentReaderId][$value->value] = ++$this->n;
+                $this->objectsToCopy[$this->currentReaderId][] = $value->value;
+            }
+
+            $this->_put($this->objectMap[$this->currentReaderId][$value->value] . ' 0 R ', false);
+        } elseif ($value instanceof PdfIndirectObject) {
+            $n = $this->objectMap[$this->currentReaderId][$value->objectNumber];
+            $this->_newobj($n);
+            $this->writePdfType($value->value);
+
+            // add newline before "endobj" for all objects in view to PDF/A conformance
+            if (
+                !(
+                    ($value->value instanceof PdfArray) ||
+                    ($value->value instanceof PdfDictionary) ||
+                    ($value->value instanceof PdfToken) ||
+                    ($value->value instanceof PdfStream)
+                )
+            ) {
+                $this->_put("\n", false);
+            }
+
+            $this->_put('endobj');
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/GraphicsState.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/GraphicsState.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/GraphicsState.php	(revision 8435)
@@ -0,0 +1,97 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+use setasign\Fpdi\Math\Matrix;
+use setasign\Fpdi\Math\Vector;
+
+/**
+ * A simple graphic state class which holds the current transformation matrix.
+ */
+class GraphicsState
+{
+    /**
+     * @var Matrix
+     */
+    protected $ctm;
+
+    /**
+     * @param Matrix|null $ctm
+     */
+    public function __construct(Matrix $ctm = null)
+    {
+        if ($ctm === null) {
+            $ctm = new Matrix();
+        }
+
+        $this->ctm = $ctm;
+    }
+
+    /**
+     * @param Matrix $matrix
+     * @return $this
+     */
+    public function add(Matrix $matrix)
+    {
+        $this->ctm = $matrix->multiply($this->ctm);
+        return $this;
+    }
+
+    /**
+     * @param int|float $x
+     * @param int|float $y
+     * @param int|float $angle
+     * @return $this
+     */
+    public function rotate($x, $y, $angle)
+    {
+        if (abs($angle) < 1e-5) {
+            return  $this;
+        }
+
+        $angle = deg2rad($angle);
+        $c = cos($angle);
+        $s = sin($angle);
+
+        $this->add(new Matrix($c, $s, -$s, $c, $x, $y));
+
+        return $this->translate(-$x, -$y);
+    }
+
+    /**
+     * @param int|float $shiftX
+     * @param int|float $shiftY
+     * @return $this
+     */
+    public function translate($shiftX, $shiftY)
+    {
+        return $this->add(new Matrix(1, 0, 0, 1, $shiftX, $shiftY));
+    }
+
+    /**
+     * @param int|float $scaleX
+     * @param int|float $scaleY
+     * @return $this
+     */
+    public function scale($scaleX, $scaleY)
+    {
+        return $this->add(new Matrix($scaleX, 0, 0, $scaleY, 0, 0));
+    }
+
+    /**
+     * @param Vector $vector
+     * @return Vector
+     */
+    public function toUserSpace(Vector $vector)
+    {
+        return $vector->multiplyWithMatrix($this->ctm);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Math/Matrix.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Math/Matrix.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Math/Matrix.php	(revision 8435)
@@ -0,0 +1,116 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\Math;
+
+/**
+ * A simple 2D-Matrix class
+ */
+class Matrix
+{
+    /**
+     * @var float
+     */
+    protected $a;
+
+    /**
+     * @var float
+     */
+    protected $b;
+
+    /**
+     * @var float
+     */
+    protected $c;
+
+    /**
+     * @var float
+     */
+    protected $d;
+
+    /**
+     * @var float
+     */
+    protected $e;
+
+    /**
+     * @var float
+     */
+    protected $f;
+
+    /**
+     * @param int|float $a
+     * @param int|float $b
+     * @param int|float $c
+     * @param int|float $d
+     * @param int|float $e
+     * @param int|float $f
+     */
+    public function __construct($a = 1, $b = 0, $c = 0, $d = 1, $e = 0, $f = 0)
+    {
+        $this->a = (float)$a;
+        $this->b = (float)$b;
+        $this->c = (float)$c;
+        $this->d = (float)$d;
+        $this->e = (float)$e;
+        $this->f = (float)$f;
+    }
+
+    /**
+     * @return float[]
+     */
+    public function getValues()
+    {
+        return [$this->a, $this->b, $this->c, $this->d, $this->e, $this->f];
+    }
+
+    /**
+     * @param Matrix $by
+     * @return Matrix
+     */
+    public function multiply(self $by)
+    {
+        $a =
+            $this->a * $by->a
+            + $this->b * $by->c
+            //+ 0 * $by->e
+        ;
+
+        $b =
+            $this->a * $by->b
+            + $this->b * $by->d
+            //+ 0 * $by->f
+        ;
+
+        $c =
+            $this->c * $by->a
+            + $this->d * $by->c
+            //+ 0 * $by->e
+        ;
+
+        $d =
+            $this->c * $by->b
+            + $this->d * $by->d
+            //+ 0 * $by->f
+        ;
+
+        $e =
+            $this->e * $by->a
+            + $this->f * $by->c
+            + /*1 * */$by->e;
+
+        $f =
+            $this->e * $by->b
+            + $this->f * $by->d
+            + /*1 * */$by->f;
+
+        return new self($a, $b, $c, $d, $e, $f);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Math/Vector.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Math/Vector.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Math/Vector.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\Math;
+
+/**
+ * A simple 2D-Vector class
+ */
+class Vector
+{
+    /**
+     * @var float
+     */
+    protected $x;
+
+    /**
+     * @var float
+     */
+    protected $y;
+
+    /**
+     * @param int|float $x
+     * @param int|float $y
+     */
+    public function __construct($x = .0, $y = .0)
+    {
+        $this->x = (float)$x;
+        $this->y = (float)$y;
+    }
+
+    /**
+     * @return float
+     */
+    public function getX()
+    {
+        return $this->x;
+    }
+
+    /**
+     * @return float
+     */
+    public function getY()
+    {
+        return $this->y;
+    }
+
+    /**
+     * @param Matrix $matrix
+     * @return Vector
+     */
+    public function multiplyWithMatrix(Matrix $matrix)
+    {
+        list($a, $b, $c, $d, $e, $f) = $matrix->getValues();
+        $x = $a * $this->x + $c * $this->y + $e;
+        $y = $b * $this->x + $d * $this->y + $f;
+
+        return new self($x, $y);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/AbstractReader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/AbstractReader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/AbstractReader.php	(revision 8435)
@@ -0,0 +1,95 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\CrossReference;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+use setasign\Fpdi\PdfParser\Type\PdfToken;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+
+/**
+ * Abstract class for cross-reference reader classes.
+ */
+abstract class AbstractReader
+{
+    /**
+     * @var PdfParser
+     */
+    protected $parser;
+
+    /**
+     * @var PdfDictionary
+     */
+    protected $trailer;
+
+    /**
+     * AbstractReader constructor.
+     *
+     * @param PdfParser $parser
+     * @throws CrossReferenceException
+     * @throws PdfTypeException
+     */
+    public function __construct(PdfParser $parser)
+    {
+        $this->parser = $parser;
+        $this->readTrailer();
+    }
+
+    /**
+     * Get the trailer dictionary.
+     *
+     * @return PdfDictionary
+     */
+    public function getTrailer()
+    {
+        return $this->trailer;
+    }
+
+    /**
+     * Read the trailer dictionary.
+     *
+     * @throws CrossReferenceException
+     * @throws PdfTypeException
+     */
+    protected function readTrailer()
+    {
+        try {
+            $trailerKeyword = $this->parser->readValue(null, PdfToken::class);
+            if ($trailerKeyword->value !== 'trailer') {
+                throw new CrossReferenceException(
+                    \sprintf(
+                        'Unexpected end of cross reference. "trailer"-keyword expected, got: %s.',
+                        $trailerKeyword->value
+                    ),
+                    CrossReferenceException::UNEXPECTED_END
+                );
+            }
+        } catch (PdfTypeException $e) {
+            throw new CrossReferenceException(
+                'Unexpected end of cross reference. "trailer"-keyword expected, got an invalid object type.',
+                CrossReferenceException::UNEXPECTED_END,
+                $e
+            );
+        }
+
+        try {
+            $trailer = $this->parser->readValue(null, PdfDictionary::class);
+        } catch (PdfTypeException $e) {
+            throw new CrossReferenceException(
+                'Unexpected end of cross reference. Trailer not found.',
+                CrossReferenceException::UNEXPECTED_END,
+                $e
+            );
+        }
+
+        $this->trailer = $trailer;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReference.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReference.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReference.php	(revision 8435)
@@ -0,0 +1,326 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\CrossReference;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfStream;
+use setasign\Fpdi\PdfParser\Type\PdfToken;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+
+/**
+ * Class CrossReference
+ *
+ * This class processes the standard cross reference of a PDF document.
+ */
+class CrossReference
+{
+    /**
+     * The byte length in which the "startxref" keyword should be searched.
+     *
+     * @var int
+     */
+    public static $trailerSearchLength = 5500;
+
+    /**
+     * @var int
+     */
+    protected $fileHeaderOffset = 0;
+
+    /**
+     * @var PdfParser
+     */
+    protected $parser;
+
+    /**
+     * @var ReaderInterface[]
+     */
+    protected $readers = [];
+
+    /**
+     * CrossReference constructor.
+     *
+     * @param PdfParser $parser
+     * @throws CrossReferenceException
+     * @throws PdfTypeException
+     */
+    public function __construct(PdfParser $parser, $fileHeaderOffset = 0)
+    {
+        $this->parser = $parser;
+        $this->fileHeaderOffset = $fileHeaderOffset;
+
+        $offset = $this->findStartXref();
+        $reader = null;
+        /** @noinspection TypeUnsafeComparisonInspection */
+        while ($offset != false) { // By doing an unsafe comparsion we ignore faulty references to byte offset 0
+            try {
+                $reader = $this->readXref($offset + $this->fileHeaderOffset);
+            } catch (CrossReferenceException $e) {
+                // sometimes the file header offset is part of the byte offsets, so let's retry by resetting it to zero.
+                if ($e->getCode() === CrossReferenceException::INVALID_DATA && $this->fileHeaderOffset !== 0) {
+                    $this->fileHeaderOffset = 0;
+                    $reader = $this->readXref($offset);
+                } else {
+                    throw $e;
+                }
+            }
+
+            $trailer = $reader->getTrailer();
+            $this->checkForEncryption($trailer);
+            $this->readers[] = $reader;
+
+            if (isset($trailer->value['Prev'])) {
+                $offset = $trailer->value['Prev']->value;
+            } else {
+                $offset = false;
+            }
+        }
+
+        // fix faulty sub-section header
+        if ($reader instanceof FixedReader) {
+            /**
+             * @var FixedReader $reader
+             */
+            $reader->fixFaultySubSectionShift();
+        }
+
+        if ($reader === null) {
+            throw new CrossReferenceException('No cross-reference found.', CrossReferenceException::NO_XREF_FOUND);
+        }
+    }
+
+    /**
+     * Get the size of the cross reference.
+     *
+     * @return integer
+     */
+    public function getSize()
+    {
+        return $this->getTrailer()->value['Size']->value;
+    }
+
+    /**
+     * Get the trailer dictionary.
+     *
+     * @return PdfDictionary
+     */
+    public function getTrailer()
+    {
+        return $this->readers[0]->getTrailer();
+    }
+
+    /**
+     * Get the cross reference readser instances.
+     *
+     * @return ReaderInterface[]
+     */
+    public function getReaders()
+    {
+        return $this->readers;
+    }
+
+    /**
+     * Get the offset by an object number.
+     *
+     * @param int $objectNumber
+     * @return integer|bool
+     */
+    public function getOffsetFor($objectNumber)
+    {
+        foreach ($this->getReaders() as $reader) {
+            $offset = $reader->getOffsetFor($objectNumber);
+            if ($offset !== false) {
+                return $offset;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Get an indirect object by its object number.
+     *
+     * @param int $objectNumber
+     * @return PdfIndirectObject
+     * @throws CrossReferenceException
+     */
+    public function getIndirectObject($objectNumber)
+    {
+        $offset = $this->getOffsetFor($objectNumber);
+        if ($offset === false) {
+            throw new CrossReferenceException(
+                \sprintf('Object (id:%s) not found.', $objectNumber),
+                CrossReferenceException::OBJECT_NOT_FOUND
+            );
+        }
+
+        $parser = $this->parser;
+
+        $parser->getTokenizer()->clearStack();
+        $parser->getStreamReader()->reset($offset + $this->fileHeaderOffset);
+
+        try {
+            /** @var PdfIndirectObject $object */
+            $object = $parser->readValue(null, PdfIndirectObject::class);
+        } catch (PdfTypeException $e) {
+            throw new CrossReferenceException(
+                \sprintf('Object (id:%s) not found at location (%s).', $objectNumber, $offset),
+                CrossReferenceException::OBJECT_NOT_FOUND,
+                $e
+            );
+        }
+
+        if ($object->objectNumber !== $objectNumber) {
+            throw new CrossReferenceException(
+                \sprintf('Wrong object found, got %s while %s was expected.', $object->objectNumber, $objectNumber),
+                CrossReferenceException::OBJECT_NOT_FOUND
+            );
+        }
+
+        return $object;
+    }
+
+    /**
+     * Read the cross-reference table at a given offset.
+     *
+     * Internally the method will try to evaluate the best reader for this cross-reference.
+     *
+     * @param int $offset
+     * @return ReaderInterface
+     * @throws CrossReferenceException
+     * @throws PdfTypeException
+     */
+    protected function readXref($offset)
+    {
+        $this->parser->getStreamReader()->reset($offset);
+        $this->parser->getTokenizer()->clearStack();
+        $initValue = $this->parser->readValue();
+
+        return $this->initReaderInstance($initValue);
+    }
+
+    /**
+     * Get a cross-reference reader instance.
+     *
+     * @param PdfToken|PdfIndirectObject $initValue
+     * @return ReaderInterface|bool
+     * @throws CrossReferenceException
+     * @throws PdfTypeException
+     */
+    protected function initReaderInstance($initValue)
+    {
+        $position = $this->parser->getStreamReader()->getPosition()
+            + $this->parser->getStreamReader()->getOffset() + $this->fileHeaderOffset;
+
+        if ($initValue instanceof PdfToken && $initValue->value === 'xref') {
+            try {
+                return new FixedReader($this->parser);
+            } catch (CrossReferenceException $e) {
+                $this->parser->getStreamReader()->reset($position);
+                $this->parser->getTokenizer()->clearStack();
+
+                return new LineReader($this->parser);
+            }
+        }
+
+        if ($initValue instanceof PdfIndirectObject) {
+            try {
+                $stream = PdfStream::ensure($initValue->value);
+            } catch (PdfTypeException $e) {
+                throw new CrossReferenceException(
+                    'Invalid object type at xref reference offset.',
+                    CrossReferenceException::INVALID_DATA,
+                    $e
+                );
+            }
+
+            $type = PdfDictionary::get($stream->value, 'Type');
+            if ($type->value !== 'XRef') {
+                throw new CrossReferenceException(
+                    'The xref position points to an incorrect object type.',
+                    CrossReferenceException::INVALID_DATA
+                );
+            }
+
+            $this->checkForEncryption($stream->value);
+
+            throw new CrossReferenceException(
+                'This PDF document probably uses a compression technique which is not supported by the ' .
+                'free parser shipped with FPDI. (See https://www.setasign.com/fpdi-pdf-parser for more details)',
+                CrossReferenceException::COMPRESSED_XREF
+            );
+        }
+
+        throw new CrossReferenceException(
+            'The xref position points to an incorrect object type.',
+            CrossReferenceException::INVALID_DATA
+        );
+    }
+
+    /**
+     * Check for encryption.
+     *
+     * @param PdfDictionary $dictionary
+     * @throws CrossReferenceException
+     */
+    protected function checkForEncryption(PdfDictionary $dictionary)
+    {
+        if (isset($dictionary->value['Encrypt'])) {
+            throw new CrossReferenceException(
+                'This PDF document is encrypted and cannot be processed with FPDI.',
+                CrossReferenceException::ENCRYPTED
+            );
+        }
+    }
+
+    /**
+     * Find the start position for the first cross-reference.
+     *
+     * @return int The byte-offset position of the first cross-reference.
+     * @throws CrossReferenceException
+     */
+    protected function findStartXref()
+    {
+        $reader = $this->parser->getStreamReader();
+        $reader->reset(-self::$trailerSearchLength, self::$trailerSearchLength);
+
+        $buffer = $reader->getBuffer(false);
+        $pos = \strrpos($buffer, 'startxref');
+        $addOffset = 9;
+        if ($pos === false) {
+            // Some corrupted documents uses startref, instead of startxref
+            $pos = \strrpos($buffer, 'startref');
+            if ($pos === false) {
+                throw new CrossReferenceException(
+                    'Unable to find pointer to xref table',
+                    CrossReferenceException::NO_STARTXREF_FOUND
+                );
+            }
+            $addOffset = 8;
+        }
+
+        $reader->setOffset($pos + $addOffset);
+
+        try {
+            $value = $this->parser->readValue(null, PdfNumeric::class);
+        } catch (PdfTypeException $e) {
+            throw new CrossReferenceException(
+                'Invalid data after startxref keyword.',
+                CrossReferenceException::INVALID_DATA,
+                $e
+            );
+        }
+
+        return $value->value;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReferenceException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReferenceException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReferenceException.php	(revision 8435)
@@ -0,0 +1,79 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\CrossReference;
+
+use setasign\Fpdi\PdfParser\PdfParserException;
+
+/**
+ * Exception used by the CrossReference and Reader classes.
+ */
+class CrossReferenceException extends PdfParserException
+{
+    /**
+     * @var int
+     */
+    const INVALID_DATA = 0x0101;
+
+    /**
+     * @var int
+     */
+    const XREF_MISSING = 0x0102;
+
+    /**
+     * @var int
+     */
+    const ENTRIES_TOO_LARGE = 0x0103;
+
+    /**
+     * @var int
+     */
+    const ENTRIES_TOO_SHORT = 0x0104;
+
+    /**
+     * @var int
+     */
+    const NO_ENTRIES = 0x0105;
+
+    /**
+     * @var int
+     */
+    const NO_TRAILER_FOUND = 0x0106;
+
+    /**
+     * @var int
+     */
+    const NO_STARTXREF_FOUND = 0x0107;
+
+    /**
+     * @var int
+     */
+    const NO_XREF_FOUND = 0x0108;
+
+    /**
+     * @var int
+     */
+    const UNEXPECTED_END = 0x0109;
+
+    /**
+     * @var int
+     */
+    const OBJECT_NOT_FOUND = 0x010A;
+
+    /**
+     * @var int
+     */
+    const COMPRESSED_XREF = 0x010B;
+
+    /**
+     * @var int
+     */
+    const ENCRYPTED = 0x010C;
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/FixedReader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/FixedReader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/FixedReader.php	(revision 8435)
@@ -0,0 +1,200 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\CrossReference;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\StreamReader;
+
+/**
+ * Class FixedReader
+ *
+ * This reader allows a very less overhead parsing of single entries of the cross-reference, because the main entries
+ * are only read when needed and not in a single run.
+ */
+class FixedReader extends AbstractReader implements ReaderInterface
+{
+    /**
+     * @var StreamReader
+     */
+    protected $reader;
+
+    /**
+     * Data of subsections.
+     *
+     * @var array
+     */
+    protected $subSections;
+
+    /**
+     * FixedReader constructor.
+     *
+     * @param PdfParser $parser
+     * @throws CrossReferenceException
+     */
+    public function __construct(PdfParser $parser)
+    {
+        $this->reader = $parser->getStreamReader();
+        $this->read();
+        parent::__construct($parser);
+    }
+
+    /**
+     * Get all subsection data.
+     *
+     * @return array
+     */
+    public function getSubSections()
+    {
+        return $this->subSections;
+    }
+
+    /**
+     * @inheritdoc
+     * @return int|false
+     */
+    public function getOffsetFor($objectNumber)
+    {
+        foreach ($this->subSections as $offset => list($startObject, $objectCount)) {
+            /**
+             * @var int $startObject
+             * @var int $objectCount
+             */
+            if ($objectNumber >= $startObject && $objectNumber < ($startObject + $objectCount)) {
+                $position = $offset + 20 * ($objectNumber - $startObject);
+                $this->reader->ensure($position, 20);
+                $line = $this->reader->readBytes(20);
+                if ($line[17] === 'f') {
+                    return false;
+                }
+
+                return (int) \substr($line, 0, 10);
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Read the cross-reference.
+     *
+     * This reader will only read the subsections in this method. The offsets were resolved individually by this
+     * information.
+     *
+     * @throws CrossReferenceException
+     */
+    protected function read()
+    {
+        $subSections = [];
+
+        $startObject = $entryCount = $lastLineStart = null;
+        $validityChecked = false;
+        while (($line = $this->reader->readLine(20)) !== false) {
+            if (\strpos($line, 'trailer') !== false) {
+                $this->reader->reset($lastLineStart);
+                break;
+            }
+
+            // jump over if line content doesn't match the expected string
+            if (\sscanf($line, '%d %d', $startObject, $entryCount) !== 2) {
+                continue;
+            }
+
+            $oldPosition = $this->reader->getPosition();
+            $position = $oldPosition + $this->reader->getOffset();
+
+            if (!$validityChecked && $entryCount > 0) {
+                $nextLine = $this->reader->readBytes(21);
+                /* Check the next line for maximum of 20 bytes and not longer
+                 * By catching 21 bytes and trimming the length should be still 21.
+                 */
+                if (\strlen(\trim($nextLine)) !== 21) {
+                    throw new CrossReferenceException(
+                        'Cross-reference entries are larger than 20 bytes.',
+                        CrossReferenceException::ENTRIES_TOO_LARGE
+                    );
+                }
+
+                /* Check for less than 20 bytes: cut the line to 20 bytes and trim; have to result in exactly 18 bytes.
+                 * If it would have less bytes the substring would get the first bytes of the next line which would
+                 * evaluate to a 20 bytes long string after trimming.
+                 */
+                if (\strlen(\trim(\substr($nextLine, 0, 20))) !== 18) {
+                    throw new CrossReferenceException(
+                        'Cross-reference entries are less than 20 bytes.',
+                        CrossReferenceException::ENTRIES_TOO_SHORT
+                    );
+                }
+
+                $validityChecked = true;
+            }
+
+            $subSections[$position] = [$startObject, $entryCount];
+
+            $lastLineStart = $position + $entryCount * 20;
+            $this->reader->reset($lastLineStart);
+        }
+
+        // reset after the last correct parsed line
+        $this->reader->reset($lastLineStart);
+
+        if (\count($subSections) === 0) {
+            throw new CrossReferenceException(
+                'No entries found in cross-reference.',
+                CrossReferenceException::NO_ENTRIES
+            );
+        }
+
+        $this->subSections = $subSections;
+    }
+
+    /**
+     * Fixes an invalid object number shift.
+     *
+     * This method can be used to repair documents with an invalid subsection header:
+     *
+     * <code>
+     * xref
+     * 1 7
+     * 0000000000 65535 f
+     * 0000000009 00000 n
+     * 0000412075 00000 n
+     * 0000412172 00000 n
+     * 0000412359 00000 n
+     * 0000412417 00000 n
+     * 0000412468 00000 n
+     * </code>
+     *
+     * It shall only be called on the first table.
+     *
+     * @return bool
+     */
+    public function fixFaultySubSectionShift()
+    {
+        $subSections = $this->getSubSections();
+        if (\count($subSections) > 1) {
+            return false;
+        }
+
+        $subSection = \current($subSections);
+        if ($subSection[0] != 1) {
+            return false;
+        }
+
+        if ($this->getOffsetFor(1) === false) {
+            foreach ($subSections as $offset => list($startObject, $objectCount)) {
+                $this->subSections[$offset] = [$startObject - 1, $objectCount];
+            }
+            return true;
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/LineReader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/LineReader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/LineReader.php	(revision 8435)
@@ -0,0 +1,168 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\CrossReference;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\StreamReader;
+
+/**
+ * Class LineReader
+ *
+ * This reader class read all cross-reference entries in a single run.
+ * It supports reading cross-references with e.g. invalid data (e.g. entries with a length < or > 20 bytes).
+ */
+class LineReader extends AbstractReader implements ReaderInterface
+{
+    /**
+     * The object offsets.
+     *
+     * @var array
+     */
+    protected $offsets;
+
+    /**
+     * LineReader constructor.
+     *
+     * @param PdfParser $parser
+     * @throws CrossReferenceException
+     */
+    public function __construct(PdfParser $parser)
+    {
+        $this->read($this->extract($parser->getStreamReader()));
+        parent::__construct($parser);
+    }
+
+    /**
+     * @inheritdoc
+     * @return int|false
+     */
+    public function getOffsetFor($objectNumber)
+    {
+        if (isset($this->offsets[$objectNumber])) {
+            return $this->offsets[$objectNumber][0];
+        }
+
+        return false;
+    }
+
+    /**
+     * Get all found offsets.
+     *
+     * @return array
+     */
+    public function getOffsets()
+    {
+        return $this->offsets;
+    }
+
+    /**
+     * Extracts the cross reference data from the stream reader.
+     *
+     * @param StreamReader $reader
+     * @return string
+     * @throws CrossReferenceException
+     */
+    protected function extract(StreamReader $reader)
+    {
+        $bytesPerCycle = 100;
+        $reader->reset(null, $bytesPerCycle);
+
+        $cycles = 0;
+        do {
+            // 6 = length of "trailer" - 1
+            $pos = \max(($bytesPerCycle * $cycles) - 6, 0);
+            $trailerPos = \strpos($reader->getBuffer(false), 'trailer', $pos);
+            $cycles++;
+        } while ($trailerPos === false && $reader->increaseLength($bytesPerCycle) !== false);
+
+        if ($trailerPos === false) {
+            throw new CrossReferenceException(
+                'Unexpected end of cross reference. "trailer"-keyword not found.',
+                CrossReferenceException::NO_TRAILER_FOUND
+            );
+        }
+
+        $xrefContent = \substr($reader->getBuffer(false), 0, $trailerPos);
+        $reader->reset($reader->getPosition() + $trailerPos);
+
+        return $xrefContent;
+    }
+
+    /**
+     * Read the cross-reference entries.
+     *
+     * @param string $xrefContent
+     * @throws CrossReferenceException
+     */
+    protected function read($xrefContent)
+    {
+        // get eol markers in the first 100 bytes
+        \preg_match_all("/(\r\n|\n|\r)/", \substr($xrefContent, 0, 100), $m);
+
+        if (\count($m[0]) === 0) {
+            throw new CrossReferenceException(
+                'No data found in cross-reference.',
+                CrossReferenceException::INVALID_DATA
+            );
+        }
+
+        // count(array_count_values()) is faster then count(array_unique())
+        // @see https://github.com/symfony/symfony/pull/23731
+        // can be reverted for php7.2
+        $differentLineEndings = \count(\array_count_values($m[0]));
+        if ($differentLineEndings > 1) {
+            $lines = \preg_split("/(\r\n|\n|\r)/", $xrefContent, -1, PREG_SPLIT_NO_EMPTY);
+        } else {
+            $lines = \explode($m[0][0], $xrefContent);
+        }
+
+        unset($differentLineEndings, $m);
+        if (!\is_array($lines)) {
+            $this->offsets = [];
+            return;
+        }
+
+        $start = 0;
+        $offsets = [];
+
+        // trim all lines and remove empty lines
+        $lines = \array_filter(\array_map('\trim', $lines));
+        foreach ($lines as $line) {
+            $pieces = \explode(' ', $line);
+
+            switch (\count($pieces)) {
+                case 2:
+                    $start = (int) $pieces[0];
+                    break;
+
+                case 3:
+                    switch ($pieces[2]) {
+                        case 'n':
+                            $offsets[$start] = [(int) $pieces[0], (int) $pieces[1]];
+                            $start++;
+                            break 2;
+                        case 'f':
+                            $start++;
+                            break 2;
+                    }
+                    // fall through if pieces doesn't match
+
+                default:
+                    throw new CrossReferenceException(
+                        \sprintf('Unexpected data in xref table (%s)', \implode(' ', $pieces)),
+                        CrossReferenceException::INVALID_DATA
+                    );
+            }
+        }
+
+        $this->offsets = $offsets;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/ReaderInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/ReaderInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/CrossReference/ReaderInterface.php	(revision 8435)
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\CrossReference;
+
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+
+/**
+ * ReaderInterface for cross-reference readers.
+ */
+interface ReaderInterface
+{
+    /**
+     * Get an offset by an object number.
+     *
+     * @param int $objectNumber
+     * @return int|bool False if the offset was not found.
+     */
+    public function getOffsetFor($objectNumber);
+
+    /**
+     * Get the trailer related to this cross reference.
+     *
+     * @return PdfDictionary
+     */
+    public function getTrailer();
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85.php	(revision 8435)
@@ -0,0 +1,102 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Class for handling ASCII base-85 encoded data
+ */
+class Ascii85 implements FilterInterface
+{
+    /**
+     * Decode ASCII85 encoded string.
+     *
+     * @param string $data The input string
+     * @return string
+     * @throws Ascii85Exception
+     */
+    public function decode($data)
+    {
+        $out = '';
+        $state = 0;
+        $chn = null;
+
+        $data = \preg_replace('/\s/', '', $data);
+
+        $l = \strlen($data);
+
+        /** @noinspection ForeachInvariantsInspection */
+        for ($k = 0; $k < $l; ++$k) {
+            $ch = \ord($data[$k]) & 0xff;
+
+            //Start <~
+            if ($k === 0 && $ch === 60 && isset($data[$k + 1]) && (\ord($data[$k + 1]) & 0xFF) === 126) {
+                $k++;
+                continue;
+            }
+            //End ~>
+            if ($ch === 126 && isset($data[$k + 1]) && (\ord($data[$k + 1]) & 0xFF) === 62) {
+                break;
+            }
+
+            if ($ch === 122 /* z */ && $state === 0) {
+                $out .= \chr(0) . \chr(0) . \chr(0) . \chr(0);
+                continue;
+            }
+
+            if ($ch < 33 /* ! */ || $ch > 117 /* u */) {
+                throw new Ascii85Exception(
+                    'Illegal character found while ASCII85 decode.',
+                    Ascii85Exception::ILLEGAL_CHAR_FOUND
+                );
+            }
+
+            $chn[$state] = $ch - 33;/* ! */
+            $state++;
+
+            if ($state === 5) {
+                $state = 0;
+                $r = 0;
+                for ($j = 0; $j < 5; ++$j) {
+                    /** @noinspection UnnecessaryCastingInspection */
+                    $r = (int)($r * 85 + $chn[$j]);
+                }
+
+                $out .= \chr($r >> 24)
+                    . \chr($r >> 16)
+                    . \chr($r >> 8)
+                    . \chr($r);
+            }
+        }
+
+        if ($state === 1) {
+            throw new Ascii85Exception(
+                'Illegal length while ASCII85 decode.',
+                Ascii85Exception::ILLEGAL_LENGTH
+            );
+        }
+
+        if ($state === 2) {
+            $r = $chn[0] * 85 * 85 * 85 * 85 + ($chn[1] + 1) * 85 * 85 * 85;
+            $out .= \chr($r >> 24);
+        } elseif ($state === 3) {
+            $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + ($chn[2] + 1) * 85 * 85;
+            $out .= \chr($r >> 24);
+            $out .= \chr($r >> 16);
+        } elseif ($state === 4) {
+            $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + $chn[2] * 85 * 85 + ($chn[3] + 1) * 85;
+            $out .= \chr($r >> 24);
+            $out .= \chr($r >> 16);
+            $out .= \chr($r >> 8);
+        }
+
+        return $out;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85Exception.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85Exception.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85Exception.php	(revision 8435)
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Exception for Ascii85 filter class
+ */
+class Ascii85Exception extends FilterException
+{
+    /**
+     * @var integer
+     */
+    const ILLEGAL_CHAR_FOUND = 0x0301;
+
+    /**
+     * @var integer
+     */
+    const ILLEGAL_LENGTH = 0x0302;
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/AsciiHex.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/AsciiHex.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/AsciiHex.php	(revision 8435)
@@ -0,0 +1,47 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Class for handling ASCII hexadecimal encoded data
+ */
+class AsciiHex implements FilterInterface
+{
+    /**
+     * Converts an ASCII hexadecimal encoded string into its binary representation.
+     *
+     * @param string $data The input string
+     * @return string
+     */
+    public function decode($data)
+    {
+        $data = \preg_replace('/[^0-9A-Fa-f]/', '', \rtrim($data, '>'));
+        if ((\strlen($data) % 2) === 1) {
+            $data .= '0';
+        }
+
+        return \pack('H*', $data);
+    }
+
+    /**
+     * Converts a string into ASCII hexadecimal representation.
+     *
+     * @param string $data The input string
+     * @param boolean $leaveEOD
+     * @return string
+     */
+    public function encode($data, $leaveEOD = false)
+    {
+        $t = \unpack('H*', $data);
+        return \current($t)
+            . ($leaveEOD ? '' : '>');
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/FilterException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/FilterException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/FilterException.php	(revision 8435)
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+use setasign\Fpdi\PdfParser\PdfParserException;
+
+/**
+ * Exception for filters
+ */
+class FilterException extends PdfParserException
+{
+    const UNSUPPORTED_FILTER = 0x0201;
+
+    const NOT_IMPLEMENTED = 0x0202;
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/FilterInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/FilterInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/FilterInterface.php	(revision 8435)
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Interface for filters
+ */
+interface FilterInterface
+{
+    /**
+     * Decode a string.
+     *
+     * @param string $data The input string
+     * @return string
+     */
+    public function decode($data);
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/Flate.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/Flate.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/Flate.php	(revision 8435)
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Class for handling zlib/deflate encoded data
+ */
+class Flate implements FilterInterface
+{
+    /**
+     * Checks whether the zlib extension is loaded.
+     *
+     * Used for testing purpose.
+     *
+     * @return boolean
+     * @internal
+     */
+    protected function extensionLoaded()
+    {
+        return \extension_loaded('zlib');
+    }
+
+    /**
+     * Decodes a flate compressed string.
+     *
+     * @param string|false $data The input string
+     * @return string
+     * @throws FlateException
+     */
+    public function decode($data)
+    {
+        if ($this->extensionLoaded()) {
+            $oData = $data;
+            $data = (($data !== '') ? @\gzuncompress($data) : '');
+            if ($data === false) {
+                // let's try if the checksum is CRC32
+                $fh = fopen('php://temp', 'w+b');
+                fwrite($fh, "\x1f\x8b\x08\x00\x00\x00\x00\x00" . $oData);
+                // "window" == 31 -> 16 + (8 to 15): Uses the low 4 bits of the value as the window size logarithm.
+                //                   The input must include a gzip header and trailer (via 16).
+                stream_filter_append($fh, 'zlib.inflate', STREAM_FILTER_READ, ['window' => 31]);
+                fseek($fh, 0);
+                $data = @stream_get_contents($fh);
+                fclose($fh);
+
+                if ($data) {
+                    return $data;
+                }
+
+                // Try this fallback (remove the zlib stream header)
+                $data = @(gzinflate(substr($oData, 2)));
+
+                if ($data === false) {
+                    throw new FlateException(
+                        'Error while decompressing stream.',
+                        FlateException::DECOMPRESS_ERROR
+                    );
+                }
+            }
+        } else {
+            throw new FlateException(
+                'To handle FlateDecode filter, enable zlib support in PHP.',
+                FlateException::NO_ZLIB
+            );
+        }
+
+        return $data;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/FlateException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/FlateException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/FlateException.php	(revision 8435)
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Exception for flate filter class
+ */
+class FlateException extends FilterException
+{
+    /**
+     * @var integer
+     */
+    const NO_ZLIB = 0x0401;
+
+    /**
+     * @var integer
+     */
+    const DECOMPRESS_ERROR = 0x0402;
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/Lzw.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/Lzw.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/Lzw.php	(revision 8435)
@@ -0,0 +1,178 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Class for handling LZW encoded data
+ */
+class Lzw implements FilterInterface
+{
+    /**
+     * @var null|string
+     */
+    protected $data;
+
+    /**
+     * @var array
+     */
+    protected $sTable = [];
+
+    /**
+     * @var int
+     */
+    protected $dataLength = 0;
+
+    /**
+     * @var int
+     */
+    protected $tIdx;
+
+    /**
+     * @var int
+     */
+    protected $bitsToGet = 9;
+
+    /**
+     * @var int
+     */
+    protected $bytePointer;
+
+    /**
+     * @var int
+     */
+    protected $nextData = 0;
+
+    /**
+     * @var int
+     */
+    protected $nextBits = 0;
+
+    /**
+     * @var array
+     */
+    protected $andTable = [511, 1023, 2047, 4095];
+
+    /**
+     * Method to decode LZW compressed data.
+     *
+     * @param string $data The compressed data
+     * @return string The uncompressed data
+     * @throws LzwException
+     */
+    public function decode($data)
+    {
+        if ($data[0] === "\x00" && $data[1] === "\x01") {
+            throw new LzwException(
+                'LZW flavour not supported.',
+                LzwException::LZW_FLAVOUR_NOT_SUPPORTED
+            );
+        }
+
+        $this->initsTable();
+
+        $this->data = $data;
+        $this->dataLength = \strlen($data);
+
+        // Initialize pointers
+        $this->bytePointer = 0;
+
+        $this->nextData = 0;
+        $this->nextBits = 0;
+
+        $prevCode = 0;
+
+        $uncompData = '';
+
+        while (($code = $this->getNextCode()) !== 257) {
+            if ($code === 256) {
+                $this->initsTable();
+            } elseif ($prevCode === 256) {
+                $uncompData .= $this->sTable[$code];
+            } elseif ($code < $this->tIdx) {
+                $string = $this->sTable[$code];
+                $uncompData .= $string;
+
+                $this->addStringToTable($this->sTable[$prevCode], $string[0]);
+            } else {
+                $string = $this->sTable[$prevCode];
+                $string .= $string[0];
+                $uncompData .= $string;
+
+                $this->addStringToTable($string);
+            }
+            $prevCode = $code;
+        }
+
+        return $uncompData;
+    }
+
+    /**
+     * Initialize the string table.
+     */
+    protected function initsTable()
+    {
+        $this->sTable = [];
+
+        for ($i = 0; $i < 256; $i++) {
+            $this->sTable[$i] = \chr($i);
+        }
+
+        $this->tIdx = 258;
+        $this->bitsToGet = 9;
+    }
+
+    /**
+     * Add a new string to the string table.
+     *
+     * @param string $oldString
+     * @param string $newString
+     */
+    protected function addStringToTable($oldString, $newString = '')
+    {
+        $string = $oldString . $newString;
+
+        // Add this new String to the table
+        $this->sTable[$this->tIdx++] = $string;
+
+        if ($this->tIdx === 511) {
+            $this->bitsToGet = 10;
+        } elseif ($this->tIdx === 1023) {
+            $this->bitsToGet = 11;
+        } elseif ($this->tIdx === 2047) {
+            $this->bitsToGet = 12;
+        }
+    }
+
+    /**
+     * Returns the next 9, 10, 11 or 12 bits.
+     *
+     * @return int
+     */
+    protected function getNextCode()
+    {
+        if ($this->bytePointer === $this->dataLength) {
+            return 257;
+        }
+
+        $this->nextData = ($this->nextData << 8) | (\ord($this->data[$this->bytePointer++]) & 0xff);
+        $this->nextBits += 8;
+
+        if ($this->nextBits < $this->bitsToGet) {
+            $this->nextData = ($this->nextData << 8) | (\ord($this->data[$this->bytePointer++]) & 0xff);
+            $this->nextBits += 8;
+        }
+
+        $code = ($this->nextData >> ($this->nextBits - $this->bitsToGet)) & $this->andTable[$this->bitsToGet - 9];
+        $this->nextBits -= $this->bitsToGet;
+
+        return $code;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/LzwException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/LzwException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Filter/LzwException.php	(revision 8435)
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Exception for LZW filter class
+ */
+class LzwException extends FilterException
+{
+    /**
+     * @var integer
+     */
+    const LZW_FLAVOUR_NOT_SUPPORTED = 0x0501;
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/PdfParser.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/PdfParser.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/PdfParser.php	(revision 8435)
@@ -0,0 +1,435 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReference;
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\Type\PdfArray;
+use setasign\Fpdi\PdfParser\Type\PdfBoolean;
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+use setasign\Fpdi\PdfParser\Type\PdfHexString;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObjectReference;
+use setasign\Fpdi\PdfParser\Type\PdfName;
+use setasign\Fpdi\PdfParser\Type\PdfNull;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfStream;
+use setasign\Fpdi\PdfParser\Type\PdfString;
+use setasign\Fpdi\PdfParser\Type\PdfToken;
+use setasign\Fpdi\PdfParser\Type\PdfType;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+
+/**
+ * A PDF parser class
+ */
+class PdfParser
+{
+    /**
+     * @var StreamReader
+     */
+    protected $streamReader;
+
+    /**
+     * @var Tokenizer
+     */
+    protected $tokenizer;
+
+    /**
+     * The file header.
+     *
+     * @var string
+     */
+    protected $fileHeader;
+
+    /**
+     * The offset to the file header.
+     *
+     * @var int
+     */
+    protected $fileHeaderOffset;
+
+    /**
+     * @var CrossReference|null
+     */
+    protected $xref;
+
+    /**
+     * All read objects.
+     *
+     * @var array
+     */
+    protected $objects = [];
+
+    /**
+     * PdfParser constructor.
+     *
+     * @param StreamReader $streamReader
+     */
+    public function __construct(StreamReader $streamReader)
+    {
+        $this->streamReader = $streamReader;
+        $this->tokenizer = new Tokenizer($streamReader);
+    }
+
+    /**
+     * Removes cycled references.
+     *
+     * @internal
+     */
+    public function cleanUp()
+    {
+        $this->xref = null;
+    }
+
+    /**
+     * Get the stream reader instance.
+     *
+     * @return StreamReader
+     */
+    public function getStreamReader()
+    {
+        return $this->streamReader;
+    }
+
+    /**
+     * Get the tokenizer instance.
+     *
+     * @return Tokenizer
+     */
+    public function getTokenizer()
+    {
+        return $this->tokenizer;
+    }
+
+    /**
+     * Resolves the file header.
+     *
+     * @throws PdfParserException
+     * @return int
+     */
+    protected function resolveFileHeader()
+    {
+        if ($this->fileHeader) {
+            return $this->fileHeaderOffset;
+        }
+
+        $this->streamReader->reset(0);
+        $maxIterations = 1000;
+        while (true) {
+            $buffer = $this->streamReader->getBuffer(false);
+            $offset = \strpos($buffer, '%PDF-');
+            if ($offset === false) {
+                if (!$this->streamReader->increaseLength(100) || (--$maxIterations === 0)) {
+                    throw new PdfParserException(
+                        'Unable to find PDF file header.',
+                        PdfParserException::FILE_HEADER_NOT_FOUND
+                    );
+                }
+                continue;
+            }
+            break;
+        }
+
+        $this->fileHeaderOffset = $offset;
+        $this->streamReader->setOffset($offset);
+
+        $this->fileHeader = \trim($this->streamReader->readLine());
+        return $this->fileHeaderOffset;
+    }
+
+    /**
+     * Get the cross-reference instance.
+     *
+     * @return CrossReference
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public function getCrossReference()
+    {
+        if ($this->xref === null) {
+            $this->xref = new CrossReference($this, $this->resolveFileHeader());
+        }
+
+        return $this->xref;
+    }
+
+    /**
+     * Get the PDF version.
+     *
+     * @return int[] An array of major and minor version.
+     * @throws PdfParserException
+     */
+    public function getPdfVersion()
+    {
+        $this->resolveFileHeader();
+
+        if (\preg_match('/%PDF-(\d)\.(\d)/', $this->fileHeader, $result) === 0) {
+            throw new PdfParserException(
+                'Unable to extract PDF version from file header.',
+                PdfParserException::PDF_VERSION_NOT_FOUND
+            );
+        }
+        list(, $major, $minor) = $result;
+
+        $catalog = $this->getCatalog();
+        if (isset($catalog->value['Version'])) {
+            $versionParts = \explode(
+                '.',
+                PdfName::unescape(PdfType::resolve($catalog->value['Version'], $this)->value)
+            );
+            if (count($versionParts) === 2) {
+                list($major, $minor) = $versionParts;
+            }
+        }
+
+        return [(int) $major, (int) $minor];
+    }
+
+    /**
+     * Get the catalog dictionary.
+     *
+     * @return PdfDictionary
+     * @throws Type\PdfTypeException
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public function getCatalog()
+    {
+        $trailer = $this->getCrossReference()->getTrailer();
+
+        $catalog = PdfType::resolve(PdfDictionary::get($trailer, 'Root'), $this);
+
+        return PdfDictionary::ensure($catalog);
+    }
+
+    /**
+     * Get an indirect object by its object number.
+     *
+     * @param int $objectNumber
+     * @param bool $cache
+     * @return PdfIndirectObject
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public function getIndirectObject($objectNumber, $cache = false)
+    {
+        $objectNumber = (int) $objectNumber;
+        if (isset($this->objects[$objectNumber])) {
+            return $this->objects[$objectNumber];
+        }
+
+        $object = $this->getCrossReference()->getIndirectObject($objectNumber);
+
+        if ($cache) {
+            $this->objects[$objectNumber] = $object;
+        }
+
+        return $object;
+    }
+
+    /**
+     * Read a PDF value.
+     *
+     * @param null|bool|string $token
+     * @param null|string $expectedType
+     * @return false|PdfArray|PdfBoolean|PdfDictionary|PdfHexString|PdfIndirectObject|PdfIndirectObjectReference|PdfName|PdfNull|PdfNumeric|PdfStream|PdfString|PdfToken
+     * @throws Type\PdfTypeException
+     */
+    public function readValue($token = null, $expectedType = null)
+    {
+        if ($token === null) {
+            $token = $this->tokenizer->getNextToken();
+        }
+
+        if ($token === false) {
+            if ($expectedType !== null) {
+                throw new Type\PdfTypeException('Got unexpected token type.', Type\PdfTypeException::INVALID_DATA_TYPE);
+            }
+            return false;
+        }
+
+        switch ($token) {
+            case '(':
+                $this->ensureExpectedType($token, $expectedType);
+                return $this->parsePdfString();
+
+            case '<':
+                if ($this->streamReader->getByte() === '<') {
+                    $this->ensureExpectedType('<<', $expectedType);
+                    $this->streamReader->addOffset(1);
+                    return $this->parsePdfDictionary();
+                }
+
+                $this->ensureExpectedType($token, $expectedType);
+                return $this->parsePdfHexString();
+
+            case '/':
+                $this->ensureExpectedType($token, $expectedType);
+                return $this->parsePdfName();
+
+            case '[':
+                $this->ensureExpectedType($token, $expectedType);
+                return $this->parsePdfArray();
+
+            default:
+                if (\is_numeric($token)) {
+                    if (($token2 = $this->tokenizer->getNextToken()) !== false) {
+                        if (\is_numeric($token2) && ($token3 = $this->tokenizer->getNextToken()) !== false) {
+                            switch ($token3) {
+                                case 'obj':
+                                    if ($expectedType !== null && $expectedType !== PdfIndirectObject::class) {
+                                        throw new Type\PdfTypeException(
+                                            'Got unexpected token type.',
+                                            Type\PdfTypeException::INVALID_DATA_TYPE
+                                        );
+                                    }
+
+                                    return $this->parsePdfIndirectObject((int)$token, (int)$token2);
+                                case 'R':
+                                    if (
+                                        $expectedType !== null &&
+                                        $expectedType !== PdfIndirectObjectReference::class
+                                    ) {
+                                        throw new Type\PdfTypeException(
+                                            'Got unexpected token type.',
+                                            Type\PdfTypeException::INVALID_DATA_TYPE
+                                        );
+                                    }
+
+                                    return PdfIndirectObjectReference::create((int)$token, (int)$token2);
+                            }
+
+                            $this->tokenizer->pushStack($token3);
+                        }
+
+                        $this->tokenizer->pushStack($token2);
+                    }
+
+                    if ($expectedType !== null && $expectedType !== PdfNumeric::class) {
+                        throw new Type\PdfTypeException(
+                            'Got unexpected token type.',
+                            Type\PdfTypeException::INVALID_DATA_TYPE
+                        );
+                    }
+                    return PdfNumeric::create($token + 0);
+                }
+
+                if ($token === 'true' || $token === 'false') {
+                    $this->ensureExpectedType($token, $expectedType);
+                    return PdfBoolean::create($token === 'true');
+                }
+
+                if ($token === 'null') {
+                    $this->ensureExpectedType($token, $expectedType);
+                    return new PdfNull();
+                }
+
+                if ($expectedType !== null && $expectedType !== PdfToken::class) {
+                    throw new Type\PdfTypeException(
+                        'Got unexpected token type.',
+                        Type\PdfTypeException::INVALID_DATA_TYPE
+                    );
+                }
+
+                $v = new PdfToken();
+                $v->value = $token;
+
+                return $v;
+        }
+    }
+
+    /**
+     * @return PdfString
+     */
+    protected function parsePdfString()
+    {
+        return PdfString::parse($this->streamReader);
+    }
+
+    /**
+     * @return false|PdfHexString
+     */
+    protected function parsePdfHexString()
+    {
+        return PdfHexString::parse($this->streamReader);
+    }
+
+    /**
+     * @return bool|PdfDictionary
+     * @throws PdfTypeException
+     */
+    protected function parsePdfDictionary()
+    {
+        return PdfDictionary::parse($this->tokenizer, $this->streamReader, $this);
+    }
+
+    /**
+     * @return PdfName
+     */
+    protected function parsePdfName()
+    {
+        return PdfName::parse($this->tokenizer, $this->streamReader);
+    }
+
+    /**
+     * @return false|PdfArray
+     * @throws PdfTypeException
+     */
+    protected function parsePdfArray()
+    {
+        return PdfArray::parse($this->tokenizer, $this);
+    }
+
+    /**
+     * @param int $objectNumber
+     * @param int $generationNumber
+     * @return false|PdfIndirectObject
+     * @throws Type\PdfTypeException
+     */
+    protected function parsePdfIndirectObject($objectNumber, $generationNumber)
+    {
+        return PdfIndirectObject::parse(
+            $objectNumber,
+            $generationNumber,
+            $this,
+            $this->tokenizer,
+            $this->streamReader
+        );
+    }
+
+    /**
+     * Ensures that the token will evaluate to an expected object type (or not).
+     *
+     * @param string $token
+     * @param string|null $expectedType
+     * @return bool
+     * @throws Type\PdfTypeException
+     */
+    protected function ensureExpectedType($token, $expectedType)
+    {
+        static $mapping = [
+            '(' => PdfString::class,
+            '<' => PdfHexString::class,
+            '<<' => PdfDictionary::class,
+            '/' => PdfName::class,
+            '[' => PdfArray::class,
+            'true' => PdfBoolean::class,
+            'false' => PdfBoolean::class,
+            'null' => PdfNull::class
+        ];
+
+        if ($expectedType === null || $mapping[$token] === $expectedType) {
+            return true;
+        }
+
+        throw new Type\PdfTypeException('Got unexpected token type.', Type\PdfTypeException::INVALID_DATA_TYPE);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/PdfParserException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/PdfParserException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/PdfParserException.php	(revision 8435)
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser;
+
+use setasign\Fpdi\FpdiException;
+
+/**
+ * Exception for the pdf parser class
+ */
+class PdfParserException extends FpdiException
+{
+    /**
+     * @var int
+     */
+    const NOT_IMPLEMENTED = 0x0001;
+
+    /**
+     * @var int
+     */
+    const IMPLEMENTED_IN_FPDI_PDF_PARSER = 0x0002;
+
+    /**
+     * @var int
+     */
+    const INVALID_DATA_TYPE = 0x0003;
+
+    /**
+     * @var int
+     */
+    const FILE_HEADER_NOT_FOUND = 0x0004;
+
+    /**
+     * @var int
+     */
+    const PDF_VERSION_NOT_FOUND = 0x0005;
+
+    /**
+     * @var int
+     */
+    const INVALID_DATA_SIZE = 0x0006;
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/StreamReader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/StreamReader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/StreamReader.php	(revision 8435)
@@ -0,0 +1,477 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser;
+
+/**
+ * A stream reader class
+ */
+class StreamReader
+{
+    /**
+     * Creates a stream reader instance by a string value.
+     *
+     * @param string $content
+     * @param int $maxMemory
+     * @return StreamReader
+     */
+    public static function createByString($content, $maxMemory = 2097152)
+    {
+        $h = \fopen('php://temp/maxmemory:' . ((int) $maxMemory), 'r+b');
+        \fwrite($h, $content);
+        \rewind($h);
+
+        return new self($h, true);
+    }
+
+    /**
+     * Creates a stream reader instance by a filename.
+     *
+     * @param string $filename
+     * @return StreamReader
+     */
+    public static function createByFile($filename)
+    {
+        $h = \fopen($filename, 'rb');
+        return new self($h, true);
+    }
+
+    /**
+     * Defines whether the stream should be closed when the stream reader instance is deconstructed or not.
+     *
+     * @var bool
+     */
+    protected $closeStream;
+
+    /**
+     * The stream resource.
+     *
+     * @var resource
+     */
+    protected $stream;
+
+    /**
+     * The byte-offset position in the stream.
+     *
+     * @var int
+     */
+    protected $position;
+
+    /**
+     * The byte-offset position in the buffer.
+     *
+     * @var int
+     */
+    protected $offset;
+
+    /**
+     * The buffer length.
+     *
+     * @var int
+     */
+    protected $bufferLength;
+
+    /**
+     * The total length of the stream.
+     *
+     * @var int
+     */
+    protected $totalLength;
+
+    /**
+     * The buffer.
+     *
+     * @var string
+     */
+    protected $buffer;
+
+    /**
+     * StreamReader constructor.
+     *
+     * @param resource $stream
+     * @param bool $closeStream Defines whether to close the stream resource if the instance is destructed or not.
+     */
+    public function __construct($stream, $closeStream = false)
+    {
+        if (!\is_resource($stream)) {
+            throw new \InvalidArgumentException(
+                'No stream given.'
+            );
+        }
+
+        $metaData = \stream_get_meta_data($stream);
+        if (!$metaData['seekable']) {
+            throw new \InvalidArgumentException(
+                'Given stream is not seekable!'
+            );
+        }
+
+        if (fseek($stream, 0) === -1) {
+            throw new \InvalidArgumentException(
+                'Given stream is not seekable!'
+            );
+        }
+
+        $this->stream = $stream;
+        $this->closeStream = $closeStream;
+        $this->reset();
+    }
+
+    /**
+     * The destructor.
+     */
+    public function __destruct()
+    {
+        $this->cleanUp();
+    }
+
+    /**
+     * Closes the file handle.
+     */
+    public function cleanUp()
+    {
+        if ($this->closeStream && is_resource($this->stream)) {
+            \fclose($this->stream);
+        }
+    }
+
+    /**
+     * Returns the byte length of the buffer.
+     *
+     * @param bool $atOffset
+     * @return int
+     */
+    public function getBufferLength($atOffset = false)
+    {
+        if ($atOffset === false) {
+            return $this->bufferLength;
+        }
+
+        return $this->bufferLength - $this->offset;
+    }
+
+    /**
+     * Get the current position in the stream.
+     *
+     * @return int
+     */
+    public function getPosition()
+    {
+        return $this->position;
+    }
+
+    /**
+     * Returns the current buffer.
+     *
+     * @param bool $atOffset
+     * @return string
+     */
+    public function getBuffer($atOffset = true)
+    {
+        if ($atOffset === false) {
+            return $this->buffer;
+        }
+
+        $string = \substr($this->buffer, $this->offset);
+
+        return (string) $string;
+    }
+
+    /**
+     * Gets a byte at a specific position in the buffer.
+     *
+     * If the position is invalid the method will return false.
+     *
+     * If the $position parameter is set to null the value of $this->offset will be used.
+     *
+     * @param int|null $position
+     * @return string|bool
+     */
+    public function getByte($position = null)
+    {
+        $position = (int) ($position !== null ? $position : $this->offset);
+        if (
+            $position >= $this->bufferLength
+            && (!$this->increaseLength() || $position >= $this->bufferLength)
+        ) {
+            return false;
+        }
+
+        return $this->buffer[$position];
+    }
+
+    /**
+     * Returns a byte at a specific position, and set the offset to the next byte position.
+     *
+     * If the position is invalid the method will return false.
+     *
+     * If the $position parameter is set to null the value of $this->offset will be used.
+     *
+     * @param int|null $position
+     * @return string|bool
+     */
+    public function readByte($position = null)
+    {
+        if ($position !== null) {
+            $position = (int) $position;
+            // check if needed bytes are available in the current buffer
+            if (!($position >= $this->position && $position < $this->position + $this->bufferLength)) {
+                $this->reset($position);
+                $offset = $this->offset;
+            } else {
+                $offset = $position - $this->position;
+            }
+        } else {
+            $offset = $this->offset;
+        }
+
+        if (
+            $offset >= $this->bufferLength
+            && ((!$this->increaseLength()) || $offset >= $this->bufferLength)
+        ) {
+            return false;
+        }
+
+        $this->offset = $offset + 1;
+        return $this->buffer[$offset];
+    }
+
+    /**
+     * Read bytes from the current or a specific offset position and set the internal pointer to the next byte.
+     *
+     * If the position is invalid the method will return false.
+     *
+     * If the $position parameter is set to null the value of $this->offset will be used.
+     *
+     * @param int $length
+     * @param int|null $position
+     * @return string|false
+     */
+    public function readBytes($length, $position = null)
+    {
+        $length = (int) $length;
+        if ($position !== null) {
+            // check if needed bytes are available in the current buffer
+            if (!($position >= $this->position && $position < $this->position + $this->bufferLength)) {
+                $this->reset($position, $length);
+                $offset = $this->offset;
+            } else {
+                $offset = $position - $this->position;
+            }
+        } else {
+            $offset = $this->offset;
+        }
+
+        if (
+            ($offset + $length) > $this->bufferLength
+            && ((!$this->increaseLength($length)) || ($offset + $length) > $this->bufferLength)
+        ) {
+            return false;
+        }
+
+        $bytes = \substr($this->buffer, $offset, $length);
+        $this->offset = $offset + $length;
+
+        return $bytes;
+    }
+
+    /**
+     * Read a line from the current position.
+     *
+     * @param int $length
+     * @return string|bool
+     */
+    public function readLine($length = 1024)
+    {
+        if ($this->ensureContent() === false) {
+            return false;
+        }
+
+        $line = '';
+        while ($this->ensureContent()) {
+            $char = $this->readByte();
+
+            if ($char === "\n") {
+                break;
+            }
+
+            if ($char === "\r") {
+                if ($this->getByte() === "\n") {
+                    $this->addOffset(1);
+                }
+                break;
+            }
+
+            $line .= $char;
+
+            if (\strlen($line) >= $length) {
+                break;
+            }
+        }
+
+        return $line;
+    }
+
+    /**
+     * Set the offset position in the current buffer.
+     *
+     * @param int $offset
+     */
+    public function setOffset($offset)
+    {
+        if ($offset > $this->bufferLength || $offset < 0) {
+            throw new \OutOfRangeException(
+                \sprintf('Offset (%s) out of range (length: %s)', $offset, $this->bufferLength)
+            );
+        }
+
+        $this->offset = (int) $offset;
+    }
+
+    /**
+     * Returns the current offset in the current buffer.
+     *
+     * @return int
+     */
+    public function getOffset()
+    {
+        return $this->offset;
+    }
+
+    /**
+     * Add an offset to the current offset.
+     *
+     * @param int $offset
+     */
+    public function addOffset($offset)
+    {
+        $this->setOffset($this->offset + $offset);
+    }
+
+    /**
+     * Make sure that there is at least one character beyond the current offset in the buffer.
+     *
+     * @return bool
+     */
+    public function ensureContent()
+    {
+        while ($this->offset >= $this->bufferLength) {
+            if (!$this->increaseLength()) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Returns the stream.
+     *
+     * @return resource
+     */
+    public function getStream()
+    {
+        return $this->stream;
+    }
+
+    /**
+     * Gets the total available length.
+     *
+     * @return int
+     */
+    public function getTotalLength()
+    {
+        if ($this->totalLength === null) {
+            $stat = \fstat($this->stream);
+            $this->totalLength = $stat['size'];
+        }
+
+        return $this->totalLength;
+    }
+
+    /**
+     * Resets the buffer to a position and re-read the buffer with the given length.
+     *
+     * If the $pos parameter is negative the start buffer position will be the $pos'th position from
+     * the end of the file.
+     *
+     * If the $pos parameter is negative and the absolute value is bigger then the totalLength of
+     * the file $pos will set to zero.
+     *
+     * @param int|null $pos Start position of the new buffer
+     * @param int $length Length of the new buffer. Mustn't be negative
+     */
+    public function reset($pos = 0, $length = 200)
+    {
+        if ($pos === null) {
+            $pos = $this->position + $this->offset;
+        } elseif ($pos < 0) {
+            $pos = \max(0, $this->getTotalLength() + $pos);
+        }
+
+        \fseek($this->stream, $pos);
+
+        $this->position = $pos;
+        $this->buffer = $length > 0 ? \fread($this->stream, $length) : '';
+        $this->bufferLength = \strlen($this->buffer);
+        $this->offset = 0;
+
+        // If a stream wrapper is in use it is possible that
+        // length values > 8096 will be ignored, so use the
+        // increaseLength()-method to correct that behavior
+        if ($this->bufferLength < $length && $this->increaseLength($length - $this->bufferLength)) {
+            // increaseLength parameter is $minLength, so cut to have only the required bytes in the buffer
+            $this->buffer = \substr($this->buffer, 0, $length);
+            $this->bufferLength = \strlen($this->buffer);
+        }
+    }
+
+    /**
+     * Ensures bytes in the buffer with a specific length and location in the file.
+     *
+     * @param int $pos
+     * @param int $length
+     * @see reset()
+     */
+    public function ensure($pos, $length)
+    {
+        if (
+            $pos >= $this->position
+            && $pos < ($this->position + $this->bufferLength)
+            && ($this->position + $this->bufferLength) >= ($pos + $length)
+        ) {
+            $this->offset = $pos - $this->position;
+        } else {
+            $this->reset($pos, $length);
+        }
+    }
+
+    /**
+     * Forcefully read more data into the buffer.
+     *
+     * @param int $minLength
+     * @return bool Returns false if the stream reaches the end
+     */
+    public function increaseLength($minLength = 100)
+    {
+        $length = \max($minLength, 100);
+
+        if (\feof($this->stream) || $this->getTotalLength() === $this->position + $this->bufferLength) {
+            return false;
+        }
+
+        $newLength = $this->bufferLength + $length;
+        do {
+            $this->buffer .= \fread($this->stream, $newLength - $this->bufferLength);
+            $this->bufferLength = \strlen($this->buffer);
+        } while (($this->bufferLength !== $newLength) && !\feof($this->stream));
+
+        return true;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Tokenizer.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Tokenizer.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Tokenizer.php	(revision 8435)
@@ -0,0 +1,154 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser;
+
+/**
+ * A tokenizer class.
+ */
+class Tokenizer
+{
+    /**
+     * @var StreamReader
+     */
+    protected $streamReader;
+
+    /**
+     * A token stack.
+     *
+     * @var string[]
+     */
+    protected $stack = [];
+
+    /**
+     * Tokenizer constructor.
+     *
+     * @param StreamReader $streamReader
+     */
+    public function __construct(StreamReader $streamReader)
+    {
+        $this->streamReader = $streamReader;
+    }
+
+    /**
+     * Get the stream reader instance.
+     *
+     * @return StreamReader
+     */
+    public function getStreamReader()
+    {
+        return $this->streamReader;
+    }
+
+    /**
+     * Clear the token stack.
+     */
+    public function clearStack()
+    {
+        $this->stack = [];
+    }
+
+    /**
+     * Push a token onto the stack.
+     *
+     * @param string $token
+     */
+    public function pushStack($token)
+    {
+        $this->stack[] = $token;
+    }
+
+    /**
+     * Get next token.
+     *
+     * @return bool|string
+     */
+    public function getNextToken()
+    {
+        $token = \array_pop($this->stack);
+        if ($token !== null) {
+            return $token;
+        }
+
+        if (($byte = $this->streamReader->readByte()) === false) {
+            return false;
+        }
+
+        if (\in_array($byte, ["\x20", "\x0A", "\x0D", "\x0C", "\x09", "\x00"], true)) {
+            if ($this->leapWhiteSpaces() === false) {
+                return false;
+            }
+            $byte = $this->streamReader->readByte();
+        }
+
+        switch ($byte) {
+            case '/':
+            case '[':
+            case ']':
+            case '(':
+            case ')':
+            case '{':
+            case '}':
+            case '<':
+            case '>':
+                return $byte;
+            case '%':
+                $this->streamReader->readLine();
+                return $this->getNextToken();
+        }
+
+        /* This way is faster than checking single bytes.
+         */
+        $bufferOffset = $this->streamReader->getOffset();
+        do {
+            $lastBuffer = $this->streamReader->getBuffer(false);
+            $pos = \strcspn(
+                $lastBuffer,
+                "\x00\x09\x0A\x0C\x0D\x20()<>[]{}/%",
+                $bufferOffset
+            );
+        } while (
+            // Break the loop if a delimiter or white space char is matched
+            // in the current buffer or increase the buffers length
+            $lastBuffer !== false &&
+            (
+                $bufferOffset + $pos === \strlen($lastBuffer) &&
+                $this->streamReader->increaseLength()
+            )
+        );
+
+        $result = \substr($lastBuffer, $bufferOffset - 1, $pos + 1);
+        $this->streamReader->setOffset($bufferOffset + $pos);
+
+        return $result;
+    }
+
+    /**
+     * Leap white spaces.
+     *
+     * @return boolean
+     */
+    public function leapWhiteSpaces()
+    {
+        do {
+            if (!$this->streamReader->ensureContent()) {
+                return false;
+            }
+
+            $buffer = $this->streamReader->getBuffer(false);
+            $matches = \strspn($buffer, "\x20\x0A\x0C\x0D\x09\x00", $this->streamReader->getOffset());
+            if ($matches > 0) {
+                $this->streamReader->addOffset($matches);
+            }
+        } while ($this->streamReader->getOffset() >= $this->streamReader->getBufferLength());
+
+        return true;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfArray.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfArray.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfArray.php	(revision 8435)
@@ -0,0 +1,85 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\Tokenizer;
+
+/**
+ * Class representing a PDF array object
+ *
+ * @property array $value The value of the PDF type.
+ */
+class PdfArray extends PdfType
+{
+    /**
+     * Parses an array of the passed tokenizer and parser.
+     *
+     * @param Tokenizer $tokenizer
+     * @param PdfParser $parser
+     * @return false|self
+     * @throws PdfTypeException
+     */
+    public static function parse(Tokenizer $tokenizer, PdfParser $parser)
+    {
+        $result = [];
+
+        // Recurse into this function until we reach the end of the array.
+        while (($token = $tokenizer->getNextToken()) !== ']') {
+            if ($token === false || ($value = $parser->readValue($token)) === false) {
+                return false;
+            }
+
+            $result[] = $value;
+        }
+
+        $v = new self();
+        $v->value = $result;
+
+        return $v;
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param PdfType[] $values
+     * @return self
+     */
+    public static function create(array $values = [])
+    {
+        $v = new self();
+        $v->value = $values;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed array is a PdfArray instance with a (optional) specific size.
+     *
+     * @param mixed $array
+     * @param null|int $size
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($array, $size = null)
+    {
+        $result = PdfType::ensureType(self::class, $array, 'Array value expected.');
+
+        if ($size !== null && \count($array->value) !== $size) {
+            throw new PdfTypeException(
+                \sprintf('Array with %s entries expected.', $size),
+                PdfTypeException::INVALID_DATA_SIZE
+            );
+        }
+
+        return $result;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfBoolean.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfBoolean.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfBoolean.php	(revision 8435)
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+/**
+ * Class representing a boolean PDF object
+ */
+class PdfBoolean extends PdfType
+{
+    /**
+     * Helper method to create an instance.
+     *
+     * @param bool $value
+     * @return self
+     */
+    public static function create($value)
+    {
+        $v = new self();
+        $v->value = (bool) $value;
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfBoolean instance.
+     *
+     * @param mixed $value
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($value)
+    {
+        return PdfType::ensureType(self::class, $value, 'Boolean value expected.');
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfDictionary.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfDictionary.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfDictionary.php	(revision 8435)
@@ -0,0 +1,134 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\StreamReader;
+use setasign\Fpdi\PdfParser\Tokenizer;
+
+/**
+ * Class representing a PDF dictionary object
+ */
+class PdfDictionary extends PdfType
+{
+    /**
+     * Parses a dictionary of the passed tokenizer, stream-reader and parser.
+     *
+     * @param Tokenizer $tokenizer
+     * @param StreamReader $streamReader
+     * @param PdfParser $parser
+     * @return bool|self
+     * @throws PdfTypeException
+     */
+    public static function parse(Tokenizer $tokenizer, StreamReader $streamReader, PdfParser $parser)
+    {
+        $entries = [];
+
+        while (true) {
+            $token = $tokenizer->getNextToken();
+            if ($token === '>' && $streamReader->getByte() === '>') {
+                $streamReader->addOffset(1);
+                break;
+            }
+
+            $key = $parser->readValue($token);
+            if ($key === false) {
+                return false;
+            }
+
+            // ensure the first value to be a Name object
+            if (!($key instanceof PdfName)) {
+                $lastToken = null;
+                // ignore all other entries and search for the closing brackets
+                while (($token = $tokenizer->getNextToken()) !== '>' && $token !== false && $lastToken !== '>') {
+                    $lastToken = $token;
+                }
+
+                if ($token === false) {
+                    return false;
+                }
+
+                break;
+            }
+
+
+            $value = $parser->readValue();
+            if ($value === false) {
+                return false;
+            }
+
+            if ($value instanceof PdfNull) {
+                continue;
+            }
+
+            // catch missing value
+            if ($value instanceof PdfToken && $value->value === '>' && $streamReader->getByte() === '>') {
+                $streamReader->addOffset(1);
+                break;
+            }
+
+            $entries[$key->value] = $value;
+        }
+
+        $v = new self();
+        $v->value = $entries;
+
+        return $v;
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param PdfType[] $entries The keys are the name entries of the dictionary.
+     * @return self
+     */
+    public static function create(array $entries = [])
+    {
+        $v = new self();
+        $v->value = $entries;
+
+        return $v;
+    }
+
+    /**
+     * Get a value by its key from a dictionary or a default value.
+     *
+     * @param mixed $dictionary
+     * @param string $key
+     * @param PdfType|null $default
+     * @return PdfNull|PdfType
+     * @throws PdfTypeException
+     */
+    public static function get($dictionary, $key, PdfType $default = null)
+    {
+        $dictionary = self::ensure($dictionary);
+
+        if (isset($dictionary->value[$key])) {
+            return $dictionary->value[$key];
+        }
+
+        return $default === null
+            ? new PdfNull()
+            : $default;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfDictionary instance.
+     *
+     * @param mixed $dictionary
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($dictionary)
+    {
+        return PdfType::ensureType(self::class, $dictionary, 'Dictionary value expected.');
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfHexString.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfHexString.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfHexString.php	(revision 8435)
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\StreamReader;
+
+/**
+ * Class representing a hexadecimal encoded PDF string object
+ */
+class PdfHexString extends PdfType
+{
+    /**
+     * Parses a hexadecimal string object from the stream reader.
+     *
+     * @param StreamReader $streamReader
+     * @return false|self
+     */
+    public static function parse(StreamReader $streamReader)
+    {
+        $bufferOffset = $streamReader->getOffset();
+
+        while (true) {
+            $buffer = $streamReader->getBuffer(false);
+            $pos = \strpos($buffer, '>', $bufferOffset);
+            if ($pos === false) {
+                if (!$streamReader->increaseLength()) {
+                    return false;
+                }
+                continue;
+            }
+
+            break;
+        }
+
+        $result = \substr($buffer, $bufferOffset, $pos - $bufferOffset);
+        $streamReader->setOffset($pos + 1);
+
+        $v = new self();
+        $v->value = $result;
+
+        return $v;
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param string $string The hex encoded string.
+     * @return self
+     */
+    public static function create($string)
+    {
+        $v = new self();
+        $v->value = $string;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfHexString instance.
+     *
+     * @param mixed $hexString
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($hexString)
+    {
+        return PdfType::ensureType(self::class, $hexString, 'Hex string value expected.');
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObject.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObject.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObject.php	(revision 8435)
@@ -0,0 +1,103 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\StreamReader;
+use setasign\Fpdi\PdfParser\Tokenizer;
+
+/**
+ * Class representing an indirect object
+ */
+class PdfIndirectObject extends PdfType
+{
+    /**
+     * Parses an indirect object from a tokenizer, parser and stream-reader.
+     *
+     * @param int $objectNumber
+     * @param int $objectGenerationNumber
+     * @param PdfParser $parser
+     * @param Tokenizer $tokenizer
+     * @param StreamReader $reader
+     * @return self|false
+     * @throws PdfTypeException
+     */
+    public static function parse(
+        $objectNumber,
+        $objectGenerationNumber,
+        PdfParser $parser,
+        Tokenizer $tokenizer,
+        StreamReader $reader
+    ) {
+        $value = $parser->readValue();
+        if ($value === false) {
+            return false;
+        }
+
+        $nextToken = $tokenizer->getNextToken();
+        if ($nextToken === 'stream') {
+            $value = PdfStream::parse($value, $reader, $parser);
+        } elseif ($nextToken !== false) {
+            $tokenizer->pushStack($nextToken);
+        }
+
+        $v = new self();
+        $v->objectNumber = (int) $objectNumber;
+        $v->generationNumber = (int) $objectGenerationNumber;
+        $v->value = $value;
+
+        return $v;
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param int $objectNumber
+     * @param int $generationNumber
+     * @param PdfType $value
+     * @return self
+     */
+    public static function create($objectNumber, $generationNumber, PdfType $value)
+    {
+        $v = new self();
+        $v->objectNumber = (int) $objectNumber;
+        $v->generationNumber = (int) $generationNumber;
+        $v->value = $value;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfIndirectObject instance.
+     *
+     * @param mixed $indirectObject
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($indirectObject)
+    {
+        return PdfType::ensureType(self::class, $indirectObject, 'Indirect object expected.');
+    }
+
+    /**
+     * The object number.
+     *
+     * @var int
+     */
+    public $objectNumber;
+
+    /**
+     * The generation number.
+     *
+     * @var int
+     */
+    public $generationNumber;
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObjectReference.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObjectReference.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObjectReference.php	(revision 8435)
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+/**
+ * Class representing an indirect object reference
+ */
+class PdfIndirectObjectReference extends PdfType
+{
+    /**
+     * Helper method to create an instance.
+     *
+     * @param int $objectNumber
+     * @param int $generationNumber
+     * @return self
+     */
+    public static function create($objectNumber, $generationNumber)
+    {
+        $v = new self();
+        $v->value = (int) $objectNumber;
+        $v->generationNumber = (int) $generationNumber;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfIndirectObject instance.
+     *
+     * @param mixed $value
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($value)
+    {
+        return PdfType::ensureType(self::class, $value, 'Indirect reference value expected.');
+    }
+
+    /**
+     * The generation number.
+     *
+     * @var int
+     */
+    public $generationNumber;
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfName.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfName.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfName.php	(revision 8435)
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\StreamReader;
+use setasign\Fpdi\PdfParser\Tokenizer;
+
+/**
+ * Class representing a PDF name object
+ */
+class PdfName extends PdfType
+{
+    /**
+     * Parses a name object from the passed tokenizer and stream-reader.
+     *
+     * @param Tokenizer $tokenizer
+     * @param StreamReader $streamReader
+     * @return self
+     */
+    public static function parse(Tokenizer $tokenizer, StreamReader $streamReader)
+    {
+        $v = new self();
+        if (\strspn($streamReader->getByte(), "\x00\x09\x0A\x0C\x0D\x20()<>[]{}/%") === 0) {
+            $v->value = (string) $tokenizer->getNextToken();
+            return $v;
+        }
+
+        $v->value = '';
+        return $v;
+    }
+
+    /**
+     * Unescapes a name string.
+     *
+     * @param string $value
+     * @return string
+     */
+    public static function unescape($value)
+    {
+        if (strpos($value, '#') === false) {
+            return $value;
+        }
+
+        return preg_replace_callback('/#([a-fA-F\d]{2})/', function ($matches) {
+            return chr(hexdec($matches[1]));
+        }, $value);
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param string $string
+     * @return self
+     */
+    public static function create($string)
+    {
+        $v = new self();
+        $v->value = $string;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfName instance.
+     *
+     * @param mixed $name
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($name)
+    {
+        return PdfType::ensureType(self::class, $name, 'Name value expected.');
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfNull.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfNull.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfNull.php	(revision 8435)
@@ -0,0 +1,19 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+/**
+ * Class representing a PDF null object
+ */
+class PdfNull extends PdfType
+{
+    // empty body
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfNumeric.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfNumeric.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfNumeric.php	(revision 8435)
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+/**
+ * Class representing a numeric PDF object
+ */
+class PdfNumeric extends PdfType
+{
+    /**
+     * Helper method to create an instance.
+     *
+     * @param int|float $value
+     * @return PdfNumeric
+     */
+    public static function create($value)
+    {
+        $v = new self();
+        $v->value = $value + 0;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfNumeric instance.
+     *
+     * @param mixed $value
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($value)
+    {
+        return PdfType::ensureType(self::class, $value, 'Numeric value expected.');
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfStream.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfStream.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfStream.php	(revision 8435)
@@ -0,0 +1,352 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\Filter\Ascii85;
+use setasign\Fpdi\PdfParser\Filter\AsciiHex;
+use setasign\Fpdi\PdfParser\Filter\FilterException;
+use setasign\Fpdi\PdfParser\Filter\Flate;
+use setasign\Fpdi\PdfParser\Filter\Lzw;
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\StreamReader;
+use setasign\FpdiPdfParser\PdfParser\Filter\Predictor;
+
+/**
+ * Class representing a PDF stream object
+ */
+class PdfStream extends PdfType
+{
+    /**
+     * Parses a stream from a stream reader.
+     *
+     * @param PdfDictionary $dictionary
+     * @param StreamReader $reader
+     * @param PdfParser $parser Optional to keep backwards compatibility
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function parse(PdfDictionary $dictionary, StreamReader $reader, PdfParser $parser = null)
+    {
+        $v = new self();
+        $v->value = $dictionary;
+        $v->reader = $reader;
+        $v->parser = $parser;
+
+        $offset = $reader->getOffset();
+
+        // Find the first "newline"
+        while (($firstByte = $reader->getByte($offset)) !== false) {
+            $offset++;
+            if ($firstByte === "\n" || $firstByte === "\r") {
+                break;
+            }
+        }
+
+        if ($firstByte === false) {
+            throw new PdfTypeException(
+                'Unable to parse stream data. No newline after the stream keyword found.',
+                PdfTypeException::NO_NEWLINE_AFTER_STREAM_KEYWORD
+            );
+        }
+
+        $sndByte = $reader->getByte($offset);
+        if ($sndByte === "\n" && $firstByte !== "\n") {
+            $offset++;
+        }
+
+        $reader->setOffset($offset);
+        // let's only save the byte-offset and read the stream only when needed
+        $v->stream = $reader->getPosition() + $reader->getOffset();
+
+        return $v;
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param PdfDictionary $dictionary
+     * @param string $stream
+     * @return self
+     */
+    public static function create(PdfDictionary $dictionary, $stream)
+    {
+        $v = new self();
+        $v->value = $dictionary;
+        $v->stream = (string) $stream;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfStream instance.
+     *
+     * @param mixed $stream
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($stream)
+    {
+        return PdfType::ensureType(self::class, $stream, 'Stream value expected.');
+    }
+
+    /**
+     * The stream or its byte-offset position.
+     *
+     * @var int|string
+     */
+    protected $stream;
+
+    /**
+     * The stream reader instance.
+     *
+     * @var StreamReader|null
+     */
+    protected $reader;
+
+    /**
+     * The PDF parser instance.
+     *
+     * @var PdfParser
+     */
+    protected $parser;
+
+    /**
+     * Get the stream data.
+     *
+     * @param bool $cache Whether cache the stream data or not.
+     * @return bool|string
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public function getStream($cache = false)
+    {
+        if (\is_int($this->stream)) {
+            $length = PdfDictionary::get($this->value, 'Length');
+            if ($this->parser !== null) {
+                $length = PdfType::resolve($length, $this->parser);
+            }
+
+            if (!($length instanceof PdfNumeric) || $length->value === 0) {
+                $this->reader->reset($this->stream, 100000);
+                $buffer = $this->extractStream();
+            } else {
+                $this->reader->reset($this->stream, $length->value);
+                $buffer = $this->reader->getBuffer(false);
+                if ($this->parser !== null) {
+                    $this->reader->reset($this->stream + strlen($buffer));
+                    $this->parser->getTokenizer()->clearStack();
+                    $token = $this->parser->readValue();
+                    if ($token === false || !($token instanceof PdfToken) || $token->value !== 'endstream') {
+                        $this->reader->reset($this->stream, 100000);
+                        $buffer = $this->extractStream();
+                        $this->reader->reset($this->stream + strlen($buffer));
+                    }
+                }
+            }
+
+            if ($cache === false) {
+                return $buffer;
+            }
+
+            $this->stream = $buffer;
+            $this->reader = null;
+        }
+
+        return $this->stream;
+    }
+
+    /**
+     * Extract the stream "manually".
+     *
+     * @return string
+     * @throws PdfTypeException
+     */
+    protected function extractStream()
+    {
+        while (true) {
+            $buffer = $this->reader->getBuffer(false);
+            $length = \strpos($buffer, 'endstream');
+            if ($length === false) {
+                if (!$this->reader->increaseLength(100000)) {
+                    throw new PdfTypeException('Cannot extract stream.');
+                }
+                continue;
+            }
+            break;
+        }
+
+        $buffer = \substr($buffer, 0, $length);
+        $lastByte = \substr($buffer, -1);
+
+        /* Check for EOL marker =
+         *   CARRIAGE RETURN (\r) and a LINE FEED (\n) or just a LINE FEED (\n},
+         *   and not by a CARRIAGE RETURN (\r) alone
+         */
+        if ($lastByte === "\n") {
+            $buffer = \substr($buffer, 0, -1);
+
+            $lastByte = \substr($buffer, -1);
+            if ($lastByte === "\r") {
+                $buffer = \substr($buffer, 0, -1);
+            }
+        }
+
+        // There are streams in the wild, which have only white signs in them but need to be parsed manually due
+        // to a problem encountered before (e.g. Length === 0). We should set them to empty streams to avoid problems
+        // in further processing (e.g. applying of filters).
+        if (trim($buffer) === '') {
+            $buffer = '';
+        }
+
+        return $buffer;
+    }
+
+    /**
+     * Get all filters defined for this stream.
+     *
+     * @return PdfType[]
+     * @throws PdfTypeException
+     */
+    public function getFilters()
+    {
+        $filters = PdfDictionary::get($this->value, 'Filter');
+        if ($filters instanceof PdfNull) {
+            return [];
+        }
+
+        if ($filters instanceof PdfArray) {
+            $filters = $filters->value;
+        } else {
+            $filters = [$filters];
+        }
+
+        return $filters;
+    }
+
+    /**
+     * Get the unfiltered stream data.
+     *
+     * @return string
+     * @throws FilterException
+     * @throws PdfParserException
+     */
+    public function getUnfilteredStream()
+    {
+        $stream = $this->getStream();
+        $filters = $this->getFilters();
+        if ($filters === []) {
+            return $stream;
+        }
+
+        $decodeParams = PdfDictionary::get($this->value, 'DecodeParms');
+        if ($decodeParams instanceof PdfArray) {
+            $decodeParams = $decodeParams->value;
+        } else {
+            $decodeParams = [$decodeParams];
+        }
+
+        foreach ($filters as $key => $filter) {
+            if (!($filter instanceof PdfName)) {
+                continue;
+            }
+
+            $decodeParam = null;
+            if (isset($decodeParams[$key])) {
+                $decodeParam = ($decodeParams[$key] instanceof PdfDictionary ? $decodeParams[$key] : null);
+            }
+
+            switch ($filter->value) {
+                case 'FlateDecode':
+                case 'Fl':
+                case 'LZWDecode':
+                case 'LZW':
+                    if (\strpos($filter->value, 'LZW') === 0) {
+                        $filterObject = new Lzw();
+                    } else {
+                        $filterObject = new Flate();
+                    }
+
+                    $stream = $filterObject->decode($stream);
+
+                    if ($decodeParam instanceof PdfDictionary) {
+                        $predictor = PdfDictionary::get($decodeParam, 'Predictor', PdfNumeric::create(1));
+                        if ($predictor->value !== 1) {
+                            if (!\class_exists(Predictor::class)) {
+                                throw new PdfParserException(
+                                    'This PDF document makes use of features which are only implemented in the ' .
+                                    'commercial "FPDI PDF-Parser" add-on (see https://www.setasign.com/fpdi-pdf-' .
+                                    'parser).',
+                                    PdfParserException::IMPLEMENTED_IN_FPDI_PDF_PARSER
+                                );
+                            }
+
+                            $colors = PdfDictionary::get($decodeParam, 'Colors', PdfNumeric::create(1));
+                            $bitsPerComponent = PdfDictionary::get(
+                                $decodeParam,
+                                'BitsPerComponent',
+                                PdfNumeric::create(8)
+                            );
+
+                            $columns = PdfDictionary::get($decodeParam, 'Columns', PdfNumeric::create(1));
+
+                            $filterObject = new Predictor(
+                                $predictor->value,
+                                $colors->value,
+                                $bitsPerComponent->value,
+                                $columns->value
+                            );
+
+                            $stream = $filterObject->decode($stream);
+                        }
+                    }
+
+                    break;
+                case 'ASCII85Decode':
+                case 'A85':
+                    $filterObject = new Ascii85();
+                    $stream = $filterObject->decode($stream);
+                    break;
+
+                case 'ASCIIHexDecode':
+                case 'AHx':
+                    $filterObject = new AsciiHex();
+                    $stream = $filterObject->decode($stream);
+                    break;
+
+                case 'Crypt':
+                    if (!$decodeParam instanceof PdfDictionary) {
+                        break;
+                    }
+                    // Filter is "Identity"
+                    $name = PdfDictionary::get($decodeParam, 'Name');
+                    if (!$name instanceof PdfName || $name->value !== 'Identity') {
+                        break;
+                    }
+
+                    throw new FilterException(
+                        'Support for Crypt filters other than "Identity" is not implemented.',
+                        FilterException::UNSUPPORTED_FILTER
+                    );
+
+                default:
+                    throw new FilterException(
+                        \sprintf('Unsupported filter "%s".', $filter->value),
+                        FilterException::UNSUPPORTED_FILTER
+                    );
+            }
+        }
+
+        return $stream;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfString.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfString.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfString.php	(revision 8435)
@@ -0,0 +1,202 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\StreamReader;
+
+/**
+ * Class representing a PDF string object
+ */
+class PdfString extends PdfType
+{
+    /**
+     * Parses a string object from the stream reader.
+     *
+     * @param StreamReader $streamReader
+     * @return self
+     */
+    public static function parse(StreamReader $streamReader)
+    {
+        $pos = $startPos = $streamReader->getOffset();
+        $openBrackets = 1;
+        do {
+            $buffer = $streamReader->getBuffer(false);
+            for ($length = \strlen($buffer); $openBrackets !== 0 && $pos < $length; $pos++) {
+                switch ($buffer[$pos]) {
+                    case '(':
+                        $openBrackets++;
+                        break;
+                    case ')':
+                        $openBrackets--;
+                        break;
+                    case '\\':
+                        $pos++;
+                }
+            }
+        } while ($openBrackets !== 0 && $streamReader->increaseLength());
+
+        $result = \substr($buffer, $startPos, $openBrackets + $pos - $startPos - 1);
+        $streamReader->setOffset($pos);
+
+        $v = new self();
+        $v->value = $result;
+
+        return $v;
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param string $value The string needs to be escaped accordingly.
+     * @return self
+     */
+    public static function create($value)
+    {
+        $v = new self();
+        $v->value = $value;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfString instance.
+     *
+     * @param mixed $string
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($string)
+    {
+        return PdfType::ensureType(self::class, $string, 'String value expected.');
+    }
+
+    /**
+     * Escapes sequences in a string according to the PDF specification.
+     *
+     * @param string $s
+     * @return string
+     */
+    public static function escape($s)
+    {
+        // Still a bit faster, than direct replacing
+        if (
+            \strpos($s, '\\') !== false ||
+            \strpos($s, ')')  !== false ||
+            \strpos($s, '(')  !== false ||
+            \strpos($s, "\x0D") !== false ||
+            \strpos($s, "\x0A") !== false ||
+            \strpos($s, "\x09") !== false ||
+            \strpos($s, "\x08") !== false ||
+            \strpos($s, "\x0C") !== false
+        ) {
+            // is faster than strtr(...)
+            return \str_replace(
+                ['\\',   ')',   '(',   "\x0D", "\x0A", "\x09", "\x08", "\x0C"],
+                ['\\\\', '\\)', '\\(', '\r',   '\n',   '\t',   '\b',   '\f'],
+                $s
+            );
+        }
+
+        return $s;
+    }
+
+    /**
+     * Unescapes escaped sequences in a PDF string according to the PDF specification.
+     *
+     * @param string $s
+     * @return string
+     */
+    public static function unescape($s)
+    {
+        $out = '';
+        /** @noinspection ForeachInvariantsInspection */
+        for ($count = 0, $n = \strlen($s); $count < $n; $count++) {
+            if ($s[$count] !== '\\') {
+                $out .= $s[$count];
+            } else {
+                // A backslash at the end of the string - ignore it
+                if ($count === ($n - 1)) {
+                    break;
+                }
+
+                switch ($s[++$count]) {
+                    case ')':
+                    case '(':
+                    case '\\':
+                        $out .= $s[$count];
+                        break;
+
+                    case 'f':
+                        $out .= "\x0C";
+                        break;
+
+                    case 'b':
+                        $out .= "\x08";
+                        break;
+
+                    case 't':
+                        $out .= "\x09";
+                        break;
+
+                    case 'r':
+                        $out .= "\x0D";
+                        break;
+
+                    case 'n':
+                        $out .= "\x0A";
+                        break;
+
+                    case "\r":
+                        if ($count !== $n - 1 && $s[$count + 1] === "\n") {
+                            $count++;
+                        }
+                        break;
+
+                    case "\n":
+                        break;
+
+                    default:
+                        $actualChar = \ord($s[$count]);
+                        // ascii 48 = number 0
+                        // ascii 57 = number 9
+                        if ($actualChar >= 48 && $actualChar <= 57) {
+                            $oct = '' . $s[$count];
+
+                            /** @noinspection NotOptimalIfConditionsInspection */
+                            if (
+                                $count + 1 < $n
+                                && \ord($s[$count + 1]) >= 48
+                                && \ord($s[$count + 1]) <= 57
+                            ) {
+                                $count++;
+                                $oct .= $s[$count];
+
+                                /** @noinspection NotOptimalIfConditionsInspection */
+                                if (
+                                    $count + 1 < $n
+                                    && \ord($s[$count + 1]) >= 48
+                                    && \ord($s[$count + 1]) <= 57
+                                ) {
+                                    $oct .= $s[++$count];
+                                }
+                            }
+
+                            $out .= \chr(\octdec($oct));
+                        } else {
+                            // If the character is not one of those defined, the backslash is ignored
+                            $out .= $s[$count];
+                        }
+                }
+            }
+        }
+        return $out;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfToken.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfToken.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfToken.php	(revision 8435)
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+/**
+ * Class representing PDF token object
+ */
+class PdfToken extends PdfType
+{
+    /**
+     * Helper method to create an instance.
+     *
+     * @param string $token
+     * @return self
+     */
+    public static function create($token)
+    {
+        $v = new self();
+        $v->value = $token;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfToken instance.
+     *
+     * @param mixed $token
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($token)
+    {
+        return PdfType::ensureType(self::class, $token, 'Token value expected.');
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfType.php	(revision 8435)
@@ -0,0 +1,106 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\PdfParserException;
+
+/**
+ * A class defining a PDF data type
+ */
+class PdfType
+{
+    /**
+     * Resolves a PdfType value to its value.
+     *
+     * This method is used to evaluate indirect and direct object references until a final value is reached.
+     *
+     * @param PdfType $value
+     * @param PdfParser $parser
+     * @param bool $stopAtIndirectObject
+     * @return PdfType
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public static function resolve(PdfType $value, PdfParser $parser, $stopAtIndirectObject = false)
+    {
+        if ($value instanceof PdfIndirectObject) {
+            if ($stopAtIndirectObject === true) {
+                return $value;
+            }
+
+            return self::resolve($value->value, $parser, $stopAtIndirectObject);
+        }
+
+        if ($value instanceof PdfIndirectObjectReference) {
+            return self::resolve($parser->getIndirectObject($value->value), $parser, $stopAtIndirectObject);
+        }
+
+        return $value;
+    }
+
+    /**
+     * Ensure that a value is an instance of a specific PDF type.
+     *
+     * @param string $type
+     * @param PdfType $value
+     * @param string $errorMessage
+     * @return mixed
+     * @throws PdfTypeException
+     */
+    protected static function ensureType($type, $value, $errorMessage)
+    {
+        if (!($value instanceof $type)) {
+            throw new PdfTypeException(
+                $errorMessage,
+                PdfTypeException::INVALID_DATA_TYPE
+            );
+        }
+
+        return $value;
+    }
+
+    /**
+     * Flatten indirect object references to direct objects.
+     *
+     * @param PdfType $value
+     * @param PdfParser $parser
+     * @return PdfType
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public static function flatten(PdfType $value, PdfParser $parser)
+    {
+        if ($value instanceof PdfIndirectObjectReference) {
+            return self::flatten(self::resolve($value, $parser), $parser);
+        }
+
+        if ($value instanceof PdfDictionary || $value instanceof PdfArray) {
+            foreach ($value->value as $key => $_value) {
+                $value->value[$key] = self::flatten($_value, $parser);
+            }
+        }
+
+        if ($value instanceof PdfStream) {
+            throw new PdfTypeException('There is a stream object found which cannot be flattened to a direct object.');
+        }
+
+        return $value;
+    }
+
+    /**
+     * The value of the PDF type.
+     *
+     * @var mixed
+     */
+    public $value;
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfTypeException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfTypeException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfParser/Type/PdfTypeException.php	(revision 8435)
@@ -0,0 +1,24 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\PdfParserException;
+
+/**
+ * Exception class for pdf type classes
+ */
+class PdfTypeException extends PdfParserException
+{
+    /**
+     * @var int
+     */
+    const NO_NEWLINE_AFTER_STREAM_KEYWORD = 0x0601;
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/DataStructure/Rectangle.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/DataStructure/Rectangle.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/DataStructure/Rectangle.php	(revision 8435)
@@ -0,0 +1,179 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfReader\DataStructure;
+
+use setasign\Fpdi\Math\Vector;
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\Type\PdfArray;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfType;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+
+/**
+ * Class representing a rectangle
+ */
+class Rectangle
+{
+    /**
+     * @var int|float
+     */
+    protected $llx;
+
+    /**
+     * @var int|float
+     */
+    protected $lly;
+
+    /**
+     * @var int|float
+     */
+    protected $urx;
+
+    /**
+     * @var int|float
+     */
+    protected $ury;
+
+    /**
+     * Create a rectangle instance by a PdfArray.
+     *
+     * @param PdfArray|mixed $array
+     * @param PdfParser $parser
+     * @return Rectangle
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public static function byPdfArray($array, PdfParser $parser)
+    {
+        $array = PdfArray::ensure(PdfType::resolve($array, $parser), 4)->value;
+        $ax = PdfNumeric::ensure(PdfType::resolve($array[0], $parser))->value;
+        $ay = PdfNumeric::ensure(PdfType::resolve($array[1], $parser))->value;
+        $bx = PdfNumeric::ensure(PdfType::resolve($array[2], $parser))->value;
+        $by = PdfNumeric::ensure(PdfType::resolve($array[3], $parser))->value;
+
+        return new self($ax, $ay, $bx, $by);
+    }
+
+    public static function byVectors(Vector $ll, Vector $ur)
+    {
+        return new self($ll->getX(), $ll->getY(), $ur->getX(), $ur->getY());
+    }
+
+    /**
+     * Rectangle constructor.
+     *
+     * @param float|int $ax
+     * @param float|int $ay
+     * @param float|int $bx
+     * @param float|int $by
+     */
+    public function __construct($ax, $ay, $bx, $by)
+    {
+        $this->llx = \min($ax, $bx);
+        $this->lly = \min($ay, $by);
+        $this->urx = \max($ax, $bx);
+        $this->ury = \max($ay, $by);
+    }
+
+    /**
+     * Get the width of the rectangle.
+     *
+     * @return float|int
+     */
+    public function getWidth()
+    {
+        return $this->urx - $this->llx;
+    }
+
+    /**
+     * Get the height of the rectangle.
+     *
+     * @return float|int
+     */
+    public function getHeight()
+    {
+        return $this->ury - $this->lly;
+    }
+
+    /**
+     * Get the lower left abscissa.
+     *
+     * @return float|int
+     */
+    public function getLlx()
+    {
+        return $this->llx;
+    }
+
+    /**
+     * Get the lower left ordinate.
+     *
+     * @return float|int
+     */
+    public function getLly()
+    {
+        return $this->lly;
+    }
+
+    /**
+     * Get the upper right abscissa.
+     *
+     * @return float|int
+     */
+    public function getUrx()
+    {
+        return $this->urx;
+    }
+
+    /**
+     * Get the upper right ordinate.
+     *
+     * @return float|int
+     */
+    public function getUry()
+    {
+        return $this->ury;
+    }
+
+    /**
+     * Get the rectangle as an array.
+     *
+     * @return array
+     */
+    public function toArray()
+    {
+        return [
+            $this->llx,
+            $this->lly,
+            $this->urx,
+            $this->ury
+        ];
+    }
+
+    /**
+     * Get the rectangle as a PdfArray.
+     *
+     * @return PdfArray
+     */
+    public function toPdfArray()
+    {
+        $array = new PdfArray();
+        $array->value[] = PdfNumeric::create($this->llx);
+        $array->value[] = PdfNumeric::create($this->lly);
+        $array->value[] = PdfNumeric::create($this->urx);
+        $array->value[] = PdfNumeric::create($this->ury);
+
+        return $array;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/Page.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/Page.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/Page.php	(revision 8435)
@@ -0,0 +1,420 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfReader;
+
+use setasign\Fpdi\FpdiException;
+use setasign\Fpdi\GraphicsState;
+use setasign\Fpdi\Math\Vector;
+use setasign\Fpdi\PdfParser\Filter\FilterException;
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\Type\PdfArray;
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+use setasign\Fpdi\PdfParser\Type\PdfHexString;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfName;
+use setasign\Fpdi\PdfParser\Type\PdfNull;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfStream;
+use setasign\Fpdi\PdfParser\Type\PdfString;
+use setasign\Fpdi\PdfParser\Type\PdfType;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+use setasign\Fpdi\PdfReader\DataStructure\Rectangle;
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+
+/**
+ * Class representing a page of a PDF document
+ */
+class Page
+{
+    /**
+     * @var PdfIndirectObject
+     */
+    protected $pageObject;
+
+    /**
+     * @var PdfDictionary
+     */
+    protected $pageDictionary;
+
+    /**
+     * @var PdfParser
+     */
+    protected $parser;
+
+    /**
+     * Inherited attributes
+     *
+     * @var null|array
+     */
+    protected $inheritedAttributes;
+
+    /**
+     * Page constructor.
+     *
+     * @param PdfIndirectObject $page
+     * @param PdfParser $parser
+     */
+    public function __construct(PdfIndirectObject $page, PdfParser $parser)
+    {
+        $this->pageObject = $page;
+        $this->parser = $parser;
+    }
+
+    /**
+     * Get the indirect object of this page.
+     *
+     * @return PdfIndirectObject
+     */
+    public function getPageObject()
+    {
+        return $this->pageObject;
+    }
+
+    /**
+     * Get the dictionary of this page.
+     *
+     * @return PdfDictionary
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     */
+    public function getPageDictionary()
+    {
+        if ($this->pageDictionary === null) {
+            $this->pageDictionary = PdfDictionary::ensure(PdfType::resolve($this->getPageObject(), $this->parser));
+        }
+
+        return $this->pageDictionary;
+    }
+
+    /**
+     * Get a page attribute.
+     *
+     * @param string $name
+     * @param bool $inherited
+     * @return PdfType|null
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     */
+    public function getAttribute($name, $inherited = true)
+    {
+        $dict = $this->getPageDictionary();
+
+        if (isset($dict->value[$name])) {
+            return $dict->value[$name];
+        }
+
+        $inheritedKeys = ['Resources', 'MediaBox', 'CropBox', 'Rotate'];
+        if ($inherited && \in_array($name, $inheritedKeys, true)) {
+            if ($this->inheritedAttributes === null) {
+                $this->inheritedAttributes = [];
+                $inheritedKeys = \array_filter($inheritedKeys, function ($key) use ($dict) {
+                    return !isset($dict->value[$key]);
+                });
+
+                if (\count($inheritedKeys) > 0) {
+                    $parentDict = PdfType::resolve(PdfDictionary::get($dict, 'Parent'), $this->parser);
+                    while ($parentDict instanceof PdfDictionary) {
+                        foreach ($inheritedKeys as $index => $key) {
+                            if (isset($parentDict->value[$key])) {
+                                $this->inheritedAttributes[$key] = $parentDict->value[$key];
+                                unset($inheritedKeys[$index]);
+                            }
+                        }
+
+                        /** @noinspection NotOptimalIfConditionsInspection */
+                        if (isset($parentDict->value['Parent']) && \count($inheritedKeys) > 0) {
+                            $parentDict = PdfType::resolve(PdfDictionary::get($parentDict, 'Parent'), $this->parser);
+                        } else {
+                            break;
+                        }
+                    }
+                }
+            }
+
+            if (isset($this->inheritedAttributes[$name])) {
+                return $this->inheritedAttributes[$name];
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Get the rotation value.
+     *
+     * @return int
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     */
+    public function getRotation()
+    {
+        $rotation = $this->getAttribute('Rotate');
+        if ($rotation === null) {
+            return 0;
+        }
+
+        $rotation = PdfNumeric::ensure(PdfType::resolve($rotation, $this->parser))->value % 360;
+
+        if ($rotation < 0) {
+            $rotation += 360;
+        }
+
+        return $rotation;
+    }
+
+    /**
+     * Get a boundary of this page.
+     *
+     * @param string $box
+     * @param bool $fallback
+     * @return bool|Rectangle
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     * @see PageBoundaries
+     */
+    public function getBoundary($box = PageBoundaries::CROP_BOX, $fallback = true)
+    {
+        $value = $this->getAttribute($box);
+
+        if ($value !== null) {
+            return Rectangle::byPdfArray($value, $this->parser);
+        }
+
+        if ($fallback === false) {
+            return false;
+        }
+
+        switch ($box) {
+            case PageBoundaries::BLEED_BOX:
+            case PageBoundaries::TRIM_BOX:
+            case PageBoundaries::ART_BOX:
+                return $this->getBoundary(PageBoundaries::CROP_BOX, true);
+            case PageBoundaries::CROP_BOX:
+                return $this->getBoundary(PageBoundaries::MEDIA_BOX, true);
+        }
+
+        return false;
+    }
+
+    /**
+     * Get the width and height of this page.
+     *
+     * @param string $box
+     * @param bool $fallback
+     * @return array|bool
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     */
+    public function getWidthAndHeight($box = PageBoundaries::CROP_BOX, $fallback = true)
+    {
+        $boundary = $this->getBoundary($box, $fallback);
+        if ($boundary === false) {
+            return false;
+        }
+
+        $rotation = $this->getRotation();
+        $interchange = ($rotation / 90) % 2;
+
+        return [
+            $interchange ? $boundary->getHeight() : $boundary->getWidth(),
+            $interchange ? $boundary->getWidth() : $boundary->getHeight()
+        ];
+    }
+
+    /**
+     * Get the raw content stream.
+     *
+     * @return string
+     * @throws PdfReaderException
+     * @throws PdfTypeException
+     * @throws FilterException
+     * @throws PdfParserException
+     */
+    public function getContentStream()
+    {
+        $dict = $this->getPageDictionary();
+        $contents = PdfType::resolve(PdfDictionary::get($dict, 'Contents'), $this->parser);
+        if ($contents instanceof PdfNull) {
+            return '';
+        }
+
+        if ($contents instanceof PdfArray) {
+            $result = [];
+            foreach ($contents->value as $content) {
+                $content = PdfType::resolve($content, $this->parser);
+                if (!($content instanceof PdfStream)) {
+                    continue;
+                }
+                $result[] = $content->getUnfilteredStream();
+            }
+
+            return \implode("\n", $result);
+        }
+
+        if ($contents instanceof PdfStream) {
+            return $contents->getUnfilteredStream();
+        }
+
+        throw new PdfReaderException(
+            'Array or stream expected.',
+            PdfReaderException::UNEXPECTED_DATA_TYPE
+        );
+    }
+
+    /**
+     * Get information of all external links on this page.
+     *
+     * All coordinates are normalized in view to rotation and translation of the boundary-box, so that their
+     * origin is lower-left.
+     *
+     * @return array
+     */
+    public function getExternalLinks($box = PageBoundaries::CROP_BOX)
+    {
+        try {
+            $dict = $this->getPageDictionary();
+            $annotations = PdfType::resolve(PdfDictionary::get($dict, 'Annots'), $this->parser);
+        } catch (FpdiException $e) {
+            return [];
+        }
+
+        if (!$annotations instanceof PdfArray) {
+            return [];
+        }
+
+        $links = [];
+
+        foreach ($annotations->value as $entry) {
+            try {
+                $annotation = PdfType::resolve($entry, $this->parser);
+
+                $value = PdfType::resolve(PdfDictionary::get($annotation, 'Subtype'), $this->parser);
+                if (!$value instanceof PdfName || $value->value !== 'Link') {
+                    continue;
+                }
+
+                $dest = PdfType::resolve(PdfDictionary::get($annotation, 'Dest'), $this->parser);
+                if (!$dest instanceof PdfNull) {
+                    continue;
+                }
+
+                $action = PdfType::resolve(PdfDictionary::get($annotation, 'A'), $this->parser);
+                if (!$action instanceof PdfDictionary) {
+                    continue;
+                }
+
+                $actionType = PdfType::resolve(PdfDictionary::get($action, 'S'), $this->parser);
+                if (!$actionType instanceof PdfName || $actionType->value !== 'URI') {
+                    continue;
+                }
+
+                $uri = PdfType::resolve(PdfDictionary::get($action, 'URI'), $this->parser);
+                if ($uri instanceof PdfString) {
+                    $uriValue = PdfString::unescape($uri->value);
+                } elseif ($uri instanceof PdfHexString) {
+                    $uriValue = \hex2bin($uri->value);
+                } else {
+                    continue;
+                }
+
+                $rect = PdfType::resolve(PdfDictionary::get($annotation, 'Rect'), $this->parser);
+                if (!$rect instanceof PdfArray || count($rect->value) !== 4) {
+                    continue;
+                }
+
+                $rect = Rectangle::byPdfArray($rect, $this->parser);
+                if ($rect->getWidth() === 0 || $rect->getHeight() === 0) {
+                    continue;
+                }
+
+                $bbox = $this->getBoundary($box);
+                $rotation = $this->getRotation();
+
+                $gs = new GraphicsState();
+                $gs->translate(-$bbox->getLlx(), -$bbox->getLly());
+                $gs->rotate($bbox->getLlx(), $bbox->getLly(), -$rotation);
+
+                switch ($rotation) {
+                    case 90:
+                        $gs->translate(-$bbox->getWidth(), 0);
+                        break;
+                    case 180:
+                        $gs->translate(-$bbox->getWidth(), -$bbox->getHeight());
+                        break;
+                    case 270:
+                        $gs->translate(0, -$bbox->getHeight());
+                        break;
+                }
+
+                $normalizedRect = Rectangle::byVectors(
+                    $gs->toUserSpace(new Vector($rect->getLlx(), $rect->getLly())),
+                    $gs->toUserSpace(new Vector($rect->getUrx(), $rect->getUry()))
+                );
+
+                $quadPoints = PdfType::resolve(PdfDictionary::get($annotation, 'QuadPoints'), $this->parser);
+                $normalizedQuadPoints = [];
+                if ($quadPoints instanceof PdfArray) {
+                    $quadPointsCount = count($quadPoints->value);
+                    if ($quadPointsCount % 8 === 0) {
+                        for ($i = 0; ($i + 1) < $quadPointsCount; $i += 2) {
+                            $x = PdfNumeric::ensure(PdfType::resolve($quadPoints->value[$i], $this->parser));
+                            $y = PdfNumeric::ensure(PdfType::resolve($quadPoints->value[$i + 1], $this->parser));
+
+                            $v = $gs->toUserSpace(new Vector($x->value, $y->value));
+                            $normalizedQuadPoints[] = $v->getX();
+                            $normalizedQuadPoints[] = $v->getY();
+                        }
+                    }
+                }
+
+                // we remove unsupported/unneeded values here
+                unset(
+                    $annotation->value['P'],
+                    $annotation->value['NM'],
+                    $annotation->value['AP'],
+                    $annotation->value['AS'],
+                    $annotation->value['Type'],
+                    $annotation->value['Subtype'],
+                    $annotation->value['Rect'],
+                    $annotation->value['A'],
+                    $annotation->value['QuadPoints'],
+                    $annotation->value['Rotate'],
+                    $annotation->value['M'],
+                    $annotation->value['StructParent'],
+                    $annotation->value['OC']
+                );
+
+                // ...and flatten the PDF object to eliminate any indirect references.
+                // Indirect references are a problem when writing the output in FPDF
+                // because FPDF uses pre-calculated object numbers while FPDI creates
+                // them at runtime.
+                $annotation = PdfType::flatten($annotation, $this->parser);
+
+                $links[] = [
+                    'rect' => $normalizedRect,
+                    'quadPoints' => $normalizedQuadPoints,
+                    'uri' => $uriValue,
+                    'pdfObject' => $annotation
+                ];
+            } catch (FpdiException $e) {
+                continue;
+            }
+        }
+
+        return $links;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/PageBoundaries.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/PageBoundaries.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/PageBoundaries.php	(revision 8435)
@@ -0,0 +1,94 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfReader;
+
+/**
+ * An abstract class for page boundary constants and some helper methods
+ */
+abstract class PageBoundaries
+{
+    /**
+     * MediaBox
+     *
+     * The media box defines the boundaries of the physical medium on which the page is to be printed.
+     *
+     * @see PDF 32000-1:2008 - 14.11.2 Page Boundaries
+     * @var string
+     */
+    const MEDIA_BOX = 'MediaBox';
+
+    /**
+     * CropBox
+     *
+     * The crop box defines the region to which the contents of the page shall be clipped (cropped) when displayed or
+     * printed.
+     *
+     * @see PDF 32000-1:2008 - 14.11.2 Page Boundaries
+     * @var string
+     */
+    const CROP_BOX = 'CropBox';
+
+    /**
+     * BleedBox
+     *
+     * The bleed box defines the region to which the contents of the page shall be clipped when output in a
+     * production environment.
+     *
+     * @see PDF 32000-1:2008 - 14.11.2 Page Boundaries
+     * @var string
+     */
+    const BLEED_BOX = 'BleedBox';
+
+    /**
+     * TrimBox
+     *
+     * The trim box defines the intended dimensions of the finished page after trimming.
+     *
+     * @see PDF 32000-1:2008 - 14.11.2 Page Boundaries
+     * @var string
+     */
+    const TRIM_BOX = 'TrimBox';
+
+    /**
+     * ArtBox
+     *
+     * The art box defines the extent of the pageâs meaningful content (including potential white space) as intended
+     * by the pageâs creator.
+     *
+     * @see PDF 32000-1:2008 - 14.11.2 Page Boundaries
+     * @var string
+     */
+    const ART_BOX = 'ArtBox';
+
+    /**
+     * All page boundaries
+     *
+     * @var array
+     */
+    public static $all = array(
+        self::MEDIA_BOX,
+        self::CROP_BOX,
+        self::BLEED_BOX,
+        self::TRIM_BOX,
+        self::ART_BOX
+    );
+
+    /**
+     * Checks if a name is a valid page boundary name.
+     *
+     * @param string $name The boundary name
+     * @return boolean A boolean value whether the name is valid or not.
+     */
+    public static function isValidName($name)
+    {
+        return \in_array($name, self::$all, true);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/PdfReader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/PdfReader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/PdfReader.php	(revision 8435)
@@ -0,0 +1,240 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfReader;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\Type\PdfArray;
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObjectReference;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfType;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+
+/**
+ * A PDF reader class
+ */
+class PdfReader
+{
+    /**
+     * @var PdfParser
+     */
+    protected $parser;
+
+    /**
+     * @var int
+     */
+    protected $pageCount;
+
+    /**
+     * Indirect objects of resolved pages.
+     *
+     * @var PdfIndirectObjectReference[]|PdfIndirectObject[]
+     */
+    protected $pages = [];
+
+    /**
+     * PdfReader constructor.
+     *
+     * @param PdfParser $parser
+     */
+    public function __construct(PdfParser $parser)
+    {
+        $this->parser = $parser;
+    }
+
+    /**
+     * PdfReader destructor.
+     */
+    public function __destruct()
+    {
+        if ($this->parser !== null) {
+            $this->parser->cleanUp();
+        }
+    }
+
+    /**
+     * Get the pdf parser instance.
+     *
+     * @return PdfParser
+     */
+    public function getParser()
+    {
+        return $this->parser;
+    }
+
+    /**
+     * Get the PDF version.
+     *
+     * @return string
+     * @throws PdfParserException
+     */
+    public function getPdfVersion()
+    {
+        return \implode('.', $this->parser->getPdfVersion());
+    }
+
+    /**
+     * Get the page count.
+     *
+     * @return int
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public function getPageCount()
+    {
+        if ($this->pageCount === null) {
+            $catalog = $this->parser->getCatalog();
+
+            $pages = PdfType::resolve(PdfDictionary::get($catalog, 'Pages'), $this->parser);
+            $count = PdfType::resolve(PdfDictionary::get($pages, 'Count'), $this->parser);
+
+            $this->pageCount = PdfNumeric::ensure($count)->value;
+        }
+
+        return $this->pageCount;
+    }
+
+    /**
+     * Get a page instance.
+     *
+     * @param int $pageNumber
+     * @return Page
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     * @throws \InvalidArgumentException
+     */
+    public function getPage($pageNumber)
+    {
+        if (!\is_numeric($pageNumber)) {
+            throw new \InvalidArgumentException(
+                'Page number needs to be a number.'
+            );
+        }
+
+        if ($pageNumber < 1 || $pageNumber > $this->getPageCount()) {
+            throw new \InvalidArgumentException(
+                \sprintf(
+                    'Page number "%s" out of available page range (1 - %s)',
+                    $pageNumber,
+                    $this->getPageCount()
+                )
+            );
+        }
+
+        $this->readPages();
+
+        $page = $this->pages[$pageNumber - 1];
+
+        if ($page instanceof PdfIndirectObjectReference) {
+            $readPages = function ($kids) use (&$readPages) {
+                $kids = PdfArray::ensure($kids);
+
+                /** @noinspection LoopWhichDoesNotLoopInspection */
+                foreach ($kids->value as $reference) {
+                    $reference = PdfIndirectObjectReference::ensure($reference);
+                    $object = $this->parser->getIndirectObject($reference->value);
+                    $type = PdfDictionary::get($object->value, 'Type');
+
+                    if ($type->value === 'Pages') {
+                        return $readPages(PdfDictionary::get($object->value, 'Kids'));
+                    }
+
+                    return $object;
+                }
+
+                throw new PdfReaderException(
+                    'Kids array cannot be empty.',
+                    PdfReaderException::KIDS_EMPTY
+                );
+            };
+
+            $page = $this->parser->getIndirectObject($page->value);
+            $dict = PdfType::resolve($page, $this->parser);
+            $type = PdfDictionary::get($dict, 'Type');
+
+            if ($type->value === 'Pages') {
+                $kids = PdfType::resolve(PdfDictionary::get($dict, 'Kids'), $this->parser);
+                try {
+                    $page = $this->pages[$pageNumber - 1] = $readPages($kids);
+                } catch (PdfReaderException $e) {
+                    if ($e->getCode() !== PdfReaderException::KIDS_EMPTY) {
+                        throw $e;
+                    }
+
+                    // let's reset the pages array and read all page objects
+                    $this->pages = [];
+                    $this->readPages(true);
+                    // @phpstan-ignore-next-line
+                    $page = $this->pages[$pageNumber - 1];
+                }
+            } else {
+                $this->pages[$pageNumber - 1] = $page;
+            }
+        }
+
+        return new Page($page, $this->parser);
+    }
+
+    /**
+     * Walk the page tree and resolve all indirect objects of all pages.
+     *
+     * @param bool $readAll
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     */
+    protected function readPages($readAll = false)
+    {
+        if (\count($this->pages) > 0) {
+            return;
+        }
+
+        $expectedPageCount = $this->getPageCount();
+        $readPages = function ($kids, $count) use (&$readPages, $readAll, $expectedPageCount) {
+            $kids = PdfArray::ensure($kids);
+            $isLeaf = ($count->value === \count($kids->value));
+
+            foreach ($kids->value as $reference) {
+                $reference = PdfIndirectObjectReference::ensure($reference);
+
+                if (!$readAll && $isLeaf) {
+                    $this->pages[] = $reference;
+                    continue;
+                }
+
+                $object = $this->parser->getIndirectObject($reference->value);
+                $type = PdfDictionary::get($object->value, 'Type');
+
+                if ($type->value === 'Pages') {
+                    $readPages(PdfDictionary::get($object->value, 'Kids'), PdfDictionary::get($object->value, 'Count'));
+                } else {
+                    $this->pages[] = $object;
+                }
+
+                // stop if all pages are read - faulty documents exists with additional entries with invalid data.
+                if (count($this->pages) === $expectedPageCount) {
+                    break;
+                }
+            }
+        };
+
+        $catalog = $this->parser->getCatalog();
+        $pages = PdfType::resolve(PdfDictionary::get($catalog, 'Pages'), $this->parser);
+        $count = PdfType::resolve(PdfDictionary::get($pages, 'Count'), $this->parser);
+        $kids = PdfType::resolve(PdfDictionary::get($pages, 'Kids'), $this->parser);
+        $readPages($kids, $count);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/PdfReaderException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/PdfReaderException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/PdfReader/PdfReaderException.php	(revision 8435)
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfReader;
+
+use setasign\Fpdi\FpdiException;
+
+/**
+ * Exception for the pdf reader class
+ */
+class PdfReaderException extends FpdiException
+{
+    /**
+     * @var int
+     */
+    const KIDS_EMPTY = 0x0101;
+
+    /**
+     * @var int
+     */
+    const UNEXPECTED_DATA_TYPE = 0x0102;
+
+    /**
+     * @var int
+     */
+    const MISSING_DATA = 0x0103;
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Tcpdf/Fpdi.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Tcpdf/Fpdi.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Tcpdf/Fpdi.php	(revision 8435)
@@ -0,0 +1,391 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\Tcpdf;
+
+use setasign\Fpdi\FpdiException;
+use setasign\Fpdi\FpdiTrait;
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\Filter\AsciiHex;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\Type\PdfArray;
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+use setasign\Fpdi\PdfParser\Type\PdfHexString;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfName;
+use setasign\Fpdi\PdfParser\Type\PdfNull;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfStream;
+use setasign\Fpdi\PdfParser\Type\PdfString;
+use setasign\Fpdi\PdfParser\Type\PdfType;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+
+/**
+ * Class Fpdi
+ *
+ * This class let you import pages of existing PDF documents into a reusable structure for TCPDF.
+ *
+ * @method _encrypt_data(int $n, string $s) string
+ */
+class Fpdi extends \TCPDF
+{
+    use FpdiTrait {
+        writePdfType as fpdiWritePdfType;
+        useImportedPage as fpdiUseImportedPage;
+    }
+
+    /**
+     * FPDI version
+     *
+     * @string
+     */
+    const VERSION = '2.6.0';
+
+    /**
+     * A counter for template ids.
+     *
+     * @var int
+     */
+    protected $templateId = 0;
+
+    /**
+     * The currently used object number.
+     *
+     * @var int|null
+     */
+    protected $currentObjectNumber;
+
+    protected function _enddoc()
+    {
+        parent::_enddoc();
+        $this->cleanUp();
+    }
+
+    /**
+     * Get the next template id.
+     *
+     * @return int
+     */
+    protected function getNextTemplateId()
+    {
+        return $this->templateId++;
+    }
+
+    /**
+     * Draws an imported page onto the page or another template.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|array $x The abscissa of upper-left corner. Alternatively you could use an assoc array
+     *                           with the keys "x", "y", "width", "height", "adjustPageSize".
+     * @param float|int $y The ordinate of upper-left corner.
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @param bool $adjustPageSize
+     * @return array The size
+     * @see FpdiTrait::getTemplateSize()
+     */
+    public function useTemplate($tpl, $x = 0, $y = 0, $width = null, $height = null, $adjustPageSize = false)
+    {
+        return $this->useImportedPage($tpl, $x, $y, $width, $height, $adjustPageSize);
+    }
+
+    /**
+     * Draws an imported page onto the page.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $pageId The page id
+     * @param float|int|array $x The abscissa of upper-left corner. Alternatively you could use an assoc array
+     *                           with the keys "x", "y", "width", "height", "adjustPageSize".
+     * @param float|int $y The ordinate of upper-left corner.
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @param bool $adjustPageSize
+     * @return array The size.
+     * @see Fpdi::getTemplateSize()
+     */
+    public function useImportedPage($pageId, $x = 0, $y = 0, $width = null, $height = null, $adjustPageSize = false)
+    {
+        $size = $this->fpdiUseImportedPage($pageId, $x, $y, $width, $height, $adjustPageSize);
+        if ($this->inxobj) {
+            $importedPage = $this->importedPages[$pageId];
+            $this->xobjects[$this->xobjid]['importedPages'][$importedPage['id']] = $pageId;
+        }
+
+        return $size;
+    }
+
+    /**
+     * Get the size of an imported page.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @return array|bool An array with following keys: width, height, 0 (=width), 1 (=height), orientation (L or P)
+     */
+    public function getTemplateSize($tpl, $width = null, $height = null)
+    {
+        return $this->getImportedPageSize($tpl, $width, $height);
+    }
+
+    /**
+     * @inheritdoc
+     * @return string
+     */
+    protected function _getxobjectdict()
+    {
+        $out = parent::_getxobjectdict();
+
+        foreach ($this->importedPages as $pageData) {
+            $out .= '/' . $pageData['id'] . ' ' . $pageData['objectNumber'] . ' 0 R ';
+        }
+
+        return $out;
+    }
+
+    /**
+     * @inheritdoc
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    protected function _putxobjects()
+    {
+        foreach ($this->importedPages as $key => $pageData) {
+            $this->currentObjectNumber = $this->_newobj();
+            $this->importedPages[$key]['objectNumber'] = $this->currentObjectNumber;
+            $this->currentReaderId = $pageData['readerId'];
+            $this->writePdfType($pageData['stream']);
+            $this->_put('endobj');
+        }
+
+        foreach (\array_keys($this->readers) as $readerId) {
+            $parser = $this->getPdfReader($readerId)->getParser();
+            $this->currentReaderId = $readerId;
+
+            while (($objectNumber = \array_pop($this->objectsToCopy[$readerId])) !== null) {
+                try {
+                    $object = $parser->getIndirectObject($objectNumber);
+                } catch (CrossReferenceException $e) {
+                    if ($e->getCode() === CrossReferenceException::OBJECT_NOT_FOUND) {
+                        $object = PdfIndirectObject::create($objectNumber, 0, new PdfNull());
+                    } else {
+                        throw $e;
+                    }
+                }
+
+                $this->writePdfType($object);
+            }
+        }
+
+        // let's prepare resources for imported pages in templates
+        foreach ($this->xobjects as $xObjectId => $data) {
+            if (!isset($data['importedPages'])) {
+                continue;
+            }
+
+            foreach ($data['importedPages'] as $id => $pageKey) {
+                $page = $this->importedPages[$pageKey];
+                $this->xobjects[$xObjectId]['xobjects'][$id] = ['n' => $page['objectNumber']];
+            }
+        }
+
+
+        parent::_putxobjects();
+        $this->currentObjectNumber = null;
+    }
+
+    /**
+     * Append content to the buffer of TCPDF.
+     *
+     * @param string $s
+     * @param bool $newLine
+     */
+    protected function _put($s, $newLine = true)
+    {
+        if ($newLine) {
+            $this->setBuffer($s . "\n");
+        } else {
+            $this->setBuffer($s);
+        }
+    }
+
+    /**
+     * Begin a new object and return the object number.
+     *
+     * @param int|string $objid Object ID (leave empty to get a new ID).
+     * @return int object number
+     */
+    protected function _newobj($objid = '')
+    {
+        $this->_out($this->_getobj($objid));
+        return $this->n;
+    }
+
+    /**
+     * Writes a PdfType object to the resulting buffer.
+     *
+     * @param PdfType $value
+     * @throws PdfTypeException
+     */
+    protected function writePdfType(PdfType $value)
+    {
+        if (!$this->encrypted) {
+            $this->fpdiWritePdfType($value);
+            return;
+        }
+
+        if ($value instanceof PdfString) {
+            $string = PdfString::unescape($value->value);
+            $string = $this->_encrypt_data($this->currentObjectNumber, $string);
+            $value->value = PdfString::escape($string);
+        } elseif ($value instanceof PdfHexString) {
+            $filter = new AsciiHex();
+            $string = $filter->decode($value->value);
+            $string = $this->_encrypt_data($this->currentObjectNumber, $string);
+            $value->value = $filter->encode($string, true);
+        } elseif ($value instanceof PdfStream) {
+            $stream = $value->getStream();
+            $stream = $this->_encrypt_data($this->currentObjectNumber, $stream);
+            $dictionary = $value->value;
+            $dictionary->value['Length'] = PdfNumeric::create(\strlen($stream));
+            $value = PdfStream::create($dictionary, $stream);
+        } elseif ($value instanceof PdfIndirectObject) {
+            /**
+             * @var PdfIndirectObject $value
+             */
+            $this->currentObjectNumber = $this->objectMap[$this->currentReaderId][$value->objectNumber];
+        }
+
+        $this->fpdiWritePdfType($value);
+    }
+
+    /**
+     * This method will add additional data to the last created link/annotation.
+     *
+     * It will copy styling properties (supported by TCPDF) of the imported link.
+     *
+     * @param array $externalLink
+     * @param float|int $xPt
+     * @param float|int $scaleX
+     * @param float|int $yPt
+     * @param float|int $newHeightPt
+     * @param float|int $scaleY
+     * @param array $importedPage
+     * @return void
+     */
+    protected function adjustLastLink($externalLink, $xPt, $scaleX, $yPt, $newHeightPt, $scaleY, $importedPage)
+    {
+        $parser = $this->getPdfReader($importedPage['readerId'])->getParser();
+
+        if ($this->inxobj) {
+            // store parameters for later use on template
+            $lastAnnotationKey = count($this->xobjects[$this->xobjid]['annotations']) - 1;
+            $lastAnnotationOpt = &$this->xobjects[$this->xobjid]['annotations'][$lastAnnotationKey]['opt'];
+        } else {
+            $lastAnnotationKey = count($this->PageAnnots[$this->page]) - 1;
+            $lastAnnotationOpt = &$this->PageAnnots[$this->page][$lastAnnotationKey]['opt'];
+        }
+
+        // ensure we have a default value - otherwise TCPDF will set it to 4 throughout
+        $lastAnnotationOpt['f'] = 0;
+
+        // values in this dictonary are all direct objects and we don't need to resolve them here again.
+        $values = $externalLink['pdfObject']->value;
+
+        foreach ($values as $key => $value) {
+            try {
+                switch ($key) {
+                    case 'BS':
+                        $value = PdfDictionary::ensure($value);
+                        $bs = [];
+                        if (isset($value->value['W'])) {
+                            $bs['w'] = PdfNumeric::ensure($value->value['W'])->value;
+                        }
+
+                        if (isset($value->value['S'])) {
+                            $bs['s'] = PdfName::ensure($value->value['S'])->value;
+                        }
+
+                        if (isset($value->value['D'])) {
+                            $d = [];
+                            foreach (PdfArray::ensure($value->value['D'])->value as $item) {
+                                $d[] = PdfNumeric::ensure($item)->value;
+                            }
+                            $bs['d'] = $d;
+                        }
+
+                        $lastAnnotationOpt['bs'] = $bs;
+                        break;
+
+                    case 'Border':
+                        $borderArray = PdfArray::ensure($value)->value;
+                        if (count($borderArray) < 3) {
+                            continue 2;
+                        }
+
+                        $border = [
+                            PdfNumeric::ensure($borderArray[0])->value,
+                            PdfNumeric::ensure($borderArray[1])->value,
+                            PdfNumeric::ensure($borderArray[2])->value,
+                        ];
+                        if (isset($borderArray[3])) {
+                            $dashArray = [];
+                            foreach (PdfArray::ensure($borderArray[3])->value as $item) {
+                                $dashArray[] = PdfNumeric::ensure($item)->value;
+                            }
+                            $border[] = $dashArray;
+                        }
+
+                        $lastAnnotationOpt['border'] = $border;
+                        break;
+
+                    case 'C':
+                        $c = [];
+                        $colors = PdfArray::ensure(PdfType::resolve($value, $parser))->value;
+                        $m = count($colors) === 4 ? 100 : 255;
+                        foreach ($colors as $item) {
+                            $c[] = PdfNumeric::ensure($item)->value * $m;
+                        }
+                        $lastAnnotationOpt['c'] = $c;
+                        break;
+
+                    case 'F':
+                        $lastAnnotationOpt['f'] = $value->value;
+                        break;
+
+                    case 'BE':
+                        // is broken in current TCPDF version: "bc" key is checked but "bs" is used.
+                        break;
+                }
+            // let's silence invalid/not supported values
+            } catch (FpdiException $e) {
+                continue;
+            }
+        }
+
+        // QuadPoints are not supported by TCPDF
+//        if (count($externalLink['quadPoints']) > 0) {
+//            $quadPoints = [];
+//            for ($i = 0, $n = count($externalLink['quadPoints']); $i < $n; $i += 2) {
+//                $quadPoints[] = $xPt + $externalLink['quadPoints'][$i] * $scaleX;
+//                $quadPoints[] = $this->hPt - $yPt - $newHeightPt + $externalLink['quadPoints'][$i + 1] * $scaleY;
+//            }
+//
+//            ????? = $quadPoints;
+//        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/TcpdfFpdi.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/TcpdfFpdi.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/TcpdfFpdi.php	(revision 8435)
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+/**
+ * Class TcpdfFpdi
+ *
+ * This class let you import pages of existing PDF documents into a reusable structure for TCPDF.
+ *
+ * @deprecated Class was moved to \setasign\Fpdi\Tcpdf\Fpdi
+ */
+class TcpdfFpdi extends \setasign\Fpdi\Tcpdf\Fpdi
+{
+    // this class is moved to \setasign\Fpdi\Tcpdf\Fpdi
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Tfpdf/FpdfTpl.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Tfpdf/FpdfTpl.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Tfpdf/FpdfTpl.php	(revision 8435)
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\Tfpdf;
+
+use setasign\Fpdi\FpdfTplTrait;
+
+/**
+ * Class FpdfTpl
+ *
+ * We need to change some access levels and implement the setPageFormat() method to bring back compatibility to tFPDF.
+ */
+class FpdfTpl extends \tFPDF
+{
+    use FpdfTplTrait;
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Tfpdf/Fpdi.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Tfpdf/Fpdi.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/Tfpdf/Fpdi.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\Tfpdf;
+
+use setasign\Fpdi\FpdfTrait;
+use setasign\Fpdi\FpdiTrait;
+
+/**
+ * Class Fpdi
+ *
+ * This class let you import pages of existing PDF documents into a reusable structure for tFPDF.
+ */
+class Fpdi extends FpdfTpl
+{
+    use FpdiTrait;
+    use FpdfTrait;
+
+    /**
+     * FPDI version
+     *
+     * @string
+     */
+    const VERSION = '2.6.0';
+}
Index: /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/autoload.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/autoload.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/setasign/fpdi/src/autoload.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2023 Setasign GmbH & Co. KG (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+spl_autoload_register(static function ($class) {
+    if (strpos($class, 'setasign\Fpdi\\') === 0) {
+        $filename = str_replace('\\', DIRECTORY_SEPARATOR, substr($class, 14)) . '.php';
+        $fullpath = __DIR__ . DIRECTORY_SEPARATOR . $filename;
+
+        if (is_file($fullpath)) {
+            /** @noinspection PhpIncludeInspection */
+            require_once $fullpath;
+        }
+    }
+});
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/ISSUE_TEMPLATE/incorrect-parsing.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/ISSUE_TEMPLATE/incorrect-parsing.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/ISSUE_TEMPLATE/incorrect-parsing.md	(revision 8435)
@@ -0,0 +1,25 @@
+---
+name: Incorrect parsing
+about: Use this template if a PDF is not parsed as expected
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+<!-- DO NOT THROW THIS AWAY -->
+<!-- Fill out the FULL versions with patch versions -->
+
+ - PHP Version: 
+ - PDFParser Version: 
+
+### Description:
+
+### PDF input
+<!-- If possible, please provide the PDF you are trying to parse -->
+
+### Expected output & actual output
+<!-- Share a piece of the output and the corresponding piece of input that you expected the parser would output -->
+
+### Code
+<!-- Add the code you used to parse the PDF -->
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/pull_request_template.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/pull_request_template.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/pull_request_template.md	(revision 8435)
@@ -0,0 +1,32 @@
+# Type of pull request
+
+* [ ] Bug fix (involves code and configuration changes)
+* [ ] New feature (involves code and configuration changes)
+* [ ] Documentation update
+* [ ] Something else
+
+# About
+
+<!-- Please describe with a few words what this pull request is about -->
+
+# Checklist for code / configuration changes
+
+*In case you changed the code/configuration, please read each of the following checkboxes as they contain valuable information:*
+
+* [ ] Please add at least **one test case** (unit test, system test, ...) to demonstrate that the change is working. If existing code was changed, your tests cover these code parts as well.
+     By the way, you don't have to provide a full fledged PDF file to demonstrate a fix. Instead a unit test may be sufficient sometimes,
+     please have a look at [FontTest](https://github.com/smalot/pdfparser/blob/master/tests/PHPUnit/Unit/FontTest.php#L40) for example code.
+     Code changes without any tests are likely to be rejected. If you dont know how to write tests, no problem, tell us upfront and we may add them ourselves or discuss other ways.
+* [ ] Please run **PHP-CS-Fixer** before committing, to confirm with our coding styles. See https://github.com/smalot/pdfparser/blob/master/.php-cs-fixer.php for more information about our coding styles.
+* [ ] In case you **fix an existing issue**, please do one of the following:
+  * [ ] Write in this text something like `fixes #1234` to outline that you are providing a fix for the issue `#1234`.
+  * [ ] After the pull request was created, you will find on the right side a section called **Development**. There issues can be selected which will be closed after the your pull request got merged.
+* [ ] In case you changed internal behavior or functionality, please check our documentation to make sure these changes are **documented properly**: https://github.com/smalot/pdfparser/tree/master/doc
+* [ ] In case you want to discuss new ideas/changes and you are not sure, just create a pull request and mark it as **a draft**
+      (see [here](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests) for more information).
+      This will tell us, that it is not ready for merge, but you want to discuss certain issues.
+
+<!--
+Pull requests will be declined/rejected if one part of the continous integration pipeline fails. 
+We use the pipeline to make sure no regressions are introduced and existing code still runs as expected.
+-->
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/workflows/coding-standards.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/workflows/coding-standards.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/workflows/coding-standards.yml	(revision 8435)
@@ -0,0 +1,37 @@
+name: "CS"
+
+on:
+  pull_request:
+  push:
+    branches:
+      - master
+
+jobs:
+  coding-standards:
+    name: "CS Fixer & PHPStan"
+    runs-on: ubuntu-20.04
+    steps:
+      -
+        name: Checkout
+        uses: actions/checkout@v3
+      -
+        env:
+          COMPOSER_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
+        name: "Install PHP"
+        uses: shivammathur/setup-php@v2
+        with:
+          coverage: none
+          php-version: "7.4"
+          tools: "composer:v2"
+      -
+        name: Install dependencies with Composer
+        uses: ramsey/composer-install@v2
+      -
+        name: Install dev tools
+        run: make install-dev-tools
+      -
+        name: Run PHP CS Fixer
+        run: 'make run-php-cs-fixer ARGS="--verbose --dry-run"'
+      -
+        name: Run PHPStan
+        run: 'make run-phpstan ARGS="--no-progress"'
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/workflows/continuous-integration.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/workflows/continuous-integration.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/workflows/continuous-integration.yml	(revision 8435)
@@ -0,0 +1,227 @@
+name: "CI"
+
+on: [push, pull_request]
+
+env:
+  fail-fast: true
+
+jobs:
+  phpunit:
+    name: "PHPUnit (PHP ${{ matrix.php }})"
+    runs-on: "ubuntu-20.04"
+
+    strategy:
+      matrix:
+        php:
+          - "7.2"
+          - "7.3"
+          - "7.4"
+          - "8.0"
+          - "8.1"
+          - "8.2"
+          - "8.3"
+
+    steps:
+      - name: "Checkout"
+        uses: "actions/checkout@v3"
+
+      - name: "Install PHP"
+        uses: "shivammathur/setup-php@v2"
+        with:
+          php-version: "${{ matrix.php }}"
+          coverage: "none"
+          tools: composer:v2
+        env:
+          COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: "Install dependencies with Composer"
+        uses: "ramsey/composer-install@v2"
+
+      - name: "Install dev tools"
+        run: "make install-dev-tools"
+
+      - name: "Run PHPUnit"
+        run: "make run-phpunit"
+
+  phpunit-lower-php:
+    name: "PHPUnit (PHP ${{ matrix.php }})"
+    runs-on: "ubuntu-20.04"
+
+    strategy:
+      matrix:
+        php:
+          - "7.1"
+
+    steps:
+      - name: "Checkout"
+        uses: "actions/checkout@v3"
+
+      - name: "Install PHP"
+        uses: "shivammathur/setup-php@v2"
+        with:
+          php-version: "${{ matrix.php }}"
+          coverage: "none"
+          tools: composer:v2
+        env:
+          COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: "Install dependencies with Composer"
+        uses: "ramsey/composer-install@v2"
+
+      - name: "Install dev tools"
+        run: "make install-dev-tools"
+
+      - name: "Run PHPUnit"
+        run: "make run-phpunit"
+
+  phpunit-coverage:
+    name: "PHPUnit coverage (PHP ${{ matrix.php }})"
+    runs-on: "ubuntu-20.04"
+
+    strategy:
+      matrix:
+        php:
+          - "7.4"
+
+    steps:
+      - name: "Checkout"
+        uses: "actions/checkout@v3"
+
+      - name: "Install PHP with PCOV"
+        uses: "shivammathur/setup-php@v2"
+        with:
+          php-version: "${{ matrix.php }}"
+          coverage: "xdebug"
+          tools: composer:v2
+        env:
+          COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: "Install dependencies with Composer"
+        uses: "ramsey/composer-install@v2"
+
+      - name: "Install dev tools"
+        run: "make install-dev-tools"
+
+      - name: "Run PHPUnit"
+        run: make run-phpunit ARGS="-v --coverage-clover coverage/clover.xml"
+
+  phpunit-composerv2:
+    name: "PHPUnit Composer v2 (PHP ${{ matrix.php }})"
+    runs-on: "ubuntu-20.04"
+
+    strategy:
+      matrix:
+        php:
+          - "7.4"
+
+    steps:
+      - name: "Checkout"
+        uses: "actions/checkout@v3"
+
+      - name: "Install PHP"
+        uses: "shivammathur/setup-php@v2"
+        with:
+          php-version: "${{ matrix.php }}"
+          coverage: "none"
+          tools: composer:v2
+        env:
+          COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: "Install dependencies with Composer"
+        uses: "ramsey/composer-install@v2"
+
+      - name: "Install dev tools"
+        run: "make install-dev-tools"
+
+      - name: "Run PHPUnit"
+        run: "make run-phpunit"
+
+  alt-autoload:
+    name: "Tests alternative autoloader (PHP ${{ matrix.php }})"
+    runs-on: "ubuntu-20.04"
+
+    strategy:
+      matrix:
+        php:
+          - "7.1"
+          - "7.2"
+          - "7.3"
+          - "7.4"
+          - "8.0"
+          - "8.1"
+          - "8.2"
+          - "8.3"
+
+    steps:
+      - name: "Checkout"
+        uses: "actions/checkout@v3"
+
+      - name: "Install PHP"
+        uses: "shivammathur/setup-php@v2"
+        with:
+          php-version: "${{ matrix.php }}"
+          coverage: "none"
+
+      - name: "Test alt-autoload"
+        run: "php tests/AltAutoloading/AltAutoloadCheck.php"
+
+  phpunit-lowest:
+    name: "PHPUnit lowest deps (PHP ${{ matrix.php }})"
+    runs-on: "ubuntu-20.04"
+
+    strategy:
+      matrix:
+        php:
+          - "7.3"
+
+    steps:
+      - name: "Checkout"
+        uses: "actions/checkout@v3"
+
+      - name: "Install PHP"
+        uses: "shivammathur/setup-php@v2"
+        with:
+          php-version: "${{ matrix.php }}"
+          coverage: "none"
+          tools: composer:v2
+        env:
+          COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: "Install dependencies with Composer"
+        uses: "ramsey/composer-install@v2"
+        with:
+          dependency-versions: "lowest"
+
+      - name: "Install dev tools"
+        run: "make install-dev-tools"
+
+      - name: "Run PHPUnit"
+        run: "make run-phpunit"
+
+  windows-tests:
+    name: Windows-Tests with PHP ${{ matrix.php-versions }}
+    runs-on: windows-2019
+
+    strategy:
+      fail-fast: true
+      matrix:
+        php-versions: ['7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3']
+
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v3
+
+      - name: Install PHP
+        uses: shivammathur/setup-php@v2
+        with:
+          php-version: ${{ matrix.php-versions }}
+          ini-values: memory_limit=1G
+
+      - name: Install Composer dependencies (root)
+        run: composer update --no-progress --no-suggest --prefer-dist --optimize-autoloader
+
+      - name: Install Composer dependencies (dev-tools)
+        run: composer update --working-dir=dev-tools
+
+      - name: Tests
+        run: dev-tools/vendor/bin/phpunit -c phpunit-windows.xml --exclude-group linux-only
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/workflows/performance.yml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/workflows/performance.yml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.github/workflows/performance.yml	(revision 8435)
@@ -0,0 +1,30 @@
+name: "Performance Tests"
+
+on:
+  pull_request:
+  push:
+    branches:
+      - "master"
+
+env:
+  fail-fast: true
+
+jobs:
+  performance-tests:
+    name: "Tests for the performance testing the PDF parsing"
+    runs-on: "ubuntu-20.04"
+
+    strategy:
+      matrix:
+        php:
+          - "7.4"
+
+    steps:
+      - name: "Checkout"
+        uses: "actions/checkout@v3"
+
+      - name: "Run composer for further autoloading"
+        run: "composer update"
+
+      - name: "Run performance tests"
+        run: "php tests/Performance/runPerformanceTests.php"
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.php-cs-fixer.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.php-cs-fixer.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/.php-cs-fixer.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+use PhpCsFixer\Config;
+use PhpCsFixer\Finder;
+
+$finder = Finder::create()
+    ->in([
+        __DIR__.'/src',
+        __DIR__.'/tests',
+    ])
+    ->name('*.php')
+;
+
+$config = new Config();
+$config
+    ->setFinder($finder)
+    ->setRiskyAllowed(true)
+    ->setRules([
+        '@Symfony' => true,
+        '@Symfony:risky' => true,
+        'array_syntax' => ['syntax' => 'short'],
+        'no_empty_phpdoc' => true,
+        'no_unused_imports' => true,
+        'no_superfluous_phpdoc_tags' => true,
+        'ordered_imports' => true,
+        'phpdoc_summary' => false,
+        'protected_to_private' => false,
+        'get_class_to_class_keyword' => false, // override for PHP < 8.0 (because ::class usage is not allowed there)
+        'modernize_strpos' => false, // override for PHP < 8.0 (because str_contains not available in PHP 7.x)
+    ])
+;
+
+return $config;
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/LICENSE.txt
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/LICENSE.txt	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/LICENSE.txt	(revision 8435)
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/Makefile
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/Makefile	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/Makefile	(revision 8435)
@@ -0,0 +1,11 @@
+install-dev-tools:
+	composer update --working-dir=dev-tools
+
+run-php-cs-fixer:
+	dev-tools/vendor/bin/php-cs-fixer fix $(ARGS)
+
+run-phpstan:
+	dev-tools/vendor/bin/phpstan analyze $(ARGS)
+
+run-phpunit:
+	dev-tools/vendor/bin/phpunit $(ARGS)
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/README.md	(revision 8435)
@@ -0,0 +1,58 @@
+# PDF parser
+
+[![Version](https://poser.pugx.org/smalot/pdfparser/v)](//packagist.org/packages/smalot/pdfparser)
+![CI](https://github.com/smalot/pdfparser/workflows/CI/badge.svg)
+![CS](https://github.com/smalot/pdfparser/workflows/CS/badge.svg)
+[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/smalot/pdfparser/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/smalot/pdfparser/?branch=master)
+[![Downloads](https://poser.pugx.org/smalot/pdfparser/downloads)](//packagist.org/packages/smalot/pdfparser)
+
+The `smalot/pdfparser` is a standalone PHP package that provides various tools to extract data from PDF files.
+
+This library is under **active maintenance**.
+There is no active development by the author of this library (at the moment), but we welcome any pull request adding/extending functionality!
+
+## Features
+
+- Load/parse objects and headers
+- Extract metadata (author, description, ...)
+- Extract text from ordered pages
+- Support of compressed PDFs
+- Support of MAC OS Roman charset encoding
+- Handling of hexa and octal encoding in text sections
+- Create custom configurations (see [CustomConfig.md](/doc/CustomConfig.md)).
+
+Currently, secured documents and extracting form data are not supported.
+
+## License
+
+This library is under the [LGPLv3 license](https://github.com/smalot/pdfparser/blob/master/LICENSE.txt).
+
+## Install
+
+This library requires PHP 7.1+ since [v1](https://github.com/smalot/pdfparser/releases/tag/v1.0.0).
+You can install it via [Composer](https://getcomposer.org/):
+
+```bash
+composer require smalot/pdfparser
+```
+
+In case you can't use Composer, you can include `alt_autoload.php-dist`. It will include all required files automatically.
+
+## Quick example
+
+```php
+<?php
+
+// Parse PDF file and build necessary objects.
+$parser = new \Smalot\PdfParser\Parser();
+$pdf = $parser->parseFile('/path/to/document.pdf');
+
+$text = $pdf->getText();
+echo $text;
+```
+
+Further usage information can be found [here](/doc/Usage.md).
+
+## Documentation
+
+Documentation can be found in the [doc](/doc) folder.
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/alt_autoload.php-dist
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/alt_autoload.php-dist	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/alt_autoload.php-dist	(revision 8435)
@@ -0,0 +1,75 @@
+<?php
+
+/**
+ * @file This file is part of the PdfParser library.
+ *
+ * @author  Konrad Abicht <k.abicht@gmail.com>
+ * @date    2021-02-09
+ *
+ * @license LGPLv3
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ *
+ * --------------------------------------------------------------------------------------
+ *
+ * About:
+ * This file provides an alternative to the Composer-approach.
+ * Include it into your project and all required files of PDFParser will be loaded automatically.
+ * Please use it only, if Composer is not available.
+ *
+ * How to use:
+ * 1. include this file as it is OR copy and rename it as you like (and then include it)
+ * 2. afterwards you can use PDFParser classes
+ * Done.
+ */
+
+/**
+ * Loads all files found in a given folder.
+ * Calls itself recursively for all sub folders.
+ *
+ * @param string $dir
+ */
+function requireFilesOfFolder($dir)
+{
+    foreach (new DirectoryIterator($dir) as $fileInfo) {
+        if (!$fileInfo->isDot()) {
+            if ($fileInfo->isDir()) {
+                requireFilesOfFolder($fileInfo->getPathname());
+            } else {
+                require_once $fileInfo->getPathname();
+            }
+        }
+    }
+}
+
+$rootFolder = __DIR__.'/src/Smalot/PdfParser';
+
+// Manually require files, which can't be loaded automatically that easily.
+require_once $rootFolder.'/Element.php';
+require_once $rootFolder.'/PDFObject.php';
+require_once $rootFolder.'/Font.php';
+require_once $rootFolder.'/Page.php';
+require_once $rootFolder.'/Element/ElementString.php';
+require_once $rootFolder.'/Encoding/AbstractEncoding.php';
+
+/*
+ * Load the rest of PDFParser files from /src/Smalot/PDFParser
+ * Dont worry, it wont load files multiple times.
+ */
+requireFilesOfFolder($rootFolder);
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/composer.json	(revision 8435)
@@ -0,0 +1,37 @@
+{
+    "name": "smalot/pdfparser",
+    "description": "Pdf parser library. Can read and extract information from pdf file.",
+    "keywords": ["PDF", "text", "parser", "parse", "extract"],
+    "type": "library",
+    "license": "LGPL-3.0",
+    "authors": [
+        {
+            "name": "Sebastien MALOT",
+            "email": "sebastien@malot.fr"
+        }
+    ],
+    "support": {
+        "issues": "https://github.com/smalot/pdfparser/issues"
+    },
+    "homepage": "https://www.pdfparser.org",
+    "require": {
+        "php": ">=7.1",
+        "symfony/polyfill-mbstring": "^1.18",
+        "ext-zlib": "*",
+        "ext-iconv": "*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Smalot\\PdfParser\\": "src/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "PerformanceTests\\": "tests/Performance/",
+            "PHPUnitTests\\": "tests/PHPUnit/"
+        }
+    },
+    "config": {
+        "process-timeout": 1200
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/doc/CustomConfig.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/doc/CustomConfig.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/doc/CustomConfig.md	(revision 8435)
@@ -0,0 +1,80 @@
+# Configuring the behavior of the parser
+
+To change the behavior of the parser, create a `Config` object and pass it to the parser.
+In this case, we're setting the font space limit.
+Changing this value can be helpful when `getText()` returns a text with too many spaces.
+
+```php
+$config = new \Smalot\PdfParser\Config();
+$config->setFontSpaceLimit(-60);
+$parser = new \Smalot\PdfParser\Parser([], $config);
+$pdf = $parser->parseFile('document.pdf');
+// output extracted text
+// echo $pdf->getText();
+```
+
+## Config options overview
+
+The `Config` class has the following options:
+
+| Option                   | Type    | Default         | Description                                                                                                                                          |
+|--------------------------|---------|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `setDecodeMemoryLimit`   | Integer | `0`             | If parsing fails because of memory exhaustion, you can set a lower memory limit for decoding operations.                                             |
+| `setFontSpaceLimit`      | Integer | `-50`           | Changing font space limit can be helpful when `Parser::getText()` returns a text with too many spaces.                                               |
+| `setIgnoreEncryption`    | Boolean | `false`         | Read PDFs that are not encrypted but have the encryption flag set. This is a temporary workaround, don't rely on it.                                 |
+| `setHorizontalOffset`    | String  | ` `             | When words are broken up or when the structure of a table is not preserved, you may get better results when adapting `setHorizontalOffset`.          |
+| `setPdfWhitespaces`      | String  | `\0\t\n\f\r `   |                                                                                                                                                      |
+| `setPdfWhitespacesRegex` | String  | `[\0\t\n\f\r ]` |                                                                                                                                                      |
+| `setRetainImageContent`  | Boolean | `true`          | If parsing fails due to memory exhaustion, you can set the value to `false`. This will reduce memory usage, although it will no longer retain image content. |
+
+
+## option setDecodeMemoryLimit + setRetainImageContent (manage memory usage)
+
+If parsing fails because of memory exhaustion, you can use the following options.
+
+```php
+$config = new \Smalot\PdfParser\Config();
+// Whether to retain raw image data as content or discard it to save memory
+$config->setRetainImageContent(false);
+// Memory limit to use when de-compressing files, in bytes
+$config->setDecodeMemoryLimit(1000000);
+$parser = new \Smalot\PdfParser\Parser([], $config);
+```
+
+## option setHorizontalOffset
+
+When words are broken up or when the structure of a table is not preserved, you can use `setHorizontalOffset`.
+
+```php
+$config = new \Smalot\PdfParser\Config();
+// An empty string can prevent words from breaking up
+$config->setHorizontalOffset('');
+// A tab can help preserve the structure of your document
+$config->setHorizontalOffset("\t");
+$parser = new \Smalot\PdfParser\Parser([], $config);
+```
+
+## option setFontSpaceLimit
+
+Changing font space limit can be helpful when `getText()` returns a text with too many spaces.
+
+```php
+$config = new \Smalot\PdfParser\Config();
+$config->setFontSpaceLimit(-60);
+$parser = new \Smalot\PdfParser\Parser([], $config);
+$pdf = $parser->parseFile('document.pdf');
+```
+
+## option setIgnoreEncryption
+
+In some cases PDF files may be internally marked as encrypted even though the content is not encrypted and can be read.
+This can be caused by the PDF being created by a tool that does not properly set the encryption flag.
+If you are sure that the PDF is not encrypted, you can ignore the encryption flag by setting the `ignoreEncryption` flag to `true` in a custom `Config` instance.
+
+```php
+$config = new \Smalot\PdfParser\Config();
+$config->setIgnoreEncryption(true);
+
+$parser = new \Smalot\PdfParser\Parser([], $config);
+$pdf = $parser->parseFile('document.pdf');
+```
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/doc/Developer.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/doc/Developer.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/doc/Developer.md	(revision 8435)
@@ -0,0 +1,57 @@
+# Developers
+
+Here you will find information about our development tools and how to use them.
+
+## .editorconfig
+
+Please make sure your editor uses our `.editorconfig` file. It contains rules about our coding styles.
+
+## GitHub Action Workflows
+
+We use GitHub Actions to run our continuous integration as well as other tasks after pushing changes.
+You will find related files in `.github/workflows/`.
+
+## Development Tools and Tests
+
+Our test related files are located in `tests` folder.
+Tests are written using PHPUnit.
+
+To install (and update) development tools like PHPUnit or PHP-CS-Fixer run:
+
+```bash
+make install-dev-tools
+```
+
+Development tools are getting installed in `dev-tools/vendor`.
+Please check `dev-tools/composer.json` for more information about versions etc.
+To run a tool manually, you use `dev-tools/vendor/bin`, for instance:
+
+```bash
+dev-tools/vendor/bin/php-cs-fixer fix --verbose --dry-run
+```
+
+Below are a few shortcuts to improve your developer experience.
+
+### PHPUnit
+
+To run all tests run:
+
+```bash
+make run-phpunit
+```
+
+### PHP-CS-Fixer
+
+To check coding styles, run:
+
+```bash
+make run-php-cs-fixer
+```
+
+### PHPStan
+
+To run a static code analysis, use:
+
+```bash
+make run-phpstan
+```
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/doc/Usage.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/doc/Usage.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/doc/Usage.md	(revision 8435)
@@ -0,0 +1,248 @@
+# Usage
+
+First create a parser object and point it to a file.
+
+```php
+$parser = new \Smalot\PdfParser\Parser();
+
+$pdf = $parser->parseFile('document.pdf');
+// .. or ...
+$pdf = $parser->parseContent(file_get_contents('document.pdf'))
+ ```
+
+## Extract text
+
+A common scenario is to extract text.
+
+```php
+// extract text of the whole PDF
+$text = $pdf->getText();
+
+// or extract the text of a specific page (in this case the first page)
+$text = $pdf->getPages()[0]->getText();
+
+// you can also extract text of a limited amount of pages. here, it will only use the first five pages.
+$text = $pdf->getText(5);
+```
+
+## Extract text positions
+
+You can extract transformation matrix (indexes 0-3) and x,y position of text objects (indexes 4,5).
+
+```php
+$data = $pdf->getPages()[0]->getDataTm();
+
+Array
+(
+    [0] => Array
+        (
+            [0] => Array
+                (
+                    [0] => 0.999429
+                    [1] => 0
+                    [2] => 0
+                    [3] => 1
+                    [4] => 201.96
+                    [5] => 720.68
+                )
+
+            [1] => Document title
+        )
+
+    [1] => Array
+        (
+            [0] => Array
+                (
+                    [0] => 0.999402
+                    [1] => 0
+                    [2] => 0
+                    [3] => 1
+                    [4] => 70.8
+                    [5] => 673.64
+                )
+
+            [1] => Calibri : Lorem ipsum dolor sit amet, consectetur a
+        )
+)
+```
+
+When activated via Config setting (`Config::setDataTmFontInfoHasToBeIncluded(true)`) font identifier (index 2) and font size (index 3) are added to dataTm.
+
+```php
+// create config
+$config = new Smalot\PdfParser\Config();
+$config->setDataTmFontInfoHasToBeIncluded(true);
+
+// use config and parse file
+$parser = new Smalot\PdfParser\Parser([], $config);
+$pdf = $parser->parseFile('document.pdf');
+$firstpage = $pdf->getPages()[0];
+$data = $firstpage->getDataTm();
+
+Array
+(
+    [0] => Array
+        (
+            [0] => Array
+                (
+                    [0] => 0.999429
+                    [1] => 0
+                    [2] => 0
+                    [3] => 1
+                    [4] => 201.96
+                    [5] => 720.68
+                )
+
+            [1] => Document title
+            [2] => R7
+            [3] => 27.96
+        )
+
+    [1] => Array
+        (
+            [0] => Array
+                (
+                    [0] => 0.999402
+                    [1] => 0
+                    [2] => 0
+                    [3] => 1
+                    [4] => 70.8
+                    [5] => 673.64
+                )
+
+            [1] => Calibri : Lorem ipsum dolor sit amet, consectetur a
+            [2] => R9
+            [3] => 11.04
+        )
+)
+```
+
+Text width should be calculated on text from dataTm to make sure all character widths are available.
+In next example we are using data from above.
+
+```php
+$font_id = $data[0][2]; //R7
+$font = $firstpage->getFont($font_id);
+$text = $data[0][1];
+$width = $font->calculateTextWidth($text, $missing);
+```
+
+## Extract metadata
+
+You can also extract metadata. The available data varies from PDF to PDF.
+
+```php
+$metaData = $pdf->getDetails();
+
+Array
+(
+    [Producer] => Adobe Acrobat
+    [CreatedOn] => 2022-01-28T16:36:11+00:00
+    [Pages] => 35
+    ...
+)
+```
+
+If the PDF contains Extensible Metadata Platform (XMP) XML metadata, their values, including the XMP namespace, will be appended to the data returned by `getDetails()`. You can read more about what values and namespaces are commonly used in the [XMP Specifications](https://github.com/adobe/XMP-Toolkit-SDK/tree/main/docs).
+
+```php
+Array
+(
+    ...
+    [Pages] => 35
+    [dc:creator] => My Name
+    [pdf:producer] => Adobe Acrobat
+    [dc:title] => My Document Title
+    ...
+)
+```
+
+Some XMP metadata values may have multiple values, or even named children with their own values. In these cases, the value will be an array. The XMP metadata will follow the structure of the XML so it is possible to have multiple levels of nested values.
+
+```php
+Array
+(
+    ...
+    [dc:title] => My Document Title
+    [xmptpg:maxpagesize] => Array
+    (
+        [stdim:w] => 21.500000
+        [stdim:h] => 6.222222
+        [stdim:unit] => Inches
+    )
+    [xmptpg:platenames] => Array
+    (
+        [0] => Cyan
+        [1] => Magenta
+        [2] => Yellow
+        [3] => Black
+    )
+    ...
+)
+```
+
+
+## Read Base64 encoded PDFs
+
+If working with [Base64](https://en.wikipedia.org/wiki/Base64) encoded PDFs, you might want to parse the PDF without saving the file to disk.
+This sample will parse the Base64 encoded PDF and extract text from each page.
+
+```php
+<?php
+// Parse Base64 encoded PDF string and build necessary objects.
+$parser = new \Smalot\PdfParser\Parser();
+$pdf = $parser->parseContent(base64_decode($base64PDF));
+
+$text = $pdf->getText();
+echo $text;
+```
+
+## Calculate text width
+
+Try to calculate text width for given font.
+Characters without width are added to `$missing` array in second parameter.
+
+```php
+$parser = new \Smalot\PdfParser\Parser();
+$pdf = $parser->parseFile('document.pdf');
+$fonts = $pdf->getFonts();
+// get first font (we assume here there is at least one)
+$font = reset($fonts);
+// get width
+$width = $font->calculateTextWidth('Some text', $missing);
+```
+
+## Get pages width and height
+
+Ref: [#472](https://github.com/smalot/pdfparser/issues/427#issuecomment-973416786)
+
+```php
+$parser = new \Smalot\PdfParser\Parser();
+$pdf = $parser->parseFile('document.pdf');
+$pages = $pdf->getPages();
+// this variable will contain the height and width of each page of the given PDF
+$mediaBox = [];
+foreach ($pages as $page) {
+    $details = $page->getDetails();
+    // If Mediabox is not set in details of current $page instance, get details from the header instead
+    if (!isset($details['MediaBox'])) {
+        $pages = $pdf->getObjectsByType('Pages');
+        $details = reset($pages)->getHeader()->getDetails();
+    }
+    $mediaBox[] = [
+        'width' => $details['MediaBox'][2],
+        'height' => $details['MediaBox'][3]
+    ];
+}
+```
+
+## PDF encryption
+
+This library cannot currently read encrypted PDF files, i.e. those with
+a read password.  Attempting to do so produces this error:
+```
+Exception: Secured pdf file are currently not supported.
+```
+
+See `setIgnoreEncryption` option in [CustomConfig.md](CustomConfig.md)
+for how to override the check in specific cases.
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/phpunit-windows.xml
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/phpunit-windows.xml	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/phpunit-windows.xml	(revision 8435)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- https://phpunit.de/manual/current/en/appendixes.configuration.html -->
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.0/phpunit.xsd" backupGlobals="false" bootstrap="vendor\autoload.php" colors="true" processIsolation="false" stopOnFailure="false" cacheDirectory=".phpunit.cache" backupStaticProperties="false">
+  <coverage>
+    <include>
+      <directory>src</directory>
+    </include>
+  </coverage>
+  <php>
+    <ini name="error_reporting" value="-1"/>
+    <ini name="zend.enable_gc" value="0"/>
+    <ini name="error_reporting" value="-1"/>
+    <ini name="intl.error_level" value="0"/>
+    <ini name="display_errors" value="On"/>
+  </php>
+  <testsuites>
+    <testsuite name="all">
+      <directory>tests/PHPUnit</directory>
+    </testsuite>
+  </testsuites>
+</phpunit>
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Config.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Config.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Config.php	(revision 8435)
@@ -0,0 +1,175 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  Konrad Abicht <hi@inspirito.de>
+ *
+ * @date    2020-11-22
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser;
+
+/**
+ * This class contains configurations used in various classes. You can override them
+ * manually, in case default values aren't working.
+ *
+ * @see https://github.com/smalot/pdfparser/issues/305
+ */
+class Config
+{
+    private $fontSpaceLimit = -50;
+
+    /**
+     * @var string
+     */
+    private $horizontalOffset = ' ';
+
+    /**
+     * Represents: (NUL, HT, LF, FF, CR, SP)
+     *
+     * @var string
+     */
+    private $pdfWhitespaces = "\0\t\n\f\r ";
+
+    /**
+     * Represents: (NUL, HT, LF, FF, CR, SP)
+     *
+     * @var string
+     */
+    private $pdfWhitespacesRegex = '[\0\t\n\f\r ]';
+
+    /**
+     * Whether to retain raw image data as content or discard it to save memory
+     *
+     * @var bool
+     */
+    private $retainImageContent = true;
+
+    /**
+     * Memory limit to use when de-compressing files, in bytes.
+     *
+     * @var int
+     */
+    private $decodeMemoryLimit = 0;
+
+    /**
+     * Whether to include font id and size in dataTm array
+     *
+     * @var bool
+     */
+    private $dataTmFontInfoHasToBeIncluded = false;
+
+    /**
+     * Whether to attempt to read PDFs even if they are marked as encrypted.
+     *
+     * @var bool
+     */
+    private $ignoreEncryption = false;
+
+    public function getFontSpaceLimit()
+    {
+        return $this->fontSpaceLimit;
+    }
+
+    public function setFontSpaceLimit($value)
+    {
+        $this->fontSpaceLimit = $value;
+    }
+
+    public function getHorizontalOffset(): string
+    {
+        return $this->horizontalOffset;
+    }
+
+    public function setHorizontalOffset($value): void
+    {
+        $this->horizontalOffset = $value;
+    }
+
+    public function getPdfWhitespaces(): string
+    {
+        return $this->pdfWhitespaces;
+    }
+
+    public function setPdfWhitespaces(string $pdfWhitespaces): void
+    {
+        $this->pdfWhitespaces = $pdfWhitespaces;
+    }
+
+    public function getPdfWhitespacesRegex(): string
+    {
+        return $this->pdfWhitespacesRegex;
+    }
+
+    public function setPdfWhitespacesRegex(string $pdfWhitespacesRegex): void
+    {
+        $this->pdfWhitespacesRegex = $pdfWhitespacesRegex;
+    }
+
+    public function getRetainImageContent(): bool
+    {
+        return $this->retainImageContent;
+    }
+
+    public function setRetainImageContent(bool $retainImageContent): void
+    {
+        $this->retainImageContent = $retainImageContent;
+    }
+
+    public function getDecodeMemoryLimit(): int
+    {
+        return $this->decodeMemoryLimit;
+    }
+
+    public function setDecodeMemoryLimit(int $decodeMemoryLimit): void
+    {
+        $this->decodeMemoryLimit = $decodeMemoryLimit;
+    }
+
+    public function getDataTmFontInfoHasToBeIncluded(): bool
+    {
+        return $this->dataTmFontInfoHasToBeIncluded;
+    }
+
+    public function setDataTmFontInfoHasToBeIncluded(bool $dataTmFontInfoHasToBeIncluded): void
+    {
+        $this->dataTmFontInfoHasToBeIncluded = $dataTmFontInfoHasToBeIncluded;
+    }
+
+    public function getIgnoreEncryption(): bool
+    {
+        return $this->ignoreEncryption;
+    }
+
+    /**
+     * @deprecated this is a temporary workaround, don't rely on it
+     * @see https://github.com/smalot/pdfparser/pull/653
+     */
+    public function setIgnoreEncryption(bool $ignoreEncryption): void
+    {
+        $this->ignoreEncryption = $ignoreEncryption;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Document.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Document.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Document.php	(revision 8435)
@@ -0,0 +1,460 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser;
+
+use Smalot\PdfParser\Encoding\PDFDocEncoding;
+
+/**
+ * Technical references :
+ * - http://www.mactech.com/articles/mactech/Vol.15/15.09/PDFIntro/index.html
+ * - http://framework.zend.com/issues/secure/attachment/12512/Pdf.php
+ * - http://www.php.net/manual/en/ref.pdf.php#74211
+ * - http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/ISOLatin1Encoding.pm
+ * - http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/ISOLatin9Encoding.pm
+ * - http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/StandardEncoding.pm
+ * - http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/WinAnsiEncoding.pm
+ *
+ * Class Document
+ */
+class Document
+{
+    /**
+     * @var PDFObject[]
+     */
+    protected $objects = [];
+
+    /**
+     * @var array
+     */
+    protected $dictionary = [];
+
+    /**
+     * @var Header
+     */
+    protected $trailer;
+
+    /**
+     * @var array<mixed>
+     */
+    protected $metadata = [];
+
+    /**
+     * @var array
+     */
+    protected $details;
+
+    public function __construct()
+    {
+        $this->trailer = new Header([], $this);
+    }
+
+    public function init()
+    {
+        $this->buildDictionary();
+
+        $this->buildDetails();
+
+        // Propagate init to objects.
+        foreach ($this->objects as $object) {
+            $object->getHeader()->init();
+            $object->init();
+        }
+    }
+
+    /**
+     * Build dictionary based on type header field.
+     */
+    protected function buildDictionary()
+    {
+        // Build dictionary.
+        $this->dictionary = [];
+
+        foreach ($this->objects as $id => $object) {
+            // Cache objects by type and subtype
+            $type = $object->getHeader()->get('Type')->getContent();
+
+            if (null != $type) {
+                if (!isset($this->dictionary[$type])) {
+                    $this->dictionary[$type] = [
+                        'all' => [],
+                        'subtype' => [],
+                    ];
+                }
+
+                $this->dictionary[$type]['all'][$id] = $object;
+
+                $subtype = $object->getHeader()->get('Subtype')->getContent();
+                if (null != $subtype) {
+                    if (!isset($this->dictionary[$type]['subtype'][$subtype])) {
+                        $this->dictionary[$type]['subtype'][$subtype] = [];
+                    }
+                    $this->dictionary[$type]['subtype'][$subtype][$id] = $object;
+                }
+            }
+        }
+    }
+
+    /**
+     * Build details array.
+     */
+    protected function buildDetails()
+    {
+        // Build details array.
+        $details = [];
+
+        // Extract document info
+        if ($this->trailer->has('Info')) {
+            /** @var PDFObject $info */
+            $info = $this->trailer->get('Info');
+            // This could be an ElementMissing object, so we need to check for
+            // the getHeader method first.
+            if (null !== $info && method_exists($info, 'getHeader')) {
+                $details = $info->getHeader()->getDetails();
+            }
+        }
+
+        // Retrieve the page count
+        try {
+            $pages = $this->getPages();
+            $details['Pages'] = \count($pages);
+        } catch (\Exception $e) {
+            $details['Pages'] = 0;
+        }
+
+        // Decode and repair encoded document properties
+        foreach ($details as $key => $value) {
+            if (\is_string($value)) {
+                // If the string is already UTF-8 encoded, that means we only
+                // need to repair Adobe's ham-fisted insertion of line-feeds
+                // every ~127 characters, which doesn't seem to be multi-byte
+                // safe
+                if (mb_check_encoding($value, 'UTF-8')) {
+                    // Remove literal backslash + line-feed "\\r"
+                    $value = str_replace("\x5c\x0d", '', $value);
+
+                    // Remove backslash plus bytes written into high part of
+                    // multibyte unicode character
+                    while (preg_match("/\x5c\x5c\xe0([\xb4-\xb8])(.)/", $value, $match)) {
+                        $diff = (\ord($match[1]) - 182) * 64;
+                        $newbyte = PDFDocEncoding::convertPDFDoc2UTF8(\chr(\ord($match[2]) + $diff));
+                        $value = preg_replace("/\x5c\x5c\xe0".$match[1].$match[2].'/', $newbyte, $value);
+                    }
+
+                    // Remove bytes written into low part of multibyte unicode
+                    // character
+                    while (preg_match("/(.)\x9c\xe0([\xb3-\xb7])/", $value, $match)) {
+                        $diff = \ord($match[2]) - 181;
+                        $newbyte = \chr(\ord($match[1]) + $diff);
+                        $value = preg_replace('/'.$match[1]."\x9c\xe0".$match[2].'/', $newbyte, $value);
+                    }
+
+                    // Remove this byte string that Adobe occasionally adds
+                    // between two single byte characters in a unicode string
+                    $value = str_replace("\xe5\xb0\x8d", '', $value);
+
+                    $details[$key] = $value;
+                } else {
+                    // If the string is just PDFDocEncoding, remove any line-feeds
+                    // and decode the whole thing.
+                    $value = str_replace("\\\r", '', $value);
+                    $details[$key] = PDFDocEncoding::convertPDFDoc2UTF8($value);
+                }
+            }
+        }
+
+        $details = array_merge($details, $this->metadata);
+
+        $this->details = $details;
+    }
+
+    /**
+     * Extract XMP Metadata
+     */
+    public function extractXMPMetadata(string $content): void
+    {
+        $xml = xml_parser_create();
+        xml_parser_set_option($xml, \XML_OPTION_SKIP_WHITE, 1);
+
+        if (1 === xml_parse_into_struct($xml, $content, $values, $index)) {
+            /*
+             * short overview about the following code parts:
+             *
+             * The output of xml_parse_into_struct is a single dimensional array (= $values), and the $stack is a last-on,
+             * first-off array of pointers to positions in $metadata, while iterating through it, that potentially turn the
+             * results into a more intuitive multi-dimensional array. When an "open" XML tag is encountered,
+             * we save the current $metadata context in the $stack, then create a child array of $metadata and
+             * make that the current $metadata context. When a "close" XML tag is encountered, the operations are
+             * reversed: the most recently added $metadata context from $stack (IOW, the parent of the current
+             * element) is set as the current $metadata context.
+             */
+            $metadata = [];
+            $stack = [];
+            foreach ($values as $val) {
+                // Standardize to lowercase
+                $val['tag'] = strtolower($val['tag']);
+
+                // Ignore structural x: and rdf: XML elements
+                if (0 === strpos($val['tag'], 'x:')) {
+                    continue;
+                } elseif (0 === strpos($val['tag'], 'rdf:') && 'rdf:li' != $val['tag']) {
+                    continue;
+                }
+
+                switch ($val['type']) {
+                    case 'open':
+                        // Create an array of list items
+                        if ('rdf:li' == $val['tag']) {
+                            $metadata[] = [];
+
+                            // Move up one level in the stack
+                            $stack[\count($stack)] = &$metadata;
+                            $metadata = &$metadata[\count($metadata) - 1];
+                        } else {
+                            // Else create an array of named values
+                            $metadata[$val['tag']] = [];
+
+                            // Move up one level in the stack
+                            $stack[\count($stack)] = &$metadata;
+                            $metadata = &$metadata[$val['tag']];
+                        }
+                        break;
+
+                    case 'complete':
+                        if (isset($val['value'])) {
+                            // Assign a value to this list item
+                            if ('rdf:li' == $val['tag']) {
+                                $metadata[] = $val['value'];
+
+                            // Else assign a value to this property
+                            } else {
+                                $metadata[$val['tag']] = $val['value'];
+                            }
+                        }
+                        break;
+
+                    case 'close':
+                        // If the value of this property is an array
+                        if (\is_array($metadata)) {
+                            // If the value is a single element array
+                            // where the element is of type string, use
+                            // the value of the first list item as the
+                            // value for this property
+                            if (1 == \count($metadata) && isset($metadata[0]) && \is_string($metadata[0])) {
+                                $metadata = $metadata[0];
+                            } elseif (0 == \count($metadata)) {
+                                // if the value is an empty array, set
+                                // the value of this property to the empty
+                                // string
+                                $metadata = '';
+                            }
+                        }
+
+                        // Move down one level in the stack
+                        $metadata = &$stack[\count($stack) - 1];
+                        unset($stack[\count($stack) - 1]);
+                        break;
+                }
+            }
+
+            // Only use this metadata if it's referring to a PDF
+            if (!isset($metadata['dc:format']) || 'application/pdf' == $metadata['dc:format']) {
+                // According to the XMP specifications: 'Conflict resolution
+                // for separate packets that describe the same resource is
+                // beyond the scope of this document.' - Section 6.1
+                // Source: https://www.adobe.com/devnet/xmp.html
+                // Source: https://github.com/adobe/XMP-Toolkit-SDK/blob/main/docs/XMPSpecificationPart1.pdf
+                // So if there are multiple XMP blocks, just merge the values
+                // of each found block over top of the existing values
+                $this->metadata = array_merge($this->metadata, $metadata);
+            }
+        }
+        xml_parser_free($xml);
+    }
+
+    public function getDictionary(): array
+    {
+        return $this->dictionary;
+    }
+
+    /**
+     * @param PDFObject[] $objects
+     */
+    public function setObjects($objects = [])
+    {
+        $this->objects = (array) $objects;
+
+        $this->init();
+    }
+
+    /**
+     * @return PDFObject[]
+     */
+    public function getObjects()
+    {
+        return $this->objects;
+    }
+
+    /**
+     * @return PDFObject|Font|Page|Element|null
+     */
+    public function getObjectById(string $id)
+    {
+        if (isset($this->objects[$id])) {
+            return $this->objects[$id];
+        }
+
+        return null;
+    }
+
+    public function hasObjectsByType(string $type, ?string $subtype = null): bool
+    {
+        return 0 < \count($this->getObjectsByType($type, $subtype));
+    }
+
+    public function getObjectsByType(string $type, ?string $subtype = null): array
+    {
+        if (!isset($this->dictionary[$type])) {
+            return [];
+        }
+
+        if (null != $subtype) {
+            if (!isset($this->dictionary[$type]['subtype'][$subtype])) {
+                return [];
+            }
+
+            return $this->dictionary[$type]['subtype'][$subtype];
+        }
+
+        return $this->dictionary[$type]['all'];
+    }
+
+    /**
+     * @return Font[]
+     */
+    public function getFonts()
+    {
+        return $this->getObjectsByType('Font');
+    }
+
+    public function getFirstFont(): ?Font
+    {
+        $fonts = $this->getFonts();
+        if ([] === $fonts) {
+            return null;
+        }
+
+        return reset($fonts);
+    }
+
+    /**
+     * @return Page[]
+     *
+     * @throws \Exception
+     */
+    public function getPages()
+    {
+        if ($this->hasObjectsByType('Catalog')) {
+            // Search for catalog to list pages.
+            $catalogues = $this->getObjectsByType('Catalog');
+            $catalogue = reset($catalogues);
+
+            /** @var Pages $object */
+            $object = $catalogue->get('Pages');
+            if (method_exists($object, 'getPages')) {
+                return $object->getPages(true);
+            }
+        }
+
+        if ($this->hasObjectsByType('Pages')) {
+            // Search for pages to list kids.
+            $pages = [];
+
+            /** @var Pages[] $objects */
+            $objects = $this->getObjectsByType('Pages');
+            foreach ($objects as $object) {
+                $pages = array_merge($pages, $object->getPages(true));
+            }
+
+            return $pages;
+        }
+
+        if ($this->hasObjectsByType('Page')) {
+            // Search for 'page' (unordered pages).
+            $pages = $this->getObjectsByType('Page');
+
+            return array_values($pages);
+        }
+
+        throw new \Exception('Missing catalog.');
+    }
+
+    public function getText(?int $pageLimit = null): string
+    {
+        $texts = [];
+        $pages = $this->getPages();
+
+        // Only use the first X number of pages if $pageLimit is set and numeric.
+        if (\is_int($pageLimit) && 0 < $pageLimit) {
+            $pages = \array_slice($pages, 0, $pageLimit);
+        }
+
+        foreach ($pages as $index => $page) {
+            /**
+             * In some cases, the $page variable may be null.
+             */
+            if (null === $page) {
+                continue;
+            }
+            if ($text = trim($page->getText())) {
+                $texts[] = $text;
+            }
+        }
+
+        return implode("\n\n", $texts);
+    }
+
+    public function getTrailer(): Header
+    {
+        return $this->trailer;
+    }
+
+    public function setTrailer(Header $trailer)
+    {
+        $this->trailer = $trailer;
+    }
+
+    public function getDetails(): array
+    {
+        return $this->details;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element.php	(revision 8435)
@@ -0,0 +1,156 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser;
+
+use Smalot\PdfParser\Element\ElementArray;
+use Smalot\PdfParser\Element\ElementBoolean;
+use Smalot\PdfParser\Element\ElementDate;
+use Smalot\PdfParser\Element\ElementHexa;
+use Smalot\PdfParser\Element\ElementName;
+use Smalot\PdfParser\Element\ElementNull;
+use Smalot\PdfParser\Element\ElementNumeric;
+use Smalot\PdfParser\Element\ElementString;
+use Smalot\PdfParser\Element\ElementStruct;
+use Smalot\PdfParser\Element\ElementXRef;
+
+/**
+ * Class Element
+ */
+class Element
+{
+    /**
+     * @var Document|null
+     */
+    protected $document;
+
+    protected $value;
+
+    public function __construct($value, ?Document $document = null)
+    {
+        $this->value = $value;
+        $this->document = $document;
+    }
+
+    public function init()
+    {
+    }
+
+    public function equals($value): bool
+    {
+        return $value == $this->value;
+    }
+
+    public function contains($value): bool
+    {
+        if (\is_array($this->value)) {
+            /** @var Element $val */
+            foreach ($this->value as $val) {
+                if ($val->equals($value)) {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+        return $this->equals($value);
+    }
+
+    public function getContent()
+    {
+        return $this->value;
+    }
+
+    public function __toString(): string
+    {
+        return (string) $this->value;
+    }
+
+    public static function parse(string $content, ?Document $document = null, int &$position = 0)
+    {
+        $args = \func_get_args();
+        $only_values = isset($args[3]) ? $args[3] : false;
+        $content = trim($content);
+        $values = [];
+
+        do {
+            $old_position = $position;
+
+            if (!$only_values) {
+                if (!preg_match('/\G\s*(?P<name>\/[A-Z#0-9\._]+)(?P<value>.*)/si', $content, $match, 0, $position)) {
+                    break;
+                } else {
+                    $name = preg_replace_callback(
+                        '/#([0-9a-f]{2})/i',
+                        function ($m) {
+                            return \chr(base_convert($m[1], 16, 10));
+                        },
+                        ltrim($match['name'], '/')
+                    );
+                    $value = $match['value'];
+                    $position = strpos($content, $value, $position + \strlen($match['name']));
+                }
+            } else {
+                $name = \count($values);
+                $value = substr($content, $position);
+            }
+
+            if ($element = ElementName::parse($value, $document, $position)) {
+                $values[$name] = $element;
+            } elseif ($element = ElementXRef::parse($value, $document, $position)) {
+                $values[$name] = $element;
+            } elseif ($element = ElementNumeric::parse($value, $document, $position)) {
+                $values[$name] = $element;
+            } elseif ($element = ElementStruct::parse($value, $document, $position)) {
+                $values[$name] = $element;
+            } elseif ($element = ElementBoolean::parse($value, $document, $position)) {
+                $values[$name] = $element;
+            } elseif ($element = ElementNull::parse($value, $document, $position)) {
+                $values[$name] = $element;
+            } elseif ($element = ElementDate::parse($value, $document, $position)) {
+                $values[$name] = $element;
+            } elseif ($element = ElementString::parse($value, $document, $position)) {
+                $values[$name] = $element;
+            } elseif ($element = ElementHexa::parse($value, $document, $position)) {
+                $values[$name] = $element;
+            } elseif ($element = ElementArray::parse($value, $document, $position)) {
+                $values[$name] = $element;
+            } else {
+                $position = $old_position;
+                break;
+            }
+        } while ($position < \strlen($content));
+
+        return $values;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementArray.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementArray.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementArray.php	(revision 8435)
@@ -0,0 +1,139 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Element;
+
+use Smalot\PdfParser\Document;
+use Smalot\PdfParser\Element;
+use Smalot\PdfParser\Header;
+use Smalot\PdfParser\PDFObject;
+
+/**
+ * Class ElementArray
+ */
+class ElementArray extends Element
+{
+    public function __construct($value, ?Document $document = null)
+    {
+        parent::__construct($value, $document);
+    }
+
+    public function getContent()
+    {
+        foreach ($this->value as $name => $element) {
+            $this->resolveXRef($name);
+        }
+
+        return parent::getContent();
+    }
+
+    public function getRawContent(): array
+    {
+        return $this->value;
+    }
+
+    public function getDetails(bool $deep = true): array
+    {
+        $values = [];
+        $elements = $this->getContent();
+
+        foreach ($elements as $key => $element) {
+            if ($element instanceof Header && $deep) {
+                $values[$key] = $element->getDetails($deep);
+            } elseif ($element instanceof PDFObject && $deep) {
+                $values[$key] = $element->getDetails(false);
+            } elseif ($element instanceof self) {
+                if ($deep) {
+                    $values[$key] = $element->getDetails();
+                }
+            } elseif ($element instanceof Element && !($element instanceof self)) {
+                $values[$key] = $element->getContent();
+            }
+        }
+
+        return $values;
+    }
+
+    public function __toString(): string
+    {
+        return implode(',', $this->value);
+    }
+
+    /**
+     * @return Element|PDFObject
+     */
+    protected function resolveXRef(string $name)
+    {
+        if (($obj = $this->value[$name]) instanceof ElementXRef) {
+            /** @var ElementXRef $obj */
+            $obj = $this->document->getObjectById($obj->getId());
+            $this->value[$name] = $obj;
+        }
+
+        return $this->value[$name];
+    }
+
+    /**
+     * @todo: These methods return mixed and mismatched types throughout the hierarchy
+     *
+     * @return bool|ElementArray
+     */
+    public static function parse(string $content, ?Document $document = null, int &$offset = 0)
+    {
+        if (preg_match('/^\s*\[(?P<array>.*)/is', $content, $match)) {
+            preg_match_all('/(.*?)(\[|\])/s', trim($content), $matches);
+
+            $level = 0;
+            $sub = '';
+            foreach ($matches[0] as $part) {
+                $sub .= $part;
+                $level += (false !== strpos($part, '[') ? 1 : -1);
+                if ($level <= 0) {
+                    break;
+                }
+            }
+
+            // Removes 1 level [ and ].
+            $sub = substr(trim($sub), 1, -1);
+            $sub_offset = 0;
+            $values = Element::parse($sub, $document, $sub_offset, true);
+
+            $offset += strpos($content, '[') + 1;
+            // Find next ']' position
+            $offset += \strlen($sub) + 1;
+
+            return new self($values, $document);
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementBoolean.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementBoolean.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementBoolean.php	(revision 8435)
@@ -0,0 +1,75 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Element;
+
+use Smalot\PdfParser\Document;
+use Smalot\PdfParser\Element;
+
+/**
+ * Class ElementBoolean
+ */
+class ElementBoolean extends Element
+{
+    /**
+     * @param string|bool $value
+     */
+    public function __construct($value)
+    {
+        parent::__construct('true' == strtolower($value) || true === $value, null);
+    }
+
+    public function __toString(): string
+    {
+        return $this->value ? 'true' : 'false';
+    }
+
+    public function equals($value): bool
+    {
+        return $this->getContent() === $value;
+    }
+
+    /**
+     * @return bool|ElementBoolean
+     */
+    public static function parse(string $content, ?Document $document = null, int &$offset = 0)
+    {
+        if (preg_match('/^\s*(?P<value>true|false)/is', $content, $match)) {
+            $value = $match['value'];
+            $offset += strpos($content, $value) + \strlen($value);
+
+            return new self($value);
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementDate.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementDate.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementDate.php	(revision 8435)
@@ -0,0 +1,139 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHPi, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Element;
+
+use Smalot\PdfParser\Document;
+
+/**
+ * Class ElementDate
+ */
+class ElementDate extends ElementString
+{
+    /**
+     * @var array<int,string>
+     */
+    protected static $formats = [
+        4 => 'Y',
+        6 => 'Ym',
+        8 => 'Ymd',
+        10 => 'YmdH',
+        12 => 'YmdHi',
+        14 => 'YmdHis',
+        15 => 'YmdHise',
+        17 => 'YmdHisO',
+        18 => 'YmdHisO',
+        19 => 'YmdHisO',
+    ];
+
+    /**
+     * @var string
+     */
+    protected $format = 'c';
+
+    /**
+     * @var \DateTime
+     */
+    protected $value;
+
+    public function __construct($value)
+    {
+        if (!($value instanceof \DateTime)) {
+            throw new \Exception('DateTime required.'); // FIXME: Sometimes strings are passed to this function
+        }
+
+        parent::__construct($value);
+    }
+
+    public function setFormat(string $format)
+    {
+        $this->format = $format;
+    }
+
+    public function equals($value): bool
+    {
+        if ($value instanceof \DateTime) {
+            $timestamp = $value->getTimeStamp();
+        } else {
+            $timestamp = strtotime($value);
+        }
+
+        return $timestamp == $this->value->getTimeStamp();
+    }
+
+    public function __toString(): string
+    {
+        return (string) $this->value->format($this->format);
+    }
+
+    /**
+     * @return bool|ElementDate
+     */
+    public static function parse(string $content, ?Document $document = null, int &$offset = 0)
+    {
+        if (preg_match('/^\s*\(D\:(?P<name>.*?)\)/s', $content, $match)) {
+            $name = $match['name'];
+            $name = str_replace("'", '', $name);
+            $date = false;
+
+            // Smallest format : Y
+            // Full format     : YmdHisP
+            if (preg_match('/^\d{4}(\d{2}(\d{2}(\d{2}(\d{2}(\d{2}(Z(\d{2,4})?|[\+-]?\d{2}(\d{2})?)?)?)?)?)?)?$/', $name)) {
+                if ($pos = strpos($name, 'Z')) {
+                    $name = substr($name, 0, $pos + 1);
+                } elseif (18 == \strlen($name) && preg_match('/[^\+-]0000$/', $name)) {
+                    $name = substr($name, 0, -4).'+0000';
+                }
+
+                $format = self::$formats[\strlen($name)];
+                $date = \DateTime::createFromFormat($format, $name, new \DateTimeZone('UTC'));
+            } else {
+                // special cases
+                if (preg_match('/^\d{1,2}-\d{1,2}-\d{4},?\s+\d{2}:\d{2}:\d{2}[\+-]\d{4}$/', $name)) {
+                    $name = str_replace(',', '', $name);
+                    $format = 'n-j-Y H:i:sO';
+                    $date = \DateTime::createFromFormat($format, $name, new \DateTimeZone('UTC'));
+                }
+            }
+
+            if (!$date) {
+                return false;
+            }
+
+            $offset += strpos($content, '(D:') + \strlen($match['name']) + 4; // 1 for '(D:' and ')'
+
+            return new self($date);
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementHexa.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementHexa.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementHexa.php	(revision 8435)
@@ -0,0 +1,91 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Element;
+
+use Smalot\PdfParser\Document;
+
+/**
+ * Class ElementHexa
+ */
+class ElementHexa extends ElementString
+{
+    /**
+     * @return bool|ElementHexa|ElementDate
+     */
+    public static function parse(string $content, ?Document $document = null, int &$offset = 0)
+    {
+        if (preg_match('/^\s*\<(?P<name>[A-F0-9]+)\>/is', $content, $match)) {
+            $name = $match['name'];
+            $offset += strpos($content, '<'.$name) + \strlen($name) + 2; // 1 for '>'
+            // repackage string as standard
+            $name = '('.self::decode($name).')';
+            $element = ElementDate::parse($name, $document);
+
+            if (!$element) {
+                $element = ElementString::parse($name, $document);
+            }
+
+            return $element;
+        }
+
+        return false;
+    }
+
+    public static function decode(string $value): string
+    {
+        $text = '';
+
+        // Filter $value of non-hexadecimal characters
+        $value = (string) preg_replace('/[^0-9a-f]/i', '', $value);
+
+        // Check for leading zeros (4-byte hexadecimal indicator), or
+        // the BE BOM
+        if ('00' === substr($value, 0, 2) || 'feff' === strtolower(substr($value, 0, 4))) {
+            $value = (string) preg_replace('/^feff/i', '', $value);
+            for ($i = 0, $length = \strlen($value); $i < $length; $i += 4) {
+                $hex = substr($value, $i, 4);
+                $text .= '&#'.str_pad(hexdec($hex), 4, '0', \STR_PAD_LEFT).';';
+            }
+        } else {
+            // Otherwise decode this as 2-byte hexadecimal
+            for ($i = 0, $length = \strlen($value); $i < $length; $i += 2) {
+                $hex = substr($value, $i, 2);
+                $text .= \chr(hexdec($hex));
+            }
+        }
+
+        $text = html_entity_decode($text, \ENT_NOQUOTES, 'UTF-8');
+
+        return $text;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementMissing.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementMissing.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementMissing.php	(revision 8435)
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Element;
+
+use Smalot\PdfParser\Element;
+
+/**
+ * Class ElementMissing
+ */
+class ElementMissing extends Element
+{
+    public function __construct()
+    {
+        parent::__construct(null, null);
+    }
+
+    public function equals($value): bool
+    {
+        return false;
+    }
+
+    public function contains($value): bool
+    {
+        return false;
+    }
+
+    public function getContent(): bool
+    {
+        return false;
+    }
+
+    public function __toString(): string
+    {
+        return '';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementName.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementName.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementName.php	(revision 8435)
@@ -0,0 +1,69 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Element;
+
+use Smalot\PdfParser\Document;
+use Smalot\PdfParser\Element;
+use Smalot\PdfParser\Font;
+
+/**
+ * Class ElementName
+ */
+class ElementName extends Element
+{
+    public function __construct(string $value)
+    {
+        parent::__construct($value, null);
+    }
+
+    public function equals($value): bool
+    {
+        return $value == $this->value;
+    }
+
+    /**
+     * @return bool|ElementName
+     */
+    public static function parse(string $content, ?Document $document = null, int &$offset = 0)
+    {
+        if (preg_match('/^\s*\/([A-Z0-9\-\+,#\.]+)/is', $content, $match)) {
+            $name = $match[1];
+            $offset += strpos($content, $name) + \strlen($name);
+            $name = Font::decodeEntities($name);
+
+            return new self($name);
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNull.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNull.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNull.php	(revision 8435)
@@ -0,0 +1,71 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Element;
+
+use Smalot\PdfParser\Document;
+use Smalot\PdfParser\Element;
+
+/**
+ * Class ElementNull
+ */
+class ElementNull extends Element
+{
+    public function __construct()
+    {
+        parent::__construct(null, null);
+    }
+
+    public function __toString(): string
+    {
+        return 'null';
+    }
+
+    public function equals($value): bool
+    {
+        return $this->getContent() === $value;
+    }
+
+    /**
+     * @return bool|ElementNull
+     */
+    public static function parse(string $content, ?Document $document = null, int &$offset = 0)
+    {
+        if (preg_match('/^\s*(null)/s', $content, $match)) {
+            $offset += strpos($content, 'null') + \strlen('null');
+
+            return new self();
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNumeric.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNumeric.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNumeric.php	(revision 8435)
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Element;
+
+use Smalot\PdfParser\Document;
+use Smalot\PdfParser\Element;
+
+/**
+ * Class ElementNumeric
+ */
+class ElementNumeric extends Element
+{
+    public function __construct(string $value)
+    {
+        parent::__construct((float) $value, null);
+    }
+
+    /**
+     * @return bool|ElementNumeric
+     */
+    public static function parse(string $content, ?Document $document = null, int &$offset = 0)
+    {
+        if (preg_match('/^\s*(?P<value>\-?[0-9\.]+)/s', $content, $match)) {
+            $value = $match['value'];
+            $offset += strpos($content, $value) + \strlen($value);
+
+            return new self($value);
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementString.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementString.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementString.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Element;
+
+use Smalot\PdfParser\Document;
+use Smalot\PdfParser\Element;
+use Smalot\PdfParser\Font;
+
+/**
+ * Class ElementString
+ */
+class ElementString extends Element
+{
+    public function __construct($value)
+    {
+        parent::__construct($value, null);
+    }
+
+    public function equals($value): bool
+    {
+        return $value == $this->value;
+    }
+
+    /**
+     * @return bool|ElementString
+     */
+    public static function parse(string $content, ?Document $document = null, int &$offset = 0)
+    {
+        if (preg_match('/^\s*\((?P<name>.*)/s', $content, $match)) {
+            $name = $match['name'];
+
+            // Find next ')' not escaped.
+            $cur_start_text = $start_search_end = 0;
+            while (false !== ($cur_start_pos = strpos($name, ')', $start_search_end))) {
+                $cur_extract = substr($name, $cur_start_text, $cur_start_pos - $cur_start_text);
+                preg_match('/(?P<escape>[\\\]*)$/s', $cur_extract, $match);
+                if (!(\strlen($match['escape']) % 2)) {
+                    break;
+                }
+                $start_search_end = $cur_start_pos + 1;
+            }
+
+            // Extract string.
+            $name = substr($name, 0, (int) $cur_start_pos);
+            $offset += strpos($content, '(') + $cur_start_pos + 2; // 2 for '(' and ')'
+            $name = str_replace(
+                ['\\\\', '\\ ', '\\/', '\(', '\)', '\n', '\r', '\t'],
+                ['\\',   ' ',   '/',   '(',  ')',  "\n", "\r", "\t"],
+                $name
+            );
+
+            // Decode string.
+            $name = Font::decodeOctal($name);
+            $name = Font::decodeEntities($name);
+            $name = Font::decodeHexadecimal($name, false);
+            $name = Font::decodeUnicode($name);
+
+            return new self($name);
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementStruct.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementStruct.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementStruct.php	(revision 8435)
@@ -0,0 +1,75 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Element;
+
+use Smalot\PdfParser\Document;
+use Smalot\PdfParser\Element;
+use Smalot\PdfParser\Header;
+
+/**
+ * Class ElementStruct
+ */
+class ElementStruct extends Element
+{
+    /**
+     * @return false|Header
+     */
+    public static function parse(string $content, ?Document $document = null, int &$offset = 0)
+    {
+        if (preg_match('/^\s*<<(?P<struct>.*)/is', $content)) {
+            preg_match_all('/(.*?)(<<|>>)/s', trim($content), $matches);
+
+            $level = 0;
+            $sub = '';
+            foreach ($matches[0] as $part) {
+                $sub .= $part;
+                $level += (false !== strpos($part, '<<') ? 1 : -1);
+                if ($level <= 0) {
+                    break;
+                }
+            }
+
+            $offset += strpos($content, '<<') + \strlen(rtrim($sub));
+
+            // Removes '<<' and '>>'.
+            $sub = trim((string) preg_replace('/^\s*<<(.*)>>\s*$/s', '\\1', $sub));
+
+            $position = 0;
+            $elements = Element::parse($sub, $document, $position);
+
+            return new Header($elements, $document);
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementXRef.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementXRef.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementXRef.php	(revision 8435)
@@ -0,0 +1,98 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Element;
+
+use Smalot\PdfParser\Document;
+use Smalot\PdfParser\Element;
+
+/**
+ * Class ElementXRef
+ */
+class ElementXRef extends Element
+{
+    public function getId(): string
+    {
+        return $this->getContent();
+    }
+
+    public function getObject()
+    {
+        return $this->document->getObjectById($this->getId());
+    }
+
+    public function equals($value): bool
+    {
+        /**
+         * In case $value is a number and $this->value is a string like 5_0
+         *
+         * Without this if-clause code like:
+         *
+         *      $element = new ElementXRef('5_0');
+         *      $this->assertTrue($element->equals(5));
+         *
+         * would fail (= 5_0 and 5 are not equal in PHP 8.0+).
+         */
+        if (
+            true === is_numeric($value)
+            && true === \is_string($this->getContent())
+            && 1 === preg_match('/[0-9]+\_[0-9]+/', $this->getContent(), $matches)
+        ) {
+            return (float) $this->getContent() == $value;
+        }
+
+        $id = ($value instanceof self) ? $value->getId() : $value;
+
+        return $this->getId() == $id;
+    }
+
+    public function __toString(): string
+    {
+        return '#Obj#'.$this->getId();
+    }
+
+    /**
+     * @return bool|ElementXRef
+     */
+    public static function parse(string $content, ?Document $document = null, int &$offset = 0)
+    {
+        if (preg_match('/^\s*(?P<id>[0-9]+\s+[0-9]+\s+R)/s', $content, $match)) {
+            $id = $match['id'];
+            $offset += strpos($content, $id) + \strlen($id);
+            $id = str_replace(' ', '_', rtrim($id, ' R'));
+
+            return new self($id, $document);
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding.php	(revision 8435)
@@ -0,0 +1,162 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser;
+
+use Smalot\PdfParser\Element\ElementNumeric;
+use Smalot\PdfParser\Encoding\EncodingLocator;
+use Smalot\PdfParser\Encoding\PostScriptGlyphs;
+use Smalot\PdfParser\Exception\EncodingNotFoundException;
+
+/**
+ * Class Encoding
+ */
+class Encoding extends PDFObject
+{
+    /**
+     * @var array
+     */
+    protected $encoding;
+
+    /**
+     * @var array
+     */
+    protected $differences;
+
+    /**
+     * @var array
+     */
+    protected $mapping;
+
+    public function init()
+    {
+        $this->mapping = [];
+        $this->differences = [];
+        $this->encoding = [];
+
+        if ($this->has('BaseEncoding')) {
+            $this->encoding = EncodingLocator::getEncoding($this->getEncodingClass())->getTranslations();
+
+            // Build table including differences.
+            $differences = $this->get('Differences')->getContent();
+            $code = 0;
+
+            if (!\is_array($differences)) {
+                return;
+            }
+
+            foreach ($differences as $difference) {
+                /** @var ElementNumeric $difference */
+                if ($difference instanceof ElementNumeric) {
+                    $code = $difference->getContent();
+                    continue;
+                }
+
+                // ElementName
+                $this->differences[$code] = $difference;
+                if (\is_object($difference)) {
+                    $this->differences[$code] = $difference->getContent();
+                }
+
+                // For the next char.
+                ++$code;
+            }
+
+            $this->mapping = $this->encoding;
+            foreach ($this->differences as $code => $difference) {
+                /* @var string $difference */
+                $this->mapping[$code] = $difference;
+            }
+        }
+    }
+
+    public function getDetails(bool $deep = true): array
+    {
+        $details = [];
+
+        $details['BaseEncoding'] = ($this->has('BaseEncoding') ? (string) $this->get('BaseEncoding') : 'Ansi');
+        $details['Differences'] = ($this->has('Differences') ? (string) $this->get('Differences') : '');
+
+        $details += parent::getDetails($deep);
+
+        return $details;
+    }
+
+    public function translateChar($dec): ?int
+    {
+        if (isset($this->mapping[$dec])) {
+            $dec = $this->mapping[$dec];
+        }
+
+        return PostScriptGlyphs::getCodePoint($dec);
+    }
+
+    /**
+     * Returns encoding class name if available or empty string (only prior PHP 7.4).
+     *
+     * @throws \Exception On PHP 7.4+ an exception is thrown if encoding class doesn't exist.
+     */
+    public function __toString(): string
+    {
+        try {
+            return $this->getEncodingClass();
+        } catch (\Exception $e) {
+            // prior to PHP 7.4 toString has to return an empty string.
+            if (version_compare(\PHP_VERSION, '7.4.0', '<')) {
+                return '';
+            }
+            throw $e;
+        }
+    }
+
+    /**
+     * @throws EncodingNotFoundException
+     */
+    protected function getEncodingClass(): string
+    {
+        // Load reference table charset.
+        $baseEncoding = preg_replace('/[^A-Z0-9]/is', '', $this->get('BaseEncoding')->getContent());
+
+        // Check for empty BaseEncoding field value
+        if (!\is_string($baseEncoding) || 0 == \strlen($baseEncoding)) {
+            $baseEncoding = 'StandardEncoding';
+        }
+
+        $className = '\\Smalot\\PdfParser\\Encoding\\'.$baseEncoding;
+
+        if (!class_exists($className)) {
+            throw new EncodingNotFoundException('Missing encoding data for: "'.$baseEncoding.'".');
+        }
+
+        return $className;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/AbstractEncoding.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/AbstractEncoding.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/AbstractEncoding.php	(revision 8435)
@@ -0,0 +1,8 @@
+<?php
+
+namespace Smalot\PdfParser\Encoding;
+
+abstract class AbstractEncoding
+{
+    abstract public function getTranslations(): array;
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/EncodingLocator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/EncodingLocator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/EncodingLocator.php	(revision 8435)
@@ -0,0 +1,17 @@
+<?php
+
+namespace Smalot\PdfParser\Encoding;
+
+class EncodingLocator
+{
+    protected static $encodings;
+
+    public static function getEncoding(string $encodingClassName): AbstractEncoding
+    {
+        if (!isset(self::$encodings[$encodingClassName])) {
+            self::$encodings[$encodingClassName] = new $encodingClassName();
+        }
+
+        return self::$encodings[$encodingClassName];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin1Encoding.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin1Encoding.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin1Encoding.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+// Source : http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/ISOLatin1Encoding.pm
+
+namespace Smalot\PdfParser\Encoding;
+
+/**
+ * Class ISOLatin1Encoding
+ */
+class ISOLatin1Encoding extends AbstractEncoding
+{
+    public function getTranslations(): array
+    {
+        $encoding =
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          'space exclam quotedbl numbersign dollar percent ampersand quoteright '.
+          'parenleft parenright asterisk plus comma minus period slash zero one '.
+          'two three four five six seven eight nine colon semicolon less equal '.
+          'greater question at A B C D E F G H I J K L M N O P Q R S T U V W X '.
+          'Y Z bracketleft backslash bracketright asciicircum underscore '.
+          'quoteleft a b c d e f g h i j k l m n o p q r s t u v w x y z '.
+          'braceleft bar braceright asciitilde .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef dotlessi grave acute '.
+          'circumflex tilde macron breve dotaccent dieresis .notdef ring '.
+          'cedilla .notdef hungarumlaut ogonek caron space exclamdown cent '.
+          'sterling currency yen brokenbar section dieresis copyright '.
+          'ordfeminine guillemotleft logicalnot hyphen registered macron degree '.
+          'plusminus twosuperior threesuperior acute mu paragraph '.
+          'periodcentered cedilla onesuperior ordmasculine guillemotright '.
+          'onequarter onehalf threequarters questiondown Agrave Aacute '.
+          'Acircumflex Atilde Adieresis Aring AE Ccedilla Egrave Eacute '.
+          'Ecircumflex Edieresis Igrave Iacute Icircumflex Idieresis Eth Ntilde '.
+          'Ograve Oacute Ocircumflex Otilde Odieresis multiply Oslash Ugrave '.
+          'Uacute Ucircumflex Udieresis Yacute Thorn germandbls agrave aacute '.
+          'acircumflex atilde adieresis aring ae ccedilla egrave eacute '.
+          'ecircumflex edieresis igrave iacute icircumflex idieresis eth ntilde '.
+          'ograve oacute ocircumflex otilde odieresis divide oslash ugrave '.
+          'uacute ucircumflex udieresis yacute thorn ydieresis';
+
+        return explode(' ', $encoding);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin9Encoding.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin9Encoding.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin9Encoding.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+// Source : http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/ISOLatin9Encoding.pm
+
+namespace Smalot\PdfParser\Encoding;
+
+/**
+ * Class ISOLatin9Encoding
+ */
+class ISOLatin9Encoding extends AbstractEncoding
+{
+    public function getTranslations(): array
+    {
+        $encoding =
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          'space exclam quotedbl numbersign dollar percent ampersand quoteright '.
+          'parenleft parenright asterisk plus comma minus period slash zero one '.
+          'two three four five six seven eight nine colon semicolon less equal '.
+          'greater question at A B C D E F G H I J K L M N O P Q R S T U V W X '.
+          'Y Z bracketleft backslash bracketright asciicircum underscore '.
+          'quoteleft a b c d e f g h i j k l m n o p q r s t u v w x y z '.
+          'braceleft bar braceright asciitilde .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef dotlessi grave acute '.
+          'circumflex tilde macron breve dotaccent dieresis .notdef ring '.
+          'cedilla .notdef hungarumlaut ogonek caron space exclamdown cent '.
+          'sterling Euro yen Scaron section scaron copyright '.
+          'ordfeminine guillemotleft logicalnot hyphen registered macron degree '.
+          'plusminus twosuperior threesuperior Zcaron mu paragraph '.
+          'periodcentered zcaron onesuperior ordmasculine guillemotright '.
+          'OE oe Ydieresis questiondown Agrave Aacute '.
+          'Acircumflex Atilde Adieresis Aring AE Ccedilla Egrave Eacute '.
+          'Ecircumflex Edieresis Igrave Iacute Icircumflex Idieresis Eth Ntilde '.
+          'Ograve Oacute Ocircumflex Otilde Odieresis multiply Oslash Ugrave '.
+          'Uacute Ucircumflex Udieresis Yacute Thorn germandbls agrave aacute '.
+          'acircumflex atilde adieresis aring ae ccedilla egrave eacute '.
+          'ecircumflex edieresis igrave iacute icircumflex idieresis eth ntilde '.
+          'ograve oacute ocircumflex otilde odieresis divide oslash ugrave '.
+          'uacute ucircumflex udieresis yacute thorn ydieresis';
+
+        return explode(' ', $encoding);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/MacRomanEncoding.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/MacRomanEncoding.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/MacRomanEncoding.php	(revision 8435)
@@ -0,0 +1,80 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+// Source : http://www.opensource.apple.com/source/vim/vim-34/vim/runtime/print/mac-roman.ps
+
+namespace Smalot\PdfParser\Encoding;
+
+/**
+ * Class MacRomanEncoding
+ */
+class MacRomanEncoding extends AbstractEncoding
+{
+    public function getTranslations(): array
+    {
+        $encoding =
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          'space exclam quotedbl numbersign dollar percent ampersand quotesingle '.
+          'parenleft parenright asterisk plus comma minus period slash '.
+          'zero one two three four five six seven '.
+          'eight nine colon semicolon less equal greater question '.
+          'at A B C D E F G '.
+          'H I J K L M N O '.
+          'P Q R S T U V W '.
+          'X Y Z bracketleft backslash bracketright asciicircum underscore '.
+          'grave a b c d e f g '.
+          'h i j k l m n o '.
+          'p q r s t u v w '.
+          'x y z braceleft bar braceright asciitilde .notdef '.
+          'Adieresis Aring Ccedilla Eacute Ntilde Odieresis Udieresis aacute '.
+          'agrave acircumflex adieresis atilde aring ccedilla eacute egrave '.
+          'ecircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute '.
+          'ograve ocircumflex odieresis otilde uacute ugrave ucircumflex udieresis '.
+          'dagger degree cent sterling section bullet paragraph germandbls '.
+          'registered copyright trademark acute dieresis notequal AE Oslash '.
+          'infinity plusminus lessequal greaterequal yen mu partialdiff summation '.
+          'Pi pi integral ordfeminine ordmasculine Omega ae oslash '.
+          'questiondown exclamdown logicalnot radical florin approxequal delta guillemotleft '.
+          'guillemotright ellipsis space Agrave Atilde Otilde OE oe '.
+          'endash emdash quotedblleft quotedblright quoteleft quoteright divide lozenge '.
+          'ydieresis Ydieresis fraction currency guilsinglleft guilsinglright fi fl '.
+          'daggerdbl periodcentered quotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute '.
+          'Edieresis Egrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex '.
+          'heart Ograve Uacute Ucircumflex Ugrave dotlessi circumflex tilde '.
+          'macron breve dotaccent ring cedilla hungarumlaut ogonek caron';
+
+        return explode(' ', $encoding);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PDFDocEncoding.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PDFDocEncoding.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PDFDocEncoding.php	(revision 8435)
@@ -0,0 +1,189 @@
+<?php
+
+/**
+ * @file    This file is part of the PdfParser library.
+ *
+ * @author  Brian Huisman <bhuisman@greywyvern.com>
+ *
+ * @date    2023-06-28
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+// Source : https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/pdfreference1.2.pdf
+// Source : https://ia801001.us.archive.org/1/items/pdf1.7/pdf_reference_1-7.pdf
+
+namespace Smalot\PdfParser\Encoding;
+
+/**
+ * Class PDFDocEncoding
+ */
+class PDFDocEncoding
+{
+    public static function getCodePage(): array
+    {
+        return [
+            "\x18" => "\u{02d8}", // breve
+            "\x19" => "\u{02c7}", // caron
+            "\x1a" => "\u{02c6}", // circumflex
+            "\x1b" => "\u{02d9}", // dotaccent
+            "\x1c" => "\u{02dd}", // hungarumlaut
+            "\x1d" => "\u{02db}", // ogonek
+            "\x1e" => "\u{02de}", // ring
+            "\x1f" => "\u{02dc}", // tilde
+            "\x7f" => '',
+            "\x80" => "\u{2022}", // bullet
+            "\x81" => "\u{2020}", // dagger
+            "\x82" => "\u{2021}", // daggerdbl
+            "\x83" => "\u{2026}", // ellipsis
+            "\x84" => "\u{2014}", // emdash
+            "\x85" => "\u{2013}", // endash
+            "\x86" => "\u{0192}", // florin
+            "\x87" => "\u{2044}", // fraction
+            "\x88" => "\u{2039}", // guilsinglleft
+            "\x89" => "\u{203a}", // guilsinglright
+            "\x8a" => "\u{2212}", // minus
+            "\x8b" => "\u{2030}", // perthousand
+            "\x8c" => "\u{201e}", // quotedblbase
+            "\x8d" => "\u{201c}", // quotedblleft
+            "\x8e" => "\u{201d}", // quotedblright
+            "\x8f" => "\u{2018}", // quoteleft
+            "\x90" => "\u{2019}", // quoteright
+            "\x91" => "\u{201a}", // quotesinglbase
+            "\x92" => "\u{2122}", // trademark
+            "\x93" => "\u{fb01}", // fi
+            "\x94" => "\u{fb02}", // fl
+            "\x95" => "\u{0141}", // Lslash
+            "\x96" => "\u{0152}", // OE
+            "\x97" => "\u{0160}", // Scaron
+            "\x98" => "\u{0178}", // Ydieresis
+            "\x99" => "\u{017d}", // Zcaron
+            "\x9a" => "\u{0131}", // dotlessi
+            "\x9b" => "\u{0142}", // lslash
+            "\x9c" => "\u{0153}", // oe
+            "\x9d" => "\u{0161}", // scaron
+            "\x9e" => "\u{017e}", // zcaron
+            "\x9f" => '',
+            "\xa0" => "\u{20ac}", // Euro
+            "\xa1" => "\u{00a1}", // exclamdown
+            "\xa2" => "\u{00a2}", // cent
+            "\xa3" => "\u{00a3}", // sterling
+            "\xa4" => "\u{00a4}", // currency
+            "\xa5" => "\u{00a5}", // yen
+            "\xa6" => "\u{00a6}", // brokenbar
+            "\xa7" => "\u{00a7}", // section
+            "\xa8" => "\u{00a8}", // dieresis
+            "\xa9" => "\u{00a9}", // copyright
+            "\xaa" => "\u{00aa}", // ordfeminine
+            "\xab" => "\u{00ab}", // guillemotleft
+            "\xac" => "\u{00ac}", // logicalnot
+            "\xad" => '',
+            "\xae" => "\u{00ae}", // registered
+            "\xaf" => "\u{00af}", // macron
+            "\xb0" => "\u{00b0}", // degree
+            "\xb1" => "\u{00b1}", // plusminus
+            "\xb2" => "\u{00b2}", // twosuperior
+            "\xb3" => "\u{00b3}", // threesuperior
+            "\xb4" => "\u{00b4}", // acute
+            "\xb5" => "\u{00b5}", // mu
+            "\xb6" => "\u{00b6}", // paragraph
+            "\xb7" => "\u{00b7}", // periodcentered
+            "\xb8" => "\u{00b8}", // cedilla
+            "\xb9" => "\u{00b9}", // onesuperior
+            "\xba" => "\u{00ba}", // ordmasculine
+            "\xbb" => "\u{00bb}", // guillemotright
+            "\xbc" => "\u{00bc}", // onequarter
+            "\xbd" => "\u{00bd}", // onehalf
+            "\xbe" => "\u{00be}", // threequarters
+            "\xbf" => "\u{00bf}", // questiondown
+            "\xc0" => "\u{00c0}", // Agrave
+            "\xc1" => "\u{00c1}", // Aacute
+            "\xc2" => "\u{00c2}", // Acircumflex
+            "\xc3" => "\u{00c3}", // Atilde
+            "\xc4" => "\u{00c4}", // Adieresis
+            "\xc5" => "\u{00c5}", // Aring
+            "\xc6" => "\u{00c6}", // AE
+            "\xc7" => "\u{00c7}", // Ccedill
+            "\xc8" => "\u{00c8}", // Egrave
+            "\xc9" => "\u{00c9}", // Eacute
+            "\xca" => "\u{00ca}", // Ecircumflex
+            "\xcb" => "\u{00cb}", // Edieresis
+            "\xcc" => "\u{00cc}", // Igrave
+            "\xcd" => "\u{00cd}", // Iacute
+            "\xce" => "\u{00ce}", // Icircumflex
+            "\xcf" => "\u{00cf}", // Idieresis
+            "\xd0" => "\u{00d0}", // Eth
+            "\xd1" => "\u{00d1}", // Ntilde
+            "\xd2" => "\u{00d2}", // Ograve
+            "\xd3" => "\u{00d3}", // Oacute
+            "\xd4" => "\u{00d4}", // Ocircumflex
+            "\xd5" => "\u{00d5}", // Otilde
+            "\xd6" => "\u{00d6}", // Odieresis
+            "\xd7" => "\u{00d7}", // multiply
+            "\xd8" => "\u{00d8}", // Oslash
+            "\xd9" => "\u{00d9}", // Ugrave
+            "\xda" => "\u{00da}", // Uacute
+            "\xdb" => "\u{00db}", // Ucircumflex
+            "\xdc" => "\u{00dc}", // Udieresis
+            "\xdd" => "\u{00dd}", // Yacute
+            "\xde" => "\u{00de}", // Thorn
+            "\xdf" => "\u{00df}", // germandbls
+            "\xe0" => "\u{00e0}", // agrave
+            "\xe1" => "\u{00e1}", // aacute
+            "\xe2" => "\u{00e2}", // acircumflex
+            "\xe3" => "\u{00e3}", // atilde
+            "\xe4" => "\u{00e4}", // adieresis
+            "\xe5" => "\u{00e5}", // aring
+            "\xe6" => "\u{00e6}", // ae
+            "\xe7" => "\u{00e7}", // ccedilla
+            "\xe8" => "\u{00e8}", // egrave
+            "\xe9" => "\u{00e9}", // eacute
+            "\xea" => "\u{00ea}", // ecircumflex
+            "\xeb" => "\u{00eb}", // edieresis
+            "\xec" => "\u{00ec}", // igrave
+            "\xed" => "\u{00ed}", // iacute
+            "\xee" => "\u{00ee}", // icircumflex
+            "\xef" => "\u{00ef}", // idieresis
+            "\xf0" => "\u{00f0}", // eth
+            "\xf1" => "\u{00f1}", // ntilde
+            "\xf2" => "\u{00f2}", // ograve
+            "\xf3" => "\u{00f3}", // oacute
+            "\xf4" => "\u{00f4}", // ocircumflex
+            "\xf5" => "\u{00f5}", // otilde
+            "\xf6" => "\u{00f6}", // odieresis
+            "\xf7" => "\u{00f7}", // divide
+            "\xf8" => "\u{00f8}", // oslash
+            "\xf9" => "\u{00f9}", // ugrave
+            "\xfa" => "\u{00fa}", // uacute
+            "\xfb" => "\u{00fb}", // ucircumflex
+            "\xfc" => "\u{00fc}", // udieresis
+            "\xfd" => "\u{00fd}", // yacute
+            "\xfe" => "\u{00fe}", // thorn
+            "\xff" => "\u{00ff}", // ydieresis
+        ];
+    }
+
+    public static function convertPDFDoc2UTF8(string $content): string
+    {
+        return strtr($content, static::getCodePage());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PostScriptGlyphs.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PostScriptGlyphs.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PostScriptGlyphs.php	(revision 8435)
@@ -0,0 +1,1099 @@
+<?php
+
+/**
+ * @file This file is part of the PdfParser library.
+ *
+ * @author  DÄvis MosÄns <davis.mosans@intelligentsystems.lv>
+ *
+ * @date    2019-09-17
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Encoding;
+
+/**
+ * Class PostScriptGlyphs
+ */
+class PostScriptGlyphs
+{
+    /**
+     * The mapping tables have been converted from https://github.com/OpenPrinting/cups-filters/blob/master/fontembed/aglfn13.c,
+     * part of the OpenPrinting/cups-filters package, which itself is licensed under the MIT license and lists this specific code part as:
+     * Copyright 2008,2012 Tobias Hoffmann under the Expat license (https://www.gnu.org/licenses/license-list.html#Expat)
+     */
+    public static function getGlyphs(): array
+    {
+        return [
+            'space' => '0x00a0',
+            'exclam' => '0x0021',
+            'quotedbl' => '0x0022',
+            'numbersign' => '0x0023',
+            'dollar' => '0x0024',
+            'percent' => '0x0025',
+            'ampersand' => '0x0026',
+            'quotesingle' => '0x0027',
+            'parenleft' => '0x0028',
+            'parenright' => '0x0029',
+            'asterisk' => '0x002a',
+            'plus' => '0x002b',
+            'comma' => '0x002c',
+            'hyphen' => '0x002d',
+            'period' => '0x002e',
+            'slash' => '0x002f',
+            'zero' => '0x0030',
+            'one' => '0x0031',
+            'two' => '0x0032',
+            'three' => '0x0033',
+            'four' => '0x0034',
+            'five' => '0x0035',
+            'six' => '0x0036',
+            'seven' => '0x0037',
+            'eight' => '0x0038',
+            'nine' => '0x0039',
+            'colon' => '0x003a',
+            'semicolon' => '0x003b',
+            'less' => '0x003c',
+            'equal' => '0x003d',
+            'greater' => '0x003e',
+            'question' => '0x003f',
+            'at' => '0x0040',
+            'A' => '0x0041',
+            'B' => '0x0042',
+            'C' => '0x0043',
+            'D' => '0x0044',
+            'E' => '0x0045',
+            'F' => '0x0046',
+            'G' => '0x0047',
+            'H' => '0x0048',
+            'I' => '0x0049',
+            'J' => '0x004a',
+            'K' => '0x004b',
+            'L' => '0x004c',
+            'M' => '0x004d',
+            'N' => '0x004e',
+            'O' => '0x004f',
+            'P' => '0x0050',
+            'Q' => '0x0051',
+            'R' => '0x0052',
+            'S' => '0x0053',
+            'T' => '0x0054',
+            'U' => '0x0055',
+            'V' => '0x0056',
+            'W' => '0x0057',
+            'X' => '0x0058',
+            'Y' => '0x0059',
+            'Z' => '0x005a',
+            'bracketleft' => '0x005b',
+            'backslash' => '0x005c',
+            'bracketright' => '0x005d',
+            'asciicircum' => '0x005e',
+            'underscore' => '0x005f',
+            'grave' => '0x0060',
+            'a' => '0x0061',
+            'b' => '0x0062',
+            'c' => '0x0063',
+            'd' => '0x0064',
+            'e' => '0x0065',
+            'f' => '0x0066',
+            'g' => '0x0067',
+            'h' => '0x0068',
+            'i' => '0x0069',
+            'j' => '0x006a',
+            'k' => '0x006b',
+            'l' => '0x006c',
+            'm' => '0x006d',
+            'n' => '0x006e',
+            'o' => '0x006f',
+            'p' => '0x0070',
+            'q' => '0x0071',
+            'r' => '0x0072',
+            's' => '0x0073',
+            't' => '0x0074',
+            'u' => '0x0075',
+            'v' => '0x0076',
+            'w' => '0x0077',
+            'x' => '0x0078',
+            'y' => '0x0079',
+            'z' => '0x007a',
+            'braceleft' => '0x007b',
+            'bar' => '0x007c',
+            'braceright' => '0x007d',
+            'asciitilde' => '0x007e',
+            'exclamdown' => '0x00a1',
+            'cent' => '0x00a2',
+            'sterling' => '0x00a3',
+            'currency' => '0x00a4',
+            'yen' => '0x00a5',
+            'brokenbar' => '0x00a6',
+            'section' => '0x00a7',
+            'dieresis' => '0x00a8',
+            'copyright' => '0x00a9',
+            'ordfeminine' => '0x00aa',
+            'guillemotleft' => '0x00ab',
+            'logicalnot' => '0x00ac',
+            'minus' => '0x2212',
+            'registered' => '0x00ae',
+            'macron' => '0x02c9',
+            'degree' => '0x00b0',
+            'plusminus' => '0x00b1',
+            'twosuperior' => '0x00b2',
+            'threesuperior' => '0x00b3',
+            'acute' => '0x00b4',
+            'mu' => '0x03bc',
+            'paragraph' => '0x00b6',
+            'periodcentered' => '0x2219',
+            'cedilla' => '0x00b8',
+            'onesuperior' => '0x00b9',
+            'ordmasculine' => '0x00ba',
+            'guillemotright' => '0x00bb',
+            'onequarter' => '0x00bc',
+            'onehalf' => '0x00bd',
+            'threequarters' => '0x00be',
+            'questiondown' => '0x00bf',
+            'Agrave' => '0x00c0',
+            'Aacute' => '0x00c1',
+            'Acircumflex' => '0x00c2',
+            'Atilde' => '0x00c3',
+            'Adieresis' => '0x00c4',
+            'Aring' => '0x00c5',
+            'AE' => '0x00c6',
+            'Ccedilla' => '0x00c7',
+            'Egrave' => '0x00c8',
+            'Eacute' => '0x00c9',
+            'Ecircumflex' => '0x00ca',
+            'Edieresis' => '0x00cb',
+            'Igrave' => '0x00cc',
+            'Iacute' => '0x00cd',
+            'Icircumflex' => '0x00ce',
+            'Idieresis' => '0x00cf',
+            'Eth' => '0x00d0',
+            'Ntilde' => '0x00d1',
+            'Ograve' => '0x00d2',
+            'Oacute' => '0x00d3',
+            'Ocircumflex' => '0x00d4',
+            'Otilde' => '0x00d5',
+            'Odieresis' => '0x00d6',
+            'multiply' => '0x00d7',
+            'Oslash' => '0x00d8',
+            'Ugrave' => '0x00d9',
+            'Uacute' => '0x00da',
+            'Ucircumflex' => '0x00db',
+            'Udieresis' => '0x00dc',
+            'Yacute' => '0x00dd',
+            'Thorn' => '0x00de',
+            'germandbls' => '0x00df',
+            'agrave' => '0x00e0',
+            'aacute' => '0x00e1',
+            'acircumflex' => '0x00e2',
+            'atilde' => '0x00e3',
+            'adieresis' => '0x00e4',
+            'aring' => '0x00e5',
+            'ae' => '0x00e6',
+            'ccedilla' => '0x00e7',
+            'egrave' => '0x00e8',
+            'eacute' => '0x00e9',
+            'ecircumflex' => '0x00ea',
+            'edieresis' => '0x00eb',
+            'igrave' => '0x00ec',
+            'iacute' => '0x00ed',
+            'icircumflex' => '0x00ee',
+            'idieresis' => '0x00ef',
+            'eth' => '0x00f0',
+            'ntilde' => '0x00f1',
+            'ograve' => '0x00f2',
+            'oacute' => '0x00f3',
+            'ocircumflex' => '0x00f4',
+            'otilde' => '0x00f5',
+            'odieresis' => '0x00f6',
+            'divide' => '0x00f7',
+            'oslash' => '0x00f8',
+            'ugrave' => '0x00f9',
+            'uacute' => '0x00fa',
+            'ucircumflex' => '0x00fb',
+            'udieresis' => '0x00fc',
+            'yacute' => '0x00fd',
+            'thorn' => '0x00fe',
+            'ydieresis' => '0x00ff',
+            'Amacron' => '0x0100',
+            'amacron' => '0x0101',
+            'Abreve' => '0x0102',
+            'abreve' => '0x0103',
+            'Aogonek' => '0x0104',
+            'aogonek' => '0x0105',
+            'Cacute' => '0x0106',
+            'cacute' => '0x0107',
+            'Ccircumflex' => '0x0108',
+            'ccircumflex' => '0x0109',
+            'Cdotaccent' => '0x010a',
+            'cdotaccent' => '0x010b',
+            'Ccaron' => '0x010c',
+            'ccaron' => '0x010d',
+            'Dcaron' => '0x010e',
+            'dcaron' => '0x010f',
+            'Dcroat' => '0x0110',
+            'dcroat' => '0x0111',
+            'Emacron' => '0x0112',
+            'emacron' => '0x0113',
+            'Ebreve' => '0x0114',
+            'ebreve' => '0x0115',
+            'Edotaccent' => '0x0116',
+            'edotaccent' => '0x0117',
+            'Eogonek' => '0x0118',
+            'eogonek' => '0x0119',
+            'Ecaron' => '0x011a',
+            'ecaron' => '0x011b',
+            'Gcircumflex' => '0x011c',
+            'gcircumflex' => '0x011d',
+            'Gbreve' => '0x011e',
+            'gbreve' => '0x011f',
+            'Gdotaccent' => '0x0120',
+            'gdotaccent' => '0x0121',
+            'Gcommaaccent' => '0x0122',
+            'gcommaaccent' => '0x0123',
+            'Hcircumflex' => '0x0124',
+            'hcircumflex' => '0x0125',
+            'Hbar' => '0x0126',
+            'hbar' => '0x0127',
+            'Itilde' => '0x0128',
+            'itilde' => '0x0129',
+            'Imacron' => '0x012a',
+            'imacron' => '0x012b',
+            'Ibreve' => '0x012c',
+            'ibreve' => '0x012d',
+            'Iogonek' => '0x012e',
+            'iogonek' => '0x012f',
+            'Idotaccent' => '0x0130',
+            'dotlessi' => '0x0131',
+            'IJ' => '0x0132',
+            'ij' => '0x0133',
+            'Jcircumflex' => '0x0134',
+            'jcircumflex' => '0x0135',
+            'Kcommaaccent' => '0x0136',
+            'kcommaaccent' => '0x0137',
+            'kgreenlandic' => '0x0138',
+            'Lacute' => '0x0139',
+            'lacute' => '0x013a',
+            'Lcommaaccent' => '0x013b',
+            'lcommaaccent' => '0x013c',
+            'Lcaron' => '0x013d',
+            'lcaron' => '0x013e',
+            'Ldot' => '0x013f',
+            'ldot' => '0x0140',
+            'Lslash' => '0x0141',
+            'lslash' => '0x0142',
+            'Nacute' => '0x0143',
+            'nacute' => '0x0144',
+            'Ncommaaccent' => '0x0145',
+            'ncommaaccent' => '0x0146',
+            'Ncaron' => '0x0147',
+            'ncaron' => '0x0148',
+            'napostrophe' => '0x0149',
+            'Eng' => '0x014a',
+            'eng' => '0x014b',
+            'Omacron' => '0x014c',
+            'omacron' => '0x014d',
+            'Obreve' => '0x014e',
+            'obreve' => '0x014f',
+            'Ohungarumlaut' => '0x0150',
+            'ohungarumlaut' => '0x0151',
+            'OE' => '0x0152',
+            'oe' => '0x0153',
+            'Racute' => '0x0154',
+            'racute' => '0x0155',
+            'Rcommaaccent' => '0x0156',
+            'rcommaaccent' => '0x0157',
+            'Rcaron' => '0x0158',
+            'rcaron' => '0x0159',
+            'Sacute' => '0x015a',
+            'sacute' => '0x015b',
+            'Scircumflex' => '0x015c',
+            'scircumflex' => '0x015d',
+            'Scedilla' => '0xf6c1',
+            'scedilla' => '0xf6c2',
+            'Scaron' => '0x0160',
+            'scaron' => '0x0161',
+            'Tcommaaccent' => '0x021a',
+            'tcommaaccent' => '0x021b',
+            'Tcaron' => '0x0164',
+            'tcaron' => '0x0165',
+            'Tbar' => '0x0166',
+            'tbar' => '0x0167',
+            'Utilde' => '0x0168',
+            'utilde' => '0x0169',
+            'Umacron' => '0x016a',
+            'umacron' => '0x016b',
+            'Ubreve' => '0x016c',
+            'ubreve' => '0x016d',
+            'Uring' => '0x016e',
+            'uring' => '0x016f',
+            'Uhungarumlaut' => '0x0170',
+            'uhungarumlaut' => '0x0171',
+            'Uogonek' => '0x0172',
+            'uogonek' => '0x0173',
+            'Wcircumflex' => '0x0174',
+            'wcircumflex' => '0x0175',
+            'Ycircumflex' => '0x0176',
+            'ycircumflex' => '0x0177',
+            'Ydieresis' => '0x0178',
+            'Zacute' => '0x0179',
+            'zacute' => '0x017a',
+            'Zdotaccent' => '0x017b',
+            'zdotaccent' => '0x017c',
+            'Zcaron' => '0x017d',
+            'zcaron' => '0x017e',
+            'longs' => '0x017f',
+            'florin' => '0x0192',
+            'Ohorn' => '0x01a0',
+            'ohorn' => '0x01a1',
+            'Uhorn' => '0x01af',
+            'uhorn' => '0x01b0',
+            'Gcaron' => '0x01e6',
+            'gcaron' => '0x01e7',
+            'Aringacute' => '0x01fa',
+            'aringacute' => '0x01fb',
+            'AEacute' => '0x01fc',
+            'aeacute' => '0x01fd',
+            'Oslashacute' => '0x01fe',
+            'oslashacute' => '0x01ff',
+            'Scommaaccent' => '0x0218',
+            'scommaaccent' => '0x0219',
+            'afii57929' => '0x02bc',
+            'afii64937' => '0x02bd',
+            'circumflex' => '0x02c6',
+            'caron' => '0x02c7',
+            'breve' => '0x02d8',
+            'dotaccent' => '0x02d9',
+            'ring' => '0x02da',
+            'ogonek' => '0x02db',
+            'tilde' => '0x02dc',
+            'hungarumlaut' => '0x02dd',
+            'gravecomb' => '0x0300',
+            'acutecomb' => '0x0301',
+            'tildecomb' => '0x0303',
+            'hookabovecomb' => '0x0309',
+            'dotbelowcomb' => '0x0323',
+            'tonos' => '0x0384',
+            'dieresistonos' => '0x0385',
+            'Alphatonos' => '0x0386',
+            'anoteleia' => '0x0387',
+            'Epsilontonos' => '0x0388',
+            'Etatonos' => '0x0389',
+            'Iotatonos' => '0x038a',
+            'Omicrontonos' => '0x038c',
+            'Upsilontonos' => '0x038e',
+            'Omegatonos' => '0x038f',
+            'iotadieresistonos' => '0x0390',
+            'Alpha' => '0x0391',
+            'Beta' => '0x0392',
+            'Gamma' => '0x0393',
+            'Delta' => '0x2206',
+            'Epsilon' => '0x0395',
+            'Zeta' => '0x0396',
+            'Eta' => '0x0397',
+            'Theta' => '0x0398',
+            'Iota' => '0x0399',
+            'Kappa' => '0x039a',
+            'Lambda' => '0x039b',
+            'Mu' => '0x039c',
+            'Nu' => '0x039d',
+            'Xi' => '0x039e',
+            'Omicron' => '0x039f',
+            'Pi' => '0x03a0',
+            'Rho' => '0x03a1',
+            'Sigma' => '0x03a3',
+            'Tau' => '0x03a4',
+            'Upsilon' => '0x03a5',
+            'Phi' => '0x03a6',
+            'Chi' => '0x03a7',
+            'Psi' => '0x03a8',
+            'Omega' => '0x2126',
+            'Iotadieresis' => '0x03aa',
+            'Upsilondieresis' => '0x03ab',
+            'alphatonos' => '0x03ac',
+            'epsilontonos' => '0x03ad',
+            'etatonos' => '0x03ae',
+            'iotatonos' => '0x03af',
+            'upsilondieresistonos' => '0x03b0',
+            'alpha' => '0x03b1',
+            'beta' => '0x03b2',
+            'gamma' => '0x03b3',
+            'delta' => '0x03b4',
+            'epsilon' => '0x03b5',
+            'zeta' => '0x03b6',
+            'eta' => '0x03b7',
+            'theta' => '0x03b8',
+            'iota' => '0x03b9',
+            'kappa' => '0x03ba',
+            'lambda' => '0x03bb',
+            'nu' => '0x03bd',
+            'xi' => '0x03be',
+            'omicron' => '0x03bf',
+            'pi' => '0x03c0',
+            'rho' => '0x03c1',
+            'sigma1' => '0x03c2',
+            'sigma' => '0x03c3',
+            'tau' => '0x03c4',
+            'upsilon' => '0x03c5',
+            'phi' => '0x03c6',
+            'chi' => '0x03c7',
+            'psi' => '0x03c8',
+            'omega' => '0x03c9',
+            'iotadieresis' => '0x03ca',
+            'upsilondieresis' => '0x03cb',
+            'omicrontonos' => '0x03cc',
+            'upsilontonos' => '0x03cd',
+            'omegatonos' => '0x03ce',
+            'theta1' => '0x03d1',
+            'Upsilon1' => '0x03d2',
+            'phi1' => '0x03d5',
+            'omega1' => '0x03d6',
+            'afii10023' => '0x0401',
+            'afii10051' => '0x0402',
+            'afii10052' => '0x0403',
+            'afii10053' => '0x0404',
+            'afii10054' => '0x0405',
+            'afii10055' => '0x0406',
+            'afii10056' => '0x0407',
+            'afii10057' => '0x0408',
+            'afii10058' => '0x0409',
+            'afii10059' => '0x040a',
+            'afii10060' => '0x040b',
+            'afii10061' => '0x040c',
+            'afii10062' => '0x040e',
+            'afii10145' => '0x040f',
+            'afii10017' => '0x0410',
+            'afii10018' => '0x0411',
+            'afii10019' => '0x0412',
+            'afii10020' => '0x0413',
+            'afii10021' => '0x0414',
+            'afii10022' => '0x0415',
+            'afii10024' => '0x0416',
+            'afii10025' => '0x0417',
+            'afii10026' => '0x0418',
+            'afii10027' => '0x0419',
+            'afii10028' => '0x041a',
+            'afii10029' => '0x041b',
+            'afii10030' => '0x041c',
+            'afii10031' => '0x041d',
+            'afii10032' => '0x041e',
+            'afii10033' => '0x041f',
+            'afii10034' => '0x0420',
+            'afii10035' => '0x0421',
+            'afii10036' => '0x0422',
+            'afii10037' => '0x0423',
+            'afii10038' => '0x0424',
+            'afii10039' => '0x0425',
+            'afii10040' => '0x0426',
+            'afii10041' => '0x0427',
+            'afii10042' => '0x0428',
+            'afii10043' => '0x0429',
+            'afii10044' => '0x042a',
+            'afii10045' => '0x042b',
+            'afii10046' => '0x042c',
+            'afii10047' => '0x042d',
+            'afii10048' => '0x042e',
+            'afii10049' => '0x042f',
+            'afii10065' => '0x0430',
+            'afii10066' => '0x0431',
+            'afii10067' => '0x0432',
+            'afii10068' => '0x0433',
+            'afii10069' => '0x0434',
+            'afii10070' => '0x0435',
+            'afii10072' => '0x0436',
+            'afii10073' => '0x0437',
+            'afii10074' => '0x0438',
+            'afii10075' => '0x0439',
+            'afii10076' => '0x043a',
+            'afii10077' => '0x043b',
+            'afii10078' => '0x043c',
+            'afii10079' => '0x043d',
+            'afii10080' => '0x043e',
+            'afii10081' => '0x043f',
+            'afii10082' => '0x0440',
+            'afii10083' => '0x0441',
+            'afii10084' => '0x0442',
+            'afii10085' => '0x0443',
+            'afii10086' => '0x0444',
+            'afii10087' => '0x0445',
+            'afii10088' => '0x0446',
+            'afii10089' => '0x0447',
+            'afii10090' => '0x0448',
+            'afii10091' => '0x0449',
+            'afii10092' => '0x044a',
+            'afii10093' => '0x044b',
+            'afii10094' => '0x044c',
+            'afii10095' => '0x044d',
+            'afii10096' => '0x044e',
+            'afii10097' => '0x044f',
+            'afii10071' => '0x0451',
+            'afii10099' => '0x0452',
+            'afii10100' => '0x0453',
+            'afii10101' => '0x0454',
+            'afii10102' => '0x0455',
+            'afii10103' => '0x0456',
+            'afii10104' => '0x0457',
+            'afii10105' => '0x0458',
+            'afii10106' => '0x0459',
+            'afii10107' => '0x045a',
+            'afii10108' => '0x045b',
+            'afii10109' => '0x045c',
+            'afii10110' => '0x045e',
+            'afii10193' => '0x045f',
+            'afii10146' => '0x0462',
+            'afii10194' => '0x0463',
+            'afii10147' => '0x0472',
+            'afii10195' => '0x0473',
+            'afii10148' => '0x0474',
+            'afii10196' => '0x0475',
+            'afii10050' => '0x0490',
+            'afii10098' => '0x0491',
+            'afii10846' => '0x04d9',
+            'afii57799' => '0x05b0',
+            'afii57801' => '0x05b1',
+            'afii57800' => '0x05b2',
+            'afii57802' => '0x05b3',
+            'afii57793' => '0x05b4',
+            'afii57794' => '0x05b5',
+            'afii57795' => '0x05b6',
+            'afii57798' => '0x05b7',
+            'afii57797' => '0x05b8',
+            'afii57806' => '0x05b9',
+            'afii57796' => '0x05bb',
+            'afii57807' => '0x05bc',
+            'afii57839' => '0x05bd',
+            'afii57645' => '0x05be',
+            'afii57841' => '0x05bf',
+            'afii57842' => '0x05c0',
+            'afii57804' => '0x05c1',
+            'afii57803' => '0x05c2',
+            'afii57658' => '0x05c3',
+            'afii57664' => '0x05d0',
+            'afii57665' => '0x05d1',
+            'afii57666' => '0x05d2',
+            'afii57667' => '0x05d3',
+            'afii57668' => '0x05d4',
+            'afii57669' => '0x05d5',
+            'afii57670' => '0x05d6',
+            'afii57671' => '0x05d7',
+            'afii57672' => '0x05d8',
+            'afii57673' => '0x05d9',
+            'afii57674' => '0x05da',
+            'afii57675' => '0x05db',
+            'afii57676' => '0x05dc',
+            'afii57677' => '0x05dd',
+            'afii57678' => '0x05de',
+            'afii57679' => '0x05df',
+            'afii57680' => '0x05e0',
+            'afii57681' => '0x05e1',
+            'afii57682' => '0x05e2',
+            'afii57683' => '0x05e3',
+            'afii57684' => '0x05e4',
+            'afii57685' => '0x05e5',
+            'afii57686' => '0x05e6',
+            'afii57687' => '0x05e7',
+            'afii57688' => '0x05e8',
+            'afii57689' => '0x05e9',
+            'afii57690' => '0x05ea',
+            'afii57716' => '0x05f0',
+            'afii57717' => '0x05f1',
+            'afii57718' => '0x05f2',
+            'afii57388' => '0x060c',
+            'afii57403' => '0x061b',
+            'afii57407' => '0x061f',
+            'afii57409' => '0x0621',
+            'afii57410' => '0x0622',
+            'afii57411' => '0x0623',
+            'afii57412' => '0x0624',
+            'afii57413' => '0x0625',
+            'afii57414' => '0x0626',
+            'afii57415' => '0x0627',
+            'afii57416' => '0x0628',
+            'afii57417' => '0x0629',
+            'afii57418' => '0x062a',
+            'afii57419' => '0x062b',
+            'afii57420' => '0x062c',
+            'afii57421' => '0x062d',
+            'afii57422' => '0x062e',
+            'afii57423' => '0x062f',
+            'afii57424' => '0x0630',
+            'afii57425' => '0x0631',
+            'afii57426' => '0x0632',
+            'afii57427' => '0x0633',
+            'afii57428' => '0x0634',
+            'afii57429' => '0x0635',
+            'afii57430' => '0x0636',
+            'afii57431' => '0x0637',
+            'afii57432' => '0x0638',
+            'afii57433' => '0x0639',
+            'afii57434' => '0x063a',
+            'afii57440' => '0x0640',
+            'afii57441' => '0x0641',
+            'afii57442' => '0x0642',
+            'afii57443' => '0x0643',
+            'afii57444' => '0x0644',
+            'afii57445' => '0x0645',
+            'afii57446' => '0x0646',
+            'afii57470' => '0x0647',
+            'afii57448' => '0x0648',
+            'afii57449' => '0x0649',
+            'afii57450' => '0x064a',
+            'afii57451' => '0x064b',
+            'afii57452' => '0x064c',
+            'afii57453' => '0x064d',
+            'afii57454' => '0x064e',
+            'afii57455' => '0x064f',
+            'afii57456' => '0x0650',
+            'afii57457' => '0x0651',
+            'afii57458' => '0x0652',
+            'afii57392' => '0x0660',
+            'afii57393' => '0x0661',
+            'afii57394' => '0x0662',
+            'afii57395' => '0x0663',
+            'afii57396' => '0x0664',
+            'afii57397' => '0x0665',
+            'afii57398' => '0x0666',
+            'afii57399' => '0x0667',
+            'afii57400' => '0x0668',
+            'afii57401' => '0x0669',
+            'afii57381' => '0x066a',
+            'afii63167' => '0x066d',
+            'afii57511' => '0x0679',
+            'afii57506' => '0x067e',
+            'afii57507' => '0x0686',
+            'afii57512' => '0x0688',
+            'afii57513' => '0x0691',
+            'afii57508' => '0x0698',
+            'afii57505' => '0x06a4',
+            'afii57509' => '0x06af',
+            'afii57514' => '0x06ba',
+            'afii57519' => '0x06d2',
+            'afii57534' => '0x06d5',
+            'Wgrave' => '0x1e80',
+            'wgrave' => '0x1e81',
+            'Wacute' => '0x1e82',
+            'wacute' => '0x1e83',
+            'Wdieresis' => '0x1e84',
+            'wdieresis' => '0x1e85',
+            'Ygrave' => '0x1ef2',
+            'ygrave' => '0x1ef3',
+            'afii61664' => '0x200c',
+            'afii301' => '0x200d',
+            'afii299' => '0x200e',
+            'afii300' => '0x200f',
+            'figuredash' => '0x2012',
+            'endash' => '0x2013',
+            'emdash' => '0x2014',
+            'afii00208' => '0x2015',
+            'underscoredbl' => '0x2017',
+            'quoteleft' => '0x2018',
+            'quoteright' => '0x2019',
+            'quotesinglbase' => '0x201a',
+            'quotereversed' => '0x201b',
+            'quotedblleft' => '0x201c',
+            'quotedblright' => '0x201d',
+            'quotedblbase' => '0x201e',
+            'dagger' => '0x2020',
+            'daggerdbl' => '0x2021',
+            'bullet' => '0x2022',
+            'onedotenleader' => '0x2024',
+            'twodotenleader' => '0x2025',
+            'ellipsis' => '0x2026',
+            'afii61573' => '0x202c',
+            'afii61574' => '0x202d',
+            'afii61575' => '0x202e',
+            'perthousand' => '0x2030',
+            'minute' => '0x2032',
+            'second' => '0x2033',
+            'guilsinglleft' => '0x2039',
+            'guilsinglright' => '0x203a',
+            'exclamdbl' => '0x203c',
+            'fraction' => '0x2215',
+            'zerosuperior' => '0x2070',
+            'foursuperior' => '0x2074',
+            'fivesuperior' => '0x2075',
+            'sixsuperior' => '0x2076',
+            'sevensuperior' => '0x2077',
+            'eightsuperior' => '0x2078',
+            'ninesuperior' => '0x2079',
+            'parenleftsuperior' => '0x207d',
+            'parenrightsuperior' => '0x207e',
+            'nsuperior' => '0x207f',
+            'zeroinferior' => '0x2080',
+            'oneinferior' => '0x2081',
+            'twoinferior' => '0x2082',
+            'threeinferior' => '0x2083',
+            'fourinferior' => '0x2084',
+            'fiveinferior' => '0x2085',
+            'sixinferior' => '0x2086',
+            'seveninferior' => '0x2087',
+            'eightinferior' => '0x2088',
+            'nineinferior' => '0x2089',
+            'parenleftinferior' => '0x208d',
+            'parenrightinferior' => '0x208e',
+            'colonmonetary' => '0x20a1',
+            'franc' => '0x20a3',
+            'lira' => '0x20a4',
+            'peseta' => '0x20a7',
+            'afii57636' => '0x20aa',
+            'dong' => '0x20ab',
+            'Euro' => '0x20ac',
+            'afii61248' => '0x2105',
+            'Ifraktur' => '0x2111',
+            'afii61289' => '0x2113',
+            'afii61352' => '0x2116',
+            'weierstrass' => '0x2118',
+            'Rfraktur' => '0x211c',
+            'prescription' => '0x211e',
+            'trademark' => '0x2122',
+            'estimated' => '0x212e',
+            'aleph' => '0x2135',
+            'onethird' => '0x2153',
+            'twothirds' => '0x2154',
+            'oneeighth' => '0x215b',
+            'threeeighths' => '0x215c',
+            'fiveeighths' => '0x215d',
+            'seveneighths' => '0x215e',
+            'arrowleft' => '0x2190',
+            'arrowup' => '0x2191',
+            'arrowright' => '0x2192',
+            'arrowdown' => '0x2193',
+            'arrowboth' => '0x2194',
+            'arrowupdn' => '0x2195',
+            'arrowupdnbse' => '0x21a8',
+            'carriagereturn' => '0x21b5',
+            'arrowdblleft' => '0x21d0',
+            'arrowdblup' => '0x21d1',
+            'arrowdblright' => '0x21d2',
+            'arrowdbldown' => '0x21d3',
+            'arrowdblboth' => '0x21d4',
+            'universal' => '0x2200',
+            'partialdiff' => '0x2202',
+            'existential' => '0x2203',
+            'emptyset' => '0x2205',
+            'gradient' => '0x2207',
+            'element' => '0x2208',
+            'notelement' => '0x2209',
+            'suchthat' => '0x220b',
+            'product' => '0x220f',
+            'summation' => '0x2211',
+            'asteriskmath' => '0x2217',
+            'radical' => '0x221a',
+            'proportional' => '0x221d',
+            'infinity' => '0x221e',
+            'orthogonal' => '0x221f',
+            'angle' => '0x2220',
+            'logicaland' => '0x2227',
+            'logicalor' => '0x2228',
+            'intersection' => '0x2229',
+            'union' => '0x222a',
+            'integral' => '0x222b',
+            'therefore' => '0x2234',
+            'similar' => '0x223c',
+            'congruent' => '0x2245',
+            'approxequal' => '0x2248',
+            'notequal' => '0x2260',
+            'equivalence' => '0x2261',
+            'lessequal' => '0x2264',
+            'greaterequal' => '0x2265',
+            'propersubset' => '0x2282',
+            'propersuperset' => '0x2283',
+            'notsubset' => '0x2284',
+            'reflexsubset' => '0x2286',
+            'reflexsuperset' => '0x2287',
+            'circleplus' => '0x2295',
+            'circlemultiply' => '0x2297',
+            'perpendicular' => '0x22a5',
+            'dotmath' => '0x22c5',
+            'house' => '0x2302',
+            'revlogicalnot' => '0x2310',
+            'integraltp' => '0x2320',
+            'integralbt' => '0x2321',
+            'angleleft' => '0x2329',
+            'angleright' => '0x232a',
+            'SF100000' => '0x2500',
+            'SF110000' => '0x2502',
+            'SF010000' => '0x250c',
+            'SF030000' => '0x2510',
+            'SF020000' => '0x2514',
+            'SF040000' => '0x2518',
+            'SF080000' => '0x251c',
+            'SF090000' => '0x2524',
+            'SF060000' => '0x252c',
+            'SF070000' => '0x2534',
+            'SF050000' => '0x253c',
+            'SF430000' => '0x2550',
+            'SF240000' => '0x2551',
+            'SF510000' => '0x2552',
+            'SF520000' => '0x2553',
+            'SF390000' => '0x2554',
+            'SF220000' => '0x2555',
+            'SF210000' => '0x2556',
+            'SF250000' => '0x2557',
+            'SF500000' => '0x2558',
+            'SF490000' => '0x2559',
+            'SF380000' => '0x255a',
+            'SF280000' => '0x255b',
+            'SF270000' => '0x255c',
+            'SF260000' => '0x255d',
+            'SF360000' => '0x255e',
+            'SF370000' => '0x255f',
+            'SF420000' => '0x2560',
+            'SF190000' => '0x2561',
+            'SF200000' => '0x2562',
+            'SF230000' => '0x2563',
+            'SF470000' => '0x2564',
+            'SF480000' => '0x2565',
+            'SF410000' => '0x2566',
+            'SF450000' => '0x2567',
+            'SF460000' => '0x2568',
+            'SF400000' => '0x2569',
+            'SF540000' => '0x256a',
+            'SF530000' => '0x256b',
+            'SF440000' => '0x256c',
+            'upblock' => '0x2580',
+            'dnblock' => '0x2584',
+            'block' => '0x2588',
+            'lfblock' => '0x258c',
+            'rtblock' => '0x2590',
+            'ltshade' => '0x2591',
+            'shade' => '0x2592',
+            'dkshade' => '0x2593',
+            'filledbox' => '0x25a0',
+            'H22073' => '0x25a1',
+            'H18543' => '0x25aa',
+            'H18551' => '0x25ab',
+            'filledrect' => '0x25ac',
+            'triagup' => '0x25b2',
+            'triagrt' => '0x25ba',
+            'triagdn' => '0x25bc',
+            'triaglf' => '0x25c4',
+            'lozenge' => '0x25ca',
+            'circle' => '0x25cb',
+            'H18533' => '0x25cf',
+            'invbullet' => '0x25d8',
+            'invcircle' => '0x25d9',
+            'openbullet' => '0x25e6',
+            'smileface' => '0x263a',
+            'invsmileface' => '0x263b',
+            'sun' => '0x263c',
+            'female' => '0x2640',
+            'male' => '0x2642',
+            'spade' => '0x2660',
+            'club' => '0x2663',
+            'heart' => '0x2665',
+            'diamond' => '0x2666',
+            'musicalnote' => '0x266a',
+            'musicalnotedbl' => '0x266b',
+            'dotlessj' => '0xf6be',
+            'LL' => '0xf6bf',
+            'll' => '0xf6c0',
+            'commaaccent' => '0xf6c3',
+            'afii10063' => '0xf6c4',
+            'afii10064' => '0xf6c5',
+            'afii10192' => '0xf6c6',
+            'afii10831' => '0xf6c7',
+            'afii10832' => '0xf6c8',
+            'Acute' => '0xf6c9',
+            'Caron' => '0xf6ca',
+            'Dieresis' => '0xf6cb',
+            'DieresisAcute' => '0xf6cc',
+            'DieresisGrave' => '0xf6cd',
+            'Grave' => '0xf6ce',
+            'Hungarumlaut' => '0xf6cf',
+            'Macron' => '0xf6d0',
+            'cyrBreve' => '0xf6d1',
+            'cyrFlex' => '0xf6d2',
+            'dblGrave' => '0xf6d3',
+            'cyrbreve' => '0xf6d4',
+            'cyrflex' => '0xf6d5',
+            'dblgrave' => '0xf6d6',
+            'dieresisacute' => '0xf6d7',
+            'dieresisgrave' => '0xf6d8',
+            'copyrightserif' => '0xf6d9',
+            'registerserif' => '0xf6da',
+            'trademarkserif' => '0xf6db',
+            'onefitted' => '0xf6dc',
+            'rupiah' => '0xf6dd',
+            'threequartersemdash' => '0xf6de',
+            'centinferior' => '0xf6df',
+            'centsuperior' => '0xf6e0',
+            'commainferior' => '0xf6e1',
+            'commasuperior' => '0xf6e2',
+            'dollarinferior' => '0xf6e3',
+            'dollarsuperior' => '0xf6e4',
+            'hypheninferior' => '0xf6e5',
+            'hyphensuperior' => '0xf6e6',
+            'periodinferior' => '0xf6e7',
+            'periodsuperior' => '0xf6e8',
+            'asuperior' => '0xf6e9',
+            'bsuperior' => '0xf6ea',
+            'dsuperior' => '0xf6eb',
+            'esuperior' => '0xf6ec',
+            'isuperior' => '0xf6ed',
+            'lsuperior' => '0xf6ee',
+            'msuperior' => '0xf6ef',
+            'osuperior' => '0xf6f0',
+            'rsuperior' => '0xf6f1',
+            'ssuperior' => '0xf6f2',
+            'tsuperior' => '0xf6f3',
+            'Brevesmall' => '0xf6f4',
+            'Caronsmall' => '0xf6f5',
+            'Circumflexsmall' => '0xf6f6',
+            'Dotaccentsmall' => '0xf6f7',
+            'Hungarumlautsmall' => '0xf6f8',
+            'Lslashsmall' => '0xf6f9',
+            'OEsmall' => '0xf6fa',
+            'Ogoneksmall' => '0xf6fb',
+            'Ringsmall' => '0xf6fc',
+            'Scaronsmall' => '0xf6fd',
+            'Tildesmall' => '0xf6fe',
+            'Zcaronsmall' => '0xf6ff',
+            'exclamsmall' => '0xf721',
+            'dollaroldstyle' => '0xf724',
+            'ampersandsmall' => '0xf726',
+            'zerooldstyle' => '0xf730',
+            'oneoldstyle' => '0xf731',
+            'twooldstyle' => '0xf732',
+            'threeoldstyle' => '0xf733',
+            'fouroldstyle' => '0xf734',
+            'fiveoldstyle' => '0xf735',
+            'sixoldstyle' => '0xf736',
+            'sevenoldstyle' => '0xf737',
+            'eightoldstyle' => '0xf738',
+            'nineoldstyle' => '0xf739',
+            'questionsmall' => '0xf73f',
+            'Gravesmall' => '0xf760',
+            'Asmall' => '0xf761',
+            'Bsmall' => '0xf762',
+            'Csmall' => '0xf763',
+            'Dsmall' => '0xf764',
+            'Esmall' => '0xf765',
+            'Fsmall' => '0xf766',
+            'Gsmall' => '0xf767',
+            'Hsmall' => '0xf768',
+            'Ismall' => '0xf769',
+            'Jsmall' => '0xf76a',
+            'Ksmall' => '0xf76b',
+            'Lsmall' => '0xf76c',
+            'Msmall' => '0xf76d',
+            'Nsmall' => '0xf76e',
+            'Osmall' => '0xf76f',
+            'Psmall' => '0xf770',
+            'Qsmall' => '0xf771',
+            'Rsmall' => '0xf772',
+            'Ssmall' => '0xf773',
+            'Tsmall' => '0xf774',
+            'Usmall' => '0xf775',
+            'Vsmall' => '0xf776',
+            'Wsmall' => '0xf777',
+            'Xsmall' => '0xf778',
+            'Ysmall' => '0xf779',
+            'Zsmall' => '0xf77a',
+            'exclamdownsmall' => '0xf7a1',
+            'centoldstyle' => '0xf7a2',
+            'Dieresissmall' => '0xf7a8',
+            'Macronsmall' => '0xf7af',
+            'Acutesmall' => '0xf7b4',
+            'Cedillasmall' => '0xf7b8',
+            'questiondownsmall' => '0xf7bf',
+            'Agravesmall' => '0xf7e0',
+            'Aacutesmall' => '0xf7e1',
+            'Acircumflexsmall' => '0xf7e2',
+            'Atildesmall' => '0xf7e3',
+            'Adieresissmall' => '0xf7e4',
+            'Aringsmall' => '0xf7e5',
+            'AEsmall' => '0xf7e6',
+            'Ccedillasmall' => '0xf7e7',
+            'Egravesmall' => '0xf7e8',
+            'Eacutesmall' => '0xf7e9',
+            'Ecircumflexsmall' => '0xf7ea',
+            'Edieresissmall' => '0xf7eb',
+            'Igravesmall' => '0xf7ec',
+            'Iacutesmall' => '0xf7ed',
+            'Icircumflexsmall' => '0xf7ee',
+            'Idieresissmall' => '0xf7ef',
+            'Ethsmall' => '0xf7f0',
+            'Ntildesmall' => '0xf7f1',
+            'Ogravesmall' => '0xf7f2',
+            'Oacutesmall' => '0xf7f3',
+            'Ocircumflexsmall' => '0xf7f4',
+            'Otildesmall' => '0xf7f5',
+            'Odieresissmall' => '0xf7f6',
+            'Oslashsmall' => '0xf7f8',
+            'Ugravesmall' => '0xf7f9',
+            'Uacutesmall' => '0xf7fa',
+            'Ucircumflexsmall' => '0xf7fb',
+            'Udieresissmall' => '0xf7fc',
+            'Yacutesmall' => '0xf7fd',
+            'Thornsmall' => '0xf7fe',
+            'Ydieresissmall' => '0xf7ff',
+            'radicalex' => '0xf8e5',
+            'arrowvertex' => '0xf8e6',
+            'arrowhorizex' => '0xf8e7',
+            'registersans' => '0xf8e8',
+            'copyrightsans' => '0xf8e9',
+            'trademarksans' => '0xf8ea',
+            'parenlefttp' => '0xf8eb',
+            'parenleftex' => '0xf8ec',
+            'parenleftbt' => '0xf8ed',
+            'bracketlefttp' => '0xf8ee',
+            'bracketleftex' => '0xf8ef',
+            'bracketleftbt' => '0xf8f0',
+            'bracelefttp' => '0xf8f1',
+            'braceleftmid' => '0xf8f2',
+            'braceleftbt' => '0xf8f3',
+            'braceex' => '0xf8f4',
+            'integralex' => '0xf8f5',
+            'parenrighttp' => '0xf8f6',
+            'parenrightex' => '0xf8f7',
+            'parenrightbt' => '0xf8f8',
+            'bracketrighttp' => '0xf8f9',
+            'bracketrightex' => '0xf8fa',
+            'bracketrightbt' => '0xf8fb',
+            'bracerighttp' => '0xf8fc',
+            'bracerightmid' => '0xf8fd',
+            'bracerightbt' => '0xf8fe',
+            'ff' => '0xfb00',
+            'fi' => '0xfb01',
+            'fl' => '0xfb02',
+            'ffi' => '0xfb03',
+            'ffl' => '0xfb04',
+            'afii57705' => '0xfb1f',
+            'afii57694' => '0xfb2a',
+            'afii57695' => '0xfb2b',
+            'afii57723' => '0xfb35',
+            'afii57700' => '0xfb4b',
+        ];
+    }
+
+    public static function getCodePoint($glyph): ?int
+    {
+        $glyphsMap = static::getGlyphs();
+
+        if (isset($glyphsMap[$glyph])) {
+            return hexdec($glyphsMap[$glyph]);
+        }
+
+        return null;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/StandardEncoding.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/StandardEncoding.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/StandardEncoding.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+// Source : http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/StandardEncoding.pm
+
+namespace Smalot\PdfParser\Encoding;
+
+/**
+ * Class StandardEncoding
+ */
+class StandardEncoding extends AbstractEncoding
+{
+    public function getTranslations(): array
+    {
+        $encoding =
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          'space exclam quotedbl numbersign dollar percent ampersand quoteright '.
+          'parenleft parenright asterisk plus comma hyphen period slash zero '.
+          'one two three four five six seven eight nine colon semicolon less '.
+          'equal greater question at A B C D E F G H I J K L M N O P Q R S T U '.
+          'V W X Y Z bracketleft backslash bracketright asciicircum underscore '.
+          'quoteleft a b c d e f g h i j k l m n o p q r s t u v w x y z '.
+          'braceleft bar braceright asciitilde .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef exclamdown cent '.
+          'sterling fraction yen florin section currency quotesingle '.
+          'quotedblleft guillemotleft guilsinglleft guilsinglright fi fl '.
+          '.notdef endash dagger daggerdbl periodcentered .notdef paragraph '.
+          'bullet quotesinglbase quotedblbase quotedblright guillemotright '.
+          'ellipsis perthousand .notdef questiondown .notdef grave acute '.
+          'circumflex tilde macron breve dotaccent dieresis .notdef ring '.
+          'cedilla .notdef hungarumlaut ogonek caron emdash .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef AE .notdef '.
+          'ordfeminine .notdef .notdef .notdef .notdef Lslash Oslash OE '.
+          'ordmasculine .notdef .notdef .notdef .notdef .notdef ae .notdef '.
+          '.notdef .notdef dotlessi .notdef .notdef lslash oslash oe germandbls '.
+          '.notdef .notdef .notdef .notdef';
+
+        return explode(' ', $encoding);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/WinAnsiEncoding.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/WinAnsiEncoding.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/WinAnsiEncoding.php	(revision 8435)
@@ -0,0 +1,76 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+// Source : http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/WinANSIEncoding.pm
+
+namespace Smalot\PdfParser\Encoding;
+
+/**
+ * Class WinAnsiEncoding
+ */
+class WinAnsiEncoding extends AbstractEncoding
+{
+    public function getTranslations(): array
+    {
+        $encoding =
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '.
+          'space exclam quotedbl numbersign dollar percent ampersand quotesingle '.
+          'parenleft parenright asterisk plus comma hyphen period slash zero one '.
+          'two three four five six seven eight nine colon semicolon less equal '.
+          'greater question at A B C D E F G H I J K L M N O P Q R S T U V W X '.
+          'Y Z bracketleft backslash bracketright asciicircum underscore '.
+          'grave a b c d e f g h i j k l m n o p q r s t u v w x y z '.
+          'braceleft bar braceright asciitilde bullet Euro bullet quotesinglbase '.
+          'florin quotedblbase ellipsis dagger daggerdbl circumflex perthousand '.
+          'Scaron guilsinglleft OE bullet Zcaron bullet bullet quoteleft quoteright '.
+          'quotedblleft quotedblright bullet endash emdash tilde trademark scaron '.
+          'guilsinglright oe bullet zcaron Ydieresis space exclamdown cent '.
+          'sterling currency yen brokenbar section dieresis copyright '.
+          'ordfeminine guillemotleft logicalnot hyphen registered macron degree '.
+          'plusminus twosuperior threesuperior acute mu paragraph '.
+          'periodcentered cedilla onesuperior ordmasculine guillemotright '.
+          'onequarter onehalf threequarters questiondown Agrave Aacute '.
+          'Acircumflex Atilde Adieresis Aring AE Ccedilla Egrave Eacute '.
+          'Ecircumflex Edieresis Igrave Iacute Icircumflex Idieresis Eth Ntilde '.
+          'Ograve Oacute Ocircumflex Otilde Odieresis multiply Oslash Ugrave '.
+          'Uacute Ucircumflex Udieresis Yacute Thorn germandbls agrave aacute '.
+          'acircumflex atilde adieresis aring ae ccedilla egrave eacute '.
+          'ecircumflex edieresis igrave iacute icircumflex idieresis eth ntilde '.
+          'ograve oacute ocircumflex otilde odieresis divide oslash ugrave '.
+          'uacute ucircumflex udieresis yacute thorn ydieresis';
+
+        return explode(' ', $encoding);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EncodingNotFoundException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EncodingNotFoundException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EncodingNotFoundException.php	(revision 8435)
@@ -0,0 +1,7 @@
+<?php
+
+namespace Smalot\PdfParser\Exception;
+
+class EncodingNotFoundException extends \Exception
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font.php	(revision 8435)
@@ -0,0 +1,696 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser;
+
+use Smalot\PdfParser\Encoding\WinAnsiEncoding;
+use Smalot\PdfParser\Exception\EncodingNotFoundException;
+
+/**
+ * Class Font
+ */
+class Font extends PDFObject
+{
+    public const MISSING = '?';
+
+    /**
+     * @var array
+     */
+    protected $table;
+
+    /**
+     * @var array
+     */
+    protected $tableSizes;
+
+    /**
+     * Caches results from uchr.
+     *
+     * @var array
+     */
+    private static $uchrCache = [];
+
+    /**
+     * In some PDF-files encoding could be referenced by object id but object itself does not contain
+     * `/Type /Encoding` in its dictionary. These objects wouldn't be initialized as Encoding in
+     * \Smalot\PdfParser\PDFObject::factory() during file parsing (they would be just PDFObject).
+     *
+     * Therefore, we create an instance of Encoding from them during decoding and cache this value in this property.
+     *
+     * @var Encoding
+     *
+     * @see https://github.com/smalot/pdfparser/pull/500
+     */
+    private $initializedEncodingByPdfObject;
+
+    public function init()
+    {
+        // Load translate table.
+        $this->loadTranslateTable();
+    }
+
+    public function getName(): string
+    {
+        return $this->has('BaseFont') ? (string) $this->get('BaseFont') : '[Unknown]';
+    }
+
+    public function getType(): string
+    {
+        return (string) $this->header->get('Subtype');
+    }
+
+    public function getDetails(bool $deep = true): array
+    {
+        $details = [];
+
+        $details['Name'] = $this->getName();
+        $details['Type'] = $this->getType();
+        $details['Encoding'] = ($this->has('Encoding') ? (string) $this->get('Encoding') : 'Ansi');
+
+        $details += parent::getDetails($deep);
+
+        return $details;
+    }
+
+    /**
+     * @return string|bool
+     */
+    public function translateChar(string $char, bool $use_default = true)
+    {
+        $dec = hexdec(bin2hex($char));
+
+        if (\array_key_exists($dec, $this->table)) {
+            return $this->table[$dec];
+        }
+
+        // fallback for decoding single-byte ANSI characters that are not in the lookup table
+        $fallbackDecoded = $char;
+        if (
+            \strlen($char) < 2
+            && $this->has('Encoding')
+            && $this->get('Encoding') instanceof Encoding
+        ) {
+            try {
+                if (WinAnsiEncoding::class === $this->get('Encoding')->__toString()) {
+                    $fallbackDecoded = self::uchr($dec);
+                }
+            } catch (EncodingNotFoundException $e) {
+                // Encoding->getEncodingClass() throws EncodingNotFoundException when BaseEncoding doesn't exists
+                // See table 5.11 on PDF 1.5 specs for more info
+            }
+        }
+
+        return $use_default ? self::MISSING : $fallbackDecoded;
+    }
+
+    /**
+     * Convert unicode character code to "utf-8" encoded string.
+     *
+     * @param int|float $code Unicode character code. Will be casted to int internally!
+     */
+    public static function uchr($code): string
+    {
+        // note:
+        // $code was typed as int before, but changed in https://github.com/smalot/pdfparser/pull/623
+        // because in some cases uchr was called with a float instead of an integer.
+        $code = (int) $code;
+
+        if (!isset(self::$uchrCache[$code])) {
+            // html_entity_decode() will not work with UTF-16 or UTF-32 char entities,
+            // therefore, we use mb_convert_encoding() instead
+            self::$uchrCache[$code] = mb_convert_encoding("&#{$code};", 'UTF-8', 'HTML-ENTITIES');
+        }
+
+        return self::$uchrCache[$code];
+    }
+
+    /**
+     * Init internal chars translation table by ToUnicode CMap.
+     */
+    public function loadTranslateTable(): array
+    {
+        if (null !== $this->table) {
+            return $this->table;
+        }
+
+        $this->table = [];
+        $this->tableSizes = [
+            'from' => 1,
+            'to' => 1,
+        ];
+
+        if ($this->has('ToUnicode')) {
+            $content = $this->get('ToUnicode')->getContent();
+            $matches = [];
+
+            // Support for multiple spacerange sections
+            if (preg_match_all('/begincodespacerange(?P<sections>.*?)endcodespacerange/s', $content, $matches)) {
+                foreach ($matches['sections'] as $section) {
+                    $regexp = '/<(?P<from>[0-9A-F]+)> *<(?P<to>[0-9A-F]+)>[ \r\n]+/is';
+
+                    preg_match_all($regexp, $section, $matches);
+
+                    $this->tableSizes = [
+                        'from' => max(1, \strlen(current($matches['from'])) / 2),
+                        'to' => max(1, \strlen(current($matches['to'])) / 2),
+                    ];
+
+                    break;
+                }
+            }
+
+            // Support for multiple bfchar sections
+            if (preg_match_all('/beginbfchar(?P<sections>.*?)endbfchar/s', $content, $matches)) {
+                foreach ($matches['sections'] as $section) {
+                    $regexp = '/<(?P<from>[0-9A-F]+)> *<(?P<to>[0-9A-F]+)>[ \r\n]+/is';
+
+                    preg_match_all($regexp, $section, $matches);
+
+                    $this->tableSizes['from'] = max(1, \strlen(current($matches['from'])) / 2);
+
+                    foreach ($matches['from'] as $key => $from) {
+                        $parts = preg_split(
+                            '/([0-9A-F]{4})/i',
+                            $matches['to'][$key],
+                            0,
+                            \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE
+                        );
+                        $text = '';
+                        foreach ($parts as $part) {
+                            $text .= self::uchr(hexdec($part));
+                        }
+                        $this->table[hexdec($from)] = $text;
+                    }
+                }
+            }
+
+            // Support for multiple bfrange sections
+            if (preg_match_all('/beginbfrange(?P<sections>.*?)endbfrange/s', $content, $matches)) {
+                foreach ($matches['sections'] as $section) {
+                    // Support for : <srcCode1> <srcCode2> <dstString>
+                    $regexp = '/<(?P<from>[0-9A-F]+)> *<(?P<to>[0-9A-F]+)> *<(?P<offset>[0-9A-F]+)>[ \r\n]+/is';
+
+                    preg_match_all($regexp, $section, $matches);
+
+                    foreach ($matches['from'] as $key => $from) {
+                        $char_from = hexdec($from);
+                        $char_to = hexdec($matches['to'][$key]);
+                        $offset = hexdec($matches['offset'][$key]);
+
+                        for ($char = $char_from; $char <= $char_to; ++$char) {
+                            $this->table[$char] = self::uchr($char - $char_from + $offset);
+                        }
+                    }
+
+                    // Support for : <srcCode1> <srcCodeN> [<dstString1> <dstString2> ... <dstStringN>]
+                    // Some PDF file has 2-byte Unicode values on new lines > added \r\n
+                    $regexp = '/<(?P<from>[0-9A-F]+)> *<(?P<to>[0-9A-F]+)> *\[(?P<strings>[\r\n<>0-9A-F ]+)\][ \r\n]+/is';
+
+                    preg_match_all($regexp, $section, $matches);
+
+                    foreach ($matches['from'] as $key => $from) {
+                        $char_from = hexdec($from);
+                        $strings = [];
+
+                        preg_match_all('/<(?P<string>[0-9A-F]+)> */is', $matches['strings'][$key], $strings);
+
+                        foreach ($strings['string'] as $position => $string) {
+                            $parts = preg_split(
+                                '/([0-9A-F]{4})/i',
+                                $string,
+                                0,
+                                \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE
+                            );
+                            $text = '';
+                            foreach ($parts as $part) {
+                                $text .= self::uchr(hexdec($part));
+                            }
+                            $this->table[$char_from + $position] = $text;
+                        }
+                    }
+                }
+            }
+        }
+
+        return $this->table;
+    }
+
+    /**
+     * Set custom char translation table where:
+     * - key - integer character code;
+     * - value - "utf-8" encoded value;
+     *
+     * @return void
+     */
+    public function setTable(array $table)
+    {
+        $this->table = $table;
+    }
+
+    /**
+     * Calculate text width with data from header 'Widths'. If width of character is not found then character is added to missing array.
+     */
+    public function calculateTextWidth(string $text, ?array &$missing = null): ?float
+    {
+        $index_map = array_flip($this->table);
+        $details = $this->getDetails();
+
+        // Usually, Widths key is set in $details array, but if it isn't use an empty array instead.
+        $widths = $details['Widths'] ?? [];
+
+        // Widths array is zero indexed but table is not. We must map them based on FirstChar and LastChar
+        $width_map = array_flip(range($details['FirstChar'], $details['LastChar']));
+
+        $width = null;
+        $missing = [];
+        $textLength = mb_strlen($text);
+        for ($i = 0; $i < $textLength; ++$i) {
+            $char = mb_substr($text, $i, 1);
+            if (
+                !\array_key_exists($char, $index_map)
+                || !\array_key_exists($index_map[$char], $width_map)
+                || !\array_key_exists($width_map[$index_map[$char]], $widths)
+            ) {
+                $missing[] = $char;
+                continue;
+            }
+            $width_index = $width_map[$index_map[$char]];
+            $width += $widths[$width_index];
+        }
+
+        return $width;
+    }
+
+    /**
+     * Decode hexadecimal encoded string. If $add_braces is true result value would be wrapped by parentheses.
+     */
+    public static function decodeHexadecimal(string $hexa, bool $add_braces = false): string
+    {
+        // Special shortcut for XML content.
+        if (false !== stripos($hexa, '<?xml')) {
+            return $hexa;
+        }
+
+        $text = '';
+        $parts = preg_split('/(<[a-f0-9\s]+>)/si', $hexa, -1, \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE);
+
+        foreach ($parts as $part) {
+            if (preg_match('/^<[a-f0-9\s]+>$/si', $part)) {
+                // strip whitespace
+                $part = preg_replace("/\s/", '', $part);
+                $part = trim($part, '<>');
+                if ($add_braces) {
+                    $text .= '(';
+                }
+
+                $part = pack('H*', $part);
+                $text .= ($add_braces ? preg_replace('/\\\/s', '\\\\\\', $part) : $part);
+
+                if ($add_braces) {
+                    $text .= ')';
+                }
+            } else {
+                $text .= $part;
+            }
+        }
+
+        return $text;
+    }
+
+    /**
+     * Decode string with octal-decoded chunks.
+     */
+    public static function decodeOctal(string $text): string
+    {
+        // Replace all double backslashes \\ with a special string
+        $text = strtr($text, ['\\\\' => '[**pdfparserdblslsh**]']);
+
+        // Now we can replace all octal codes without worrying about
+        // escaped backslashes
+        $text = preg_replace_callback('/\\\\([0-7]{1,3})/', function ($m) {
+            return \chr(octdec($m[1]));
+        }, $text);
+
+        // Unescape any parentheses
+        $text = str_replace(['\\(', '\\)'], ['(', ')'], $text);
+
+        // Replace instances of the special string with a single backslash
+        return str_replace('[**pdfparserdblslsh**]', '\\', $text);
+    }
+
+    /**
+     * Decode string with html entity encoded chars.
+     */
+    public static function decodeEntities(string $text): string
+    {
+        return preg_replace_callback('/#([0-9a-f]{2})/i', function ($m) {
+            return \chr(hexdec($m[1]));
+        }, $text);
+    }
+
+    /**
+     * Check if given string is Unicode text (by BOM);
+     * If true - decode to "utf-8" encoded string.
+     * Otherwise - return text as is.
+     *
+     * @todo Rename in next major release to make the name correspond to reality (for ex. decodeIfUnicode())
+     */
+    public static function decodeUnicode(string $text): string
+    {
+        if ("\xFE\xFF" === substr($text, 0, 2)) {
+            // Strip U+FEFF byte order marker.
+            $decode = substr($text, 2);
+            $text = '';
+            $length = \strlen($decode);
+
+            for ($i = 0; $i < $length; $i += 2) {
+                $text .= self::uchr(hexdec(bin2hex(substr($decode, $i, 2))));
+            }
+        }
+
+        return $text;
+    }
+
+    /**
+     * @todo Deprecated, use $this->config->getFontSpaceLimit() instead.
+     */
+    protected function getFontSpaceLimit(): int
+    {
+        return $this->config->getFontSpaceLimit();
+    }
+
+    /**
+     * Decode text by commands array.
+     */
+    public function decodeText(array $commands, float $fontFactor = 4): string
+    {
+        $word_position = 0;
+        $words = [];
+        $font_space = $this->getFontSpaceLimit() * abs($fontFactor) / 4;
+
+        foreach ($commands as $command) {
+            switch ($command[PDFObject::TYPE]) {
+                case 'n':
+                    $offset = (float) trim($command[PDFObject::COMMAND]);
+                    if ($offset - (float) $font_space < 0) {
+                        $word_position = \count($words);
+                    }
+                    continue 2;
+                case '<':
+                    // Decode hexadecimal.
+                    $text = self::decodeHexadecimal('<'.$command[PDFObject::COMMAND].'>');
+                    break;
+
+                default:
+                    // Decode octal (if necessary).
+                    $text = self::decodeOctal($command[PDFObject::COMMAND]);
+            }
+
+            // replace escaped chars
+            $text = str_replace(
+                ['\\\\', '\(', '\)', '\n', '\r', '\t', '\f', '\ ', '\b'],
+                [\chr(92), \chr(40), \chr(41), \chr(10), \chr(13), \chr(9), \chr(12), \chr(32), \chr(8)],
+                $text
+            );
+
+            // add content to result string
+            if (isset($words[$word_position])) {
+                $words[$word_position] .= $text;
+            } else {
+                $words[$word_position] = $text;
+            }
+        }
+
+        foreach ($words as &$word) {
+            $word = $this->decodeContent($word);
+            $word = str_replace("\t", ' ', $word);
+        }
+
+        // Remove internal "words" that are just spaces, but leave them
+        // if they are at either end of the array of words. This fixes,
+        // for   example,   lines   that   are   justified   to   fill
+        // a whole row.
+        for ($x = \count($words) - 2; $x >= 1; --$x) {
+            if ('' === trim($words[$x], ' ')) {
+                unset($words[$x]);
+            }
+        }
+        $words = array_values($words);
+
+        // Cut down on the number of unnecessary internal spaces by
+        // imploding the string on the null byte, and checking if the
+        // text includes extra spaces on either side. If so, merge
+        // where appropriate.
+        $words = implode("\x00\x00", $words);
+        $words = str_replace(
+            [" \x00\x00 ", "\x00\x00 ", " \x00\x00", "\x00\x00"],
+            ['  ', ' ', ' ', ' '],
+            $words
+        );
+
+        return $words;
+    }
+
+    /**
+     * Decode given $text to "utf-8" encoded string.
+     *
+     * @param bool $unicode This parameter is deprecated and might be removed in a future release
+     */
+    public function decodeContent(string $text, ?bool &$unicode = null): string
+    {
+        // If this string begins with a UTF-16BE BOM, then decode it
+        // directly as Unicode
+        if ("\xFE\xFF" === substr($text, 0, 2)) {
+            return $this->decodeUnicode($text);
+        }
+
+        if ($this->has('ToUnicode')) {
+            return $this->decodeContentByToUnicodeCMapOrDescendantFonts($text);
+        }
+
+        if ($this->has('Encoding')) {
+            $result = $this->decodeContentByEncoding($text);
+
+            if (null !== $result) {
+                return $result;
+            }
+        }
+
+        return $this->decodeContentByAutodetectIfNecessary($text);
+    }
+
+    /**
+     * First try to decode $text by ToUnicode CMap.
+     * If char translation not found in ToUnicode CMap tries:
+     *  - If DescendantFonts exists tries to decode char by one of that fonts.
+     *      - If have no success to decode by DescendantFonts interpret $text as a string with "Windows-1252" encoding.
+     *  - If DescendantFonts does not exist just return "?" as decoded char.
+     *
+     * @todo Seems this is invalid algorithm that do not follow pdf-format specification. Must be rewritten.
+     */
+    private function decodeContentByToUnicodeCMapOrDescendantFonts(string $text): string
+    {
+        $bytes = $this->tableSizes['from'];
+
+        if ($bytes) {
+            $result = '';
+            $length = \strlen($text);
+
+            for ($i = 0; $i < $length; $i += $bytes) {
+                $char = substr($text, $i, $bytes);
+
+                if (false !== ($decoded = $this->translateChar($char, false))) {
+                    $char = $decoded;
+                } elseif ($this->has('DescendantFonts')) {
+                    if ($this->get('DescendantFonts') instanceof PDFObject) {
+                        $fonts = $this->get('DescendantFonts')->getHeader()->getElements();
+                    } else {
+                        $fonts = $this->get('DescendantFonts')->getContent();
+                    }
+                    $decoded = false;
+
+                    foreach ($fonts as $font) {
+                        if ($font instanceof self) {
+                            if (false !== ($decoded = $font->translateChar($char, false))) {
+                                $decoded = mb_convert_encoding($decoded, 'UTF-8', 'Windows-1252');
+                                break;
+                            }
+                        }
+                    }
+
+                    if (false !== $decoded) {
+                        $char = $decoded;
+                    } else {
+                        $char = mb_convert_encoding($char, 'UTF-8', 'Windows-1252');
+                    }
+                } else {
+                    $char = self::MISSING;
+                }
+
+                $result .= $char;
+            }
+
+            $text = $result;
+        }
+
+        return $text;
+    }
+
+    /**
+     * Decode content by any type of Encoding (dictionary's item) instance.
+     */
+    private function decodeContentByEncoding(string $text): ?string
+    {
+        $encoding = $this->get('Encoding');
+
+        // When Encoding referenced by object id (/Encoding 520 0 R) but object itself does not contain `/Type /Encoding` in it's dictionary.
+        if ($encoding instanceof PDFObject) {
+            $encoding = $this->getInitializedEncodingByPdfObject($encoding);
+        }
+
+        // When Encoding referenced by object id (/Encoding 520 0 R) but object itself contains `/Type /Encoding` in it's dictionary.
+        if ($encoding instanceof Encoding) {
+            return $this->decodeContentByEncodingEncoding($text, $encoding);
+        }
+
+        // When Encoding is just string (/Encoding /WinAnsiEncoding)
+        if ($encoding instanceof Element) { // todo: ElementString class must by used?
+            return $this->decodeContentByEncodingElement($text, $encoding);
+        }
+
+        // don't double-encode strings already in UTF-8
+        if (!mb_check_encoding($text, 'UTF-8')) {
+            return mb_convert_encoding($text, 'UTF-8', 'Windows-1252');
+        }
+
+        return $text;
+    }
+
+    /**
+     * Returns already created or create a new one if not created before Encoding instance by PDFObject instance.
+     */
+    private function getInitializedEncodingByPdfObject(PDFObject $PDFObject): Encoding
+    {
+        if (!$this->initializedEncodingByPdfObject) {
+            $this->initializedEncodingByPdfObject = $this->createInitializedEncodingByPdfObject($PDFObject);
+        }
+
+        return $this->initializedEncodingByPdfObject;
+    }
+
+    /**
+     * Decode content when $encoding (given by $this->get('Encoding')) is instance of Encoding.
+     */
+    private function decodeContentByEncodingEncoding(string $text, Encoding $encoding): string
+    {
+        $result = '';
+        $length = \strlen($text);
+
+        for ($i = 0; $i < $length; ++$i) {
+            $dec_av = hexdec(bin2hex($text[$i]));
+            $dec_ap = $encoding->translateChar($dec_av);
+            $result .= self::uchr($dec_ap ?? $dec_av);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Decode content when $encoding (given by $this->get('Encoding')) is instance of Element.
+     */
+    private function decodeContentByEncodingElement(string $text, Element $encoding): ?string
+    {
+        $pdfEncodingName = $encoding->getContent();
+
+        // mb_convert_encoding does not support MacRoman/macintosh,
+        // so we use iconv() here
+        $iconvEncodingName = $this->getIconvEncodingNameOrNullByPdfEncodingName($pdfEncodingName);
+
+        return $iconvEncodingName ? iconv($iconvEncodingName, 'UTF-8//TRANSLIT//IGNORE', $text) : null;
+    }
+
+    /**
+     * Convert PDF encoding name to iconv-known encoding name.
+     */
+    private function getIconvEncodingNameOrNullByPdfEncodingName(string $pdfEncodingName): ?string
+    {
+        $pdfToIconvEncodingNameMap = [
+            'StandardEncoding' => 'ISO-8859-1',
+            'MacRomanEncoding' => 'MACINTOSH',
+            'WinAnsiEncoding' => 'CP1252',
+        ];
+
+        return \array_key_exists($pdfEncodingName, $pdfToIconvEncodingNameMap)
+            ? $pdfToIconvEncodingNameMap[$pdfEncodingName]
+            : null;
+    }
+
+    /**
+     * If string seems like "utf-8" encoded string do nothing and just return given string as is.
+     * Otherwise, interpret string as "Window-1252" encoded string.
+     *
+     * @return string|false
+     */
+    private function decodeContentByAutodetectIfNecessary(string $text)
+    {
+        if (mb_check_encoding($text, 'UTF-8')) {
+            return $text;
+        }
+
+        return mb_convert_encoding($text, 'UTF-8', 'Windows-1252');
+        // todo: Why exactly `Windows-1252` used?
+    }
+
+    /**
+     * Create Encoding instance by PDFObject instance and init it.
+     */
+    private function createInitializedEncodingByPdfObject(PDFObject $PDFObject): Encoding
+    {
+        $encoding = $this->createEncodingByPdfObject($PDFObject);
+        $encoding->init();
+
+        return $encoding;
+    }
+
+    /**
+     * Create Encoding instance by PDFObject instance (without init).
+     */
+    private function createEncodingByPdfObject(PDFObject $PDFObject): Encoding
+    {
+        $document = $PDFObject->getDocument();
+        $header = $PDFObject->getHeader();
+        $content = $PDFObject->getContent();
+        $config = $PDFObject->getConfig();
+
+        return new Encoding($document, $header, $content, $config);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType0.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType0.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType0.php	(revision 8435)
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Font;
+
+use Smalot\PdfParser\Font;
+
+/**
+ * Class FontCIDFontType0
+ */
+class FontCIDFontType0 extends Font
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType2.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType2.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType2.php	(revision 8435)
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Font;
+
+use Smalot\PdfParser\Font;
+
+/**
+ * Class FontCIDFontType2
+ */
+class FontCIDFontType2 extends Font
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontTrueType.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontTrueType.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontTrueType.php	(revision 8435)
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Font;
+
+use Smalot\PdfParser\Font;
+
+/**
+ * Class FontTrueType
+ */
+class FontTrueType extends Font
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType0.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType0.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType0.php	(revision 8435)
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Font;
+
+use Smalot\PdfParser\Font;
+
+/**
+ * Class FontType0
+ */
+class FontType0 extends Font
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType1.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType1.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType1.php	(revision 8435)
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Font;
+
+use Smalot\PdfParser\Font;
+
+/**
+ * Class FontType1
+ */
+class FontType1 extends Font
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType3.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType3.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType3.php	(revision 8435)
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\Font;
+
+use Smalot\PdfParser\Font;
+
+/**
+ * Class FontType3
+ */
+class FontType3 extends Font
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Header.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Header.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Header.php	(revision 8435)
@@ -0,0 +1,194 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser;
+
+use Smalot\PdfParser\Element\ElementArray;
+use Smalot\PdfParser\Element\ElementMissing;
+use Smalot\PdfParser\Element\ElementStruct;
+use Smalot\PdfParser\Element\ElementXRef;
+
+/**
+ * Class Header
+ */
+class Header
+{
+    /**
+     * @var Document|null
+     */
+    protected $document;
+
+    /**
+     * @var Element[]
+     */
+    protected $elements;
+
+    /**
+     * @param Element[] $elements list of elements
+     * @param Document  $document document
+     */
+    public function __construct(array $elements = [], ?Document $document = null)
+    {
+        $this->elements = $elements;
+        $this->document = $document;
+    }
+
+    public function init()
+    {
+        foreach ($this->elements as $element) {
+            if ($element instanceof Element) {
+                $element->init();
+            }
+        }
+    }
+
+    /**
+     * Returns all elements.
+     */
+    public function getElements()
+    {
+        foreach ($this->elements as $name => $element) {
+            $this->resolveXRef($name);
+        }
+
+        return $this->elements;
+    }
+
+    /**
+     * Used only for debug.
+     */
+    public function getElementTypes(): array
+    {
+        $types = [];
+
+        foreach ($this->elements as $key => $element) {
+            $types[$key] = \get_class($element);
+        }
+
+        return $types;
+    }
+
+    public function getDetails(bool $deep = true): array
+    {
+        $values = [];
+        $elements = $this->getElements();
+
+        foreach ($elements as $key => $element) {
+            if ($element instanceof self && $deep) {
+                $values[$key] = $element->getDetails($deep);
+            } elseif ($element instanceof PDFObject && $deep) {
+                $values[$key] = $element->getDetails(false);
+            } elseif ($element instanceof ElementArray) {
+                if ($deep) {
+                    $values[$key] = $element->getDetails();
+                }
+            } elseif ($element instanceof Element) {
+                $values[$key] = (string) $element;
+            }
+        }
+
+        return $values;
+    }
+
+    /**
+     * Indicate if an element name is available in header.
+     *
+     * @param string $name the name of the element
+     */
+    public function has(string $name): bool
+    {
+        return \array_key_exists($name, $this->elements);
+    }
+
+    /**
+     * @return Element|PDFObject
+     */
+    public function get(string $name)
+    {
+        if (\array_key_exists($name, $this->elements) && $element = $this->resolveXRef($name)) {
+            return $element;
+        }
+
+        return new ElementMissing();
+    }
+
+    /**
+     * Resolve XRef to object.
+     *
+     * @return Element|PDFObject
+     *
+     * @throws \Exception
+     */
+    protected function resolveXRef(string $name)
+    {
+        if (($obj = $this->elements[$name]) instanceof ElementXRef && null !== $this->document) {
+            /** @var ElementXRef $obj */
+            $object = $this->document->getObjectById($obj->getId());
+
+            if (null === $object) {
+                return new ElementMissing();
+            }
+
+            // Update elements list for future calls.
+            $this->elements[$name] = $object;
+        }
+
+        return $this->elements[$name];
+    }
+
+    /**
+     * @param string   $content  The content to parse
+     * @param Document $document The document
+     * @param int      $position The new position of the cursor after parsing
+     */
+    public static function parse(string $content, Document $document, int &$position = 0): self
+    {
+        /* @var Header $header */
+        if ('<<' == substr(trim($content), 0, 2)) {
+            $header = ElementStruct::parse($content, $document, $position);
+        } else {
+            $elements = ElementArray::parse($content, $document, $position);
+            $header = new self([], $document);
+
+            if ($elements) {
+                $header = new self($elements->getRawContent(), null);
+            }
+        }
+
+        if ($header) {
+            return $header;
+        }
+
+        // Build an empty header.
+        return new self([], $document);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/PDFObject.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/PDFObject.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/PDFObject.php	(revision 8435)
@@ -0,0 +1,1192 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser;
+
+use Smalot\PdfParser\XObject\Form;
+use Smalot\PdfParser\XObject\Image;
+
+/**
+ * Class PDFObject
+ */
+class PDFObject
+{
+    public const TYPE = 't';
+
+    public const OPERATOR = 'o';
+
+    public const COMMAND = 'c';
+
+    /**
+     * The recursion stack.
+     *
+     * @var array
+     */
+    public static $recursionStack = [];
+
+    /**
+     * @var Document|null
+     */
+    protected $document;
+
+    /**
+     * @var Header
+     */
+    protected $header;
+
+    /**
+     * @var string
+     */
+    protected $content;
+
+    /**
+     * @var Config|null
+     */
+    protected $config;
+
+    /**
+     * @var bool
+     */
+    protected $addPositionWhitespace = false;
+
+    public function __construct(
+        Document $document,
+        ?Header $header = null,
+        ?string $content = null,
+        ?Config $config = null
+    ) {
+        $this->document = $document;
+        $this->header = $header ?? new Header();
+        $this->content = $content;
+        $this->config = $config;
+    }
+
+    public function init()
+    {
+    }
+
+    public function getDocument(): Document
+    {
+        return $this->document;
+    }
+
+    public function getHeader(): ?Header
+    {
+        return $this->header;
+    }
+
+    public function getConfig(): ?Config
+    {
+        return $this->config;
+    }
+
+    /**
+     * @return Element|PDFObject|Header
+     */
+    public function get(string $name)
+    {
+        return $this->header->get($name);
+    }
+
+    public function has(string $name): bool
+    {
+        return $this->header->has($name);
+    }
+
+    public function getDetails(bool $deep = true): array
+    {
+        return $this->header->getDetails($deep);
+    }
+
+    public function getContent(): ?string
+    {
+        return $this->content;
+    }
+
+    /**
+     * Creates a duplicate of the document stream with
+     * strings and other items replaced by $char. Formerly
+     * getSectionsText() used this output to more easily gather offset
+     * values to extract text from the *actual* document stream.
+     *
+     * @deprecated function is no longer used and will be removed in a future release
+     *
+     * @internal
+     */
+    public function cleanContent(string $content, string $char = 'X')
+    {
+        $char = $char[0];
+        $content = str_replace(['\\\\', '\\)', '\\('], $char.$char, $content);
+
+        // Remove image bloc with binary content
+        preg_match_all('/\s(BI\s.*?(\sID\s).*?(\sEI))\s/s', $content, $matches, \PREG_OFFSET_CAPTURE);
+        foreach ($matches[0] as $part) {
+            $content = substr_replace($content, str_repeat($char, \strlen($part[0])), $part[1], \strlen($part[0]));
+        }
+
+        // Clean content in square brackets [.....]
+        preg_match_all('/\[((\(.*?\)|[0-9\.\-\s]*)*)\]/s', $content, $matches, \PREG_OFFSET_CAPTURE);
+        foreach ($matches[1] as $part) {
+            $content = substr_replace($content, str_repeat($char, \strlen($part[0])), $part[1], \strlen($part[0]));
+        }
+
+        // Clean content in round brackets (.....)
+        preg_match_all('/\((.*?)\)/s', $content, $matches, \PREG_OFFSET_CAPTURE);
+        foreach ($matches[1] as $part) {
+            $content = substr_replace($content, str_repeat($char, \strlen($part[0])), $part[1], \strlen($part[0]));
+        }
+
+        // Clean structure
+        if ($parts = preg_split('/(<|>)/s', $content, -1, \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE)) {
+            $content = '';
+            $level = 0;
+            foreach ($parts as $part) {
+                if ('<' == $part) {
+                    ++$level;
+                }
+
+                $content .= (0 == $level ? $part : str_repeat($char, \strlen($part)));
+
+                if ('>' == $part) {
+                    --$level;
+                }
+            }
+        }
+
+        // Clean BDC and EMC markup
+        preg_match_all(
+            '/(\/[A-Za-z0-9\_]*\s*'.preg_quote($char).'*BDC)/s',
+            $content,
+            $matches,
+            \PREG_OFFSET_CAPTURE
+        );
+        foreach ($matches[1] as $part) {
+            $content = substr_replace($content, str_repeat($char, \strlen($part[0])), $part[1], \strlen($part[0]));
+        }
+
+        preg_match_all('/\s(EMC)\s/s', $content, $matches, \PREG_OFFSET_CAPTURE);
+        foreach ($matches[1] as $part) {
+            $content = substr_replace($content, str_repeat($char, \strlen($part[0])), $part[1], \strlen($part[0]));
+        }
+
+        return $content;
+    }
+
+    /**
+     * Takes a string of PDF document stream text and formats
+     * it into a multi-line string with one PDF command on each line,
+     * separated by \r\n. If the given string is null, or binary data
+     * is detected instead of a document stream then return an empty
+     * string.
+     */
+    private function formatContent(?string $content): string
+    {
+        if (null === $content) {
+            return '';
+        }
+
+        // Outside of (String) and inline image content in PDF document
+        // streams, all text should conform to UTF-8. Test for binary
+        // content by deleting everything after the first open-
+        // parenthesis ( which indicates the beginning of a string, or
+        // the first ID command which indicates the beginning of binary
+        // inline image content. Then test what remains for valid
+        // UTF-8. If it's not UTF-8, return an empty string as this
+        // $content is most likely binary. Unfortunately, using
+        // mb_check_encoding(..., 'UTF-8') is not strict enough, so the
+        // following regexp, adapted from the W3, is used. See:
+        // https://www.w3.org/International/questions/qa-forms-utf-8.en
+        // We use preg_replace() instead of preg_match() to avoid "JIT
+        // stack limit exhausted" errors on larger files.
+        $utf8Filter = preg_replace('/(
+            [\x09\x0A\x0D\x20-\x7E] |            # ASCII
+            [\xC2-\xDF][\x80-\xBF] |             # non-overlong 2-byte
+            \xE0[\xA0-\xBF][\x80-\xBF] |         # excluding overlongs
+            [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} |  # straight 3-byte
+            \xED[\x80-\x9F][\x80-\xBF] |         # excluding surrogates
+            \xF0[\x90-\xBF][\x80-\xBF]{2} |      # planes 1-3
+            [\xF1-\xF3][\x80-\xBF]{3} |          # planes 4-15
+            \xF4[\x80-\x8F][\x80-\xBF]{2}        # plane 16
+        )/xs', '', preg_replace('/(\(|ID\s).*$/s', '', $content));
+
+        if ('' !== $utf8Filter) {
+            return '';
+        }
+
+        // Find all inline image content and replace them so they aren't
+        // affected by the next steps
+        $pdfInlineImages = [];
+        $offsetBI = 0;
+        while (preg_match('/\sBI\s(\/.+?)\sID\s(.+?)\sEI(?=\s|$)/s', $content, $text, \PREG_OFFSET_CAPTURE, $offsetBI)) {
+            // Attempt to detemine if this instance of the 'BI' command
+            // actually occured within a (string) using the following
+            // steps:
+
+            // Step 1: Remove any escaped slashes and parentheses from
+            // the alleged image characteristics data
+            $para = str_replace(['\\\\', '\\(', '\\)'], '', $text[1][0]);
+
+            // Step 2: Remove all correctly ordered and balanced
+            // parentheses from (strings)
+            do {
+                $paraTest = $para;
+                $para = preg_replace('/\(([^()]*)\)/', '$1', $paraTest);
+            } while ($para != $paraTest);
+
+            $paraOpen = strpos($para, '(');
+            $paraClose = strpos($para, ')');
+
+            // Check: If the remaining text contains a close parenthesis
+            // ')' AND it occurs before any open parenthesis, then we
+            // are almost certain to be inside a (string)
+            if (0 < $paraClose && (false === $paraOpen || $paraClose < $paraOpen)) {
+                // Bump the search offset forward and match again
+                $offsetBI = (int) $text[1][1];
+                continue;
+            }
+
+            // Step 3: Double check that this is actually inline image
+            // data by parsing the alleged image characteristics as a
+            // dictionary
+            $dict = $this->parseDictionary('<<'.$text[1][0].'>>');
+
+            // Check if an image Width and Height are set in the dict
+            if ((isset($dict['W']) || isset($dict['Width']))
+                && (isset($dict['H']) || isset($dict['Height']))) {
+                $id = uniqid('IMAGE_', true);
+                $pdfInlineImages[$id] = [
+                    preg_replace(['/\r\n/', '/\r/', '/\n/'], ' ', $text[1][0]),
+                    preg_replace(['/\r\n/', '/\r/', '/\n/'], '', $text[2][0]),
+                ];
+                $content = preg_replace(
+                    '/'.preg_quote($text[0][0], '/').'/',
+                    '^^^'.$id.'^^^',
+                    $content,
+                    1
+                );
+            } else {
+                // If there was no valid dictionary, or a height and width
+                // weren't specified, then we don't know what this is, so
+                // just leave it alone; bump the search offset forward and
+                // match again
+                $offsetBI = (int) $text[1][1];
+            }
+        }
+
+        // Find all strings () and replace them so they aren't affected
+        // by the next steps
+        $pdfstrings = [];
+        $attempt = '(';
+        while (preg_match('/'.preg_quote($attempt, '/').'.*?\)/s', $content, $text)) {
+            // Remove all escaped slashes and parentheses from the target text
+            $para = str_replace(['\\\\', '\\(', '\\)'], '', $text[0]);
+
+            // PDF strings can contain unescaped parentheses as long as
+            // they're balanced, so check for balanced parentheses
+            $left = preg_match_all('/\(/', $para);
+            $right = preg_match_all('/\)/', $para);
+
+            if (')' == $para[-1] && $left == $right) {
+                // Replace the string with a unique placeholder
+                $id = uniqid('STRING_', true);
+                $pdfstrings[$id] = $text[0];
+                $content = preg_replace(
+                    '/'.preg_quote($text[0], '/').'/',
+                    '@@@'.$id.'@@@',
+                    $content,
+                    1
+                );
+
+                // Reset to search for the next string
+                $attempt = '(';
+            } else {
+                // We had unbalanced parentheses, so use the current
+                // match as a base to find a longer string
+                $attempt = $text[0];
+            }
+        }
+
+        // Remove all carriage returns and line-feeds from the document stream
+        $content = str_replace(["\r", "\n"], ' ', trim($content));
+
+        // Find all dictionary << >> commands and replace them so they
+        // aren't affected by the next steps
+        $dictstore = [];
+        while (preg_match('/(<<.*?>> *)(BDC|BMC|DP|MP)/s', $content, $dicttext)) {
+            $dictid = uniqid('DICT_', true);
+            $dictstore[$dictid] = $dicttext[1];
+            $content = preg_replace(
+                '/'.preg_quote($dicttext[0], '/').'/',
+                ' ###'.$dictid.'###'.$dicttext[2],
+                $content,
+                1
+            );
+        }
+
+        // Normalize white-space in the document stream
+        $content = preg_replace('/\s{2,}/', ' ', $content);
+
+        // Find all valid PDF operators and add \r\n after each; this
+        // ensures there is just one command on every line
+        // Source: https://ia801001.us.archive.org/1/items/pdf1.7/pdf_reference_1-7.pdf - Appendix A
+        // Source: https://archive.org/download/pdf320002008/PDF32000_2008.pdf - Annex A
+        // Note: PDF Reference 1.7 lists 'I' and 'rI' as valid commands, while
+        //       PDF 32000:2008 lists them as 'i' and 'ri' respectively. Both versions
+        //       appear here in the list for completeness.
+        $operators = [
+            'b*', 'b', 'BDC', 'BMC', 'B*', 'BI', 'BT', 'BX', 'B', 'cm', 'cs', 'c', 'CS',
+            'd0', 'd1', 'd', 'Do', 'DP', 'EMC', 'EI', 'ET', 'EX', 'f*', 'f', 'F', 'gs',
+            'g', 'G',  'h', 'i', 'ID', 'I', 'j', 'J', 'k', 'K', 'l', 'm', 'MP', 'M', 'n',
+            'q', 'Q', 're', 'rg', 'ri', 'rI', 'RG', 'scn', 'sc', 'sh', 's', 'SCN', 'SC',
+            'S', 'T*', 'Tc', 'Td', 'TD', 'Tf', 'TJ', 'Tj', 'TL', 'Tm', 'Tr', 'Ts', 'Tw',
+            'Tz', 'v', 'w', 'W*', 'W', 'y', '\'', '"',
+        ];
+        foreach ($operators as $operator) {
+            $content = preg_replace(
+                '/(?<!\w|\/)'.preg_quote($operator, '/').'(?![\w10\*])/',
+                $operator."\r\n",
+                $content
+            );
+        }
+
+        // Restore the original content of the dictionary << >> commands
+        $dictstore = array_reverse($dictstore, true);
+        foreach ($dictstore as $id => $dict) {
+            $content = str_replace('###'.$id.'###', $dict, $content);
+        }
+
+        // Restore the original string content
+        $pdfstrings = array_reverse($pdfstrings, true);
+        foreach ($pdfstrings as $id => $text) {
+            // Strings may contain escaped newlines, or literal newlines
+            // and we should clean these up before replacing the string
+            // back into the content stream; this ensures no strings are
+            // split between two lines (every command must be on one line)
+            $text = str_replace(
+                ["\\\r\n", "\\\r", "\\\n", "\r", "\n"],
+                ['', '', '', '\r', '\n'],
+                $text
+            );
+
+            $content = str_replace('@@@'.$id.'@@@', $text, $content);
+        }
+
+        // Restore the original content of any inline images
+        $pdfInlineImages = array_reverse($pdfInlineImages, true);
+        foreach ($pdfInlineImages as $id => $image) {
+            $content = str_replace(
+                '^^^'.$id.'^^^',
+                "\r\nBI\r\n".$image[0]." ID\r\n".$image[1]." EI\r\n",
+                $content
+            );
+        }
+
+        $content = trim(preg_replace(['/(\r\n){2,}/', '/\r\n +/'], "\r\n", $content));
+
+        return $content;
+    }
+
+    /**
+     * getSectionsText() now takes an entire, unformatted
+     * document stream as a string, cleans it, then filters out
+     * commands that aren't needed for text positioning/extraction. It
+     * returns an array of unprocessed PDF commands, one command per
+     * element.
+     *
+     * @internal
+     */
+    public function getSectionsText(?string $content): array
+    {
+        $sections = [];
+
+        // A cleaned stream has one command on every line, so split the
+        // cleaned stream content on \r\n into an array
+        $textCleaned = preg_split(
+            '/(\r\n|\n|\r)/',
+            $this->formatContent($content),
+            -1,
+            \PREG_SPLIT_NO_EMPTY
+        );
+
+        $inTextBlock = false;
+        foreach ($textCleaned as $line) {
+            $line = trim($line);
+
+            // Skip empty lines
+            if ('' === $line) {
+                continue;
+            }
+
+            // If a 'BT' is encountered, set the $inTextBlock flag
+            if (preg_match('/BT$/', $line)) {
+                $inTextBlock = true;
+                $sections[] = $line;
+
+            // If an 'ET' is encountered, unset the $inTextBlock flag
+            } elseif ('ET' == $line) {
+                $inTextBlock = false;
+                $sections[] = $line;
+            } elseif ($inTextBlock) {
+                // If we are inside a BT ... ET text block, save all lines
+                $sections[] = trim($line);
+            } else {
+                // Otherwise, if we are outside of a text block, only
+                // save specific, necessary lines. Care should be taken
+                // to ensure a command being checked for *only* matches
+                // that command. For instance, a simple search for 'c'
+                // may also match the 'sc' command. See the command
+                // list in the formatContent() method above.
+                // Add more commands to save here as you find them in
+                // weird PDFs!
+                if ('q' == $line[-1] || 'Q' == $line[-1]) {
+                    // Save and restore graphics state commands
+                    $sections[] = $line;
+                } elseif (preg_match('/(?<!\w)B[DM]C$/', $line)) {
+                    // Begin marked content sequence
+                    $sections[] = $line;
+                } elseif (preg_match('/(?<!\w)[DM]P$/', $line)) {
+                    // Marked content point
+                    $sections[] = $line;
+                } elseif (preg_match('/(?<!\w)EMC$/', $line)) {
+                    // End marked content sequence
+                    $sections[] = $line;
+                } elseif (preg_match('/(?<!\w)cm$/', $line)) {
+                    // Graphics position change commands
+                    $sections[] = $line;
+                } elseif (preg_match('/(?<!\w)Tf$/', $line)) {
+                    // Font change commands
+                    $sections[] = $line;
+                } elseif (preg_match('/(?<!\w)Do$/', $line)) {
+                    // Invoke named XObject command
+                    $sections[] = $line;
+                }
+            }
+        }
+
+        return $sections;
+    }
+
+    private function getDefaultFont(?Page $page = null): Font
+    {
+        $fonts = [];
+        if (null !== $page) {
+            $fonts = $page->getFonts();
+        }
+
+        $firstFont = $this->document->getFirstFont();
+        if (null !== $firstFont) {
+            $fonts[] = $firstFont;
+        }
+
+        if (\count($fonts) > 0) {
+            return reset($fonts);
+        }
+
+        return new Font($this->document, null, null, $this->config);
+    }
+
+    /**
+     * Decode a '[]TJ' command and attempt to use alternate
+     * fonts if the current font results in output that contains
+     * Unicode control characters.
+     *
+     * @internal
+     *
+     * @param array<int,array<string,string|bool>> $command
+     */
+    private function getTJUsingFontFallback(Font $font, array $command, ?Page $page = null, float $fontFactor = 4): string
+    {
+        $orig_text = $font->decodeText($command, $fontFactor);
+        $text = $orig_text;
+
+        // If we make this a Config option, we can add a check if it's
+        // enabled here.
+        if (null !== $page) {
+            $font_ids = array_keys($page->getFonts());
+
+            // If the decoded text contains UTF-8 control characters
+            // then the font page being used is probably the wrong one.
+            // Loop through the rest of the fonts to see if we can get
+            // a good decode. Allow x09 to x0d which are whitespace.
+            while (preg_match('/[\x00-\x08\x0e-\x1f\x7f]/u', $text) || false !== strpos(bin2hex($text), '00')) {
+                // If we're out of font IDs, then give up and use the
+                // original string
+                if (0 == \count($font_ids)) {
+                    return $orig_text;
+                }
+
+                // Try the next font ID
+                $font = $page->getFont(array_shift($font_ids));
+                $text = $font->decodeText($command, $fontFactor);
+            }
+        }
+
+        return $text;
+    }
+
+    /**
+     * Expects a string that is a full PDF dictionary object,
+     * including the outer enclosing << >> angle brackets
+     *
+     * @internal
+     *
+     * @throws \Exception
+     */
+    public function parseDictionary(string $dictionary): array
+    {
+        // Normalize whitespace
+        $dictionary = preg_replace(['/\r/', '/\n/', '/\s{2,}/'], ' ', trim($dictionary));
+
+        if ('<<' != substr($dictionary, 0, 2)) {
+            throw new \Exception('Not a valid dictionary object.');
+        }
+
+        $parsed = [];
+        $stack = [];
+        $currentName = '';
+        $arrayTypeNumeric = false;
+
+        // Remove outer layer of dictionary, and split on tokens
+        $split = preg_split(
+            '/(<<|>>|\[|\]|\/[^\s\/\[\]\(\)<>]*)/',
+            trim(preg_replace('/^<<|>>$/', '', $dictionary)),
+            -1,
+            \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE
+        );
+
+        foreach ($split as $token) {
+            $token = trim($token);
+            switch ($token) {
+                case '':
+                    break;
+
+                    // Open numeric array
+                case '[':
+                    $parsed[$currentName] = [];
+                    $arrayTypeNumeric = true;
+
+                    // Move up one level in the stack
+                    $stack[\count($stack)] = &$parsed;
+                    $parsed = &$parsed[$currentName];
+                    $currentName = '';
+                    break;
+
+                    // Open hashed array
+                case '<<':
+                    $parsed[$currentName] = [];
+                    $arrayTypeNumeric = false;
+
+                    // Move up one level in the stack
+                    $stack[\count($stack)] = &$parsed;
+                    $parsed = &$parsed[$currentName];
+                    $currentName = '';
+                    break;
+
+                    // Close numeric array
+                case ']':
+                    // Revert string type arrays back to a single element
+                    if (\is_array($parsed) && 1 == \count($parsed)
+                        && isset($parsed[0]) && \is_string($parsed[0])
+                        && '' !== $parsed[0] && '/' != $parsed[0][0]) {
+                        $parsed = '['.$parsed[0].']';
+                    }
+                    // Close hashed array
+                    // no break
+                case '>>':
+                    $arrayTypeNumeric = false;
+
+                    // Move down one level in the stack
+                    $parsed = &$stack[\count($stack) - 1];
+                    unset($stack[\count($stack) - 1]);
+                    break;
+
+                default:
+                    // If value begins with a slash, then this is a name
+                    // Add it to the appropriate array
+                    if ('/' == substr($token, 0, 1)) {
+                        $currentName = substr($token, 1);
+                        if (true == $arrayTypeNumeric) {
+                            $parsed[] = $currentName;
+                            $currentName = '';
+                        }
+                    } elseif ('' != $currentName) {
+                        if (false == $arrayTypeNumeric) {
+                            $parsed[$currentName] = $token;
+                        }
+                        $currentName = '';
+                    } elseif ('' == $currentName) {
+                        $parsed[] = $token;
+                    }
+            }
+        }
+
+        return $parsed;
+    }
+
+    /**
+     * Returns the text content of a PDF as a string. Attempts to add
+     * whitespace for spacing and line-breaks where appropriate.
+     *
+     * getText() leverages getTextArray() to get the content
+     * of the document, setting the addPositionWhitespace flag to true
+     * so whitespace is inserted in a logical way for reading by
+     * humans.
+     */
+    public function getText(?Page $page = null): string
+    {
+        $this->addPositionWhitespace = true;
+        $result = $this->getTextArray($page);
+        $this->addPositionWhitespace = false;
+
+        return implode('', $result).' ';
+    }
+
+    /**
+     * Returns the text content of a PDF as an array of strings. No
+     * extra whitespace is inserted besides what is actually encoded in
+     * the PDF text.
+     *
+     * @throws \Exception
+     */
+    public function getTextArray(?Page $page = null): array
+    {
+        $result = [];
+        $text = [];
+
+        $marked_stack = [];
+        $last_written_position = false;
+
+        $sections = $this->getSectionsText($this->content);
+        $current_font = $this->getDefaultFont($page);
+        $current_font_size = 1;
+        $current_text_leading = 0;
+
+        $current_position = ['x' => false, 'y' => false];
+        $current_position_tm = [
+            'a' => 1, 'b' => 0, 'c' => 0,
+            'i' => 0, 'j' => 1, 'k' => 0,
+            'x' => 0, 'y' => 0, 'z' => 1,
+        ];
+        $current_position_td = ['x' => 0, 'y' => 0];
+        $current_position_cm = [
+            'a' => 1, 'b' => 0, 'c' => 0,
+            'i' => 0, 'j' => 1, 'k' => 0,
+            'x' => 0, 'y' => 0, 'z' => 1,
+        ];
+
+        $clipped_font = [];
+        $clipped_position_cm = [];
+
+        self::$recursionStack[] = $this->getUniqueId();
+
+        foreach ($sections as $section) {
+            $commands = $this->getCommandsText($section);
+            foreach ($commands as $command) {
+                switch ($command[self::OPERATOR]) {
+                    // Begin text object
+                    case 'BT':
+                        // Reset text positioning matrices
+                        $current_position_tm = [
+                            'a' => 1, 'b' => 0, 'c' => 0,
+                            'i' => 0, 'j' => 1, 'k' => 0,
+                            'x' => 0, 'y' => 0, 'z' => 1,
+                        ];
+                        $current_position_td = ['x' => 0, 'y' => 0];
+                        $current_text_leading = 0;
+                        break;
+
+                        // Begin marked content sequence with property list
+                    case 'BDC':
+                        if (preg_match('/(<<.*>>)$/', $command[self::COMMAND], $match)) {
+                            $dict = $this->parseDictionary($match[1]);
+
+                            // Check for ActualText block
+                            if (isset($dict['ActualText']) && \is_string($dict['ActualText']) && '' !== $dict['ActualText']) {
+                                if ('[' == $dict['ActualText'][0]) {
+                                    // Simulate a 'TJ' command on the stack
+                                    $marked_stack[] = [
+                                        'ActualText' => $this->getCommandsText($dict['ActualText'].'TJ')[0],
+                                    ];
+                                } elseif ('<' == $dict['ActualText'][0] || '(' == $dict['ActualText'][0]) {
+                                    // Simulate a 'Tj' command on the stack
+                                    $marked_stack[] = [
+                                        'ActualText' => $this->getCommandsText($dict['ActualText'].'Tj')[0],
+                                    ];
+                                }
+                            }
+                        }
+                        break;
+
+                        // Begin marked content sequence
+                    case 'BMC':
+                        if ('ReversedChars' == $command[self::COMMAND]) {
+                            // Upon encountering a ReversedChars command,
+                            // add the characters we've built up so far to
+                            // the result array
+                            $result = array_merge($result, $text);
+
+                            // Start a fresh $text array that will contain
+                            // reversed characters
+                            $text = [];
+
+                            // Add the reversed text flag to the stack
+                            $marked_stack[] = ['ReversedChars' => true];
+                        }
+                        break;
+
+                        // set graphics position matrix
+                    case 'cm':
+                        $args = preg_split('/\s+/s', $command[self::COMMAND]);
+                        $current_position_cm = [
+                            'a' => (float) $args[0], 'b' => (float) $args[1], 'c' => 0,
+                            'i' => (float) $args[2], 'j' => (float) $args[3], 'k' => 0,
+                            'x' => (float) $args[4], 'y' => (float) $args[5], 'z' => 1,
+                        ];
+                        break;
+
+                    case 'Do':
+                        if (null !== $page) {
+                            $args = preg_split('/\s/s', $command[self::COMMAND]);
+                            $id = trim(array_pop($args), '/ ');
+                            $xobject = $page->getXObject($id);
+
+                            // @todo $xobject could be a ElementXRef object, which would then throw an error
+                            if (\is_object($xobject) && $xobject instanceof self && !\in_array($xobject->getUniqueId(), self::$recursionStack, true)) {
+                                // Not a circular reference.
+                                $text[] = $xobject->getText($page);
+                            }
+                        }
+                        break;
+
+                        // Marked content point with (DP) & without (MP) property list
+                    case 'DP':
+                    case 'MP':
+                        break;
+
+                        // End text object
+                    case 'ET':
+                        break;
+
+                        // Store current selected font and graphics matrix
+                    case 'q':
+                        $clipped_font[] = [$current_font, $current_font_size];
+                        $clipped_position_cm[] = $current_position_cm;
+                        break;
+
+                        // Restore previous selected font and graphics matrix
+                    case 'Q':
+                        list($current_font, $current_font_size) = array_pop($clipped_font);
+                        $current_position_cm = array_pop($clipped_position_cm);
+                        break;
+
+                        // End marked content sequence
+                    case 'EMC':
+                        $data = false;
+                        if (\count($marked_stack)) {
+                            $marked = array_pop($marked_stack);
+                            $action = key($marked);
+                            $data = $marked[$action];
+
+                            switch ($action) {
+                                // If we are in ReversedChars mode...
+                                case 'ReversedChars':
+                                    // Reverse the characters we've built up so far
+                                    foreach ($text as $key => $t) {
+                                        $text[$key] = implode('', array_reverse(
+                                            mb_str_split($t, 1, mb_internal_encoding())
+                                        ));
+                                    }
+
+                                    // Add these characters to the result array
+                                    $result = array_merge($result, $text);
+
+                                    // Start a fresh $text array that will contain
+                                    // non-reversed characters
+                                    $text = [];
+                                    break;
+
+                                case 'ActualText':
+                                    // Use the content of the ActualText as a command
+                                    $command = $data;
+                                    break;
+                            }
+                        }
+
+                        // If this EMC command has been transformed into a 'Tj'
+                        // or 'TJ' command because of being ActualText, then bypass
+                        // the break to proceed to the writing section below.
+                        if ('Tj' != $command[self::OPERATOR] && 'TJ' != $command[self::OPERATOR]) {
+                            break;
+                        }
+
+                        // no break
+                    case "'":
+                    case '"':
+                        if ("'" == $command[self::OPERATOR] || '"' == $command[self::OPERATOR]) {
+                            // Move to next line and write text
+                            $current_position['x'] = 0;
+                            $current_position_td['x'] = 0;
+                            $current_position_td['y'] += $current_text_leading;
+                        }
+                        // no break
+                    case 'Tj':
+                        $command[self::COMMAND] = [$command];
+                        // no break
+                    case 'TJ':
+                        // Check the marked content stack for flags
+                        $actual_text = false;
+                        $reverse_text = false;
+                        foreach ($marked_stack as $marked) {
+                            if (isset($marked['ActualText'])) {
+                                $actual_text = true;
+                            }
+                            if (isset($marked['ReversedChars'])) {
+                                $reverse_text = true;
+                            }
+                        }
+
+                        // Account for text position ONLY just before we write text
+                        if (false === $actual_text && \is_array($last_written_position)) {
+                            // If $last_written_position is an array, that
+                            // means we have stored text position coordinates
+                            // for placing an ActualText
+                            $currentX = $last_written_position[0];
+                            $currentY = $last_written_position[1];
+                            $last_written_position = false;
+                        } else {
+                            $currentX = $current_position_cm['x'] + $current_position_tm['x'] + $current_position_td['x'];
+                            $currentY = $current_position_cm['y'] + $current_position_tm['y'] + $current_position_td['y'];
+                        }
+                        $whiteSpace = '';
+
+                        $factorX = -$current_font_size * $current_position_tm['a'] - $current_font_size * $current_position_tm['i'];
+                        $factorY = $current_font_size * $current_position_tm['b'] + $current_font_size * $current_position_tm['j'];
+
+                        if (true === $this->addPositionWhitespace && false !== $current_position['x']) {
+                            $curY = $currentY - $current_position['y'];
+                            if (abs($curY) >= abs($factorY) / 4) {
+                                $whiteSpace = "\n";
+                            } else {
+                                if (true === $reverse_text) {
+                                    $curX = $current_position['x'] - $currentX;
+                                } else {
+                                    $curX = $currentX - $current_position['x'];
+                                }
+
+                                // In abs($factorX * 7) below, the 7 is chosen arbitrarily
+                                // as the number of apparent "spaces" in a document we
+                                // would need before considering them a "tab". In the
+                                // future, we might offer this value to users as a config
+                                // option.
+                                if ($curX >= abs($factorX * 7)) {
+                                    $whiteSpace = "\t";
+                                } elseif ($curX >= abs($factorX * 2)) {
+                                    $whiteSpace = ' ';
+                                }
+                            }
+                        }
+
+                        $newtext = $this->getTJUsingFontFallback(
+                            $current_font,
+                            $command[self::COMMAND],
+                            $page,
+                            $factorX
+                        );
+
+                        // If there is no ActualText pending then write
+                        if (false === $actual_text) {
+                            $newtext = str_replace(["\r", "\n"], '', $newtext);
+                            if (false !== $reverse_text) {
+                                // If we are in ReversedChars mode, add the whitespace last
+                                $text[] = preg_replace('/  $/', ' ', $newtext.$whiteSpace);
+                            } else {
+                                // Otherwise add the whitespace first
+                                if (' ' === $whiteSpace && isset($text[\count($text) - 1])) {
+                                    $text[\count($text) - 1] = preg_replace('/ $/', '', $text[\count($text) - 1]);
+                                }
+                                $text[] = preg_replace('/^[ \t]{2}/', ' ', $whiteSpace.$newtext);
+                            }
+
+                            // Record the position of this inserted text for comparison
+                            // with the next text block.
+                            // Provide a 'fudge' factor guess on how wide this text block
+                            // is based on the number of characters. This helps limit the
+                            // number of tabs inserted, but isn't perfect.
+                            $factor = $factorX / 2;
+                            $current_position = [
+                                'x' => $currentX - mb_strlen($newtext) * $factor,
+                                'y' => $currentY,
+                            ];
+                        } elseif (false === $last_written_position) {
+                            // If there is an ActualText in the pipeline
+                            // store the position this undisplayed text
+                            // *would* have been written to, so the
+                            // ActualText is displayed in the right spot
+                            $last_written_position = [$currentX, $currentY];
+                            $current_position['x'] = $currentX;
+                        }
+                        break;
+
+                        // move to start of next line
+                    case 'T*':
+                        $current_position['x'] = 0;
+                        $current_position_td['x'] = 0;
+                        $current_position_td['y'] += $current_text_leading;
+                        break;
+
+                        // set character spacing
+                    case 'Tc':
+                        break;
+
+                        // move text current point and set leading
+                    case 'Td':
+                    case 'TD':
+                        // move text current point
+                        $args = preg_split('/\s+/s', $command[self::COMMAND]);
+                        $y = (float) array_pop($args);
+                        $x = (float) array_pop($args);
+
+                        if ('TD' == $command[self::OPERATOR]) {
+                            $current_text_leading = -$y * $current_position_tm['b'] - $y * $current_position_tm['j'];
+                        }
+
+                        $current_position_td = [
+                            'x' => $current_position_td['x'] + $x * $current_position_tm['a'] + $x * $current_position_tm['i'],
+                            'y' => $current_position_td['y'] + $y * $current_position_tm['b'] + $y * $current_position_tm['j'],
+                        ];
+                        break;
+
+                    case 'Tf':
+                        $args = preg_split('/\s/s', $command[self::COMMAND]);
+                        $size = (float) array_pop($args);
+                        $id = trim(array_pop($args), '/');
+                        if (null !== $page) {
+                            $new_font = $page->getFont($id);
+                            // If an invalid font ID is given, do not update the font.
+                            // This should theoretically never happen, as the PDF spec states for the Tf operator:
+                            // "The specified font value shall match a resource name in the Font entry of the default resource dictionary"
+                            // (https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf, page 435)
+                            // But we want to make sure that malformed PDFs do not simply crash.
+                            if (null !== $new_font) {
+                                $current_font = $new_font;
+                                $current_font_size = $size;
+                            }
+                        }
+                        break;
+
+                        // set leading
+                    case 'TL':
+                        $y = (float) $command[self::COMMAND];
+                        $current_text_leading = -$y * $current_position_tm['b'] + -$y * $current_position_tm['j'];
+                        break;
+
+                        // set text position matrix
+                    case 'Tm':
+                        $args = preg_split('/\s+/s', $command[self::COMMAND]);
+                        $current_position_tm = [
+                            'a' => (float) $args[0], 'b' => (float) $args[1], 'c' => 0,
+                            'i' => (float) $args[2], 'j' => (float) $args[3], 'k' => 0,
+                            'x' => (float) $args[4], 'y' => (float) $args[5], 'z' => 1,
+                        ];
+                        break;
+
+                        // set text rendering mode
+                    case 'Ts':
+                        break;
+
+                        // set super/subscripting text rise
+                    case 'Ts':
+                        break;
+
+                        // set word spacing
+                    case 'Tw':
+                        break;
+
+                        // set horizontal scaling
+                    case 'Tz':
+                        break;
+
+                    default:
+                }
+            }
+        }
+
+        $result = array_merge($result, $text);
+
+        return $result;
+    }
+
+    /**
+     * getCommandsText() expects the content of $text_part to be an
+     * already formatted, single-line command from a document stream.
+     * The companion function getSectionsText() returns a document
+     * stream as an array of single commands for just this purpose.
+     * Because of this, the argument $offset is no longer used, and
+     * may be removed in a future PdfParser release.
+     *
+     * A better name for this function would be getCommandText()
+     * since it now always works on just one command.
+     */
+    public function getCommandsText(string $text_part, int &$offset = 0): array
+    {
+        $commands = $matches = [];
+
+        preg_match('/^(([\/\[\(<])?.*)(?<!\w)([a-z01\'\"*]+)$/i', $text_part, $matches);
+
+        // If no valid command is detected, return an empty array
+        if (!isset($matches[1]) || !isset($matches[2]) || !isset($matches[3])) {
+            return [];
+        }
+
+        $type = $matches[2];
+        $operator = $matches[3];
+        $command = trim($matches[1]);
+
+        if ('TJ' == $operator) {
+            $subcommand = [];
+            $command = trim($command, '[]');
+            do {
+                $oldCommand = $command;
+
+                // Search for parentheses string () format
+                if (preg_match('/^ *\((.*?)(?<![^\\\\]\\\\)\) *(-?[\d.]+)?/', $command, $tjmatch)) {
+                    $subcommand[] = [
+                        self::TYPE => '(',
+                        self::OPERATOR => 'TJ',
+                        self::COMMAND => $tjmatch[1],
+                    ];
+                    if (isset($tjmatch[2]) && trim($tjmatch[2])) {
+                        $subcommand[] = [
+                            self::TYPE => 'n',
+                            self::OPERATOR => '',
+                            self::COMMAND => $tjmatch[2],
+                        ];
+                    }
+                    $command = substr($command, \strlen($tjmatch[0]));
+                }
+
+                // Search for hexadecimal <> format
+                if (preg_match('/^ *<([0-9a-f\s]*)> *(-?[\d.]+)?/i', $command, $tjmatch)) {
+                    $tjmatch[1] = preg_replace('/\s/', '', $tjmatch[1]);
+                    $subcommand[] = [
+                        self::TYPE => '<',
+                        self::OPERATOR => 'TJ',
+                        self::COMMAND => $tjmatch[1],
+                    ];
+                    if (isset($tjmatch[2]) && trim($tjmatch[2])) {
+                        $subcommand[] = [
+                            self::TYPE => 'n',
+                            self::OPERATOR => '',
+                            self::COMMAND => $tjmatch[2],
+                        ];
+                    }
+                    $command = substr($command, \strlen($tjmatch[0]));
+                }
+            } while ($command != $oldCommand);
+
+            $command = $subcommand;
+        } elseif ('Tj' == $operator || "'" == $operator || '"' == $operator) {
+            // Depending on the string type, trim the data of the
+            // appropriate delimiters
+            if ('(' == $type) {
+                // Don't use trim() here since a () string may end with
+                // a balanced or escaped right parentheses, and trim()
+                // will delete both. Both strings below are valid:
+                //   eg. (String())
+                //   eg. (String\))
+                $command = preg_replace('/^\(|\)$/', '', $command);
+            } elseif ('<' == $type) {
+                $command = trim($command, '<>');
+            }
+        } elseif ('/' == $type) {
+            $command = substr($command, 1);
+        }
+
+        $commands[] = [
+            self::TYPE => $type,
+            self::OPERATOR => $operator,
+            self::COMMAND => $command,
+        ];
+
+        return $commands;
+    }
+
+    public static function factory(
+        Document $document,
+        Header $header,
+        ?string $content,
+        ?Config $config = null
+    ): self {
+        switch ($header->get('Type')->getContent()) {
+            case 'XObject':
+                switch ($header->get('Subtype')->getContent()) {
+                    case 'Image':
+                        return new Image($document, $header, $config->getRetainImageContent() ? $content : null, $config);
+
+                    case 'Form':
+                        return new Form($document, $header, $content, $config);
+                }
+
+                return new self($document, $header, $content, $config);
+
+            case 'Pages':
+                return new Pages($document, $header, $content, $config);
+
+            case 'Page':
+                return new Page($document, $header, $content, $config);
+
+            case 'Encoding':
+                return new Encoding($document, $header, $content, $config);
+
+            case 'Font':
+                $subtype = $header->get('Subtype')->getContent();
+                $classname = '\Smalot\PdfParser\Font\Font'.$subtype;
+
+                if (class_exists($classname)) {
+                    return new $classname($document, $header, $content, $config);
+                }
+
+                return new Font($document, $header, $content, $config);
+
+            default:
+                return new self($document, $header, $content, $config);
+        }
+    }
+
+    /**
+     * Returns unique id identifying the object.
+     */
+    protected function getUniqueId(): string
+    {
+        return spl_object_hash($this);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Page.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Page.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Page.php	(revision 8435)
@@ -0,0 +1,1014 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser;
+
+use Smalot\PdfParser\Element\ElementArray;
+use Smalot\PdfParser\Element\ElementMissing;
+use Smalot\PdfParser\Element\ElementNull;
+use Smalot\PdfParser\Element\ElementXRef;
+
+class Page extends PDFObject
+{
+    /**
+     * @var Font[]
+     */
+    protected $fonts;
+
+    /**
+     * @var PDFObject[]
+     */
+    protected $xobjects;
+
+    /**
+     * @var array
+     */
+    protected $dataTm;
+
+    /**
+     * @param array<\Smalot\PdfParser\Font> $fonts
+     *
+     * @internal
+     */
+    public function setFonts($fonts)
+    {
+        if (empty($this->fonts)) {
+            $this->fonts = $fonts;
+        }
+    }
+
+    /**
+     * @return Font[]
+     */
+    public function getFonts()
+    {
+        if (null !== $this->fonts) {
+            return $this->fonts;
+        }
+
+        $resources = $this->get('Resources');
+
+        if (method_exists($resources, 'has') && $resources->has('Font')) {
+            if ($resources->get('Font') instanceof ElementMissing) {
+                return [];
+            }
+
+            if ($resources->get('Font') instanceof Header) {
+                $fonts = $resources->get('Font')->getElements();
+            } else {
+                $fonts = $resources->get('Font')->getHeader()->getElements();
+            }
+
+            $table = [];
+
+            foreach ($fonts as $id => $font) {
+                if ($font instanceof Font) {
+                    $table[$id] = $font;
+
+                    // Store too on cleaned id value (only numeric)
+                    $id = preg_replace('/[^0-9\.\-_]/', '', $id);
+                    if ('' != $id) {
+                        $table[$id] = $font;
+                    }
+                }
+            }
+
+            return $this->fonts = $table;
+        }
+
+        return [];
+    }
+
+    public function getFont(string $id): ?Font
+    {
+        $fonts = $this->getFonts();
+
+        if (isset($fonts[$id])) {
+            return $fonts[$id];
+        }
+
+        // According to the PDF specs (https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf, page 238)
+        // "The font resource name presented to the Tf operator is arbitrary, as are the names for all kinds of resources"
+        // Instead, we search for the unfiltered name first and then do this cleaning as a fallback, so all tests still pass.
+
+        if (isset($fonts[$id])) {
+            return $fonts[$id];
+        } else {
+            $id = preg_replace('/[^0-9\.\-_]/', '', $id);
+            if (isset($fonts[$id])) {
+                return $fonts[$id];
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Support for XObject
+     *
+     * @return PDFObject[]
+     */
+    public function getXObjects()
+    {
+        if (null !== $this->xobjects) {
+            return $this->xobjects;
+        }
+
+        $resources = $this->get('Resources');
+
+        if (method_exists($resources, 'has') && $resources->has('XObject')) {
+            if ($resources->get('XObject') instanceof Header) {
+                $xobjects = $resources->get('XObject')->getElements();
+            } else {
+                $xobjects = $resources->get('XObject')->getHeader()->getElements();
+            }
+
+            $table = [];
+
+            foreach ($xobjects as $id => $xobject) {
+                $table[$id] = $xobject;
+
+                // Store too on cleaned id value (only numeric)
+                $id = preg_replace('/[^0-9\.\-_]/', '', $id);
+                if ('' != $id) {
+                    $table[$id] = $xobject;
+                }
+            }
+
+            return $this->xobjects = $table;
+        }
+
+        return [];
+    }
+
+    public function getXObject(string $id): ?PDFObject
+    {
+        $xobjects = $this->getXObjects();
+
+        if (isset($xobjects[$id])) {
+            return $xobjects[$id];
+        }
+
+        return null;
+        /*$id = preg_replace('/[^0-9\.\-_]/', '', $id);
+
+        if (isset($xobjects[$id])) {
+            return $xobjects[$id];
+        } else {
+            return null;
+        }*/
+    }
+
+    public function getText(?self $page = null): string
+    {
+        if ($contents = $this->get('Contents')) {
+            if ($contents instanceof ElementMissing) {
+                return '';
+            } elseif ($contents instanceof ElementNull) {
+                return '';
+            } elseif ($contents instanceof PDFObject) {
+                $elements = $contents->getHeader()->getElements();
+
+                if (is_numeric(key($elements))) {
+                    $new_content = '';
+
+                    foreach ($elements as $element) {
+                        if ($element instanceof ElementXRef) {
+                            $new_content .= $element->getObject()->getContent();
+                        } else {
+                            $new_content .= $element->getContent();
+                        }
+                    }
+
+                    $header = new Header([], $this->document);
+                    $contents = new PDFObject($this->document, $header, $new_content, $this->config);
+                }
+            } elseif ($contents instanceof ElementArray) {
+                // Create a virtual global content.
+                $new_content = '';
+
+                foreach ($contents->getContent() as $content) {
+                    $new_content .= $content->getContent()."\n";
+                }
+
+                $header = new Header([], $this->document);
+                $contents = new PDFObject($this->document, $header, $new_content, $this->config);
+            }
+
+            /*
+             * Elements referencing each other on the same page can cause endless loops during text parsing.
+             * To combat this we keep a recursionStack containing already parsed elements on the page.
+             * The stack is only emptied here after getting text from a page.
+             */
+            $contentsText = $contents->getText($this);
+            PDFObject::$recursionStack = [];
+
+            return $contentsText;
+        }
+
+        return '';
+    }
+
+    /**
+     * Return true if the current page is a (setasign\Fpdi\Fpdi) FPDI/FPDF document
+     *
+     * The metadata 'Producer' should have the value of "FPDF" . FPDF_VERSION if the
+     * pdf file was generated by FPDF/Fpfi.
+     *
+     * @return bool true is the current page is a FPDI/FPDF document
+     */
+    public function isFpdf(): bool
+    {
+        if (\array_key_exists('Producer', $this->document->getDetails())
+            && \is_string($this->document->getDetails()['Producer'])
+            && 0 === strncmp($this->document->getDetails()['Producer'], 'FPDF', 4)) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Return the page number of the PDF document of the page object
+     *
+     * @return int the page number
+     */
+    public function getPageNumber(): int
+    {
+        $pages = $this->document->getPages();
+        $numOfPages = \count($pages);
+        for ($pageNum = 0; $pageNum < $numOfPages; ++$pageNum) {
+            if ($pages[$pageNum] === $this) {
+                break;
+            }
+        }
+
+        return $pageNum;
+    }
+
+    /**
+     * Return the Object of the page if the document is a FPDF/FPDI document
+     *
+     * If the document was generated by FPDF/FPDI it returns the
+     * PDFObject of the given page
+     *
+     * @return PDFObject The PDFObject for the page
+     */
+    public function getPDFObjectForFpdf(): PDFObject
+    {
+        $pageNum = $this->getPageNumber();
+        $xObjects = $this->getXObjects();
+
+        return $xObjects[$pageNum];
+    }
+
+    /**
+     * Return a new PDFObject of the document created with FPDF/FPDI
+     *
+     * For a document generated by FPDF/FPDI, it generates a
+     * new PDFObject for that document
+     *
+     * @return PDFObject The PDFObject
+     */
+    public function createPDFObjectForFpdf(): PDFObject
+    {
+        $pdfObject = $this->getPDFObjectForFpdf();
+        $new_content = $pdfObject->getContent();
+        $header = $pdfObject->getHeader();
+        $config = $pdfObject->config;
+
+        return new PDFObject($pdfObject->document, $header, $new_content, $config);
+    }
+
+    /**
+     * Return page if document is a FPDF/FPDI document
+     *
+     * @return Page The page
+     */
+    public function createPageForFpdf(): self
+    {
+        $pdfObject = $this->getPDFObjectForFpdf();
+        $new_content = $pdfObject->getContent();
+        $header = $pdfObject->getHeader();
+        $config = $pdfObject->config;
+
+        return new self($pdfObject->document, $header, $new_content, $config);
+    }
+
+    public function getTextArray(?self $page = null): array
+    {
+        if ($this->isFpdf()) {
+            $pdfObject = $this->getPDFObjectForFpdf();
+            $newPdfObject = $this->createPDFObjectForFpdf();
+
+            return $newPdfObject->getTextArray($pdfObject);
+        } else {
+            if ($contents = $this->get('Contents')) {
+                if ($contents instanceof ElementMissing) {
+                    return [];
+                } elseif ($contents instanceof ElementNull) {
+                    return [];
+                } elseif ($contents instanceof PDFObject) {
+                    $elements = $contents->getHeader()->getElements();
+
+                    if (is_numeric(key($elements))) {
+                        $new_content = '';
+
+                        /** @var PDFObject $element */
+                        foreach ($elements as $element) {
+                            if ($element instanceof ElementXRef) {
+                                $new_content .= $element->getObject()->getContent();
+                            } else {
+                                $new_content .= $element->getContent();
+                            }
+                        }
+
+                        $header = new Header([], $this->document);
+                        $contents = new PDFObject($this->document, $header, $new_content, $this->config);
+                    } else {
+                        try {
+                            $contents->getTextArray($this);
+                        } catch (\Throwable $e) {
+                            return $contents->getTextArray();
+                        }
+                    }
+                } elseif ($contents instanceof ElementArray) {
+                    // Create a virtual global content.
+                    $new_content = '';
+
+                    /** @var PDFObject $content */
+                    foreach ($contents->getContent() as $content) {
+                        $new_content .= $content->getContent()."\n";
+                    }
+
+                    $header = new Header([], $this->document);
+                    $contents = new PDFObject($this->document, $header, $new_content, $this->config);
+                }
+
+                return $contents->getTextArray($this);
+            }
+
+            return [];
+        }
+    }
+
+    /**
+     * Gets all the text data with its internal representation of the page.
+     *
+     * Returns an array with the data and the internal representation
+     */
+    public function extractRawData(): array
+    {
+        /*
+         * Now you can get the complete content of the object with the text on it
+         */
+        $extractedData = [];
+        $content = $this->get('Contents');
+        $values = $content->getContent();
+        if (isset($values) && \is_array($values)) {
+            $text = '';
+            foreach ($values as $section) {
+                $text .= $section->getContent();
+            }
+            $sectionsText = $this->getSectionsText($text);
+            foreach ($sectionsText as $sectionText) {
+                $commandsText = $this->getCommandsText($sectionText);
+                foreach ($commandsText as $command) {
+                    $extractedData[] = $command;
+                }
+            }
+        } else {
+            if ($this->isFpdf()) {
+                $content = $this->getPDFObjectForFpdf();
+            }
+            $sectionsText = $content->getSectionsText($content->getContent());
+            foreach ($sectionsText as $sectionText) {
+                $commandsText = $content->getCommandsText($sectionText);
+                foreach ($commandsText as $command) {
+                    $extractedData[] = $command;
+                }
+            }
+        }
+
+        return $extractedData;
+    }
+
+    /**
+     * Gets all the decoded text data with it internal representation from a page.
+     *
+     * @param array $extractedRawData the extracted data return by extractRawData or
+     *                                null if extractRawData should be called
+     *
+     * @return array An array with the data and the internal representation
+     */
+    public function extractDecodedRawData(?array $extractedRawData = null): array
+    {
+        if (!isset($extractedRawData) || !$extractedRawData) {
+            $extractedRawData = $this->extractRawData();
+        }
+        $currentFont = null; /** @var Font $currentFont */
+        $clippedFont = null;
+        $fpdfPage = null;
+        if ($this->isFpdf()) {
+            $fpdfPage = $this->createPageForFpdf();
+        }
+        foreach ($extractedRawData as &$command) {
+            if ('Tj' == $command['o'] || 'TJ' == $command['o']) {
+                $data = $command['c'];
+                if (!\is_array($data)) {
+                    $tmpText = '';
+                    if (isset($currentFont)) {
+                        $tmpText = $currentFont->decodeOctal($data);
+                        // $tmpText = $currentFont->decodeHexadecimal($tmpText, false);
+                    }
+                    $tmpText = str_replace(
+                        ['\\\\', '\(', '\)', '\n', '\r', '\t', '\ '],
+                        ['\\', '(', ')', "\n", "\r", "\t", ' '],
+                        $tmpText
+                    );
+                    $tmpText = mb_convert_encoding($tmpText, 'UTF-8', 'ISO-8859-1');
+                    if (isset($currentFont)) {
+                        $tmpText = $currentFont->decodeContent($tmpText);
+                    }
+                    $command['c'] = $tmpText;
+                    continue;
+                }
+                $numText = \count($data);
+                for ($i = 0; $i < $numText; ++$i) {
+                    if (0 != ($i % 2)) {
+                        continue;
+                    }
+                    $tmpText = $data[$i]['c'];
+                    $decodedText = isset($currentFont) ? $currentFont->decodeOctal($tmpText) : $tmpText;
+                    $decodedText = str_replace(
+                        ['\\\\', '\(', '\)', '\n', '\r', '\t', '\ '],
+                        ['\\', '(', ')', "\n", "\r", "\t", ' '],
+                        $decodedText
+                    );
+
+                    $decodedText = mb_convert_encoding($decodedText, 'UTF-8', 'ISO-8859-1');
+
+                    if (isset($currentFont)) {
+                        $decodedText = $currentFont->decodeContent($decodedText);
+                    }
+                    $command['c'][$i]['c'] = $decodedText;
+                    continue;
+                }
+            } elseif ('Tf' == $command['o'] || 'TF' == $command['o']) {
+                $fontId = explode(' ', $command['c'])[0];
+                // If document is a FPDI/FPDF the $page has the correct font
+                $currentFont = isset($fpdfPage) ? $fpdfPage->getFont($fontId) : $this->getFont($fontId);
+                continue;
+            } elseif ('Q' == $command['o']) {
+                $currentFont = $clippedFont;
+            } elseif ('q' == $command['o']) {
+                $clippedFont = $currentFont;
+            }
+        }
+
+        return $extractedRawData;
+    }
+
+    /**
+     * Gets just the Text commands that are involved in text positions and
+     * Text Matrix (Tm)
+     *
+     * It extract just the PDF commands that are involved with text positions, and
+     * the Text Matrix (Tm). These are: BT, ET, TL, Td, TD, Tm, T*, Tj, ', ", and TJ
+     *
+     * @param array $extractedDecodedRawData The data extracted by extractDecodeRawData.
+     *                                       If it is null, the method extractDecodeRawData is called.
+     *
+     * @return array An array with the text command of the page
+     */
+    public function getDataCommands(?array $extractedDecodedRawData = null): array
+    {
+        if (!isset($extractedDecodedRawData) || !$extractedDecodedRawData) {
+            $extractedDecodedRawData = $this->extractDecodedRawData();
+        }
+        $extractedData = [];
+        foreach ($extractedDecodedRawData as $command) {
+            switch ($command['o']) {
+                /*
+                 * BT
+                 * Begin a text object, inicializind the Tm and Tlm to identity matrix
+                 */
+                case 'BT':
+                    $extractedData[] = $command;
+                    break;
+                    /*
+                     * cm
+                     * Concatenation Matrix that will transform all following Tm
+                     */
+                case 'cm':
+                    $extractedData[] = $command;
+                    break;
+                    /*
+                     * ET
+                     * End a text object, discarding the text matrix
+                     */
+                case 'ET':
+                    $extractedData[] = $command;
+                    break;
+
+                    /*
+                     * leading TL
+                     * Set the text leading, Tl, to leading. Tl is used by the T*, ' and " operators.
+                     * Initial value: 0
+                     */
+                case 'TL':
+                    $extractedData[] = $command;
+                    break;
+
+                    /*
+                     * tx ty Td
+                     * Move to the start of the next line, offset form the start of the
+                     * current line by tx, ty.
+                     */
+                case 'Td':
+                    $extractedData[] = $command;
+                    break;
+
+                    /*
+                     * tx ty TD
+                     * Move to the start of the next line, offset form the start of the
+                     * current line by tx, ty. As a side effect, this operator set the leading
+                     * parameter in the text state. This operator has the same effect as the
+                     * code:
+                     * -ty TL
+                     * tx ty Td
+                     */
+                case 'TD':
+                    $extractedData[] = $command;
+                    break;
+
+                    /*
+                     * a b c d e f Tm
+                     * Set the text matrix, Tm, and the text line matrix, Tlm. The operands are
+                     * all numbers, and the initial value for Tm and Tlm is the identity matrix
+                     * [1 0 0 1 0 0]
+                     */
+                case 'Tm':
+                    $extractedData[] = $command;
+                    break;
+
+                    /*
+                     * T*
+                     * Move to the start of the next line. This operator has the same effect
+                     * as the code:
+                     * 0 Tl Td
+                     * Where Tl is the current leading parameter in the text state.
+                     */
+                case 'T*':
+                    $extractedData[] = $command;
+                    break;
+
+                    /*
+                     * string Tj
+                     * Show a Text String
+                     */
+                case 'Tj':
+                    $extractedData[] = $command;
+                    break;
+
+                    /*
+                     * string '
+                     * Move to the next line and show a text string. This operator has the
+                     * same effect as the code:
+                     * T*
+                     * string Tj
+                     */
+                case "'":
+                    $extractedData[] = $command;
+                    break;
+
+                    /*
+                     * aw ac string "
+                     * Move to the next lkine and show a text string, using aw as the word
+                     * spacing and ac as the character spacing. This operator has the same
+                     * effect as the code:
+                     * aw Tw
+                     * ac Tc
+                     * string '
+                     * Tw set the word spacing, Tw, to wordSpace.
+                     * Tc Set the character spacing, Tc, to charsSpace.
+                     */
+                case '"':
+                    $extractedData[] = $command;
+                    break;
+
+                case 'Tf':
+                case 'TF':
+                    $extractedData[] = $command;
+                    break;
+
+                    /*
+                     * array TJ
+                     * Show one or more text strings allow individual glyph positioning.
+                     * Each lement of array con be a string or a number. If the element is
+                     * a string, this operator shows the string. If it is a number, the
+                     * operator adjust the text position by that amount; that is, it translates
+                     * the text matrix, Tm. This amount is substracted form the current
+                     * horizontal or vertical coordinate, depending on the writing mode.
+                     * in the default coordinate system, a positive adjustment has the effect
+                     * of moving the next glyph painted either to the left or down by the given
+                     * amount.
+                     */
+                case 'TJ':
+                    $extractedData[] = $command;
+                    break;
+                    /*
+                     * q
+                     * Save current graphics state to stack
+                     */
+                case 'q':
+                    /*
+                     * Q
+                     * Load last saved graphics state from stack
+                     */
+                case 'Q':
+                    $extractedData[] = $command;
+                    break;
+                default:
+            }
+        }
+
+        return $extractedData;
+    }
+
+    /**
+     * Gets the Text Matrix of the text in the page
+     *
+     * Return an array where every item is an array where the first item is the
+     * Text Matrix (Tm) and the second is a string with the text data.  The Text matrix
+     * is an array of 6 numbers. The last 2 numbers are the coordinates X and Y of the
+     * text. The first 4 numbers has to be with Scalation, Rotation and Skew of the text.
+     *
+     * @param array $dataCommands the data extracted by getDataCommands
+     *                            if null getDataCommands is called
+     *
+     * @return array an array with the data of the page including the Tm information
+     *               of any text in the page
+     */
+    public function getDataTm(?array $dataCommands = null): array
+    {
+        if (!isset($dataCommands) || !$dataCommands) {
+            $dataCommands = $this->getDataCommands();
+        }
+
+        /*
+         * At the beginning of a text object Tm is the identity matrix
+         */
+        $defaultTm = ['1', '0', '0', '1', '0', '0'];
+        $concatTm = ['1', '0', '0', '1', '0', '0'];
+        $graphicsStatesStack = [];
+        /*
+         *  Set the text leading used by T*, ' and " operators
+         */
+        $defaultTl = 0;
+
+        /*
+         *  Set default values for font data
+         */
+        $defaultFontId = -1;
+        $defaultFontSize = 1;
+
+        /*
+         * Indexes of horizontal/vertical scaling and X,Y-coordinates in the matrix (Tm)
+         */
+        $hSc = 0; // horizontal scaling
+        /**
+         * index of vertical scaling in the array that encodes the text matrix.
+         * for more information: https://github.com/smalot/pdfparser/pull/559#discussion_r1053415500
+         */
+        $vSc = 3;
+        $x = 4;
+        $y = 5;
+
+        /*
+         * x,y-coordinates of text space origin in user units
+         *
+         * These will be assigned the value of the currently printed string
+         */
+        $Tx = 0;
+        $Ty = 0;
+
+        $Tm = $defaultTm;
+        $Tl = $defaultTl;
+        $fontId = $defaultFontId;
+        $fontSize = $defaultFontSize; // reflects fontSize set by Tf or Tfs
+
+        $extractedTexts = $this->getTextArray();
+        $extractedData = [];
+        foreach ($dataCommands as $command) {
+            // If we've used up all the texts from getTextArray(), exit
+            // so we aren't accessing non-existent array indices
+            // Fixes 'undefined array key' errors in Issues #575, #576
+            if (\count($extractedTexts) <= \count($extractedData)) {
+                break;
+            }
+            $currentText = $extractedTexts[\count($extractedData)];
+            switch ($command['o']) {
+                /*
+                 * BT
+                 * Begin a text object, initializing the Tm and Tlm to identity matrix
+                 */
+                case 'BT':
+                    $Tm = $defaultTm;
+                    $Tl = $defaultTl;
+                    $Tx = 0;
+                    $Ty = 0;
+                    break;
+
+                case 'cm':
+                    $newConcatTm = (array) explode(' ', $command['c']);
+                    $TempMatrix = [];
+                    // Multiply with previous concatTm
+                    $TempMatrix[0] = (float) $concatTm[0] * (float) $newConcatTm[0] + (float) $concatTm[1] * (float) $newConcatTm[2];
+                    $TempMatrix[1] = (float) $concatTm[0] * (float) $newConcatTm[1] + (float) $concatTm[1] * (float) $newConcatTm[3];
+                    $TempMatrix[2] = (float) $concatTm[2] * (float) $newConcatTm[0] + (float) $concatTm[3] * (float) $newConcatTm[2];
+                    $TempMatrix[3] = (float) $concatTm[2] * (float) $newConcatTm[1] + (float) $concatTm[3] * (float) $newConcatTm[3];
+                    $TempMatrix[4] = (float) $concatTm[4] * (float) $newConcatTm[0] + (float) $concatTm[5] * (float) $newConcatTm[2] + (float) $newConcatTm[4];
+                    $TempMatrix[5] = (float) $concatTm[4] * (float) $newConcatTm[1] + (float) $concatTm[5] * (float) $newConcatTm[3] + (float) $newConcatTm[5];
+                    $concatTm = $TempMatrix;
+                    break;
+                    /*
+                     * ET
+                     * End a text object
+                     */
+                case 'ET':
+                    break;
+
+                    /*
+                     * text leading TL
+                     * Set the text leading, Tl, to leading. Tl is used by the T*, ' and " operators.
+                     * Initial value: 0
+                     */
+                case 'TL':
+                    // scaled text leading
+                    $Tl = (float) $command['c'] * (float) $Tm[$vSc];
+                    break;
+
+                    /*
+                     * tx ty Td
+                     * Move to the start of the next line, offset from the start of the
+                     * current line by tx, ty.
+                     */
+                case 'Td':
+                    $coord = explode(' ', $command['c']);
+                    $Tx += (float) $coord[0] * (float) $Tm[$hSc];
+                    $Ty += (float) $coord[1] * (float) $Tm[$vSc];
+                    $Tm[$x] = (string) $Tx;
+                    $Tm[$y] = (string) $Ty;
+                    break;
+
+                    /*
+                     * tx ty TD
+                     * Move to the start of the next line, offset form the start of the
+                     * current line by tx, ty. As a side effect, this operator set the leading
+                     * parameter in the text state. This operator has the same effect as the
+                     * code:
+                     * -ty TL
+                     * tx ty Td
+                     */
+                case 'TD':
+                    $coord = explode(' ', $command['c']);
+                    $Tl = -((float) $coord[1] * (float) $Tm[$vSc]);
+                    $Tx += (float) $coord[0] * (float) $Tm[$hSc];
+                    $Ty += (float) $coord[1] * (float) $Tm[$vSc];
+                    $Tm[$x] = (string) $Tx;
+                    $Tm[$y] = (string) $Ty;
+                    break;
+
+                    /*
+                     * a b c d e f Tm
+                     * Set the text matrix, Tm, and the text line matrix, Tlm. The operands are
+                     * all numbers, and the initial value for Tm and Tlm is the identity matrix
+                     * [1 0 0 1 0 0]
+                     */
+                case 'Tm':
+                    $Tm = explode(' ', $command['c']);
+                    $TempMatrix = [];
+                    $TempMatrix[0] = (float) $Tm[0] * (float) $concatTm[0] + (float) $Tm[1] * (float) $concatTm[2];
+                    $TempMatrix[1] = (float) $Tm[0] * (float) $concatTm[1] + (float) $Tm[1] * (float) $concatTm[3];
+                    $TempMatrix[2] = (float) $Tm[2] * (float) $concatTm[0] + (float) $Tm[3] * (float) $concatTm[2];
+                    $TempMatrix[3] = (float) $Tm[2] * (float) $concatTm[1] + (float) $Tm[3] * (float) $concatTm[3];
+                    $TempMatrix[4] = (float) $Tm[4] * (float) $concatTm[0] + (float) $Tm[5] * (float) $concatTm[2] + (float) $concatTm[4];
+                    $TempMatrix[5] = (float) $Tm[4] * (float) $concatTm[1] + (float) $Tm[5] * (float) $concatTm[3] + (float) $concatTm[5];
+                    $Tm = $TempMatrix;
+                    $Tx = (float) $Tm[$x];
+                    $Ty = (float) $Tm[$y];
+                    break;
+
+                    /*
+                     * T*
+                     * Move to the start of the next line. This operator has the same effect
+                     * as the code:
+                     * 0 Tl Td
+                     * Where Tl is the current leading parameter in the text state.
+                     */
+                case 'T*':
+                    $Ty -= $Tl;
+                    $Tm[$y] = (string) $Ty;
+                    break;
+
+                    /*
+                     * string Tj
+                     * Show a Text String
+                     */
+                case 'Tj':
+                    $data = [$Tm, $currentText];
+                    if ($this->config->getDataTmFontInfoHasToBeIncluded()) {
+                        $data[] = $fontId;
+                        $data[] = $fontSize;
+                    }
+                    $extractedData[] = $data;
+                    break;
+
+                    /*
+                     * string '
+                     * Move to the next line and show a text string. This operator has the
+                     * same effect as the code:
+                     * T*
+                     * string Tj
+                     */
+                case "'":
+                    $Ty -= $Tl;
+                    $Tm[$y] = (string) $Ty;
+                    $extractedData[] = [$Tm, $currentText];
+                    break;
+
+                    /*
+                     * aw ac string "
+                     * Move to the next line and show a text string, using aw as the word
+                     * spacing and ac as the character spacing. This operator has the same
+                     * effect as the code:
+                     * aw Tw
+                     * ac Tc
+                     * string '
+                     * Tw set the word spacing, Tw, to wordSpace.
+                     * Tc Set the character spacing, Tc, to charsSpace.
+                     */
+                case '"':
+                    $data = explode(' ', $currentText);
+                    $Ty -= $Tl;
+                    $Tm[$y] = (string) $Ty;
+                    $extractedData[] = [$Tm, $data[2]]; // Verify
+                    break;
+
+                case 'Tf':
+                    /*
+                     * From PDF 1.0 specification, page 106:
+                     *     fontname size Tf Set font and size
+                     *     Sets the text font and text size in the graphics state. There is no default value for
+                     *     either fontname or size; they must be selected using Tf before drawing any text.
+                     *     fontname is a resource name. size is a number expressed in text space units.
+                     *
+                     * Source: https://ia902503.us.archive.org/10/items/pdfy-0vt8s-egqFwDl7L2/PDF%20Reference%201.0.pdf
+                     * Introduced with https://github.com/smalot/pdfparser/pull/516
+                     */
+                    list($fontId, $fontSize) = explode(' ', $command['c'], 2);
+                    break;
+
+                    /*
+                     * array TJ
+                     * Show one or more text strings allow individual glyph positioning.
+                     * Each lement of array con be a string or a number. If the element is
+                     * a string, this operator shows the string. If it is a number, the
+                     * operator adjust the text position by that amount; that is, it translates
+                     * the text matrix, Tm. This amount is substracted form the current
+                     * horizontal or vertical coordinate, depending on the writing mode.
+                     * in the default coordinate system, a positive adjustment has the effect
+                     * of moving the next glyph painted either to the left or down by the given
+                     * amount.
+                     */
+                case 'TJ':
+                    $data = [$Tm, $currentText];
+                    if ($this->config->getDataTmFontInfoHasToBeIncluded()) {
+                        $data[] = $fontId;
+                        $data[] = $fontSize;
+                    }
+                    $extractedData[] = $data;
+                    break;
+                    /*
+                     * q
+                     * Save current graphics state to stack
+                     */
+                case 'q':
+                    $graphicsStatesStack[] = $concatTm;
+                    break;
+                    /*
+                     * Q
+                     * Load last saved graphics state from stack
+                     */
+                case 'Q':
+                    $concatTm = array_pop($graphicsStatesStack);
+                    break;
+                default:
+            }
+        }
+        $this->dataTm = $extractedData;
+
+        return $extractedData;
+    }
+
+    /**
+     * Gets text data that are around the given coordinates (X,Y)
+     *
+     * If the text is in near the given coordinates (X,Y) (or the TM info),
+     * the text is returned.  The extractedData return by getDataTm, could be use to see
+     * where is the coordinates of a given text, using the TM info for it.
+     *
+     * @param float $x      The X value of the coordinate to search for. if null
+     *                      just the Y value is considered (same Row)
+     * @param float $y      The Y value of the coordinate to search for
+     *                      just the X value is considered (same column)
+     * @param float $xError The value less or more to consider an X to be "near"
+     * @param float $yError The value less or more to consider an Y to be "near"
+     *
+     * @return array An array of text that are near the given coordinates. If no text
+     *               "near" the x,y coordinate, an empty array is returned. If Both, x
+     *               and y coordinates are null, null is returned.
+     */
+    public function getTextXY(?float $x = null, ?float $y = null, float $xError = 0, float $yError = 0): array
+    {
+        if (!isset($this->dataTm) || !$this->dataTm) {
+            $this->getDataTm();
+        }
+
+        if (null !== $x) {
+            $x = (float) $x;
+        }
+
+        if (null !== $y) {
+            $y = (float) $y;
+        }
+
+        if (null === $x && null === $y) {
+            return [];
+        }
+
+        $xError = (float) $xError;
+        $yError = (float) $yError;
+
+        $extractedData = [];
+        foreach ($this->dataTm as $item) {
+            $tm = $item[0];
+            $xTm = (float) $tm[4];
+            $yTm = (float) $tm[5];
+            $text = $item[1];
+            if (null === $y) {
+                if (($xTm >= ($x - $xError))
+                    && ($xTm <= ($x + $xError))) {
+                    $extractedData[] = [$tm, $text];
+                    continue;
+                }
+            }
+            if (null === $x) {
+                if (($yTm >= ($y - $yError))
+                    && ($yTm <= ($y + $yError))) {
+                    $extractedData[] = [$tm, $text];
+                    continue;
+                }
+            }
+            if (($xTm >= ($x - $xError))
+                && ($xTm <= ($x + $xError))
+                && ($yTm >= ($y - $yError))
+                && ($yTm <= ($y + $yError))) {
+                $extractedData[] = [$tm, $text];
+                continue;
+            }
+        }
+
+        return $extractedData;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Pages.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Pages.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Pages.php	(revision 8435)
@@ -0,0 +1,131 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser;
+
+use Smalot\PdfParser\Element\ElementArray;
+
+/**
+ * Class Pages
+ */
+class Pages extends PDFObject
+{
+    /**
+     * @var array<\Smalot\PdfParser\Font>|null
+     */
+    protected $fonts;
+
+    /**
+     * @todo Objects other than Pages or Page might need to be treated specifically
+     *       in order to get Page objects out of them.
+     *
+     * @see https://github.com/smalot/pdfparser/issues/331
+     */
+    public function getPages(bool $deep = false): array
+    {
+        if (!$this->has('Kids')) {
+            return [];
+        }
+
+        /** @var ElementArray $kidsElement */
+        $kidsElement = $this->get('Kids');
+
+        if (!$deep) {
+            return $kidsElement->getContent();
+        }
+
+        // Prepare to apply the Pages' object's fonts to each page
+        if (false === \is_array($this->fonts)) {
+            $this->setupFonts();
+        }
+        $fontsAvailable = 0 < \count($this->fonts);
+
+        $kids = $kidsElement->getContent();
+        $pages = [];
+
+        foreach ($kids as $kid) {
+            if ($kid instanceof self) {
+                $pages = array_merge($pages, $kid->getPages(true));
+            } elseif ($kid instanceof Page) {
+                if ($fontsAvailable) {
+                    $kid->setFonts($this->fonts);
+                }
+                $pages[] = $kid;
+            }
+        }
+
+        return $pages;
+    }
+
+    /**
+     * Gathers information about fonts and collects them in a list.
+     *
+     * @return void
+     *
+     * @internal
+     */
+    protected function setupFonts()
+    {
+        $resources = $this->get('Resources');
+
+        if (method_exists($resources, 'has') && $resources->has('Font')) {
+            // no fonts available, therefore stop here
+            if ($resources->get('Font') instanceof Element\ElementMissing) {
+                return;
+            }
+
+            if ($resources->get('Font') instanceof Header) {
+                $fonts = $resources->get('Font')->getElements();
+            } else {
+                $fonts = $resources->get('Font')->getHeader()->getElements();
+            }
+
+            $table = [];
+
+            foreach ($fonts as $id => $font) {
+                if ($font instanceof Font) {
+                    $table[$id] = $font;
+
+                    // Store too on cleaned id value (only numeric)
+                    $id = preg_replace('/[^0-9\.\-_]/', '', $id);
+                    if ('' != $id) {
+                        $table[$id] = $font;
+                    }
+                }
+            }
+
+            $this->fonts = $table;
+        } else {
+            $this->fonts = [];
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Parser.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Parser.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/Parser.php	(revision 8435)
@@ -0,0 +1,331 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser;
+
+use Smalot\PdfParser\Element\ElementArray;
+use Smalot\PdfParser\Element\ElementBoolean;
+use Smalot\PdfParser\Element\ElementDate;
+use Smalot\PdfParser\Element\ElementHexa;
+use Smalot\PdfParser\Element\ElementName;
+use Smalot\PdfParser\Element\ElementNull;
+use Smalot\PdfParser\Element\ElementNumeric;
+use Smalot\PdfParser\Element\ElementString;
+use Smalot\PdfParser\Element\ElementXRef;
+use Smalot\PdfParser\RawData\RawDataParser;
+
+/**
+ * Class Parser
+ */
+class Parser
+{
+    /**
+     * @var Config
+     */
+    private $config;
+
+    /**
+     * @var PDFObject[]
+     */
+    protected $objects = [];
+
+    protected $rawDataParser;
+
+    public function __construct($cfg = [], ?Config $config = null)
+    {
+        $this->config = $config ?: new Config();
+        $this->rawDataParser = new RawDataParser($cfg, $this->config);
+    }
+
+    public function getConfig(): Config
+    {
+        return $this->config;
+    }
+
+    /**
+     * @throws \Exception
+     */
+    public function parseFile(string $filename): Document
+    {
+        $content = file_get_contents($filename);
+
+        /*
+         * 2018/06/20 @doganoo as multiple times a
+         * users have complained that the parseFile()
+         * method dies silently, it is an better option
+         * to remove the error control operator (@) and
+         * let the users know that the method throws an exception
+         * by adding @throws tag to PHPDoc.
+         *
+         * See here for an example: https://github.com/smalot/pdfparser/issues/204
+         */
+        return $this->parseContent($content);
+    }
+
+    /**
+     * @param string $content PDF content to parse
+     *
+     * @throws \Exception if secured PDF file was detected
+     * @throws \Exception if no object list was found
+     */
+    public function parseContent(string $content): Document
+    {
+        // Create structure from raw data.
+        list($xref, $data) = $this->rawDataParser->parseData($content);
+
+        if (isset($xref['trailer']['encrypt']) && false === $this->config->getIgnoreEncryption()) {
+            throw new \Exception('Secured pdf file are currently not supported.');
+        }
+
+        if (empty($data)) {
+            throw new \Exception('Object list not found. Possible secured file.');
+        }
+
+        // Create destination object.
+        $document = new Document();
+        $this->objects = [];
+
+        foreach ($data as $id => $structure) {
+            $this->parseObject($id, $structure, $document);
+            unset($data[$id]);
+        }
+
+        $document->setTrailer($this->parseTrailer($xref['trailer'], $document));
+        $document->setObjects($this->objects);
+
+        return $document;
+    }
+
+    protected function parseTrailer(array $structure, ?Document $document)
+    {
+        $trailer = [];
+
+        foreach ($structure as $name => $values) {
+            $name = ucfirst($name);
+
+            if (is_numeric($values)) {
+                $trailer[$name] = new ElementNumeric($values);
+            } elseif (\is_array($values)) {
+                $value = $this->parseTrailer($values, null);
+                $trailer[$name] = new ElementArray($value, null);
+            } elseif (false !== strpos($values, '_')) {
+                $trailer[$name] = new ElementXRef($values, $document);
+            } else {
+                $trailer[$name] = $this->parseHeaderElement('(', $values, $document);
+            }
+        }
+
+        return new Header($trailer, $document);
+    }
+
+    protected function parseObject(string $id, array $structure, ?Document $document)
+    {
+        $header = new Header([], $document);
+        $content = '';
+
+        foreach ($structure as $position => $part) {
+            if (\is_int($part)) {
+                $part = [null, null];
+            }
+            switch ($part[0]) {
+                case '[':
+                    $elements = [];
+
+                    foreach ($part[1] as $sub_element) {
+                        $sub_type = $sub_element[0];
+                        $sub_value = $sub_element[1];
+                        $elements[] = $this->parseHeaderElement($sub_type, $sub_value, $document);
+                    }
+
+                    $header = new Header($elements, $document);
+                    break;
+
+                case '<<':
+                    $header = $this->parseHeader($part[1], $document);
+                    break;
+
+                case 'stream':
+                    $content = isset($part[3][0]) ? $part[3][0] : $part[1];
+
+                    if ($header->get('Type')->equals('ObjStm')) {
+                        $match = [];
+
+                        // Split xrefs and contents.
+                        preg_match('/^((\d+\s+\d+\s*)*)(.*)$/s', $content, $match);
+                        $content = $match[3];
+
+                        // Extract xrefs.
+                        $xrefs = preg_split(
+                            '/(\d+\s+\d+\s*)/s',
+                            $match[1],
+                            -1,
+                            \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE
+                        );
+                        $table = [];
+
+                        foreach ($xrefs as $xref) {
+                            list($id, $position) = preg_split("/\s+/", trim($xref));
+                            $table[$position] = $id;
+                        }
+
+                        ksort($table);
+
+                        $ids = array_values($table);
+                        $positions = array_keys($table);
+
+                        foreach ($positions as $index => $position) {
+                            $id = $ids[$index].'_0';
+                            $next_position = isset($positions[$index + 1]) ? $positions[$index + 1] : \strlen($content);
+                            $sub_content = substr($content, $position, (int) $next_position - (int) $position);
+
+                            $sub_header = Header::parse($sub_content, $document);
+                            $object = PDFObject::factory($document, $sub_header, '', $this->config);
+                            $this->objects[$id] = $object;
+                        }
+
+                        // It is not necessary to store this content.
+
+                        return;
+                    } elseif ($header->get('Type')->equals('Metadata')) {
+                        // Attempt to parse XMP XML Metadata
+                        $document->extractXMPMetadata($content);
+                    }
+                    break;
+
+                default:
+                    if ('null' != $part) {
+                        $element = $this->parseHeaderElement($part[0], $part[1], $document);
+
+                        if ($element) {
+                            $header = new Header([$element], $document);
+                        }
+                    }
+                    break;
+            }
+        }
+
+        if (!isset($this->objects[$id])) {
+            $this->objects[$id] = PDFObject::factory($document, $header, $content, $this->config);
+        }
+    }
+
+    /**
+     * @throws \Exception
+     */
+    protected function parseHeader(array $structure, ?Document $document): Header
+    {
+        $elements = [];
+        $count = \count($structure);
+
+        for ($position = 0; $position < $count; $position += 2) {
+            $name = $structure[$position][1];
+            $type = $structure[$position + 1][0];
+            $value = $structure[$position + 1][1];
+
+            $elements[$name] = $this->parseHeaderElement($type, $value, $document);
+        }
+
+        return new Header($elements, $document);
+    }
+
+    /**
+     * @param string|array $value
+     *
+     * @return Element|Header|null
+     *
+     * @throws \Exception
+     */
+    protected function parseHeaderElement(?string $type, $value, ?Document $document)
+    {
+        $valueIsEmpty = null == $value || '' == $value || false == $value;
+        if (('<<' === $type || '>>' === $type) && $valueIsEmpty) {
+            $value = [];
+        }
+
+        switch ($type) {
+            case '<<':
+            case '>>':
+                $header = $this->parseHeader($value, $document);
+                PDFObject::factory($document, $header, null, $this->config);
+
+                return $header;
+
+            case 'numeric':
+                return new ElementNumeric($value);
+
+            case 'boolean':
+                return new ElementBoolean($value);
+
+            case 'null':
+                return new ElementNull();
+
+            case '(':
+                if ($date = ElementDate::parse('('.$value.')', $document)) {
+                    return $date;
+                }
+
+                return ElementString::parse('('.$value.')', $document);
+
+            case '<':
+                return $this->parseHeaderElement('(', ElementHexa::decode($value), $document);
+
+            case '/':
+                return ElementName::parse('/'.$value, $document);
+
+            case 'ojbref': // old mistake in tcpdf parser
+            case 'objref':
+                return new ElementXRef($value, $document);
+
+            case '[':
+                $values = [];
+
+                if (\is_array($value)) {
+                    foreach ($value as $sub_element) {
+                        $sub_type = $sub_element[0];
+                        $sub_value = $sub_element[1];
+                        $values[] = $this->parseHeaderElement($sub_type, $sub_value, $document);
+                    }
+                }
+
+                return new ElementArray($values, $document);
+
+            case 'endstream':
+            case 'obj': // I don't know what it means but got my project fixed.
+            case '':
+                // Nothing to do with.
+                return null;
+
+            default:
+                throw new \Exception('Invalid type: "'.$type.'".');
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/FilterHelper.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/FilterHelper.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/FilterHelper.php	(revision 8435)
@@ -0,0 +1,396 @@
+<?php
+
+/**
+ * This file is based on code of tecnickcom/TCPDF PDF library.
+ *
+ * Original author Nicola Asuni (info@tecnick.com) and
+ * contributors (https://github.com/tecnickcom/TCPDF/graphs/contributors).
+ *
+ * @see https://github.com/tecnickcom/TCPDF
+ *
+ * Original code was licensed on the terms of the LGPL v3.
+ *
+ * ------------------------------------------------------------------------------
+ *
+ * @file This file is part of the PdfParser library.
+ *
+ * @author  Konrad Abicht <k.abicht@gmail.com>
+ *
+ * @date    2020-01-06
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\RawData;
+
+class FilterHelper
+{
+    protected $availableFilters = ['ASCIIHexDecode', 'ASCII85Decode', 'LZWDecode', 'FlateDecode', 'RunLengthDecode'];
+
+    /**
+     * Decode data using the specified filter type.
+     *
+     * @param string $filter Filter name
+     * @param string $data   Data to decode
+     *
+     * @return string Decoded data string
+     *
+     * @throws \Exception if a certain decode function is not implemented yet
+     */
+    public function decodeFilter(string $filter, string $data, int $decodeMemoryLimit = 0): string
+    {
+        switch ($filter) {
+            case 'ASCIIHexDecode':
+                return $this->decodeFilterASCIIHexDecode($data);
+
+            case 'ASCII85Decode':
+                return $this->decodeFilterASCII85Decode($data);
+
+            case 'LZWDecode':
+                return $this->decodeFilterLZWDecode($data);
+
+            case 'FlateDecode':
+                return $this->decodeFilterFlateDecode($data, $decodeMemoryLimit);
+
+            case 'RunLengthDecode':
+                return $this->decodeFilterRunLengthDecode($data);
+
+            case 'CCITTFaxDecode':
+                throw new \Exception('Decode CCITTFaxDecode not implemented yet.');
+            case 'JBIG2Decode':
+                throw new \Exception('Decode JBIG2Decode not implemented yet.');
+            case 'DCTDecode':
+                throw new \Exception('Decode DCTDecode not implemented yet.');
+            case 'JPXDecode':
+                throw new \Exception('Decode JPXDecode not implemented yet.');
+            case 'Crypt':
+                throw new \Exception('Decode Crypt not implemented yet.');
+            default:
+                return $data;
+        }
+    }
+
+    /**
+     * ASCIIHexDecode
+     *
+     * Decodes data encoded in an ASCII hexadecimal representation, reproducing the original binary data.
+     *
+     * @param string $data Data to decode
+     *
+     * @return string data string
+     *
+     * @throws \Exception
+     */
+    protected function decodeFilterASCIIHexDecode(string $data): string
+    {
+        // all white-space characters shall be ignored
+        $data = preg_replace('/[\s]/', '', $data);
+        // check for EOD character: GREATER-THAN SIGN (3Eh)
+        $eod = strpos($data, '>');
+        if (false !== $eod) {
+            // remove EOD and extra data (if any)
+            $data = substr($data, 0, $eod);
+            $eod = true;
+        }
+        // get data length
+        $data_length = \strlen($data);
+        if (0 != ($data_length % 2)) {
+            // odd number of hexadecimal digits
+            if ($eod) {
+                // EOD shall behave as if a 0 (zero) followed the last digit
+                $data = substr($data, 0, -1).'0'.substr($data, -1);
+            } else {
+                throw new \Exception('decodeFilterASCIIHexDecode: invalid code');
+            }
+        }
+        // check for invalid characters
+        if (preg_match('/[^a-fA-F\d]/', $data) > 0) {
+            throw new \Exception('decodeFilterASCIIHexDecode: invalid code');
+        }
+        // get one byte of binary data for each pair of ASCII hexadecimal digits
+        $decoded = pack('H*', $data);
+
+        return $decoded;
+    }
+
+    /**
+     * ASCII85Decode
+     *
+     * Decodes data encoded in an ASCII base-85 representation, reproducing the original binary data.
+     *
+     * @param string $data Data to decode
+     *
+     * @return string data string
+     *
+     * @throws \Exception
+     */
+    protected function decodeFilterASCII85Decode(string $data): string
+    {
+        // initialize string to return
+        $decoded = '';
+        // all white-space characters shall be ignored
+        $data = preg_replace('/[\s]/', '', $data);
+        // remove start sequence 2-character sequence <~ (3Ch)(7Eh)
+        if (0 === strpos($data, '<~')) {
+            // remove EOD and extra data (if any)
+            $data = substr($data, 2);
+        }
+        // check for EOD: 2-character sequence ~> (7Eh)(3Eh)
+        $eod = strpos($data, '~>');
+        if (\strlen($data) - 2 === $eod) {
+            // remove EOD and extra data (if any)
+            $data = substr($data, 0, $eod);
+        }
+        // data length
+        $data_length = \strlen($data);
+        // check for invalid characters
+        if (preg_match('/[^\x21-\x75,\x74]/', $data) > 0) {
+            throw new \Exception('decodeFilterASCII85Decode: invalid code');
+        }
+        // z sequence
+        $zseq = \chr(0).\chr(0).\chr(0).\chr(0);
+        // position inside a group of 4 bytes (0-3)
+        $group_pos = 0;
+        $tuple = 0;
+        $pow85 = [85 * 85 * 85 * 85, 85 * 85 * 85, 85 * 85, 85, 1];
+
+        // for each byte
+        for ($i = 0; $i < $data_length; ++$i) {
+            // get char value
+            $char = \ord($data[$i]);
+            if (122 == $char) { // 'z'
+                if (0 == $group_pos) {
+                    $decoded .= $zseq;
+                } else {
+                    throw new \Exception('decodeFilterASCII85Decode: invalid code');
+                }
+            } else {
+                // the value represented by a group of 5 characters should never be greater than 2^32 - 1
+                $tuple += (($char - 33) * $pow85[$group_pos]);
+                if (4 == $group_pos) {
+                    $decoded .= \chr($tuple >> 24).\chr($tuple >> 16).\chr($tuple >> 8).\chr($tuple);
+                    $tuple = 0;
+                    $group_pos = 0;
+                } else {
+                    ++$group_pos;
+                }
+            }
+        }
+        if ($group_pos > 1) {
+            $tuple += $pow85[$group_pos - 1];
+        }
+        // last tuple (if any)
+        switch ($group_pos) {
+            case 4:
+                $decoded .= \chr($tuple >> 24).\chr($tuple >> 16).\chr($tuple >> 8);
+                break;
+
+            case 3:
+                $decoded .= \chr($tuple >> 24).\chr($tuple >> 16);
+                break;
+
+            case 2:
+                $decoded .= \chr($tuple >> 24);
+                break;
+
+            case 1:
+                throw new \Exception('decodeFilterASCII85Decode: invalid code');
+        }
+
+        return $decoded;
+    }
+
+    /**
+     * FlateDecode
+     *
+     * Decompresses data encoded using the zlib/deflate compression method, reproducing the original text or binary data.
+     *
+     * @param string $data              Data to decode
+     * @param int    $decodeMemoryLimit Memory limit on deflation
+     *
+     * @return string data string
+     *
+     * @throws \Exception
+     */
+    protected function decodeFilterFlateDecode(string $data, int $decodeMemoryLimit): ?string
+    {
+        // Uncatchable E_WARNING for "data error" is @ suppressed
+        // so execution may proceed with an alternate decompression
+        // method.
+        $decoded = @gzuncompress($data, $decodeMemoryLimit);
+
+        if (false === $decoded) {
+            // If gzuncompress() failed, try again using the compress.zlib://
+            // wrapper to decode it in a file-based context.
+            // See: https://www.php.net/manual/en/function.gzuncompress.php#79042
+            // Issue: https://github.com/smalot/pdfparser/issues/592
+            $ztmp = tmpfile();
+            if (false != $ztmp) {
+                fwrite($ztmp, "\x1f\x8b\x08\x00\x00\x00\x00\x00".$data);
+                $file = stream_get_meta_data($ztmp)['uri'];
+                if (0 === $decodeMemoryLimit) {
+                    $decoded = file_get_contents('compress.zlib://'.$file);
+                } else {
+                    $decoded = file_get_contents('compress.zlib://'.$file, false, null, 0, $decodeMemoryLimit);
+                }
+                fclose($ztmp);
+            }
+        }
+
+        if (false === \is_string($decoded) || '' === $decoded) {
+            // If the decoded string is empty, that means decoding failed.
+            throw new \Exception('decodeFilterFlateDecode: invalid data');
+        }
+
+        return $decoded;
+    }
+
+    /**
+     * LZWDecode
+     *
+     * Decompresses data encoded using the LZW (Lempel-Ziv-Welch) adaptive compression method, reproducing the original text or binary data.
+     *
+     * @param string $data Data to decode
+     *
+     * @return string Data string
+     */
+    protected function decodeFilterLZWDecode(string $data): string
+    {
+        // initialize string to return
+        $decoded = '';
+        // data length
+        $data_length = \strlen($data);
+        // convert string to binary string
+        $bitstring = '';
+        for ($i = 0; $i < $data_length; ++$i) {
+            $bitstring .= \sprintf('%08b', \ord($data[$i]));
+        }
+        // get the number of bits
+        $data_length = \strlen($bitstring);
+        // initialize code length in bits
+        $bitlen = 9;
+        // initialize dictionary index
+        $dix = 258;
+        // initialize the dictionary (with the first 256 entries).
+        $dictionary = [];
+        for ($i = 0; $i < 256; ++$i) {
+            $dictionary[$i] = \chr($i);
+        }
+        // previous val
+        $prev_index = 0;
+        // while we encounter EOD marker (257), read code_length bits
+        while (($data_length > 0) && (257 != ($index = bindec(substr($bitstring, 0, $bitlen))))) {
+            // remove read bits from string
+            $bitstring = substr($bitstring, $bitlen);
+            // update number of bits
+            $data_length -= $bitlen;
+            if (256 == $index) { // clear-table marker
+                // reset code length in bits
+                $bitlen = 9;
+                // reset dictionary index
+                $dix = 258;
+                $prev_index = 256;
+                // reset the dictionary (with the first 256 entries).
+                $dictionary = [];
+                for ($i = 0; $i < 256; ++$i) {
+                    $dictionary[$i] = \chr($i);
+                }
+            } elseif (256 == $prev_index) {
+                // first entry
+                $decoded .= $dictionary[$index];
+                $prev_index = $index;
+            } else {
+                // check if index exist in the dictionary
+                if ($index < $dix) {
+                    // index exist on dictionary
+                    $decoded .= $dictionary[$index];
+                    $dic_val = $dictionary[$prev_index].$dictionary[$index][0];
+                    // store current index
+                    $prev_index = $index;
+                } else {
+                    // index do not exist on dictionary
+                    $dic_val = $dictionary[$prev_index].$dictionary[$prev_index][0];
+                    $decoded .= $dic_val;
+                }
+                // update dictionary
+                $dictionary[$dix] = $dic_val;
+                ++$dix;
+                // change bit length by case
+                if (2047 == $dix) {
+                    $bitlen = 12;
+                } elseif (1023 == $dix) {
+                    $bitlen = 11;
+                } elseif (511 == $dix) {
+                    $bitlen = 10;
+                }
+            }
+        }
+
+        return $decoded;
+    }
+
+    /**
+     * RunLengthDecode
+     *
+     * Decompresses data encoded using a byte-oriented run-length encoding algorithm.
+     *
+     * @param string $data Data to decode
+     */
+    protected function decodeFilterRunLengthDecode(string $data): string
+    {
+        // initialize string to return
+        $decoded = '';
+        // data length
+        $data_length = \strlen($data);
+        $i = 0;
+        while ($i < $data_length) {
+            // get current byte value
+            $byte = \ord($data[$i]);
+            if (128 == $byte) {
+                // a length value of 128 denote EOD
+                break;
+            } elseif ($byte < 128) {
+                // if the length byte is in the range 0 to 127
+                // the following length + 1 (1 to 128) bytes shall be copied literally during decompression
+                $decoded .= substr($data, $i + 1, $byte + 1);
+                // move to next block
+                $i += ($byte + 2);
+            } else {
+                // if length is in the range 129 to 255,
+                // the following single byte shall be copied 257 - length (2 to 128) times during decompression
+                $decoded .= str_repeat($data[$i + 1], 257 - $byte);
+                // move to next block
+                $i += 2;
+            }
+        }
+
+        return $decoded;
+    }
+
+    /**
+     * @return array list of available filters
+     */
+    public function getAvailableFilters(): array
+    {
+        return $this->availableFilters;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/RawDataParser.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/RawDataParser.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/RawDataParser.php	(revision 8435)
@@ -0,0 +1,974 @@
+<?php
+
+/**
+ * This file is based on code of tecnickcom/TCPDF PDF library.
+ *
+ * Original author Nicola Asuni (info@tecnick.com) and
+ * contributors (https://github.com/tecnickcom/TCPDF/graphs/contributors).
+ *
+ * @see https://github.com/tecnickcom/TCPDF
+ *
+ * Original code was licensed on the terms of the LGPL v3.
+ *
+ * ------------------------------------------------------------------------------
+ *
+ * @file This file is part of the PdfParser library.
+ *
+ * @author  Konrad Abicht <k.abicht@gmail.com>
+ *
+ * @date    2020-01-06
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\RawData;
+
+use Smalot\PdfParser\Config;
+
+class RawDataParser
+{
+    /**
+     * @var Config
+     */
+    private $config;
+
+    /**
+     * Configuration array.
+     *
+     * @var array<string,bool>
+     */
+    protected $cfg = [
+        // if `true` ignore filter decoding errors
+        'ignore_filter_decoding_errors' => true,
+        // if `true` ignore missing filter decoding errors
+        'ignore_missing_filter_decoders' => true,
+    ];
+
+    protected $filterHelper;
+    protected $objects;
+
+    /**
+     * @param array $cfg Configuration array, default is []
+     */
+    public function __construct($cfg = [], ?Config $config = null)
+    {
+        // merge given array with default values
+        $this->cfg = array_merge($this->cfg, $cfg);
+
+        $this->filterHelper = new FilterHelper();
+        $this->config = $config ?: new Config();
+    }
+
+    /**
+     * Decode the specified stream.
+     *
+     * @param string $pdfData PDF data
+     * @param array  $sdic    Stream's dictionary array
+     * @param string $stream  Stream to decode
+     *
+     * @return array containing decoded stream data and remaining filters
+     *
+     * @throws \Exception
+     */
+    protected function decodeStream(string $pdfData, array $xref, array $sdic, string $stream): array
+    {
+        // get stream length and filters
+        $slength = \strlen($stream);
+        if ($slength <= 0) {
+            return ['', []];
+        }
+        $filters = [];
+        foreach ($sdic as $k => $v) {
+            if ('/' == $v[0]) {
+                if (('Length' == $v[1]) && (isset($sdic[$k + 1])) && ('numeric' == $sdic[$k + 1][0])) {
+                    // get declared stream length
+                    $declength = (int) $sdic[$k + 1][1];
+                    if ($declength < $slength) {
+                        $stream = substr($stream, 0, $declength);
+                        $slength = $declength;
+                    }
+                } elseif (('Filter' == $v[1]) && (isset($sdic[$k + 1]))) {
+                    // resolve indirect object
+                    $objval = $this->getObjectVal($pdfData, $xref, $sdic[$k + 1]);
+                    if ('/' == $objval[0]) {
+                        // single filter
+                        $filters[] = $objval[1];
+                    } elseif ('[' == $objval[0]) {
+                        // array of filters
+                        foreach ($objval[1] as $flt) {
+                            if ('/' == $flt[0]) {
+                                $filters[] = $flt[1];
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        // decode the stream
+        $remaining_filters = [];
+        foreach ($filters as $filter) {
+            if (\in_array($filter, $this->filterHelper->getAvailableFilters(), true)) {
+                try {
+                    $stream = $this->filterHelper->decodeFilter($filter, $stream, $this->config->getDecodeMemoryLimit());
+                } catch (\Exception $e) {
+                    $emsg = $e->getMessage();
+                    if ((('~' == $emsg[0]) && !$this->cfg['ignore_missing_filter_decoders'])
+                        || (('~' != $emsg[0]) && !$this->cfg['ignore_filter_decoding_errors'])
+                    ) {
+                        throw new \Exception($e->getMessage());
+                    }
+                }
+            } else {
+                // add missing filter to array
+                $remaining_filters[] = $filter;
+            }
+        }
+
+        return [$stream, $remaining_filters];
+    }
+
+    /**
+     * Decode the Cross-Reference section
+     *
+     * @param string $pdfData   PDF data
+     * @param int    $startxref Offset at which the xref section starts (position of the 'xref' keyword)
+     * @param array  $xref      Previous xref array (if any)
+     *
+     * @return array containing xref and trailer data
+     *
+     * @throws \Exception
+     */
+    protected function decodeXref(string $pdfData, int $startxref, array $xref = []): array
+    {
+        $startxref += 4; // 4 is the length of the word 'xref'
+        // skip initial white space chars
+        $offset = $startxref + strspn($pdfData, $this->config->getPdfWhitespaces(), $startxref);
+        // initialize object number
+        $obj_num = 0;
+        // search for cross-reference entries or subsection
+        while (preg_match('/([0-9]+)[\x20]([0-9]+)[\x20]?([nf]?)(\r\n|[\x20]?[\r\n])/', $pdfData, $matches, \PREG_OFFSET_CAPTURE, $offset) > 0) {
+            if ($matches[0][1] != $offset) {
+                // we are on another section
+                break;
+            }
+            $offset += \strlen($matches[0][0]);
+            if ('n' == $matches[3][0]) {
+                // create unique object index: [object number]_[generation number]
+                $index = $obj_num.'_'.(int) $matches[2][0];
+                // check if object already exist
+                if (!isset($xref['xref'][$index])) {
+                    // store object offset position
+                    $xref['xref'][$index] = (int) $matches[1][0];
+                }
+                ++$obj_num;
+            } elseif ('f' == $matches[3][0]) {
+                ++$obj_num;
+            } else {
+                // object number (index)
+                $obj_num = (int) $matches[1][0];
+            }
+        }
+        // get trailer data
+        if (preg_match('/trailer[\s]*<<(.*)>>/isU', $pdfData, $matches, \PREG_OFFSET_CAPTURE, $offset) > 0) {
+            $trailer_data = $matches[1][0];
+            if (!isset($xref['trailer']) || empty($xref['trailer'])) {
+                // get only the last updated version
+                $xref['trailer'] = [];
+                // parse trailer_data
+                if (preg_match('/Size[\s]+([0-9]+)/i', $trailer_data, $matches) > 0) {
+                    $xref['trailer']['size'] = (int) $matches[1];
+                }
+                if (preg_match('/Root[\s]+([0-9]+)[\s]+([0-9]+)[\s]+R/i', $trailer_data, $matches) > 0) {
+                    $xref['trailer']['root'] = (int) $matches[1].'_'.(int) $matches[2];
+                }
+                if (preg_match('/Encrypt[\s]+([0-9]+)[\s]+([0-9]+)[\s]+R/i', $trailer_data, $matches) > 0) {
+                    $xref['trailer']['encrypt'] = (int) $matches[1].'_'.(int) $matches[2];
+                }
+                if (preg_match('/Info[\s]+([0-9]+)[\s]+([0-9]+)[\s]+R/i', $trailer_data, $matches) > 0) {
+                    $xref['trailer']['info'] = (int) $matches[1].'_'.(int) $matches[2];
+                }
+                if (preg_match('/ID[\s]*[\[][\s]*[<]([^>]*)[>][\s]*[<]([^>]*)[>]/i', $trailer_data, $matches) > 0) {
+                    $xref['trailer']['id'] = [];
+                    $xref['trailer']['id'][0] = $matches[1];
+                    $xref['trailer']['id'][1] = $matches[2];
+                }
+            }
+            if (preg_match('/Prev[\s]+([0-9]+)/i', $trailer_data, $matches) > 0) {
+                $offset = (int) $matches[1];
+                if (0 != $offset) {
+                    // get previous xref
+                    $xref = $this->getXrefData($pdfData, $offset, $xref);
+                }
+            }
+        } else {
+            throw new \Exception('Unable to find trailer');
+        }
+
+        return $xref;
+    }
+
+    /**
+     * Decode the Cross-Reference Stream section
+     *
+     * @param string $pdfData   PDF data
+     * @param int    $startxref Offset at which the xref section starts
+     * @param array  $xref      Previous xref array (if any)
+     *
+     * @return array containing xref and trailer data
+     *
+     * @throws \Exception if unknown PNG predictor detected
+     */
+    protected function decodeXrefStream(string $pdfData, int $startxref, array $xref = []): array
+    {
+        // try to read Cross-Reference Stream
+        $xrefobj = $this->getRawObject($pdfData, $startxref);
+        $xrefcrs = $this->getIndirectObject($pdfData, $xref, $xrefobj[1], $startxref, true);
+        if (!isset($xref['trailer']) || empty($xref['trailer'])) {
+            // get only the last updated version
+            $xref['trailer'] = [];
+            $filltrailer = true;
+        } else {
+            $filltrailer = false;
+        }
+        if (!isset($xref['xref'])) {
+            $xref['xref'] = [];
+        }
+        $valid_crs = false;
+        $columns = 0;
+        $predictor = null;
+        $sarr = $xrefcrs[0][1];
+        if (!\is_array($sarr)) {
+            $sarr = [];
+        }
+
+        $wb = [];
+
+        foreach ($sarr as $k => $v) {
+            if (
+                ('/' == $v[0])
+                && ('Type' == $v[1])
+                && (isset($sarr[$k + 1])
+                    && '/' == $sarr[$k + 1][0]
+                    && 'XRef' == $sarr[$k + 1][1]
+                )
+            ) {
+                $valid_crs = true;
+            } elseif (('/' == $v[0]) && ('Index' == $v[1]) && (isset($sarr[$k + 1]))) {
+                // initialize list for: first object number in the subsection / number of objects
+                $index_blocks = [];
+                for ($m = 0; $m < \count($sarr[$k + 1][1]); $m += 2) {
+                    $index_blocks[] = [$sarr[$k + 1][1][$m][1], $sarr[$k + 1][1][$m + 1][1]];
+                }
+            } elseif (('/' == $v[0]) && ('Prev' == $v[1]) && (isset($sarr[$k + 1]) && ('numeric' == $sarr[$k + 1][0]))) {
+                // get previous xref offset
+                $prevxref = (int) $sarr[$k + 1][1];
+            } elseif (('/' == $v[0]) && ('W' == $v[1]) && (isset($sarr[$k + 1]))) {
+                // number of bytes (in the decoded stream) of the corresponding field
+                $wb[0] = (int) $sarr[$k + 1][1][0][1];
+                $wb[1] = (int) $sarr[$k + 1][1][1][1];
+                $wb[2] = (int) $sarr[$k + 1][1][2][1];
+            } elseif (('/' == $v[0]) && ('DecodeParms' == $v[1]) && (isset($sarr[$k + 1][1]))) {
+                $decpar = $sarr[$k + 1][1];
+                foreach ($decpar as $kdc => $vdc) {
+                    if (
+                        '/' == $vdc[0]
+                        && 'Columns' == $vdc[1]
+                        && (isset($decpar[$kdc + 1])
+                            && 'numeric' == $decpar[$kdc + 1][0]
+                        )
+                    ) {
+                        $columns = (int) $decpar[$kdc + 1][1];
+                    } elseif (
+                        '/' == $vdc[0]
+                        && 'Predictor' == $vdc[1]
+                        && (isset($decpar[$kdc + 1])
+                            && 'numeric' == $decpar[$kdc + 1][0]
+                        )
+                    ) {
+                        $predictor = (int) $decpar[$kdc + 1][1];
+                    }
+                }
+            } elseif ($filltrailer) {
+                if (('/' == $v[0]) && ('Size' == $v[1]) && (isset($sarr[$k + 1]) && ('numeric' == $sarr[$k + 1][0]))) {
+                    $xref['trailer']['size'] = $sarr[$k + 1][1];
+                } elseif (('/' == $v[0]) && ('Root' == $v[1]) && (isset($sarr[$k + 1]) && ('objref' == $sarr[$k + 1][0]))) {
+                    $xref['trailer']['root'] = $sarr[$k + 1][1];
+                } elseif (('/' == $v[0]) && ('Info' == $v[1]) && (isset($sarr[$k + 1]) && ('objref' == $sarr[$k + 1][0]))) {
+                    $xref['trailer']['info'] = $sarr[$k + 1][1];
+                } elseif (('/' == $v[0]) && ('Encrypt' == $v[1]) && (isset($sarr[$k + 1]) && ('objref' == $sarr[$k + 1][0]))) {
+                    $xref['trailer']['encrypt'] = $sarr[$k + 1][1];
+                } elseif (('/' == $v[0]) && ('ID' == $v[1]) && (isset($sarr[$k + 1]))) {
+                    $xref['trailer']['id'] = [];
+                    $xref['trailer']['id'][0] = $sarr[$k + 1][1][0][1];
+                    $xref['trailer']['id'][1] = $sarr[$k + 1][1][1][1];
+                }
+            }
+        }
+
+        // decode data
+        if ($valid_crs && isset($xrefcrs[1][3][0])) {
+            if (null !== $predictor) {
+                // number of bytes in a row
+                $rowlen = ($columns + 1);
+                // convert the stream into an array of integers
+                /** @var array<int> */
+                $sdata = unpack('C*', $xrefcrs[1][3][0]);
+                // TODO: Handle the case when unpack returns false
+
+                // split the rows
+                $sdata = array_chunk($sdata, $rowlen);
+
+                // initialize decoded array
+                $ddata = [];
+                // initialize first row with zeros
+                $prev_row = array_fill(0, $rowlen, 0);
+                // for each row apply PNG unpredictor
+                foreach ($sdata as $k => $row) {
+                    // initialize new row
+                    $ddata[$k] = [];
+                    // get PNG predictor value
+                    $predictor = (10 + $row[0]);
+                    // for each byte on the row
+                    for ($i = 1; $i <= $columns; ++$i) {
+                        // new index
+                        $j = ($i - 1);
+                        $row_up = $prev_row[$j];
+                        if (1 == $i) {
+                            $row_left = 0;
+                            $row_upleft = 0;
+                        } else {
+                            $row_left = $row[$i - 1];
+                            $row_upleft = $prev_row[$j - 1];
+                        }
+                        switch ($predictor) {
+                            case 10:  // PNG prediction (on encoding, PNG None on all rows)
+                                $ddata[$k][$j] = $row[$i];
+                                break;
+
+                            case 11:  // PNG prediction (on encoding, PNG Sub on all rows)
+                                $ddata[$k][$j] = (($row[$i] + $row_left) & 0xFF);
+                                break;
+
+                            case 12:  // PNG prediction (on encoding, PNG Up on all rows)
+                                $ddata[$k][$j] = (($row[$i] + $row_up) & 0xFF);
+                                break;
+
+                            case 13:  // PNG prediction (on encoding, PNG Average on all rows)
+                                $ddata[$k][$j] = (($row[$i] + (($row_left + $row_up) / 2)) & 0xFF);
+                                break;
+
+                            case 14:  // PNG prediction (on encoding, PNG Paeth on all rows)
+                                // initial estimate
+                                $p = ($row_left + $row_up - $row_upleft);
+                                // distances
+                                $pa = abs($p - $row_left);
+                                $pb = abs($p - $row_up);
+                                $pc = abs($p - $row_upleft);
+                                $pmin = min($pa, $pb, $pc);
+                                // return minimum distance
+                                switch ($pmin) {
+                                    case $pa:
+                                        $ddata[$k][$j] = (($row[$i] + $row_left) & 0xFF);
+                                        break;
+
+                                    case $pb:
+                                        $ddata[$k][$j] = (($row[$i] + $row_up) & 0xFF);
+                                        break;
+
+                                    case $pc:
+                                        $ddata[$k][$j] = (($row[$i] + $row_upleft) & 0xFF);
+                                        break;
+                                }
+                                break;
+
+                            default:  // PNG prediction (on encoding, PNG optimum)
+                                throw new \Exception('Unknown PNG predictor: '.$predictor);
+                        }
+                    }
+                    $prev_row = $ddata[$k];
+                } // end for each row
+            // complete decoding
+            } else {
+                // number of bytes in a row
+                $rowlen = array_sum($wb);
+                if (0 < $rowlen) {
+                    // convert the stream into an array of integers
+                    $sdata = unpack('C*', $xrefcrs[1][3][0]);
+                    // split the rows
+                    $ddata = array_chunk($sdata, $rowlen);
+                } else {
+                    // if the row length is zero, $ddata should be an empty array as well
+                    $ddata = [];
+                }
+            }
+
+            $sdata = [];
+
+            // for every row
+            foreach ($ddata as $k => $row) {
+                // initialize new row
+                $sdata[$k] = [0, 0, 0];
+                if (0 == $wb[0]) {
+                    // default type field
+                    $sdata[$k][0] = 1;
+                }
+                $i = 0; // count bytes in the row
+                // for every column
+                for ($c = 0; $c < 3; ++$c) {
+                    // for every byte on the column
+                    for ($b = 0; $b < $wb[$c]; ++$b) {
+                        if (isset($row[$i])) {
+                            $sdata[$k][$c] += ($row[$i] << (($wb[$c] - 1 - $b) * 8));
+                        }
+                        ++$i;
+                    }
+                }
+            }
+
+            // fill xref
+            if (isset($index_blocks)) {
+                // load the first object number of the first /Index entry
+                $obj_num = $index_blocks[0][0];
+            } else {
+                $obj_num = 0;
+            }
+            foreach ($sdata as $k => $row) {
+                switch ($row[0]) {
+                    case 0:  // (f) linked list of free objects
+                        break;
+
+                    case 1:  // (n) objects that are in use but are not compressed
+                        // create unique object index: [object number]_[generation number]
+                        $index = $obj_num.'_'.$row[2];
+                        // check if object already exist
+                        if (!isset($xref['xref'][$index])) {
+                            // store object offset position
+                            $xref['xref'][$index] = $row[1];
+                        }
+                        break;
+
+                    case 2:  // compressed objects
+                        // $row[1] = object number of the object stream in which this object is stored
+                        // $row[2] = index of this object within the object stream
+                        $index = $row[1].'_0_'.$row[2];
+                        $xref['xref'][$index] = -1;
+                        break;
+
+                    default:  // null objects
+                        break;
+                }
+                ++$obj_num;
+                if (isset($index_blocks)) {
+                    // reduce the number of remaining objects
+                    --$index_blocks[0][1];
+                    if (0 == $index_blocks[0][1]) {
+                        // remove the actual used /Index entry
+                        array_shift($index_blocks);
+                        if (0 < \count($index_blocks)) {
+                            // load the first object number of the following /Index entry
+                            $obj_num = $index_blocks[0][0];
+                        } else {
+                            // if there are no more entries, remove $index_blocks to avoid actions on an empty array
+                            unset($index_blocks);
+                        }
+                    }
+                }
+            }
+        } // end decoding data
+        if (isset($prevxref)) {
+            // get previous xref
+            $xref = $this->getXrefData($pdfData, $prevxref, $xref);
+        }
+
+        return $xref;
+    }
+
+    protected function getObjectHeaderPattern(array $objRefs): string
+    {
+        // consider all whitespace character (PDF specifications)
+        return '/'.$objRefs[0].$this->config->getPdfWhitespacesRegex().$objRefs[1].$this->config->getPdfWhitespacesRegex().'obj/';
+    }
+
+    protected function getObjectHeaderLen(array $objRefs): int
+    {
+        // "4 0 obj"
+        // 2 whitespaces + strlen("obj") = 5
+        return 5 + \strlen($objRefs[0]) + \strlen($objRefs[1]);
+    }
+
+    /**
+     * Get content of indirect object.
+     *
+     * @param string $pdfData  PDF data
+     * @param string $objRef   Object number and generation number separated by underscore character
+     * @param int    $offset   Object offset
+     * @param bool   $decoding If true decode streams
+     *
+     * @return array containing object data
+     *
+     * @throws \Exception if invalid object reference found
+     */
+    protected function getIndirectObject(string $pdfData, array $xref, string $objRef, int $offset = 0, bool $decoding = true): array
+    {
+        /*
+         * build indirect object header
+         */
+        // $objHeader = "[object number] [generation number] obj"
+        $objRefArr = explode('_', $objRef);
+        if (2 !== \count($objRefArr)) {
+            throw new \Exception('Invalid object reference for $obj.');
+        }
+
+        $objHeaderLen = $this->getObjectHeaderLen($objRefArr);
+
+        /*
+         * check if we are in position
+         */
+        // ignore whitespace characters at offset
+        $offset += strspn($pdfData, $this->config->getPdfWhitespaces(), $offset);
+        // ignore leading zeros for object number
+        $offset += strspn($pdfData, '0', $offset);
+        if (0 == preg_match($this->getObjectHeaderPattern($objRefArr), substr($pdfData, $offset, $objHeaderLen))) {
+            // an indirect reference to an undefined object shall be considered a reference to the null object
+            return ['null', 'null', $offset];
+        }
+
+        /*
+         * get content
+         */
+        // starting position of object content
+        $offset += $objHeaderLen;
+        $objContentArr = [];
+        $i = 0; // object main index
+        $header = null;
+        do {
+            $oldOffset = $offset;
+            // get element
+            $element = $this->getRawObject($pdfData, $offset, null != $header ? $header[1] : null);
+            $offset = $element[2];
+            // decode stream using stream's dictionary information
+            if ($decoding && ('stream' === $element[0]) && null != $header) {
+                $element[3] = $this->decodeStream($pdfData, $xref, $header[1], $element[1]);
+            }
+            $objContentArr[$i] = $element;
+            $header = isset($element[0]) && '<<' === $element[0] ? $element : null;
+            ++$i;
+        } while (('endobj' !== $element[0]) && ($offset !== $oldOffset));
+        // remove closing delimiter
+        array_pop($objContentArr);
+
+        /*
+         * return raw object content
+         */
+        return $objContentArr;
+    }
+
+    /**
+     * Get the content of object, resolving indirect object reference if necessary.
+     *
+     * @param string $pdfData PDF data
+     * @param array  $obj     Object value
+     *
+     * @return array containing object data
+     *
+     * @throws \Exception
+     */
+    protected function getObjectVal(string $pdfData, $xref, array $obj): array
+    {
+        if ('objref' == $obj[0]) {
+            // reference to indirect object
+            if (isset($this->objects[$obj[1]])) {
+                // this object has been already parsed
+                return $this->objects[$obj[1]];
+            } elseif (isset($xref[$obj[1]])) {
+                // parse new object
+                $this->objects[$obj[1]] = $this->getIndirectObject($pdfData, $xref, $obj[1], $xref[$obj[1]], false);
+
+                return $this->objects[$obj[1]];
+            }
+        }
+
+        return $obj;
+    }
+
+    /**
+     * Get object type, raw value and offset to next object
+     *
+     * @param int        $offset    Object offset
+     * @param array|null $headerDic obj header's dictionary, parsed by getRawObject. Used for stream parsing optimization
+     *
+     * @return array containing object type, raw value and offset to next object
+     */
+    protected function getRawObject(string $pdfData, int $offset = 0, ?array $headerDic = null): array
+    {
+        $objtype = ''; // object type to be returned
+        $objval = ''; // object value to be returned
+
+        // skip initial white space chars
+        $offset += strspn($pdfData, $this->config->getPdfWhitespaces(), $offset);
+
+        // get first char
+        $char = $pdfData[$offset];
+        // get object type
+        switch ($char) {
+            case '%':  // \x25 PERCENT SIGN
+                // skip comment and search for next token
+                $next = strcspn($pdfData, "\r\n", $offset);
+                if ($next > 0) {
+                    $offset += $next;
+
+                    return $this->getRawObject($pdfData, $offset);
+                }
+                break;
+
+            case '/':  // \x2F SOLIDUS
+                // name object
+                $objtype = $char;
+                ++$offset;
+                $span = strcspn($pdfData, "\x00\x09\x0a\x0c\x0d\x20\n\t\r\v\f\x28\x29\x3c\x3e\x5b\x5d\x7b\x7d\x2f\x25", $offset, 256);
+                if ($span > 0) {
+                    $objval = substr($pdfData, $offset, $span); // unescaped value
+                    $offset += $span;
+                }
+                break;
+
+            case '(':   // \x28 LEFT PARENTHESIS
+            case ')':  // \x29 RIGHT PARENTHESIS
+                // literal string object
+                $objtype = $char;
+                ++$offset;
+                $strpos = $offset;
+                if ('(' == $char) {
+                    $open_bracket = 1;
+                    while ($open_bracket > 0) {
+                        if (!isset($pdfData[$strpos])) {
+                            break;
+                        }
+                        $ch = $pdfData[$strpos];
+                        switch ($ch) {
+                            case '\\':  // REVERSE SOLIDUS (5Ch) (Backslash)
+                                // skip next character
+                                ++$strpos;
+                                break;
+
+                            case '(':  // LEFT PARENHESIS (28h)
+                                ++$open_bracket;
+                                break;
+
+                            case ')':  // RIGHT PARENTHESIS (29h)
+                                --$open_bracket;
+                                break;
+                        }
+                        ++$strpos;
+                    }
+                    $objval = substr($pdfData, $offset, $strpos - $offset - 1);
+                    $offset = $strpos;
+                }
+                break;
+
+            case '[':   // \x5B LEFT SQUARE BRACKET
+            case ']':  // \x5D RIGHT SQUARE BRACKET
+                // array object
+                $objtype = $char;
+                ++$offset;
+                if ('[' == $char) {
+                    // get array content
+                    $objval = [];
+                    do {
+                        $oldOffset = $offset;
+                        // get element
+                        $element = $this->getRawObject($pdfData, $offset);
+                        $offset = $element[2];
+                        $objval[] = $element;
+                    } while ((']' != $element[0]) && ($offset != $oldOffset));
+                    // remove closing delimiter
+                    array_pop($objval);
+                }
+                break;
+
+            case '<':  // \x3C LESS-THAN SIGN
+            case '>':  // \x3E GREATER-THAN SIGN
+                if (isset($pdfData[$offset + 1]) && ($pdfData[$offset + 1] == $char)) {
+                    // dictionary object
+                    $objtype = $char.$char;
+                    $offset += 2;
+                    if ('<' == $char) {
+                        // get array content
+                        $objval = [];
+                        do {
+                            $oldOffset = $offset;
+                            // get element
+                            $element = $this->getRawObject($pdfData, $offset);
+                            $offset = $element[2];
+                            $objval[] = $element;
+                        } while (('>>' != $element[0]) && ($offset != $oldOffset));
+                        // remove closing delimiter
+                        array_pop($objval);
+                    }
+                } else {
+                    // hexadecimal string object
+                    $objtype = $char;
+                    ++$offset;
+
+                    $span = strspn($pdfData, "0123456789abcdefABCDEF\x09\x0a\x0c\x0d\x20", $offset);
+                    $dataToCheck = $pdfData[$offset + $span] ?? null;
+                    if ('<' == $char && $span > 0 && '>' == $dataToCheck) {
+                        // remove white space characters
+                        $objval = strtr(substr($pdfData, $offset, $span), $this->config->getPdfWhitespaces(), '');
+                        $offset += $span + 1;
+                    } elseif (false !== ($endpos = strpos($pdfData, '>', $offset))) {
+                        $offset = $endpos + 1;
+                    }
+                }
+                break;
+
+            default:
+                if ('endobj' == substr($pdfData, $offset, 6)) {
+                    // indirect object
+                    $objtype = 'endobj';
+                    $offset += 6;
+                } elseif ('null' == substr($pdfData, $offset, 4)) {
+                    // null object
+                    $objtype = 'null';
+                    $offset += 4;
+                    $objval = 'null';
+                } elseif ('true' == substr($pdfData, $offset, 4)) {
+                    // boolean true object
+                    $objtype = 'boolean';
+                    $offset += 4;
+                    $objval = 'true';
+                } elseif ('false' == substr($pdfData, $offset, 5)) {
+                    // boolean false object
+                    $objtype = 'boolean';
+                    $offset += 5;
+                    $objval = 'false';
+                } elseif ('stream' == substr($pdfData, $offset, 6)) {
+                    // start stream object
+                    $objtype = 'stream';
+                    $offset += 6;
+                    if (1 == preg_match('/^( *[\r]?[\n])/isU', substr($pdfData, $offset, 4), $matches)) {
+                        $offset += \strlen($matches[0]);
+
+                        // we get stream length here to later help preg_match test less data
+                        $streamLen = (int) $this->getHeaderValue($headerDic, 'Length', 'numeric', 0);
+                        $skip = false === $this->config->getRetainImageContent() && 'XObject' == $this->getHeaderValue($headerDic, 'Type', '/') && 'Image' == $this->getHeaderValue($headerDic, 'Subtype', '/');
+
+                        $pregResult = preg_match(
+                            '/(endstream)[\x09\x0a\x0c\x0d\x20]/isU',
+                            $pdfData,
+                            $matches,
+                            \PREG_OFFSET_CAPTURE,
+                            $offset + $streamLen
+                        );
+
+                        if (1 == $pregResult) {
+                            $objval = $skip ? '' : substr($pdfData, $offset, $matches[0][1] - $offset);
+                            $offset = $matches[1][1];
+                        }
+                    }
+                } elseif ('endstream' == substr($pdfData, $offset, 9)) {
+                    // end stream object
+                    $objtype = 'endstream';
+                    $offset += 9;
+                } elseif (1 == preg_match('/^([0-9]+)[\s]+([0-9]+)[\s]+R/iU', substr($pdfData, $offset, 33), $matches)) {
+                    // indirect object reference
+                    $objtype = 'objref';
+                    $offset += \strlen($matches[0]);
+                    $objval = (int) $matches[1].'_'.(int) $matches[2];
+                } elseif (1 == preg_match('/^([0-9]+)[\s]+([0-9]+)[\s]+obj/iU', substr($pdfData, $offset, 33), $matches)) {
+                    // object start
+                    $objtype = 'obj';
+                    $objval = (int) $matches[1].'_'.(int) $matches[2];
+                    $offset += \strlen($matches[0]);
+                } elseif (($numlen = strspn($pdfData, '+-.0123456789', $offset)) > 0) {
+                    // numeric object
+                    $objtype = 'numeric';
+                    $objval = substr($pdfData, $offset, $numlen);
+                    $offset += $numlen;
+                }
+                break;
+        }
+
+        return [$objtype, $objval, $offset];
+    }
+
+    /**
+     * Get value of an object header's section (obj << YYY >> part ).
+     *
+     * It is similar to Header::get('...')->getContent(), the only difference is it can be used during the parsing process,
+     * when no Smalot\PdfParser\Header objects are created yet.
+     *
+     * @param string            $key     header's section name
+     * @param string            $type    type of the section (i.e. 'numeric', '/', '<<', etc.)
+     * @param string|array|null $default default value for header's section
+     *
+     * @return string|array|null value of obj header's section, or default value if none found, or its type doesn't match $type param
+     */
+    private function getHeaderValue(?array $headerDic, string $key, string $type, $default = '')
+    {
+        if (false === \is_array($headerDic)) {
+            return $default;
+        }
+
+        /*
+         * It recieves dictionary of header fields, as it is returned by RawDataParser::getRawObject,
+         * iterates over it, searching for section of type '/' whith requested key.
+         * If such a section is found, it tries to receive it's value (next object in dictionary),
+         * returning it, if it matches requested type, or default value otherwise.
+         */
+        foreach ($headerDic as $i => $val) {
+            $isSectionName = \is_array($val) && 3 == \count($val) && '/' == $val[0];
+            if (
+                $isSectionName
+                && $val[1] == $key
+                && isset($headerDic[$i + 1])
+            ) {
+                $isSectionValue = \is_array($headerDic[$i + 1]) && 1 < \count($headerDic[$i + 1]);
+
+                return $isSectionValue && $type == $headerDic[$i + 1][0]
+                    ? $headerDic[$i + 1][1]
+                    : $default;
+            }
+        }
+
+        return $default;
+    }
+
+    /**
+     * Get Cross-Reference (xref) table and trailer data from PDF document data.
+     *
+     * @param int   $offset xref offset (if known)
+     * @param array $xref   previous xref array (if any)
+     *
+     * @return array containing xref and trailer data
+     *
+     * @throws \Exception if it was unable to find startxref
+     * @throws \Exception if it was unable to find xref
+     */
+    protected function getXrefData(string $pdfData, int $offset = 0, array $xref = []): array
+    {
+        // If the $offset is currently pointed at whitespace, bump it
+        // forward until it isn't; affects loosely targetted offsets
+        // for the 'xref' keyword
+        // See: https://github.com/smalot/pdfparser/issues/673
+        $bumpOffset = $offset;
+        while (preg_match('/\s/', substr($pdfData, $bumpOffset, 1))) {
+            ++$bumpOffset;
+        }
+
+        // Find all startxref tables from this $offset forward
+        $startxrefPreg = preg_match_all(
+            '/(?<=[\r\n])startxref[\s]*[\r\n]+([0-9]+)[\s]*[\r\n]+%%EOF/i',
+            $pdfData,
+            $startxrefMatches,
+            \PREG_SET_ORDER,
+            $offset
+        );
+
+        if (0 == $startxrefPreg) {
+            // No startxref tables were found
+            throw new \Exception('Unable to find startxref');
+        } elseif (0 == $offset) {
+            // Use the last startxref in the document
+            $startxref = (int) $startxrefMatches[\count($startxrefMatches) - 1][1];
+        } elseif (strpos($pdfData, 'xref', $bumpOffset) == $bumpOffset) {
+            // Already pointing at the xref table
+            $startxref = $bumpOffset;
+        } elseif (preg_match('/([0-9]+[\s][0-9]+[\s]obj)/i', $pdfData, $matches, 0, $bumpOffset)) {
+            // Cross-Reference Stream object
+            $startxref = $bumpOffset;
+        } else {
+            // Use the next startxref from this $offset
+            $startxref = (int) $startxrefMatches[0][1];
+        }
+
+        if ($startxref > \strlen($pdfData)) {
+            throw new \Exception('Unable to find xref (PDF corrupted?)');
+        }
+
+        // check xref position
+        if (strpos($pdfData, 'xref', $startxref) == $startxref) {
+            // Cross-Reference
+            $xref = $this->decodeXref($pdfData, $startxref, $xref);
+        } else {
+            // Check if the $pdfData might have the wrong line-endings
+            $pdfDataUnix = str_replace("\r\n", "\n", $pdfData);
+            if ($startxref < \strlen($pdfDataUnix) && strpos($pdfDataUnix, 'xref', $startxref) == $startxref) {
+                // Return Unix-line-ending flag
+                $xref = ['Unix' => true];
+            } else {
+                // Cross-Reference Stream
+                $xref = $this->decodeXrefStream($pdfData, $startxref, $xref);
+            }
+        }
+        if (empty($xref)) {
+            throw new \Exception('Unable to find xref');
+        }
+
+        return $xref;
+    }
+
+    /**
+     * Parses PDF data and returns extracted data as array.
+     *
+     * @param string $data PDF data to parse
+     *
+     * @return array array of parsed PDF document objects
+     *
+     * @throws \Exception if empty PDF data given
+     * @throws \Exception if PDF data missing %PDF header
+     */
+    public function parseData(string $data): array
+    {
+        if (empty($data)) {
+            throw new \Exception('Empty PDF data given.');
+        }
+        // find the pdf header starting position
+        if (false === ($trimpos = strpos($data, '%PDF-'))) {
+            throw new \Exception('Invalid PDF data: missing %PDF header.');
+        }
+
+        // get PDF content string
+        $pdfData = $trimpos > 0 ? substr($data, $trimpos) : $data;
+
+        // get xref and trailer data
+        $xref = $this->getXrefData($pdfData);
+
+        // If we found Unix line-endings
+        if (isset($xref['Unix'])) {
+            $pdfData = str_replace("\r\n", "\n", $pdfData);
+            $xref = $this->getXrefData($pdfData);
+        }
+
+        // parse all document objects
+        $objects = [];
+        foreach ($xref['xref'] as $obj => $offset) {
+            if (!isset($objects[$obj]) && ($offset > 0)) {
+                // decode objects with positive offset
+                $objects[$obj] = $this->getIndirectObject($pdfData, $xref, $obj, $offset, true);
+            }
+        }
+
+        return [$xref, $objects];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Form.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Form.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Form.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\XObject;
+
+use Smalot\PdfParser\Header;
+use Smalot\PdfParser\Page;
+use Smalot\PdfParser\PDFObject;
+
+/**
+ * Class Form
+ */
+class Form extends Page
+{
+    public function getText(?Page $page = null): string
+    {
+        $header = new Header([], $this->document);
+        $contents = new PDFObject($this->document, $header, $this->content, $this->config);
+
+        return $contents->getText($this);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Image.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Image.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Image.php	(revision 8435)
@@ -0,0 +1,47 @@
+<?php
+
+/**
+ * @file
+ *          This file is part of the PdfParser library.
+ *
+ * @author  SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ * @date    2017-01-03
+ *
+ * @license LGPLv3
+ *
+ * @url     <https://github.com/smalot/pdfparser>
+ *
+ *  PdfParser is a pdf library written in PHP, extraction oriented.
+ *  Copyright (C) 2017 - SÃ©bastien MALOT <sebastien@malot.fr>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.
+ *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
+ */
+
+namespace Smalot\PdfParser\XObject;
+
+use Smalot\PdfParser\Page;
+use Smalot\PdfParser\PDFObject;
+
+/**
+ * Class Image
+ */
+class Image extends PDFObject
+{
+    public function getText(?Page $page = null): string
+    {
+        return '';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/CHANGELOG.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/CHANGELOG.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/CHANGELOG.md	(revision 8435)
@@ -0,0 +1,5 @@
+CHANGELOG
+=========
+
+The changelog is maintained for all Symfony contracts at the following URL:
+https://github.com/symfony/contracts/blob/main/CHANGELOG.md
Index: /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/LICENSE	(revision 8435)
@@ -0,0 +1,19 @@
+Copyright (c) 2020-present Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/README.md	(revision 8435)
@@ -0,0 +1,26 @@
+Symfony Deprecation Contracts
+=============================
+
+A generic function and convention to trigger deprecation notices.
+
+This package provides a single global function named `trigger_deprecation()` that triggers silenced deprecation notices.
+
+By using a custom PHP error handler such as the one provided by the Symfony ErrorHandler component,
+the triggered deprecations can be caught and logged for later discovery, both on dev and prod environments.
+
+The function requires at least 3 arguments:
+ - the name of the Composer package that is triggering the deprecation
+ - the version of the package that introduced the deprecation
+ - the message of the deprecation
+ - more arguments can be provided: they will be inserted in the message using `printf()` formatting
+
+Example:
+```php
+trigger_deprecation('symfony/blockchain', '8.9', 'Using "%s" is deprecated, use "%s" instead.', 'bitcoin', 'fabcoin');
+```
+
+This will generate the following message:
+`Since symfony/blockchain 8.9: Using "bitcoin" is deprecated, use "fabcoin" instead.`
+
+While not recommended, the deprecation notices can be completely ignored by declaring an empty
+`function trigger_deprecation() {}` in your application.
Index: /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/composer.json	(revision 8435)
@@ -0,0 +1,35 @@
+{
+    "name": "symfony/deprecation-contracts",
+    "type": "library",
+    "description": "A generic function and convention to trigger deprecation notices",
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Nicolas Grekas",
+            "email": "p@tchwork.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=8.1"
+    },
+    "autoload": {
+        "files": [
+            "function.php"
+        ]
+    },
+    "minimum-stability": "dev",
+    "extra": {
+        "branch-alias": {
+            "dev-main": "3.5-dev"
+        },
+        "thanks": {
+            "name": "symfony/contracts",
+            "url": "https://github.com/symfony/contracts"
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/function.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/function.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/deprecation-contracts/function.php	(revision 8435)
@@ -0,0 +1,27 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (!function_exists('trigger_deprecation')) {
+    /**
+     * Triggers a silenced deprecation notice.
+     *
+     * @param string $package The name of the Composer package that is triggering the deprecation
+     * @param string $version The version of the package that introduced the deprecation
+     * @param string $message The message of the deprecation
+     * @param mixed  ...$args Values to insert in the message using printf() formatting
+     *
+     * @author Nicolas Grekas <p@tchwork.com>
+     */
+    function trigger_deprecation(string $package, string $version, string $message, mixed ...$args): void
+    {
+        @trigger_error(($package || $version ? "Since $package $version: " : '').($args ? vsprintf($message, $args) : $message), \E_USER_DEPRECATED);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/Ctype.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/Ctype.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/Ctype.php	(revision 8435)
@@ -0,0 +1,232 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Ctype;
+
+/**
+ * Ctype implementation through regex.
+ *
+ * @internal
+ *
+ * @author Gert de Pagter <BackEndTea@gmail.com>
+ */
+final class Ctype
+{
+    /**
+     * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise.
+     *
+     * @see https://php.net/ctype-alnum
+     *
+     * @param mixed $text
+     *
+     * @return bool
+     */
+    public static function ctype_alnum($text)
+    {
+        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);
+
+        return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text);
+    }
+
+    /**
+     * Returns TRUE if every character in text is a letter, FALSE otherwise.
+     *
+     * @see https://php.net/ctype-alpha
+     *
+     * @param mixed $text
+     *
+     * @return bool
+     */
+    public static function ctype_alpha($text)
+    {
+        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);
+
+        return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text);
+    }
+
+    /**
+     * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise.
+     *
+     * @see https://php.net/ctype-cntrl
+     *
+     * @param mixed $text
+     *
+     * @return bool
+     */
+    public static function ctype_cntrl($text)
+    {
+        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);
+
+        return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text);
+    }
+
+    /**
+     * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise.
+     *
+     * @see https://php.net/ctype-digit
+     *
+     * @param mixed $text
+     *
+     * @return bool
+     */
+    public static function ctype_digit($text)
+    {
+        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);
+
+        return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text);
+    }
+
+    /**
+     * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise.
+     *
+     * @see https://php.net/ctype-graph
+     *
+     * @param mixed $text
+     *
+     * @return bool
+     */
+    public static function ctype_graph($text)
+    {
+        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);
+
+        return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text);
+    }
+
+    /**
+     * Returns TRUE if every character in text is a lowercase letter.
+     *
+     * @see https://php.net/ctype-lower
+     *
+     * @param mixed $text
+     *
+     * @return bool
+     */
+    public static function ctype_lower($text)
+    {
+        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);
+
+        return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text);
+    }
+
+    /**
+     * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all.
+     *
+     * @see https://php.net/ctype-print
+     *
+     * @param mixed $text
+     *
+     * @return bool
+     */
+    public static function ctype_print($text)
+    {
+        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);
+
+        return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text);
+    }
+
+    /**
+     * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise.
+     *
+     * @see https://php.net/ctype-punct
+     *
+     * @param mixed $text
+     *
+     * @return bool
+     */
+    public static function ctype_punct($text)
+    {
+        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);
+
+        return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text);
+    }
+
+    /**
+     * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters.
+     *
+     * @see https://php.net/ctype-space
+     *
+     * @param mixed $text
+     *
+     * @return bool
+     */
+    public static function ctype_space($text)
+    {
+        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);
+
+        return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text);
+    }
+
+    /**
+     * Returns TRUE if every character in text is an uppercase letter.
+     *
+     * @see https://php.net/ctype-upper
+     *
+     * @param mixed $text
+     *
+     * @return bool
+     */
+    public static function ctype_upper($text)
+    {
+        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);
+
+        return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text);
+    }
+
+    /**
+     * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise.
+     *
+     * @see https://php.net/ctype-xdigit
+     *
+     * @param mixed $text
+     *
+     * @return bool
+     */
+    public static function ctype_xdigit($text)
+    {
+        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);
+
+        return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text);
+    }
+
+    /**
+     * Converts integers to their char versions according to normal ctype behaviour, if needed.
+     *
+     * If an integer between -128 and 255 inclusive is provided,
+     * it is interpreted as the ASCII value of a single character
+     * (negative values have 256 added in order to allow characters in the Extended ASCII range).
+     * Any other integer is interpreted as a string containing the decimal digits of the integer.
+     *
+     * @param mixed  $int
+     * @param string $function
+     *
+     * @return mixed
+     */
+    private static function convert_int_to_char_for_ctype($int, $function)
+    {
+        if (!\is_int($int)) {
+            return $int;
+        }
+
+        if ($int < -128 || $int > 255) {
+            return (string) $int;
+        }
+
+        if (\PHP_VERSION_ID >= 80100) {
+            @trigger_error($function.'(): Argument of type int will be interpreted as string in the future', \E_USER_DEPRECATED);
+        }
+
+        if ($int < 0) {
+            $int += 256;
+        }
+
+        return \chr($int);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/LICENSE	(revision 8435)
@@ -0,0 +1,19 @@
+Copyright (c) 2018-present Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/README.md	(revision 8435)
@@ -0,0 +1,12 @@
+Symfony Polyfill / Ctype
+========================
+
+This component provides `ctype_*` functions to users who run php versions without the ctype extension.
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/bootstrap.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/bootstrap.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/bootstrap.php	(revision 8435)
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Ctype as p;
+
+if (\PHP_VERSION_ID >= 80000) {
+    return require __DIR__.'/bootstrap80.php';
+}
+
+if (!function_exists('ctype_alnum')) {
+    function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); }
+}
+if (!function_exists('ctype_alpha')) {
+    function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); }
+}
+if (!function_exists('ctype_cntrl')) {
+    function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); }
+}
+if (!function_exists('ctype_digit')) {
+    function ctype_digit($text) { return p\Ctype::ctype_digit($text); }
+}
+if (!function_exists('ctype_graph')) {
+    function ctype_graph($text) { return p\Ctype::ctype_graph($text); }
+}
+if (!function_exists('ctype_lower')) {
+    function ctype_lower($text) { return p\Ctype::ctype_lower($text); }
+}
+if (!function_exists('ctype_print')) {
+    function ctype_print($text) { return p\Ctype::ctype_print($text); }
+}
+if (!function_exists('ctype_punct')) {
+    function ctype_punct($text) { return p\Ctype::ctype_punct($text); }
+}
+if (!function_exists('ctype_space')) {
+    function ctype_space($text) { return p\Ctype::ctype_space($text); }
+}
+if (!function_exists('ctype_upper')) {
+    function ctype_upper($text) { return p\Ctype::ctype_upper($text); }
+}
+if (!function_exists('ctype_xdigit')) {
+    function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/bootstrap80.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/bootstrap80.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/bootstrap80.php	(revision 8435)
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Ctype as p;
+
+if (!function_exists('ctype_alnum')) {
+    function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); }
+}
+if (!function_exists('ctype_alpha')) {
+    function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); }
+}
+if (!function_exists('ctype_cntrl')) {
+    function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); }
+}
+if (!function_exists('ctype_digit')) {
+    function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); }
+}
+if (!function_exists('ctype_graph')) {
+    function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); }
+}
+if (!function_exists('ctype_lower')) {
+    function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); }
+}
+if (!function_exists('ctype_print')) {
+    function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); }
+}
+if (!function_exists('ctype_punct')) {
+    function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); }
+}
+if (!function_exists('ctype_space')) {
+    function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); }
+}
+if (!function_exists('ctype_upper')) {
+    function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); }
+}
+if (!function_exists('ctype_xdigit')) {
+    function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-ctype/composer.json	(revision 8435)
@@ -0,0 +1,38 @@
+{
+    "name": "symfony/polyfill-ctype",
+    "type": "library",
+    "description": "Symfony polyfill for ctype functions",
+    "keywords": ["polyfill", "compatibility", "portable", "ctype"],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Gert de Pagter",
+            "email": "BackEndTea@gmail.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=7.1"
+    },
+    "provide": {
+        "ext-ctype": "*"
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" },
+        "files": [ "bootstrap.php" ]
+    },
+    "suggest": {
+        "ext-ctype": "For best performance"
+    },
+    "minimum-stability": "dev",
+    "extra": {
+        "thanks": {
+            "name": "symfony/polyfill",
+            "url": "https://github.com/symfony/polyfill"
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/LICENSE	(revision 8435)
@@ -0,0 +1,19 @@
+Copyright (c) 2015-present Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Mbstring.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Mbstring.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Mbstring.php	(revision 8435)
@@ -0,0 +1,996 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Mbstring;
+
+/**
+ * Partial mbstring implementation in PHP, iconv based, UTF-8 centric.
+ *
+ * Implemented:
+ * - mb_chr                  - Returns a specific character from its Unicode code point
+ * - mb_convert_encoding     - Convert character encoding
+ * - mb_convert_variables    - Convert character code in variable(s)
+ * - mb_decode_mimeheader    - Decode string in MIME header field
+ * - mb_encode_mimeheader    - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED
+ * - mb_decode_numericentity - Decode HTML numeric string reference to character
+ * - mb_encode_numericentity - Encode character to HTML numeric string reference
+ * - mb_convert_case         - Perform case folding on a string
+ * - mb_detect_encoding      - Detect character encoding
+ * - mb_get_info             - Get internal settings of mbstring
+ * - mb_http_input           - Detect HTTP input character encoding
+ * - mb_http_output          - Set/Get HTTP output character encoding
+ * - mb_internal_encoding    - Set/Get internal character encoding
+ * - mb_list_encodings       - Returns an array of all supported encodings
+ * - mb_ord                  - Returns the Unicode code point of a character
+ * - mb_output_handler       - Callback function converts character encoding in output buffer
+ * - mb_scrub                - Replaces ill-formed byte sequences with substitute characters
+ * - mb_strlen               - Get string length
+ * - mb_strpos               - Find position of first occurrence of string in a string
+ * - mb_strrpos              - Find position of last occurrence of a string in a string
+ * - mb_str_split            - Convert a string to an array
+ * - mb_strtolower           - Make a string lowercase
+ * - mb_strtoupper           - Make a string uppercase
+ * - mb_substitute_character - Set/Get substitution character
+ * - mb_substr               - Get part of string
+ * - mb_stripos              - Finds position of first occurrence of a string within another, case insensitive
+ * - mb_stristr              - Finds first occurrence of a string within another, case insensitive
+ * - mb_strrchr              - Finds the last occurrence of a character in a string within another
+ * - mb_strrichr             - Finds the last occurrence of a character in a string within another, case insensitive
+ * - mb_strripos             - Finds position of last occurrence of a string within another, case insensitive
+ * - mb_strstr               - Finds first occurrence of a string within another
+ * - mb_strwidth             - Return width of string
+ * - mb_substr_count         - Count the number of substring occurrences
+ * - mb_ucfirst              - Make a string's first character uppercase
+ * - mb_lcfirst              - Make a string's first character lowercase
+ *
+ * Not implemented:
+ * - mb_convert_kana         - Convert "kana" one from another ("zen-kaku", "han-kaku" and more)
+ * - mb_ereg_*               - Regular expression with multibyte support
+ * - mb_parse_str            - Parse GET/POST/COOKIE data and set global variable
+ * - mb_preferred_mime_name  - Get MIME charset string
+ * - mb_regex_encoding       - Returns current encoding for multibyte regex as string
+ * - mb_regex_set_options    - Set/Get the default options for mbregex functions
+ * - mb_send_mail            - Send encoded mail
+ * - mb_split                - Split multibyte string using regular expression
+ * - mb_strcut               - Get part of string
+ * - mb_strimwidth           - Get truncated string with specified width
+ *
+ * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @internal
+ */
+final class Mbstring
+{
+    public const MB_CASE_FOLD = \PHP_INT_MAX;
+
+    private const SIMPLE_CASE_FOLD = [
+        ['Âµ', 'Å¿', "\xCD\x85", 'Ï', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"],
+        ['ÎŒ', 's', 'Î¹',        'Ï', 'Î²',        'Îž',        'Ï',        'Ï',        'Îº',        'Ï',        'Îµ',        "\xE1\xB9\xA1", 'Î¹'],
+    ];
+
+    private static $encodingList = ['ASCII', 'UTF-8'];
+    private static $language = 'neutral';
+    private static $internalEncoding = 'UTF-8';
+
+    public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null)
+    {
+        if (\is_array($s)) {
+            if (PHP_VERSION_ID < 70200) {
+                trigger_error('mb_convert_encoding() expects parameter 1 to be string, array given', \E_USER_WARNING);
+
+                return null;
+            }
+
+            $r = [];
+            foreach ($s as $str) {
+                $r[] = self::mb_convert_encoding($str, $toEncoding, $fromEncoding);
+            }
+
+            return $r;
+        }
+
+        if (\is_array($fromEncoding) || (null !== $fromEncoding && false !== strpos($fromEncoding, ','))) {
+            $fromEncoding = self::mb_detect_encoding($s, $fromEncoding);
+        } else {
+            $fromEncoding = self::getEncoding($fromEncoding);
+        }
+
+        $toEncoding = self::getEncoding($toEncoding);
+
+        if ('BASE64' === $fromEncoding) {
+            $s = base64_decode($s);
+            $fromEncoding = $toEncoding;
+        }
+
+        if ('BASE64' === $toEncoding) {
+            return base64_encode($s);
+        }
+
+        if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) {
+            if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) {
+                $fromEncoding = 'Windows-1252';
+            }
+            if ('UTF-8' !== $fromEncoding) {
+                $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s);
+            }
+
+            return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s);
+        }
+
+        if ('HTML-ENTITIES' === $fromEncoding) {
+            $s = html_entity_decode($s, \ENT_COMPAT, 'UTF-8');
+            $fromEncoding = 'UTF-8';
+        }
+
+        return iconv($fromEncoding, $toEncoding.'//IGNORE', $s);
+    }
+
+    public static function mb_convert_variables($toEncoding, $fromEncoding, &...$vars)
+    {
+        $ok = true;
+        array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) {
+            if (false === $v = self::mb_convert_encoding($v, $toEncoding, $fromEncoding)) {
+                $ok = false;
+            }
+        });
+
+        return $ok ? $fromEncoding : false;
+    }
+
+    public static function mb_decode_mimeheader($s)
+    {
+        return iconv_mime_decode($s, 2, self::$internalEncoding);
+    }
+
+    public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null)
+    {
+        trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', \E_USER_WARNING);
+    }
+
+    public static function mb_decode_numericentity($s, $convmap, $encoding = null)
+    {
+        if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) {
+            trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING);
+
+            return null;
+        }
+
+        if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) {
+            return false;
+        }
+
+        if (null !== $encoding && !\is_scalar($encoding)) {
+            trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING);
+
+            return '';  // Instead of null (cf. mb_encode_numericentity).
+        }
+
+        $s = (string) $s;
+        if ('' === $s) {
+            return '';
+        }
+
+        $encoding = self::getEncoding($encoding);
+
+        if ('UTF-8' === $encoding) {
+            $encoding = null;
+            if (!preg_match('//u', $s)) {
+                $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
+            }
+        } else {
+            $s = iconv($encoding, 'UTF-8//IGNORE', $s);
+        }
+
+        $cnt = floor(\count($convmap) / 4) * 4;
+
+        for ($i = 0; $i < $cnt; $i += 4) {
+            // collector_decode_htmlnumericentity ignores $convmap[$i + 3]
+            $convmap[$i] += $convmap[$i + 2];
+            $convmap[$i + 1] += $convmap[$i + 2];
+        }
+
+        $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) {
+            $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1];
+            for ($i = 0; $i < $cnt; $i += 4) {
+                if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) {
+                    return self::mb_chr($c - $convmap[$i + 2]);
+                }
+            }
+
+            return $m[0];
+        }, $s);
+
+        if (null === $encoding) {
+            return $s;
+        }
+
+        return iconv('UTF-8', $encoding.'//IGNORE', $s);
+    }
+
+    public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false)
+    {
+        if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) {
+            trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING);
+
+            return null;
+        }
+
+        if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) {
+            return false;
+        }
+
+        if (null !== $encoding && !\is_scalar($encoding)) {
+            trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING);
+
+            return null;  // Instead of '' (cf. mb_decode_numericentity).
+        }
+
+        if (null !== $is_hex && !\is_scalar($is_hex)) {
+            trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', \E_USER_WARNING);
+
+            return null;
+        }
+
+        $s = (string) $s;
+        if ('' === $s) {
+            return '';
+        }
+
+        $encoding = self::getEncoding($encoding);
+
+        if ('UTF-8' === $encoding) {
+            $encoding = null;
+            if (!preg_match('//u', $s)) {
+                $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
+            }
+        } else {
+            $s = iconv($encoding, 'UTF-8//IGNORE', $s);
+        }
+
+        static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4];
+
+        $cnt = floor(\count($convmap) / 4) * 4;
+        $i = 0;
+        $len = \strlen($s);
+        $result = '';
+
+        while ($i < $len) {
+            $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
+            $uchr = substr($s, $i, $ulen);
+            $i += $ulen;
+            $c = self::mb_ord($uchr);
+
+            for ($j = 0; $j < $cnt; $j += 4) {
+                if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) {
+                    $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3];
+                    $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';';
+                    continue 2;
+                }
+            }
+            $result .= $uchr;
+        }
+
+        if (null === $encoding) {
+            return $result;
+        }
+
+        return iconv('UTF-8', $encoding.'//IGNORE', $result);
+    }
+
+    public static function mb_convert_case($s, $mode, $encoding = null)
+    {
+        $s = (string) $s;
+        if ('' === $s) {
+            return '';
+        }
+
+        $encoding = self::getEncoding($encoding);
+
+        if ('UTF-8' === $encoding) {
+            $encoding = null;
+            if (!preg_match('//u', $s)) {
+                $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
+            }
+        } else {
+            $s = iconv($encoding, 'UTF-8//IGNORE', $s);
+        }
+
+        if (\MB_CASE_TITLE == $mode) {
+            static $titleRegexp = null;
+            if (null === $titleRegexp) {
+                $titleRegexp = self::getData('titleCaseRegexp');
+            }
+            $s = preg_replace_callback($titleRegexp, [__CLASS__, 'title_case'], $s);
+        } else {
+            if (\MB_CASE_UPPER == $mode) {
+                static $upper = null;
+                if (null === $upper) {
+                    $upper = self::getData('upperCase');
+                }
+                $map = $upper;
+            } else {
+                if (self::MB_CASE_FOLD === $mode) {
+                    static $caseFolding = null;
+                    if (null === $caseFolding) {
+                        $caseFolding = self::getData('caseFolding');
+                    }
+                    $s = strtr($s, $caseFolding);
+                }
+
+                static $lower = null;
+                if (null === $lower) {
+                    $lower = self::getData('lowerCase');
+                }
+                $map = $lower;
+            }
+
+            static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4];
+
+            $i = 0;
+            $len = \strlen($s);
+
+            while ($i < $len) {
+                $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
+                $uchr = substr($s, $i, $ulen);
+                $i += $ulen;
+
+                if (isset($map[$uchr])) {
+                    $uchr = $map[$uchr];
+                    $nlen = \strlen($uchr);
+
+                    if ($nlen == $ulen) {
+                        $nlen = $i;
+                        do {
+                            $s[--$nlen] = $uchr[--$ulen];
+                        } while ($ulen);
+                    } else {
+                        $s = substr_replace($s, $uchr, $i - $ulen, $ulen);
+                        $len += $nlen - $ulen;
+                        $i += $nlen - $ulen;
+                    }
+                }
+            }
+        }
+
+        if (null === $encoding) {
+            return $s;
+        }
+
+        return iconv('UTF-8', $encoding.'//IGNORE', $s);
+    }
+
+    public static function mb_internal_encoding($encoding = null)
+    {
+        if (null === $encoding) {
+            return self::$internalEncoding;
+        }
+
+        $normalizedEncoding = self::getEncoding($encoding);
+
+        if ('UTF-8' === $normalizedEncoding || false !== @iconv($normalizedEncoding, $normalizedEncoding, ' ')) {
+            self::$internalEncoding = $normalizedEncoding;
+
+            return true;
+        }
+
+        if (80000 > \PHP_VERSION_ID) {
+            return false;
+        }
+
+        throw new \ValueError(sprintf('Argument #1 ($encoding) must be a valid encoding, "%s" given', $encoding));
+    }
+
+    public static function mb_language($lang = null)
+    {
+        if (null === $lang) {
+            return self::$language;
+        }
+
+        switch ($normalizedLang = strtolower($lang)) {
+            case 'uni':
+            case 'neutral':
+                self::$language = $normalizedLang;
+
+                return true;
+        }
+
+        if (80000 > \PHP_VERSION_ID) {
+            return false;
+        }
+
+        throw new \ValueError(sprintf('Argument #1 ($language) must be a valid language, "%s" given', $lang));
+    }
+
+    public static function mb_list_encodings()
+    {
+        return ['UTF-8'];
+    }
+
+    public static function mb_encoding_aliases($encoding)
+    {
+        switch (strtoupper($encoding)) {
+            case 'UTF8':
+            case 'UTF-8':
+                return ['utf8'];
+        }
+
+        return false;
+    }
+
+    public static function mb_check_encoding($var = null, $encoding = null)
+    {
+        if (\PHP_VERSION_ID < 70200 && \is_array($var)) {
+            trigger_error('mb_check_encoding() expects parameter 1 to be string, array given', \E_USER_WARNING);
+
+            return null;
+        }
+
+        if (null === $encoding) {
+            if (null === $var) {
+                return false;
+            }
+            $encoding = self::$internalEncoding;
+        }
+
+        if (!\is_array($var)) {
+            return self::mb_detect_encoding($var, [$encoding]) || false !== @iconv($encoding, $encoding, $var);
+        }
+
+        foreach ($var as $key => $value) {
+            if (!self::mb_check_encoding($key, $encoding)) {
+                return false;
+            }
+            if (!self::mb_check_encoding($value, $encoding)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    public static function mb_detect_encoding($str, $encodingList = null, $strict = false)
+    {
+        if (null === $encodingList) {
+            $encodingList = self::$encodingList;
+        } else {
+            if (!\is_array($encodingList)) {
+                $encodingList = array_map('trim', explode(',', $encodingList));
+            }
+            $encodingList = array_map('strtoupper', $encodingList);
+        }
+
+        foreach ($encodingList as $enc) {
+            switch ($enc) {
+                case 'ASCII':
+                    if (!preg_match('/[\x80-\xFF]/', $str)) {
+                        return $enc;
+                    }
+                    break;
+
+                case 'UTF8':
+                case 'UTF-8':
+                    if (preg_match('//u', $str)) {
+                        return 'UTF-8';
+                    }
+                    break;
+
+                default:
+                    if (0 === strncmp($enc, 'ISO-8859-', 9)) {
+                        return $enc;
+                    }
+            }
+        }
+
+        return false;
+    }
+
+    public static function mb_detect_order($encodingList = null)
+    {
+        if (null === $encodingList) {
+            return self::$encodingList;
+        }
+
+        if (!\is_array($encodingList)) {
+            $encodingList = array_map('trim', explode(',', $encodingList));
+        }
+        $encodingList = array_map('strtoupper', $encodingList);
+
+        foreach ($encodingList as $enc) {
+            switch ($enc) {
+                default:
+                    if (strncmp($enc, 'ISO-8859-', 9)) {
+                        return false;
+                    }
+                    // no break
+                case 'ASCII':
+                case 'UTF8':
+                case 'UTF-8':
+            }
+        }
+
+        self::$encodingList = $encodingList;
+
+        return true;
+    }
+
+    public static function mb_strlen($s, $encoding = null)
+    {
+        $encoding = self::getEncoding($encoding);
+        if ('CP850' === $encoding || 'ASCII' === $encoding) {
+            return \strlen($s);
+        }
+
+        return @iconv_strlen($s, $encoding);
+    }
+
+    public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null)
+    {
+        $encoding = self::getEncoding($encoding);
+        if ('CP850' === $encoding || 'ASCII' === $encoding) {
+            return strpos($haystack, $needle, $offset);
+        }
+
+        $needle = (string) $needle;
+        if ('' === $needle) {
+            if (80000 > \PHP_VERSION_ID) {
+                trigger_error(__METHOD__.': Empty delimiter', \E_USER_WARNING);
+
+                return false;
+            }
+
+            return 0;
+        }
+
+        return iconv_strpos($haystack, $needle, $offset, $encoding);
+    }
+
+    public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null)
+    {
+        $encoding = self::getEncoding($encoding);
+        if ('CP850' === $encoding || 'ASCII' === $encoding) {
+            return strrpos($haystack, $needle, $offset);
+        }
+
+        if ($offset != (int) $offset) {
+            $offset = 0;
+        } elseif ($offset = (int) $offset) {
+            if ($offset < 0) {
+                if (0 > $offset += self::mb_strlen($needle)) {
+                    $haystack = self::mb_substr($haystack, 0, $offset, $encoding);
+                }
+                $offset = 0;
+            } else {
+                $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding);
+            }
+        }
+
+        $pos = '' !== $needle || 80000 > \PHP_VERSION_ID
+            ? iconv_strrpos($haystack, $needle, $encoding)
+            : self::mb_strlen($haystack, $encoding);
+
+        return false !== $pos ? $offset + $pos : false;
+    }
+
+    public static function mb_str_split($string, $split_length = 1, $encoding = null)
+    {
+        if (null !== $string && !\is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) {
+            trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', \E_USER_WARNING);
+
+            return null;
+        }
+
+        if (1 > $split_length = (int) $split_length) {
+            if (80000 > \PHP_VERSION_ID) {
+                trigger_error('The length of each segment must be greater than zero', \E_USER_WARNING);
+
+                return false;
+            }
+
+            throw new \ValueError('Argument #2 ($length) must be greater than 0');
+        }
+
+        if (null === $encoding) {
+            $encoding = mb_internal_encoding();
+        }
+
+        if ('UTF-8' === $encoding = self::getEncoding($encoding)) {
+            $rx = '/(';
+            while (65535 < $split_length) {
+                $rx .= '.{65535}';
+                $split_length -= 65535;
+            }
+            $rx .= '.{'.$split_length.'})/us';
+
+            return preg_split($rx, $string, -1, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY);
+        }
+
+        $result = [];
+        $length = mb_strlen($string, $encoding);
+
+        for ($i = 0; $i < $length; $i += $split_length) {
+            $result[] = mb_substr($string, $i, $split_length, $encoding);
+        }
+
+        return $result;
+    }
+
+    public static function mb_strtolower($s, $encoding = null)
+    {
+        return self::mb_convert_case($s, \MB_CASE_LOWER, $encoding);
+    }
+
+    public static function mb_strtoupper($s, $encoding = null)
+    {
+        return self::mb_convert_case($s, \MB_CASE_UPPER, $encoding);
+    }
+
+    public static function mb_substitute_character($c = null)
+    {
+        if (null === $c) {
+            return 'none';
+        }
+        if (0 === strcasecmp($c, 'none')) {
+            return true;
+        }
+        if (80000 > \PHP_VERSION_ID) {
+            return false;
+        }
+        if (\is_int($c) || 'long' === $c || 'entity' === $c) {
+            return false;
+        }
+
+        throw new \ValueError('Argument #1 ($substitute_character) must be "none", "long", "entity" or a valid codepoint');
+    }
+
+    public static function mb_substr($s, $start, $length = null, $encoding = null)
+    {
+        $encoding = self::getEncoding($encoding);
+        if ('CP850' === $encoding || 'ASCII' === $encoding) {
+            return (string) substr($s, $start, null === $length ? 2147483647 : $length);
+        }
+
+        if ($start < 0) {
+            $start = iconv_strlen($s, $encoding) + $start;
+            if ($start < 0) {
+                $start = 0;
+            }
+        }
+
+        if (null === $length) {
+            $length = 2147483647;
+        } elseif ($length < 0) {
+            $length = iconv_strlen($s, $encoding) + $length - $start;
+            if ($length < 0) {
+                return '';
+            }
+        }
+
+        return (string) iconv_substr($s, $start, $length, $encoding);
+    }
+
+    public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null)
+    {
+        [$haystack, $needle] = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], [
+            self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding),
+            self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding),
+        ]);
+
+        return self::mb_strpos($haystack, $needle, $offset, $encoding);
+    }
+
+    public static function mb_stristr($haystack, $needle, $part = false, $encoding = null)
+    {
+        $pos = self::mb_stripos($haystack, $needle, 0, $encoding);
+
+        return self::getSubpart($pos, $part, $haystack, $encoding);
+    }
+
+    public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null)
+    {
+        $encoding = self::getEncoding($encoding);
+        if ('CP850' === $encoding || 'ASCII' === $encoding) {
+            $pos = strrpos($haystack, $needle);
+        } else {
+            $needle = self::mb_substr($needle, 0, 1, $encoding);
+            $pos = iconv_strrpos($haystack, $needle, $encoding);
+        }
+
+        return self::getSubpart($pos, $part, $haystack, $encoding);
+    }
+
+    public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null)
+    {
+        $needle = self::mb_substr($needle, 0, 1, $encoding);
+        $pos = self::mb_strripos($haystack, $needle, $encoding);
+
+        return self::getSubpart($pos, $part, $haystack, $encoding);
+    }
+
+    public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null)
+    {
+        $haystack = self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding);
+        $needle = self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding);
+
+        $haystack = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $haystack);
+        $needle = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $needle);
+
+        return self::mb_strrpos($haystack, $needle, $offset, $encoding);
+    }
+
+    public static function mb_strstr($haystack, $needle, $part = false, $encoding = null)
+    {
+        $pos = strpos($haystack, $needle);
+        if (false === $pos) {
+            return false;
+        }
+        if ($part) {
+            return substr($haystack, 0, $pos);
+        }
+
+        return substr($haystack, $pos);
+    }
+
+    public static function mb_get_info($type = 'all')
+    {
+        $info = [
+            'internal_encoding' => self::$internalEncoding,
+            'http_output' => 'pass',
+            'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)',
+            'func_overload' => 0,
+            'func_overload_list' => 'no overload',
+            'mail_charset' => 'UTF-8',
+            'mail_header_encoding' => 'BASE64',
+            'mail_body_encoding' => 'BASE64',
+            'illegal_chars' => 0,
+            'encoding_translation' => 'Off',
+            'language' => self::$language,
+            'detect_order' => self::$encodingList,
+            'substitute_character' => 'none',
+            'strict_detection' => 'Off',
+        ];
+
+        if ('all' === $type) {
+            return $info;
+        }
+        if (isset($info[$type])) {
+            return $info[$type];
+        }
+
+        return false;
+    }
+
+    public static function mb_http_input($type = '')
+    {
+        return false;
+    }
+
+    public static function mb_http_output($encoding = null)
+    {
+        return null !== $encoding ? 'pass' === $encoding : 'pass';
+    }
+
+    public static function mb_strwidth($s, $encoding = null)
+    {
+        $encoding = self::getEncoding($encoding);
+
+        if ('UTF-8' !== $encoding) {
+            $s = iconv($encoding, 'UTF-8//IGNORE', $s);
+        }
+
+        $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide);
+
+        return ($wide << 1) + iconv_strlen($s, 'UTF-8');
+    }
+
+    public static function mb_substr_count($haystack, $needle, $encoding = null)
+    {
+        return substr_count($haystack, $needle);
+    }
+
+    public static function mb_output_handler($contents, $status)
+    {
+        return $contents;
+    }
+
+    public static function mb_chr($code, $encoding = null)
+    {
+        if (0x80 > $code %= 0x200000) {
+            $s = \chr($code);
+        } elseif (0x800 > $code) {
+            $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F);
+        } elseif (0x10000 > $code) {
+            $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
+        } else {
+            $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
+        }
+
+        if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
+            $s = mb_convert_encoding($s, $encoding, 'UTF-8');
+        }
+
+        return $s;
+    }
+
+    public static function mb_ord($s, $encoding = null)
+    {
+        if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
+            $s = mb_convert_encoding($s, 'UTF-8', $encoding);
+        }
+
+        if (1 === \strlen($s)) {
+            return \ord($s);
+        }
+
+        $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0;
+        if (0xF0 <= $code) {
+            return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80;
+        }
+        if (0xE0 <= $code) {
+            return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80;
+        }
+        if (0xC0 <= $code) {
+            return (($code - 0xC0) << 6) + $s[2] - 0x80;
+        }
+
+        return $code;
+    }
+
+    public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, ?string $encoding = null): string
+    {
+        if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], true)) {
+            throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH');
+        }
+
+        if (null === $encoding) {
+            $encoding = self::mb_internal_encoding();
+        } else {
+            self::assertEncoding($encoding, 'mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given');
+        }
+
+        if (self::mb_strlen($pad_string, $encoding) <= 0) {
+            throw new \ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string');
+        }
+
+        $paddingRequired = $length - self::mb_strlen($string, $encoding);
+
+        if ($paddingRequired < 1) {
+            return $string;
+        }
+
+        switch ($pad_type) {
+            case \STR_PAD_LEFT:
+                return self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding).$string;
+            case \STR_PAD_RIGHT:
+                return $string.self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding);
+            default:
+                $leftPaddingLength = floor($paddingRequired / 2);
+                $rightPaddingLength = $paddingRequired - $leftPaddingLength;
+
+                return self::mb_substr(str_repeat($pad_string, $leftPaddingLength), 0, $leftPaddingLength, $encoding).$string.self::mb_substr(str_repeat($pad_string, $rightPaddingLength), 0, $rightPaddingLength, $encoding);
+        }
+    }
+
+    public static function mb_ucfirst(string $string, ?string $encoding = null): string
+    {
+        if (null === $encoding) {
+            $encoding = self::mb_internal_encoding();
+        } else {
+            self::assertEncoding($encoding, 'mb_ucfirst(): Argument #2 ($encoding) must be a valid encoding, "%s" given');
+        }
+
+        $firstChar = mb_substr($string, 0, 1, $encoding);
+        $firstChar = mb_convert_case($firstChar, \MB_CASE_TITLE, $encoding);
+
+        return $firstChar.mb_substr($string, 1, null, $encoding);
+    }
+
+    public static function mb_lcfirst(string $string, ?string $encoding = null): string
+    {
+        if (null === $encoding) {
+            $encoding = self::mb_internal_encoding();
+        } else {
+            self::assertEncoding($encoding, 'mb_lcfirst(): Argument #2 ($encoding) must be a valid encoding, "%s" given');
+        }
+
+        $firstChar = mb_substr($string, 0, 1, $encoding);
+        $firstChar = mb_convert_case($firstChar, \MB_CASE_LOWER, $encoding);
+
+        return $firstChar.mb_substr($string, 1, null, $encoding);
+    }
+
+    private static function getSubpart($pos, $part, $haystack, $encoding)
+    {
+        if (false === $pos) {
+            return false;
+        }
+        if ($part) {
+            return self::mb_substr($haystack, 0, $pos, $encoding);
+        }
+
+        return self::mb_substr($haystack, $pos, null, $encoding);
+    }
+
+    private static function html_encoding_callback(array $m)
+    {
+        $i = 1;
+        $entities = '';
+        $m = unpack('C*', htmlentities($m[0], \ENT_COMPAT, 'UTF-8'));
+
+        while (isset($m[$i])) {
+            if (0x80 > $m[$i]) {
+                $entities .= \chr($m[$i++]);
+                continue;
+            }
+            if (0xF0 <= $m[$i]) {
+                $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
+            } elseif (0xE0 <= $m[$i]) {
+                $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
+            } else {
+                $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80;
+            }
+
+            $entities .= '&#'.$c.';';
+        }
+
+        return $entities;
+    }
+
+    private static function title_case(array $s)
+    {
+        return self::mb_convert_case($s[1], \MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], \MB_CASE_LOWER, 'UTF-8');
+    }
+
+    private static function getData($file)
+    {
+        if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) {
+            return require $file;
+        }
+
+        return false;
+    }
+
+    private static function getEncoding($encoding)
+    {
+        if (null === $encoding) {
+            return self::$internalEncoding;
+        }
+
+        if ('UTF-8' === $encoding) {
+            return 'UTF-8';
+        }
+
+        $encoding = strtoupper($encoding);
+
+        if ('8BIT' === $encoding || 'BINARY' === $encoding) {
+            return 'CP850';
+        }
+
+        if ('UTF8' === $encoding) {
+            return 'UTF-8';
+        }
+
+        return $encoding;
+    }
+
+    private static function assertEncoding(string $encoding, string $errorFormat): void
+    {
+        try {
+            $validEncoding = @self::mb_check_encoding('', $encoding);
+        } catch (\ValueError $e) {
+            throw new \ValueError(\sprintf($errorFormat, $encoding));
+        }
+
+        // BC for PHP 7.3 and lower
+        if (!$validEncoding) {
+            throw new \ValueError(\sprintf($errorFormat, $encoding));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/README.md	(revision 8435)
@@ -0,0 +1,13 @@
+Symfony Polyfill / Mbstring
+===========================
+
+This component provides a partial, native PHP implementation for the
+[Mbstring](https://php.net/mbstring) extension.
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php	(revision 8435)
@@ -0,0 +1,124 @@
+<?php
+
+return [
+    'Ä°' => 'iÌ',
+    'Âµ' => 'ÎŒ',
+    'Å¿' => 's',
+    'Í
+' => 'Î¹',
+    'Ï' => 'Ï',
+    'Ï' => 'Î²',
+    'Ï' => 'Îž',
+    'Ï' => 'Ï',
+    'Ï' => 'Ï',
+    'Ï°' => 'Îº',
+    'Ï±' => 'Ï',
+    'Ïµ' => 'Îµ',
+    'áº' => 'á¹¡',
+    'áŸŸ' => 'Î¹',
+    'Ã' => 'ss',
+    'Å' => 'ÊŒn',
+    'Ç°' => 'Ç°',
+    'Î' => 'Î',
+    'Î°' => 'Î°',
+    'Ö' => 'Õ¥Ö',
+    'áº' => 'áº',
+    'áº' => 'áº',
+    'áº' => 'áº',
+    'áº' => 'áº',
+    'áº' => 'aÊŸ',
+    'áº' => 'ss',
+    'áœ' => 'áœ',
+    'áœ' => 'áœ',
+    'áœ' => 'áœ',
+    'áœ' => 'áœ',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ
+' => 'áŒ
+Î¹',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ' => 'áŒ
+Î¹',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ' => 'áŒÎ¹',
+    'áŸ' => 'áŒ Î¹',
+    'áŸ' => 'áŒ¡Î¹',
+    'áŸ' => 'áŒ¢Î¹',
+    'áŸ' => 'áŒ£Î¹',
+    'áŸ' => 'áŒ€Î¹',
+    'áŸ' => 'áŒ¥Î¹',
+    'áŸ' => 'áŒŠÎ¹',
+    'áŸ' => 'áŒ§Î¹',
+    'áŸ' => 'áŒ Î¹',
+    'áŸ' => 'áŒ¡Î¹',
+    'áŸ' => 'áŒ¢Î¹',
+    'áŸ' => 'áŒ£Î¹',
+    'áŸ' => 'áŒ€Î¹',
+    'áŸ' => 'áŒ¥Î¹',
+    'áŸ' => 'áŒŠÎ¹',
+    'áŸ' => 'áŒ§Î¹',
+    'áŸ ' => 'áœ Î¹',
+    'áŸ¡' => 'áœ¡Î¹',
+    'áŸ¢' => 'áœ¢Î¹',
+    'áŸ£' => 'áœ£Î¹',
+    'áŸ€' => 'áœ€Î¹',
+    'áŸ¥' => 'áœ¥Î¹',
+    'áŸŠ' => 'áœŠÎ¹',
+    'áŸ§' => 'áœ§Î¹',
+    'áŸš' => 'áœ Î¹',
+    'áŸ©' => 'áœ¡Î¹',
+    'áŸª' => 'áœ¢Î¹',
+    'áŸ«' => 'áœ£Î¹',
+    'áŸ¬' => 'áœ€Î¹',
+    'áŸ­' => 'áœ¥Î¹',
+    'áŸ®' => 'áœŠÎ¹',
+    'áŸ¯' => 'áœ§Î¹',
+    'áŸ²' => 'áœ°Î¹',
+    'áŸ³' => 'Î±Î¹',
+    'áŸŽ' => 'Î¬Î¹',
+    'áŸ¶' => 'áŸ¶',
+    'áŸ·' => 'áŸ¶Î¹',
+    'áŸŒ' => 'Î±Î¹',
+    'á¿' => 'áœŽÎ¹',
+    'á¿' => 'Î·Î¹',
+    'á¿' => 'Î®Î¹',
+    'á¿' => 'á¿',
+    'á¿' => 'á¿Î¹',
+    'á¿' => 'Î·Î¹',
+    'á¿' => 'á¿',
+    'á¿' => 'á¿',
+    'á¿' => 'á¿',
+    'á¿¢' => 'á¿¢',
+    'á¿€' => 'á¿€',
+    'á¿Š' => 'á¿Š',
+    'á¿§' => 'á¿§',
+    'á¿²' => 'áœŒÎ¹',
+    'á¿³' => 'ÏÎ¹',
+    'á¿Ž' => 'ÏÎ¹',
+    'á¿¶' => 'á¿¶',
+    'á¿·' => 'á¿¶Î¹',
+    'á¿Œ' => 'ÏÎ¹',
+    'ï¬' => 'ff',
+    'ï¬' => 'fi',
+    'ï¬' => 'fl',
+    'ï¬' => 'ffi',
+    'ï¬' => 'ffl',
+    'ï¬
+' => 'st',
+    'ï¬' => 'st',
+    'ï¬' => 'ÕŽÕ¶',
+    'ï¬' => 'ÕŽÕ¥',
+    'ï¬' => 'ÕŽÕ«',
+    'ï¬' => 'ÕŸÕ¶',
+    'ï¬' => 'ÕŽÕ­',
+];
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php	(revision 8435)
@@ -0,0 +1,1474 @@
+<?php
+
+return array (
+  'A' => 'a',
+  'B' => 'b',
+  'C' => 'c',
+  'D' => 'd',
+  'E' => 'e',
+  'F' => 'f',
+  'G' => 'g',
+  'H' => 'h',
+  'I' => 'i',
+  'J' => 'j',
+  'K' => 'k',
+  'L' => 'l',
+  'M' => 'm',
+  'N' => 'n',
+  'O' => 'o',
+  'P' => 'p',
+  'Q' => 'q',
+  'R' => 'r',
+  'S' => 's',
+  'T' => 't',
+  'U' => 'u',
+  'V' => 'v',
+  'W' => 'w',
+  'X' => 'x',
+  'Y' => 'y',
+  'Z' => 'z',
+  'Ã' => 'Ã ',
+  'Ã' => 'Ã¡',
+  'Ã' => 'Ã¢',
+  'Ã' => 'Ã£',
+  'Ã' => 'Ã€',
+  'Ã
+' => 'Ã¥',
+  'Ã' => 'ÃŠ',
+  'Ã' => 'Ã§',
+  'Ã' => 'Ãš',
+  'Ã' => 'Ã©',
+  'Ã' => 'Ãª',
+  'Ã' => 'Ã«',
+  'Ã' => 'Ã¬',
+  'Ã' => 'Ã­',
+  'Ã' => 'Ã®',
+  'Ã' => 'Ã¯',
+  'Ã' => 'Ã°',
+  'Ã' => 'Ã±',
+  'Ã' => 'Ã²',
+  'Ã' => 'Ã³',
+  'Ã' => 'ÃŽ',
+  'Ã' => 'Ãµ',
+  'Ã' => 'Ã¶',
+  'Ã' => 'Ãž',
+  'Ã' => 'Ã¹',
+  'Ã' => 'Ãº',
+  'Ã' => 'Ã»',
+  'Ã' => 'ÃŒ',
+  'Ã' => 'Ãœ',
+  'Ã' => 'ÃŸ',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä
+',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä ' => 'Ä¡',
+  'Ä¢' => 'Ä£',
+  'Ä€' => 'Ä¥',
+  'ÄŠ' => 'Ä§',
+  'Äš' => 'Ä©',
+  'Äª' => 'Ä«',
+  'Ä¬' => 'Ä­',
+  'Ä®' => 'Ä¯',
+  'Ä°' => 'iÌ',
+  'Ä²' => 'Ä³',
+  'ÄŽ' => 'Äµ',
+  'Ä¶' => 'Ä·',
+  'Ä¹' => 'Äº',
+  'Ä»' => 'ÄŒ',
+  'Äœ' => 'ÄŸ',
+  'Ä¿' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å
+' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å ' => 'Å¡',
+  'Å¢' => 'Å£',
+  'Å€' => 'Å¥',
+  'ÅŠ' => 'Å§',
+  'Åš' => 'Å©',
+  'Åª' => 'Å«',
+  'Å¬' => 'Å­',
+  'Å®' => 'Å¯',
+  'Å°' => 'Å±',
+  'Å²' => 'Å³',
+  'ÅŽ' => 'Åµ',
+  'Å¶' => 'Å·',
+  'Åž' => 'Ã¿',
+  'Å¹' => 'Åº',
+  'Å»' => 'ÅŒ',
+  'Åœ' => 'ÅŸ',
+  'Æ' => 'É',
+  'Æ' => 'Æ',
+  'Æ' => 'Æ
+',
+  'Æ' => 'É',
+  'Æ' => 'Æ',
+  'Æ' => 'É',
+  'Æ' => 'É',
+  'Æ' => 'Æ',
+  'Æ' => 'Ç',
+  'Æ' => 'É',
+  'Æ' => 'É',
+  'Æ' => 'Æ',
+  'Æ' => 'É ',
+  'Æ' => 'É£',
+  'Æ' => 'É©',
+  'Æ' => 'Éš',
+  'Æ' => 'Æ',
+  'Æ' => 'É¯',
+  'Æ' => 'É²',
+  'Æ' => 'Éµ',
+  'Æ ' => 'Æ¡',
+  'Æ¢' => 'Æ£',
+  'Æ€' => 'Æ¥',
+  'ÆŠ' => 'Ê',
+  'Æ§' => 'Æš',
+  'Æ©' => 'Ê',
+  'Æ¬' => 'Æ­',
+  'Æ®' => 'Ê',
+  'Æ¯' => 'Æ°',
+  'Æ±' => 'Ê',
+  'Æ²' => 'Ê',
+  'Æ³' => 'ÆŽ',
+  'Æµ' => 'Æ¶',
+  'Æ·' => 'Ê',
+  'Æž' => 'Æ¹',
+  'ÆŒ' => 'Æœ',
+  'Ç' => 'Ç',
+  'Ç
+' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç ' => 'Ç¡',
+  'Ç¢' => 'Ç£',
+  'Ç€' => 'Ç¥',
+  'ÇŠ' => 'Ç§',
+  'Çš' => 'Ç©',
+  'Çª' => 'Ç«',
+  'Ç¬' => 'Ç­',
+  'Ç®' => 'Ç¯',
+  'Ç±' => 'Ç³',
+  'Ç²' => 'Ç³',
+  'ÇŽ' => 'Çµ',
+  'Ç¶' => 'Æ',
+  'Ç·' => 'Æ¿',
+  'Çž' => 'Ç¹',
+  'Çº' => 'Ç»',
+  'ÇŒ' => 'Çœ',
+  'ÇŸ' => 'Ç¿',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È
+',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È ' => 'Æ',
+  'È¢' => 'È£',
+  'È€' => 'È¥',
+  'ÈŠ' => 'È§',
+  'Èš' => 'È©',
+  'Èª' => 'È«',
+  'È¬' => 'È­',
+  'È®' => 'È¯',
+  'È°' => 'È±',
+  'È²' => 'È³',
+  'Èº' => 'â±¥',
+  'È»' => 'ÈŒ',
+  'Èœ' => 'Æ',
+  'ÈŸ' => 'â±Š',
+  'É' => 'É',
+  'É' => 'Æ',
+  'É' => 'Ê',
+  'É
+' => 'Ê',
+  'É' => 'É',
+  'É' => 'É',
+  'É' => 'É',
+  'É' => 'É',
+  'É' => 'É',
+  'Í°' => 'Í±',
+  'Í²' => 'Í³',
+  'Í¶' => 'Í·',
+  'Í¿' => 'Ï³',
+  'Î' => 'Î¬',
+  'Î' => 'Î­',
+  'Î' => 'Î®',
+  'Î' => 'Î¯',
+  'Î' => 'Ï',
+  'Î' => 'Ï',
+  'Î' => 'Ï',
+  'Î' => 'Î±',
+  'Î' => 'Î²',
+  'Î' => 'Î³',
+  'Î' => 'ÎŽ',
+  'Î' => 'Îµ',
+  'Î' => 'Î¶',
+  'Î' => 'Î·',
+  'Î' => 'Îž',
+  'Î' => 'Î¹',
+  'Î' => 'Îº',
+  'Î' => 'Î»',
+  'Î' => 'ÎŒ',
+  'Î' => 'Îœ',
+  'Î' => 'ÎŸ',
+  'Î' => 'Î¿',
+  'Î ' => 'Ï',
+  'Î¡' => 'Ï',
+  'Î£' => 'Ï',
+  'Î€' => 'Ï',
+  'Î¥' => 'Ï
+',
+  'ÎŠ' => 'Ï',
+  'Î§' => 'Ï',
+  'Îš' => 'Ï',
+  'Î©' => 'Ï',
+  'Îª' => 'Ï',
+  'Î«' => 'Ï',
+  'Ï' => 'Ï',
+  'Ï' => 'Ï',
+  'Ï' => 'Ï',
+  'Ï' => 'Ï',
+  'Ï' => 'Ï',
+  'Ï ' => 'Ï¡',
+  'Ï¢' => 'Ï£',
+  'Ï€' => 'Ï¥',
+  'ÏŠ' => 'Ï§',
+  'Ïš' => 'Ï©',
+  'Ïª' => 'Ï«',
+  'Ï¬' => 'Ï­',
+  'Ï®' => 'Ï¯',
+  'ÏŽ' => 'Îž',
+  'Ï·' => 'Ïž',
+  'Ï¹' => 'Ï²',
+  'Ïº' => 'Ï»',
+  'Ïœ' => 'Í»',
+  'ÏŸ' => 'ÍŒ',
+  'Ï¿' => 'Íœ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð
+' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ñ',
+  'Ð' => 'Ð°',
+  'Ð' => 'Ð±',
+  'Ð' => 'Ð²',
+  'Ð' => 'Ð³',
+  'Ð' => 'ÐŽ',
+  'Ð' => 'Ðµ',
+  'Ð' => 'Ð¶',
+  'Ð' => 'Ð·',
+  'Ð' => 'Ðž',
+  'Ð' => 'Ð¹',
+  'Ð' => 'Ðº',
+  'Ð' => 'Ð»',
+  'Ð' => 'ÐŒ',
+  'Ð' => 'Ðœ',
+  'Ð' => 'ÐŸ',
+  'Ð' => 'Ð¿',
+  'Ð ' => 'Ñ',
+  'Ð¡' => 'Ñ',
+  'Ð¢' => 'Ñ',
+  'Ð£' => 'Ñ',
+  'Ð€' => 'Ñ',
+  'Ð¥' => 'Ñ
+',
+  'ÐŠ' => 'Ñ',
+  'Ð§' => 'Ñ',
+  'Ðš' => 'Ñ',
+  'Ð©' => 'Ñ',
+  'Ðª' => 'Ñ',
+  'Ð«' => 'Ñ',
+  'Ð¬' => 'Ñ',
+  'Ð­' => 'Ñ',
+  'Ð®' => 'Ñ',
+  'Ð¯' => 'Ñ',
+  'Ñ ' => 'Ñ¡',
+  'Ñ¢' => 'Ñ£',
+  'Ñ€' => 'Ñ¥',
+  'ÑŠ' => 'Ñ§',
+  'Ñš' => 'Ñ©',
+  'Ñª' => 'Ñ«',
+  'Ñ¬' => 'Ñ­',
+  'Ñ®' => 'Ñ¯',
+  'Ñ°' => 'Ñ±',
+  'Ñ²' => 'Ñ³',
+  'ÑŽ' => 'Ñµ',
+  'Ñ¶' => 'Ñ·',
+  'Ñž' => 'Ñ¹',
+  'Ñº' => 'Ñ»',
+  'ÑŒ' => 'Ñœ',
+  'ÑŸ' => 'Ñ¿',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò ' => 'Ò¡',
+  'Ò¢' => 'Ò£',
+  'Ò€' => 'Ò¥',
+  'ÒŠ' => 'Ò§',
+  'Òš' => 'Ò©',
+  'Òª' => 'Ò«',
+  'Ò¬' => 'Ò­',
+  'Ò®' => 'Ò¯',
+  'Ò°' => 'Ò±',
+  'Ò²' => 'Ò³',
+  'ÒŽ' => 'Òµ',
+  'Ò¶' => 'Ò·',
+  'Òž' => 'Ò¹',
+  'Òº' => 'Ò»',
+  'ÒŒ' => 'Òœ',
+  'ÒŸ' => 'Ò¿',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó
+' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó ' => 'Ó¡',
+  'Ó¢' => 'Ó£',
+  'Ó€' => 'Ó¥',
+  'ÓŠ' => 'Ó§',
+  'Óš' => 'Ó©',
+  'Óª' => 'Ó«',
+  'Ó¬' => 'Ó­',
+  'Ó®' => 'Ó¯',
+  'Ó°' => 'Ó±',
+  'Ó²' => 'Ó³',
+  'ÓŽ' => 'Óµ',
+  'Ó¶' => 'Ó·',
+  'Óž' => 'Ó¹',
+  'Óº' => 'Ó»',
+  'ÓŒ' => 'Óœ',
+  'ÓŸ' => 'Ó¿',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô
+',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô ' => 'Ô¡',
+  'Ô¢' => 'Ô£',
+  'Ô€' => 'Ô¥',
+  'ÔŠ' => 'Ô§',
+  'Ôš' => 'Ô©',
+  'Ôª' => 'Ô«',
+  'Ô¬' => 'Ô­',
+  'Ô®' => 'Ô¯',
+  'Ô±' => 'Õ¡',
+  'Ô²' => 'Õ¢',
+  'Ô³' => 'Õ£',
+  'ÔŽ' => 'Õ€',
+  'Ôµ' => 'Õ¥',
+  'Ô¶' => 'ÕŠ',
+  'Ô·' => 'Õ§',
+  'Ôž' => 'Õš',
+  'Ô¹' => 'Õ©',
+  'Ôº' => 'Õª',
+  'Ô»' => 'Õ«',
+  'ÔŒ' => 'Õ¬',
+  'Ôœ' => 'Õ­',
+  'ÔŸ' => 'Õ®',
+  'Ô¿' => 'Õ¯',
+  'Õ' => 'Õ°',
+  'Õ' => 'Õ±',
+  'Õ' => 'Õ²',
+  'Õ' => 'Õ³',
+  'Õ' => 'ÕŽ',
+  'Õ
+' => 'Õµ',
+  'Õ' => 'Õ¶',
+  'Õ' => 'Õ·',
+  'Õ' => 'Õž',
+  'Õ' => 'Õ¹',
+  'Õ' => 'Õº',
+  'Õ' => 'Õ»',
+  'Õ' => 'ÕŒ',
+  'Õ' => 'Õœ',
+  'Õ' => 'ÕŸ',
+  'Õ' => 'Õ¿',
+  'Õ' => 'Ö',
+  'Õ' => 'Ö',
+  'Õ' => 'Ö',
+  'Õ' => 'Ö',
+  'Õ' => 'Ö',
+  'Õ' => 'Ö
+',
+  'Õ' => 'Ö',
+  'á ' => 'âŽ',
+  'á¡' => 'âŽ',
+  'á¢' => 'âŽ',
+  'á£' => 'âŽ',
+  'á€' => 'âŽ',
+  'á¥' => 'âŽ
+',
+  'áŠ' => 'âŽ',
+  'á§' => 'âŽ',
+  'áš' => 'âŽ',
+  'á©' => 'âŽ',
+  'áª' => 'âŽ',
+  'á«' => 'âŽ',
+  'á¬' => 'âŽ',
+  'á­' => 'âŽ',
+  'á®' => 'âŽ',
+  'á¯' => 'âŽ',
+  'á°' => 'âŽ',
+  'á±' => 'âŽ',
+  'á²' => 'âŽ',
+  'á³' => 'âŽ',
+  'áŽ' => 'âŽ',
+  'áµ' => 'âŽ',
+  'á¶' => 'âŽ',
+  'á·' => 'âŽ',
+  'áž' => 'âŽ',
+  'á¹' => 'âŽ',
+  'áº' => 'âŽ',
+  'á»' => 'âŽ',
+  'áŒ' => 'âŽ',
+  'áœ' => 'âŽ',
+  'áŸ' => 'âŽ',
+  'á¿' => 'âŽ',
+  'á' => 'âŽ ',
+  'á' => 'âŽ¡',
+  'á' => 'âŽ¢',
+  'á' => 'âŽ£',
+  'á' => 'âŽ€',
+  'á
+' => 'âŽ¥',
+  'á' => 'âŽ§',
+  'á' => 'âŽ­',
+  'á ' => 'ê­°',
+  'á¡' => 'ê­±',
+  'á¢' => 'ê­²',
+  'á£' => 'ê­³',
+  'á€' => 'ê­Ž',
+  'á¥' => 'ê­µ',
+  'áŠ' => 'ê­¶',
+  'á§' => 'ê­·',
+  'áš' => 'ê­ž',
+  'á©' => 'ê­¹',
+  'áª' => 'ê­º',
+  'á«' => 'ê­»',
+  'á¬' => 'ê­Œ',
+  'á­' => 'ê­œ',
+  'á®' => 'ê­Ÿ',
+  'á¯' => 'ê­¿',
+  'á°' => 'ê®',
+  'á±' => 'ê®',
+  'á²' => 'ê®',
+  'á³' => 'ê®',
+  'áŽ' => 'ê®',
+  'áµ' => 'ê®
+',
+  'á¶' => 'ê®',
+  'á·' => 'ê®',
+  'áž' => 'ê®',
+  'á¹' => 'ê®',
+  'áº' => 'ê®',
+  'á»' => 'ê®',
+  'áŒ' => 'ê®',
+  'áœ' => 'ê®',
+  'áŸ' => 'ê®',
+  'á¿' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê®',
+  'á
+' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê®',
+  'á' => 'ê® ',
+  'á' => 'ê®¡',
+  'á' => 'ê®¢',
+  'á' => 'ê®£',
+  'á' => 'ê®€',
+  'á' => 'ê®¥',
+  'á' => 'ê®Š',
+  'á' => 'ê®§',
+  'á' => 'ê®š',
+  'á' => 'ê®©',
+  'á' => 'ê®ª',
+  'á' => 'ê®«',
+  'á' => 'ê®¬',
+  'á' => 'ê®­',
+  'á' => 'ê®®',
+  'á' => 'ê®¯',
+  'á ' => 'ê®°',
+  'á¡' => 'ê®±',
+  'á¢' => 'ê®²',
+  'á£' => 'ê®³',
+  'á€' => 'ê®Ž',
+  'á¥' => 'ê®µ',
+  'áŠ' => 'ê®¶',
+  'á§' => 'ê®·',
+  'áš' => 'ê®ž',
+  'á©' => 'ê®¹',
+  'áª' => 'ê®º',
+  'á«' => 'ê®»',
+  'á¬' => 'ê®Œ',
+  'á­' => 'ê®œ',
+  'á®' => 'ê®Ÿ',
+  'á¯' => 'ê®¿',
+  'á°' => 'áž',
+  'á±' => 'á¹',
+  'á²' => 'áº',
+  'á³' => 'á»',
+  'áŽ' => 'áŒ',
+  'áµ' => 'áœ',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á²' => 'á',
+  'á² ' => 'á ',
+  'á²¡' => 'á¡',
+  'á²¢' => 'á¢',
+  'á²£' => 'á£',
+  'á²€' => 'á€',
+  'á²¥' => 'á¥',
+  'á²Š' => 'áŠ',
+  'á²§' => 'á§',
+  'á²š' => 'áš',
+  'á²©' => 'á©',
+  'á²ª' => 'áª',
+  'á²«' => 'á«',
+  'á²¬' => 'á¬',
+  'á²­' => 'á­',
+  'á²®' => 'á®',
+  'á²¯' => 'á¯',
+  'á²°' => 'á°',
+  'á²±' => 'á±',
+  'á²²' => 'á²',
+  'á²³' => 'á³',
+  'á²Ž' => 'áŽ',
+  'á²µ' => 'áµ',
+  'á²¶' => 'á¶',
+  'á²·' => 'á·',
+  'á²ž' => 'áž',
+  'á²¹' => 'á¹',
+  'á²º' => 'áº',
+  'á²œ' => 'áœ',
+  'á²Ÿ' => 'áŸ',
+  'á²¿' => 'á¿',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž
+',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž ' => 'áž¡',
+  'áž¢' => 'áž£',
+  'áž€' => 'áž¥',
+  'ážŠ' => 'áž§',
+  'ážš' => 'áž©',
+  'ážª' => 'áž«',
+  'áž¬' => 'áž­',
+  'áž®' => 'áž¯',
+  'áž°' => 'áž±',
+  'áž²' => 'áž³',
+  'ážŽ' => 'ážµ',
+  'áž¶' => 'áž·',
+  'ážž' => 'áž¹',
+  'ážº' => 'áž»',
+  'ážŒ' => 'ážœ',
+  'ážŸ' => 'áž¿',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹
+',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹ ' => 'á¹¡',
+  'á¹¢' => 'á¹£',
+  'á¹€' => 'á¹¥',
+  'á¹Š' => 'á¹§',
+  'á¹š' => 'á¹©',
+  'á¹ª' => 'á¹«',
+  'á¹¬' => 'á¹­',
+  'á¹®' => 'á¹¯',
+  'á¹°' => 'á¹±',
+  'á¹²' => 'á¹³',
+  'á¹Ž' => 'á¹µ',
+  'á¹¶' => 'á¹·',
+  'á¹ž' => 'á¹¹',
+  'á¹º' => 'á¹»',
+  'á¹Œ' => 'á¹œ',
+  'á¹Ÿ' => 'á¹¿',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº
+',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'Ã',
+  'áº ' => 'áº¡',
+  'áº¢' => 'áº£',
+  'áº€' => 'áº¥',
+  'áºŠ' => 'áº§',
+  'áºš' => 'áº©',
+  'áºª' => 'áº«',
+  'áº¬' => 'áº­',
+  'áº®' => 'áº¯',
+  'áº°' => 'áº±',
+  'áº²' => 'áº³',
+  'áºŽ' => 'áºµ',
+  'áº¶' => 'áº·',
+  'áºž' => 'áº¹',
+  'áºº' => 'áº»',
+  'áºŒ' => 'áºœ',
+  'áºŸ' => 'áº¿',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»
+',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á» ' => 'á»¡',
+  'á»¢' => 'á»£',
+  'á»€' => 'á»¥',
+  'á»Š' => 'á»§',
+  'á»š' => 'á»©',
+  'á»ª' => 'á»«',
+  'á»¬' => 'á»­',
+  'á»®' => 'á»¯',
+  'á»°' => 'á»±',
+  'á»²' => 'á»³',
+  'á»Ž' => 'á»µ',
+  'á»¶' => 'á»·',
+  'á»ž' => 'á»¹',
+  'á»º' => 'á»»',
+  'á»Œ' => 'á»œ',
+  'á»Ÿ' => 'á»¿',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ
+',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒš' => 'áŒ ',
+  'áŒ©' => 'áŒ¡',
+  'áŒª' => 'áŒ¢',
+  'áŒ«' => 'áŒ£',
+  'áŒ¬' => 'áŒ€',
+  'áŒ­' => 'áŒ¥',
+  'áŒ®' => 'áŒŠ',
+  'áŒ¯' => 'áŒ§',
+  'áŒž' => 'áŒ°',
+  'áŒ¹' => 'áŒ±',
+  'áŒº' => 'áŒ²',
+  'áŒ»' => 'áŒ³',
+  'áŒŒ' => 'áŒŽ',
+  'áŒœ' => 'áŒµ',
+  'áŒŸ' => 'áŒ¶',
+  'áŒ¿' => 'áŒ·',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ
+',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœš' => 'áœ ',
+  'áœ©' => 'áœ¡',
+  'áœª' => 'áœ¢',
+  'áœ«' => 'áœ£',
+  'áœ¬' => 'áœ€',
+  'áœ­' => 'áœ¥',
+  'áœ®' => 'áœŠ',
+  'áœ¯' => 'áœ§',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ
+',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ',
+  'áŸ' => 'áŸ',
+  'áŸš' => 'áŸ ',
+  'áŸ©' => 'áŸ¡',
+  'áŸª' => 'áŸ¢',
+  'áŸ«' => 'áŸ£',
+  'áŸ¬' => 'áŸ€',
+  'áŸ­' => 'áŸ¥',
+  'áŸ®' => 'áŸŠ',
+  'áŸ¯' => 'áŸ§',
+  'áŸž' => 'áŸ°',
+  'áŸ¹' => 'áŸ±',
+  'áŸº' => 'áœ°',
+  'áŸ»' => 'áœ±',
+  'áŸŒ' => 'áŸ³',
+  'á¿' => 'áœ²',
+  'á¿' => 'áœ³',
+  'á¿' => 'áœŽ',
+  'á¿' => 'áœµ',
+  'á¿' => 'á¿',
+  'á¿' => 'á¿',
+  'á¿' => 'á¿',
+  'á¿' => 'áœ¶',
+  'á¿' => 'áœ·',
+  'á¿š' => 'á¿ ',
+  'á¿©' => 'á¿¡',
+  'á¿ª' => 'áœº',
+  'á¿«' => 'áœ»',
+  'á¿¬' => 'á¿¥',
+  'á¿ž' => 'áœž',
+  'á¿¹' => 'áœ¹',
+  'á¿º' => 'áœŒ',
+  'á¿»' => 'áœœ',
+  'á¿Œ' => 'á¿³',
+  'âŠ' => 'Ï',
+  'âª' => 'k',
+  'â«' => 'Ã¥',
+  'â²' => 'â
+',
+  'â
+ ' => 'â
+°',
+  'â
+¡' => 'â
+±',
+  'â
+¢' => 'â
+²',
+  'â
+£' => 'â
+³',
+  'â
+€' => 'â
+Ž',
+  'â
+¥' => 'â
+µ',
+  'â
+Š' => 'â
+¶',
+  'â
+§' => 'â
+·',
+  'â
+š' => 'â
+ž',
+  'â
+©' => 'â
+¹',
+  'â
+ª' => 'â
+º',
+  'â
+«' => 'â
+»',
+  'â
+¬' => 'â
+Œ',
+  'â
+­' => 'â
+œ',
+  'â
+®' => 'â
+Ÿ',
+  'â
+¯' => 'â
+¿',
+  'â' => 'â',
+  'â¶' => 'â',
+  'â·' => 'â',
+  'âž' => 'â',
+  'â¹' => 'â',
+  'âº' => 'â',
+  'â»' => 'â',
+  'âŒ' => 'â',
+  'âœ' => 'â',
+  'âŸ' => 'â',
+  'â¿' => 'â',
+  'â' => 'â',
+  'â' => 'â',
+  'â' => 'â',
+  'â' => 'â',
+  'â' => 'â',
+  'â
+' => 'â',
+  'â' => 'â ',
+  'â' => 'â¡',
+  'â' => 'â¢',
+  'â' => 'â£',
+  'â' => 'â€',
+  'â' => 'â¥',
+  'â' => 'âŠ',
+  'â' => 'â§',
+  'â' => 'âš',
+  'â' => 'â©',
+  'â°' => 'â°°',
+  'â°' => 'â°±',
+  'â°' => 'â°²',
+  'â°' => 'â°³',
+  'â°' => 'â°Ž',
+  'â°
+' => 'â°µ',
+  'â°' => 'â°¶',
+  'â°' => 'â°·',
+  'â°' => 'â°ž',
+  'â°' => 'â°¹',
+  'â°' => 'â°º',
+  'â°' => 'â°»',
+  'â°' => 'â°Œ',
+  'â°' => 'â°œ',
+  'â°' => 'â°Ÿ',
+  'â°' => 'â°¿',
+  'â°' => 'â±',
+  'â°' => 'â±',
+  'â°' => 'â±',
+  'â°' => 'â±',
+  'â°' => 'â±',
+  'â°' => 'â±
+',
+  'â°' => 'â±',
+  'â°' => 'â±',
+  'â°' => 'â±',
+  'â°' => 'â±',
+  'â°' => 'â±',
+  'â°' => 'â±',
+  'â°' => 'â±',
+  'â°' => 'â±',
+  'â°' => 'â±',
+  'â°' => 'â±',
+  'â° ' => 'â±',
+  'â°¡' => 'â±',
+  'â°¢' => 'â±',
+  'â°£' => 'â±',
+  'â°€' => 'â±',
+  'â°¥' => 'â±',
+  'â°Š' => 'â±',
+  'â°§' => 'â±',
+  'â°š' => 'â±',
+  'â°©' => 'â±',
+  'â°ª' => 'â±',
+  'â°«' => 'â±',
+  'â°¬' => 'â±',
+  'â°­' => 'â±',
+  'â°®' => 'â±',
+  'â± ' => 'â±¡',
+  'â±¢' => 'É«',
+  'â±£' => 'áµœ',
+  'â±€' => 'Éœ',
+  'â±§' => 'â±š',
+  'â±©' => 'â±ª',
+  'â±«' => 'â±¬',
+  'â±­' => 'É',
+  'â±®' => 'É±',
+  'â±¯' => 'É',
+  'â±°' => 'É',
+  'â±²' => 'â±³',
+  'â±µ' => 'â±¶',
+  'â±Ÿ' => 'È¿',
+  'â±¿' => 'É',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²
+',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â² ' => 'â²¡',
+  'â²¢' => 'â²£',
+  'â²€' => 'â²¥',
+  'â²Š' => 'â²§',
+  'â²š' => 'â²©',
+  'â²ª' => 'â²«',
+  'â²¬' => 'â²­',
+  'â²®' => 'â²¯',
+  'â²°' => 'â²±',
+  'â²²' => 'â²³',
+  'â²Ž' => 'â²µ',
+  'â²¶' => 'â²·',
+  'â²ž' => 'â²¹',
+  'â²º' => 'â²»',
+  'â²Œ' => 'â²œ',
+  'â²Ÿ' => 'â²¿',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³
+',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³ ' => 'â³¡',
+  'â³¢' => 'â³£',
+  'â³«' => 'â³¬',
+  'â³­' => 'â³®',
+  'â³²' => 'â³³',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê
+',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê ' => 'ê¡',
+  'ê¢' => 'ê£',
+  'ê€' => 'ê¥',
+  'êŠ' => 'ê§',
+  'êš' => 'ê©',
+  'êª' => 'ê«',
+  'ê¬' => 'ê­',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê
+',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê¢' => 'ê£',
+  'ê€' => 'ê¥',
+  'êŠ' => 'ê§',
+  'êš' => 'ê©',
+  'êª' => 'ê«',
+  'ê¬' => 'ê­',
+  'ê®' => 'ê¯',
+  'ê²' => 'ê³',
+  'êŽ' => 'êµ',
+  'ê¶' => 'ê·',
+  'êž' => 'ê¹',
+  'êº' => 'ê»',
+  'êŒ' => 'êœ',
+  'êŸ' => 'ê¿',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê
+',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê ' => 'ê¡',
+  'ê¢' => 'ê£',
+  'ê€' => 'ê¥',
+  'êŠ' => 'ê§',
+  'êš' => 'ê©',
+  'êª' => 'ê«',
+  'ê¬' => 'ê­',
+  'ê®' => 'ê¯',
+  'ê¹' => 'êº',
+  'ê»' => 'êŒ',
+  'êœ' => 'áµ¹',
+  'êŸ' => 'ê¿',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê
+',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'É¥',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê ' => 'ê¡',
+  'ê¢' => 'ê£',
+  'ê€' => 'ê¥',
+  'êŠ' => 'ê§',
+  'êš' => 'ê©',
+  'êª' => 'ÉŠ',
+  'ê«' => 'É',
+  'ê¬' => 'É¡',
+  'ê­' => 'É¬',
+  'ê®' => 'Éª',
+  'ê°' => 'Ê',
+  'ê±' => 'Ê',
+  'ê²' => 'Ê',
+  'ê³' => 'ê­',
+  'êŽ' => 'êµ',
+  'ê¶' => 'ê·',
+  'êž' => 'ê¹',
+  'êº' => 'ê»',
+  'êŒ' => 'êœ',
+  'êŸ' => 'ê¿',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê
+' => 'Ê',
+  'ê' => 'á¶',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'êµ' => 'ê¶',
+  'ïŒ¡' => 'ïœ',
+  'ïŒ¢' => 'ïœ',
+  'ïŒ£' => 'ïœ',
+  'ïŒ€' => 'ïœ',
+  'ïŒ¥' => 'ïœ
+',
+  'ïŒŠ' => 'ïœ',
+  'ïŒ§' => 'ïœ',
+  'ïŒš' => 'ïœ',
+  'ïŒ©' => 'ïœ',
+  'ïŒª' => 'ïœ',
+  'ïŒ«' => 'ïœ',
+  'ïŒ¬' => 'ïœ',
+  'ïŒ­' => 'ïœ',
+  'ïŒ®' => 'ïœ',
+  'ïŒ¯' => 'ïœ',
+  'ïŒ°' => 'ïœ',
+  'ïŒ±' => 'ïœ',
+  'ïŒ²' => 'ïœ',
+  'ïŒ³' => 'ïœ',
+  'ïŒŽ' => 'ïœ',
+  'ïŒµ' => 'ïœ',
+  'ïŒ¶' => 'ïœ',
+  'ïŒ·' => 'ïœ',
+  'ïŒž' => 'ïœ',
+  'ïŒ¹' => 'ïœ',
+  'ïŒº' => 'ïœ',
+  'ð' => 'ðš',
+  'ð' => 'ð©',
+  'ð' => 'ðª',
+  'ð' => 'ð«',
+  'ð' => 'ð¬',
+  'ð
+' => 'ð­',
+  'ð' => 'ð®',
+  'ð' => 'ð¯',
+  'ð' => 'ð°',
+  'ð' => 'ð±',
+  'ð' => 'ð²',
+  'ð' => 'ð³',
+  'ð' => 'ðŽ',
+  'ð' => 'ðµ',
+  'ð' => 'ð¶',
+  'ð' => 'ð·',
+  'ð' => 'ðž',
+  'ð' => 'ð¹',
+  'ð' => 'ðº',
+  'ð' => 'ð»',
+  'ð' => 'ðŒ',
+  'ð' => 'ðœ',
+  'ð' => 'ðŸ',
+  'ð' => 'ð¿',
+  'ð' => 'ð',
+  'ð' => 'ð',
+  'ð' => 'ð',
+  'ð' => 'ð',
+  'ð' => 'ð',
+  'ð' => 'ð
+',
+  'ð' => 'ð',
+  'ð' => 'ð',
+  'ð ' => 'ð',
+  'ð¡' => 'ð',
+  'ð¢' => 'ð',
+  'ð£' => 'ð',
+  'ð€' => 'ð',
+  'ð¥' => 'ð',
+  'ðŠ' => 'ð',
+  'ð§' => 'ð',
+  'ð°' => 'ð',
+  'ð±' => 'ð',
+  'ð²' => 'ð',
+  'ð³' => 'ð',
+  'ðŽ' => 'ð',
+  'ðµ' => 'ð',
+  'ð¶' => 'ð',
+  'ð·' => 'ð',
+  'ðž' => 'ð ',
+  'ð¹' => 'ð¡',
+  'ðº' => 'ð¢',
+  'ð»' => 'ð£',
+  'ðŒ' => 'ð€',
+  'ðœ' => 'ð¥',
+  'ðŸ' => 'ðŠ',
+  'ð¿' => 'ð§',
+  'ð' => 'ðš',
+  'ð' => 'ð©',
+  'ð' => 'ðª',
+  'ð' => 'ð«',
+  'ð' => 'ð¬',
+  'ð
+' => 'ð­',
+  'ð' => 'ð®',
+  'ð' => 'ð¯',
+  'ð' => 'ð°',
+  'ð' => 'ð±',
+  'ð' => 'ð²',
+  'ð' => 'ð³',
+  'ð' => 'ðŽ',
+  'ð' => 'ðµ',
+  'ð' => 'ð¶',
+  'ð' => 'ð·',
+  'ð' => 'ðž',
+  'ð' => 'ð¹',
+  'ð' => 'ðº',
+  'ð' => 'ð»',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²
+' => 'ð³
+',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð²' => 'ð³',
+  'ð² ' => 'ð³ ',
+  'ð²¡' => 'ð³¡',
+  'ð²¢' => 'ð³¢',
+  'ð²£' => 'ð³£',
+  'ð²€' => 'ð³€',
+  'ð²¥' => 'ð³¥',
+  'ð²Š' => 'ð³Š',
+  'ð²§' => 'ð³§',
+  'ð²š' => 'ð³š',
+  'ð²©' => 'ð³©',
+  'ð²ª' => 'ð³ª',
+  'ð²«' => 'ð³«',
+  'ð²¬' => 'ð³¬',
+  'ð²­' => 'ð³­',
+  'ð²®' => 'ð³®',
+  'ð²¯' => 'ð³¯',
+  'ð²°' => 'ð³°',
+  'ð²±' => 'ð³±',
+  'ð²²' => 'ð³²',
+  'ð¢ ' => 'ð£',
+  'ð¢¡' => 'ð£',
+  'ð¢¢' => 'ð£',
+  'ð¢£' => 'ð£',
+  'ð¢€' => 'ð£',
+  'ð¢¥' => 'ð£
+',
+  'ð¢Š' => 'ð£',
+  'ð¢§' => 'ð£',
+  'ð¢š' => 'ð£',
+  'ð¢©' => 'ð£',
+  'ð¢ª' => 'ð£',
+  'ð¢«' => 'ð£',
+  'ð¢¬' => 'ð£',
+  'ð¢­' => 'ð£',
+  'ð¢®' => 'ð£',
+  'ð¢¯' => 'ð£',
+  'ð¢°' => 'ð£',
+  'ð¢±' => 'ð£',
+  'ð¢²' => 'ð£',
+  'ð¢³' => 'ð£',
+  'ð¢Ž' => 'ð£',
+  'ð¢µ' => 'ð£',
+  'ð¢¶' => 'ð£',
+  'ð¢·' => 'ð£',
+  'ð¢ž' => 'ð£',
+  'ð¢¹' => 'ð£',
+  'ð¢º' => 'ð£',
+  'ð¢»' => 'ð£',
+  'ð¢Œ' => 'ð£',
+  'ð¢œ' => 'ð£',
+  'ð¢Ÿ' => 'ð£',
+  'ð¢¿' => 'ð£',
+  'ð¹' => 'ð¹ ',
+  'ð¹' => 'ð¹¡',
+  'ð¹' => 'ð¹¢',
+  'ð¹' => 'ð¹£',
+  'ð¹' => 'ð¹€',
+  'ð¹
+' => 'ð¹¥',
+  'ð¹' => 'ð¹Š',
+  'ð¹' => 'ð¹§',
+  'ð¹' => 'ð¹š',
+  'ð¹' => 'ð¹©',
+  'ð¹' => 'ð¹ª',
+  'ð¹' => 'ð¹«',
+  'ð¹' => 'ð¹¬',
+  'ð¹' => 'ð¹­',
+  'ð¹' => 'ð¹®',
+  'ð¹' => 'ð¹¯',
+  'ð¹' => 'ð¹°',
+  'ð¹' => 'ð¹±',
+  'ð¹' => 'ð¹²',
+  'ð¹' => 'ð¹³',
+  'ð¹' => 'ð¹Ž',
+  'ð¹' => 'ð¹µ',
+  'ð¹' => 'ð¹¶',
+  'ð¹' => 'ð¹·',
+  'ð¹' => 'ð¹ž',
+  'ð¹' => 'ð¹¹',
+  'ð¹' => 'ð¹º',
+  'ð¹' => 'ð¹»',
+  'ð¹' => 'ð¹Œ',
+  'ð¹' => 'ð¹œ',
+  'ð¹' => 'ð¹Ÿ',
+  'ð¹' => 'ð¹¿',
+  'ð€' => 'ð€¢',
+  'ð€' => 'ð€£',
+  'ð€' => 'ð€€',
+  'ð€' => 'ð€¥',
+  'ð€' => 'ð€Š',
+  'ð€
+' => 'ð€§',
+  'ð€' => 'ð€š',
+  'ð€' => 'ð€©',
+  'ð€' => 'ð€ª',
+  'ð€' => 'ð€«',
+  'ð€' => 'ð€¬',
+  'ð€' => 'ð€­',
+  'ð€' => 'ð€®',
+  'ð€' => 'ð€¯',
+  'ð€' => 'ð€°',
+  'ð€' => 'ð€±',
+  'ð€' => 'ð€²',
+  'ð€' => 'ð€³',
+  'ð€' => 'ð€Ž',
+  'ð€' => 'ð€µ',
+  'ð€' => 'ð€¶',
+  'ð€' => 'ð€·',
+  'ð€' => 'ð€ž',
+  'ð€' => 'ð€¹',
+  'ð€' => 'ð€º',
+  'ð€' => 'ð€»',
+  'ð€' => 'ð€Œ',
+  'ð€' => 'ð€œ',
+  'ð€' => 'ð€Ÿ',
+  'ð€' => 'ð€¿',
+  'ð€' => 'ð¥',
+  'ð€' => 'ð¥',
+  'ð€ ' => 'ð¥',
+  'ð€¡' => 'ð¥',
+);
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php	(revision 8435)
@@ -0,0 +1,5 @@
+<?php
+
+// from Case_Ignorable in https://unicode.org/Public/UNIDATA/DerivedCoreProperties.txt
+
+return '/(?<![\x{0027}\x{002E}\x{003A}\x{005E}\x{0060}\x{00A8}\x{00AD}\x{00AF}\x{00B4}\x{00B7}\x{00B8}\x{02B0}-\x{02C1}\x{02C2}-\x{02C5}\x{02C6}-\x{02D1}\x{02D2}-\x{02DF}\x{02E0}-\x{02E4}\x{02E5}-\x{02EB}\x{02EC}\x{02ED}\x{02EE}\x{02EF}-\x{02FF}\x{0300}-\x{036F}\x{0374}\x{0375}\x{037A}\x{0384}-\x{0385}\x{0387}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{0559}\x{0591}-\x{05BD}\x{05BF}\x{05C1}-\x{05C2}\x{05C4}-\x{05C5}\x{05C7}\x{05F4}\x{0600}-\x{0605}\x{0610}-\x{061A}\x{061C}\x{0640}\x{064B}-\x{065F}\x{0670}\x{06D6}-\x{06DC}\x{06DD}\x{06DF}-\x{06E4}\x{06E5}-\x{06E6}\x{06E7}-\x{06E8}\x{06EA}-\x{06ED}\x{070F}\x{0711}\x{0730}-\x{074A}\x{07A6}-\x{07B0}\x{07EB}-\x{07F3}\x{07F4}-\x{07F5}\x{07FA}\x{07FD}\x{0816}-\x{0819}\x{081A}\x{081B}-\x{0823}\x{0824}\x{0825}-\x{0827}\x{0828}\x{0829}-\x{082D}\x{0859}-\x{085B}\x{08D3}-\x{08E1}\x{08E2}\x{08E3}-\x{0902}\x{093A}\x{093C}\x{0941}-\x{0948}\x{094D}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0971}\x{0981}\x{09BC}\x{09C1}-\x{09C4}\x{09CD}\x{09E2}-\x{09E3}\x{09FE}\x{0A01}-\x{0A02}\x{0A3C}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0ABC}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B3C}\x{0B3F}\x{0B41}-\x{0B44}\x{0B4D}\x{0B56}\x{0B62}-\x{0B63}\x{0B82}\x{0BC0}\x{0BCD}\x{0C00}\x{0C04}\x{0C3E}-\x{0C40}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C81}\x{0CBC}\x{0CBF}\x{0CC6}\x{0CCC}-\x{0CCD}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D3B}-\x{0D3C}\x{0D41}-\x{0D44}\x{0D4D}\x{0D62}-\x{0D63}\x{0DCA}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0E31}\x{0E34}-\x{0E3A}\x{0E46}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EB9}\x{0EBB}-\x{0EBC}\x{0EC6}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F71}-\x{0F7E}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102D}-\x{1030}\x{1032}-\x{1037}\x{1039}-\x{103A}\x{103D}-\x{103E}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1071}-\x{1074}\x{1082}\x{1085}-\x{1086}\x{108D}\x{109D}\x{10FC}\x{135D}-\x{135F}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B7}-\x{17BD}\x{17C6}\x{17C9}-\x{17D3}\x{17D7}\x{17DD}\x{180B}-\x{180D}\x{180E}\x{1843}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1927}-\x{1928}\x{1932}\x{1939}-\x{193B}\x{1A17}-\x{1A18}\x{1A1B}\x{1A56}\x{1A58}-\x{1A5E}\x{1A60}\x{1A62}\x{1A65}-\x{1A6C}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AA7}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1B00}-\x{1B03}\x{1B34}\x{1B36}-\x{1B3A}\x{1B3C}\x{1B42}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1BA2}-\x{1BA5}\x{1BA8}-\x{1BA9}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE8}-\x{1BE9}\x{1BED}\x{1BEF}-\x{1BF1}\x{1C2C}-\x{1C33}\x{1C36}-\x{1C37}\x{1C78}-\x{1C7D}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF8}-\x{1CF9}\x{1D2C}-\x{1D6A}\x{1D78}\x{1D9B}-\x{1DBF}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{1FBD}\x{1FBF}-\x{1FC1}\x{1FCD}-\x{1FCF}\x{1FDD}-\x{1FDF}\x{1FED}-\x{1FEF}\x{1FFD}-\x{1FFE}\x{200B}-\x{200F}\x{2018}\x{2019}\x{2024}\x{2027}\x{202A}-\x{202E}\x{2060}-\x{2064}\x{2066}-\x{206F}\x{2071}\x{207F}\x{2090}-\x{209C}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2C7C}-\x{2C7D}\x{2CEF}-\x{2CF1}\x{2D6F}\x{2D7F}\x{2DE0}-\x{2DFF}\x{2E2F}\x{3005}\x{302A}-\x{302D}\x{3031}-\x{3035}\x{303B}\x{3099}-\x{309A}\x{309B}-\x{309C}\x{309D}-\x{309E}\x{30FC}-\x{30FE}\x{A015}\x{A4F8}-\x{A4FD}\x{A60C}\x{A66F}\x{A670}-\x{A672}\x{A674}-\x{A67D}\x{A67F}\x{A69C}-\x{A69D}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A700}-\x{A716}\x{A717}-\x{A71F}\x{A720}-\x{A721}\x{A770}\x{A788}\x{A789}-\x{A78A}\x{A7F8}-\x{A7F9}\x{A802}\x{A806}\x{A80B}\x{A825}-\x{A826}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A980}-\x{A982}\x{A9B3}\x{A9B6}-\x{A9B9}\x{A9BC}\x{A9CF}\x{A9E5}\x{A9E6}\x{AA29}-\x{AA2E}\x{AA31}-\x{AA32}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA70}\x{AA7C}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AADD}\x{AAEC}-\x{AAED}\x{AAF3}-\x{AAF4}\x{AAF6}\x{AB5B}\x{AB5C}-\x{AB5F}\x{ABE5}\x{ABE8}\x{ABED}\x{FB1E}\x{FBB2}-\x{FBC1}\x{FE00}-\x{FE0F}\x{FE13}\x{FE20}-\x{FE2F}\x{FE52}\x{FE55}\x{FEFF}\x{FF07}\x{FF0E}\x{FF1A}\x{FF3E}\x{FF40}\x{FF70}\x{FF9E}-\x{FF9F}\x{FFE3}\x{FFF9}-\x{FFFB}\x{101FD}\x{102E0}\x{10376}-\x{1037A}\x{10A01}-\x{10A03}\x{10A05}-\x{10A06}\x{10A0C}-\x{10A0F}\x{10A38}-\x{10A3A}\x{10A3F}\x{10AE5}-\x{10AE6}\x{10D24}-\x{10D27}\x{10F46}-\x{10F50}\x{11001}\x{11038}-\x{11046}\x{1107F}-\x{11081}\x{110B3}-\x{110B6}\x{110B9}-\x{110BA}\x{110BD}\x{110CD}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112D}-\x{11134}\x{11173}\x{11180}-\x{11181}\x{111B6}-\x{111BE}\x{111C9}-\x{111CC}\x{1122F}-\x{11231}\x{11234}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{1133B}-\x{1133C}\x{11340}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11438}-\x{1143F}\x{11442}-\x{11444}\x{11446}\x{1145E}\x{114B3}-\x{114B8}\x{114BA}\x{114BF}-\x{114C0}\x{114C2}-\x{114C3}\x{115B2}-\x{115B5}\x{115BC}-\x{115BD}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11633}-\x{1163A}\x{1163D}\x{1163F}-\x{11640}\x{116AB}\x{116AD}\x{116B0}-\x{116B5}\x{116B7}\x{1171D}-\x{1171F}\x{11722}-\x{11725}\x{11727}-\x{1172B}\x{1182F}-\x{11837}\x{11839}-\x{1183A}\x{11A01}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A98}-\x{11A99}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C3F}\x{11C92}-\x{11CA7}\x{11CAA}-\x{11CB0}\x{11CB2}-\x{11CB3}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D90}-\x{11D91}\x{11D95}\x{11D97}\x{11EF3}-\x{11EF4}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16B40}-\x{16B43}\x{16F8F}-\x{16F92}\x{16F93}-\x{16F9F}\x{16FE0}-\x{16FE1}\x{1BC9D}-\x{1BC9E}\x{1BCA0}-\x{1BCA3}\x{1D167}-\x{1D169}\x{1D173}-\x{1D17A}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D242}-\x{1D244}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E8D0}-\x{1E8D6}\x{1E944}-\x{1E94A}\x{1F3FB}-\x{1F3FF}\x{E0001}\x{E0020}-\x{E007F}\x{E0100}-\x{E01EF}])(\pL)(\pL*+)/u';
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php	(revision 8435)
@@ -0,0 +1,1569 @@
+<?php
+
+return array (
+  'a' => 'A',
+  'b' => 'B',
+  'c' => 'C',
+  'd' => 'D',
+  'e' => 'E',
+  'f' => 'F',
+  'g' => 'G',
+  'h' => 'H',
+  'i' => 'I',
+  'j' => 'J',
+  'k' => 'K',
+  'l' => 'L',
+  'm' => 'M',
+  'n' => 'N',
+  'o' => 'O',
+  'p' => 'P',
+  'q' => 'Q',
+  'r' => 'R',
+  's' => 'S',
+  't' => 'T',
+  'u' => 'U',
+  'v' => 'V',
+  'w' => 'W',
+  'x' => 'X',
+  'y' => 'Y',
+  'z' => 'Z',
+  'Âµ' => 'Î',
+  'Ã ' => 'Ã',
+  'Ã¡' => 'Ã',
+  'Ã¢' => 'Ã',
+  'Ã£' => 'Ã',
+  'Ã€' => 'Ã',
+  'Ã¥' => 'Ã
+',
+  'ÃŠ' => 'Ã',
+  'Ã§' => 'Ã',
+  'Ãš' => 'Ã',
+  'Ã©' => 'Ã',
+  'Ãª' => 'Ã',
+  'Ã«' => 'Ã',
+  'Ã¬' => 'Ã',
+  'Ã­' => 'Ã',
+  'Ã®' => 'Ã',
+  'Ã¯' => 'Ã',
+  'Ã°' => 'Ã',
+  'Ã±' => 'Ã',
+  'Ã²' => 'Ã',
+  'Ã³' => 'Ã',
+  'ÃŽ' => 'Ã',
+  'Ãµ' => 'Ã',
+  'Ã¶' => 'Ã',
+  'Ãž' => 'Ã',
+  'Ã¹' => 'Ã',
+  'Ãº' => 'Ã',
+  'Ã»' => 'Ã',
+  'ÃŒ' => 'Ã',
+  'Ãœ' => 'Ã',
+  'ÃŸ' => 'Ã',
+  'Ã¿' => 'Åž',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä
+' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä' => 'Ä',
+  'Ä¡' => 'Ä ',
+  'Ä£' => 'Ä¢',
+  'Ä¥' => 'Ä€',
+  'Ä§' => 'ÄŠ',
+  'Ä©' => 'Äš',
+  'Ä«' => 'Äª',
+  'Ä­' => 'Ä¬',
+  'Ä¯' => 'Ä®',
+  'Ä±' => 'I',
+  'Ä³' => 'Ä²',
+  'Äµ' => 'ÄŽ',
+  'Ä·' => 'Ä¶',
+  'Äº' => 'Ä¹',
+  'ÄŒ' => 'Ä»',
+  'ÄŸ' => 'Äœ',
+  'Å' => 'Ä¿',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å
+',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å' => 'Å',
+  'Å¡' => 'Å ',
+  'Å£' => 'Å¢',
+  'Å¥' => 'Å€',
+  'Å§' => 'ÅŠ',
+  'Å©' => 'Åš',
+  'Å«' => 'Åª',
+  'Å­' => 'Å¬',
+  'Å¯' => 'Å®',
+  'Å±' => 'Å°',
+  'Å³' => 'Å²',
+  'Åµ' => 'ÅŽ',
+  'Å·' => 'Å¶',
+  'Åº' => 'Å¹',
+  'ÅŒ' => 'Å»',
+  'ÅŸ' => 'Åœ',
+  'Å¿' => 'S',
+  'Æ' => 'É',
+  'Æ' => 'Æ',
+  'Æ
+' => 'Æ',
+  'Æ' => 'Æ',
+  'Æ' => 'Æ',
+  'Æ' => 'Æ',
+  'Æ' => 'Ç¶',
+  'Æ' => 'Æ',
+  'Æ' => 'Èœ',
+  'Æ' => 'È ',
+  'Æ¡' => 'Æ ',
+  'Æ£' => 'Æ¢',
+  'Æ¥' => 'Æ€',
+  'Æš' => 'Æ§',
+  'Æ­' => 'Æ¬',
+  'Æ°' => 'Æ¯',
+  'ÆŽ' => 'Æ³',
+  'Æ¶' => 'Æµ',
+  'Æ¹' => 'Æž',
+  'Æœ' => 'ÆŒ',
+  'Æ¿' => 'Ç·',
+  'Ç
+' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Ç',
+  'Ç' => 'Æ',
+  'Ç' => 'Ç',
+  'Ç¡' => 'Ç ',
+  'Ç£' => 'Ç¢',
+  'Ç¥' => 'Ç€',
+  'Ç§' => 'ÇŠ',
+  'Ç©' => 'Çš',
+  'Ç«' => 'Çª',
+  'Ç­' => 'Ç¬',
+  'Ç¯' => 'Ç®',
+  'Ç²' => 'Ç±',
+  'Ç³' => 'Ç±',
+  'Çµ' => 'ÇŽ',
+  'Ç¹' => 'Çž',
+  'Ç»' => 'Çº',
+  'Çœ' => 'ÇŒ',
+  'Ç¿' => 'ÇŸ',
+  'È' => 'È',
+  'È' => 'È',
+  'È
+' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È' => 'È',
+  'È£' => 'È¢',
+  'È¥' => 'È€',
+  'È§' => 'ÈŠ',
+  'È©' => 'Èš',
+  'È«' => 'Èª',
+  'È­' => 'È¬',
+  'È¯' => 'È®',
+  'È±' => 'È°',
+  'È³' => 'È²',
+  'ÈŒ' => 'È»',
+  'È¿' => 'â±Ÿ',
+  'É' => 'â±¿',
+  'É' => 'É',
+  'É' => 'É',
+  'É' => 'É',
+  'É' => 'É',
+  'É' => 'É',
+  'É' => 'É',
+  'É' => 'â±¯',
+  'É' => 'â±­',
+  'É' => 'â±°',
+  'É' => 'Æ',
+  'É' => 'Æ',
+  'É' => 'Æ',
+  'É' => 'Æ',
+  'É' => 'Æ',
+  'É' => 'Æ',
+  'É' => 'ê«',
+  'É ' => 'Æ',
+  'É¡' => 'ê¬',
+  'É£' => 'Æ',
+  'É¥' => 'ê',
+  'ÉŠ' => 'êª',
+  'Éš' => 'Æ',
+  'É©' => 'Æ',
+  'Éª' => 'ê®',
+  'É«' => 'â±¢',
+  'É¬' => 'ê­',
+  'É¯' => 'Æ',
+  'É±' => 'â±®',
+  'É²' => 'Æ',
+  'Éµ' => 'Æ',
+  'Éœ' => 'â±€',
+  'Ê' => 'ÆŠ',
+  'Ê' => 'ê
+',
+  'Ê' => 'Æ©',
+  'Ê' => 'ê±',
+  'Ê' => 'Æ®',
+  'Ê' => 'É',
+  'Ê' => 'Æ±',
+  'Ê' => 'Æ²',
+  'Ê' => 'É
+',
+  'Ê' => 'Æ·',
+  'Ê' => 'ê²',
+  'Ê' => 'ê°',
+  'Í
+' => 'Î',
+  'Í±' => 'Í°',
+  'Í³' => 'Í²',
+  'Í·' => 'Í¶',
+  'Í»' => 'Ïœ',
+  'ÍŒ' => 'ÏŸ',
+  'Íœ' => 'Ï¿',
+  'Î¬' => 'Î',
+  'Î­' => 'Î',
+  'Î®' => 'Î',
+  'Î¯' => 'Î',
+  'Î±' => 'Î',
+  'Î²' => 'Î',
+  'Î³' => 'Î',
+  'ÎŽ' => 'Î',
+  'Îµ' => 'Î',
+  'Î¶' => 'Î',
+  'Î·' => 'Î',
+  'Îž' => 'Î',
+  'Î¹' => 'Î',
+  'Îº' => 'Î',
+  'Î»' => 'Î',
+  'ÎŒ' => 'Î',
+  'Îœ' => 'Î',
+  'ÎŸ' => 'Î',
+  'Î¿' => 'Î',
+  'Ï' => 'Î ',
+  'Ï' => 'Î¡',
+  'Ï' => 'Î£',
+  'Ï' => 'Î£',
+  'Ï' => 'Î€',
+  'Ï
+' => 'Î¥',
+  'Ï' => 'ÎŠ',
+  'Ï' => 'Î§',
+  'Ï' => 'Îš',
+  'Ï' => 'Î©',
+  'Ï' => 'Îª',
+  'Ï' => 'Î«',
+  'Ï' => 'Î',
+  'Ï' => 'Î',
+  'Ï' => 'Î',
+  'Ï' => 'Î',
+  'Ï' => 'Î',
+  'Ï' => 'ÎŠ',
+  'Ï' => 'Î ',
+  'Ï' => 'Ï',
+  'Ï' => 'Ï',
+  'Ï' => 'Ï',
+  'Ï' => 'Ï',
+  'Ï' => 'Ï',
+  'Ï¡' => 'Ï ',
+  'Ï£' => 'Ï¢',
+  'Ï¥' => 'Ï€',
+  'Ï§' => 'ÏŠ',
+  'Ï©' => 'Ïš',
+  'Ï«' => 'Ïª',
+  'Ï­' => 'Ï¬',
+  'Ï¯' => 'Ï®',
+  'Ï°' => 'Î',
+  'Ï±' => 'Î¡',
+  'Ï²' => 'Ï¹',
+  'Ï³' => 'Í¿',
+  'Ïµ' => 'Î',
+  'Ïž' => 'Ï·',
+  'Ï»' => 'Ïº',
+  'Ð°' => 'Ð',
+  'Ð±' => 'Ð',
+  'Ð²' => 'Ð',
+  'Ð³' => 'Ð',
+  'ÐŽ' => 'Ð',
+  'Ðµ' => 'Ð',
+  'Ð¶' => 'Ð',
+  'Ð·' => 'Ð',
+  'Ðž' => 'Ð',
+  'Ð¹' => 'Ð',
+  'Ðº' => 'Ð',
+  'Ð»' => 'Ð',
+  'ÐŒ' => 'Ð',
+  'Ðœ' => 'Ð',
+  'ÐŸ' => 'Ð',
+  'Ð¿' => 'Ð',
+  'Ñ' => 'Ð ',
+  'Ñ' => 'Ð¡',
+  'Ñ' => 'Ð¢',
+  'Ñ' => 'Ð£',
+  'Ñ' => 'Ð€',
+  'Ñ
+' => 'Ð¥',
+  'Ñ' => 'ÐŠ',
+  'Ñ' => 'Ð§',
+  'Ñ' => 'Ðš',
+  'Ñ' => 'Ð©',
+  'Ñ' => 'Ðª',
+  'Ñ' => 'Ð«',
+  'Ñ' => 'Ð¬',
+  'Ñ' => 'Ð­',
+  'Ñ' => 'Ð®',
+  'Ñ' => 'Ð¯',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð
+',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð',
+  'Ñ' => 'Ð',
+  'Ñ¡' => 'Ñ ',
+  'Ñ£' => 'Ñ¢',
+  'Ñ¥' => 'Ñ€',
+  'Ñ§' => 'ÑŠ',
+  'Ñ©' => 'Ñš',
+  'Ñ«' => 'Ñª',
+  'Ñ­' => 'Ñ¬',
+  'Ñ¯' => 'Ñ®',
+  'Ñ±' => 'Ñ°',
+  'Ñ³' => 'Ñ²',
+  'Ñµ' => 'ÑŽ',
+  'Ñ·' => 'Ñ¶',
+  'Ñ¹' => 'Ñž',
+  'Ñ»' => 'Ñº',
+  'Ñœ' => 'ÑŒ',
+  'Ñ¿' => 'ÑŸ',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò' => 'Ò',
+  'Ò¡' => 'Ò ',
+  'Ò£' => 'Ò¢',
+  'Ò¥' => 'Ò€',
+  'Ò§' => 'ÒŠ',
+  'Ò©' => 'Òš',
+  'Ò«' => 'Òª',
+  'Ò­' => 'Ò¬',
+  'Ò¯' => 'Ò®',
+  'Ò±' => 'Ò°',
+  'Ò³' => 'Ò²',
+  'Òµ' => 'ÒŽ',
+  'Ò·' => 'Ò¶',
+  'Ò¹' => 'Òž',
+  'Ò»' => 'Òº',
+  'Òœ' => 'ÒŒ',
+  'Ò¿' => 'ÒŸ',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó
+',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó' => 'Ó',
+  'Ó¡' => 'Ó ',
+  'Ó£' => 'Ó¢',
+  'Ó¥' => 'Ó€',
+  'Ó§' => 'ÓŠ',
+  'Ó©' => 'Óš',
+  'Ó«' => 'Óª',
+  'Ó­' => 'Ó¬',
+  'Ó¯' => 'Ó®',
+  'Ó±' => 'Ó°',
+  'Ó³' => 'Ó²',
+  'Óµ' => 'ÓŽ',
+  'Ó·' => 'Ó¶',
+  'Ó¹' => 'Óž',
+  'Ó»' => 'Óº',
+  'Óœ' => 'ÓŒ',
+  'Ó¿' => 'ÓŸ',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô
+' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô' => 'Ô',
+  'Ô¡' => 'Ô ',
+  'Ô£' => 'Ô¢',
+  'Ô¥' => 'Ô€',
+  'Ô§' => 'ÔŠ',
+  'Ô©' => 'Ôš',
+  'Ô«' => 'Ôª',
+  'Ô­' => 'Ô¬',
+  'Ô¯' => 'Ô®',
+  'Õ¡' => 'Ô±',
+  'Õ¢' => 'Ô²',
+  'Õ£' => 'Ô³',
+  'Õ€' => 'ÔŽ',
+  'Õ¥' => 'Ôµ',
+  'ÕŠ' => 'Ô¶',
+  'Õ§' => 'Ô·',
+  'Õš' => 'Ôž',
+  'Õ©' => 'Ô¹',
+  'Õª' => 'Ôº',
+  'Õ«' => 'Ô»',
+  'Õ¬' => 'ÔŒ',
+  'Õ­' => 'Ôœ',
+  'Õ®' => 'ÔŸ',
+  'Õ¯' => 'Ô¿',
+  'Õ°' => 'Õ',
+  'Õ±' => 'Õ',
+  'Õ²' => 'Õ',
+  'Õ³' => 'Õ',
+  'ÕŽ' => 'Õ',
+  'Õµ' => 'Õ
+',
+  'Õ¶' => 'Õ',
+  'Õ·' => 'Õ',
+  'Õž' => 'Õ',
+  'Õ¹' => 'Õ',
+  'Õº' => 'Õ',
+  'Õ»' => 'Õ',
+  'ÕŒ' => 'Õ',
+  'Õœ' => 'Õ',
+  'ÕŸ' => 'Õ',
+  'Õ¿' => 'Õ',
+  'Ö' => 'Õ',
+  'Ö' => 'Õ',
+  'Ö' => 'Õ',
+  'Ö' => 'Õ',
+  'Ö' => 'Õ',
+  'Ö
+' => 'Õ',
+  'Ö' => 'Õ',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á' => 'á²',
+  'á ' => 'á² ',
+  'á¡' => 'á²¡',
+  'á¢' => 'á²¢',
+  'á£' => 'á²£',
+  'á€' => 'á²€',
+  'á¥' => 'á²¥',
+  'áŠ' => 'á²Š',
+  'á§' => 'á²§',
+  'áš' => 'á²š',
+  'á©' => 'á²©',
+  'áª' => 'á²ª',
+  'á«' => 'á²«',
+  'á¬' => 'á²¬',
+  'á­' => 'á²­',
+  'á®' => 'á²®',
+  'á¯' => 'á²¯',
+  'á°' => 'á²°',
+  'á±' => 'á²±',
+  'á²' => 'á²²',
+  'á³' => 'á²³',
+  'áŽ' => 'á²Ž',
+  'áµ' => 'á²µ',
+  'á¶' => 'á²¶',
+  'á·' => 'á²·',
+  'áž' => 'á²ž',
+  'á¹' => 'á²¹',
+  'áº' => 'á²º',
+  'áœ' => 'á²œ',
+  'áŸ' => 'á²Ÿ',
+  'á¿' => 'á²¿',
+  'áž' => 'á°',
+  'á¹' => 'á±',
+  'áº' => 'á²',
+  'á»' => 'á³',
+  'áŒ' => 'áŽ',
+  'áœ' => 'áµ',
+  'á²' => 'Ð',
+  'á²' => 'Ð',
+  'á²' => 'Ð',
+  'á²' => 'Ð¡',
+  'á²' => 'Ð¢',
+  'á²
+' => 'Ð¢',
+  'á²' => 'Ðª',
+  'á²' => 'Ñ¢',
+  'á²' => 'ê',
+  'áµ¹' => 'êœ',
+  'áµœ' => 'â±£',
+  'á¶' => 'ê',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž
+' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž' => 'áž',
+  'áž¡' => 'áž ',
+  'áž£' => 'áž¢',
+  'áž¥' => 'áž€',
+  'áž§' => 'ážŠ',
+  'áž©' => 'ážš',
+  'áž«' => 'ážª',
+  'áž­' => 'áž¬',
+  'áž¯' => 'áž®',
+  'áž±' => 'áž°',
+  'áž³' => 'áž²',
+  'ážµ' => 'ážŽ',
+  'áž·' => 'áž¶',
+  'áž¹' => 'ážž',
+  'áž»' => 'ážº',
+  'ážœ' => 'ážŒ',
+  'áž¿' => 'ážŸ',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹
+' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹' => 'á¹',
+  'á¹¡' => 'á¹ ',
+  'á¹£' => 'á¹¢',
+  'á¹¥' => 'á¹€',
+  'á¹§' => 'á¹Š',
+  'á¹©' => 'á¹š',
+  'á¹«' => 'á¹ª',
+  'á¹­' => 'á¹¬',
+  'á¹¯' => 'á¹®',
+  'á¹±' => 'á¹°',
+  'á¹³' => 'á¹²',
+  'á¹µ' => 'á¹Ž',
+  'á¹·' => 'á¹¶',
+  'á¹¹' => 'á¹ž',
+  'á¹»' => 'á¹º',
+  'á¹œ' => 'á¹Œ',
+  'á¹¿' => 'á¹Ÿ',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº
+' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'áº',
+  'áº' => 'á¹ ',
+  'áº¡' => 'áº ',
+  'áº£' => 'áº¢',
+  'áº¥' => 'áº€',
+  'áº§' => 'áºŠ',
+  'áº©' => 'áºš',
+  'áº«' => 'áºª',
+  'áº­' => 'áº¬',
+  'áº¯' => 'áº®',
+  'áº±' => 'áº°',
+  'áº³' => 'áº²',
+  'áºµ' => 'áºŽ',
+  'áº·' => 'áº¶',
+  'áº¹' => 'áºž',
+  'áº»' => 'áºº',
+  'áºœ' => 'áºŒ',
+  'áº¿' => 'áºŸ',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»
+' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»' => 'á»',
+  'á»¡' => 'á» ',
+  'á»£' => 'á»¢',
+  'á»¥' => 'á»€',
+  'á»§' => 'á»Š',
+  'á»©' => 'á»š',
+  'á»«' => 'á»ª',
+  'á»­' => 'á»¬',
+  'á»¯' => 'á»®',
+  'á»±' => 'á»°',
+  'á»³' => 'á»²',
+  'á»µ' => 'á»Ž',
+  'á»·' => 'á»¶',
+  'á»¹' => 'á»ž',
+  'á»»' => 'á»º',
+  'á»œ' => 'á»Œ',
+  'á»¿' => 'á»Ÿ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ
+' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ' => 'áŒ',
+  'áŒ ' => 'áŒš',
+  'áŒ¡' => 'áŒ©',
+  'áŒ¢' => 'áŒª',
+  'áŒ£' => 'áŒ«',
+  'áŒ€' => 'áŒ¬',
+  'áŒ¥' => 'áŒ­',
+  'áŒŠ' => 'áŒ®',
+  'áŒ§' => 'áŒ¯',
+  'áŒ°' => 'áŒž',
+  'áŒ±' => 'áŒ¹',
+  'áŒ²' => 'áŒº',
+  'áŒ³' => 'áŒ»',
+  'áŒŽ' => 'áŒŒ',
+  'áŒµ' => 'áŒœ',
+  'áŒ¶' => 'áŒŸ',
+  'áŒ·' => 'áŒ¿',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ
+' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ' => 'áœ',
+  'áœ ' => 'áœš',
+  'áœ¡' => 'áœ©',
+  'áœ¢' => 'áœª',
+  'áœ£' => 'áœ«',
+  'áœ€' => 'áœ¬',
+  'áœ¥' => 'áœ­',
+  'áœŠ' => 'áœ®',
+  'áœ§' => 'áœ¯',
+  'áœ°' => 'áŸº',
+  'áœ±' => 'áŸ»',
+  'áœ²' => 'á¿',
+  'áœ³' => 'á¿',
+  'áœŽ' => 'á¿',
+  'áœµ' => 'á¿',
+  'áœ¶' => 'á¿',
+  'áœ·' => 'á¿',
+  'áœž' => 'á¿ž',
+  'áœ¹' => 'á¿¹',
+  'áœº' => 'á¿ª',
+  'áœ»' => 'á¿«',
+  'áœŒ' => 'á¿º',
+  'áœœ' => 'á¿»',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒÎ',
+  'áŸ
+' => 'áŒÎ',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒšÎ',
+  'áŸ' => 'áŒ©Î',
+  'áŸ' => 'áŒªÎ',
+  'áŸ' => 'áŒ«Î',
+  'áŸ' => 'áŒ¬Î',
+  'áŸ' => 'áŒ­Î',
+  'áŸ' => 'áŒ®Î',
+  'áŸ' => 'áŒ¯Î',
+  'áŸ ' => 'áœšÎ',
+  'áŸ¡' => 'áœ©Î',
+  'áŸ¢' => 'áœªÎ',
+  'áŸ£' => 'áœ«Î',
+  'áŸ€' => 'áœ¬Î',
+  'áŸ¥' => 'áœ­Î',
+  'áŸŠ' => 'áœ®Î',
+  'áŸ§' => 'áœ¯Î',
+  'áŸ°' => 'áŸž',
+  'áŸ±' => 'áŸ¹',
+  'áŸ³' => 'ÎÎ',
+  'áŸŸ' => 'Î',
+  'á¿' => 'ÎÎ',
+  'á¿' => 'á¿',
+  'á¿' => 'á¿',
+  'á¿ ' => 'á¿š',
+  'á¿¡' => 'á¿©',
+  'á¿¥' => 'á¿¬',
+  'á¿³' => 'Î©Î',
+  'â
+' => 'â²',
+  'â
+°' => 'â
+ ',
+  'â
+±' => 'â
+¡',
+  'â
+²' => 'â
+¢',
+  'â
+³' => 'â
+£',
+  'â
+Ž' => 'â
+€',
+  'â
+µ' => 'â
+¥',
+  'â
+¶' => 'â
+Š',
+  'â
+·' => 'â
+§',
+  'â
+ž' => 'â
+š',
+  'â
+¹' => 'â
+©',
+  'â
+º' => 'â
+ª',
+  'â
+»' => 'â
+«',
+  'â
+Œ' => 'â
+¬',
+  'â
+œ' => 'â
+­',
+  'â
+Ÿ' => 'â
+®',
+  'â
+¿' => 'â
+¯',
+  'â' => 'â',
+  'â' => 'â¶',
+  'â' => 'â·',
+  'â' => 'âž',
+  'â' => 'â¹',
+  'â' => 'âº',
+  'â' => 'â»',
+  'â' => 'âŒ',
+  'â' => 'âœ',
+  'â' => 'âŸ',
+  'â' => 'â¿',
+  'â' => 'â',
+  'â' => 'â',
+  'â' => 'â',
+  'â' => 'â',
+  'â' => 'â',
+  'â' => 'â
+',
+  'â ' => 'â',
+  'â¡' => 'â',
+  'â¢' => 'â',
+  'â£' => 'â',
+  'â€' => 'â',
+  'â¥' => 'â',
+  'âŠ' => 'â',
+  'â§' => 'â',
+  'âš' => 'â',
+  'â©' => 'â',
+  'â°°' => 'â°',
+  'â°±' => 'â°',
+  'â°²' => 'â°',
+  'â°³' => 'â°',
+  'â°Ž' => 'â°',
+  'â°µ' => 'â°
+',
+  'â°¶' => 'â°',
+  'â°·' => 'â°',
+  'â°ž' => 'â°',
+  'â°¹' => 'â°',
+  'â°º' => 'â°',
+  'â°»' => 'â°',
+  'â°Œ' => 'â°',
+  'â°œ' => 'â°',
+  'â°Ÿ' => 'â°',
+  'â°¿' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â°',
+  'â±
+' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â°',
+  'â±' => 'â° ',
+  'â±' => 'â°¡',
+  'â±' => 'â°¢',
+  'â±' => 'â°£',
+  'â±' => 'â°€',
+  'â±' => 'â°¥',
+  'â±' => 'â°Š',
+  'â±' => 'â°§',
+  'â±' => 'â°š',
+  'â±' => 'â°©',
+  'â±' => 'â°ª',
+  'â±' => 'â°«',
+  'â±' => 'â°¬',
+  'â±' => 'â°­',
+  'â±' => 'â°®',
+  'â±¡' => 'â± ',
+  'â±¥' => 'Èº',
+  'â±Š' => 'ÈŸ',
+  'â±š' => 'â±§',
+  'â±ª' => 'â±©',
+  'â±¬' => 'â±«',
+  'â±³' => 'â±²',
+  'â±¶' => 'â±µ',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²
+' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²' => 'â²',
+  'â²¡' => 'â² ',
+  'â²£' => 'â²¢',
+  'â²¥' => 'â²€',
+  'â²§' => 'â²Š',
+  'â²©' => 'â²š',
+  'â²«' => 'â²ª',
+  'â²­' => 'â²¬',
+  'â²¯' => 'â²®',
+  'â²±' => 'â²°',
+  'â²³' => 'â²²',
+  'â²µ' => 'â²Ž',
+  'â²·' => 'â²¶',
+  'â²¹' => 'â²ž',
+  'â²»' => 'â²º',
+  'â²œ' => 'â²Œ',
+  'â²¿' => 'â²Ÿ',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³
+' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³' => 'â³',
+  'â³¡' => 'â³ ',
+  'â³£' => 'â³¢',
+  'â³¬' => 'â³«',
+  'â³®' => 'â³­',
+  'â³³' => 'â³²',
+  'âŽ' => 'á ',
+  'âŽ' => 'á¡',
+  'âŽ' => 'á¢',
+  'âŽ' => 'á£',
+  'âŽ' => 'á€',
+  'âŽ
+' => 'á¥',
+  'âŽ' => 'áŠ',
+  'âŽ' => 'á§',
+  'âŽ' => 'áš',
+  'âŽ' => 'á©',
+  'âŽ' => 'áª',
+  'âŽ' => 'á«',
+  'âŽ' => 'á¬',
+  'âŽ' => 'á­',
+  'âŽ' => 'á®',
+  'âŽ' => 'á¯',
+  'âŽ' => 'á°',
+  'âŽ' => 'á±',
+  'âŽ' => 'á²',
+  'âŽ' => 'á³',
+  'âŽ' => 'áŽ',
+  'âŽ' => 'áµ',
+  'âŽ' => 'á¶',
+  'âŽ' => 'á·',
+  'âŽ' => 'áž',
+  'âŽ' => 'á¹',
+  'âŽ' => 'áº',
+  'âŽ' => 'á»',
+  'âŽ' => 'áŒ',
+  'âŽ' => 'áœ',
+  'âŽ' => 'áŸ',
+  'âŽ' => 'á¿',
+  'âŽ ' => 'á',
+  'âŽ¡' => 'á',
+  'âŽ¢' => 'á',
+  'âŽ£' => 'á',
+  'âŽ€' => 'á',
+  'âŽ¥' => 'á
+',
+  'âŽ§' => 'á',
+  'âŽ­' => 'á',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê
+' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê¡' => 'ê ',
+  'ê£' => 'ê¢',
+  'ê¥' => 'ê€',
+  'ê§' => 'êŠ',
+  'ê©' => 'êš',
+  'ê«' => 'êª',
+  'ê­' => 'ê¬',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê
+' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê£' => 'ê¢',
+  'ê¥' => 'ê€',
+  'ê§' => 'êŠ',
+  'ê©' => 'êš',
+  'ê«' => 'êª',
+  'ê­' => 'ê¬',
+  'ê¯' => 'ê®',
+  'ê³' => 'ê²',
+  'êµ' => 'êŽ',
+  'ê·' => 'ê¶',
+  'ê¹' => 'êž',
+  'ê»' => 'êº',
+  'êœ' => 'êŒ',
+  'ê¿' => 'êŸ',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê
+' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê¡' => 'ê ',
+  'ê£' => 'ê¢',
+  'ê¥' => 'ê€',
+  'ê§' => 'êŠ',
+  'ê©' => 'êš',
+  'ê«' => 'êª',
+  'ê­' => 'ê¬',
+  'ê¯' => 'ê®',
+  'êº' => 'ê¹',
+  'êŒ' => 'ê»',
+  'ê¿' => 'êŸ',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê
+' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê¡' => 'ê ',
+  'ê£' => 'ê¢',
+  'ê¥' => 'ê€',
+  'ê§' => 'êŠ',
+  'ê©' => 'êš',
+  'êµ' => 'êŽ',
+  'ê·' => 'ê¶',
+  'ê¹' => 'êž',
+  'ê»' => 'êº',
+  'êœ' => 'êŒ',
+  'ê¿' => 'êŸ',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê' => 'ê',
+  'ê¶' => 'êµ',
+  'ê­' => 'ê³',
+  'ê­°' => 'á ',
+  'ê­±' => 'á¡',
+  'ê­²' => 'á¢',
+  'ê­³' => 'á£',
+  'ê­Ž' => 'á€',
+  'ê­µ' => 'á¥',
+  'ê­¶' => 'áŠ',
+  'ê­·' => 'á§',
+  'ê­ž' => 'áš',
+  'ê­¹' => 'á©',
+  'ê­º' => 'áª',
+  'ê­»' => 'á«',
+  'ê­Œ' => 'á¬',
+  'ê­œ' => 'á­',
+  'ê­Ÿ' => 'á®',
+  'ê­¿' => 'á¯',
+  'ê®' => 'á°',
+  'ê®' => 'á±',
+  'ê®' => 'á²',
+  'ê®' => 'á³',
+  'ê®' => 'áŽ',
+  'ê®
+' => 'áµ',
+  'ê®' => 'á¶',
+  'ê®' => 'á·',
+  'ê®' => 'áž',
+  'ê®' => 'á¹',
+  'ê®' => 'áº',
+  'ê®' => 'á»',
+  'ê®' => 'áŒ',
+  'ê®' => 'áœ',
+  'ê®' => 'áŸ',
+  'ê®' => 'á¿',
+  'ê®' => 'á',
+  'ê®' => 'á',
+  'ê®' => 'á',
+  'ê®' => 'á',
+  'ê®' => 'á',
+  'ê®' => 'á
+',
+  'ê®' => 'á',
+  'ê®' => 'á',
+  'ê®' => 'á',
+  'ê®' => 'á',
+  'ê®' => 'á',
+  'ê®' => 'á',
+  'ê®' => 'á',
+  'ê®' => 'á',
+  'ê®' => 'á',
+  'ê®' => 'á',
+  'ê® ' => 'á',
+  'ê®¡' => 'á',
+  'ê®¢' => 'á',
+  'ê®£' => 'á',
+  'ê®€' => 'á',
+  'ê®¥' => 'á',
+  'ê®Š' => 'á',
+  'ê®§' => 'á',
+  'ê®š' => 'á',
+  'ê®©' => 'á',
+  'ê®ª' => 'á',
+  'ê®«' => 'á',
+  'ê®¬' => 'á',
+  'ê®­' => 'á',
+  'ê®®' => 'á',
+  'ê®¯' => 'á',
+  'ê®°' => 'á ',
+  'ê®±' => 'á¡',
+  'ê®²' => 'á¢',
+  'ê®³' => 'á£',
+  'ê®Ž' => 'á€',
+  'ê®µ' => 'á¥',
+  'ê®¶' => 'áŠ',
+  'ê®·' => 'á§',
+  'ê®ž' => 'áš',
+  'ê®¹' => 'á©',
+  'ê®º' => 'áª',
+  'ê®»' => 'á«',
+  'ê®Œ' => 'á¬',
+  'ê®œ' => 'á­',
+  'ê®Ÿ' => 'á®',
+  'ê®¿' => 'á¯',
+  'ïœ' => 'ïŒ¡',
+  'ïœ' => 'ïŒ¢',
+  'ïœ' => 'ïŒ£',
+  'ïœ' => 'ïŒ€',
+  'ïœ
+' => 'ïŒ¥',
+  'ïœ' => 'ïŒŠ',
+  'ïœ' => 'ïŒ§',
+  'ïœ' => 'ïŒš',
+  'ïœ' => 'ïŒ©',
+  'ïœ' => 'ïŒª',
+  'ïœ' => 'ïŒ«',
+  'ïœ' => 'ïŒ¬',
+  'ïœ' => 'ïŒ­',
+  'ïœ' => 'ïŒ®',
+  'ïœ' => 'ïŒ¯',
+  'ïœ' => 'ïŒ°',
+  'ïœ' => 'ïŒ±',
+  'ïœ' => 'ïŒ²',
+  'ïœ' => 'ïŒ³',
+  'ïœ' => 'ïŒŽ',
+  'ïœ' => 'ïŒµ',
+  'ïœ' => 'ïŒ¶',
+  'ïœ' => 'ïŒ·',
+  'ïœ' => 'ïŒž',
+  'ïœ' => 'ïŒ¹',
+  'ïœ' => 'ïŒº',
+  'ðš' => 'ð',
+  'ð©' => 'ð',
+  'ðª' => 'ð',
+  'ð«' => 'ð',
+  'ð¬' => 'ð',
+  'ð­' => 'ð
+',
+  'ð®' => 'ð',
+  'ð¯' => 'ð',
+  'ð°' => 'ð',
+  'ð±' => 'ð',
+  'ð²' => 'ð',
+  'ð³' => 'ð',
+  'ðŽ' => 'ð',
+  'ðµ' => 'ð',
+  'ð¶' => 'ð',
+  'ð·' => 'ð',
+  'ðž' => 'ð',
+  'ð¹' => 'ð',
+  'ðº' => 'ð',
+  'ð»' => 'ð',
+  'ðŒ' => 'ð',
+  'ðœ' => 'ð',
+  'ðŸ' => 'ð',
+  'ð¿' => 'ð',
+  'ð' => 'ð',
+  'ð' => 'ð',
+  'ð' => 'ð',
+  'ð' => 'ð',
+  'ð' => 'ð',
+  'ð
+' => 'ð',
+  'ð' => 'ð',
+  'ð' => 'ð',
+  'ð' => 'ð ',
+  'ð' => 'ð¡',
+  'ð' => 'ð¢',
+  'ð' => 'ð£',
+  'ð' => 'ð€',
+  'ð' => 'ð¥',
+  'ð' => 'ðŠ',
+  'ð' => 'ð§',
+  'ð' => 'ð°',
+  'ð' => 'ð±',
+  'ð' => 'ð²',
+  'ð' => 'ð³',
+  'ð' => 'ðŽ',
+  'ð' => 'ðµ',
+  'ð' => 'ð¶',
+  'ð' => 'ð·',
+  'ð ' => 'ðž',
+  'ð¡' => 'ð¹',
+  'ð¢' => 'ðº',
+  'ð£' => 'ð»',
+  'ð€' => 'ðŒ',
+  'ð¥' => 'ðœ',
+  'ðŠ' => 'ðŸ',
+  'ð§' => 'ð¿',
+  'ðš' => 'ð',
+  'ð©' => 'ð',
+  'ðª' => 'ð',
+  'ð«' => 'ð',
+  'ð¬' => 'ð',
+  'ð­' => 'ð
+',
+  'ð®' => 'ð',
+  'ð¯' => 'ð',
+  'ð°' => 'ð',
+  'ð±' => 'ð',
+  'ð²' => 'ð',
+  'ð³' => 'ð',
+  'ðŽ' => 'ð',
+  'ðµ' => 'ð',
+  'ð¶' => 'ð',
+  'ð·' => 'ð',
+  'ðž' => 'ð',
+  'ð¹' => 'ð',
+  'ðº' => 'ð',
+  'ð»' => 'ð',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³
+' => 'ð²
+',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³' => 'ð²',
+  'ð³ ' => 'ð² ',
+  'ð³¡' => 'ð²¡',
+  'ð³¢' => 'ð²¢',
+  'ð³£' => 'ð²£',
+  'ð³€' => 'ð²€',
+  'ð³¥' => 'ð²¥',
+  'ð³Š' => 'ð²Š',
+  'ð³§' => 'ð²§',
+  'ð³š' => 'ð²š',
+  'ð³©' => 'ð²©',
+  'ð³ª' => 'ð²ª',
+  'ð³«' => 'ð²«',
+  'ð³¬' => 'ð²¬',
+  'ð³­' => 'ð²­',
+  'ð³®' => 'ð²®',
+  'ð³¯' => 'ð²¯',
+  'ð³°' => 'ð²°',
+  'ð³±' => 'ð²±',
+  'ð³²' => 'ð²²',
+  'ð£' => 'ð¢ ',
+  'ð£' => 'ð¢¡',
+  'ð£' => 'ð¢¢',
+  'ð£' => 'ð¢£',
+  'ð£' => 'ð¢€',
+  'ð£
+' => 'ð¢¥',
+  'ð£' => 'ð¢Š',
+  'ð£' => 'ð¢§',
+  'ð£' => 'ð¢š',
+  'ð£' => 'ð¢©',
+  'ð£' => 'ð¢ª',
+  'ð£' => 'ð¢«',
+  'ð£' => 'ð¢¬',
+  'ð£' => 'ð¢­',
+  'ð£' => 'ð¢®',
+  'ð£' => 'ð¢¯',
+  'ð£' => 'ð¢°',
+  'ð£' => 'ð¢±',
+  'ð£' => 'ð¢²',
+  'ð£' => 'ð¢³',
+  'ð£' => 'ð¢Ž',
+  'ð£' => 'ð¢µ',
+  'ð£' => 'ð¢¶',
+  'ð£' => 'ð¢·',
+  'ð£' => 'ð¢ž',
+  'ð£' => 'ð¢¹',
+  'ð£' => 'ð¢º',
+  'ð£' => 'ð¢»',
+  'ð£' => 'ð¢Œ',
+  'ð£' => 'ð¢œ',
+  'ð£' => 'ð¢Ÿ',
+  'ð£' => 'ð¢¿',
+  'ð¹ ' => 'ð¹',
+  'ð¹¡' => 'ð¹',
+  'ð¹¢' => 'ð¹',
+  'ð¹£' => 'ð¹',
+  'ð¹€' => 'ð¹',
+  'ð¹¥' => 'ð¹
+',
+  'ð¹Š' => 'ð¹',
+  'ð¹§' => 'ð¹',
+  'ð¹š' => 'ð¹',
+  'ð¹©' => 'ð¹',
+  'ð¹ª' => 'ð¹',
+  'ð¹«' => 'ð¹',
+  'ð¹¬' => 'ð¹',
+  'ð¹­' => 'ð¹',
+  'ð¹®' => 'ð¹',
+  'ð¹¯' => 'ð¹',
+  'ð¹°' => 'ð¹',
+  'ð¹±' => 'ð¹',
+  'ð¹²' => 'ð¹',
+  'ð¹³' => 'ð¹',
+  'ð¹Ž' => 'ð¹',
+  'ð¹µ' => 'ð¹',
+  'ð¹¶' => 'ð¹',
+  'ð¹·' => 'ð¹',
+  'ð¹ž' => 'ð¹',
+  'ð¹¹' => 'ð¹',
+  'ð¹º' => 'ð¹',
+  'ð¹»' => 'ð¹',
+  'ð¹Œ' => 'ð¹',
+  'ð¹œ' => 'ð¹',
+  'ð¹Ÿ' => 'ð¹',
+  'ð¹¿' => 'ð¹',
+  'ð€¢' => 'ð€',
+  'ð€£' => 'ð€',
+  'ð€€' => 'ð€',
+  'ð€¥' => 'ð€',
+  'ð€Š' => 'ð€',
+  'ð€§' => 'ð€
+',
+  'ð€š' => 'ð€',
+  'ð€©' => 'ð€',
+  'ð€ª' => 'ð€',
+  'ð€«' => 'ð€',
+  'ð€¬' => 'ð€',
+  'ð€­' => 'ð€',
+  'ð€®' => 'ð€',
+  'ð€¯' => 'ð€',
+  'ð€°' => 'ð€',
+  'ð€±' => 'ð€',
+  'ð€²' => 'ð€',
+  'ð€³' => 'ð€',
+  'ð€Ž' => 'ð€',
+  'ð€µ' => 'ð€',
+  'ð€¶' => 'ð€',
+  'ð€·' => 'ð€',
+  'ð€ž' => 'ð€',
+  'ð€¹' => 'ð€',
+  'ð€º' => 'ð€',
+  'ð€»' => 'ð€',
+  'ð€Œ' => 'ð€',
+  'ð€œ' => 'ð€',
+  'ð€Ÿ' => 'ð€',
+  'ð€¿' => 'ð€',
+  'ð¥' => 'ð€',
+  'ð¥' => 'ð€',
+  'ð¥' => 'ð€ ',
+  'ð¥' => 'ð€¡',
+  'Ã' => 'SS',
+  'ï¬' => 'FF',
+  'ï¬' => 'FI',
+  'ï¬' => 'FL',
+  'ï¬' => 'FFI',
+  'ï¬' => 'FFL',
+  'ï¬
+' => 'ST',
+  'ï¬' => 'ST',
+  'Ö' => 'ÔµÕ',
+  'ï¬' => 'ÕÕ',
+  'ï¬' => 'ÕÔµ',
+  'ï¬' => 'ÕÔ»',
+  'ï¬' => 'ÕÕ',
+  'ï¬' => 'ÕÔœ',
+  'Å' => 'ÊŒN',
+  'Î' => 'ÎÌÌ',
+  'Î°' => 'Î¥ÌÌ',
+  'Ç°' => 'JÌ',
+  'áº' => 'HÌ±',
+  'áº' => 'TÌ',
+  'áº' => 'WÌ',
+  'áº' => 'YÌ',
+  'áº' => 'AÊŸ',
+  'áœ' => 'Î¥Ì',
+  'áœ' => 'Î¥ÌÌ',
+  'áœ' => 'Î¥ÌÌ',
+  'áœ' => 'Î¥ÌÍ',
+  'áŸ¶' => 'ÎÍ',
+  'á¿' => 'ÎÍ',
+  'á¿' => 'ÎÌÌ',
+  'á¿' => 'ÎÌÌ',
+  'á¿' => 'ÎÍ',
+  'á¿' => 'ÎÌÍ',
+  'á¿¢' => 'Î¥ÌÌ',
+  'á¿£' => 'Î¥ÌÌ',
+  'á¿€' => 'Î¡Ì',
+  'á¿Š' => 'Î¥Í',
+  'á¿§' => 'Î¥ÌÍ',
+  'á¿¶' => 'Î©Í',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒÎ',
+  'áŸ' => 'áŒšÎ',
+  'áŸ' => 'áŒ©Î',
+  'áŸ' => 'áŒªÎ',
+  'áŸ' => 'áŒ«Î',
+  'áŸ' => 'áŒ¬Î',
+  'áŸ' => 'áŒ­Î',
+  'áŸ' => 'áŒ®Î',
+  'áŸ' => 'áŒ¯Î',
+  'áŸš' => 'áœšÎ',
+  'áŸ©' => 'áœ©Î',
+  'áŸª' => 'áœªÎ',
+  'áŸ«' => 'áœ«Î',
+  'áŸ¬' => 'áœ¬Î',
+  'áŸ­' => 'áœ­Î',
+  'áŸ®' => 'áœ®Î',
+  'áŸ¯' => 'áœ¯Î',
+  'áŸŒ' => 'ÎÎ',
+  'á¿' => 'ÎÎ',
+  'á¿Œ' => 'Î©Î',
+  'áŸ²' => 'áŸºÎ',
+  'áŸŽ' => 'ÎÎ',
+  'á¿' => 'á¿Î',
+  'á¿' => 'ÎÎ',
+  'á¿²' => 'á¿ºÎ',
+  'á¿Ž' => 'ÎÎ',
+  'áŸ·' => 'ÎÍÎ',
+  'á¿' => 'ÎÍÎ',
+  'á¿·' => 'Î©ÍÎ',
+);
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/bootstrap.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/bootstrap.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/bootstrap.php	(revision 8435)
@@ -0,0 +1,159 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Mbstring as p;
+
+if (\PHP_VERSION_ID >= 80000) {
+    return require __DIR__.'/bootstrap80.php';
+}
+
+if (!function_exists('mb_convert_encoding')) {
+    function mb_convert_encoding($string, $to_encoding, $from_encoding = null) { return p\Mbstring::mb_convert_encoding($string, $to_encoding, $from_encoding); }
+}
+if (!function_exists('mb_decode_mimeheader')) {
+    function mb_decode_mimeheader($string) { return p\Mbstring::mb_decode_mimeheader($string); }
+}
+if (!function_exists('mb_encode_mimeheader')) {
+    function mb_encode_mimeheader($string, $charset = null, $transfer_encoding = null, $newline = "\r\n", $indent = 0) { return p\Mbstring::mb_encode_mimeheader($string, $charset, $transfer_encoding, $newline, $indent); }
+}
+if (!function_exists('mb_decode_numericentity')) {
+    function mb_decode_numericentity($string, $map, $encoding = null) { return p\Mbstring::mb_decode_numericentity($string, $map, $encoding); }
+}
+if (!function_exists('mb_encode_numericentity')) {
+    function mb_encode_numericentity($string, $map, $encoding = null, $hex = false) { return p\Mbstring::mb_encode_numericentity($string, $map, $encoding, $hex); }
+}
+if (!function_exists('mb_convert_case')) {
+    function mb_convert_case($string, $mode, $encoding = null) { return p\Mbstring::mb_convert_case($string, $mode, $encoding); }
+}
+if (!function_exists('mb_internal_encoding')) {
+    function mb_internal_encoding($encoding = null) { return p\Mbstring::mb_internal_encoding($encoding); }
+}
+if (!function_exists('mb_language')) {
+    function mb_language($language = null) { return p\Mbstring::mb_language($language); }
+}
+if (!function_exists('mb_list_encodings')) {
+    function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); }
+}
+if (!function_exists('mb_encoding_aliases')) {
+    function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); }
+}
+if (!function_exists('mb_check_encoding')) {
+    function mb_check_encoding($value = null, $encoding = null) { return p\Mbstring::mb_check_encoding($value, $encoding); }
+}
+if (!function_exists('mb_detect_encoding')) {
+    function mb_detect_encoding($string, $encodings = null, $strict = false) { return p\Mbstring::mb_detect_encoding($string, $encodings, $strict); }
+}
+if (!function_exists('mb_detect_order')) {
+    function mb_detect_order($encoding = null) { return p\Mbstring::mb_detect_order($encoding); }
+}
+if (!function_exists('mb_parse_str')) {
+    function mb_parse_str($string, &$result = []) { parse_str($string, $result); return (bool) $result; }
+}
+if (!function_exists('mb_strlen')) {
+    function mb_strlen($string, $encoding = null) { return p\Mbstring::mb_strlen($string, $encoding); }
+}
+if (!function_exists('mb_strpos')) {
+    function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strpos($haystack, $needle, $offset, $encoding); }
+}
+if (!function_exists('mb_strtolower')) {
+    function mb_strtolower($string, $encoding = null) { return p\Mbstring::mb_strtolower($string, $encoding); }
+}
+if (!function_exists('mb_strtoupper')) {
+    function mb_strtoupper($string, $encoding = null) { return p\Mbstring::mb_strtoupper($string, $encoding); }
+}
+if (!function_exists('mb_substitute_character')) {
+    function mb_substitute_character($substitute_character = null) { return p\Mbstring::mb_substitute_character($substitute_character); }
+}
+if (!function_exists('mb_substr')) {
+    function mb_substr($string, $start, $length = 2147483647, $encoding = null) { return p\Mbstring::mb_substr($string, $start, $length, $encoding); }
+}
+if (!function_exists('mb_stripos')) {
+    function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_stripos($haystack, $needle, $offset, $encoding); }
+}
+if (!function_exists('mb_stristr')) {
+    function mb_stristr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_stristr($haystack, $needle, $before_needle, $encoding); }
+}
+if (!function_exists('mb_strrchr')) {
+    function mb_strrchr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrchr($haystack, $needle, $before_needle, $encoding); }
+}
+if (!function_exists('mb_strrichr')) {
+    function mb_strrichr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrichr($haystack, $needle, $before_needle, $encoding); }
+}
+if (!function_exists('mb_strripos')) {
+    function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strripos($haystack, $needle, $offset, $encoding); }
+}
+if (!function_exists('mb_strrpos')) {
+    function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strrpos($haystack, $needle, $offset, $encoding); }
+}
+if (!function_exists('mb_strstr')) {
+    function mb_strstr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strstr($haystack, $needle, $before_needle, $encoding); }
+}
+if (!function_exists('mb_get_info')) {
+    function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); }
+}
+if (!function_exists('mb_http_output')) {
+    function mb_http_output($encoding = null) { return p\Mbstring::mb_http_output($encoding); }
+}
+if (!function_exists('mb_strwidth')) {
+    function mb_strwidth($string, $encoding = null) { return p\Mbstring::mb_strwidth($string, $encoding); }
+}
+if (!function_exists('mb_substr_count')) {
+    function mb_substr_count($haystack, $needle, $encoding = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $encoding); }
+}
+if (!function_exists('mb_output_handler')) {
+    function mb_output_handler($string, $status) { return p\Mbstring::mb_output_handler($string, $status); }
+}
+if (!function_exists('mb_http_input')) {
+    function mb_http_input($type = null) { return p\Mbstring::mb_http_input($type); }
+}
+
+if (!function_exists('mb_convert_variables')) {
+    function mb_convert_variables($to_encoding, $from_encoding, &...$vars) { return p\Mbstring::mb_convert_variables($to_encoding, $from_encoding, ...$vars); }
+}
+
+if (!function_exists('mb_ord')) {
+    function mb_ord($string, $encoding = null) { return p\Mbstring::mb_ord($string, $encoding); }
+}
+if (!function_exists('mb_chr')) {
+    function mb_chr($codepoint, $encoding = null) { return p\Mbstring::mb_chr($codepoint, $encoding); }
+}
+if (!function_exists('mb_scrub')) {
+    function mb_scrub($string, $encoding = null) { $encoding = null === $encoding ? mb_internal_encoding() : $encoding; return mb_convert_encoding($string, $encoding, $encoding); }
+}
+if (!function_exists('mb_str_split')) {
+    function mb_str_split($string, $length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $length, $encoding); }
+}
+
+if (!function_exists('mb_str_pad')) {
+    function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); }
+}
+
+if (!function_exists('mb_ucfirst')) {
+    function mb_ucfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_ucfirst($string, $encoding); }
+}
+
+if (!function_exists('mb_lcfirst')) {
+    function mb_lcfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); }
+}
+
+if (extension_loaded('mbstring')) {
+    return;
+}
+
+if (!defined('MB_CASE_UPPER')) {
+    define('MB_CASE_UPPER', 0);
+}
+if (!defined('MB_CASE_LOWER')) {
+    define('MB_CASE_LOWER', 1);
+}
+if (!defined('MB_CASE_TITLE')) {
+    define('MB_CASE_TITLE', 2);
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/bootstrap80.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/bootstrap80.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/bootstrap80.php	(revision 8435)
@@ -0,0 +1,155 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Mbstring as p;
+
+if (!function_exists('mb_convert_encoding')) {
+    function mb_convert_encoding(array|string|null $string, ?string $to_encoding, array|string|null $from_encoding = null): array|string|false { return p\Mbstring::mb_convert_encoding($string ?? '', (string) $to_encoding, $from_encoding); }
+}
+if (!function_exists('mb_decode_mimeheader')) {
+    function mb_decode_mimeheader(?string $string): string { return p\Mbstring::mb_decode_mimeheader((string) $string); }
+}
+if (!function_exists('mb_encode_mimeheader')) {
+    function mb_encode_mimeheader(?string $string, ?string $charset = null, ?string $transfer_encoding = null, ?string $newline = "\r\n", ?int $indent = 0): string { return p\Mbstring::mb_encode_mimeheader((string) $string, $charset, $transfer_encoding, (string) $newline, (int) $indent); }
+}
+if (!function_exists('mb_decode_numericentity')) {
+    function mb_decode_numericentity(?string $string, array $map, ?string $encoding = null): string { return p\Mbstring::mb_decode_numericentity((string) $string, $map, $encoding); }
+}
+if (!function_exists('mb_encode_numericentity')) {
+    function mb_encode_numericentity(?string $string, array $map, ?string $encoding = null, ?bool $hex = false): string { return p\Mbstring::mb_encode_numericentity((string) $string, $map, $encoding, (bool) $hex); }
+}
+if (!function_exists('mb_convert_case')) {
+    function mb_convert_case(?string $string, ?int $mode, ?string $encoding = null): string { return p\Mbstring::mb_convert_case((string) $string, (int) $mode, $encoding); }
+}
+if (!function_exists('mb_internal_encoding')) {
+    function mb_internal_encoding(?string $encoding = null): string|bool { return p\Mbstring::mb_internal_encoding($encoding); }
+}
+if (!function_exists('mb_language')) {
+    function mb_language(?string $language = null): string|bool { return p\Mbstring::mb_language($language); }
+}
+if (!function_exists('mb_list_encodings')) {
+    function mb_list_encodings(): array { return p\Mbstring::mb_list_encodings(); }
+}
+if (!function_exists('mb_encoding_aliases')) {
+    function mb_encoding_aliases(?string $encoding): array { return p\Mbstring::mb_encoding_aliases((string) $encoding); }
+}
+if (!function_exists('mb_check_encoding')) {
+    function mb_check_encoding(array|string|null $value = null, ?string $encoding = null): bool { return p\Mbstring::mb_check_encoding($value, $encoding); }
+}
+if (!function_exists('mb_detect_encoding')) {
+    function mb_detect_encoding(?string $string, array|string|null $encodings = null, ?bool $strict = false): string|false { return p\Mbstring::mb_detect_encoding((string) $string, $encodings, (bool) $strict); }
+}
+if (!function_exists('mb_detect_order')) {
+    function mb_detect_order(array|string|null $encoding = null): array|bool { return p\Mbstring::mb_detect_order($encoding); }
+}
+if (!function_exists('mb_parse_str')) {
+    function mb_parse_str(?string $string, &$result = []): bool { parse_str((string) $string, $result); return (bool) $result; }
+}
+if (!function_exists('mb_strlen')) {
+    function mb_strlen(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strlen((string) $string, $encoding); }
+}
+if (!function_exists('mb_strpos')) {
+    function mb_strpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strpos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+}
+if (!function_exists('mb_strtolower')) {
+    function mb_strtolower(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtolower((string) $string, $encoding); }
+}
+if (!function_exists('mb_strtoupper')) {
+    function mb_strtoupper(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtoupper((string) $string, $encoding); }
+}
+if (!function_exists('mb_substitute_character')) {
+    function mb_substitute_character(string|int|null $substitute_character = null): string|int|bool { return p\Mbstring::mb_substitute_character($substitute_character); }
+}
+if (!function_exists('mb_substr')) {
+    function mb_substr(?string $string, ?int $start, ?int $length = null, ?string $encoding = null): string { return p\Mbstring::mb_substr((string) $string, (int) $start, $length, $encoding); }
+}
+if (!function_exists('mb_stripos')) {
+    function mb_stripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_stripos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+}
+if (!function_exists('mb_stristr')) {
+    function mb_stristr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_stristr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }
+}
+if (!function_exists('mb_strrchr')) {
+    function mb_strrchr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrchr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }
+}
+if (!function_exists('mb_strrichr')) {
+    function mb_strrichr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrichr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }
+}
+if (!function_exists('mb_strripos')) {
+    function mb_strripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strripos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+}
+if (!function_exists('mb_strrpos')) {
+    function mb_strrpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strrpos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+}
+if (!function_exists('mb_strstr')) {
+    function mb_strstr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strstr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }
+}
+if (!function_exists('mb_get_info')) {
+    function mb_get_info(?string $type = 'all'): array|string|int|false { return p\Mbstring::mb_get_info((string) $type); }
+}
+if (!function_exists('mb_http_output')) {
+    function mb_http_output(?string $encoding = null): string|bool { return p\Mbstring::mb_http_output($encoding); }
+}
+if (!function_exists('mb_strwidth')) {
+    function mb_strwidth(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strwidth((string) $string, $encoding); }
+}
+if (!function_exists('mb_substr_count')) {
+    function mb_substr_count(?string $haystack, ?string $needle, ?string $encoding = null): int { return p\Mbstring::mb_substr_count((string) $haystack, (string) $needle, $encoding); }
+}
+if (!function_exists('mb_output_handler')) {
+    function mb_output_handler(?string $string, ?int $status): string { return p\Mbstring::mb_output_handler((string) $string, (int) $status); }
+}
+if (!function_exists('mb_http_input')) {
+    function mb_http_input(?string $type = null): array|string|false { return p\Mbstring::mb_http_input($type); }
+}
+
+if (!function_exists('mb_convert_variables')) {
+    function mb_convert_variables(?string $to_encoding, array|string|null $from_encoding, mixed &$var, mixed &...$vars): string|false { return p\Mbstring::mb_convert_variables((string) $to_encoding, $from_encoding ?? '', $var, ...$vars); }
+}
+
+if (!function_exists('mb_ord')) {
+    function mb_ord(?string $string, ?string $encoding = null): int|false { return p\Mbstring::mb_ord((string) $string, $encoding); }
+}
+if (!function_exists('mb_chr')) {
+    function mb_chr(?int $codepoint, ?string $encoding = null): string|false { return p\Mbstring::mb_chr((int) $codepoint, $encoding); }
+}
+if (!function_exists('mb_scrub')) {
+    function mb_scrub(?string $string, ?string $encoding = null): string { $encoding ??= mb_internal_encoding(); return mb_convert_encoding((string) $string, $encoding, $encoding); }
+}
+if (!function_exists('mb_str_split')) {
+    function mb_str_split(?string $string, ?int $length = 1, ?string $encoding = null): array { return p\Mbstring::mb_str_split((string) $string, (int) $length, $encoding); }
+}
+
+if (!function_exists('mb_str_pad')) {
+    function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); }
+}
+
+if (!function_exists('mb_ucfirst')) {
+    function mb_ucfirst($string, ?string $encoding = null): string { return p\Mbstring::mb_ucfirst($string, $encoding); }
+}
+
+if (!function_exists('mb_lcfirst')) {
+    function mb_lcfirst($string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); }
+}
+
+if (extension_loaded('mbstring')) {
+    return;
+}
+
+if (!defined('MB_CASE_UPPER')) {
+    define('MB_CASE_UPPER', 0);
+}
+if (!defined('MB_CASE_LOWER')) {
+    define('MB_CASE_LOWER', 1);
+}
+if (!defined('MB_CASE_TITLE')) {
+    define('MB_CASE_TITLE', 2);
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-mbstring/composer.json	(revision 8435)
@@ -0,0 +1,38 @@
+{
+    "name": "symfony/polyfill-mbstring",
+    "type": "library",
+    "description": "Symfony polyfill for the Mbstring extension",
+    "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Nicolas Grekas",
+            "email": "p@tchwork.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=7.1"
+    },
+    "provide": {
+        "ext-mbstring": "*"
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" },
+        "files": [ "bootstrap.php" ]
+    },
+    "suggest": {
+        "ext-mbstring": "For best performance"
+    },
+    "minimum-stability": "dev",
+    "extra": {
+        "thanks": {
+            "name": "symfony/polyfill",
+            "url": "https://github.com/symfony/polyfill"
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/LICENSE	(revision 8435)
@@ -0,0 +1,19 @@
+Copyright (c) 2022-present Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Php83.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Php83.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Php83.php	(revision 8435)
@@ -0,0 +1,197 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Php83;
+
+/**
+ * @author Ion Bazan <ion.bazan@gmail.com>
+ * @author Pierre Ambroise <pierre27.ambroise@gmail.com>
+ *
+ * @internal
+ */
+final class Php83
+{
+    private const JSON_MAX_DEPTH = 0x7FFFFFFF; // see https://www.php.net/manual/en/function.json-decode.php
+
+    public static function json_validate(string $json, int $depth = 512, int $flags = 0): bool
+    {
+        if (0 !== $flags && \defined('JSON_INVALID_UTF8_IGNORE') && \JSON_INVALID_UTF8_IGNORE !== $flags) {
+            throw new \ValueError('json_validate(): Argument #3 ($flags) must be a valid flag (allowed flags: JSON_INVALID_UTF8_IGNORE)');
+        }
+
+        if ($depth <= 0) {
+            throw new \ValueError('json_validate(): Argument #2 ($depth) must be greater than 0');
+        }
+
+        if ($depth > self::JSON_MAX_DEPTH) {
+            throw new \ValueError(sprintf('json_validate(): Argument #2 ($depth) must be less than %d', self::JSON_MAX_DEPTH));
+        }
+
+        json_decode($json, null, $depth, $flags);
+
+        return \JSON_ERROR_NONE === json_last_error();
+    }
+
+    public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, ?string $encoding = null): string
+    {
+        if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], true)) {
+            throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH');
+        }
+
+        if (null === $encoding) {
+            $encoding = mb_internal_encoding();
+        }
+
+        try {
+            $validEncoding = @mb_check_encoding('', $encoding);
+        } catch (\ValueError $e) {
+            throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding));
+        }
+
+        // BC for PHP 7.3 and lower
+        if (!$validEncoding) {
+            throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding));
+        }
+
+        if (mb_strlen($pad_string, $encoding) <= 0) {
+            throw new \ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string');
+        }
+
+        $paddingRequired = $length - mb_strlen($string, $encoding);
+
+        if ($paddingRequired < 1) {
+            return $string;
+        }
+
+        switch ($pad_type) {
+            case \STR_PAD_LEFT:
+                return mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding).$string;
+            case \STR_PAD_RIGHT:
+                return $string.mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding);
+            default:
+                $leftPaddingLength = floor($paddingRequired / 2);
+                $rightPaddingLength = $paddingRequired - $leftPaddingLength;
+
+                return mb_substr(str_repeat($pad_string, $leftPaddingLength), 0, $leftPaddingLength, $encoding).$string.mb_substr(str_repeat($pad_string, $rightPaddingLength), 0, $rightPaddingLength, $encoding);
+        }
+    }
+
+    public static function str_increment(string $string): string
+    {
+        if ('' === $string) {
+            throw new \ValueError('str_increment(): Argument #1 ($string) cannot be empty');
+        }
+
+        if (!preg_match('/^[a-zA-Z0-9]+$/', $string)) {
+            throw new \ValueError('str_increment(): Argument #1 ($string) must be composed only of alphanumeric ASCII characters');
+        }
+
+        if (is_numeric($string)) {
+            $offset = stripos($string, 'e');
+            if (false !== $offset) {
+                $char = $string[$offset];
+                ++$char;
+                $string[$offset] = $char;
+                ++$string;
+
+                switch ($string[$offset]) {
+                    case 'f':
+                        $string[$offset] = 'e';
+                        break;
+                    case 'F':
+                        $string[$offset] = 'E';
+                        break;
+                    case 'g':
+                        $string[$offset] = 'f';
+                        break;
+                    case 'G':
+                        $string[$offset] = 'F';
+                        break;
+                }
+
+                return $string;
+            }
+        }
+
+        return ++$string;
+    }
+
+    public static function str_decrement(string $string): string
+    {
+        if ('' === $string) {
+            throw new \ValueError('str_decrement(): Argument #1 ($string) cannot be empty');
+        }
+
+        if (!preg_match('/^[a-zA-Z0-9]+$/', $string)) {
+            throw new \ValueError('str_decrement(): Argument #1 ($string) must be composed only of alphanumeric ASCII characters');
+        }
+
+        if (preg_match('/\A(?:0[aA0]?|[aA])\z/', $string)) {
+            throw new \ValueError(sprintf('str_decrement(): Argument #1 ($string) "%s" is out of decrement range', $string));
+        }
+
+        if (!\in_array(substr($string, -1), ['A', 'a', '0'], true)) {
+            return implode('', \array_slice(str_split($string), 0, -1)).\chr(\ord(substr($string, -1)) - 1);
+        }
+
+        $carry = '';
+        $decremented = '';
+
+        for ($i = \strlen($string) - 1; $i >= 0; --$i) {
+            $char = $string[$i];
+
+            switch ($char) {
+                case 'A':
+                    if ('' !== $carry) {
+                        $decremented = $carry.$decremented;
+                        $carry = '';
+                    }
+                    $carry = 'Z';
+
+                    break;
+                case 'a':
+                    if ('' !== $carry) {
+                        $decremented = $carry.$decremented;
+                        $carry = '';
+                    }
+                    $carry = 'z';
+
+                    break;
+                case '0':
+                    if ('' !== $carry) {
+                        $decremented = $carry.$decremented;
+                        $carry = '';
+                    }
+                    $carry = '9';
+
+                    break;
+                case '1':
+                    if ('' !== $carry) {
+                        $decremented = $carry.$decremented;
+                        $carry = '';
+                    }
+
+                    break;
+                default:
+                    if ('' !== $carry) {
+                        $decremented = $carry.$decremented;
+                        $carry = '';
+                    }
+
+                    if (!\in_array($char, ['A', 'a', '0'], true)) {
+                        $decremented = \chr(\ord($char) - 1).$decremented;
+                    }
+            }
+        }
+
+        return $decremented;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/README.md	(revision 8435)
@@ -0,0 +1,22 @@
+Symfony Polyfill / Php83
+========================
+
+This component provides features added to PHP 8.3 core:
+
+- [`json_validate`](https://wiki.php.net/rfc/json_validate)
+- [`Override`](https://wiki.php.net/rfc/marking_overriden_methods)
+- [`mb_str_pad`](https://wiki.php.net/rfc/mb_str_pad)
+- [`ldap_exop_sync`](https://wiki.php.net/rfc/deprecate_functions_with_overloaded_signatures)
+- [`ldap_connect_wallet`](https://wiki.php.net/rfc/deprecate_functions_with_overloaded_signatures)
+- [`stream_context_set_options`](https://wiki.php.net/rfc/deprecate_functions_with_overloaded_signatures)
+- [`str_increment` and `str_decrement`](https://wiki.php.net/rfc/saner-inc-dec-operators)
+- [`Date*Exception/Error classes`](https://wiki.php.net/rfc/datetime-exceptions)
+- [`SQLite3Exception`](https://wiki.php.net/rfc/sqlite3_exceptions)
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateError.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateError.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateError.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateError extends Error
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateException extends Exception
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateInvalidOperationException extends DateException
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateInvalidTimeZoneException extends DateException
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateMalformedIntervalStringException extends DateException
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateMalformedPeriodStringException extends DateException
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateMalformedStringException extends DateException
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateObjectError.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateObjectError.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateObjectError.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateObjectError extends DateError
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateRangeError.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateRangeError.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/DateRangeError.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class DateRangeError extends DateError
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/Override.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/Override.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/Override.php	(revision 8435)
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    #[Attribute(Attribute::TARGET_METHOD)]
+    final class Override
+    {
+        public function __construct()
+        {
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/SQLite3Exception.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/SQLite3Exception.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/Resources/stubs/SQLite3Exception.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+    class SQLite3Exception extends Exception
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/bootstrap.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/bootstrap.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/bootstrap.php	(revision 8435)
@@ -0,0 +1,48 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Php83 as p;
+
+if (\PHP_VERSION_ID >= 80300) {
+    return;
+}
+
+if (!function_exists('json_validate')) {
+    function json_validate(string $json, int $depth = 512, int $flags = 0): bool { return p\Php83::json_validate($json, $depth, $flags); }
+}
+
+if (!function_exists('mb_str_pad') && function_exists('mb_substr')) {
+    function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Php83::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); }
+}
+
+if (!function_exists('stream_context_set_options')) {
+    function stream_context_set_options($context, array $options): bool { return stream_context_set_option($context, $options); }
+}
+
+if (!function_exists('str_increment')) {
+    function str_increment(string $string): string { return p\Php83::str_increment($string); }
+}
+
+if (!function_exists('str_decrement')) {
+    function str_decrement(string $string): string { return p\Php83::str_decrement($string); }
+}
+
+if (\PHP_VERSION_ID >= 80100) {
+    return require __DIR__.'/bootstrap81.php';
+}
+
+if (!function_exists('ldap_exop_sync') && function_exists('ldap_exop')) {
+    function ldap_exop_sync($ldap, string $request_oid, ?string $request_data = null, ?array $controls = null, &$response_data = null, &$response_oid = null): bool { return ldap_exop($ldap, $request_oid, $request_data, $controls, $response_data, $response_oid); }
+}
+
+if (!function_exists('ldap_connect_wallet') && function_exists('ldap_connect')) {
+    function ldap_connect_wallet(?string $uri, string $wallet, string $password, int $auth_mode = \GSLC_SSL_NO_AUTH) { return ldap_connect($uri, $wallet, $password, $auth_mode); }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/bootstrap81.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/bootstrap81.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/bootstrap81.php	(revision 8435)
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID >= 80300) {
+    return;
+}
+
+if (!function_exists('ldap_exop_sync') && function_exists('ldap_exop')) {
+    function ldap_exop_sync(\LDAP\Connection $ldap, string $request_oid, ?string $request_data = null, ?array $controls = null, &$response_data = null, &$response_oid = null): bool { return ldap_exop($ldap, $request_oid, $request_data, $controls, $response_data, $response_oid); }
+}
+
+if (!function_exists('ldap_connect_wallet') && function_exists('ldap_connect')) {
+    function ldap_connect_wallet(?string $uri, string $wallet, #[\SensitiveParameter] string $password, int $auth_mode = \GSLC_SSL_NO_AUTH): \LDAP\Connection|false { return ldap_connect($uri, $wallet, $password, $auth_mode); }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/polyfill-php83/composer.json	(revision 8435)
@@ -0,0 +1,33 @@
+{
+    "name": "symfony/polyfill-php83",
+    "type": "library",
+    "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
+    "keywords": ["polyfill", "shim", "compatibility", "portable"],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Nicolas Grekas",
+            "email": "p@tchwork.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=7.1"
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Polyfill\\Php83\\": "" },
+        "files": [ "bootstrap.php" ],
+        "classmap": [ "Resources/stubs" ]
+    },
+    "minimum-stability": "dev",
+    "extra": {
+        "thanks": {
+            "name": "symfony/polyfill",
+            "url": "https://github.com/symfony/polyfill"
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/CHANGELOG.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/CHANGELOG.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/CHANGELOG.md	(revision 8435)
@@ -0,0 +1,124 @@
+CHANGELOG
+=========
+
+6.4
+---
+
+ * Add `PhpSubprocess` to handle PHP subprocesses that take over the
+   configuration from their parent
+ * Add `RunProcessMessage` and `RunProcessMessageHandler`
+ * Support using `Process::findExecutable()` independently of `open_basedir`
+
+5.2.0
+-----
+
+ * added `Process::setOptions()` to set `Process` specific options
+ * added option `create_new_console` to allow a subprocess to continue
+   to run after the main script exited, both on Linux and on Windows
+
+5.1.0
+-----
+
+ * added `Process::getStartTime()` to retrieve the start time of the process as float
+
+5.0.0
+-----
+
+ * removed `Process::inheritEnvironmentVariables()`
+ * removed `PhpProcess::setPhpBinary()`
+ * `Process` must be instantiated with a command array, use `Process::fromShellCommandline()` when the command should be parsed by the shell
+ * removed `Process::setCommandLine()`
+
+4.4.0
+-----
+
+ * deprecated `Process::inheritEnvironmentVariables()`: env variables are always inherited.
+ * added `Process::getLastOutputTime()` method
+
+4.2.0
+-----
+
+ * added the `Process::fromShellCommandline()` to run commands in a shell wrapper
+ * deprecated passing a command as string when creating a `Process` instance
+ * deprecated the `Process::setCommandline()` and the `PhpProcess::setPhpBinary()` methods
+ * added the `Process::waitUntil()` method to wait for the process only for a
+   specific output, then continue the normal execution of your application
+
+4.1.0
+-----
+
+ * added the `Process::isTtySupported()` method that allows to check for TTY support
+ * made `PhpExecutableFinder` look for the `PHP_BINARY` env var when searching the php binary
+ * added the `ProcessSignaledException` class to properly catch signaled process errors
+
+4.0.0
+-----
+
+ * environment variables will always be inherited
+ * added a second `array $env = []` argument to the `start()`, `run()`,
+   `mustRun()`, and `restart()` methods of the `Process` class
+ * added a second `array $env = []` argument to the `start()` method of the
+   `PhpProcess` class
+ * the `ProcessUtils::escapeArgument()` method has been removed
+ * the `areEnvironmentVariablesInherited()`, `getOptions()`, and `setOptions()`
+   methods of the `Process` class have been removed
+ * support for passing `proc_open()` options has been removed
+ * removed the `ProcessBuilder` class, use the `Process` class instead
+ * removed the `getEnhanceWindowsCompatibility()` and `setEnhanceWindowsCompatibility()` methods of the `Process` class
+ * passing a not existing working directory to the constructor of the `Symfony\Component\Process\Process` class is not
+   supported anymore
+
+3.4.0
+-----
+
+ * deprecated the ProcessBuilder class
+ * deprecated calling `Process::start()` without setting a valid working directory beforehand (via `setWorkingDirectory()` or constructor)
+
+3.3.0
+-----
+
+ * added command line arrays in the `Process` class
+ * added `$env` argument to `Process::start()`, `run()`, `mustRun()` and `restart()` methods
+ * deprecated the `ProcessUtils::escapeArgument()` method
+ * deprecated not inheriting environment variables
+ * deprecated configuring `proc_open()` options
+ * deprecated configuring enhanced Windows compatibility
+ * deprecated configuring enhanced sigchild compatibility
+
+2.5.0
+-----
+
+ * added support for PTY mode
+ * added the convenience method "mustRun"
+ * deprecation: Process::setStdin() is deprecated in favor of Process::setInput()
+ * deprecation: Process::getStdin() is deprecated in favor of Process::getInput()
+ * deprecation: Process::setInput() and ProcessBuilder::setInput() do not accept non-scalar types
+
+2.4.0
+-----
+
+ * added the ability to define an idle timeout
+
+2.3.0
+-----
+
+ * added ProcessUtils::escapeArgument() to fix the bug in escapeshellarg() function on Windows
+ * added Process::signal()
+ * added Process::getPid()
+ * added support for a TTY mode
+
+2.2.0
+-----
+
+ * added ProcessBuilder::setArguments() to reset the arguments on a builder
+ * added a way to retrieve the standard and error output incrementally
+ * added Process:restart()
+
+2.1.0
+-----
+
+ * added support for non-blocking processes (start(), wait(), isRunning(), stop())
+ * enhanced Windows compatibility
+ * added Process::getExitCodeText() that returns a string representation for
+   the exit code returned by the process
+ * added ProcessBuilder
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/ExceptionInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/ExceptionInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/ExceptionInterface.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Exception;
+
+/**
+ * Marker Interface for the Process Component.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+interface ExceptionInterface extends \Throwable
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/InvalidArgumentException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/InvalidArgumentException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/InvalidArgumentException.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Exception;
+
+/**
+ * InvalidArgumentException for the Process Component.
+ *
+ * @author Romain Neutron <imprec@gmail.com>
+ */
+class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/LogicException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/LogicException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/LogicException.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Exception;
+
+/**
+ * LogicException for the Process Component.
+ *
+ * @author Romain Neutron <imprec@gmail.com>
+ */
+class LogicException extends \LogicException implements ExceptionInterface
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/ProcessFailedException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/ProcessFailedException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/ProcessFailedException.php	(revision 8435)
@@ -0,0 +1,57 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Exception;
+
+use Symfony\Component\Process\Process;
+
+/**
+ * Exception for failed processes.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class ProcessFailedException extends RuntimeException
+{
+    private Process $process;
+
+    public function __construct(Process $process)
+    {
+        if ($process->isSuccessful()) {
+            throw new InvalidArgumentException('Expected a failed process, but the given process was successful.');
+        }
+
+        $error = sprintf('The command "%s" failed.'."\n\nExit Code: %s(%s)\n\nWorking directory: %s",
+            $process->getCommandLine(),
+            $process->getExitCode(),
+            $process->getExitCodeText(),
+            $process->getWorkingDirectory()
+        );
+
+        if (!$process->isOutputDisabled()) {
+            $error .= sprintf("\n\nOutput:\n================\n%s\n\nError Output:\n================\n%s",
+                $process->getOutput(),
+                $process->getErrorOutput()
+            );
+        }
+
+        parent::__construct($error);
+
+        $this->process = $process;
+    }
+
+    /**
+     * @return Process
+     */
+    public function getProcess()
+    {
+        return $this->process;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/ProcessSignaledException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/ProcessSignaledException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/ProcessSignaledException.php	(revision 8435)
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Exception;
+
+use Symfony\Component\Process\Process;
+
+/**
+ * Exception that is thrown when a process has been signaled.
+ *
+ * @author Sullivan Senechal <soullivaneuh@gmail.com>
+ */
+final class ProcessSignaledException extends RuntimeException
+{
+    private Process $process;
+
+    public function __construct(Process $process)
+    {
+        $this->process = $process;
+
+        parent::__construct(sprintf('The process has been signaled with signal "%s".', $process->getTermSignal()));
+    }
+
+    public function getProcess(): Process
+    {
+        return $this->process;
+    }
+
+    public function getSignal(): int
+    {
+        return $this->getProcess()->getTermSignal();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/ProcessTimedOutException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/ProcessTimedOutException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/ProcessTimedOutException.php	(revision 8435)
@@ -0,0 +1,73 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Exception;
+
+use Symfony\Component\Process\Process;
+
+/**
+ * Exception that is thrown when a process times out.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class ProcessTimedOutException extends RuntimeException
+{
+    public const TYPE_GENERAL = 1;
+    public const TYPE_IDLE = 2;
+
+    private Process $process;
+    private int $timeoutType;
+
+    public function __construct(Process $process, int $timeoutType)
+    {
+        $this->process = $process;
+        $this->timeoutType = $timeoutType;
+
+        parent::__construct(sprintf(
+            'The process "%s" exceeded the timeout of %s seconds.',
+            $process->getCommandLine(),
+            $this->getExceededTimeout()
+        ));
+    }
+
+    /**
+     * @return Process
+     */
+    public function getProcess()
+    {
+        return $this->process;
+    }
+
+    /**
+     * @return bool
+     */
+    public function isGeneralTimeout()
+    {
+        return self::TYPE_GENERAL === $this->timeoutType;
+    }
+
+    /**
+     * @return bool
+     */
+    public function isIdleTimeout()
+    {
+        return self::TYPE_IDLE === $this->timeoutType;
+    }
+
+    public function getExceededTimeout(): ?float
+    {
+        return match ($this->timeoutType) {
+            self::TYPE_GENERAL => $this->process->getTimeout(),
+            self::TYPE_IDLE => $this->process->getIdleTimeout(),
+            default => throw new \LogicException(sprintf('Unknown timeout type "%d".', $this->timeoutType)),
+        };
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/RunProcessFailedException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/RunProcessFailedException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/RunProcessFailedException.php	(revision 8435)
@@ -0,0 +1,25 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Exception;
+
+use Symfony\Component\Process\Messenger\RunProcessContext;
+
+/**
+ * @author Kevin Bond <kevinbond@gmail.com>
+ */
+final class RunProcessFailedException extends RuntimeException
+{
+    public function __construct(ProcessFailedException $exception, public readonly RunProcessContext $context)
+    {
+        parent::__construct($exception->getMessage(), $exception->getCode());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/RuntimeException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/RuntimeException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Exception/RuntimeException.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Exception;
+
+/**
+ * RuntimeException for the Process Component.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class RuntimeException extends \RuntimeException implements ExceptionInterface
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/ExecutableFinder.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/ExecutableFinder.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/ExecutableFinder.php	(revision 8435)
@@ -0,0 +1,82 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process;
+
+/**
+ * Generic executable finder.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class ExecutableFinder
+{
+    private array $suffixes = ['.exe', '.bat', '.cmd', '.com'];
+
+    /**
+     * Replaces default suffixes of executable.
+     *
+     * @return void
+     */
+    public function setSuffixes(array $suffixes)
+    {
+        $this->suffixes = $suffixes;
+    }
+
+    /**
+     * Adds new possible suffix to check for executable.
+     *
+     * @return void
+     */
+    public function addSuffix(string $suffix)
+    {
+        $this->suffixes[] = $suffix;
+    }
+
+    /**
+     * Finds an executable by name.
+     *
+     * @param string      $name      The executable name (without the extension)
+     * @param string|null $default   The default to return if no executable is found
+     * @param array       $extraDirs Additional dirs to check into
+     */
+    public function find(string $name, ?string $default = null, array $extraDirs = []): ?string
+    {
+        $dirs = array_merge(
+            explode(\PATH_SEPARATOR, getenv('PATH') ?: getenv('Path')),
+            $extraDirs
+        );
+
+        $suffixes = [''];
+        if ('\\' === \DIRECTORY_SEPARATOR) {
+            $pathExt = getenv('PATHEXT');
+            $suffixes = array_merge($pathExt ? explode(\PATH_SEPARATOR, $pathExt) : $this->suffixes, $suffixes);
+        }
+        foreach ($suffixes as $suffix) {
+            foreach ($dirs as $dir) {
+                if (@is_file($file = $dir.\DIRECTORY_SEPARATOR.$name.$suffix) && ('\\' === \DIRECTORY_SEPARATOR || @is_executable($file))) {
+                    return $file;
+                }
+
+                if (!@is_dir($dir) && basename($dir) === $name.$suffix && @is_executable($dir)) {
+                    return $dir;
+                }
+            }
+        }
+
+        $command = '\\' === \DIRECTORY_SEPARATOR ? 'where' : 'command -v --';
+        if (\function_exists('exec') && ($executablePath = strtok(@exec($command.' '.escapeshellarg($name)), \PHP_EOL)) && @is_executable($executablePath)) {
+            return $executablePath;
+        }
+
+        return $default;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/InputStream.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/InputStream.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/InputStream.php	(revision 8435)
@@ -0,0 +1,99 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process;
+
+use Symfony\Component\Process\Exception\RuntimeException;
+
+/**
+ * Provides a way to continuously write to the input of a Process until the InputStream is closed.
+ *
+ * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @implements \IteratorAggregate<int, string>
+ */
+class InputStream implements \IteratorAggregate
+{
+    private ?\Closure $onEmpty = null;
+    private array $input = [];
+    private bool $open = true;
+
+    /**
+     * Sets a callback that is called when the write buffer becomes empty.
+     *
+     * @return void
+     */
+    public function onEmpty(?callable $onEmpty = null)
+    {
+        $this->onEmpty = null !== $onEmpty ? $onEmpty(...) : null;
+    }
+
+    /**
+     * Appends an input to the write buffer.
+     *
+     * @param resource|string|int|float|bool|\Traversable|null $input The input to append as scalar,
+     *                                                                stream resource or \Traversable
+     *
+     * @return void
+     */
+    public function write(mixed $input)
+    {
+        if (null === $input) {
+            return;
+        }
+        if ($this->isClosed()) {
+            throw new RuntimeException(sprintf('"%s" is closed.', static::class));
+        }
+        $this->input[] = ProcessUtils::validateInput(__METHOD__, $input);
+    }
+
+    /**
+     * Closes the write buffer.
+     *
+     * @return void
+     */
+    public function close()
+    {
+        $this->open = false;
+    }
+
+    /**
+     * Tells whether the write buffer is closed or not.
+     *
+     * @return bool
+     */
+    public function isClosed()
+    {
+        return !$this->open;
+    }
+
+    public function getIterator(): \Traversable
+    {
+        $this->open = true;
+
+        while ($this->open || $this->input) {
+            if (!$this->input) {
+                yield '';
+                continue;
+            }
+            $current = array_shift($this->input);
+
+            if ($current instanceof \Iterator) {
+                yield from $current;
+            } else {
+                yield $current;
+            }
+            if (!$this->input && $this->open && null !== $onEmpty = $this->onEmpty) {
+                $this->write($onEmpty($this));
+            }
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/LICENSE	(revision 8435)
@@ -0,0 +1,19 @@
+Copyright (c) 2004-present Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Messenger/RunProcessContext.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Messenger/RunProcessContext.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Messenger/RunProcessContext.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Messenger;
+
+use Symfony\Component\Process\Process;
+
+/**
+ * @author Kevin Bond <kevinbond@gmail.com>
+ */
+final class RunProcessContext
+{
+    public readonly ?int $exitCode;
+    public readonly ?string $output;
+    public readonly ?string $errorOutput;
+
+    public function __construct(
+        public readonly RunProcessMessage $message,
+        Process $process,
+    ) {
+        $this->exitCode = $process->getExitCode();
+        $this->output = $process->isOutputDisabled() ? null : $process->getOutput();
+        $this->errorOutput = $process->isOutputDisabled() ? null : $process->getErrorOutput();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Messenger/RunProcessMessage.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Messenger/RunProcessMessage.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Messenger/RunProcessMessage.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Messenger;
+
+/**
+ * @author Kevin Bond <kevinbond@gmail.com>
+ */
+class RunProcessMessage implements \Stringable
+{
+    public function __construct(
+        public readonly array $command,
+        public readonly ?string $cwd = null,
+        public readonly ?array $env = null,
+        public readonly mixed $input = null,
+        public readonly ?float $timeout = 60.0,
+    ) {
+    }
+
+    public function __toString(): string
+    {
+        return implode(' ', $this->command);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Messenger/RunProcessMessageHandler.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Messenger/RunProcessMessageHandler.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Messenger/RunProcessMessageHandler.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Messenger;
+
+use Symfony\Component\Process\Exception\ProcessFailedException;
+use Symfony\Component\Process\Exception\RunProcessFailedException;
+use Symfony\Component\Process\Process;
+
+/**
+ * @author Kevin Bond <kevinbond@gmail.com>
+ */
+final class RunProcessMessageHandler
+{
+    public function __invoke(RunProcessMessage $message): RunProcessContext
+    {
+        $process = new Process($message->command, $message->cwd, $message->env, $message->input, $message->timeout);
+
+        try {
+            return new RunProcessContext($message, $process->mustRun());
+        } catch (ProcessFailedException $e) {
+            throw new RunProcessFailedException($e, new RunProcessContext($message, $e->getProcess()));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/PhpExecutableFinder.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/PhpExecutableFinder.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/PhpExecutableFinder.php	(revision 8435)
@@ -0,0 +1,99 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process;
+
+/**
+ * An executable finder specifically designed for the PHP executable.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class PhpExecutableFinder
+{
+    private ExecutableFinder $executableFinder;
+
+    public function __construct()
+    {
+        $this->executableFinder = new ExecutableFinder();
+    }
+
+    /**
+     * Finds The PHP executable.
+     */
+    public function find(bool $includeArgs = true): string|false
+    {
+        if ($php = getenv('PHP_BINARY')) {
+            if (!is_executable($php)) {
+                $command = '\\' === \DIRECTORY_SEPARATOR ? 'where' : 'command -v --';
+                if (\function_exists('exec') && $php = strtok(exec($command.' '.escapeshellarg($php)), \PHP_EOL)) {
+                    if (!is_executable($php)) {
+                        return false;
+                    }
+                } else {
+                    return false;
+                }
+            }
+
+            if (@is_dir($php)) {
+                return false;
+            }
+
+            return $php;
+        }
+
+        $args = $this->findArguments();
+        $args = $includeArgs && $args ? ' '.implode(' ', $args) : '';
+
+        // PHP_BINARY return the current sapi executable
+        if (\PHP_BINARY && \in_array(\PHP_SAPI, ['cli', 'cli-server', 'phpdbg'], true)) {
+            return \PHP_BINARY.$args;
+        }
+
+        if ($php = getenv('PHP_PATH')) {
+            if (!@is_executable($php) || @is_dir($php)) {
+                return false;
+            }
+
+            return $php;
+        }
+
+        if ($php = getenv('PHP_PEAR_PHP_BIN')) {
+            if (@is_executable($php) && !@is_dir($php)) {
+                return $php;
+            }
+        }
+
+        if (@is_executable($php = \PHP_BINDIR.('\\' === \DIRECTORY_SEPARATOR ? '\\php.exe' : '/php')) && !@is_dir($php)) {
+            return $php;
+        }
+
+        $dirs = [\PHP_BINDIR];
+        if ('\\' === \DIRECTORY_SEPARATOR) {
+            $dirs[] = 'C:\xampp\php\\';
+        }
+
+        return $this->executableFinder->find('php', false, $dirs);
+    }
+
+    /**
+     * Finds the PHP executable arguments.
+     */
+    public function findArguments(): array
+    {
+        $arguments = [];
+        if ('phpdbg' === \PHP_SAPI) {
+            $arguments[] = '-qrr';
+        }
+
+        return $arguments;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/PhpProcess.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/PhpProcess.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/PhpProcess.php	(revision 8435)
@@ -0,0 +1,69 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process;
+
+use Symfony\Component\Process\Exception\LogicException;
+use Symfony\Component\Process\Exception\RuntimeException;
+
+/**
+ * PhpProcess runs a PHP script in an independent process.
+ *
+ *     $p = new PhpProcess('<?php echo "foo"; ?>');
+ *     $p->run();
+ *     print $p->getOutput()."\n";
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class PhpProcess extends Process
+{
+    /**
+     * @param string      $script  The PHP script to run (as a string)
+     * @param string|null $cwd     The working directory or null to use the working dir of the current PHP process
+     * @param array|null  $env     The environment variables or null to use the same environment as the current PHP process
+     * @param int         $timeout The timeout in seconds
+     * @param array|null  $php     Path to the PHP binary to use with any additional arguments
+     */
+    public function __construct(string $script, ?string $cwd = null, ?array $env = null, int $timeout = 60, ?array $php = null)
+    {
+        if (null === $php) {
+            $executableFinder = new PhpExecutableFinder();
+            $php = $executableFinder->find(false);
+            $php = false === $php ? null : array_merge([$php], $executableFinder->findArguments());
+        }
+        if ('phpdbg' === \PHP_SAPI) {
+            $file = tempnam(sys_get_temp_dir(), 'dbg');
+            file_put_contents($file, $script);
+            register_shutdown_function('unlink', $file);
+            $php[] = $file;
+            $script = null;
+        }
+
+        parent::__construct($php, $cwd, $env, $script, $timeout);
+    }
+
+    public static function fromShellCommandline(string $command, ?string $cwd = null, ?array $env = null, mixed $input = null, ?float $timeout = 60): static
+    {
+        throw new LogicException(sprintf('The "%s()" method cannot be called when using "%s".', __METHOD__, self::class));
+    }
+
+    /**
+     * @return void
+     */
+    public function start(?callable $callback = null, array $env = [])
+    {
+        if (null === $this->getCommandLine()) {
+            throw new RuntimeException('Unable to find the PHP executable.');
+        }
+
+        parent::start($callback, $env);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/PhpSubprocess.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/PhpSubprocess.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/PhpSubprocess.php	(revision 8435)
@@ -0,0 +1,164 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process;
+
+use Symfony\Component\Process\Exception\LogicException;
+use Symfony\Component\Process\Exception\RuntimeException;
+
+/**
+ * PhpSubprocess runs a PHP command as a subprocess while keeping the original php.ini settings.
+ *
+ * For this, it generates a temporary php.ini file taking over all the current settings and disables
+ * loading additional .ini files. Basically, your command gets prefixed using "php -n -c /tmp/temp.ini".
+ *
+ * Given your php.ini contains "memory_limit=-1" and you have a "MemoryTest.php" with the following content:
+ *
+ *     <?php var_dump(ini_get('memory_limit'));
+ *
+ * These are the differences between the regular Process and PhpSubprocess classes:
+ *
+ *     $p = new Process(['php', '-d', 'memory_limit=256M', 'MemoryTest.php']);
+ *     $p->run();
+ *     print $p->getOutput()."\n";
+ *
+ * This will output "string(2) "-1", because the process is started with the default php.ini settings.
+ *
+ *     $p = new PhpSubprocess(['MemoryTest.php'], null, null, 60, ['php', '-d', 'memory_limit=256M']);
+ *     $p->run();
+ *     print $p->getOutput()."\n";
+ *
+ * This will output "string(4) "256M"", because the process is started with the temporarily created php.ini settings.
+ *
+ * @author Yanick Witschi <yanick.witschi@terminal42.ch>
+ * @author Partially copied and heavily inspired from composer/xdebug-handler by John Stevenson <john-stevenson@blueyonder.co.uk>
+ */
+class PhpSubprocess extends Process
+{
+    /**
+     * @param array       $command The command to run and its arguments listed as separate entries. They will automatically
+     *                             get prefixed with the PHP binary
+     * @param string|null $cwd     The working directory or null to use the working dir of the current PHP process
+     * @param array|null  $env     The environment variables or null to use the same environment as the current PHP process
+     * @param int         $timeout The timeout in seconds
+     * @param array|null  $php     Path to the PHP binary to use with any additional arguments
+     */
+    public function __construct(array $command, ?string $cwd = null, ?array $env = null, int $timeout = 60, ?array $php = null)
+    {
+        if (null === $php) {
+            $executableFinder = new PhpExecutableFinder();
+            $php = $executableFinder->find(false);
+            $php = false === $php ? null : array_merge([$php], $executableFinder->findArguments());
+        }
+
+        if (null === $php) {
+            throw new RuntimeException('Unable to find PHP binary.');
+        }
+
+        $tmpIni = $this->writeTmpIni($this->getAllIniFiles(), sys_get_temp_dir());
+
+        $php = array_merge($php, ['-n', '-c', $tmpIni]);
+        register_shutdown_function('unlink', $tmpIni);
+
+        $command = array_merge($php, $command);
+
+        parent::__construct($command, $cwd, $env, null, $timeout);
+    }
+
+    public static function fromShellCommandline(string $command, ?string $cwd = null, ?array $env = null, mixed $input = null, ?float $timeout = 60): static
+    {
+        throw new LogicException(sprintf('The "%s()" method cannot be called when using "%s".', __METHOD__, self::class));
+    }
+
+    public function start(?callable $callback = null, array $env = []): void
+    {
+        if (null === $this->getCommandLine()) {
+            throw new RuntimeException('Unable to find the PHP executable.');
+        }
+
+        parent::start($callback, $env);
+    }
+
+    private function writeTmpIni(array $iniFiles, string $tmpDir): string
+    {
+        if (false === $tmpfile = @tempnam($tmpDir, '')) {
+            throw new RuntimeException('Unable to create temporary ini file.');
+        }
+
+        // $iniFiles has at least one item and it may be empty
+        if ('' === $iniFiles[0]) {
+            array_shift($iniFiles);
+        }
+
+        $content = '';
+
+        foreach ($iniFiles as $file) {
+            // Check for inaccessible ini files
+            if (($data = @file_get_contents($file)) === false) {
+                throw new RuntimeException('Unable to read ini: '.$file);
+            }
+            // Check and remove directives after HOST and PATH sections
+            if (preg_match('/^\s*\[(?:PATH|HOST)\s*=/mi', $data, $matches)) {
+                $data = substr($data, 0, $matches[0][1]);
+            }
+
+            $content .= $data."\n";
+        }
+
+        // Merge loaded settings into our ini content, if it is valid
+        $config = parse_ini_string($content);
+        $loaded = ini_get_all(null, false);
+
+        if (false === $config || false === $loaded) {
+            throw new RuntimeException('Unable to parse ini data.');
+        }
+
+        $content .= $this->mergeLoadedConfig($loaded, $config);
+
+        // Work-around for https://bugs.php.net/bug.php?id=75932
+        $content .= "opcache.enable_cli=0\n";
+
+        if (false === @file_put_contents($tmpfile, $content)) {
+            throw new RuntimeException('Unable to write temporary ini file.');
+        }
+
+        return $tmpfile;
+    }
+
+    private function mergeLoadedConfig(array $loadedConfig, array $iniConfig): string
+    {
+        $content = '';
+
+        foreach ($loadedConfig as $name => $value) {
+            if (!\is_string($value)) {
+                continue;
+            }
+
+            if (!isset($iniConfig[$name]) || $iniConfig[$name] !== $value) {
+                // Double-quote escape each value
+                $content .= $name.'="'.addcslashes($value, '\\"')."\"\n";
+            }
+        }
+
+        return $content;
+    }
+
+    private function getAllIniFiles(): array
+    {
+        $paths = [(string) php_ini_loaded_file()];
+
+        if (false !== $scanned = php_ini_scanned_files()) {
+            $paths = array_merge($paths, array_map('trim', explode(',', $scanned)));
+        }
+
+        return $paths;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Pipes/AbstractPipes.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Pipes/AbstractPipes.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Pipes/AbstractPipes.php	(revision 8435)
@@ -0,0 +1,176 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Pipes;
+
+use Symfony\Component\Process\Exception\InvalidArgumentException;
+
+/**
+ * @author Romain Neutron <imprec@gmail.com>
+ *
+ * @internal
+ */
+abstract class AbstractPipes implements PipesInterface
+{
+    public array $pipes = [];
+
+    private string $inputBuffer = '';
+    /** @var resource|string|\Iterator */
+    private $input;
+    private bool $blocked = true;
+    private ?string $lastError = null;
+
+    /**
+     * @param resource|string|\Iterator $input
+     */
+    public function __construct($input)
+    {
+        if (\is_resource($input) || $input instanceof \Iterator) {
+            $this->input = $input;
+        } else {
+            $this->inputBuffer = (string) $input;
+        }
+    }
+
+    public function close(): void
+    {
+        foreach ($this->pipes as $pipe) {
+            if (\is_resource($pipe)) {
+                fclose($pipe);
+            }
+        }
+        $this->pipes = [];
+    }
+
+    /**
+     * Returns true if a system call has been interrupted.
+     */
+    protected function hasSystemCallBeenInterrupted(): bool
+    {
+        $lastError = $this->lastError;
+        $this->lastError = null;
+
+        // stream_select returns false when the `select` system call is interrupted by an incoming signal
+        return null !== $lastError && false !== stripos($lastError, 'interrupted system call');
+    }
+
+    /**
+     * Unblocks streams.
+     */
+    protected function unblock(): void
+    {
+        if (!$this->blocked) {
+            return;
+        }
+
+        foreach ($this->pipes as $pipe) {
+            stream_set_blocking($pipe, 0);
+        }
+        if (\is_resource($this->input)) {
+            stream_set_blocking($this->input, 0);
+        }
+
+        $this->blocked = false;
+    }
+
+    /**
+     * Writes input to stdin.
+     *
+     * @throws InvalidArgumentException When an input iterator yields a non supported value
+     */
+    protected function write(): ?array
+    {
+        if (!isset($this->pipes[0])) {
+            return null;
+        }
+        $input = $this->input;
+
+        if ($input instanceof \Iterator) {
+            if (!$input->valid()) {
+                $input = null;
+            } elseif (\is_resource($input = $input->current())) {
+                stream_set_blocking($input, 0);
+            } elseif (!isset($this->inputBuffer[0])) {
+                if (!\is_string($input)) {
+                    if (!\is_scalar($input)) {
+                        throw new InvalidArgumentException(sprintf('"%s" yielded a value of type "%s", but only scalars and stream resources are supported.', get_debug_type($this->input), get_debug_type($input)));
+                    }
+                    $input = (string) $input;
+                }
+                $this->inputBuffer = $input;
+                $this->input->next();
+                $input = null;
+            } else {
+                $input = null;
+            }
+        }
+
+        $r = $e = [];
+        $w = [$this->pipes[0]];
+
+        // let's have a look if something changed in streams
+        if (false === @stream_select($r, $w, $e, 0, 0)) {
+            return null;
+        }
+
+        foreach ($w as $stdin) {
+            if (isset($this->inputBuffer[0])) {
+                $written = fwrite($stdin, $this->inputBuffer);
+                $this->inputBuffer = substr($this->inputBuffer, $written);
+                if (isset($this->inputBuffer[0])) {
+                    return [$this->pipes[0]];
+                }
+            }
+
+            if ($input) {
+                while (true) {
+                    $data = fread($input, self::CHUNK_SIZE);
+                    if (!isset($data[0])) {
+                        break;
+                    }
+                    $written = fwrite($stdin, $data);
+                    $data = substr($data, $written);
+                    if (isset($data[0])) {
+                        $this->inputBuffer = $data;
+
+                        return [$this->pipes[0]];
+                    }
+                }
+                if (feof($input)) {
+                    if ($this->input instanceof \Iterator) {
+                        $this->input->next();
+                    } else {
+                        $this->input = null;
+                    }
+                }
+            }
+        }
+
+        // no input to read on resource, buffer is empty
+        if (!isset($this->inputBuffer[0]) && !($this->input instanceof \Iterator ? $this->input->valid() : $this->input)) {
+            $this->input = null;
+            fclose($this->pipes[0]);
+            unset($this->pipes[0]);
+        } elseif (!$w) {
+            return [$this->pipes[0]];
+        }
+
+        return null;
+    }
+
+    /**
+     * @internal
+     */
+    public function handleError(int $type, string $msg): void
+    {
+        $this->lastError = $msg;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Pipes/PipesInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Pipes/PipesInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Pipes/PipesInterface.php	(revision 8435)
@@ -0,0 +1,61 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Pipes;
+
+/**
+ * PipesInterface manages descriptors and pipes for the use of proc_open.
+ *
+ * @author Romain Neutron <imprec@gmail.com>
+ *
+ * @internal
+ */
+interface PipesInterface
+{
+    public const CHUNK_SIZE = 16384;
+
+    /**
+     * Returns an array of descriptors for the use of proc_open.
+     */
+    public function getDescriptors(): array;
+
+    /**
+     * Returns an array of filenames indexed by their related stream in case these pipes use temporary files.
+     *
+     * @return string[]
+     */
+    public function getFiles(): array;
+
+    /**
+     * Reads data in file handles and pipes.
+     *
+     * @param bool $blocking Whether to use blocking calls or not
+     * @param bool $close    Whether to close pipes if they've reached EOF
+     *
+     * @return string[] An array of read data indexed by their fd
+     */
+    public function readAndWrite(bool $blocking, bool $close = false): array;
+
+    /**
+     * Returns if the current state has open file handles or pipes.
+     */
+    public function areOpen(): bool;
+
+    /**
+     * Returns if pipes are able to read output.
+     */
+    public function haveReadSupport(): bool;
+
+    /**
+     * Closes file handles and pipes.
+     */
+    public function close(): void;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Pipes/UnixPipes.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Pipes/UnixPipes.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Pipes/UnixPipes.php	(revision 8435)
@@ -0,0 +1,148 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Pipes;
+
+use Symfony\Component\Process\Process;
+
+/**
+ * UnixPipes implementation uses unix pipes as handles.
+ *
+ * @author Romain Neutron <imprec@gmail.com>
+ *
+ * @internal
+ */
+class UnixPipes extends AbstractPipes
+{
+    private ?bool $ttyMode;
+    private bool $ptyMode;
+    private bool $haveReadSupport;
+
+    public function __construct(?bool $ttyMode, bool $ptyMode, mixed $input, bool $haveReadSupport)
+    {
+        $this->ttyMode = $ttyMode;
+        $this->ptyMode = $ptyMode;
+        $this->haveReadSupport = $haveReadSupport;
+
+        parent::__construct($input);
+    }
+
+    public function __sleep(): array
+    {
+        throw new \BadMethodCallException('Cannot serialize '.__CLASS__);
+    }
+
+    public function __wakeup(): void
+    {
+        throw new \BadMethodCallException('Cannot unserialize '.__CLASS__);
+    }
+
+    public function __destruct()
+    {
+        $this->close();
+    }
+
+    public function getDescriptors(): array
+    {
+        if (!$this->haveReadSupport) {
+            $nullstream = fopen('/dev/null', 'c');
+
+            return [
+                ['pipe', 'r'],
+                $nullstream,
+                $nullstream,
+            ];
+        }
+
+        if ($this->ttyMode) {
+            return [
+                ['file', '/dev/tty', 'r'],
+                ['file', '/dev/tty', 'w'],
+                ['file', '/dev/tty', 'w'],
+            ];
+        }
+
+        if ($this->ptyMode && Process::isPtySupported()) {
+            return [
+                ['pty'],
+                ['pty'],
+                ['pty'],
+            ];
+        }
+
+        return [
+            ['pipe', 'r'],
+            ['pipe', 'w'], // stdout
+            ['pipe', 'w'], // stderr
+        ];
+    }
+
+    public function getFiles(): array
+    {
+        return [];
+    }
+
+    public function readAndWrite(bool $blocking, bool $close = false): array
+    {
+        $this->unblock();
+        $w = $this->write();
+
+        $read = $e = [];
+        $r = $this->pipes;
+        unset($r[0]);
+
+        // let's have a look if something changed in streams
+        set_error_handler($this->handleError(...));
+        if (($r || $w) && false === stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) {
+            restore_error_handler();
+            // if a system call has been interrupted, forget about it, let's try again
+            // otherwise, an error occurred, let's reset pipes
+            if (!$this->hasSystemCallBeenInterrupted()) {
+                $this->pipes = [];
+            }
+
+            return $read;
+        }
+        restore_error_handler();
+
+        foreach ($r as $pipe) {
+            // prior PHP 5.4 the array passed to stream_select is modified and
+            // lose key association, we have to find back the key
+            $read[$type = array_search($pipe, $this->pipes, true)] = '';
+
+            do {
+                $data = @fread($pipe, self::CHUNK_SIZE);
+                $read[$type] .= $data;
+            } while (isset($data[0]) && ($close || isset($data[self::CHUNK_SIZE - 1])));
+
+            if (!isset($read[$type][0])) {
+                unset($read[$type]);
+            }
+
+            if ($close && feof($pipe)) {
+                fclose($pipe);
+                unset($this->pipes[$type]);
+            }
+        }
+
+        return $read;
+    }
+
+    public function haveReadSupport(): bool
+    {
+        return $this->haveReadSupport;
+    }
+
+    public function areOpen(): bool
+    {
+        return (bool) $this->pipes;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Pipes/WindowsPipes.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Pipes/WindowsPipes.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Pipes/WindowsPipes.php	(revision 8435)
@@ -0,0 +1,186 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Pipes;
+
+use Symfony\Component\Process\Exception\RuntimeException;
+use Symfony\Component\Process\Process;
+
+/**
+ * WindowsPipes implementation uses temporary files as handles.
+ *
+ * @see https://bugs.php.net/51800
+ * @see https://bugs.php.net/65650
+ *
+ * @author Romain Neutron <imprec@gmail.com>
+ *
+ * @internal
+ */
+class WindowsPipes extends AbstractPipes
+{
+    private array $files = [];
+    private array $fileHandles = [];
+    private array $lockHandles = [];
+    private array $readBytes = [
+        Process::STDOUT => 0,
+        Process::STDERR => 0,
+    ];
+    private bool $haveReadSupport;
+
+    public function __construct(mixed $input, bool $haveReadSupport)
+    {
+        $this->haveReadSupport = $haveReadSupport;
+
+        if ($this->haveReadSupport) {
+            // Fix for PHP bug #51800: reading from STDOUT pipe hangs forever on Windows if the output is too big.
+            // Workaround for this problem is to use temporary files instead of pipes on Windows platform.
+            //
+            // @see https://bugs.php.net/51800
+            $pipes = [
+                Process::STDOUT => Process::OUT,
+                Process::STDERR => Process::ERR,
+            ];
+            $tmpDir = sys_get_temp_dir();
+            $lastError = 'unknown reason';
+            set_error_handler(function ($type, $msg) use (&$lastError) { $lastError = $msg; });
+            for ($i = 0;; ++$i) {
+                foreach ($pipes as $pipe => $name) {
+                    $file = sprintf('%s\\sf_proc_%02X.%s', $tmpDir, $i, $name);
+
+                    if (!$h = fopen($file.'.lock', 'w')) {
+                        if (file_exists($file.'.lock')) {
+                            continue 2;
+                        }
+                        restore_error_handler();
+                        throw new RuntimeException('A temporary file could not be opened to write the process output: '.$lastError);
+                    }
+                    if (!flock($h, \LOCK_EX | \LOCK_NB)) {
+                        continue 2;
+                    }
+                    if (isset($this->lockHandles[$pipe])) {
+                        flock($this->lockHandles[$pipe], \LOCK_UN);
+                        fclose($this->lockHandles[$pipe]);
+                    }
+                    $this->lockHandles[$pipe] = $h;
+
+                    if (!($h = fopen($file, 'w')) || !fclose($h) || !$h = fopen($file, 'r')) {
+                        flock($this->lockHandles[$pipe], \LOCK_UN);
+                        fclose($this->lockHandles[$pipe]);
+                        unset($this->lockHandles[$pipe]);
+                        continue 2;
+                    }
+                    $this->fileHandles[$pipe] = $h;
+                    $this->files[$pipe] = $file;
+                }
+                break;
+            }
+            restore_error_handler();
+        }
+
+        parent::__construct($input);
+    }
+
+    public function __sleep(): array
+    {
+        throw new \BadMethodCallException('Cannot serialize '.__CLASS__);
+    }
+
+    public function __wakeup(): void
+    {
+        throw new \BadMethodCallException('Cannot unserialize '.__CLASS__);
+    }
+
+    public function __destruct()
+    {
+        $this->close();
+    }
+
+    public function getDescriptors(): array
+    {
+        if (!$this->haveReadSupport) {
+            $nullstream = fopen('NUL', 'c');
+
+            return [
+                ['pipe', 'r'],
+                $nullstream,
+                $nullstream,
+            ];
+        }
+
+        // We're not using pipe on Windows platform as it hangs (https://bugs.php.net/51800)
+        // We're not using file handles as it can produce corrupted output https://bugs.php.net/65650
+        // So we redirect output within the commandline and pass the nul device to the process
+        return [
+            ['pipe', 'r'],
+            ['file', 'NUL', 'w'],
+            ['file', 'NUL', 'w'],
+        ];
+    }
+
+    public function getFiles(): array
+    {
+        return $this->files;
+    }
+
+    public function readAndWrite(bool $blocking, bool $close = false): array
+    {
+        $this->unblock();
+        $w = $this->write();
+        $read = $r = $e = [];
+
+        if ($blocking) {
+            if ($w) {
+                @stream_select($r, $w, $e, 0, Process::TIMEOUT_PRECISION * 1E6);
+            } elseif ($this->fileHandles) {
+                usleep((int) (Process::TIMEOUT_PRECISION * 1E6));
+            }
+        }
+        foreach ($this->fileHandles as $type => $fileHandle) {
+            $data = stream_get_contents($fileHandle, -1, $this->readBytes[$type]);
+
+            if (isset($data[0])) {
+                $this->readBytes[$type] += \strlen($data);
+                $read[$type] = $data;
+            }
+            if ($close) {
+                ftruncate($fileHandle, 0);
+                fclose($fileHandle);
+                flock($this->lockHandles[$type], \LOCK_UN);
+                fclose($this->lockHandles[$type]);
+                unset($this->fileHandles[$type], $this->lockHandles[$type]);
+            }
+        }
+
+        return $read;
+    }
+
+    public function haveReadSupport(): bool
+    {
+        return $this->haveReadSupport;
+    }
+
+    public function areOpen(): bool
+    {
+        return $this->pipes && $this->fileHandles;
+    }
+
+    public function close(): void
+    {
+        parent::close();
+        foreach ($this->fileHandles as $type => $handle) {
+            ftruncate($handle, 0);
+            fclose($handle);
+            flock($this->lockHandles[$type], \LOCK_UN);
+            fclose($this->lockHandles[$type]);
+        }
+        $this->fileHandles = $this->lockHandles = [];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/Process.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/Process.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/Process.php	(revision 8435)
@@ -0,0 +1,1610 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process;
+
+use Symfony\Component\Process\Exception\InvalidArgumentException;
+use Symfony\Component\Process\Exception\LogicException;
+use Symfony\Component\Process\Exception\ProcessFailedException;
+use Symfony\Component\Process\Exception\ProcessSignaledException;
+use Symfony\Component\Process\Exception\ProcessTimedOutException;
+use Symfony\Component\Process\Exception\RuntimeException;
+use Symfony\Component\Process\Pipes\UnixPipes;
+use Symfony\Component\Process\Pipes\WindowsPipes;
+
+/**
+ * Process is a thin wrapper around proc_* functions to easily
+ * start independent PHP processes.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Romain Neutron <imprec@gmail.com>
+ *
+ * @implements \IteratorAggregate<string, string>
+ */
+class Process implements \IteratorAggregate
+{
+    public const ERR = 'err';
+    public const OUT = 'out';
+
+    public const STATUS_READY = 'ready';
+    public const STATUS_STARTED = 'started';
+    public const STATUS_TERMINATED = 'terminated';
+
+    public const STDIN = 0;
+    public const STDOUT = 1;
+    public const STDERR = 2;
+
+    // Timeout Precision in seconds.
+    public const TIMEOUT_PRECISION = 0.2;
+
+    public const ITER_NON_BLOCKING = 1; // By default, iterating over outputs is a blocking call, use this flag to make it non-blocking
+    public const ITER_KEEP_OUTPUT = 2;  // By default, outputs are cleared while iterating, use this flag to keep them in memory
+    public const ITER_SKIP_OUT = 4;     // Use this flag to skip STDOUT while iterating
+    public const ITER_SKIP_ERR = 8;     // Use this flag to skip STDERR while iterating
+
+    private ?\Closure $callback = null;
+    private array|string $commandline;
+    private ?string $cwd;
+    private array $env = [];
+    /** @var resource|string|\Iterator|null */
+    private $input;
+    private ?float $starttime = null;
+    private ?float $lastOutputTime = null;
+    private ?float $timeout = null;
+    private ?float $idleTimeout = null;
+    private ?int $exitcode = null;
+    private array $fallbackStatus = [];
+    private array $processInformation;
+    private bool $outputDisabled = false;
+    /** @var resource */
+    private $stdout;
+    /** @var resource */
+    private $stderr;
+    /** @var resource|null */
+    private $process;
+    private string $status = self::STATUS_READY;
+    private int $incrementalOutputOffset = 0;
+    private int $incrementalErrorOutputOffset = 0;
+    private bool $tty = false;
+    private bool $pty;
+    private array $options = ['suppress_errors' => true, 'bypass_shell' => true];
+
+    private WindowsPipes|UnixPipes $processPipes;
+
+    private ?int $latestSignal = null;
+    private ?int $cachedExitCode = null;
+
+    private static ?bool $sigchild = null;
+
+    /**
+     * Exit codes translation table.
+     *
+     * User-defined errors must use exit codes in the 64-113 range.
+     */
+    public static $exitCodes = [
+        0 => 'OK',
+        1 => 'General error',
+        2 => 'Misuse of shell builtins',
+
+        126 => 'Invoked command cannot execute',
+        127 => 'Command not found',
+        128 => 'Invalid exit argument',
+
+        // signals
+        129 => 'Hangup',
+        130 => 'Interrupt',
+        131 => 'Quit and dump core',
+        132 => 'Illegal instruction',
+        133 => 'Trace/breakpoint trap',
+        134 => 'Process aborted',
+        135 => 'Bus error: "access to undefined portion of memory object"',
+        136 => 'Floating point exception: "erroneous arithmetic operation"',
+        137 => 'Kill (terminate immediately)',
+        138 => 'User-defined 1',
+        139 => 'Segmentation violation',
+        140 => 'User-defined 2',
+        141 => 'Write to pipe with no one reading',
+        142 => 'Signal raised by alarm',
+        143 => 'Termination (request to terminate)',
+        // 144 - not defined
+        145 => 'Child process terminated, stopped (or continued*)',
+        146 => 'Continue if stopped',
+        147 => 'Stop executing temporarily',
+        148 => 'Terminal stop signal',
+        149 => 'Background process attempting to read from tty ("in")',
+        150 => 'Background process attempting to write to tty ("out")',
+        151 => 'Urgent data available on socket',
+        152 => 'CPU time limit exceeded',
+        153 => 'File size limit exceeded',
+        154 => 'Signal raised by timer counting virtual time: "virtual timer expired"',
+        155 => 'Profiling timer expired',
+        // 156 - not defined
+        157 => 'Pollable event',
+        // 158 - not defined
+        159 => 'Bad syscall',
+    ];
+
+    /**
+     * @param array          $command The command to run and its arguments listed as separate entries
+     * @param string|null    $cwd     The working directory or null to use the working dir of the current PHP process
+     * @param array|null     $env     The environment variables or null to use the same environment as the current PHP process
+     * @param mixed          $input   The input as stream resource, scalar or \Traversable, or null for no input
+     * @param int|float|null $timeout The timeout in seconds or null to disable
+     *
+     * @throws LogicException When proc_open is not installed
+     */
+    public function __construct(array $command, ?string $cwd = null, ?array $env = null, mixed $input = null, ?float $timeout = 60)
+    {
+        if (!\function_exists('proc_open')) {
+            throw new LogicException('The Process class relies on proc_open, which is not available on your PHP installation.');
+        }
+
+        $this->commandline = $command;
+        $this->cwd = $cwd;
+
+        // on Windows, if the cwd changed via chdir(), proc_open defaults to the dir where PHP was started
+        // on Gnu/Linux, PHP builds with --enable-maintainer-zts are also affected
+        // @see : https://bugs.php.net/51800
+        // @see : https://bugs.php.net/50524
+        if (null === $this->cwd && (\defined('ZEND_THREAD_SAFE') || '\\' === \DIRECTORY_SEPARATOR)) {
+            $this->cwd = getcwd();
+        }
+        if (null !== $env) {
+            $this->setEnv($env);
+        }
+
+        $this->setInput($input);
+        $this->setTimeout($timeout);
+        $this->pty = false;
+    }
+
+    /**
+     * Creates a Process instance as a command-line to be run in a shell wrapper.
+     *
+     * Command-lines are parsed by the shell of your OS (/bin/sh on Unix-like, cmd.exe on Windows.)
+     * This allows using e.g. pipes or conditional execution. In this mode, signals are sent to the
+     * shell wrapper and not to your commands.
+     *
+     * In order to inject dynamic values into command-lines, we strongly recommend using placeholders.
+     * This will save escaping values, which is not portable nor secure anyway:
+     *
+     *   $process = Process::fromShellCommandline('my_command "${:MY_VAR}"');
+     *   $process->run(null, ['MY_VAR' => $theValue]);
+     *
+     * @param string         $command The command line to pass to the shell of the OS
+     * @param string|null    $cwd     The working directory or null to use the working dir of the current PHP process
+     * @param array|null     $env     The environment variables or null to use the same environment as the current PHP process
+     * @param mixed          $input   The input as stream resource, scalar or \Traversable, or null for no input
+     * @param int|float|null $timeout The timeout in seconds or null to disable
+     *
+     * @throws LogicException When proc_open is not installed
+     */
+    public static function fromShellCommandline(string $command, ?string $cwd = null, ?array $env = null, mixed $input = null, ?float $timeout = 60): static
+    {
+        $process = new static([], $cwd, $env, $input, $timeout);
+        $process->commandline = $command;
+
+        return $process;
+    }
+
+    public function __sleep(): array
+    {
+        throw new \BadMethodCallException('Cannot serialize '.__CLASS__);
+    }
+
+    /**
+     * @return void
+     */
+    public function __wakeup()
+    {
+        throw new \BadMethodCallException('Cannot unserialize '.__CLASS__);
+    }
+
+    public function __destruct()
+    {
+        if ($this->options['create_new_console'] ?? false) {
+            $this->processPipes->close();
+        } else {
+            $this->stop(0);
+        }
+    }
+
+    public function __clone()
+    {
+        $this->resetProcessData();
+    }
+
+    /**
+     * Runs the process.
+     *
+     * The callback receives the type of output (out or err) and
+     * some bytes from the output in real-time. It allows to have feedback
+     * from the independent process during execution.
+     *
+     * The STDOUT and STDERR are also available after the process is finished
+     * via the getOutput() and getErrorOutput() methods.
+     *
+     * @param callable|null $callback A PHP callback to run whenever there is some
+     *                                output available on STDOUT or STDERR
+     *
+     * @return int The exit status code
+     *
+     * @throws RuntimeException         When process can't be launched
+     * @throws RuntimeException         When process is already running
+     * @throws ProcessTimedOutException When process timed out
+     * @throws ProcessSignaledException When process stopped after receiving signal
+     * @throws LogicException           In case a callback is provided and output has been disabled
+     *
+     * @final
+     */
+    public function run(?callable $callback = null, array $env = []): int
+    {
+        $this->start($callback, $env);
+
+        return $this->wait();
+    }
+
+    /**
+     * Runs the process.
+     *
+     * This is identical to run() except that an exception is thrown if the process
+     * exits with a non-zero exit code.
+     *
+     * @return $this
+     *
+     * @throws ProcessFailedException if the process didn't terminate successfully
+     *
+     * @final
+     */
+    public function mustRun(?callable $callback = null, array $env = []): static
+    {
+        if (0 !== $this->run($callback, $env)) {
+            throw new ProcessFailedException($this);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Starts the process and returns after writing the input to STDIN.
+     *
+     * This method blocks until all STDIN data is sent to the process then it
+     * returns while the process runs in the background.
+     *
+     * The termination of the process can be awaited with wait().
+     *
+     * The callback receives the type of output (out or err) and some bytes from
+     * the output in real-time while writing the standard input to the process.
+     * It allows to have feedback from the independent process during execution.
+     *
+     * @param callable|null $callback A PHP callback to run whenever there is some
+     *                                output available on STDOUT or STDERR
+     *
+     * @return void
+     *
+     * @throws RuntimeException When process can't be launched
+     * @throws RuntimeException When process is already running
+     * @throws LogicException   In case a callback is provided and output has been disabled
+     */
+    public function start(?callable $callback = null, array $env = [])
+    {
+        if ($this->isRunning()) {
+            throw new RuntimeException('Process is already running.');
+        }
+
+        $this->resetProcessData();
+        $this->starttime = $this->lastOutputTime = microtime(true);
+        $this->callback = $this->buildCallback($callback);
+        $descriptors = $this->getDescriptors(null !== $callback);
+
+        if ($this->env) {
+            $env += '\\' === \DIRECTORY_SEPARATOR ? array_diff_ukey($this->env, $env, 'strcasecmp') : $this->env;
+        }
+
+        $env += '\\' === \DIRECTORY_SEPARATOR ? array_diff_ukey($this->getDefaultEnv(), $env, 'strcasecmp') : $this->getDefaultEnv();
+
+        if (\is_array($commandline = $this->commandline)) {
+            $commandline = implode(' ', array_map($this->escapeArgument(...), $commandline));
+
+            if ('\\' !== \DIRECTORY_SEPARATOR) {
+                // exec is mandatory to deal with sending a signal to the process
+                $commandline = 'exec '.$commandline;
+            }
+        } else {
+            $commandline = $this->replacePlaceholders($commandline, $env);
+        }
+
+        if ('\\' === \DIRECTORY_SEPARATOR) {
+            $commandline = $this->prepareWindowsCommandLine($commandline, $env);
+        } elseif ($this->isSigchildEnabled()) {
+            // last exit code is output on the fourth pipe and caught to work around --enable-sigchild
+            $descriptors[3] = ['pipe', 'w'];
+
+            // See https://unix.stackexchange.com/questions/71205/background-process-pipe-input
+            $commandline = '{ ('.$commandline.') <&3 3<&- 3>/dev/null & } 3<&0;';
+            $commandline .= 'pid=$!; echo $pid >&3; wait $pid 2>/dev/null; code=$?; echo $code >&3; exit $code';
+        }
+
+        $envPairs = [];
+        foreach ($env as $k => $v) {
+            if (false !== $v && false === \in_array($k, ['argc', 'argv', 'ARGC', 'ARGV'], true)) {
+                $envPairs[] = $k.'='.$v;
+            }
+        }
+
+        if (!is_dir($this->cwd)) {
+            throw new RuntimeException(sprintf('The provided cwd "%s" does not exist.', $this->cwd));
+        }
+
+        $process = @proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $envPairs, $this->options);
+
+        if (!\is_resource($process)) {
+            throw new RuntimeException('Unable to launch a new process.');
+        }
+        $this->process = $process;
+        $this->status = self::STATUS_STARTED;
+
+        if (isset($descriptors[3])) {
+            $this->fallbackStatus['pid'] = (int) fgets($this->processPipes->pipes[3]);
+        }
+
+        if ($this->tty) {
+            return;
+        }
+
+        $this->updateStatus(false);
+        $this->checkTimeout();
+    }
+
+    /**
+     * Restarts the process.
+     *
+     * Be warned that the process is cloned before being started.
+     *
+     * @param callable|null $callback A PHP callback to run whenever there is some
+     *                                output available on STDOUT or STDERR
+     *
+     * @throws RuntimeException When process can't be launched
+     * @throws RuntimeException When process is already running
+     *
+     * @see start()
+     *
+     * @final
+     */
+    public function restart(?callable $callback = null, array $env = []): static
+    {
+        if ($this->isRunning()) {
+            throw new RuntimeException('Process is already running.');
+        }
+
+        $process = clone $this;
+        $process->start($callback, $env);
+
+        return $process;
+    }
+
+    /**
+     * Waits for the process to terminate.
+     *
+     * The callback receives the type of output (out or err) and some bytes
+     * from the output in real-time while writing the standard input to the process.
+     * It allows to have feedback from the independent process during execution.
+     *
+     * @param callable|null $callback A valid PHP callback
+     *
+     * @return int The exitcode of the process
+     *
+     * @throws ProcessTimedOutException When process timed out
+     * @throws ProcessSignaledException When process stopped after receiving signal
+     * @throws LogicException           When process is not yet started
+     */
+    public function wait(?callable $callback = null): int
+    {
+        $this->requireProcessIsStarted(__FUNCTION__);
+
+        $this->updateStatus(false);
+
+        if (null !== $callback) {
+            if (!$this->processPipes->haveReadSupport()) {
+                $this->stop(0);
+                throw new LogicException('Pass the callback to the "Process::start" method or call enableOutput to use a callback with "Process::wait".');
+            }
+            $this->callback = $this->buildCallback($callback);
+        }
+
+        do {
+            $this->checkTimeout();
+            $running = $this->isRunning() && ('\\' === \DIRECTORY_SEPARATOR || $this->processPipes->areOpen());
+            $this->readPipes($running, '\\' !== \DIRECTORY_SEPARATOR || !$running);
+        } while ($running);
+
+        while ($this->isRunning()) {
+            $this->checkTimeout();
+            usleep(1000);
+        }
+
+        if ($this->processInformation['signaled'] && $this->processInformation['termsig'] !== $this->latestSignal) {
+            throw new ProcessSignaledException($this);
+        }
+
+        return $this->exitcode;
+    }
+
+    /**
+     * Waits until the callback returns true.
+     *
+     * The callback receives the type of output (out or err) and some bytes
+     * from the output in real-time while writing the standard input to the process.
+     * It allows to have feedback from the independent process during execution.
+     *
+     * @throws RuntimeException         When process timed out
+     * @throws LogicException           When process is not yet started
+     * @throws ProcessTimedOutException In case the timeout was reached
+     */
+    public function waitUntil(callable $callback): bool
+    {
+        $this->requireProcessIsStarted(__FUNCTION__);
+        $this->updateStatus(false);
+
+        if (!$this->processPipes->haveReadSupport()) {
+            $this->stop(0);
+            throw new LogicException('Pass the callback to the "Process::start" method or call enableOutput to use a callback with "Process::waitUntil".');
+        }
+        $callback = $this->buildCallback($callback);
+
+        $ready = false;
+        while (true) {
+            $this->checkTimeout();
+            $running = '\\' === \DIRECTORY_SEPARATOR ? $this->isRunning() : $this->processPipes->areOpen();
+            $output = $this->processPipes->readAndWrite($running, '\\' !== \DIRECTORY_SEPARATOR || !$running);
+
+            foreach ($output as $type => $data) {
+                if (3 !== $type) {
+                    $ready = $callback(self::STDOUT === $type ? self::OUT : self::ERR, $data) || $ready;
+                } elseif (!isset($this->fallbackStatus['signaled'])) {
+                    $this->fallbackStatus['exitcode'] = (int) $data;
+                }
+            }
+            if ($ready) {
+                return true;
+            }
+            if (!$running) {
+                return false;
+            }
+
+            usleep(1000);
+        }
+    }
+
+    /**
+     * Returns the Pid (process identifier), if applicable.
+     *
+     * @return int|null The process id if running, null otherwise
+     */
+    public function getPid(): ?int
+    {
+        return $this->isRunning() ? $this->processInformation['pid'] : null;
+    }
+
+    /**
+     * Sends a POSIX signal to the process.
+     *
+     * @param int $signal A valid POSIX signal (see https://php.net/pcntl.constants)
+     *
+     * @return $this
+     *
+     * @throws LogicException   In case the process is not running
+     * @throws RuntimeException In case --enable-sigchild is activated and the process can't be killed
+     * @throws RuntimeException In case of failure
+     */
+    public function signal(int $signal): static
+    {
+        $this->doSignal($signal, true);
+
+        return $this;
+    }
+
+    /**
+     * Disables fetching output and error output from the underlying process.
+     *
+     * @return $this
+     *
+     * @throws RuntimeException In case the process is already running
+     * @throws LogicException   if an idle timeout is set
+     */
+    public function disableOutput(): static
+    {
+        if ($this->isRunning()) {
+            throw new RuntimeException('Disabling output while the process is running is not possible.');
+        }
+        if (null !== $this->idleTimeout) {
+            throw new LogicException('Output cannot be disabled while an idle timeout is set.');
+        }
+
+        $this->outputDisabled = true;
+
+        return $this;
+    }
+
+    /**
+     * Enables fetching output and error output from the underlying process.
+     *
+     * @return $this
+     *
+     * @throws RuntimeException In case the process is already running
+     */
+    public function enableOutput(): static
+    {
+        if ($this->isRunning()) {
+            throw new RuntimeException('Enabling output while the process is running is not possible.');
+        }
+
+        $this->outputDisabled = false;
+
+        return $this;
+    }
+
+    /**
+     * Returns true in case the output is disabled, false otherwise.
+     */
+    public function isOutputDisabled(): bool
+    {
+        return $this->outputDisabled;
+    }
+
+    /**
+     * Returns the current output of the process (STDOUT).
+     *
+     * @throws LogicException in case the output has been disabled
+     * @throws LogicException In case the process is not started
+     */
+    public function getOutput(): string
+    {
+        $this->readPipesForOutput(__FUNCTION__);
+
+        if (false === $ret = stream_get_contents($this->stdout, -1, 0)) {
+            return '';
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Returns the output incrementally.
+     *
+     * In comparison with the getOutput method which always return the whole
+     * output, this one returns the new output since the last call.
+     *
+     * @throws LogicException in case the output has been disabled
+     * @throws LogicException In case the process is not started
+     */
+    public function getIncrementalOutput(): string
+    {
+        $this->readPipesForOutput(__FUNCTION__);
+
+        $latest = stream_get_contents($this->stdout, -1, $this->incrementalOutputOffset);
+        $this->incrementalOutputOffset = ftell($this->stdout);
+
+        if (false === $latest) {
+            return '';
+        }
+
+        return $latest;
+    }
+
+    /**
+     * Returns an iterator to the output of the process, with the output type as keys (Process::OUT/ERR).
+     *
+     * @param int $flags A bit field of Process::ITER_* flags
+     *
+     * @return \Generator<string, string>
+     *
+     * @throws LogicException in case the output has been disabled
+     * @throws LogicException In case the process is not started
+     */
+    public function getIterator(int $flags = 0): \Generator
+    {
+        $this->readPipesForOutput(__FUNCTION__, false);
+
+        $clearOutput = !(self::ITER_KEEP_OUTPUT & $flags);
+        $blocking = !(self::ITER_NON_BLOCKING & $flags);
+        $yieldOut = !(self::ITER_SKIP_OUT & $flags);
+        $yieldErr = !(self::ITER_SKIP_ERR & $flags);
+
+        while (null !== $this->callback || ($yieldOut && !feof($this->stdout)) || ($yieldErr && !feof($this->stderr))) {
+            if ($yieldOut) {
+                $out = stream_get_contents($this->stdout, -1, $this->incrementalOutputOffset);
+
+                if (isset($out[0])) {
+                    if ($clearOutput) {
+                        $this->clearOutput();
+                    } else {
+                        $this->incrementalOutputOffset = ftell($this->stdout);
+                    }
+
+                    yield self::OUT => $out;
+                }
+            }
+
+            if ($yieldErr) {
+                $err = stream_get_contents($this->stderr, -1, $this->incrementalErrorOutputOffset);
+
+                if (isset($err[0])) {
+                    if ($clearOutput) {
+                        $this->clearErrorOutput();
+                    } else {
+                        $this->incrementalErrorOutputOffset = ftell($this->stderr);
+                    }
+
+                    yield self::ERR => $err;
+                }
+            }
+
+            if (!$blocking && !isset($out[0]) && !isset($err[0])) {
+                yield self::OUT => '';
+            }
+
+            $this->checkTimeout();
+            $this->readPipesForOutput(__FUNCTION__, $blocking);
+        }
+    }
+
+    /**
+     * Clears the process output.
+     *
+     * @return $this
+     */
+    public function clearOutput(): static
+    {
+        ftruncate($this->stdout, 0);
+        fseek($this->stdout, 0);
+        $this->incrementalOutputOffset = 0;
+
+        return $this;
+    }
+
+    /**
+     * Returns the current error output of the process (STDERR).
+     *
+     * @throws LogicException in case the output has been disabled
+     * @throws LogicException In case the process is not started
+     */
+    public function getErrorOutput(): string
+    {
+        $this->readPipesForOutput(__FUNCTION__);
+
+        if (false === $ret = stream_get_contents($this->stderr, -1, 0)) {
+            return '';
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Returns the errorOutput incrementally.
+     *
+     * In comparison with the getErrorOutput method which always return the
+     * whole error output, this one returns the new error output since the last
+     * call.
+     *
+     * @throws LogicException in case the output has been disabled
+     * @throws LogicException In case the process is not started
+     */
+    public function getIncrementalErrorOutput(): string
+    {
+        $this->readPipesForOutput(__FUNCTION__);
+
+        $latest = stream_get_contents($this->stderr, -1, $this->incrementalErrorOutputOffset);
+        $this->incrementalErrorOutputOffset = ftell($this->stderr);
+
+        if (false === $latest) {
+            return '';
+        }
+
+        return $latest;
+    }
+
+    /**
+     * Clears the process output.
+     *
+     * @return $this
+     */
+    public function clearErrorOutput(): static
+    {
+        ftruncate($this->stderr, 0);
+        fseek($this->stderr, 0);
+        $this->incrementalErrorOutputOffset = 0;
+
+        return $this;
+    }
+
+    /**
+     * Returns the exit code returned by the process.
+     *
+     * @return int|null The exit status code, null if the Process is not terminated
+     */
+    public function getExitCode(): ?int
+    {
+        $this->updateStatus(false);
+
+        return $this->exitcode;
+    }
+
+    /**
+     * Returns a string representation for the exit code returned by the process.
+     *
+     * This method relies on the Unix exit code status standardization
+     * and might not be relevant for other operating systems.
+     *
+     * @return string|null A string representation for the exit status code, null if the Process is not terminated
+     *
+     * @see http://tldp.org/LDP/abs/html/exitcodes.html
+     * @see http://en.wikipedia.org/wiki/Unix_signal
+     */
+    public function getExitCodeText(): ?string
+    {
+        if (null === $exitcode = $this->getExitCode()) {
+            return null;
+        }
+
+        return self::$exitCodes[$exitcode] ?? 'Unknown error';
+    }
+
+    /**
+     * Checks if the process ended successfully.
+     */
+    public function isSuccessful(): bool
+    {
+        return 0 === $this->getExitCode();
+    }
+
+    /**
+     * Returns true if the child process has been terminated by an uncaught signal.
+     *
+     * It always returns false on Windows.
+     *
+     * @throws LogicException In case the process is not terminated
+     */
+    public function hasBeenSignaled(): bool
+    {
+        $this->requireProcessIsTerminated(__FUNCTION__);
+
+        return $this->processInformation['signaled'];
+    }
+
+    /**
+     * Returns the number of the signal that caused the child process to terminate its execution.
+     *
+     * It is only meaningful if hasBeenSignaled() returns true.
+     *
+     * @throws RuntimeException In case --enable-sigchild is activated
+     * @throws LogicException   In case the process is not terminated
+     */
+    public function getTermSignal(): int
+    {
+        $this->requireProcessIsTerminated(__FUNCTION__);
+
+        if ($this->isSigchildEnabled() && -1 === $this->processInformation['termsig']) {
+            throw new RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal cannot be retrieved.');
+        }
+
+        return $this->processInformation['termsig'];
+    }
+
+    /**
+     * Returns true if the child process has been stopped by a signal.
+     *
+     * It always returns false on Windows.
+     *
+     * @throws LogicException In case the process is not terminated
+     */
+    public function hasBeenStopped(): bool
+    {
+        $this->requireProcessIsTerminated(__FUNCTION__);
+
+        return $this->processInformation['stopped'];
+    }
+
+    /**
+     * Returns the number of the signal that caused the child process to stop its execution.
+     *
+     * It is only meaningful if hasBeenStopped() returns true.
+     *
+     * @throws LogicException In case the process is not terminated
+     */
+    public function getStopSignal(): int
+    {
+        $this->requireProcessIsTerminated(__FUNCTION__);
+
+        return $this->processInformation['stopsig'];
+    }
+
+    /**
+     * Checks if the process is currently running.
+     */
+    public function isRunning(): bool
+    {
+        if (self::STATUS_STARTED !== $this->status) {
+            return false;
+        }
+
+        $this->updateStatus(false);
+
+        return $this->processInformation['running'];
+    }
+
+    /**
+     * Checks if the process has been started with no regard to the current state.
+     */
+    public function isStarted(): bool
+    {
+        return self::STATUS_READY != $this->status;
+    }
+
+    /**
+     * Checks if the process is terminated.
+     */
+    public function isTerminated(): bool
+    {
+        $this->updateStatus(false);
+
+        return self::STATUS_TERMINATED == $this->status;
+    }
+
+    /**
+     * Gets the process status.
+     *
+     * The status is one of: ready, started, terminated.
+     */
+    public function getStatus(): string
+    {
+        $this->updateStatus(false);
+
+        return $this->status;
+    }
+
+    /**
+     * Stops the process.
+     *
+     * @param int|float $timeout The timeout in seconds
+     * @param int|null  $signal  A POSIX signal to send in case the process has not stop at timeout, default is SIGKILL (9)
+     *
+     * @return int|null The exit-code of the process or null if it's not running
+     */
+    public function stop(float $timeout = 10, ?int $signal = null): ?int
+    {
+        $timeoutMicro = microtime(true) + $timeout;
+        if ($this->isRunning()) {
+            // given SIGTERM may not be defined and that "proc_terminate" uses the constant value and not the constant itself, we use the same here
+            $this->doSignal(15, false);
+            do {
+                usleep(1000);
+            } while ($this->isRunning() && microtime(true) < $timeoutMicro);
+
+            if ($this->isRunning()) {
+                // Avoid exception here: process is supposed to be running, but it might have stopped just
+                // after this line. In any case, let's silently discard the error, we cannot do anything.
+                $this->doSignal($signal ?: 9, false);
+            }
+        }
+
+        if ($this->isRunning()) {
+            if (isset($this->fallbackStatus['pid'])) {
+                unset($this->fallbackStatus['pid']);
+
+                return $this->stop(0, $signal);
+            }
+            $this->close();
+        }
+
+        return $this->exitcode;
+    }
+
+    /**
+     * Adds a line to the STDOUT stream.
+     *
+     * @internal
+     */
+    public function addOutput(string $line): void
+    {
+        $this->lastOutputTime = microtime(true);
+
+        fseek($this->stdout, 0, \SEEK_END);
+        fwrite($this->stdout, $line);
+        fseek($this->stdout, $this->incrementalOutputOffset);
+    }
+
+    /**
+     * Adds a line to the STDERR stream.
+     *
+     * @internal
+     */
+    public function addErrorOutput(string $line): void
+    {
+        $this->lastOutputTime = microtime(true);
+
+        fseek($this->stderr, 0, \SEEK_END);
+        fwrite($this->stderr, $line);
+        fseek($this->stderr, $this->incrementalErrorOutputOffset);
+    }
+
+    /**
+     * Gets the last output time in seconds.
+     */
+    public function getLastOutputTime(): ?float
+    {
+        return $this->lastOutputTime;
+    }
+
+    /**
+     * Gets the command line to be executed.
+     */
+    public function getCommandLine(): string
+    {
+        return \is_array($this->commandline) ? implode(' ', array_map($this->escapeArgument(...), $this->commandline)) : $this->commandline;
+    }
+
+    /**
+     * Gets the process timeout in seconds (max. runtime).
+     */
+    public function getTimeout(): ?float
+    {
+        return $this->timeout;
+    }
+
+    /**
+     * Gets the process idle timeout in seconds (max. time since last output).
+     */
+    public function getIdleTimeout(): ?float
+    {
+        return $this->idleTimeout;
+    }
+
+    /**
+     * Sets the process timeout (max. runtime) in seconds.
+     *
+     * To disable the timeout, set this value to null.
+     *
+     * @return $this
+     *
+     * @throws InvalidArgumentException if the timeout is negative
+     */
+    public function setTimeout(?float $timeout): static
+    {
+        $this->timeout = $this->validateTimeout($timeout);
+
+        return $this;
+    }
+
+    /**
+     * Sets the process idle timeout (max. time since last output) in seconds.
+     *
+     * To disable the timeout, set this value to null.
+     *
+     * @return $this
+     *
+     * @throws LogicException           if the output is disabled
+     * @throws InvalidArgumentException if the timeout is negative
+     */
+    public function setIdleTimeout(?float $timeout): static
+    {
+        if (null !== $timeout && $this->outputDisabled) {
+            throw new LogicException('Idle timeout cannot be set while the output is disabled.');
+        }
+
+        $this->idleTimeout = $this->validateTimeout($timeout);
+
+        return $this;
+    }
+
+    /**
+     * Enables or disables the TTY mode.
+     *
+     * @return $this
+     *
+     * @throws RuntimeException In case the TTY mode is not supported
+     */
+    public function setTty(bool $tty): static
+    {
+        if ('\\' === \DIRECTORY_SEPARATOR && $tty) {
+            throw new RuntimeException('TTY mode is not supported on Windows platform.');
+        }
+
+        if ($tty && !self::isTtySupported()) {
+            throw new RuntimeException('TTY mode requires /dev/tty to be read/writable.');
+        }
+
+        $this->tty = $tty;
+
+        return $this;
+    }
+
+    /**
+     * Checks if the TTY mode is enabled.
+     */
+    public function isTty(): bool
+    {
+        return $this->tty;
+    }
+
+    /**
+     * Sets PTY mode.
+     *
+     * @return $this
+     */
+    public function setPty(bool $bool): static
+    {
+        $this->pty = $bool;
+
+        return $this;
+    }
+
+    /**
+     * Returns PTY state.
+     */
+    public function isPty(): bool
+    {
+        return $this->pty;
+    }
+
+    /**
+     * Gets the working directory.
+     */
+    public function getWorkingDirectory(): ?string
+    {
+        if (null === $this->cwd) {
+            // getcwd() will return false if any one of the parent directories does not have
+            // the readable or search mode set, even if the current directory does
+            return getcwd() ?: null;
+        }
+
+        return $this->cwd;
+    }
+
+    /**
+     * Sets the current working directory.
+     *
+     * @return $this
+     */
+    public function setWorkingDirectory(string $cwd): static
+    {
+        $this->cwd = $cwd;
+
+        return $this;
+    }
+
+    /**
+     * Gets the environment variables.
+     */
+    public function getEnv(): array
+    {
+        return $this->env;
+    }
+
+    /**
+     * Sets the environment variables.
+     *
+     * @param array<string|\Stringable> $env The new environment variables
+     *
+     * @return $this
+     */
+    public function setEnv(array $env): static
+    {
+        $this->env = $env;
+
+        return $this;
+    }
+
+    /**
+     * Gets the Process input.
+     *
+     * @return resource|string|\Iterator|null
+     */
+    public function getInput()
+    {
+        return $this->input;
+    }
+
+    /**
+     * Sets the input.
+     *
+     * This content will be passed to the underlying process standard input.
+     *
+     * @param string|resource|\Traversable|self|null $input The content
+     *
+     * @return $this
+     *
+     * @throws LogicException In case the process is running
+     */
+    public function setInput(mixed $input): static
+    {
+        if ($this->isRunning()) {
+            throw new LogicException('Input cannot be set while the process is running.');
+        }
+
+        $this->input = ProcessUtils::validateInput(__METHOD__, $input);
+
+        return $this;
+    }
+
+    /**
+     * Performs a check between the timeout definition and the time the process started.
+     *
+     * In case you run a background process (with the start method), you should
+     * trigger this method regularly to ensure the process timeout
+     *
+     * @return void
+     *
+     * @throws ProcessTimedOutException In case the timeout was reached
+     */
+    public function checkTimeout()
+    {
+        if (self::STATUS_STARTED !== $this->status) {
+            return;
+        }
+
+        if (null !== $this->timeout && $this->timeout < microtime(true) - $this->starttime) {
+            $this->stop(0);
+
+            throw new ProcessTimedOutException($this, ProcessTimedOutException::TYPE_GENERAL);
+        }
+
+        if (null !== $this->idleTimeout && $this->idleTimeout < microtime(true) - $this->lastOutputTime) {
+            $this->stop(0);
+
+            throw new ProcessTimedOutException($this, ProcessTimedOutException::TYPE_IDLE);
+        }
+    }
+
+    /**
+     * @throws LogicException in case process is not started
+     */
+    public function getStartTime(): float
+    {
+        if (!$this->isStarted()) {
+            throw new LogicException('Start time is only available after process start.');
+        }
+
+        return $this->starttime;
+    }
+
+    /**
+     * Defines options to pass to the underlying proc_open().
+     *
+     * @see https://php.net/proc_open for the options supported by PHP.
+     *
+     * Enabling the "create_new_console" option allows a subprocess to continue
+     * to run after the main process exited, on both Windows and *nix
+     *
+     * @return void
+     */
+    public function setOptions(array $options)
+    {
+        if ($this->isRunning()) {
+            throw new RuntimeException('Setting options while the process is running is not possible.');
+        }
+
+        $defaultOptions = $this->options;
+        $existingOptions = ['blocking_pipes', 'create_process_group', 'create_new_console'];
+
+        foreach ($options as $key => $value) {
+            if (!\in_array($key, $existingOptions)) {
+                $this->options = $defaultOptions;
+                throw new LogicException(sprintf('Invalid option "%s" passed to "%s()". Supported options are "%s".', $key, __METHOD__, implode('", "', $existingOptions)));
+            }
+            $this->options[$key] = $value;
+        }
+    }
+
+    /**
+     * Returns whether TTY is supported on the current operating system.
+     */
+    public static function isTtySupported(): bool
+    {
+        static $isTtySupported;
+
+        return $isTtySupported ??= ('/' === \DIRECTORY_SEPARATOR && stream_isatty(\STDOUT) && @is_writable('/dev/tty'));
+    }
+
+    /**
+     * Returns whether PTY is supported on the current operating system.
+     */
+    public static function isPtySupported(): bool
+    {
+        static $result;
+
+        if (null !== $result) {
+            return $result;
+        }
+
+        if ('\\' === \DIRECTORY_SEPARATOR) {
+            return $result = false;
+        }
+
+        return $result = (bool) @proc_open('echo 1 >/dev/null', [['pty'], ['pty'], ['pty']], $pipes);
+    }
+
+    /**
+     * Creates the descriptors needed by the proc_open.
+     */
+    private function getDescriptors(bool $hasCallback): array
+    {
+        if ($this->input instanceof \Iterator) {
+            $this->input->rewind();
+        }
+        if ('\\' === \DIRECTORY_SEPARATOR) {
+            $this->processPipes = new WindowsPipes($this->input, !$this->outputDisabled || $hasCallback);
+        } else {
+            $this->processPipes = new UnixPipes($this->isTty(), $this->isPty(), $this->input, !$this->outputDisabled || $hasCallback);
+        }
+
+        return $this->processPipes->getDescriptors();
+    }
+
+    /**
+     * Builds up the callback used by wait().
+     *
+     * The callbacks adds all occurred output to the specific buffer and calls
+     * the user callback (if present) with the received output.
+     *
+     * @param callable|null $callback The user defined PHP callback
+     */
+    protected function buildCallback(?callable $callback = null): \Closure
+    {
+        if ($this->outputDisabled) {
+            return fn ($type, $data): bool => null !== $callback && $callback($type, $data);
+        }
+
+        $out = self::OUT;
+
+        return function ($type, $data) use ($callback, $out): bool {
+            if ($out == $type) {
+                $this->addOutput($data);
+            } else {
+                $this->addErrorOutput($data);
+            }
+
+            return null !== $callback && $callback($type, $data);
+        };
+    }
+
+    /**
+     * Updates the status of the process, reads pipes.
+     *
+     * @param bool $blocking Whether to use a blocking read call
+     *
+     * @return void
+     */
+    protected function updateStatus(bool $blocking)
+    {
+        if (self::STATUS_STARTED !== $this->status) {
+            return;
+        }
+
+        $this->processInformation = proc_get_status($this->process);
+        $running = $this->processInformation['running'];
+
+        // In PHP < 8.3, "proc_get_status" only returns the correct exit status on the first call.
+        // Subsequent calls return -1 as the process is discarded. This workaround caches the first
+        // retrieved exit status for consistent results in later calls, mimicking PHP 8.3 behavior.
+        if (\PHP_VERSION_ID < 80300) {
+            if (!isset($this->cachedExitCode) && !$running && -1 !== $this->processInformation['exitcode']) {
+                $this->cachedExitCode = $this->processInformation['exitcode'];
+            }
+
+            if (isset($this->cachedExitCode) && !$running && -1 === $this->processInformation['exitcode']) {
+                $this->processInformation['exitcode'] = $this->cachedExitCode;
+            }
+        }
+
+        $this->readPipes($running && $blocking, '\\' !== \DIRECTORY_SEPARATOR || !$running);
+
+        if ($this->fallbackStatus && $this->isSigchildEnabled()) {
+            $this->processInformation = $this->fallbackStatus + $this->processInformation;
+        }
+
+        if (!$running) {
+            $this->close();
+        }
+    }
+
+    /**
+     * Returns whether PHP has been compiled with the '--enable-sigchild' option or not.
+     */
+    protected function isSigchildEnabled(): bool
+    {
+        if (null !== self::$sigchild) {
+            return self::$sigchild;
+        }
+
+        if (!\function_exists('phpinfo')) {
+            return self::$sigchild = false;
+        }
+
+        ob_start();
+        phpinfo(\INFO_GENERAL);
+
+        return self::$sigchild = str_contains(ob_get_clean(), '--enable-sigchild');
+    }
+
+    /**
+     * Reads pipes for the freshest output.
+     *
+     * @param string $caller   The name of the method that needs fresh outputs
+     * @param bool   $blocking Whether to use blocking calls or not
+     *
+     * @throws LogicException in case output has been disabled or process is not started
+     */
+    private function readPipesForOutput(string $caller, bool $blocking = false): void
+    {
+        if ($this->outputDisabled) {
+            throw new LogicException('Output has been disabled.');
+        }
+
+        $this->requireProcessIsStarted($caller);
+
+        $this->updateStatus($blocking);
+    }
+
+    /**
+     * Validates and returns the filtered timeout.
+     *
+     * @throws InvalidArgumentException if the given timeout is a negative number
+     */
+    private function validateTimeout(?float $timeout): ?float
+    {
+        $timeout = (float) $timeout;
+
+        if (0.0 === $timeout) {
+            $timeout = null;
+        } elseif ($timeout < 0) {
+            throw new InvalidArgumentException('The timeout value must be a valid positive integer or float number.');
+        }
+
+        return $timeout;
+    }
+
+    /**
+     * Reads pipes, executes callback.
+     *
+     * @param bool $blocking Whether to use blocking calls or not
+     * @param bool $close    Whether to close file handles or not
+     */
+    private function readPipes(bool $blocking, bool $close): void
+    {
+        $result = $this->processPipes->readAndWrite($blocking, $close);
+
+        $callback = $this->callback;
+        foreach ($result as $type => $data) {
+            if (3 !== $type) {
+                $callback(self::STDOUT === $type ? self::OUT : self::ERR, $data);
+            } elseif (!isset($this->fallbackStatus['signaled'])) {
+                $this->fallbackStatus['exitcode'] = (int) $data;
+            }
+        }
+    }
+
+    /**
+     * Closes process resource, closes file handles, sets the exitcode.
+     *
+     * @return int The exitcode
+     */
+    private function close(): int
+    {
+        $this->processPipes->close();
+        if (\is_resource($this->process)) {
+            proc_close($this->process);
+        }
+        $this->exitcode = $this->processInformation['exitcode'];
+        $this->status = self::STATUS_TERMINATED;
+
+        if (-1 === $this->exitcode) {
+            if ($this->processInformation['signaled'] && 0 < $this->processInformation['termsig']) {
+                // if process has been signaled, no exitcode but a valid termsig, apply Unix convention
+                $this->exitcode = 128 + $this->processInformation['termsig'];
+            } elseif ($this->isSigchildEnabled()) {
+                $this->processInformation['signaled'] = true;
+                $this->processInformation['termsig'] = -1;
+            }
+        }
+
+        // Free memory from self-reference callback created by buildCallback
+        // Doing so in other contexts like __destruct or by garbage collector is ineffective
+        // Now pipes are closed, so the callback is no longer necessary
+        $this->callback = null;
+
+        return $this->exitcode;
+    }
+
+    /**
+     * Resets data related to the latest run of the process.
+     */
+    private function resetProcessData(): void
+    {
+        $this->starttime = null;
+        $this->callback = null;
+        $this->exitcode = null;
+        $this->fallbackStatus = [];
+        $this->processInformation = [];
+        $this->stdout = fopen('php://temp/maxmemory:'.(1024 * 1024), 'w+');
+        $this->stderr = fopen('php://temp/maxmemory:'.(1024 * 1024), 'w+');
+        $this->process = null;
+        $this->latestSignal = null;
+        $this->status = self::STATUS_READY;
+        $this->incrementalOutputOffset = 0;
+        $this->incrementalErrorOutputOffset = 0;
+    }
+
+    /**
+     * Sends a POSIX signal to the process.
+     *
+     * @param int  $signal         A valid POSIX signal (see https://php.net/pcntl.constants)
+     * @param bool $throwException Whether to throw exception in case signal failed
+     *
+     * @throws LogicException   In case the process is not running
+     * @throws RuntimeException In case --enable-sigchild is activated and the process can't be killed
+     * @throws RuntimeException In case of failure
+     */
+    private function doSignal(int $signal, bool $throwException): bool
+    {
+        if (null === $pid = $this->getPid()) {
+            if ($throwException) {
+                throw new LogicException('Cannot send signal on a non running process.');
+            }
+
+            return false;
+        }
+
+        if ('\\' === \DIRECTORY_SEPARATOR) {
+            exec(sprintf('taskkill /F /T /PID %d 2>&1', $pid), $output, $exitCode);
+            if ($exitCode && $this->isRunning()) {
+                if ($throwException) {
+                    throw new RuntimeException(sprintf('Unable to kill the process (%s).', implode(' ', $output)));
+                }
+
+                return false;
+            }
+        } else {
+            if (!$this->isSigchildEnabled()) {
+                $ok = @proc_terminate($this->process, $signal);
+            } elseif (\function_exists('posix_kill')) {
+                $ok = @posix_kill($pid, $signal);
+            } elseif ($ok = proc_open(sprintf('kill -%d %d', $signal, $pid), [2 => ['pipe', 'w']], $pipes)) {
+                $ok = false === fgets($pipes[2]);
+            }
+            if (!$ok) {
+                if ($throwException) {
+                    throw new RuntimeException(sprintf('Error while sending signal "%s".', $signal));
+                }
+
+                return false;
+            }
+        }
+
+        $this->latestSignal = $signal;
+        $this->fallbackStatus['signaled'] = true;
+        $this->fallbackStatus['exitcode'] = -1;
+        $this->fallbackStatus['termsig'] = $this->latestSignal;
+
+        return true;
+    }
+
+    private function prepareWindowsCommandLine(string $cmd, array &$env): string
+    {
+        $uid = uniqid('', true);
+        $cmd = preg_replace_callback(
+            '/"(?:(
+                [^"%!^]*+
+                (?:
+                    (?: !LF! | "(?:\^[%!^])?+" )
+                    [^"%!^]*+
+                )++
+            ) | [^"]*+ )"/x',
+            function ($m) use (&$env, $uid) {
+                static $varCount = 0;
+                static $varCache = [];
+                if (!isset($m[1])) {
+                    return $m[0];
+                }
+                if (isset($varCache[$m[0]])) {
+                    return $varCache[$m[0]];
+                }
+                if (str_contains($value = $m[1], "\0")) {
+                    $value = str_replace("\0", '?', $value);
+                }
+                if (false === strpbrk($value, "\"%!\n")) {
+                    return '"'.$value.'"';
+                }
+
+                $value = str_replace(['!LF!', '"^!"', '"^%"', '"^^"', '""'], ["\n", '!', '%', '^', '"'], $value);
+                $value = '"'.preg_replace('/(\\\\*)"/', '$1$1\\"', $value).'"';
+                $var = $uid.++$varCount;
+
+                $env[$var] = $value;
+
+                return $varCache[$m[0]] = '!'.$var.'!';
+            },
+            $cmd
+        );
+
+        $cmd = 'cmd /V:ON /E:ON /D /C ('.str_replace("\n", ' ', $cmd).')';
+        foreach ($this->processPipes->getFiles() as $offset => $filename) {
+            $cmd .= ' '.$offset.'>"'.$filename.'"';
+        }
+
+        return $cmd;
+    }
+
+    /**
+     * Ensures the process is running or terminated, throws a LogicException if the process has a not started.
+     *
+     * @throws LogicException if the process has not run
+     */
+    private function requireProcessIsStarted(string $functionName): void
+    {
+        if (!$this->isStarted()) {
+            throw new LogicException(sprintf('Process must be started before calling "%s()".', $functionName));
+        }
+    }
+
+    /**
+     * Ensures the process is terminated, throws a LogicException if the process has a status different than "terminated".
+     *
+     * @throws LogicException if the process is not yet terminated
+     */
+    private function requireProcessIsTerminated(string $functionName): void
+    {
+        if (!$this->isTerminated()) {
+            throw new LogicException(sprintf('Process must be terminated before calling "%s()".', $functionName));
+        }
+    }
+
+    /**
+     * Escapes a string to be used as a shell argument.
+     */
+    private function escapeArgument(?string $argument): string
+    {
+        if ('' === $argument || null === $argument) {
+            return '""';
+        }
+        if ('\\' !== \DIRECTORY_SEPARATOR) {
+            return "'".str_replace("'", "'\\''", $argument)."'";
+        }
+        if (str_contains($argument, "\0")) {
+            $argument = str_replace("\0", '?', $argument);
+        }
+        if (!preg_match('/[\/()%!^"<>&|\s]/', $argument)) {
+            return $argument;
+        }
+        $argument = preg_replace('/(\\\\+)$/', '$1$1', $argument);
+
+        return '"'.str_replace(['"', '^', '%', '!', "\n"], ['""', '"^^"', '"^%"', '"^!"', '!LF!'], $argument).'"';
+    }
+
+    private function replacePlaceholders(string $commandline, array $env): string
+    {
+        return preg_replace_callback('/"\$\{:([_a-zA-Z]++[_a-zA-Z0-9]*+)\}"/', function ($matches) use ($commandline, $env) {
+            if (!isset($env[$matches[1]]) || false === $env[$matches[1]]) {
+                throw new InvalidArgumentException(sprintf('Command line is missing a value for parameter "%s": ', $matches[1]).$commandline);
+            }
+
+            return $this->escapeArgument($env[$matches[1]]);
+        }, $commandline);
+    }
+
+    private function getDefaultEnv(): array
+    {
+        $env = getenv();
+        $env = ('\\' === \DIRECTORY_SEPARATOR ? array_intersect_ukey($env, $_SERVER, 'strcasecmp') : array_intersect_key($env, $_SERVER)) ?: $env;
+
+        return $_ENV + ('\\' === \DIRECTORY_SEPARATOR ? array_diff_ukey($env, $_ENV, 'strcasecmp') : $env);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/ProcessUtils.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/ProcessUtils.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/ProcessUtils.php	(revision 8435)
@@ -0,0 +1,64 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process;
+
+use Symfony\Component\Process\Exception\InvalidArgumentException;
+
+/**
+ * ProcessUtils is a bunch of utility methods.
+ *
+ * This class contains static methods only and is not meant to be instantiated.
+ *
+ * @author Martin HasoÅ <martin.hason@gmail.com>
+ */
+class ProcessUtils
+{
+    /**
+     * This class should not be instantiated.
+     */
+    private function __construct()
+    {
+    }
+
+    /**
+     * Validates and normalizes a Process input.
+     *
+     * @param string $caller The name of method call that validates the input
+     * @param mixed  $input  The input to validate
+     *
+     * @throws InvalidArgumentException In case the input is not valid
+     */
+    public static function validateInput(string $caller, mixed $input): mixed
+    {
+        if (null !== $input) {
+            if (\is_resource($input)) {
+                return $input;
+            }
+            if (\is_scalar($input)) {
+                return (string) $input;
+            }
+            if ($input instanceof Process) {
+                return $input->getIterator($input::ITER_SKIP_ERR);
+            }
+            if ($input instanceof \Iterator) {
+                return $input;
+            }
+            if ($input instanceof \Traversable) {
+                return new \IteratorIterator($input);
+            }
+
+            throw new InvalidArgumentException(sprintf('"%s" only accepts strings, Traversable objects or stream resources.', $caller));
+        }
+
+        return $input;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/README.md	(revision 8435)
@@ -0,0 +1,13 @@
+Process Component
+=================
+
+The Process component executes commands in sub-processes.
+
+Resources
+---------
+
+ * [Documentation](https://symfony.com/doc/current/components/process.html)
+ * [Contributing](https://symfony.com/doc/current/contributing/index.html)
+ * [Report issues](https://github.com/symfony/symfony/issues) and
+   [send Pull Requests](https://github.com/symfony/symfony/pulls)
+   in the [main Symfony repository](https://github.com/symfony/symfony)
Index: /mods/mod_rechnungen/lib/vendor/symfony/process/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/process/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/process/composer.json	(revision 8435)
@@ -0,0 +1,28 @@
+{
+    "name": "symfony/process",
+    "type": "library",
+    "description": "Executes commands in sub-processes",
+    "keywords": [],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Fabien Potencier",
+            "email": "fabien@symfony.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=8.1"
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Component\\Process\\": "" },
+        "exclude-from-classmap": [
+            "/Tests/"
+        ]
+    },
+    "minimum-stability": "dev"
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/CHANGELOG.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/CHANGELOG.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/CHANGELOG.md	(revision 8435)
@@ -0,0 +1,5 @@
+CHANGELOG
+=========
+
+The changelog is maintained for all Symfony contracts at the following URL:
+https://github.com/symfony/contracts/blob/main/CHANGELOG.md
Index: /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/LICENSE	(revision 8435)
@@ -0,0 +1,19 @@
+Copyright (c) 2018-present Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/LocaleAwareInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/LocaleAwareInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/LocaleAwareInterface.php	(revision 8435)
@@ -0,0 +1,29 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Translation;
+
+interface LocaleAwareInterface
+{
+    /**
+     * Sets the current locale.
+     *
+     * @return void
+     *
+     * @throws \InvalidArgumentException If the locale contains invalid characters
+     */
+    public function setLocale(string $locale);
+
+    /**
+     * Returns the current locale.
+     */
+    public function getLocale(): string;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/README.md	(revision 8435)
@@ -0,0 +1,9 @@
+Symfony Translation Contracts
+=============================
+
+A set of abstractions extracted out of the Symfony components.
+
+Can be used to build on semantics that the Symfony components proved useful and
+that already have battle tested implementations.
+
+See https://github.com/symfony/contracts/blob/main/README.md for more information.
Index: /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/Test/TranslatorTest.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/Test/TranslatorTest.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/Test/TranslatorTest.php	(revision 8435)
@@ -0,0 +1,385 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Translation\Test;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Contracts\Translation\TranslatorInterface;
+use Symfony\Contracts\Translation\TranslatorTrait;
+
+/**
+ * Test should cover all languages mentioned on http://translate.sourceforge.net/wiki/l10n/pluralforms
+ * and Plural forms mentioned on http://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms.
+ *
+ * See also https://developer.mozilla.org/en/Localization_and_Plurals which mentions 15 rules having a maximum of 6 forms.
+ * The mozilla code is also interesting to check for.
+ *
+ * As mentioned by chx http://drupal.org/node/1273968 we can cover all by testing number from 0 to 199
+ *
+ * The goal to cover all languages is to far fetched so this test case is smaller.
+ *
+ * @author Clemens Tolboom clemens@build2be.nl
+ */
+class TranslatorTest extends TestCase
+{
+    private string $defaultLocale;
+
+    protected function setUp(): void
+    {
+        $this->defaultLocale = \Locale::getDefault();
+        \Locale::setDefault('en');
+    }
+
+    protected function tearDown(): void
+    {
+        \Locale::setDefault($this->defaultLocale);
+    }
+
+    public function getTranslator(): TranslatorInterface
+    {
+        return new class() implements TranslatorInterface {
+            use TranslatorTrait;
+        };
+    }
+
+    /**
+     * @dataProvider getTransTests
+     */
+    public function testTrans($expected, $id, $parameters)
+    {
+        $translator = $this->getTranslator();
+
+        $this->assertEquals($expected, $translator->trans($id, $parameters));
+    }
+
+    /**
+     * @dataProvider getTransChoiceTests
+     */
+    public function testTransChoiceWithExplicitLocale($expected, $id, $number)
+    {
+        $translator = $this->getTranslator();
+
+        $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number]));
+    }
+
+    /**
+     * @requires extension intl
+     *
+     * @dataProvider getTransChoiceTests
+     */
+    public function testTransChoiceWithDefaultLocale($expected, $id, $number)
+    {
+        $translator = $this->getTranslator();
+
+        $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number]));
+    }
+
+    /**
+     * @dataProvider getTransChoiceTests
+     */
+    public function testTransChoiceWithEnUsPosix($expected, $id, $number)
+    {
+        $translator = $this->getTranslator();
+        $translator->setLocale('en_US_POSIX');
+
+        $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number]));
+    }
+
+    public function testGetSetLocale()
+    {
+        $translator = $this->getTranslator();
+
+        $this->assertEquals('en', $translator->getLocale());
+    }
+
+    /**
+     * @requires extension intl
+     */
+    public function testGetLocaleReturnsDefaultLocaleIfNotSet()
+    {
+        $translator = $this->getTranslator();
+
+        \Locale::setDefault('pt_BR');
+        $this->assertEquals('pt_BR', $translator->getLocale());
+
+        \Locale::setDefault('en');
+        $this->assertEquals('en', $translator->getLocale());
+    }
+
+    public static function getTransTests()
+    {
+        return [
+            ['Symfony is great!', 'Symfony is great!', []],
+            ['Symfony is awesome!', 'Symfony is %what%!', ['%what%' => 'awesome']],
+        ];
+    }
+
+    public static function getTransChoiceTests()
+    {
+        return [
+            ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0],
+            ['There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1],
+            ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10],
+            ['There are 0 apples', 'There is 1 apple|There are %count% apples', 0],
+            ['There is 1 apple', 'There is 1 apple|There are %count% apples', 1],
+            ['There are 10 apples', 'There is 1 apple|There are %count% apples', 10],
+            // custom validation messages may be coded with a fixed value
+            ['There are 2 apples', 'There are 2 apples', 2],
+        ];
+    }
+
+    /**
+     * @dataProvider getInterval
+     */
+    public function testInterval($expected, $number, $interval)
+    {
+        $translator = $this->getTranslator();
+
+        $this->assertEquals($expected, $translator->trans($interval.' foo|[1,Inf[ bar', ['%count%' => $number]));
+    }
+
+    public static function getInterval()
+    {
+        return [
+            ['foo', 3, '{1,2, 3 ,4}'],
+            ['bar', 10, '{1,2, 3 ,4}'],
+            ['bar', 3, '[1,2]'],
+            ['foo', 1, '[1,2]'],
+            ['foo', 2, '[1,2]'],
+            ['bar', 1, ']1,2['],
+            ['bar', 2, ']1,2['],
+            ['foo', log(0), '[-Inf,2['],
+            ['foo', -log(0), '[-2,+Inf]'],
+        ];
+    }
+
+    /**
+     * @dataProvider getChooseTests
+     */
+    public function testChoose($expected, $id, $number, $locale = null)
+    {
+        $translator = $this->getTranslator();
+
+        $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number], null, $locale));
+    }
+
+    public function testReturnMessageIfExactlyOneStandardRuleIsGiven()
+    {
+        $translator = $this->getTranslator();
+
+        $this->assertEquals('There are two apples', $translator->trans('There are two apples', ['%count%' => 2]));
+    }
+
+    /**
+     * @dataProvider getNonMatchingMessages
+     */
+    public function testThrowExceptionIfMatchingMessageCannotBeFound($id, $number)
+    {
+        $translator = $this->getTranslator();
+
+        $this->expectException(\InvalidArgumentException::class);
+
+        $translator->trans($id, ['%count%' => $number]);
+    }
+
+    public static function getNonMatchingMessages()
+    {
+        return [
+            ['{0} There are no apples|{1} There is one apple', 2],
+            ['{1} There is one apple|]1,Inf] There are %count% apples', 0],
+            ['{1} There is one apple|]2,Inf] There are %count% apples', 2],
+            ['{0} There are no apples|There is one apple', 2],
+        ];
+    }
+
+    public static function getChooseTests()
+    {
+        return [
+            ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0],
+            ['There are no apples', '{0}     There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0],
+            ['There are no apples', '{0}There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0],
+
+            ['There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1],
+
+            ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10],
+            ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf]There are %count% apples', 10],
+            ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf]     There are %count% apples', 10],
+
+            ['There are 0 apples', 'There is one apple|There are %count% apples', 0],
+            ['There is one apple', 'There is one apple|There are %count% apples', 1],
+            ['There are 10 apples', 'There is one apple|There are %count% apples', 10],
+
+            ['There are 0 apples', 'one: There is one apple|more: There are %count% apples', 0],
+            ['There is one apple', 'one: There is one apple|more: There are %count% apples', 1],
+            ['There are 10 apples', 'one: There is one apple|more: There are %count% apples', 10],
+
+            ['There are no apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 0],
+            ['There is one apple', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 1],
+            ['There are 10 apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 10],
+
+            ['', '{0}|{1} There is one apple|]1,Inf] There are %count% apples', 0],
+            ['', '{0} There are no apples|{1}|]1,Inf] There are %count% apples', 1],
+
+            // Indexed only tests which are Gettext PoFile* compatible strings.
+            ['There are 0 apples', 'There is one apple|There are %count% apples', 0],
+            ['There is one apple', 'There is one apple|There are %count% apples', 1],
+            ['There are 2 apples', 'There is one apple|There are %count% apples', 2],
+
+            // Tests for float numbers
+            ['There is almost one apple', '{0} There are no apples|]0,1[ There is almost one apple|{1} There is one apple|[1,Inf] There is more than one apple', 0.7],
+            ['There is one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1],
+            ['There is more than one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1.7],
+            ['There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0],
+            ['There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0.0],
+            ['There are no apples', '{0.0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0],
+
+            // Test texts with new-lines
+            // with double-quotes and \n in id & double-quotes and actual newlines in text
+            ["This is a text with a\n            new-line in it. Selector = 0.", '{0}This is a text with a
+            new-line in it. Selector = 0.|{1}This is a text with a
+            new-line in it. Selector = 1.|[1,Inf]This is a text with a
+            new-line in it. Selector > 1.', 0],
+            // with double-quotes and \n in id and single-quotes and actual newlines in text
+            ["This is a text with a\n            new-line in it. Selector = 1.", '{0}This is a text with a
+            new-line in it. Selector = 0.|{1}This is a text with a
+            new-line in it. Selector = 1.|[1,Inf]This is a text with a
+            new-line in it. Selector > 1.', 1],
+            ["This is a text with a\n            new-line in it. Selector > 1.", '{0}This is a text with a
+            new-line in it. Selector = 0.|{1}This is a text with a
+            new-line in it. Selector = 1.|[1,Inf]This is a text with a
+            new-line in it. Selector > 1.', 5],
+            // with double-quotes and id split across lines
+            ['This is a text with a
+            new-line in it. Selector = 1.', '{0}This is a text with a
+            new-line in it. Selector = 0.|{1}This is a text with a
+            new-line in it. Selector = 1.|[1,Inf]This is a text with a
+            new-line in it. Selector > 1.', 1],
+            // with single-quotes and id split across lines
+            ['This is a text with a
+            new-line in it. Selector > 1.', '{0}This is a text with a
+            new-line in it. Selector = 0.|{1}This is a text with a
+            new-line in it. Selector = 1.|[1,Inf]This is a text with a
+            new-line in it. Selector > 1.', 5],
+            // with single-quotes and \n in text
+            ['This is a text with a\nnew-line in it. Selector = 0.', '{0}This is a text with a\nnew-line in it. Selector = 0.|{1}This is a text with a\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\nnew-line in it. Selector > 1.', 0],
+            // with double-quotes and id split across lines
+            ["This is a text with a\nnew-line in it. Selector = 1.", "{0}This is a text with a\nnew-line in it. Selector = 0.|{1}This is a text with a\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\nnew-line in it. Selector > 1.", 1],
+            // escape pipe
+            ['This is a text with | in it. Selector = 0.', '{0}This is a text with || in it. Selector = 0.|{1}This is a text with || in it. Selector = 1.', 0],
+            // Empty plural set (2 plural forms) from a .PO file
+            ['', '|', 1],
+            // Empty plural set (3 plural forms) from a .PO file
+            ['', '||', 1],
+
+            // Floating values
+            ['1.5 liters', '%count% liter|%count% liters', 1.5],
+            ['1.5 litre', '%count% litre|%count% litres', 1.5, 'fr'],
+
+            // Negative values
+            ['-1 degree', '%count% degree|%count% degrees', -1],
+            ['-1 degrÃ©', '%count% degrÃ©|%count% degrÃ©s', -1],
+            ['-1.5 degrees', '%count% degree|%count% degrees', -1.5],
+            ['-1.5 degrÃ©', '%count% degrÃ©|%count% degrÃ©s', -1.5, 'fr'],
+            ['-2 degrees', '%count% degree|%count% degrees', -2],
+            ['-2 degrÃ©s', '%count% degrÃ©|%count% degrÃ©s', -2],
+        ];
+    }
+
+    /**
+     * @dataProvider failingLangcodes
+     */
+    public function testFailedLangcodes($nplural, $langCodes)
+    {
+        $matrix = $this->generateTestData($langCodes);
+        $this->validateMatrix($nplural, $matrix, false);
+    }
+
+    /**
+     * @dataProvider successLangcodes
+     */
+    public function testLangcodes($nplural, $langCodes)
+    {
+        $matrix = $this->generateTestData($langCodes);
+        $this->validateMatrix($nplural, $matrix);
+    }
+
+    /**
+     * This array should contain all currently known langcodes.
+     *
+     * As it is impossible to have this ever complete we should try as hard as possible to have it almost complete.
+     */
+    public static function successLangcodes(): array
+    {
+        return [
+            ['1', ['ay', 'bo', 'cgg', 'dz', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky']],
+            ['2', ['nl', 'fr', 'en', 'de', 'de_GE', 'hy', 'hy_AM', 'en_US_POSIX']],
+            ['3', ['be', 'bs', 'cs', 'hr']],
+            ['4', ['cy', 'mt', 'sl']],
+            ['6', ['ar']],
+        ];
+    }
+
+    /**
+     * This array should be at least empty within the near future.
+     *
+     * This both depends on a complete list trying to add above as understanding
+     * the plural rules of the current failing languages.
+     *
+     * @return array with nplural together with langcodes
+     */
+    public static function failingLangcodes(): array
+    {
+        return [
+            ['1', ['fa']],
+            ['2', ['jbo']],
+            ['3', ['cbs']],
+            ['4', ['gd', 'kw']],
+            ['5', ['ga']],
+        ];
+    }
+
+    /**
+     * We validate only on the plural coverage. Thus the real rules is not tested.
+     *
+     * @param string $nplural Plural expected
+     * @param array  $matrix  Containing langcodes and their plural index values
+     */
+    protected function validateMatrix(string $nplural, array $matrix, bool $expectSuccess = true)
+    {
+        foreach ($matrix as $langCode => $data) {
+            $indexes = array_flip($data);
+            if ($expectSuccess) {
+                $this->assertCount($nplural, $indexes, "Langcode '$langCode' has '$nplural' plural forms.");
+            } else {
+                $this->assertNotEquals((int) $nplural, \count($indexes), "Langcode '$langCode' has '$nplural' plural forms.");
+            }
+        }
+    }
+
+    protected function generateTestData($langCodes)
+    {
+        $translator = new class() {
+            use TranslatorTrait {
+                getPluralizationRule as public;
+            }
+        };
+
+        $matrix = [];
+        foreach ($langCodes as $langCode) {
+            for ($count = 0; $count < 200; ++$count) {
+                $plural = $translator->getPluralizationRule($count, $langCode);
+                $matrix[$langCode][$count] = $plural;
+            }
+        }
+
+        return $matrix;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/TranslatableInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/TranslatableInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/TranslatableInterface.php	(revision 8435)
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Translation;
+
+/**
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+interface TranslatableInterface
+{
+    public function trans(TranslatorInterface $translator, ?string $locale = null): string;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/TranslatorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/TranslatorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/TranslatorInterface.php	(revision 8435)
@@ -0,0 +1,68 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Translation;
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface TranslatorInterface
+{
+    /**
+     * Translates the given message.
+     *
+     * When a number is provided as a parameter named "%count%", the message is parsed for plural
+     * forms and a translation is chosen according to this number using the following rules:
+     *
+     * Given a message with different plural translations separated by a
+     * pipe (|), this method returns the correct portion of the message based
+     * on the given number, locale and the pluralization rules in the message
+     * itself.
+     *
+     * The message supports two different types of pluralization rules:
+     *
+     * interval: {0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples
+     * indexed:  There is one apple|There are %count% apples
+     *
+     * The indexed solution can also contain labels (e.g. one: There is one apple).
+     * This is purely for making the translations more clear - it does not
+     * affect the functionality.
+     *
+     * The two methods can also be mixed:
+     *     {0} There are no apples|one: There is one apple|more: There are %count% apples
+     *
+     * An interval can represent a finite set of numbers:
+     *  {1,2,3,4}
+     *
+     * An interval can represent numbers between two numbers:
+     *  [1, +Inf]
+     *  ]-1,2[
+     *
+     * The left delimiter can be [ (inclusive) or ] (exclusive).
+     * The right delimiter can be [ (exclusive) or ] (inclusive).
+     * Beside numbers, you can use -Inf and +Inf for the infinite.
+     *
+     * @see https://en.wikipedia.org/wiki/ISO_31-11
+     *
+     * @param string      $id         The message id (may also be an object that can be cast to string)
+     * @param array       $parameters An array of parameters for the message
+     * @param string|null $domain     The domain for the message or null to use the default
+     * @param string|null $locale     The locale or null to use the default
+     *
+     * @throws \InvalidArgumentException If the locale contains invalid characters
+     */
+    public function trans(string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string;
+
+    /**
+     * Returns the default locale.
+     */
+    public function getLocale(): string;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/TranslatorTrait.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/TranslatorTrait.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/TranslatorTrait.php	(revision 8435)
@@ -0,0 +1,225 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Translation;
+
+use Symfony\Component\Translation\Exception\InvalidArgumentException;
+
+/**
+ * A trait to help implement TranslatorInterface and LocaleAwareInterface.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+trait TranslatorTrait
+{
+    private ?string $locale = null;
+
+    /**
+     * @return void
+     */
+    public function setLocale(string $locale)
+    {
+        $this->locale = $locale;
+    }
+
+    public function getLocale(): string
+    {
+        return $this->locale ?: (class_exists(\Locale::class) ? \Locale::getDefault() : 'en');
+    }
+
+    public function trans(?string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string
+    {
+        if (null === $id || '' === $id) {
+            return '';
+        }
+
+        if (!isset($parameters['%count%']) || !is_numeric($parameters['%count%'])) {
+            return strtr($id, $parameters);
+        }
+
+        $number = (float) $parameters['%count%'];
+        $locale = $locale ?: $this->getLocale();
+
+        $parts = [];
+        if (preg_match('/^\|++$/', $id)) {
+            $parts = explode('|', $id);
+        } elseif (preg_match_all('/(?:\|\||[^\|])++/', $id, $matches)) {
+            $parts = $matches[0];
+        }
+
+        $intervalRegexp = <<<'EOF'
+/^(?P<interval>
+    ({\s*
+        (\-?\d+(\.\d+)?[\s*,\s*\-?\d+(\.\d+)?]*)
+    \s*})
+
+        |
+
+    (?P<left_delimiter>[\[\]])
+        \s*
+        (?P<left>-Inf|\-?\d+(\.\d+)?)
+        \s*,\s*
+        (?P<right>\+?Inf|\-?\d+(\.\d+)?)
+        \s*
+    (?P<right_delimiter>[\[\]])
+)\s*(?P<message>.*?)$/xs
+EOF;
+
+        $standardRules = [];
+        foreach ($parts as $part) {
+            $part = trim(str_replace('||', '|', $part));
+
+            // try to match an explicit rule, then fallback to the standard ones
+            if (preg_match($intervalRegexp, $part, $matches)) {
+                if ($matches[2]) {
+                    foreach (explode(',', $matches[3]) as $n) {
+                        if ($number == $n) {
+                            return strtr($matches['message'], $parameters);
+                        }
+                    }
+                } else {
+                    $leftNumber = '-Inf' === $matches['left'] ? -\INF : (float) $matches['left'];
+                    $rightNumber = is_numeric($matches['right']) ? (float) $matches['right'] : \INF;
+
+                    if (('[' === $matches['left_delimiter'] ? $number >= $leftNumber : $number > $leftNumber)
+                        && (']' === $matches['right_delimiter'] ? $number <= $rightNumber : $number < $rightNumber)
+                    ) {
+                        return strtr($matches['message'], $parameters);
+                    }
+                }
+            } elseif (preg_match('/^\w+\:\s*(.*?)$/', $part, $matches)) {
+                $standardRules[] = $matches[1];
+            } else {
+                $standardRules[] = $part;
+            }
+        }
+
+        $position = $this->getPluralizationRule($number, $locale);
+
+        if (!isset($standardRules[$position])) {
+            // when there's exactly one rule given, and that rule is a standard
+            // rule, use this rule
+            if (1 === \count($parts) && isset($standardRules[0])) {
+                return strtr($standardRules[0], $parameters);
+            }
+
+            $message = sprintf('Unable to choose a translation for "%s" with locale "%s" for value "%d". Double check that this translation has the correct plural options (e.g. "There is one apple|There are %%count%% apples").', $id, $locale, $number);
+
+            if (class_exists(InvalidArgumentException::class)) {
+                throw new InvalidArgumentException($message);
+            }
+
+            throw new \InvalidArgumentException($message);
+        }
+
+        return strtr($standardRules[$position], $parameters);
+    }
+
+    /**
+     * Returns the plural position to use for the given locale and number.
+     *
+     * The plural rules are derived from code of the Zend Framework (2010-09-25),
+     * which is subject to the new BSD license (http://framework.zend.com/license/new-bsd).
+     * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+     */
+    private function getPluralizationRule(float $number, string $locale): int
+    {
+        $number = abs($number);
+
+        return match ('pt_BR' !== $locale && 'en_US_POSIX' !== $locale && \strlen($locale) > 3 ? substr($locale, 0, strrpos($locale, '_')) : $locale) {
+            'af',
+            'bn',
+            'bg',
+            'ca',
+            'da',
+            'de',
+            'el',
+            'en',
+            'en_US_POSIX',
+            'eo',
+            'es',
+            'et',
+            'eu',
+            'fa',
+            'fi',
+            'fo',
+            'fur',
+            'fy',
+            'gl',
+            'gu',
+            'ha',
+            'he',
+            'hu',
+            'is',
+            'it',
+            'ku',
+            'lb',
+            'ml',
+            'mn',
+            'mr',
+            'nah',
+            'nb',
+            'ne',
+            'nl',
+            'nn',
+            'no',
+            'oc',
+            'om',
+            'or',
+            'pa',
+            'pap',
+            'ps',
+            'pt',
+            'so',
+            'sq',
+            'sv',
+            'sw',
+            'ta',
+            'te',
+            'tk',
+            'ur',
+            'zu' => (1 == $number) ? 0 : 1,
+            'am',
+            'bh',
+            'fil',
+            'fr',
+            'gun',
+            'hi',
+            'hy',
+            'ln',
+            'mg',
+            'nso',
+            'pt_BR',
+            'ti',
+            'wa' => ($number < 2) ? 0 : 1,
+            'be',
+            'bs',
+            'hr',
+            'ru',
+            'sh',
+            'sr',
+            'uk' => ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2),
+            'cs',
+            'sk' => (1 == $number) ? 0 : ((($number >= 2) && ($number <= 4)) ? 1 : 2),
+            'ga' => (1 == $number) ? 0 : ((2 == $number) ? 1 : 2),
+            'lt' => ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2),
+            'sl' => (1 == $number % 100) ? 0 : ((2 == $number % 100) ? 1 : (((3 == $number % 100) || (4 == $number % 100)) ? 2 : 3)),
+            'mk' => (1 == $number % 10) ? 0 : 1,
+            'mt' => (1 == $number) ? 0 : (((0 == $number) || (($number % 100 > 1) && ($number % 100 < 11))) ? 1 : ((($number % 100 > 10) && ($number % 100 < 20)) ? 2 : 3)),
+            'lv' => (0 == $number) ? 0 : (((1 == $number % 10) && (11 != $number % 100)) ? 1 : 2),
+            'pl' => (1 == $number) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 1 : 2),
+            'cy' => (1 == $number) ? 0 : ((2 == $number) ? 1 : (((8 == $number) || (11 == $number)) ? 2 : 3)),
+            'ro' => (1 == $number) ? 0 : (((0 == $number) || (($number % 100 > 0) && ($number % 100 < 20))) ? 1 : 2),
+            'ar' => (0 == $number) ? 0 : ((1 == $number) ? 1 : ((2 == $number) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : 5)))),
+            default => 0,
+        };
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/translation-contracts/composer.json	(revision 8435)
@@ -0,0 +1,37 @@
+{
+    "name": "symfony/translation-contracts",
+    "type": "library",
+    "description": "Generic abstractions related to translation",
+    "keywords": ["abstractions", "contracts", "decoupling", "interfaces", "interoperability", "standards"],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Nicolas Grekas",
+            "email": "p@tchwork.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=8.1"
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Contracts\\Translation\\": "" },
+        "exclude-from-classmap": [
+            "/Test/"
+        ]
+    },
+    "minimum-stability": "dev",
+    "extra": {
+        "branch-alias": {
+            "dev-main": "3.5-dev"
+        },
+        "thanks": {
+            "name": "symfony/contracts",
+            "url": "https://github.com/symfony/contracts"
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Attribute/HasNamedArguments.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Attribute/HasNamedArguments.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Attribute/HasNamedArguments.php	(revision 8435)
@@ -0,0 +1,17 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Attribute;
+
+#[\Attribute(\Attribute::TARGET_METHOD)]
+final class HasNamedArguments
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/CHANGELOG.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/CHANGELOG.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/CHANGELOG.md	(revision 8435)
@@ -0,0 +1,415 @@
+CHANGELOG
+=========
+
+6.4
+---
+
+ * Add `is_valid` function to the `Expression` constraint, its behavior is the same as `ValidatorInterface::validate`
+ * Allow single integer for the `versions` option of the `Uuid` constraint
+ * Allow single constraint to be passed to the `constraints` option of the `When` constraint
+ * Deprecate Doctrine annotations support in favor of native attributes
+ * Deprecate `ValidatorBuilder::setDoctrineAnnotationReader()`
+ * Deprecate `ValidatorBuilder::addDefaultDoctrineAnnotationReader()`
+ * Add `number`, `finite-number` and `finite-float` types to `Type` constraint
+ * Add the `withSeconds` option to the `Time` constraint that allows to pass time without seconds
+ * Deprecate `ValidatorBuilder::enableAnnotationMapping()`, use `ValidatorBuilder::enableAttributeMapping()` instead
+ * Deprecate `ValidatorBuilder::disableAnnotationMapping()`, use `ValidatorBuilder::disableAttributeMapping()` instead
+ * Deprecate `AnnotationLoader`, use `AttributeLoader` instead
+ * Add `GroupProviderInterface` to implement validation group providers outside the underlying class
+
+6.3
+---
+
+ * Add method `getConstraint()` to `ConstraintViolationInterface`
+ * Add `Uuid::TIME_BASED_VERSIONS` to match that a UUID being validated embeds a timestamp
+ * Add the `pattern` parameter in violations of the `Regex` constraint
+ * Add a `NoSuspiciousCharacters` constraint to validate a string is not a spoofing attempt
+ * Add a `PasswordStrength` constraint to check the strength of a password
+ * Add the `countUnit` option to the `Length` constraint to allow counting the string length either by code points (like before, now the default setting `Length::COUNT_CODEPOINTS`), bytes (`Length::COUNT_BYTES`) or graphemes (`Length::COUNT_GRAPHEMES`)
+ * Add the `filenameMaxLength` option to the `File` constraint
+ * Add the `exclude` option to the `Cascade` constraint
+ * Add the `value_length` parameter to `Length` constraint
+ * Allow to disable the translation domain for `ConstraintViolationInterface` messages
+
+6.2
+---
+
+ * Add option `Email::VALIDATION_MODE_HTML5_ALLOW_NO_TLD` with "html5-allow-no-tld" e-mail validation mode, to match with the W3C official specification
+ * Add method `getCause()` to `ConstraintViolationInterface`
+ * Add the `When` constraint and validator
+ * Deprecate the "loose" e-mail validation mode, use "html5" instead
+ * Add the `negate` option to the `Expression` constraint, to inverse the logic of the violation's creation
+ * Add the `extensions` option to the `File` constraint as an alternative to `mimeTypes` which checks the mime type of the file, its extension, and the consistency between them
+ * Add padding for enhanced privacy to the `NotCompromisedPasswordValidator`
+
+6.1
+---
+
+ * Add the `fields` option to the `Unique` constraint, to define which collection keys should be checked for uniqueness
+ * Deprecate `Constraint::$errorNames`, use `Constraint::ERROR_NAMES` instead
+ * Deprecate constraint `ExpressionLanguageSyntax`, use `ExpressionSyntax` instead
+ * Add method `__toString()` to `ConstraintViolationInterface` & `ConstraintViolationListInterface`
+ * Allow creating constraints with required arguments
+ * Add the `match` option to the `Choice` constraint
+
+6.0
+---
+
+ * Remove the `allowEmptyString` option from the `Length` constraint
+ * Remove the `NumberConstraintTrait` trait
+ * `ValidatorBuilder::enableAnnotationMapping()` does not accept a Doctrine annotation reader anymore
+ * `ValidatorBuilder::enableAnnotationMapping()` won't automatically setup a Doctrine annotation reader anymore
+
+5.4
+---
+
+ * Add a `Cidr` constraint to validate CIDR notations
+ * Add a `CssColor` constraint to validate CSS colors
+ * Add support for `ConstraintViolationList::createFromMessage()`
+ * Add error's uid to `Count` and `Length` constraints with "exactly" option enabled
+
+5.3
+---
+
+ * Add the `normalizer` option to the `Unique` constraint
+ * Add `Validation::createIsValidCallable()` that returns true/false instead of throwing exceptions
+
+5.2.0
+-----
+
+ * added a `Cascade` constraint to ease validating nested typed object properties
+ * deprecated the `allowEmptyString` option of the `Length` constraint
+
+   Before:
+
+   ```php
+   use Symfony\Component\Validator\Constraints as Assert;
+
+   /**
+    * @Assert\Length(min=5, allowEmptyString=true)
+    */
+   ```
+
+   After:
+
+   ```php
+   use Symfony\Component\Validator\Constraints as Assert;
+
+   /**
+    * @Assert\AtLeastOneOf({
+    *     @Assert\Blank(),
+    *     @Assert\Length(min=5)
+    * })
+    */
+   ```
+ * added the `Isin` constraint and validator
+ * added the `ULID` constraint and validator
+ * added support for UUIDv6 in `Uuid` constraint
+ * enabled the validator to load constraints from PHP attributes
+ * deprecated the `NumberConstraintTrait` trait
+ * deprecated setting or creating a Doctrine annotation reader via `ValidatorBuilder::enableAnnotationMapping()`, pass `true` as first parameter and additionally call `setDoctrineAnnotationReader()` or `addDefaultDoctrineAnnotationReader()` to set up the annotation reader
+
+5.1.0
+-----
+
+ * Add `AtLeastOneOf` constraint that is considered to be valid if at least one of the nested constraints is valid
+ * added the `Hostname` constraint and validator
+ * added the `alpha3` option to the `Country` and `Language` constraints
+ * allow to define a reusable set of constraints by extending the `Compound` constraint
+ * added `Sequentially` constraint, to sequentially validate a set of constraints (any violation raised will prevent further validation of the nested constraints)
+ * added the `divisibleBy` option to the `Count` constraint
+ * added the `ExpressionLanguageSyntax` constraint
+
+5.0.0
+-----
+
+ * an `ExpressionLanguage` instance or null must be passed as the first argument of `ExpressionValidator::__construct()`
+ * removed the `checkDNS` and `dnsMessage` options of the `Url` constraint
+ * removed the `checkMX`, `checkHost` and `strict` options of the `Email` constraint
+ * removed support for validating instances of `\DateTimeInterface` in `DateTimeValidator`, `DateValidator` and `TimeValidator`
+ * removed support for using the `Bic`, `Country`, `Currency`, `Language` and `Locale` constraints without `symfony/intl`
+ * removed support for using the `Email` constraint without `egulias/email-validator`
+ * removed support for using the `Expression` constraint without `symfony/expression-language`
+ * changed default value of `canonicalize` option of `Locale` constraint to `true`
+ * removed `ValidatorBuilderInterface`
+ * passing a null message when instantiating a `ConstraintViolation` is not allowed
+ * changed the default value of `Length::$allowEmptyString` to `false` and made it optional
+ * removed `Symfony\Component\Validator\Mapping\Cache\CacheInterface` in favor of PSR-6.
+ * removed `ValidatorBuilder::setMetadataCache`, use `ValidatorBuilder::setMappingCache` instead.
+
+4.4.0
+-----
+
+ * [BC BREAK] using null as `$classValidatorRegexp` value in `PropertyInfoLoader::__construct` will not enable auto-mapping for all classes anymore, use `'{.*}'` instead.
+ * added `EnableAutoMapping` and `DisableAutoMapping` constraints to enable or disable auto mapping for class or a property
+ * using anything else than a `string` as the code of a `ConstraintViolation` is deprecated, a `string` type-hint will
+   be added to the constructor of the `ConstraintViolation` class and to the `ConstraintViolationBuilder::setCode()`
+   method in 5.0
+ * deprecated passing an `ExpressionLanguage` instance as the second argument of `ExpressionValidator::__construct()`. Pass it as the first argument instead.
+ * added the `compared_value_path` parameter in violations when using any
+   comparison constraint with the `propertyPath` option.
+ * added support for checking an array of types in `TypeValidator`
+ * added a new `allowEmptyString` option to the `Length` constraint to allow rejecting empty strings when `min` is set, by setting it to `false`.
+ * Added new `minPropertyPath` and `maxPropertyPath` options
+   to `Range` constraint in order to get the value to compare
+   from an array or object
+ * added the `min_limit_path` and `max_limit_path` parameters in violations when using
+   `Range` constraint with respectively the `minPropertyPath` and
+   `maxPropertyPath` options
+ * added a new `notInRangeMessage` option to the `Range` constraint that will
+   be used in the violation builder when both `min` and `max` are not null
+ * added ability to use stringable objects as violation messages
+ * Overriding the methods `ConstraintValidatorTestCase::setUp()` and `ConstraintValidatorTestCase::tearDown()` without the `void` return-type is deprecated.
+ * deprecated `Symfony\Component\Validator\Mapping\Cache\CacheInterface` in favor of PSR-6.
+ * deprecated `ValidatorBuilder::setMetadataCache`, use `ValidatorBuilder::setMappingCache` instead.
+ * Marked the `ValidatorDataCollector` class as `@final`.
+
+4.3.0
+-----
+
+ * added `Timezone` constraint
+ * added `NotCompromisedPassword` constraint
+ * added options `iban` and `ibanPropertyPath` to Bic constraint
+ * added UATP cards support to `CardSchemeValidator`
+ * added option `allowNull` to NotBlank constraint
+ * added `Json` constraint
+ * added `Unique` constraint
+ * added a new `normalizer` option to the string constraints and to the `NotBlank` constraint
+ * added `Positive` constraint
+ * added `PositiveOrZero` constraint
+ * added `Negative` constraint
+ * added `NegativeOrZero` constraint
+
+4.2.0
+-----
+
+ * added a new `UnexpectedValueException` that can be thrown by constraint validators, these exceptions are caught by
+   the validator and are converted into constraint violations
+ * added `DivisibleBy` constraint
+ * decoupled from `symfony/translation` by using `Symfony\Contracts\Translation\TranslatorInterface`
+ * deprecated `ValidatorBuilderInterface`
+ * made `ValidatorBuilder::setTranslator()` final
+ * marked `format` the default option in `DateTime` constraint
+ * deprecated validating instances of `\DateTimeInterface` in `DateTimeValidator`, `DateValidator` and `TimeValidator`.
+ * deprecated using the `Bic`, `Country`, `Currency`, `Language` and `Locale` constraints without `symfony/intl`
+ * deprecated using the `Email` constraint without `egulias/email-validator`
+ * deprecated using the `Expression` constraint without `symfony/expression-language`
+
+4.1.0
+-----
+
+ * Deprecated the `checkDNS` and `dnsMessage` options of the `Url` constraint.
+ * added a `values` option to the `Expression` constraint
+ * Deprecated use of `Locale` constraint without setting `true` at "canonicalize" option, which will be the default value in 5.0
+
+4.0.0
+-----
+
+ * Setting the `strict` option of the `Choice` constraint to anything but `true`
+   is not supported anymore.
+ * removed the `DateTimeValidator::PATTERN` constant
+ * removed the `AbstractConstraintValidatorTest` class
+ * removed support for setting the `checkDNS` option of the `Url` constraint to `true`
+
+3.4.0
+-----
+
+ * added support for validation groups to the `Valid` constraint
+ * not setting the `strict` option of the `Choice` constraint to `true` is
+   deprecated and will throw an exception in Symfony 4.0
+ * setting the `checkDNS` option of the `Url` constraint to `true` is deprecated in favor of
+   the `Url::CHECK_DNS_TYPE_*` constants values and will throw an exception in Symfony 4.0
+ * added min/max amount of pixels check to `Image` constraint via `minPixels` and `maxPixels`
+ * added a new "propertyPath" option to comparison constraints in order to get the value to compare from an array or object
+
+3.3.0
+-----
+
+ * added `AddValidatorInitializersPass`
+ * added `AddConstraintValidatorsPass`
+ * added `ContainerConstraintValidatorFactory`
+
+3.2.0
+-----
+
+ * deprecated `Tests\Constraints\AbstractConstraintValidatorTest` in favor of `Test\ConstraintValidatorTestCase`
+ * added support for PHP constants in YAML configuration files
+
+3.1.0
+-----
+
+ * deprecated `DateTimeValidator::PATTERN` constant
+ * added a `format` option to the `DateTime` constraint
+
+2.8.0
+-----
+
+ * added the BIC (SWIFT-Code) validator
+
+2.7.0
+-----
+
+ * deprecated `DefaultTranslator` in favor of `Symfony\Component\Translation\IdentityTranslator`
+ * deprecated PHP7-incompatible constraints (Null, True, False) and related validators (NullValidator, TrueValidator, FalseValidator) in favor of their `Is`-prefixed equivalent
+
+2.6.0
+-----
+
+ * [BC BREAK] `FileValidator` disallow empty files
+ * [BC BREAK] `UserPasswordValidator` source message change
+ * [BC BREAK] added internal `ExecutionContextInterface::setConstraint()`
+ * added `ConstraintViolation::getConstraint()`
+ * [BC BREAK] The `ExpressionValidator` will now evaluate the Expression even when the property value is null or an empty string
+ * deprecated `ClassMetadata::hasMemberMetadatas()`
+ * deprecated `ClassMetadata::getMemberMetadatas()`
+ * deprecated `ClassMetadata::addMemberMetadata()`
+ * [BC BREAK] added `Mapping\MetadataInterface::getConstraints()`
+ * added generic "payload" option to all constraints for attaching domain-specific data
+ * [BC BREAK] added `ConstraintViolationBuilderInterface::setCause()`
+
+2.5.0
+-----
+
+ * deprecated `ApcCache` in favor of `DoctrineCache`
+ * added `DoctrineCache` to adapt any Doctrine cache
+ * `GroupSequence` now implements `ArrayAccess`, `Countable` and `Traversable`
+ * [BC BREAK] changed `ClassMetadata::getGroupSequence()` to return a `GroupSequence` instance instead of an array
+ * `Callback` can now be put onto properties (useful when you pass a closure to the constraint)
+ * deprecated `ClassBasedInterface`
+ * deprecated `MetadataInterface`
+ * deprecated `PropertyMetadataInterface`
+ * deprecated `PropertyMetadataContainerInterface`
+ * deprecated `Mapping\ElementMetadata`
+ * added `Mapping\MetadataInterface`
+ * added `Mapping\ClassMetadataInterface`
+ * added `Mapping\PropertyMetadataInterface`
+ * added `Mapping\GenericMetadata`
+ * added `Mapping\CascadingStrategy`
+ * added `Mapping\TraversalStrategy`
+ * deprecated `Mapping\ClassMetadata::accept()`
+ * deprecated `Mapping\MemberMetadata::accept()`
+ * removed array type hint of `Mapping\ClassMetadata::setGroupSequence()`
+ * deprecated `MetadataFactoryInterface`
+ * deprecated `Mapping\BlackholeMetadataFactory`
+ * deprecated `Mapping\ClassMetadataFactory`
+ * added `Mapping\Factory\MetadataFactoryInterface`
+ * added `Mapping\Factory\BlackHoleMetadataFactory`
+ * added `Mapping\Factory\LazyLoadingMetadataFactory`
+ * deprecated `ExecutionContextInterface`
+ * deprecated `ExecutionContext`
+ * deprecated `GlobalExecutionContextInterface`
+ * added `Context\ExecutionContextInterface`
+ * added `Context\ExecutionContext`
+ * added `Context\ExecutionContextFactoryInterface`
+ * added `Context\ExecutionContextFactory`
+ * deprecated `ValidatorInterface`
+ * deprecated `Validator`
+ * deprecated `ValidationVisitorInterface`
+ * deprecated `ValidationVisitor`
+ * added `Validator\ValidatorInterface`
+ * added `Validator\RecursiveValidator`
+ * added `Validator\ContextualValidatorInterface`
+ * added `Validator\RecursiveContextualValidator`
+ * added `Violation\ConstraintViolationBuilderInterface`
+ * added `Violation\ConstraintViolationBuilder`
+ * added `ConstraintViolation::getParameters()`
+ * added `ConstraintViolation::getPlural()`
+ * added `Constraints\Traverse`
+ * deprecated `$deep` property in `Constraints\Valid`
+ * added `ValidatorBuilderInterface::setApiVersion()`
+ * added `Validation::API_VERSION_2_4`
+ * added `Validation::API_VERSION_2_5`
+ * added `Exception\OutOfBoundsException`
+ * added `Exception\UnsupportedMetadataException`
+ * made `Exception\ValidatorException` extend `Exception\RuntimeException`
+ * added `Util\PropertyPath`
+ * made the PropertyAccess component an optional dependency
+ * deprecated `ValidatorBuilder::setPropertyAccessor()`
+ * deprecated `validate` and `validateValue` on `Validator\Context\ExecutionContext` use `getValidator()` together with `inContext()` instead
+
+2.4.0
+-----
+
+ * added a constraint the uses the expression language
+ * added `minRatio`, `maxRatio`, `allowSquare`, `allowLandscape`, and `allowPortrait` to Image validator
+
+2.3.29
+------
+
+ * fixed compatibility with PHP7 and up by introducing new constraints (IsNull, IsTrue, IsFalse) and related validators (IsNullValidator, IsTrueValidator, IsFalseValidator)
+
+2.3.0
+-----
+
+ * added the ISBN, ISSN, and IBAN validators
+ * copied the constraints `Optional` and `Required` to the
+   `Symfony\Component\Validator\Constraints\` namespace and deprecated the original
+   classes.
+ * added comparison validators (EqualTo, NotEqualTo, LessThan, LessThanOrEqualTo, GreaterThan, GreaterThanOrEqualTo, IdenticalTo, NotIdenticalTo)
+
+2.2.0
+-----
+
+ * added a CardScheme validator
+ * added a Luhn validator
+ * moved @api-tags from `Validator` to `ValidatorInterface`
+ * moved @api-tags from `ConstraintViolation` to the new `ConstraintViolationInterface`
+ * moved @api-tags from `ConstraintViolationList` to the new `ConstraintViolationListInterface`
+ * moved @api-tags from `ExecutionContext` to the new `ExecutionContextInterface`
+ * [BC BREAK] `ConstraintValidatorInterface::initialize` is now type hinted against `ExecutionContextInterface` instead of `ExecutionContext`
+ * [BC BREAK] changed the visibility of the properties in `Validator` from protected to private
+ * deprecated `ClassMetadataFactoryInterface` in favor of the new `MetadataFactoryInterface`
+ * deprecated `ClassMetadataFactory::getClassMetadata` in favor of `getMetadataFor`
+ * created `MetadataInterface`, `PropertyMetadataInterface`, `ClassBasedInterface` and `PropertyMetadataContainerInterface`
+ * deprecated `GraphWalker` in favor of the new `ValidationVisitorInterface`
+ * deprecated `ExecutionContext::addViolationAtPath`
+ * deprecated `ExecutionContext::addViolationAtSubPath` in favor of `ExecutionContextInterface::addViolationAt`
+ * deprecated `ExecutionContext::getCurrentClass` in favor of `ExecutionContextInterface::getClassName`
+ * deprecated `ExecutionContext::getCurrentProperty` in favor of `ExecutionContextInterface::getPropertyName`
+ * deprecated `ExecutionContext::getCurrentValue` in favor of `ExecutionContextInterface::getValue`
+ * deprecated `ExecutionContext::getGraphWalker` in favor of `ExecutionContextInterface::validate` and `ExecutionContextInterface::validateValue`
+ * improved `ValidatorInterface::validateValue` to accept arrays of constraints
+ * changed `ValidatorInterface::getMetadataFactory` to return a `MetadataFactoryInterface` instead of a `ClassMetadataFactoryInterface`
+ * removed `ClassMetadataFactoryInterface` type hint from `ValidatorBuilderInterface::setMetadataFactory`.
+   As of Symfony 2.3, this method will be typed against `MetadataFactoryInterface` instead.
+ * [BC BREAK] the switches `traverse` and `deep` in the `Valid` constraint and in `GraphWalker::walkReference`
+   are ignored for arrays now. Arrays are always traversed recursively.
+ * added dependency to Translation component
+ * violation messages are now translated with a TranslatorInterface implementation
+ * [BC BREAK] inserted argument `$message` in the constructor of `ConstraintViolation`
+ * [BC BREAK] inserted arguments `$translator` and `$translationDomain` in the constructor of `ExecutionContext`
+ * [BC BREAK] inserted arguments `$translator` and `$translationDomain` in the constructor of `GraphWalker`
+ * [BC BREAK] inserted arguments `$translator` and `$translationDomain` in the constructor of `ValidationVisitor`
+ * [BC BREAK] inserted arguments `$translator` and `$translationDomain` in the constructor of `Validator`
+ * [BC BREAK] added `setTranslator()` and `setTranslationDomain()` to `ValidatorBuilderInterface`
+ * improved the Validator to support pluralized messages by default
+ * [BC BREAK] changed the source of all pluralized messages in the translation files to the pluralized version
+ * added ExceptionInterface, BadMethodCallException and InvalidArgumentException
+
+2.1.0
+-----
+
+ * added support for `ctype_*` assertions in `TypeValidator`
+ * improved the ImageValidator with min width, max width, min height, and max height constraints
+ * added support for MIME with wildcard in FileValidator
+ * changed Collection validator to add "missing" and "extra" errors to
+   individual fields
+ * changed default value for `extraFieldsMessage` and `missingFieldsMessage`
+   in Collection constraint
+ * made ExecutionContext immutable
+ * deprecated Constraint methods `setMessage`, `getMessageTemplate` and
+   `getMessageParameters`
+ * added support for dynamic group sequences with the GroupSequenceProvider pattern
+ * [BC BREAK] ConstraintValidatorInterface method `isValid` has been renamed to
+   `validate`, its return value was dropped. ConstraintValidator still contains
+   `isValid` for BC
+ * [BC BREAK] collections in fields annotated with `Valid` are not traversed
+   recursively anymore by default. `Valid` contains a new property `deep`
+   which enables the BC behavior.
+ * added Count constraint
+ * added Length constraint
+ * added Range constraint
+ * deprecated the Min and Max constraints
+ * deprecated the MinLength and MaxLength constraints
+ * added Validation and ValidatorBuilderInterface
+ * deprecated ValidatorContext, ValidatorContextInterface and ValidatorFactory
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Command/DebugCommand.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Command/DebugCommand.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Command/DebugCommand.php	(revision 8435)
@@ -0,0 +1,253 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Command;
+
+use Symfony\Component\Console\Attribute\AsCommand;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Helper\Dumper;
+use Symfony\Component\Console\Helper\Table;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Style\SymfonyStyle;
+use Symfony\Component\Finder\Exception\DirectoryNotFoundException;
+use Symfony\Component\Finder\Finder;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Mapping\AutoMappingStrategy;
+use Symfony\Component\Validator\Mapping\CascadingStrategy;
+use Symfony\Component\Validator\Mapping\ClassMetadataInterface;
+use Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface;
+use Symfony\Component\Validator\Mapping\GenericMetadata;
+use Symfony\Component\Validator\Mapping\TraversalStrategy;
+
+/**
+ * A console command to debug Validators information.
+ *
+ * @author LoÃ¯c FrÃ©mont <lc.fremont@gmail.com>
+ */
+#[AsCommand(name: 'debug:validator', description: 'Display validation constraints for classes')]
+class DebugCommand extends Command
+{
+    private MetadataFactoryInterface $validator;
+
+    public function __construct(MetadataFactoryInterface $validator)
+    {
+        parent::__construct();
+
+        $this->validator = $validator;
+    }
+
+    /**
+     * @return void
+     */
+    protected function configure()
+    {
+        $this
+            ->addArgument('class', InputArgument::REQUIRED, 'A fully qualified class name or a path')
+            ->addOption('show-all', null, InputOption::VALUE_NONE, 'Show all classes even if they have no validation constraints')
+            ->setHelp(<<<'EOF'
+The <info>%command.name% 'App\Entity\Dummy'</info> command dumps the validators for the dummy class.
+
+The <info>%command.name% src/</info> command dumps the validators for the `src` directory.
+EOF
+            )
+        ;
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output): int
+    {
+        $class = $input->getArgument('class');
+
+        if (class_exists($class)) {
+            $this->dumpValidatorsForClass($input, $output, $class);
+
+            return 0;
+        }
+
+        try {
+            foreach ($this->getResourcesByPath($class) as $class) {
+                $this->dumpValidatorsForClass($input, $output, $class);
+            }
+        } catch (DirectoryNotFoundException) {
+            $io = new SymfonyStyle($input, $output);
+            $io->error(sprintf('Neither class nor path were found with "%s" argument.', $input->getArgument('class')));
+
+            return 1;
+        }
+
+        return 0;
+    }
+
+    private function dumpValidatorsForClass(InputInterface $input, OutputInterface $output, string $class): void
+    {
+        $io = new SymfonyStyle($input, $output);
+        $title = sprintf('<info>%s</info>', $class);
+        $rows = [];
+        $dump = new Dumper($output);
+
+        /** @var ClassMetadataInterface $classMetadata */
+        $classMetadata = $this->validator->getMetadataFor($class);
+
+        foreach ($this->getClassConstraintsData($classMetadata) as $data) {
+            $rows[] = [
+                '-',
+                $data['class'],
+                implode(', ', $data['groups']),
+                $dump($data['options']),
+            ];
+        }
+
+        foreach ($this->getConstrainedPropertiesData($classMetadata) as $propertyName => $constraintsData) {
+            foreach ($constraintsData as $data) {
+                $rows[] = [
+                    $propertyName,
+                    $data['class'],
+                    implode(', ', $data['groups']),
+                    $dump($data['options']),
+                ];
+            }
+        }
+
+        if (!$rows) {
+            if (false === $input->getOption('show-all')) {
+                return;
+            }
+
+            $io->section($title);
+            $io->text('No validators were found for this class.');
+
+            return;
+        }
+
+        $io->section($title);
+
+        $table = new Table($output);
+        $table->setHeaders(['Property', 'Name', 'Groups', 'Options']);
+        $table->setRows($rows);
+        $table->setColumnMaxWidth(3, 80);
+        $table->render();
+    }
+
+    private function getClassConstraintsData(ClassMetadataInterface $classMetadata): iterable
+    {
+        foreach ($classMetadata->getConstraints() as $constraint) {
+            yield [
+                'class' => $constraint::class,
+                'groups' => $constraint->groups,
+                'options' => $this->getConstraintOptions($constraint),
+            ];
+        }
+    }
+
+    private function getConstrainedPropertiesData(ClassMetadataInterface $classMetadata): array
+    {
+        $data = [];
+
+        foreach ($classMetadata->getConstrainedProperties() as $constrainedProperty) {
+            $data[$constrainedProperty] = $this->getPropertyData($classMetadata, $constrainedProperty);
+        }
+
+        return $data;
+    }
+
+    private function getPropertyData(ClassMetadataInterface $classMetadata, string $constrainedProperty): array
+    {
+        $data = [];
+
+        $propertyMetadata = $classMetadata->getPropertyMetadata($constrainedProperty);
+        foreach ($propertyMetadata as $metadata) {
+            $autoMapingStrategy = 'Not supported';
+            if ($metadata instanceof GenericMetadata) {
+                $autoMapingStrategy = match ($metadata->getAutoMappingStrategy()) {
+                    AutoMappingStrategy::ENABLED => 'Enabled',
+                    AutoMappingStrategy::DISABLED => 'Disabled',
+                    AutoMappingStrategy::NONE => 'None',
+                };
+            }
+            $traversalStrategy = 'None';
+            if (TraversalStrategy::TRAVERSE === $metadata->getTraversalStrategy()) {
+                $traversalStrategy = 'Traverse';
+            }
+            if (TraversalStrategy::IMPLICIT === $metadata->getTraversalStrategy()) {
+                $traversalStrategy = 'Implicit';
+            }
+
+            $data[] = [
+                'class' => 'property options',
+                'groups' => [],
+                'options' => [
+                    'cascadeStrategy' => CascadingStrategy::CASCADE === $metadata->getCascadingStrategy() ? 'Cascade' : 'None',
+                    'autoMappingStrategy' => $autoMapingStrategy,
+                    'traversalStrategy' => $traversalStrategy,
+                ],
+            ];
+            foreach ($metadata->getConstraints() as $constraint) {
+                $data[] = [
+                    'class' => $constraint::class,
+                    'groups' => $constraint->groups,
+                    'options' => $this->getConstraintOptions($constraint),
+                ];
+            }
+        }
+
+        return $data;
+    }
+
+    private function getConstraintOptions(Constraint $constraint): array
+    {
+        $options = [];
+
+        foreach (array_keys(get_object_vars($constraint)) as $propertyName) {
+            // Groups are dumped on a specific column.
+            if ('groups' === $propertyName) {
+                continue;
+            }
+
+            $options[$propertyName] = $constraint->$propertyName;
+        }
+
+        ksort($options);
+
+        return $options;
+    }
+
+    private function getResourcesByPath(string $path): array
+    {
+        $finder = new Finder();
+        $finder->files()->in($path)->name('*.php')->sortByName(true);
+        $classes = [];
+
+        foreach ($finder as $file) {
+            $fileContent = file_get_contents($file->getRealPath());
+
+            preg_match('/namespace (.+);/', $fileContent, $matches);
+
+            $namespace = $matches[1] ?? null;
+
+            if (!preg_match('/class +([^{ ]+)/', $fileContent, $matches)) {
+                // no class found
+                continue;
+            }
+
+            $className = trim($matches[1]);
+
+            if (null !== $namespace) {
+                $classes[] = $namespace.'\\'.$className;
+            } else {
+                $classes[] = $className;
+            }
+        }
+
+        return $classes;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraint.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraint.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraint.php	(revision 8435)
@@ -0,0 +1,321 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\InvalidArgumentException;
+use Symfony\Component\Validator\Exception\InvalidOptionsException;
+use Symfony\Component\Validator\Exception\MissingOptionsException;
+
+/**
+ * Contains the properties of a constraint definition.
+ *
+ * A constraint can be defined on a class, a property or a getter method.
+ * The Constraint class encapsulates all the configuration required for
+ * validating this class, property or getter result successfully.
+ *
+ * Constraint instances are immutable and serializable.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+abstract class Constraint
+{
+    /**
+     * The name of the group given to all constraints with no explicit group.
+     */
+    public const DEFAULT_GROUP = 'Default';
+
+    /**
+     * Marks a constraint that can be put onto classes.
+     */
+    public const CLASS_CONSTRAINT = 'class';
+
+    /**
+     * Marks a constraint that can be put onto properties.
+     */
+    public const PROPERTY_CONSTRAINT = 'property';
+
+    /**
+     * Maps error codes to the names of their constants.
+     *
+     * @var array<string, string>
+     */
+    protected const ERROR_NAMES = [];
+
+    /**
+     * @deprecated since Symfony 6.1, use protected const ERROR_NAMES instead
+     */
+    protected static $errorNames = [];
+
+    /**
+     * Domain-specific data attached to a constraint.
+     *
+     * @var mixed
+     */
+    public $payload;
+
+    /**
+     * The groups that the constraint belongs to.
+     *
+     * @var string[]
+     */
+    public $groups;
+
+    /**
+     * Returns the name of the given error code.
+     *
+     * @throws InvalidArgumentException If the error code does not exist
+     */
+    public static function getErrorName(string $errorCode): string
+    {
+        if (isset(static::ERROR_NAMES[$errorCode])) {
+            return static::ERROR_NAMES[$errorCode];
+        }
+
+        if (!isset(static::$errorNames[$errorCode])) {
+            throw new InvalidArgumentException(sprintf('The error code "%s" does not exist for constraint of type "%s".', $errorCode, static::class));
+        }
+
+        trigger_deprecation('symfony/validator', '6.1', 'The "%s::$errorNames" property is deprecated, use protected const ERROR_NAMES instead.', static::class);
+
+        return static::$errorNames[$errorCode];
+    }
+
+    /**
+     * Initializes the constraint with options.
+     *
+     * You should pass an associative array. The keys should be the names of
+     * existing properties in this class. The values should be the value for these
+     * properties.
+     *
+     * Alternatively you can override the method getDefaultOption() to return the
+     * name of an existing property. If no associative array is passed, this
+     * property is set instead.
+     *
+     * You can force that certain options are set by overriding
+     * getRequiredOptions() to return the names of these options. If any
+     * option is not set here, an exception is thrown.
+     *
+     * @param mixed    $options The options (as associative array)
+     *                          or the value for the default
+     *                          option (any other type)
+     * @param string[] $groups  An array of validation groups
+     * @param mixed    $payload Domain-specific data attached to a constraint
+     *
+     * @throws InvalidOptionsException       When you pass the names of non-existing
+     *                                       options
+     * @throws MissingOptionsException       When you don't pass any of the options
+     *                                       returned by getRequiredOptions()
+     * @throws ConstraintDefinitionException When you don't pass an associative
+     *                                       array, but getDefaultOption() returns
+     *                                       null
+     */
+    public function __construct(mixed $options = null, ?array $groups = null, mixed $payload = null)
+    {
+        unset($this->groups); // enable lazy initialization
+
+        $options = $this->normalizeOptions($options);
+        if (null !== $groups) {
+            $options['groups'] = $groups;
+        }
+        $options['payload'] = $payload ?? $options['payload'] ?? null;
+
+        foreach ($options as $name => $value) {
+            $this->$name = $value;
+        }
+    }
+
+    protected function normalizeOptions(mixed $options): array
+    {
+        $normalizedOptions = [];
+        $defaultOption = $this->getDefaultOption();
+        $invalidOptions = [];
+        $missingOptions = array_flip((array) $this->getRequiredOptions());
+        $knownOptions = get_class_vars(static::class);
+
+        if (\is_array($options) && isset($options['value']) && !property_exists($this, 'value')) {
+            if (null === $defaultOption) {
+                throw new ConstraintDefinitionException(sprintf('No default option is configured for constraint "%s".', static::class));
+            }
+
+            $options[$defaultOption] = $options['value'];
+            unset($options['value']);
+        }
+
+        if (\is_array($options)) {
+            reset($options);
+        }
+        if ($options && \is_array($options) && \is_string(key($options))) {
+            foreach ($options as $option => $value) {
+                if (\array_key_exists($option, $knownOptions)) {
+                    $normalizedOptions[$option] = $value;
+                    unset($missingOptions[$option]);
+                } else {
+                    $invalidOptions[] = $option;
+                }
+            }
+        } elseif (null !== $options && !(\is_array($options) && 0 === \count($options))) {
+            if (null === $defaultOption) {
+                throw new ConstraintDefinitionException(sprintf('No default option is configured for constraint "%s".', static::class));
+            }
+
+            if (\array_key_exists($defaultOption, $knownOptions)) {
+                $normalizedOptions[$defaultOption] = $options;
+                unset($missingOptions[$defaultOption]);
+            } else {
+                $invalidOptions[] = $defaultOption;
+            }
+        }
+
+        if (\count($invalidOptions) > 0) {
+            throw new InvalidOptionsException(sprintf('The options "%s" do not exist in constraint "%s".', implode('", "', $invalidOptions), static::class), $invalidOptions);
+        }
+
+        if (\count($missingOptions) > 0) {
+            throw new MissingOptionsException(sprintf('The options "%s" must be set for constraint "%s".', implode('", "', array_keys($missingOptions)), static::class), array_keys($missingOptions));
+        }
+
+        return $normalizedOptions;
+    }
+
+    /**
+     * Sets the value of a lazily initialized option.
+     *
+     * Corresponding properties are added to the object on first access. Hence
+     * this method will be called at most once per constraint instance and
+     * option name.
+     *
+     * @return void
+     *
+     * @throws InvalidOptionsException If an invalid option name is given
+     */
+    public function __set(string $option, mixed $value)
+    {
+        if ('groups' === $option) {
+            $this->groups = (array) $value;
+
+            return;
+        }
+
+        throw new InvalidOptionsException(sprintf('The option "%s" does not exist in constraint "%s".', $option, static::class), [$option]);
+    }
+
+    /**
+     * Returns the value of a lazily initialized option.
+     *
+     * Corresponding properties are added to the object on first access. Hence
+     * this method will be called at most once per constraint instance and
+     * option name.
+     *
+     * @throws InvalidOptionsException If an invalid option name is given
+     */
+    public function __get(string $option): mixed
+    {
+        if ('groups' === $option) {
+            $this->groups = [self::DEFAULT_GROUP];
+
+            return $this->groups;
+        }
+
+        throw new InvalidOptionsException(sprintf('The option "%s" does not exist in constraint "%s".', $option, static::class), [$option]);
+    }
+
+    public function __isset(string $option): bool
+    {
+        return 'groups' === $option;
+    }
+
+    /**
+     * Adds the given group if this constraint is in the Default group.
+     *
+     * @return void
+     */
+    public function addImplicitGroupName(string $group)
+    {
+        if (null === $this->groups && \array_key_exists('groups', (array) $this)) {
+            throw new \LogicException(sprintf('"%s::$groups" is set to null. Did you forget to call "%s::__construct()"?', static::class, self::class));
+        }
+
+        if (\in_array(self::DEFAULT_GROUP, $this->groups) && !\in_array($group, $this->groups)) {
+            $this->groups[] = $group;
+        }
+    }
+
+    /**
+     * Returns the name of the default option.
+     *
+     * Override this method to define a default option.
+     *
+     * @return string|null
+     *
+     * @see __construct()
+     */
+    public function getDefaultOption()
+    {
+        return null;
+    }
+
+    /**
+     * Returns the name of the required options.
+     *
+     * Override this method if you want to define required options.
+     *
+     * @return string[]
+     *
+     * @see __construct()
+     */
+    public function getRequiredOptions()
+    {
+        return [];
+    }
+
+    /**
+     * Returns the name of the class that validates this constraint.
+     *
+     * By default, this is the fully qualified name of the constraint class
+     * suffixed with "Validator". You can override this method to change that
+     * behavior.
+     *
+     * @return string
+     */
+    public function validatedBy()
+    {
+        return static::class.'Validator';
+    }
+
+    /**
+     * Returns whether the constraint can be put onto classes, properties or
+     * both.
+     *
+     * This method should return one or more of the constants
+     * Constraint::CLASS_CONSTRAINT and Constraint::PROPERTY_CONSTRAINT.
+     *
+     * @return string|string[] One or more constant values
+     */
+    public function getTargets()
+    {
+        return self::PROPERTY_CONSTRAINT;
+    }
+
+    /**
+     * Optimizes the serialized value to minimize storage space.
+     *
+     * @internal
+     */
+    public function __sleep(): array
+    {
+        // Initialize "groups" option if it is not set
+        $this->groups;
+
+        return array_keys(get_object_vars($this));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintValidator.php	(revision 8435)
@@ -0,0 +1,153 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+
+/**
+ * Base class for constraint validators.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+abstract class ConstraintValidator implements ConstraintValidatorInterface
+{
+    /**
+     * Whether to format {@link \DateTime} objects, either with the {@link \IntlDateFormatter}
+     * (if it is available) or as RFC-3339 dates ("Y-m-d H:i:s").
+     */
+    public const PRETTY_DATE = 1;
+
+    /**
+     * Whether to cast objects with a "__toString()" method to strings.
+     */
+    public const OBJECT_TO_STRING = 2;
+
+    /**
+     * @var ExecutionContextInterface
+     */
+    protected $context;
+
+    /**
+     * @return void
+     */
+    public function initialize(ExecutionContextInterface $context)
+    {
+        $this->context = $context;
+    }
+
+    /**
+     * Returns a string representation of the type of the value.
+     *
+     * This method should be used if you pass the type of a value as
+     * message parameter to a constraint violation. Note that such
+     * parameters should usually not be included in messages aimed at
+     * non-technical people.
+     */
+    protected function formatTypeOf(mixed $value): string
+    {
+        return get_debug_type($value);
+    }
+
+    /**
+     * Returns a string representation of the value.
+     *
+     * This method returns the equivalent PHP tokens for most scalar types
+     * (i.e. "false" for false, "1" for 1 etc.). Strings are always wrapped
+     * in double quotes ("). Objects, arrays and resources are formatted as
+     * "object", "array" and "resource". If the $format bitmask contains
+     * the PRETTY_DATE bit, then {@link \DateTime} objects will be formatted
+     * with the {@link \IntlDateFormatter}. If it is not available, they will be
+     * formatted as RFC-3339 dates ("Y-m-d H:i:s").
+     *
+     * Be careful when passing message parameters to a constraint violation
+     * that (may) contain objects, arrays or resources. These parameters
+     * should only be displayed for technical users. Non-technical users
+     * won't know what an "object", "array" or "resource" is and will be
+     * confused by the violation message.
+     *
+     * @param int $format A bitwise combination of the format constants in this class
+     */
+    protected function formatValue(mixed $value, int $format = 0): string
+    {
+        if (($format & self::PRETTY_DATE) && $value instanceof \DateTimeInterface) {
+            if (class_exists(\IntlDateFormatter::class)) {
+                $formatter = new \IntlDateFormatter(\Locale::getDefault(), \IntlDateFormatter::MEDIUM, \IntlDateFormatter::SHORT, 'UTC');
+
+                return $formatter->format(new \DateTimeImmutable(
+                    $value->format('Y-m-d H:i:s.u'),
+                    new \DateTimeZone('UTC')
+                ));
+            }
+
+            return $value->format('Y-m-d H:i:s');
+        }
+
+        if ($value instanceof \UnitEnum) {
+            return $value->name;
+        }
+
+        if (\is_object($value)) {
+            if (($format & self::OBJECT_TO_STRING) && $value instanceof \Stringable) {
+                return $value->__toString();
+            }
+
+            return 'object';
+        }
+
+        if (\is_array($value)) {
+            return 'array';
+        }
+
+        if (\is_string($value)) {
+            return '"'.$value.'"';
+        }
+
+        if (\is_resource($value)) {
+            return 'resource';
+        }
+
+        if (null === $value) {
+            return 'null';
+        }
+
+        if (false === $value) {
+            return 'false';
+        }
+
+        if (true === $value) {
+            return 'true';
+        }
+
+        return (string) $value;
+    }
+
+    /**
+     * Returns a string representation of a list of values.
+     *
+     * Each of the values is converted to a string using
+     * {@link formatValue()}. The values are then concatenated with commas.
+     *
+     * @param array $values A list of values
+     * @param int   $format A bitwise combination of the format
+     *                      constants in this class
+     *
+     * @see formatValue()
+     */
+    protected function formatValues(array $values, int $format = 0): string
+    {
+        foreach ($values as $key => $value) {
+            $values[$key] = $this->formatValue($value, $format);
+        }
+
+        return implode(', ', $values);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintValidatorFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintValidatorFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintValidatorFactory.php	(revision 8435)
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+use Symfony\Component\Validator\Constraints\ExpressionValidator;
+
+/**
+ * Default implementation of the ConstraintValidatorFactoryInterface.
+ *
+ * This enforces the convention that the validatedBy() method on any
+ * Constraint will return the class name of the ConstraintValidator that
+ * should validate the Constraint.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class ConstraintValidatorFactory implements ConstraintValidatorFactoryInterface
+{
+    protected $validators = [];
+
+    public function __construct(array $validators = [])
+    {
+        $this->validators = $validators;
+    }
+
+    public function getInstance(Constraint $constraint): ConstraintValidatorInterface
+    {
+        if ('validator.expression' === $name = $class = $constraint->validatedBy()) {
+            $class = ExpressionValidator::class;
+        }
+
+        return $this->validators[$name] ??= new $class();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintValidatorFactoryInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintValidatorFactoryInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintValidatorFactoryInterface.php	(revision 8435)
@@ -0,0 +1,25 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+/**
+ * Specifies an object able to return the correct ConstraintValidatorInterface
+ * instance given a Constraint object.
+ */
+interface ConstraintValidatorFactoryInterface
+{
+    /**
+     * Given a Constraint, this returns the ConstraintValidatorInterface
+     * object that should be used to verify its validity.
+     */
+    public function getInstance(Constraint $constraint): ConstraintValidatorInterface;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintValidatorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintValidatorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintValidatorInterface.php	(revision 8435)
@@ -0,0 +1,34 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+interface ConstraintValidatorInterface
+{
+    /**
+     * Initializes the constraint validator.
+     *
+     * @return void
+     */
+    public function initialize(ExecutionContextInterface $context);
+
+    /**
+     * Checks if the passed value is valid.
+     *
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint);
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintViolation.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintViolation.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintViolation.php	(revision 8435)
@@ -0,0 +1,144 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+/**
+ * Default implementation of {@ConstraintViolationInterface}.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class ConstraintViolation implements ConstraintViolationInterface
+{
+    private string|\Stringable $message;
+    private ?string $messageTemplate;
+    private array $parameters;
+    private ?int $plural;
+    private mixed $root;
+    private ?string $propertyPath;
+    private mixed $invalidValue;
+    private ?Constraint $constraint;
+    private ?string $code;
+    private mixed $cause;
+
+    /**
+     * Creates a new constraint violation.
+     *
+     * @param string|\Stringable $message         The violation message as a string or a stringable object
+     * @param string|null        $messageTemplate The raw violation message
+     * @param array              $parameters      The parameters to substitute in the
+     *                                            raw violation message
+     * @param mixed              $root            The value originally passed to the
+     *                                            validator
+     * @param string|null        $propertyPath    The property path from the root
+     *                                            value to the invalid value
+     * @param mixed              $invalidValue    The invalid value that caused this
+     *                                            violation
+     * @param int|null           $plural          The number for determining the plural
+     *                                            form when translating the message
+     * @param string|null        $code            The error code of the violation
+     * @param Constraint|null    $constraint      The constraint whose validation
+     *                                            caused the violation
+     * @param mixed              $cause           The cause of the violation
+     */
+    public function __construct(string|\Stringable $message, ?string $messageTemplate, array $parameters, mixed $root, ?string $propertyPath, mixed $invalidValue, ?int $plural = null, ?string $code = null, ?Constraint $constraint = null, mixed $cause = null)
+    {
+        $this->message = $message;
+        $this->messageTemplate = $messageTemplate;
+        $this->parameters = $parameters;
+        $this->plural = $plural;
+        $this->root = $root;
+        $this->propertyPath = $propertyPath;
+        $this->invalidValue = $invalidValue;
+        $this->constraint = $constraint;
+        $this->code = $code;
+        $this->cause = $cause;
+    }
+
+    public function __toString(): string
+    {
+        if (\is_object($this->root)) {
+            $class = 'Object('.$this->root::class.')';
+        } elseif (\is_array($this->root)) {
+            $class = 'Array';
+        } else {
+            $class = (string) $this->root;
+        }
+
+        $propertyPath = (string) $this->propertyPath;
+
+        if ('' !== $propertyPath && '[' !== $propertyPath[0] && '' !== $class) {
+            $class .= '.';
+        }
+
+        if (null !== ($code = $this->code) && '' !== $code) {
+            $code = ' (code '.$code.')';
+        }
+
+        return $class.$propertyPath.":\n    ".$this->getMessage().$code;
+    }
+
+    public function getMessageTemplate(): string
+    {
+        return (string) $this->messageTemplate;
+    }
+
+    public function getParameters(): array
+    {
+        return $this->parameters;
+    }
+
+    public function getPlural(): ?int
+    {
+        return $this->plural;
+    }
+
+    public function getMessage(): string|\Stringable
+    {
+        return $this->message;
+    }
+
+    public function getRoot(): mixed
+    {
+        return $this->root;
+    }
+
+    public function getPropertyPath(): string
+    {
+        return (string) $this->propertyPath;
+    }
+
+    public function getInvalidValue(): mixed
+    {
+        return $this->invalidValue;
+    }
+
+    /**
+     * Returns the constraint whose validation caused the violation.
+     */
+    public function getConstraint(): ?Constraint
+    {
+        return $this->constraint;
+    }
+
+    /**
+     * Returns the cause of the violation.
+     */
+    public function getCause(): mixed
+    {
+        return $this->cause;
+    }
+
+    public function getCode(): ?string
+    {
+        return $this->code;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintViolationInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintViolationInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintViolationInterface.php	(revision 8435)
@@ -0,0 +1,116 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+/**
+ * A violation of a constraint that happened during validation.
+ *
+ * For each constraint that fails during validation one or more violations are
+ * created. The violations store the violation message, the path to the failing
+ * element in the validation graph and the root element that was originally
+ * passed to the validator. For example, take the following graph:
+ *
+ *     (Person)---(firstName: string)
+ *          \
+ *       (address: Address)---(street: string)
+ *
+ * If the <tt>Person</tt> object is validated and validation fails for the
+ * "firstName" property, the generated violation has the <tt>Person</tt>
+ * instance as root and the property path "firstName". If validation fails
+ * for the "street" property of the related <tt>Address</tt> instance, the root
+ * element is still the person, but the property path is "address.street".
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @method Constraint|null getConstraint() Returns the constraint whose validation caused the violation. Not implementing it is deprecated since Symfony 6.3.
+ * @method mixed           getCause()      Returns the cause of the violation. Not implementing it is deprecated since Symfony 6.2.
+ * @method string          __toString()    Converts the violation into a string for debugging purposes. Not implementing it is deprecated since Symfony 6.1.
+ */
+interface ConstraintViolationInterface
+{
+    /**
+     * Returns the violation message.
+     */
+    public function getMessage(): string|\Stringable;
+
+    /**
+     * Returns the raw violation message.
+     *
+     * The raw violation message contains placeholders for the parameters
+     * returned by {@link getParameters}. Typically you'll pass the
+     * message template and parameters to a translation engine.
+     */
+    public function getMessageTemplate(): string;
+
+    /**
+     * Returns the parameters to be inserted into the raw violation message.
+     *
+     * @return array a possibly empty list of parameters indexed by the names
+     *               that appear in the message template
+     *
+     * @see getMessageTemplate()
+     */
+    public function getParameters(): array;
+
+    /**
+     * Returns a number for pluralizing the violation message.
+     *
+     * For example, the message template could have different translation based
+     * on a parameter "choices":
+     *
+     * <ul>
+     * <li>Please select exactly one entry. (choices=1)</li>
+     * <li>Please select two entries. (choices=2)</li>
+     * </ul>
+     *
+     * This method returns the value of the parameter for choosing the right
+     * pluralization form (in this case "choices").
+     */
+    public function getPlural(): ?int;
+
+    /**
+     * Returns the root element of the validation.
+     *
+     * @return mixed The value that was passed originally to the validator when
+     *               the validation was started. Because the validator traverses
+     *               the object graph, the value at which the violation occurs
+     *               is not necessarily the value that was originally validated.
+     */
+    public function getRoot(): mixed;
+
+    /**
+     * Returns the property path from the root element to the violation.
+     *
+     * @return string The property path indicates how the validator reached
+     *                the invalid value from the root element. If the root
+     *                element is a <tt>Person</tt> instance with a property
+     *                "address" that contains an <tt>Address</tt> instance
+     *                with an invalid property "street", the generated property
+     *                path is "address.street". Property access is denoted by
+     *                dots, while array access is denoted by square brackets,
+     *                for example "addresses[1].street".
+     */
+    public function getPropertyPath(): string;
+
+    /**
+     * Returns the value that caused the violation.
+     *
+     * @return mixed the invalid value that caused the validated constraint to
+     *               fail
+     */
+    public function getInvalidValue(): mixed;
+
+    /**
+     * Returns a machine-digestible error code for the violation.
+     */
+    public function getCode(): ?string;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintViolationList.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintViolationList.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintViolationList.php	(revision 8435)
@@ -0,0 +1,163 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+use Symfony\Component\Validator\Exception\OutOfBoundsException;
+
+/**
+ * Default implementation of {@ConstraintViolationListInterface}.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @implements \IteratorAggregate<int, ConstraintViolationInterface>
+ */
+class ConstraintViolationList implements \IteratorAggregate, ConstraintViolationListInterface
+{
+    /**
+     * @var list<ConstraintViolationInterface>
+     */
+    private array $violations = [];
+
+    /**
+     * Creates a new constraint violation list.
+     *
+     * @param iterable<mixed, ConstraintViolationInterface> $violations The constraint violations to add to the list
+     */
+    public function __construct(iterable $violations = [])
+    {
+        foreach ($violations as $violation) {
+            $this->add($violation);
+        }
+    }
+
+    public static function createFromMessage(string $message): self
+    {
+        $self = new self();
+        $self->add(new ConstraintViolation($message, '', [], null, '', null));
+
+        return $self;
+    }
+
+    public function __toString(): string
+    {
+        $string = '';
+
+        foreach ($this->violations as $violation) {
+            $string .= $violation."\n";
+        }
+
+        return $string;
+    }
+
+    /**
+     * @return void
+     */
+    public function add(ConstraintViolationInterface $violation)
+    {
+        $this->violations[] = $violation;
+    }
+
+    /**
+     * @return void
+     */
+    public function addAll(ConstraintViolationListInterface $otherList)
+    {
+        foreach ($otherList as $violation) {
+            $this->violations[] = $violation;
+        }
+    }
+
+    public function get(int $offset): ConstraintViolationInterface
+    {
+        if (!isset($this->violations[$offset])) {
+            throw new OutOfBoundsException(sprintf('The offset "%s" does not exist.', $offset));
+        }
+
+        return $this->violations[$offset];
+    }
+
+    public function has(int $offset): bool
+    {
+        return isset($this->violations[$offset]);
+    }
+
+    /**
+     * @return void
+     */
+    public function set(int $offset, ConstraintViolationInterface $violation)
+    {
+        $this->violations[$offset] = $violation;
+    }
+
+    /**
+     * @return void
+     */
+    public function remove(int $offset)
+    {
+        unset($this->violations[$offset]);
+    }
+
+    /**
+     * @return \ArrayIterator<int, ConstraintViolationInterface>
+     */
+    public function getIterator(): \ArrayIterator
+    {
+        return new \ArrayIterator($this->violations);
+    }
+
+    public function count(): int
+    {
+        return \count($this->violations);
+    }
+
+    public function offsetExists(mixed $offset): bool
+    {
+        return $this->has($offset);
+    }
+
+    public function offsetGet(mixed $offset): ConstraintViolationInterface
+    {
+        return $this->get($offset);
+    }
+
+    public function offsetSet(mixed $offset, mixed $violation): void
+    {
+        if (null === $offset) {
+            $this->add($violation);
+        } else {
+            $this->set($offset, $violation);
+        }
+    }
+
+    public function offsetUnset(mixed $offset): void
+    {
+        $this->remove($offset);
+    }
+
+    /**
+     * Creates iterator for errors with specific codes.
+     *
+     * @param string|string[] $codes The codes to find
+     */
+    public function findByCodes(string|array $codes): static
+    {
+        $codes = (array) $codes;
+        $violations = [];
+        foreach ($this as $violation) {
+            if (\in_array($violation->getCode(), $codes, true)) {
+                $violations[] = $violation;
+            }
+        }
+
+        return new static($violations);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintViolationListInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintViolationListInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/ConstraintViolationListInterface.php	(revision 8435)
@@ -0,0 +1,75 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+use Symfony\Component\Validator\Exception\OutOfBoundsException;
+
+/**
+ * A list of constraint violations.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @extends \ArrayAccess<int, ConstraintViolationInterface>
+ * @extends \Traversable<int, ConstraintViolationInterface>
+ *
+ * @method string __toString() Converts the violation into a string for debugging purposes. Not implementing it is deprecated since Symfony 6.1.
+ */
+interface ConstraintViolationListInterface extends \Traversable, \Countable, \ArrayAccess
+{
+    /**
+     * Adds a constraint violation to this list.
+     *
+     * @return void
+     */
+    public function add(ConstraintViolationInterface $violation);
+
+    /**
+     * Merges an existing violation list into this list.
+     *
+     * @return void
+     */
+    public function addAll(self $otherList);
+
+    /**
+     * Returns the violation at a given offset.
+     *
+     * @param int $offset The offset of the violation
+     *
+     * @throws OutOfBoundsException if the offset does not exist
+     */
+    public function get(int $offset): ConstraintViolationInterface;
+
+    /**
+     * Returns whether the given offset exists.
+     *
+     * @param int $offset The violation offset
+     */
+    public function has(int $offset): bool;
+
+    /**
+     * Sets a violation at a given offset.
+     *
+     * @param int $offset The violation offset
+     *
+     * @return void
+     */
+    public function set(int $offset, ConstraintViolationInterface $violation);
+
+    /**
+     * Removes a violation at a given offset.
+     *
+     * @param int $offset The offset to remove
+     *
+     * @return void
+     */
+    public function remove(int $offset);
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AbstractComparison.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AbstractComparison.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AbstractComparison.php	(revision 8435)
@@ -0,0 +1,61 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\PropertyAccess\PropertyAccess;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\LogicException;
+
+/**
+ * Used for the comparison of values.
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+abstract class AbstractComparison extends Constraint
+{
+    public $message;
+    public $value;
+    public $propertyPath;
+
+    public function __construct(mixed $value = null, ?string $propertyPath = null, ?string $message = null, ?array $groups = null, mixed $payload = null, array $options = [])
+    {
+        if (\is_array($value)) {
+            $options = array_merge($value, $options);
+        } elseif (null !== $value) {
+            $options['value'] = $value;
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->propertyPath = $propertyPath ?? $this->propertyPath;
+
+        if (null === $this->value && null === $this->propertyPath) {
+            throw new ConstraintDefinitionException(sprintf('The "%s" constraint requires either the "value" or "propertyPath" option to be set.', static::class));
+        }
+
+        if (null !== $this->value && null !== $this->propertyPath) {
+            throw new ConstraintDefinitionException(sprintf('The "%s" constraint requires only one of the "value" or "propertyPath" options to be set, not both.', static::class));
+        }
+
+        if (null !== $this->propertyPath && !class_exists(PropertyAccess::class)) {
+            throw new LogicException(sprintf('The "%s" constraint requires the Symfony PropertyAccess component to use the "propertyPath" option. Try running "composer require symfony/property-access".', static::class));
+        }
+    }
+
+    public function getDefaultOption(): ?string
+    {
+        return 'value';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php	(revision 8435)
@@ -0,0 +1,110 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException;
+use Symfony\Component\PropertyAccess\Exception\UninitializedPropertyException;
+use Symfony\Component\PropertyAccess\PropertyAccess;
+use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * Provides a base class for the validation of property comparisons.
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+abstract class AbstractComparisonValidator extends ConstraintValidator
+{
+    private ?PropertyAccessorInterface $propertyAccessor;
+
+    public function __construct(?PropertyAccessorInterface $propertyAccessor = null)
+    {
+        $this->propertyAccessor = $propertyAccessor;
+    }
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof AbstractComparison) {
+            throw new UnexpectedTypeException($constraint, AbstractComparison::class);
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        if ($path = $constraint->propertyPath) {
+            if (null === $object = $this->context->getObject()) {
+                return;
+            }
+
+            try {
+                $comparedValue = $this->getPropertyAccessor()->getValue($object, $path);
+            } catch (NoSuchPropertyException $e) {
+                throw new ConstraintDefinitionException(sprintf('Invalid property path "%s" provided to "%s" constraint: ', $path, get_debug_type($constraint)).$e->getMessage(), 0, $e);
+            } catch (UninitializedPropertyException) {
+                $comparedValue = null;
+            }
+        } else {
+            $comparedValue = $constraint->value;
+        }
+
+        // Convert strings to date-time objects if comparing to another date-time object
+        // This allows to compare with any date/time value supported by date-time constructors:
+        // https://php.net/datetime.formats
+        if (\is_string($comparedValue) && $value instanceof \DateTimeInterface) {
+            try {
+                $comparedValue = new $value($comparedValue);
+            } catch (\Exception) {
+                throw new ConstraintDefinitionException(sprintf('The compared value "%s" could not be converted to a "%s" instance in the "%s" constraint.', $comparedValue, get_debug_type($value), get_debug_type($constraint)));
+            }
+        }
+
+        if (!$this->compareValues($value, $comparedValue)) {
+            $violationBuilder = $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value, self::OBJECT_TO_STRING | self::PRETTY_DATE))
+                ->setParameter('{{ compared_value }}', $this->formatValue($comparedValue, self::OBJECT_TO_STRING | self::PRETTY_DATE))
+                ->setParameter('{{ compared_value_type }}', $this->formatTypeOf($comparedValue))
+                ->setCode($this->getErrorCode());
+
+            if (null !== $path) {
+                $violationBuilder->setParameter('{{ compared_value_path }}', $path);
+            }
+
+            $violationBuilder->addViolation();
+        }
+    }
+
+    private function getPropertyAccessor(): PropertyAccessorInterface
+    {
+        return $this->propertyAccessor ??= PropertyAccess::createPropertyAccessor();
+    }
+
+    /**
+     * Compares the two given values to find if their relationship is valid.
+     */
+    abstract protected function compareValues(mixed $value1, mixed $value2): bool;
+
+    /**
+     * Returns the error code used if the comparison fails.
+     */
+    protected function getErrorCode(): ?string
+    {
+        return null;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/All.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/All.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/All.php	(revision 8435)
@@ -0,0 +1,44 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class All extends Composite
+{
+    public $constraints = [];
+
+    public function __construct(mixed $constraints = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($constraints ?? [], $groups, $payload);
+    }
+
+    public function getDefaultOption(): ?string
+    {
+        return 'constraints';
+    }
+
+    public function getRequiredOptions(): array
+    {
+        return ['constraints'];
+    }
+
+    protected function getCompositeOption(): string
+    {
+        return 'constraints';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AllValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AllValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AllValidator.php	(revision 8435)
@@ -0,0 +1,49 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class AllValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof All) {
+            throw new UnexpectedTypeException($constraint, All::class);
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        if (!\is_array($value) && !$value instanceof \Traversable) {
+            throw new UnexpectedValueException($value, 'iterable');
+        }
+
+        $context = $this->context;
+
+        $validator = $context->getValidator()->inContext($context);
+
+        foreach ($value as $key => $element) {
+            $validator->atPath('['.$key.']')->validate($element, $constraint->constraints);
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AtLeastOneOf.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AtLeastOneOf.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AtLeastOneOf.php	(revision 8435)
@@ -0,0 +1,62 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author PrzemysÅaw Bogusz <przemyslaw.bogusz@tubotax.pl>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class AtLeastOneOf extends Composite
+{
+    public const AT_LEAST_ONE_OF_ERROR = 'f27e6d6c-261a-4056-b391-6673a623531c';
+
+    protected const ERROR_NAMES = [
+        self::AT_LEAST_ONE_OF_ERROR => 'AT_LEAST_ONE_OF_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $constraints = [];
+    public $message = 'This value should satisfy at least one of the following constraints:';
+    public $messageCollection = 'Each element of this collection should satisfy its own set of constraints.';
+    public $includeInternalMessages = true;
+
+    public function __construct(mixed $constraints = null, ?array $groups = null, mixed $payload = null, ?string $message = null, ?string $messageCollection = null, ?bool $includeInternalMessages = null)
+    {
+        parent::__construct($constraints ?? [], $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->messageCollection = $messageCollection ?? $this->messageCollection;
+        $this->includeInternalMessages = $includeInternalMessages ?? $this->includeInternalMessages;
+    }
+
+    public function getDefaultOption(): ?string
+    {
+        return 'constraints';
+    }
+
+    public function getRequiredOptions(): array
+    {
+        return ['constraints'];
+    }
+
+    protected function getCompositeOption(): string
+    {
+        return 'constraints';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AtLeastOneOfValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AtLeastOneOfValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/AtLeastOneOfValidator.php	(revision 8435)
@@ -0,0 +1,71 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author PrzemysÅaw Bogusz <przemyslaw.bogusz@tubotax.pl>
+ */
+class AtLeastOneOfValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof AtLeastOneOf) {
+            throw new UnexpectedTypeException($constraint, AtLeastOneOf::class);
+        }
+
+        $validator = $this->context->getValidator();
+
+        // Build a first violation to have the base message of the constraint translated
+        $baseMessageContext = clone $this->context;
+        $baseMessageContext->buildViolation($constraint->message)->addViolation();
+        $baseViolations = $baseMessageContext->getViolations();
+        $messages = [(string) $baseViolations->get(\count($baseViolations) - 1)->getMessage()];
+
+        foreach ($constraint->constraints as $key => $item) {
+            if (!\in_array($this->context->getGroup(), $item->groups, true)) {
+                continue;
+            }
+
+            $executionContext = clone $this->context;
+            $executionContext->setNode($value, $this->context->getObject(), $this->context->getMetadata(), $this->context->getPropertyPath());
+            $violations = $validator->inContext($executionContext)->validate($value, $item, $this->context->getGroup())->getViolations();
+
+            if (\count($this->context->getViolations()) === \count($violations)) {
+                return;
+            }
+
+            if ($constraint->includeInternalMessages) {
+                $message = ' ['.($key + 1).'] ';
+
+                if ($item instanceof All || $item instanceof Collection) {
+                    $message .= $constraint->messageCollection;
+                } else {
+                    $message .= $violations->get(\count($violations) - 1)->getMessage();
+                }
+
+                $messages[] = $message;
+            }
+        }
+
+        $this->context->buildViolation(implode('', $messages))
+            ->setCode(AtLeastOneOf::AT_LEAST_ONE_OF_ERROR)
+            ->addViolation()
+        ;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Bic.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Bic.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Bic.php	(revision 8435)
@@ -0,0 +1,75 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Intl\Countries;
+use Symfony\Component\PropertyAccess\PropertyAccess;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\LogicException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Michael Hirschler <michael.vhirsch@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Bic extends Constraint
+{
+    public const INVALID_LENGTH_ERROR = '66dad313-af0b-4214-8566-6c799be9789c';
+    public const INVALID_CHARACTERS_ERROR = 'f424c529-7add-4417-8f2d-4b656e4833e2';
+    public const INVALID_BANK_CODE_ERROR = '00559357-6170-4f29-aebd-d19330aa19cf';
+    public const INVALID_COUNTRY_CODE_ERROR = '1ce76f8d-3c1f-451c-9e62-fe9c3ed486ae';
+    public const INVALID_CASE_ERROR = '11884038-3312-4ae5-9d04-699f782130c7';
+    public const INVALID_IBAN_COUNTRY_CODE_ERROR = '29a2c3bb-587b-4996-b6f5-53081364cea5';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_LENGTH_ERROR => 'INVALID_LENGTH_ERROR',
+        self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR',
+        self::INVALID_BANK_CODE_ERROR => 'INVALID_BANK_CODE_ERROR',
+        self::INVALID_COUNTRY_CODE_ERROR => 'INVALID_COUNTRY_CODE_ERROR',
+        self::INVALID_CASE_ERROR => 'INVALID_CASE_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This is not a valid Business Identifier Code (BIC).';
+    public $ibanMessage = 'This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.';
+    public $iban;
+    public $ibanPropertyPath;
+
+    public function __construct(?array $options = null, ?string $message = null, ?string $iban = null, ?string $ibanPropertyPath = null, ?string $ibanMessage = null, ?array $groups = null, mixed $payload = null)
+    {
+        if (!class_exists(Countries::class)) {
+            throw new LogicException('The Intl component is required to use the Bic constraint. Try running "composer require symfony/intl".');
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->ibanMessage = $ibanMessage ?? $this->ibanMessage;
+        $this->iban = $iban ?? $this->iban;
+        $this->ibanPropertyPath = $ibanPropertyPath ?? $this->ibanPropertyPath;
+
+        if (null !== $this->iban && null !== $this->ibanPropertyPath) {
+            throw new ConstraintDefinitionException('The "iban" and "ibanPropertyPath" options of the Iban constraint cannot be used at the same time.');
+        }
+
+        if (null !== $this->ibanPropertyPath && !class_exists(PropertyAccess::class)) {
+            throw new LogicException(sprintf('The "symfony/property-access" component is required to use the "%s" constraint with the "ibanPropertyPath" option. Try running "composer require symfony/property-access".', self::class));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/BicValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/BicValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/BicValidator.php	(revision 8435)
@@ -0,0 +1,167 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Intl\Countries;
+use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException;
+use Symfony\Component\PropertyAccess\Exception\UninitializedPropertyException;
+use Symfony\Component\PropertyAccess\PropertyAccess;
+use Symfony\Component\PropertyAccess\PropertyAccessor;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\LogicException;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Michael Hirschler <michael.vhirsch@gmail.com>
+ *
+ * @see https://en.wikipedia.org/wiki/ISO_9362#Structure
+ */
+class BicValidator extends ConstraintValidator
+{
+    // Reference: https://www.iban.com/structure
+    private const BIC_COUNTRY_TO_IBAN_COUNTRY_MAP = [
+        // FR includes:
+        'GF' => 'FR', // French Guiana
+        'PF' => 'FR', // French Polynesia
+        'TF' => 'FR', // French Southern Territories
+        'GP' => 'FR', // Guadeloupe
+        'MQ' => 'FR', // Martinique
+        'YT' => 'FR', // Mayotte
+        'NC' => 'FR', // New Caledonia
+        'RE' => 'FR', // Reunion
+        'BL' => 'FR', // Saint Barthelemy
+        'MF' => 'FR', // Saint Martin (French part)
+        'PM' => 'FR', // Saint Pierre and Miquelon
+        'WF' => 'FR', // Wallis and Futuna Islands
+        // GB includes:
+        'JE' => 'GB', // Jersey
+        'IM' => 'GB', // Isle of Man
+        'GG' => 'GB', // Guernsey
+        'VG' => 'GB', // British Virgin Islands
+        // FI includes:
+        'AX' => 'FI', // Aland Islands
+        // ES includes:
+        'IC' => 'ES', // Canary Islands
+        'EA' => 'ES', // Ceuta and Melilla
+    ];
+
+    private ?PropertyAccessor $propertyAccessor;
+
+    public function __construct(?PropertyAccessor $propertyAccessor = null)
+    {
+        $this->propertyAccessor = $propertyAccessor;
+    }
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Bic) {
+            throw new UnexpectedTypeException($constraint, Bic::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $canonicalize = str_replace(' ', '', $value);
+
+        // the bic must be either 8 or 11 characters long
+        if (!\in_array(\strlen($canonicalize), [8, 11])) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Bic::INVALID_LENGTH_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        // must contain alphanumeric values only
+        if (!ctype_alnum($canonicalize)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Bic::INVALID_CHARACTERS_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        $bicCountryCode = substr($canonicalize, 4, 2);
+        if (!isset(self::BIC_COUNTRY_TO_IBAN_COUNTRY_MAP[$bicCountryCode]) && !Countries::exists($bicCountryCode)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Bic::INVALID_COUNTRY_CODE_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        // should contain uppercase characters only
+        if (strtoupper($canonicalize) !== $canonicalize) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Bic::INVALID_CASE_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        // check against an IBAN
+        $iban = $constraint->iban;
+        $path = $constraint->ibanPropertyPath;
+        if ($path && null !== $object = $this->context->getObject()) {
+            try {
+                $iban = $this->getPropertyAccessor()->getValue($object, $path);
+            } catch (NoSuchPropertyException $e) {
+                throw new ConstraintDefinitionException(sprintf('Invalid property path "%s" provided to "%s" constraint: ', $path, get_debug_type($constraint)).$e->getMessage(), 0, $e);
+            } catch (UninitializedPropertyException) {
+                $iban = null;
+            }
+        }
+        if (!$iban) {
+            return;
+        }
+        $ibanCountryCode = substr($iban, 0, 2);
+        if (ctype_alpha($ibanCountryCode) && !$this->bicAndIbanCountriesMatch($bicCountryCode, $ibanCountryCode)) {
+            $this->context->buildViolation($constraint->ibanMessage)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setParameter('{{ iban }}', $iban)
+                ->setCode(Bic::INVALID_IBAN_COUNTRY_CODE_ERROR)
+                ->addViolation();
+        }
+    }
+
+    private function getPropertyAccessor(): PropertyAccessor
+    {
+        if (null === $this->propertyAccessor) {
+            if (!class_exists(PropertyAccess::class)) {
+                throw new LogicException('Unable to use property path as the Symfony PropertyAccess component is not installed. Try running "composer require symfony/property-access".');
+            }
+            $this->propertyAccessor = PropertyAccess::createPropertyAccessor();
+        }
+
+        return $this->propertyAccessor;
+    }
+
+    private function bicAndIbanCountriesMatch(string $bicCountryCode, string $ibanCountryCode): bool
+    {
+        return $ibanCountryCode === $bicCountryCode || $ibanCountryCode === (self::BIC_COUNTRY_TO_IBAN_COUNTRY_MAP[$bicCountryCode] ?? null);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Blank.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Blank.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Blank.php	(revision 8435)
@@ -0,0 +1,44 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Blank extends Constraint
+{
+    public const NOT_BLANK_ERROR = '183ad2de-533d-4796-a439-6d3c3852b549';
+
+    protected const ERROR_NAMES = [
+        self::NOT_BLANK_ERROR => 'NOT_BLANK_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be blank.';
+
+    public function __construct(?array $options = null, ?string $message = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($options ?? [], $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/BlankValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/BlankValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/BlankValidator.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class BlankValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Blank) {
+            throw new UnexpectedTypeException($constraint, Blank::class);
+        }
+
+        if ('' !== $value && null !== $value) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Blank::NOT_BLANK_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Callback.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Callback.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Callback.php	(revision 8435)
@@ -0,0 +1,55 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"CLASS", "PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Callback extends Constraint
+{
+    /**
+     * @var string|callable
+     */
+    public $callback;
+
+    public function __construct(array|string|callable|null $callback = null, ?array $groups = null, mixed $payload = null, array $options = [])
+    {
+        // Invocation through annotations with an array parameter only
+        if (\is_array($callback) && 1 === \count($callback) && isset($callback['value'])) {
+            $callback = $callback['value'];
+        }
+
+        if (!\is_array($callback) || (!isset($callback['callback']) && !isset($callback['groups']) && !isset($callback['payload']))) {
+            $options['callback'] = $callback;
+        } else {
+            $options = array_merge($callback, $options);
+        }
+
+        parent::__construct($options, $groups, $payload);
+    }
+
+    public function getDefaultOption(): ?string
+    {
+        return 'callback';
+    }
+
+    public function getTargets(): string|array
+    {
+        return [self::CLASS_CONSTRAINT, self::PROPERTY_CONSTRAINT];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CallbackValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CallbackValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CallbackValidator.php	(revision 8435)
@@ -0,0 +1,61 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * Validator for Callback constraint.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class CallbackValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $object, Constraint $constraint)
+    {
+        if (!$constraint instanceof Callback) {
+            throw new UnexpectedTypeException($constraint, Callback::class);
+        }
+
+        $method = $constraint->callback;
+        if ($method instanceof \Closure) {
+            $method($object, $this->context, $constraint->payload);
+        } elseif (\is_array($method)) {
+            if (!\is_callable($method)) {
+                if (isset($method[0]) && \is_object($method[0])) {
+                    $method[0] = $method[0]::class;
+                }
+                throw new ConstraintDefinitionException(json_encode($method).' targeted by Callback constraint is not a valid callable.');
+            }
+
+            $method($object, $this->context, $constraint->payload);
+        } elseif (null !== $object) {
+            if (!method_exists($object, $method)) {
+                throw new ConstraintDefinitionException(sprintf('Method "%s" targeted by Callback constraint does not exist in class "%s".', $method, get_debug_type($object)));
+            }
+
+            $reflMethod = new \ReflectionMethod($object, $method);
+
+            if ($reflMethod->isStatic()) {
+                $reflMethod->invoke(null, $object, $this->context, $constraint->payload);
+            } else {
+                $reflMethod->invoke($object, $this->context, $constraint->payload);
+            }
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CardScheme.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CardScheme.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CardScheme.php	(revision 8435)
@@ -0,0 +1,79 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * Metadata for the CardSchemeValidator.
+ *
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Tim Nagel <t.nagel@infinite.net.au>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class CardScheme extends Constraint
+{
+    public const AMEX = 'AMEX';
+    public const CHINA_UNIONPAY = 'CHINA_UNIONPAY';
+    public const DINERS = 'DINERS';
+    public const DISCOVER = 'DISCOVER';
+    public const INSTAPAYMENT = 'INSTAPAYMENT';
+    public const JCB = 'JCB';
+    public const LASER = 'LASER';
+    public const MAESTRO = 'MAESTRO';
+    public const MASTERCARD = 'MASTERCARD';
+    public const MIR = 'MIR';
+    public const UATP = 'UATP';
+    public const VISA = 'VISA';
+
+    public const NOT_NUMERIC_ERROR = 'a2ad9231-e827-485f-8a1e-ef4d9a6d5c2e';
+    public const INVALID_FORMAT_ERROR = 'a8faedbf-1c2f-4695-8d22-55783be8efed';
+
+    protected const ERROR_NAMES = [
+        self::NOT_NUMERIC_ERROR => 'NOT_NUMERIC_ERROR',
+        self::INVALID_FORMAT_ERROR => 'INVALID_FORMAT_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'Unsupported card type or invalid card number.';
+    public $schemes;
+
+    public function __construct(array|string|null $schemes, ?string $message = null, ?array $groups = null, mixed $payload = null, array $options = [])
+    {
+        if (\is_array($schemes) && \is_string(key($schemes))) {
+            $options = array_merge($schemes, $options);
+        } else {
+            $options['value'] = $schemes;
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+
+    public function getDefaultOption(): ?string
+    {
+        return 'schemes';
+    }
+
+    public function getRequiredOptions(): array
+    {
+        return ['schemes'];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CardSchemeValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CardSchemeValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CardSchemeValidator.php	(revision 8435)
@@ -0,0 +1,134 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * Validates that a card number belongs to a specified scheme.
+ *
+ * @author Tim Nagel <t.nagel@infinite.net.au>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see https://en.wikipedia.org/wiki/Payment_card_number
+ * @see https://www.regular-expressions.info/creditcard.html
+ */
+class CardSchemeValidator extends ConstraintValidator
+{
+    protected $schemes = [
+        // American Express card numbers start with 34 or 37 and have 15 digits.
+        CardScheme::AMEX => [
+            '/^3[47][0-9]{13}$/',
+        ],
+        // China UnionPay cards start with 62 and have between 16 and 19 digits.
+        // Please note that these cards do not follow Luhn Algorithm as a checksum.
+        CardScheme::CHINA_UNIONPAY => [
+            '/^62[0-9]{14,17}$/',
+        ],
+        // Diners Club card numbers begin with 300 through 305, 36 or 38. All have 14 digits.
+        // There are Diners Club cards that begin with 5 and have 16 digits.
+        // These are a joint venture between Diners Club and MasterCard, and should be processed like a MasterCard.
+        CardScheme::DINERS => [
+            '/^3(?:0[0-5]|[68][0-9])[0-9]{11}$/',
+        ],
+        // Discover card numbers begin with 6011, 622126 through 622925, 644 through 649 or 65.
+        // All have 16 digits.
+        CardScheme::DISCOVER => [
+            '/^6011[0-9]{12}$/',
+            '/^64[4-9][0-9]{13}$/',
+            '/^65[0-9]{14}$/',
+            '/^622(12[6-9]|1[3-9][0-9]|[2-8][0-9][0-9]|91[0-9]|92[0-5])[0-9]{10}$/',
+        ],
+        // InstaPayment cards begin with 637 through 639 and have 16 digits.
+        CardScheme::INSTAPAYMENT => [
+            '/^63[7-9][0-9]{13}$/',
+        ],
+        // JCB cards beginning with 2131 or 1800 have 15 digits.
+        // JCB cards beginning with 35 have 16 digits.
+        CardScheme::JCB => [
+            '/^(?:2131|1800|35[0-9]{3})[0-9]{11}$/',
+        ],
+        // Laser cards begin with either 6304, 6706, 6709 or 6771 and have between 16 and 19 digits.
+        CardScheme::LASER => [
+            '/^(6304|670[69]|6771)[0-9]{12,15}$/',
+        ],
+        // Maestro international cards begin with 675900..675999 and have between 12 and 19 digits.
+        // Maestro UK cards begin with either 500000..509999 or 560000..699999 and have between 12 and 19 digits.
+        CardScheme::MAESTRO => [
+            '/^(6759[0-9]{2})[0-9]{6,13}$/',
+            '/^(50[0-9]{4})[0-9]{6,13}$/',
+            '/^5[6-9][0-9]{10,17}$/',
+            '/^6[0-9]{11,18}$/',
+        ],
+        // All MasterCard numbers start with the numbers 51 through 55. All have 16 digits.
+        // October 2016 MasterCard numbers can also start with 222100 through 272099.
+        CardScheme::MASTERCARD => [
+            '/^5[1-5][0-9]{14}$/',
+            '/^2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12})$/',
+        ],
+        // Payment system MIR numbers start with 220, then 1 digit from 0 to 4, then between 12 and 15 digits
+        CardScheme::MIR => [
+            '/^220[0-4][0-9]{12,15}$/',
+        ],
+        // All UATP card numbers start with a 1 and have a length of 15 digits.
+        CardScheme::UATP => [
+            '/^1[0-9]{14}$/',
+        ],
+        // All Visa card numbers start with a 4 and have a length of 13, 16, or 19 digits.
+        CardScheme::VISA => [
+            '/^4([0-9]{12}|[0-9]{15}|[0-9]{18})$/',
+        ],
+    ];
+
+    /**
+     * Validates a creditcard belongs to a specified scheme.
+     *
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof CardScheme) {
+            throw new UnexpectedTypeException($constraint, CardScheme::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!is_numeric($value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(CardScheme::NOT_NUMERIC_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        $schemes = array_flip((array) $constraint->schemes);
+        $schemeRegexes = array_intersect_key($this->schemes, $schemes);
+
+        foreach ($schemeRegexes as $regexes) {
+            foreach ($regexes as $regex) {
+                if (preg_match($regex, $value)) {
+                    return;
+                }
+            }
+        }
+
+        $this->context->buildViolation($constraint->message)
+            ->setParameter('{{ value }}', $this->formatValue($value))
+            ->setCode(CardScheme::INVALID_FORMAT_ERROR)
+            ->addViolation();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Cascade.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Cascade.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Cascade.php	(revision 8435)
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * @Annotation
+ * @Target({"CLASS"})
+ *
+ * @author Jules Pietri <jules@heahprod.com>
+ */
+#[\Attribute(\Attribute::TARGET_CLASS)]
+class Cascade extends Constraint
+{
+    public array $exclude = [];
+
+    public function __construct(array|string|null $exclude = null, ?array $options = null)
+    {
+        if (\is_array($exclude) && !array_is_list($exclude)) {
+            $options = array_merge($exclude, $options ?? []);
+        } else {
+            $this->exclude = array_flip((array) $exclude);
+        }
+
+        if (\is_array($options) && \array_key_exists('groups', $options)) {
+            throw new ConstraintDefinitionException(sprintf('The option "groups" is not supported by the constraint "%s".', __CLASS__));
+        }
+
+        parent::__construct($options);
+    }
+
+    public function getTargets(): string|array
+    {
+        return self::CLASS_CONSTRAINT;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Choice.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Choice.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Choice.php	(revision 8435)
@@ -0,0 +1,95 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Choice extends Constraint
+{
+    public const NO_SUCH_CHOICE_ERROR = '8e179f1b-97aa-4560-a02f-2a8b42e49df7';
+    public const TOO_FEW_ERROR = '11edd7eb-5872-4b6e-9f12-89923999fd0e';
+    public const TOO_MANY_ERROR = '9bd98e49-211c-433f-8630-fd1c2d0f08c3';
+
+    protected const ERROR_NAMES = [
+        self::NO_SUCH_CHOICE_ERROR => 'NO_SUCH_CHOICE_ERROR',
+        self::TOO_FEW_ERROR => 'TOO_FEW_ERROR',
+        self::TOO_MANY_ERROR => 'TOO_MANY_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $choices;
+    /** @var callable|string|null */
+    public $callback;
+    public $multiple = false;
+    public $strict = true;
+    public $min;
+    public $max;
+    public $message = 'The value you selected is not a valid choice.';
+    public $multipleMessage = 'One or more of the given values is invalid.';
+    public $minMessage = 'You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.';
+    public $maxMessage = 'You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.';
+    public bool $match = true;
+
+    public function getDefaultOption(): ?string
+    {
+        return 'choices';
+    }
+
+    public function __construct(
+        string|array $options = [],
+        ?array $choices = null,
+        callable|string|null $callback = null,
+        ?bool $multiple = null,
+        ?bool $strict = null,
+        ?int $min = null,
+        ?int $max = null,
+        ?string $message = null,
+        ?string $multipleMessage = null,
+        ?string $minMessage = null,
+        ?string $maxMessage = null,
+        ?array $groups = null,
+        mixed $payload = null,
+        ?bool $match = null,
+    ) {
+        if (\is_array($options) && $options && array_is_list($options)) {
+            $choices ??= $options;
+            $options = [];
+        }
+        if (null !== $choices) {
+            $options['value'] = $choices;
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->callback = $callback ?? $this->callback;
+        $this->multiple = $multiple ?? $this->multiple;
+        $this->strict = $strict ?? $this->strict;
+        $this->min = $min ?? $this->min;
+        $this->max = $max ?? $this->max;
+        $this->message = $message ?? $this->message;
+        $this->multipleMessage = $multipleMessage ?? $this->multipleMessage;
+        $this->minMessage = $minMessage ?? $this->minMessage;
+        $this->maxMessage = $maxMessage ?? $this->maxMessage;
+        $this->match = $match ?? $this->match;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ChoiceValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ChoiceValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ChoiceValidator.php	(revision 8435)
@@ -0,0 +1,110 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\RuntimeException;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * ChoiceValidator validates that the value is one of the expected values.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Florian Eckerstorfer <florian@eckerstorfer.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class ChoiceValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Choice) {
+            throw new UnexpectedTypeException($constraint, Choice::class);
+        }
+
+        if (!\is_array($constraint->choices) && !$constraint->callback) {
+            throw new ConstraintDefinitionException('Either "choices" or "callback" must be specified on constraint Choice.');
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        if ($constraint->multiple && !\is_array($value)) {
+            throw new UnexpectedValueException($value, 'array');
+        }
+
+        if ($constraint->callback) {
+            if (!\is_callable($choices = [$this->context->getObject(), $constraint->callback])
+                && !\is_callable($choices = [$this->context->getClassName(), $constraint->callback])
+                && !\is_callable($choices = $constraint->callback)
+            ) {
+                throw new ConstraintDefinitionException('The Choice constraint expects a valid callback.');
+            }
+            $choices = $choices();
+        } else {
+            $choices = $constraint->choices;
+        }
+
+        if (true !== $constraint->strict) {
+            throw new RuntimeException('The "strict" option of the Choice constraint should not be used.');
+        }
+
+        if ($constraint->multiple) {
+            foreach ($value as $_value) {
+                if ($constraint->match xor \in_array($_value, $choices, true)) {
+                    $this->context->buildViolation($constraint->multipleMessage)
+                        ->setParameter('{{ value }}', $this->formatValue($_value))
+                        ->setParameter('{{ choices }}', $this->formatValues($choices))
+                        ->setCode(Choice::NO_SUCH_CHOICE_ERROR)
+                        ->setInvalidValue($_value)
+                        ->addViolation();
+
+                    return;
+                }
+            }
+
+            $count = \count($value);
+
+            if (null !== $constraint->min && $count < $constraint->min) {
+                $this->context->buildViolation($constraint->minMessage)
+                    ->setParameter('{{ limit }}', $constraint->min)
+                    ->setPlural((int) $constraint->min)
+                    ->setCode(Choice::TOO_FEW_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+
+            if (null !== $constraint->max && $count > $constraint->max) {
+                $this->context->buildViolation($constraint->maxMessage)
+                    ->setParameter('{{ limit }}', $constraint->max)
+                    ->setPlural((int) $constraint->max)
+                    ->setCode(Choice::TOO_MANY_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+        } elseif ($constraint->match xor \in_array($value, $choices, true)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setParameter('{{ choices }}', $this->formatValues($choices))
+                ->setCode(Choice::NO_SUCH_CHOICE_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Cidr.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Cidr.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Cidr.php	(revision 8435)
@@ -0,0 +1,85 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * Validates that a value is a valid CIDR notation.
+ *
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Sorin Pop <popsorin15@gmail.com>
+ * @author Calin Bolea <calin.bolea@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Cidr extends Constraint
+{
+    public const INVALID_CIDR_ERROR = '5649e53a-5afb-47c5-a360-ffbab3be8567';
+    public const OUT_OF_RANGE_ERROR = 'b9f14a51-acbd-401a-a078-8c6b204ab32f';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_CIDR_ERROR => 'INVALID_CIDR_ERROR',
+        self::OUT_OF_RANGE_ERROR => 'OUT_OF_RANGE_VIOLATION',
+    ];
+
+    private const NET_MAXES = [
+        Ip::ALL => 128,
+        Ip::V4 => 32,
+        Ip::V6 => 128,
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $version = Ip::ALL;
+
+    public $message = 'This value is not a valid CIDR notation.';
+
+    public $netmaskRangeViolationMessage = 'The value of the netmask should be between {{ min }} and {{ max }}.';
+
+    public $netmaskMin = 0;
+
+    public $netmaskMax;
+
+    public function __construct(
+        ?array $options = null,
+        ?string $version = null,
+        ?int $netmaskMin = null,
+        ?int $netmaskMax = null,
+        ?string $message = null,
+        ?array $groups = null,
+        $payload = null
+    ) {
+        $this->version = $version ?? $options['version'] ?? $this->version;
+
+        if (!\array_key_exists($this->version, self::NET_MAXES)) {
+            throw new ConstraintDefinitionException(sprintf('The option "version" must be one of "%s".', implode('", "', array_keys(self::NET_MAXES))));
+        }
+
+        $this->netmaskMin = $netmaskMin ?? $options['netmaskMin'] ?? $this->netmaskMin;
+        $this->netmaskMax = $netmaskMax ?? $options['netmaskMax'] ?? self::NET_MAXES[$this->version];
+        $this->message = $message ?? $this->message;
+
+        unset($options['netmaskMin'], $options['netmaskMax'], $options['version']);
+
+        if ($this->netmaskMin < 0 || $this->netmaskMax > self::NET_MAXES[$this->version] || $this->netmaskMin > $this->netmaskMax) {
+            throw new ConstraintDefinitionException(sprintf('The netmask range must be between 0 and %d.', self::NET_MAXES[$this->version]));
+        }
+
+        parent::__construct($options, $groups, $payload);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CidrValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CidrValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CidrValidator.php	(revision 8435)
@@ -0,0 +1,77 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+class CidrValidator extends ConstraintValidator
+{
+    public function validate($value, Constraint $constraint): void
+    {
+        if (!$constraint instanceof Cidr) {
+            throw new UnexpectedTypeException($constraint, Cidr::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_string($value)) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $cidrParts = explode('/', $value, 2);
+
+        if (!isset($cidrParts[1])
+            || !ctype_digit($cidrParts[1])
+            || '' === $cidrParts[0]
+        ) {
+            $this->context
+                ->buildViolation($constraint->message)
+                ->setCode(Cidr::INVALID_CIDR_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        $ipAddress = $cidrParts[0];
+        $netmask = (int) $cidrParts[1];
+
+        $validV4 = Ip::V6 !== $constraint->version
+            && filter_var($ipAddress, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4)
+            && $netmask <= 32;
+
+        $validV6 = Ip::V4 !== $constraint->version
+            && filter_var($ipAddress, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV6);
+
+        if (!$validV4 && !$validV6) {
+            $this->context
+                ->buildViolation($constraint->message)
+                ->setCode(Cidr::INVALID_CIDR_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if ($netmask < $constraint->netmaskMin || $netmask > $constraint->netmaskMax) {
+            $this->context
+                ->buildViolation($constraint->netmaskRangeViolationMessage)
+                ->setParameter('{{ min }}', $constraint->netmaskMin)
+                ->setParameter('{{ max }}', $constraint->netmaskMax)
+                ->setCode(Cidr::OUT_OF_RANGE_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Collection.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Collection.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Collection.php	(revision 8435)
@@ -0,0 +1,119 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Collection extends Composite
+{
+    public const MISSING_FIELD_ERROR = '2fa2158c-2a7f-484b-98aa-975522539ff8';
+    public const NO_SUCH_FIELD_ERROR = '7703c766-b5d5-4cef-ace7-ae0dd82304e9';
+
+    protected const ERROR_NAMES = [
+        self::MISSING_FIELD_ERROR => 'MISSING_FIELD_ERROR',
+        self::NO_SUCH_FIELD_ERROR => 'NO_SUCH_FIELD_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $fields = [];
+    public $allowExtraFields = false;
+    public $allowMissingFields = false;
+    public $extraFieldsMessage = 'This field was not expected.';
+    public $missingFieldsMessage = 'This field is missing.';
+
+    public function __construct(mixed $fields = null, ?array $groups = null, mixed $payload = null, ?bool $allowExtraFields = null, ?bool $allowMissingFields = null, ?string $extraFieldsMessage = null, ?string $missingFieldsMessage = null)
+    {
+        if (self::isFieldsOption($fields)) {
+            $fields = ['fields' => $fields];
+        }
+
+        parent::__construct($fields, $groups, $payload);
+
+        $this->allowExtraFields = $allowExtraFields ?? $this->allowExtraFields;
+        $this->allowMissingFields = $allowMissingFields ?? $this->allowMissingFields;
+        $this->extraFieldsMessage = $extraFieldsMessage ?? $this->extraFieldsMessage;
+        $this->missingFieldsMessage = $missingFieldsMessage ?? $this->missingFieldsMessage;
+    }
+
+    /**
+     * @return void
+     */
+    protected function initializeNestedConstraints()
+    {
+        parent::initializeNestedConstraints();
+
+        if (!\is_array($this->fields)) {
+            throw new ConstraintDefinitionException(sprintf('The option "fields" is expected to be an array in constraint "%s".', __CLASS__));
+        }
+
+        foreach ($this->fields as $fieldName => $field) {
+            // the XmlFileLoader and YamlFileLoader pass the field Optional
+            // and Required constraint as an array with exactly one element
+            if (\is_array($field) && 1 == \count($field)) {
+                $this->fields[$fieldName] = $field = $field[0];
+            }
+
+            if (!$field instanceof Optional && !$field instanceof Required) {
+                $this->fields[$fieldName] = new Required($field);
+            }
+        }
+    }
+
+    public function getRequiredOptions(): array
+    {
+        return ['fields'];
+    }
+
+    protected function getCompositeOption(): string
+    {
+        return 'fields';
+    }
+
+    private static function isFieldsOption($options): bool
+    {
+        if (!\is_array($options)) {
+            return false;
+        }
+
+        foreach ($options as $optionOrField) {
+            if ($optionOrField instanceof Constraint) {
+                return true;
+            }
+
+            if (null === $optionOrField) {
+                continue;
+            }
+
+            if (!\is_array($optionOrField)) {
+                return false;
+            }
+
+            if ($optionOrField && !($optionOrField[0] ?? null) instanceof Constraint) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CollectionValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CollectionValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CollectionValidator.php	(revision 8435)
@@ -0,0 +1,87 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class CollectionValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Collection) {
+            throw new UnexpectedTypeException($constraint, Collection::class);
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        if (!\is_array($value) && !($value instanceof \Traversable && $value instanceof \ArrayAccess)) {
+            throw new UnexpectedValueException($value, 'array|(Traversable&ArrayAccess)');
+        }
+
+        // We need to keep the initialized context when CollectionValidator
+        // calls itself recursively (Collection constraints can be nested).
+        // Since the context of the validator is overwritten when initialize()
+        // is called for the nested constraint, the outer validator is
+        // acting on the wrong context when the nested validation terminates.
+        //
+        // A better solution - which should be approached in Symfony 3.0 - is to
+        // remove the initialize() method and pass the context as last argument
+        // to validate() instead.
+        $context = $this->context;
+
+        foreach ($constraint->fields as $field => $fieldConstraint) {
+            // bug fix issue #2779
+            $existsInArray = \is_array($value) && \array_key_exists($field, $value);
+            $existsInArrayAccess = $value instanceof \ArrayAccess && $value->offsetExists($field);
+
+            if ($existsInArray || $existsInArrayAccess) {
+                if (\count($fieldConstraint->constraints) > 0) {
+                    $context->getValidator()
+                        ->inContext($context)
+                        ->atPath('['.$field.']')
+                        ->validate($value[$field], $fieldConstraint->constraints);
+                }
+            } elseif (!$fieldConstraint instanceof Optional && !$constraint->allowMissingFields) {
+                $context->buildViolation($constraint->missingFieldsMessage)
+                    ->atPath('['.$field.']')
+                    ->setParameter('{{ field }}', $this->formatValue($field))
+                    ->setInvalidValue(null)
+                    ->setCode(Collection::MISSING_FIELD_ERROR)
+                    ->addViolation();
+            }
+        }
+
+        if (!$constraint->allowExtraFields) {
+            foreach ($value as $field => $fieldValue) {
+                if (!isset($constraint->fields[$field])) {
+                    $context->buildViolation($constraint->extraFieldsMessage)
+                        ->atPath('['.$field.']')
+                        ->setParameter('{{ field }}', $this->formatValue($field))
+                        ->setInvalidValue($fieldValue)
+                        ->setCode(Collection::NO_SUCH_FIELD_ERROR)
+                        ->addViolation();
+                }
+            }
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Composite.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Composite.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Composite.php	(revision 8435)
@@ -0,0 +1,157 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * A constraint that is composed of other constraints.
+ *
+ * You should never use the nested constraint instances anywhere else, because
+ * their groups are adapted when passed to the constructor of this class.
+ *
+ * If you want to create your own composite constraint, extend this class and
+ * let {@link getCompositeOption()} return the name of the property which
+ * contains the nested constraints.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+abstract class Composite extends Constraint
+{
+    /**
+     * The groups of the composite and its nested constraints are made
+     * consistent using the following strategy:
+     *
+     *   - If groups are passed explicitly to the composite constraint, but
+     *     not to the nested constraints, the options of the composite
+     *     constraint are copied to the nested constraints;
+     *
+     *   - If groups are passed explicitly to the nested constraints, but not
+     *     to the composite constraint, the groups of all nested constraints
+     *     are merged and used as groups for the composite constraint;
+     *
+     *   - If groups are passed explicitly to both the composite and its nested
+     *     constraints, the groups of the nested constraints must be a subset
+     *     of the groups of the composite constraint. If not, a
+     *     {@link ConstraintDefinitionException} is thrown.
+     *
+     * All this is done in the constructor, because constraints can then be
+     * cached. When constraints are loaded from the cache, no more group
+     * checks need to be done.
+     */
+    public function __construct(mixed $options = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($options, $groups, $payload);
+
+        $this->initializeNestedConstraints();
+
+        /* @var Constraint[] $nestedConstraints */
+        $compositeOption = $this->getCompositeOption();
+        $nestedConstraints = $this->$compositeOption;
+
+        if (!\is_array($nestedConstraints)) {
+            $nestedConstraints = [$nestedConstraints];
+        }
+
+        foreach ($nestedConstraints as $constraint) {
+            if (!$constraint instanceof Constraint) {
+                if (\is_object($constraint)) {
+                    $constraint = $constraint::class;
+                }
+
+                throw new ConstraintDefinitionException(sprintf('The value "%s" is not an instance of Constraint in constraint "%s".', $constraint, static::class));
+            }
+
+            if ($constraint instanceof Valid) {
+                throw new ConstraintDefinitionException(sprintf('The constraint Valid cannot be nested inside constraint "%s". You can only declare the Valid constraint directly on a field or method.', static::class));
+            }
+        }
+
+        if (!isset(((array) $this)['groups'])) {
+            $mergedGroups = [];
+
+            foreach ($nestedConstraints as $constraint) {
+                foreach ($constraint->groups as $group) {
+                    $mergedGroups[$group] = true;
+                }
+            }
+
+            // prevent empty composite constraint to have empty groups
+            $this->groups = array_keys($mergedGroups) ?: [self::DEFAULT_GROUP];
+            $this->$compositeOption = $nestedConstraints;
+
+            return;
+        }
+
+        foreach ($nestedConstraints as $constraint) {
+            if (isset(((array) $constraint)['groups'])) {
+                $excessGroups = array_diff($constraint->groups, $this->groups);
+
+                if (\count($excessGroups) > 0) {
+                    throw new ConstraintDefinitionException(sprintf('The group(s) "%s" passed to the constraint "%s" should also be passed to its containing constraint "%s".', implode('", "', $excessGroups), get_debug_type($constraint), static::class));
+                }
+            } else {
+                $constraint->groups = $this->groups;
+            }
+        }
+
+        $this->$compositeOption = $nestedConstraints;
+    }
+
+    /**
+     * Implicit group names are forwarded to nested constraints.
+     *
+     * @return void
+     */
+    public function addImplicitGroupName(string $group)
+    {
+        parent::addImplicitGroupName($group);
+
+        /** @var Constraint[] $nestedConstraints */
+        $nestedConstraints = $this->{$this->getCompositeOption()};
+
+        foreach ($nestedConstraints as $constraint) {
+            $constraint->addImplicitGroupName($group);
+        }
+    }
+
+    /**
+     * Returns the name of the property that contains the nested constraints.
+     */
+    abstract protected function getCompositeOption(): string;
+
+    /**
+     * @internal Used by metadata
+     *
+     * @return Constraint[]
+     */
+    public function getNestedConstraints(): array
+    {
+        /* @var Constraint[] $nestedConstraints */
+        return $this->{$this->getCompositeOption()};
+    }
+
+    /**
+     * Initializes the nested constraints.
+     *
+     * This method can be overwritten in subclasses to clean up the nested
+     * constraints passed to the constructor.
+     *
+     * @see Collection::initializeNestedConstraints()
+     *
+     * @return void
+     */
+    protected function initializeNestedConstraints()
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Compound.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Compound.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Compound.php	(revision 8435)
@@ -0,0 +1,52 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * Extend this class to create a reusable set of constraints.
+ *
+ * @author Maxime Steinhausser <maxime.steinhausser@gmail.com>
+ */
+abstract class Compound extends Composite
+{
+    /** @var Constraint[] */
+    public $constraints = [];
+
+    public function __construct(mixed $options = null)
+    {
+        if (isset($options[$this->getCompositeOption()])) {
+            throw new ConstraintDefinitionException(sprintf('You can\'t redefine the "%s" option. Use the "%s::getConstraints()" method instead.', $this->getCompositeOption(), __CLASS__));
+        }
+
+        $this->constraints = $this->getConstraints($this->normalizeOptions($options));
+
+        parent::__construct($options);
+    }
+
+    final protected function getCompositeOption(): string
+    {
+        return 'constraints';
+    }
+
+    final public function validatedBy(): string
+    {
+        return CompoundValidator::class;
+    }
+
+    /**
+     * @return Constraint[]
+     */
+    abstract protected function getConstraints(array $options): array;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CompoundValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CompoundValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CompoundValidator.php	(revision 8435)
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Maxime Steinhausser <maxime.steinhausser@gmail.com>
+ */
+class CompoundValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Compound) {
+            throw new UnexpectedTypeException($constraint, Compound::class);
+        }
+
+        $context = $this->context;
+
+        $validator = $context->getValidator()->inContext($context);
+
+        $validator->validate($value, $constraint->constraints);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Count.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Count.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Count.php	(revision 8435)
@@ -0,0 +1,92 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\MissingOptionsException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Count extends Constraint
+{
+    public const TOO_FEW_ERROR = 'bef8e338-6ae5-4caf-b8e2-50e7b0579e69';
+    public const TOO_MANY_ERROR = '756b1212-697c-468d-a9ad-50dd783bb169';
+    public const NOT_EQUAL_COUNT_ERROR = '9fe5d43f-3784-4ece-a0e1-473fc02dadbc';
+    public const NOT_DIVISIBLE_BY_ERROR = DivisibleBy::NOT_DIVISIBLE_BY;
+
+    protected const ERROR_NAMES = [
+        self::TOO_FEW_ERROR => 'TOO_FEW_ERROR',
+        self::TOO_MANY_ERROR => 'TOO_MANY_ERROR',
+        self::NOT_EQUAL_COUNT_ERROR => 'NOT_EQUAL_COUNT_ERROR',
+        self::NOT_DIVISIBLE_BY_ERROR => 'NOT_DIVISIBLE_BY_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $minMessage = 'This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.';
+    public $maxMessage = 'This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.';
+    public $exactMessage = 'This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.';
+    public $divisibleByMessage = 'The number of elements in this collection should be a multiple of {{ compared_value }}.';
+    public $min;
+    public $max;
+    public $divisibleBy;
+
+    public function __construct(
+        int|array|null $exactly = null,
+        ?int $min = null,
+        ?int $max = null,
+        ?int $divisibleBy = null,
+        ?string $exactMessage = null,
+        ?string $minMessage = null,
+        ?string $maxMessage = null,
+        ?string $divisibleByMessage = null,
+        ?array $groups = null,
+        mixed $payload = null,
+        array $options = []
+    ) {
+        if (\is_array($exactly)) {
+            $options = array_merge($exactly, $options);
+            $exactly = $options['value'] ?? null;
+        }
+
+        $min ??= $options['min'] ?? null;
+        $max ??= $options['max'] ?? null;
+
+        unset($options['value'], $options['min'], $options['max']);
+
+        if (null !== $exactly && null === $min && null === $max) {
+            $min = $max = $exactly;
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->min = $min;
+        $this->max = $max;
+        $this->divisibleBy = $divisibleBy ?? $this->divisibleBy;
+        $this->exactMessage = $exactMessage ?? $this->exactMessage;
+        $this->minMessage = $minMessage ?? $this->minMessage;
+        $this->maxMessage = $maxMessage ?? $this->maxMessage;
+        $this->divisibleByMessage = $divisibleByMessage ?? $this->divisibleByMessage;
+
+        if (null === $this->min && null === $this->max && null === $this->divisibleBy) {
+            throw new MissingOptionsException(sprintf('Either option "min", "max" or "divisibleBy" must be given for constraint "%s".', __CLASS__), ['min', 'max', 'divisibleBy']);
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CountValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CountValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CountValidator.php	(revision 8435)
@@ -0,0 +1,83 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class CountValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Count) {
+            throw new UnexpectedTypeException($constraint, Count::class);
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        if (!\is_array($value) && !$value instanceof \Countable) {
+            throw new UnexpectedValueException($value, 'array|\Countable');
+        }
+
+        $count = \count($value);
+
+        if (null !== $constraint->max && $count > $constraint->max) {
+            $exactlyOptionEnabled = $constraint->min == $constraint->max;
+
+            $this->context->buildViolation($exactlyOptionEnabled ? $constraint->exactMessage : $constraint->maxMessage)
+                ->setParameter('{{ count }}', $count)
+                ->setParameter('{{ limit }}', $constraint->max)
+                ->setInvalidValue($value)
+                ->setPlural((int) $constraint->max)
+                ->setCode($exactlyOptionEnabled ? Count::NOT_EQUAL_COUNT_ERROR : Count::TOO_MANY_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if (null !== $constraint->min && $count < $constraint->min) {
+            $exactlyOptionEnabled = $constraint->min == $constraint->max;
+
+            $this->context->buildViolation($exactlyOptionEnabled ? $constraint->exactMessage : $constraint->minMessage)
+                ->setParameter('{{ count }}', $count)
+                ->setParameter('{{ limit }}', $constraint->min)
+                ->setInvalidValue($value)
+                ->setPlural((int) $constraint->min)
+                ->setCode($exactlyOptionEnabled ? Count::NOT_EQUAL_COUNT_ERROR : Count::TOO_FEW_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if (null !== $constraint->divisibleBy) {
+            $this->context
+                ->getValidator()
+                ->inContext($this->context)
+                ->validate($count, [
+                    new DivisibleBy([
+                        'value' => $constraint->divisibleBy,
+                        'message' => $constraint->divisibleByMessage,
+                    ]),
+                ], $this->context->getGroup());
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Country.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Country.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Country.php	(revision 8435)
@@ -0,0 +1,57 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Intl\Countries;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\LogicException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Country extends Constraint
+{
+    public const NO_SUCH_COUNTRY_ERROR = '8f900c12-61bd-455d-9398-996cd040f7f0';
+
+    protected const ERROR_NAMES = [
+        self::NO_SUCH_COUNTRY_ERROR => 'NO_SUCH_COUNTRY_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value is not a valid country.';
+    public $alpha3 = false;
+
+    public function __construct(
+        ?array $options = null,
+        ?string $message = null,
+        ?bool $alpha3 = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        if (!class_exists(Countries::class)) {
+            throw new LogicException('The Intl component is required to use the Country constraint. Try running "composer require symfony/intl".');
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->alpha3 = $alpha3 ?? $this->alpha3;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CountryValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CountryValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CountryValidator.php	(revision 8435)
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Intl\Countries;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * Validates whether a value is a valid country code.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class CountryValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Country) {
+            throw new UnexpectedTypeException($constraint, Country::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        if ($constraint->alpha3 ? !Countries::alpha3CodeExists($value) : !Countries::exists($value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Country::NO_SUCH_COUNTRY_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CssColor.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CssColor.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CssColor.php	(revision 8435)
@@ -0,0 +1,111 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\InvalidArgumentException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Mathieu Santostefano <msantostefano@protonmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class CssColor extends Constraint
+{
+    public const HEX_LONG = 'hex_long';
+    public const HEX_LONG_WITH_ALPHA = 'hex_long_with_alpha';
+    public const HEX_SHORT = 'hex_short';
+    public const HEX_SHORT_WITH_ALPHA = 'hex_short_with_alpha';
+    public const BASIC_NAMED_COLORS = 'basic_named_colors';
+    public const EXTENDED_NAMED_COLORS = 'extended_named_colors';
+    public const SYSTEM_COLORS = 'system_colors';
+    public const KEYWORDS = 'keywords';
+    public const RGB = 'rgb';
+    public const RGBA = 'rgba';
+    public const HSL = 'hsl';
+    public const HSLA = 'hsla';
+    public const INVALID_FORMAT_ERROR = '454ab47b-aacf-4059-8f26-184b2dc9d48d';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_FORMAT_ERROR => 'INVALID_FORMAT_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    /**
+     * @var string[]
+     */
+    private static array $validationModes = [
+        self::HEX_LONG,
+        self::HEX_LONG_WITH_ALPHA,
+        self::HEX_SHORT,
+        self::HEX_SHORT_WITH_ALPHA,
+        self::BASIC_NAMED_COLORS,
+        self::EXTENDED_NAMED_COLORS,
+        self::SYSTEM_COLORS,
+        self::KEYWORDS,
+        self::RGB,
+        self::RGBA,
+        self::HSL,
+        self::HSLA,
+    ];
+
+    public $message = 'This value is not a valid CSS color.';
+    public $formats;
+
+    /**
+     * @param array|string $formats The types of CSS colors allowed (e.g. hexadecimal only, RGB and HSL only, etc.).
+     */
+    public function __construct($formats = [], ?string $message = null, ?array $groups = null, $payload = null, ?array $options = null)
+    {
+        $validationModesAsString = implode(', ', self::$validationModes);
+
+        if (!$formats) {
+            $options['value'] = self::$validationModes;
+        } elseif (\is_array($formats) && \is_string(key($formats))) {
+            $options = array_merge($formats, $options ?? []);
+        } elseif (\is_array($formats)) {
+            if ([] === array_intersect(self::$validationModes, $formats)) {
+                throw new InvalidArgumentException(sprintf('The "formats" parameter value is not valid. It must contain one or more of the following values: "%s".', $validationModesAsString));
+            }
+
+            $options['value'] = $formats;
+        } elseif (\is_string($formats)) {
+            if (!\in_array($formats, self::$validationModes)) {
+                throw new InvalidArgumentException(sprintf('The "formats" parameter value is not valid. It must contain one or more of the following values: "%s".', $validationModesAsString));
+            }
+
+            $options['value'] = [$formats];
+        } else {
+            throw new InvalidArgumentException('The "formats" parameter type is not valid. It should be a string or an array.');
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+
+    public function getDefaultOption(): string
+    {
+        return 'formats';
+    }
+
+    public function getRequiredOptions(): array
+    {
+        return ['formats'];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CssColorValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CssColorValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CssColorValidator.php	(revision 8435)
@@ -0,0 +1,83 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Mathieu Santostefano <msantostefano@protonmail.com>
+ */
+class CssColorValidator extends ConstraintValidator
+{
+    private const PATTERN_HEX_LONG = '/^#[0-9a-f]{6}$/i';
+    private const PATTERN_HEX_LONG_WITH_ALPHA = '/^#[0-9a-f]{8}$/i';
+    private const PATTERN_HEX_SHORT = '/^#[0-9a-f]{3}$/i';
+    private const PATTERN_HEX_SHORT_WITH_ALPHA = '/^#[0-9a-f]{4}$/i';
+    // List comes from https://www.w3.org/wiki/CSS/Properties/color/keywords#Basic_Colors
+    private const PATTERN_BASIC_NAMED_COLORS = '/^(black|silver|gray|white|maroon|red|purple|fuchsia|green|lime|olive|yellow|navy|blue|teal|aqua)$/i';
+    // List comes from https://www.w3.org/wiki/CSS/Properties/color/keywords#Extended_colors
+    private const PATTERN_EXTENDED_NAMED_COLORS = '/^(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen)$/i';
+    // List comes from https://drafts.csswg.org/css-color/#css-system-colors
+    private const PATTERN_SYSTEM_COLORS = '/^(Canvas|CanvasText|LinkText|VisitedText|ActiveText|ButtonFace|ButtonText|ButtonBorder|Field|FieldText|Highlight|HighlightText|SelectedItem|SelectedItemText|Mark|MarkText|GrayText)$/i';
+    private const PATTERN_KEYWORDS = '/^(transparent|currentColor)$/i';
+    private const PATTERN_RGB = '/^rgb\(\s*(0|255|25[0-4]|2[0-4]\d|1\d\d|0?\d?\d),\s*(0|255|25[0-4]|2[0-4]\d|1\d\d|0?\d?\d),\s*(0|255|25[0-4]|2[0-4]\d|1\d\d|0?\d?\d)\s*\)$/i';
+    private const PATTERN_RGBA = '/^rgba\(\s*(0|255|25[0-4]|2[0-4]\d|1\d\d|0?\d?\d),\s*(0|255|25[0-4]|2[0-4]\d|1\d\d|0?\d?\d),\s*(0|255|25[0-4]|2[0-4]\d|1\d\d|0?\d?\d),\s*(0|0?\.\d+|1(\.0)?)\s*\)$/i';
+    private const PATTERN_HSL = '/^hsl\(\s*(0|360|35\d|3[0-4]\d|[12]\d\d|0?\d?\d),\s*(0|100|\d{1,2})%,\s*(0|100|\d{1,2})%\s*\)$/i';
+    private const PATTERN_HSLA = '/^hsla\(\s*(0|360|35\d|3[0-4]\d|[12]\d\d|0?\d?\d),\s*(0|100|\d{1,2})%,\s*(0|100|\d{1,2})%,\s*(0|0?\.\d+|1(\.0)?)\s*\)$/i';
+
+    private const COLOR_PATTERNS = [
+        CssColor::HEX_LONG => self::PATTERN_HEX_LONG,
+        CssColor::HEX_LONG_WITH_ALPHA => self::PATTERN_HEX_LONG_WITH_ALPHA,
+        CssColor::HEX_SHORT => self::PATTERN_HEX_SHORT,
+        CssColor::HEX_SHORT_WITH_ALPHA => self::PATTERN_HEX_SHORT_WITH_ALPHA,
+        CssColor::BASIC_NAMED_COLORS => self::PATTERN_BASIC_NAMED_COLORS,
+        CssColor::EXTENDED_NAMED_COLORS => self::PATTERN_EXTENDED_NAMED_COLORS,
+        CssColor::SYSTEM_COLORS => self::PATTERN_SYSTEM_COLORS,
+        CssColor::KEYWORDS => self::PATTERN_KEYWORDS,
+        CssColor::RGB => self::PATTERN_RGB,
+        CssColor::RGBA => self::PATTERN_RGBA,
+        CssColor::HSL => self::PATTERN_HSL,
+        CssColor::HSLA => self::PATTERN_HSLA,
+    ];
+
+    public function validate($value, Constraint $constraint): void
+    {
+        if (!$constraint instanceof CssColor) {
+            throw new UnexpectedTypeException($constraint, CssColor::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_string($value)) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $formats = array_flip((array) $constraint->formats);
+        $formatRegexes = array_intersect_key(self::COLOR_PATTERNS, $formats);
+
+        foreach ($formatRegexes as $regex) {
+            if (preg_match($regex, (string) $value)) {
+                return;
+            }
+        }
+
+        $this->context->buildViolation($constraint->message)
+            ->setParameter('{{ value }}', $this->formatValue($value))
+            ->setCode(CssColor::INVALID_FORMAT_ERROR)
+            ->addViolation();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Currency.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Currency.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Currency.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Intl\Currencies;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\LogicException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Miha Vrhovnik <miha.vrhovnik@pagein.si>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Currency extends Constraint
+{
+    public const NO_SUCH_CURRENCY_ERROR = '69945ac1-2db4-405f-bec7-d2772f73df52';
+
+    protected const ERROR_NAMES = [
+        self::NO_SUCH_CURRENCY_ERROR => 'NO_SUCH_CURRENCY_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value is not a valid currency.';
+
+    public function __construct(?array $options = null, ?string $message = null, ?array $groups = null, mixed $payload = null)
+    {
+        if (!class_exists(Currencies::class)) {
+            throw new LogicException('The Intl component is required to use the Currency constraint. Try running "composer require symfony/intl".');
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CurrencyValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CurrencyValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/CurrencyValidator.php	(revision 8435)
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Intl\Currencies;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * Validates whether a value is a valid currency.
+ *
+ * @author Miha Vrhovnik <miha.vrhovnik@pagein.si>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class CurrencyValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Currency) {
+            throw new UnexpectedTypeException($constraint, Currency::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        if (!Currencies::exists($value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Currency::NO_SUCH_CURRENCY_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Date.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Date.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Date.php	(revision 8435)
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Date extends Constraint
+{
+    public const INVALID_FORMAT_ERROR = '69819696-02ac-4a99-9ff0-14e127c4d1bc';
+    public const INVALID_DATE_ERROR = '3c184ce5-b31d-4de7-8b76-326da7b2be93';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_FORMAT_ERROR => 'INVALID_FORMAT_ERROR',
+        self::INVALID_DATE_ERROR => 'INVALID_DATE_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value is not a valid date.';
+
+    public function __construct(?array $options = null, ?string $message = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DateTime.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DateTime.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DateTime.php	(revision 8435)
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class DateTime extends Constraint
+{
+    public const INVALID_FORMAT_ERROR = '1a9da513-2640-4f84-9b6a-4d99dcddc628';
+    public const INVALID_DATE_ERROR = 'd52afa47-620d-4d99-9f08-f4d85b36e33c';
+    public const INVALID_TIME_ERROR = '5e797c9d-74f7-4098-baa3-94390c447b27';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_FORMAT_ERROR => 'INVALID_FORMAT_ERROR',
+        self::INVALID_DATE_ERROR => 'INVALID_DATE_ERROR',
+        self::INVALID_TIME_ERROR => 'INVALID_TIME_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $format = 'Y-m-d H:i:s';
+    public $message = 'This value is not a valid datetime.';
+
+    public function __construct(string|array|null $format = null, ?string $message = null, ?array $groups = null, mixed $payload = null, array $options = [])
+    {
+        if (\is_array($format)) {
+            $options = array_merge($format, $options);
+        } elseif (null !== $format) {
+            $options['value'] = $format;
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+
+    public function getDefaultOption(): ?string
+    {
+        return 'format';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DateTimeValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DateTimeValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DateTimeValidator.php	(revision 8435)
@@ -0,0 +1,79 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ * @author Diego Saint Esteben <diego@saintesteben.me>
+ */
+class DateTimeValidator extends DateValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof DateTime) {
+            throw new UnexpectedTypeException($constraint, DateTime::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        \DateTimeImmutable::createFromFormat($constraint->format, $value);
+
+        $errors = \DateTimeImmutable::getLastErrors() ?: ['error_count' => 0, 'warnings' => []];
+
+        if (0 < $errors['error_count']) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(DateTime::INVALID_FORMAT_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if (str_ends_with($constraint->format, '+')) {
+            $errors['warnings'] = array_filter($errors['warnings'], fn ($warning) => 'Trailing data' !== $warning);
+        }
+
+        foreach ($errors['warnings'] as $warning) {
+            if ('The parsed date was invalid' === $warning) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(DateTime::INVALID_DATE_ERROR)
+                    ->addViolation();
+            } elseif ('The parsed time was invalid' === $warning) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(DateTime::INVALID_TIME_ERROR)
+                    ->addViolation();
+            } else {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(DateTime::INVALID_FORMAT_ERROR)
+                    ->addViolation();
+            }
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DateValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DateValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DateValidator.php	(revision 8435)
@@ -0,0 +1,75 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class DateValidator extends ConstraintValidator
+{
+    public const PATTERN = '/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/';
+
+    /**
+     * Checks whether a date is valid.
+     *
+     * @internal
+     */
+    public static function checkDate(int $year, int $month, int $day): bool
+    {
+        return checkdate($month, $day, $year);
+    }
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Date) {
+            throw new UnexpectedTypeException($constraint, Date::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        if (!preg_match(static::PATTERN, $value, $matches)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Date::INVALID_FORMAT_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if (!self::checkDate(
+            $matches['year'] ?? $matches[1],
+            $matches['month'] ?? $matches[2],
+            $matches['day'] ?? $matches[3]
+        )) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Date::INVALID_DATE_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DisableAutoMapping.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DisableAutoMapping.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DisableAutoMapping.php	(revision 8435)
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * Disables auto mapping.
+ *
+ * Using the annotations on a property has higher precedence than using it on a class,
+ * which has higher precedence than any configuration that might be defined outside the class.
+ *
+ * @Annotation
+ *
+ * @author KÃ©vin Dunglas <dunglas@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::TARGET_CLASS)]
+class DisableAutoMapping extends Constraint
+{
+    public function __construct(?array $options = null)
+    {
+        if (\is_array($options) && \array_key_exists('groups', $options)) {
+            throw new ConstraintDefinitionException(sprintf('The option "groups" is not supported by the constraint "%s".', __CLASS__));
+        }
+
+        parent::__construct($options);
+    }
+
+    public function getTargets(): string|array
+    {
+        return [self::PROPERTY_CONSTRAINT, self::CLASS_CONSTRAINT];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DivisibleBy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DivisibleBy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DivisibleBy.php	(revision 8435)
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Colin O'Dell <colinodell@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class DivisibleBy extends AbstractComparison
+{
+    public const NOT_DIVISIBLE_BY = '6d99d6c3-1464-4ccf-bdc7-14d083cf455c';
+
+    protected const ERROR_NAMES = [
+        self::NOT_DIVISIBLE_BY => 'NOT_DIVISIBLE_BY',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be a multiple of {{ compared_value }}.';
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DivisibleByValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DivisibleByValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/DivisibleByValidator.php	(revision 8435)
@@ -0,0 +1,56 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * Validates that values are a multiple of the given number.
+ *
+ * @author Colin O'Dell <colinodell@gmail.com>
+ */
+class DivisibleByValidator extends AbstractComparisonValidator
+{
+    protected function compareValues(mixed $value1, mixed $value2): bool
+    {
+        if (!is_numeric($value1)) {
+            throw new UnexpectedValueException($value1, 'numeric');
+        }
+
+        if (!is_numeric($value2)) {
+            throw new UnexpectedValueException($value2, 'numeric');
+        }
+
+        if (!$value2 = abs($value2)) {
+            return false;
+        }
+        if (\is_int($value1 = abs($value1)) && \is_int($value2)) {
+            return 0 === ($value1 % $value2);
+        }
+        if (!$remainder = fmod($value1, $value2)) {
+            return true;
+        }
+        if (\is_float($value2) && \INF !== $value2) {
+            $quotient = $value1 / $value2;
+            $rounded = round($quotient);
+
+            return sprintf('%.12e', $quotient) === sprintf('%.12e', $rounded);
+        }
+
+        return sprintf('%.12e', $value2) === sprintf('%.12e', $remainder);
+    }
+
+    protected function getErrorCode(): ?string
+    {
+        return DivisibleBy::NOT_DIVISIBLE_BY;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Email.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Email.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Email.php	(revision 8435)
@@ -0,0 +1,93 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Egulias\EmailValidator\EmailValidator as StrictEmailValidator;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\InvalidArgumentException;
+use Symfony\Component\Validator\Exception\LogicException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Email extends Constraint
+{
+    public const VALIDATION_MODE_HTML5_ALLOW_NO_TLD = 'html5-allow-no-tld';
+    public const VALIDATION_MODE_HTML5 = 'html5';
+    public const VALIDATION_MODE_STRICT = 'strict';
+    /**
+     * @deprecated since Symfony 6.2, use VALIDATION_MODE_HTML5 instead
+     */
+    public const VALIDATION_MODE_LOOSE = 'loose';
+
+    public const INVALID_FORMAT_ERROR = 'bd79c0ab-ddba-46cc-a703-a7a4b08de310';
+
+    public const VALIDATION_MODES = [
+        self::VALIDATION_MODE_HTML5_ALLOW_NO_TLD,
+        self::VALIDATION_MODE_HTML5,
+        self::VALIDATION_MODE_STRICT,
+        self::VALIDATION_MODE_LOOSE,
+    ];
+
+    protected const ERROR_NAMES = [
+        self::INVALID_FORMAT_ERROR => 'INVALID_FORMAT_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value is not a valid email address.';
+    public $mode;
+    /** @var callable|null */
+    public $normalizer;
+
+    public function __construct(
+        ?array $options = null,
+        ?string $message = null,
+        ?string $mode = null,
+        ?callable $normalizer = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        if (\is_array($options) && \array_key_exists('mode', $options) && !\in_array($options['mode'], self::VALIDATION_MODES, true)) {
+            throw new InvalidArgumentException('The "mode" parameter value is not valid.');
+        }
+
+        if (null !== $mode && !\in_array($mode, self::VALIDATION_MODES, true)) {
+            throw new InvalidArgumentException('The "mode" parameter value is not valid.');
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->mode = $mode ?? $this->mode;
+        $this->normalizer = $normalizer ?? $this->normalizer;
+
+        if (self::VALIDATION_MODE_LOOSE === $this->mode) {
+            trigger_deprecation('symfony/validator', '6.2', 'The "%s" mode is deprecated. It will be removed in 7.0 and the default mode will be changed to "%s".', self::VALIDATION_MODE_LOOSE, self::VALIDATION_MODE_HTML5);
+        }
+
+        if (self::VALIDATION_MODE_STRICT === $this->mode && !class_exists(StrictEmailValidator::class)) {
+            throw new LogicException(sprintf('The "egulias/email-validator" component is required to use the "%s" constraint in strict mode. Try running "composer require egulias/email-validator".', __CLASS__));
+        }
+
+        if (null !== $this->normalizer && !\is_callable($this->normalizer)) {
+            throw new InvalidArgumentException(sprintf('The "normalizer" option must be a valid callable ("%s" given).', get_debug_type($this->normalizer)));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/EmailValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/EmailValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/EmailValidator.php	(revision 8435)
@@ -0,0 +1,119 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Egulias\EmailValidator\EmailValidator as EguliasEmailValidator;
+use Egulias\EmailValidator\Validation\EmailValidation;
+use Egulias\EmailValidator\Validation\NoRFCWarningsValidation;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\InvalidArgumentException;
+use Symfony\Component\Validator\Exception\LogicException;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class EmailValidator extends ConstraintValidator
+{
+    private const PATTERN_HTML5_ALLOW_NO_TLD = '/^[a-zA-Z0-9.!#$%&\'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/';
+    private const PATTERN_HTML5 = '/^[a-zA-Z0-9.!#$%&\'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/';
+    private const PATTERN_LOOSE = '/^.+\@\S+\.\S+$/';
+
+    private const EMAIL_PATTERNS = [
+        Email::VALIDATION_MODE_LOOSE => self::PATTERN_LOOSE,
+        Email::VALIDATION_MODE_HTML5 => self::PATTERN_HTML5,
+        Email::VALIDATION_MODE_HTML5_ALLOW_NO_TLD => self::PATTERN_HTML5_ALLOW_NO_TLD,
+    ];
+
+    private string $defaultMode;
+
+    public function __construct(string $defaultMode = Email::VALIDATION_MODE_LOOSE)
+    {
+        if (!\in_array($defaultMode, Email::VALIDATION_MODES, true)) {
+            throw new InvalidArgumentException('The "defaultMode" parameter value is not valid.');
+        }
+
+        if (Email::VALIDATION_MODE_LOOSE === $defaultMode) {
+            trigger_deprecation('symfony/validator', '6.2', 'The "%s" mode is deprecated. It will be removed in 7.0 and the default mode will be changed to "%s".', Email::VALIDATION_MODE_LOOSE, Email::VALIDATION_MODE_HTML5);
+        }
+
+        $this->defaultMode = $defaultMode;
+    }
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Email) {
+            throw new UnexpectedTypeException($constraint, Email::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+        if ('' === $value) {
+            return;
+        }
+
+        if (null !== $constraint->normalizer) {
+            $value = ($constraint->normalizer)($value);
+        }
+
+        if (null === $constraint->mode) {
+            if (Email::VALIDATION_MODE_STRICT === $this->defaultMode && !class_exists(EguliasEmailValidator::class)) {
+                throw new LogicException(sprintf('The "egulias/email-validator" component is required to make the "%s" constraint default to strict mode. Try running "composer require egulias/email-validator".', Email::class));
+            }
+
+            $constraint->mode = $this->defaultMode;
+        }
+
+        if (!\in_array($constraint->mode, Email::VALIDATION_MODES, true)) {
+            throw new InvalidArgumentException(sprintf('The "%s::$mode" parameter value is not valid.', get_debug_type($constraint)));
+        }
+
+        if (Email::VALIDATION_MODE_STRICT === $constraint->mode) {
+            $strictValidator = new EguliasEmailValidator();
+
+            if (interface_exists(EmailValidation::class) && !$strictValidator->isValid($value, new NoRFCWarningsValidation())) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Email::INVALID_FORMAT_ERROR)
+                    ->addViolation();
+
+                return;
+            } elseif (!interface_exists(EmailValidation::class) && !$strictValidator->isValid($value, false, true)) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Email::INVALID_FORMAT_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+        } elseif (!preg_match(self::EMAIL_PATTERNS[$constraint->mode], $value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Email::INVALID_FORMAT_ERROR)
+                ->addViolation();
+
+            return;
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/EnableAutoMapping.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/EnableAutoMapping.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/EnableAutoMapping.php	(revision 8435)
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * Enables auto mapping.
+ *
+ * Using the annotations on a property has higher precedence than using it on a class,
+ * which has higher precedence than any configuration that might be defined outside the class.
+ *
+ * @Annotation
+ *
+ * @author KÃ©vin Dunglas <dunglas@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::TARGET_CLASS)]
+class EnableAutoMapping extends Constraint
+{
+    public function __construct(?array $options = null)
+    {
+        if (\is_array($options) && \array_key_exists('groups', $options)) {
+            throw new ConstraintDefinitionException(sprintf('The option "groups" is not supported by the constraint "%s".', __CLASS__));
+        }
+
+        parent::__construct($options);
+    }
+
+    public function getTargets(): string|array
+    {
+        return [self::PROPERTY_CONSTRAINT, self::CLASS_CONSTRAINT];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/EqualTo.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/EqualTo.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/EqualTo.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class EqualTo extends AbstractComparison
+{
+    public const NOT_EQUAL_ERROR = '478618a7-95ba-473d-9101-cabd45e49115';
+
+    protected const ERROR_NAMES = [
+        self::NOT_EQUAL_ERROR => 'NOT_EQUAL_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be equal to {{ compared_value }}.';
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/EqualToValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/EqualToValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/EqualToValidator.php	(revision 8435)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * Validates values are equal (==).
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class EqualToValidator extends AbstractComparisonValidator
+{
+    protected function compareValues(mixed $value1, mixed $value2): bool
+    {
+        return $value1 == $value2;
+    }
+
+    protected function getErrorCode(): ?string
+    {
+        return EqualTo::NOT_EQUAL_ERROR;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Existence.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Existence.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Existence.php	(revision 8435)
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+abstract class Existence extends Composite
+{
+    public $constraints = [];
+
+    public function getDefaultOption(): ?string
+    {
+        return 'constraints';
+    }
+
+    protected function getCompositeOption(): string
+    {
+        return 'constraints';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Expression.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Expression.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Expression.php	(revision 8435)
@@ -0,0 +1,90 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\ExpressionLanguage\Expression as ExpressionObject;
+use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\LogicException;
+
+/**
+ * @Annotation
+ * @Target({"CLASS", "PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)]
+class Expression extends Constraint
+{
+    public const EXPRESSION_FAILED_ERROR = '6b3befbc-2f01-4ddf-be21-b57898905284';
+
+    protected const ERROR_NAMES = [
+        self::EXPRESSION_FAILED_ERROR => 'EXPRESSION_FAILED_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value is not valid.';
+    public $expression;
+    public $values = [];
+    public bool $negate = true;
+
+    public function __construct(
+        string|ExpressionObject|array|null $expression,
+        ?string $message = null,
+        ?array $values = null,
+        ?array $groups = null,
+        mixed $payload = null,
+        array $options = [],
+        ?bool $negate = null,
+    ) {
+        if (!class_exists(ExpressionLanguage::class)) {
+            throw new LogicException(sprintf('The "symfony/expression-language" component is required to use the "%s" constraint. Try running "composer require symfony/expression-language".', __CLASS__));
+        }
+
+        if (\is_array($expression)) {
+            $options = array_merge($expression, $options);
+        } else {
+            $options['value'] = $expression;
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->values = $values ?? $this->values;
+        $this->negate = $negate ?? $this->negate;
+    }
+
+    public function getDefaultOption(): ?string
+    {
+        return 'expression';
+    }
+
+    public function getRequiredOptions(): array
+    {
+        return ['expression'];
+    }
+
+    public function getTargets(): string|array
+    {
+        return [self::CLASS_CONSTRAINT, self::PROPERTY_CONSTRAINT];
+    }
+
+    public function validatedBy(): string
+    {
+        return 'validator.expression';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionLanguageProvider.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionLanguageProvider.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionLanguageProvider.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\ExpressionLanguage\ExpressionFunction;
+use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface;
+
+class ExpressionLanguageProvider implements ExpressionFunctionProviderInterface
+{
+    public function getFunctions(): array
+    {
+        return [
+            new ExpressionFunction('is_valid', function (...$arguments) {
+                return sprintf(
+                    '0 === $context->getValidator()->inContext($context)->validate(%s)->getViolations()->count()',
+                    implode(', ', $arguments)
+                );
+            }, function (array $variables, ...$arguments): bool {
+                return 0 === $variables['context']->getValidator()->inContext($variables['context'])->validate(...$arguments)->getViolations()->count();
+            }),
+        ];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionLanguageSyntax.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionLanguageSyntax.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionLanguageSyntax.php	(revision 8435)
@@ -0,0 +1,57 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+trigger_deprecation('symfony/validator', '6.1', 'The "%s" constraint is deprecated since symfony 6.1, use "ExpressionSyntax" instead.', ExpressionLanguageSyntax::class);
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Andrey Sevastianov <mrpkmail@gmail.com>
+ *
+ * @deprecated since symfony 6.1, use ExpressionSyntax instead
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class ExpressionLanguageSyntax extends Constraint
+{
+    public const EXPRESSION_LANGUAGE_SYNTAX_ERROR = '1766a3f3-ff03-40eb-b053-ab7aa23d988a';
+
+    protected const ERROR_NAMES = [
+        self::EXPRESSION_LANGUAGE_SYNTAX_ERROR => 'EXPRESSION_LANGUAGE_SYNTAX_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be a valid expression.';
+    public $service;
+    public $allowedVariables;
+
+    public function __construct(?array $options = null, ?string $message = null, ?string $service = null, ?array $allowedVariables = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->service = $service ?? $this->service;
+        $this->allowedVariables = $allowedVariables ?? $this->allowedVariables;
+    }
+
+    public function validatedBy(): string
+    {
+        return $this->service ?? static::class.'Validator';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionLanguageSyntaxValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionLanguageSyntaxValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionLanguageSyntaxValidator.php	(revision 8435)
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
+use Symfony\Component\ExpressionLanguage\SyntaxError;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+trigger_deprecation('symfony/validator', '6.1', 'The "%s" constraint is deprecated since symfony 6.1, use "ExpressionSyntaxValidator" instead.', ExpressionLanguageSyntaxValidator::class);
+
+/**
+ * @author Andrey Sevastianov <mrpkmail@gmail.com>
+ *
+ * @deprecated since symfony 6.1, use ExpressionSyntaxValidator instead
+ */
+class ExpressionLanguageSyntaxValidator extends ConstraintValidator
+{
+    private ?ExpressionLanguage $expressionLanguage;
+
+    public function __construct(?ExpressionLanguage $expressionLanguage = null)
+    {
+        if (!class_exists(ExpressionLanguage::class)) {
+            throw new \LogicException(sprintf('The "%s" class requires the "ExpressionLanguage" component. Try running "composer require symfony/expression-language".', self::class));
+        }
+
+        $this->expressionLanguage = $expressionLanguage;
+    }
+
+    public function validate(mixed $expression, Constraint $constraint): void
+    {
+        if (!$constraint instanceof ExpressionLanguageSyntax) {
+            throw new UnexpectedTypeException($constraint, ExpressionLanguageSyntax::class);
+        }
+
+        if (!\is_string($expression)) {
+            throw new UnexpectedValueException($expression, 'string');
+        }
+
+        $this->expressionLanguage ??= new ExpressionLanguage();
+
+        try {
+            $this->expressionLanguage->lint($expression, $constraint->allowedVariables);
+        } catch (SyntaxError $exception) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ syntax_error }}', $this->formatValue($exception->getMessage()))
+                ->setInvalidValue((string) $expression)
+                ->setCode(ExpressionLanguageSyntax::EXPRESSION_LANGUAGE_SYNTAX_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionSyntax.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionSyntax.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionSyntax.php	(revision 8435)
@@ -0,0 +1,48 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Andrey Sevastianov <mrpkmail@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class ExpressionSyntax extends Constraint
+{
+    public const EXPRESSION_SYNTAX_ERROR = 'e219aa22-8b11-48ec-81a0-fc07cdb0e13f';
+
+    protected const ERROR_NAMES = [
+        self::EXPRESSION_SYNTAX_ERROR => 'EXPRESSION_SYNTAX_ERROR',
+    ];
+
+    public $message = 'This value should be a valid expression.';
+    public $service;
+    public $allowedVariables;
+
+    public function __construct(?array $options = null, ?string $message = null, ?string $service = null, ?array $allowedVariables = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->service = $service ?? $this->service;
+        $this->allowedVariables = $allowedVariables ?? $this->allowedVariables;
+    }
+
+    public function validatedBy(): string
+    {
+        return $this->service ?? static::class.'Validator';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionSyntaxValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionSyntaxValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionSyntaxValidator.php	(revision 8435)
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
+use Symfony\Component\ExpressionLanguage\SyntaxError;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Andrey Sevastianov <mrpkmail@gmail.com>
+ */
+class ExpressionSyntaxValidator extends ConstraintValidator
+{
+    private ?ExpressionLanguage $expressionLanguage;
+
+    public function __construct(?ExpressionLanguage $expressionLanguage = null)
+    {
+        $this->expressionLanguage = $expressionLanguage;
+    }
+
+    public function validate(mixed $expression, Constraint $constraint): void
+    {
+        if (!$constraint instanceof ExpressionSyntax) {
+            throw new UnexpectedTypeException($constraint, ExpressionSyntax::class);
+        }
+
+        if (null === $expression || '' === $expression) {
+            return;
+        }
+
+        if (!\is_string($expression)) {
+            throw new UnexpectedValueException($expression, 'string');
+        }
+
+        $this->expressionLanguage ??= new ExpressionLanguage();
+
+        try {
+            $this->expressionLanguage->lint($expression, $constraint->allowedVariables);
+        } catch (SyntaxError $exception) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ syntax_error }}', $this->formatValue($exception->getMessage()))
+                ->setInvalidValue((string) $expression)
+                ->setCode(ExpressionSyntax::EXPRESSION_SYNTAX_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ExpressionValidator.php	(revision 8435)
@@ -0,0 +1,65 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Bernhard Schussek <bschussek@symfony.com>
+ */
+class ExpressionValidator extends ConstraintValidator
+{
+    private ExpressionLanguage $expressionLanguage;
+
+    public function __construct(?ExpressionLanguage $expressionLanguage = null)
+    {
+        if ($expressionLanguage) {
+            $this->expressionLanguage = $expressionLanguage;
+        }
+    }
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Expression) {
+            throw new UnexpectedTypeException($constraint, Expression::class);
+        }
+
+        $variables = $constraint->values;
+        $variables['value'] = $value;
+        $variables['this'] = $this->context->getObject();
+        $variables['context'] = $this->context;
+
+        if ($constraint->negate xor $this->getExpressionLanguage()->evaluate($constraint->expression, $variables)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value, self::OBJECT_TO_STRING))
+                ->setCode(Expression::EXPRESSION_FAILED_ERROR)
+                ->addViolation();
+        }
+    }
+
+    private function getExpressionLanguage(): ExpressionLanguage
+    {
+        if (!isset($this->expressionLanguage)) {
+            $this->expressionLanguage = new ExpressionLanguage();
+            $this->expressionLanguage->registerProvider(new ExpressionLanguageProvider());
+        }
+
+        return $this->expressionLanguage;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/File.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/File.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/File.php	(revision 8435)
@@ -0,0 +1,186 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @property int $maxSize
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class File extends Constraint
+{
+    // Check the Image constraint for clashes if adding new constants here
+
+    public const NOT_FOUND_ERROR = 'd2a3fb6e-7ddc-4210-8fbf-2ab345ce1998';
+    public const NOT_READABLE_ERROR = 'c20c92a4-5bfa-4202-9477-28e800e0f6ff';
+    public const EMPTY_ERROR = '5d743385-9775-4aa5-8ff5-495fb1e60137';
+    public const TOO_LARGE_ERROR = 'df8637af-d466-48c6-a59d-e7126250a654';
+    public const INVALID_MIME_TYPE_ERROR = '744f00bc-4389-4c74-92de-9a43cde55534';
+    public const INVALID_EXTENSION_ERROR = 'c8c7315c-6186-4719-8b71-5659e16bdcb7';
+    public const FILENAME_TOO_LONG = 'e5706483-91a8-49d8-9a59-5e81a3c634a8';
+
+    protected const ERROR_NAMES = [
+        self::NOT_FOUND_ERROR => 'NOT_FOUND_ERROR',
+        self::NOT_READABLE_ERROR => 'NOT_READABLE_ERROR',
+        self::EMPTY_ERROR => 'EMPTY_ERROR',
+        self::TOO_LARGE_ERROR => 'TOO_LARGE_ERROR',
+        self::INVALID_MIME_TYPE_ERROR => 'INVALID_MIME_TYPE_ERROR',
+        self::INVALID_EXTENSION_ERROR => 'INVALID_EXTENSION_ERROR',
+        self::FILENAME_TOO_LONG => 'FILENAME_TOO_LONG',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $binaryFormat;
+    public $mimeTypes = [];
+    public ?int $filenameMaxLength = null;
+    public array|string|null $extensions = [];
+    public $notFoundMessage = 'The file could not be found.';
+    public $notReadableMessage = 'The file is not readable.';
+    public $maxSizeMessage = 'The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.';
+    public $mimeTypesMessage = 'The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.';
+    public string $extensionsMessage = 'The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.';
+    public $disallowEmptyMessage = 'An empty file is not allowed.';
+    public $filenameTooLongMessage = 'The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.';
+
+    public $uploadIniSizeErrorMessage = 'The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.';
+    public $uploadFormSizeErrorMessage = 'The file is too large.';
+    public $uploadPartialErrorMessage = 'The file was only partially uploaded.';
+    public $uploadNoFileErrorMessage = 'No file was uploaded.';
+    public $uploadNoTmpDirErrorMessage = 'No temporary folder was configured in php.ini.';
+    public $uploadCantWriteErrorMessage = 'Cannot write temporary file to disk.';
+    public $uploadExtensionErrorMessage = 'A PHP extension caused the upload to fail.';
+    public $uploadErrorMessage = 'The file could not be uploaded.';
+
+    protected $maxSize;
+
+    /**
+     * @param array<string|string[]>|string $extensions
+     */
+    public function __construct(
+        ?array $options = null,
+        int|string|null $maxSize = null,
+        ?bool $binaryFormat = null,
+        array|string|null $mimeTypes = null,
+        ?int $filenameMaxLength = null,
+        ?string $notFoundMessage = null,
+        ?string $notReadableMessage = null,
+        ?string $maxSizeMessage = null,
+        ?string $mimeTypesMessage = null,
+        ?string $disallowEmptyMessage = null,
+        ?string $filenameTooLongMessage = null,
+
+        ?string $uploadIniSizeErrorMessage = null,
+        ?string $uploadFormSizeErrorMessage = null,
+        ?string $uploadPartialErrorMessage = null,
+        ?string $uploadNoFileErrorMessage = null,
+        ?string $uploadNoTmpDirErrorMessage = null,
+        ?string $uploadCantWriteErrorMessage = null,
+        ?string $uploadExtensionErrorMessage = null,
+        ?string $uploadErrorMessage = null,
+        ?array $groups = null,
+        mixed $payload = null,
+
+        array|string|null $extensions = null,
+        ?string $extensionsMessage = null,
+    ) {
+        parent::__construct($options, $groups, $payload);
+
+        $this->maxSize = $maxSize ?? $this->maxSize;
+        $this->binaryFormat = $binaryFormat ?? $this->binaryFormat;
+        $this->mimeTypes = $mimeTypes ?? $this->mimeTypes;
+        $this->filenameMaxLength = $filenameMaxLength ?? $this->filenameMaxLength;
+        $this->extensions = $extensions ?? $this->extensions;
+        $this->notFoundMessage = $notFoundMessage ?? $this->notFoundMessage;
+        $this->notReadableMessage = $notReadableMessage ?? $this->notReadableMessage;
+        $this->maxSizeMessage = $maxSizeMessage ?? $this->maxSizeMessage;
+        $this->mimeTypesMessage = $mimeTypesMessage ?? $this->mimeTypesMessage;
+        $this->extensionsMessage = $extensionsMessage ?? $this->extensionsMessage;
+        $this->disallowEmptyMessage = $disallowEmptyMessage ?? $this->disallowEmptyMessage;
+        $this->filenameTooLongMessage = $filenameTooLongMessage ?? $this->filenameTooLongMessage;
+        $this->uploadIniSizeErrorMessage = $uploadIniSizeErrorMessage ?? $this->uploadIniSizeErrorMessage;
+        $this->uploadFormSizeErrorMessage = $uploadFormSizeErrorMessage ?? $this->uploadFormSizeErrorMessage;
+        $this->uploadPartialErrorMessage = $uploadPartialErrorMessage ?? $this->uploadPartialErrorMessage;
+        $this->uploadNoFileErrorMessage = $uploadNoFileErrorMessage ?? $this->uploadNoFileErrorMessage;
+        $this->uploadNoTmpDirErrorMessage = $uploadNoTmpDirErrorMessage ?? $this->uploadNoTmpDirErrorMessage;
+        $this->uploadCantWriteErrorMessage = $uploadCantWriteErrorMessage ?? $this->uploadCantWriteErrorMessage;
+        $this->uploadExtensionErrorMessage = $uploadExtensionErrorMessage ?? $this->uploadExtensionErrorMessage;
+        $this->uploadErrorMessage = $uploadErrorMessage ?? $this->uploadErrorMessage;
+
+        if (null !== $this->maxSize) {
+            $this->normalizeBinaryFormat($this->maxSize);
+        }
+    }
+
+    /**
+     * @return void
+     */
+    public function __set(string $option, mixed $value)
+    {
+        if ('maxSize' === $option) {
+            $this->normalizeBinaryFormat($value);
+
+            return;
+        }
+
+        parent::__set($option, $value);
+    }
+
+    public function __get(string $option): mixed
+    {
+        if ('maxSize' === $option) {
+            return $this->maxSize;
+        }
+
+        return parent::__get($option);
+    }
+
+    public function __isset(string $option): bool
+    {
+        if ('maxSize' === $option) {
+            return true;
+        }
+
+        return parent::__isset($option);
+    }
+
+    private function normalizeBinaryFormat(int|string $maxSize): void
+    {
+        $factors = [
+            'k' => 1000,
+            'ki' => 1 << 10,
+            'm' => 1000 * 1000,
+            'mi' => 1 << 20,
+            'g' => 1000 * 1000 * 1000,
+            'gi' => 1 << 30,
+        ];
+        if (ctype_digit((string) $maxSize)) {
+            $this->maxSize = (int) $maxSize;
+            $this->binaryFormat ??= false;
+        } elseif (preg_match('/^(\d++)('.implode('|', array_keys($factors)).')$/i', $maxSize, $matches)) {
+            $this->maxSize = $matches[1] * $factors[$unit = strtolower($matches[2])];
+            $this->binaryFormat ??= 2 === \strlen($unit);
+        } else {
+            throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum size.', $maxSize));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/FileValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/FileValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/FileValidator.php	(revision 8435)
@@ -0,0 +1,309 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\HttpFoundation\File\File as FileObject;
+use Symfony\Component\HttpFoundation\File\UploadedFile;
+use Symfony\Component\Mime\MimeTypes;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\LogicException;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class FileValidator extends ConstraintValidator
+{
+    public const KB_BYTES = 1000;
+    public const MB_BYTES = 1000000;
+    public const KIB_BYTES = 1024;
+    public const MIB_BYTES = 1048576;
+
+    private const SUFFICES = [
+        1 => 'bytes',
+        self::KB_BYTES => 'kB',
+        self::MB_BYTES => 'MB',
+        self::KIB_BYTES => 'KiB',
+        self::MIB_BYTES => 'MiB',
+    ];
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof File) {
+            throw new UnexpectedTypeException($constraint, File::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if ($value instanceof UploadedFile && !$value->isValid()) {
+            switch ($value->getError()) {
+                case \UPLOAD_ERR_INI_SIZE:
+                    $iniLimitSize = UploadedFile::getMaxFilesize();
+                    if ($constraint->maxSize && $constraint->maxSize < $iniLimitSize) {
+                        $limitInBytes = $constraint->maxSize;
+                        $binaryFormat = $constraint->binaryFormat;
+                    } else {
+                        $limitInBytes = $iniLimitSize;
+                        $binaryFormat = $constraint->binaryFormat ?? true;
+                    }
+
+                    [, $limitAsString, $suffix] = $this->factorizeSizes(0, $limitInBytes, $binaryFormat);
+                    $this->context->buildViolation($constraint->uploadIniSizeErrorMessage)
+                        ->setParameter('{{ limit }}', $limitAsString)
+                        ->setParameter('{{ suffix }}', $suffix)
+                        ->setCode((string) \UPLOAD_ERR_INI_SIZE)
+                        ->addViolation();
+
+                    return;
+                case \UPLOAD_ERR_FORM_SIZE:
+                    $this->context->buildViolation($constraint->uploadFormSizeErrorMessage)
+                        ->setCode((string) \UPLOAD_ERR_FORM_SIZE)
+                        ->addViolation();
+
+                    return;
+                case \UPLOAD_ERR_PARTIAL:
+                    $this->context->buildViolation($constraint->uploadPartialErrorMessage)
+                        ->setCode((string) \UPLOAD_ERR_PARTIAL)
+                        ->addViolation();
+
+                    return;
+                case \UPLOAD_ERR_NO_FILE:
+                    $this->context->buildViolation($constraint->uploadNoFileErrorMessage)
+                        ->setCode((string) \UPLOAD_ERR_NO_FILE)
+                        ->addViolation();
+
+                    return;
+                case \UPLOAD_ERR_NO_TMP_DIR:
+                    $this->context->buildViolation($constraint->uploadNoTmpDirErrorMessage)
+                        ->setCode((string) \UPLOAD_ERR_NO_TMP_DIR)
+                        ->addViolation();
+
+                    return;
+                case \UPLOAD_ERR_CANT_WRITE:
+                    $this->context->buildViolation($constraint->uploadCantWriteErrorMessage)
+                        ->setCode((string) \UPLOAD_ERR_CANT_WRITE)
+                        ->addViolation();
+
+                    return;
+                case \UPLOAD_ERR_EXTENSION:
+                    $this->context->buildViolation($constraint->uploadExtensionErrorMessage)
+                        ->setCode((string) \UPLOAD_ERR_EXTENSION)
+                        ->addViolation();
+
+                    return;
+                default:
+                    $this->context->buildViolation($constraint->uploadErrorMessage)
+                        ->setCode((string) $value->getError())
+                        ->addViolation();
+
+                    return;
+            }
+        }
+
+        if (!\is_scalar($value) && !$value instanceof FileObject && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $path = $value instanceof FileObject ? $value->getPathname() : (string) $value;
+
+        if (!is_file($path)) {
+            $this->context->buildViolation($constraint->notFoundMessage)
+                ->setParameter('{{ file }}', $this->formatValue($path))
+                ->setCode(File::NOT_FOUND_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if (!is_readable($path)) {
+            $this->context->buildViolation($constraint->notReadableMessage)
+                ->setParameter('{{ file }}', $this->formatValue($path))
+                ->setCode(File::NOT_READABLE_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        $sizeInBytes = filesize($path);
+        $basename = $value instanceof UploadedFile ? $value->getClientOriginalName() : basename($path);
+
+        if ($constraint->filenameMaxLength && $constraint->filenameMaxLength < $filenameLength = \strlen($basename)) {
+            $this->context->buildViolation($constraint->filenameTooLongMessage)
+                ->setParameter('{{ filename_max_length }}', $this->formatValue($constraint->filenameMaxLength))
+                ->setCode(File::FILENAME_TOO_LONG)
+                ->setPlural($constraint->filenameMaxLength)
+                ->addViolation();
+
+            return;
+        }
+
+        if (0 === $sizeInBytes) {
+            $this->context->buildViolation($constraint->disallowEmptyMessage)
+                ->setParameter('{{ file }}', $this->formatValue($path))
+                ->setParameter('{{ name }}', $this->formatValue($basename))
+                ->setCode(File::EMPTY_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if ($constraint->maxSize) {
+            $limitInBytes = $constraint->maxSize;
+
+            if ($sizeInBytes > $limitInBytes) {
+                [$sizeAsString, $limitAsString, $suffix] = $this->factorizeSizes($sizeInBytes, $limitInBytes, $constraint->binaryFormat);
+                $this->context->buildViolation($constraint->maxSizeMessage)
+                    ->setParameter('{{ file }}', $this->formatValue($path))
+                    ->setParameter('{{ size }}', $sizeAsString)
+                    ->setParameter('{{ limit }}', $limitAsString)
+                    ->setParameter('{{ suffix }}', $suffix)
+                    ->setParameter('{{ name }}', $this->formatValue($basename))
+                    ->setCode(File::TOO_LARGE_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+        }
+
+        $mimeTypes = (array) $constraint->mimeTypes;
+
+        if ($constraint->extensions) {
+            $fileExtension = strtolower(pathinfo($basename, \PATHINFO_EXTENSION));
+
+            $found = false;
+            $normalizedExtensions = [];
+            foreach ((array) $constraint->extensions as $k => $v) {
+                if (!\is_string($k)) {
+                    $k = $v;
+                    $v = null;
+                }
+
+                $normalizedExtensions[] = $k;
+
+                if ($fileExtension !== $k) {
+                    continue;
+                }
+
+                $found = true;
+                if (null === $v) {
+                    if (!class_exists(MimeTypes::class)) {
+                        throw new LogicException('You cannot validate the mime-type of files as the Mime component is not installed. Try running "composer require symfony/mime".');
+                    }
+
+                    $mimeTypesHelper = MimeTypes::getDefault();
+                    $v = $mimeTypesHelper->getMimeTypes($k);
+                }
+
+                $mimeTypes = $mimeTypes ? array_intersect($v, $mimeTypes) : (array) $v;
+                break;
+            }
+
+            if (!$found) {
+                $this->context->buildViolation($constraint->extensionsMessage)
+                    ->setParameter('{{ file }}', $this->formatValue($path))
+                    ->setParameter('{{ extension }}', $this->formatValue($fileExtension))
+                    ->setParameter('{{ extensions }}', $this->formatValues($normalizedExtensions))
+                    ->setParameter('{{ name }}', $this->formatValue($basename))
+                    ->setCode(File::INVALID_EXTENSION_ERROR)
+                    ->addViolation();
+            }
+        }
+
+        if ($mimeTypes) {
+            if ($value instanceof FileObject) {
+                $mime = $value->getMimeType();
+            } elseif (isset($mimeTypesHelper) || class_exists(MimeTypes::class)) {
+                $mime = ($mimeTypesHelper ?? MimeTypes::getDefault())->guessMimeType($path);
+            } elseif (!class_exists(FileObject::class)) {
+                throw new LogicException('You cannot validate the mime-type of files as the Mime component is not installed. Try running "composer require symfony/mime".');
+            } else {
+                $mime = (new FileObject($value))->getMimeType();
+            }
+
+            foreach ($mimeTypes as $mimeType) {
+                if ($mimeType === $mime) {
+                    return;
+                }
+
+                if ($discrete = strstr($mimeType, '/*', true)) {
+                    if (strstr($mime, '/', true) === $discrete) {
+                        return;
+                    }
+                }
+            }
+
+            $this->context->buildViolation($constraint->mimeTypesMessage)
+                ->setParameter('{{ file }}', $this->formatValue($path))
+                ->setParameter('{{ type }}', $this->formatValue($mime))
+                ->setParameter('{{ types }}', $this->formatValues($mimeTypes))
+                ->setParameter('{{ name }}', $this->formatValue($basename))
+                ->setCode(File::INVALID_MIME_TYPE_ERROR)
+                ->addViolation();
+        }
+    }
+
+    private static function moreDecimalsThan(string $double, int $numberOfDecimals): bool
+    {
+        return \strlen($double) > \strlen(round($double, $numberOfDecimals));
+    }
+
+    /**
+     * Convert the limit to the smallest possible number
+     * (i.e. try "MB", then "kB", then "bytes").
+     */
+    private function factorizeSizes(int $size, int|float $limit, bool $binaryFormat): array
+    {
+        if ($binaryFormat) {
+            $coef = self::MIB_BYTES;
+            $coefFactor = self::KIB_BYTES;
+        } else {
+            $coef = self::MB_BYTES;
+            $coefFactor = self::KB_BYTES;
+        }
+
+        // If $limit < $coef, $limitAsString could be < 1 with less than 3 decimals.
+        // In this case, we would end up displaying an allowed size < 1 (eg: 0.1 MB).
+        // It looks better to keep on factorizing (to display 100 kB for example).
+        while ($limit < $coef) {
+            $coef /= $coefFactor;
+        }
+
+        $limitAsString = (string) ($limit / $coef);
+
+        // Restrict the limit to 2 decimals (without rounding! we
+        // need the precise value)
+        while (self::moreDecimalsThan($limitAsString, 2)) {
+            $coef /= $coefFactor;
+            $limitAsString = (string) ($limit / $coef);
+        }
+
+        // Convert size to the same measure, but round to 2 decimals
+        $sizeAsString = (string) round($size / $coef, 2);
+
+        // If the size and limit produce the same string output
+        // (due to rounding), reduce the coefficient
+        while ($sizeAsString === $limitAsString) {
+            $coef /= $coefFactor;
+            $limitAsString = (string) ($limit / $coef);
+            $sizeAsString = (string) round($size / $coef, 2);
+        }
+
+        return [$sizeAsString, $limitAsString, self::SUFFICES[$coef]];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GreaterThan.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GreaterThan.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GreaterThan.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class GreaterThan extends AbstractComparison
+{
+    public const TOO_LOW_ERROR = '778b7ae0-84d3-481a-9dec-35fdb64b1d78';
+
+    protected const ERROR_NAMES = [
+        self::TOO_LOW_ERROR => 'TOO_LOW_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be greater than {{ compared_value }}.';
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GreaterThanOrEqual.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GreaterThanOrEqual.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GreaterThanOrEqual.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class GreaterThanOrEqual extends AbstractComparison
+{
+    public const TOO_LOW_ERROR = 'ea4e51d1-3342-48bd-87f1-9e672cd90cad';
+
+    protected const ERROR_NAMES = [
+        self::TOO_LOW_ERROR => 'TOO_LOW_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be greater than or equal to {{ compared_value }}.';
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GreaterThanOrEqualValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GreaterThanOrEqualValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GreaterThanOrEqualValidator.php	(revision 8435)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * Validates values are greater than or equal to the previous (>=).
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class GreaterThanOrEqualValidator extends AbstractComparisonValidator
+{
+    protected function compareValues(mixed $value1, mixed $value2): bool
+    {
+        return null === $value2 || $value1 >= $value2;
+    }
+
+    protected function getErrorCode(): ?string
+    {
+        return GreaterThanOrEqual::TOO_LOW_ERROR;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GreaterThanValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GreaterThanValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GreaterThanValidator.php	(revision 8435)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * Validates values are greater than the previous (>).
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class GreaterThanValidator extends AbstractComparisonValidator
+{
+    protected function compareValues(mixed $value1, mixed $value2): bool
+    {
+        return null === $value2 || $value1 > $value2;
+    }
+
+    protected function getErrorCode(): ?string
+    {
+        return GreaterThan::TOO_LOW_ERROR;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GroupSequence.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GroupSequence.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GroupSequence.php	(revision 8435)
@@ -0,0 +1,87 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * A sequence of validation groups.
+ *
+ * When validating a group sequence, each group will only be validated if all
+ * of the previous groups in the sequence succeeded. For example:
+ *
+ *     $validator->validate($address, null, new GroupSequence(['Basic', 'Strict']));
+ *
+ * In the first step, all constraints that belong to the group "Basic" will be
+ * validated. If none of the constraints fail, the validator will then validate
+ * the constraints in group "Strict". This is useful, for example, if "Strict"
+ * contains expensive checks that require a lot of CPU or slow, external
+ * services. You usually don't want to run expensive checks if any of the cheap
+ * checks fail.
+ *
+ * When adding metadata to a class, you can override the "Default" group of
+ * that class with a group sequence:
+ *     #[GroupSequence(['Address', 'Strict'])]
+ *     class Address
+ *     {
+ *         // ...
+ *     }
+ *
+ * Whenever you validate that object in the "Default" group, the group sequence
+ * will be validated:
+ *
+ *     $validator->validate($address);
+ *
+ * If you want to execute the constraints of the "Default" group for a class
+ * with an overridden default group, pass the class name as group name instead:
+ *
+ *     $validator->validate($address, null, "Address")
+ *
+ * @Annotation
+ * @Target({"CLASS", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_CLASS)]
+class GroupSequence
+{
+    /**
+     * The groups in the sequence.
+     *
+     * @var array<int, string|string[]|GroupSequence>
+     */
+    public $groups;
+
+    /**
+     * The group in which cascaded objects are validated when validating
+     * this sequence.
+     *
+     * By default, cascaded objects are validated in each of the groups of
+     * the sequence.
+     *
+     * If a class has a group sequence attached, that sequence replaces the
+     * "Default" group. When validating that class in the "Default" group, the
+     * group sequence is used instead, but still the "Default" group should be
+     * cascaded to other objects.
+     *
+     * @var string|GroupSequence
+     */
+    public $cascadedGroup;
+
+    /**
+     * Creates a new group sequence.
+     *
+     * @param array<string|string[]|GroupSequence> $groups The groups in the sequence
+     */
+    public function __construct(array $groups)
+    {
+        $this->groups = $groups['value'] ?? $groups;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GroupSequenceProvider.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GroupSequenceProvider.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/GroupSequenceProvider.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Doctrine\Common\Annotations\Annotation\NamedArgumentConstructor;
+use Symfony\Component\Validator\Attribute\HasNamedArguments;
+
+/**
+ * Attribute to define a group sequence provider.
+ *
+ * @Annotation
+ * @NamedArgumentConstructor
+ * @Target({"CLASS", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_CLASS)]
+class GroupSequenceProvider
+{
+    #[HasNamedArguments]
+    public function __construct(public ?string $provider = null)
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Hostname.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Hostname.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Hostname.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Dmitrii Poddubnyi <dpoddubny@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Hostname extends Constraint
+{
+    public const INVALID_HOSTNAME_ERROR = '7057ffdb-0af4-4f7e-bd5e-e9acfa6d7a2d';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_HOSTNAME_ERROR => 'INVALID_HOSTNAME_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value is not a valid hostname.';
+    public $requireTld = true;
+
+    public function __construct(
+        ?array $options = null,
+        ?string $message = null,
+        ?bool $requireTld = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->requireTld = $requireTld ?? $this->requireTld;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/HostnameValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/HostnameValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/HostnameValidator.php	(revision 8435)
@@ -0,0 +1,72 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Dmitrii Poddubnyi <dpoddubny@gmail.com>
+ */
+class HostnameValidator extends ConstraintValidator
+{
+    /**
+     * https://tools.ietf.org/html/rfc2606.
+     */
+    private const RESERVED_TLDS = [
+        'example',
+        'invalid',
+        'localhost',
+        'test',
+    ];
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Hostname) {
+            throw new UnexpectedTypeException($constraint, Hostname::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+        if ('' === $value) {
+            return;
+        }
+        if (!$this->isValid($value) || ($constraint->requireTld && !$this->hasValidTld($value))) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Hostname::INVALID_HOSTNAME_ERROR)
+                ->addViolation();
+        }
+    }
+
+    private function isValid(string $domain): bool
+    {
+        return false !== filter_var($domain, \FILTER_VALIDATE_DOMAIN, \FILTER_FLAG_HOSTNAME);
+    }
+
+    private function hasValidTld(string $domain): bool
+    {
+        return str_contains($domain, '.') && !\in_array(substr($domain, strrpos($domain, '.') + 1), self::RESERVED_TLDS, true);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Iban.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Iban.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Iban.php	(revision 8435)
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Manuel Reinhard <manu@sprain.ch>
+ * @author Michael Schummel
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Iban extends Constraint
+{
+    public const INVALID_COUNTRY_CODE_ERROR = 'de78ee2c-bd50-44e2-aec8-3d8228aeadb9';
+    public const INVALID_CHARACTERS_ERROR = '8d3d85e4-784f-4719-a5bc-d9e40d45a3a5';
+    public const CHECKSUM_FAILED_ERROR = 'b9401321-f9bf-4dcb-83c1-f31094440795';
+    public const INVALID_FORMAT_ERROR = 'c8d318f1-2ecc-41ba-b983-df70d225cf5a';
+    public const NOT_SUPPORTED_COUNTRY_CODE_ERROR = 'e2c259f3-4b46-48e6-b72e-891658158ec8';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_COUNTRY_CODE_ERROR => 'INVALID_COUNTRY_CODE_ERROR',
+        self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR',
+        self::CHECKSUM_FAILED_ERROR => 'CHECKSUM_FAILED_ERROR',
+        self::INVALID_FORMAT_ERROR => 'INVALID_FORMAT_ERROR',
+        self::NOT_SUPPORTED_COUNTRY_CODE_ERROR => 'NOT_SUPPORTED_COUNTRY_CODE_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This is not a valid International Bank Account Number (IBAN).';
+
+    public function __construct(?array $options = null, ?string $message = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IbanValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IbanValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IbanValidator.php	(revision 8435)
@@ -0,0 +1,297 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Manuel Reinhard <manu@sprain.ch>
+ * @author Michael Schummel
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class IbanValidator extends ConstraintValidator
+{
+    /**
+     * IBAN country specific formats.
+     *
+     * The first 2 characters from an IBAN format are the two-character ISO country code.
+     * The following 2 characters represent the check digits calculated from the rest of the IBAN characters.
+     * The rest are up to thirty alphanumeric characters for
+     * a BBAN (Basic Bank Account Number) which has a fixed length per country and,
+     * included within it, a bank identifier with a fixed position and a fixed length per country
+     *
+     * @see Resources/bin/sync-iban-formats.php
+     * @see https://www.swift.com/swift-resource/11971/download?language=en
+     * @see https://en.wikipedia.org/wiki/International_Bank_Account_Number
+     */
+    private const FORMATS = [
+        // auto-generated
+        'AD' => 'AD\d{2}\d{4}\d{4}[\dA-Z]{12}', // Andorra
+        'AE' => 'AE\d{2}\d{3}\d{16}', // United Arab Emirates (The)
+        'AL' => 'AL\d{2}\d{8}[\dA-Z]{16}', // Albania
+        'AO' => 'AO\d{2}\d{21}', // Angola
+        'AT' => 'AT\d{2}\d{5}\d{11}', // Austria
+        'AX' => 'FI\d{2}\d{3}\d{11}', // Finland
+        'AZ' => 'AZ\d{2}[A-Z]{4}[\dA-Z]{20}', // Azerbaijan
+        'BA' => 'BA\d{2}\d{3}\d{3}\d{8}\d{2}', // Bosnia and Herzegovina
+        'BE' => 'BE\d{2}\d{3}\d{7}\d{2}', // Belgium
+        'BF' => 'BF\d{2}[\dA-Z]{2}\d{22}', // Burkina Faso
+        'BG' => 'BG\d{2}[A-Z]{4}\d{4}\d{2}[\dA-Z]{8}', // Bulgaria
+        'BH' => 'BH\d{2}[A-Z]{4}[\dA-Z]{14}', // Bahrain
+        'BI' => 'BI\d{2}\d{5}\d{5}\d{11}\d{2}', // Burundi
+        'BJ' => 'BJ\d{2}[\dA-Z]{2}\d{22}', // Benin
+        'BL' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
+        'BR' => 'BR\d{2}\d{8}\d{5}\d{10}[A-Z]{1}[\dA-Z]{1}', // Brazil
+        'BY' => 'BY\d{2}[\dA-Z]{4}\d{4}[\dA-Z]{16}', // Republic of Belarus
+        'CF' => 'CF\d{2}\d{23}', // Central African Republic
+        'CG' => 'CG\d{2}\d{23}', // Congo, Republic of the
+        'CH' => 'CH\d{2}\d{5}[\dA-Z]{12}', // Switzerland
+        'CI' => 'CI\d{2}[A-Z]{1}\d{23}', // CÃŽte d'Ivoire
+        'CM' => 'CM\d{2}\d{23}', // Cameroon
+        'CR' => 'CR\d{2}\d{4}\d{14}', // Costa Rica
+        'CV' => 'CV\d{2}\d{21}', // Cabo Verde
+        'CY' => 'CY\d{2}\d{3}\d{5}[\dA-Z]{16}', // Cyprus
+        'CZ' => 'CZ\d{2}\d{4}\d{6}\d{10}', // Czechia
+        'DE' => 'DE\d{2}\d{8}\d{10}', // Germany
+        'DJ' => 'DJ\d{2}\d{5}\d{5}\d{11}\d{2}', // Djibouti
+        'DK' => 'DK\d{2}\d{4}\d{9}\d{1}', // Denmark
+        'DO' => 'DO\d{2}[\dA-Z]{4}\d{20}', // Dominican Republic
+        'DZ' => 'DZ\d{2}\d{22}', // Algeria
+        'EE' => 'EE\d{2}\d{2}\d{2}\d{11}\d{1}', // Estonia
+        'EG' => 'EG\d{2}\d{4}\d{4}\d{17}', // Egypt
+        'ES' => 'ES\d{2}\d{4}\d{4}\d{1}\d{1}\d{10}', // Spain
+        'FI' => 'FI\d{2}\d{3}\d{11}', // Finland
+        'FO' => 'FO\d{2}\d{4}\d{9}\d{1}', // Faroe Islands
+        'FR' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
+        'GA' => 'GA\d{2}\d{23}', // Gabon
+        'GB' => 'GB\d{2}[A-Z]{4}\d{6}\d{8}', // United Kingdom
+        'GE' => 'GE\d{2}[A-Z]{2}\d{16}', // Georgia
+        'GF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
+        'GG' => 'GB\d{2}[A-Z]{4}\d{6}\d{8}', // United Kingdom
+        'GI' => 'GI\d{2}[A-Z]{4}[\dA-Z]{15}', // Gibraltar
+        'GL' => 'GL\d{2}\d{4}\d{9}\d{1}', // Greenland
+        'GP' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
+        'GQ' => 'GQ\d{2}\d{23}', // Equatorial Guinea
+        'GR' => 'GR\d{2}\d{3}\d{4}[\dA-Z]{16}', // Greece
+        'GT' => 'GT\d{2}[\dA-Z]{4}[\dA-Z]{20}', // Guatemala
+        'GW' => 'GW\d{2}[\dA-Z]{2}\d{19}', // Guinea-Bissau
+        'HN' => 'HN\d{2}[A-Z]{4}\d{20}', // Honduras
+        'HR' => 'HR\d{2}\d{7}\d{10}', // Croatia
+        'HU' => 'HU\d{2}\d{3}\d{4}\d{1}\d{15}\d{1}', // Hungary
+        'IE' => 'IE\d{2}[A-Z]{4}\d{6}\d{8}', // Ireland
+        'IL' => 'IL\d{2}\d{3}\d{3}\d{13}', // Israel
+        'IM' => 'GB\d{2}[A-Z]{4}\d{6}\d{8}', // United Kingdom
+        'IQ' => 'IQ\d{2}[A-Z]{4}\d{3}\d{12}', // Iraq
+        'IR' => 'IR\d{2}\d{22}', // Iran
+        'IS' => 'IS\d{2}\d{4}\d{2}\d{6}\d{10}', // Iceland
+        'IT' => 'IT\d{2}[A-Z]{1}\d{5}\d{5}[\dA-Z]{12}', // Italy
+        'JE' => 'GB\d{2}[A-Z]{4}\d{6}\d{8}', // United Kingdom
+        'JO' => 'JO\d{2}[A-Z]{4}\d{4}[\dA-Z]{18}', // Jordan
+        'KM' => 'KM\d{2}\d{23}', // Comoros
+        'KW' => 'KW\d{2}[A-Z]{4}[\dA-Z]{22}', // Kuwait
+        'KZ' => 'KZ\d{2}\d{3}[\dA-Z]{13}', // Kazakhstan
+        'LB' => 'LB\d{2}\d{4}[\dA-Z]{20}', // Lebanon
+        'LC' => 'LC\d{2}[A-Z]{4}[\dA-Z]{24}', // Saint Lucia
+        'LI' => 'LI\d{2}\d{5}[\dA-Z]{12}', // Liechtenstein
+        'LT' => 'LT\d{2}\d{5}\d{11}', // Lithuania
+        'LU' => 'LU\d{2}\d{3}[\dA-Z]{13}', // Luxembourg
+        'LV' => 'LV\d{2}[A-Z]{4}[\dA-Z]{13}', // Latvia
+        'LY' => 'LY\d{2}\d{3}\d{3}\d{15}', // Libya
+        'MA' => 'MA\d{2}\d{24}', // Morocco
+        'MC' => 'MC\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // Monaco
+        'MD' => 'MD\d{2}[\dA-Z]{2}[\dA-Z]{18}', // Moldova
+        'ME' => 'ME\d{2}\d{3}\d{13}\d{2}', // Montenegro
+        'MF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
+        'MG' => 'MG\d{2}\d{23}', // Madagascar
+        'MK' => 'MK\d{2}\d{3}[\dA-Z]{10}\d{2}', // Macedonia
+        'ML' => 'ML\d{2}[\dA-Z]{2}\d{22}', // Mali
+        'MQ' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
+        'MR' => 'MR\d{2}\d{5}\d{5}\d{11}\d{2}', // Mauritania
+        'MT' => 'MT\d{2}[A-Z]{4}\d{5}[\dA-Z]{18}', // Malta
+        'MU' => 'MU\d{2}[A-Z]{4}\d{2}\d{2}\d{12}\d{3}[A-Z]{3}', // Mauritius
+        'MZ' => 'MZ\d{2}\d{21}', // Mozambique
+        'NC' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
+        'NE' => 'NE\d{2}[A-Z]{2}\d{22}', // Niger
+        'NI' => 'NI\d{2}[A-Z]{4}\d{24}', // Nicaragua
+        'NL' => 'NL\d{2}[A-Z]{4}\d{10}', // Netherlands (The)
+        'NO' => 'NO\d{2}\d{4}\d{6}\d{1}', // Norway
+        'PF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
+        'PK' => 'PK\d{2}[A-Z]{4}[\dA-Z]{16}', // Pakistan
+        'PL' => 'PL\d{2}\d{8}\d{16}', // Poland
+        'PM' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
+        'PS' => 'PS\d{2}[A-Z]{4}[\dA-Z]{21}', // Palestine, State of
+        'PT' => 'PT\d{2}\d{4}\d{4}\d{11}\d{2}', // Portugal
+        'QA' => 'QA\d{2}[A-Z]{4}[\dA-Z]{21}', // Qatar
+        'RE' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
+        'RO' => 'RO\d{2}[A-Z]{4}[\dA-Z]{16}', // Romania
+        'RS' => 'RS\d{2}\d{3}\d{13}\d{2}', // Serbia
+        'RU' => 'RU\d{2}\d{9}\d{5}[\dA-Z]{15}', // Russia
+        'SA' => 'SA\d{2}\d{2}[\dA-Z]{18}', // Saudi Arabia
+        'SC' => 'SC\d{2}[A-Z]{4}\d{2}\d{2}\d{16}[A-Z]{3}', // Seychelles
+        'SD' => 'SD\d{2}\d{2}\d{12}', // Sudan
+        'SE' => 'SE\d{2}\d{3}\d{16}\d{1}', // Sweden
+        'SI' => 'SI\d{2}\d{5}\d{8}\d{2}', // Slovenia
+        'SK' => 'SK\d{2}\d{4}\d{6}\d{10}', // Slovakia
+        'SM' => 'SM\d{2}[A-Z]{1}\d{5}\d{5}[\dA-Z]{12}', // San Marino
+        'SN' => 'SN\d{2}[A-Z]{2}\d{22}', // Senegal
+        'SO' => 'SO\d{2}\d{4}\d{3}\d{12}', // Somalia
+        'ST' => 'ST\d{2}\d{4}\d{4}\d{11}\d{2}', // Sao Tome and Principe
+        'SV' => 'SV\d{2}[A-Z]{4}\d{20}', // El Salvador
+        'TD' => 'TD\d{2}\d{23}', // Chad
+        'TF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
+        'TG' => 'TG\d{2}[A-Z]{2}\d{22}', // Togo
+        'TL' => 'TL\d{2}\d{3}\d{14}\d{2}', // Timor-Leste
+        'TN' => 'TN\d{2}\d{2}\d{3}\d{13}\d{2}', // Tunisia
+        'TR' => 'TR\d{2}\d{5}\d{1}[\dA-Z]{16}', // Turkey
+        'UA' => 'UA\d{2}\d{6}[\dA-Z]{19}', // Ukraine
+        'VA' => 'VA\d{2}\d{3}\d{15}', // Vatican City State
+        'VG' => 'VG\d{2}[A-Z]{4}\d{16}', // Virgin Islands
+        'WF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
+        'XK' => 'XK\d{2}\d{4}\d{10}\d{2}', // Kosovo
+        'YT' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
+    ];
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Iban) {
+            throw new UnexpectedTypeException($constraint, Iban::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        // Remove spaces and convert to uppercase
+        $canonicalized = str_replace(' ', '', strtoupper($value));
+
+        // The IBAN must contain only digits and characters...
+        if (!ctype_alnum($canonicalized)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Iban::INVALID_CHARACTERS_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        // ...start with a two-letter country code
+        $countryCode = substr($canonicalized, 0, 2);
+
+        if (!ctype_alpha($countryCode)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Iban::INVALID_COUNTRY_CODE_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        // ...have a format available
+        if (!\array_key_exists($countryCode, self::FORMATS)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Iban::NOT_SUPPORTED_COUNTRY_CODE_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        // ...and have a valid format
+        if (!preg_match('/^'.self::FORMATS[$countryCode].'$/', $canonicalized)
+        ) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Iban::INVALID_FORMAT_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        // Check digits should always between 2 and 98
+        // A ECBS document (https://www.ecbs.org/Download/EBS204_V3.PDF) replicates part of the ISO/IEC 7064:2003 standard as a method for generating check digits in the range 02 to 98.
+        $checkDigits = (int) substr($canonicalized, 2, 2);
+        if ($checkDigits < 2 || $checkDigits > 98) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Iban::CHECKSUM_FAILED_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        // Move the first four characters to the end
+        // e.g. CH93 0076 2011 6238 5295 7
+        //   -> 0076 2011 6238 5295 7 CH93
+        $canonicalized = substr($canonicalized, 4).substr($canonicalized, 0, 4);
+
+        // Convert all remaining letters to their ordinals
+        // The result is an integer, which is too large for PHP's int
+        // data type, so we store it in a string instead.
+        // e.g. 0076 2011 6238 5295 7 CH93
+        //   -> 0076 2011 6238 5295 7 121893
+        $checkSum = self::toBigInt($canonicalized);
+
+        // Do a modulo-97 operation on the large integer
+        // We cannot use PHP's modulo operator, so we calculate the
+        // modulo step-wisely instead
+        if (1 !== self::bigModulo97($checkSum)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Iban::CHECKSUM_FAILED_ERROR)
+                ->addViolation();
+        }
+    }
+
+    private static function toBigInt(string $string): string
+    {
+        $chars = str_split($string);
+        $bigInt = '';
+
+        foreach ($chars as $char) {
+            // Convert uppercase characters to ordinals, starting with 10 for "A"
+            if (ctype_upper($char)) {
+                $bigInt .= (\ord($char) - 55);
+
+                continue;
+            }
+
+            // Simply append digits
+            $bigInt .= $char;
+        }
+
+        return $bigInt;
+    }
+
+    private static function bigModulo97(string $bigInt): int
+    {
+        $parts = str_split($bigInt, 7);
+        $rest = 0;
+
+        foreach ($parts as $part) {
+            $rest = ($rest.$part) % 97;
+        }
+
+        return $rest;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IdenticalTo.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IdenticalTo.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IdenticalTo.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class IdenticalTo extends AbstractComparison
+{
+    public const NOT_IDENTICAL_ERROR = '2a8cc50f-58a2-4536-875e-060a2ce69ed5';
+
+    protected const ERROR_NAMES = [
+        self::NOT_IDENTICAL_ERROR => 'NOT_IDENTICAL_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be identical to {{ compared_value_type }} {{ compared_value }}.';
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IdenticalToValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IdenticalToValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IdenticalToValidator.php	(revision 8435)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * Validates values are identical (===).
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class IdenticalToValidator extends AbstractComparisonValidator
+{
+    protected function compareValues(mixed $value1, mixed $value2): bool
+    {
+        return $value1 === $value2;
+    }
+
+    protected function getErrorCode(): ?string
+    {
+        return IdenticalTo::NOT_IDENTICAL_ERROR;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Image.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Image.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Image.php	(revision 8435)
@@ -0,0 +1,199 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Benjamin Dulau <benjamin.dulau@gmail.com>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Image extends File
+{
+    public const SIZE_NOT_DETECTED_ERROR = '6d55c3f4-e58e-4fe3-91ee-74b492199956';
+    public const TOO_WIDE_ERROR = '7f87163d-878f-47f5-99ba-a8eb723a1ab2';
+    public const TOO_NARROW_ERROR = '9afbd561-4f90-4a27-be62-1780fc43604a';
+    public const TOO_HIGH_ERROR = '7efae81c-4877-47ba-aa65-d01ccb0d4645';
+    public const TOO_LOW_ERROR = 'aef0cb6a-c07f-4894-bc08-1781420d7b4c';
+    public const TOO_FEW_PIXEL_ERROR = '1b06b97d-ae48-474e-978f-038a74854c43';
+    public const TOO_MANY_PIXEL_ERROR = 'ee0804e8-44db-4eac-9775-be91aaf72ce1';
+    public const RATIO_TOO_BIG_ERROR = '70cafca6-168f-41c9-8c8c-4e47a52be643';
+    public const RATIO_TOO_SMALL_ERROR = '59b8c6ef-bcf2-4ceb-afff-4642ed92f12e';
+    public const SQUARE_NOT_ALLOWED_ERROR = '5d41425b-facb-47f7-a55a-de9fbe45cb46';
+    public const LANDSCAPE_NOT_ALLOWED_ERROR = '6f895685-7cf2-4d65-b3da-9029c5581d88';
+    public const PORTRAIT_NOT_ALLOWED_ERROR = '65608156-77da-4c79-a88c-02ef6d18c782';
+    public const CORRUPTED_IMAGE_ERROR = '5d4163f3-648f-4e39-87fd-cc5ea7aad2d1';
+
+    // Include the mapping from the base class
+
+    protected const ERROR_NAMES = [
+        self::NOT_FOUND_ERROR => 'NOT_FOUND_ERROR',
+        self::NOT_READABLE_ERROR => 'NOT_READABLE_ERROR',
+        self::EMPTY_ERROR => 'EMPTY_ERROR',
+        self::TOO_LARGE_ERROR => 'TOO_LARGE_ERROR',
+        self::INVALID_MIME_TYPE_ERROR => 'INVALID_MIME_TYPE_ERROR',
+        self::FILENAME_TOO_LONG => 'FILENAME_TOO_LONG',
+        self::SIZE_NOT_DETECTED_ERROR => 'SIZE_NOT_DETECTED_ERROR',
+        self::TOO_WIDE_ERROR => 'TOO_WIDE_ERROR',
+        self::TOO_NARROW_ERROR => 'TOO_NARROW_ERROR',
+        self::TOO_HIGH_ERROR => 'TOO_HIGH_ERROR',
+        self::TOO_LOW_ERROR => 'TOO_LOW_ERROR',
+        self::TOO_FEW_PIXEL_ERROR => 'TOO_FEW_PIXEL_ERROR',
+        self::TOO_MANY_PIXEL_ERROR => 'TOO_MANY_PIXEL_ERROR',
+        self::RATIO_TOO_BIG_ERROR => 'RATIO_TOO_BIG_ERROR',
+        self::RATIO_TOO_SMALL_ERROR => 'RATIO_TOO_SMALL_ERROR',
+        self::SQUARE_NOT_ALLOWED_ERROR => 'SQUARE_NOT_ALLOWED_ERROR',
+        self::LANDSCAPE_NOT_ALLOWED_ERROR => 'LANDSCAPE_NOT_ALLOWED_ERROR',
+        self::PORTRAIT_NOT_ALLOWED_ERROR => 'PORTRAIT_NOT_ALLOWED_ERROR',
+        self::CORRUPTED_IMAGE_ERROR => 'CORRUPTED_IMAGE_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $mimeTypes = 'image/*';
+    public $minWidth;
+    public $maxWidth;
+    public $maxHeight;
+    public $minHeight;
+    public $maxRatio;
+    public $minRatio;
+    public $minPixels;
+    public $maxPixels;
+    public $allowSquare = true;
+    public $allowLandscape = true;
+    public $allowPortrait = true;
+    public $detectCorrupted = false;
+
+    // The constant for a wrong MIME type is taken from the parent class.
+    public $mimeTypesMessage = 'This file is not a valid image.';
+    public $sizeNotDetectedMessage = 'The size of the image could not be detected.';
+    public $maxWidthMessage = 'The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.';
+    public $minWidthMessage = 'The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.';
+    public $maxHeightMessage = 'The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.';
+    public $minHeightMessage = 'The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.';
+    public $minPixelsMessage = 'The image has too few pixels ({{ pixels }} pixels). Minimum amount expected is {{ min_pixels }} pixels.';
+    public $maxPixelsMessage = 'The image has too many pixels ({{ pixels }} pixels). Maximum amount expected is {{ max_pixels }} pixels.';
+    public $maxRatioMessage = 'The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.';
+    public $minRatioMessage = 'The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.';
+    public $allowSquareMessage = 'The image is square ({{ width }}x{{ height }}px). Square images are not allowed.';
+    public $allowLandscapeMessage = 'The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.';
+    public $allowPortraitMessage = 'The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.';
+    public $corruptedMessage = 'The image file is corrupted.';
+
+    public function __construct(
+        ?array $options = null,
+        int|string|null $maxSize = null,
+        ?bool $binaryFormat = null,
+        ?array $mimeTypes = null,
+        ?int $filenameMaxLength = null,
+        ?int $minWidth = null,
+        ?int $maxWidth = null,
+        ?int $maxHeight = null,
+        ?int $minHeight = null,
+        int|float|null $maxRatio = null,
+        int|float|null $minRatio = null,
+        int|float|null $minPixels = null,
+        int|float|null $maxPixels = null,
+        ?bool $allowSquare = null,
+        ?bool $allowLandscape = null,
+        ?bool $allowPortrait = null,
+        ?bool $detectCorrupted = null,
+        ?string $notFoundMessage = null,
+        ?string $notReadableMessage = null,
+        ?string $maxSizeMessage = null,
+        ?string $mimeTypesMessage = null,
+        ?string $disallowEmptyMessage = null,
+        ?string $filenameTooLongMessage = null,
+        ?string $uploadIniSizeErrorMessage = null,
+        ?string $uploadFormSizeErrorMessage = null,
+        ?string $uploadPartialErrorMessage = null,
+        ?string $uploadNoFileErrorMessage = null,
+        ?string $uploadNoTmpDirErrorMessage = null,
+        ?string $uploadCantWriteErrorMessage = null,
+        ?string $uploadExtensionErrorMessage = null,
+        ?string $uploadErrorMessage = null,
+        ?string $sizeNotDetectedMessage = null,
+        ?string $maxWidthMessage = null,
+        ?string $minWidthMessage = null,
+        ?string $maxHeightMessage = null,
+        ?string $minHeightMessage = null,
+        ?string $minPixelsMessage = null,
+        ?string $maxPixelsMessage = null,
+        ?string $maxRatioMessage = null,
+        ?string $minRatioMessage = null,
+        ?string $allowSquareMessage = null,
+        ?string $allowLandscapeMessage = null,
+        ?string $allowPortraitMessage = null,
+        ?string $corruptedMessage = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        parent::__construct(
+            $options,
+            $maxSize,
+            $binaryFormat,
+            $mimeTypes,
+            $filenameMaxLength,
+            $notFoundMessage,
+            $notReadableMessage,
+            $maxSizeMessage,
+            $mimeTypesMessage,
+            $disallowEmptyMessage,
+            $filenameTooLongMessage,
+            $uploadIniSizeErrorMessage,
+            $uploadFormSizeErrorMessage,
+            $uploadPartialErrorMessage,
+            $uploadNoFileErrorMessage,
+            $uploadNoTmpDirErrorMessage,
+            $uploadCantWriteErrorMessage,
+            $uploadExtensionErrorMessage,
+            $uploadErrorMessage,
+            $groups,
+            $payload
+        );
+
+        $this->minWidth = $minWidth ?? $this->minWidth;
+        $this->maxWidth = $maxWidth ?? $this->maxWidth;
+        $this->maxHeight = $maxHeight ?? $this->maxHeight;
+        $this->minHeight = $minHeight ?? $this->minHeight;
+        $this->maxRatio = $maxRatio ?? $this->maxRatio;
+        $this->minRatio = $minRatio ?? $this->minRatio;
+        $this->minPixels = $minPixels ?? $this->minPixels;
+        $this->maxPixels = $maxPixels ?? $this->maxPixels;
+        $this->allowSquare = $allowSquare ?? $this->allowSquare;
+        $this->allowLandscape = $allowLandscape ?? $this->allowLandscape;
+        $this->allowPortrait = $allowPortrait ?? $this->allowPortrait;
+        $this->detectCorrupted = $detectCorrupted ?? $this->detectCorrupted;
+        $this->sizeNotDetectedMessage = $sizeNotDetectedMessage ?? $this->sizeNotDetectedMessage;
+        $this->maxWidthMessage = $maxWidthMessage ?? $this->maxWidthMessage;
+        $this->minWidthMessage = $minWidthMessage ?? $this->minWidthMessage;
+        $this->maxHeightMessage = $maxHeightMessage ?? $this->maxHeightMessage;
+        $this->minHeightMessage = $minHeightMessage ?? $this->minHeightMessage;
+        $this->minPixelsMessage = $minPixelsMessage ?? $this->minPixelsMessage;
+        $this->maxPixelsMessage = $maxPixelsMessage ?? $this->maxPixelsMessage;
+        $this->maxRatioMessage = $maxRatioMessage ?? $this->maxRatioMessage;
+        $this->minRatioMessage = $minRatioMessage ?? $this->minRatioMessage;
+        $this->allowSquareMessage = $allowSquareMessage ?? $this->allowSquareMessage;
+        $this->allowLandscapeMessage = $allowLandscapeMessage ?? $this->allowLandscapeMessage;
+        $this->allowPortraitMessage = $allowPortraitMessage ?? $this->allowPortraitMessage;
+        $this->corruptedMessage = $corruptedMessage ?? $this->corruptedMessage;
+
+        if (!\in_array('image/*', (array) $this->mimeTypes, true) && !\array_key_exists('mimeTypesMessage', $options ?? []) && null === $mimeTypesMessage) {
+            $this->mimeTypesMessage = 'The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.';
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ImageValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ImageValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ImageValidator.php	(revision 8435)
@@ -0,0 +1,237 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\LogicException;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * Validates whether a value is a valid image file and is valid
+ * against minWidth, maxWidth, minHeight and maxHeight constraints.
+ *
+ * @author Benjamin Dulau <benjamin.dulau@gmail.com>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class ImageValidator extends FileValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Image) {
+            throw new UnexpectedTypeException($constraint, Image::class);
+        }
+
+        $violations = \count($this->context->getViolations());
+
+        parent::validate($value, $constraint);
+
+        $failed = \count($this->context->getViolations()) !== $violations;
+
+        if ($failed || null === $value || '' === $value) {
+            return;
+        }
+
+        if (null === $constraint->minWidth && null === $constraint->maxWidth
+            && null === $constraint->minHeight && null === $constraint->maxHeight
+            && null === $constraint->minPixels && null === $constraint->maxPixels
+            && null === $constraint->minRatio && null === $constraint->maxRatio
+            && $constraint->allowSquare && $constraint->allowLandscape && $constraint->allowPortrait
+            && !$constraint->detectCorrupted) {
+            return;
+        }
+
+        $size = @getimagesize($value);
+
+        if (empty($size) || (0 === $size[0]) || (0 === $size[1])) {
+            $this->context->buildViolation($constraint->sizeNotDetectedMessage)
+                ->setCode(Image::SIZE_NOT_DETECTED_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        $width = $size[0];
+        $height = $size[1];
+
+        if ($constraint->minWidth) {
+            if (!ctype_digit((string) $constraint->minWidth)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum width.', $constraint->minWidth));
+            }
+
+            if ($width < $constraint->minWidth) {
+                $this->context->buildViolation($constraint->minWidthMessage)
+                    ->setParameter('{{ width }}', $width)
+                    ->setParameter('{{ min_width }}', $constraint->minWidth)
+                    ->setCode(Image::TOO_NARROW_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+        }
+
+        if ($constraint->maxWidth) {
+            if (!ctype_digit((string) $constraint->maxWidth)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum width.', $constraint->maxWidth));
+            }
+
+            if ($width > $constraint->maxWidth) {
+                $this->context->buildViolation($constraint->maxWidthMessage)
+                    ->setParameter('{{ width }}', $width)
+                    ->setParameter('{{ max_width }}', $constraint->maxWidth)
+                    ->setCode(Image::TOO_WIDE_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+        }
+
+        if ($constraint->minHeight) {
+            if (!ctype_digit((string) $constraint->minHeight)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum height.', $constraint->minHeight));
+            }
+
+            if ($height < $constraint->minHeight) {
+                $this->context->buildViolation($constraint->minHeightMessage)
+                    ->setParameter('{{ height }}', $height)
+                    ->setParameter('{{ min_height }}', $constraint->minHeight)
+                    ->setCode(Image::TOO_LOW_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+        }
+
+        if ($constraint->maxHeight) {
+            if (!ctype_digit((string) $constraint->maxHeight)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum height.', $constraint->maxHeight));
+            }
+
+            if ($height > $constraint->maxHeight) {
+                $this->context->buildViolation($constraint->maxHeightMessage)
+                    ->setParameter('{{ height }}', $height)
+                    ->setParameter('{{ max_height }}', $constraint->maxHeight)
+                    ->setCode(Image::TOO_HIGH_ERROR)
+                    ->addViolation();
+            }
+        }
+
+        $pixels = $width * $height;
+
+        if (null !== $constraint->minPixels) {
+            if (!ctype_digit((string) $constraint->minPixels)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum amount of pixels.', $constraint->minPixels));
+            }
+
+            if ($pixels < $constraint->minPixels) {
+                $this->context->buildViolation($constraint->minPixelsMessage)
+                    ->setParameter('{{ pixels }}', $pixels)
+                    ->setParameter('{{ min_pixels }}', $constraint->minPixels)
+                    ->setParameter('{{ height }}', $height)
+                    ->setParameter('{{ width }}', $width)
+                    ->setCode(Image::TOO_FEW_PIXEL_ERROR)
+                    ->addViolation();
+            }
+        }
+
+        if (null !== $constraint->maxPixels) {
+            if (!ctype_digit((string) $constraint->maxPixels)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum amount of pixels.', $constraint->maxPixels));
+            }
+
+            if ($pixels > $constraint->maxPixels) {
+                $this->context->buildViolation($constraint->maxPixelsMessage)
+                    ->setParameter('{{ pixels }}', $pixels)
+                    ->setParameter('{{ max_pixels }}', $constraint->maxPixels)
+                    ->setParameter('{{ height }}', $height)
+                    ->setParameter('{{ width }}', $width)
+                    ->setCode(Image::TOO_MANY_PIXEL_ERROR)
+                    ->addViolation();
+            }
+        }
+
+        $ratio = round($width / $height, 2);
+
+        if (null !== $constraint->minRatio) {
+            if (!is_numeric((string) $constraint->minRatio)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum ratio.', $constraint->minRatio));
+            }
+
+            if ($ratio < round($constraint->minRatio, 2)) {
+                $this->context->buildViolation($constraint->minRatioMessage)
+                    ->setParameter('{{ ratio }}', $ratio)
+                    ->setParameter('{{ min_ratio }}', round($constraint->minRatio, 2))
+                    ->setCode(Image::RATIO_TOO_SMALL_ERROR)
+                    ->addViolation();
+            }
+        }
+
+        if (null !== $constraint->maxRatio) {
+            if (!is_numeric((string) $constraint->maxRatio)) {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum ratio.', $constraint->maxRatio));
+            }
+
+            if ($ratio > round($constraint->maxRatio, 2)) {
+                $this->context->buildViolation($constraint->maxRatioMessage)
+                    ->setParameter('{{ ratio }}', $ratio)
+                    ->setParameter('{{ max_ratio }}', round($constraint->maxRatio, 2))
+                    ->setCode(Image::RATIO_TOO_BIG_ERROR)
+                    ->addViolation();
+            }
+        }
+
+        if (!$constraint->allowSquare && $width == $height) {
+            $this->context->buildViolation($constraint->allowSquareMessage)
+                ->setParameter('{{ width }}', $width)
+                ->setParameter('{{ height }}', $height)
+                ->setCode(Image::SQUARE_NOT_ALLOWED_ERROR)
+                ->addViolation();
+        }
+
+        if (!$constraint->allowLandscape && $width > $height) {
+            $this->context->buildViolation($constraint->allowLandscapeMessage)
+                ->setParameter('{{ width }}', $width)
+                ->setParameter('{{ height }}', $height)
+                ->setCode(Image::LANDSCAPE_NOT_ALLOWED_ERROR)
+                ->addViolation();
+        }
+
+        if (!$constraint->allowPortrait && $width < $height) {
+            $this->context->buildViolation($constraint->allowPortraitMessage)
+                ->setParameter('{{ width }}', $width)
+                ->setParameter('{{ height }}', $height)
+                ->setCode(Image::PORTRAIT_NOT_ALLOWED_ERROR)
+                ->addViolation();
+        }
+
+        if ($constraint->detectCorrupted) {
+            if (!\function_exists('imagecreatefromstring')) {
+                throw new LogicException('Corrupted images detection requires installed and enabled GD extension.');
+            }
+
+            $resource = @imagecreatefromstring(file_get_contents($value));
+
+            if (false === $resource) {
+                $this->context->buildViolation($constraint->corruptedMessage)
+                    ->setCode(Image::CORRUPTED_IMAGE_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+
+            imagedestroy($resource);
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Ip.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Ip.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Ip.php	(revision 8435)
@@ -0,0 +1,112 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\InvalidArgumentException;
+
+/**
+ * Validates that a value is a valid IP address.
+ *
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ * @author Joseph Bielawski <stloyd@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Ip extends Constraint
+{
+    public const V4 = '4';
+    public const V6 = '6';
+    public const ALL = 'all';
+
+    // adds FILTER_FLAG_NO_PRIV_RANGE flag (skip private ranges)
+    public const V4_NO_PRIV = '4_no_priv';
+    public const V6_NO_PRIV = '6_no_priv';
+    public const ALL_NO_PRIV = 'all_no_priv';
+
+    // adds FILTER_FLAG_NO_RES_RANGE flag (skip reserved ranges)
+    public const V4_NO_RES = '4_no_res';
+    public const V6_NO_RES = '6_no_res';
+    public const ALL_NO_RES = 'all_no_res';
+
+    // adds FILTER_FLAG_NO_PRIV_RANGE and FILTER_FLAG_NO_RES_RANGE flags (skip both)
+    public const V4_ONLY_PUBLIC = '4_public';
+    public const V6_ONLY_PUBLIC = '6_public';
+    public const ALL_ONLY_PUBLIC = 'all_public';
+
+    public const INVALID_IP_ERROR = 'b1b427ae-9f6f-41b0-aa9b-84511fbb3c5b';
+
+    protected const VERSIONS = [
+        self::V4,
+        self::V6,
+        self::ALL,
+
+        self::V4_NO_PRIV,
+        self::V6_NO_PRIV,
+        self::ALL_NO_PRIV,
+
+        self::V4_NO_RES,
+        self::V6_NO_RES,
+        self::ALL_NO_RES,
+
+        self::V4_ONLY_PUBLIC,
+        self::V6_ONLY_PUBLIC,
+        self::ALL_ONLY_PUBLIC,
+    ];
+
+    protected const ERROR_NAMES = [
+        self::INVALID_IP_ERROR => 'INVALID_IP_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const VERSIONS instead
+     */
+    protected static $versions = self::VERSIONS;
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $version = self::V4;
+
+    public $message = 'This is not a valid IP address.';
+
+    /** @var callable|null */
+    public $normalizer;
+
+    public function __construct(
+        ?array $options = null,
+        ?string $version = null,
+        ?string $message = null,
+        ?callable $normalizer = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        parent::__construct($options, $groups, $payload);
+
+        $this->version = $version ?? $this->version;
+        $this->message = $message ?? $this->message;
+        $this->normalizer = $normalizer ?? $this->normalizer;
+
+        if (!\in_array($this->version, self::$versions)) {
+            throw new ConstraintDefinitionException(sprintf('The option "version" must be one of "%s".', implode('", "', self::$versions)));
+        }
+
+        if (null !== $this->normalizer && !\is_callable($this->normalizer)) {
+            throw new InvalidArgumentException(sprintf('The "normalizer" option must be a valid callable ("%s" given).', get_debug_type($this->normalizer)));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IpValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IpValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IpValidator.php	(revision 8435)
@@ -0,0 +1,72 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * Validates whether a value is a valid IP address.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ * @author Joseph Bielawski <stloyd@gmail.com>
+ */
+class IpValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Ip) {
+            throw new UnexpectedTypeException($constraint, Ip::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        if (null !== $constraint->normalizer) {
+            $value = ($constraint->normalizer)($value);
+        }
+
+        $flag = match ($constraint->version) {
+            Ip::V4 => \FILTER_FLAG_IPV4,
+            Ip::V6 => \FILTER_FLAG_IPV6,
+            Ip::V4_NO_PRIV => \FILTER_FLAG_IPV4 | \FILTER_FLAG_NO_PRIV_RANGE,
+            Ip::V6_NO_PRIV => \FILTER_FLAG_IPV6 | \FILTER_FLAG_NO_PRIV_RANGE,
+            Ip::ALL_NO_PRIV => \FILTER_FLAG_NO_PRIV_RANGE,
+            Ip::V4_NO_RES => \FILTER_FLAG_IPV4 | \FILTER_FLAG_NO_RES_RANGE,
+            Ip::V6_NO_RES => \FILTER_FLAG_IPV6 | \FILTER_FLAG_NO_RES_RANGE,
+            Ip::ALL_NO_RES => \FILTER_FLAG_NO_RES_RANGE,
+            Ip::V4_ONLY_PUBLIC => \FILTER_FLAG_IPV4 | \FILTER_FLAG_NO_PRIV_RANGE | \FILTER_FLAG_NO_RES_RANGE,
+            Ip::V6_ONLY_PUBLIC => \FILTER_FLAG_IPV6 | \FILTER_FLAG_NO_PRIV_RANGE | \FILTER_FLAG_NO_RES_RANGE,
+            Ip::ALL_ONLY_PUBLIC => \FILTER_FLAG_NO_PRIV_RANGE | \FILTER_FLAG_NO_RES_RANGE,
+            default => 0,
+        };
+
+        if (!filter_var($value, \FILTER_VALIDATE_IP, $flag)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Ip::INVALID_IP_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsFalse.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsFalse.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsFalse.php	(revision 8435)
@@ -0,0 +1,44 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class IsFalse extends Constraint
+{
+    public const NOT_FALSE_ERROR = 'd53a91b0-def3-426a-83d7-269da7ab4200';
+
+    protected const ERROR_NAMES = [
+        self::NOT_FALSE_ERROR => 'NOT_FALSE_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be false.';
+
+    public function __construct(?array $options = null, ?string $message = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($options ?? [], $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsFalseValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsFalseValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsFalseValidator.php	(revision 8435)
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class IsFalseValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof IsFalse) {
+            throw new UnexpectedTypeException($constraint, IsFalse::class);
+        }
+
+        if (null === $value || false === $value || 0 === $value || '0' === $value) {
+            return;
+        }
+
+        $this->context->buildViolation($constraint->message)
+            ->setParameter('{{ value }}', $this->formatValue($value))
+            ->setCode(IsFalse::NOT_FALSE_ERROR)
+            ->addViolation();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsNull.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsNull.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsNull.php	(revision 8435)
@@ -0,0 +1,44 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class IsNull extends Constraint
+{
+    public const NOT_NULL_ERROR = '60d2f30b-8cfa-4372-b155-9656634de120';
+
+    protected const ERROR_NAMES = [
+        self::NOT_NULL_ERROR => 'NOT_NULL_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be null.';
+
+    public function __construct(?array $options = null, ?string $message = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($options ?? [], $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsNullValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsNullValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsNullValidator.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class IsNullValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof IsNull) {
+            throw new UnexpectedTypeException($constraint, IsNull::class);
+        }
+
+        if (null !== $value) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(IsNull::NOT_NULL_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsTrue.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsTrue.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsTrue.php	(revision 8435)
@@ -0,0 +1,44 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class IsTrue extends Constraint
+{
+    public const NOT_TRUE_ERROR = '2beabf1c-54c0-4882-a928-05249b26e23b';
+
+    protected const ERROR_NAMES = [
+        self::NOT_TRUE_ERROR => 'NOT_TRUE_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be true.';
+
+    public function __construct(?array $options = null, ?string $message = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($options ?? [], $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsTrueValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsTrueValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsTrueValidator.php	(revision 8435)
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class IsTrueValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof IsTrue) {
+            throw new UnexpectedTypeException($constraint, IsTrue::class);
+        }
+
+        if (null === $value || true === $value || 1 === $value || '1' === $value) {
+            return;
+        }
+
+        $this->context->buildViolation($constraint->message)
+            ->setParameter('{{ value }}', $this->formatValue($value))
+            ->setCode(IsTrue::NOT_TRUE_ERROR)
+            ->addViolation();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Isbn.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Isbn.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Isbn.php	(revision 8435)
@@ -0,0 +1,83 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author The Whole Life To Learn <thewholelifetolearn@gmail.com>
+ * @author Manuel Reinhard <manu@sprain.ch>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Isbn extends Constraint
+{
+    public const ISBN_10 = 'isbn10';
+    public const ISBN_13 = 'isbn13';
+
+    public const TOO_SHORT_ERROR = '949acbb0-8ef5-43ed-a0e9-032dfd08ae45';
+    public const TOO_LONG_ERROR = '3171387d-f80a-47b3-bd6e-60598545316a';
+    public const INVALID_CHARACTERS_ERROR = '23d21cea-da99-453d-98b1-a7d916fbb339';
+    public const CHECKSUM_FAILED_ERROR = '2881c032-660f-46b6-8153-d352d9706640';
+    public const TYPE_NOT_RECOGNIZED_ERROR = 'fa54a457-f042-441f-89c4-066ee5bdd3e1';
+
+    protected const ERROR_NAMES = [
+        self::TOO_SHORT_ERROR => 'TOO_SHORT_ERROR',
+        self::TOO_LONG_ERROR => 'TOO_LONG_ERROR',
+        self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR',
+        self::CHECKSUM_FAILED_ERROR => 'CHECKSUM_FAILED_ERROR',
+        self::TYPE_NOT_RECOGNIZED_ERROR => 'TYPE_NOT_RECOGNIZED_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $isbn10Message = 'This value is not a valid ISBN-10.';
+    public $isbn13Message = 'This value is not a valid ISBN-13.';
+    public $bothIsbnMessage = 'This value is neither a valid ISBN-10 nor a valid ISBN-13.';
+    public $type;
+    public $message;
+
+    public function __construct(
+        string|array|null $type = null,
+        ?string $message = null,
+        ?string $isbn10Message = null,
+        ?string $isbn13Message = null,
+        ?string $bothIsbnMessage = null,
+        ?array $groups = null,
+        mixed $payload = null,
+        array $options = []
+    ) {
+        if (\is_array($type)) {
+            $options = array_merge($type, $options);
+        } elseif (null !== $type) {
+            $options['value'] = $type;
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->isbn10Message = $isbn10Message ?? $this->isbn10Message;
+        $this->isbn13Message = $isbn13Message ?? $this->isbn13Message;
+        $this->bothIsbnMessage = $bothIsbnMessage ?? $this->bothIsbnMessage;
+    }
+
+    public function getDefaultOption(): ?string
+    {
+        return 'type';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsbnValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsbnValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsbnValidator.php	(revision 8435)
@@ -0,0 +1,193 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * Validates whether the value is a valid ISBN-10 or ISBN-13.
+ *
+ * @author The Whole Life To Learn <thewholelifetolearn@gmail.com>
+ * @author Manuel Reinhard <manu@sprain.ch>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see https://en.wikipedia.org/wiki/Isbn
+ */
+class IsbnValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Isbn) {
+            throw new UnexpectedTypeException($constraint, Isbn::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+        $canonical = str_replace('-', '', $value);
+
+        // Explicitly validate against ISBN-10
+        if (Isbn::ISBN_10 === $constraint->type) {
+            if (true !== ($code = $this->validateIsbn10($canonical))) {
+                $this->context->buildViolation($this->getMessage($constraint, $constraint->type))
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode($code)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        // Explicitly validate against ISBN-13
+        if (Isbn::ISBN_13 === $constraint->type) {
+            if (true !== ($code = $this->validateIsbn13($canonical))) {
+                $this->context->buildViolation($this->getMessage($constraint, $constraint->type))
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode($code)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        // Try both ISBNs
+
+        // First, try ISBN-10
+        $code = $this->validateIsbn10($canonical);
+
+        // The ISBN can only be an ISBN-13 if the value was too long for ISBN-10
+        if (Isbn::TOO_LONG_ERROR === $code) {
+            // Try ISBN-13 now
+            $code = $this->validateIsbn13($canonical);
+
+            // If too short, this means we have 11 or 12 digits
+            if (Isbn::TOO_SHORT_ERROR === $code) {
+                $code = Isbn::TYPE_NOT_RECOGNIZED_ERROR;
+            }
+        }
+
+        if (true !== $code) {
+            $this->context->buildViolation($this->getMessage($constraint))
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode($code)
+                ->addViolation();
+        }
+    }
+
+    /**
+     * @return string|bool
+     */
+    protected function validateIsbn10(string $isbn)
+    {
+        // Choose an algorithm so that ERROR_INVALID_CHARACTERS is preferred
+        // over ERROR_TOO_SHORT/ERROR_TOO_LONG
+        // Otherwise "0-45122-5244" passes, but "0-45122_5244" reports
+        // "too long"
+
+        // Error priority:
+        // 1. ERROR_INVALID_CHARACTERS
+        // 2. ERROR_TOO_SHORT/ERROR_TOO_LONG
+        // 3. ERROR_CHECKSUM_FAILED
+
+        $checkSum = 0;
+
+        for ($i = 0; $i < 10; ++$i) {
+            // If we test the length before the loop, we get an ERROR_TOO_SHORT
+            // when actually an ERROR_INVALID_CHARACTERS is wanted, e.g. for
+            // "0-45122_5244" (typo)
+            if (!isset($isbn[$i])) {
+                return Isbn::TOO_SHORT_ERROR;
+            }
+
+            if ('X' === $isbn[$i]) {
+                $digit = 10;
+            } elseif (ctype_digit($isbn[$i])) {
+                $digit = $isbn[$i];
+            } else {
+                return Isbn::INVALID_CHARACTERS_ERROR;
+            }
+
+            $checkSum += $digit * (10 - $i);
+        }
+
+        if (isset($isbn[$i])) {
+            return Isbn::TOO_LONG_ERROR;
+        }
+
+        return 0 === $checkSum % 11 ? true : Isbn::CHECKSUM_FAILED_ERROR;
+    }
+
+    /**
+     * @return string|bool
+     */
+    protected function validateIsbn13(string $isbn)
+    {
+        // Error priority:
+        // 1. ERROR_INVALID_CHARACTERS
+        // 2. ERROR_TOO_SHORT/ERROR_TOO_LONG
+        // 3. ERROR_CHECKSUM_FAILED
+
+        if (!ctype_digit($isbn)) {
+            return Isbn::INVALID_CHARACTERS_ERROR;
+        }
+
+        $length = \strlen($isbn);
+
+        if ($length < 13) {
+            return Isbn::TOO_SHORT_ERROR;
+        }
+
+        if ($length > 13) {
+            return Isbn::TOO_LONG_ERROR;
+        }
+
+        $checkSum = 0;
+
+        for ($i = 0; $i < 13; $i += 2) {
+            $checkSum += $isbn[$i];
+        }
+
+        for ($i = 1; $i < 12; $i += 2) {
+            $checkSum += $isbn[$i] * 3;
+        }
+
+        return 0 === $checkSum % 10 ? true : Isbn::CHECKSUM_FAILED_ERROR;
+    }
+
+    /**
+     * @return string
+     */
+    protected function getMessage(Isbn $constraint, ?string $type = null)
+    {
+        if (null !== $constraint->message) {
+            return $constraint->message;
+        } elseif (Isbn::ISBN_10 === $type) {
+            return $constraint->isbn10Message;
+        } elseif (Isbn::ISBN_13 === $type) {
+            return $constraint->isbn13Message;
+        }
+
+        return $constraint->bothIsbnMessage;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Isin.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Isin.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Isin.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Laurent MasfornÃ© <l.masforne@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Isin extends Constraint
+{
+    public const VALIDATION_LENGTH = 12;
+    public const VALIDATION_PATTERN = '/[A-Z]{2}[A-Z0-9]{9}[0-9]{1}/';
+
+    public const INVALID_LENGTH_ERROR = '88738dfc-9ed5-ba1e-aebe-402a2a9bf58e';
+    public const INVALID_PATTERN_ERROR = '3d08ce0-ded9-a93d-9216-17ac21265b65e';
+    public const INVALID_CHECKSUM_ERROR = '32089b-0ee1-93ba-399e-aa232e62f2d29d';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_LENGTH_ERROR => 'INVALID_LENGTH_ERROR',
+        self::INVALID_PATTERN_ERROR => 'INVALID_PATTERN_ERROR',
+        self::INVALID_CHECKSUM_ERROR => 'INVALID_CHECKSUM_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value is not a valid International Securities Identification Number (ISIN).';
+
+    public function __construct(?array $options = null, ?string $message = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsinValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsinValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IsinValidator.php	(revision 8435)
@@ -0,0 +1,81 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Laurent MasfornÃ© <l.masforne@gmail.com>
+ *
+ * @see https://en.wikipedia.org/wiki/International_Securities_Identification_Number
+ */
+class IsinValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Isin) {
+            throw new UnexpectedTypeException($constraint, Isin::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = strtoupper($value);
+
+        if (Isin::VALIDATION_LENGTH !== \strlen($value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Isin::INVALID_LENGTH_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if (!preg_match(Isin::VALIDATION_PATTERN, $value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Isin::INVALID_PATTERN_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if (!$this->isCorrectChecksum($value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Isin::INVALID_CHECKSUM_ERROR)
+                ->addViolation();
+        }
+    }
+
+    private function isCorrectChecksum(string $input): bool
+    {
+        $characters = str_split($input);
+        foreach ($characters as $i => $char) {
+            $characters[$i] = \intval($char, 36);
+        }
+        $number = implode('', $characters);
+
+        return 0 === $this->context->getValidator()->validate($number, new Luhn())->count();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Issn.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Issn.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Issn.php	(revision 8435)
@@ -0,0 +1,65 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Antonio J. GarcÃ­a Lagar <aj@garcialagar.es>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Issn extends Constraint
+{
+    public const TOO_SHORT_ERROR = '6a20dd3d-f463-4460-8e7b-18a1b98abbfb';
+    public const TOO_LONG_ERROR = '37cef893-5871-464e-8b12-7fb79324833c';
+    public const MISSING_HYPHEN_ERROR = '2983286f-8134-4693-957a-1ec4ef887b15';
+    public const INVALID_CHARACTERS_ERROR = 'a663d266-37c2-4ece-a914-ae891940c588';
+    public const INVALID_CASE_ERROR = '7b6dd393-7523-4a6c-b84d-72b91bba5e1a';
+    public const CHECKSUM_FAILED_ERROR = 'b0f92dbc-667c-48de-b526-ad9586d43e85';
+
+    protected const ERROR_NAMES = [
+        self::TOO_SHORT_ERROR => 'TOO_SHORT_ERROR',
+        self::TOO_LONG_ERROR => 'TOO_LONG_ERROR',
+        self::MISSING_HYPHEN_ERROR => 'MISSING_HYPHEN_ERROR',
+        self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR',
+        self::INVALID_CASE_ERROR => 'INVALID_CASE_ERROR',
+        self::CHECKSUM_FAILED_ERROR => 'CHECKSUM_FAILED_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value is not a valid ISSN.';
+    public $caseSensitive = false;
+    public $requireHyphen = false;
+
+    public function __construct(
+        ?array $options = null,
+        ?string $message = null,
+        ?bool $caseSensitive = null,
+        ?bool $requireHyphen = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->caseSensitive = $caseSensitive ?? $this->caseSensitive;
+        $this->requireHyphen = $requireHyphen ?? $this->requireHyphen;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IssnValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IssnValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/IssnValidator.php	(revision 8435)
@@ -0,0 +1,131 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * Validates whether the value is a valid ISSN.
+ *
+ * @author Antonio J. GarcÃ­a Lagar <aj@garcialagar.es>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see https://en.wikipedia.org/wiki/Issn
+ */
+class IssnValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Issn) {
+            throw new UnexpectedTypeException($constraint, Issn::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+        $canonical = $value;
+
+        // 1234-567X
+        //     ^
+        if (isset($canonical[4]) && '-' === $canonical[4]) {
+            // remove hyphen
+            $canonical = substr($canonical, 0, 4).substr($canonical, 5);
+        } elseif ($constraint->requireHyphen) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Issn::MISSING_HYPHEN_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        $length = \strlen($canonical);
+
+        if ($length < 8) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Issn::TOO_SHORT_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if ($length > 8) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Issn::TOO_LONG_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        // 1234567X
+        // ^^^^^^^ digits only
+        if (!ctype_digit(substr($canonical, 0, 7))) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Issn::INVALID_CHARACTERS_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        // 1234567X
+        //        ^ digit, x or X
+        if (!ctype_digit($canonical[7]) && 'x' !== $canonical[7] && 'X' !== $canonical[7]) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Issn::INVALID_CHARACTERS_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        // 1234567X
+        //        ^ case-sensitive?
+        if ($constraint->caseSensitive && 'x' === $canonical[7]) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Issn::INVALID_CASE_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        // Calculate a checksum. "X" equals 10.
+        $checkSum = 'X' === $canonical[7] || 'x' === $canonical[7] ? 10 : $canonical[7];
+
+        for ($i = 0; $i < 7; ++$i) {
+            // Multiply the first digit by 8, the second by 7, etc.
+            $checkSum += (8 - $i) * (int) $canonical[$i];
+        }
+
+        if (0 !== $checkSum % 11) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Issn::CHECKSUM_FAILED_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Json.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Json.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Json.php	(revision 8435)
@@ -0,0 +1,44 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Imad ZAIRIG <imadzairig@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Json extends Constraint
+{
+    public const INVALID_JSON_ERROR = '0789c8ad-2d2b-49a4-8356-e2ce63998504';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_JSON_ERROR => 'INVALID_JSON_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be valid JSON.';
+
+    public function __construct(?array $options = null, ?string $message = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/JsonValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/JsonValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/JsonValidator.php	(revision 8435)
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Imad ZAIRIG <imadzairig@gmail.com>
+ */
+class JsonValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Json) {
+            throw new UnexpectedTypeException($constraint, Json::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        if (!json_validate($value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Json::INVALID_JSON_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Language.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Language.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Language.php	(revision 8435)
@@ -0,0 +1,57 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Intl\Languages;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\LogicException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Language extends Constraint
+{
+    public const NO_SUCH_LANGUAGE_ERROR = 'ee65fec4-9a20-4202-9f39-ca558cd7bdf7';
+
+    protected const ERROR_NAMES = [
+        self::NO_SUCH_LANGUAGE_ERROR => 'NO_SUCH_LANGUAGE_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value is not a valid language.';
+    public $alpha3 = false;
+
+    public function __construct(
+        ?array $options = null,
+        ?string $message = null,
+        ?bool $alpha3 = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        if (!class_exists(Languages::class)) {
+            throw new LogicException('The Intl component is required to use the Language constraint. Try running "composer require symfony/intl".');
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->alpha3 = $alpha3 ?? $this->alpha3;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LanguageValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LanguageValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LanguageValidator.php	(revision 8435)
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Intl\Languages;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * Validates whether a value is a valid language code.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class LanguageValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Language) {
+            throw new UnexpectedTypeException($constraint, Language::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        if ($constraint->alpha3 ? !Languages::alpha3CodeExists($value) : !Languages::exists($value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Language::NO_SUCH_LANGUAGE_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Length.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Length.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Length.php	(revision 8435)
@@ -0,0 +1,122 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\InvalidArgumentException;
+use Symfony\Component\Validator\Exception\MissingOptionsException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Length extends Constraint
+{
+    public const TOO_SHORT_ERROR = '9ff3fdc4-b214-49db-8718-39c315e33d45';
+    public const TOO_LONG_ERROR = 'd94b19cc-114f-4f44-9cc4-4138e80a87b9';
+    public const NOT_EQUAL_LENGTH_ERROR = '4b6f5c76-22b4-409d-af16-fbe823ba9332';
+    public const INVALID_CHARACTERS_ERROR = '35e6a710-aa2e-4719-b58e-24b35749b767';
+
+    protected const ERROR_NAMES = [
+        self::TOO_SHORT_ERROR => 'TOO_SHORT_ERROR',
+        self::TOO_LONG_ERROR => 'TOO_LONG_ERROR',
+        self::NOT_EQUAL_LENGTH_ERROR => 'NOT_EQUAL_LENGTH_ERROR',
+        self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR',
+    ];
+
+    public const COUNT_BYTES = 'bytes';
+    public const COUNT_CODEPOINTS = 'codepoints';
+    public const COUNT_GRAPHEMES = 'graphemes';
+
+    private const VALID_COUNT_UNITS = [
+        self::COUNT_BYTES,
+        self::COUNT_CODEPOINTS,
+        self::COUNT_GRAPHEMES,
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $maxMessage = 'This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.';
+    public $minMessage = 'This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.';
+    public $exactMessage = 'This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.';
+    public $charsetMessage = 'This value does not match the expected {{ charset }} charset.';
+    public $max;
+    public $min;
+    public $charset = 'UTF-8';
+    /** @var callable|null */
+    public $normalizer;
+    /** @var self::COUNT_* */
+    public string $countUnit = self::COUNT_CODEPOINTS;
+
+    /**
+     * @param self::COUNT_*|null $countUnit
+     */
+    public function __construct(
+        int|array|null $exactly = null,
+        ?int $min = null,
+        ?int $max = null,
+        ?string $charset = null,
+        ?callable $normalizer = null,
+        ?string $countUnit = null,
+        ?string $exactMessage = null,
+        ?string $minMessage = null,
+        ?string $maxMessage = null,
+        ?string $charsetMessage = null,
+        ?array $groups = null,
+        mixed $payload = null,
+        array $options = []
+    ) {
+        if (\is_array($exactly)) {
+            $options = array_merge($exactly, $options);
+            $exactly = $options['value'] ?? null;
+        }
+
+        $min ??= $options['min'] ?? null;
+        $max ??= $options['max'] ?? null;
+
+        unset($options['value'], $options['min'], $options['max']);
+
+        if (null !== $exactly && null === $min && null === $max) {
+            $min = $max = $exactly;
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->min = $min;
+        $this->max = $max;
+        $this->charset = $charset ?? $this->charset;
+        $this->normalizer = $normalizer ?? $this->normalizer;
+        $this->countUnit = $countUnit ?? $this->countUnit;
+        $this->exactMessage = $exactMessage ?? $this->exactMessage;
+        $this->minMessage = $minMessage ?? $this->minMessage;
+        $this->maxMessage = $maxMessage ?? $this->maxMessage;
+        $this->charsetMessage = $charsetMessage ?? $this->charsetMessage;
+
+        if (null === $this->min && null === $this->max) {
+            throw new MissingOptionsException(sprintf('Either option "min" or "max" must be given for constraint "%s".', __CLASS__), ['min', 'max']);
+        }
+
+        if (null !== $this->normalizer && !\is_callable($this->normalizer)) {
+            throw new InvalidArgumentException(sprintf('The "normalizer" option must be a valid callable ("%s" given).', get_debug_type($this->normalizer)));
+        }
+
+        if (!\in_array($this->countUnit, self::VALID_COUNT_UNITS)) {
+            throw new InvalidArgumentException(sprintf('The "countUnit" option must be one of the "%s"::COUNT_* constants ("%s" given).', __CLASS__, $this->countUnit));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LengthValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LengthValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LengthValidator.php	(revision 8435)
@@ -0,0 +1,102 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class LengthValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Length) {
+            throw new UnexpectedTypeException($constraint, Length::class);
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $stringValue = (string) $value;
+
+        if (null !== $constraint->normalizer) {
+            $stringValue = ($constraint->normalizer)($stringValue);
+        }
+
+        try {
+            $invalidCharset = !@mb_check_encoding($stringValue, $constraint->charset);
+        } catch (\ValueError $e) {
+            if (!str_starts_with($e->getMessage(), 'mb_check_encoding(): Argument #2 ($encoding) must be a valid encoding')) {
+                throw $e;
+            }
+
+            $invalidCharset = true;
+        }
+
+        $length = $invalidCharset ? 0 : match ($constraint->countUnit) {
+            Length::COUNT_BYTES => \strlen($stringValue),
+            Length::COUNT_CODEPOINTS => mb_strlen($stringValue, $constraint->charset),
+            Length::COUNT_GRAPHEMES => grapheme_strlen($stringValue),
+        };
+
+        if ($invalidCharset || false === ($length ?? false)) {
+            $this->context->buildViolation($constraint->charsetMessage)
+                ->setParameter('{{ value }}', $this->formatValue($stringValue))
+                ->setParameter('{{ charset }}', $constraint->charset)
+                ->setInvalidValue($value)
+                ->setCode(Length::INVALID_CHARACTERS_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if (null !== $constraint->max && $length > $constraint->max) {
+            $exactlyOptionEnabled = $constraint->min == $constraint->max;
+
+            $this->context->buildViolation($exactlyOptionEnabled ? $constraint->exactMessage : $constraint->maxMessage)
+                ->setParameter('{{ value }}', $this->formatValue($stringValue))
+                ->setParameter('{{ limit }}', $constraint->max)
+                ->setParameter('{{ value_length }}', $length)
+                ->setInvalidValue($value)
+                ->setPlural((int) $constraint->max)
+                ->setCode($exactlyOptionEnabled ? Length::NOT_EQUAL_LENGTH_ERROR : Length::TOO_LONG_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if (null !== $constraint->min && $length < $constraint->min) {
+            $exactlyOptionEnabled = $constraint->min == $constraint->max;
+
+            $this->context->buildViolation($exactlyOptionEnabled ? $constraint->exactMessage : $constraint->minMessage)
+                ->setParameter('{{ value }}', $this->formatValue($stringValue))
+                ->setParameter('{{ limit }}', $constraint->min)
+                ->setParameter('{{ value_length }}', $length)
+                ->setInvalidValue($value)
+                ->setPlural((int) $constraint->min)
+                ->setCode($exactlyOptionEnabled ? Length::NOT_EQUAL_LENGTH_ERROR : Length::TOO_SHORT_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LessThan.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LessThan.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LessThan.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class LessThan extends AbstractComparison
+{
+    public const TOO_HIGH_ERROR = '079d7420-2d13-460c-8756-de810eeb37d2';
+
+    protected const ERROR_NAMES = [
+        self::TOO_HIGH_ERROR => 'TOO_HIGH_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be less than {{ compared_value }}.';
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LessThanOrEqual.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LessThanOrEqual.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LessThanOrEqual.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class LessThanOrEqual extends AbstractComparison
+{
+    public const TOO_HIGH_ERROR = '30fbb013-d015-4232-8b3b-8f3be97a7e14';
+
+    protected const ERROR_NAMES = [
+        self::TOO_HIGH_ERROR => 'TOO_HIGH_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be less than or equal to {{ compared_value }}.';
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LessThanOrEqualValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LessThanOrEqualValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LessThanOrEqualValidator.php	(revision 8435)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * Validates values are less than or equal to the previous (<=).
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class LessThanOrEqualValidator extends AbstractComparisonValidator
+{
+    protected function compareValues(mixed $value1, mixed $value2): bool
+    {
+        return null === $value2 || $value1 <= $value2;
+    }
+
+    protected function getErrorCode(): ?string
+    {
+        return LessThanOrEqual::TOO_HIGH_ERROR;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LessThanValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LessThanValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LessThanValidator.php	(revision 8435)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * Validates values are less than the previous (<).
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class LessThanValidator extends AbstractComparisonValidator
+{
+    protected function compareValues(mixed $value1, mixed $value2): bool
+    {
+        return null === $value2 || $value1 < $value2;
+    }
+
+    protected function getErrorCode(): ?string
+    {
+        return LessThan::TOO_HIGH_ERROR;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Locale.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Locale.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Locale.php	(revision 8435)
@@ -0,0 +1,57 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Intl\Locales;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\LogicException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Locale extends Constraint
+{
+    public const NO_SUCH_LOCALE_ERROR = 'a0af4293-1f1a-4a1c-a328-979cba6182a2';
+
+    protected const ERROR_NAMES = [
+        self::NO_SUCH_LOCALE_ERROR => 'NO_SUCH_LOCALE_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value is not a valid locale.';
+    public $canonicalize = true;
+
+    public function __construct(
+        ?array $options = null,
+        ?string $message = null,
+        ?bool $canonicalize = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        if (!class_exists(Locales::class)) {
+            throw new LogicException('The Intl component is required to use the Locale constraint. Try running "composer require symfony/intl".');
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->canonicalize = $canonicalize ?? $this->canonicalize;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LocaleValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LocaleValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LocaleValidator.php	(revision 8435)
@@ -0,0 +1,57 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Intl\Locales;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * Validates whether a value is a valid locale code.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class LocaleValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Locale) {
+            throw new UnexpectedTypeException($constraint, Locale::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $inputValue = (string) $value;
+        $value = $inputValue;
+        if ($constraint->canonicalize) {
+            $value = \Locale::canonicalize($value);
+        }
+
+        if (!Locales::exists($value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($inputValue))
+                ->setCode(Locale::NO_SUCH_LOCALE_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Luhn.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Luhn.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Luhn.php	(revision 8435)
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * Metadata for the LuhnValidator.
+ *
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Tim Nagel <t.nagel@infinite.net.au>
+ * @author Greg Knapp http://gregk.me/2011/php-implementation-of-bank-card-luhn-algorithm/
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Luhn extends Constraint
+{
+    public const INVALID_CHARACTERS_ERROR = 'dfad6d23-1b74-4374-929b-5cbb56fc0d9e';
+    public const CHECKSUM_FAILED_ERROR = '4d760774-3f50-4cd5-a6d5-b10a3299d8d3';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR',
+        self::CHECKSUM_FAILED_ERROR => 'CHECKSUM_FAILED_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'Invalid card number.';
+
+    public function __construct(
+        ?array $options = null,
+        ?string $message = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LuhnValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LuhnValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/LuhnValidator.php	(revision 8435)
@@ -0,0 +1,92 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * Validates a PAN using the LUHN Algorithm.
+ *
+ * For a list of example card numbers that are used to test this
+ * class, please see the LuhnValidatorTest class.
+ *
+ * @see    http://en.wikipedia.org/wiki/Luhn_algorithm
+ *
+ * @author Tim Nagel <t.nagel@infinite.net.au>
+ * @author Greg Knapp http://gregk.me/2011/php-implementation-of-bank-card-luhn-algorithm/
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class LuhnValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Luhn) {
+            throw new UnexpectedTypeException($constraint, Luhn::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        // Work with strings only, because long numbers are represented as floats
+        // internally and don't work with strlen()
+        if (!\is_string($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        if (!ctype_digit($value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Luhn::INVALID_CHARACTERS_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        $checkSum = 0;
+        $length = \strlen($value);
+
+        for ($i = $length - 1; $i >= 0; --$i) {
+            if (($i % 2) ^ ($length % 2)) {
+                // Starting with the last digit and walking left, add every second
+                // digit to the check sum
+                // e.g. 7  9  9  2  7  3  9  8  7  1  3
+                //      ^     ^     ^     ^     ^     ^
+                //    = 7  +  9  +  7  +  9  +  7  +  3
+                $checkSum += (int) $value[$i];
+            } else {
+                // Starting with the second last digit and walking left, double every
+                // second digit and add it to the check sum
+                // For doubles greater than 9, sum the individual digits
+                // e.g. 7  9  9  2  7  3  9  8  7  1  3
+                //         ^     ^     ^     ^     ^
+                //    =    1+8 + 4  +  6  +  1+6 + 2
+                $checkSum += (((int) (2 * $value[$i] / 10)) + (2 * $value[$i]) % 10);
+            }
+        }
+
+        if (0 === $checkSum || 0 !== $checkSum % 10) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Luhn::CHECKSUM_FAILED_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Negative.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Negative.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Negative.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Jan SchÃ€dlich <jan.schaedlich@sensiolabs.de>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Negative extends LessThan
+{
+    use ZeroComparisonConstraintTrait;
+
+    public $message = 'This value should be negative.';
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NegativeOrZero.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NegativeOrZero.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NegativeOrZero.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Jan SchÃ€dlich <jan.schaedlich@sensiolabs.de>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class NegativeOrZero extends LessThanOrEqual
+{
+    use ZeroComparisonConstraintTrait;
+
+    public $message = 'This value should be either negative or zero.';
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NoSuspiciousCharacters.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NoSuspiciousCharacters.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NoSuspiciousCharacters.php	(revision 8435)
@@ -0,0 +1,113 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\LogicException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Mathieu Lechat <mathieu.lechat@les-tilleuls.coop>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class NoSuspiciousCharacters extends Constraint
+{
+    public const RESTRICTION_LEVEL_ERROR = '1ece07dc-dca2-45f1-ba47-8d7dc3a12774';
+    public const INVISIBLE_ERROR = '6ed60e6c-179b-4e93-8a6c-667d85c6de5e';
+    public const MIXED_NUMBERS_ERROR = '9f01fc26-3bc4-44b1-a6b1-c08e2412053a';
+    public const HIDDEN_OVERLAY_ERROR = '56380dc5-0476-4f04-bbaa-b68cd1c2d974';
+
+    protected const ERROR_NAMES = [
+        self::RESTRICTION_LEVEL_ERROR => 'RESTRICTION_LEVEL_ERROR',
+        self::INVISIBLE_ERROR => 'INVISIBLE_ERROR',
+        self::MIXED_NUMBERS_ERROR => 'MIXED_NUMBERS_ERROR',
+        self::HIDDEN_OVERLAY_ERROR => 'INVALID_CASE_ERROR',
+    ];
+
+    /**
+     * Check a string for the presence of invisible characters such as zero-width spaces,
+     * or character sequences that are likely not to display such as multiple occurrences of the same non-spacing mark.
+     */
+    public const CHECK_INVISIBLE = 32;
+
+    /**
+     * Check that a string does not mix numbers from different numbering systems;
+     * for example â8â (Digit Eight) and âà§ªâ (Bengali Digit Four).
+     */
+    public const CHECK_MIXED_NUMBERS = 128;
+
+    /**
+     * Check that a string does not have a combining character following a character in which it would be hidden;
+     * for example âiâ (Latin Small Letter I) followed by a U+0307 (Combining Dot Above).
+     */
+    public const CHECK_HIDDEN_OVERLAY = 256;
+
+    /** @see https://unicode.org/reports/tr39/#ascii_only */
+    public const RESTRICTION_LEVEL_ASCII = 268435456;
+
+    /** @see https://unicode.org/reports/tr39/#single_script */
+    public const RESTRICTION_LEVEL_SINGLE_SCRIPT = 536870912;
+
+    /** @see https://unicode.org/reports/tr39/#highly_restrictive */
+    public const RESTRICTION_LEVEL_HIGH = 805306368;
+
+    /** @see https://unicode.org/reports/tr39/#moderately_restrictive */
+    public const RESTRICTION_LEVEL_MODERATE = 1073741824;
+
+    /** @see https://unicode.org/reports/tr39/#minimally_restrictive */
+    public const RESTRICTION_LEVEL_MINIMAL = 1342177280;
+
+    /** @see https://unicode.org/reports/tr39/#unrestricted */
+    public const RESTRICTION_LEVEL_NONE = 1610612736;
+
+    public string $restrictionLevelMessage = 'This value contains characters that are not allowed by the current restriction-level.';
+    public string $invisibleMessage = 'Using invisible characters is not allowed.';
+    public string $mixedNumbersMessage = 'Mixing numbers from different scripts is not allowed.';
+    public string $hiddenOverlayMessage = 'Using hidden overlay characters is not allowed.';
+
+    public int $checks = self::CHECK_INVISIBLE | self::CHECK_MIXED_NUMBERS | self::CHECK_HIDDEN_OVERLAY;
+    public ?int $restrictionLevel = null;
+    public ?array $locales = null;
+
+    /**
+     * @param int-mask-of<self::CHECK_*>|null $checks
+     * @param self::RESTRICTION_LEVEL_*|null  $restrictionLevel
+     */
+    public function __construct(
+        ?array $options = null,
+        ?string $restrictionLevelMessage = null,
+        ?string $invisibleMessage = null,
+        ?string $mixedNumbersMessage = null,
+        ?string $hiddenOverlayMessage = null,
+        ?int $checks = null,
+        ?int $restrictionLevel = null,
+        ?array $locales = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        if (!class_exists(\Spoofchecker::class)) {
+            throw new LogicException('The intl extension is required to use the NoSuspiciousCharacters constraint.');
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->restrictionLevelMessage = $restrictionLevelMessage ?? $this->restrictionLevelMessage;
+        $this->invisibleMessage = $invisibleMessage ?? $this->invisibleMessage;
+        $this->mixedNumbersMessage = $mixedNumbersMessage ?? $this->mixedNumbersMessage;
+        $this->hiddenOverlayMessage = $hiddenOverlayMessage ?? $this->hiddenOverlayMessage;
+        $this->checks = $checks ?? $this->checks;
+        $this->restrictionLevel = $restrictionLevel ?? $this->restrictionLevel;
+        $this->locales = $locales ?? $this->locales;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NoSuspiciousCharactersValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NoSuspiciousCharactersValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NoSuspiciousCharactersValidator.php	(revision 8435)
@@ -0,0 +1,122 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\LogicException;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Mathieu Lechat <mathieu.lechat@les-tilleuls.coop>
+ */
+class NoSuspiciousCharactersValidator extends ConstraintValidator
+{
+    private const CHECK_RESTRICTION_LEVEL = 16;
+    private const CHECK_SINGLE_SCRIPT = 16;
+    private const CHECK_CHAR_LIMIT = 64;
+
+    private const CHECK_ERROR = [
+        self::CHECK_RESTRICTION_LEVEL => [
+            'code' => NoSuspiciousCharacters::RESTRICTION_LEVEL_ERROR,
+            'messageProperty' => 'restrictionLevelMessage',
+        ],
+        NoSuspiciousCharacters::CHECK_INVISIBLE => [
+            'code' => NoSuspiciousCharacters::INVISIBLE_ERROR,
+            'messageProperty' => 'invisibleMessage',
+        ],
+        self::CHECK_CHAR_LIMIT => [
+            'code' => NoSuspiciousCharacters::RESTRICTION_LEVEL_ERROR,
+            'messageProperty' => 'restrictionLevelMessage',
+        ],
+        NoSuspiciousCharacters::CHECK_MIXED_NUMBERS => [
+            'code' => NoSuspiciousCharacters::MIXED_NUMBERS_ERROR,
+            'messageProperty' => 'mixedNumbersMessage',
+        ],
+        NoSuspiciousCharacters::CHECK_HIDDEN_OVERLAY => [
+            'code' => NoSuspiciousCharacters::HIDDEN_OVERLAY_ERROR,
+            'messageProperty' => 'hiddenOverlayMessage',
+        ],
+    ];
+
+    /**
+     * @param string[] $defaultLocales
+     */
+    public function __construct(private readonly array $defaultLocales = [])
+    {
+    }
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof NoSuspiciousCharacters) {
+            throw new UnexpectedTypeException($constraint, NoSuspiciousCharacters::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        if ('' === $value = (string) $value) {
+            return;
+        }
+
+        $checker = new \Spoofchecker();
+        $checks = $constraint->checks;
+
+        if (method_exists($checker, 'setRestrictionLevel')) {
+            $checks |= self::CHECK_RESTRICTION_LEVEL;
+            $checker->setRestrictionLevel($constraint->restrictionLevel ?? NoSuspiciousCharacters::RESTRICTION_LEVEL_MODERATE);
+        } elseif (NoSuspiciousCharacters::RESTRICTION_LEVEL_MINIMAL === $constraint->restrictionLevel) {
+            $checks |= self::CHECK_CHAR_LIMIT;
+        } elseif (NoSuspiciousCharacters::RESTRICTION_LEVEL_SINGLE_SCRIPT === $constraint->restrictionLevel) {
+            $checks |= self::CHECK_SINGLE_SCRIPT | self::CHECK_CHAR_LIMIT;
+        } elseif ($constraint->restrictionLevel) {
+            throw new LogicException('You can only use one of RESTRICTION_LEVEL_NONE, RESTRICTION_LEVEL_MINIMAL or RESTRICTION_LEVEL_SINGLE_SCRIPT with intl compiled against ICU < 58.');
+        } else {
+            $checks |= self::CHECK_SINGLE_SCRIPT;
+        }
+
+        $checker->setAllowedLocales(implode(',', $constraint->locales ?? $this->defaultLocales));
+
+        $checker->setChecks($checks);
+
+        if (!$checker->isSuspicious($value)) {
+            return;
+        }
+
+        foreach (self::CHECK_ERROR as $check => $error) {
+            if (!($checks & $check)) {
+                continue;
+            }
+
+            $checker->setChecks($check);
+
+            if (!$checker->isSuspicious($value)) {
+                continue;
+            }
+
+            $this->context->buildViolation($constraint->{$error['messageProperty']})
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode($error['code'])
+                ->addViolation()
+            ;
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotBlank.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotBlank.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotBlank.php	(revision 8435)
@@ -0,0 +1,55 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\InvalidArgumentException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ * @author KÃ©vin Dunglas <dunglas@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class NotBlank extends Constraint
+{
+    public const IS_BLANK_ERROR = 'c1051bb4-d103-4f74-8988-acbcafc7fdc3';
+
+    protected const ERROR_NAMES = [
+        self::IS_BLANK_ERROR => 'IS_BLANK_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should not be blank.';
+    public $allowNull = false;
+    /** @var callable|null */
+    public $normalizer;
+
+    public function __construct(?array $options = null, ?string $message = null, ?bool $allowNull = null, ?callable $normalizer = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($options ?? [], $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->allowNull = $allowNull ?? $this->allowNull;
+        $this->normalizer = $normalizer ?? $this->normalizer;
+
+        if (null !== $this->normalizer && !\is_callable($this->normalizer)) {
+            throw new InvalidArgumentException(sprintf('The "normalizer" option must be a valid callable ("%s" given).', get_debug_type($this->normalizer)));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotBlankValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotBlankValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotBlankValidator.php	(revision 8435)
@@ -0,0 +1,48 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ * @author KÃ©vin Dunglas <dunglas@gmail.com>
+ */
+class NotBlankValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof NotBlank) {
+            throw new UnexpectedTypeException($constraint, NotBlank::class);
+        }
+
+        if ($constraint->allowNull && null === $value) {
+            return;
+        }
+
+        if (\is_string($value) && null !== $constraint->normalizer) {
+            $value = ($constraint->normalizer)($value);
+        }
+
+        if (false === $value || (empty($value) && '0' != $value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(NotBlank::IS_BLANK_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotCompromisedPassword.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotCompromisedPassword.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotCompromisedPassword.php	(revision 8435)
@@ -0,0 +1,56 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * Checks if a password has been leaked in a data breach.
+ *
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author KÃ©vin Dunglas <dunglas@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class NotCompromisedPassword extends Constraint
+{
+    public const COMPROMISED_PASSWORD_ERROR = 'd9bcdbfe-a9d6-4bfa-a8ff-da5fd93e0f6d';
+
+    protected const ERROR_NAMES = [
+        self::COMPROMISED_PASSWORD_ERROR => 'COMPROMISED_PASSWORD_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This password has been leaked in a data breach, it must not be used. Please use another password.';
+    public $threshold = 1;
+    public $skipOnError = false;
+
+    public function __construct(
+        ?array $options = null,
+        ?string $message = null,
+        ?int $threshold = null,
+        ?bool $skipOnError = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->threshold = $threshold ?? $this->threshold;
+        $this->skipOnError = $skipOnError ?? $this->skipOnError;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotCompromisedPasswordValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotCompromisedPasswordValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotCompromisedPasswordValidator.php	(revision 8435)
@@ -0,0 +1,110 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\HttpClient\HttpClient;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\LogicException;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+use Symfony\Contracts\HttpClient\Exception\ExceptionInterface;
+use Symfony\Contracts\HttpClient\HttpClientInterface;
+
+/**
+ * Checks if a password has been leaked in a data breach using haveibeenpwned.com's API.
+ * Use a k-anonymity model to protect the password being searched for.
+ *
+ * @see https://haveibeenpwned.com/API/v2#SearchingPwnedPasswordsByRange
+ *
+ * @author KÃ©vin Dunglas <dunglas@gmail.com>
+ */
+class NotCompromisedPasswordValidator extends ConstraintValidator
+{
+    private const DEFAULT_API_ENDPOINT = 'https://api.pwnedpasswords.com/range/%s';
+
+    private HttpClientInterface $httpClient;
+    private string $charset;
+    private bool $enabled;
+    private string $endpoint;
+
+    public function __construct(?HttpClientInterface $httpClient = null, string $charset = 'UTF-8', bool $enabled = true, ?string $endpoint = null)
+    {
+        if (null === $httpClient && !class_exists(HttpClient::class)) {
+            throw new LogicException(sprintf('The "%s" class requires the "HttpClient" component. Try running "composer require symfony/http-client".', self::class));
+        }
+
+        $this->httpClient = $httpClient ?? HttpClient::create();
+        $this->charset = $charset;
+        $this->enabled = $enabled;
+        $this->endpoint = $endpoint ?? self::DEFAULT_API_ENDPOINT;
+    }
+
+    /**
+     * @return void
+     *
+     * @throws ExceptionInterface
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof NotCompromisedPassword) {
+            throw new UnexpectedTypeException($constraint, NotCompromisedPassword::class);
+        }
+
+        if (!$this->enabled) {
+            return;
+        }
+
+        if (null !== $value && !\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+        if ('' === $value) {
+            return;
+        }
+
+        if ('UTF-8' !== $this->charset) {
+            $value = mb_convert_encoding($value, 'UTF-8', $this->charset);
+        }
+
+        $hash = strtoupper(sha1($value));
+        $hashPrefix = substr($hash, 0, 5);
+        $url = sprintf($this->endpoint, $hashPrefix);
+
+        try {
+            $result = $this->httpClient->request('GET', $url, ['headers' => ['Add-Padding' => 'true']])->getContent();
+        } catch (ExceptionInterface $e) {
+            if ($constraint->skipOnError) {
+                return;
+            }
+
+            throw $e;
+        }
+
+        foreach (explode("\r\n", $result) as $line) {
+            if (!str_contains($line, ':')) {
+                continue;
+            }
+
+            [$hashSuffix, $count] = explode(':', $line);
+
+            if ($hashPrefix.$hashSuffix === $hash && $constraint->threshold <= (int) $count) {
+                $this->context->buildViolation($constraint->message)
+                    ->setCode(NotCompromisedPassword::COMPROMISED_PASSWORD_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotEqualTo.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotEqualTo.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotEqualTo.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class NotEqualTo extends AbstractComparison
+{
+    public const IS_EQUAL_ERROR = 'aa2e33da-25c8-4d76-8c6c-812f02ea89dd';
+
+    protected const ERROR_NAMES = [
+        self::IS_EQUAL_ERROR => 'IS_EQUAL_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should not be equal to {{ compared_value }}.';
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotEqualToValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotEqualToValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotEqualToValidator.php	(revision 8435)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * Validates values are all unequal (!=).
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class NotEqualToValidator extends AbstractComparisonValidator
+{
+    protected function compareValues(mixed $value1, mixed $value2): bool
+    {
+        return $value1 != $value2;
+    }
+
+    protected function getErrorCode(): ?string
+    {
+        return NotEqualTo::IS_EQUAL_ERROR;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotIdenticalTo.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotIdenticalTo.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotIdenticalTo.php	(revision 8435)
@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class NotIdenticalTo extends AbstractComparison
+{
+    public const IS_IDENTICAL_ERROR = '4aaac518-0dda-4129-a6d9-e216b9b454a0';
+
+    protected const ERROR_NAMES = [
+        self::IS_IDENTICAL_ERROR => 'IS_IDENTICAL_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should not be identical to {{ compared_value_type }} {{ compared_value }}.';
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotIdenticalToValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotIdenticalToValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotIdenticalToValidator.php	(revision 8435)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * Validates values aren't identical (!==).
+ *
+ * @author Daniel Holmes <daniel@danielholmes.org>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class NotIdenticalToValidator extends AbstractComparisonValidator
+{
+    protected function compareValues(mixed $value1, mixed $value2): bool
+    {
+        return $value1 !== $value2;
+    }
+
+    protected function getErrorCode(): ?string
+    {
+        return NotIdenticalTo::IS_IDENTICAL_ERROR;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotNull.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotNull.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotNull.php	(revision 8435)
@@ -0,0 +1,44 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class NotNull extends Constraint
+{
+    public const IS_NULL_ERROR = 'ad32d13f-c3d4-423b-909a-857b961eb720';
+
+    protected const ERROR_NAMES = [
+        self::IS_NULL_ERROR => 'IS_NULL_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should not be null.';
+
+    public function __construct(?array $options = null, ?string $message = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($options ?? [], $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotNullValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotNullValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/NotNullValidator.php	(revision 8435)
@@ -0,0 +1,39 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class NotNullValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof NotNull) {
+            throw new UnexpectedTypeException($constraint, NotNull::class);
+        }
+
+        if (null === $value) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(NotNull::IS_NULL_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Optional.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Optional.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Optional.php	(revision 8435)
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class Optional extends Existence
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/PasswordStrength.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/PasswordStrength.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/PasswordStrength.php	(revision 8435)
@@ -0,0 +1,55 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Florent Morselli <florent.morselli@spomky-labs.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+final class PasswordStrength extends Constraint
+{
+    public const STRENGTH_VERY_WEAK = 0;
+    public const STRENGTH_WEAK = 1;
+    public const STRENGTH_MEDIUM = 2;
+    public const STRENGTH_STRONG = 3;
+    public const STRENGTH_VERY_STRONG = 4;
+
+    public const PASSWORD_STRENGTH_ERROR = '4234df00-45dd-49a4-b303-a75dbf8b10d8';
+
+    protected const ERROR_NAMES = [
+        self::PASSWORD_STRENGTH_ERROR => 'PASSWORD_STRENGTH_ERROR',
+    ];
+
+    public string $message = 'The password strength is too low. Please use a stronger password.';
+
+    public int $minScore;
+
+    public function __construct(?array $options = null, ?int $minScore = null, ?array $groups = null, mixed $payload = null, ?string $message = null)
+    {
+        $options['minScore'] ??= self::STRENGTH_MEDIUM;
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->minScore = $minScore ?? $this->minScore;
+        $this->message = $message ?? $this->message;
+
+        if ($this->minScore < 1 || 4 < $this->minScore) {
+            throw new ConstraintDefinitionException(sprintf('The parameter "minScore" of the "%s" constraint must be an integer between 1 and 4.', self::class));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/PasswordStrengthValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/PasswordStrengthValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/PasswordStrengthValidator.php	(revision 8435)
@@ -0,0 +1,90 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+final class PasswordStrengthValidator extends ConstraintValidator
+{
+    /**
+     * @param (\Closure(string):PasswordStrength::STRENGTH_*)|null $passwordStrengthEstimator
+     */
+    public function __construct(
+        private readonly ?\Closure $passwordStrengthEstimator = null,
+    ) {
+    }
+
+    public function validate(#[\SensitiveParameter] mixed $value, Constraint $constraint): void
+    {
+        if (!$constraint instanceof PasswordStrength) {
+            throw new UnexpectedTypeException($constraint, PasswordStrength::class);
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        if (!\is_string($value)) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+        $passwordStrengthEstimator = $this->passwordStrengthEstimator ?? self::estimateStrength(...);
+        $strength = $passwordStrengthEstimator($value);
+
+        if ($strength < $constraint->minScore) {
+            $this->context->buildViolation($constraint->message)
+                ->setCode(PasswordStrength::PASSWORD_STRENGTH_ERROR)
+                ->addViolation();
+        }
+    }
+
+    /**
+     * Returns the estimated strength of a password.
+     *
+     * The higher the value, the stronger the password.
+     *
+     * @return PasswordStrength::STRENGTH_*
+     */
+    private static function estimateStrength(#[\SensitiveParameter] string $password): int
+    {
+        if (!$length = \strlen($password)) {
+            return PasswordStrength::STRENGTH_VERY_WEAK;
+        }
+        $password = count_chars($password, 1);
+        $chars = \count($password);
+
+        $control = $digit = $upper = $lower = $symbol = $other = 0;
+        foreach ($password as $chr => $count) {
+            match (true) {
+                $chr < 32 || 127 === $chr => $control = 33,
+                48 <= $chr && $chr <= 57 => $digit = 10,
+                65 <= $chr && $chr <= 90 => $upper = 26,
+                97 <= $chr && $chr <= 122 => $lower = 26,
+                128 <= $chr => $other = 128,
+                default => $symbol = 33,
+            };
+        }
+
+        $pool = $lower + $upper + $digit + $symbol + $control + $other;
+        $entropy = $chars * log($pool, 2) + ($length - $chars) * log($chars, 2);
+
+        return match (true) {
+            $entropy >= 120 => PasswordStrength::STRENGTH_VERY_STRONG,
+            $entropy >= 100 => PasswordStrength::STRENGTH_STRONG,
+            $entropy >= 80 => PasswordStrength::STRENGTH_MEDIUM,
+            $entropy >= 60 => PasswordStrength::STRENGTH_WEAK,
+            default => PasswordStrength::STRENGTH_VERY_WEAK,
+        };
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Positive.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Positive.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Positive.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Jan SchÃ€dlich <jan.schaedlich@sensiolabs.de>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Positive extends GreaterThan
+{
+    use ZeroComparisonConstraintTrait;
+
+    public $message = 'This value should be positive.';
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/PositiveOrZero.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/PositiveOrZero.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/PositiveOrZero.php	(revision 8435)
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Jan SchÃ€dlich <jan.schaedlich@sensiolabs.de>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class PositiveOrZero extends GreaterThanOrEqual
+{
+    use ZeroComparisonConstraintTrait;
+
+    public $message = 'This value should be either positive or zero.';
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Range.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Range.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Range.php	(revision 8435)
@@ -0,0 +1,102 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\PropertyAccess\PropertyAccess;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\LogicException;
+use Symfony\Component\Validator\Exception\MissingOptionsException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Range extends Constraint
+{
+    public const INVALID_CHARACTERS_ERROR = 'ad9a9798-7a99-4df7-8ce9-46e416a1e60b';
+    public const NOT_IN_RANGE_ERROR = '04b91c99-a946-4221-afc5-e65ebac401eb';
+    public const TOO_HIGH_ERROR = '2d28afcb-e32e-45fb-a815-01c431a86a69';
+    public const TOO_LOW_ERROR = '76454e69-502c-46c5-9643-f447d837c4d5';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR',
+        self::NOT_IN_RANGE_ERROR => 'NOT_IN_RANGE_ERROR',
+        self::TOO_HIGH_ERROR => 'TOO_HIGH_ERROR',
+        self::TOO_LOW_ERROR => 'TOO_LOW_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $notInRangeMessage = 'This value should be between {{ min }} and {{ max }}.';
+    public $minMessage = 'This value should be {{ limit }} or more.';
+    public $maxMessage = 'This value should be {{ limit }} or less.';
+    public $invalidMessage = 'This value should be a valid number.';
+    public $invalidDateTimeMessage = 'This value should be a valid datetime.';
+    public $min;
+    public $minPropertyPath;
+    public $max;
+    public $maxPropertyPath;
+
+    public function __construct(
+        ?array $options = null,
+        ?string $notInRangeMessage = null,
+        ?string $minMessage = null,
+        ?string $maxMessage = null,
+        ?string $invalidMessage = null,
+        ?string $invalidDateTimeMessage = null,
+        mixed $min = null,
+        ?string $minPropertyPath = null,
+        mixed $max = null,
+        ?string $maxPropertyPath = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        parent::__construct($options, $groups, $payload);
+
+        $this->notInRangeMessage = $notInRangeMessage ?? $this->notInRangeMessage;
+        $this->minMessage = $minMessage ?? $this->minMessage;
+        $this->maxMessage = $maxMessage ?? $this->maxMessage;
+        $this->invalidMessage = $invalidMessage ?? $this->invalidMessage;
+        $this->invalidDateTimeMessage = $invalidDateTimeMessage ?? $this->invalidDateTimeMessage;
+        $this->min = $min ?? $this->min;
+        $this->minPropertyPath = $minPropertyPath ?? $this->minPropertyPath;
+        $this->max = $max ?? $this->max;
+        $this->maxPropertyPath = $maxPropertyPath ?? $this->maxPropertyPath;
+
+        if (null === $this->min && null === $this->minPropertyPath && null === $this->max && null === $this->maxPropertyPath) {
+            throw new MissingOptionsException(sprintf('Either option "min", "minPropertyPath", "max" or "maxPropertyPath" must be given for constraint "%s".', __CLASS__), ['min', 'minPropertyPath', 'max', 'maxPropertyPath']);
+        }
+
+        if (null !== $this->min && null !== $this->minPropertyPath) {
+            throw new ConstraintDefinitionException(sprintf('The "%s" constraint requires only one of the "min" or "minPropertyPath" options to be set, not both.', static::class));
+        }
+
+        if (null !== $this->max && null !== $this->maxPropertyPath) {
+            throw new ConstraintDefinitionException(sprintf('The "%s" constraint requires only one of the "max" or "maxPropertyPath" options to be set, not both.', static::class));
+        }
+
+        if ((null !== $this->minPropertyPath || null !== $this->maxPropertyPath) && !class_exists(PropertyAccess::class)) {
+            throw new LogicException(sprintf('The "%s" constraint requires the Symfony PropertyAccess component to use the "minPropertyPath" or "maxPropertyPath" option. Try running "composer require symfony/property-access".', static::class));
+        }
+
+        if (null !== $this->min && null !== $this->max && ($minMessage || $maxMessage || isset($options['minMessage']) || isset($options['maxMessage']))) {
+            throw new ConstraintDefinitionException(sprintf('The "%s" constraint can not use "minMessage" and "maxMessage" when the "min" and "max" options are both set. Use "notInRangeMessage" instead.', static::class));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/RangeValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/RangeValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/RangeValidator.php	(revision 8435)
@@ -0,0 +1,194 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException;
+use Symfony\Component\PropertyAccess\Exception\UninitializedPropertyException;
+use Symfony\Component\PropertyAccess\PropertyAccess;
+use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class RangeValidator extends ConstraintValidator
+{
+    private ?PropertyAccessorInterface $propertyAccessor;
+
+    public function __construct(?PropertyAccessorInterface $propertyAccessor = null)
+    {
+        $this->propertyAccessor = $propertyAccessor;
+    }
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Range) {
+            throw new UnexpectedTypeException($constraint, Range::class);
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        $min = $this->getLimit($constraint->minPropertyPath, $constraint->min, $constraint);
+        $max = $this->getLimit($constraint->maxPropertyPath, $constraint->max, $constraint);
+
+        if (!is_numeric($value) && !$value instanceof \DateTimeInterface) {
+            if ($this->isParsableDatetimeString($min) && $this->isParsableDatetimeString($max)) {
+                $this->context->buildViolation($constraint->invalidDateTimeMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
+                    ->setCode(Range::INVALID_CHARACTERS_ERROR)
+                    ->addViolation();
+            } else {
+                $this->context->buildViolation($constraint->invalidMessage)
+                    ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
+                    ->setCode(Range::INVALID_CHARACTERS_ERROR)
+                    ->addViolation();
+            }
+
+            return;
+        }
+
+        // Convert strings to DateTimes if comparing another DateTime
+        // This allows to compare with any date/time value supported by
+        // the DateTime constructor:
+        // https://php.net/datetime.formats
+        if ($value instanceof \DateTimeInterface) {
+            if (\is_string($min)) {
+                try {
+                    $min = new $value($min);
+                } catch (\Exception) {
+                    throw new ConstraintDefinitionException(sprintf('The min value "%s" could not be converted to a "%s" instance in the "%s" constraint.', $min, get_debug_type($value), get_debug_type($constraint)));
+                }
+            }
+
+            if (\is_string($max)) {
+                try {
+                    $max = new $value($max);
+                } catch (\Exception) {
+                    throw new ConstraintDefinitionException(sprintf('The max value "%s" could not be converted to a "%s" instance in the "%s" constraint.', $max, get_debug_type($value), get_debug_type($constraint)));
+                }
+            }
+        }
+
+        $hasLowerLimit = null !== $min;
+        $hasUpperLimit = null !== $max;
+
+        if ($hasLowerLimit && $hasUpperLimit && ($value < $min || $value > $max)) {
+            $message = $constraint->notInRangeMessage;
+            $code = Range::NOT_IN_RANGE_ERROR;
+
+            $violationBuilder = $this->context->buildViolation($message)
+                ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
+                ->setParameter('{{ min }}', $this->formatValue($min, self::PRETTY_DATE))
+                ->setParameter('{{ max }}', $this->formatValue($max, self::PRETTY_DATE))
+                ->setCode($code);
+
+            if (null !== $constraint->maxPropertyPath) {
+                $violationBuilder->setParameter('{{ max_limit_path }}', $constraint->maxPropertyPath);
+            }
+
+            if (null !== $constraint->minPropertyPath) {
+                $violationBuilder->setParameter('{{ min_limit_path }}', $constraint->minPropertyPath);
+            }
+
+            $violationBuilder->addViolation();
+
+            return;
+        }
+
+        if ($hasUpperLimit && $value > $max) {
+            $violationBuilder = $this->context->buildViolation($constraint->maxMessage)
+                ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
+                ->setParameter('{{ limit }}', $this->formatValue($max, self::PRETTY_DATE))
+                ->setCode(Range::TOO_HIGH_ERROR);
+
+            if (null !== $constraint->maxPropertyPath) {
+                $violationBuilder->setParameter('{{ max_limit_path }}', $constraint->maxPropertyPath);
+            }
+
+            if (null !== $constraint->minPropertyPath) {
+                $violationBuilder->setParameter('{{ min_limit_path }}', $constraint->minPropertyPath);
+            }
+
+            $violationBuilder->addViolation();
+
+            return;
+        }
+
+        if ($hasLowerLimit && $value < $min) {
+            $violationBuilder = $this->context->buildViolation($constraint->minMessage)
+                ->setParameter('{{ value }}', $this->formatValue($value, self::PRETTY_DATE))
+                ->setParameter('{{ limit }}', $this->formatValue($min, self::PRETTY_DATE))
+                ->setCode(Range::TOO_LOW_ERROR);
+
+            if (null !== $constraint->maxPropertyPath) {
+                $violationBuilder->setParameter('{{ max_limit_path }}', $constraint->maxPropertyPath);
+            }
+
+            if (null !== $constraint->minPropertyPath) {
+                $violationBuilder->setParameter('{{ min_limit_path }}', $constraint->minPropertyPath);
+            }
+
+            $violationBuilder->addViolation();
+        }
+    }
+
+    private function getLimit(?string $propertyPath, mixed $default, Constraint $constraint): mixed
+    {
+        if (null === $propertyPath) {
+            return $default;
+        }
+
+        if (null === $object = $this->context->getObject()) {
+            return $default;
+        }
+
+        try {
+            return $this->getPropertyAccessor()->getValue($object, $propertyPath);
+        } catch (NoSuchPropertyException $e) {
+            throw new ConstraintDefinitionException(sprintf('Invalid property path "%s" provided to "%s" constraint: ', $propertyPath, get_debug_type($constraint)).$e->getMessage(), 0, $e);
+        } catch (UninitializedPropertyException) {
+            return null;
+        }
+    }
+
+    private function getPropertyAccessor(): PropertyAccessorInterface
+    {
+        return $this->propertyAccessor ??= PropertyAccess::createPropertyAccessor();
+    }
+
+    private function isParsableDatetimeString(mixed $boundary): bool
+    {
+        if (null === $boundary) {
+            return true;
+        }
+
+        if (!\is_string($boundary)) {
+            return false;
+        }
+
+        try {
+            new \DateTimeImmutable($boundary);
+        } catch (\Exception) {
+            return false;
+        }
+
+        return true;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Regex.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Regex.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Regex.php	(revision 8435)
@@ -0,0 +1,128 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\InvalidArgumentException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Regex extends Constraint
+{
+    public const REGEX_FAILED_ERROR = 'de1e3db3-5ed4-4941-aae4-59f3667cc3a3';
+
+    protected const ERROR_NAMES = [
+        self::REGEX_FAILED_ERROR => 'REGEX_FAILED_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value is not valid.';
+    public $pattern;
+    public $htmlPattern;
+    public $match = true;
+    /** @var callable|null */
+    public $normalizer;
+
+    public function __construct(
+        string|array|null $pattern,
+        ?string $message = null,
+        ?string $htmlPattern = null,
+        ?bool $match = null,
+        ?callable $normalizer = null,
+        ?array $groups = null,
+        mixed $payload = null,
+        array $options = []
+    ) {
+        if (\is_array($pattern)) {
+            $options = array_merge($pattern, $options);
+        } elseif (null !== $pattern) {
+            $options['value'] = $pattern;
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->htmlPattern = $htmlPattern ?? $this->htmlPattern;
+        $this->match = $match ?? $this->match;
+        $this->normalizer = $normalizer ?? $this->normalizer;
+
+        if (null !== $this->normalizer && !\is_callable($this->normalizer)) {
+            throw new InvalidArgumentException(sprintf('The "normalizer" option must be a valid callable ("%s" given).', get_debug_type($this->normalizer)));
+        }
+    }
+
+    public function getDefaultOption(): ?string
+    {
+        return 'pattern';
+    }
+
+    public function getRequiredOptions(): array
+    {
+        return ['pattern'];
+    }
+
+    /**
+     * Converts the htmlPattern to a suitable format for HTML5 pattern.
+     * Example: /^[a-z]+$/ would be converted to [a-z]+
+     * However, if options are specified, it cannot be converted.
+     *
+     * @see http://dev.w3.org/html5/spec/single-page.html#the-pattern-attribute
+     */
+    public function getHtmlPattern(): ?string
+    {
+        // If htmlPattern is specified, use it
+        if (null !== $this->htmlPattern) {
+            return empty($this->htmlPattern)
+                ? null
+                : $this->htmlPattern;
+        }
+
+        // Quit if delimiters not at very beginning/end (e.g. when options are passed)
+        if ($this->pattern[0] !== $this->pattern[\strlen($this->pattern) - 1]) {
+            return null;
+        }
+
+        $delimiter = $this->pattern[0];
+
+        // Unescape the delimiter
+        $pattern = str_replace('\\'.$delimiter, $delimiter, substr($this->pattern, 1, -1));
+
+        // If the pattern is inverted, we can wrap it in
+        // ((?!pattern).)*
+        if (!$this->match) {
+            return '((?!'.$pattern.').)*';
+        }
+
+        // If the pattern contains an or statement, wrap the pattern in
+        // .*(pattern).* and quit. Otherwise we'd need to parse the pattern
+        if (str_contains($pattern, '|')) {
+            return '.*('.$pattern.').*';
+        }
+
+        // Trim leading ^, otherwise prepend .*
+        $pattern = '^' === $pattern[0] ? substr($pattern, 1) : '.*'.$pattern;
+
+        // Trim trailing $, otherwise append .*
+        $pattern = '$' === $pattern[\strlen($pattern) - 1] ? substr($pattern, 0, -1) : $pattern.'.*';
+
+        return $pattern;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/RegexValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/RegexValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/RegexValidator.php	(revision 8435)
@@ -0,0 +1,58 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * Validates whether a value match or not given regexp pattern.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ * @author Joseph Bielawski <stloyd@gmail.com>
+ */
+class RegexValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Regex) {
+            throw new UnexpectedTypeException($constraint, Regex::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        if (null !== $constraint->normalizer) {
+            $value = ($constraint->normalizer)($value);
+        }
+
+        if ($constraint->match xor preg_match($constraint->pattern, $value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setParameter('{{ pattern }}', $constraint->pattern)
+                ->setCode(Regex::REGEX_FAILED_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Required.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Required.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Required.php	(revision 8435)
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * @Annotation
+ * @Target({"ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class Required extends Existence
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Sequentially.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Sequentially.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Sequentially.php	(revision 8435)
@@ -0,0 +1,52 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+/**
+ * Use this constraint to sequentially validate nested constraints.
+ * Validation for the nested constraints collection will stop at first violation.
+ *
+ * @Annotation
+ * @Target({"CLASS", "PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Maxime Steinhausser <maxime.steinhausser@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Sequentially extends Composite
+{
+    public $constraints = [];
+
+    public function __construct(mixed $constraints = null, ?array $groups = null, mixed $payload = null)
+    {
+        parent::__construct($constraints ?? [], $groups, $payload);
+    }
+
+    public function getDefaultOption(): ?string
+    {
+        return 'constraints';
+    }
+
+    public function getRequiredOptions(): array
+    {
+        return ['constraints'];
+    }
+
+    protected function getCompositeOption(): string
+    {
+        return 'constraints';
+    }
+
+    public function getTargets(): string|array
+    {
+        return [self::CLASS_CONSTRAINT, self::PROPERTY_CONSTRAINT];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/SequentiallyValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/SequentiallyValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/SequentiallyValidator.php	(revision 8435)
@@ -0,0 +1,44 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Maxime Steinhausser <maxime.steinhausser@gmail.com>
+ */
+class SequentiallyValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Sequentially) {
+            throw new UnexpectedTypeException($constraint, Sequentially::class);
+        }
+
+        $context = $this->context;
+
+        $validator = $context->getValidator()->inContext($context);
+
+        $originalCount = $validator->getViolations()->count();
+
+        foreach ($constraint->constraints as $c) {
+            if ($originalCount !== $validator->validate($value, $c)->getViolations()->count()) {
+                break;
+            }
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Time.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Time.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Time.php	(revision 8435)
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Time extends Constraint
+{
+    public const INVALID_FORMAT_ERROR = '9d27b2bb-f755-4fbf-b725-39b1edbdebdf';
+    public const INVALID_TIME_ERROR = '8532f9e1-84b2-4d67-8989-0818bc38533b';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_FORMAT_ERROR => 'INVALID_FORMAT_ERROR',
+        self::INVALID_TIME_ERROR => 'INVALID_TIME_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $withSeconds = true;
+    public $message = 'This value is not a valid time.';
+
+    public function __construct(
+        ?array $options = null,
+        ?string $message = null,
+        ?array $groups = null,
+        mixed $payload = null,
+        ?bool $withSeconds = null,
+    ) {
+        parent::__construct($options, $groups, $payload);
+
+        $this->withSeconds = $withSeconds ?? $this->withSeconds;
+        $this->message = $message ?? $this->message;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/TimeValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/TimeValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/TimeValidator.php	(revision 8435)
@@ -0,0 +1,72 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class TimeValidator extends ConstraintValidator
+{
+    public const PATTERN = '/^(\d{2}):(\d{2}):(\d{2})$/';
+    public const PATTERN_WITHOUT_SECONDS = '/^(\d{2}):(\d{2})$/';
+
+    /**
+     * Checks whether a time is valid.
+     *
+     * @internal
+     */
+    public static function checkTime(int $hour, int $minute, float $second): bool
+    {
+        return $hour >= 0 && $hour < 24 && $minute >= 0 && $minute < 60 && $second >= 0 && $second < 60;
+    }
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Time) {
+            throw new UnexpectedTypeException($constraint, Time::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        if (!preg_match($constraint->withSeconds ? static::PATTERN : static::PATTERN_WITHOUT_SECONDS, $value, $matches)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Time::INVALID_FORMAT_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if (!self::checkTime($matches[1], $matches[2], $constraint->withSeconds ? $matches[3] : 0)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Time::INVALID_TIME_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Timezone.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Timezone.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Timezone.php	(revision 8435)
@@ -0,0 +1,86 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Javier Spagnoletti <phansys@gmail.com>
+ * @author Hugo Hamon <hugohamon@neuf.fr>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Timezone extends Constraint
+{
+    public const TIMEZONE_IDENTIFIER_ERROR = '5ce113e6-5e64-4ea2-90fe-d2233956db13';
+    public const TIMEZONE_IDENTIFIER_IN_ZONE_ERROR = 'b57767b1-36c0-40ac-a3d7-629420c775b8';
+    public const TIMEZONE_IDENTIFIER_IN_COUNTRY_ERROR = 'c4a22222-dc92-4fc0-abb0-d95b268c7d0b';
+    public const TIMEZONE_IDENTIFIER_INTL_ERROR = '45863c26-88dc-41ba-bf53-c73bd1f7e90d';
+
+    public $zone = \DateTimeZone::ALL;
+    public $countryCode;
+    public $intlCompatible = false;
+    public $message = 'This value is not a valid timezone.';
+
+    protected const ERROR_NAMES = [
+        self::TIMEZONE_IDENTIFIER_ERROR => 'TIMEZONE_IDENTIFIER_ERROR',
+        self::TIMEZONE_IDENTIFIER_IN_ZONE_ERROR => 'TIMEZONE_IDENTIFIER_IN_ZONE_ERROR',
+        self::TIMEZONE_IDENTIFIER_IN_COUNTRY_ERROR => 'TIMEZONE_IDENTIFIER_IN_COUNTRY_ERROR',
+        self::TIMEZONE_IDENTIFIER_INTL_ERROR => 'TIMEZONE_IDENTIFIER_INTL_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public function __construct(
+        int|array|null $zone = null,
+        ?string $message = null,
+        ?string $countryCode = null,
+        ?bool $intlCompatible = null,
+        ?array $groups = null,
+        mixed $payload = null,
+        array $options = []
+    ) {
+        if (\is_array($zone)) {
+            $options = array_merge($zone, $options);
+        } elseif (null !== $zone) {
+            $options['value'] = $zone;
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->countryCode = $countryCode ?? $this->countryCode;
+        $this->intlCompatible = $intlCompatible ?? $this->intlCompatible;
+
+        if (null === $this->countryCode) {
+            if (0 >= $this->zone || \DateTimeZone::ALL_WITH_BC < $this->zone) {
+                throw new ConstraintDefinitionException('The option "zone" must be a valid range of "\DateTimeZone" constants.');
+            }
+        } elseif (\DateTimeZone::PER_COUNTRY !== (\DateTimeZone::PER_COUNTRY & $this->zone)) {
+            throw new ConstraintDefinitionException('The option "countryCode" can only be used when the "zone" option is configured with "\DateTimeZone::PER_COUNTRY".');
+        }
+        if ($this->intlCompatible && !class_exists(\IntlTimeZone::class)) {
+            throw new ConstraintDefinitionException('The option "intlCompatible" can only be used when the PHP intl extension is available.');
+        }
+    }
+
+    public function getDefaultOption(): ?string
+    {
+        return 'zone';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/TimezoneValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/TimezoneValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/TimezoneValidator.php	(revision 8435)
@@ -0,0 +1,122 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Intl\Exception\MissingResourceException;
+use Symfony\Component\Intl\Timezones;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * Validates whether a value is a valid timezone identifier.
+ *
+ * @author Javier Spagnoletti <phansys@gmail.com>
+ * @author Hugo Hamon <hugohamon@neuf.fr>
+ */
+class TimezoneValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Timezone) {
+            throw new UnexpectedTypeException($constraint, Timezone::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        if ($constraint->intlCompatible && 'Etc/Unknown' === \IntlTimeZone::createTimeZone($value)->getID()) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Timezone::TIMEZONE_IDENTIFIER_INTL_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if (
+            \in_array($value, self::getPhpTimezones($constraint->zone, $constraint->countryCode), true)
+            || \in_array($value, self::getIntlTimezones($constraint->zone, $constraint->countryCode), true)
+        ) {
+            return;
+        }
+
+        if ($constraint->countryCode) {
+            $code = Timezone::TIMEZONE_IDENTIFIER_IN_COUNTRY_ERROR;
+        } elseif (\DateTimeZone::ALL !== $constraint->zone) {
+            $code = Timezone::TIMEZONE_IDENTIFIER_IN_ZONE_ERROR;
+        } else {
+            $code = Timezone::TIMEZONE_IDENTIFIER_ERROR;
+        }
+
+        $this->context->buildViolation($constraint->message)
+              ->setParameter('{{ value }}', $this->formatValue($value))
+              ->setCode($code)
+              ->addViolation();
+    }
+
+    private static function getPhpTimezones(int $zone, ?string $countryCode = null): array
+    {
+        if (null !== $countryCode) {
+            try {
+                return @\DateTimeZone::listIdentifiers($zone, $countryCode) ?: [];
+            } catch (\ValueError) {
+                return [];
+            }
+        }
+
+        return \DateTimeZone::listIdentifiers($zone);
+    }
+
+    private static function getIntlTimezones(int $zone, ?string $countryCode = null): array
+    {
+        if (!class_exists(Timezones::class)) {
+            return [];
+        }
+
+        if (null !== $countryCode) {
+            try {
+                return Timezones::forCountryCode($countryCode);
+            } catch (MissingResourceException) {
+                return [];
+            }
+        }
+
+        $timezones = Timezones::getIds();
+
+        if (\DateTimeZone::ALL === (\DateTimeZone::ALL & $zone)) {
+            return $timezones;
+        }
+
+        $filtered = [];
+        foreach ((new \ReflectionClass(\DateTimeZone::class))->getConstants() as $const => $flag) {
+            if ($flag !== ($flag & $zone)) {
+                continue;
+            }
+
+            $filtered[] = array_filter($timezones, static fn ($id) => 0 === stripos($id, $const.'/'));
+        }
+
+        return $filtered ? array_merge(...$filtered) : [];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Traverse.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Traverse.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Traverse.php	(revision 8435)
@@ -0,0 +1,45 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * @Annotation
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_CLASS)]
+class Traverse extends Constraint
+{
+    public $traverse = true;
+
+    public function __construct(bool|array|null $traverse = null)
+    {
+        if (\is_array($traverse) && \array_key_exists('groups', $traverse)) {
+            throw new ConstraintDefinitionException(sprintf('The option "groups" is not supported by the constraint "%s".', __CLASS__));
+        }
+
+        parent::__construct($traverse);
+    }
+
+    public function getDefaultOption(): ?string
+    {
+        return 'traverse';
+    }
+
+    public function getTargets(): string|array
+    {
+        return self::CLASS_CONSTRAINT;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Type.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Type.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Type.php	(revision 8435)
@@ -0,0 +1,61 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Type extends Constraint
+{
+    public const INVALID_TYPE_ERROR = 'ba785a8c-82cb-4283-967c-3cf342181b40';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_TYPE_ERROR => 'INVALID_TYPE_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value should be of type {{ type }}.';
+    public $type;
+
+    public function __construct(string|array|null $type, ?string $message = null, ?array $groups = null, mixed $payload = null, array $options = [])
+    {
+        if (\is_array($type) && \is_string(key($type))) {
+            $options = array_merge($type, $options);
+        } elseif (null !== $type) {
+            $options['value'] = $type;
+        }
+
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+
+    public function getDefaultOption(): ?string
+    {
+        return 'type';
+    }
+
+    public function getRequiredOptions(): array
+    {
+        return ['type'];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/TypeValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/TypeValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/TypeValidator.php	(revision 8435)
@@ -0,0 +1,95 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class TypeValidator extends ConstraintValidator
+{
+    private const VALIDATION_FUNCTIONS = [
+        'bool' => 'is_bool',
+        'boolean' => 'is_bool',
+        'int' => 'is_int',
+        'integer' => 'is_int',
+        'long' => 'is_int',
+        'float' => 'is_float',
+        'double' => 'is_float',
+        'real' => 'is_float',
+        'number' => 'is_int || is_float && !is_nan',
+        'finite-float' => 'is_float && is_finite',
+        'finite-number' => 'is_int || is_float && is_finite',
+        'numeric' => 'is_numeric',
+        'string' => 'is_string',
+        'scalar' => 'is_scalar',
+        'array' => 'is_array',
+        'iterable' => 'is_iterable',
+        'countable' => 'is_countable',
+        'callable' => 'is_callable',
+        'object' => 'is_object',
+        'resource' => 'is_resource',
+        'null' => 'is_null',
+        'alnum' => 'ctype_alnum',
+        'alpha' => 'ctype_alpha',
+        'cntrl' => 'ctype_cntrl',
+        'digit' => 'ctype_digit',
+        'graph' => 'ctype_graph',
+        'lower' => 'ctype_lower',
+        'print' => 'ctype_print',
+        'punct' => 'ctype_punct',
+        'space' => 'ctype_space',
+        'upper' => 'ctype_upper',
+        'xdigit' => 'ctype_xdigit',
+    ];
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Type) {
+            throw new UnexpectedTypeException($constraint, Type::class);
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        $types = (array) $constraint->type;
+
+        foreach ($types as $type) {
+            $type = strtolower($type);
+            if (isset(self::VALIDATION_FUNCTIONS[$type]) && match ($type) {
+                'finite-float' => \is_float($value) && is_finite($value),
+                'finite-number' => \is_int($value) || \is_float($value) && is_finite($value),
+                'number' => \is_int($value) || \is_float($value) && !is_nan($value),
+                default => self::VALIDATION_FUNCTIONS[$type]($value),
+            }) {
+                return;
+            }
+
+            if ($value instanceof $type) {
+                return;
+            }
+        }
+
+        $this->context->buildViolation($constraint->message)
+            ->setParameter('{{ value }}', $this->formatValue($value))
+            ->setParameter('{{ type }}', implode('|', $types))
+            ->setCode(Type::INVALID_TYPE_ERROR)
+            ->addViolation();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Ulid.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Ulid.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Ulid.php	(revision 8435)
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ *
+ * @author Laurent Clouet <laurent35240@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Ulid extends Constraint
+{
+    public const TOO_SHORT_ERROR = '7b44804e-37d5-4df4-9bdd-b738d4a45bb4';
+    public const TOO_LONG_ERROR = '9608249f-6da1-4d53-889e-9864b58c4d37';
+    public const INVALID_CHARACTERS_ERROR = 'e4155739-5135-4258-9c81-ae7b44b5311e';
+    public const TOO_LARGE_ERROR = 'df8cfb9a-ce6d-4a69-ae5a-eea7ab6f278b';
+
+    protected const ERROR_NAMES = [
+        self::TOO_SHORT_ERROR => 'TOO_SHORT_ERROR',
+        self::TOO_LONG_ERROR => 'TOO_LONG_ERROR',
+        self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR',
+        self::TOO_LARGE_ERROR => 'TOO_LARGE_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This is not a valid ULID.';
+
+    public function __construct(
+        ?array $options = null,
+        ?string $message = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/UlidValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/UlidValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/UlidValidator.php	(revision 8435)
@@ -0,0 +1,73 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * Validates whether the value is a valid ULID (Universally Unique Lexicographically Sortable Identifier).
+ * Cf https://github.com/ulid/spec for ULID specifications.
+ *
+ * @author Laurent Clouet <laurent35240@gmail.com>
+ */
+class UlidValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Ulid) {
+            throw new UnexpectedTypeException($constraint, Ulid::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        if (26 !== \strlen($value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(26 > \strlen($value) ? Ulid::TOO_SHORT_ERROR : Ulid::TOO_LONG_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        if (\strlen($value) !== strspn($value, '0123456789ABCDEFGHJKMNPQRSTVWXYZabcdefghjkmnpqrstvwxyz')) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Ulid::INVALID_CHARACTERS_ERROR)
+                ->addViolation();
+
+            return;
+        }
+
+        // Largest valid ULID is '7ZZZZZZZZZZZZZZZZZZZZZZZZZ'
+        // Cf https://github.com/ulid/spec#overflow-errors-when-parsing-base32-strings
+        if ($value[0] > '7') {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Ulid::TOO_LARGE_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Unique.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Unique.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Unique.php	(revision 8435)
@@ -0,0 +1,64 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\InvalidArgumentException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Yevgeniy Zholkevskiy <zhenya.zholkevskiy@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Unique extends Constraint
+{
+    public const IS_NOT_UNIQUE = '7911c98d-b845-4da0-94b7-a8dac36bc55a';
+
+    public array|string $fields = [];
+
+    protected const ERROR_NAMES = [
+        self::IS_NOT_UNIQUE => 'IS_NOT_UNIQUE',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This collection should contain only unique elements.';
+    /** @var callable|null */
+    public $normalizer;
+
+    /**
+     * @param array|string $fields the combination of fields that must contain unique values or a set of options
+     */
+    public function __construct(
+        ?array $options = null,
+        ?string $message = null,
+        ?callable $normalizer = null,
+        ?array $groups = null,
+        mixed $payload = null,
+        array|string|null $fields = null,
+    ) {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->normalizer = $normalizer ?? $this->normalizer;
+        $this->fields = $fields ?? $this->fields;
+
+        if (null !== $this->normalizer && !\is_callable($this->normalizer)) {
+            throw new InvalidArgumentException(sprintf('The "normalizer" option must be a valid callable ("%s" given).', get_debug_type($this->normalizer)));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/UniqueValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/UniqueValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/UniqueValidator.php	(revision 8435)
@@ -0,0 +1,87 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Yevgeniy Zholkevskiy <zhenya.zholkevskiy@gmail.com>
+ */
+class UniqueValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Unique) {
+            throw new UnexpectedTypeException($constraint, Unique::class);
+        }
+
+        $fields = (array) $constraint->fields;
+
+        if (null === $value) {
+            return;
+        }
+
+        if (!\is_array($value) && !$value instanceof \IteratorAggregate) {
+            throw new UnexpectedValueException($value, 'array|IteratorAggregate');
+        }
+
+        $collectionElements = [];
+        $normalizer = $this->getNormalizer($constraint);
+        foreach ($value as $element) {
+            $element = $normalizer($element);
+
+            if ($fields && !$element = $this->reduceElementKeys($fields, $element)) {
+                continue;
+            }
+
+            if (\in_array($element, $collectionElements, true)) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($element))
+                    ->setCode(Unique::IS_NOT_UNIQUE)
+                    ->addViolation();
+
+                return;
+            }
+            $collectionElements[] = $element;
+        }
+    }
+
+    private function getNormalizer(Unique $unique): callable
+    {
+        if (null === $unique->normalizer) {
+            return static fn ($value) => $value;
+        }
+
+        return $unique->normalizer;
+    }
+
+    private function reduceElementKeys(array $fields, array $element): array
+    {
+        $output = [];
+        foreach ($fields as $field) {
+            if (!\is_string($field)) {
+                throw new UnexpectedTypeException($field, 'string');
+            }
+            if (\array_key_exists($field, $element)) {
+                $output[$field] = $element[$field];
+            }
+        }
+
+        return $output;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Url.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Url.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Url.php	(revision 8435)
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\InvalidArgumentException;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Url extends Constraint
+{
+    public const INVALID_URL_ERROR = '57c2f299-1154-4870-89bb-ef3b1f5ad229';
+
+    protected const ERROR_NAMES = [
+        self::INVALID_URL_ERROR => 'INVALID_URL_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    public $message = 'This value is not a valid URL.';
+    public $protocols = ['http', 'https'];
+    public $relativeProtocol = false;
+    /** @var callable|null */
+    public $normalizer;
+
+    public function __construct(
+        ?array $options = null,
+        ?string $message = null,
+        ?array $protocols = null,
+        ?bool $relativeProtocol = null,
+        ?callable $normalizer = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->protocols = $protocols ?? $this->protocols;
+        $this->relativeProtocol = $relativeProtocol ?? $this->relativeProtocol;
+        $this->normalizer = $normalizer ?? $this->normalizer;
+
+        if (null !== $this->normalizer && !\is_callable($this->normalizer)) {
+            throw new InvalidArgumentException(sprintf('The "normalizer" option must be a valid callable ("%s" given).', get_debug_type($this->normalizer)));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/UrlValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/UrlValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/UrlValidator.php	(revision 8435)
@@ -0,0 +1,86 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class UrlValidator extends ConstraintValidator
+{
+    public const PATTERN = '~^
+            (%s)://                                 # protocol
+            (((?:[\_\.\pL\pN-]|%%[0-9A-Fa-f]{2})+:)?((?:[\_\.\pL\pN-]|%%[0-9A-Fa-f]{2})+)@)?  # basic auth
+            (
+                (?:
+                    (?:xn--[a-z0-9-]++\.)*+xn--[a-z0-9-]++            # a domain name using punycode
+                        |
+                    (?:[\pL\pN\pS\pM\-\_]++\.)+[\pL\pN\pM]++          # a multi-level domain name
+                        |
+                    [a-z0-9\-\_]++                                    # a single-level domain name
+                )\.?
+                    |                                                 # or
+                \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}                    # an IP address
+                    |                                                 # or
+                \[
+                    (?:(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){6})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:::(?:(?:(?:[0-9a-f]{1,4})):){5})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){4})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,1}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){3})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,2}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){2})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,3}(?:(?:[0-9a-f]{1,4})))?::(?:(?:[0-9a-f]{1,4})):)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,4}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,5}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,6}(?:(?:[0-9a-f]{1,4})))?::))))
+                \]  # an IPv6 address
+            )
+            (:[0-9]+)?                              # a port (optional)
+            (?:/ (?:[\pL\pN\-._\~!$&\'()*+,;=:@]|%%[0-9A-Fa-f]{2})* )*          # a path
+            (?:\? (?:[\pL\pN\-._\~!$&\'\[\]()*+,;=:@/?]|%%[0-9A-Fa-f]{2})* )?   # a query (optional)
+            (?:\# (?:[\pL\pN\-._\~!$&\'()*+,;=:@/?]|%%[0-9A-Fa-f]{2})* )?       # a fragment (optional)
+        $~ixu';
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Url) {
+            throw new UnexpectedTypeException($constraint, Url::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+        if ('' === $value) {
+            return;
+        }
+
+        if (null !== $constraint->normalizer) {
+            $value = ($constraint->normalizer)($value);
+        }
+
+        $pattern = $constraint->relativeProtocol ? str_replace('(%s):', '(?:(%s):)?', static::PATTERN) : static::PATTERN;
+        $pattern = sprintf($pattern, implode('|', $constraint->protocols));
+
+        if (!preg_match($pattern, $value)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Url::INVALID_URL_ERROR)
+                ->addViolation();
+
+            return;
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Uuid.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Uuid.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Uuid.php	(revision 8435)
@@ -0,0 +1,126 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\InvalidArgumentException;
+
+/**
+ * @Annotation
+ *
+ * @author Colin O'Dell <colinodell@gmail.com>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Uuid extends Constraint
+{
+    public const TOO_SHORT_ERROR = 'aa314679-dac9-4f54-bf97-b2049df8f2a3';
+    public const TOO_LONG_ERROR = '494897dd-36f8-4d31-8923-71a8d5f3000d';
+    public const INVALID_CHARACTERS_ERROR = '51120b12-a2bc-41bf-aa53-cd73daf330d0';
+    public const INVALID_HYPHEN_PLACEMENT_ERROR = '98469c83-0309-4f5d-bf95-a496dcaa869c';
+    public const INVALID_VERSION_ERROR = '21ba13b4-b185-4882-ac6f-d147355987eb';
+    public const INVALID_TIME_BASED_VERSION_ERROR = '484081ca-6fbd-11ed-ade8-a3bdfd0fcf2f';
+    public const INVALID_VARIANT_ERROR = '164ef693-2b9d-46de-ad7f-836201f0c2db';
+
+    protected const ERROR_NAMES = [
+        self::TOO_SHORT_ERROR => 'TOO_SHORT_ERROR',
+        self::TOO_LONG_ERROR => 'TOO_LONG_ERROR',
+        self::INVALID_CHARACTERS_ERROR => 'INVALID_CHARACTERS_ERROR',
+        self::INVALID_HYPHEN_PLACEMENT_ERROR => 'INVALID_HYPHEN_PLACEMENT_ERROR',
+        self::INVALID_VERSION_ERROR => 'INVALID_VERSION_ERROR',
+        self::INVALID_VARIANT_ERROR => 'INVALID_VARIANT_ERROR',
+    ];
+
+    /**
+     * @deprecated since Symfony 6.1, use const ERROR_NAMES instead
+     */
+    protected static $errorNames = self::ERROR_NAMES;
+
+    // Possible versions defined by RFC 4122
+    public const V1_MAC = 1;
+    public const V2_DCE = 2;
+    public const V3_MD5 = 3;
+    public const V4_RANDOM = 4;
+    public const V5_SHA1 = 5;
+    public const V6_SORTABLE = 6;
+    public const V7_MONOTONIC = 7;
+    public const V8_CUSTOM = 8;
+
+    public const ALL_VERSIONS = [
+        self::V1_MAC,
+        self::V2_DCE,
+        self::V3_MD5,
+        self::V4_RANDOM,
+        self::V5_SHA1,
+        self::V6_SORTABLE,
+        self::V7_MONOTONIC,
+        self::V8_CUSTOM,
+    ];
+
+    public const TIME_BASED_VERSIONS = [
+        self::V1_MAC,
+        self::V6_SORTABLE,
+        self::V7_MONOTONIC,
+    ];
+
+    /**
+     * Message to display when validation fails.
+     *
+     * @var string
+     */
+    public $message = 'This is not a valid UUID.';
+
+    /**
+     * Strict mode only allows UUIDs that meet the formal definition and formatting per RFC 4122.
+     *
+     * Set this to `false` to allow legacy formats with different dash positioning or wrapping characters
+     *
+     * @var bool
+     */
+    public $strict = true;
+
+    /**
+     * Array of allowed versions (see version constants above).
+     *
+     * All UUID versions are allowed by default
+     *
+     * @var int[]
+     */
+    public $versions = self::ALL_VERSIONS;
+
+    /** @var callable|null */
+    public $normalizer;
+
+    /**
+     * @param int[]|int|null $versions
+     */
+    public function __construct(
+        ?array $options = null,
+        ?string $message = null,
+        array|int|null $versions = null,
+        ?bool $strict = null,
+        ?callable $normalizer = null,
+        ?array $groups = null,
+        mixed $payload = null
+    ) {
+        parent::__construct($options, $groups, $payload);
+
+        $this->message = $message ?? $this->message;
+        $this->versions = (array) ($versions ?? $this->versions);
+        $this->strict = $strict ?? $this->strict;
+        $this->normalizer = $normalizer ?? $this->normalizer;
+
+        if (null !== $this->normalizer && !\is_callable($this->normalizer)) {
+            throw new InvalidArgumentException(sprintf('The "normalizer" option must be a valid callable ("%s" given).', get_debug_type($this->normalizer)));
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/UuidValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/UuidValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/UuidValidator.php	(revision 8435)
@@ -0,0 +1,260 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+/**
+ * Validates whether the value is a valid UUID (also known as GUID).
+ *
+ * Strict validation will allow a UUID as specified per RFC 4122.
+ * Loose validation will allow any type of UUID.
+ *
+ * @author Colin O'Dell <colinodell@gmail.com>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see http://tools.ietf.org/html/rfc4122
+ * @see https://en.wikipedia.org/wiki/Universally_unique_identifier
+ */
+class UuidValidator extends ConstraintValidator
+{
+    // The strict pattern matches UUIDs like this:
+    // xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
+
+    // Roughly speaking:
+    // x = any hexadecimal character
+    // M = any allowed version {1..8}
+    // N = any allowed variant {8, 9, a, b}
+
+    public const STRICT_LENGTH = 36;
+    public const STRICT_FIRST_HYPHEN_POSITION = 8;
+    public const STRICT_LAST_HYPHEN_POSITION = 23;
+    public const STRICT_VERSION_POSITION = 14;
+    public const STRICT_VARIANT_POSITION = 19;
+
+    // The loose pattern validates similar yet non-compliant UUIDs.
+    // Hyphens are completely optional. If present, they should only appear
+    // between every fourth character:
+    // xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx
+    // xxxxxxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx
+    // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+    // The value can also be wrapped with characters like []{}:
+    // {xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx}
+
+    // Neither the version nor the variant is validated by this pattern.
+
+    public const LOOSE_MAX_LENGTH = 39;
+    public const LOOSE_FIRST_HYPHEN_POSITION = 4;
+
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Uuid) {
+            throw new UnexpectedTypeException($constraint, Uuid::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!\is_scalar($value) && !$value instanceof \Stringable) {
+            throw new UnexpectedValueException($value, 'string');
+        }
+
+        $value = (string) $value;
+
+        if (null !== $constraint->normalizer) {
+            $value = ($constraint->normalizer)($value);
+        }
+
+        if ($constraint->strict) {
+            $this->validateStrict($value, $constraint);
+
+            return;
+        }
+
+        $this->validateLoose($value, $constraint);
+    }
+
+    private function validateLoose(string $value, Uuid $constraint): void
+    {
+        // Error priority:
+        // 1. ERROR_INVALID_CHARACTERS
+        // 2. ERROR_INVALID_HYPHEN_PLACEMENT
+        // 3. ERROR_TOO_SHORT/ERROR_TOO_LONG
+
+        // Trim any wrapping characters like [] or {} used by some legacy systems
+        $trimmed = trim($value, '[]{}');
+
+        // Position of the next expected hyphen
+        $h = self::LOOSE_FIRST_HYPHEN_POSITION;
+
+        // Expected length
+        $l = self::LOOSE_MAX_LENGTH;
+
+        for ($i = 0; $i < $l; ++$i) {
+            // Check length
+            if (!isset($trimmed[$i])) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Uuid::TOO_SHORT_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+
+            // Hyphens must occur every fifth position
+            // xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx
+            //     ^    ^    ^    ^    ^    ^    ^
+            if ('-' === $trimmed[$i]) {
+                if ($i !== $h) {
+                    $this->context->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)
+                        ->addViolation();
+
+                    return;
+                }
+
+                $h += 5;
+
+                continue;
+            }
+
+            // Missing hyphens are ignored
+            if ($i === $h) {
+                $h += 4;
+                --$l;
+            }
+
+            // Check characters
+            if (!ctype_xdigit($trimmed[$i])) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Uuid::INVALID_CHARACTERS_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+        }
+
+        // Check length again
+        if (isset($trimmed[$i])) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Uuid::TOO_LONG_ERROR)
+                ->addViolation();
+        }
+    }
+
+    private function validateStrict(string $value, Uuid $constraint): void
+    {
+        // Error priority:
+        // 1. ERROR_INVALID_CHARACTERS
+        // 2. ERROR_INVALID_HYPHEN_PLACEMENT
+        // 3. ERROR_TOO_SHORT/ERROR_TOO_LONG
+        // 4. ERROR_INVALID_VERSION
+        // 5. ERROR_INVALID_VARIANT
+
+        // Position of the next expected hyphen
+        $h = self::STRICT_FIRST_HYPHEN_POSITION;
+
+        for ($i = 0; $i < self::STRICT_LENGTH; ++$i) {
+            // Check length
+            if (!isset($value[$i])) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Uuid::TOO_SHORT_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+
+            // Check hyphen placement
+            // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
+            //         ^    ^    ^    ^
+            if ('-' === $value[$i]) {
+                if ($i !== $h) {
+                    $this->context->buildViolation($constraint->message)
+                        ->setParameter('{{ value }}', $this->formatValue($value))
+                        ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)
+                        ->addViolation();
+
+                    return;
+                }
+
+                // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
+                //                        ^
+                if ($h < self::STRICT_LAST_HYPHEN_POSITION) {
+                    $h += 5;
+                }
+
+                continue;
+            }
+
+            // Check characters
+            if (!ctype_xdigit($value[$i])) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Uuid::INVALID_CHARACTERS_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+
+            // Missing hyphen
+            if ($i === $h) {
+                $this->context->buildViolation($constraint->message)
+                    ->setParameter('{{ value }}', $this->formatValue($value))
+                    ->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)
+                    ->addViolation();
+
+                return;
+            }
+        }
+
+        // Check length again
+        if (isset($value[$i])) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Uuid::TOO_LONG_ERROR)
+                ->addViolation();
+        }
+
+        // Check version
+        if (!\in_array($value[self::STRICT_VERSION_POSITION], $constraint->versions)) {
+            $code = Uuid::TIME_BASED_VERSIONS === $constraint->versions ? Uuid::INVALID_TIME_BASED_VERSION_ERROR : Uuid::INVALID_VERSION_ERROR;
+
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode($code)
+                ->addViolation();
+        }
+
+        // Check variant - first two bits must equal "10"
+        //   0b10xx
+        // & 0b1100 (12)
+        // = 0b1000 (8)
+        if (8 !== (hexdec($value[self::STRICT_VARIANT_POSITION]) & 12)) {
+            $this->context->buildViolation($constraint->message)
+                ->setParameter('{{ value }}', $this->formatValue($value))
+                ->setCode(Uuid::INVALID_VARIANT_ERROR)
+                ->addViolation();
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Valid.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Valid.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/Valid.php	(revision 8435)
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * @Annotation
+ * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class Valid extends Constraint
+{
+    public $traverse = true;
+
+    public function __construct(?array $options = null, ?array $groups = null, $payload = null, ?bool $traverse = null)
+    {
+        parent::__construct($options ?? [], $groups, $payload);
+
+        $this->traverse = $traverse ?? $this->traverse;
+    }
+
+    public function __get(string $option): mixed
+    {
+        if ('groups' === $option) {
+            // when this is reached, no groups have been configured
+            return null;
+        }
+
+        return parent::__get($option);
+    }
+
+    /**
+     * @return void
+     */
+    public function addImplicitGroupName(string $group)
+    {
+        if (null !== $this->groups) {
+            parent::addImplicitGroupName($group);
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ValidValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ValidValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ValidValidator.php	(revision 8435)
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * @author Christian Flothmann <christian.flothmann@sensiolabs.de>
+ */
+class ValidValidator extends ConstraintValidator
+{
+    /**
+     * @return void
+     */
+    public function validate(mixed $value, Constraint $constraint)
+    {
+        if (!$constraint instanceof Valid) {
+            throw new UnexpectedTypeException($constraint, Valid::class);
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        $this->context
+            ->getValidator()
+            ->inContext($this->context)
+            ->validate($value, null, $this->context->getGroup());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/When.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/When.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/When.php	(revision 8435)
@@ -0,0 +1,74 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\ExpressionLanguage\Expression;
+use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\LogicException;
+
+/**
+ * @Annotation
+ * @Target({"CLASS", "PROPERTY", "METHOD", "ANNOTATION"})
+ */
+#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
+class When extends Composite
+{
+    public $expression;
+    public $constraints = [];
+    public $values = [];
+
+    public function __construct(string|Expression|array $expression, array|Constraint|null $constraints = null, ?array $values = null, ?array $groups = null, $payload = null, array $options = [])
+    {
+        if (!class_exists(ExpressionLanguage::class)) {
+            throw new LogicException(sprintf('The "symfony/expression-language" component is required to use the "%s" constraint. Try running "composer require symfony/expression-language".', __CLASS__));
+        }
+
+        if (\is_array($expression)) {
+            $options = array_merge($expression, $options);
+        } else {
+            $options['expression'] = $expression;
+            $options['constraints'] = $constraints;
+        }
+
+        if (isset($options['constraints']) && !\is_array($options['constraints'])) {
+            $options['constraints'] = [$options['constraints']];
+        }
+
+        if (null !== $groups) {
+            $options['groups'] = $groups;
+        }
+
+        if (null !== $payload) {
+            $options['payload'] = $payload;
+        }
+
+        parent::__construct($options);
+
+        $this->values = $values ?? $this->values;
+    }
+
+    public function getRequiredOptions(): array
+    {
+        return ['expression', 'constraints'];
+    }
+
+    public function getTargets(): string|array
+    {
+        return [self::CLASS_CONSTRAINT, self::PROPERTY_CONSTRAINT];
+    }
+
+    protected function getCompositeOption(): string
+    {
+        return 'constraints';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/WhenValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/WhenValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/WhenValidator.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\LogicException;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+final class WhenValidator extends ConstraintValidator
+{
+    public function __construct(private ?ExpressionLanguage $expressionLanguage = null)
+    {
+    }
+
+    public function validate(mixed $value, Constraint $constraint): void
+    {
+        if (!$constraint instanceof When) {
+            throw new UnexpectedTypeException($constraint, When::class);
+        }
+
+        $context = $this->context;
+        $variables = $constraint->values;
+        $variables['value'] = $value;
+        $variables['this'] = $context->getObject();
+
+        if ($this->getExpressionLanguage()->evaluate($constraint->expression, $variables)) {
+            $context->getValidator()->inContext($context)
+                ->validate($value, $constraint->constraints);
+        }
+    }
+
+    private function getExpressionLanguage(): ExpressionLanguage
+    {
+        if (!class_exists(ExpressionLanguage::class)) {
+            throw new LogicException(sprintf('The "symfony/expression-language" component is required to use the "%s" validator. Try running "composer require symfony/expression-language".', __CLASS__));
+        }
+
+        return $this->expressionLanguage ??= new ExpressionLanguage();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ZeroComparisonConstraintTrait.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ZeroComparisonConstraintTrait.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Constraints/ZeroComparisonConstraintTrait.php	(revision 8435)
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Constraints;
+
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * @internal
+ *
+ * @author Jan SchÃ€dlich <jan.schaedlich@sensiolabs.de>
+ * @author Alexander M. Turek <me@derrabus.de>
+ */
+trait ZeroComparisonConstraintTrait
+{
+    public function __construct(?array $options = null, ?string $message = null, ?array $groups = null, mixed $payload = null)
+    {
+        $options ??= [];
+
+        if (isset($options['propertyPath'])) {
+            throw new ConstraintDefinitionException(sprintf('The "propertyPath" option of the "%s" constraint cannot be set.', static::class));
+        }
+
+        if (isset($options['value'])) {
+            throw new ConstraintDefinitionException(sprintf('The "value" option of the "%s" constraint cannot be set.', static::class));
+        }
+
+        parent::__construct(0, null, $message, $groups, $payload, $options);
+    }
+
+    public function validatedBy(): string
+    {
+        return parent::class.'Validator';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/ContainerConstraintValidatorFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/ContainerConstraintValidatorFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/ContainerConstraintValidatorFactory.php	(revision 8435)
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+use Psr\Container\ContainerInterface;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\ValidatorException;
+
+/**
+ * Uses a service container to create constraint validators.
+ *
+ * @author Kris Wallsmith <kris@symfony.com>
+ */
+class ContainerConstraintValidatorFactory implements ConstraintValidatorFactoryInterface
+{
+    private ContainerInterface $container;
+    private array $validators;
+
+    public function __construct(ContainerInterface $container)
+    {
+        $this->container = $container;
+        $this->validators = [];
+    }
+
+    /**
+     * @throws ValidatorException      When the validator class does not exist
+     * @throws UnexpectedTypeException When the validator is not an instance of ConstraintValidatorInterface
+     */
+    public function getInstance(Constraint $constraint): ConstraintValidatorInterface
+    {
+        $name = $constraint->validatedBy();
+
+        if (!isset($this->validators[$name])) {
+            if ($this->container->has($name)) {
+                $this->validators[$name] = $this->container->get($name);
+            } else {
+                if (!class_exists($name)) {
+                    throw new ValidatorException(sprintf('Constraint validator "%s" does not exist or is not enabled. Check the "validatedBy" method in your constraint class "%s".', $name, get_debug_type($constraint)));
+                }
+
+                $this->validators[$name] = new $name();
+            }
+        }
+
+        if (!$this->validators[$name] instanceof ConstraintValidatorInterface) {
+            throw new UnexpectedTypeException($this->validators[$name], ConstraintValidatorInterface::class);
+        }
+
+        return $this->validators[$name];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Context/ExecutionContext.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Context/ExecutionContext.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Context/ExecutionContext.php	(revision 8435)
@@ -0,0 +1,281 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Context;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintViolation;
+use Symfony\Component\Validator\ConstraintViolationList;
+use Symfony\Component\Validator\ConstraintViolationListInterface;
+use Symfony\Component\Validator\Mapping\ClassMetadataInterface;
+use Symfony\Component\Validator\Mapping\MemberMetadata;
+use Symfony\Component\Validator\Mapping\MetadataInterface;
+use Symfony\Component\Validator\Mapping\PropertyMetadataInterface;
+use Symfony\Component\Validator\Util\PropertyPath;
+use Symfony\Component\Validator\Validator\LazyProperty;
+use Symfony\Component\Validator\Validator\ValidatorInterface;
+use Symfony\Component\Validator\Violation\ConstraintViolationBuilder;
+use Symfony\Component\Validator\Violation\ConstraintViolationBuilderInterface;
+use Symfony\Contracts\Translation\TranslatorInterface;
+
+/**
+ * The context used and created by {@link ExecutionContextFactory}.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see ExecutionContextInterface
+ *
+ * @internal since version 2.5. Code against ExecutionContextInterface instead.
+ */
+class ExecutionContext implements ExecutionContextInterface
+{
+    private ValidatorInterface $validator;
+
+    /**
+     * The root value of the validated object graph.
+     */
+    private mixed $root;
+
+    private TranslatorInterface $translator;
+    private ?string $translationDomain;
+
+    /**
+     * The violations generated in the current context.
+     */
+    private ConstraintViolationList $violations;
+
+    /**
+     * The currently validated value.
+     */
+    private mixed $value = null;
+
+    /**
+     * The currently validated object.
+     */
+    private ?object $object = null;
+
+    /**
+     * The property path leading to the current value.
+     */
+    private string $propertyPath = '';
+
+    /**
+     * The current validation metadata.
+     */
+    private ?MetadataInterface $metadata = null;
+
+    /**
+     * The currently validated group.
+     */
+    private ?string $group = null;
+
+    /**
+     * The currently validated constraint.
+     */
+    private ?Constraint $constraint = null;
+
+    /**
+     * Stores which objects have been validated in which group.
+     *
+     * @var bool[][]
+     */
+    private array $validatedObjects = [];
+
+    /**
+     * Stores which class constraint has been validated for which object.
+     *
+     * @var bool[]
+     */
+    private array $validatedConstraints = [];
+
+    /**
+     * Stores which objects have been initialized.
+     *
+     * @var bool[]
+     */
+    private array $initializedObjects = [];
+
+    /**
+     * @var \SplObjectStorage<object, string>
+     */
+    private \SplObjectStorage $cachedObjectsRefs;
+
+    /**
+     * @internal Called by {@link ExecutionContextFactory}. Should not be used in user code.
+     */
+    public function __construct(ValidatorInterface $validator, mixed $root, TranslatorInterface $translator, ?string $translationDomain = null)
+    {
+        $this->validator = $validator;
+        $this->root = $root;
+        $this->translator = $translator;
+        $this->translationDomain = $translationDomain;
+        $this->violations = new ConstraintViolationList();
+        $this->cachedObjectsRefs = new \SplObjectStorage();
+    }
+
+    public function setNode(mixed $value, ?object $object, ?MetadataInterface $metadata, string $propertyPath): void
+    {
+        $this->value = $value;
+        $this->object = $object;
+        $this->metadata = $metadata;
+        $this->propertyPath = $propertyPath;
+    }
+
+    public function setGroup(?string $group): void
+    {
+        $this->group = $group;
+    }
+
+    public function setConstraint(Constraint $constraint): void
+    {
+        $this->constraint = $constraint;
+    }
+
+    public function addViolation(string|\Stringable $message, array $parameters = []): void
+    {
+        $this->violations->add(new ConstraintViolation(
+            $this->translator->trans($message, $parameters, $this->translationDomain),
+            $message,
+            $parameters,
+            $this->root,
+            $this->propertyPath,
+            $this->getValue(),
+            null,
+            null,
+            $this->constraint
+        ));
+    }
+
+    public function buildViolation(string|\Stringable $message, array $parameters = []): ConstraintViolationBuilderInterface
+    {
+        return new ConstraintViolationBuilder(
+            $this->violations,
+            $this->constraint,
+            $message,
+            $parameters,
+            $this->root,
+            $this->propertyPath,
+            $this->getValue(),
+            $this->translator,
+            $this->translationDomain
+        );
+    }
+
+    public function getViolations(): ConstraintViolationListInterface
+    {
+        return $this->violations;
+    }
+
+    public function getValidator(): ValidatorInterface
+    {
+        return $this->validator;
+    }
+
+    public function getRoot(): mixed
+    {
+        return $this->root;
+    }
+
+    public function getValue(): mixed
+    {
+        if ($this->value instanceof LazyProperty) {
+            return $this->value->getPropertyValue();
+        }
+
+        return $this->value;
+    }
+
+    public function getObject(): ?object
+    {
+        return $this->object;
+    }
+
+    public function getMetadata(): ?MetadataInterface
+    {
+        return $this->metadata;
+    }
+
+    public function getGroup(): ?string
+    {
+        return $this->group;
+    }
+
+    public function getConstraint(): ?Constraint
+    {
+        return $this->constraint;
+    }
+
+    public function getClassName(): ?string
+    {
+        return $this->metadata instanceof MemberMetadata || $this->metadata instanceof ClassMetadataInterface ? $this->metadata->getClassName() : null;
+    }
+
+    public function getPropertyName(): ?string
+    {
+        return $this->metadata instanceof PropertyMetadataInterface ? $this->metadata->getPropertyName() : null;
+    }
+
+    public function getPropertyPath(string $subPath = ''): string
+    {
+        return PropertyPath::append($this->propertyPath, $subPath);
+    }
+
+    public function markGroupAsValidated(string $cacheKey, string $groupHash): void
+    {
+        if (!isset($this->validatedObjects[$cacheKey])) {
+            $this->validatedObjects[$cacheKey] = [];
+        }
+
+        $this->validatedObjects[$cacheKey][$groupHash] = true;
+    }
+
+    public function isGroupValidated(string $cacheKey, string $groupHash): bool
+    {
+        return isset($this->validatedObjects[$cacheKey][$groupHash]);
+    }
+
+    public function markConstraintAsValidated(string $cacheKey, string $constraintHash): void
+    {
+        $this->validatedConstraints[$cacheKey.':'.$constraintHash] = true;
+    }
+
+    public function isConstraintValidated(string $cacheKey, string $constraintHash): bool
+    {
+        return isset($this->validatedConstraints[$cacheKey.':'.$constraintHash]);
+    }
+
+    public function markObjectAsInitialized(string $cacheKey): void
+    {
+        $this->initializedObjects[$cacheKey] = true;
+    }
+
+    public function isObjectInitialized(string $cacheKey): bool
+    {
+        return isset($this->initializedObjects[$cacheKey]);
+    }
+
+    /**
+     * @internal
+     */
+    public function generateCacheKey(object $object): string
+    {
+        if (!isset($this->cachedObjectsRefs[$object])) {
+            $this->cachedObjectsRefs[$object] = spl_object_hash($object);
+        }
+
+        return $this->cachedObjectsRefs[$object];
+    }
+
+    public function __clone()
+    {
+        $this->violations = clone $this->violations;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Context/ExecutionContextFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Context/ExecutionContextFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Context/ExecutionContextFactory.php	(revision 8435)
@@ -0,0 +1,44 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Context;
+
+use Symfony\Component\Validator\Validator\ValidatorInterface;
+use Symfony\Contracts\Translation\TranslatorInterface;
+
+/**
+ * Creates new {@link ExecutionContext} instances.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @internal version 2.5. Code against ExecutionContextFactoryInterface instead.
+ */
+class ExecutionContextFactory implements ExecutionContextFactoryInterface
+{
+    private TranslatorInterface $translator;
+    private ?string $translationDomain;
+
+    public function __construct(TranslatorInterface $translator, ?string $translationDomain = null)
+    {
+        $this->translator = $translator;
+        $this->translationDomain = $translationDomain;
+    }
+
+    public function createContext(ValidatorInterface $validator, mixed $root): ExecutionContextInterface
+    {
+        return new ExecutionContext(
+            $validator,
+            $root,
+            $this->translator,
+            $this->translationDomain
+        );
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Context/ExecutionContextFactoryInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Context/ExecutionContextFactoryInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Context/ExecutionContextFactoryInterface.php	(revision 8435)
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Context;
+
+use Symfony\Component\Validator\Validator\ValidatorInterface;
+
+/**
+ * Creates instances of {@link ExecutionContextInterface}.
+ *
+ * You can use a custom factory if you want to customize the execution context
+ * that is passed through the validation run.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+interface ExecutionContextFactoryInterface
+{
+    /**
+     * Creates a new execution context.
+     *
+     * @param mixed $root The root value of the validated
+     *                    object graph
+     */
+    public function createContext(ValidatorInterface $validator, mixed $root): ExecutionContextInterface;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Context/ExecutionContextInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Context/ExecutionContextInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Context/ExecutionContextInterface.php	(revision 8435)
@@ -0,0 +1,297 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Context;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintViolationListInterface;
+use Symfony\Component\Validator\Mapping;
+use Symfony\Component\Validator\Mapping\MetadataInterface;
+use Symfony\Component\Validator\Validator\ValidatorInterface;
+use Symfony\Component\Validator\Violation\ConstraintViolationBuilderInterface;
+
+/**
+ * The context of a validation run.
+ *
+ * The context collects all violations generated during the validation. By
+ * default, validators execute all validations in a new context:
+ *
+ *     $violations = $validator->validate($object);
+ *
+ * When you make another call to the validator, while the validation is in
+ * progress, the violations will be isolated from each other:
+ *
+ *     public function validate(mixed $value, Constraint $constraint): void
+ *     {
+ *         $validator = $this->context->getValidator();
+ *
+ *         // The violations are not added to $this->context
+ *         $violations = $validator->validate($value);
+ *     }
+ *
+ * However, if you want to add the violations to the current context, use the
+ * {@link ValidatorInterface::inContext()} method:
+ *
+ *     public function validate(mixed $value, Constraint $constraint): void
+ *     {
+ *         $validator = $this->context->getValidator();
+ *
+ *         // The violations are added to $this->context
+ *         $validator
+ *             ->inContext($this->context)
+ *             ->validate($value)
+ *         ;
+ *     }
+ *
+ * Additionally, the context provides information about the current state of
+ * the validator, such as the currently validated class, the name of the
+ * currently validated property and more. These values change over time, so you
+ * cannot store a context and expect that the methods still return the same
+ * results later on.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+interface ExecutionContextInterface
+{
+    /**
+     * Adds a violation at the current node of the validation graph.
+     *
+     * @param string|\Stringable $message The error message as a string or a stringable object
+     * @param array              $params  The parameters substituted in the error message
+     *
+     * @return void
+     */
+    public function addViolation(string $message, array $params = []);
+
+    /**
+     * Returns a builder for adding a violation with extended information.
+     *
+     * Call {@link ConstraintViolationBuilderInterface::addViolation()} to
+     * add the violation when you're done with the configuration:
+     *
+     *     $context->buildViolation('Please enter a number between %min% and %max%.')
+     *         ->setParameter('%min%', '3')
+     *         ->setParameter('%max%', '10')
+     *         ->setTranslationDomain('number_validation')
+     *         ->addViolation();
+     *
+     * @param string|\Stringable $message    The error message as a string or a stringable object
+     * @param array              $parameters The parameters substituted in the error message
+     */
+    public function buildViolation(string $message, array $parameters = []): ConstraintViolationBuilderInterface;
+
+    /**
+     * Returns the validator.
+     *
+     * Useful if you want to validate additional constraints:
+     *
+     *     public function validate(mixed $value, Constraint $constraint): void
+     *     {
+     *         $validator = $this->context->getValidator();
+     *
+     *         $violations = $validator->validate($value, new Length(['min' => 3]));
+     *
+     *         if (count($violations) > 0) {
+     *             // ...
+     *         }
+     *     }
+     */
+    public function getValidator(): ValidatorInterface;
+
+    /**
+     * Returns the currently validated object.
+     *
+     * If the validator is currently validating a class constraint, the
+     * object of that class is returned. If it is validating a property or
+     * getter constraint, the object that the property/getter belongs to is
+     * returned.
+     *
+     * In other cases, null is returned.
+     */
+    public function getObject(): ?object;
+
+    /**
+     * Warning: Should not be called by user code, to be used by the validator engine only.
+     *
+     * @param object|null $object       The currently validated object
+     * @param string      $propertyPath The property path to the current value
+     *
+     * @return void
+     */
+    public function setNode(mixed $value, ?object $object, ?MetadataInterface $metadata, string $propertyPath);
+
+    /**
+     * Warning: Should not be called by user code, to be used by the validator engine only.
+     *
+     * @param string|null $group The validated group
+     *
+     * @return void
+     */
+    public function setGroup(?string $group);
+
+    /**
+     * Warning: Should not be called by user code, to be used by the validator engine only.
+     *
+     * @return void
+     */
+    public function setConstraint(Constraint $constraint);
+
+    /**
+     * Warning: Should not be called by user code, to be used by the validator engine only.
+     *
+     * @param string $cacheKey  The hash of the object
+     * @param string $groupHash The group's name or hash, if it is group
+     *                          sequence
+     *
+     * @return void
+     */
+    public function markGroupAsValidated(string $cacheKey, string $groupHash);
+
+    /**
+     * Warning: Should not be called by user code, to be used by the validator engine only.
+     *
+     * @param string $cacheKey  The hash of the object
+     * @param string $groupHash The group's name or hash, if it is group
+     *                          sequence
+     */
+    public function isGroupValidated(string $cacheKey, string $groupHash): bool;
+
+    /**
+     * Warning: Should not be called by user code, to be used by the validator engine only.
+     *
+     * @param string $cacheKey       The hash of the object
+     * @param string $constraintHash The hash of the constraint
+     *
+     * @return void
+     */
+    public function markConstraintAsValidated(string $cacheKey, string $constraintHash);
+
+    /**
+     * Warning: Should not be called by user code, to be used by the validator engine only.
+     *
+     * @param string $cacheKey       The hash of the object
+     * @param string $constraintHash The hash of the constraint
+     */
+    public function isConstraintValidated(string $cacheKey, string $constraintHash): bool;
+
+    /**
+     * Warning: Should not be called by user code, to be used by the validator engine only.
+     *
+     * @param string $cacheKey The hash of the object
+     *
+     * @see ObjectInitializerInterface
+     */
+    public function markObjectAsInitialized(string $cacheKey): void;
+
+    /**
+     * Warning: Should not be called by user code, to be used by the validator engine only.
+     *
+     * @param string $cacheKey The hash of the object
+     *
+     * @see ObjectInitializerInterface
+     */
+    public function isObjectInitialized(string $cacheKey): bool;
+
+    /**
+     * Returns the violations generated by the validator so far.
+     */
+    public function getViolations(): ConstraintViolationListInterface;
+
+    /**
+     * Returns the value at which validation was started in the object graph.
+     *
+     * The validator, when given an object, traverses the properties and
+     * related objects and their properties. The root of the validation is the
+     * object from which the traversal started.
+     *
+     * The current value is returned by {@link getValue}.
+     */
+    public function getRoot(): mixed;
+
+    /**
+     * Returns the value that the validator is currently validating.
+     *
+     * If you want to retrieve the object that was originally passed to the
+     * validator, use {@link getRoot}.
+     */
+    public function getValue(): mixed;
+
+    /**
+     * Returns the metadata for the currently validated value.
+     *
+     * With the core implementation, this method returns a
+     * {@link Mapping\ClassMetadataInterface} instance if the current value is an object,
+     * a {@link Mapping\PropertyMetadata} instance if the current value is
+     * the value of a property and a {@link Mapping\GetterMetadata} instance if
+     * the validated value is the result of a getter method.
+     *
+     * If the validated value is neither of these, for example if the validator
+     * has been called with a plain value and constraint, this method returns
+     * null.
+     */
+    public function getMetadata(): ?MetadataInterface;
+
+    /**
+     * Returns the validation group that is currently being validated.
+     */
+    public function getGroup(): ?string;
+
+    /**
+     * Returns the class name of the current node.
+     *
+     * If the metadata of the current node does not implement
+     * {@link Mapping\ClassMetadataInterface} or if no metadata is available for the
+     * current node, this method returns null.
+     */
+    public function getClassName(): ?string;
+
+    /**
+     * Returns the property name of the current node.
+     *
+     * If the metadata of the current node does not implement
+     * {@link PropertyMetadataInterface} or if no metadata is available for the
+     * current node, this method returns null.
+     */
+    public function getPropertyName(): ?string;
+
+    /**
+     * Returns the property path to the value that the validator is currently
+     * validating.
+     *
+     * For example, take the following object graph:
+     *
+     * <pre>
+     * (Person)---($address: Address)---($street: string)
+     * </pre>
+     *
+     * When the <tt>Person</tt> instance is passed to the validator, the
+     * property path is initially empty. When the <tt>$address</tt> property
+     * of that person is validated, the property path is "address". When
+     * the <tt>$street</tt> property of the related <tt>Address</tt> instance
+     * is validated, the property path is "address.street".
+     *
+     * Properties of objects are prefixed with a dot in the property path.
+     * Indices of arrays or objects implementing the {@link \ArrayAccess}
+     * interface are enclosed in brackets. For example, if the property in
+     * the previous example is <tt>$addresses</tt> and contains an array
+     * of <tt>Address</tt> instance, the property path generated for the
+     * <tt>$street</tt> property of one of these addresses is for example
+     * "addresses[0].street".
+     *
+     * @param string $subPath Optional. The suffix appended to the current
+     *                        property path.
+     *
+     * @return string The current property path. The result may be an empty
+     *                string if the validator is currently validating the
+     *                root value of the validation graph.
+     */
+    public function getPropertyPath(string $subPath = ''): string;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/DataCollector/ValidatorDataCollector.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/DataCollector/ValidatorDataCollector.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/DataCollector/ValidatorDataCollector.php	(revision 8435)
@@ -0,0 +1,95 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\DataCollector;
+
+use Symfony\Component\Form\FormInterface;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpKernel\DataCollector\DataCollector;
+use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface;
+use Symfony\Component\Validator\Validator\TraceableValidator;
+use Symfony\Component\VarDumper\Caster\Caster;
+use Symfony\Component\VarDumper\Caster\ClassStub;
+use Symfony\Component\VarDumper\Cloner\Data;
+use Symfony\Component\VarDumper\Cloner\Stub;
+
+/**
+ * @author Maxime Steinhausser <maxime.steinhausser@gmail.com>
+ *
+ * @final
+ */
+class ValidatorDataCollector extends DataCollector implements LateDataCollectorInterface
+{
+    private TraceableValidator $validator;
+
+    public function __construct(TraceableValidator $validator)
+    {
+        $this->validator = $validator;
+        $this->reset();
+    }
+
+    public function collect(Request $request, Response $response, ?\Throwable $exception = null): void
+    {
+        // Everything is collected once, on kernel terminate.
+    }
+
+    public function reset(): void
+    {
+        $this->data = [
+            'calls' => $this->cloneVar([]),
+            'violations_count' => 0,
+        ];
+    }
+
+    public function lateCollect(): void
+    {
+        $collected = $this->validator->getCollectedData();
+        $this->data['calls'] = $this->cloneVar($collected);
+        $this->data['violations_count'] = array_reduce($collected, fn ($previous, $item) => $previous + \count($item['violations']), 0);
+    }
+
+    public function getCalls(): Data
+    {
+        return $this->data['calls'];
+    }
+
+    public function getViolationsCount(): int
+    {
+        return $this->data['violations_count'];
+    }
+
+    public function getName(): string
+    {
+        return 'validator';
+    }
+
+    protected function getCasters(): array
+    {
+        return parent::getCasters() + [
+            \Exception::class => function (\Exception $e, array $a, Stub $s) {
+                foreach (["\0Exception\0previous", "\0Exception\0trace"] as $k) {
+                    if (isset($a[$k])) {
+                        unset($a[$k]);
+                        ++$s->cut;
+                    }
+                }
+
+                return $a;
+            },
+            FormInterface::class => fn (FormInterface $f, array $a) => [
+                Caster::PREFIX_VIRTUAL.'name' => $f->getName(),
+                Caster::PREFIX_VIRTUAL.'type_class' => new ClassStub($f->getConfig()->getType()->getInnerType()::class),
+                Caster::PREFIX_VIRTUAL.'data' => $f->getData(),
+            ],
+        ];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/DependencyInjection/AddAutoMappingConfigurationPass.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/DependencyInjection/AddAutoMappingConfigurationPass.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/DependencyInjection/AddAutoMappingConfigurationPass.php	(revision 8435)
@@ -0,0 +1,87 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\DependencyInjection;
+
+use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Reference;
+
+/**
+ * Injects the automapping configuration as last argument of loaders tagged with the "validator.auto_mapper" tag.
+ *
+ * @author KÃ©vin Dunglas <dunglas@gmail.com>
+ */
+class AddAutoMappingConfigurationPass implements CompilerPassInterface
+{
+    /**
+     * @return void
+     */
+    public function process(ContainerBuilder $container)
+    {
+        if (!$container->hasParameter('validator.auto_mapping') || !$container->hasDefinition('validator.builder')) {
+            return;
+        }
+
+        $config = $container->getParameter('validator.auto_mapping');
+
+        $globalNamespaces = [];
+        $servicesToNamespaces = [];
+        foreach ($config as $namespace => $value) {
+            if ([] === $value['services']) {
+                $globalNamespaces[] = $namespace;
+
+                continue;
+            }
+
+            foreach ($value['services'] as $service) {
+                $servicesToNamespaces[$service][] = $namespace;
+            }
+        }
+
+        $validatorBuilder = $container->getDefinition('validator.builder');
+        foreach ($container->findTaggedServiceIds('validator.auto_mapper') as $id => $tags) {
+            $regexp = $this->getRegexp(array_merge($globalNamespaces, $servicesToNamespaces[$id] ?? []));
+            $validatorBuilder->addMethodCall('addLoader', [new Reference($id)]);
+            $container->getDefinition($id)->setArgument('$classValidatorRegexp', $regexp);
+        }
+
+        $container->getParameterBag()->remove('validator.auto_mapping');
+    }
+
+    /**
+     * Builds a regexp to check if a class is auto-mapped.
+     */
+    private function getRegexp(array $patterns): ?string
+    {
+        if (!$patterns) {
+            return null;
+        }
+
+        $regexps = [];
+        foreach ($patterns as $pattern) {
+            // Escape namespace
+            $regex = preg_quote(ltrim($pattern, '\\'));
+
+            // Wildcards * and **
+            $regex = strtr($regex, ['\\*\\*' => '.*?', '\\*' => '[^\\\\]*?']);
+
+            // If this class does not end by a slash, anchor the end
+            if (!str_ends_with($regex, '\\')) {
+                $regex .= '$';
+            }
+
+            $regexps[] = '^'.$regex;
+        }
+
+        return sprintf('{%s}', implode('|', $regexps));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/DependencyInjection/AddConstraintValidatorsPass.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/DependencyInjection/AddConstraintValidatorsPass.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/DependencyInjection/AddConstraintValidatorsPass.php	(revision 8435)
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\DependencyInjection;
+
+use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
+use Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Reference;
+
+/**
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ * @author Robin Chalas <robin.chalas@gmail.com>
+ */
+class AddConstraintValidatorsPass implements CompilerPassInterface
+{
+    /**
+     * @return void
+     */
+    public function process(ContainerBuilder $container)
+    {
+        if (!$container->hasDefinition('validator.validator_factory')) {
+            return;
+        }
+
+        $validators = [];
+        foreach ($container->findTaggedServiceIds('validator.constraint_validator', true) as $id => $attributes) {
+            $definition = $container->getDefinition($id);
+
+            if (isset($attributes[0]['alias'])) {
+                $validators[$attributes[0]['alias']] = new Reference($id);
+            }
+
+            $validators[$definition->getClass()] = new Reference($id);
+        }
+
+        $container
+            ->getDefinition('validator.validator_factory')
+            ->replaceArgument(0, ServiceLocatorTagPass::register($container, $validators))
+        ;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/DependencyInjection/AddValidatorInitializersPass.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/DependencyInjection/AddValidatorInitializersPass.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/DependencyInjection/AddValidatorInitializersPass.php	(revision 8435)
@@ -0,0 +1,40 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\DependencyInjection;
+
+use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Reference;
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Robin Chalas <robin.chalas@gmail.com>
+ */
+class AddValidatorInitializersPass implements CompilerPassInterface
+{
+    /**
+     * @return void
+     */
+    public function process(ContainerBuilder $container)
+    {
+        if (!$container->hasDefinition('validator.builder')) {
+            return;
+        }
+
+        $initializers = [];
+        foreach ($container->findTaggedServiceIds('validator.initializer', true) as $id => $attributes) {
+            $initializers[] = new Reference($id);
+        }
+
+        $container->getDefinition('validator.builder')->addMethodCall('addObjectInitializers', [$initializers]);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/BadMethodCallException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/BadMethodCallException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/BadMethodCallException.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+/**
+ * Base BadMethodCallException for the Validator component.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class BadMethodCallException extends \BadMethodCallException implements ExceptionInterface
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/ConstraintDefinitionException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/ConstraintDefinitionException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/ConstraintDefinitionException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+class ConstraintDefinitionException extends ValidatorException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/ExceptionInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/ExceptionInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/ExceptionInterface.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+/**
+ * Base ExceptionInterface for the Validator component.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+interface ExceptionInterface extends \Throwable
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/GroupDefinitionException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/GroupDefinitionException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/GroupDefinitionException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+class GroupDefinitionException extends ValidatorException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/InvalidArgumentException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/InvalidArgumentException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/InvalidArgumentException.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+/**
+ * Base InvalidArgumentException for the Validator component.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/InvalidOptionsException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/InvalidOptionsException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/InvalidOptionsException.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+class InvalidOptionsException extends ValidatorException
+{
+    private array $options;
+
+    public function __construct(string $message, array $options)
+    {
+        parent::__construct($message);
+
+        $this->options = $options;
+    }
+
+    /**
+     * @return array
+     */
+    public function getOptions()
+    {
+        return $this->options;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/LogicException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/LogicException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/LogicException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+class LogicException extends \LogicException implements ExceptionInterface
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/MappingException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/MappingException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/MappingException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+class MappingException extends ValidatorException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/MissingOptionsException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/MissingOptionsException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/MissingOptionsException.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+class MissingOptionsException extends ValidatorException
+{
+    private array $options;
+
+    public function __construct(string $message, array $options)
+    {
+        parent::__construct($message);
+
+        $this->options = $options;
+    }
+
+    /**
+     * @return array
+     */
+    public function getOptions()
+    {
+        return $this->options;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/NoSuchMetadataException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/NoSuchMetadataException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/NoSuchMetadataException.php	(revision 8435)
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class NoSuchMetadataException extends ValidatorException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/OutOfBoundsException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/OutOfBoundsException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/OutOfBoundsException.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+/**
+ * Base OutOfBoundsException for the Validator component.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class OutOfBoundsException extends \OutOfBoundsException implements ExceptionInterface
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/RuntimeException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/RuntimeException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/RuntimeException.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+/**
+ * Base RuntimeException for the Validator component.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class RuntimeException extends \RuntimeException implements ExceptionInterface
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/UnexpectedTypeException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/UnexpectedTypeException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/UnexpectedTypeException.php	(revision 8435)
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+class UnexpectedTypeException extends ValidatorException
+{
+    public function __construct(mixed $value, string $expectedType)
+    {
+        parent::__construct(sprintf('Expected argument of type "%s", "%s" given', $expectedType, get_debug_type($value)));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/UnexpectedValueException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/UnexpectedValueException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/UnexpectedValueException.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+/**
+ * @author Christian Flothmann <christian.flothmann@sensiolabs.de>
+ */
+class UnexpectedValueException extends UnexpectedTypeException
+{
+    private string $expectedType;
+
+    public function __construct(mixed $value, string $expectedType)
+    {
+        parent::__construct($value, $expectedType);
+
+        $this->expectedType = $expectedType;
+    }
+
+    public function getExpectedType(): string
+    {
+        return $this->expectedType;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/UnsupportedMetadataException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/UnsupportedMetadataException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/UnsupportedMetadataException.php	(revision 8435)
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class UnsupportedMetadataException extends InvalidArgumentException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/ValidationFailedException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/ValidationFailedException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/ValidationFailedException.php	(revision 8435)
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+use Symfony\Component\Validator\ConstraintViolationListInterface;
+
+/**
+ * @author Jan Vernieuwe <jan.vernieuwe@phpro.be>
+ */
+class ValidationFailedException extends RuntimeException
+{
+    private ConstraintViolationListInterface $violations;
+    private mixed $value;
+
+    public function __construct(mixed $value, ConstraintViolationListInterface $violations)
+    {
+        $this->violations = $violations;
+        $this->value = $value;
+        parent::__construct($violations);
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getValue()
+    {
+        return $this->value;
+    }
+
+    public function getViolations(): ConstraintViolationListInterface
+    {
+        return $this->violations;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/ValidatorException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/ValidatorException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Exception/ValidatorException.php	(revision 8435)
@@ -0,0 +1,16 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Exception;
+
+class ValidatorException extends RuntimeException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/GroupProviderInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/GroupProviderInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/GroupProviderInterface.php	(revision 8435)
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+use Symfony\Component\Validator\Constraints\GroupSequence;
+
+/**
+ * Defines the interface for a validation group provider.
+ *
+ * @author Yonel Ceruto <yonelceruto@gmail.com>
+ */
+interface GroupProviderInterface
+{
+    /**
+     * Returns which validation groups should be used for a certain state
+     * of the object.
+     *
+     * @return string[]|string[][]|GroupSequence
+     */
+    public function getGroups(object $object): array|GroupSequence;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/GroupSequenceProviderInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/GroupSequenceProviderInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/GroupSequenceProviderInterface.php	(revision 8435)
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+use Symfony\Component\Validator\Constraints\GroupSequence;
+
+/**
+ * Defines the interface for a group sequence provider.
+ */
+interface GroupSequenceProviderInterface
+{
+    /**
+     * Returns which validation groups should be used for a certain state
+     * of the object.
+     *
+     * @return string[]|string[][]|GroupSequence
+     */
+    public function getGroupSequence(): array|GroupSequence;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/LICENSE	(revision 8435)
@@ -0,0 +1,19 @@
+Copyright (c) 2004-present Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/AutoMappingStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/AutoMappingStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/AutoMappingStrategy.php	(revision 8435)
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping;
+
+/**
+ * Specifies how the auto-mapping feature should behave.
+ *
+ * @author Maxime Steinhausser <maxime.steinhausser@gmail.com>
+ */
+final class AutoMappingStrategy
+{
+    /**
+     * Nothing explicitly set, rely on auto-mapping configured regex.
+     */
+    public const NONE = 0;
+
+    /**
+     * Explicitly enabled.
+     */
+    public const ENABLED = 1;
+
+    /**
+     * Explicitly disabled.
+     */
+    public const DISABLED = 2;
+
+    /**
+     * Not instantiable.
+     */
+    private function __construct()
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/CascadingStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/CascadingStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/CascadingStrategy.php	(revision 8435)
@@ -0,0 +1,52 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping;
+
+/**
+ * Specifies whether an object should be cascaded.
+ *
+ * Cascading is relevant for any node type but class nodes. If such a node
+ * contains an object of value, and if cascading is enabled, then the node
+ * traverser will try to find class metadata for that object and validate the
+ * object against that metadata.
+ *
+ * If no metadata is found for a cascaded object, and if that object implements
+ * {@link \Traversable}, the node traverser will iterate over the object and
+ * cascade each object or collection contained within, unless iteration is
+ * prohibited by the specified {@link TraversalStrategy}.
+ *
+ * Although the constants currently represent a boolean switch, they are
+ * implemented as bit mask in order to allow future extensions.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see TraversalStrategy
+ */
+class CascadingStrategy
+{
+    /**
+     * Specifies that a node should not be cascaded.
+     */
+    public const NONE = 1;
+
+    /**
+     * Specifies that a node should be cascaded.
+     */
+    public const CASCADE = 2;
+
+    /**
+     * Not instantiable.
+     */
+    private function __construct()
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/ClassMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/ClassMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/ClassMetadata.php	(revision 8435)
@@ -0,0 +1,519 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\Cascade;
+use Symfony\Component\Validator\Constraints\Composite;
+use Symfony\Component\Validator\Constraints\GroupSequence;
+use Symfony\Component\Validator\Constraints\Traverse;
+use Symfony\Component\Validator\Constraints\Valid;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\GroupDefinitionException;
+use Symfony\Component\Validator\GroupSequenceProviderInterface;
+
+/**
+ * Default implementation of {@link ClassMetadataInterface}.
+ *
+ * This class supports serialization and cloning.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class ClassMetadata extends GenericMetadata implements ClassMetadataInterface
+{
+    /**
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getClassName()} instead.
+     */
+    public string $name;
+
+    /**
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getDefaultGroup()} instead.
+     */
+    public string $defaultGroup;
+
+    /**
+     * @var MemberMetadata[][]
+     *
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getPropertyMetadata()} instead.
+     */
+    public array $members = [];
+
+    /**
+     * @var PropertyMetadata[]
+     *
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getPropertyMetadata()} instead.
+     */
+    public array $properties = [];
+
+    /**
+     * @var GetterMetadata[]
+     *
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getPropertyMetadata()} instead.
+     */
+    public array $getters = [];
+
+    /**
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getGroupSequence()} instead.
+     */
+    public ?GroupSequence $groupSequence = null;
+
+    /**
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link isGroupSequenceProvider()} instead.
+     */
+    public bool $groupSequenceProvider = false;
+
+    /**
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getGroupProvider()} instead.
+     */
+    public ?string $groupProvider = null;
+
+    /**
+     * The strategy for traversing traversable objects.
+     *
+     * By default, only instances of {@link \Traversable} are traversed.
+     *
+     * @var TraversalStrategy::*
+     *
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getTraversalStrategy()} instead.
+     */
+    public int $traversalStrategy = TraversalStrategy::IMPLICIT;
+
+    private \ReflectionClass $reflClass;
+
+    public function __construct(string $class)
+    {
+        $this->name = $class;
+        // class name without namespace
+        if (false !== $nsSep = strrpos($class, '\\')) {
+            $this->defaultGroup = substr($class, $nsSep + 1);
+        } else {
+            $this->defaultGroup = $class;
+        }
+    }
+
+    public function __sleep(): array
+    {
+        $parentProperties = parent::__sleep();
+
+        // Don't store the cascading strategy. Classes never cascade.
+        unset($parentProperties[array_search('cascadingStrategy', $parentProperties)]);
+
+        return array_merge($parentProperties, [
+            'getters',
+            'groupSequence',
+            'groupSequenceProvider',
+            'groupProvider',
+            'members',
+            'name',
+            'properties',
+            'defaultGroup',
+        ]);
+    }
+
+    public function getClassName(): string
+    {
+        return $this->name;
+    }
+
+    /**
+     * Returns the name of the default group for this class.
+     *
+     * For each class, the group "Default" is an alias for the group
+     * "<ClassName>", where <ClassName> is the non-namespaced name of the
+     * class. All constraints implicitly or explicitly assigned to group
+     * "Default" belong to both of these groups, unless the class defines
+     * a group sequence.
+     *
+     * If a class defines a group sequence, validating the class in "Default"
+     * will validate the group sequence. The constraints assigned to "Default"
+     * can still be validated by validating the class in "<ClassName>".
+     */
+    public function getDefaultGroup(): string
+    {
+        return $this->defaultGroup;
+    }
+
+    /**
+     * If the constraint {@link Cascade} is added, the cascading strategy will be
+     * changed to {@link CascadingStrategy::CASCADE}.
+     *
+     * If the constraint {@link Traverse} is added, the traversal strategy will be
+     * changed. Depending on the $traverse property of that constraint,
+     * the traversal strategy will be set to one of the following:
+     *
+     *  - {@link TraversalStrategy::IMPLICIT} by default
+     *  - {@link TraversalStrategy::NONE} if $traverse is disabled
+     *  - {@link TraversalStrategy::TRAVERSE} if $traverse is enabled
+     */
+    public function addConstraint(Constraint $constraint): static
+    {
+        $this->checkConstraint($constraint);
+
+        if ($constraint instanceof Traverse) {
+            if ($constraint->traverse) {
+                // If traverse is true, traversal should be explicitly enabled
+                $this->traversalStrategy = TraversalStrategy::TRAVERSE;
+            } else {
+                // If traverse is false, traversal should be explicitly disabled
+                $this->traversalStrategy = TraversalStrategy::NONE;
+            }
+
+            // The constraint is not added
+            return $this;
+        }
+
+        if ($constraint instanceof Cascade) {
+            $this->cascadingStrategy = CascadingStrategy::CASCADE;
+
+            foreach ($this->getReflectionClass()->getProperties() as $property) {
+                if (isset($constraint->exclude[$property->getName()])) {
+                    continue;
+                }
+
+                if ($this->canCascade($property->getType())) {
+                    $this->addPropertyConstraint($property->getName(), new Valid());
+                }
+            }
+
+            // The constraint is not added
+            return $this;
+        }
+
+        $constraint->addImplicitGroupName($this->getDefaultGroup());
+
+        parent::addConstraint($constraint);
+
+        return $this;
+    }
+
+    /**
+     * Adds a constraint to the given property.
+     *
+     * @return $this
+     */
+    public function addPropertyConstraint(string $property, Constraint $constraint): static
+    {
+        if (!isset($this->properties[$property])) {
+            $this->properties[$property] = new PropertyMetadata($this->getClassName(), $property);
+
+            $this->addPropertyMetadata($this->properties[$property]);
+        }
+
+        $constraint->addImplicitGroupName($this->getDefaultGroup());
+
+        $this->properties[$property]->addConstraint($constraint);
+
+        return $this;
+    }
+
+    /**
+     * @param Constraint[] $constraints
+     *
+     * @return $this
+     */
+    public function addPropertyConstraints(string $property, array $constraints): static
+    {
+        foreach ($constraints as $constraint) {
+            $this->addPropertyConstraint($property, $constraint);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Adds a constraint to the getter of the given property.
+     *
+     * The name of the getter is assumed to be the name of the property with an
+     * uppercased first letter and the prefix "get", "is" or "has".
+     *
+     * @return $this
+     */
+    public function addGetterConstraint(string $property, Constraint $constraint): static
+    {
+        if (!isset($this->getters[$property])) {
+            $this->getters[$property] = new GetterMetadata($this->getClassName(), $property);
+
+            $this->addPropertyMetadata($this->getters[$property]);
+        }
+
+        $constraint->addImplicitGroupName($this->getDefaultGroup());
+
+        $this->getters[$property]->addConstraint($constraint);
+
+        return $this;
+    }
+
+    /**
+     * Adds a constraint to the getter of the given property.
+     *
+     * @return $this
+     */
+    public function addGetterMethodConstraint(string $property, string $method, Constraint $constraint): static
+    {
+        if (!isset($this->getters[$property])) {
+            $this->getters[$property] = new GetterMetadata($this->getClassName(), $property, $method);
+
+            $this->addPropertyMetadata($this->getters[$property]);
+        }
+
+        $constraint->addImplicitGroupName($this->getDefaultGroup());
+
+        $this->getters[$property]->addConstraint($constraint);
+
+        return $this;
+    }
+
+    /**
+     * @param Constraint[] $constraints
+     *
+     * @return $this
+     */
+    public function addGetterConstraints(string $property, array $constraints): static
+    {
+        foreach ($constraints as $constraint) {
+            $this->addGetterConstraint($property, $constraint);
+        }
+
+        return $this;
+    }
+
+    /**
+     * @param Constraint[] $constraints
+     *
+     * @return $this
+     */
+    public function addGetterMethodConstraints(string $property, string $method, array $constraints): static
+    {
+        foreach ($constraints as $constraint) {
+            $this->addGetterMethodConstraint($property, $method, $constraint);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Merges the constraints of the given metadata into this object.
+     *
+     * @return void
+     */
+    public function mergeConstraints(self $source)
+    {
+        if ($source->isGroupSequenceProvider()) {
+            $this->setGroupProvider($source->getGroupProvider());
+            $this->setGroupSequenceProvider(true);
+        }
+
+        foreach ($source->getConstraints() as $constraint) {
+            $this->addConstraint(clone $constraint);
+        }
+
+        foreach ($source->getConstrainedProperties() as $property) {
+            foreach ($source->getPropertyMetadata($property) as $member) {
+                $member = clone $member;
+
+                foreach ($member->getConstraints() as $constraint) {
+                    if (\in_array($constraint::DEFAULT_GROUP, $constraint->groups, true)) {
+                        $member->constraintsByGroup[$this->getDefaultGroup()][] = $constraint;
+                    }
+
+                    $constraint->addImplicitGroupName($this->getDefaultGroup());
+                }
+
+                if ($member instanceof MemberMetadata && !$member->isPrivate($this->name)) {
+                    $property = $member->getPropertyName();
+                    $this->members[$property][] = $member;
+
+                    if ($member instanceof PropertyMetadata && !isset($this->properties[$property])) {
+                        $this->properties[$property] = $member;
+                    } elseif ($member instanceof GetterMetadata && !isset($this->getters[$property])) {
+                        $this->getters[$property] = $member;
+                    }
+                } else {
+                    $this->addPropertyMetadata($member);
+                }
+            }
+        }
+    }
+
+    public function hasPropertyMetadata(string $property): bool
+    {
+        return \array_key_exists($property, $this->members);
+    }
+
+    public function getPropertyMetadata(string $property): array
+    {
+        return $this->members[$property] ?? [];
+    }
+
+    public function getConstrainedProperties(): array
+    {
+        return array_keys($this->members);
+    }
+
+    /**
+     * Sets the default group sequence for this class.
+     *
+     * @param string[]|GroupSequence $groupSequence An array of group names
+     *
+     * @return $this
+     *
+     * @throws GroupDefinitionException
+     */
+    public function setGroupSequence(array|GroupSequence $groupSequence): static
+    {
+        if ($this->isGroupSequenceProvider()) {
+            throw new GroupDefinitionException('Defining a static group sequence is not allowed with a group sequence provider.');
+        }
+
+        if (\is_array($groupSequence)) {
+            $groupSequence = new GroupSequence($groupSequence);
+        }
+
+        if (\in_array(Constraint::DEFAULT_GROUP, $groupSequence->groups, true)) {
+            throw new GroupDefinitionException(sprintf('The group "%s" is not allowed in group sequences.', Constraint::DEFAULT_GROUP));
+        }
+
+        if (!\in_array($this->getDefaultGroup(), $groupSequence->groups, true)) {
+            throw new GroupDefinitionException(sprintf('The group "%s" is missing in the group sequence.', $this->getDefaultGroup()));
+        }
+
+        $this->groupSequence = $groupSequence;
+
+        return $this;
+    }
+
+    public function hasGroupSequence(): bool
+    {
+        return isset($this->groupSequence) && \count($this->groupSequence->groups) > 0;
+    }
+
+    public function getGroupSequence(): ?GroupSequence
+    {
+        return $this->groupSequence;
+    }
+
+    /**
+     * Returns a ReflectionClass instance for this class.
+     */
+    public function getReflectionClass(): \ReflectionClass
+    {
+        return $this->reflClass ??= new \ReflectionClass($this->getClassName());
+    }
+
+    /**
+     * Sets whether a group sequence provider should be used.
+     *
+     * @return void
+     *
+     * @throws GroupDefinitionException
+     */
+    public function setGroupSequenceProvider(bool $active)
+    {
+        if ($this->hasGroupSequence()) {
+            throw new GroupDefinitionException('Defining a group sequence provider is not allowed with a static group sequence.');
+        }
+
+        if (null === $this->groupProvider && !$this->getReflectionClass()->implementsInterface(GroupSequenceProviderInterface::class)) {
+            throw new GroupDefinitionException(sprintf('Class "%s" must implement GroupSequenceProviderInterface.', $this->name));
+        }
+
+        $this->groupSequenceProvider = $active;
+    }
+
+    public function isGroupSequenceProvider(): bool
+    {
+        return $this->groupSequenceProvider;
+    }
+
+    public function setGroupProvider(?string $provider): void
+    {
+        $this->groupProvider = $provider;
+    }
+
+    public function getGroupProvider(): ?string
+    {
+        return $this->groupProvider;
+    }
+
+    public function getCascadingStrategy(): int
+    {
+        return $this->cascadingStrategy;
+    }
+
+    private function addPropertyMetadata(PropertyMetadataInterface $metadata): void
+    {
+        $property = $metadata->getPropertyName();
+
+        $this->members[$property][] = $metadata;
+    }
+
+    private function checkConstraint(Constraint $constraint): void
+    {
+        if (!\in_array(Constraint::CLASS_CONSTRAINT, (array) $constraint->getTargets(), true)) {
+            throw new ConstraintDefinitionException(sprintf('The constraint "%s" cannot be put on classes.', get_debug_type($constraint)));
+        }
+
+        if ($constraint instanceof Composite) {
+            foreach ($constraint->getNestedConstraints() as $nestedConstraint) {
+                $this->checkConstraint($nestedConstraint);
+            }
+        }
+    }
+
+    private function canCascade(?\ReflectionType $type = null): bool
+    {
+        if (null === $type) {
+            return false;
+        }
+
+        if ($type instanceof \ReflectionIntersectionType) {
+            foreach ($type->getTypes() as $nestedType) {
+                if ($this->canCascade($nestedType)) {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+        if ($type instanceof \ReflectionUnionType) {
+            foreach ($type->getTypes() as $nestedType) {
+                if (!$this->canCascade($nestedType)) {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        return $type instanceof \ReflectionNamedType && (\in_array($type->getName(), ['array', 'null'], true) || class_exists($type->getName()));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/ClassMetadataInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/ClassMetadataInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/ClassMetadataInterface.php	(revision 8435)
@@ -0,0 +1,92 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping;
+
+use Symfony\Component\Validator\Constraints\GroupSequence;
+use Symfony\Component\Validator\GroupSequenceProviderInterface;
+
+/**
+ * Stores all metadata needed for validating objects of specific class.
+ *
+ * Most importantly, the metadata stores the constraints against which an object
+ * and its properties should be validated.
+ *
+ * Additionally, the metadata stores whether the "Default" group is overridden
+ * by a group sequence for that class and whether instances of that class
+ * should be traversed or not.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see MetadataInterface
+ * @see GroupSequence
+ * @see GroupSequenceProviderInterface
+ * @see TraversalStrategy
+ *
+ * @method string|null getGroupProvider()
+ */
+interface ClassMetadataInterface extends MetadataInterface
+{
+    /**
+     * Returns the names of all constrained properties.
+     *
+     * @return string[]
+     */
+    public function getConstrainedProperties(): array;
+
+    /**
+     * Returns whether the "Default" group is overridden by a group sequence.
+     *
+     * If it is, you can access the group sequence with {@link getGroupSequence()}.
+     */
+    public function hasGroupSequence(): bool;
+
+    /**
+     * Returns the group sequence that overrides the "Default" group for this
+     * class.
+     */
+    public function getGroupSequence(): ?GroupSequence;
+
+    /**
+     * Returns whether the "Default" group is overridden by a dynamic group
+     * sequence obtained by the validated objects.
+     *
+     * If this method returns true, the class must implement
+     * {@link GroupSequenceProviderInterface}.
+     * This interface will be used to obtain the group sequence when an object
+     * of this class is validated.
+     */
+    public function isGroupSequenceProvider(): bool;
+
+    /**
+     * Check if there's any metadata attached to the given named property.
+     *
+     * @param string $property The property name
+     */
+    public function hasPropertyMetadata(string $property): bool;
+
+    /**
+     * Returns all metadata instances for the given named property.
+     *
+     * If your implementation does not support properties, throw an exception
+     * in this method (for example a <tt>BadMethodCallException</tt>).
+     *
+     * @param string $property The property name
+     *
+     * @return PropertyMetadataInterface[]
+     */
+    public function getPropertyMetadata(string $property): array;
+
+    /**
+     * Returns the name of the backing PHP class.
+     */
+    public function getClassName(): string;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Factory/BlackHoleMetadataFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Factory/BlackHoleMetadataFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Factory/BlackHoleMetadataFactory.php	(revision 8435)
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Factory;
+
+use Symfony\Component\Validator\Exception\LogicException;
+use Symfony\Component\Validator\Mapping\MetadataInterface;
+
+/**
+ * Metadata factory that does not store metadata.
+ *
+ * This implementation is useful if you want to validate values against
+ * constraints only and you don't need to add constraints to classes and
+ * properties.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class BlackHoleMetadataFactory implements MetadataFactoryInterface
+{
+    public function getMetadataFor(mixed $value): MetadataInterface
+    {
+        throw new LogicException('This class does not support metadata.');
+    }
+
+    public function hasMetadataFor(mixed $value): bool
+    {
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Factory/LazyLoadingMetadataFactory.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Factory/LazyLoadingMetadataFactory.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Factory/LazyLoadingMetadataFactory.php	(revision 8435)
@@ -0,0 +1,159 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Factory;
+
+use Psr\Cache\CacheItemPoolInterface;
+use Symfony\Component\Validator\Exception\NoSuchMetadataException;
+use Symfony\Component\Validator\Mapping\ClassMetadata;
+use Symfony\Component\Validator\Mapping\Loader\LoaderInterface;
+use Symfony\Component\Validator\Mapping\MetadataInterface;
+
+/**
+ * Creates new {@link ClassMetadataInterface} instances.
+ *
+ * Whenever {@link getMetadataFor()} is called for the first time with a given
+ * class name or object of that class, a new metadata instance is created and
+ * returned. On subsequent requests for the same class, the same metadata
+ * instance will be returned.
+ *
+ * You can optionally pass a {@link LoaderInterface} instance to the constructor.
+ * Whenever a new metadata instance is created, it is passed to the loader,
+ * which can configure the metadata based on configuration loaded from the
+ * filesystem or a database. If you want to use multiple loaders, wrap them in a
+ * {@link LoaderChain}.
+ *
+ * You can also optionally pass a {@link CacheInterface} instance to the
+ * constructor. This cache will be used for persisting the generated metadata
+ * between multiple PHP requests.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class LazyLoadingMetadataFactory implements MetadataFactoryInterface
+{
+    protected $loader;
+    protected $cache;
+
+    /**
+     * The loaded metadata, indexed by class name.
+     *
+     * @var ClassMetadata[]
+     */
+    protected $loadedClasses = [];
+
+    public function __construct(?LoaderInterface $loader = null, ?CacheItemPoolInterface $cache = null)
+    {
+        $this->loader = $loader;
+        $this->cache = $cache;
+    }
+
+    /**
+     * If the method was called with the same class name (or an object of that
+     * class) before, the same metadata instance is returned.
+     *
+     * If the factory was configured with a cache, this method will first look
+     * for an existing metadata instance in the cache. If an existing instance
+     * is found, it will be returned without further ado.
+     *
+     * Otherwise, a new metadata instance is created. If the factory was
+     * configured with a loader, the metadata is passed to the
+     * {@link LoaderInterface::loadClassMetadata()} method for further
+     * configuration. At last, the new object is returned.
+     */
+    public function getMetadataFor(mixed $value): MetadataInterface
+    {
+        if (!\is_object($value) && !\is_string($value)) {
+            throw new NoSuchMetadataException(sprintf('Cannot create metadata for non-objects. Got: "%s".', get_debug_type($value)));
+        }
+
+        $class = ltrim(\is_object($value) ? $value::class : $value, '\\');
+
+        if (isset($this->loadedClasses[$class])) {
+            return $this->loadedClasses[$class];
+        }
+
+        if (!class_exists($class) && !interface_exists($class, false)) {
+            throw new NoSuchMetadataException(sprintf('The class or interface "%s" does not exist.', $class));
+        }
+
+        $cacheItem = $this->cache?->getItem($this->escapeClassName($class));
+        if ($cacheItem?->isHit()) {
+            $metadata = $cacheItem->get();
+
+            // Include constraints from the parent class
+            $this->mergeConstraints($metadata);
+
+            return $this->loadedClasses[$class] = $metadata;
+        }
+
+        $metadata = new ClassMetadata($class);
+
+        $this->loader?->loadClassMetadata($metadata);
+
+        if (null !== $cacheItem) {
+            $this->cache->save($cacheItem->set($metadata));
+        }
+
+        // Include constraints from the parent class
+        $this->mergeConstraints($metadata);
+
+        return $this->loadedClasses[$class] = $metadata;
+    }
+
+    private function mergeConstraints(ClassMetadata $metadata): void
+    {
+        if ($metadata->getReflectionClass()->isInterface()) {
+            return;
+        }
+
+        // Include constraints from the parent class
+        if ($parent = $metadata->getReflectionClass()->getParentClass()) {
+            $metadata->mergeConstraints($this->getMetadataFor($parent->name));
+        }
+
+        // Include constraints from all directly implemented interfaces
+        foreach ($metadata->getReflectionClass()->getInterfaces() as $interface) {
+            if ('Symfony\Component\Validator\GroupSequenceProviderInterface' === $interface->name) {
+                continue;
+            }
+
+            if ($parent && \in_array($interface->getName(), $parent->getInterfaceNames(), true)) {
+                continue;
+            }
+
+            $metadata->mergeConstraints($this->getMetadataFor($interface->name));
+        }
+    }
+
+    public function hasMetadataFor(mixed $value): bool
+    {
+        if (!\is_object($value) && !\is_string($value)) {
+            return false;
+        }
+
+        $class = ltrim(\is_object($value) ? $value::class : $value, '\\');
+
+        return class_exists($class) || interface_exists($class, false);
+    }
+
+    /**
+     * Replaces backslashes by dots in a class name.
+     */
+    private function escapeClassName(string $class): string
+    {
+        if (str_contains($class, '@')) {
+            // anonymous class: replace all PSR6-reserved characters
+            return str_replace(["\0", '\\', '/', '@', ':', '{', '}', '(', ')'], '.', $class);
+        }
+
+        return str_replace('\\', '.', $class);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Factory/MetadataFactoryInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Factory/MetadataFactoryInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Factory/MetadataFactoryInterface.php	(revision 8435)
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Factory;
+
+use Symfony\Component\Validator\Exception\NoSuchMetadataException;
+use Symfony\Component\Validator\Mapping\MetadataInterface;
+
+/**
+ * Returns {@link \Symfony\Component\Validator\Mapping\MetadataInterface} instances for values.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+interface MetadataFactoryInterface
+{
+    /**
+     * Returns the metadata for the given value.
+     *
+     * @throws NoSuchMetadataException If no metadata exists for the given value
+     */
+    public function getMetadataFor(mixed $value): MetadataInterface;
+
+    /**
+     * Returns whether the class is able to return metadata for the given value.
+     */
+    public function hasMetadataFor(mixed $value): bool;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/GenericMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/GenericMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/GenericMetadata.php	(revision 8435)
@@ -0,0 +1,226 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\Cascade;
+use Symfony\Component\Validator\Constraints\DisableAutoMapping;
+use Symfony\Component\Validator\Constraints\EnableAutoMapping;
+use Symfony\Component\Validator\Constraints\Traverse;
+use Symfony\Component\Validator\Constraints\Valid;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * A generic container of {@link Constraint} objects.
+ *
+ * This class supports serialization and cloning.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class GenericMetadata implements MetadataInterface
+{
+    /**
+     * @var Constraint[]
+     *
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getConstraints()} and {@link findConstraints()} instead.
+     */
+    public array $constraints = [];
+
+    /**
+     * @var array<string, Constraint[]>
+     *
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link findConstraints()} instead.
+     */
+    public array $constraintsByGroup = [];
+
+    /**
+     * The strategy for cascading objects.
+     *
+     * By default, objects are not cascaded.
+     *
+     * @var CascadingStrategy::*
+     *
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getCascadingStrategy()} instead.
+     */
+    public int $cascadingStrategy = CascadingStrategy::NONE;
+
+    /**
+     * The strategy for traversing traversable objects.
+     *
+     * By default, traversable objects are not traversed.
+     *
+     * @var TraversalStrategy::*
+     *
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getTraversalStrategy()} instead.
+     */
+    public int $traversalStrategy = TraversalStrategy::NONE;
+
+    /**
+     * Is auto-mapping enabled?
+     *
+     * @var AutoMappingStrategy::*
+     *
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getAutoMappingStrategy()} instead.
+     */
+    public int $autoMappingStrategy = AutoMappingStrategy::NONE;
+
+    /**
+     * Returns the names of the properties that should be serialized.
+     *
+     * @return string[]
+     */
+    public function __sleep(): array
+    {
+        return [
+            'constraints',
+            'constraintsByGroup',
+            'cascadingStrategy',
+            'traversalStrategy',
+            'autoMappingStrategy',
+        ];
+    }
+
+    /**
+     * Clones this object.
+     */
+    public function __clone()
+    {
+        $constraints = $this->constraints;
+
+        $this->constraints = [];
+        $this->constraintsByGroup = [];
+
+        foreach ($constraints as $constraint) {
+            $this->addConstraint(clone $constraint);
+        }
+    }
+
+    /**
+     * Adds a constraint.
+     *
+     * If the constraint {@link Valid} is added, the cascading strategy will be
+     * changed to {@link CascadingStrategy::CASCADE}. Depending on the
+     * $traverse property of that constraint, the traversal strategy
+     * will be set to one of the following:
+     *
+     *  - {@link TraversalStrategy::IMPLICIT} if $traverse is enabled
+     *  - {@link TraversalStrategy::NONE} if $traverse is disabled
+     *
+     * @return $this
+     *
+     * @throws ConstraintDefinitionException When trying to add the {@link Cascade}
+     *                                       or {@link Traverse} constraint
+     */
+    public function addConstraint(Constraint $constraint): static
+    {
+        if ($constraint instanceof Traverse || $constraint instanceof Cascade) {
+            throw new ConstraintDefinitionException(sprintf('The constraint "%s" can only be put on classes. Please use "Symfony\Component\Validator\Constraints\Valid" instead.', get_debug_type($constraint)));
+        }
+
+        if ($constraint instanceof Valid && null === $constraint->groups) {
+            $this->cascadingStrategy = CascadingStrategy::CASCADE;
+
+            if ($constraint->traverse) {
+                $this->traversalStrategy = TraversalStrategy::IMPLICIT;
+            } else {
+                $this->traversalStrategy = TraversalStrategy::NONE;
+            }
+
+            return $this;
+        }
+
+        if ($constraint instanceof DisableAutoMapping || $constraint instanceof EnableAutoMapping) {
+            $this->autoMappingStrategy = $constraint instanceof EnableAutoMapping ? AutoMappingStrategy::ENABLED : AutoMappingStrategy::DISABLED;
+
+            // The constraint is not added
+            return $this;
+        }
+
+        $this->constraints[] = $constraint;
+
+        foreach ($constraint->groups as $group) {
+            $this->constraintsByGroup[$group][] = $constraint;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Adds an list of constraints.
+     *
+     * @param Constraint[] $constraints The constraints to add
+     *
+     * @return $this
+     */
+    public function addConstraints(array $constraints): static
+    {
+        foreach ($constraints as $constraint) {
+            $this->addConstraint($constraint);
+        }
+
+        return $this;
+    }
+
+    /**
+     * @return Constraint[]
+     */
+    public function getConstraints(): array
+    {
+        return $this->constraints;
+    }
+
+    /**
+     * Returns whether this element has any constraints.
+     */
+    public function hasConstraints(): bool
+    {
+        return \count($this->constraints) > 0;
+    }
+
+    /**
+     * Aware of the global group (* group).
+     *
+     * @return Constraint[]
+     */
+    public function findConstraints(string $group): array
+    {
+        return $this->constraintsByGroup[$group] ?? [];
+    }
+
+    public function getCascadingStrategy(): int
+    {
+        return $this->cascadingStrategy;
+    }
+
+    public function getTraversalStrategy(): int
+    {
+        return $this->traversalStrategy;
+    }
+
+    /**
+     * @see AutoMappingStrategy
+     */
+    public function getAutoMappingStrategy(): int
+    {
+        return $this->autoMappingStrategy;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/GetterMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/GetterMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/GetterMetadata.php	(revision 8435)
@@ -0,0 +1,74 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping;
+
+use Symfony\Component\Validator\Exception\ValidatorException;
+
+/**
+ * Stores all metadata needed for validating a class property via its getter
+ * method.
+ *
+ * A property getter is any method that is equal to the property's name,
+ * prefixed with "get", "is" or "has". That method will be used to access the
+ * property's value.
+ *
+ * The getter will be invoked by reflection, so the access of private and
+ * protected getters is supported.
+ *
+ * This class supports serialization and cloning.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see PropertyMetadataInterface
+ */
+class GetterMetadata extends MemberMetadata
+{
+    /**
+     * @param string      $class    The class the getter is defined on
+     * @param string      $property The property which the getter returns
+     * @param string|null $method   The method that is called to retrieve the value being validated (null for auto-detection)
+     *
+     * @throws ValidatorException
+     */
+    public function __construct(string $class, string $property, ?string $method = null)
+    {
+        if (null === $method) {
+            $getMethod = 'get'.ucfirst($property);
+            $isMethod = 'is'.ucfirst($property);
+            $hasMethod = 'has'.ucfirst($property);
+
+            if (method_exists($class, $getMethod)) {
+                $method = $getMethod;
+            } elseif (method_exists($class, $isMethod)) {
+                $method = $isMethod;
+            } elseif (method_exists($class, $hasMethod)) {
+                $method = $hasMethod;
+            } else {
+                throw new ValidatorException(sprintf('Neither of these methods exist in class "%s": "%s", "%s", "%s".', $class, $getMethod, $isMethod, $hasMethod));
+            }
+        } elseif (!method_exists($class, $method)) {
+            throw new ValidatorException(sprintf('The "%s()" method does not exist in class "%s".', $method, $class));
+        }
+
+        parent::__construct($class, $method, $property);
+    }
+
+    public function getPropertyValue(mixed $object): mixed
+    {
+        return $this->newReflectionMember($object)->invoke($object);
+    }
+
+    protected function newReflectionMember(object|string $objectOrClassName): \ReflectionMethod|\ReflectionProperty
+    {
+        return new \ReflectionMethod($objectOrClassName, $this->getName());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/AbstractLoader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/AbstractLoader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/AbstractLoader.php	(revision 8435)
@@ -0,0 +1,107 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+use Symfony\Component\Validator\Attribute\HasNamedArguments;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\MappingException;
+
+/**
+ * Base loader for validation metadata.
+ *
+ * This loader supports the loading of constraints from Symfony's default
+ * namespace (see {@link DEFAULT_NAMESPACE}) using the short class names of
+ * those constraints. Constraints can also be loaded using their fully
+ * qualified class names. At last, namespace aliases can be defined to load
+ * constraints with the syntax "alias:ShortName".
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+abstract class AbstractLoader implements LoaderInterface
+{
+    /**
+     * The namespace to load constraints from by default.
+     */
+    public const DEFAULT_NAMESPACE = '\\Symfony\\Component\\Validator\\Constraints\\';
+
+    protected $namespaces = [];
+
+    /**
+     * @var array<class-string, bool>
+     */
+    private array $namedArgumentsCache = [];
+
+    /**
+     * Adds a namespace alias.
+     *
+     * The namespace alias can be used to reference constraints from specific
+     * namespaces in {@link newConstraint()}:
+     *
+     *     $this->addNamespaceAlias('mynamespace', '\\Acme\\Package\\Constraints\\');
+     *
+     *     $constraint = $this->newConstraint('mynamespace:NotNull');
+     *
+     * @return void
+     */
+    protected function addNamespaceAlias(string $alias, string $namespace)
+    {
+        $this->namespaces[$alias] = $namespace;
+    }
+
+    /**
+     * Creates a new constraint instance for the given constraint name.
+     *
+     * @param string $name    The constraint name. Either a constraint relative
+     *                        to the default constraint namespace, or a fully
+     *                        qualified class name. Alternatively, the constraint
+     *                        may be preceded by a namespace alias and a colon.
+     *                        The namespace alias must have been defined using
+     *                        {@link addNamespaceAlias()}.
+     * @param mixed  $options The constraint options
+     *
+     * @throws MappingException If the namespace prefix is undefined
+     */
+    protected function newConstraint(string $name, mixed $options = null): Constraint
+    {
+        if (str_contains($name, '\\') && class_exists($name)) {
+            $className = $name;
+        } elseif (str_contains($name, ':')) {
+            [$prefix, $className] = explode(':', $name, 2);
+
+            if (!isset($this->namespaces[$prefix])) {
+                throw new MappingException(sprintf('Undefined namespace prefix "%s".', $prefix));
+            }
+
+            $className = $this->namespaces[$prefix].$className;
+        } else {
+            $className = self::DEFAULT_NAMESPACE.$name;
+        }
+
+        if ($this->namedArgumentsCache[$className] ??= (bool) (new \ReflectionMethod($className, '__construct'))->getAttributes(HasNamedArguments::class)) {
+            if (null === $options) {
+                return new $className();
+            }
+
+            if (!\is_array($options)) {
+                return new $className($options);
+            }
+
+            if (1 === \count($options) && isset($options['value'])) {
+                return new $className($options['value']);
+            }
+
+            return new $className(...$options);
+        }
+
+        return new $className($options);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/AnnotationLoader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/AnnotationLoader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/AnnotationLoader.php	(revision 8435)
@@ -0,0 +1,159 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+use Doctrine\Common\Annotations\Reader;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\Callback;
+use Symfony\Component\Validator\Constraints\GroupSequence;
+use Symfony\Component\Validator\Constraints\GroupSequenceProvider;
+use Symfony\Component\Validator\Exception\MappingException;
+use Symfony\Component\Validator\Mapping\ClassMetadata;
+
+/**
+ * Loads validation metadata using a Doctrine annotation {@link Reader} or using PHP 8 attributes.
+ *
+ * @deprecated since Symfony 6.4, use {@see AttributeLoader} instead
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ * @author Alexander M. Turek <me@derrabus.de>
+ */
+class AnnotationLoader implements LoaderInterface
+{
+    /**
+     * @deprecated since Symfony 6.4, this property will be removed in 7.0
+     *
+     * @var Reader|null
+     */
+    protected $reader;
+
+    public function __construct(?Reader $reader = null)
+    {
+        $this->reader = $reader;
+    }
+
+    public function loadClassMetadata(ClassMetadata $metadata): bool
+    {
+        $reflClass = $metadata->getReflectionClass();
+        $className = $reflClass->name;
+        $success = false;
+
+        foreach ($this->getAnnotations($reflClass) as $constraint) {
+            if ($constraint instanceof GroupSequence) {
+                $metadata->setGroupSequence($constraint->groups);
+            } elseif ($constraint instanceof GroupSequenceProvider) {
+                $metadata->setGroupProvider($constraint->provider);
+                $metadata->setGroupSequenceProvider(true);
+            } elseif ($constraint instanceof Constraint) {
+                $metadata->addConstraint($constraint);
+            }
+
+            $success = true;
+        }
+
+        foreach ($reflClass->getProperties() as $property) {
+            if ($property->getDeclaringClass()->name === $className) {
+                foreach ($this->getAnnotations($property) as $constraint) {
+                    if ($constraint instanceof Constraint) {
+                        $metadata->addPropertyConstraint($property->name, $constraint);
+                    }
+
+                    $success = true;
+                }
+            }
+        }
+
+        foreach ($reflClass->getMethods() as $method) {
+            if ($method->getDeclaringClass()->name === $className) {
+                foreach ($this->getAnnotations($method) as $constraint) {
+                    if ($constraint instanceof Callback) {
+                        $constraint->callback = $method->getName();
+
+                        $metadata->addConstraint($constraint);
+                    } elseif ($constraint instanceof Constraint) {
+                        if (preg_match('/^(get|is|has)(.+)$/i', $method->name, $matches)) {
+                            $metadata->addGetterMethodConstraint(lcfirst($matches[2]), $matches[0], $constraint);
+                        } else {
+                            throw new MappingException(sprintf('The constraint on "%s::%s()" cannot be added. Constraints can only be added on methods beginning with "get", "is" or "has".', $className, $method->name));
+                        }
+                    }
+
+                    $success = true;
+                }
+            }
+        }
+
+        return $success;
+    }
+
+    private function getAnnotations(\ReflectionMethod|\ReflectionClass|\ReflectionProperty $reflection): iterable
+    {
+        $dedup = [];
+
+        foreach ($reflection->getAttributes(GroupSequence::class) as $attribute) {
+            $dedup[] = $attribute->newInstance();
+            yield $attribute->newInstance();
+        }
+        foreach ($reflection->getAttributes(GroupSequenceProvider::class) as $attribute) {
+            $dedup[] = $attribute->newInstance();
+            yield $attribute->newInstance();
+        }
+        foreach ($reflection->getAttributes(Constraint::class, \ReflectionAttribute::IS_INSTANCEOF) as $attribute) {
+            $dedup[] = $attribute->newInstance();
+            yield $attribute->newInstance();
+        }
+        if (!$this->reader) {
+            return;
+        }
+
+        $annotations = [];
+
+        if ($reflection instanceof \ReflectionClass && $annotations = $this->reader->getClassAnnotations($reflection)) {
+            $this->triggerDeprecationIfAnnotationIsUsed($annotations, sprintf('Class "%s"', $reflection->getName()));
+        }
+        if ($reflection instanceof \ReflectionMethod && $annotations = $this->reader->getMethodAnnotations($reflection)) {
+            $this->triggerDeprecationIfAnnotationIsUsed($annotations, sprintf('Method "%s::%s()"', $reflection->getDeclaringClass()->getName(), $reflection->getName()));
+        }
+        if ($reflection instanceof \ReflectionProperty && $annotations = $this->reader->getPropertyAnnotations($reflection)) {
+            $this->triggerDeprecationIfAnnotationIsUsed($annotations, sprintf('Property "%s::$%s"', $reflection->getDeclaringClass()->getName(), $reflection->getName()));
+        }
+
+        foreach ($dedup as $annotation) {
+            if ($annotation instanceof Constraint) {
+                $annotation->groups; // trigger initialization of the "groups" property
+            }
+        }
+
+        foreach ($annotations as $annotation) {
+            if ($annotation instanceof Constraint) {
+                $annotation->groups; // trigger initialization of the "groups" property
+            }
+            if (!\in_array($annotation, $dedup, false)) {
+                yield $annotation;
+            }
+        }
+    }
+
+    private function triggerDeprecationIfAnnotationIsUsed(array $annotations, string $messagePrefix): void
+    {
+        foreach ($annotations as $annotation) {
+            if (
+                $annotation instanceof Constraint
+                || $annotation instanceof GroupSequence
+                || $annotation instanceof GroupSequenceProvider
+            ) {
+                trigger_deprecation('symfony/validator', '6.4', sprintf('%s uses Doctrine Annotations to configure validation constraints, which is deprecated. Use PHP attributes instead.', $messagePrefix));
+                break;
+            }
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/AttributeLoader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/AttributeLoader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/AttributeLoader.php	(revision 8435)
@@ -0,0 +1,27 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+/**
+ * Loads validation metadata using PHP attributes.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ * @author Alexander M. Turek <me@derrabus.de>
+ * @author Alexandre Daubois <alex.daubois@gmail.com>
+ */
+class AttributeLoader extends AnnotationLoader
+{
+    public function __construct()
+    {
+        parent::__construct(null);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/AutoMappingTrait.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/AutoMappingTrait.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/AutoMappingTrait.php	(revision 8435)
@@ -0,0 +1,34 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+use Symfony\Component\Validator\Mapping\AutoMappingStrategy;
+use Symfony\Component\Validator\Mapping\ClassMetadata;
+
+/**
+ * Utility methods to create auto mapping loaders.
+ *
+ * @author KÃ©vin Dunglas <dunglas@gmail.com>
+ */
+trait AutoMappingTrait
+{
+    private function isAutoMappingEnabledForClass(ClassMetadata $metadata, ?string $classValidatorRegexp = null): bool
+    {
+        // Check if AutoMapping constraint is set first
+        if (AutoMappingStrategy::NONE !== $strategy = $metadata->getAutoMappingStrategy()) {
+            return AutoMappingStrategy::ENABLED === $strategy;
+        }
+
+        // Fallback on the config
+        return null !== $classValidatorRegexp && preg_match($classValidatorRegexp, $metadata->getClassName());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/FileLoader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/FileLoader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/FileLoader.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+use Symfony\Component\Validator\Exception\MappingException;
+
+/**
+ * Base loader for loading validation metadata from a file.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see YamlFileLoader
+ * @see XmlFileLoader
+ */
+abstract class FileLoader extends AbstractLoader
+{
+    protected $file;
+
+    /**
+     * Creates a new loader.
+     *
+     * @param string $file The mapping file to load
+     *
+     * @throws MappingException If the file does not exist or is not readable
+     */
+    public function __construct(string $file)
+    {
+        if (!is_file($file)) {
+            throw new MappingException(sprintf('The mapping file "%s" does not exist.', $file));
+        }
+
+        if (!is_readable($file)) {
+            throw new MappingException(sprintf('The mapping file "%s" is not readable.', $file));
+        }
+
+        if (!stream_is_local($this->file)) {
+            throw new MappingException(sprintf('The mapping file "%s" is not a local file.', $file));
+        }
+
+        $this->file = $file;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/FilesLoader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/FilesLoader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/FilesLoader.php	(revision 8435)
@@ -0,0 +1,55 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+/**
+ * Base loader for loading validation metadata from a list of files.
+ *
+ * @author Bulat Shakirzyanov <mallluhuct@gmail.com>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see YamlFilesLoader
+ * @see XmlFilesLoader
+ */
+abstract class FilesLoader extends LoaderChain
+{
+    /**
+     * Creates a new loader.
+     *
+     * @param array $paths An array of file paths
+     */
+    public function __construct(array $paths)
+    {
+        parent::__construct($this->getFileLoaders($paths));
+    }
+
+    /**
+     * Returns an array of file loaders for the given file paths.
+     *
+     * @return LoaderInterface[]
+     */
+    protected function getFileLoaders(array $paths): array
+    {
+        $loaders = [];
+
+        foreach ($paths as $path) {
+            $loaders[] = $this->getFileLoaderInstance($path);
+        }
+
+        return $loaders;
+    }
+
+    /**
+     * Creates a loader for the given file path.
+     */
+    abstract protected function getFileLoaderInstance(string $path): LoaderInterface;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/LoaderChain.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/LoaderChain.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/LoaderChain.php	(revision 8435)
@@ -0,0 +1,64 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+use Symfony\Component\Validator\Exception\MappingException;
+use Symfony\Component\Validator\Mapping\ClassMetadata;
+
+/**
+ * Loads validation metadata from multiple {@link LoaderInterface} instances.
+ *
+ * Pass the loaders when constructing the chain. Once
+ * {@link loadClassMetadata()} is called, that method will be called on all
+ * loaders in the chain.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class LoaderChain implements LoaderInterface
+{
+    protected $loaders;
+
+    /**
+     * @param LoaderInterface[] $loaders The metadata loaders to use
+     *
+     * @throws MappingException If any of the loaders has an invalid type
+     */
+    public function __construct(array $loaders)
+    {
+        foreach ($loaders as $loader) {
+            if (!$loader instanceof LoaderInterface) {
+                throw new MappingException(sprintf('Class "%s" is expected to implement LoaderInterface.', get_debug_type($loader)));
+            }
+        }
+
+        $this->loaders = $loaders;
+    }
+
+    public function loadClassMetadata(ClassMetadata $metadata): bool
+    {
+        $success = false;
+
+        foreach ($this->loaders as $loader) {
+            $success = $loader->loadClassMetadata($metadata) || $success;
+        }
+
+        return $success;
+    }
+
+    /**
+     * @return LoaderInterface[]
+     */
+    public function getLoaders(): array
+    {
+        return $this->loaders;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/LoaderInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/LoaderInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/LoaderInterface.php	(revision 8435)
@@ -0,0 +1,27 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+use Symfony\Component\Validator\Mapping\ClassMetadata;
+
+/**
+ * Loads validation metadata into {@link ClassMetadata} instances.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+interface LoaderInterface
+{
+    /**
+     * Loads validation metadata into a {@link ClassMetadata} instance.
+     */
+    public function loadClassMetadata(ClassMetadata $metadata): bool;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/PropertyInfoLoader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/PropertyInfoLoader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/PropertyInfoLoader.php	(revision 8435)
@@ -0,0 +1,176 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+use Symfony\Component\PropertyInfo\PropertyAccessExtractorInterface;
+use Symfony\Component\PropertyInfo\PropertyListExtractorInterface;
+use Symfony\Component\PropertyInfo\PropertyTypeExtractorInterface;
+use Symfony\Component\PropertyInfo\Type as PropertyInfoType;
+use Symfony\Component\Validator\Constraints\All;
+use Symfony\Component\Validator\Constraints\NotBlank;
+use Symfony\Component\Validator\Constraints\NotNull;
+use Symfony\Component\Validator\Constraints\Type;
+use Symfony\Component\Validator\Mapping\AutoMappingStrategy;
+use Symfony\Component\Validator\Mapping\ClassMetadata;
+
+/**
+ * Guesses and loads the appropriate constraints using PropertyInfo.
+ *
+ * @author KÃ©vin Dunglas <dunglas@gmail.com>
+ */
+final class PropertyInfoLoader implements LoaderInterface
+{
+    use AutoMappingTrait;
+
+    private PropertyListExtractorInterface $listExtractor;
+    private PropertyTypeExtractorInterface $typeExtractor;
+    private PropertyAccessExtractorInterface $accessExtractor;
+    private ?string $classValidatorRegexp;
+
+    public function __construct(PropertyListExtractorInterface $listExtractor, PropertyTypeExtractorInterface $typeExtractor, PropertyAccessExtractorInterface $accessExtractor, ?string $classValidatorRegexp = null)
+    {
+        $this->listExtractor = $listExtractor;
+        $this->typeExtractor = $typeExtractor;
+        $this->accessExtractor = $accessExtractor;
+        $this->classValidatorRegexp = $classValidatorRegexp;
+    }
+
+    public function loadClassMetadata(ClassMetadata $metadata): bool
+    {
+        $className = $metadata->getClassName();
+        if (!$properties = $this->listExtractor->getProperties($className)) {
+            return false;
+        }
+
+        $loaded = false;
+        $enabledForClass = $this->isAutoMappingEnabledForClass($metadata, $this->classValidatorRegexp);
+        foreach ($properties as $property) {
+            if (false === $this->accessExtractor->isWritable($className, $property)) {
+                continue;
+            }
+
+            if (!property_exists($className, $property)) {
+                continue;
+            }
+
+            $types = $this->typeExtractor->getTypes($className, $property);
+            if (null === $types) {
+                continue;
+            }
+
+            $enabledForProperty = $enabledForClass;
+            $hasTypeConstraint = false;
+            $hasNotNullConstraint = false;
+            $hasNotBlankConstraint = false;
+            $allConstraint = null;
+            foreach ($metadata->getPropertyMetadata($property) as $propertyMetadata) {
+                // Enabling or disabling auto-mapping explicitly always takes precedence
+                if (AutoMappingStrategy::DISABLED === $propertyMetadata->getAutoMappingStrategy()) {
+                    continue 2;
+                }
+
+                if (AutoMappingStrategy::ENABLED === $propertyMetadata->getAutoMappingStrategy()) {
+                    $enabledForProperty = true;
+                }
+
+                foreach ($propertyMetadata->getConstraints() as $constraint) {
+                    if ($constraint instanceof Type) {
+                        $hasTypeConstraint = true;
+                    } elseif ($constraint instanceof NotNull) {
+                        $hasNotNullConstraint = true;
+                    } elseif ($constraint instanceof NotBlank) {
+                        $hasNotBlankConstraint = true;
+                    } elseif ($constraint instanceof All) {
+                        $allConstraint = $constraint;
+                    }
+                }
+            }
+
+            if (!$enabledForProperty) {
+                continue;
+            }
+
+            $loaded = true;
+            $builtinTypes = [];
+            $nullable = false;
+            $scalar = true;
+            foreach ($types as $type) {
+                $builtinTypes[] = $type->getBuiltinType();
+
+                if ($scalar && !\in_array($type->getBuiltinType(), [PropertyInfoType::BUILTIN_TYPE_INT, PropertyInfoType::BUILTIN_TYPE_FLOAT, PropertyInfoType::BUILTIN_TYPE_STRING, PropertyInfoType::BUILTIN_TYPE_BOOL], true)) {
+                    $scalar = false;
+                }
+
+                if (!$nullable && $type->isNullable()) {
+                    $nullable = true;
+                }
+            }
+            if (!$hasTypeConstraint) {
+                if (1 === \count($builtinTypes)) {
+                    if ($types[0]->isCollection() && \count($collectionValueType = $types[0]->getCollectionValueTypes()) > 0) {
+                        [$collectionValueType] = $collectionValueType;
+                        $this->handleAllConstraint($property, $allConstraint, $collectionValueType, $metadata);
+                    }
+
+                    $metadata->addPropertyConstraint($property, $this->getTypeConstraint($builtinTypes[0], $types[0]));
+                } elseif ($scalar) {
+                    $metadata->addPropertyConstraint($property, new Type(['type' => 'scalar']));
+                }
+            }
+
+            if (!$nullable && !$hasNotBlankConstraint && !$hasNotNullConstraint) {
+                $metadata->addPropertyConstraint($property, new NotNull());
+            }
+        }
+
+        return $loaded;
+    }
+
+    private function getTypeConstraint(string $builtinType, PropertyInfoType $type): Type
+    {
+        if (PropertyInfoType::BUILTIN_TYPE_OBJECT === $builtinType && null !== $className = $type->getClassName()) {
+            return new Type(['type' => $className]);
+        }
+
+        return new Type(['type' => $builtinType]);
+    }
+
+    private function handleAllConstraint(string $property, ?All $allConstraint, PropertyInfoType $propertyInfoType, ClassMetadata $metadata): void
+    {
+        $containsTypeConstraint = false;
+        $containsNotNullConstraint = false;
+        if (null !== $allConstraint) {
+            foreach ($allConstraint->constraints as $constraint) {
+                if ($constraint instanceof Type) {
+                    $containsTypeConstraint = true;
+                } elseif ($constraint instanceof NotNull) {
+                    $containsNotNullConstraint = true;
+                }
+            }
+        }
+
+        $constraints = [];
+        if (!$containsNotNullConstraint && !$propertyInfoType->isNullable()) {
+            $constraints[] = new NotNull();
+        }
+
+        if (!$containsTypeConstraint) {
+            $constraints[] = $this->getTypeConstraint($propertyInfoType->getBuiltinType(), $propertyInfoType);
+        }
+
+        if (null === $allConstraint) {
+            $metadata->addPropertyConstraint($property, new All(['constraints' => $constraints]));
+        } else {
+            $allConstraint->constraints = array_merge($allConstraint->constraints, $constraints);
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/StaticMethodLoader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/StaticMethodLoader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/StaticMethodLoader.php	(revision 8435)
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+use Symfony\Component\Validator\Exception\MappingException;
+use Symfony\Component\Validator\Mapping\ClassMetadata;
+
+/**
+ * Loads validation metadata by calling a static method on the loaded class.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class StaticMethodLoader implements LoaderInterface
+{
+    protected $methodName;
+
+    /**
+     * Creates a new loader.
+     *
+     * @param string $methodName The name of the static method to call
+     */
+    public function __construct(string $methodName = 'loadValidatorMetadata')
+    {
+        $this->methodName = $methodName;
+    }
+
+    public function loadClassMetadata(ClassMetadata $metadata): bool
+    {
+        /** @var \ReflectionClass $reflClass */
+        $reflClass = $metadata->getReflectionClass();
+
+        if (!$reflClass->isInterface() && $reflClass->hasMethod($this->methodName)) {
+            $reflMethod = $reflClass->getMethod($this->methodName);
+
+            if ($reflMethod->isAbstract()) {
+                return false;
+            }
+
+            if (!$reflMethod->isStatic()) {
+                throw new MappingException(sprintf('The method "%s::%s()" should be static.', $reflClass->name, $this->methodName));
+            }
+
+            if ($reflMethod->getDeclaringClass()->name != $reflClass->name) {
+                return false;
+            }
+
+            $reflMethod->invoke(null, $metadata);
+
+            return true;
+        }
+
+        return false;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/XmlFileLoader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/XmlFileLoader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/XmlFileLoader.php	(revision 8435)
@@ -0,0 +1,236 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+use Symfony\Component\Config\Util\XmlUtils;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Exception\MappingException;
+use Symfony\Component\Validator\Mapping\ClassMetadata;
+
+/**
+ * Loads validation metadata from an XML file.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class XmlFileLoader extends FileLoader
+{
+    /**
+     * The XML nodes of the mapping file.
+     *
+     * @var \SimpleXMLElement[]|null
+     */
+    protected $classes;
+
+    public function __construct(string $file)
+    {
+        $this->file = $file;
+    }
+
+    public function loadClassMetadata(ClassMetadata $metadata): bool
+    {
+        if (!isset($this->classes)) {
+            $this->loadClassesFromXml();
+        }
+
+        if (isset($this->classes[$metadata->getClassName()])) {
+            $classDescription = $this->classes[$metadata->getClassName()];
+
+            $this->loadClassMetadataFromXml($metadata, $classDescription);
+
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Return the names of the classes mapped in this file.
+     *
+     * @return string[]
+     */
+    public function getMappedClasses(): array
+    {
+        if (!isset($this->classes)) {
+            $this->loadClassesFromXml();
+        }
+
+        return array_keys($this->classes);
+    }
+
+    /**
+     * Parses a collection of "constraint" XML nodes.
+     *
+     * @param \SimpleXMLElement $nodes The XML nodes
+     *
+     * @return Constraint[]
+     */
+    protected function parseConstraints(\SimpleXMLElement $nodes): array
+    {
+        $constraints = [];
+
+        foreach ($nodes as $node) {
+            if (\count($node) > 0) {
+                if (\count($node->value) > 0) {
+                    $options = [
+                        'value' => $this->parseValues($node->value),
+                    ];
+                } elseif (\count($node->constraint) > 0) {
+                    $options = $this->parseConstraints($node->constraint);
+                } elseif (\count($node->option) > 0) {
+                    $options = $this->parseOptions($node->option);
+                } else {
+                    $options = [];
+                }
+            } elseif ('' !== (string) $node) {
+                $options = XmlUtils::phpize(trim($node));
+            } else {
+                $options = null;
+            }
+
+            if (isset($options['groups']) && !\is_array($options['groups'])) {
+                $options['groups'] = (array) $options['groups'];
+            }
+
+            $constraints[] = $this->newConstraint((string) $node['name'], $options);
+        }
+
+        return $constraints;
+    }
+
+    /**
+     * Parses a collection of "value" XML nodes.
+     *
+     * @param \SimpleXMLElement $nodes The XML nodes
+     */
+    protected function parseValues(\SimpleXMLElement $nodes): array
+    {
+        $values = [];
+
+        foreach ($nodes as $node) {
+            if (\count($node) > 0) {
+                if (\count($node->value) > 0) {
+                    $value = $this->parseValues($node->value);
+                } elseif (\count($node->constraint) > 0) {
+                    $value = $this->parseConstraints($node->constraint);
+                } else {
+                    $value = [];
+                }
+            } else {
+                $value = trim($node);
+            }
+
+            if (isset($node['key'])) {
+                $values[(string) $node['key']] = $value;
+            } else {
+                $values[] = $value;
+            }
+        }
+
+        return $values;
+    }
+
+    /**
+     * Parses a collection of "option" XML nodes.
+     *
+     * @param \SimpleXMLElement $nodes The XML nodes
+     */
+    protected function parseOptions(\SimpleXMLElement $nodes): array
+    {
+        $options = [];
+
+        foreach ($nodes as $node) {
+            if (\count($node) > 0) {
+                if (\count($node->value) > 0) {
+                    $value = $this->parseValues($node->value);
+                } elseif (\count($node->constraint) > 0) {
+                    $value = $this->parseConstraints($node->constraint);
+                } else {
+                    $value = [];
+                }
+            } else {
+                $value = XmlUtils::phpize($node);
+                if (\is_string($value)) {
+                    $value = trim($value);
+                }
+            }
+
+            $options[(string) $node['name']] = $value;
+        }
+
+        return $options;
+    }
+
+    /**
+     * Loads the XML class descriptions from the given file.
+     *
+     * @throws MappingException If the file could not be loaded
+     */
+    protected function parseFile(string $path): \SimpleXMLElement
+    {
+        try {
+            $dom = XmlUtils::loadFile($path, __DIR__.'/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd');
+        } catch (\Exception $e) {
+            throw new MappingException($e->getMessage(), $e->getCode(), $e);
+        }
+
+        return simplexml_import_dom($dom);
+    }
+
+    private function loadClassesFromXml(): void
+    {
+        parent::__construct($this->file);
+
+        // This method may throw an exception. Do not modify the class'
+        // state before it completes
+        $xml = $this->parseFile($this->file);
+
+        $this->classes = [];
+
+        foreach ($xml->namespace as $namespace) {
+            $this->addNamespaceAlias((string) $namespace['prefix'], trim((string) $namespace));
+        }
+
+        foreach ($xml->class as $class) {
+            $this->classes[(string) $class['name']] = $class;
+        }
+    }
+
+    private function loadClassMetadataFromXml(ClassMetadata $metadata, \SimpleXMLElement $classDescription): void
+    {
+        if (\count($classDescription->{'group-sequence-provider'}) > 0) {
+            $metadata->setGroupProvider($classDescription->{'group-sequence-provider'}[0]->value ?: null);
+            $metadata->setGroupSequenceProvider(true);
+        }
+
+        foreach ($classDescription->{'group-sequence'} as $groupSequence) {
+            if (\count($groupSequence->value) > 0) {
+                $metadata->setGroupSequence($this->parseValues($groupSequence[0]->value));
+            }
+        }
+
+        foreach ($this->parseConstraints($classDescription->constraint) as $constraint) {
+            $metadata->addConstraint($constraint);
+        }
+
+        foreach ($classDescription->property as $property) {
+            foreach ($this->parseConstraints($property->constraint) as $constraint) {
+                $metadata->addPropertyConstraint((string) $property['name'], $constraint);
+            }
+        }
+
+        foreach ($classDescription->getter as $getter) {
+            foreach ($this->parseConstraints($getter->constraint) as $constraint) {
+                $metadata->addGetterConstraint((string) $getter['property'], $constraint);
+            }
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/XmlFilesLoader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/XmlFilesLoader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/XmlFilesLoader.php	(revision 8435)
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+/**
+ * Loads validation metadata from a list of XML files.
+ *
+ * @author Bulat Shakirzyanov <mallluhuct@gmail.com>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see FilesLoader
+ */
+class XmlFilesLoader extends FilesLoader
+{
+    public function getFileLoaderInstance(string $file): LoaderInterface
+    {
+        return new XmlFileLoader($file);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/YamlFileLoader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/YamlFileLoader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/YamlFileLoader.php	(revision 8435)
@@ -0,0 +1,197 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Mapping\ClassMetadata;
+use Symfony\Component\Yaml\Exception\ParseException;
+use Symfony\Component\Yaml\Parser as YamlParser;
+use Symfony\Component\Yaml\Yaml;
+
+/**
+ * Loads validation metadata from a YAML file.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class YamlFileLoader extends FileLoader
+{
+    /**
+     * An array of YAML class descriptions.
+     *
+     * @var array
+     */
+    protected $classes;
+
+    public function __construct(string $file)
+    {
+        $this->file = $file;
+    }
+
+    /**
+     * Caches the used YAML parser.
+     */
+    private YamlParser $yamlParser;
+
+    public function loadClassMetadata(ClassMetadata $metadata): bool
+    {
+        if (!isset($this->classes)) {
+            $this->loadClassesFromYaml();
+        }
+
+        if (isset($this->classes[$metadata->getClassName()])) {
+            $classDescription = $this->classes[$metadata->getClassName()];
+
+            $this->loadClassMetadataFromYaml($metadata, $classDescription);
+
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Return the names of the classes mapped in this file.
+     *
+     * @return string[]
+     */
+    public function getMappedClasses(): array
+    {
+        if (!isset($this->classes)) {
+            $this->loadClassesFromYaml();
+        }
+
+        return array_keys($this->classes);
+    }
+
+    /**
+     * Parses a collection of YAML nodes.
+     *
+     * @param array $nodes The YAML nodes
+     *
+     * @return array<array|scalar|Constraint>
+     */
+    protected function parseNodes(array $nodes): array
+    {
+        $values = [];
+
+        foreach ($nodes as $name => $childNodes) {
+            if (is_numeric($name) && \is_array($childNodes) && 1 === \count($childNodes)) {
+                $options = current($childNodes);
+
+                if (\is_array($options)) {
+                    $options = $this->parseNodes($options);
+                }
+
+                if (null !== $options && (!\is_array($options) || array_is_list($options))) {
+                    $options = [
+                        'value' => $options,
+                    ];
+                }
+
+                $values[] = $this->newConstraint(key($childNodes), $options);
+            } else {
+                if (\is_array($childNodes)) {
+                    $childNodes = $this->parseNodes($childNodes);
+                }
+
+                $values[$name] = $childNodes;
+            }
+        }
+
+        return $values;
+    }
+
+    /**
+     * Loads the YAML class descriptions from the given file.
+     *
+     * @throws \InvalidArgumentException If the file could not be loaded or did
+     *                                   not contain a YAML array
+     */
+    private function parseFile(string $path): array
+    {
+        try {
+            $classes = $this->yamlParser->parseFile($path, Yaml::PARSE_CONSTANT);
+        } catch (ParseException $e) {
+            throw new \InvalidArgumentException(sprintf('The file "%s" does not contain valid YAML: ', $path).$e->getMessage(), 0, $e);
+        }
+
+        // empty file
+        if (null === $classes) {
+            return [];
+        }
+
+        // not an array
+        if (!\is_array($classes)) {
+            throw new \InvalidArgumentException(sprintf('The file "%s" must contain a YAML array.', $this->file));
+        }
+
+        return $classes;
+    }
+
+    private function loadClassesFromYaml(): void
+    {
+        parent::__construct($this->file);
+
+        $this->yamlParser ??= new YamlParser();
+        $this->classes = $this->parseFile($this->file);
+
+        if (isset($this->classes['namespaces'])) {
+            foreach ($this->classes['namespaces'] as $alias => $namespace) {
+                $this->addNamespaceAlias($alias, $namespace);
+            }
+
+            unset($this->classes['namespaces']);
+        }
+    }
+
+    private function loadClassMetadataFromYaml(ClassMetadata $metadata, array $classDescription): void
+    {
+        if (isset($classDescription['group_sequence_provider'])) {
+            if (\is_string($classDescription['group_sequence_provider'])) {
+                $metadata->setGroupProvider($classDescription['group_sequence_provider']);
+            }
+            $metadata->setGroupSequenceProvider(
+                (bool) $classDescription['group_sequence_provider']
+            );
+        }
+
+        if (isset($classDescription['group_sequence'])) {
+            $metadata->setGroupSequence($classDescription['group_sequence']);
+        }
+
+        if (isset($classDescription['constraints']) && \is_array($classDescription['constraints'])) {
+            foreach ($this->parseNodes($classDescription['constraints']) as $constraint) {
+                $metadata->addConstraint($constraint);
+            }
+        }
+
+        if (isset($classDescription['properties']) && \is_array($classDescription['properties'])) {
+            foreach ($classDescription['properties'] as $property => $constraints) {
+                if (null !== $constraints) {
+                    foreach ($this->parseNodes($constraints) as $constraint) {
+                        $metadata->addPropertyConstraint($property, $constraint);
+                    }
+                }
+            }
+        }
+
+        if (isset($classDescription['getters']) && \is_array($classDescription['getters'])) {
+            foreach ($classDescription['getters'] as $getter => $constraints) {
+                if (null !== $constraints) {
+                    foreach ($this->parseNodes($constraints) as $constraint) {
+                        $metadata->addGetterConstraint($getter, $constraint);
+                    }
+                }
+            }
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/YamlFilesLoader.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/YamlFilesLoader.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/YamlFilesLoader.php	(revision 8435)
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping\Loader;
+
+/**
+ * Loads validation metadata from a list of YAML files.
+ *
+ * @author Bulat Shakirzyanov <mallluhuct@gmail.com>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see FilesLoader
+ */
+class YamlFilesLoader extends FilesLoader
+{
+    public function getFileLoaderInstance(string $file): LoaderInterface
+    {
+        return new YamlFileLoader($file);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd	(revision 8435)
@@ -0,0 +1,163 @@
+<?xml version="1.0" ?>
+
+<xsd:schema xmlns="http://symfony.com/schema/dic/constraint-mapping"
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+    targetNamespace="http://symfony.com/schema/dic/constraint-mapping"
+    elementFormDefault="qualified">
+
+  <xsd:annotation>
+    <xsd:documentation><![CDATA[
+      Symfony Validator Constraint Mapping Schema, version 1.0
+      Authors: Bernhard Schussek
+
+      A constraint mapping connects classes, properties and getters with
+      validation constraints.
+    ]]></xsd:documentation>
+  </xsd:annotation>
+
+  <xsd:element name="constraint-mapping" type="constraint-mapping" />
+
+  <xsd:complexType name="constraint-mapping">
+    <xsd:annotation>
+      <xsd:documentation><![CDATA[
+        The root element of the constraint mapping definition.
+      ]]></xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="namespace" type="namespace" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="class" type="class" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="namespace">
+    <xsd:annotation>
+      <xsd:documentation><![CDATA[
+        Contains the abbreviation for a namespace.
+      ]]></xsd:documentation>
+    </xsd:annotation>
+    <xsd:simpleContent>
+      <xsd:extension base="xsd:string">
+        <xsd:attribute name="prefix" type="xsd:string" use="required" />
+      </xsd:extension>
+    </xsd:simpleContent>
+  </xsd:complexType>
+
+  <xsd:complexType name="class">
+    <xsd:annotation>
+      <xsd:documentation><![CDATA[
+        Contains constraints for a single class.
+
+        Nested elements may be class constraints, property and/or getter
+        definitions.
+      ]]></xsd:documentation>
+    </xsd:annotation>
+    <xsd:choice minOccurs="0" maxOccurs="unbounded">
+      <xsd:element name="group-sequence-provider" type="group-sequence-provider" minOccurs="0" maxOccurs="1" />
+      <xsd:element name="group-sequence" type="group-sequence" minOccurs="0" maxOccurs="1" />
+      <xsd:element name="constraint" type="constraint" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="property" type="property" minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="getter" type="getter" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:choice>
+    <xsd:attribute name="name" type="xsd:string" use="required" />
+  </xsd:complexType>
+
+  <xsd:complexType name="group-sequence">
+    <xsd:annotation>
+      <xsd:documentation><![CDATA[
+        Contains the group sequence of a class. Each group should be written
+        into a "value" tag.
+      ]]></xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="value" type="value" minOccurs="1" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="group-sequence-provider">
+    <xsd:annotation>
+      <xsd:documentation><![CDATA[
+        Defines the name of the group sequence provider for a class.
+      ]]></xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="value" type="value" minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="property">
+    <xsd:annotation>
+      <xsd:documentation><![CDATA[
+        Contains constraints for a single property. The name of the property
+        should be given in the "name" option.
+      ]]></xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="constraint" type="constraint" maxOccurs="unbounded" />
+    </xsd:sequence>
+    <xsd:attribute name="name" type="xsd:string" use="required" />
+  </xsd:complexType>
+
+  <xsd:complexType name="getter">
+    <xsd:annotation>
+      <xsd:documentation><![CDATA[
+        Contains constraints for a getter method. The name of the corresponding
+        property should be given in the "property" option.
+      ]]></xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="constraint" type="constraint" maxOccurs="unbounded" />
+    </xsd:sequence>
+    <xsd:attribute name="property" type="xsd:string" use="required" />
+  </xsd:complexType>
+
+  <xsd:complexType name="constraint" mixed="true">
+    <xsd:annotation>
+      <xsd:documentation><![CDATA[
+        Contains a constraint definition. The name of the constraint should be
+        given in the "name" option.
+
+        May contain a single value, multiple "constraint" elements,
+        multiple "value" elements or multiple "option" elements.
+      ]]></xsd:documentation>
+    </xsd:annotation>
+    <xsd:choice minOccurs="0">
+      <xsd:element name="constraint" type="constraint" minOccurs="1" maxOccurs="unbounded" />
+      <xsd:element name="option" type="option" minOccurs="1" maxOccurs="unbounded" />
+      <xsd:element name="value" type="value" minOccurs="1" maxOccurs="unbounded" />
+    </xsd:choice>
+    <xsd:attribute name="name" type="xsd:string" use="required" />
+  </xsd:complexType>
+
+  <xsd:complexType name="option" mixed="true">
+    <xsd:annotation>
+      <xsd:documentation><![CDATA[
+        Contains a constraint option definition. The name of the option
+        should be given in the "name" option.
+
+        May contain a single value, multiple "value" elements or multiple
+        "constraint" elements.
+      ]]></xsd:documentation>
+    </xsd:annotation>
+    <xsd:choice minOccurs="0">
+      <xsd:element name="constraint" type="constraint" minOccurs="1" maxOccurs="unbounded" />
+      <xsd:element name="value" type="value" minOccurs="1" maxOccurs="unbounded" />
+    </xsd:choice>
+    <xsd:attribute name="name" type="xsd:string" use="required" />
+  </xsd:complexType>
+
+  <xsd:complexType name="value" mixed="true">
+    <xsd:annotation>
+      <xsd:documentation><![CDATA[
+        A value of an element.
+
+        May contain a single value, multiple "value" elements or multiple
+        "constraint" elements.
+      ]]></xsd:documentation>
+    </xsd:annotation>
+    <xsd:choice minOccurs="0">
+      <xsd:element name="constraint" type="constraint" minOccurs="1" maxOccurs="unbounded" />
+      <xsd:element name="value" type="value" minOccurs="1" maxOccurs="unbounded" />
+    </xsd:choice>
+    <xsd:attribute name="key" type="xsd:string" use="optional" />
+  </xsd:complexType>
+</xsd:schema>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/MemberMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/MemberMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/MemberMetadata.php	(revision 8435)
@@ -0,0 +1,163 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\Composite;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+/**
+ * Stores all metadata needed for validating a class property.
+ *
+ * The method of accessing the property's value must be specified by subclasses
+ * by implementing the {@link newReflectionMember()} method.
+ *
+ * This class supports serialization and cloning.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see PropertyMetadataInterface
+ */
+abstract class MemberMetadata extends GenericMetadata implements PropertyMetadataInterface
+{
+    /**
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getClassName()} instead.
+     */
+    public string $class;
+
+    /**
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getName()} instead.
+     */
+    public string $name;
+
+    /**
+     * @internal This property is public in order to reduce the size of the
+     *           class' serialized representation. Do not access it. Use
+     *           {@link getPropertyName()} instead.
+     */
+    public string $property;
+
+    /**
+     * @var \ReflectionMethod[]|\ReflectionProperty[]
+     */
+    private array $reflMember = [];
+
+    /**
+     * @param string $class    The name of the class this member is defined on
+     * @param string $name     The name of the member
+     * @param string $property The property the member belongs to
+     */
+    public function __construct(string $class, string $name, string $property)
+    {
+        $this->class = $class;
+        $this->name = $name;
+        $this->property = $property;
+    }
+
+    public function addConstraint(Constraint $constraint): static
+    {
+        $this->checkConstraint($constraint);
+
+        parent::addConstraint($constraint);
+
+        return $this;
+    }
+
+    public function __sleep(): array
+    {
+        return array_merge(parent::__sleep(), [
+            'class',
+            'name',
+            'property',
+        ]);
+    }
+
+    /**
+     * Returns the name of the member.
+     */
+    public function getName(): string
+    {
+        return $this->name;
+    }
+
+    /**
+     * @return string
+     */
+    public function getClassName()
+    {
+        return $this->class;
+    }
+
+    public function getPropertyName(): string
+    {
+        return $this->property;
+    }
+
+    /**
+     * Returns whether this member is public.
+     */
+    public function isPublic(object|string $objectOrClassName): bool
+    {
+        return $this->getReflectionMember($objectOrClassName)->isPublic();
+    }
+
+    /**
+     * Returns whether this member is protected.
+     */
+    public function isProtected(object|string $objectOrClassName): bool
+    {
+        return $this->getReflectionMember($objectOrClassName)->isProtected();
+    }
+
+    /**
+     * Returns whether this member is private.
+     */
+    public function isPrivate(object|string $objectOrClassName): bool
+    {
+        return $this->getReflectionMember($objectOrClassName)->isPrivate();
+    }
+
+    /**
+     * Returns the reflection instance for accessing the member's value.
+     */
+    public function getReflectionMember(object|string $objectOrClassName): \ReflectionMethod|\ReflectionProperty
+    {
+        $className = \is_string($objectOrClassName) ? $objectOrClassName : $objectOrClassName::class;
+        if (!isset($this->reflMember[$className])) {
+            $this->reflMember[$className] = $this->newReflectionMember($objectOrClassName);
+        }
+
+        return $this->reflMember[$className];
+    }
+
+    /**
+     * Creates a new reflection instance for accessing the member's value.
+     */
+    abstract protected function newReflectionMember(object|string $objectOrClassName): \ReflectionMethod|\ReflectionProperty;
+
+    private function checkConstraint(Constraint $constraint): void
+    {
+        if (!\in_array(Constraint::PROPERTY_CONSTRAINT, (array) $constraint->getTargets(), true)) {
+            throw new ConstraintDefinitionException(sprintf('The constraint "%s" cannot be put on properties or getters.', get_debug_type($constraint)));
+        }
+
+        if ($constraint instanceof Composite) {
+            foreach ($constraint->getNestedConstraints() as $nestedConstraint) {
+                $this->checkConstraint($nestedConstraint);
+            }
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/MetadataInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/MetadataInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/MetadataInterface.php	(revision 8435)
@@ -0,0 +1,62 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * A container for validation metadata.
+ *
+ * Most importantly, the metadata stores the constraints against which an object
+ * and its properties should be validated.
+ *
+ * Additionally, the metadata stores whether objects should be validated
+ * against their class' metadata and whether traversable objects should be
+ * traversed or not.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see CascadingStrategy
+ * @see TraversalStrategy
+ */
+interface MetadataInterface
+{
+    /**
+     * Returns the strategy for cascading objects.
+     *
+     * @see CascadingStrategy
+     */
+    public function getCascadingStrategy(): int;
+
+    /**
+     * Returns the strategy for traversing traversable objects.
+     *
+     * @see TraversalStrategy
+     */
+    public function getTraversalStrategy(): int;
+
+    /**
+     * Returns all constraints of this element.
+     *
+     * @return Constraint[]
+     */
+    public function getConstraints(): array;
+
+    /**
+     * Returns all constraints for a given validation group.
+     *
+     * @param string $group The validation group
+     *
+     * @return Constraint[]
+     */
+    public function findConstraints(string $group): array;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/PropertyMetadata.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/PropertyMetadata.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/PropertyMetadata.php	(revision 8435)
@@ -0,0 +1,84 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping;
+
+use Symfony\Component\Validator\Exception\ValidatorException;
+
+/**
+ * Stores all metadata needed for validating a class property.
+ *
+ * The value of the property is obtained by directly accessing the property.
+ * The property will be accessed by reflection, so the access of private and
+ * protected properties is supported.
+ *
+ * This class supports serialization and cloning.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see PropertyMetadataInterface
+ */
+class PropertyMetadata extends MemberMetadata
+{
+    /**
+     * @param string $class The class this property is defined on
+     * @param string $name  The name of this property
+     *
+     * @throws ValidatorException
+     */
+    public function __construct(string $class, string $name)
+    {
+        if (!property_exists($class, $name)) {
+            throw new ValidatorException(sprintf('Property "%s" does not exist in class "%s".', $name, $class));
+        }
+
+        parent::__construct($class, $name, $name);
+    }
+
+    public function getPropertyValue(mixed $object): mixed
+    {
+        $reflProperty = $this->getReflectionMember($object);
+
+        if ($reflProperty->hasType() && !$reflProperty->isInitialized($object)) {
+            // There is no way to check if a property has been unset or if it is uninitialized.
+            // When trying to access an uninitialized property, __get method is triggered.
+
+            // If __get method is not present, no fallback is possible
+            // Otherwise we need to catch an Error in case we are trying to access an uninitialized but set property.
+            if (!method_exists($object, '__get')) {
+                return null;
+            }
+
+            try {
+                return $reflProperty->getValue($object);
+            } catch (\Error) {
+                return null;
+            }
+        }
+
+        return $reflProperty->getValue($object);
+    }
+
+    protected function newReflectionMember(object|string $objectOrClassName): \ReflectionMethod|\ReflectionProperty
+    {
+        $originalClass = \is_string($objectOrClassName) ? $objectOrClassName : $objectOrClassName::class;
+
+        while (!property_exists($objectOrClassName, $this->getName())) {
+            $objectOrClassName = get_parent_class($objectOrClassName);
+
+            if (false === $objectOrClassName) {
+                throw new ValidatorException(sprintf('Property "%s" does not exist in class "%s".', $this->getName(), $originalClass));
+            }
+        }
+
+        return new \ReflectionProperty($objectOrClassName, $this->getName());
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/PropertyMetadataInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/PropertyMetadataInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/PropertyMetadataInterface.php	(revision 8435)
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping;
+
+/**
+ * Stores all metadata needed for validating the value of a class property.
+ *
+ * Most importantly, the metadata stores the constraints against which the
+ * property's value should be validated.
+ *
+ * Additionally, the metadata stores whether objects stored in the property
+ * should be validated against their class' metadata and whether traversable
+ * objects should be traversed or not.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see MetadataInterface
+ * @see CascadingStrategy
+ * @see TraversalStrategy
+ */
+interface PropertyMetadataInterface extends MetadataInterface
+{
+    /**
+     * Returns the name of the property.
+     */
+    public function getPropertyName(): string;
+
+    /**
+     * Extracts the value of the property from the given container.
+     */
+    public function getPropertyValue(mixed $containingValue): mixed;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/TraversalStrategy.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/TraversalStrategy.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Mapping/TraversalStrategy.php	(revision 8435)
@@ -0,0 +1,55 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping;
+
+/**
+ * Specifies whether and how a traversable object should be traversed.
+ *
+ * If the node traverser traverses a node whose value is an instance of
+ * {@link \Traversable}, and if that node is either a class node or if
+ * cascading is enabled, then the node's traversal strategy will be checked.
+ * Depending on the requested traversal strategy, the node traverser will
+ * iterate over the object and cascade each object or collection returned by
+ * the iterator.
+ *
+ * The traversal strategy is ignored for arrays. Arrays are always iterated.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @see CascadingStrategy
+ */
+class TraversalStrategy
+{
+    /**
+     * Specifies that a node's value should be iterated only if it is an
+     * instance of {@link \Traversable}.
+     */
+    public const IMPLICIT = 1;
+
+    /**
+     * Specifies that a node's value should never be iterated.
+     */
+    public const NONE = 2;
+
+    /**
+     * Specifies that a node's value should always be iterated. If the value is
+     * not an instance of {@link \Traversable}, an exception should be thrown.
+     */
+    public const TRAVERSE = 4;
+
+    /**
+     * Not instantiable.
+     */
+    private function __construct()
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/ObjectInitializerInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/ObjectInitializerInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/ObjectInitializerInterface.php	(revision 8435)
@@ -0,0 +1,29 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+/**
+ * Prepares an object for validation.
+ *
+ * Concrete implementations of this interface are used by {@link Validator\ContextualValidatorInterface}
+ * to initialize objects just before validating them.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+interface ObjectInitializerInterface
+{
+    /**
+     * @return void
+     */
+    public function initialize(object $object);
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/README.md	(revision 8435)
@@ -0,0 +1,16 @@
+Validator Component
+===================
+
+The Validator component provides tools to validate values following the
+[JSR-303 Bean Validation specification][1].
+
+Resources
+---------
+
+ * [Documentation](https://symfony.com/doc/current/components/validator.html)
+ * [Contributing](https://symfony.com/doc/current/contributing/index.html)
+ * [Report issues](https://github.com/symfony/symfony/issues) and
+   [send Pull Requests](https://github.com/symfony/symfony/pulls)
+   in the [main Symfony repository](https://github.com/symfony/symfony)
+
+[1]: https://jcp.org/en/jsr/detail?id=303
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.af.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.af.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.af.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="af" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Hierdie waarde moet vals wees.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Hierdie waarde moet waar wees.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Hierdie waarde moet van die soort {{type}} wees.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Hierdie waarde moet leeg wees.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Die waarde wat jy gekies het is nie 'n geldige keuse nie.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Jy moet ten minste {{ limit }} kies.|Jy moet ten minste {{ limit }} keuses kies.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Jy moet by die meeste {{ limit }} keuse kies.|Jy moet by die meeste {{ limit }} keuses kies.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Een of meer van die gegewe waardes is ongeldig.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Die veld is nie verwag nie.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Hierdie veld ontbreek.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Hierdie waarde is nie 'n geldige datum nie.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Hierdie waarde is nie 'n geldige datum en tyd nie.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Hierdie waarde is nie 'n geldige e-pos adres nie.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Die lÃªer kon nie gevind word nie.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Die lÃªer kan nie gelees word nie.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Die lÃªer is te groot ({{ size }} {{ suffix }}). Toegelaat maksimum grootte is {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Die MIME-tipe van die lÃªer is ongeldig ({{ type }}). Toegelaat MIME-tipes is {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Hierdie waarde moet {{ limit }} of minder wees.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Hierdie waarde is te lank. Dit moet {{ limit }} karakter of minder wees.|Hierdie waarde is te lank. Dit moet {{ limit }} karakters of minder wees.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Hierdie waarde moet {{ limit }} of meer wees.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Hierdie waarde is te kort. Dit moet {{ limit }} karakter of meer wees.|Hierdie waarde is te kort. Dit moet {{ limit }} karakters of meer wees.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Hierdie waarde moet nie leeg wees nie.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Hierdie waarde moet nie nul wees nie.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Hierdie waarde moet nul wees.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Hierdie waarde is nie geldig nie.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Hierdie waarde is nie 'n geldige tyd nie.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Hierdie waarde is nie 'n geldige URL nie.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Die twee waardes moet gelyk wees.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Die lÃªer is te groot. Toegelaat maksimum grootte is {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Die lÃªer is te groot.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Die lÃªer kan nie opgelaai word nie.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Hierdie waarde moet 'n geldige nommer wees.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Hierdie lÃªer is nie 'n geldige beeld nie.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Hierdie waarde is nie 'n geldige IP-adres nie.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Hierdie waarde is nie 'n geldige taal nie.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Hierdie waarde is nie 'n geldige land instelling nie.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Hierdie waarde is nie 'n geldige land nie.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Hierdie waarde word reeds gebruik.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Die grootte van die beeld kon nie opgespoor word nie.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Die beeld breedte is te groot ({{ width }}px). Toegelaat maksimum breedte is {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Die beeld breedte is te klein ({{ width }}px). Minimum breedte verwag is {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Die beeld hoogte is te groot ({{ height }}px). Toegelaat maksimum hoogte is {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Die beeld hoogte is te klein ({{ height }}px). Minimum hoogte verwag is {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Hierdie waarde moet die huidige wagwoord van die gebruiker wees.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Hierdie waarde moet presies {{ limit }} karakter wees.|Hierdie waarde moet presies {{ limit }} karakters wees.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Die lÃªer is slegs gedeeltelik opgelaai.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Geen lÃªer is opgelaai nie.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">Geen tydelike gids is in php.ini opgestel nie, of die opgestelde gids bestaan nie.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kan nie tydelike lÃªer skryf op skyf nie.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>'n PHP-uitbreiding veroorsaak die oplaai van die lÃªer om te misluk.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Hierdie versameling moet {{ limit }} element of meer bevat.|Hierdie versameling moet {{ limit }} elemente of meer bevat.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Hierdie versameling moet {{ limit }} element of minder bevat.|Hierdie versameling moet {{ limit }} elemente of meer bevat.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Hierdie versameling moet presies {{ limit }} element bevat.|Hierdie versameling moet presies {{ limit }} elemente bevat.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ongeldige kredietkaart nommer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Nie-ondersteunde tipe kaart of ongeldige kredietkaart nommer.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Hierdie waarde is nie 'n geldige Internasionale Bankrekeningnommer (IBAN) nie.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Hierdie waarde is nie 'n geldige ISBN-10 nie.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Hierdie waarde is nie 'n geldige ISBN-13 nie.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Hierdie waarde is nie 'n geldige ISBN-10 of ISBN-13 nie.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Hierdie waarde is nie 'n geldige ISSN nie.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Hierdie waarde is nie 'n geldige geldeenheid nie.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Hierdie waarde moet gelyk aan {{ compared_value }} wees.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Hierdie waarde moet meer as {{ compared_value }} wees.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Hierdie waarde moet meer of gelyk aan {{ compared_value }} wees.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Hierdie waarde moet identies aan {{ compared_value_type }} {{ compared_value }} wees.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Hierdie waarde moet minder as {{ compared_value }} wees.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Hierdie waarde moet minder of gelyk aan {{ compared_value }} wees.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Hierdie waarde moet nie dieselfde as {{ compared_value }} wees nie.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Hierdie waarde moet nie identies as {{ compared_value_type }} {{ compared_value }} wees nie.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Die beeld aspek is te groot ({{ ratio }}). Die maksimum toegelate aspek is {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Die beeld aspek is te klein ({{ ratio }}). Die minimum toegelate aspek is {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Die beeld is vierkantig ({{ width }}x{{ height }}px). Vierkantige beelde word nie toegelaat nie.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Die beeld is landskap georiÃ«nteerd ({{ width }}x{{ height }}px). Landskap georiÃ«nteerde beelde word nie toegelaat nie.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Die beeld dis portret georiÃ«nteerd ({{ width }}x{{ height }}px). Portret georiÃ«nteerde beelde word nie toegelaat nie.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>'n LeÃ« lÃªer word nie toegelaat nie.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Die gasheer kon nie opgelos word nie.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Die waarde stem nie ooreen met die verwagte {{ charset }} karakterstel nie.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Hierdie waarde is nie 'n geldige Besigheid Identifiseerder Kode (BIC) nie.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Fout</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Hierdie waarde is nie 'n geldige UUID nie.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Hierdie waarde moet 'n veelvoud van {{ compared_value }} wees.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Hierdie Besigheids Identifikasie Kode (BIK) is nie geassosieer met IBAN {{ iban }} nie.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Hierdie waarde moet geldige JSON wees.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Hierdie versameling moet net unieke elemente bevat.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Hierdie waarde moet positief wees.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Hierdie waarde moet positief of nul wees.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Hierdie waarde moet negatief wees.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Hierdie waarde moet negatief of nul wees.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Hierdie waarde is nie 'n geldige tydsone nie.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target state="needs-review-translation">Hierdie wagwoord is in 'n data-oortreding uitgelek, dit mag nie gebruik word nie. Gebruik asseblief 'n ander wagwoord.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Hierdie waarde moet tussen {{ min }} en {{ max }} wees.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Hierdie waarde is nie 'n geldige gasheernaam nie.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Die hoeveelheid elemente in hierdie versameling moet 'n meelvoud van {{ compared_value }} wees.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Hierdie waarde moet voldoen aan ten minste een van hierdie beperkings:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Elke element van hierdie versameling moet voldoen aan hulle eie beperkings.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Hierdie waarde is nie 'n geldige Internasionale veiligheidsidentifikasienommer (ISIN) nie.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Hierdie waarde moet 'n geldige uitdrukking wees.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Hierdie waarde is nie 'n geldige CSS-kleur nie.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Hierdie waarde is nie 'n geldige CIDR-notasie nie.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Die waarde van die netmasker moet tussen {{ min }} en {{ max }} wees.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target state="needs-review-translation">Die lÃªernaam is te lank. Dit moet {{ filename_max_length }} karakter of minder hÃª.|Die lÃªernaam is te lank. Dit moet {{ filename_max_length }} karakters of minder hÃª.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target state="needs-review-translation">Die wagwoordsterkte is te laag. Gebruik asseblief 'n sterker wagwoord.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target state="needs-review-translation">Hierdie waarde bevat karakters wat nie toegelaat word deur die huidige beperkingsvlak nie.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target state="needs-review-translation">Die gebruik van onsigbare karakters word nie toegelaat nie.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target state="needs-review-translation">Die meng van nommers van verskillende skrifte word nie toegelaat nie.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target state="needs-review-translation">Die gebruik van verborge oorvleuelende karakters word nie toegelaat nie.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">Die uitbreiding van die lÃªer is ongeldig ({{ extension }}). Toegelate uitbreidings is {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">Die opgespoorde karakterkodering is ongeldig ({{ detected }}). Toegelate koderings is {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Hierdie waarde is nie 'n geldige MAC-adres nie.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Die URL mis 'n topvlakdomein.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ar.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ar.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ar.xlf	(revision 8435)
@@ -0,0 +1,727 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="ar" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø£Ù ØªÙÙÙ Ø®Ø§Ø·ØŠØ©.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø£Ù ØªÙÙÙ Ø­ÙÙÙÙØ©.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªÙÙÙ Ù
+Ù ÙÙØ¹ {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªÙÙÙ ÙØ§Ø±ØºØ©.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Ø§ÙÙÙÙ
+Ø© Ø§ÙÙ
+Ø®ØªØ§Ø±Ø© ÙÙØ³Øª Ø®ÙØ§Ø±Ø§ ØµØ­ÙØ­Ø§.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>ÙØ¬Øš Ø§Ù ØªØ®ØªØ§Ø± {{ limit }} Ø§Ø®ØªÙØ§Ø± Ø¹ÙÙ Ø§ÙØ§ÙÙ.|ÙØ¬Øš Ø§Ù ØªØ®ØªØ§Ø± {{ limit }} Ø§Ø®ØªÙØ§Ø± Ø¹ÙÙ Ø§ÙØ§ÙÙ.|ÙØ¬Øš Ø§Ù ØªØ®ØªØ§Ø± {{ limit }} Ø§Ø®ØªÙØ§Ø±Ø§Øª Ø¹ÙÙ Ø§ÙØ§ÙÙ.|ÙØ¬Øš Ø§Ù ØªØ®ØªØ§Ø± {{ limit }} Ø§Ø®ØªÙØ§Ø± Ø¹ÙÙ Ø§ÙØ§ÙÙ.|ÙØ¬Øš Ø§Ù ØªØ®ØªØ§Ø± {{ limit }} Ø§Ø®ØªÙØ§Ø± Ø¹ÙÙ Ø§ÙØ§ÙÙ.|ÙØ¬Øš Ø§Ù ØªØ®ØªØ§Ø± {{ limit }} Ø§Ø®ØªÙØ§Ø± Ø¹ÙÙ Ø§ÙØ§ÙÙ.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>ÙØ¬Øš Ø§Ù ØªØ®ØªØ§Ø± {{ limit }} Ø§Ø®ØªÙØ§Ø± Ø¹ÙÙ Ø§ÙØ§ÙØ«Ø±.|ÙØ¬Øš Ø§Ù ØªØ®ØªØ§Ø± {{ limit }} Ø§Ø®ØªÙØ§Ø± Ø¹ÙÙ Ø§ÙØ§ÙØ«Ø±.|ÙØ¬Øš Ø§Ù ØªØ®ØªØ§Ø± {{ limit }} Ø§Ø®ØªÙØ§Ø±Ø§Øª Ø¹ÙÙ Ø§ÙØ§ÙØ«Ø±.|ÙØ¬Øš Ø§Ù ØªØ®ØªØ§Ø± {{ limit }} Ø§Ø®ØªÙØ§Ø± Ø¹ÙÙ Ø§ÙØ§ÙØ«Ø±.|ÙØ¬Øš Ø§Ù ØªØ®ØªØ§Ø± {{ limit }} Ø§Ø®ØªÙØ§Ø± Ø¹ÙÙ Ø§ÙØ§ÙØ«Ø±.|ÙØ¬Øš Ø§Ù ØªØ®ØªØ§Ø± {{ limit }} Ø§Ø®ØªÙØ§Ø± Ø¹ÙÙ Ø§ÙØ§ÙØ«Ø±.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>ÙØ§Ø­Ø¯ Ø£Ù Ø£ÙØ«Ø± Ù
+Ù Ø§ÙÙÙÙ
+ Ø§ÙÙ
+Ø¹Ø·Ø§Ù Ø®Ø§Ø·ØŠ.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>ÙÙ
+ ÙÙÙ Ù
+Ù Ø§ÙÙ
+ØªÙÙØ¹ ÙØ°Ø§ Ø§ÙÙ
+Ø¬Ø§Ù.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>ÙØ°Ø§ Ø§ÙÙ
+Ø¬Ø§Ù Ù
+ÙÙÙØ¯.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª ØªØ§Ø±ÙØ®Ø§ ØµØ§ÙØ­Ø§.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª ØªØ§Ø±ÙØ®Ø§ Ù ÙÙØªØ§ ØµØ§ÙØ­Ø§.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª Ø¹ÙÙØ§Ù ØšØ±ÙØ¯ Ø¥ÙÙØªØ±ÙÙÙ ØµØ­ÙØ­.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>ÙØ§ ÙÙ
+ÙÙ Ø§ÙØ¹Ø«ÙØ± Ø¹ÙÙ Ø§ÙÙ
+ÙÙ.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Ø§ÙÙ
+ÙÙ ØºÙØ± ÙØ§ØšÙ ÙÙÙØ±Ø§Ø¡Ø©.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ø§ÙÙ
+ÙÙ ÙØšÙØ± Ø¬Ø¯Ø§ ({{ size }} {{ suffix }}).Ø§ÙØµÙ Ù
+Ø³Ø§Ø­Ù Ù
+Ø³Ù
+ÙØ­ ØšÙØ§ ({{ limit }} {{ suffix }}).</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>ÙÙØ¹ Ø§ÙÙ
+ÙÙ ØºÙØ± ØµØ­ÙØ­ ({{ type }}). Ø§ÙØ§ÙÙØ§Ø¹ Ø§ÙÙ
+Ø³Ù
+ÙØ­ ØšÙØ§ ÙÙ {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø§Ù Ø§ÙÙ.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© Ø·ÙÙÙØ© Ø¬Ø¯Ø§. ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø­Ø±Ù Ø§Ù Ø§ÙÙ.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© Ø·ÙÙÙØ© Ø¬Ø¯Ø§. ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø­Ø±Ù Ø§Ù Ø§ÙÙ.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© Ø·ÙÙÙØ© Ø¬Ø¯Ø§. ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø­Ø±ÙÙ Ø§Ù Ø§ÙÙ.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© Ø·ÙÙÙØ© Ø¬Ø¯Ø§. ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø­Ø±Ù Ø§Ù Ø§ÙÙ.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© Ø·ÙÙÙØ© Ø¬Ø¯Ø§. ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø­Ø±Ù Ø§Ù Ø§ÙÙ.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© Ø·ÙÙÙØ© Ø¬Ø¯Ø§. ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø­Ø±Ù Ø§Ù Ø§ÙÙ.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø§Ù Ø§ÙØ«Ø±.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØµÙØ±Ø© Ø¬Ø¯Ø§. ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø­Ø±Ù Ø§Ù Ø§ÙØ«Ø±.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØµÙØ±Ø© Ø¬Ø¯Ø§. ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø­Ø±Ù Ø§Ù Ø§ÙØ«Ø±.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØµÙØ±Ø© Ø¬Ø¯Ø§. ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø­Ø±ÙÙ Ø§Ù Ø§ÙØ«Ø±.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØµÙØ±Ø© Ø¬Ø¯Ø§. ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø­Ø±Ù Ø§Ù Ø§ÙØ«Ø±.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØµÙØ±Ø© Ø¬Ø¯Ø§. ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø­Ø±Ù Ø§Ù Ø§ÙØ«Ø±.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØµÙØ±Ø© Ø¬Ø¯Ø§. ÙØ¬Øš Ø§Ù ØªÙÙÙ {{ limit }} Ø­Ø±Ù Ø§Ù Ø§ÙØ«Ø±.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§ÙØ§ ØªÙÙÙ ÙØ§Ø±ØºØ©.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§ÙØ§ ØªÙÙÙ ÙØ§Ø±ØºØ©.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªÙÙÙ ÙØ§Ø±ØºØ©.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ØºÙØ± ØµØ­ÙØ­Ø©.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª ÙÙØª ØµØ­ÙØ­.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª Ø±Ø§ØšØ· Ø§ÙÙØªØ±ÙÙÙ ØµØ­ÙØ­.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Ø§ÙÙÙÙ
+ØªØ§Ù ÙØ¬Øš Ø§Ù ØªÙÙÙØ§ Ù
+ØªØ³Ø§ÙÙØªØ§Ù.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ø§ÙÙ
+ÙÙ ÙØšÙØ± Ø¬Ø¯Ø§. Ø§ÙØµÙ Ù
+Ø³Ø§Ø­Ù Ù
+Ø³Ù
+ÙØ­ ØšÙØ§ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ø§ÙÙ
+ÙÙ ÙØšÙØ± Ø¬Ø¯Ø§.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>ÙÙ
+ Ø§Ø³ØªØ·Ø¹ Ø§Ø³ØªÙØšØ§Ù Ø§ÙÙ
+ÙÙ.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªÙÙÙ Ø±ÙÙ
+.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>ÙØ°Ø§ Ø§ÙÙ
+ÙÙ ÙÙØ³ ØµÙØ±Ø© ØµØ­ÙØ­Ø©.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>ÙØ°Ø§ ÙÙØ³ Ø¹ÙÙØ§Ù IP ØµØ­ÙØ­.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª ÙØºØ© ØµØ­ÙØ­Ø©.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª Ù
+ÙÙØ¹ ØµØ­ÙØ­.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª ØšÙØ¯Ø§ ØµØ§ÙØ­Ø§.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© Ù
+Ø³ØªØ®Ø¯Ù
+Ø© ØšØ§ÙÙØ¹Ù.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>ÙÙ
+ Ø§Ø³ØªØ·Ø¹ Ù
+Ø¹Ø±ÙØ© Ø­Ø¬Ù
+ Ø§ÙØµÙØ±Ø©.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Ø¹Ø±Ø¶ Ø§ÙØµÙØ±Ø© ÙØšÙØ± Ø¬Ø¯Ø§ ({{ width }}px). Ø§ÙØµÙ Ø¹Ø±Ø¶ Ù
+Ø³Ù
+ÙØ­ ØšÙ ÙÙ{{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Ø¹Ø±Ø¶ Ø§ÙØµÙØ±Ø© ØµØºÙØ± Ø¬Ø¯Ø§ ({{ width }}px). Ø§ÙÙ Ø¹Ø±Ø¶ Ù
+Ø³Ù
+ÙØ­ ØšÙ ÙÙ{{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Ø·ÙÙ Ø§ÙØµÙØ±Ø© ÙØšÙØ± Ø¬Ø¯Ø§ ({{ height }}px). Ø§ÙØµÙ Ø·ÙÙ Ù
+Ø³Ù
+ÙØ­ ØšÙ ÙÙ{{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Ø·ÙÙ Ø§ÙØµÙØ±Ø© ØµØºÙØ± Ø¬Ø¯Ø§ ({{ height }}px). Ø§ÙÙ Ø·ÙÙ Ù
+Ø³Ù
+ÙØ­ ØšÙ ÙÙ{{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªÙÙÙ ÙÙÙ
+Ø© Ø³Ø± Ø§ÙÙ
+Ø³ØªØ®Ø¯Ù
+ Ø§ÙØ­Ø§ÙÙØ©.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø­Ø±Ù ÙÙØ·.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø­Ø±Ù ÙÙØ·.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø­Ø±ÙÙ ÙÙØ·.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø­Ø±Ù ÙÙØ·.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø­Ø±Ù ÙÙØ·.|ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø­Ø±Ù ÙÙØ·.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>ØªÙ
+ Ø§Ø³ØªÙØšØ§Ù Ø¬Ø²Ø¡ Ù
+Ù Ø§ÙÙ
+ÙÙ ÙÙØ·.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>ÙÙ
+ ÙØªÙ
+ Ø§Ø±Ø³Ø§Ù Ø§Ù Ù
+ÙÙ.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>ÙÙ
+ ÙØªÙ
+ ØªÙÙÙÙ Ù
+Ø¬ÙØ¯ Ù
+Ø€ÙØª ÙÙ Ù
+ÙÙ php.ini.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>ÙÙ
+ Ø§Ø³ØªØ·Ø¹ ÙØªØ§ØšØ© Ø§ÙÙ
+ÙÙ Ø§ÙÙ
+Ø€ÙØª.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Ø§Ø­Ø¯ Ø§Ø¶Ø§ÙØ§Øª PHP ØªØ³ØšØšØª ÙÙ ÙØŽÙ Ø§Ø³ØªÙØšØ§Ù Ø§ÙÙ
+ÙÙ.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± Ø§Ù Ø§ÙØ«Ø±.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± Ø§Ù Ø§ÙØ«Ø±.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØ§ØµØ± Ø§Ù Ø§ÙØ«Ø±.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± Ø§Ù Ø§ÙØ«Ø±.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± Ø§Ù Ø§ÙØ«Ø±.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± Ø§Ù Ø§ÙØ«Ø±.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± Ø§Ù Ø§ÙÙ.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± Ø§Ù Ø§ÙÙ.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØ§ØµØ± Ø§Ù Ø§ÙÙ.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± Ø§Ù Ø§ÙÙ.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± Ø§Ù Ø§ÙÙ.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± Ø§Ù Ø§ÙÙ.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± ÙÙØ·.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± ÙÙØ·.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØ§ØµØ± ÙÙØ·.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± ÙÙØ·.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± ÙÙØ·.|ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ÙØ¬Øš Ø§Ù ØªØ­ØªÙÙ Ø¹ÙÙ {{ limit }} Ø¹ÙØµØ± ÙÙØ·.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ø±ÙÙ
+ Ø§ÙØšØ·Ø§ÙÙ ØºÙØ± ØµØ­ÙØ­.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>ÙÙØ¹ Ø§ÙØšØ·Ø§ÙÙ ØºÙØ± Ù
+Ø¯Ø¹ÙÙ
+ Ø§Ù Ø§ÙØ±ÙÙ
+ ØºÙØ± ØµØ­ÙØ­.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª Ø±ÙÙ
+ Ø­Ø³Ø§Øš ØšÙÙÙ Ø¯ÙÙÙ (IBAN) ØµØ§ÙØ­ÙØ§.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª ISBN-10 ØµØ§ÙØ­Ø©.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª ISBN-13 ØµØ§ÙØ­Ø©.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª ISBN-10 ØµØ§ÙØ­Ø© ÙÙØ§ ISBN-13 ØµØ§ÙØ­Ø©.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª ISSN ØµØ§ÙØ­Ø©.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ø§ÙØ¹ÙÙ
+ÙØ© ØºÙØ± ØµØ­ÙØ­Ø©.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªØ³Ø§ÙÙ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªÙÙÙ Ø§Ø¹ÙÙ Ù
+Ù {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªÙÙÙ Ù
+Ø³Ø§ÙÙØ© Ø§Ù Ø§Ø¹ÙÙ Ù
+Ù {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªØ·Ø§ØšÙ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªÙÙÙ Ø§ÙÙ Ù
+Ù {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ØªØ³Ø§ÙÙ Ø§Ù ØªÙÙ Ø¹Ù {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ÙØ§ ØªØ³Ø§ÙÙ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø§Ù ÙØ§ ØªØ·Ø§ØšÙ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>ÙØ³ØšØ© Ø§ÙØ¹Ø±Ø¶ Ø¹ÙÙ Ø§ÙØ§Ø±ØªÙØ§Ø¹ ÙÙØµÙØ±Ø© ÙØšÙØ±Ø© Ø¬Ø¯Ø§ ({{ ratio }}). Ø§ÙØ­Ø¯ Ø§ÙØ£ÙØµÙ ÙÙÙØ³ØšØ© Ø§ÙÙ
+Ø³Ù
+ÙØ­ ØšÙ ÙÙ {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>ÙØ³ØšØ© Ø§ÙØ¹Ø±Ø¶ Ø¹ÙÙ Ø§ÙØ§Ø±ØªÙØ§Ø¹ ÙÙØµÙØ±Ø© ØµØºÙØ±Ø© Ø¬Ø¯Ø§ ({{ ratio }}). Ø§ÙØ­Ø¯ Ø§ÙØ£Ø¯ÙÙ ÙÙÙØ³ØšØ© Ø§ÙÙ
+Ø³Ù
+ÙØ­ ØšÙ ÙÙ {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Ø§ÙØµÙØ±Ø© Ù
+Ø±ØšØ¹Ø© ({{ width }}x{{ height }}px). Ø§ÙØµÙØ± Ø§ÙÙ
+Ø±ØšØ¹Ø© ØºÙØ± Ù
+Ø³Ù
+ÙØ­ ØšÙØ§.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Ø§ÙØµÙØ±Ø© ÙÙ ÙØ¶Ø¹ Ø£ÙÙÙ ({{ width }}x{{ height }}px). Ø§ÙØµÙØ± ÙÙ ÙØ¶Ø¹ Ø£ÙÙÙ ØºÙØ± Ù
+Ø³Ù
+ÙØ­ ØšÙØ§.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Ø§ÙØµÙØ±Ø© ÙÙ ÙØ¶Ø¹ Ø¹Ù
+ÙØ¯Ù ({{ width }}x{{ height }}px). Ø§ÙØµÙØ± ÙÙ ÙØ¶Ø¹ Ø¹Ù
+ÙØ¯Ù ØºÙØ± Ù
+Ø³Ù
+ÙØ­ ØšÙØ§.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Ù
+ÙÙ ÙØ§Ø±Øº ØºÙØ± Ù
+Ø³Ù
+ÙØ­ ØšÙ.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>ÙØªØ¹Ø°Ø± Ø§ÙØ¥ØªØµØ§Ù ØšØ§ÙÙØ·Ø§Ù.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ØºÙØ± Ù
+ØªØ·Ø§ØšÙØ© Ù
+Ø¹ ØµÙØºØ© Ø§ÙØªØ­ÙÙÙ {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª Ø±Ù
+Ø² Ù
+Ø¹Ø±Ù Ø£Ø¹Ù
+Ø§Ù (BIC) ØµØ§ÙØ­ÙØ§.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Ø®Ø·Ø£</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª UUID ØµØ§ÙØ­ÙØ§.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø£Ù ØªÙÙÙ Ù
+Ø¶Ø§Ø¹Ù Ù {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ø±Ù
+Ø² Ø§ÙÙ
+Ø¹Ø±ÙÙ ÙØŽØ§Ø· ØªØ¬Ø§Ø±Ù (BIC) ÙØ°Ø§ ÙØ§ ÙØ±ØªØšØ· Ù
+Ø¹ IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ¬Øš Ø£Ù ØªÙÙÙ ØµØ§ÙØ­Ø© Ù JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>ÙØ¬Øš Ø£Ù ØªØ­ØªÙÙ ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© Ø¹ÙÙ Ø¹ÙØ§ØµØ± ÙØ±ÙØ¯Ø© ÙÙØ·.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>ÙØ¬Øš Ø£Ù ØªÙÙÙ ÙØ°Ù Ø§ÙÙÙÙ
+Ø© Ù
+ÙØ¬ØšØ©.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>ÙØ¬Øš Ø£Ù ØªÙÙÙ ÙØ°Ù Ø§ÙÙÙÙ
+Ø© Ø¥Ù
+Ø§ Ù
+ÙØ¬ØšØ© Ø§Ù ØµÙØ±.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>ÙØ¬Øš Ø£Ù ØªÙÙÙ ÙØ°Ù Ø§ÙÙÙÙ
+Ø© Ø³Ø§ÙØšØ©.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>ÙØ¬Øš Ø£Ù ØªÙÙÙ ÙØ°Ù Ø§ÙÙÙÙ
+Ø© Ø¥Ù
+Ø§ Ø³Ø§ÙØšØ© Ø§Ù ØµÙØ±.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª Ù
+ÙØ·ÙØ© Ø²Ù
+ÙÙØ© ØµØ­ÙØ­Ø©.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>ØªÙ
+ ØªØ³Ø±ÙØš ÙÙÙ
+Ø© Ø§ÙÙ
+Ø±ÙØ± ÙØ°Ù ÙÙ Ø®Ø±Ù ÙÙØšÙØ§ÙØ§ØªØ ÙÙØ¬Øš Ø¹Ø¯Ù
+ Ø§Ø³ØªØ®Ø¯Ø§Ù
+ÙØ§. ÙØ±Ø¬Ù Ø§Ø³ØªØ®Ø¯Ø§Ù
+ ÙÙÙ
+Ø© Ù
+Ø±ÙØ± Ø£Ø®Ø±Ù.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>ÙØ¬Øš Ø£Ù ØªÙÙÙ ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ØšÙÙ {{ min }} Ù {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª Ø§Ø³Ù
+ Ù
+Ø¶ÙÙ ØµØ§ÙØ­.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>ÙØ¬Øš Ø£Ù ÙÙÙÙ Ø¹Ø¯Ø¯ Ø§ÙØ¹ÙØ§ØµØ± ÙÙ ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© Ù
+Ø¶Ø§Ø¹Ù {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>ÙØ¬Øš Ø£Ù ØªØ³ØªÙÙÙ ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙØ§Ø­Ø¯Ø© Ù
+Ù Ø§ÙÙÙÙØ¯ Ø§ÙØªØ§ÙÙØ©:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>ÙØ¬Øš Ø£Ù ÙÙÙ ÙÙ Ø¹ÙØµØ± Ù
+Ù Ø¹ÙØ§ØµØ± ÙØ°Ù Ø§ÙÙ
+Ø¬Ù
+ÙØ¹Ø© ØšÙ
+Ø¬Ù
+ÙØ¹Ø© Ø§ÙÙÙÙØ¯ Ø§ÙØ®Ø§ØµØ© ØšÙ.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target> ØµØ§ÙØ­ (ISIN) ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª Ø±ÙÙ
+ ØªØ¹Ø±ÙÙ Ø§ÙØ£ÙØ±Ø§Ù Ø§ÙÙ
+Ø§ÙÙØ© Ø§ÙØ¯ÙÙÙ.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>ÙØ¬Øš Ø£Ù ØªÙÙÙ ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ØªØ¹ØšÙØ±ÙØ§ ØµØ§ÙØ­ÙØ§.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª ÙÙÙ CSS ØµØ§ÙØ­ÙØ§.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª ØªØ¯ÙÙÙ CIDR ØµØ§ÙØ­ÙØ§.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>ÙØ¬Øš Ø£Ù ØªÙÙÙ ÙÙÙ
+Ø© netmask ØšÙÙ {{ min }} Ù {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Ø§Ø³Ù
+ Ø§ÙÙ
+ÙÙ Ø·ÙÙÙ Ø¬Ø¯Ø§. ÙØ¬Øš Ø£Ù ÙØ­ØªÙÙ Ø¹ÙÙ {{ filename_max_length }} Ø­Ø±Ù Ø£Ù Ø£ÙÙ.|Ø§Ø³Ù
+ Ø§ÙÙ
+ÙÙ Ø·ÙÙÙ Ø¬Ø¯Ø§. ÙØ¬Øš Ø£Ù ÙØ­ØªÙÙ Ø¹ÙÙ {{ filename_max_length }} Ø£Ø­Ø±Ù Ø£Ù Ø£ÙÙ.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>ÙÙØ© ÙÙÙ
+Ø© Ø§ÙÙ
+Ø±ÙØ± Ù
+ÙØ®ÙØ¶Ø© ÙÙØºØ§ÙØ©. ÙØ±Ø¬Ù Ø§Ø³ØªØ®Ø¯Ø§Ù
+ ÙÙÙ
+Ø© Ù
+Ø±ÙØ± Ø£ÙÙÙ.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>ØªØ­ØªÙÙ ÙØ°Ù Ø§ÙÙÙÙ
+Ø© Ø¹ÙÙ Ø£Ø­Ø±Ù ØºÙØ± Ù
+Ø³Ù
+ÙØ­ ØšÙØ§ ØšÙØ§Ø³Ø·Ø© Ù
+Ø³ØªÙÙ Ø§ÙØªÙÙÙØ¯ Ø§ÙØ­Ø§ÙÙ.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>ÙØ§ ÙØ³Ù
+Ø­ ØšØ§Ø³ØªØ®Ø¯Ø§Ù
+ Ø£Ø­Ø±Ù ØºÙØ± Ù
+Ø±ØŠÙØ©.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>ÙØ§ ÙØ³Ù
+Ø­ ØšØ®ÙØ· Ø§ÙØ£Ø±ÙØ§Ù
+ Ù
+Ù ÙØµÙØµ Ù
+Ø®ØªÙÙØ©.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>ÙØ§ ÙØ³Ù
+Ø­ ØšØ§Ø³ØªØ®Ø¯Ø§Ù
+ Ø£Ø­Ø±Ù Ø§ÙØªØ±Ø§ÙØš Ø§ÙÙ
+Ø®ÙÙØ©.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Ø§Ù
+ØªØ¯Ø§Ø¯ Ø§ÙÙ
+ÙÙ ØºÙØ± ØµØ­ÙØ­ ({{ extension }}). Ø§ÙØ§Ù
+ØªØ¯Ø§Ø¯Ø§Øª Ø§ÙÙ
+Ø³Ù
+ÙØ­ ØšÙØ§ ÙÙ {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>ØªÙ
+ Ø§ÙØªØŽØ§Ù ØªØ±Ù
+ÙØ² Ø£Ø­Ø±Ù ØºÙØ± ØµØ§ÙØ­ ({{ detected }}). Ø§ÙØªØ±Ù
+ÙØ²Ø§Øª Ø§ÙÙ
+Ø³Ù
+ÙØ­ ØšÙØ§ ÙÙ {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>ÙØ°Ù Ø§ÙÙÙÙ
+Ø© ÙÙØ³Øª Ø¹ÙÙØ§Ù MAC ØµØ§ÙØ­ÙØ§.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>ÙØ°Ø§ Ø§ÙØ±Ø§ØšØ· ÙÙØªÙØ± Ø¥ÙÙ ÙØ·Ø§Ù Ø§ÙÙ
+Ø³ØªÙÙ Ø§ÙØ£Ø¹ÙÙ.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.az.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.az.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.az.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="az" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Bu dÉyÉr false olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Bu dÉyÉr true olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Bu dÉyÉrin tipi {{ type }} olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Bu dÉyÉr boÅ olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>SeÃ§diyiniz dÉyÉr dÃŒzgÃŒn bir seÃ§im deÄil.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Æn az {{ limit }} seÃ§im qeyd edilmÉlidir.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Æn Ã§ox {{ limit }} seÃ§im qeyd edilmÉlidir.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>TÉqdim edilÉn dÉyÉrlÉrdÉn bir vÉ ya bir neÃ§Ési yanlÄ±ÅdÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Bu sahÉ gÃ¶zlÉnilmirdi.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Bu sahÉ Éksikdir.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Bu dÉyÉr dÃŒzgÃŒn bir tarix deyil.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Bu dÉyÉr dÃŒzgÃŒn bir tarixsaat deyil.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Bu dÉyÉr dÃŒzgÃŒn bir e-poÃ§t adresi deyil.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Fayl tapÄ±lmadÄ±.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Fayl oxunabilÉn deyil.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fayl Ã§ox bÃ¶yÃŒkdÃŒr ({{ size }} {{ suffix }}). Ä°cazÉ verilÉn maksimum fayl Ã¶lÃ§ÃŒsÃŒ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>FaylÄ±n mime tipi yanlÄ±Ådr ({{ type }}). Ä°cazÉ verilÉn mime tiplÉri {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Bu dÉyÉr {{ limit }} vÉ ya altÄ±nda olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Bu dÉyÉr Ã§ox uzundur. {{ limit }} vÉ ya daha az simvol olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Bu dÉyÉr {{ limit }} veya daha fazla olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Bu dÉyÉr Ã§ox qÄ±sadÄ±r. {{ limit }} vÉ ya daha Ã§ox simvol olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Bu dÉyÉr boÅ olmamalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Bu dÉyÉr boÅ olmamalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Bu dÉyÉr boÅ olmamalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Bu dÉyÉr doÄru deyil.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Bu dÉyÉr doÄru bir saat deyil.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Bu dÉyÉr doÄru bir URL deÄil.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Ä°ki dÉyÉr eyni olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fayl Ã§ox bÃ¶yÃŒkdÃŒr. Ä°cazÉ verilÉn Én bÃ¶yÃŒk fayl Ã¶lÃ§ÃŒsÃŒ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Fayl Ã§ox bÃ¶yÃŒkdÃŒr.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Fayl yÃŒklÉnÉbilmir.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Bu dÉyÉr rÉqÉm olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Bu fayl dÃŒzgÃŒn bir ÅÉkil deyil.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Bu dÉyÉr etibarlÄ± bir IP ÃŒnvanÄ± deyil.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Bu dÉyÉr dÃŒzgÃŒn bir dil deyil.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Bu dÉyÉr dÃŒzgÃŒn bir dil deyil.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Bu dÉyÉr dÃŒzgÃŒn bir Ã¶lkÉ deyil.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Bu dÉyÉr hal-hazÄ±rda istifadÉdÉdir.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>ÅÉklin Ã¶lÃ§ÃŒsÃŒ hesablana bilmir.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ÅÉklin geniÅliyi Ã§ox bÃ¶yÃŒkdÃŒr ({{ width }}px). Ä°cazÉ verilÉn Én bÃ¶yÃŒk geniÅlik {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ÅÉklin geniÅliyi Ã§ox kiÃ§ikdir ({{ width }}px). Æn az {{ min_width }}px olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ÅÉklin yÃŒksÉkliyi Ã§ox bÃ¶yÃŒkdÃŒr ({{ height }}px). Ä°cazÉ verilÉn Én bÃ¶yÃŒk yÃŒksÉklik {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ÅÉklin yÃŒksÉkliyi Ã§ox kiÃ§ikdir ({{ height }}px). Æn az {{ min_height }}px olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Bu dÉyÉr istifadÉÃ§inin hazÄ±rkÄ± parolu olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Bu dÉyÉr tam olaraq {{ limit }} simvol olmaldÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Fayl qismÉn yÃŒklÉndi.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Fayl yÃŒklÉnmÉdi.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">php.ini-dÉ mÃŒvÉqqÉti qovluq quraÅdÄ±rÄ±lmayÄ±b, vÉ ya quraÅdÄ±rÄ±lmÄ±Å qovluq mÃ¶vcud deyil.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>MÃŒvÉqqÉti fayl diskÉ yazÄ±la bilmir.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Bir PHP ÉlavÉsi faylÄ±n yÃŒklÉnmÉsinÉ mane oldu.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Bu kolleksiyada {{ limit }} vÉ ya daha Ã§ox element olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Bu kolleksiyada {{ limit }} vÉ ya daha az element olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Bu kolleksiyada tam olaraq {{ limit }} element olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>YanlÄ±Å kart nÃ¶mrÉsi.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>DÉstÉklÉnmÉyÉn kart tipi vÉ ya yanlÄ±Å kart nÃ¶mrÉsi.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Bu dÉyÉr etibarlÄ± bir BeynÉlxalq Bank Hesab NÃ¶mrÉsi (IBAN) deyil.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Bu dÉyÉr doÄru bir ISBN-10 deyil.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Bu dÉyÉr doÄru bir ISBN-13 deyil.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Bu dÉyÉr doÄru bir ISBN-10 vÉ ya ISBN-13 deyil.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Bu dÉyÉr doÄru bir ISSN deyil.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Bu dÉyÉr doÄru bir valyuta deyil.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Bu dÉyÉr {{ compared_value }} ilÉ bÉrabÉr olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Bu dÉyÉr {{ compared_value }} dÉyÉrindÉn bÃŒyÃŒk olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Bu dÉyÉr {{ compared_value }} ilÉ bÉrabÉr vÉ ya daha bÃ¶yÃŒk olmaldÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Bu dÉyÉr {{ compared_value_type }} {{ compared_value }} ilÉ eyni olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Bu dÉyÉr {{ compared_value }} dÉyÉrindÉn kiÃ§ik olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Bu dÉyÉr {{ compared_value }} dÉyÉrindÉn kiÃ§ik vÉ ya bÉrabÉr olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Bu deÄer {{ compared_value }} ile eÅit olmamalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Bu dÉyÉr {{ compared_value_type }} {{ compared_value }} ilÉ eyni olmamalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>ÅÉkil nisbÉti Ã§ox bÃŒyÃŒkdÃŒr ({{ ratio }}). Ä°cazÉ verilÉn maksimum nisbÉt: {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>ÅÉkil nisbÉti Ã§ox balacadÄ±r ({{ ratio }}). Ä°cazÉ verilÉn minimum nisbÉt: {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>ÅÉkil kvadratdÄ±r ({{ width }}x{{ height }}px). Kvadrat ÅÉkillÉrÉ icazÉ verilmir.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>ÅÉkil albom rejimindÉdir ({{ width }}x{{ height }}px). Albom rejimli ÅÉkillÉrÉ icazÉ verilmir.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>ÅÉkil portret rejimindÉdir ({{ width }}x{{ height }}px). Portret rejimli ÅÉkillÉrÉ icazÉ verilmir.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>BoÅ fayla icazÉ verilmir.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Ãnvan tapÄ±lmadÄ±.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Bu dÉyÉr gÃ¶zlÉnilÉn {{ charset }} simvol cÉdvÉli ilÉ uyÄun gÉlmir.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Bu dÉyÉr etibarlÄ± bir Biznes TÉyinat Kodu (BIC) deyil.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>XÉta</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Bu dÉyÉr etibarlÄ± bir UUID deyil.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Bu dÉyÉr {{ compare_value }} dÉyÉrinin bÃ¶lÉnlÉrindÉn biri olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Bu Biznes TÉyinedici Kodu (BIC) {{ iban }} IBAN kodu ilÉ ÉlaqÉli deyil.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Bu dÉyÉr doÄru bir JSON olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Bu kolleksiyada sadÉcÉ unikal elementlÉr olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Bu dÉyÉr mÃŒsbÉt olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Bu dÉyÉr mÃŒsbÉt vÉ ya sÄ±fÄ±r olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Bu dÉyÉr mÉnfi olmaldÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Bu dÉyÉr mÉnfi vÉ ya sÄ±fÄ±r olmaldÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Bu dÉyÉr doÄru bir zaman zolaÄÄ± deyil.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Bu parol data oÄurluÄunda tapÄ±ldÄ±ÄÄ± ÃŒÃ§ÃŒn iÅlÉdilmÉmÉlidir. ZÉhmÉt olmasa, baÅqa parol seÃ§in.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Bu dÉyÉr {{ min }} vÉ {{ max }} arasÄ±nda olmaldÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Bu dÉyÉr doÄru bir host adÄ± deyil.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Bu kolleksiyadakÄ± elementlerin sayÄ± {{ compared_value }} tam bÃ¶lÃŒnÉni olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Bu dÉyÉr aÅaÄÄ±dakÄ± mÉcburiyyÉtlÉrdÉn birini qarÅÄ±lamalÄ±dÄ±r:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Bu kolleksiyadakÄ± hÉr element Ã¶z mÉcburiyyÉtlÉrini qarÅÄ±lamalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Bu dÉyÉr doÄru bir QiymÉtli KaÄÄ±zÄ±n BeynÉlxalq Ä°dentifikasiya Kodu (ISIN) deyil.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Bu dÉyÉr etibarlÄ± ifadÉ olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Bu dÉyÉr etibarlÄ± CSS rÉngi deyil.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Bu dÉyÉr etibarlÄ± CIDR notasiyasÄ± deyil.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>ÅÉbÉkÉ maskasÄ±nÄ±n dÉyÉri {{ min }} vÉ {{ max }} arasÄ±nda olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Fayl adÄ± Ã§ox uzundur. {{ filename_max_length }} vÉ ya daha az simvol olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Parolun gÃŒcÃŒ Ã§ox zÉifdir. ZÉhmÉt olmasa, daha gÃŒclÃŒ bir parol istifadÉ edin.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Bu dÉyÉrdÉ cari mÉhdudiyyÉt sÉviyyÉsi tÉrÉfindÉn icazÉ verilmÉyÉn simvollar var.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>GÃ¶rÃŒnmÉz simvollarÄ±n istifadÉsinÉ icazÉ verilmir.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>FÉrqli skriptlÉrdÉn nÃ¶mrÉlÉrin qarÄ±ÅdÄ±rÄ±lmasÄ±na icazÉ verilmir.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Gizli Ã¶rtÃŒlÃŒ simvollarÄ±n istifadÉsinÉ icazÉ verilmir.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>FaylÄ±n uzantÄ±sÄ± yanlÄ±ÅdÄ±r ({{ extension }}). Ä°cazÉ verilÉn uzantÄ±lar {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>TÉsbit edilÉn simvol ÅifrlÉmÉsi yanlÄ±ÅdÄ±r. ({{ detected }}). Ä°cazÉ verilÉn ÅifrlÉmÉlÉr bunlardÄ±r: {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Bu dÉyÉr etibarlÄ± bir MAC ÃŒnvanÄ± deyil.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Bu URL yuxarÄ± sÉviyyÉli domeni Ã§atÄ±ÅmÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.be.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.be.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.be.xlf	(revision 8435)
@@ -0,0 +1,470 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="be" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ ÐÐµ.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ Ð¢Ð°Ðº.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ð¢ÑÐ¿ Ð·ÐœÐ°ÑÑÐœÐœÑ Ð¿Ð°Ð²ÑÐœÐµÐœ Ð±ÑÑÑ {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ Ð¿ÑÑÑÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>ÐÐ±ÑÐ°ÐœÐ°Ðµ Ð²Ð°ÐŒÑ Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÐ°Ðµ.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>ÐÑ Ð¿Ð°Ð²ÑÐœÐœÑ Ð²ÑÐ±ÑÐ°ÑÑ Ñ
+Ð°ÑÑ Ð± {{ limit }} Ð²Ð°ÑÑÑÐœÑ.|ÐÑ Ð¿Ð°Ð²ÑÐœÐœÑ Ð²ÑÐ±ÑÐ°ÑÑ Ñ
+Ð°ÑÑ Ð± {{ limit }} Ð²Ð°ÑÑÑÐœÑÐ°Ñ.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>ÐÑ Ð¿Ð°Ð²ÑÐœÐœÑ Ð²ÑÐ±ÑÐ°ÑÑ ÐœÐµ Ð±ÐŸÐ»ÑÑ Ð·Ð° {{ limit }} Ð²Ð°ÑÑÑÐœÑ.|ÐÑ Ð¿Ð°Ð²ÑÐœÐœÑ Ð²ÑÐ±ÑÐ°ÑÑ ÐœÐµ Ð±ÐŸÐ»ÑÑ Ð·Ð° {{ limit }} Ð²Ð°ÑÑÑÐœÑÐ°Ñ.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>ÐÐŽÐ·ÑÐœ Ð°Ð±ÐŸ ÐœÐµÐºÐ°Ð»ÑÐºÑ Ð¿Ð°Ð·ÐœÐ°ÑÐ°ÐœÑÑ
+ Ð·ÐœÐ°ÑÑÐœÐœÑÑ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÐœÐµÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>ÐÑÑÐ° Ð¿ÐŸÐ»Ðµ ÐœÐµ ÑÐ°ÐºÐ°ÐµÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>ÐÑÑÐ° Ð¿ÐŸÐ»Ðµ Ð°ÐŽÑÑÑÐœÑÑÐ°Ðµ.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÐºÐ°ÑÑÐºÑÐœÐ°Ð¹ ÐŽÐ°ÑÐ°Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÐºÐ°ÑÑÐºÑÐœÐ°Ð¹ ÐŽÐ°ÑÐ°Ð¹ i ÑÐ°ÑÐŸÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÐºÐ°ÑÑÐºÑÐœÑÐŒ Ð°ÐŽÑÐ°ÑÐ°ÐŒ ÑÐ»ÐµÐºÑÑÐŸÐœÐœÐ°Ð¹ Ð¿ÐŸÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Ð€Ð°Ð¹Ð» ÐœÐµ Ð·ÐœÐŸÐ¹ÐŽÐ·ÐµÐœ.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Ð€Ð°Ð¹Ð» ÐœÐµ ÑÑÑÐ°ÐµÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ð€Ð°Ð¹Ð» Ð·Ð°ÐœÐ°ÐŽÑÐ° Ð²ÑÐ»ÑÐºÑ ({{ size }} {{ suffix }}). ÐÐ°ÐºÑÑÐŒÐ°Ð»ÑÐœÐ° ÐŽÐ°Ð·Ð²ÐŸÐ»ÐµÐœÑ Ð¿Ð°ÐŒÐµÑ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>MIME-ÑÑÐ¿ ÑÐ°Ð¹Ð»Ñ ÐœÐµÐºÐ°ÑÑÐºÑÑ ({{ type }}). ÐÐ°Ð·Ð²ÐŸÐ»ÐµÐœÑÑ MIME-ÑÑÐ¿Ñ ÑÐ°Ð¹Ð»Ñ {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ {{ limit }} Ð°Ð±ÐŸ ÐŒÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð·Ð°ÐœÐ°ÐŽÑÐ° ÐŽÐŸÑÐ³Ð°Ðµ. Ð¯ÐœÐŸ Ð¿Ð°Ð²ÑÐœÐœÐ° ÐŒÐµÑÑ {{ limit }} ÑÑÐŒÐ²Ð°Ð» Ð°Ð±ÐŸ ÐŒÐµÐœÑ.|ÐÐœÐ°ÑÑÐœÐœÐµ Ð·Ð°ÐœÐ°ÐŽÑÐ° ÐŽÐŸÑÐ³Ð°Ðµ. Ð¯ÐœÐŸ Ð¿Ð°Ð²ÑÐœÐœÐ° ÐŒÐµÑÑ {{ limit }} ÑÑÐŒÐ²Ð°Ð»Ð°Ñ Ð°Ð±ÐŸ ÐŒÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ {{ limit }} Ð°Ð±ÐŸ Ð±ÐŸÐ»ÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð·Ð°ÐœÐ°ÐŽÑÐ° ÐºÐ°ÑÐŸÑÐºÐ°Ðµ. Ð¯ÐœÐŸ Ð¿Ð°Ð²ÑÐœÐœÐ° ÐŒÐµÑÑ Ð¿ÑÑÐœÐ°ÐŒÑÑ {{ limit }} ÑÑÐŒÐ²Ð°Ð».|ÐÐœÐ°ÑÑÐœÐœÐµ Ð·Ð°ÐœÐ°ÐŽÑÐ° ÐºÐ°ÑÐŸÑÐºÐ°Ðµ. Ð¯ÐœÐŸ Ð¿Ð°Ð²ÑÐœÐœÐ° ÐŒÐµÑÑ Ð¿ÑÑÐœÐ°ÐŒÑÑ {{ limit }} ÑÑÐŒÐ²Ð°Ð»Ð°Ñ.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ Ð¿ÑÑÑÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÐœÐµ ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ ÑÐ°ÑÐ°ÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ URL-Ð°ÐŽÑÐ°ÑÐ°ÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>ÐÐ±ÐŸÐŽÐ²Ð° Ð·ÐœÐ°ÑÑÐœÐœÑ Ð¿Ð°Ð²ÑÐœÐœÑ Ð±ÑÑÑ Ð°ÐŽÐœÐŸÐ»ÑÐºÐ°Ð²ÑÐŒÑ.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ð€Ð°Ð¹Ð» Ð·Ð°ÐœÐ°ÐŽÑÐ° Ð²ÑÐ»ÑÐºÑ. ÐÐ°ÐºÑÑÐŒÐ°Ð»ÑÐœÐ° ÐŽÐ°Ð·Ð²ÐŸÐ»ÐµÐœÑ Ð¿Ð°ÐŒÐµÑ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ð€Ð°Ð¹Ð» Ð·Ð°ÐœÐ°ÐŽÑÐ° Ð²ÑÐ»ÑÐºÑ.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>ÐÐµÐŒÐ°Ð³ÑÑÐŒÐ° Ð·Ð°Ð¿Ð°ÐŒÐ¿Ð°Ð²Ð°ÑÑ ÑÐ°Ð¹Ð».</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ Ð»ÑÐºÐ°ÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>ÐÑÑÑ ÑÐ°Ð¹Ð» ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÐ°Ð¹ Ð²ÑÑÐ²Ð°Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ IP-Ð°ÐŽÑÐ°ÑÐ°ÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ ÐŒÐŸÐ²Ð°Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÐ°Ð¹ Ð»Ð°ÐºÐ°Ð»Ð»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÐ°Ð¹ ÐºÑÐ°ÑÐœÐ°Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÑÐ¶ÐŸ Ð²ÑÐºÐ°ÑÑÑÑÐŸÑÐ²Ð°ÐµÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>ÐÐµÐŒÐ°Ð³ÑÑÐŒÐ° Ð²ÑÐ·ÐœÐ°ÑÑÑÑ Ð¿Ð°ÐŒÐµÑ Ð²ÑÑÐ²Ñ.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ÐÑÑÐ° Ð²ÑÑÐ²Ð° Ð·Ð°ÐœÐ°ÐŽÑÐ° Ð²ÑÐ»ÑÐºÐ°Ñ ({{ width }}px). ÐÐ°Ð·Ð²Ð°Ð»ÑÐµÑÑÐ° ÐŒÐ°ÐºÑÑÐŒÐ°Ð»ÑÐœÐ°Ñ ÑÑÑÑÐœÑ {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ÐÑÑÐ° Ð²ÑÑÐ²Ð° Ð·Ð°ÐœÐ°ÐŽÑÐ° ÐŒÐ°Ð»ÐµÐœÑÐºÐ°Ñ ({{ width }}px). ÐÐ°Ð·Ð²Ð°Ð»ÑÐµÑÑÐ° ÐŒÑÐœÑÐŒÐ°Ð»ÑÐœÐ°Ñ ÑÑÑÑÐœÑ {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ÐÑÑÑ Ð²ÑÑÐ²Ð° Ð·Ð°ÐœÐ°ÐŽÑÐ° Ð²ÑÐ»ÑÐºÐ°Ñ ({{ width }}px). ÐÐ°Ð·Ð²Ð°Ð»ÑÐµÑÑÐ° ÐŒÐ°ÐºÑÑÐŒÐ°Ð»ÑÐœÐ°Ñ Ð²ÑÑÑÐœÑ {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ÐÑÑÐ° Ð²ÑÑÐ²Ð° Ð·Ð°ÐœÐ°ÐŽÑÐ° ÐŒÐ°Ð»ÐµÐœÑÐºÐ°Ñ ({{ width }}px). ÐÐ°Ð·Ð²Ð°Ð»ÑÐµÑÑÐ° ÐŒÑÐœÑÐŒÐ°Ð»ÑÐœÐ°Ñ Ð²ÑÑÑÐœÑ {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ ÑÑÐ¿ÐµÑÐ°ÑÐœÑÐŒ Ð¿Ð°ÑÐŸÐ»ÐµÐŒ ÐºÐ°ÑÑÑÑÐ°Ð»ÑÐœÑÐºÐ°.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° ÐŒÐµÑÑ {{ limit }} ÑÑÐŒÐ²Ð°Ð».|ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° ÐŒÐµÑÑ {{ limit }} ÑÑÐŒÐ²Ð°Ð»Ð°Ñ.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Ð€Ð°Ð¹Ð» Ð±ÑÑ Ð·Ð°Ð¿Ð°ÐŒÐ¿Ð°Ð²Ð°ÐœÑ ÑÐŸÐ»ÑÐºÑ ÑÐ°ÑÑÐºÐŸÐ²Ð°.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ð€Ð°Ð¹Ð» ÐœÐµ Ð±ÑÑ Ð·Ð°Ð¿Ð°ÐŒÐ¿Ð°Ð²Ð°ÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Ð£ php.ini ÐœÐµ Ð±ÑÐ»Ð° ÐœÐ°Ð»Ð°Ð¶Ð°ÐœÐ° ÑÐ°ÑÐŸÐ²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°, Ð°Ð±ÐŸ ÑÐ°ÑÐŸÐ²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° ÐœÐµ ÑÑÐœÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>ÐÐµÐŒÐ°Ð³ÑÑÐŒÐ° Ð·Ð°Ð¿ÑÑÐ°ÑÑ ÑÐ°ÑÐŸÐ²Ñ ÑÐ°Ð¹Ð» ÐœÐ° ÐŽÑÑÐº.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>ÐÐ°ÑÑÑÑÐœÐœÐµ PHP Ð²ÑÐºÐ»ÑÐºÐ°Ð»Ð° Ð¿Ð°ÐŒÑÐ»ÐºÑ Ð·Ð°Ð³ÑÑÐ·ÐºÑ.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>ÐÐ°Ð»ÐµÐºÑÑÑ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð·ÐŒÑÑÑÐ°ÑÑ Ð¿ÑÑÐœÐ°ÐŒÑÑ {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑ.|ÐÐ°Ð»ÐµÐºÑÑÑ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð·ÐŒÑÑÑÐ°ÑÑ Ð¿ÑÑÐœÐ°ÐŒÑÑ {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑÐ°Ñ.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>ÐÐ°Ð»ÐµÐºÑÑÑ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð·ÐŒÑÑÑÐ°ÑÑ {{ limit }} Ð°Ð±ÐŸ ÐŒÐµÐœÑ ÑÐ»ÐµÐŒÐµÐœÑ.|ÐÐ°Ð»ÐµÐºÑÑÑ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð·ÐŒÑÑÑÐ°ÑÑ {{ limit }} Ð°Ð±ÐŸ ÐŒÐµÐœÑ ÑÐ»ÐµÐŒÐµÐœÑÐ°Ñ.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>ÐÐ°Ð»ÐµÐºÑÑÑ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð·ÐŒÑÑÑÐ°ÑÑ ÑÐŸÑÐœÐ° {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑ.|ÐÐ°Ð»ÐµÐºÑÑÑ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð·ÐŒÑÑÑÐ°ÑÑ ÑÐŸÑÐœÐ° {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑÐ°Ñ.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ÐÐµÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑ ÐœÑÐŒÐ°Ñ ÐºÐ°ÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Ð¢ÑÐ¿ ÐºÐ°ÑÑÑ ÐœÐµ Ð¿Ð°ÐŽÑÑÑÐŒÐ»ÑÐ²Ð°ÐµÑÑÐ° Ð°Ð±ÐŸ ÐœÐµÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑ ÐœÑÐŒÐ°Ñ ÐºÐ°ÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ ÐŒÑÐ¶ÐœÐ°ÑÐŸÐŽÐœÑÐŒ ÐœÑÐŒÐ°ÑÐ°ÐŒ Ð±Ð°ÐœÐºÐ°ÑÑÐºÐ°Ð³Ð° ÑÐ°Ñ
+ÑÐœÐºÑ (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ ISBN-10 Ð°Ð±ÐŸ ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÐ°Ð¹ Ð²Ð°Ð»ÑÑÐ°Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° ÑÐ°ÑÐœÑÑÑÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ Ð±ÐŸÐ»ÑÑ ÑÑÐŒ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ Ð±ÐŸÐ»ÑÑ ÑÑÐŒ Ð°Ð±ÐŸ ÑÐ°ÑÐœÑÑÑÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ ÑÐŽÑÐœÑÑÑÐœÑÐŒ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ ÐŒÐµÐœÑ ÑÑÐŒ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ ÐŒÐµÐœÑ ÑÑÐŒ Ð°Ð±ÐŸ ÑÐ°ÑÐœÑÑÑÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° ÑÐ°ÑÐœÑÑÑÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ ÑÐŽÑÐœÑÑÑÐœÑÐŒ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Ð¡ÑÐ°ÐŽÐœÐŸÑÑÐœÑ Ð±Ð°ÐºÐŸÑ Ð²ÑÑÐ²Ñ Ð·'ÑÑÐ»ÑÐµÑÑÐ° Ð·Ð°ÐœÐ°ÐŽÑÐ° Ð²ÑÐ»ÑÐºÑÐŒ ({{ ratio }}). ÐÐ°Ð·Ð²Ð°Ð»ÑÐµÑÑÐ° ÐŒÐ°ÐºÑÑÐŒÐ°Ð»ÑÐœÑÑ ÑÑÐ°ÐŽÐœÐŸÑÑÐœÑ {{max_ratio}} .</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Ð¡ÑÐ°ÐŽÐœÐŸÑÑÐœÑ Ð±Ð°ÐºÐŸÑ Ð²ÑÑÐ²Ñ Ð·'ÑÑÐ»ÑÐµÑÑÐ° Ð·Ð°ÐœÐ°ÐŽÑÐ° ÐŒÐ°Ð»ÐµÐœÑÐºÑÐŒÑ ({{ ratio }}). ÐÐ°Ð·Ð²Ð°Ð»ÑÐµÑÑÐ° ÐŒÑÐœÑÐŒÐ°Ð»ÑÐœÑÑ ÑÑÐ°ÐŽÐœÐŸÑÑÐœÑ {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>ÐÑÑÐ²Ð° ÐºÐ²Ð°ÐŽÑÐ°ÑÐœÐ°Ñ ({{width}}x{{height}}px). ÐÐ²Ð°ÐŽÑÐ°ÑÐœÑÑ Ð²ÑÑÐ²Ñ ÐœÐµ ÐŽÐ°Ð·Ð²ÐŸÐ»ÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>ÐÑÑÐ²Ð° Ñ Ð°Ð»ÑÐ±ÐŸÐŒÐœÐ°Ð¹ Ð°ÑÑÐµÐœÑÐ°ÑÑÑ ({{ width }}x{{ height }}px). ÐÑÑÐ²Ñ Ñ Ð°Ð»ÑÐ±ÐŸÐŒÐœÐ°Ð¹ Ð°ÑÑÐµÐœÑÐ°ÑÑÑ ÐœÐµ ÐŽÐ°Ð·Ð²ÐŸÐ»ÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>ÐÑÑÐ²Ð° Ñ Ð¿Ð°ÑÑÑÑÑÐœÐ°Ð¹ Ð°ÑÑÐµÐœÑÐ°ÑÑÑ ({{ width }}x{{ height }}px). ÐÑÑÐ²Ñ Ñ Ð¿Ð°ÑÑÑÑÑÐœÐ°Ð¹ Ð°ÑÑÐµÐœÑÐ°ÑÑÑ ÐœÐµ ÐŽÐ°Ð·Ð²ÐŸÐ»ÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>ÐÑÑÑÑ ÑÐ°Ð¹Ð» ÐœÐµ ÐŽÐ°Ð·Ð²ÐŸÐ»ÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>ÐÐµ ÐŒÐ°Ð³ÑÑÐŒÐ° Ð·ÐœÐ°Ð¹ÑÑÑ ÑÐŒÑ Ñ
+ÐŸÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ ÑÑÐ¿Ð°ÐŽÐ°Ðµ Ð· ÑÐ°ÐºÐ°ÐœÐ°Ð¹ {{ charset }} ÐºÐ°ÐŽÑÑÐŸÑÐºÐ°Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ ÐºÐŸÐŽÐ°ÐŒ ÑÐŽÑÐœÑÑÑÑÐºÐ°ÑÑÑ Ð±ÑÐ·ÐœÐµÑÑ (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>ÐÐ°ÐŒÑÐ»ÐºÐ°</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ ÐºÑÐ°ÑÐœÑÐŒ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>ÐÐ°ÐœÐºÐ°ÑÑÐºÑ ÑÐŽÑÐœÑÑÑÑÐºÐ°ÑÑÐ¹ÐœÑ ÐºÐŸÐŽ (BIC) ÐœÐµ Ð·Ð²ÑÐ·Ð°Ðœ Ð· IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ Ñ ÑÐ°ÑÐŒÐ°ÑÐµ JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>ÐÐ°Ð»ÐµÐºÑÑÑ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð·ÐŒÑÑÑÐ°ÑÑ ÑÐŸÐ»ÑÐºÑ ÑÐœÑÐºÐ°Ð»ÑÐœÑÑ ÑÐ»ÐµÐŒÐµÐœÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ ÐŽÐ°ÐŽÐ°ÑÐœÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ ÐŽÐ°ÐŽÐ°ÑÐœÑÐŒ ÑÑ ÐœÑÐ»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ Ð°ÐŽÐŒÐŸÑÐœÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ Ð°ÐŽÐŒÐŸÑÐœÑÐŒ ÑÑ ÐœÑÐ»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ Ð³Ð°ÐŽÐ·ÑÐœÐœÑÐŒ Ð¿ÐŸÑÑÐ°ÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>ÐÑÑÑ Ð¿Ð°ÑÐŸÐ»Ñ Ð±ÑÑ Ð²ÑÐºÑÐ°ÐŽÐ·ÐµÐœÑ Ñ Ð²ÑÐœÑÐºÑ ÑÐ·Ð»ÐŸÐŒÑ ÐŽÐ°ÐŽÐ·ÐµÐœÑÑ
+, ÑÐ°ÐŒÑ ÑÐ³ÐŸ ÐœÐµÐ»ÑÐ³Ð° Ð²ÑÐºÐ°ÑÑÑÑÐŸÑÐ²Ð°ÑÑ. ÐÐ°Ð»Ñ Ð»Ð°ÑÐºÐ°, Ð²ÑÐºÐ°ÑÑÑÑÐŸÑÐ²Ð°Ð¹ÑÐµ ÑÐœÑÑ Ð¿Ð°ÑÐŸÐ»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ Ð¿Ð°ÐŒÑÐ¶ {{min}} Ñ {{max}}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÐºÐ°ÑÑÐºÑÐœÑÐŒ ÑÐŒÐµÐŒ Ñ
+Ð°ÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>ÐÐŸÐ»ÑÐºÐ°ÑÑÑ ÑÐ»ÐµÐŒÐµÐœÑÐ°Ñ Ñ Ð³ÑÑÐ°Ð¹ ÐºÐ°Ð»ÐµÐºÑÑÑ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ ÐºÑÐ°ÑÐœÑÐŒ {{compared_value}}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð·Ð°ÐŽÐ°Ð²Ð°Ð»ÑÐœÑÑÑ ÑÐº ÐŒÑÐœÑÐŒÑÐŒ Ð°ÐŽÐœÐ°ÐŒÑ Ð· ÐœÐ°ÑÑÑÐ¿ÐœÑÑ
+ Ð°Ð±ÐŒÐµÐ¶Ð°Ð²Ð°ÐœÐœÑÑ:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>ÐÐŸÐ¶ÐœÑ ÑÐ»ÐµÐŒÐµÐœÑ Ð³ÑÑÐ°Ð¹ ÐºÐ°Ð»ÐµÐºÑÑÑ Ð¿Ð°Ð²ÑÐœÐµÐœ Ð·Ð°ÐŽÐ°Ð²Ð°Ð»ÑÐœÑÑÑ ÑÐ²Ð°Ð¹ÐŒÑ ÑÐ»Ð°ÑÐœÐ°ÐŒÑ ÐœÐ°Ð±ÐŸÑÑ Ð°Ð±ÐŒÐµÐ¶Ð°Ð²Ð°ÐœÐœÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÐºÐ°ÑÑÐºÑÐœÑÐŒ ÐŒÑÐ¶ÐœÐ°ÑÐŸÐŽÐœÑÐŒ ÑÐŽÑÐœÑÑÑÑÐºÐ°ÑÑÐ¹ÐœÑÐŒ ÐœÑÐŒÐ°ÑÐ°ÐŒ ÐºÐ°ÑÑÐŸÑÐœÑÑ
+ Ð¿Ð°Ð¿ÐµÑ (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ Ð²ÑÑÐ°Ð·Ð°ÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÐŽÐ°Ð¿ÑÑÑÐ°Ð»ÑÐœÑÐŒ ÐºÐŸÐ»ÐµÑÐ°ÐŒ CSS.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÐ°Ð¹ ÐœÐ°ÑÐ°ÑÑÑÐ¹ CIDR.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>ÐÐœÐ°ÑÑÐœÐœÐµ ÑÐµÑÐºÐ°Ð²Ð°Ð¹ ÐŒÐ°ÑÐºÑ Ð¿Ð°Ð²ÑÐœÐœÐ° Ð±ÑÑÑ Ð°ÐŽ {{min}} ÐŽÐ° {{max}}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>ÐÐ°Ð·Ð²Ð° ÑÐ°Ð¹Ð»Ð° Ð·Ð°ÐœÐ°ÐŽÑÐ° ÐŽÐŸÑÐ³Ð°Ñ. ÐÐœ Ð¿Ð°Ð²ÑÐœÐµÐœ ÐŒÐµÑÑ {{ filename_max_length }} ÑÑÐŒÐ²Ð°Ð» Ð°Ð±ÐŸ ÐŒÐµÐœÑ.|ÐÐ°Ð·Ð²Ð° ÑÐ°Ð¹Ð»Ð° Ð·Ð°ÐœÐ°ÐŽÑÐ° ÐŽÐŸÑÐ³Ð°Ñ. ÐÐœ Ð¿Ð°Ð²ÑÐœÐµÐœ ÐŒÐµÑÑ {{ filename_max_length }} ÑÑÐŒÐ²Ð°Ð»Ñ Ð°Ð±ÐŸ ÐŒÐµÐœÑ.|ÐÐ°Ð·Ð²Ð° ÑÐ°Ð¹Ð»Ð° Ð·Ð°ÐœÐ°ÐŽÑÐ° ÐŽÐŸÑÐ³Ð°Ñ. ÐÐœ Ð¿Ð°Ð²ÑÐœÐµÐœ ÐŒÐµÑÑ {{ filename_max_length }} ÑÑÐŒÐ²Ð°Ð»Ð°Ñ Ð°Ð±ÐŸ ÐŒÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>ÐÐ°ÐŽÐ·ÐµÐ¹ÐœÐ°ÑÑÑ Ð¿Ð°ÑÐŸÐ»Ñ Ð·Ð°ÐœÐ°ÐŽÑÐ° ÐœÑÐ·ÐºÐ°Ñ. ÐÑÐºÐ°ÑÑÑÑÐŸÑÐ²Ð°Ð¹ÑÐµ Ð±ÐŸÐ»ÑÑ ÐœÐ°ÐŽÐ·ÐµÐ¹ÐœÑ Ð¿Ð°ÑÐŸÐ»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ Ð·ÐŒÑÑÑÐ°Ðµ ÑÑÐŒÐ²Ð°Ð»Ñ, ÑÐºÑÑ ÐœÐµ ÐŽÐ°Ð·Ð²ÐŸÐ»ÐµÐœÑ ÑÑÐ¿ÐµÑÐ°ÑÐœÑÐŒ ÑÐ·ÑÐŸÑÐœÐµÐŒ Ð°Ð±ÐŒÐµÐ¶Ð°Ð²Ð°ÐœÐœÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>ÐÑÐºÐ°ÑÑÑÑÐ°ÐœÐœÐµ ÐœÑÐ±Ð°ÑÐœÑÑ
+ ÑÑÐŒÐ²Ð°Ð»Ð°Ñ ÐœÐµ ÐŽÐ°Ð·Ð²Ð°Ð»ÑÐµÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>ÐÐŒÐµÑÐ²Ð°ÐœÐœÐµ Ð»ÑÐºÐ°Ñ Ð· ÑÐŸÐ·ÐœÑÑ
+ Ð°Ð»ÑÐ°Ð²ÑÑÐ°Ñ ÐœÐµ ÐŽÐ°Ð¿ÑÑÐºÐ°ÐµÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>ÐÑÐºÐ°ÑÑÑÑÐ°ÐœÐœÐµ ÑÑ
+Ð°Ð²Ð°ÐœÑÑ
+ ÐœÐ°ÐºÐ»Ð°ÐŽÐ·ÐµÐœÑÑ
+ ÑÑÐŒÐ²Ð°Ð»Ð°Ñ ÐœÐµ ÐŽÐ°Ð·Ð²Ð°Ð»ÑÐµÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">ÐÐ°ÑÑÑÑÐœÐœÐµ ÑÐ°Ð¹Ð»Ð° ÐœÑÑÐ»ÑÑÐœÐ°Ðµ ({{ extension }}). ÐÐ°Ð·Ð²ÐŸÐ»ÐµÐœÑÑ Ð¿Ð°ÑÑÑÑÐœÐœÑ: {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">ÐÑÑÑÐ»ÐµÐœÐ°Ñ ÐºÐ°ÐŽÑÑÐŸÑÐºÐ° Ð·ÐœÐ°ÐºÐ°Ñ ÐœÑÑÐ»ÑÑÐœÐ°Ñ ({{ detected }}). ÐÐ°Ð·Ð²ÐŸÐ»ÐµÐœÑÑ ÐºÐ°ÐŽÑÑÐŸÑÐºÑ: {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">ÐÑÑÐ° Ð·ÐœÐ°ÑÑÐœÐœÐµ ÐœÐµ Ð·'ÑÑÐ»ÑÐµÑÑÐ° ÑÐ°Ð¿ÑÐ°ÑÐŽÐœÑÐŒ MAC-Ð°ÐŽÑÐ°ÑÐ°ÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">ÐÑÑÐ°ÐŒÑ URL Ð±ÑÐ°ÐºÑÐµ ÐŽÐ°ÐŒÐµÐœ Ð²ÐµÑÑ
+ÐœÑÐ³Ð° ÑÐ·ÑÐŸÑÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.bg.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.bg.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.bg.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="bg" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð»ÑÐ¶Ð° (false).</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐžÑÑÐžÐœÐ° (true).</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐŸÑ ÑÐžÐ¿ {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð¿ÑÐ°Ð·ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>ÐÐ·Ð±ÑÐ°ÐœÐ°ÑÐ° ÑÑÐŸÐ¹ÐœÐŸÑÑ Ðµ ÐœÐµÐ²Ð°Ð»ÐžÐŽÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Ð¢ÑÑÐ±Ð²Ð° ÐŽÐ° ÐžÐ·Ð±ÐµÑÐµÑÐµ Ð¿ÐŸÐœÐµ {{ limit }} ÐŸÐ¿ÑÐžÑ.|Ð¢ÑÑÐ±Ð²Ð° ÐŽÐ° ÐžÐ·Ð±ÐµÑÐµÑÐµ Ð¿ÐŸÐœÐµ {{ limit }} ÐŸÐ¿ÑÐžÐž.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Ð¢ÑÑÐ±Ð²Ð° ÐŽÐ° ÐžÐ·Ð±ÐµÑÐµÑÐµ ÐœÐ°Ð¹-ÐŒÐœÐŸÐ³ÐŸ {{ limit }} ÐŸÐ¿ÑÐžÑ.|Ð¢ÑÑÐ±Ð²Ð° ÐŽÐ° ÐžÐ·Ð±ÐµÑÐµÑÐµ ÐœÐ°Ð¹-ÐŒÐœÐŸÐ³ÐŸ {{ limit }} ÐŸÐ¿ÑÐžÐž.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>ÐÐŽÐœÐ° ÐžÐ»Ðž Ð¿ÐŸÐ²ÐµÑÐµ ÐŸÑ Ð·Ð°ÐŽÐ°ÐŽÐµÐœÐžÑÐµ ÑÑÐŸÐ¹ÐœÐŸÑÑÐž Ðµ ÐœÐµÐ²Ð°Ð»ÐžÐŽÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>ÐÐŸÐ»ÐµÑÐŸ ÐœÐµ ÑÐµ Ðµ ÐŸÑÐ°ÐºÐ²Ð°Ð»ÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>ÐÐŸÐ»ÐµÑÐŸ Ð»ÐžÐ¿ÑÐ²Ð°.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° ÐŽÐ°ÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° ÐŽÐ°ÑÐ° Ðž ÑÐ°Ñ.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÐžÐŒÐµÐ¹Ð» Ð°ÐŽÑÐµÑ.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Ð€Ð°Ð¹Ð»ÑÑ ÐœÐµ Ð±ÐµÑÐµ ÐŸÑÐºÑÐžÑ.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Ð€Ð°Ð¹Ð»ÑÑ ÐœÐµ ÐŒÐŸÐ¶Ðµ ÐŽÐ° Ð±ÑÐŽÐµ Ð¿ÑÐŸÑÐµÑÐµÐœ.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ð€Ð°Ð¹Ð»ÑÑ Ðµ ÑÐ²ÑÑÐŽÐµ Ð³ÐŸÐ»ÑÐŒ ({{ size }} {{ suffix }}). ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÐœÐžÑÑ ÑÐ°Ð·ÐŒÐµÑ Ðµ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mime ÑÐžÐ¿ÑÑ ÐœÐ° ÑÐ°Ð¹Ð»Ð° Ðµ ÐœÐµÐ²Ð°Ð»ÐžÐŽÐµÐœ ({{ type }}). Ð Ð°Ð·ÑÐµÑÐµÐœÐž mime ÑÐžÐ¿ÐŸÐ²Ðµ ÑÐ° {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ {{ limit }} ÐžÐ»Ðž Ð¿ÐŸ-ÐŒÐ°Ð»ÐºÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° Ðµ ÑÐ²ÑÑÐŽÐµ ÐŽÑÐ»Ð³Ð°. Ð¢ÑÑÐ±Ð²Ð° ÐŽÐ° ÑÑÐŽÑÑÐ¶Ð° ÐœÐ°Ð¹-ÐŒÐœÐŸÐ³ÐŸ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ».|Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° Ðµ ÑÐ²ÑÑÐŽÐµ ÐŽÑÐ»Ð³Ð°. Ð¢ÑÑÐ±Ð²Ð° ÐŽÐ° ÑÑÐŽÑÑÐ¶Ð° ÐœÐ°Ð¹-ÐŒÐœÐŸÐ³ÐŸ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ {{ limit }} ÐžÐ»Ðž Ð¿ÐŸÐ²ÐµÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° Ðµ ÑÐ²ÑÑÐŽÐµ ÐºÑÐ°ÑÐºÐ°. Ð¢ÑÑÐ±Ð²Ð° ÐŽÐ° ÑÑÐŽÑÑÐ¶Ð° Ð¿ÐŸÐœÐµ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ».|Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° Ðµ ÑÐ²ÑÑÐŽÐµ ÐºÑÐ°ÑÐºÐ°. Ð¢ÑÑÐ±Ð²Ð° ÐŽÐ° ÑÑÐŽÑÑÐ¶Ð° Ð¿ÐŸÐœÐµ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð¿ÑÐ°Ð·ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐŸ Ð²ÑÐµÐŒÐµ.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>ÐÐ²ÐµÑÐµ ÑÑÐŸÐ¹ÐœÐŸÑÑÐž ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐ°Ñ ÑÐ°Ð²ÐœÐž.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ð€Ð°Ð¹Ð»ÑÑ Ðµ ÑÐ²ÑÑÐŽÐµ Ð³ÐŸÐ»ÑÐŒ. Ð Ð°Ð·ÑÐµÑÐµÐœÐžÑÑ ÐŒÐ°ÐºÑÐžÐŒÐ°Ð»ÐµÐœ ÑÐ°Ð·ÐŒÐµÑ Ðµ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ð€Ð°Ð¹Ð»ÑÑ Ðµ ÑÐ²ÑÑÐŽÐµ Ð³ÐŸÐ»ÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Ð€Ð°Ð¹Ð»ÑÑ ÐœÐµ ÐŒÐŸÐ¶Ðµ ÐŽÐ° Ð±ÑÐŽÐµ ÐºÐ°ÑÐµÐœ.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÐœÐŸÐŒÐµÑ.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ð€Ð°Ð¹Ð»ÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐŸ ÐžÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµ.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ IP Ð°ÐŽÑÐµÑ.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÐµÐ·ÐžÐº.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° Ð»ÐŸÐºÐ°Ð»ÐžÐ·Ð°ÑÐžÑ.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° ÐŽÑÑÐ¶Ð°Ð²Ð°.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° Ð²ÐµÑÐµ Ðµ Ð² ÑÐ¿ÐŸÑÑÐµÐ±Ð°.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Ð Ð°Ð·ÐŒÐµÑÑÑ ÐœÐ° ÐžÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµÑÐŸ ÐœÐµ ÐŒÐŸÐ¶Ðµ ÐŽÐ° Ð±ÑÐŽÐµ ÐŸÐ¿ÑÐµÐŽÐµÐ»ÐµÐœ.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµÑÐŸ Ðµ ÑÐ²ÑÑÐŽÐµ ÑÐžÑÐŸÐºÐŸ ({{ width }}px). ÐšÐžÑÐŸÑÐžÐœÐ°ÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐŒÐ°ÐºÑÐžÐŒÑÐŒ {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµÑÐŸ Ðµ Ñ ÑÐ²ÑÑÐŽÐµ ÐŒÐ°Ð»ÐºÐ° ÑÐžÑÐŸÑÐžÐœÐ° ({{ width }}px). ÐšÐžÑÐŸÑÐžÐœÐ°ÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐŒÐžÐœÐžÐŒÑÐŒ {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµÑÐŸ Ðµ Ñ ÑÐ²ÑÑÐŽÐµ Ð³ÐŸÐ»ÑÐŒÐ° Ð²ÐžÑÐŸÑÐžÐœÐ° ({{ height }}px). ÐÐžÑÐŸÑÐžÐœÐ°ÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐŒÐ°ÐºÑÐžÐŒÑÐŒ {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµÑÐŸ Ðµ Ñ ÑÐ²ÑÑÐŽÐµ ÐŒÐ°Ð»ÐºÐ° Ð²ÐžÑÐŸÑÐžÐœÐ° ({{ height }}px). ÐÐžÑÐŸÑÐžÐœÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐŒÐžÐœÐžÐŒÑÐŒ {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÑÐµÐºÑÑÐ°ÑÐ° Ð¿ÐŸÑÑÐµÐ±ÐžÑÐµÐ»ÑÐºÐ° Ð¿Ð°ÑÐŸÐ»Ð°.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÑÐŸÑÐœÐŸ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ».|Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÑÐŸÑÐœÐŸ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Ð€Ð°Ð¹Ð»ÑÑ Ðµ ÐºÐ°ÑÐµÐœ ÑÐ°ÑÑÐžÑÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ð€Ð°Ð¹Ð»ÑÑ ÐœÐµ Ð±ÐµÑÐµ ÐºÐ°ÑÐµÐœ.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Ð php.ini ÐœÐµ Ðµ ÐºÐŸÐœÑÐžÐ³ÑÑÐžÑÐ°ÐœÐ° Ð²ÑÐµÐŒÐµÐœÐœÐ° ÐŽÐžÑÐµÐºÑÐŸÑÐžÑ ÐžÐ»Ðž ÐºÐŸÐœÑÐžÐ³ÑÑÐžÑÐ°ÐœÐ°ÑÐ° ÐŽÐžÑÐµÐºÑÐŸÑÐžÑ ÐœÐµ ÑÑÑÐµÑÑÐ²ÑÐ²Ð°.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>ÐÐµ ÐŒÐŸÐ¶Ðµ ÐŽÐ° Ð·Ð°Ð¿ÐžÑÐµ Ð²ÑÐµÐŒÐµÐœÐµÐœ ÑÐ°Ð¹Ð» ÐœÐ° ÐŽÐžÑÐºÐ°.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP ÑÐ°Ð·ÑÐžÑÐµÐœÐžÐµ Ð¿ÑÐµÐŽÐžÐ·Ð²ÐžÐºÐ° Ð¿ÑÐµÐºÑÑÐ²Ð°ÐœÐµ ÐœÐ° ÐºÐ°ÑÐ²Ð°ÐœÐµÑÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>ÐÐŸÐ»ÐµÐºÑÐžÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° ÑÑÐŽÑÑÐ¶Ð° Ð¿ÐŸÐœÐµ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑ.|ÐÐŸÐ»ÐµÐºÑÐžÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° ÑÑÐŽÑÑÐ¶Ð° Ð¿ÐŸÐœÐµ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>ÐÐŸÐ»ÐµÐºÑÐžÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° ÑÑÐŽÑÑÐ¶Ð° ÐœÐ°Ð¹-ÐŒÐœÐŸÐ³ÐŸ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑ.|ÐÐŸÐ»ÐµÐºÑÐžÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° ÑÑÐŽÑÑÐ¶Ð° ÐœÐ°Ð¹-ÐŒÐœÐŸÐ³ÐŸ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>ÐÐŸÐ»ÐµÐºÑÐžÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° ÑÑÐŽÑÑÐ¶Ð° ÑÐŸÑÐœÐŸ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑ.|ÐÐŸÐ»ÐµÐºÑÐžÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° ÑÑÐŽÑÑÐ¶Ð° ÑÐŸÑÐœÐŸ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ÐÐµÐ²Ð°Ð»ÐžÐŽÐµÐœ ÐœÐŸÐŒÐµÑ ÐœÐ° ÐºÐ°ÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>ÐÐµÐ¿ÐŸÐŽÐŽÑÑÐ¶Ð°Ðœ ÑÐžÐ¿ ÐºÐ°ÑÑÐ° ÐžÐ»Ðž ÐœÐµÐ²Ð°Ð»ÐžÐŽÐµÐœ ÐœÐŸÐŒÐµÑ ÐœÐ° ÐºÐ°ÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÐÐµÐ¶ÐŽÑÐœÐ°ÑÐŸÐŽÐµÐœ ÐœÐŸÐŒÐµÑ ÐœÐ° Ð±Ð°ÐœÐºÐŸÐ²Ð° ÑÐŒÐµÑÐºÐ° (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ ÐœÐžÑÐŸ Ð²Ð°Ð»ÐžÐŽÐµÐœ ISBN-10, ÐœÐžÑÐŸ Ð²Ð°Ð»ÐžÐŽÐµÐœ ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° Ð²Ð°Ð»ÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÑÐ°Ð²ÐœÐ° ÐœÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð¿ÐŸ-Ð³ÐŸÐ»ÑÐŒÐ° ÐŸÑ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð¿ÐŸ-Ð³ÐŸÐ»ÑÐŒÐ° ÐžÐ»Ðž ÑÐ°Ð²ÐœÐ° ÐœÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐžÐŽÐµÐœÑÐžÑÐœÐ° Ñ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð¿ÐŸ-ÐŒÐ°Ð»ÐºÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð¿ÐŸ-ÐŒÐ°Ð»ÐºÐ° ÐžÐ»Ðž ÑÐ°Ð²ÐœÐ° ÐœÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÑÐ°Ð²ÐœÐ° ÐœÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐžÐŽÐµÐœÑÐžÑÐœÐ° Ñ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµÑÐŸ Ðµ Ñ ÑÐ²ÑÑÐŽÐµ Ð³ÐŸÐ»ÑÐŒÐ° Ð¿ÑÐŸÐ¿ÐŸÑÑÐžÑ ({{ ratio }}). ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÐœÐ°ÑÐ° Ð¿ÑÐŸÐ¿ÐŸÑÑÐžÑ ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ðµ {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµÑÐŸ Ðµ Ñ ÑÐ²ÑÑÐŽÐµ ÐŒÐ°Ð»ÐºÐ° Ð¿ÑÐŸÐ¿ÐŸÑÑÐžÑ ({{ ratio }}). ÐÐžÐœÐžÐŒÐ°Ð»ÐœÐ°ÑÐ° Ð¿ÑÐŸÐ¿ÐŸÑÑÐžÑ ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ðµ {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµÑÐŸ Ðµ ÐºÐ²Ð°ÐŽÑÐ°Ñ ({{ width }}x{{ height }}px). Ð¢Ð°ÐºÐžÐ²Ð° ÐžÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ ÐœÐµ ÑÐ° ÑÐ°Ð·ÑÐµÑÐµÐœÐž.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµÑÐŸ Ðµ Ñ Ð¿ÐµÐ¹Ð·Ð°Ð¶ÐœÐ° ÐŸÑÐžÐµÐœÑÐ°ÑÐžÑ ({{ width }}x{{ height }}px). ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ Ñ ÑÐ°ÐºÐ°Ð²Ð° ÐŸÑÐžÐµÐœÑÐ°ÑÐžÑ ÐœÐµ ÑÐ° ÑÐ°Ð·ÑÐµÑÐµÐœÐž.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµÑÐŸ Ðµ Ñ Ð¿ÐŸÑÑÑÐµÑÐœÐ° ÐŸÑÐžÐµÐœÑÐ°ÑÐžÑ ({{ width }}x{{ height }}px). ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ Ñ ÑÐ°ÐºÐ°Ð²Ð° ÐŸÑÐžÐµÐœÑÐ°ÑÐžÑ ÐœÐµ ÑÐ° ÑÐ°Ð·ÑÐµÑÐµÐœÐž.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>ÐÑÐ°Ð·ÐœÐž ÑÐ°Ð¹Ð»ÐŸÐ²Ðµ ÐœÐµ ÑÐ° ÑÐ°Ð·ÑÐµÑÐµÐœÐž.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Ð¥ÐŸÑÑÑÑ Ðµ ÐœÐµÐŽÐŸÑÑÑÐ¿ÐµÐœ.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ ÑÑÐ²Ð¿Ð°ÐŽÐ° Ñ ÐŸÑÐ°ÐºÐ²Ð°ÐœÐ°ÑÐ° {{ charset }} ÐºÐŸÐŽÐžÑÐŸÐ²ÐºÐ°.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÐÐžÐ·ÐœÐµÑ ÐžÐŽÐµÐœÑÐžÑÐžÐºÐ°ÑÐžÐŸÐœÐµÐœ ÐºÐŸÐŽ (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>ÐÑÐµÑÐºÐ°</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐºÑÐ°ÑÐœÐŸ ÑÐžÑÐ»ÐŸ ÐœÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>ÐÐžÐ·ÐœÐµÑ ÐžÐŽÐµÐœÑÐžÑÐžÐºÐ°ÑÐžÐŸÐœÐœÐžÑÑ ÐºÐŸÐŽ (BIC) ÐœÐµ Ðµ ÑÐ²ÑÑÐ·Ð°Ðœ Ñ IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>ÐÐŸÐ»ÐµÐºÑÐžÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° ÑÑÐŽÑÑÐ¶Ð° ÑÐ°ÐŒÐŸ ÑÐœÐžÐºÐ°Ð»ÐœÐž ÐµÐ»ÐµÐŒÐµÐœÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð¿ÐŸÐ»ÐŸÐ¶ÐžÑÐµÐ»ÐœÐŸ ÑÐžÑÐ»ÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° Ð±ÑÐŽÐµ Ð¿ÐŸÐ»ÐŸÐ¶ÐžÑÐµÐ»ÐœÐŸ ÑÐžÑÐ»ÐŸ ÐžÐ»Ðž ÐœÑÐ»Ð°.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐŸÑÑÐžÑÐ°ÑÐµÐ»ÐœÐŸ ÑÐžÑÐ»ÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐŸÑÑÐžÑÐ°ÑÐµÐ»ÐœÐŸ ÑÐžÑÐ»ÐŸ ÐžÐ»Ðž ÐœÑÐ»Ð°.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° ÑÐ°ÑÐŸÐ²Ð° Ð·ÐŸÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Ð¢Ð°Ð·Ðž Ð¿Ð°ÑÐŸÐ»Ð° Ðµ ÐºÐŸÐŒÐ¿ÑÐŸÐŒÐµÑÐžÑÐ°ÐœÐ°, ÐœÐµ ÐŒÐŸÐ¶Ðµ ÐŽÐ° Ð±ÑÐŽÐµ ÐžÐ·Ð¿ÐŸÐ»Ð·Ð²Ð°ÐœÐ°. ÐÐŸÐ»Ñ ÐžÐ·Ð¿ÐŸÐ»Ð·Ð²Ð°Ð¹ÑÐµ ÐŽÑÑÐ³Ð° Ð¿Ð°ÑÐŸÐ»Ð°.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐŒÐµÐ¶ÐŽÑ {{ min }} Ðž {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ hostname.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>ÐÑÐŸÑÑ ÐœÐ° ÐµÐ»ÐµÐŒÐµÐœÑÐžÑÐµ Ð² ÑÐ°Ð·Ðž ÐºÐŸÐ»ÐµÐºÑÐžÑ ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐºÑÐ°ÑÐµÐœ ÐœÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° ÐŸÑÐ³ÐŸÐ²Ð°ÑÑ ÐœÐ° Ð¿ÐŸÐœÐµ ÐµÐŽÐœÐŸ ÐŸÑ ÑÐ»ÐµÐŽÐœÐžÑÐµ ÐŸÐ³ÑÐ°ÐœÐžÑÐµÐœÐžÑ:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>ÐÑÐµÐºÐž ÐµÐ»ÐµÐŒÐµÐœÑ ÐŸÑ ÑÐ°Ð·Ðž ÐºÐŸÐ»ÐµÐºÑÐžÑ ÑÑÑÐ±Ð²Ð° ÐŽÐ° ÐŸÑÐ³ÐŸÐ²Ð°ÑÑ ÐœÐ° ÑÐŸÐ±ÑÑÐ²ÐµÐœÐžÑ ÑÐž ÐœÐ°Ð±ÐŸÑ ÐŸÑ ÐŸÐ³ÑÐ°ÐœÐžÑÐµÐœÐžÑ.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÐÐµÐ¶ÐŽÑÐœÐ°ÑÐŸÐŽÐµÐœ ÐžÐŽÐµÐœÑÐžÑÐžÐºÐ°ÑÐžÐŸÐœÐµÐœ ÐœÐŸÐŒÐµÑ ÐœÐ° ÑÐµÐœÐœÐž ÐºÐœÐžÐ¶Ð° (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÐžÐ·ÑÐ°Ð·.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ CSS ÑÐ²ÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° CIDR ÐœÐŸÑÐ°ÑÐžÑ.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐ° ÐŒÑÐµÐ¶ÐŸÐ²Ð°ÑÐ° ÐŒÐ°ÑÐºÐ° ÑÑÑÐ±Ð²Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐŒÐµÐ¶ÐŽÑ {{ min }} Ðž {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>ÐÐŒÐµÑÐŸ ÐœÐ° ÑÐ°Ð¹Ð»Ð° Ðµ ÑÐ²ÑÑÐŽÐµ ÐŽÑÐ»Ð³ÐŸ. Ð¢ÑÑÐ±Ð²Ð° ÐŽÐ° ÑÑÐŽÑÑÐ¶Ð° ÐœÐµ Ð¿ÐŸÐ²ÐµÑÐµ ÐŸÑ {{ filename_max_length }} ÑÐžÐŒÐ²ÐŸÐ».|ÐÐŒÐµÑÐŸ ÐœÐ° ÑÐ°Ð¹Ð»Ð° Ðµ ÑÐ²ÑÑÐŽÐµ ÐŽÑÐ»Ð³ÐŸ. Ð¢ÑÑÐ±Ð²Ð° ÐŽÐ° ÑÑÐŽÑÑÐ¶Ð° ÐœÐµ Ð¿ÐŸÐ²ÐµÑÐµ ÐŸÑ {{ filename_max_length }} ÑÐžÐŒÐ²ÐŸÐ»Ð°.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Ð¡Ð»ÐŸÐ¶ÐœÐŸÑÑÑÐ° ÐœÐ° Ð¿Ð°ÑÐŸÐ»Ð°ÑÐ° Ðµ ÑÐ²ÑÑÐŽÐµ ÐŒÐ°Ð»ÐºÐ°. ÐÐŸÐ»Ñ ÐžÐ·Ð¿ÐŸÐ»Ð·Ð²Ð°Ð¹ÑÐµ Ð¿ÐŸ-ÑÐ»ÐŸÐ¶ÐœÐ° Ð¿Ð°ÑÐŸÐ»Ð°.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÑÑÐŽÑÑÐ¶Ð° ÑÐžÐŒÐ²ÐŸÐ»Ðž, ÐºÐŸÐžÑÐŸ ÐœÐµ ÑÐ° Ð¿ÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐž ÐŸÑ ÑÐµÐºÑÑÐŸÑÐŸ ÐœÐžÐ²ÐŸ ÐœÐ° ÐŸÐ³ÑÐ°ÐœÐžÑÐµÐœÐžÐµ.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>ÐÐ·Ð¿ÐŸÐ»Ð·Ð²Ð°ÐœÐµÑÐŸ ÐœÐ° ÐœÐµÐ²ÐžÐŽÐžÐŒÐž ÑÐžÐŒÐ²ÐŸÐ»Ðž ÐœÐµ Ðµ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Ð¡ÐŒÐµÑÐ²Ð°ÐœÐµÑÐŸ ÐœÐ° ÑÐžÑÐ»Ð° ÐŸÑ ÑÐ°Ð·Ð»ÐžÑÐœÐž ÑÐºÑÐžÐ¿ÑÐŸÐ²Ðµ ÐœÐµ Ðµ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>ÐÐ·Ð¿ÐŸÐ»Ð·Ð²Ð°ÐœÐµÑÐŸ ÐœÐ° ÑÐºÑÐžÑÐž ÐœÐ°ÑÐ»ÐŸÐ¶ÐµÐœÐž ÑÐžÐŒÐ²ÐŸÐ»Ðž ÐœÐµ Ðµ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Ð Ð°Ð·ÑÐžÑÐµÐœÐžÐµÑÐŸ ÐœÐ° ÑÐ°Ð¹Ð»Ð° Ðµ ÐœÐµÐ²Ð°Ð»ÐžÐŽÐœÐŸ ({{ extension }}). Ð Ð°Ð·ÑÐµÑÐµÐœÐžÑÐµ ÑÐ°Ð·ÑÐžÑÐµÐœÐžÑ ÑÐ° {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>ÐÑÐºÑÐžÑÐŸÑÐŸ ÐºÐŸÐŽÐžÑÐ°ÐœÐµ ÐœÐ° Ð·ÐœÐ°ÑÐžÑÐµ Ðµ ÐœÐµÐ²Ð°Ð»ÐžÐŽÐœÐŸ ({{ detected }}). Ð Ð°Ð·ÑÐµÑÐµÐœÐžÑÐµ ÐºÐŸÐŽÐžÑÐ°ÐœÐžÑ ÑÐ° {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Ð¡ÑÐŸÐ¹ÐœÐŸÑÑÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ MAC Ð°ÐŽÑÐµÑ.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>ÐÐ° ÑÐŸÐ·Ðž URL Ð»ÐžÐ¿ÑÐ²Ð° ÐŽÐŸÐŒÐµÐ¹Ðœ ÐŸÑ ÐœÐ°Ð¹-Ð²ÐžÑÐŸÐºÐŸ ÐœÐžÐ²ÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.bs.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.bs.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.bs.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="bs" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Ova vrijednost bi trebalo da bude "netaÄno" (false).</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Ova vrijednost bi trebalo da bude "taÄno" (true).</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ova vrijednost bi trebalo da bude tipa {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ova vrijednost bi trebalo da bude prazna.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Odabrana vrijednost nije validan izbor.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Morate odabrati barem {{ limit }} moguÄnost.|Morate odabrati barem {{ limit }} moguÄnosti.|Morate odabrati barem {{ limit }} moguÄnosti.  </target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Morate odabrati najviÅ¡e {{ limit }} moguÄnost.|Morate odabrati najviÅ¡e {{ limit }} moguÄnosti.|Morate odabrati najviÅ¡e {{ limit }} moguÄnosti.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Jedna ili viÅ¡e datih vrijednosti nisu validne.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ovo polje nije oÄekivano.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ovo polje nedostaje.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ova vrijednost nije ispravan datum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ova vrijednost nije ispravnog datum-vrijeme (datetime) formata.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ova vrijednost nije ispravna e-mail adresa.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Ova datoteka ne moÅŸe biti pronaÄena.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Ova datoteka nije Äitljiva.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ova datoteka je prevelika ({{ size }} {{ suffix }}). NajveÄa dozvoljena veliÄina je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mime tip datoteke nije ispravan ({{ type }}). Dozvoljeni mime tipovi su {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ova vrijednost bi trebalo da bude {{ limit }} ili manje.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ova vrijednost je predugaÄka. Trebalo bi da ima {{ limit }} karakter ili manje.|Ova vrijednost je predugaÄka. Trebalo bi da ima {{ limit }} karaktera ili manje.|Ova vrijednost je predugaÄka. Trebalo bi da ima {{ limit }} karaktera ili manje.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ova vrijednost bi trebalo da bude {{ limit }} ili viÅ¡e.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ova vrijednost je prekratka. Trebalo bi da ima {{ limit }} karakter ili viÅ¡e.|Ova vrijednost je prekratka. Trebalo bi da ima {{ limit }} karaktera ili viÅ¡e.|Ova vrijednost je prekratka. Trebalo bi da ima {{ limit }} karaktera ili viÅ¡e.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ova vrijednost ne bi trebalo da bude prazna.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ova vrijednost ne bi trebalo da bude null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ova vrijednost bi trebalo da bude null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ova vrijednost nije ispravna.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ova vrijednost nije ispravno vrijeme.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ova vrijednost nije ispravan URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Obje vrijednosti bi trebalo da budu jednake.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ova datoteka je prevelika. NajveÄa dozvoljena veliÄina je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ova datoteka je prevelika.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Ova datoteka ne moÅŸe biti prenijeta (uploaded).</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ova vrijednost bi trebalo da bude ispravan broj.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ova datoteka nije validna slika.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Ova vrijednost nije valjana IP adresa.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ova vrijednost nije validan jezik.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ova vrijednost nije validna regionalna oznaka.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ova vrijednost nije validna drÅŸava.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ova vrijednost je veÄ upotrebljena.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Nije moguÄe otkriti veliÄinu ove slike.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Å irina slike je prevelika ({{ width }}px). NajveÄa dozvoljena Å¡irina je {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Å irina slike je premala ({{ width }}px). Najmanja dozvoljena Å¡irina je {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>DuÅŸina slike je prevelika ({{ height }}px). NajveÄa dozvoljena duÅŸina je {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>DuÅŸina slike je premala ({{ height }}px). Najmanja dozvoljena duÅŸina je {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ova vrijednost bi trebalo da bude trenutna korisniÄka lozinka.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ova vrijednost bi trebalo da ima taÄno {{ limit }} karakter.|Ova vrijednost bi trebalo da ima taÄno {{ limit }} karaktera.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Datoteka je samo djelimiÄno prenijeta (uploaded).</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nijedna datoteka nije prenijeta (uploaded).</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">Privremeni direktorij nije konfiguriran u php.ini, ili konfigurirani direktorij ne postoji.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Privremenu datoteku nije moguÄe upisati na disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Prenos datoteke nije uspio zbog PHP ekstenzije.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ova kolekcija bi trebalo da sadrÅŸi {{ limit }} ili viÅ¡e elemenata.|Ova kolekcija bi trebalo da sadrÅŸi {{ limit }} ili viÅ¡e elemenata.|Ova kolekcija bi trebalo da sadrÅŸi {{ limit }} ili viÅ¡e elemenata.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ova kolekcija bi trebalo da sadrÅŸi {{ limit }} ili manje elemenata.|Ova kolekcija bi trebalo da sadrÅŸi {{ limit }} ili manje elemenata.|Ova kolekcija bi trebalo da sadrÅŸi {{ limit }} ili manje elemenata.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ova kolekcija bi trebalo da sadrÅŸi taÄno {{ limit }} element.|Ova kolekcija bi trebalo da sadrÅŸi taÄno {{ limit }} elementa.|Ova kolekcija bi trebalo da sadrÅŸi taÄno {{ limit }} elemenata.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Broj kartice je neispravan.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tip kartice nije podrÅŸan ili je broj kartice neispravan.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Ova vrijednost nije valjan MeÄunarodni broj bankovnog raÄuna (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ova vrijednost nije ispravan ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ova vrijednost nije ispravan ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ova vrijednost nije ispravan ISBN-10 niti ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ova vrijednost nije ispravan ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ova vrijednost nije ispravna valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebalo da bude jednaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebalo da bude veÄa od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebalo da bude jednaka ili veÄa od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebalo da bude identiÄna {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebalo da bude manja od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebalo da bude jednaka ili manja od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebalo da bude razliÄita od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebalo da bude identiÄna sa {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Razmjera ove slike je prevelika ({{ ratio }}). Maksimalna dozvoljena razmjera je {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Razmjera ove slike je premala ({{ ratio }}). Minimalna oÄekivana razmjera je {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Ova slika je kvadratnog oblika ({{ width }}x{{ height }}px). Kvadratne slike nisu dozvoljene.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Ova slika je orijentisana horizontalno (landscape) ({{ width }}x{{ height }}px). Horizontalno orijentisane slike nisu dozvoljene.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Ova slika je orijentisana vertikalno (portrait) ({{ width }}x{{ height }}px). Vertikalno orijentisane slike nisu dozvoljene.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Prazna datoteka nije dozvoljena.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Nije moguÄe odrediti posluÅŸitelja (host).</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ova vrijednost ne odgovara oÄekivanom {{ charset }} setu karaktera (charset).</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Ova vrijednost nije valjan Poslovni identifikacijski kod (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>GreÅ¡ka</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Ova vrijednost nije valjan UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ova vrijednost bi trebalo da bude djeljiva sa {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ovaj poslovni identifikacioni kod (BIC) nije povezan sa IBAN-om {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Ova vrijednost bi trebalo da bude validan JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ova kolekcija bi trebala da sadrÅŸi samo jedinstvene elemente.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ova vrijednost bi trebalo da bude pozitivna.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ova vrijednost bi trebalo da bude pozitivna ili jednaka nuli.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ova vrijednost bi trebalo da bude negativna.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ova vrijednost bi trebalo da bude negativna ili jednaka nuli.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ova vrijednost nije validna vremenska zona.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Ova lozinka je procurila u nekom od sluÄajeva kompromitovanja podataka, nemojte je koristiti. Koristite drugu lozinku.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ova vrijednosti bi trebala biti izmeÄu {{ min }} i {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Ova vrijednost nije ispravno ime posluÅŸitelja (hostname).</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Broj elemenata u ovoj kolekciji bi trebalo da bude djeljiv sa {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Ova vrijednost bi trebalo da zadovoljava namjanje jedno od narednih ograniÄenja:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Svaki element ove kolekcije bi trebalo da zadovolji sopstveni skup ograniÄenja.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Ova vrijednost nije ispravna meÄunarodna identifikaciona oznaka hartija od vrijednosti (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Ova vrijednost bi trebala biti vaÅŸeÄi izraz.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Ova vrijednost nije vaÅŸeÄa CSS boja.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Ova vrijednost nije vaÅŸeÄa CIDR notacija.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Vrijednost NetMask bi trebala biti izmeÄu {{min}} i {{max}}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Ime datoteke je predugaÄko. Trebao bi imati {{ filename_max_length }} znak ili manje.|Naziv fajla je predugaÄak. Trebao bi imati {{ filename_max_length }} znakova ili manje.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>JaÄina lozinke je preniska. Molimo koristite jaÄu lozinku.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Ova vrijednost sadrÅŸi znakove koji nisu dozvoljeni trenutnim nivoom ograniÄenja.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Upotreba nevidljivih znakova nije dozvoljena.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Nije dozvoljeno mijeÅ¡anje brojeva iz razliÄitih pisama.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Upotreba skrivenih preklapajuÄih znakova nije dozvoljena.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">Ekstenzija datoteke je nevaÅŸeÄa ({{ extension }}). Dozvoljene ekstenzije su {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">Otkriveno kodiranje karaktera je nevaÅŸeÄe ({{ detected }}). Dozvoljena kodiranja su {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Ova vrijednost nije valjana MAC adresa.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Ovom URL-u nedostaje domena najviÅ¡eg nivoa.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ca.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ca.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ca.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="ca" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Aquest valor hauria de ser fals.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Aquest valor hauria de ser cert.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Aquest valor hauria de ser del tipus {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Aquest valor hauria d'estar buit.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>El valor seleccionat no Ã©s una opciÃ³ vÃ lida.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Ha de seleccionar almenys {{ limit }} opciÃ³.|Ha de seleccionar almenys {{ limit }} opcions.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Ha de seleccionar com a mÃ xim {{ limit }} opciÃ³.|Ha de seleccionar com a mÃ xim {{ limit }} opcions.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Un o mÃ©s dels valors facilitats sÃ³n incorrectes.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Aquest camp no s'esperava.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Aquest camp estÃ  desaparegut.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Aquest valor no Ã©s una data vÃ lida.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Aquest valor no Ã©s una data i hora vÃ lida.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Aquest valor no Ã©s una adreÃ§a d'email vÃ lida.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>No s'ha pogut trobar l'arxiu.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>No es pot llegir l'arxiu.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>L'arxiu Ã©s massa gran ({{ size }} {{ suffix }}). La grandÃ ria mÃ xima permesa Ã©s {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>El tipus mime de l'arxiu no Ã©s vÃ lid ({{ type }}). Els tipus mime vÃ lids sÃ³n {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Aquest valor hauria de ser {{ limit }} o menys.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Aquest valor Ã©s massa llarg. Hauria de tenir {{ limit }} carÃ cter o menys.|Aquest valor Ã©s massa llarg. Hauria de tenir {{ limit }} carÃ cters o menys.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Aquest valor hauria de ser {{ limit }} o mÃ©s.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Aquest valor Ã©s massa curt. Hauria de tenir {{ limit }} carÃ cters o mÃ©s.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Aquest valor no hauria d'estar buit.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Aquest valor no hauria de ser null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Aquest valor hauria de ser null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Aquest valor no Ã©s vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Aquest valor no Ã©s una hora vÃ lida.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Aquest valor no Ã©s un URL vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Els dos valors haurien de ser iguals.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>L'arxiu Ã©s massa gran. La mida mÃ xima permesa Ã©s {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>L'arxiu Ã©s massa gran.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>No es pot pujar l'arxiu.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Aquest valor hauria de ser un nombre vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>L'arxiu no Ã©s una imatge vÃ lida.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Aquest valor no Ã©s una adreÃ§a IP vÃ lida.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Aquest valor no Ã©s un idioma vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Aquest valor no Ã©s una localitzaciÃ³ vÃ lida.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Aquest valor no Ã©s un paÃ­s vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Aquest valor ja s'ha utilitzat.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>No s'ha pogut determinar la grandÃ ria de la imatge.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>L'amplÃ ria de la imatge Ã©s massa gran ({{ width }}px). L'amplÃ ria mÃ xima permesa Ã©s {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>L'amplÃ ria de la imatge Ã©s massa petita ({{ width }}px). L'amplÃ ria mÃ­nima requerida Ã©s {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>L'altura de la imatge Ã©s massa gran ({{ height }}px). L'altura mÃ xima permesa Ã©s {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>L'altura de la imatge Ã©s massa petita ({{ height }}px). L'altura mÃ­nima requerida Ã©s {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Aquest valor hauria de ser la contrasenya actual de l'usuari.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Aquest valor hauria de tenir exactament {{ limit }} carÃ cter.|Aquest valor hauria de tenir exactament {{ limit }} carÃ cters.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>L'arxiu va ser nomÃ©s pujat parcialment.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Cap arxiu va ser pujat.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>No s'ha configurat cap carpeta temporal en php.ini, o la carpeta configurada no existeix.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>No es va poder escriure l'arxiu temporal en el disc.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Una extensiÃ³ de PHP va fer que la pujada fallarÃ .</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Aquesta colÂ·lecciÃ³ ha de contenir {{ limit }} element o mÃ©s.|Aquesta colÂ·lecciÃ³ ha de contenir {{ limit }} elements o mÃ©s.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Aquesta colÂ·lecciÃ³ ha de contenir {{ limit }} element o menys.|Aquesta colÂ·lecciÃ³ ha de contenir {{ limit }} elements o menys.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Aquesta colÂ·lecciÃ³ ha de contenir exactament {{ limit }} element.|Aquesta colÂ·lecciÃ³ ha de contenir exactament {{ limit }} elements.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>NÃºmero de targeta invÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipus de targeta no suportada o nÃºmero de targeta invÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Aquest valor no Ã©s un NÃºmero de Compte Bancari Internacional (IBAN) vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Aquest valor no Ã©s un ISBN-10 vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Aquest valor no Ã©s un ISBN-13 vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Aquest valor no Ã©s ni un ISBN-10 vÃ lid ni un ISBN-13 vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Aquest valor no Ã©s un ISSN vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Aquest valor no Ã©s una divisa vÃ lida.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Aquest valor hauria de ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Aquest valor hauria de ser mÃ©s gran a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Aquest valor hauria de ser major o igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Aquest valor hauria de ser idÃšntic a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Aquest valor hauria de ser menor a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Aquest valor hauria de ser menor o igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Aquest valor no hauria de ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Aquest valor no hauria de ser idÃšntic a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>La proporciÃ³ de la imatge Ã©s massa gran ({{ ratio }}). La mÃ xima proporciÃ³ permesa Ã©s {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>La proporciÃ³ de la imatge Ã©s massa petita ({{ ratio }}). La mÃ­nima proporciÃ³ permesa Ã©s {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>La imatge Ã©s quadrada({{ width }}x{{ height }}px). Les imatges quadrades no estan permeses.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>La imatge estÃ  orientada horitzontalment ({{ width }}x{{ height }}px). Les imatges orientades horitzontalment no estan permeses.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>La imatge estÃ  orientada verticalment ({{ width }}x{{ height }}px). Les imatges orientades verticalment no estan permeses.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>No estÃ  permÃšs un fitxer buit.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>No s'ha pogut resoldre l'amfitriÃ³.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Aquest valor no coincideix amb l'esperat {{ charset }} joc de carÃ cters.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Aquest valor no Ã©s un Codi d'identificaciÃ³ bancari (BIC) vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Error</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Aquest valor no Ã©s un UUID vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Aquest valor ha de ser mÃºltiple de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Aquest Codi d'identificaciÃ³ bancari (BIC) no estÃ  associat amb l'IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Aquest valor hauria de ser un JSON vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Aquesta colÂ·lecciÃ³ nomÃ©s hauria de contenir elements Ãºnics.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Aquest valor hauria de ser positiu.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Aquest valor ha de ser positiu o zero.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Aquest valor ha de ser negatiu.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Aquest valor ha de ser negatiu o zero.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Aquest valor no Ã©s una zona horÃ ria vÃ lida.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Aquesta contrasenya s'ha filtrat en cas de violaciÃ³ de dades, no s'ha d'utilitzar. Utilitzeu una altra contrasenya.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Aquest valor ha d'estar entre {{ min }} i {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Aquest valor no Ã©s un nom d'amfitriÃ³ vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>El nombre d'elements d'aquesta colÂ·lecciÃ³ ha de ser mÃºltiple de {{compared_value}}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Aquest valor ha de satisfer almenys una de les restriccions segÃŒents:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Cada element d'aquesta colÂ·lecciÃ³ hauria de satisfer el seu propi conjunt de restriccions.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Aquest valor no Ã©s un nÃºmero d'identificaciÃ³ de valors internacionals (ISIN) vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Aquest valor hauria de ser una expressiÃ³ vÃ lida.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Aquest valor no Ã©s un color CSS vÃ lid.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Aquest valor no Ã©s una notaciÃ³ CIDR vÃ lida.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>El valor de la mÃ scara de xarxa hauria d'estar entre {{ min }} i {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>El nom del fitxer Ã©s massa llarg. Ha de tenir {{ filename_max_length }} carÃ cter o menys.|El nom del fitxer Ã©s massa llarg. Ha de tenir {{ filename_max_length }} carÃ cters o menys.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>La contrasenya Ã©s massa feble. Si us plau, feu servir una contrasenya mÃ©s segura.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Aquest valor contÃ© carÃ cters que no estan permisos segons el nivell de restricciÃ³ actual.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>No es permet l'Ãºs de carÃ cters invisibles.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>No es permet barrejar nÃºmeros de diferents scripts.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>No es permet l'Ãºs de carÃ cters superposats ocults.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>L'extensiÃ³ del fitxer no Ã©s vÃ lida ({{ extension }}). Les extensions permeses sÃ³n {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>S'ha detectat que la codificaciÃ³ de carÃ cters no Ã©s vÃ lida ({{ detected }}). Les codificacions permeses sÃ³n {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Aquest valor no Ã©s una adreÃ§a MAC vÃ lida.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Aquesta URL no contÃ© un domini de primer nivell.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target>Aquest valor Ã©s massa curt. Ha de contenir almenys una paraula.|Aquest valor Ã©s massa curt. Ha de contenir almenys {{ min }} paraules.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target>Aquest valor Ã©s massa llarg. Ha de contenir una paraula.|Aquest valor Ã©s massa llarg. Ha de contenir {{ max }} paraules o menys.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.cs.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.cs.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.cs.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="cs" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Tato hodnota musÃ­ bÃœt nepravdivÃ¡ (false).</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Tato hodnota musÃ­ bÃœt pravdivÃ¡ (true).</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Tato hodnota musÃ­ bÃœt typu {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Tato hodnota musÃ­ bÃœt prÃ¡zdnÃ¡.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>VybranÃ¡ hodnota nenÃ­ platnou moÅŸnostÃ­.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>MusÃ­ bÃœt vybrÃ¡na nejmÃ©nÄ {{ limit }} moÅŸnost.|MusÃ­ bÃœt vybrÃ¡ny nejmÃ©nÄ {{ limit }} moÅŸnosti.|MusÃ­ bÃœt vybrÃ¡no nejmÃ©nÄ {{ limit }} moÅŸnostÃ­.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>MusÃ­ bÃœt vybrÃ¡na maximÃ¡lnÄ {{ limit }} moÅŸnost.|MusÃ­ bÃœt vybrÃ¡ny maximÃ¡lnÄ {{ limit }} moÅŸnosti.|MusÃ­ bÃœt vybrÃ¡no maximÃ¡lnÄ {{ limit }} moÅŸnostÃ­.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>NÄkterÃ© z uvedenÃœch hodnot jsou neplatnÃ©.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Toto pole nebylo oÄekÃ¡vÃ¡no.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Toto pole chybÃ­.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Tato hodnota nenÃ­ platnÃ© datum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Tato hodnota nenÃ­ platnÃ© datum s ÄasovÃœm Ãºdajem.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Tato hodnota nenÃ­ platnÃ¡ e-mailovÃ¡ adresa.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Soubor nebyl nalezen.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Soubor je neÄitelnÃœ.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Soubor je pÅÃ­liÅ¡ velkÃœ ({{ size }} {{ suffix }}). MaximÃ¡lnÃ­ povolenÃ¡ velikost souboru je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>NeplatnÃœ mime typ souboru ({{ type }}). PovolenÃ© mime typy souborÅ¯ jsou {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Tato hodnota musÃ­ bÃœt {{ limit }} nebo mÃ©nÄ.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Tato hodnota je pÅÃ­liÅ¡ dlouhÃ¡. MusÃ­ obsahovat maximÃ¡lnÄ {{ limit }} znak.|Tato hodnota je pÅÃ­liÅ¡ dlouhÃ¡. MusÃ­ obsahovat maximÃ¡lnÄ {{ limit }} znaky.|Tato hodnota je pÅÃ­liÅ¡ dlouhÃ¡. MusÃ­ obsahovat maximÃ¡lnÄ {{ limit }} znakÅ¯.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Tato hodnota musÃ­ bÃœt {{ limit }} nebo vÃ­ce.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Tato hodnota je pÅÃ­liÅ¡ krÃ¡tkÃ¡. MusÃ­ obsahovat minimÃ¡lnÄ {{ limit }} znak.|Tato hodnota je pÅÃ­liÅ¡ krÃ¡tkÃ¡. MusÃ­ obsahovat minimÃ¡lnÄ {{ limit }} znaky.|Tato hodnota je pÅÃ­liÅ¡ krÃ¡tkÃ¡. MusÃ­ obsahovat minimÃ¡lnÄ {{ limit }} znakÅ¯.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Tato hodnota nesmÃ­ bÃœt prÃ¡zdnÃ¡.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Tato hodnota nesmÃ­ bÃœt null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Tato hodnota musÃ­ bÃœt null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Tato hodnota nenÃ­ platnÃ¡.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Tato hodnota nenÃ­ platnÃœ ÄasovÃœ Ãºdaj.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Tato hodnota nenÃ­ platnÃ¡ URL adresa.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Tyto dvÄ hodnoty musÃ­ bÃœt stejnÃ©.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Soubor je pÅÃ­liÅ¡ velkÃœ. MaximÃ¡lnÃ­ povolenÃ¡ velikost souboru je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Soubor je pÅÃ­liÅ¡ velkÃœ.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Soubor se nepodaÅilo nahrÃ¡t.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Tato hodnota musÃ­ bÃœt ÄÃ­slo.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Tento soubor nenÃ­ obrÃ¡zek.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Tato hodnota nenÃ­ platnou IP adresou.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Tento jazyk neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Tato lokalizace neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Tato zemÄ neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Tato hodnota je jiÅŸ pouÅŸÃ­vÃ¡na.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>NepodaÅily se zjistit rozmÄry obrÃ¡zku.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ObrÃ¡zek je pÅÃ­liÅ¡ Å¡irokÃœ ({{ width }}px). MaximÃ¡lnÃ­ povolenÃ¡ Å¡Ã­Åka obrÃ¡zku je {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ObrÃ¡zek je pÅÃ­liÅ¡ ÃºzkÃœ ({{ width }}px). MinimÃ¡lnÃ­ Å¡Ã­Åka musÃ­ bÃœt {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ObrÃ¡zek je pÅÃ­liÅ¡ vysokÃœ ({{ height }}px). MaximÃ¡lnÃ­ povolenÃ¡ vÃœÅ¡ka obrÃ¡zku je {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ObrÃ¡zek je pÅÃ­liÅ¡ nÃ­zkÃœ ({{ height }}px). MinimÃ¡lnÃ­ vÃœÅ¡ka obrÃ¡zku musÃ­ bÃœt {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Tato hodnota musÃ­ bÃœt aktuÃ¡lnÃ­ heslo uÅŸivatele.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Tato hodnota musÃ­ mÃ­t pÅesnÄ {{ limit }} znak.|Tato hodnota musÃ­ mÃ­t pÅesnÄ {{ limit }} znaky.|Tato hodnota musÃ­ mÃ­t pÅesnÄ {{ limit }} znakÅ¯.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Byla nahrÃ¡na jen ÄÃ¡st souboru.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>ÅœÃ¡dnÃœ soubor nebyl nahrÃ¡n.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>V php.ini nebyla nastavena cesta k doÄasnÃ©mu adresÃ¡Åi, nebo nastavenÃœ adresÃ¡Å neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>DoÄasnÃœ soubor se nepodaÅilo zapsat na disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>RozÅ¡Ã­ÅenÃ­ PHP zabrÃ¡nilo nahrÃ¡nÃ­ souboru.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Tato kolekce musÃ­ obsahovat minimÃ¡lnÄ {{ limit }} prvek.|Tato kolekce musÃ­ obsahovat minimÃ¡lnÄ {{ limit }} prvky.|Tato kolekce musÃ­ obsahovat minimÃ¡lnÄ {{ limit }} prvkÅ¯.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Tato kolekce musÃ­ obsahovat maximÃ¡lnÄ {{ limit }} prvek.|Tato kolekce musÃ­ obsahovat maximÃ¡lnÄ {{ limit }} prvky.|Tato kolekce musÃ­ obsahovat maximÃ¡lnÄ {{ limit }} prvkÅ¯.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Tato kolekce musÃ­ obsahovat pÅesnÄ {{ limit }} prvek.|Tato kolekce musÃ­ obsahovat pÅesnÄ {{ limit }} prvky.|Tato kolekce musÃ­ obsahovat pÅesnÄ {{ limit }} prvkÅ¯.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>NeplatnÃ© ÄÃ­slo karty.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>NepodporovanÃœ typ karty nebo neplatnÃ© ÄÃ­slo karty.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Tato hodnota nenÃ­ platnÃœm MezinÃ¡rodnÃ­m bankovnÃ­m ÄÃ­slem ÃºÄtu (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Tato hodnota nenÃ­ platnÃ© ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Tato hodnota nenÃ­ platnÃ© ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Tato hodnota nenÃ­ platnÃ© ISBN-10 ani ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Tato hodnota nenÃ­ platnÃ© ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Tato mÄna neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Tato hodnota musÃ­ bÃœt rovna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Tato hodnota musÃ­ bÃœt vÄtÅ¡Ã­ neÅŸ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Tato hodnota musÃ­ bÃœt vÄtÅ¡Ã­ nebo rovna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Tato hodnota musÃ­ bÃœt typu {{ compared_value_type }} a zÃ¡roveÅ musÃ­ bÃœt rovna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Tato hodnota musÃ­ bÃœt menÅ¡Ã­ neÅŸ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Tato hodnota musÃ­ bÃœt menÅ¡Ã­ nebo rovna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Tato hodnota nesmÃ­ bÃœt rovna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Tato hodnota nesmÃ­ bÃœt typu {{ compared_value_type }} a zÃ¡roveÅ nesmÃ­ bÃœt rovna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>PomÄr stran obrÃ¡zku je pÅÃ­liÅ¡ velkÃœ ({{ ratio }}). MaximÃ¡lnÃ­ povolenÃœ pomÄr stran obrÃ¡zku je {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>PomÄr stran obrÃ¡zku je pÅÃ­liÅ¡ malÃœ ({{ ratio }}). MinimÃ¡lnÃ­ povolenÃœ pomÄr stran obrÃ¡zku je {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Strany obrÃ¡zku jsou ÄtvercovÃ© ({{ width }}x{{ height }}px). ÄtvercovÃ© obrÃ¡zky nejsou povolenÃ©.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>ObrÃ¡zek je orientovanÃœ na Å¡Ã­Åku ({{ width }}x{{ height }}px). ObrÃ¡zky orientovanÃ© na Å¡Ã­Åku nejsou povolenÃ©.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>ObrÃ¡zek je orientovanÃœ na vÃœÅ¡ku ({{ width }}x{{ height }}px). ObrÃ¡zky orientovanÃ© na vÃœÅ¡ku nejsou povolenÃ©.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Soubor nesmÃ­ bÃœt prÃ¡zdnÃœ.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Hostitele nebylo moÅŸnÃ© rozpoznat.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Tato hodnota neodpovÃ­dÃ¡ oÄekÃ¡vanÃ© znakovÃ© sadÄ {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Tato hodnota nenÃ­ platnÃœm KÃ³dem obchodnÃ­ho identifikÃ¡toru (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Chyba</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Tato hodnota nenÃ­ platnÃœm UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Tato hodnota musÃ­ bÃœt nÃ¡sobek hodnoty {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>BankovnÃ­ identifikaÄnÃ­ kÃ³d (BIC) neodpovÃ­dÃ¡ mezinÃ¡rodnÃ­mu ÄÃ­slu ÃºÄtu (IBAN) {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Tato hodnota musÃ­ bÃœt validnÃ­ JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Tato kolekce musÃ­ obsahovat pouze unikÃ¡tnÃ­ prvky.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Tato hodnota musÃ­ bÃœt kladnÃ¡.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Tato hodnota musÃ­ bÃœt buÄ kladnÃ¡ nebo nula.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Tato hodnota musÃ­ bÃœt zÃ¡pornÃ¡.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Tato hodnota musÃ­ bÃœt buÄ zÃ¡pornÃ¡ nebo nula.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Tato ÄasovÃ¡ zÃ³na neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>ZadanÃ© heslo bylo souÄÃ¡stÃ­ Ãºniku dat, takÅŸe ho nenÃ­ moÅŸnÃ© pouÅŸÃ­t. PouÅŸijte prosÃ­m jinÃ© heslo.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Hodnota musÃ­ bÃœt mezi {{ min }} a {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Tato hodnota nenÃ­ platnÃœ hostname.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>PoÄet prvkÅ¯ v tÃ©to kolekci musÃ­ bÃœt nÃ¡sobek {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Tato hodnota musÃ­ splÅovat alespoÅ jedno z nÃ¡sledujÃ­cÃ­ch omezenÃ­:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>KaÅŸdÃœ prvek v tÃ©to kolekci musÃ­ splÅovat svÃ¡ vlastnÃ­ omezenÃ­.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Tato hodnota nenÃ­ platnÃ© mezinÃ¡rodnÃ­ identifikaÄnÃ­ ÄÃ­slo cennÃ©ho papÃ­ru (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Tato hodnota musÃ­ bÃœt platnÃœ vÃœraz.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Tato hodnota nenÃ­ platnÃ¡ barva CSS.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Tato hodnota nenÃ­ platnÃ¡ notace CIDR.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Hodnota masky sÃ­tÄ musÃ­ bÃœt mezi {{ min }} a {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>NÃ¡zev souboru je pÅÃ­liÅ¡ dlouhÃœ. MÄl by obsahovat {{ filename_max_length }} znak nebo mÃ©nÄ.|NÃ¡zev souboru je pÅÃ­liÅ¡ dlouhÃœ. MÄl by obsahovat {{ filename_max_length }} znaky nebo mÃ©nÄ.|NÃ¡zev souboru je pÅÃ­liÅ¡ dlouhÃœ. MÄl by obsahovat {{ filename_max_length }} znakÅ¯ nebo mÃ©nÄ.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>SÃ­la hesla je pÅÃ­liÅ¡ nÃ­zkÃ¡. PouÅŸijte silnÄjÅ¡Ã­ heslo, prosÃ­m.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Tato hodnota obsahuje znaky, kterÃ© nejsou povoleny aktuÃ¡lnÃ­ ÃºrovnÃ­ omezenÃ­.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>PouÅŸÃ­vÃ¡nÃ­ neviditelnÃœch znakÅ¯ nenÃ­ povoleno.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>KombinovÃ¡nÃ­ ÄÃ­sel z rÅ¯znÃœch pÃ­sem nenÃ­ povoleno.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>PouÅŸitÃ­ skrytÃœch pÅekrÃœvajÃ­cÃ­ch znakÅ¯ nenÃ­ povoleno.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>PÅÃ­pona souboru je neplatnÃ¡ ({{ extension }}). PovolenÃ© pÅÃ­pony jsou {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>ZjiÅ¡tÄnÃ© kÃ³dovÃ¡nÃ­ znakÅ¯ je neplatnÃ© ({{ detected }}). PovolenÃ¡ kÃ³dovÃ¡nÃ­ jsou {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Tato hodnota nenÃ­ platnou MAC adresou.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">TÃ©to URL chybÃ­ domÃ©na nejvyÅ¡Å¡Ã­ho ÅÃ¡du.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.cy.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.cy.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.cy.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="cy" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Dylid bod y gwerth hwn yn ffug.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Dylid bod y gwerth hwn yn wir.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Dylid bod y gwerth hwn bod o fath {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Dylid bod y gwerth hwn yn wag.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Nid yw'r gwerth Ã¢ ddewiswyd yn ddilys.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Rhaid dewis o leiaf {{ limit }} opsiwn.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Rhaid dewis dim mwy na {{ limit }} opsiwn.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Mae un neu fwy o'r gwerthoedd a roddwyd yn annilys.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Nid oedd disgwyl y maes hwn.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Mae'r maes hwn ar goll.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Nid yw'r gwerth yn ddyddiad dilys.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Nid yw'r gwerth yn datetime dilys.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Nid yw'r gwerth yn gyfeiriad ebost dilys.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Ni ddarganfyddwyd y ffeil.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Ni ellir darllen y ffeil.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Mae'r ffeil yn rhy fawr ({{ size }} {{ suffix }}). Yr uchafswm Ã¢ ganiateir yw {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Nid yw math mime y ffeil yn ddilys ({{ type }}). Dyma'r mathau Ã¢ ganiateir {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Dylai'r gwerth hwn fod yn {{ limit }} neu lai.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Mae'r gwerth hwn rhy hir. Dylai gynnwys {{ limit }} nodyn cyfrifiadurol neu lai.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Dylai'r gwerth hwn fod yn {{ limit }} neu fwy.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Mae'r gwerth hwn yn rhy fyr. Dylai gynnwys {{ limit }} nodyn cyfrifiadurol neu fwy.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ni ddylai'r gwerth hwn fod yn wag.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ni ddylai'r gwerth hwn fod yn null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Dylai'r gwerth fod yn null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Nid yw'r gwerth hwn yn ddilys.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Nid yw'r gwerth hwn yn amser dilys.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Nid yw'r gwerth hwn yn URL dilys.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Rhaid i'r ddau werth fod yn gyfystyr a'u gilydd.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Mae'r ffeil yn rhy fawr. Yr uchafswm Ã¢ ganiateir yw {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Mae'r ffeil yn rhy fawr.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Methwyd ag uwchlwytho'r ffeil.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Dylai'r gwerth hwn fod yn rif dilys.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Nid yw'r ffeil hon yn ddelwedd dilys.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Nid yw'r gwerth hwn yn gyfeiriad IP dilys.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Nid yw'r gwerth hwn yn iaith ddilys.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Nid yw'r gwerth hwn yn locale dilys.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Nid yw'r gwerth hwn yn wlad dilys.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Mae'r gwerth hwn eisoes yn cael ei ddefnyddio.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Methwyd Ã¢ darganfod maint y ddelwedd.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Mae lled y ddelwedd yn rhy fawr ({{ width }}px). Y lled mwyaf Ã¢ ganiateir yw {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Mae lled y ddelwedd yn rhy fach ({{ width }}px). Y lled lleiaf Ã¢ ganiateir yw {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Mae uchder y ddelwedd yn rhy fawr ({{ width }}px). Yr uchder mwyaf Ã¢ ganiateir yw {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Mae uchder y ddelwedd yn rhy fach ({{ width }}px). Yr uchder lleiaf Ã¢ ganiateir yw {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Dylaid bod y gwerth hwn yn gyfrinair presenol y defnyddiwr.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Dylai'r gwerth hwn fod yn union {{ limit }} nodyn cyfrifiadurol o hyd.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Dim ond rhan o'r ffeil ag uwchlwythwyd.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ni uwchlwythwyd unrhyw ffeil.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">Nid oedd ffolder dros dro wedi'i ffurfweddu yn php.ini, neu nid yw'r ffolder a ffurfweddiwyd yn bodoli.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Methwyd ag ysgrifennu'r ffeil dros-dro ar ddisg.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Methwyd ag uwchlwytho oherwydd ategyn PHP.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Dylai'r casgliad hwn gynnwys {{ limit }} elfen neu fwy.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Dylai'r casgliad hwn gynnwys {{ limit }} elfen neu lai.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Dylai'r casgliad hwn gynnwys union {{ limit }} elfen.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Nid oedd rhif y cerdyn yn ddilys.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Unai ni dderbynir y math yna o gerdyn, neu nid yw rhif y cerdyn yn ddilys.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Nid yw'r gwerth hwn yn Rhif Cyfrif Banc Rhyngwladol (IBAN) dilys.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Nid yw'r gwerth hwn yn ISBN-10 dilys.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Nid yw'r gwerth hwn yn ISBN-13 dilys.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Nid yw'r gwerth hwn yn Rhif ISBN-10 dilys nac yn ISBN-13 dilys.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Nid yw'r gwerth hwn yn ISSN dilys.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Nid yw'r gwerth hwn yn arian dilys.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Dylai'r gwerth hwn fod yn gyfartal Ã¢ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Dylai'r gwerth hwn fod yn fwy na {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Dylai'r gwerth hwn fod yn fwy na neu'n hafal i {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Dylai'r gwerth hwn fod yn union yr un fath Ã¢ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Dylai'r gwerth hwn fod yn llai na {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Dylai'r gwerth hwn fod yn llai na neu'n hafal i {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ni ddylai'r gwerth hwn fod yn hafal i {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ni ddylai'r gwerth hwn fod yn union yr un fath Ã¢ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Mae'r gymhareb delwedd yn rhy fawr ({{ ratio }}). Y gymhareb uchaf a ganiateir yw {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Mae'r gymhareb delwedd yn rhy fach ({{ ratio }}). Y gymhareb isaf a ddisgwylir yw {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Mae'r ddelwedd yn sgwÃ¢r ({{ width }}x{{ height }}px). Ni chaniateir delweddau sgwÃ¢r.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Mae'r ddelwedd mewn fformat tirlun ({{ width }}x{{ height }}px). Ni chaniateir delweddau mewn fformat tirlun.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Mae'r ddelwedd mewn fformat portread ({{ width }}x{{ height }}px). Ni chaniateir delweddau mewn fformat portread.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Ni chaniateir ffeil wag.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Ni fu modd datrys y gwesteiwr.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Nid yw'r gwerth hwn yn cyfateb Ã¢'r {{ charset }} set nodau ddisgwyliedig.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Nid yw'r gwerth hwn yn God Adnabod Busnes (BIC) dilys.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Gwall</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Nid yw'r gwerth hwn yn UUID dilys.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Dylai'r gwerth hwn fod yn luosrif o {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Nid yw'r Cod Adnabod Busnes (BIC) hwn yn gysylltiedig ag IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target state="needs-review-translation">Dylai'r gwerth hwn fod yn JSON dilys.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target state="needs-review-translation">Dylai'r casgliad hwn gynnwys elfennau unigryw yn unig.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target state="needs-review-translation">Dylai'r gwerth hwn fod yn gadarnhaol.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target state="needs-review-translation">Dylai'r gwerth hwn fod yn gadarnhaol neu sero.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target state="needs-review-translation">Dylai'r gwerth hwn fod yn negyddol.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target state="needs-review-translation">Dylai'r gwerth hwn fod yn negyddol neu sero.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target state="needs-review-translation">Nid yw'r gwerth hwn yn gyfnod parth amser dilys.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target state="needs-review-translation">Mae'r cyfrinair hwn wedi'i ddatgelu mewn toriad data, ni ddylid ei ddefnyddio. Defnyddiwch gyfrinair arall.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target state="needs-review-translation">Dylai'r gwerth hwn fod rhwng {{ min }} a {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target state="needs-review-translation">Nid yw'r gwerth hwn yn enw gwesteiwr dilys.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target state="needs-review-translation">Dylai nifer yr elfennau yn y casgliad hwn fod yn luosrif o {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target state="needs-review-translation">Dylai'r gwerth hwn fodloni o leiaf un o'r cyfyngiadau canlynol:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target state="needs-review-translation">Dylai pob elfen o'r casgliad hwn fodloni ei gyfres ei hun o gyfyngiadau.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target state="needs-review-translation">Nid yw'r gwerth hwn yn Rhif Adnabod Diogelwch Rhyngwladol (ISIN) dilys.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target state="needs-review-translation">Dylai'r gwerth hwn fod yn fynegiant dilys.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target state="needs-review-translation">Nid yw'r gwerth hwn yn lliw CSS dilys.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target state="needs-review-translation">Nid yw'r gwerth hwn yn nodiant CIDR dilys.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target state="needs-review-translation">Dylai gwerth y mwgwd rhwydwaith fod rhwng {{ min }} a {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target state="needs-review-translation">Mae'r enw ffeil yn rhy hir. Dylai fod Ã¢ {{ filename_max_length }} cymeriad neu lai.|Mae'r enw ffeil yn rhy hir. Dylai fod Ã¢ {{ filename_max_length }} nodau neu lai.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target state="needs-review-translation">Mae cryfder y cyfrinair yn rhy isel. Defnyddiwch gyfrinair cryfach os gwelwch yn dda.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target state="needs-review-translation">Mae'r gwerth hwn yn cynnwys cymeriadau nad ydynt yn cael eu caniatÃ¡u gan y lefel cyfyngu presennol.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target state="needs-review-translation">Ni chaniateir defnyddio cymeriadau anweledig.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target state="needs-review-translation">Ni chaniateir cymysgu rhifau o sgriptiau gwahanol.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target state="needs-review-translation">Ni chaniateir defnyddio cymeriadau goruwchlwytho cudd.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">Mae estyniad y ffeil yn annilys ({{ extension }}). Mae'r estyniadau a ganiateir yn {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">Mae'r codio cymeriadau a ganfuwyd yn annilys ({{ detected }}). Mae'r codiadau a ganiateir yn {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Nid yw'r gwerth hwn yn gyfeiriad MAC dilys.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Mae'r URL hwn yn colli parth lefel uchaf.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.da.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.da.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.da.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="da" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>VÃŠrdien skal vÃŠre falsk.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>VÃŠrdien skal vÃŠre sand.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>VÃŠrdien skal vÃŠre af typen {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>VÃŠrdien skal vÃŠre blank.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Den valgte vÃŠrdi er ikke gyldig.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Du skal vÃŠlge mindst Ã©n mulighed.|Du skal vÃŠlge mindst {{ limit }} muligheder.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Du kan hÃžjst vÃŠlge Ã©n mulighed.|Du kan hÃžjst vÃŠlge {{ limit }} muligheder.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>En eller flere af de angivne vÃŠrdier er ugyldige.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Feltet blev ikke forventet.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Dette felt mangler.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>VÃŠrdien er ikke en gyldig dato.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>VÃŠrdien er ikke et gyldigt tidspunkt.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>VÃŠrdien er ikke en gyldig e-mailadresse.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Filen kunne ikke findes.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Filen kan ikke lÃŠses.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen er for stor ({{ size }} {{ suffix }}). Maksimale tilladte stÃžrrelse er {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Filens MIME-type er ugyldig ({{ type }}). Tilladte MIME-typer er {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>VÃŠrdien skal vÃŠre {{ limit }} eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>VÃŠrdien er for lang. Den mÃ¥ hÃžjst indeholde {{ limit }} tegn.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>VÃŠrdien skal vÃŠre {{ limit }} eller mere.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>VÃŠrdien er for kort. Den skal indeholde mindst {{ limit }} tegn.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>VÃŠrdien mÃ¥ ikke vÃŠre blank.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>VÃŠrdien mÃ¥ ikke vÃŠre tom (null).</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>VÃŠrdien skal vÃŠre tom (null).</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>VÃŠrdien er ikke gyldig.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>VÃŠrdien er ikke et gyldigt klokkeslÃŠt.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>VÃŠrdien er ikke en gyldig URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>De to vÃŠrdier skal vÃŠre ens.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen er for stor. Den maksimale stÃžrrelse er {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Filen er for stor.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Filen kunne ikke uploades.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>VÃŠrdien skal vÃŠre et gyldigt tal.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Filen er ikke gyldigt billede.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Denne vÃŠrdi er ikke en gyldig IP-adresse.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>VÃŠrdien er ikke et gyldigt sprog.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>VÃŠrdien er ikke en gyldig lokalitet.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>VÃŠrdien er ikke et gyldigt land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>VÃŠrdien er allerede i brug.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>StÃžrrelsen pÃ¥ billedet kunne ikke detekteres.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Billedet er for bredt ({{ width }}px). StÃžrste tilladte bredde er {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Billedet er for smalt ({{ width }}px). Mindste forventede bredde er {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Billedet er for hÃžjt ({{ height }}px). StÃžrste tilladte hÃžjde er {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Billedet er for lavt ({{ height }}px). Mindste forventede hÃžjde er {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>VÃŠrdien skal vÃŠre brugerens nuvÃŠrende adgangskode.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>VÃŠrdien skal vÃŠre pÃ¥ prÃŠcis {{ limit }} tegn.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Filen blev kun delvist uploadet.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ingen fil blev uploadet.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">Der blev ikke konfigureret en midlertidig mappe i php.ini, eller den konfigurerede mappe eksisterer ikke.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kan ikke skrive midlertidig fil til disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>En PHP-udvidelse forÃ¥rsagede fejl i upload.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Denne samling skal indeholde mindst Ã©t element.|Denne samling skal indeholde mindst {{ limit }} elementer.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Denne samling skal indeholde hÃžjst Ã©t element.|Denne samling skal indeholde hÃžjst {{ limit }} elementer.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Denne samling skal indeholde prÃŠcis Ã©t element.|Denne samling skal indeholde prÃŠcis {{ limit }} elementer.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ugyldigt kortnummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Ikke-understÃžttet korttype eller ugyldigt kortnummer.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Denne vÃŠrdi er ikke et gyldigt internationalt bankkontonummer (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>VÃŠrdien er ikke en gyldig ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>VÃŠrdien er ikke en gyldig ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>VÃŠrdien er hverken en gyldig ISBN-10 eller en gyldig ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>VÃŠrdien er ikke en gyldig ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Denne vÃŠrdi er ikke en gyldig valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Denne vÃŠrdi skal vÃŠre lig med {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Denne vÃŠrdi skal vÃŠre stÃžrre end {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Denne vÃŠrdi skal vÃŠre stÃžrre end eller lig med {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Denne vÃŠrdi skal vÃŠre identisk med {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Denne vÃŠrdi skal vÃŠre mindre end {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Denne vÃŠrdi skal vÃŠre mindre end eller lig med {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Denne vÃŠrdi bÃžr ikke vÃŠre lig med {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Denne vÃŠrdi bÃžr ikke vÃŠre identisk med {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Billedforholdet er for stort ({{ratio}}). Tilladt maksimumsforhold er {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Billedforholdet er for lille ({{ ratio }}). Minimumsforventet forventet er {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Billedet er firkantet ({{ width }} x {{ height }} px). Firkantede billeder er ikke tilladt.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Billedet er landskabsorienteret ({{width}} x {{height}} px). Landskabsorienterede billeder er ikke tilladt</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Billedet er portrÃŠtorienteret ({{ width }}x{{ height }}px). PortrÃŠtorienterede billeder er ikke tilladt.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>En tom fil er ikke tilladt.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>VÃŠrten kunne ikke lÃžses.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Denne vÃŠrdi stemmer ikke overens med den forventede {{ charset }} charset.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Denne vÃŠrdi er ikke en gyldig forretningsidentifikationskode (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Fejl</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Denne vÃŠrdi er ikke en gyldig UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Denne vÃŠrdi skal vÃŠre et multiplikation af {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Denne Business Identifier Code (BIC) er ikke forbundet med IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Denne vÃŠrdi skal vÃŠre gyldig JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Denne samling bÃžr kun indeholde unikke elementer.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Denne vÃŠrdi skal vÃŠre positiv.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Denne vÃŠrdi skal vÃŠre enten positiv eller nul.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Denne vÃŠrdi skal vÃŠre negativ.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Denne vÃŠrdi skal vÃŠre enten negativ eller nul.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Denne vÃŠrdi er ikke en gyldig tidszone.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Denne adgangskode er blevet lÃŠkket i et databrud, det mÃ¥ ikke bruges. Brug venligst en anden adgangskode.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>VÃŠrdien skal vÃŠre mellem {{ min }} og {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>VÃŠrdien er ikke et gyldigt vÃŠrtsnavn.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Antallet af elementer i denne samling skal vÃŠre en multiplikation af {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>VÃŠrdien skal overholde mindst Ã©n af fÃžlgende krav:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Hvert element i denne samling skal overholde dens egne krav.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>VÃŠrdien er ikke et gyldig International Securities Identification Number (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>VÃŠrdien skal vÃŠre et gyldigt udtryk.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>VÃŠrdien skal vÃŠre en gyldig CSS farve.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>VÃŠrdien er ikke en gyldig CIDR notation.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>VÃŠrdien af netmasken skal vÃŠre mellem {{ min }} og {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Filnavnet er for langt. Det bÃžr indeholde {{ filename_max_length }} tegn eller mindre.|Filnavnet er for langt. Det bÃžr indeholde {{ filename_max_length }} tegn eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Kodeordets styrke er for lav. Du bedes indtaste et stÃŠrkere kodeord.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Denne vÃŠrdi indeholder tegn, som ikke er tilladt med det nuvÃŠrende restriktionsniveau.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Brug af usynlige tegn er ikke tilladt.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>At blande numre fra forskellige scripts er ikke tilladt.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>At bruge skjulte overlejringstegn er ikke tilladt.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Udvidelsen til filen er ugyldig ({{ extension }}). De tilladte udvidelser er {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Det registrerede tegnsÃŠt er ugyldigt ({{ detected }}). De tilladte tegnsÃŠt er {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Denne vÃŠrdi er ikke en gyldig MAC-adresse.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Denne URL mangler et topdomÃŠne.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.de.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.de.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.de.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="de" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Dieser Wert sollte false sein.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Dieser Wert sollte true sein.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Dieser Wert sollte vom Typ {{ type }} sein.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Dieser Wert sollte leer sein.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Sie haben einen ungÃŒltigen Wert ausgewÃ€hlt.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Sie mÃŒssen mindestens {{ limit }} MÃ¶glichkeit wÃ€hlen.|Sie mÃŒssen mindestens {{ limit }} MÃ¶glichkeiten wÃ€hlen.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Sie dÃŒrfen hÃ¶chstens {{ limit }} MÃ¶glichkeit wÃ€hlen.|Sie dÃŒrfen hÃ¶chstens {{ limit }} MÃ¶glichkeiten wÃ€hlen.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Einer oder mehrere der angegebenen Werte sind ungÃŒltig.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Dieses Feld wurde nicht erwartet.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Dieses Feld fehlt.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Dieser Wert entspricht keiner gÃŒltigen Datumsangabe.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Dieser Wert entspricht keiner gÃŒltigen Datums- und Zeitangabe.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Dieser Wert ist keine gÃŒltige E-Mail-Adresse.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Die Datei wurde nicht gefunden.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Die Datei ist nicht lesbar.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Die Datei ist zu groÃ ({{ size }} {{ suffix }}). Die maximal zulÃ€ssige GrÃ¶Ãe betrÃ€gt {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Der Dateityp ist ungÃŒltig ({{ type }}). Erlaubte Dateitypen sind {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Dieser Wert sollte kleiner oder gleich {{ limit }} sein.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Diese Zeichenkette ist zu lang. Sie sollte hÃ¶chstens {{ limit }} Zeichen haben.|Diese Zeichenkette ist zu lang. Sie sollte hÃ¶chstens {{ limit }} Zeichen haben.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Dieser Wert sollte grÃ¶Ãer oder gleich {{ limit }} sein.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Diese Zeichenkette ist zu kurz. Sie sollte mindestens {{ limit }} Zeichen haben.|Diese Zeichenkette ist zu kurz. Sie sollte mindestens {{ limit }} Zeichen haben.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Dieser Wert sollte nicht leer sein.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Dieser Wert sollte nicht null sein.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Dieser Wert sollte null sein.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Dieser Wert ist nicht gÃŒltig.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Dieser Wert entspricht keiner gÃŒltigen Zeitangabe.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Dieser Wert ist keine gÃŒltige URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Die beiden Werte sollten identisch sein.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Die Datei ist zu groÃ. Die maximal zulÃ€ssige GrÃ¶Ãe betrÃ€gt {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Die Datei ist zu groÃ.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Die Datei konnte nicht hochgeladen werden.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Dieser Wert sollte eine gÃŒltige Zahl sein.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Diese Datei ist kein gÃŒltiges Bild.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Dieser Wert ist keine gÃŒltige IP-Adresse.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Dieser Wert entspricht keiner gÃŒltigen Sprache.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Dieser Wert entspricht keinem gÃŒltigen Gebietsschema.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Dieser Wert entspricht keinem gÃŒltigen Land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Dieser Wert wird bereits verwendet.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Die GrÃ¶Ãe des Bildes konnte nicht ermittelt werden.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Die Bildbreite ist zu groÃ ({{ width }}px). Die maximal zulÃ€ssige Breite betrÃ€gt {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Die Bildbreite ist zu gering ({{ width }}px). Die erwartete Mindestbreite betrÃ€gt {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Die BildhÃ¶he ist zu groÃ ({{ height }}px). Die maximal zulÃ€ssige HÃ¶he betrÃ€gt {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Die BildhÃ¶he ist zu gering ({{ height }}px). Die erwartete MindesthÃ¶he betrÃ€gt {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Dieser Wert sollte dem aktuellen Benutzerpasswort entsprechen.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Dieser Wert sollte genau {{ limit }} Zeichen lang sein.|Dieser Wert sollte genau {{ limit }} Zeichen lang sein.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Die Datei wurde nur teilweise hochgeladen.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Es wurde keine Datei hochgeladen.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Es wurde kein temporÃ€rer Ordner in der php.ini konfiguriert oder der temporÃ€re Ordner existiert nicht.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kann die temporÃ€re Datei nicht speichern.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Eine PHP-Erweiterung verhinderte den Upload.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Diese Sammlung sollte {{ limit }} oder mehr Elemente beinhalten.|Diese Sammlung sollte {{ limit }} oder mehr Elemente beinhalten.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Diese Sammlung sollte {{ limit }} oder weniger Elemente beinhalten.|Diese Sammlung sollte {{ limit }} oder weniger Elemente beinhalten.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Diese Sammlung sollte genau {{ limit }} Element beinhalten.|Diese Sammlung sollte genau {{ limit }} Elemente beinhalten.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>UngÃŒltige Kartennummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Nicht unterstÃŒtzter Kartentyp oder ungÃŒltige Kartennummer.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Dieser Wert ist keine gÃŒltige Internationale Bankkontonummer (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Dieser Wert entspricht keiner gÃŒltigen ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Dieser Wert entspricht keiner gÃŒltigen ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Dieser Wert ist weder eine gÃŒltige ISBN-10 noch eine gÃŒltige ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Dieser Wert ist keine gÃŒltige ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Dieser Wert ist keine gÃŒltige WÃ€hrung.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Dieser Wert sollte gleich {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Dieser Wert sollte grÃ¶Ãer als {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Dieser Wert sollte grÃ¶Ãer oder gleich {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Dieser Wert sollte identisch sein mit {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Dieser Wert sollte kleiner als {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Dieser Wert sollte kleiner oder gleich {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Dieser Wert sollte nicht {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Dieser Wert sollte nicht identisch sein mit {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Das SeitenverhÃ€ltnis des Bildes ist zu groÃ ({{ ratio }}). Der erlaubte Maximalwert ist {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Das SeitenverhÃ€ltnis des Bildes ist zu klein ({{ ratio }}). Der erwartete Minimalwert ist {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Das Bild ist quadratisch ({{ width }}x{{ height }}px). Quadratische Bilder sind nicht erlaubt.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Das Bild ist im Querformat ({{ width }}x{{ height }}px). Bilder im Querformat sind nicht erlaubt.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Das Bild ist im Hochformat ({{ width }}x{{ height }}px). Bilder im Hochformat sind nicht erlaubt.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Eine leere Datei ist nicht erlaubt.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Der Hostname konnte nicht aufgelÃ¶st werden.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Dieser Wert entspricht nicht dem erwarteten Zeichensatz {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Dieser Wert ist keine gÃŒltige internationale Bankleitzahl (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Fehler</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Dieser Wert ist keine gÃŒltige UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Dieser Wert sollte ein Vielfaches von {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Diese internationale Bankleitzahl (BIC) ist nicht mit der IBAN {{ iban }} assoziiert.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Dieser Wert sollte gÃŒltiges JSON sein.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Diese Sammlung darf keine doppelten Elemente enthalten.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Diese Zahl sollte positiv sein.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Diese Zahl sollte entweder positiv oder 0 sein.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Diese Zahl sollte negativ sein.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Diese Zahl sollte entweder negativ oder 0 sein.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Dieser Wert ist keine gÃŒltige Zeitzone.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Dieses Passwort ist Teil eines Datenlecks, es darf nicht verwendet werden.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Dieser Wert sollte zwischen {{ min }} und {{ max }} sein.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Dieser Wert ist kein gÃŒltiger Hostname.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Die Anzahl an Elementen in dieser Sammlung sollte ein Vielfaches von {{ compared_value }} sein.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Dieser Wert sollte eine der folgenden Bedingungen erfÃŒllen:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Jedes Element dieser Sammlung sollte seine eigene Menge an Bedingungen erfÃŒllen.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Dieser Wert ist keine gÃŒltige Internationale Wertpapierkennnummer (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Dieser Wert sollte eine gÃŒltige Expression sein.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Dieser Wert ist keine gÃŒltige CSS-Farbe.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Dieser Wert entspricht nicht der CIDR-Notation.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Der Wert der Subnetzmaske sollte zwischen {{ min }} und {{ max }} liegen.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Der Dateiname ist zu lang. Er sollte nicht lÃ€nger als {{ filename_max_length }} Zeichen sein.|Der Dateiname ist zu lang. Er sollte nicht lÃ€nger als {{ filename_max_length }} Zeichen sein.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Das Passwort ist zu schwach.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Der Wert enthÃ€lt Zeichen, die auf der aktuellen EinschrÃ€nkungsstufe nicht erlaubt sind.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Unsichtbare Zeichen sind nicht erlaubt.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Das Mischen von Zahlen aus verschiedenen Skripten ist nicht erlaubt.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Verstecke Overlay-Zeichen sind nicht erlaubt.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Die Dateiendung ist ungÃŒltig ({{ extension }}). GÃŒltige Dateiendungen sind {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Der erkannte Zeichensatz ist nicht gÃŒltig ({{ detected }}). GÃŒltige ZeichensÃ€tze sind {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Dieser Wert ist keine gÃŒltige MAC-Adresse.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Dieser URL fehlt eine Top-Level-Domain.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target>Dieser Wert ist zu kurz. Er muss aus mindestens einem Wort bestehen.|Dieser Wert ist zu kurz. Er muss mindestens {{ min }} WÃ¶rter enthalten.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target>Dieser Wert ist zu lang. Er darf maximal aus einem Wort bestehen.|Dieser Wert ist zu lang. Er darf maximal {{ max }} WÃ¶rter enthalten.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.el.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.el.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.el.xlf	(revision 8435)
@@ -0,0 +1,620 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="el" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÎµÏ
+ÎŽÎ®Ï.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ Î±Î»Î·ÎžÎ®Ï.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÏÏÎ¿Ï
+ {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÎºÎµÎœÎ®.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Î ÏÎ¹ÎŒÎ® ÏÎ¿Ï
+ ÎµÏÎ¹Î»Î­ÏÎžÎ·ÎºÎµ ÎŽÎµÎœ Î±ÎœÏÎ¹ÏÏÎ¿Î¹ÏÎµÎ¯ ÏÎµ Î­Î³ÎºÏ
+ÏÎ· ÎµÏÎ¹Î»Î¿Î³Î®.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Î ÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÏÎ¹Î»Î­ÎŸÏÎµ ÏÎ¿Ï
+Î»Î¬ÏÎ¹ÏÏÎ¿Îœ {{ limit }} ÎµÏÎ¹Î»Î¿Î³Î®.|Î ÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÏÎ¹Î»Î­ÎŸÏÎµ ÏÎ¿Ï
+Î»Î¬ÏÎ¹ÏÏÎ¿Îœ {{ limit }} ÎµÏÎ¹Î»Î¿Î³Î­Ï.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Î ÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÏÎ¹Î»Î­ÎŸÏÎµ ÏÎ¿ ÏÎ¿Î»Ï {{ limit }} ÎµÏÎ¹Î»Î¿Î³Î®.|Î ÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÏÎ¹Î»Î­ÎŸÏÎµ ÏÎ¿ ÏÎ¿Î»Ï {{ limit }} ÎµÏÎ¹Î»Î¿Î³Î­Ï.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>ÎÎ¹Î± Î® ÏÎµÏÎ¹ÏÏÏÏÎµÏÎµÏ ÏÎ¹ÎŒÎ­Ï ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎµÏ.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>ÎÏ
+ÏÏ ÏÎ¿ ÏÎµÎŽÎ¯Î¿ ÎŽÎµÎœ Î®ÏÎ±Îœ Î±ÎœÎ±ÎŒÎµÎœÏÎŒÎµÎœÎ¿.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>ÎÎµÎ¯ÏÎµÎ¹ Î±Ï
+ÏÏ ÏÎ¿ ÏÎµÎŽÎ¯Î¿.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Î ÏÎ¹ÎŒÎ® ÎŽÎµÎœ Î±ÎœÏÎ¹ÏÏÎ¿Î¹ÏÎµÎ¯ ÏÎµ Î­Î³ÎºÏ
+ÏÎ· Î·ÎŒÎµÏÎ¿ÎŒÎ·ÎœÎ¯Î±.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Î ÏÎ¹ÎŒÎ® ÎŽÎµÎœ Î±ÎœÏÎ¹ÏÏÎ¿Î¹ÏÎµÎ¯ ÏÎµ Î­Î³ÎºÏ
+ÏÎ· Î·ÎŒÎµÏÎ¿ÎŒÎ·ÎœÎ¯Î± ÎºÎ±Î¹ ÏÏÎ±.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Î ÏÎ¹ÎŒÎ® ÎŽÎµÎœ Î±ÎœÏÎ¹ÏÏÎ¿Î¹ÏÎµÎ¯ ÏÎµ Î­Î³ÎºÏ
+ÏÎ¿ email.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Î€Î¿ Î±ÏÏÎµÎ¯Î¿ ÎŽÎµ ÎŒÏÎ¿ÏÎµÎ¯ ÎœÎ± Î²ÏÎµÎžÎµÎ¯.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Î€Î¿ Î±ÏÏÎµÎ¯Î¿ ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î±ÎœÎ±Î³ÎœÏÏÎ¹ÎŒÎ¿.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Î€Î¿ Î±ÏÏÎµÎ¯Î¿ ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎµÎ³Î¬Î»Î¿ ({{ size }} {{ suffix }}). Î€Î¿ ÎŒÎ­Î³Î¹ÏÏÎ¿ ÎµÏÎ¹ÏÏÎµÏÏÏ ÎŒÎ­Î³ÎµÎžÎ¿Ï ÎµÎ¯ÎœÎ±Î¹ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Î ÏÏÏÎ¿Ï mime ÏÎ¿Ï
+ Î±ÏÏÎµÎ¯Î¿Ï
+ ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ¿Ï ({{ type }}). ÎÎ¹ Î­Î³ÎºÏ
+ÏÎ¿Î¹ ÏÏÏÎ¿Î¹ mime ÎµÎ¯ÎœÎ±Î¹ {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± Î­ÏÏÎµÏÎµ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ {{ limit }} Î® Î»Î¹Î³ÏÏÎµÏÎ¿.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎµÎ³Î¬Î»Î·. ÎÎ± Î­ÏÏÎµÏÎµ ÎœÎ± Î­ÏÎµÎ¹ {{ limit }} ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± Î® Î»Î¹Î³ÏÏÎµÏÎ¿.|ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎµÎ³Î¬Î»Î·. ÎÎ± Î­ÏÏÎµÏÎµ ÎœÎ± Î­ÏÎµÎ¹ {{ limit }} ÏÎ±ÏÎ±ÎºÏÎ®ÏÎµÏ Î® Î»Î¹Î³ÏÏÎµÏÎ¿.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± Î­ÏÏÎµÏÎµ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ {{ limit }} Î® ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ¿.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎ¹ÎºÏÎ®. ÎÎ± Î­ÏÏÎµÏÎµ ÎœÎ± Î­ÏÎµÎ¹ {{ limit }} ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± Î® ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ¿.|ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎ¹ÎºÏÎ®. ÎÎ± Î­ÏÏÎµÏÎµ ÎœÎ± Î­ÏÎµÎ¹ {{ limit }} ÏÎ±ÏÎ±ÎºÏÎ®ÏÎµÏ Î® ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ¿.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÎºÎµÎœÎ®.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÎŒÎ·ÎŽÎµÎœÎ¹ÎºÎ®.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÎŒÎ·ÎŽÎµÎœÎ¹ÎºÎ®.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ·.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ Î±ÎœÏÎ¹ÏÏÎ¿Î¹ÏÎµÎ¯ ÏÎµ Î­Î³ÎºÏ
+ÏÎ· ÏÏÎ±.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ Î±ÎœÏÎ¹ÏÏÎ¿Î¹ÏÎµÎ¯ ÏÎµ Î­Î³ÎºÏ
+ÏÎ¿ URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>ÎÎ¹ ÎŽÏÎ¿ ÏÎ¹ÎŒÎ­Ï ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ Î¯ÎŽÎ¹ÎµÏ.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Î€Î¿ Î±ÏÏÎµÎ¯Î¿ ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎµÎ³Î¬Î»Î¿. Î€Î¿ ÎŒÎ­Î³Î¹ÏÏÎ¿ ÎµÏÎ¹ÏÏÎµÏÏÏ ÎŒÎ­Î³ÎµÎžÎ¿Ï ÎµÎ¯ÎœÎ±Î¹ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Î€Î¿ Î±ÏÏÎµÎ¯Î¿ ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎµÎ³Î¬Î»Î¿.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Î€Î¿ Î±ÏÏÎµÎ¯Î¿ ÎŽÎµ ÎŒÏÎ¿ÏÎµÎ¯ ÎœÎ± Î±ÎœÎ­Î²ÎµÎ¹.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ Î­ÎœÎ±Ï Î­Î³ÎºÏ
+ÏÎ¿Ï Î±ÏÎ¹ÎžÎŒÏÏ.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Î€Î¿ Î±ÏÏÎµÎ¯Î¿ ÎŽÎµÎœ Î±ÏÎ¿ÏÎµÎ»ÎµÎ¯ Î­Î³ÎºÏ
+ÏÎ· ÎµÎ¹ÎºÏÎœÎ±.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>ÎÏ
+ÏÎ® Î· IP ÎŽÎ¹ÎµÏÎžÏ
+ÎœÏÎ· ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ·.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ Î±ÎœÏÎ¹ÏÏÎ¿Î¹ÏÎµÎ¯ ÏÎµ ÎŒÎ¹Î± Î­Î³ÎºÏ
+ÏÎ· Î³Î»ÏÏÏÎ±.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ Î±ÎœÏÎ¹ÏÏÎ¿Î¹ÏÎµÎ¯ ÏÎµ Î­Î³ÎºÏ
+ÏÎ¿ ÎºÏÎŽÎ¹ÎºÏ ÏÎ¿ÏÎ¿ÎžÎµÏÎ¯Î±Ï.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ Î±ÎœÏÎ¹ÏÏÎ¿Î¹ÏÎµÎ¯ ÏÎµ ÎŒÎ¹Î± Î­Î³ÎºÏ
+ÏÎ· ÏÏÏÎ±.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÎµÎ¯ÏÎ±Î¹ Î®ÎŽÎ·.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Î€Î¿ ÎŒÎ­Î³ÎµÎžÎ¿Ï ÏÎ·Ï ÎµÎ¹ÎºÏÎœÎ±Ï ÎŽÎµÎœ Î®ÏÎ±Îœ ÎŽÏ
+ÎœÎ±ÏÏ ÎœÎ± Î±ÎœÎ¹ÏÎœÎµÏ
+ÎžÎµÎ¯.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Î€Î¿ ÏÎ»Î¬ÏÎ¿Ï ÏÎ·Ï ÎµÎ¹ÎºÏÎœÎ±Ï ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎµÎ³Î¬Î»Î¿ ({{ width }}px). Î€Î¿ ÎŒÎ­Î³Î¹ÏÏÎ¿ ÎµÏÎ¹ÏÏÎµÏÏÏ ÏÎ»Î¬ÏÎ¿Ï ÎµÎ¯ÎœÎ±Î¹ {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Î€Î¿ ÏÎ»Î¬ÏÎ¿Ï ÏÎ·Ï ÎµÎ¹ÎºÏÎœÎ±Ï ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎ¹ÎºÏÏ ({{ width }}px). Î€Î¿ ÎµÎ»Î¬ÏÎ¹ÏÏÎ¿ ÎµÏÎ¹ÏÏÎµÏÏÏ ÏÎ»Î¬ÏÎ¿Ï ÎµÎ¯ÎœÎ±Î¹ {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Î€Î¿ ÏÏÎ¿Ï ÏÎ·Ï ÎµÎ¹ÎºÏÎœÎ±Ï ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎµÎ³Î¬Î»Î¿ ({{ height }}px). Î€Î¿ ÎŒÎ­Î³Î¹ÏÏÎ¿ ÎµÏÎ¹ÏÏÎµÏÏÏ ÏÏÎ¿Ï ÎµÎ¯ÎœÎ±Î¹ {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Î€Î¿ ÏÏÎ¿Ï ÏÎ·Ï ÎµÎ¹ÎºÏÎœÎ±Ï ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎ¹ÎºÏÏ ({{ height }}px). Î€Î¿ ÎµÎ»Î¬ÏÎ¹ÏÏÎ¿ ÎµÏÎ¹ÏÏÎµÏÏÏ ÏÏÎ¿Ï ÎµÎ¯ÎœÎ±Î¹ {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± Î­ÏÏÎµÏÎµ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ Î¿ ÏÏÎ­ÏÏÎœ ÎºÏÎŽÎ¹ÎºÏÏ.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± Î­ÏÏÎµÏÎµ ÎœÎ± Î­ÏÎµÎ¹ Î±ÎºÏÎ¹Î²ÏÏ {{ limit }} ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±.|ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± Î­ÏÏÎµÏÎµ ÎœÎ± Î­ÏÎµÎ¹ Î±ÎºÏÎ¹Î²ÏÏ {{ limit }} ÏÎ±ÏÎ±ÎºÏÎ®ÏÎµÏ.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Î€Î¿ Î±ÏÏÎµÎ¯Î¿ ÎŽÎµÎœ Î±ÎœÎ­Î²Î·ÎºÎµ Î¿Î»ÏÎºÎ»Î·ÏÎ¿.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>ÎÎµÎœ Î±ÎœÎ­Î²Î·ÎºÎµ ÎºÎ±ÎœÎ­ÎœÎ± Î±ÏÏÎµÎ¯Î¿.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>ÎÎµÎœ Î­ÏÎµÎ¹ ÏÏ
+ÎžÎŒÎ¹ÏÏÎµÎ¯ ÏÏÎ¿ÏÏÏÎ¹ÎœÏÏ ÏÎ¬ÎºÎµÎ»Î¿Ï ÏÏÎ¿ php.ini, Î® Î¿ ÏÏ
+ÎžÎŒÎ¹ÏÎŒÎ­ÎœÎ¿Ï ÏÎ¬ÎºÎµÎ»Î¿Ï ÎŽÎµÎœ Ï
+ÏÎ¬ÏÏÎµÎ¹.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>ÎÎŽÏ
+ÎœÎ±ÎŒÎ¯Î± ÎµÎ³Î³ÏÎ±ÏÎ®Ï ÏÏÎ¿ÏÏÏÎ¹ÎœÎ¿Ï Î±ÏÏÎµÎ¯Î¿Ï
+ ÏÏÎ¿ ÎŽÎ¯ÏÎºÎ¿.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>ÎÎ¹Î± ÎµÏÎ­ÎºÏÎ±ÏÎ· PHP ÏÏÎ¿ÎºÎ¬Î»ÎµÏÎµ Î±ÎŽÏ
+ÎœÎ±ÎŒÎ¯Î± Î±ÎœÎµÎ²Î¬ÏÎŒÎ±ÏÎ¿Ï.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÏ
+Î»Î»Î¿Î³Î® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÎµÏÎ¹Î­ÏÎµÎ¹ {{ limit }} ÏÏÎ¿Î¹ÏÎµÎ¯Î¿ Î® ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ±.|ÎÏ
+ÏÎ® Î· ÏÏ
+Î»Î»Î¿Î³Î® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÎµÏÎ¹Î­ÏÎµÎ¹ {{ limit }} ÏÏÎ¿Î¹ÏÎµÎ¯Î± Î® ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ±.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÏ
+Î»Î»Î¿Î³Î® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÎµÏÎ¹Î­ÏÎµÎ¹ {{ limit }} ÏÏÎ¿Î¹ÏÎµÎ¯o Î® Î»Î¹Î³ÏÏÎµÏÎ±.|ÎÏ
+ÏÎ® Î· ÏÏ
+Î»Î»Î¿Î³Î® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÎµÏÎ¹Î­ÏÎµÎ¹ {{ limit }} ÏÏÎ¿Î¹ÏÎµÎ¯Î± Î® Î»Î¹Î³ÏÏÎµÏÎ±.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÏ
+Î»Î»Î¿Î³Î® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÎµÏÎ¹Î­ÏÎµÎ¹ Î±ÎºÏÎ¹Î²ÏÏ {{ limit }} ÏÏÎ¿Î¹ÏÎµÎ¯o.|ÎÏ
+ÏÎ® Î· ÏÏ
+Î»Î»Î¿Î³Î® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÎµÏÎ¹Î­ÏÎµÎ¹ Î±ÎºÏÎ¹Î²ÏÏ {{ limit }} ÏÏÎ¿Î¹ÏÎµÎ¯Î±.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ÎÎ· Î­Î³ÎºÏ
+ÏÎ¿Ï Î±ÏÎ¹ÎžÎŒÏÏ ÎºÎ¬ÏÏÎ±Ï.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>ÎÎ· Ï
+ÏÎ¿ÏÏÎ·ÏÎ¹Î¶ÏÎŒÎµÎœÎ¿Ï ÏÏÏÎ¿Ï ÎºÎ¬ÏÏÎ±Ï Î® ÎŒÎ· Î­Î³ÎºÏ
+ÏÎ¿Ï Î±ÏÎ¹ÎžÎŒÏÏ ÎºÎ¬ÏÏÎ±Ï.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>ÎÏ
+ÏÏÏ ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ¿Ï ÎŽÎ¹ÎµÎžÎœÎ®Ï Î±ÏÎ¹ÎžÎŒÏÏ ÏÏÎ±ÏÎµÎ¶Î¹ÎºÎ¿Ï Î»Î¿Î³Î±ÏÎ¹Î±ÏÎŒÎ¿Ï (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>ÎÏ
+ÏÏ ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ¿Ï ÎºÏÎŽÎ¹ÎºÏÏ ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>ÎÏ
+ÏÏ ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ¿Ï ÎºÏÎŽÎ¹ÎºÏÏ ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>ÎÏ
+ÏÏ ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î¿ÏÏÎµ Î­Î³ÎºÏ
+ÏÎ¿Ï ÎºÏÎŽÎ¹ÎºÏÏ ISBN-10 Î¿ÏÏÎµ Î­Î³ÎºÏ
+ÏÎ¿Ï ÎºÏÎŽÎ¹ÎºÏÏ ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>ÎÏ
+ÏÏ ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ¿Ï ÎºÏÎŽÎ¹ÎºÏÏ ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>ÎÏ
+ÏÏ ÎŽÎµÎœ Î±ÎœÏÎ¹ÏÏÎ¿Î¹ÏÎµÎ¯ ÏÎµ Î­Î³ÎºÏ
+ÏÎ¿ ÎœÏÎŒÎ¹ÏÎŒÎ±.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ Î¯ÏÎ· ÎŒÎµ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÎŒÎµÎ³Î±Î»ÏÏÎµÏÎ· Î±ÏÏ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÎŒÎµÎ³Î±Î»ÏÏÎµÏÎ· Î® Î¯ÏÎ· ÎŒÎµ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÎ±ÎœÎ¿ÎŒÎ¿Î¹ÏÏÏ
+ÏÎ· ÎŒÎµ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÎŒÎ¹ÎºÏÏÏÎµÏÎ· Î±ÏÏ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÎŒÎ¹ÎºÏÏÏÎµÏÎ· Î® Î¯ÏÎ· ÎŒÎµ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ Î¯ÏÎ· ÎŒÎµ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÎ±ÎœÎ¿ÎŒÎ¿Î¹ÏÏÏ
+ÏÎ· ÎŒÎµ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Î Î±ÎœÎ±Î»Î¿Î³Î¯Î± ÏÎ»Î¬ÏÎ¿Ï
+Ï-ÏÏÎ¿Ï
+Ï ÏÎ·Ï ÎµÎ¹ÎºÏÎœÎ±Ï ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎµÎ³Î¬Î»Î· ({{ ratio }}). ÎÎ­Î³Î¹ÏÏÎ· ÎµÏÎ¹ÏÏÎµÏÏÎ® Î±ÎœÎ±Î»Î¿Î³Î¯Î± {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Î Î±ÎœÎ±Î»Î¿Î³Î¯Î± ÏÎ»Î¬ÏÎ¿Ï
+Ï-ÏÏÎ¿Ï
+Ï ÏÎ·Ï ÎµÎ¹ÎºÏÎœÎ±Ï ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎ¹ÎºÏÎ® ({{ ratio }}). ÎÎ»Î¬ÏÎ¹ÏÏÎ· ÎµÏÎ¹ÏÏÎµÏÏÎ® Î±ÎœÎ±Î»Î¿Î³Î¯Î± {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Î ÎµÎ¹ÎºÏÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÎµÏÏÎ¬Î³ÏÎœÎ· ({{ width }}x{{ height }}px). ÎÎµÎœ ÎµÏÎ¹ÏÏÎ­ÏÎ¿ÎœÏÎ±Î¹ ÏÎµÏÏÎ¬Î³ÏÎœÎµÏ ÎµÎ¹ÎºÏÎœÎµÏ.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Î ÎµÎ¹ÎºÏÎœÎ± Î­ÏÎµÎ¹ Î¿ÏÎ¹Î¶ÏÎœÏÎ¹Î¿ ÏÏÎ¿ÏÎ±ÎœÎ±ÏÎ¿Î»Î¹ÏÎŒÏ ({{ width }}x{{ height }}px). ÎÎµÎœ ÎµÏÎ¹ÏÏÎ­ÏÎ¿ÎœÏÎ±Î¹ ÎµÎ¹ÎºÏÎœÎµÏ ÎŒÎµ Î¿ÏÎ¹Î¶ÏÎœÏÎ¹Î¿ ÏÏÎ¿ÏÎ±ÎœÎ±ÏÎ¿Î»Î¹ÏÎŒÏ.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Î ÎµÎ¹ÎºÏÎœÎ± Î­ÏÎµÎ¹ ÎºÎ¬ÎžÎµÏÎ¿ ÏÏÎ¿ÏÎ±ÎœÎ±ÏÎ¿Î»Î¹ÏÎŒÏ ({{ width }}x{{ height }}px). ÎÎµÎœ ÎµÏÎ¹ÏÏÎ­ÏÎ¿ÎœÏÎ±Î¹ ÎµÎ¹ÎºÏÎœÎµÏ ÎŒÎµ ÎºÎ¬ÎžÎµÏÎ¿ ÏÏÎ¿ÏÎ±ÎœÎ±ÏÎ¿Î»Î¹ÏÎŒÏ.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>ÎÎµÎœ ÎµÏÎ¹ÏÏÎ­ÏÎµÏÎ±Î¹ ÎºÎµÎœÏ Î±ÏÏÎµÎ¯Î¿.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Î ÎŽÎ¹ÎµÏÎžÏ
+ÎœÏÎ· ÎŽÎµÎœ ÎŒÏÏÏÎµÏÎµ ÎœÎ± ÎµÏÎ¹Î»Ï
+ÎžÎµÎ¯.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ ÏÎ±Î¹ÏÎ¹Î¬Î¶ÎµÎ¹ ÏÏÎ¿ Î±ÎœÎ±ÎŒÎµÎœÏÎŒÎµÎœÎ¿ {{ charset }} ÏÏÎœÎ¿Î»Î¿ ÏÎ±ÏÎ±ÎºÏÎ®ÏÏÎœ.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>ÎÏ
+ÏÏÏ Î¿ Î±ÏÎ¹ÎžÎŒÏÏ ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ¿Ï ÎÏÎŽÎ¹ÎºÏÏ Î€Î±Ï
+ÏÎ¿ÏÎ¿Î¯Î·ÏÎ·Ï ÎÏÎ¹ÏÎµÎ¯ÏÎ·ÏÎ·Ï (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Î£ÏÎ¬Î»ÎŒÎ±</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>ÎÏ
+ÏÏÏ Î¿ Î±ÏÎ¹ÎžÎŒÏÏ ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ· UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± Î­ÏÏÎµÏÎµ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Î»Î±ÏÎ»Î¬ÏÎ¹Î¿ ÏÎ¿Ï
+ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>ÎÏ
+ÏÏÏ Î¿ ÎºÏÎŽÎ¹ÎºÏÏ BIC ÎŽÎµÎœ ÏÏÎµÏÎ¯Î¶ÎµÏÎ±Î¹ ÎŒÎµ ÏÎ¿ IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ¿ JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÏ
+Î»Î»Î¿Î³Î® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÎµÏÎ¹Î­ÏÎµÎ¹ ÎŒÏÎœÎ¿ ÎŒÎ¿ÎœÎ±ÎŽÎ¹ÎºÎ¬ ÏÏÎ¿Î¹ÏÎµÎ¯Î±.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÎžÎµÏÎ¹ÎºÎ®.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÎžÎµÏÎ¹ÎºÎ® Î® ÎŒÎ·ÎŽÎµÎœÎ¹ÎºÎ®.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ Î±ÏÎœÎ·ÏÎ¹ÎºÎ®.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ Î±ÏÎœÎ·ÏÎ¹ÎºÎ® Î® ÎŒÎ·ÎŽÎµÎœÎ¹ÎºÎ®.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ· Î¶ÏÎœÎ· ÏÏÎ±Ï.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>ÎÏ
+ÏÏÏ Î¿ ÎºÏÎŽÎ¹ÎºÏÏ ÏÏÏÏÎ²Î±ÏÎ·Ï Î­ÏÎµÎ¹ ÎŽÎ¹Î±ÏÏÎµÏÏÎµÎ¹ ÏÎµ ÏÎ±ÏÎ±Î²Î¯Î±ÏÎ· ÎŽÎµÎŽÎ¿ÎŒÎ­ÎœÏÎœ. Î Î±ÏÎ±ÎºÎ±Î»Î¿ÏÎŒÎµ ÎœÎ± ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î®ÏÎµÏÎµ Î­ÎœÎ±Îœ Î¬Î»Î»Î¿ ÎºÏÎŽÎ¹ÎºÏ.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÎŒÎµÏÎ±ÎŸÏ {{ min }} ÎºÎ±Î¹ {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ¿ ÏÎœÎ¿ÎŒÎ± Ï
+ÏÎ¿ÎŽÎ¿ÏÎ®Ï.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Î€Î¿ ÎœÎ¿ÏÎŒÎµÏÎ¿ ÏÏÎœ ÏÏÎ¿Î¹ÏÎµÎ¯ÏÎœ ÏÎµ Î±Ï
+ÏÎ® ÏÎ· ÏÏ
+Î»Î»Î¿Î³Î® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Î»Î±ÏÎ»Î¬ÏÎ¹Î¿ ÏÎ¿Ï
+ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± Î¹ÎºÎ±ÎœÎ¿ÏÎ¿Î¹ÎµÎ¯ ÏÎ¿Ï
+Î»Î¬ÏÎ¹ÏÏÎ¿Îœ Î­ÎœÎ±Îœ Î±ÏÏ ÏÎ¿Ï
+Ï ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÎµÏÎ¹Î¿ÏÎ¹ÏÎŒÎ¿ÏÏ: </target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>ÎÎ¬ÎžÎµ ÏÏÎ¿Î¹ÏÎµÎ¯Î¿ ÏÎµ Î±Ï
+ÏÎ® ÏÎ· ÏÏ
+Î»Î»Î¿Î³Î® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± Î¹ÎºÎ±ÎœÎ¿ÏÎ¿Î¹ÎµÎ¯ ÏÎ¿ ÎŽÎ¹ÎºÏ ÏÎ¿Ï
+ ÏÏÎœÎ¿Î»Î¿ ÏÎµÏÎ¹Î¿ÏÎ¹ÏÎŒÏÎœ.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ¿ International Securities Identification Number (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÎŒÎ¯Î± Î­Î³ÎºÏ
+ÏÎ· Î­ÎºÏÏÎ±ÏÎ·.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ¿ ÏÏÏÎŒÎ± CSS.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ· CIDR ÏÎ·ÎŒÎµÎ¹Î¿Î³ÏÎ±ÏÎ¯Î±.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Î ÏÎ¹ÎŒÎ® ÏÎ¿Ï
+ netmask ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ Î±ÎœÎ¬ÎŒÎµÏÎ± ÏÎµ {{ min }} ÎºÎ±Î¹ {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Î€Î¿ ÏÎœÎ¿ÎŒÎ± Î±ÏÏÎµÎ¯Î¿Ï
+ ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎµÎ³Î¬Î»Î¿. ÎÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± Î­ÏÎµÎ¹ Î­ÏÏ {{ filename_max_length }} ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±.|Î€Î¿ ÏÎœÎ¿ÎŒÎ± Î±ÏÏÎµÎ¯Î¿Ï
+ ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎµÎ³Î¬Î»Î¿. ÎÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± Î­ÏÎµÎ¹ Î­ÏÏ {{ filename_max_length }} ÏÎ±ÏÎ±ÎºÏÎ®ÏÎµÏ.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Î Î¹ÏÏÏÏ ÏÎ¿Ï
+ ÎºÏÎŽÎ¹ÎºÎ¿Ï ÏÏÏÏÎ²Î±ÏÎ·Ï ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÏÎ±ÎŒÎ·Î»Î®. Î§ÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î®ÏÏÎµ Î­ÎœÎ±Îœ Î¹ÏÏÏ
+ÏÏÏÎµÏÎ¿ ÎºÏÎŽÎ¹ÎºÏ ÏÏÏÏÎ²Î±ÏÎ·Ï.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>ÎÏ
+ÏÎ® Î· ÏÎ¹ÎŒÎ® ÏÎµÏÎ¹Î­ÏÎµÎ¹ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎµÏ ÏÎ¿Ï
+ ÎŽÎµÎœ ÎµÏÎ¹ÏÏÎ­ÏÎ¿ÎœÏÎ±Î¹ Î±ÏÏ ÏÎ¿ ÏÏÎ­ÏÎ¿Îœ ÎµÏÎ¯ÏÎµÎŽÎ¿ ÏÎµÏÎ¹Î¿ÏÎ¹ÏÎŒÎ¿Ï.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>ÎÎµÎœ ÎµÏÎ¹ÏÏÎ­ÏÎµÏÎ±Î¹ Î· ÏÏÎ®ÏÎ· Î±ÏÏÎ±ÏÏÎœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÏÎœ.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>ÎÎµÎœ ÎµÏÎ¹ÏÏÎ­ÏÎµÏÎ±Î¹ Î· ÎŒÎ¯ÎŸÎ· Î±ÏÎ¹ÎžÎŒÏÎœ Î±ÏÏ ÎŽÎ¹Î±ÏÎ¿ÏÎµÏÎ¹ÎºÎ¬ Î³ÏÎ±ÏÎ®ÎŒÎ±ÏÎ±.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>ÎÎµÎœ ÎµÏÎ¹ÏÏÎ­ÏÎµÏÎ±Î¹ Î· ÏÏÎ®ÏÎ· ÎºÏÏ
+ÏÏÎœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÏÎœ ÎµÏÎ¹ÎºÎ¬Î»Ï
+ÏÎ·Ï.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Î ÎµÏÎ­ÎºÏÎ±ÏÎ· ÏÎ¿Ï
+ Î±ÏÏÎµÎ¯Î¿Ï
+ ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ· ({{ extension }}). ÎÎ¹ ÎµÏÎ¹ÏÏÎµÏÏÏÎŒÎµÎœÎµÏ ÎµÏÎµÎºÏÎ¬ÏÎµÎ¹Ï ÎµÎ¯ÎœÎ±Î¹ {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Î ÎºÏÎŽÎ¹ÎºÎ¿ÏÎ¿Î¯Î·ÏÎ· ÏÎ±ÏÎ±ÎºÏÎ®ÏÏÎœ ÏÎ¿Ï
+ Î±ÎœÎ¹ÏÎœÎµÏÏÎ·ÎºÎµ ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ· ({{ detected }}). ÎÎ¹ ÎµÏÎ¹ÏÏÎµÏÏÎŒÎµÎœÎµÏ ÎºÏÎŽÎ¹ÎºÎ¿ÏÎ¿Î¹Î®ÏÎµÎ¹Ï ÎµÎ¯ÎœÎ±Î¹ {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>ÎÏ
+ÏÏÏ Î¿ Î±ÏÎ¹ÎžÎŒÏÏ ÎŽÎµÎœ ÎµÎ¯ÎœÎ±Î¹ Î­Î³ÎºÏ
+ÏÎ· ÎŽÎ¹ÎµÏÎžÏ
+ÎœÏÎ· MAC.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">ÎÏ
+ÏÎ® Î· ÎŽÎ¹ÎµÏÎžÏ
+ÎœÏÎ· URL Î»ÎµÎ¯ÏÎµÎ¹ Î­ÎœÎ±Ï ÏÎ¿ÎŒÎ­Î±Ï Î±ÎœÏÏÎ±ÏÎ¿Ï
+ ÎµÏÎ¹ÏÎ­ÎŽÎ¿Ï
+.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.en.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.en.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.en.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="en" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>This value should be false.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>This value should be true.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>This value should be of type {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>This value should be blank.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>The value you selected is not a valid choice.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>One or more of the given values is invalid.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>This field was not expected.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>This field is missing.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>This value is not a valid date.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>This value is not a valid datetime.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>This value is not a valid email address.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>The file could not be found.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>The file is not readable.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>This value should be {{ limit }} or less.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>This value should be {{ limit }} or more.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>This value should not be blank.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>This value should not be null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>This value should be null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>This value is not valid.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>This value is not a valid time.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>This value is not a valid URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>The two values should be equal.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>The file is too large.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>The file could not be uploaded.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>This value should be a valid number.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>This file is not a valid image.</target>
+            </trans-unit>
+            <trans-unit id="37">
+                <source>This is not a valid IP address.</source>
+                <target>This value is not a valid IP address.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>This value is not a valid language.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>This value is not a valid locale.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>This value is not a valid country.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>This value is already used.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>The size of the image could not be detected.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>This value should be the user's current password.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>The file was only partially uploaded.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>No file was uploaded.</target>
+            </trans-unit>
+            <trans-unit id="51">
+                <source>No temporary folder was configured in php.ini.</source>
+                <target>No temporary folder was configured in php.ini, or the configured folder does not exist.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Cannot write temporary file to disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>A PHP extension caused the upload to fail.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Invalid card number.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Unsupported card type or invalid card number.</target>
+            </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>This value is not a valid International Bank Account Number (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>This value is not a valid ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>This value is not a valid ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>This value is neither a valid ISBN-10 nor a valid ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>This value is not a valid ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>This value is not a valid currency.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>This value should be equal to {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>This value should be greater than {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>This value should be greater than or equal to {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>This value should be less than {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>This value should be less than or equal to {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>This value should not be equal to {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>An empty file is not allowed.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>The host could not be resolved.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>This value does not match the expected {{ charset }} charset.</target>
+            </trans-unit>
+            <trans-unit id="81">
+                <source>This is not a valid Business Identifier Code (BIC).</source>
+                <target>This value is not a valid Business Identifier Code (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Error</target>
+            </trans-unit>
+            <trans-unit id="83">
+                <source>This is not a valid UUID.</source>
+                <target>This value is not a valid UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>This value should be a multiple of {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>This value should be valid JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>This collection should contain only unique elements.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>This value should be positive.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>This value should be either positive or zero.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>This value should be negative.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>This value should be either negative or zero.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>This value is not a valid timezone.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>This password has been leaked in a data breach, it must not be used. Please use another password.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>This value should be between {{ min }} and {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>This value is not a valid hostname.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>The number of elements in this collection should be a multiple of {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>This value should satisfy at least one of the following constraints:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Each element of this collection should satisfy its own set of constraints.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>This value is not a valid International Securities Identification Number (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>This value should be a valid expression.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>This value is not a valid CSS color.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>This value is not a valid CIDR notation.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>The value of the netmask should be between {{ min }} and {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>The password strength is too low. Please use a stronger password.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>This value contains characters that are not allowed by the current restriction-level.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Using invisible characters is not allowed.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Mixing numbers from different scripts is not allowed.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Using hidden overlay characters is not allowed.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>This value is not a valid MAC address.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>This URL is missing a top-level domain.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.es.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.es.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.es.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="es" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Este valor deberÃ­a ser falso.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Este valor deberÃ­a ser verdadero.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Este valor deberÃ­a ser de tipo {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Este valor deberÃ­a estar vacÃ­o.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>El valor seleccionado no es una opciÃ³n vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Debe seleccionar al menos {{ limit }} opciÃ³n.|Debe seleccionar al menos {{ limit }} opciones.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Debe seleccionar como mÃ¡ximo {{ limit }} opciÃ³n.|Debe seleccionar como mÃ¡ximo {{ limit }} opciones.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Uno o mÃ¡s de los valores indicados no son vÃ¡lidos.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Este campo no se esperaba.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Este campo falta.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Este valor no es una fecha vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Este valor no es una fecha y hora vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Este valor no es una direcciÃ³n de email vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>No se pudo encontrar el archivo.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>No se puede leer el archivo.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>El archivo es demasiado grande ({{ size }} {{ suffix }}). El tamaÃ±o mÃ¡ximo permitido es {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>El tipo mime del archivo no es vÃ¡lido ({{ type }}). Los tipos mime vÃ¡lidos son {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Este valor deberÃ­a ser {{ limit }} o menos.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Este valor es demasiado largo. DeberÃ­a tener {{ limit }} carÃ¡cter o menos.|Este valor es demasiado largo. DeberÃ­a tener {{ limit }} caracteres o menos.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Este valor deberÃ­a ser {{ limit }} o mÃ¡s.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Este valor es demasiado corto. DeberÃ­a tener {{ limit }} carÃ¡cter o mÃ¡s.|Este valor es demasiado corto. DeberÃ­a tener {{ limit }} caracteres o mÃ¡s.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Este valor no deberÃ­a estar vacÃ­o.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Este valor no deberÃ­a ser nulo.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Este valor deberÃ­a ser nulo.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Este valor no es vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Este valor no es una hora vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Este valor no es una URL vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Los dos valores deberÃ­an ser iguales.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>El archivo es demasiado grande. El tamaÃ±o mÃ¡ximo permitido es {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>El archivo es demasiado grande.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>No se pudo subir el archivo.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Este valor deberÃ­a ser un nÃºmero vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>El archivo no es una imagen vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Este valor no es una direcciÃ³n IP vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Este valor no es un idioma vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Este valor no es una localizaciÃ³n vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Este valor no es un paÃ­s vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Este valor ya se ha utilizado.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>No se pudo determinar el tamaÃ±o de la imagen.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>El ancho de la imagen es demasiado grande ({{ width }}px). El ancho mÃ¡ximo permitido es de {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>El ancho de la imagen es demasiado pequeÃ±o ({{ width }}px). El ancho mÃ­nimo requerido es {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>La altura de la imagen es demasiado grande ({{ height }}px). La altura mÃ¡xima permitida es de {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>La altura de la imagen es demasiado pequeÃ±a ({{ height }}px). La altura mÃ­nima requerida es de {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Este valor deberÃ­a ser la contraseÃ±a actual del usuario.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Este valor deberÃ­a tener exactamente {{ limit }} carÃ¡cter.|Este valor deberÃ­a tener exactamente {{ limit }} caracteres.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>El archivo se cargÃ³ solo parcialmente.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>No se subiÃ³ ningÃºn archivo.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Ninguna carpeta temporal fue configurada en php.ini o la carpeta configurada no existe.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>No se pudo escribir el archivo temporal en el disco.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Una extensiÃ³n de PHP provocÃ³ que la carga fallara.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Esta colecciÃ³n debe contener {{ limit }} elemento o mÃ¡s.|Esta colecciÃ³n debe contener {{ limit }} elementos o mÃ¡s.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Esta colecciÃ³n debe contener {{ limit }} elemento o menos.|Esta colecciÃ³n debe contener {{ limit }} elementos o menos.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Esta colecciÃ³n debe contener exactamente {{ limit }} elemento.|Esta colecciÃ³n debe contener exactamente {{ limit }} elementos.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>NÃºmero de tarjeta invÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipo de tarjeta no soportado o nÃºmero de tarjeta invÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Este valor no es un NÃºmero de Cuenta Bancaria Internacional (IBAN) vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Este valor no es un ISBN-10 vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Este valor no es un ISBN-13 vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Este valor no es ni un ISBN-10 vÃ¡lido ni un ISBN-13 vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Este valor no es un ISSN vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Este valor no es una divisa vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser igual que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser mayor que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser mayor o igual que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser idÃ©ntico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser menor que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser menor o igual que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser distinto de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor no deberÃ­a ser idÃ©ntico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>La proporciÃ³n de la imagen es demasiado grande ({{ ratio }}). La mÃ¡xima proporciÃ³n permitida es {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>La proporciÃ³n de la imagen es demasiado pequeÃ±a ({{ ratio }}). La mÃ­nima proporciÃ³n permitida es {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>La imagen es cuadrada ({{ width }}x{{ height }}px). Las imÃ¡genes cuadradas no estÃ¡n permitidas.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>La imagen estÃ¡ orientada horizontalmente ({{ width }}x{{ height }}px). Las imÃ¡genes orientadas horizontalmente no estÃ¡n permitidas.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>La imagen estÃ¡ orientada verticalmente ({{ width }}x{{ height }}px). Las imÃ¡genes orientadas verticalmente no estÃ¡n permitidas.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>No se permite un archivo vacÃ­o.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>No se puede resolver el host.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>La codificaciÃ³n de caracteres para este valor deberÃ­a ser {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Este valor no es un CÃ³digo de IdentificaciÃ³n de Negocios (BIC) vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Error</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Este valor no es un UUID vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser mÃºltiplo de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Este CÃ³digo de IdentificaciÃ³n Bancaria (BIC) no estÃ¡ asociado con el IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Este valor deberÃ­a ser un JSON vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Esta colecciÃ³n deberÃ­a tener exclusivamente elementos Ãºnicos.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Este valor deberÃ­a ser positivo.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Este valor deberÃ­a ser positivo o igual a cero.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Este valor deberÃ­a ser negativo.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Este valor deberÃ­a ser negativo o igual a cero.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Este valor no es una zona horaria vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Esta contraseÃ±a no se puede utilizar porque estÃ¡ incluida en un listado de contraseÃ±as pÃºblicas obtenido gracias a fallos de seguridad de otros sitios y aplicaciones. Por favor, utilice otra contraseÃ±a.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Este valor deberÃ­a estar entre {{ min }} y {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Este valor no es un nombre de host vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>El nÃºmero de elementos en esta colecciÃ³n deberÃ­a ser mÃºltiplo de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Este valor deberÃ­a satisfacer al menos una de las siguientes restricciones:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Cada elemento de esta colecciÃ³n deberÃ­a satisfacer su propio conjunto de restricciones.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Este valor no es un nÃºmero de identificaciÃ³n internacional de valores (ISIN) vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Este valor deberÃ­a ser una expresiÃ³n vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Este valor no es un color CSS vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Este valor no es una notaciÃ³n CIDR vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>El valor de la mÃ¡scara de red deberÃ­a estar entre {{ min }} y {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>El nombre del archivo es demasiado largo. Debe tener {{ filename_max_length }} carÃ¡cter o menos.|El nombre del archivo es demasiado largo. Debe tener {{ filename_max_length }} caracteres o menos.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>La seguridad de la contraseÃ±a es demasiado baja. Por favor, utilice una contraseÃ±a mÃ¡s segura.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Este valor contiene caracteres que no estÃ¡n permitidos segÃºn el nivel de restricciÃ³n actual.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>No se permite el uso de caracteres invisibles.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>No estÃ¡ permitido mezclar nÃºmeros de diferentes scripts.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>No estÃ¡ permitido el uso de caracteres superpuestos ocultos.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>La extensiÃ³n del archivo no es vÃ¡lida ({{ extension }}). Las extensiones permitidas son {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>La codificaciÃ³n de los caracteres detectada es invÃ¡lida ({{ detected }}). Las codificaciones permitidas son {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Este valor no es una direcciÃ³n MAC vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Esta URL no contiene una extensiÃ³n de dominio (TLD).</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target>Este valor es demasiado corto. Debe contener al menos una palabra.|Este valor es demasiado corto. Debe contener al menos {{ min }} palabras.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target>Este valor es demasiado largo. Debe contener una palabra.|Este valor es demasiado largo. Debe contener {{ max }} palabras o menos.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.et.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.et.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.et.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="et" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>VÃ€Ã€rtus peaks olema vÃ€Ã€r.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>VÃ€Ã€rtus peaks oleme tÃµene.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>VÃ€Ã€rtus peaks olema {{ type }}-tÃŒÃŒpi.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>VÃ€Ã€rtus peaks olema tÃŒhi.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>VÃ€Ã€rtus peaks olema ÃŒks etteantud valikutest.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Valima peaks vÃ€hemalt {{ limit }} valikut.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Valima peaks mitte rohkem kui  {{ limit }} valikut.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Ãks vÃµi rohkem vÃ€Ã€rtustest on vigane.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>See vÃ€li ei olnud oodatud.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>See vÃ€li on puudu.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>VÃ€Ã€rtus pole korrektne kuupÃ€ev.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>VÃ€Ã€rtus pole korrektne kuupÃ€ev ja kellaeg.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>VÃ€Ã€rtus pole korrektne e-maili aadress.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Faili ei leita.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Fail ei ole loetav.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fail on liiga suur ({{ size }} {{ suffix }}). Suurim lubatud suurus on {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Faili sisutÃŒÃŒp on vigane ({{ type }}). Lubatud sisutÃŒÃŒbid on {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>VÃ€Ã€rtus peaks olema {{ limit }} vÃµi vÃ€hem.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>VÃ€Ã€rtus on liiga pikk. Pikkus peaks olema {{ limit }} tÃ€hemÃ€rki vÃµi vÃ€hem.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>VÃ€Ã€rtus peaks olema {{ limit }} vÃµi rohkem.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>VÃ€Ã€rtus on liiga lÃŒhike. Pikkus peaks  olema {{ limit }} tÃ€hemÃ€rki vÃµi rohkem.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>VÃ€Ã€rtus ei tohiks olla tÃŒhi.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>VÃ€Ã€rtus ei tohiks olla 'null'.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>VÃ€Ã€rtus peaks olema 'null'.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>VÃ€Ã€rtus on vigane.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>VÃ€Ã€rtus pole korrektne aeg.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>VÃ€Ã€rtus pole korrektne URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>VÃ€Ã€rtused peaksid olema vÃµrdsed.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fail on liiga suur. Maksimaalne lubatud suurus on {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Fail on liiga suur.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Faili ei saa ÃŒles laadida.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>VÃ€Ã€rtus peaks olema korrektne number.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Fail ei ole korrektne pilt.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>See vÃ€Ã€rtus ei ole kehtiv IP-aadress.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>VÃ€Ã€rtus pole korrektne keel.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>VÃ€Ã€rtus pole korrektne asukohakeel.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>VÃ€Ã€rtus pole olemasolev riik.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>VÃ€Ã€rtust on juba kasutatud.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Pildi suurust polnud vÃµimalik tuvastada.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Pilt on liiga lai ({{ width }}px). Suurim lubatud laius on {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Pilt on liiga kitsas ({{ width }}px). VÃ€him lubatud laius on {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Pilt on liiga pikk ({{ height }}px). Lubatud suurim pikkus on {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Pilt pole piisavalt pikk ({{ height }}px). Lubatud vÃ€him pikkus on {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>VÃ€Ã€rtus peaks olema kasutaja kehtiv salasÃµna.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>VÃ€Ã€rtus peaks olema tÃ€pselt {{ limit }} tÃ€hemÃ€rk pikk.|VÃ€Ã€rtus peaks olema tÃ€pselt {{ limit }} tÃ€hemÃ€rki pikk.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Fail ei laetud tÃ€ielikult ÃŒles.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ãhtegi faili ei laetud ÃŒles.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Ajutine kaust php.ini-s ei olnud seadistatud vÃµi seadistatud kaust ei eksisteeri.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Ajutist faili ei saa kettale kirjutada.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP laiendi tÃµttu ebaÃµnnestus faili ÃŒleslaadimine.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Kogumikus peaks olema vÃ€hemalt {{ limit }} element.|Kogumikus peaks olema vÃ€hemalt {{ limit }} elementi.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Kogumikus peaks olema ÃŒlimalt {{ limit }} element.|Kogumikus peaks olema ÃŒlimalt {{ limit }} elementi.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Kogumikus peaks olema tÃ€pselt {{ limit }} element.|Kogumikus peaks olema tÃ€pselt {{ limit }}|elementi.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Vigane kaardi number.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Kaardi tÃŒÃŒpi ei toetata vÃµi kaardi number on vigane.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>See vÃ€Ã€rtus ei ole kehtiv Rahvusvaheline Kontonumber (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>VÃ€Ã€rtus pole korrektne ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>VÃ€Ã€rtus pole korrektne ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>VÃ€Ã€rtus pole korrektne ISBN-10 ega ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>VÃ€Ã€rtus pole korrektne ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>VÃ€Ã€rtus pole korrektne valuuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>VÃ€Ã€rtus peaks olema vÃµrdne {{ compared_value }}-ga.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>VÃ€Ã€rtus peaks olema suurem kui {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>VÃ€Ã€rtus peaks olema suurem kui vÃµi vÃµrduma {{ compared_value }}-ga.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>VÃ€Ã€rtus peaks olema identne vÃ€Ã€rtusega {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>VÃ€Ã€rtus peaks olema vÃ€iksem kui {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>VÃ€Ã€rtus peaks olema vÃ€iksem kui vÃµi vÃµrduma {{ compared_value }}-ga.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>VÃ€Ã€rtus ei tohiks vÃµrduda {{ compared_value }}-ga.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>VÃ€Ã€rtus ei tohiks olla identne vÃ€Ã€rtusega {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Kuvasuhe on liiga suur ({{ ratio }}). Lubatud maksimaalne suhe on {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Kuvasuhe on liiga vÃ€ike ({{ ratio }}). Oodatav minimaalne suhe on {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Pilt on ruudukujuline ({{ width }}x{{ height }}px). Ruudukujulised pildid pole lubatud.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Pilt on horisontaalselt orienteeritud ({{ width }}x{{ height }}px). Maastikulised pildid pole lubatud.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Pilt on vertikaalselt orienteeritud ({{ width }}x{{ height }}px). Portreepildid pole lubatud.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>TÃŒhi fail pole lubatud.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Sellist domeeni ei Ãµnnestunud leida.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>See vÃ€Ã€rtus ei ÃŒhti eeldatava tÃ€hemÃ€rgiga {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>See vÃ€Ã€rtus ei ole kehtiv BIC-kood.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Viga</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>See vÃ€Ã€rtus ei ole kehtiv UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>See vÃ€Ã€rtus peaks olema vÃ€Ã€rtuse {{ compared_value }} kordne.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>See ettevÃµtte identifitseerimiskood (BIC) ei ole seotud IBAN-iga {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>See vÃ€Ã€rtus peaks olema kehtiv JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>See kogu peaks sisaldama ainult unikaalseid elemente.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>See vÃ€Ã€rtus peaks olema positiivne.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>See vÃ€Ã€rtus peaks olema kas positiivne vÃµi null.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>See vÃ€Ã€rtus peaks olema negatiivne.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>See vÃ€Ã€rtus peaks olema kas negatiivne vÃµi null.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>See vÃ€Ã€rtus pole kehtiv ajavÃ¶Ã¶nd.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>See parool on lekkinud andmerikkumise korral, seda ei tohi kasutada. Palun kasutage muud parooli.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>See vÃ€Ã€rtus peaks olema vahemikus {{ min }} kuni {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>See vÃ€Ã€rtus pole korrektne domeeninimi.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Selles kogus olevate elementide arv peab olema arvu {{ compared_value }} kordne.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>See vÃ€Ã€rtus peab vastama vÃ€hemalt ÃŒhele jÃ€rgmistest tingimustest:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>KÃµik vÃ€Ã€rtused selles kogus peavad vastama oma tingimustele.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>See vÃ€Ã€rtus pole korrektne ISIN-kood.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>See vÃ€Ã€rtus pole korrektne avaldis.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>See vÃ€Ã€rtus pole korrektne CSS-i vÃ€rv.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>See vÃ€Ã€rtus pole korrektne CIDR vÃµrguaadress.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>VÃµrgumaski vÃ€Ã€rtus peaks olema vahemikus {{ min }} kuni {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Failinimi on liiga pikk. See peaks olema {{ filename_max_length }} tÃ€hemÃ€rk vÃµi vÃ€hem.|Failinimi on liiga pikk. See peaks olema {{ filename_max_length }} tÃ€hemÃ€rki vÃµi vÃ€hem.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Parooli tugevus on liiga madal. Palun kasuta tugevamat parooli.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>See vÃ€Ã€rtus sisaldab tÃ€hemÃ€rke, mida praegune piirangu tase ei luba.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>MittenÃ€htavate tÃ€hemÃ€rkide kasutamine ei ole lubatud.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Eri kirjasÃŒsteemidest pÃ€rit numbrite koos kasutamine pole lubatud.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Peidetud tÃ€hemÃ€rkide kasutamine pole lubatud.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Faili laiend on vigane ({{ extension }}). Lubatud laiendid on {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Tuvastatud teksti kodeering on vigane ({{ detected }}). Lubatud kodeeringud on {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>See vÃ€Ã€rtus ei ole kehtiv MAC-aadress.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Sellel URL-il puudub ÃŒlataseme domeen.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.eu.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.eu.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.eu.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="eu" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Balio hau faltsua izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Balio hau egia izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Balio hau {{ type }} motakoa izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Balio hau hutsik egon beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Hautatu duzun balioa ez da aukera egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Gutxienez aukera {{ limit }} hautatu behar duzu.|Gutxienez {{ limit }} aukera hautatu behar dituzu.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Gehienez aukera {{ limit }} hautatu behar duzu.|Gehienez {{ limit }} aukera hautatu behar dituzu.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Emandako balioetatik gutxienez bat ez da egokia.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Eremu hau ez zen espero.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Eremu hau falta da.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Balio hau ez da data egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Balio hau ez da data-ordu egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Balio hau ez da posta elektroniko egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Ezin izan da fitxategia aurkitu.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Fitxategia ez da irakurgarria.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fitxategia handiegia da ({{ size }} {{ suffix }}). Baimendutako tamaina handiena {{ limit }} {{ suffix }} da.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Fitxategiaren mime mota ez da egokia ({{ type }}). Hauek dira baimendutako mime motak: {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Balio hau gehienez {{ limit }} izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Balio hau luzeegia da. Gehienez karaktere {{ limit }} eduki beharko luke.|Balio hau luzeegia da. Gehienez {{ limit }} karaktere eduki beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Balio hau gutxienez {{ limit }} izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Balio hau motzegia da. Karaktere {{ limit }} gutxienez eduki beharko luke.|Balio hau motzegia da. Gutxienez {{ limit }} karaktere eduki beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Balio hau ez litzateke hutsik egon behar.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Balio hau ez litzateke nulua izan behar.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Balio hau nulua izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Balio hau ez da egokia.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Balio hau ez da ordu egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Balio hau ez da baliabideen kokatzaile uniforme (URL) egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Bi balioak berdinak izan beharko lirateke.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fitxategia handiegia da. Baimendutako tamaina handiena {{ limit }} {{ suffix }} da.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Fitxategia handiegia da.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Ezin izan da fitxategia igo.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Balio hau zenbaki egoki bat izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Fitxategi hau ez da irudi egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Balio hau ez da IP helbide baliozko bat.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Balio hau ez da hizkuntza egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Balio hau ez da kokapen egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Balio hau ez da herrialde egoki bat.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Balio hau jadanik erabilia izan da.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Ezin izan da irudiaren tamaina detektatu.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Irudiaren zabalera handiegia da ({{ width }}px). Onartutako gehienezko zabalera {{ max_width }}px dira.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Irudiaren zabalera txikiegia da ({{ width }}px). Onartutako gutxieneko zabalera {{ min_width }}px dira.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Irudiaren altuera handiegia da ({{ height }}px). Onartutako gehienezko altuera {{ max_height }}px dira.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Irudiaren altuera txikiegia da ({{ height }}px). Onartutako gutxieneko altuera {{ min_height }}px dira.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Balio hau uneko erabiltzailearen pasahitza izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Balio honek zehazki karaktere {{ limit }} izan beharko luke.|Balio honek zehazki {{ limit }} karaktere izan beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Fitxategiaren zati bat bakarrik igo da.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ez da fitxategirik igo.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">Ez da aldi baterako karpetarik konfiguratu php.ini-n, edo konfiguratutako karpeta ez da existitzen.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Ezin izan da aldi baterako fitxategia diskoan idatzi.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP luzapen batek igoeraren hutsa eragin du.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Bilduma honek gutxienez elementu {{ limit }} eduki beharko luke.|Bilduma honek gutxienez {{ limit }} elementu eduki beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Bilduma honek gehienez elementu {{ limit }} eduki beharko luke.|Bilduma honek gehienez {{ limit }} elementu eduki beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Bilduma honek zehazki elementu {{ limit }} eduki beharko luke.|Bilduma honek zehazki {{ limit }} elementu eduki beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Txartel zenbaki baliogabea.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Txartel mota onartezina edo txartel zenbaki baliogabea.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Balio hau ez da Nazioarteko Banku Kontu Zenbaki (IBAN) baliozko bat.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Balio hau ez da onartutako ISBN-10 bat.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Balio hau ez da onartutako ISBN-13 bat.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Balio hau ez da onartutako ISBN-10 edo ISBN-13 bat.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Balio hau ez da onartutako ISSN bat.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Balio hau ez da baliozko moneta bat.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Balio hau {{ compared_value }}-(r)en berbera izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Balio hau {{ compared_value }} baino handiagoa izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Balio hau {{ compared_value }}-(r)en berdina edota handiagoa izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Balio hau {{ compared_value_type }} {{ compared_value }}-(r)en berbera izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Balio hau {{ compared_value }} baino txikiagoa izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Balio hau {{ compared_value }}-(r)en berdina edota txikiagoa izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Balio hau ez litzateke {{ compared_value }}-(r)en berdina izan behar.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Balio hau ez litzateke {{ compared_value_type }} {{ compared_value }}-(r)en berbera izan behar.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Irudiaren proportzioa oso handia da ({{ ratio }}). Onartutako proportzio handienda {{ max_ratio }} da.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Irudiaren proportzioa oso txikia da ({{ ratio }}). Onartutako proportzio txikiena {{ min_ratio }} da.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Irudia karratua da ({{ width }}x{{ height }}px). Karratuak diren irudiak ez dira onartzen.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Irudia horizontalki bideratua dago ({{ width }}x{{ height }}px). Horizontalki bideratutako irudiak ez dira onartzen.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Irudia bertikalki bideratua dago ({{ width }}x{{ height }}px). Bertikalki bideratutako irudiak ez dira onartzen.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Hutsik dagoen fitxategia ez da onartzen.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Host-a ezin da ebatzi.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Balio honen karaktere kodea ez da esperotakoa {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Balio hau ez da Negozioaren Identifikazio Kode (BIC) baliozko bat.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Errore</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Balio hau ez da UUID baliozko bat.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Balio honek {{ compared_value }}-ren multiploa izan beharko luke.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Banku Identifikazioko Kode hau ez dago lotuta {{ IBAN }} IBAN-rekin.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Balio honek baliozko JSON bat izan behar luke.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Bilduma honek elementu bakarrak soilik izan beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Balio honek positiboa izan beharko luke.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Balio honek positiboa edo zero izan behar luke.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Balio honek negatiboa izan behar luke.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Balio honek negatiboa edo zero izan behar luke.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Balio hori ez da baliozko ordu-eremua.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Pasahitz hori ezin da erabili, beste gune eta aplikazio batzuetako segurtasun-akatsei esker lortutako pasahitz publikoen zerrendan sartuta dagoelako. Mesedez, erabili beste pasahitz bat.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Balio honek {{ min }} eta {{ max }} artean egon behar luke.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Balio hori ez da ostalari-izen onargarria.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Bilduma honetako elementu-kopuruak {{ compared_value }}-ren multiploa izan behar luke.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Balio honek, gutxienez, murrizketa hauetako bat bete behar du:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Bilduma honetako elementu bakoitzak bere murriztapen-multzoa bete behar du.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Balio hori ez da baliozko baloreen nazioarteko identifikazio-zenbaki bat (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Balio hori baliozko adierazpena izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Balio hori ez da baliozko CSS kolorea.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Balio hori ez da baliozko CIDR notazioa.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Maskararen balioa {{ min }} eta {{ max }} artekoa izan beharko litzateke.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Fitxategiaren izena luzeegia da. Karaktere {{ filename_max_length }} edo gutxiago izan beharko lituzke.|Fitxategiaren izena luzeegia da. {{ filename_max_length }} karaktere edo gutxiago izan beharko lituzke.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Pasahitzaren sendotasuna baxuegia da. Mesedez, erabili pasahitz seguruagoa.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Egungo murrizte-mailak ez du balio honek dituen karaktereak onartzen.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Ez da onartzen karaktere ikusezinak erabiltzea.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Ez da onartzen script ezberdinetako zenbakiak nahastea</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Ez da onartzen karaktere gainjarri ezkutuen erabilera.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">Fitxategiaren luzapena ez da zuzena ({{ extension }}). Baimendutako luzapenak hauek dira: {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">Detektatutako karaktere-kodetzea ez da zuzena ({{ detected }}). Baimendutako kodetzeak hauek dira: {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Balio hau ez da MAC helbide baliozko bat.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">URL honek ez du goi-mailako domeinurik.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.fa.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.fa.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.fa.xlf	(revision 8435)
@@ -0,0 +1,706 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="fa" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ ÙØ§Ø¯Ø±Ø³Øª (False) ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ø¯Ø±Ø³Øª (True) ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ø§Ø² ÙÙØ¹ {{ type }} ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ø®Ø§ÙÛ ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Ù
+ÙØ¯Ø§Ø± Ø§ÙØªØ®Ø§Øš ØŽØ¯Ù ÛÚ© Ú¯Ø²ÛÙÙ Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>ØŽÙ
+Ø§ ØšØ§ÛØ¯ Ø­Ø¯Ø§ÙÙ {{ limit }} Ú¯Ø²ÛÙÙ Ø§ÙØªØ®Ø§Øš ÙÙ
+Ø§ÛÛØ¯.|ØŽÙ
+Ø§ ØšØ§ÛØ¯ Ø­Ø¯Ø§ÙÙ {{ limit }} Ú¯Ø²ÛÙÙ Ø§ÙØªØ®Ø§Øš ÙÙ
+Ø§ÛÛØ¯.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>ØŽÙ
+Ø§ ØšØ§ÛØ¯ Ø­Ø¯Ø§Ú©Ø«Ø± {{ limit }} Ú¯Ø²ÛÙÙ Ø§ÙØªØ®Ø§Øš ÙÙ
+Ø§ÛÛØ¯.|ØŽÙ
+Ø§ ØšØ§ÛØ¯ Ø­Ø¯Ø§Ú©Ø«Ø± {{ limit }} Ú¯Ø²ÛÙÙ Ø§ÙØªØ®Ø§Øš ÙÙ
+Ø§ÛÛØ¯.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>ÛÚ© ÛØ§ ÚÙØ¯ Ù
+ÙØ¯Ø§Ø± Ø¯Ø§Ø¯Ù ØŽØ¯Ù ÙØ§Ù
+Ø¹ØªØšØ± Ø§Ø³Øª.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target state="needs-review-translation">Ø§ÛÙ ÙÛÙØ¯ Ø§ÙØªØžØ§Ø± ÙÙ
+ÛâØ±ÙØª.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target state="needs-review-translation">Ø§ÛÙ ÙÛÙØ¯ Ú¯Ù
+ØŽØ¯Ù Ø§Ø³Øª.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© ØªØ§Ø±ÛØ® Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© ØªØ§Ø±ÛØ® Ù Ø²Ù
+Ø§Ù Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ø§ÛÙ ÛÚ© Ø¢Ø¯Ø±Ø³ Ø±Ø§ÛØ§ÙØ§Ù
+Ù (Ø§ÛÙ
+ÛÙ) Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>ÙØ§ÛÙ ÛØ§ÙØª ÙØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>ÙØ§ÛÙ ÙØ§ØšÙ Ø®ÙØ§ÙØ¯Ù ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ÙØ§ÛÙ ØšÛØŽ Ø§Ø² Ø§ÙØ¯Ø§Ø²Ù ØšØ²Ø±Ú¯ Ø§Ø³Øª({{ size }} {{ suffix }}). ØšÛØŽÛÙÙ (Ø­Ø¯Ø§Ú©Ø«Ø±) Ø§ÙØ¯Ø§Ø²Ù Ù
+Ø¬Ø§Ø² ØšØ±Ø§ØšØ± ØšØ§ {{ limit }} {{ suffix }} Ù
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>ÙÙØ¹ mime Ø§ÛÙ ÙØ§ÛÙ ÙØ§Ù
+Ø¹ØªØšØ± Ø§Ø³Øª({{ type }}). Ø§ÙÙØ§Ø¹ mime Ù
+Ø¬Ø§Ø² {{ types }} ÙØ³ØªÙØ¯.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ú©ÙÚÚ©ØªØ± Ù ÛØ§ Ù
+Ø³Ø§ÙÛ {{ limit }} ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ³ÛØ§Ø± Ø·ÙÙØ§ÙÛ Ø§Ø³Øª. ØšØ§ÛØ¯ Ø¯Ø§Ø±Ø§Û {{limit}} Ú©Ø§Ø±Ø§Ú©ØªØ± ÛØ§ Ú©Ù
+ØªØ± ØšØ§ØŽØ¯. | Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ³ÛØ§Ø± Ø·ÙÙØ§ÙÛ Ø§Ø³Øª. ØšØ§ÛØ¯ Ø¯Ø§Ø±Ø§Û {{limit}} Ú©Ø§Ø±Ø§Ú©ØªØ± ÛØ§ Ú©Ù
+ØªØ± ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ ØšØ²Ø±Ú¯ØªØ± Ù ÛØ§ Ù
+Ø³Ø§ÙÛ {{ limit }} ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšÛØŽ Ø§Ø² Ø§ÙØ¯Ø§Ø²Ù Ú©ÙØªØ§Ù Ø§Ø³Øª. ØšØ§ÛØ¯ {{ limit }} Ú©Ø§Ø±Ø§Ú©ØªØ± ÛØ§ ØšÛØŽØªØ± Ø¯Ø§ØŽØªÙ ØšØ§ØŽØ¯.|Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšÛØŽ Ø§Ø² Ø§ÙØ¯Ø§Ø²Ù Ú©ÙØªØ§Ù Ø§Ø³Øª. ØšØ§ÛØ¯ {{ limit }} Ú©Ø§Ø±Ø§Ú©ØªØ± ÛØ§ ØšÛØŽØªØ± Ø¯Ø§ØŽØªÙ ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÙØšØ§ÛØ¯ Ø®Ø§ÙÛ ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÙØšØ§ÛØ¯ Ø®Ø§ÙÛ ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ø®Ø§ÙÛ ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© Ø²Ù
+Ø§Ù Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØŽØ§Ù
+Ù ÛÚ© URL Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Ø¯Ù Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ ØšØ§ ÛÚ©Ø¯ÛÚ¯Ø± ØšØ±Ø§ØšØ± ØšØ§ØŽÙØ¯.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ÙØ§ÛÙ ØšÛØŽ Ø§Ø² Ø§ÙØ¯Ø§Ø²Ù ØšØ²Ø±Ú¯ Ø§Ø³Øª. ØšÛØŽÛÙÙ (Ø­Ø¯Ø§Ú©Ø«Ø±) Ø§ÙØ¯Ø§Ø²Ù Ù
+Ø¬Ø§Ø² {{ limit }} {{ suffix }} Ø§Ø³Øª.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>ÙØ§ÛÙ ØšÛØŽ Ø§Ø² Ø§ÙØ¯Ø§Ø²Ù ØšØ²Ø±Ú¯ Ø§Ø³Øª.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>ØšØ§Ø±Ú¯Ø°Ø§Ø±Û ÙØ§ÛÙ ØšØ§ ØŽÚ©Ø³Øª Ù
+ÙØ§Ø¬Ù Ú¯Ø±Ø¯ÛØ¯.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ ÛÚ© Ø¹Ø¯Ø¯ Ù
+Ø¹ØªØšØ± ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ø§ÛÙ ÙØ§ÛÙ ÛÚ© ØªØµÙÛØ± Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± Ø¢Ø¯Ø±Ø³ IP Ù
+Ø¹ØªØšØ±Û ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© Ø²ØšØ§Ù Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© Ù
+Ø­Ù (locale) Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© Ú©ØŽÙØ± Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÙØšÙØ§Ù Ø§Ø³ØªÙØ§Ø¯Ù ØŽØ¯Ù Ø§Ø³Øª.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Ø§ÙØ¯Ø§Ø²Ù ØªØµÙÛØ± ÙØ§ØšÙ ØŽÙØ§Ø³Ø§ÛÛ ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Ø¹Ø±Ø¶ ØªØµÙÛØ± ØšØ³ÛØ§Ø± ØšØ²Ø±Ú¯ Ø§Ø³Øª({{ width }}px). ØšÛØŽÛÙÙ (Ø­Ø¯Ø§Ú©Ø«Ø±) Ø¹Ø±Ø¶ Ù
+Ø¬Ø§Ø² {{ max_width }}px Ù
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Ø¹Ø±Ø¶ ØªØµÙÛØ± ØšØ³ÛØ§Ø± Ú©ÙÚÚ© Ø§Ø³Øª({{ width }}px). Ú©Ù
+ÛÙÙ (Ø­Ø¯Ø§ÙÙ) Ø¹Ø±Ø¶ Ù
+ÙØ±Ø¯ Ø§ÙØªØžØ§Ø± {{ min_width }}px Ù
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Ø§Ø±ØªÙØ§Ø¹ ØªØµÙÛØ± ØšØ³ÛØ§Ø± ØšØ²Ø±Ú¯ Ø§Ø³Øª({{ height }}px). ØšÛØŽÛÙÙ (Ø­Ø¯Ø§Ú©Ø«Ø±) Ø§Ø±ØªÙØ§Ø¹ Ù
+Ø¬Ø§Ø² {{ max_height }}px Ù
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Ø§Ø±ØªÙØ§Ø¹ ØªØµÙÛØ± ØšØ³ÛØ§Ø± Ú©ÙÚÚ© Ø§Ø³Øª({{ height }}px). Ú©Ù
+ÛÙÙ (Ø­Ø¯Ø§ÙÙ) Ø§Ø±ØªÙØ§Ø¹ Ù
+ÙØ±Ø¯ Ø§ÙØªØžØ§Ø± {{ min_height }}px Ù
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ø±Ù
+Ø²Ø¹ØšÙØ± ÙØ¹ÙÛ Ú©Ø§Ø±ØšØ± ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target> Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ø¯ÙÛÙØ§ {{ limit }} Ú©Ø§Ø±Ø§Ú©ØªØ± Ø¯Ø§ØŽØªÙ ØšØ§ØŽØ¯.| Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ø¯ÙÛÙØ§ {{ limit }} Ú©Ø§Ø±Ø§Ú©ØªØ± Ø¯Ø§ØŽØªÙ ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>ÙØ§ÛÙ ØšÙ ØµÙØ±Øª Ø¬Ø²ØŠÛ ØšØ§Ø±Ú¯Ø°Ø§Ø±Û Ú¯Ø±Ø¯ÛØ¯Ù Ø§Ø³Øª.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>ÙÛÚ ÙØ§ÛÙÛ ØšØ§Ø±Ú¯Ø°Ø§Ø±Û ÙØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">ÙÛÚ ÙŸÙØŽÙ Ù
+ÙÙØªÛ Ø¯Ø± php.ini ÙŸÛÚ©Ø±ØšÙØ¯Û ÙØŽØ¯Ù Ø§Ø³ØªØ ÛØ§ ÙŸÙØŽÙ ÙŸÛÚ©Ø±ØšÙØ¯Û ØŽØ¯Ù ÙØ¬ÙØ¯ ÙØ¯Ø§Ø±Ø¯.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>ÙØ§ÛÙ Ù
+ÙÙØªÛ Ø±Ø§ ÙÙ
+ÛâØªÙØ§Ù Ø¯Ø± Ø¯ÛØ³Ú© ÙÙØŽØª.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>ÛÚ© Ø§ÙØ²ÙÙÙ PHP ØšØ§Ø¹Ø« ØŽØ¯ ØšØ§Ø±Ú¯Ø°Ø§Ø±Û ÙØ§Ù
+ÙÙÙ ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ø§ÛÙ Ù
+Ø¬Ù
+ÙØ¹Ù ØšØ§ÛØ¯ Ø­Ø§ÙÛ {{ limit }} Ø¹ÙØµØ± ÛØ§ ØšÛØŽØªØ± ØšØ§ØŽØ¯.|Ø§ÛÙ Ù
+Ø¬Ù
+ÙØ¹Ù ØšØ§ÛØ¯ Ø­Ø§ÙÛ {{ limit }} Ø¹ÙØµØ± ÛØ§ ØšÛØŽØªØ± ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ø§ÛÙ Ù
+Ø¬Ù
+ÙØ¹Ù ØšØ§ÛØ¯ Ø­Ø§ÙÛ {{ limit }} Ø¹ÙØµØ± ÛØ§ Ú©Ù
+ØªØ± ØšØ§ØŽØ¯.|Ø§ÛÙ Ù
+Ø¬Ù
+ÙØ¹Ù ØšØ§ÛØ¯ Ø­Ø§ÙÛ {{ limit }} Ø¹ÙØµØ± ÛØ§ Ú©Ù
+ØªØ± ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ø§ÛÙ Ù
+Ø¬Ù
+ÙØ¹Ù ØšØ§ÛØ¯ Ø¯ÙÛÙØ§ Ø­Ø§ÙÛ {{ limit }} Ø¹ÙØµØ± ØšØ§ØŽØ¯.|Ø§ÛÙ Ù
+Ø¬Ù
+ÙØ¹Ù ØšØ§ÛØ¯ Ø¯ÙÛÙØ§ Ø­Ø§ÙÛ {{ limit }} Ø¹ÙØµØ± ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ØŽÙ
+Ø§Ø±Ù Ú©Ø§Ø±Øª ÙØ§Ù
+Ø¹ØªØšØ± Ø§Ø³Øª.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>ÙÙØ¹ Ú©Ø§Ø±Øª ÙŸØŽØªÛØšØ§ÙÛ ÙÙ
+ÛâØŽÙØ¯ Ù ÛØ§ ØŽÙ
+Ø§Ø±Ù Ú©Ø§Ø±Øª ÙØ§Ù
+Ø¹ØªØšØ± Ù
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© ØŽÙ
+Ø§Ø±Ù Ø­Ø³Ø§Øš ØšØ§ÙÚ©Û ØšÛÙâØ§ÙÙ
+ÙÙÛ (IBAN) Ù
+Ø¹ØªØšØ± ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© ISBN-10 Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© ISBN-13 Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© ISBN-10 Ù
+Ø¹ØªØšØ± Ù ÛØ§ ISBN-13 Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© ISSN Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© ÙØ§Ø­Ø¯ ÙŸÙÙ Ù
+Ø¹ØªØšØ± ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ ØšØ±Ø§ØšØ± ØšØ§ {{ compared_value }} ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ø§Ø² {{ compared_value }} ØšÛØŽØªØ± ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ ØšØ²Ø±Ú¯ØªØ± Ù ÛØ§ Ù
+Ø³Ø§ÙÛ ØšØ§ {{ compared_value }} ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ ØšØ±Ø§ØšØ± {{ compared_value_type }} {{ compared_value }} ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ú©Ù
+ØªØ± Ø§Ø² {{ compared_value }} ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ú©Ù
+ØªØ± Ù ÛØ§ Ù
+Ø³Ø§ÙÛ ØšØ§ {{ compared_value }} ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÙØšØ§ÛØ¯ ØšØ§ {{ compared_value }} ØšØ±Ø§ØšØ± ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÙØšØ§ÛØ¯ ØšØ±Ø§ØšØ± {{ compared_value_type }} {{ compared_value }} ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Ø§ØšØ¹Ø§Ø¯ ({{ ratio }}) Ø¹Ú©Ø³ ØšÛØŽ Ø§Ø² Ø­Ø¯ ØšØ²Ø±Ú¯ Ø§Ø³Øª. ØšÛØŽÛÙÙ (Ø­Ø¯Ø§Ú©Ø«Ø±) Ø§ØšØ¹Ø§Ø¯ Ù
+Ø¬Ø§Ø² {{ max_ratio }} Ù
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Ø§ØšØ¹Ø§Ø¯ ({{ ratio }}) Ø¹Ú©Ø³ ØšÛØŽ Ø§Ø² Ø­Ø¯ Ú©ÙÚÚ© Ø§Ø³Øª. Ú©Ù
+ÛÙÙ (Ø­Ø¯Ø§ÙÙ) Ø§ØšØ¹Ø§Ø¯ Ù
+ÙØ±Ø¯ Ø§ÙØªØžØ§Ø± {{ min_ratio }} Ù
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Ø§ÛÙ ØªØµÙÛØ± ÛÚ© Ù
+Ø±ØšØ¹ ({{ width }}x{{ height }}px) Ù
+ÛâØšØ§ØŽØ¯. ØªØµØ§ÙÛØ± Ù
+Ø±ØšØ¹ ØŽÚ©Ù Ù
+Ø¬Ø§Ø² ÙÙ
+ÛâØšØ§ØŽÙØ¯.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Ø§ÛÙ ØªØµÙÛØ± Ø§ÙÙÛ ({{ width }}x{{ height }}px) Ù
+ÛâØšØ§ØŽØ¯. ØªØµØ§ÙÛØ± Ø§ÙÙÛ Ù
+Ø¬Ø§Ø² ÙÙ
+ÛâØšØ§ØŽÙØ¯.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Ø§ÛÙ ØªØµÙÛØ± Ø¹Ù
+ÙØ¯Û ({{ width }}x{{ height }}px) Ù
+ÛâØšØ§ØŽØ¯. ØªØµØ§ÙÛØ± Ø¹Ù
+ÙØ¯Û Ù
+Ø¬Ø§Ø² ÙÙ
+ÛâØšØ§ØŽÙØ¯.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>ÙØ§ÛÙ Ø®Ø§ÙÛ Ù
+Ø¬Ø§Ø² ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Ù
+ÛØ²ØšØ§Ù (Host) ØŽÙØ§Ø³Ø§ÛÛ ÙØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± Ù
+Ø·Ø§ØšÙ charset Ù
+ÙØ±Ø¯ Ø§ÙØªØžØ§Ø± {{ charset }} ÙÙ
+Û ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© Ú©Ø¯ ØŽÙØ§Ø³Ù Ú©Ø³ØšâÙÚ©Ø§Ø± (BIC) Ù
+Ø¹ØªØšØ± ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Ø®Ø·Ø§</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© UUID Ù
+Ø¹ØªØšØ± ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ ÚÙØ¯ ØšØ±Ø§ØšØ± {{ compared_value }} ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ø§ÛÙ Ú©Ø¯ ØŽÙØ§Ø³Ø§ÛÛ Ú©Ø³ØšâÙâÚ©Ø§Ø± (BIC) ØšØ§ ØŽÙ
+Ø§Ø±Ù Ø­Ø³Ø§Øš ØšØ§ÙÚ©Û ØšÛÙâØ§ÙÙ
+ÙÙÛ (IBAN) {{ iban }} Ù
+Ø±ØªØšØ· ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ ÛÚ© JSON Ù
+Ø¹ØªØšØ± ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ø§ÛÙ Ù
+Ø¬Ù
+ÙØ¹Ù ØšØ§ÛØ¯ ÙÙØ· Ø­Ø§ÙÛ Ø¹ÙØ§ØµØ± ÛÚ©ØªØ§ ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ù
+Ø«ØšØª ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ù
+Ø«ØšØª ÛØ§ ØµÙØ± ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ù
+ÙÙÛ ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ù
+ÙÙÛ ÛØ§ ØµÙØ± ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© Ù
+ÙØ·ÙÙâØ²Ù
+Ø§ÙÛ (timezone) Ù
+Ø¹ØªØšØ± ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Ø§ÛÙ Ø±Ù
+Ø²Ø¹ØšÙØ± Ø¯Ø± ÛÚ© Ø±Ø®ÙÙâÛ Ø§Ø·ÙØ§Ø¹Ø§ØªÛ ÙØŽØª Ú©Ø±Ø¯Ù Ø§Ø³Øª. ÙØ·ÙØ§Ù Ø§Ø² ÛÚ© Ø±Ù
+Ø²Ø¹ØšÙØ± Ø¯ÛÚ¯Ø± Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ ØšÛÙ {{ min }} Ù {{ max }} ØšØ§ØŽØ¯</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© hostname Ù
+Ø¹ØªØšØ± ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>ØªØ¹Ø¯Ø§Ø¯ Ø¹ÙØ§ØµØ± Ø§ÛÙ Ù
+Ø¬Ù
+ÙØ¹Ù ØšØ§ÛØ¯ Ø¶Ø±ÛØšÛ Ø§Ø² {{ compared_value }} ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ Ø­Ø¯Ø§ÙÙ ÛÚ©Û Ø§Ø² Ù
+Ø­Ø¯ÙØ¯ÛØªâÙØ§Û Ø²ÛØ± Ø±Ø§ Ø§Ø±Ø¶Ø§ Ú©ÙØ¯:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>ÙØ± ÛÚ© Ø§Ø² Ø¹ÙØ§ØµØ± Ø§ÛÙ Ù
+Ø¬Ù
+ÙØ¹Ù ØšØ§ÛØ¯ Ø¯Ø³ØªÙ Ù
+Ø­Ø¯ÙØ¯ÛØªâÙØ§Û Ø®ÙØ¯ØŽ Ø±Ø§ Ø§Ø±Ø¶Ø§ Ú©ÙØ¯.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© ØŽÙ
+Ø§Ø±Ù ØŽÙØ§Ø³Ø§ÛÛ ØšÛÙâØ§ÙÙ
+ÙÙÛ Ø§ÙØ±Ø§Ù ØšÙØ§Ø¯Ø§Ø± (ISIN) Ù
+Ø¹ØªØšØ± ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ØšØ§ÛØ¯ ÛÚ© Ø¹ØšØ§Ø±Øª Ù
+Ø¹ØªØšØ± ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© Ø±ÙÚ¯ Ù
+Ø¹ØªØšØ± Ø¯Ø± CSS ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© ÙÙ
+Ø§Ø¯ Ù
+Ø¹ØªØšØ± Ø¯Ø± CIDR ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Ù
+ÙØ¯Ø§Ø± Ù
+Ø§Ø³Ú© ØŽØšÚ©Ù (NetMask) ØšØ§ÛØ¯ ØšÛÙ {{ min }} Ù {{ max }} ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>ÙØ§Ù
+ ÙØ§ÛÙ Ø·ÙÙØ§ÙÛ Ø§Ø³Øª. ÙØ§Ù
+ ÙØ§ÛÙ ØšØ§ÛØ¯ {{ filename_max_length }} Ú©Ø§Ø±Ø§Ú©ØªØ± ÛØ§ Ú©Ù
+ØªØ± ØšØ§ØŽØ¯.|ÙØ§Ù
+ ÙØ§ÛÙ Ø·ÙÙØ§ÙÛ Ø§Ø³Øª. ÙØ§Ù
+ ÙØ§ÛÙ ØšØ§ÛØ¯ {{ filename_max_length }} Ú©Ø§Ø±Ø§Ú©ØªØ± ÛØ§ Ú©Ù
+ØªØ± ØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Ø±Ù
+Ø² Ø¹ØšÙØ± Ø¶Ø¹ÛÙ Ø§Ø³Øª. ÙØ·ÙØ§ Ø§Ø² Ø±Ù
+Ø² Ø¹ØšÙØ± ÙÙÛâØªØ±Û Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± Ø­Ø§ÙÛ Ú©Ø§Ø±Ø§Ú©ØªØ±ÙØ§ÛÛ Ø§Ø³Øª Ú©Ù Ø¯Ø± Ø³Ø·Ø­ Ù
+Ø­Ø¯ÙØ¯ÛØª ÙØ¹ÙÛ Ù
+Ø¬Ø§Ø² ÙÛØ³ØªÙØ¯.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Ø§Ø³ØªÙØ§Ø¯Ù Ø§Ø² Ú©Ø§Ø±Ø§Ú©ØªØ±ÙØ§Û ÙØ§Ù
+Ø±ØŠÛ Ù
+Ø¬Ø§Ø² ÙÙ
+ÛâØšØ§ØŽØ¯.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Ù
+Ø®ÙÙØ· Ú©Ø±Ø¯Ù Ø§Ø¹Ø¯Ø§Ø¯ Ø§Ø² Ø§Ø³Ú©Ø±ÛÙŸØª ÙØ§Û Ù
+Ø®ØªÙÙ Ù
+Ø¬Ø§Ø² ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Ø§Ø³ØªÙØ§Ø¯Ù Ø§Ø² Ú©Ø§Ø±Ø§Ú©ØªØ±ÙØ§Û ÙÙ
+ÙŸÙØŽØ§ÙÛ ÙŸÙÙØ§Ù (hidden overlay characters) Ù
+Ø¬Ø§Ø² ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">ÙŸØ³ÙÙØ¯ ÙØ§ÛÙ ÙØ§Ù
+Ø¹ØªØšØ± Ø§Ø³Øª ({{ extension }}). ÙŸØ³ÙÙØ¯ÙØ§Û Ù
+Ø¬Ø§Ø² {{ extensions }} ÙØ³ØªÙØ¯.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">Ø±Ù
+Ø²Ú¯Ø°Ø§Ø±Û Ú©Ø§Ø±Ø§Ú©ØªØ± ØªØŽØ®ÛØµ Ø¯Ø§Ø¯Ù ØŽØ¯Ù ÙØ§Ù
+Ø¹ØªØšØ± Ø§Ø³Øª ({{ detected }}). Ø±Ù
+Ø²Ú¯Ø°Ø§Ø±ÛâÙØ§Û Ù
+Ø¬Ø§Ø² {{ encodings }} ÙØ³ØªÙØ¯.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Ø§ÛÙ Ù
+ÙØ¯Ø§Ø± ÛÚ© Ø¢Ø¯Ø±Ø³ MAC Ù
+Ø¹ØªØšØ± ÙÛØ³Øª.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Ø§ÛÙ URL ÙØ§ÙØ¯ Ø¯Ø§Ù
+ÙÙ Ø³Ø·Ø­ ØšØ§ÙØ§ Ø§Ø³Øª.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.fi.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.fi.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.fi.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="fi" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Arvon tulee olla epÃ€tosi.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Arvon tulee olla tosi.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Arvon tulee olla tyyppiÃ€ {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Arvon tulee olla tyhjÃ€.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Arvon tulee olla yksi annetuista vaihtoehdoista.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Sinun tulee valita vÃ€hintÃ€Ã€n yksi vaihtoehto.|Sinun tulee valita vÃ€hintÃ€Ã€n {{ limit }} vaihtoehtoa.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Sinun tulee valita enintÃ€Ã€n yksi vaihtoehto.|Sinun tulee valita enintÃ€Ã€n {{ limit }} vaihtoehtoa.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Yksi tai useampi annetuista arvoista on virheellinen.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>TÃ€tÃ€ kenttÃ€Ã€ ei odotettu.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>TÃ€mÃ€ kenttÃ€ puuttuu.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Annettu arvo ei ole kelvollinen pÃ€ivÃ€mÃ€Ã€rÃ€.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Annettu arvo ei ole kelvollinen pÃ€ivÃ€mÃ€Ã€rÃ€ ja kellonaika.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Annettu arvo ei ole kelvollinen sÃ€hkÃ¶postiosoite.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Tiedostoa ei lÃ¶ydy.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Tiedostoa ei voi lukea.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Tiedostonkoko ({{ size }} {{ suffix }}) on liian iso. Suurin sallittu tiedostonkoko on {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Tiedostotyyppi ({{ type }}) on virheellinen. Sallittuja tiedostotyyppejÃ€ ovat {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Arvon tulee olla {{ limit }} tai vÃ€hemmÃ€n.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Liian pitkÃ€ syÃ¶te. SyÃ¶te saa olla enintÃ€Ã€n yhden merkin.|Liian pitkÃ€ syÃ¶te. SyÃ¶te saa olla enintÃ€Ã€n {{ limit }} merkkiÃ€.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Arvon tulee olla {{ limit }} tai enemmÃ€n.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Liian lyhyt syÃ¶te. SyÃ¶tteen tulee olla vÃ€hintÃ€Ã€n yhden merkin.|Liian lyhyt syÃ¶te. SyÃ¶tteen tulee olla vÃ€hintÃ€Ã€n {{ limit }} merkkiÃ€.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>KenttÃ€ ei voi olla tyhjÃ€.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Annettu arvo ei voi olla null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Annetun arvon tulee olla null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Virheellinen arvo.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Annettu arvo ei ole kelvollinen kellonaika.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Annettu arvo ei ole kelvollinen URL-osoite.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Kahden annetun arvon tulee olla samat.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Annettu tiedosto on liian iso. Suurin sallittu tiedostokoko on {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Tiedosto on liian iso.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Tiedoston siirto epÃ€onnistui.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Arvon tulee olla numero.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Tiedosto ei ole kelvollinen kuva.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">TÃ€mÃ€ arvo ei ole kelvollinen IP-osoite.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Arvo ei ole kelvollinen kieli.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Arvo ei ole kelvollinen kieli- ja alueasetus (locale).</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Arvo ei ole kelvollinen maa.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Arvo on jo kÃ€ytetty.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Kuvan kokoa ei tunnistettu.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Kuva on liian leveÃ€ ({{ width }} px). Leveyden tulee olla enintÃ€Ã€n {{ max_width }} px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Kuva on liian kapea ({{ width }} px). Leveyden tulee olla vÃ€hintÃ€Ã€n {{ min_width }} px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Kuva on liian korkea ({{ width }} px). Korkeuden tulee olla enintÃ€Ã€n {{ max_width }} px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Kuva on liian matala ({{ height }} px). Korkeuden tulee olla vÃ€hintÃ€Ã€n {{ min_height }} px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Arvon tulee olla kÃ€yttÃ€jÃ€n tÃ€mÃ€nhetkinen salasana.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Arvon tulee olla tasan yhden merkin pituinen.|Arvon tulee olla tasan {{ limit }} merkin pituinen.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Tiedosto ladattiin vain osittain.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Tiedostoa ei ladattu.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">VÃ€liaikaista kansiota ei ole mÃ€Ã€ritetty php.ini:ssÃ€, tai mÃ€Ã€ritetty kansio ei ole olemassa.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>VÃ€liaikaistiedostoa ei voitu kirjoittaa levylle.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP-laajennoksen vuoksi tiedoston lataus epÃ€onnistui.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>TÃ€ssÃ€ ryhmÃ€ssÃ€ tulee olla vÃ€hintÃ€Ã€n yksi elementti.|TÃ€ssÃ€ ryhmÃ€ssÃ€ tulee olla vÃ€hintÃ€Ã€n {{ limit }} elementtiÃ€.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>TÃ€ssÃ€ ryhmÃ€ssÃ€ tulee olla enintÃ€Ã€n yksi elementti.|TÃ€ssÃ€ ryhmÃ€ssÃ€ tulee olla enintÃ€Ã€n {{ limit }} elementtiÃ€.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>TÃ€ssÃ€ ryhmÃ€ssÃ€ tulee olla tasan yksi elementti.|TÃ€ssÃ€ ryhmÃ€ssÃ€ tulee olla tasan {{ limit }} elementtiÃ€.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Virheellinen korttinumero.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>TÃ€tÃ€ korttityyppiÃ€ ei tueta tai korttinumero on virheellinen.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">TÃ€mÃ€ arvo ei ole kelvollinen kansainvÃ€linen pankkitilinumero (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Arvo ei ole kelvollinen ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Arvo ei ole kelvollinen ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Arvo ei ole kelvollinen ISBN-10 eikÃ€ ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Arvo ei ole kelvollinen ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Arvo ei ole kelvollinen valuutta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Arvo ei ole sama kuin {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Arvon tulee olla suurempi kuin {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Arvon tulee olla suurempi tai yhtÃ€ suuri kuin {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Arvon tulee olla sama kuin {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Arvon tulee olla pienempi kuin {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Arvon tulee olla pienempi tai yhtÃ€ suuri kuin {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Arvon ei tule olla sama kuin {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Arvon ei tule olla sama kuin {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Kuvasuhde on liian suuri ({{ ratio }}). Suurin sallittu suhde on {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Kuvasuhde on liian pieni ({{ ratio }}). Pienin sallittu suhde on {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Kuva on neliÃ¶ ({{ width }}x{{ height }} px). NeliÃ¶nmuotoiset kuvat eivÃ€t ole sallittuja.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Kuva on vaakasuuntainen ({{ width }}x{{ height }} px). Vaakasuuntaiset kuvat eivÃ€t ole sallittuja.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Kuva on pystysuuntainen ({{ width }}x{{ height }} px). Pystysuuntaiset kuvat eivÃ€t ole sallittuja.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Tiedosto ei saa olla tyhjÃ€.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Palvelimeen ei saatu yhteyttÃ€.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Arvo ei vastaa odotettua merkistÃ¶Ã€ {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">TÃ€mÃ€ arvo ei ole kelvollinen liiketoiminnan tunnistekoodi (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Virhe</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">TÃ€mÃ€ arvo ei ole kelvollinen UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>TÃ€mÃ€n arvon tulee olla luvun {{ compared_value }} kerrannainen.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>TÃ€tÃ€ yritystunnusta (BIC) ei ole liitetty IBAN-tilinumeroon {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Arvon tulee olla kelvollinen JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>RyhmÃ€n tulee sisÃ€ltÃ€Ã€ vain yksilÃ¶llisiÃ€ arvoja.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Arvon tulee olla positiivinen.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Arvon tulee olla joko positiivinen tai nolla.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Arvon tulee olla negatiivinen.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Arvon tulee olla joko negatiivinen tai nolla.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Arvo ei ole kelvollinen aikavyÃ¶hyke.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>TÃ€mÃ€ salasana on vuotanut tietomurrossa, eikÃ€ sitÃ€ saa kÃ€yttÃ€Ã€. KÃ€ytÃ€ toista salasanaa.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Arvon tulee olla {{ min }} - {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Arvo ei ole kelvollinen laitenimi (hostname).</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>RyhmÃ€ssÃ€ olevien elementtien mÃ€Ã€rÃ€n pitÃ€Ã€ olla luvun {{ compared_value }} kerrannainen.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Arvon tulee lÃ€pÃ€istÃ€ vÃ€hintÃ€Ã€n yksi seuraavista tarkistuksista:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>RyhmÃ€n jokaisen elementin tulee lÃ€pÃ€istÃ€ omat tarkistuksensa.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>TÃ€mÃ€ arvo ei ole kelvollinen ISIN-koodi (International Securities Identification Number).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>TÃ€mÃ€n arvon on oltava kelvollinen lauseke.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>TÃ€mÃ€ arvo ei ole kelvollinen CSS-vÃ€rimÃ€Ã€ritys.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>TÃ€mÃ€ arvo ei ole kelvollinen CIDR-merkintÃ€.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Verkkomaskille annetun arvon tulee olla {{ min }} - {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Tiedostonimi on liian pitkÃ€. Nimi saa olla enintÃ€Ã€n yhden merkin pituinen.|Tiedostonimi on liian pitkÃ€. Nimi saa olla enintÃ€Ã€n {{ filename_max_length }} merkin pituinen.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Salasana on liian heikko. Valitse vahvempi salasana.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Arvo sisÃ€ltÃ€Ã€ merkkejÃ€, joita nykyinen rajoitustaso ei salli.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>NÃ€kymÃ€ttÃ¶miÃ€ merkkejÃ€ ei saa kÃ€yttÃ€Ã€.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Eri kirjaimistojen numeroita ei saa sekoittaa.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Piilotettuja tarkemerkkejÃ€ ei saa kÃ€yttÃ€Ã€.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>TiedostopÃ€Ã€te ({{ extension }}) on virheellinen. Sallitut tiedostopÃ€Ã€tteet ovat: {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Havaittu merkistÃ¶ on virheellinen ({{ detected }}). Sallitut merkistÃ¶t ovat {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>TÃ€mÃ€ arvo ei ole kelvollinen MAC-osoite.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">TÃ€stÃ€ URL-osoitteesta puuttuu ylÃ€tason verkkotunnus.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.fr.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.fr.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.fr.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="fr" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Cette valeur doit Ãªtre fausse.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Cette valeur doit Ãªtre vraie.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Cette valeur doit Ãªtre de type {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Cette valeur doit Ãªtre vide.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Cette valeur doit Ãªtre l'un des choix proposÃ©s.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Vous devez sÃ©lectionner au moins {{ limit }} choix.|Vous devez sÃ©lectionner au moins {{ limit }} choix.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Vous devez sÃ©lectionner au maximum {{ limit }} choix.|Vous devez sÃ©lectionner au maximum {{ limit }} choix.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Une ou plusieurs des valeurs soumises sont invalides.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ce champ n'a pas Ã©tÃ© prÃ©vu.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ce champ est manquant.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Cette valeur n'est pas une date valide.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Cette valeur n'est pas une date valide.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Cette valeur n'est pas une adresse email valide.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Le fichier n'a pas Ã©tÃ© trouvÃ©.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Le fichier n'est pas lisible.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Le fichier est trop volumineux ({{ size }} {{ suffix }}). Sa taille ne doit pas dÃ©passer {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Le type du fichier est invalide ({{ type }}). Les types autorisÃ©s sont {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Cette valeur doit Ãªtre infÃ©rieure ou Ã©gale Ã  {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Cette chaÃ®ne est trop longue. Elle doit avoir au maximum {{ limit }} caractÃšre.|Cette chaÃ®ne est trop longue. Elle doit avoir au maximum {{ limit }} caractÃšres.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Cette valeur doit Ãªtre supÃ©rieure ou Ã©gale Ã  {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Cette chaÃ®ne est trop courte. Elle doit avoir au minimum {{ limit }} caractÃšre.|Cette chaÃ®ne est trop courte. Elle doit avoir au minimum {{ limit }} caractÃšres.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Cette valeur ne doit pas Ãªtre vide.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Cette valeur ne doit pas Ãªtre nulle.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Cette valeur doit Ãªtre nulle.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Cette valeur n'est pas valide.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Cette valeur n'est pas une heure valide.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Cette valeur n'est pas une URL valide.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Les deux valeurs doivent Ãªtre identiques.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Le fichier est trop volumineux. Sa taille ne doit pas dÃ©passer {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Le fichier est trop volumineux.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Le tÃ©lÃ©chargement de ce fichier est impossible.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Cette valeur doit Ãªtre un nombre.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ce fichier n'est pas une image valide.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Cette valeur n'est pas une adresse IP valide.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Cette langue n'est pas valide.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ce paramÃštre rÃ©gional n'est pas valide.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ce pays n'est pas valide.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Cette valeur est dÃ©jÃ  utilisÃ©e.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>La taille de l'image n'a pas pu Ãªtre dÃ©tectÃ©e.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>La largeur de l'image est trop grande ({{ width }}px). La largeur maximale autorisÃ©e est de {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>La largeur de l'image est trop petite ({{ width }}px). La largeur minimale attendue est de {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>La hauteur de l'image est trop grande ({{ height }}px). La hauteur maximale autorisÃ©e est de {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>La hauteur de l'image est trop petite ({{ height }}px). La hauteur minimale attendue est de {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Cette valeur doit Ãªtre le mot de passe actuel de l'utilisateur.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Cette chaÃ®ne doit avoir exactement {{ limit }} caractÃšre.|Cette chaÃ®ne doit avoir exactement {{ limit }} caractÃšres.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Le fichier a Ã©tÃ© partiellement transfÃ©rÃ©.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Aucun fichier n'a Ã©tÃ© transfÃ©rÃ©.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Aucun rÃ©pertoire temporaire n'a Ã©tÃ© configurÃ© dans le php.ini, ou le rÃ©pertoire configurÃ© n'existe pas.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Impossible d'Ã©crire le fichier temporaire sur le disque.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Une extension PHP a empÃªchÃ© le transfert du fichier.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Cette collection doit contenir {{ limit }} Ã©lÃ©ment ou plus.|Cette collection doit contenir {{ limit }} Ã©lÃ©ments ou plus.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Cette collection doit contenir {{ limit }} Ã©lÃ©ment ou moins.|Cette collection doit contenir {{ limit }} Ã©lÃ©ments ou moins.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Cette collection doit contenir exactement {{ limit }} Ã©lÃ©ment.|Cette collection doit contenir exactement {{ limit }} Ã©lÃ©ments.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>NumÃ©ro de carte invalide.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Type de carte non supportÃ© ou numÃ©ro invalide.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Cette valeur n'est pas un NumÃ©ro de Compte Bancaire International (IBAN) valide.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Cette valeur n'est pas un code ISBN-10 valide.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Cette valeur n'est pas un code ISBN-13 valide.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Cette valeur n'est ni un code ISBN-10, ni un code ISBN-13 valide.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Cette valeur n'est pas un code ISSN valide.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Cette valeur n'est pas une devise valide.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Cette valeur doit Ãªtre Ã©gale Ã  {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Cette valeur doit Ãªtre supÃ©rieure Ã  {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Cette valeur doit Ãªtre supÃ©rieure ou Ã©gale Ã  {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Cette valeur doit Ãªtre identique Ã  {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Cette valeur doit Ãªtre infÃ©rieure Ã  {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Cette valeur doit Ãªtre infÃ©rieure ou Ã©gale Ã  {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Cette valeur ne doit pas Ãªtre Ã©gale Ã  {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Cette valeur ne doit pas Ãªtre identique Ã  {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Le rapport largeur/hauteur de l'image est trop grand ({{ ratio }}). Le rapport maximal autorisÃ© est {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Le rapport largeur/hauteur de l'image est trop petit ({{ ratio }}). Le rapport minimal attendu est {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>L'image est carrÃ©e ({{ width }}x{{ height }}px). Les images carrÃ©es ne sont pas autorisÃ©es.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>L'image est au format paysage ({{ width }}x{{ height }}px). Les images au format paysage ne sont pas autorisÃ©es.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>L'image est au format portrait ({{ width }}x{{ height }}px). Les images au format portrait ne sont pas autorisÃ©es.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Un fichier vide n'est pas autorisÃ©.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Le nom de domaine n'a pas pu Ãªtre rÃ©solu.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Cette valeur ne correspond pas au jeu de caractÃšres {{ charset }} attendu.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Cette valeur n'est pas un Code Identifiant de Business (BIC) valide.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Erreur</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Cette valeur n'est pas un UUID valide.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Cette valeur doit Ãªtre un multiple de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ce code d'identification d'entreprise (BIC) n'est pas associÃ© Ã  l'IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Cette valeur doit Ãªtre un JSON valide.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Cette collection ne doit pas comporter de doublons.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Cette valeur doit Ãªtre strictement positive.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Cette valeur doit Ãªtre supÃ©rieure ou Ã©gale Ã  zÃ©ro.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Cette valeur doit Ãªtre strictement nÃ©gative.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Cette valeur doit Ãªtre infÃ©rieure ou Ã©gale Ã  zÃ©ro.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Cette valeur n'est pas un fuseau horaire valide.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Ce mot de passe a Ã©tÃ© divulguÃ© lors d'une fuite de donnÃ©es, il ne doit plus Ãªtre utilisÃ©. Veuillez utiliser un autre mot de passe.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Cette valeur doit Ãªtre comprise entre {{ min }} et {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Cette valeur n'est pas un nom d'hÃŽte valide.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Le nombre d'Ã©lÃ©ments de cette collection doit Ãªtre un multiple de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Cette valeur doit satisfaire Ã  au moins une des contraintes suivantes :</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Chaque Ã©lÃ©ment de cette collection doit satisfaire Ã  son propre jeu de contraintes.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Cette valeur n'est pas un code international de sÃ©curitÃ© valide (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Cette valeur doit Ãªtre une expression valide.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Cette valeur n'est pas une couleur CSS valide.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Cette valeur n'est pas une notation CIDR valide.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>La valeur du masque de rÃ©seau doit Ãªtre comprise entre {{ min }} et {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Le nom du fichier est trop long. Il doit contenir au maximum {{ filename_max_length }} caractÃšre.|Le nom de fichier est trop long. Il doit contenir au maximum {{ filename_max_length }} caractÃšres.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>La force du mot de passe est trop faible. Veuillez utiliser un mot de passe plus fort.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Cette valeur contient des caractÃšres qui ne sont pas autorisÃ©s par le niveau de restriction actuel.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Utiliser des caractÃšres invisibles n'est pas autorisÃ©.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>MÃ©langer des chiffres provenant de diffÃ©rents scripts n'est pas autorisÃ©.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Utiliser des caractÃšres de superposition cachÃ©s n'est pas autorisÃ©.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>L'extension du fichier est invalide ({{ extension }}). Les extensions autorisÃ©es sont {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>L'encodage de caractÃšres dÃ©tectÃ© est invalide ({{ detected }}). Les encodages autorisÃ©s sont {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Cette valeur n'est pas une adresse MAC valide.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Cette URL doit contenir un domaine de premier niveau.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target>Cette valeur est trop courte. Elle doit contenir au moins un mot.|Cette valeur est trop courte. Elle doit contenir au moins {{ min }} mots.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target>Cette valeur est trop longue. Elle doit contenir au maximum un mot.|Cette valeur est trop longue. Elle doit contenir au maximum {{ max }} mots.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.gl.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.gl.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.gl.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="gl" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Este valor deberÃ­a ser falso.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Este valor deberÃ­a ser verdadeiro.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Este valor deberÃ­a ser de tipo {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Este valor deberÃ­a estar baleiro.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>O valor seleccionado non Ã© unha opciÃ³n vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Debe seleccionar polo menos {{ limit }} opciÃ³n.|Debe seleccionar polo menos {{ limit }} opcions.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Debe seleccionar como mÃ¡ximo {{ limit }} opciÃ³n.|Debe seleccionar como mÃ¡ximo {{ limit }} opcions.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Un ou mÃ¡is dos valores indicados non son vÃ¡lidos.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Este campo non era esperado.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Este campo falta.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Este valor non Ã© unha data vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Este valor non Ã© unha data e hora vÃ¡lidas.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Este valor non Ã© unha direcciÃ³n de correo electrÃ³nico vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Non se puido atopar o arquivo.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>O arquivo non se pode ler.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>O arquivo Ã© demasiado grande ({{ size }} {{ suffix }}). O tamaÃ±o mÃ¡ximo permitido Ã© {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>O tipo mime do arquivo non Ã© vÃ¡lido ({{ type }}). Os tipos mime vÃ¡lidos son {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Este valor deberÃ­a ser {{ limit }} ou menos.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Este valor Ã© demasiado longo. DeberÃ­a ter {{ limit }} carÃ¡cter ou menos.|Este valor Ã© demasiado longo. DeberÃ­a ter {{ limit }} caracteres ou menos.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Este valor deberÃ­a ser {{ limit }} ou mÃ¡is.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Este valor Ã© demasiado curto. DeberÃ­a ter {{ limit }} carÃ¡cter ou mÃ¡is.|Este valor Ã© demasiado corto. DeberÃ­a ter {{ limit }} caracteres ou mÃ¡is.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Este valor non deberÃ­a estar baleiro.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Este valor non deberÃ­a ser null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Este valor deberÃ­a ser null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Este valor non Ã© vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Este valor non Ã© unha hora vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Este valor non Ã© unha URL vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Os dous valores deberÃ­an ser iguais.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>O arquivo Ã© demasiado grande. O tamaÃ±o mÃ¡ximo permitido Ã© {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>O arquivo Ã© demasiado grande.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>No se puido cargar o arquivo.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Este valor deberÃ­a ser un nÃºmero vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>O arquivo non Ã© unha imaxe vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Este valor non Ã© un enderezo IP vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Este valor non Ã© un idioma vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Este valor non Ã© unha localizaciÃ³n vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Este valor non Ã© un paÃ­s vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Este valor xa estÃ¡ a ser empregado.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Non se puido determinar o tamaÃ±o da imaxe.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>A largura da imaxe Ã© demasiado grande ({{ width }}px). A largura mÃ¡xima permitida son {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>A largura da imaxe Ã© demasiado pequena ({{ width }}px). A largura mÃ­nima requerida son {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>A altura da imaxe Ã© demasiado grande ({{ height }}px). A altura mÃ¡xima permitida son {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>A altura da imaxe Ã© demasiado pequena ({{ height }}px). A altura mÃ­nima requerida son {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Este valor deberÃ­a ser a contrasinal actual do usuario.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Este valor deberÃ­a ter exactamente {{ limit }} carÃ¡cter.|Este valor deberÃ­a ter exactamente {{ limit }} caracteres.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>O arquivo foi sÃ³ subido parcialmente.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Non se subiu ningÃºn arquivo.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Ningunha carpeta temporal foi configurada en php.ini, ou a carpeta non existe.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Non se puido escribir o arquivo temporal no disco.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Unha extensiÃ³n de PHP provocou que a subida fallara.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Esta colecciÃ³n debe conter {{ limit }} elemento ou mÃ¡is.|Esta colecciÃ³n debe conter {{ limit }} elementos ou mÃ¡is.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Esta colecciÃ³n debe conter {{ limit }} elemento ou menos.|Esta colecciÃ³n debe conter {{ limit }} elementos ou menos.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Esta colecciÃ³n debe conter exactamente {{ limit }} elemento.|Esta colecciÃ³n debe conter exactamente {{ limit }} elementos.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>NÃºmero de tarxeta non vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipo de tarxeta non soportado ou nÃºmero de tarxeta non vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Este valor non Ã© un NÃºmero de Conta Bancaria Internacional (IBAN) vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Este valor non Ã© un ISBN-10 vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Este valor non Ã© un ISBN-13 vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Este valor non Ã© nin un ISBN-10 vÃ¡lido nin un ISBN-13 vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Este valor non Ã© un ISSN vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Este valor non Ã© unha moeda vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser maior que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser maior ou igual que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser identico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser menor que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser menor ou igual que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Este valor non deberÃ­a ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor non deberÃ­a ser identico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>A proporciÃ³n da imaxe Ã© demasiado grande ({{ ratio }}). A proporciÃ³n mÃ¡xima permitida Ã© {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>A proporciÃ³n da Ã© demasiado pequena ({{ ratio }}). A proporciÃ³n mÃ­nima permitida Ã© {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>A imaxe Ã© cadrada ({{ width }}x{{ height }}px). As imÃ¡xenes cadradas non estÃ¡n permitidas.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>A imaxe estÃ¡ orientada horizontalmente ({{ width }}x{{ height }}px). As imÃ¡xenes orientadas horizontalmente non estÃ¡n permitidas.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>A imaxe estÃ¡ orientada verticalmente ({{ width }}x{{ height }}px). As imÃ¡xenes orientadas verticalmente non estÃ¡n permitidas.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Non estÃ¡ permitido un arquivo baleiro.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Non se puido resolver o host.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>A codificaciÃ³n de caracteres para este valor deberÃ­a ser {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Este valor non Ã© un CÃ³digo de IdentificaciÃ³n de Negocios (BIC) vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Erro</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Este valor non Ã© un UUID vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Este valor deberÃ­a ser multiplo de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Este CÃ³digo de identificaciÃ³n bancaria (BIC) non estÃ¡ asociado co IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Este valor deberÃ­a ser un JSON vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Esta colecciÃ³n sÃ³ deberÃ­a ter elementos Ãºnicos.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Este valor deberÃ­a ser positivo.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Este valor debe ser positivo ou igual a cero.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Este valor debe ser negativo.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Este valor debe ser negativo ou igual a cero.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Este valor non Ã© unha zona horaria vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Este contrasinal non se pode usar porque estÃ¡ incluÃ­do nunha lista de contrasinais pÃºblicos obtidos grazas a fallos de seguridade noutros sitios e aplicaciÃ³ns. Utiliza outro contrasinal.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Este valor debe estar comprendido entre {{ min }} e {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Este valor non Ã© un nome de host vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>O nÃºmero de elementos desta colecciÃ³n deberÃ­a ser mÃºltiplo de {{compare_value}}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Este valor debe cumprir polo menos unha das seguintes restriciÃ³ns:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Cada elemento desta colecciÃ³n debe satisfacer o seu propio conxunto de restriciÃ³ns.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Este valor non Ã© un nÃºmero de identificaciÃ³n de valores internacionais (ISIN) vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Este valor debe ser unha expresiÃ³n vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Este valor non Ã© unha cor CSS vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Este valor non ten unha notaciÃ³n CIDR vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>O valor da mÃ¡scara de rede deberÃ­a estar entre {{ min }} e {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target state="needs-review-translation">O nome do ficheiro Ã© demasiado longo. Debe ter {{ filename_max_length }} caracteres ou menos.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target state="needs-review-translation">A forza do contrasinal Ã© demasiado baixa. Utilice un contrasinal mÃ¡is forte.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target state="needs-review-translation">Este valor contÃ©n caracteres que non estÃ¡n permitidos polo nivel de restriciÃ³n actual.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target state="needs-review-translation">Non se permite usar caracteres invisibles.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target state="needs-review-translation">Non se permite mesturar nÃºmeros de diferentes scripts.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target state="needs-review-translation">Non se permite usar caracteres de superposiciÃ³n ocultos.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">A extensiÃ³n do ficheiro non Ã© vÃ¡lida ({{ extension }}). As extensiÃ³ns permitidas son {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">A codificaciÃ³n de caracteres detectada non Ã© vÃ¡lida ({{ detected }}). As codificaciÃ³ns permitidas son {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Este valor non Ã© un enderezo MAC vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Esta URL non contÃ©n un dominio de nivel superior.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.he.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.he.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.he.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="he" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>××¢×š× ×Š×š×× ×××××ª ×©×§×š.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>××¢×š× ×Š×š×× ×××××ª ×××ª.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>××¢×š× ×Š×š×× ×××××ª ××¡×× {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>××¢×š× ×Š×š×× ×××××ª ×š××§.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>××¢×š× ×©×××š×ª ××× × ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>××ª× ×Š×š×× ×××××š ××€×××ª {{ limit }} ××€×©×š××××ª.|××ª× ×Š×š×× ×××××š ××€×××ª {{ limit }} ××€×©×š××××ª.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>××ª× ×Š×š×× ×××××š ××× ××××ª×š {{ limit }} ××€×©×š××××ª.|××ª× ×Š×š×× ×××××š ××× ××××ª×š {{ limit }} ××€×©×š××××ª.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>××× ×× ×××ª×š ×××¢×š××× ××× × ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>×©×× ×× ×× ××× ×Š×€××</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>×©×× ×× ××¡×š.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>××¢×š× ××× × ×ª××š×× ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>××¢×š× ××× × ×ª××š×× ××©×¢× ×××§×××.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>××ª×××ª ××××× ××× × ×ª×§×× ×.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>××§×××¥ ×× × ××Š×.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>×× × ××ª× ××§×š×× ××ª ××§×××¥.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>××§×××¥ ×××× ××× ({{ size }} {{ suffix }}). ××××× ×××š×× ××××ª×š ××× {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>×¡×× MIME ×©× ××§×××¥ ××× × ×××§× ({{ type }}). ×××ª×š×× ×¡××× MIME {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>××¢×š× ×Š×š×× ××××× {{ limit }} ×ª×××× ××× ××××ª×š.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>××¢×š× ××š×× ××××. ××× ×Š×š×× ××××× {{ limit }} ×ª×××× ××× ××××ª×š.|××¢×š× ××š×× ××××. ××× ×Š×š×× ××××× {{ limit }} ×ª×××× ××× ××××ª×š.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>××¢×š× ×Š×š×× ××××× {{ limit }} ×ª×××× ××€×××ª.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>××¢×š× ×§×Š×š ××××. ××× ×Š×š×× ××××× {{ limit }} ×ª×××× ××€×××ª.|××¢×š× ×§×Š×š ××××. ××¢×š× ×Š×š×× ××××× {{ limit }} ×ª×××× ××€×××ª.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>××¢×š× ×× ××××š ×××××ª ×š××§.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>××¢×š× ×× ××××š ×××××ª ×š××§.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>××¢×š× ×Š×š×× ×××××ª ×š××§.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>××¢×š× ××× × ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>××¢×š× ××× × ××× ×ª×§××.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>×××ª ××× × ××ª×××ª ××ª×š ×ª×§×× ×.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>×©× × ××¢×š××× ×Š×š×××× ×××××ª ×©××××.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>××§×××¥ ×××× ×××. ××××× ×××š×× ××××ª×š ××× {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>××§×××¥ ×××× ×××.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>×× × ××ª× ××¢×××ª ××ª ××§×××¥.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>××¢×š× ×Š×š×× ×××××ª ××¡×€×š ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>××§×××¥ ××× ××× × ×ª××× × ×ª×§×× ×.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">×¢×š× ×× ××× × ××ª×××ª IP ×ª×§×€×.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>××¢×š× ××× × ×©×€× ×××§××ª.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>××¢×š× ××× × ××××š ×ª×§×£.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>××¢×š× ××× × ××š×¥ ×××§××ª.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>××¢×š× ×××š ××©××××©.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>×× × ××ª× ××§×××¢ ××ª ×××× ××ª××× ×.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>×š××× ××ª××× × ×××× ××× ({{ width }}px). ××š××× ×××§×¡×××× ××× {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>×š××× ××ª××× × ×§×× ××× ({{ width }}px). ××š××× ×××× ×××× ××× {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>×××× ××ª××× × ×××× ××× ({{ height }}px). ××××× ×××§×¡×××× ××× {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>×××× ××ª××× × ×§×× ××× ({{ height }}px). ××××× ×××× ×××× ××× {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>××¢×š× ×Š×š×× ×××××ª ×¡××¡××ª ×××©×ª××© ×× ××××.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>××¢×š× ×Š×š×× ×××××ª ×××××§ {{ limit }} ×ª××××.|××¢×š× ×Š×š×× ×××××ª ×××××§ {{ limit }} ×ª××××.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>××§×××¥ ×××¢×× ××××€× ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>××§×××¥ ×× ×××¢××.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">×× ×××××š× ×ª××§××× ××× ××ª ×-php.ini, ×× ×©××ª××§××× ××××××š×ª ××× × ×§××××ª.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>×× × ××ª× ×××ª×× ×§×××¥ ××× × ××××¡×§.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>×¡××××ª PHP ××š× ×××¢××× ×××××©×.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>××××¡×£ ××××š ××××× {{ limit }} ×××× ××× ×× ×××ª×š.|××××¡×£ ××××š ××××× {{ limit }} ×××× ××× ×× ×××ª×š.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>××××¡×£ ××××š ××××× {{ limit }} ×××× ××× ×× ×€×××ª.|××××¡×£ ××××š ××××× {{ limit }} ×××× ××× ×× ×€×××ª.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>××××¡×£ ×Š×š×× ××××× ×××××§ {{ limit }} ×××× ×××.|××××¡×£ ×Š×š×× ××××× ×××××§ {{ limit }} ×××× ×××.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>××¡×€×š ×××š×××¡ ××× × ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>×¡×× ×××š×××¡ ××× × × ×ª×× ×× ×× ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">×¢×š× ×× ××× × ××¡×€×š ××©××× ×× ×§ ××× ××××× (IBAN) ×ª×§×£.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>××¢×š× ××× × ×¢×š× ISBN-10 ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>××¢×š× ××× × ×¢×š× ISBN-13 ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>××¢×š× ××× × ×¢×š× ISBN-10 ×××§× ×× ×¢×š× ISBN-13 ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>××¢×š× ××× × ×¢×š× ISSN ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>××¢×š× ××× × ×¢×š× ××××¢ ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>××¢×š× ×××× ×××××ª ×©××× × {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>××¢×š× ×××× ×××××ª ×××× × {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>××¢×š× ×××× ×××××ª ×××× ×× ×©××× × {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>××¢×š× ×××× ×××××ª ××× × {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>××¢×š× ×××× ×××××ª ×§×× × {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>××¢×š× ×××× ×××××ª ×§×× ×× ×©××× × {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>××¢×š× ×××× ×××××ª ×× ×©××× × {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>××¢×š× ×××× ×××××ª ×× ××× × {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>××××¡ ×©× ××ª××× × ××× ×××× ××× ({{ ratio }}). ××××¡ ×××§×¡×××× ×××€×©×š× ××× {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>××××¡ ×©× ××ª××× × ××× ×§×× ××× ({{ ratio }}). ××××¡ ×××× ×××× ×××€×©×š× ××× {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>××ª××× × ××š×××¢×ª ({{ width }}x{{ height }}px). ××¡××š××ª ×ª××× ××ª ××š×××¢××ª.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>××ª××× × ××× ××š××× ({{ width }}x{{ height }}px). ××¡××š××ª ×ª××× ××ª ××š×××.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>××ª××× × ××× ××××š× ({{ width }}x{{ height }}px). ××¡××š××ª ×ª××× ××ª ××××š×.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>××¡××š ×§×××¥ ×š××§.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>×× ××××ª× ××€×©×š××ª ×××××ª ××ª ××××š×.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>××¢×š× ××× × ×ª××× ×××¢×š× ××ª×××× {{ charset }} ××Š×€××.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">×¢×š× ×× ××× × ×§×× ×××× ×¢×¡×§× (BIC) ×ª×§×£.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>×©××××</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">×¢×š× ×× ××× × UUID ×ª×§×£.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>××¢×š× ×××× ×××××ª ××€××× ×©× {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>××§×× ××××× ×¢×¡×§× (BIC) ××× × ××©×××× × IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>××¢×š× ××× × ×¢×š× JSON ×ª×§××.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>××××¡×£ ×××× ××××× ×š×§ ×××× ××× ××××××××.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>××¢×š× ×××× ×××××ª ×××××.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>××¢×š× ×××× ×××××ª ××××× ×× ××€×¡.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>××¢×š× ×××× ×××××ª ×©××××.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>××¢×š× ×××× ×××××ª ×©×××× ×× ××€×¡.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>××¢×š× ××× × ××××š ××× ×ª×§××.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>×¡××¡×× ×× ×××××€× ×××××€×ª ××××¢, ××¡××š ×××©×ª××© ××. ×× × ××©×ª××© ××¡××¡×× ×××š×ª.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>××¢×š× ×××× ×××××ª ××× {{ min }} ×- {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>×¢×š× ×× ××× × ×©× ×××š× ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>××¡×€×š ××××× ××× ××××¡×£ ×× ×Š×š×× ×××××ª ×××€×× ×©× {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>×¢×š× ×× ××××š ××¢××× ××€×××ª ×××× ××ª× ××× ×××××:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>×× ×××× × ××××¡×£ ×× ××××š ××¢××× ××§×××Š×ª ××ª× ××× ×©××.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>×¢×š× ×× ××× × ××¡×€×š ××××× × ×××š××ª ×¢×š× ××× ××××× ×ª×§×£ (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>×¢×š× ×× ×××× ×××××ª ××××× ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>×¢×š× ×× ××× × ×Š××¢ CSS ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>×¢×š× ×× ××× × ×¡×××× CIDR ×××§×.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>××¢×š× ×©× ××¡××ª ××š×©×ª ×××× ×××××ª ××× {{ min }} × {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target state="needs-review-translation">×©× ××§×××¥ ××š×× ×××. ×¢××× ××××× {{ filename_max_length }} ×ª×××× ×× ×€×××ª.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target state="needs-review-translation">××××§ ××¡××¡×× × ××× ×××. ×× × ××©×ª××© ××¡××¡×× ×××§× ×××ª×š.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target state="needs-review-translation">××¢×š× ×××× ×ª×××× ×©××× × ×××ª×š×× ×¢× ×€× ×š××ª ×××××× ×× ×××××ª.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target state="needs-review-translation">××¡××š ×××©×ª××© ××ª×××× ×××ª× × ×š×××.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target state="needs-review-translation">××¡××š ××¢×š×× ××¡×€×š×× ××ª×¡×š×××× ×©×× ××.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target state="needs-review-translation">××¡××š ×××©×ª××© ××ª×××× ×××¡×ª×š×× ×©× ××€××€×.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">×¡××××ª ××§×××¥ ××× × ×ª×§×× × ({{ extension }}). ××¡×××××ª ××××ª×š××ª ×× {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">×§×××× ××ª×××× ×©×××× ××× × ×××§× ({{ detected }}). ××§×××××× ××××ª×š×× ×× {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">×¢×š× ×× ××× × ××ª×××ª MAC ×ª×§×€×.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">×××ª×××ª URL ×× ××¡×š ×××××× ×š×× ×¢×××× ×.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.hr.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.hr.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.hr.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="hr" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Ova vrijednost treba biti netoÄna (false).</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Ova vrijednost treba biti toÄna (true).</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ova vrijednost treba biti tipa {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ova vrijednost treba biti prazna.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Ova vrijednost nije valjan izbor.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Izaberite barem {{ limit }} moguÄnosti.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Izaberite najviÅ¡e {{ limit }} moguÄnosti.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Jedna ili viÅ¡e danih vrijednosti nije ispravna.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ovo polje nije oÄekivano.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ovo polje nedostaje.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ova vrijednost nije ispravan datum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ova vrijednost nije ispravnog datum-vrijeme formata.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ova vrijednost nije ispravna e-mail adresa.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Datoteka ne moÅŸe biti pronaÄena.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Datoteka nije Äitljiva.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Datoteka je prevelika ({{ size }} {{ suffix }}). NajveÄa dozvoljena veliÄina je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mime tip datoteke nije ispravan ({{ type }}). Dozvoljeni mime tipovi su {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ova vrijednost treba biti {{ limit }} ili manje.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ova vrijednost je predugaÄka. Treba imati {{ limit }} znakova ili manje.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ova vrijednost treba biti {{ limit }} ili viÅ¡e.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ova vrijednost je prekratka. Treba imati {{ limit }} znakova ili viÅ¡e.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ova vrijednost ne bi trebala biti prazna.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ova vrijednost ne bi trebala biti null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ova vrijednost treba biti null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ova vrijednost nije ispravna.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ova vrijednost nije ispravno vrijeme.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ova vrijednost nije ispravan URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Obje vrijednosti trebaju biti jednake.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ova datoteka je prevelika. NajveÄa dozvoljena veliÄina je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ova datoteka je prevelika.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Ova datoteka ne moÅŸe biti prenesena.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ova vrijednost treba biti ispravan broj.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ova datoteka nije ispravna slika.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Ova vrijednost nije valjana IP adresa.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ova vrijednost nije ispravan jezik.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ova vrijednost nije ispravana regionalna oznaka.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ova vrijednost nije ispravna drÅŸava.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ova vrijednost je veÄ iskoriÅ¡tena.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>VeliÄina slike se ne moÅŸe odrediti.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Å irina slike je prevelika ({{ width }}px). NajveÄa dozvoljena Å¡irina je {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Å irina slike je premala ({{ width }}px). Najmanja dozvoljena Å¡irina je {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Visina slike je prevelika ({{ height }}px). NajveÄa dozvoljena visina je {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Visina slike je premala ({{ height }}px). Najmanja dozvoljena visina je {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ova vrijednost treba biti trenutna korisniÄka lozinka.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ova vrijednost treba imati toÄno {{ limit }} znakova.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Datoteka je samo djelomiÄno prenesena.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Niti jedna datoteka nije prenesena.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Privremena mapa nije konfigurirana u php.ini-u, ili konfigurirana mapa ne postoji.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Ne mogu zapisati privremenu datoteku na disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Prijenos datoteke nije uspio zbog PHP ekstenzije.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ova kolekcija treba sadrÅŸavati {{ limit }} ili viÅ¡e elemenata.|Ova kolekcija treba sadrÅŸavati {{ limit }} ili viÅ¡e elemenata.|Ova kolekcija treba sadrÅŸavati {{ limit }} ili viÅ¡e elemenata.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ova kolekcija treba sadrÅŸavati {{ limit }} ili manje elemenata.|Ova kolekcija treba sadrÅŸavati {{ limit }} ili manje elemenata.|Ova kolekcija treba sadrÅŸavati {{ limit }} ili manje elemenata.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ova kolekcija treba sadrÅŸavati toÄno {{ limit }} element.|Ova kolekcija treba sadrÅŸavati toÄno {{ limit }} elementa.|Ova kolekcija treba sadrÅŸavati toÄno {{ limit }} elemenata.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Neispravan broj kartice.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tip kartice nije podrÅŸan ili je broj kartice neispravan.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Ova vrijednost nije valjani meÄunarodni bankovni broj raÄuna (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ova vrijednost nije ispravan ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ova vrijednost nije ispravan ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ova vrijednost nije ispravan ISBN-10 niti ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ova vrijednost nije ispravan ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ova vrijednost nije ispravna valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ova vrijednost treba biti jednaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ova vrijednost treba biti veÄa od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ova vrijednost treba biti veÄa od ili jednaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ova vrijednost treba biti {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ova vrijednost treba biti manja od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ova vrijednost treba biti manja od ili jednaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ova vrijednost treba biti razliÄita od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ova vrijednost treba biti razliÄita od {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Omjer slike je prevelik ({{ ratio }}). Dozvoljeni maksimalni omjer je {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Omjer slike je premali ({{ ratio }}). Minimalni oÄekivani omjer je {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Slika je kvadratnog oblika ({{ width }}x{{ height }}px). Kvadratne slike nisu dozvoljene.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Slika je orijentirana horizontalno ({{ width }}x{{ height }}px). Horizontalno orijentirane slike nisu dozvoljene.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Slika je orijentirana vertikalno ({{ width }}x{{ height }}px). Vertikalno orijentirane slike nisu dozvoljene.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Prazna datoteka nije dozvoljena.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>PosluÅŸitelj ne moÅŸe biti pronaÄen.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ova vrijednost ne odgovara oÄekivanom {{ charset }} znakovnom skupu.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Ova vrijednost nije valjani poslovni identifikacijski kod (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>GreÅ¡ka</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Ova vrijednost nije valjani UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ova vrijednost treba biti viÅ¡ekratnik od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Poslovni identifikacijski broj (BIC) nije povezan sa IBAN brojem {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Ova vrijednost treba biti validan JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ova kolekcija treba sadrÅŸavati samo unikatne elemente.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ova vrijednost treba biti pozitivna.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ova vrijednost treba biti pozitivna ili jednaka nuli.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ova vrijednost treba biti negativna.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ova vrijednost treba biti negativna ili jednaka nuli.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ova vrijednost nije validna vremenska zona.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Ova lozinka je procurila u nekom od sigurnosnih propusta, te je potrebno koristiti drugu lozinku.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ova vrijednost treba biti izmeÄu {{ min }} i {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Ova vrijednost nije ispravno ime posluÅŸitelja (engl. hostname).</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Broj elemenata u kolekciji treba biti djeljiv s {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Ova vrijednost mora zadovoljiti jedan od sljedeÄih ograniÄenja:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Svaki element ove kolekcije mora zadovoljiti vlastiti skup ograniÄenja.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Ova vrijednost nije ispravan meÄunarodni identifikacijski broj vrijednosnih papira (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Ova vrijednost mora biti valjani izraz.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Ova vrijednost nije vaÅŸeÄa CSS boja.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Ova vrijednost nije valjana CIDR notacija.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Vrijednost mreÅŸne maske trebala bi biti izmeÄu {{ min }} i {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Naziv datoteke je predug. Treba imati {{ filename_max_length }} znak ili manje.|Naziv datoteke je predug. Treba imati {{ filename_max_length }} znaka ili manje.|Naziv datoteke je predug. Treba imati {{ filename_max_length }} znakova ili manje.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>JaÄina lozinke je preniska. Molim koristite jaÄu lozinku.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Ova vrijednost sadrÅŸi znakove koji nisu dopuÅ¡teni prema trenutnoj razini ograniÄenja.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>KoriÅ¡tenje nevidljivih znakova nije dopuÅ¡teno.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>MijeÅ¡anje brojeva iz razliÄitih pisama nije dopuÅ¡teno.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>KoriÅ¡tenje skrivenih preklapajuÄih znakova nije dopuÅ¡teno.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Ekstenzija datoteke nije valjana ({{ extension }}). Dozvoljene ekstenzije su {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Otkriveno kodiranje znakova je nevaÅŸeÄe ({{ detected }}). DopuÅ¡tena kodiranja su {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Ova vrijednost nije valjana MAC adresa.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Ovom URL-u nedostaje vrÅ¡na domena.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.hu.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.hu.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.hu.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="hu" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Ennek az Ã©rtÃ©knek hamisnak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Ennek az Ã©rtÃ©knek igaznak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ennek az Ã©rtÃ©knek {{ type }} tÃ­pusÃºnak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ennek az Ã©rtÃ©knek ÃŒresnek kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>A vÃ¡lasztott Ã©rtÃ©k Ã©rvÃ©nytelen.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>LegalÃ¡bb {{ limit }} Ã©rtÃ©ket kell kivÃ¡lasztani.|LegalÃ¡bb {{ limit }} Ã©rtÃ©ket kell kivÃ¡lasztani.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Legfeljebb {{ limit }} Ã©rtÃ©ket lehet kivÃ¡lasztani.|Legfeljebb {{ limit }} Ã©rtÃ©ket lehet kivÃ¡lasztani.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>A megadott Ã©rtÃ©kek kÃ¶zÃŒl legalÃ¡bb egy Ã©rvÃ©nytelen.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Nem vÃ¡rt mezÅ.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ez a mezÅ hiÃ¡nyzik.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes dÃ¡tum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes idÅpont.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes e-mail cÃ­m.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>A fÃ¡jl nem talÃ¡lhatÃ³.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>A fÃ¡jl nem olvashatÃ³.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>A fÃ¡jl tÃºl nagy ({{ size }} {{ suffix }}). A legnagyobb megengedett mÃ©ret {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>A fÃ¡jl MIME tÃ­pusa Ã©rvÃ©nytelen ({{ type }}). Az engedÃ©lyezett MIME tÃ­pusok: {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ez az Ã©rtÃ©k legfeljebb {{ limit }} lehet.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ez az Ã©rtÃ©k tÃºl hosszÃº. Legfeljebb {{ limit }} karaktert tartalmazhat.|Ez az Ã©rtÃ©k tÃºl hosszÃº. Legfeljebb {{ limit }} karaktert tartalmazhat.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ez az Ã©rtÃ©k legalÃ¡bb {{ limit }} kell, hogy legyen.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ez az Ã©rtÃ©k tÃºl rÃ¶vid. LegalÃ¡bb {{ limit }} karaktert kell tartalmaznia.|Ez az Ã©rtÃ©k tÃºl rÃ¶vid. LegalÃ¡bb {{ limit }} karaktert kell tartalmaznia.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ez az Ã©rtÃ©k nem lehet ÃŒres.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ez az Ã©rtÃ©k nem lehet null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ennek az Ã©rtÃ©knek nullnak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ez az Ã©rtÃ©k nem Ã©rvÃ©nyes.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes idÅpont.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>A kÃ©t Ã©rtÃ©knek azonosnak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>A fÃ¡jl tÃºl nagy. A megengedett maximÃ¡lis mÃ©ret: {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>A fÃ¡jl tÃºl nagy.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>A fÃ¡jl nem tÃ¶lthetÅ fel.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ennek az Ã©rtÃ©knek Ã©rvÃ©nyes szÃ¡mnak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ez a fÃ¡jl nem egy Ã©rvÃ©nyes kÃ©p.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Ez az Ã©rtÃ©k nem Ã©rvÃ©nyes IP-cÃ­m.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes nyelv.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes terÃŒleti beÃ¡llÃ­tÃ¡s.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes orszÃ¡g.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ez az Ã©rtÃ©k mÃ¡r hasznÃ¡latban van.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>A kÃ©p mÃ©retÃ©t nem lehet megÃ¡llapÃ­tani.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>A kÃ©p szÃ©lessÃ©ge tÃºl nagy ({{ width }}px). A megengedett legnagyobb szÃ©lessÃ©g {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>A kÃ©p szÃ©lessÃ©ge tÃºl kicsi ({{ width }}px). Az elvÃ¡rt legkisebb szÃ©lessÃ©g {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>A kÃ©p magassÃ¡ga tÃºl nagy ({{ height }}px). A megengedett legnagyobb magassÃ¡g {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>A kÃ©p magassÃ¡ga tÃºl kicsi ({{ height }}px). Az elvÃ¡rt legkisebb magassÃ¡g {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ez az Ã©rtÃ©k a felhasznÃ¡lÃ³ jelenlegi jelszavÃ¡val kell megegyezzen.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ennek az Ã©rtÃ©knek pontosan {{ limit }} karaktert kell tartalmaznia.|Ennek az Ã©rtÃ©knek pontosan {{ limit }} karaktert kell tartalmaznia.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>A fÃ¡jl csak rÃ©szben lett feltÃ¶ltve.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nem lett fÃ¡jl feltÃ¶ltve.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Nem lett ideiglenes mappa beÃ¡llÃ­tva a php.ini-ben, vagy a beÃ¡llÃ­tott mappa nem lÃ©tezik.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Az ideiglenes fÃ¡jl nem Ã­rhatÃ³ a lemezre.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Egy PHP bÅvÃ­tmÃ©ny miatt a feltÃ¶ltÃ©s nem sikerÃŒlt.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ennek a gyÅ±jtemÃ©nynek legalÃ¡bb {{ limit }} elemet kell tartalmaznia.|Ennek a gyÅ±jtemÃ©nynek legalÃ¡bb {{ limit }} elemet kell tartalmaznia.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ez a gyÅ±jtemÃ©ny legfeljebb {{ limit }} elemet tartalmazhat.|Ez a gyÅ±jtemÃ©ny legfeljebb {{ limit }} elemet tartalmazhat.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ennek a gyÅ±jtemÃ©nynek pontosan {{ limit }} elemet kell tartalmaznia.|Ennek a gyÅ±jtemÃ©nynek pontosan {{ limit }} elemet kell tartalmaznia.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ÃrvÃ©nytelen kÃ¡rtyaszÃ¡m.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Nem tÃ¡mogatott kÃ¡rtyatÃ­pus vagy Ã©rvÃ©nytelen kÃ¡rtyaszÃ¡m.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Ez az Ã©rtÃ©k nem Ã©rvÃ©nyes NemzetkÃ¶zi BankszÃ¡mlaszÃ¡m (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes ISBN-10 vagy ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes pÃ©nznem.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ez az Ã©rtÃ©k legyen {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ez az Ã©rtÃ©k nagyobb legyen, mint {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ez az Ã©rtÃ©k nagyobb vagy egyenlÅ legyen, mint {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ez az Ã©rtÃ©k ugyanolyan legyen, mint {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ez az Ã©rtÃ©k kisebb legyen, mint {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ez az Ã©rtÃ©k kisebb vagy egyenlÅ legyen, mint {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ez az Ã©rtÃ©k ne legyen {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ez az Ã©rtÃ©k ne legyen ugyanolyan, mint {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>A kÃ©parÃ¡ny tÃºl nagy ({{ ratio }}). A megengedett legnagyobb kÃ©parÃ¡ny {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>A kÃ©parÃ¡ny tÃºl kicsi ({{ ratio }}). A megengedett legkisebb kÃ©parÃ¡ny {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>A kÃ©p nÃ©gyzet alakÃº ({{ width }}x{{ height }}px). A nÃ©gyzet alakÃº kÃ©pek nem engedÃ©lyezettek.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>A kÃ©p fekvÅ tÃ¡jolÃ¡sÃº ({{ width }}x{{ height }}px). A fekvÅ tÃ¡jolÃ¡sÃº kÃ©pek nem engedÃ©lyezettek.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>A kÃ©p Ã¡llÃ³ tÃ¡jolÃ¡sÃº ({{ width }}x{{ height }}px). Az Ã¡llÃ³ tÃ¡jolÃ¡sÃº kÃ©pek nem engedÃ©lyezettek.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Ãres fÃ¡jl nem megengedett.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Az Ã¡llomÃ¡snevet nem lehet feloldani.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ez az Ã©rtÃ©k nem az elvÃ¡rt {{ charset }} karakterkÃ³dolÃ¡st hasznÃ¡lja.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Ez az Ã©rtÃ©k nem Ã©rvÃ©nyes Ãzleti AzonosÃ­tÃ³ KÃ³d (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Hiba</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Ez az Ã©rtÃ©k nem Ã©rvÃ©nyes UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ennek az Ã©rtÃ©knek oszthatÃ³nak kell lennie a kÃ¶vetkezÅvel: {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ez a BankazonosÃ­tÃ³ kÃ³d (BIC) nem kapcsolÃ³dik az IBAN kÃ³dhoz ({{ iban }}).</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Ez az Ã©rtÃ©k Ã©rvÃ©nyes JSON kell, hogy legyen.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ez a gyÅ±jtemÃ©ny csak egyedi elemeket tartalmazhat.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ennek az Ã©rtÃ©knek pozitÃ­vnak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ennek az Ã©rtÃ©knek pozitÃ­vnak vagy nullÃ¡nak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ennek az Ã©rtÃ©knek negatÃ­vnak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ennek az Ã©rtÃ©knek negatÃ­vnak vagy nullÃ¡nak kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes idÅzÃ³na.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Ez a jelszÃ³ korÃ¡bban egy adatvÃ©delmi incidens sorÃ¡n illetÃ©ktelenek kezÃ©be kerÃŒlt, Ã­gy nem hasznÃ¡lhatÃ³. KÃ©rjÃŒk, hasznÃ¡ljon mÃ¡sik jelszÃ³t.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ennek az Ã©rtÃ©knek {{ min }} Ã©s {{ max }} kÃ¶zÃ¶tt kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes Ã¡llomÃ¡snÃ©v (hosztnÃ©v).</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>A gyÅ±jtemÃ©nyben lÃ©vÅ elemek szÃ¡mÃ¡nak oszthatÃ³nak kell lennie a kÃ¶vetkezÅvel: {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Ennek az Ã©rtÃ©knek meg kell felelni legalÃ¡bb egynek a kÃ¶vetkezÅ feltÃ©telek kÃ¶zÃŒl:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>A gyÅ±jtemÃ©ny minden elemÃ©nek meg kell felelni a sajÃ¡t feltÃ©teleinek.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes nemzetkÃ¶zi Ã©rtÃ©kpapÃ­r-azonosÃ­tÃ³ szÃ¡m (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Ennek az Ã©rtÃ©knek Ã©rvÃ©nyes kifejezÃ©snek kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes CSS szÃ­n.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Ez az Ã©rtÃ©k nem egy Ã©rvÃ©nyes CIDR jelÃ¶lÃ©s.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Ennek a netmask Ã©rtÃ©knek {{ min }} Ã©s {{ max }} kÃ¶zÃ¶tt kell lennie.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>A fÃ¡jlnÃ©v tÃºl hosszÃº. {{ filename_max_length }} karakter vagy kevesebb legyen.|A fÃ¡jlnÃ©v tÃºl hosszÃº. {{ filename_max_length }} karakter vagy kevesebb legyen.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>A jelszÃ³ tÃºl egyszerÅ±. KÃ©rjÃŒk, hasznÃ¡ljon egy bonyolultabb jelszÃ³t.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Ez az Ã©rtÃ©k olyan karaktereket tartalmaz, amik nem megengedettek.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>LÃ¡thatatlan karaktert hasznÃ¡lata nem megengedett.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>KÃŒlÃ¶nbÃ¶zÅ szÃ¡m Ã­rÃ¡smÃ³dok hasznÃ¡lata nem megengedett.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Rejtett mÃ³dosÃ­tÃ³ karakterek hasznÃ¡lata nem megengedett.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>A fÃ¡jl kiterjesztÃ©se Ã©rvÃ©nytelen ({{ extension }}). EngedÃ©lyezett kiterjesztÃ©sek: {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Az Ã©rzÃ©kelt karakterkÃ³dolÃ¡s Ã©rvÃ©nytelen ({{ detected }}). EngedÃ©lyezett karakterkÃ³dolÃ¡sok: {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Ez az Ã©rtÃ©k nem Ã©rvÃ©nyes MAC-cÃ­m.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Az URL-bÅl hiÃ¡nyzik a legfelsÅ szintÅ± tartomÃ¡ny (top-level domain).</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.hy.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.hy.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.hy.xlf	(revision 8435)
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="hy" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ¯Õ¥Õ²Õ®Ö</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ«ÖÕ¡Õ¯Õ¡Õ¶Ö</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« {{ type }} Õ¿Õ¥ÕœÕ¡Õ¯Õ«Ö</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ€Õ¡Õ¿Õ¡ÖÕ¯Ö</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>ÕÕ¥Ö ÕšÕ¶Õ¿ÖÕ¡Õ® Õ¡ÖÕªÕ¥ÖÕš Õ¡Õ¶ÕŸÕ¡ÕŸÕ¥Ö ÕšÕ¶Õ¿ÖÕžÖÕ©ÕµÕžÖÕ¶ Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>ÔŽÕžÖÖ ÕºÕ¥Õ¿Ö Õ§ ÕšÕ¶Õ¿ÖÕ¥Ö Õ¡ÕŽÕ¥Õ¶Õ¡ÖÕ«Õ¹Õš {{ limit }} Õ¿Õ¡ÖÕ¢Õ¥ÖÕ¡Õ¯Õ¶Õ¥ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>ÔŽÕžÖÖ ÕºÕ¥Õ¿Ö Õ§ ÕšÕ¶Õ¿ÖÕ¥Ö ÕžÕ¹ Õ¡ÕŸÕ¥Õ¬Õ« ÖÕ¡Õ¶ {{ limit }} Õ¿Õ¡ÖÕ¢Õ¥ÖÕ¡Õ¯Õ¶Õ¥ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>ÕÕ¥Õ¯ Õ¯Õ¡ÕŽ Õ¡ÕŸÕ¥Õ¬Õ« Õ¿ÖÕŸÕ¡Õ® Õ¡ÖÕªÕ¥ÖÕ¶Õ¥ÖÕš Õ¡Õ¶ÕŸÕ¡ÕŸÕ¥Ö Õ¥Õ¶Ö</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ô±ÕµÕœ Õ€Õ¡Õ·Õ¿Õš Õ¹Õ« ÕœÕºÕ¡ÕœÕŸÕžÖÕŽÖ</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ô±ÕµÕœ Õ€Õ¡Õ·Õ¿Õš Õ¢Õ¡ÖÕ¡Õ¯Õ¡ÕµÕžÖÕŽ Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕœÕ­Õ¡Õ¬ Õ¡ÕŽÕœÕ¡Õ©Õ«ÕŸ Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ô±ÕŽÕœÕ¡Õ©ÕŸÕ« Ö ÕªÕ¡ÕŽÕ¡Õ¶Õ¡Õ¯Õ« Õ¡ÖÕªÕ¥ÖÕš Õ¡Õ¶ÕŸÕ¡ÕŸÕ¥Ö Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ô±Õ¶ÕŸÕ¡ÕŸÕ¥Ö Õ§Õ¬ÖÖÕžÕœÕ¿Õ« Õ¡ÖÕªÕ¥ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>ÕÕ«Õ·ÖÕš Õ¹Õ« Õ£Õ¿Õ¶ÕŸÕ¥Õ¬Ö</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>ÕÕ«Õ·ÖÕš Õ¡Õ¶ÕšÕ¶Õ©Õ¥ÕŒÕ¶Õ¥Õ¬Õ« Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ÕÕ«Õ·ÖÕš Õ¹Õ¡ÖÕ¡ÕŠÕ¡Õ¶Ö ÕŽÕ¥Õ® Õ§ ({{ size }} {{ suffix }}): ÕÕ¡ÖÕœÕ«ÕŽÕ¡Õ¬ Õ©ÕžÖÕµÕ¬Õ¡Õ¿ÖÕ¥Õ¬Õ« Õ¹Õ¡ÖÕœÕšÕ {{ limit }} {{ suffix }}Ö</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>MIME-Õ¿Õ¥ÕœÕ¡Õ¯Õš Õ¡Õ¶ÕŸÕ¡ÕŸÕ¥Ö Õ§ Õ§({{ type }}): ÕÕ«Õ·ÖÕ¥ÖÕ« Õ©ÕžÖÕµÕ¬Õ¡Õ¿ÖÕ¥Õ¬Õ« MIME-Õ¿Õ¥ÕœÕ¡Õ¯Õ¶Õ¥ÖÕ¶ Õ¥Õ¶: {{ types }}Ö</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« {{ limit }} Õ¯Õ¡ÕŽ ÖÕžÖÖÖ</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš Õ¹Õ¡ÖÕ¡ÕŠÕ¡Õ¶Ö Õ¥ÖÕ¯Õ¡Ö Õ§: ÕÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« {{ limit }} Õ¯Õ¡ÕŽ Õ¡ÕŸÕ¥Õ¬ ÕœÕ«ÕŽÕŸÕžÕ¬Õ¶Õ¥ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿ Õ§ Õ¬Õ«Õ¶Õ« {{ limit }} Õ¯Õ¡ÕŽ Õ·Õ¡Õ¿Ö</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš Õ¹Õ¡ÖÕ¡ÕŠÕ¡Õ¶Ö Õ¯Õ¡ÖÕ³ Õ§: ÕÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« {{ limit }} Õ¯Õ¡ÕŽ Õ¡ÕŸÕ¥Õ¬Õ« ÕœÕ«ÕŽÕŸÕžÕ¬Õ¶Õ¥ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš Õ¹ÕºÕ¥Õ¿Ö Õ§ Õ€Õ¡Õ¿Õ¡ÖÕ¯ Õ¬Õ«Õ¶Õ«Ö</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš Õ¹ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« nullÖ</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« nullÖ</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ô±Õ¶ÕŸÕ¡ÕŸÕ¥Ö Õ¡ÖÕªÕ¥ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>ÔºÕ¡ÕŽÕ¡Õ¶Õ¡Õ¯Õ« Õ¡ÖÕªÕ¥ÖÕš Õ¡Õ¶ÕŸÕ¡ÕŸÕ¥Ö Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš  URL  Õ¹Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>ÔµÖÕ¯ÕžÖ Õ¡ÖÕªÕ¥ÖÕ¶Õ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¶ÕžÖÕµÕ¶Õš Õ¬Õ«Õ¶Õ¥Õ¶Ö</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ÕÕ«Õ·ÖÕš Õ¹Õ¡ÖÕ¡ÕŠÕ¡Õ¶Ö ÕŽÕ¥Õ® Õ§: ÕÕ¡ÖÕœÕ«ÕŽÕ¡Õ¬ Õ©ÕžÖÕµÕ¬Õ¡Õ¿ÖÕ¥Õ¬Õ« Õ¹Õ¡ÖÕœÕš {{ limit }} {{ suffix }} Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>ÕÕ«Õ·ÖÕš Õ¹Õ¡ÖÕ¡ÕŠÕ¡Õ¶Ö ÕŽÕ¥Õ® Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>ÕÕ«Õ·ÖÕš Õ¹Õ« Õ¯Õ¡ÖÕžÕ² Õ¢Õ¥ÕŒÕ¶ÕŸÕ¥Õ¬Ö</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ©Õ«ÕŸÖ</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>ÕÕ«Õ·ÖÕš Õ¶Õ¯Õ¡ÖÕ« ÕŸÕ¡ÕŸÕ¥Ö ÖÕžÖÕŽÕ¡Õ¿ Õ¹Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕŸÕ¡ÕŸÕ¥Ö IP Õ°Õ¡ÕœÖÕ¥ Õ¹Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕŸÕ¡ÕŸÕ¥Ö Õ¬Õ¥ÕŠÕžÖ Õ¹Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš Õ¹Õ« Õ°Õ¡Õ¶Õ€Õ«ÕœÕ¡Õ¶ÕžÖÕŽ ÕŸÕ¡ÕŸÕ¥Ö Õ¿Õ¥Õ²Õ¡ÕµÕ¶Õ¡ÖÕžÖÕŽÖ</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ¥ÖÕ¯Õ«ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ô±ÕµÕ€ Õ¡ÖÕªÕ¥ÖÕ¶ Õ¡ÖÕ€Õ¥Õ¶ Ö
+Õ£Õ¿Õ¡Õ£ÕžÖÕ®ÕŸÕžÖÕŽ Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>ÕÕ¯Õ¡ÖÕ« Õ¹Õ¡ÖÕœÕ¥ÖÕš Õ¹ÕœÕ¿Õ¡ÖÕŸÕ¥Ö ÕžÖÕžÕ·Õ¥Õ¬Ö</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ÕÕ¯Õ¡ÖÕ« Õ¬Õ¡ÕµÕ¶ÕžÖÕ©ÕµÕžÖÕ¶Õš Õ¹Õ¡ÖÕ¡ÕŠÕ¡Õ¶Ö ÕŽÕ¥Õ® Õ§({{ width }}px). ÕÕ¡ÖÕœÕ«ÕŽÕ¡Õ¬ Õ¹Õ¡ÖÕ¶ Õ§ {{ max_width }}pxÖ</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ÕÕ¯Õ¡ÖÕ« Õ¬Õ¡ÕµÕ¶ÕžÖÕ©ÕµÕžÖÕ¶Õš Õ¹Õ¡ÖÕ¡ÕŠÕ¡Õ¶Ö ÖÕžÖÖ Õ§ ({{ width }}px). ÕÕ«Õ¶Õ«ÕŽÕ¡Õ¬ Õ¹Õ¡ÖÕ¶ Õ§ {{ min_ width }}pxÖ</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ÕÕ¯Õ¡ÖÕ« Õ¢Õ¡ÖÕ±ÖÕžÖÕ©ÕµÕžÖÕ¶Õš Õ¹Õ¡ÖÕ¡ÕŠÕ¡Õ¶Ö ÕŽÕ¥Õ® Õ§ ({{ height }}px). ÕÕ¡ÖÕœÕ«ÕŽÕ¡Õ¬ Õ¹Õ¡ÖÕ¶ Õ§ {{ max_height }}pxÖ</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ÕÕ¯Õ¡ÖÕ« Õ¢Õ¡ÖÕ±ÖÕžÖÕ©ÕµÕžÖÕ¶Õš Õ¹Õ¡ÖÕ¡ÕŠÕ¡Õ¶Ö ÖÕžÖÖ Õ§ ({{ height }}px). ÕÕ«Õ¶Õ«ÕŽÕ¡Õ¬ Õ¹Õ¡ÖÕ¶ Õ§ {{ min_height }}pxÖ</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Ö
+Õ£Õ¿Õ¡Õ£ÕžÖÕ®ÕžÕ²Õ« Õ¶Õ¥ÖÕ¯Õ¡ Õ®Õ¡Õ®Õ¯Õ¡Õ£Õ«ÖÕšÖ</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ ÕžÖÕ¶Õ¥Õ¶Õ¡ Õ³Õ«Õ·Õ¿ {{ limit }} ÕœÕ«ÕŽÕŸÕžÕ¬Õ¶Õ¥ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>ÕÕ«Õ·ÖÕ« ÕŽÕ¡ÕœÕ¶Õ¡Õ¯Õ« Õ¢Õ¥ÕŒÕ¶ÕŽÕ¡Õ¶ ÕœÕ­Õ¡Õ¬Ö</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>ÕÕ«Õ·ÖÕš Õ¹Õ« Õ¢Õ¥ÕŒÕ¶ÕŸÕ¥Õ¬Ö</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">php.ini-ÕžÖÕŽ Õ¹Õ« Õ¯Õ¡ÖÕ£Õ¡ÕŸÕžÖÕŸÕ¥Õ¬ ÕªÕ¡ÕŽÕ¡Õ¶Õ¡Õ¯Õ¡ÕŸÕžÖ Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯, Õ¯Õ¡ÕŽ Õ¯Õ¡ÖÕ£Õ¡ÕŸÕžÖÕŸÕ¡Õ® Õ©Õ²Õ©Õ¡ÕºÕ¡Õ¶Õ¡Õ¯Õš Õ¹Õ¯Õ¡Ö</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>ÔºÕ¡ÕŽÕ¡Õ¶Õ¡Õ¯Õ¡ÕŸÕžÖ Õ¶Õ«Õ·ÖÕš Õ°Õ¶Õ¡ÖÕ¡ÕŸÕžÖ Õ¹Õ§ Õ£ÖÕ¥Õ¬ ÕœÕ¯Õ¡ÕŸÕ¡ÕŒÕ¡Õ¯Õ« ÕŸÖÕ¡Ö</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP ÖÕžÖÕŽÕ¡Õ¿Õš Õ€Õ¡ÖÕ±Õ¥Õ¬ Õ§ Õ¢Õ¥ÕŒÕ¶ÕŽÕ¡Õ¶ Õ¹Õ°Õ¡Õ»ÕžÕ²ÕŽÕ¡Õ¶ ÕºÕ¡Õ¿Õ³Õ¡ÕŒÖ</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ô±ÕµÕœ Õ°Õ¡ÕŽÕ¡Õ­ÕžÖÕŽÕ¢Õš ÕºÕ¥Õ¿Ö Õ§ ÕºÕ¡ÕžÖÖÕ¡Õ¯Õ« {{ limit }} Õ¯Õ¡ÕŽ Õ¡ÕŸÕ¥Õ¬Õ« Õ¿Õ¡ÖÖÕ¥ÖÖ|Ô±ÕµÕœ Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õš ÕºÕ¥Õ¿Ö Õ§ ÕºÕ¡ÖÕžÖÕ¶Õ¡Õ¯Õ« limit }} Õ¿Õ¡ÖÖ Õ¯Õ¡ÕŽ Õ¡ÕŸÕ¥Õ¬Õ«Õ¶Ö|Ô±ÕµÕœ Õ°Õ¡ÕŽÕ¡Õ­ÕžÖÕŽÕ¢Õš ÕºÕ¥Õ¿Ö Õ§ ÕºÕ¡ÖÕžÖÕ¶Õ¡Õ¯Õ« {{ limit }} Õ¿Õ¡ÖÖÕ¥ÖÕ«Õ¶ Õ¯Õ¡ÕŽ Õ¡ÕŸÕ¥Õ¬Õ«Ö</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ô±ÕµÕœ Õ°Õ¡ÕŽÕ¡Õ­ÕžÖÕŽÕ¢Õš ÕºÕ¥Õ¿Ö Õ§ ÕºÕ¡ÕžÖÖÕ¡Õ¯Õ« {{ limit }} Õ¿Õ¡ÖÖÕ¥Ö Õ¯Õ¡ÕŽ ÖÕ«Õ¹Ö|Ô±ÕµÕœ Õ°Õ¡ÕŽÕ¡Õ­ÕžÖÕŽÕ¢Õš ÕºÕ¥Õ¿Ö Õ§ ÕºÕ¡ÕžÖÖÕ¡Õ¯Õ« {{ limit }} Õ¿Õ¡ÖÖ Õ¯Õ¡ÕŽ ÖÕ«Õ¹Ö|Ô±ÕµÕœ Õ°Õ¡ÕŽÕ¡Õ­ÕžÖÕŽÕ¢Õš ÕºÕ¥Õ¿Ö Õ§ ÕºÕ¡ÕžÖÖÕ¡Õ¯Õ« {{ limit }} Õ¿Õ¡ÖÖÕ¥Ö Õ¯Õ¡ÕŽ ÖÕ«Õ¹Ö</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ô±ÕµÕœ Õ°Õ¡ÕŽÕ¡Õ­ÕžÖÕŽÕ¢Õš ÕºÕ¥Õ¿Ö Õ§ ÕºÕ¡ÕžÖÖÕ¡Õ¯Õ« ÕžÖÕ²Õ«Õ² {{ limit }} Õ¿Õ¡ÖÖÖ|Ô±ÕµÕœ Õ°Õ¡ÕŽÕ¡Õ­ÕžÖÕŽÕ¢Õš ÕºÕ¥Õ¿Ö Õ§ ÕºÕ¡ÕžÖÖÕ¡Õ¯Õ« ÕžÖÕ²Õ«Õ² {{ limit }} Õ¿Õ¡ÖÖÕ¥ÖÖ|Ô±ÕµÕœ Õ°Õ¡ÕŽÕ¡Õ­ÕžÖÕŽÕ¢Õš ÕºÕ¥Õ¿Ö Õ§ ÕºÕ¡ÕžÖÖÕ¡Õ¯Õ« {{ limit }} Õ¿Õ¡ÖÖÕ¥ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ÕÕ¡ÖÕ¿Õ« ÕœÕ­Õ¡Õ¬ Õ°Õ¡ÕŽÕ¡Ö:</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>ÕÕœÕºÕ¡ÕœÕ¡ÖÕ¯ÕŸÕžÕ² Õ¯Õ¡ÕŽ ÕœÕ­Õ¡Õ¬ ÖÕ¡ÖÕ¿Õ« Õ°Õ¡ÕŽÕ¡Ö:</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕŸÕ¡ÕŸÕ¥Ö ÕŽÕ«Õ»Õ¡ÕŠÕ£Õ¡ÕµÕ«Õ¶ Õ¢Õ¡Õ¶Õ¯Õ¡ÕµÕ«Õ¶ Õ°Õ¡Õ·ÕŸÕ« Õ°Õ¡ÕŽÕ¡Ö (IBAN) Õ¹Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕžÖÕ¶Õ« Õ¡Õ¶ÕŸÕ¡ÕŸÕ¥Ö ISBN-10 Õ±ÖÕ¡Õ¹Õ¡ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕžÖÕ¶Õ« Õ¡Õ¶ÕŸÕ¡ÕŸÕ¥Ö ISBN-13 Õ±ÖÕ¡Õ¹Õ¡ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš Õ¹Õ« Õ°Õ¡ÕŽÕ¡ÕºÕ¡Õ¿Õ¡ÕœÕ­Õ¡Õ¶ÕžÖÕŽ ISBN-10 Ö ISBN-13 Õ±ÖÕ¡Õ¹Õ¡ÖÕ¥ÖÕ«Õ¶Ö</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš Õ¹Õ« Õ°Õ¡ÕŽÕ¡ÕºÕ¡ÕœÕ¿Õ¡ÕœÕ­Õ¡Õ¶ÕžÖÕŽ ISSN Õ±ÖÕ¡Õ¹Õ¡ÖÕ«Õ¶Ö</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕŸÕ¡ÕŸÕ¥Ö Õ¿Õ¡ÖÕ¡Õ€ÖÕ¡ÕŽ Õ¹Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« {{ compared_value }}Ö</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ ÕŽÕ¥Õ® Õ¬Õ«Õ¶Õ«, ÖÕ¡Õ¶ {{ compared_value }}Ö</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ°Õ¡ÕŸÕ¡ÕœÕ¡Ö Õ¯Õ¡ÕŽ ÕŽÕ¥Õ® ÖÕ¡Õ¶ {{ compared_value }}Ö</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ«Õ¶Õ¹ÕºÕ¥Õœ {{ compared_value_type }} {{ compared_value }}Ö</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« ÖÕžÖÖ ÖÕ¡Õ¶ {{ compared_value }}Ö</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« ÖÕžÖÖ Õ¯Õ¡ÕŽ Õ°Õ¡ÕŸÕ¡ÕœÕ¡Ö {{ compared_value }}Ö</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ°Õ¡ÕŸÕ¡ÕœÕ¡Ö {{ compared_value }}Ö</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ¶ÕžÖÕ¶Õš {{ compared_value_type }} {{ compared_value }}:</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>ÕÕ¡Õ¿Õ¯Õ¥ÖÕ« Õ¯ÕžÕ²ÕŽÕ¥ÖÕ« Õ°Õ¡ÖÕ¡Õ¢Õ¥ÖÕ¡Õ¯ÖÕžÖÕ©ÕµÕžÖÕ¶Õš Õ­Õ«ÕœÕ¿ ÕŽÕ¥Õ® Õ§ ({{ ratio }}). ÕÕ¡ÖÕœÕ«ÕŽÕ¡Õ¬ Õ°Õ¡ÖÕ¡Õ¢Õ¥ÖÕ¡Õ¯ÖÕžÖÕ©ÕµÕžÖÕ¶ÕšÕ {{ max_ratio }}Ö</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>ÕÕ¡Õ¿Õ¯Õ¥ÖÕ« Õ¯ÕžÕ²ÕŽÕ¥ÖÕ« Õ°Õ¡ÖÕ¡Õ¢Õ¥ÖÕ¡Õ¯ÖÕžÖÕ©ÕµÕžÖÕ¶Õš Õ­Õ«ÕœÕ¿ ÖÕžÖÖ Õ§ ({{ ratio }}). ÕÕ«Õ¶Õ«ÕŽÕ¡Õ¬ Õ°Õ¡ÖÕ¡Õ¢Õ¥ÖÕ¡Õ¯ÖÕžÖÕ©ÕµÕžÖÕ¶ÕšÕ {{ min_ratio }}Ö</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>ÕÕ¡Õ¿Õ¯Õ¥ÖÕš ÖÕ¡ÕŒÕ¡Õ¯ÕžÖÕœÕ« Õ§({{ width }}x{{ height }}px)Ö ÕÕ¡ÕŒÕ¡Õ¯ÕžÖÕœÕ« Õ¶Õ¯Õ¡ÖÕ¶Õ¥Ö Õ¹Õ¥Õ¶ Õ©ÕžÖÕµÕ¬Õ¡Õ¿ÖÕŸÕžÖÕŽÖ</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>ÕÕ¡Õ¿Õ¯Õ¥ÖÕš Õ¡Õ¬Õ¢ÕžÕŽÕ¡ÕµÕ«Õ¶ ÕžÖÕ²Õ²ÕŸÕ¡Õ®ÕžÖÕ©ÕµÕ¡Õ¶ Õ§({{ width }}x{{ height }}px)â€ Õ€Õ¡ Õ¹Õ« Õ©ÕžÖÕµÕ¬Õ¡Õ¿ÖÕŸÕžÖÕŽÖ</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>ÕÕ¡Õ¿Õ¯Õ¥ÖÕš ÕºÕžÖÕ¿ÖÕ¥Õ¿Õ¡ÕµÕ«Õ¶ ÕžÖÕ²Õ²ÕŸÕ¡Õ®ÕžÖÕ©ÕµÕ¡Õ¶ Õ§ ({{ width }}x{{ height }}px)â€ Õ€Õ¡ Õ¹Õ« Õ©ÕžÖÕµÕ¬Õ¡Õ¿ÖÕŸÕžÖÕŽÖ</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>ÔŽÕ¡Õ¿Õ¡ÖÕ¯ Õ¶Õ«Õ·Ö Õ¹Õ« Õ©ÕžÖÕµÕ¬Õ¡Õ¿ÖÕŸÕžÖÕŽÖ</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>ÕÕžÕœÕ©Õ« Õ¡Õ¶ÕžÖÕ¶Õš Õ°Õ¶Õ¡ÖÕ¡ÕŸÕžÖ Õ¹Õ« ÕºÕ¡ÖÕŠÕ¥Õ¬Ö</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ô±ÖÕªÕ¥ÖÕš Õ¹Õ« Õ°Õ¡ÕŽÕšÕ¶Õ¯Õ¶ÕžÖÕŽ {{ charset }} Õ¯ÕžÕ€Õ¡ÕŸÕžÖÕŽÕ¡Õ¶ Õ°Õ¥Õ¿Ö</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕŸÕ¡ÕŸÕ¥Ö Õ¢Õ«ÕŠÕ¶Õ¥ÕœÕ« Õ¶ÕžÖÕŽÕ¡Õ¿Õ«ÕŸ Õ¯ÕžÕ€ (BIC) Õ¹Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>ÕÕ­Õ¡Õ¬</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕŸÕ¡ÕŸÕ¥Ö UUID Õ¹Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ¢Õ¡ÕŠÕŽÕ¡Õ¯Õ« {{ compared_value }}Ö</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ô²Õ«ÕŠÕ¶Õ¥ÕœÕ« Õ¶ÕžÖÕµÕ¶Õ¡Õ¯Õ¡Õ¶Õ¡ÖÕŽÕ¡Õ¶ Õ¯ÕžÕ€Õš (BIC) Õ¯Õ¡ÕºÕŸÕ¡Õ® Õ¹Õ§ IBAN- Õ« Õ°Õ¥Õ¿ {{ iban }}Ö</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« ÕŸÕ¡ÕŸÕ¥Ö JSONÖ</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ô±ÕµÕœ Õ°Õ¡ÕŽÕ¡Õ­ÕžÖÕŽÕ¢Õš ÕºÕ¥Õ¿Ö Õ§ ÕºÕ¡ÖÕžÖÕ¶Õ¡Õ¯Õ« ÕŽÕ«Õ¡ÕµÕ¶ Õ¥ÕŠÕ¡Õ¯Õ« Õ¿Õ¡ÖÖÕ¥ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ€ÖÕ¡Õ¯Õ¡Õ¶Ö</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ€ÖÕ¡Õ¯Õ¡Õ¶ Õ¯Õ¡ÕŽ ÕŠÖÕžÕµÕ¡Õ¯Õ¡Õ¶Ö</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ¢Õ¡ÖÕ¡ÕœÕ¡Õ¯Õ¡Õ¶Ö</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« Õ¢Õ¡ÖÕ¡ÕœÕ¡Õ¯Õ¡Õ¶ Õ¯Õ¡ÕŽ ÕŠÖÕžÕµÕ¡Õ¯Õ¡Õ¶Ö</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕŸÕ¡ÕŸÕ¥Ö ÕªÕ¡ÕŽÕ¡ÕµÕ«Õ¶ Õ£ÕžÕ¿Õ« Õ¹Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Ô³Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡ÕŒÕš Õ£Õ¿Õ¶ÕŸÕ¥Õ¬ Õ§ Õ¿ÕŸÕµÕ¡Õ¬Õ¶Õ¥ÖÕ« Õ¡ÖÕ¿Õ¡Õ°ÕžÕœÖÕžÖÕŽ. Õ¡ÕµÕ¶ Õ¹ÕºÕ¥Õ¿Ö Õ§ Ö
+Õ£Õ¿Õ¡Õ£ÕžÖÕ®ÕŸÕ«: ÔœÕ¶Õ€ÖÕžÖÕŽ Õ¥Õ¶Ö Ö
+Õ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥Õ¬ ÕŽÕ¥Õ¯ Õ¡ÕµÕ¬ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡ÕŒÖ</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ«  {{ min }}-Õ« Ö {{ max }}-Õ« ÕŽÕ«Õ»ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Ô±ÕµÕœ Õ°ÕžÕœÕ¿Õ« Õ¡Õ¶ÕžÖÕ¶Õš ÕŸÕ¡ÕŸÕ¥Ö Õ¹Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Ô±ÕµÕœ Õ°Õ¡ÕŽÕ¡Õ­ÕŽÕ¢Õ« Õ¿Õ¡ÖÖÕ¥ÖÕ« ÖÕ¡Õ¶Õ¡Õ¯Õš ÕºÕ¥Õ¿Ö Õ§ Õ°Õ¡ÕŸÕ¡ÕœÕ¡Ö Õ¬Õ«Õ¶Õ« {{ compared_value }}-Õ« Õ¢Õ¡ÕŠÕŽÕ¡ÕºÕ¡Õ¿Õ«Õ¯Õ¶Õ¥ÖÕ«Õ¶Ö</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¢Õ¡ÕŸÕ¡ÖÕ¡ÖÕ« Õ°Õ¥Õ¿ÖÕµÕ¡Õ¬ ÕœÕ¡Õ°ÕŽÕ¡Õ¶Õ¡ÖÕ¡Õ¯ÕžÖÕŽÕ¶Õ¥ÖÕ«Ö Õ¡ÕŒÕ¶ÕŸÕ¡ÕŠÕ¶ ÕŽÕ¥Õ¯ÕšÖ</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Ô±ÕµÕœ Õ°Õ¡ÕŽÕ¡Õ­ÕŽÕ¢Õ« ÕµÕžÖÖÕ¡ÖÕ¡Õ¶Õ¹ÕµÕžÖÖ Õ¿Õ¡ÖÖ ÕºÕ¥Õ¿Ö Õ§ Õ¢Õ¡ÕŸÕ¡ÖÕ¡ÖÕ« Õ«Ö ÕœÕ¥ÖÕ¡Õ¯Õ¡Õ¶ ÕœÕ¡Õ°ÕŽÕ¡Õ¶Õ¡ÖÕ¡Õ¯ÕžÖÕŽÕ¶Õ¥ÖÕšÖ</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš Õ¡ÖÕªÕ¥Õ©Õ²Õ©Õ¥ÖÕ« Õ¶ÕžÖÕµÕ¶Õ¡Õ¯Õ¡Õ¶Õ¡ÖÕŽÕ¡Õ¶ ÕŽÕ«Õ»Õ¡ÕŠÕ£Õ¡ÕµÕ«Õ¶ Õ°Õ¡ÕŽÕ¡ÖÕš ÕŸÕ¡ÕŸÕ¥Ö Õ¹Õ§(ISIN)Ö</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« ÕŸÕ¡ÕŸÕ¥Ö Õ¡ÖÕ¿Õ¡Õ°Õ¡ÕµÕ¿ÕžÖÕ©ÕµÕžÖÕ¶:</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target state="needs-review-translation">Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕŸÕ¡ÕŸÕ¥Ö CSS Õ£ÕžÖÕµÕ¶ Õ¹Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target state="needs-review-translation">Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕŸÕ¡ÕŸÕ¥Ö CIDR Õ¶Õ·ÕžÖÕŽ Õ¹Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target state="needs-review-translation">ÕÕ¡Õ¶ÖÕ¡ÕµÕ«Õ¶ Õ€Õ«ÕŽÕ¡Õ¯Õ« Õ¡ÖÕªÕ¥ÖÕš ÕºÕ¥Õ¿Ö Õ§ Õ¬Õ«Õ¶Õ« {{ min }}-Õ« Ö {{ max }}-Õ« ÕŽÕ«Õ»ÖÖ</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target state="needs-review-translation">ÕÕ¡ÕµÕ¬Õ« Õ¡Õ¶ÕžÖÕ¶Õš Õ·Õ¡Õ¿ Õ¥ÖÕ¯Õ¡Ö Õ§Ö Ô±ÕµÕ¶ ÕºÕ¥Õ¿Ö Õ§ ÕžÖÕ¶Õ¥Õ¶Õ¡ {{ filename_max_length }} Õ¶Õ«Õ· Õ¯Õ¡ÕŽ ÕºÕ¡Õ¯Õ¡ÕœÖ</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target state="needs-review-translation">Ô³Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡ÕŒÕ« Õ¡Õ¶ÕŸÕ¿Õ¡Õ¶Õ£ÕžÖÕ©ÕµÕžÖÕ¶Õš Õ·Õ¡Õ¿ ÖÕ¡Õ®Ö Õ§Ö ÔœÕ¶Õ€ÖÕžÖÕŽ Õ¥Õ¶Ö Õ£ÕžÖÕ®Õ¡Õ®Õ¥Õ¬ Õ¡ÕŸÕ¥Õ¬Õ« Õ¡ÕŽÖÕ¡Õ£ÕžÖÕµÕ¶ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡ÕŒÖ</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target state="needs-review-translation">Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕºÕ¡ÖÕžÖÕ¶Õ¡Õ¯ÕžÖÕŽ Õ§ Õ¡ÕµÕ¶ Õ¶Õ«Õ·Õ¥ÖÕš, ÕžÖÕžÕ¶Ö Õ¹Õ¥Õ¶ Õ©ÕžÖÕµÕ¬Õ¡Õ¿ÖÕŸÕžÖÕŽ ÕšÕœÕ¿ ÕšÕ¶Õ©Õ¡ÖÕ«Õ¯ ÕœÕ¡Õ°ÕŽÕ¡Õ¶ÕžÖÕŽÕ¶Õ¥ÖÕ«Ö</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target state="needs-review-translation">Ô±Õ¶Õ¿Õ¥ÕœÕ¡Õ¶Õ¥Õ¬Õ« Õ¶Õ«Õ·Õ¥ÖÕ« Ö
+Õ£Õ¿Õ¡Õ£ÕžÖÕ®ÕžÖÕŽÕš Õ¹Õ« Õ©ÕžÖÕµÕ¬Õ¡Õ¿ÖÕŸÕžÖÕŽÖ</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target state="needs-review-translation">Ô¹ÕŸÕ¥ÖÕ« Õ­Õ¡ÕŒÕ¶ÕžÖÖÕ€Õš Õ¿Õ¡ÖÕ¢Õ¥Ö ÕœÖÕ¥Õ¶Õ¡ÖÕ¶Õ¥ÖÕ«Ö Õ¹Õ« Õ©ÕžÖÕµÕ¬Õ¡Õ¿ÖÕŸÕžÖÕŽÖ</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target state="needs-review-translation">Ô¹Õ¡ÖÕ¶ÕŸÕ¡Õ® Õ®Õ¡Õ®Õ¯Õ¡Õ¶Õ«Õ·Õ¥ÖÕ« Ö
+Õ£Õ¿Õ¡Õ£ÕžÖÕ®ÕžÖÕŽÕš Õ¹Õ« Õ©ÕžÖÕµÕ¬Õ¡Õ¿ÖÕŸÕžÖÕŽÖ</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">ÕÕ¡ÕµÕ¬Õ« ÕšÕ¶Õ€Õ¬Õ¡ÕµÕ¶ÕžÖÕŽÕš Õ¡Õ¶ÕŸÕ¡ÕŸÕ¥Ö Õ§ ({{ extension }})Ö Ô¹ÕžÖÕµÕ¬Õ¡Õ¿ÖÕŸÕžÕ² ÕšÕ¶Õ€Õ¬Õ¡ÕµÕ¶ÕžÖÕŽÕ¶Õ¥ÖÕ¶ Õ¥Õ¶Õ {{ extensions }}Ö</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">ÕÕ¡ÕµÕ¿Õ¶Õ¡Õ¢Õ¥ÖÕŸÕ¡Õ® Õ¶Õ«Õ·Õ¡Õ£ÖÕžÖÕ©ÕµÕ¡Õ¶ Õ¯ÕžÕ€Õš Õ¡Õ¶ÕŸÕ¡ÕŸÕ¥Ö Õ§ ({{ detected }})Ö Ô¹ÕžÖÕµÕ¬Õ¡Õ¿ÖÕŸÕžÕ² Õ¯ÕžÕ€Õ¥ÖÕ¶ Õ¥Õ¶Õ {{ encodings }}Ö</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Ô±ÕµÕœ Õ¡ÖÕªÕ¥ÖÕš ÕŸÕ¡ÕŸÕ¥Ö MAC Õ°Õ¡ÕœÖÕ¥ Õ¹Õ§Ö</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Ô±ÕµÕœ URL-Õš Õ¹ÕžÖÕ¶Õ« ÕŸÕ¥ÖÕ«Õ¶ ÕŽÕ¡Õ¯Õ¡ÖÕ€Õ¡Õ¯Õ« Õ€ÕžÕŽÕ¥ÕµÕ¶:</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.id.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.id.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.id.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="id" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Nilai ini harus bernilai salah.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Nilai ini harus bernilai benar.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Nilai ini harus bertipe {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Nilai ini harus kosong.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Nilai yang dipilih tidak tepat.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Anda harus memilih paling tidak {{ limit }} pilihan.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Anda harus memilih paling banyak {{ limit }} pilihan.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Satu atau lebih nilai yang diberikan tidak sah.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ruas ini tidak diharapkan.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ruas ini hilang.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Nilai ini bukan merupakan tanggal yang sah.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Nilai ini bukan merupakan tanggal dan waktu yang sah.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Nilai ini bukan alamat surel yang sah.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Berkas tidak dapat ditemukan.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Berkas tidak dapat dibaca.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ukuran berkas terlalu besar ({{ size }} {{ suffix }}). Ukuran maksimum yang diizinkan adalah {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Jenis berkas ({{ type }}) tidak sah. Jenis berkas yang diizinkan adalah {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Nilai ini harus {{ limit }} atau kurang.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Nilai ini terlalu panjang. Seharusnya {{ limit }} karakter atau kurang.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Nilai ini harus {{ limit }} atau lebih.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Nilai ini terlalu pendek. Seharusnya {{ limit }} karakter atau lebih.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Nilai ini tidak boleh kosong.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Nilai ini tidak boleh 'null'.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Nilai ini harus 'null'.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Nilai ini tidak sah.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Nilai ini bukan merupakan waktu yang sah.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Nilai ini bukan URL yang sah.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Isi keduanya harus sama.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ukuran berkas terlalu besar. Ukuran maksimum yang diizinkan adalah {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ukuran berkas terlalu besar.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Berkas tidak dapat diunggah.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Nilai ini harus angka yang sah.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Berkas ini tidak termasuk citra.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Nilai ini bukan alamat IP yang valid.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Nilai ini bukan bahasa yang sah.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Nilai ini bukan lokal yang sah.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Nilai ini bukan negara yang sah.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Nilai ini sudah digunakan.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Ukuran dari citra tidak bisa dideteksi.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Lebar citra terlalu besar ({{ width }}px). Ukuran lebar maksimum adalah {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Lebar citra terlalu kecil ({{ width }}px). Ukuran lebar minimum yang diharapkan adalah {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Tinggi citra terlalu besar ({{ height }}px). Ukuran tinggi maksimum adalah {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Tinggi citra terlalu kecil ({{ height }}px). Ukuran tinggi minimum yang diharapkan adalah {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Nilai ini harus kata sandi pengguna saat ini.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Nilai ini harus memiliki tepat {{ limit }} karakter.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Berkas hanya terunggah sebagian.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Tidak ada berkas terunggah.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Tidak ada folder sementara yang dikonfigurasi di php.ini, atau folder yang dikonfigurasi tidak ada.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Tidak dapat menuliskan berkas sementara ke dalam media penyimpanan.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Sebuah ekstensi PHP menyebabkan kegagalan unggah.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Kumpulan ini harus memiliki {{ limit }} elemen atau lebih.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Kumpulan ini harus memiliki kurang dari {{ limit }} elemen.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Kumpulan ini harus memiliki tepat {{ limit }} elemen.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Nomor kartu tidak sah.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Jenis kartu tidak didukung atau nomor kartu tidak sah.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Nilai ini bukan Nomor Rekening Bank Internasional (IBAN) yang valid.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Nilai ini bukan ISBN-10 yang sah.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Nilai ini bukan ISBN-13 yang sah.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Nilai ini bukan ISBN-10 maupun ISBN-13 yang sah.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Nilai ini bukan ISSN yang sah.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Nilai ini bukan mata uang yang sah.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya sama dengan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya lebih dari {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya lebih dari atau sama dengan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya identik dengan {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya kurang dari {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya kurang dari atau sama dengan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya tidak sama dengan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Nilai ini seharusnya tidak identik dengan {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Rasio citra terlalu besar ({{ ratio }}). Rasio maksimum yang diizinkan adalah {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Rasio citra terlalu kecil ({{ ratio }}). Rasio minimum yang diharapkan adalah {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Citra persegi ({{ width }}x{{ height }}px). Citra persegi tidak diizinkan.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Citra berorientasi lanskap ({{ width }}x{{ height }}px). Citra berorientasi lanskap tidak diizinkan.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Citra berorientasi potret ({{ width }}x{{ height }}px). Citra berorientasi potret tidak diizinkan.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Berkas kosong tidak diizinkan.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Host tidak dapat diselesaikan.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Nilai ini tidak memenuhi set karakter {{ charset }} yang diharapkan.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Nilai ini bukan Kode Identifikasi Bisnis (BIC) yang valid.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Galat</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Nilai ini bukan UUID yang valid.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Nilai ini harus kelipatan dari {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Business Identifier Code (BIC) ini tidak terkait dengan IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Nilai ini harus berisi JSON yang sah.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Kumpulan ini harus mengandung elemen yang unik.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Nilai ini harus positif.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Nilai ini harus positif atau nol.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Nilai ini harus negatif.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Nilai ini harus negatif atau nol.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Nilai ini harus merupakan zona waktu yang sah.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Kata sandi ini telah bocor di data breach, harus tidak digunakan kembali. Silahkan gunakan kata sandi yang lain.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Nilai ini harus berada diantara {{ min }} dan {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Nilai ini bukan merupakan hostname yang sah.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Angka dari setiap elemen di dalam kumpulan ini harus kelipatan dari {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Nilai ini harus memenuhi setidaknya satu dari batasan berikut:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Setiap elemen koleksi ini harus memenuhi batasannya sendiri.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Nilai ini bukan merupakan International Securities Identification Number (ISIN) yang sah.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Nilai ini harus berupa ekspresi yang sah.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Nilai ini bukan merupakan warna CSS yang sah.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Nilai ini bukan merupakan notasi CIDR yang sah.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Nilai dari netmask harus berada diantara {{ min }} dan {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Nama file terlalu panjang. Harusnya {{ filename_max_length }} karakter atau kurang.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Kata sandi terlalu lemah. Harap gunakan kata sandi yang lebih kuat.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Nilai ini mengandung karakter yang tidak diizinkan oleh tingkat pembatasan saat ini.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Penggunaan karakter tak terlihat tidak diperbolehkan.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Menggabungkan angka-angka dari skrip yang berbeda tidak diperbolehkan.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Penggunaan karakter overlay yang tersembunyi tidak diperbolehkan.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Ekstensi file tidak valid ({{ extension }}). Ekstensi yang diperbolehkan adalah {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Pengkodean karakter yang terdeteksi tidak valid ({{ detected }}). Pengkodean yang diperbolehkan adalah {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Nilai ini bukan alamat MAC yang valid.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>URL ini tidak memiliki domain tingkat atas.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.it.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.it.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.it.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="it" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Questo valore dovrebbe essere falso.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Questo valore dovrebbe essere vero.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Questo valore dovrebbe essere di tipo {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Questo valore dovrebbe essere vuoto.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Questo valore dovrebbe essere una delle opzioni disponibili.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Si dovrebbe selezionare almeno {{ limit }} opzione.|Si dovrebbero selezionare almeno {{ limit }} opzioni.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Si dovrebbe selezionare al massimo {{ limit }} opzione.|Si dovrebbero selezionare al massimo {{ limit }} opzioni.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Uno o piÃ¹ valori inseriti non sono validi.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Questo campo non Ãš stato previsto.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Questo campo Ãš mancante.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Questo valore non Ãš una data valida.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Questo valore non Ãš una data e ora valida.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Questo valore non Ãš un indirizzo email valido.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Non Ãš stato possibile trovare il file.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Il file non Ãš leggibile.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Il file Ãš troppo grande ({{ size }} {{ suffix }}). La dimensione massima consentita Ãš {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Il mime type del file non Ãš valido ({{ type }}). I tipi permessi sono {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Questo valore dovrebbe essere {{ limit }} o inferiore.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Questo valore Ãš troppo lungo. Dovrebbe essere al massimo di {{ limit }} carattere.|Questo valore Ãš troppo lungo. Dovrebbe essere al massimo di {{ limit }} caratteri.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Questo valore dovrebbe essere {{ limit }} o superiore.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Questo valore Ãš troppo corto. Dovrebbe essere almeno di {{ limit }} carattere.|Questo valore Ãš troppo corto. Dovrebbe essere almeno di {{ limit }} caratteri.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Questo valore non dovrebbe essere vuoto.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Questo valore non dovrebbe essere nullo.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Questo valore dovrebbe essere nullo.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Questo valore non Ãš valido.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Questo valore non Ãš un'ora valida.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Questo valore non Ãš un URL valido.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>I due valori dovrebbero essere uguali.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Il file Ãš troppo grande. La dimensione massima Ãš {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Il file Ãš troppo grande.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Il file non puÃ² essere caricato.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Questo valore dovrebbe essere un numero.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Questo file non Ãš una immagine valida.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Questo valore non Ãš un indirizzo IP valido.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Questo valore non Ãš una lingua valida.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Questo valore non Ãš una impostazione regionale valida.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Questo valore non Ãš una nazione valida.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Questo valore Ãš giÃ  stato utilizzato.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>La dimensione dell'immagine non puÃ² essere determinata.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>La larghezza dell'immagine Ãš troppo grande ({{ width }}px). La larghezza massima Ãš di {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>La larghezza dell'immagine Ãš troppo piccola ({{ width }}px). La larghezza minima Ãš di {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>L'altezza dell'immagine Ãš troppo grande ({{ height }}px). L'altezza massima Ãš di {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>L'altezza dell'immagine Ãš troppo piccola ({{ height }}px). L'altezza minima Ãš di {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Questo valore dovrebbe essere la password attuale dell'utente.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Questo valore dovrebbe contenere esattamente {{ limit }} carattere.|Questo valore dovrebbe contenere esattamente {{ limit }} caratteri.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Il file Ãš stato caricato solo parzialmente.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nessun file Ãš stato caricato.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Non Ãš stata configurata una cartella temporanea in php.ini, o la cartella configurata non esiste.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Impossibile scrivere il file temporaneo sul disco.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Un'estensione PHP ha causato il fallimento del caricamento.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Questa collezione dovrebbe contenere almeno {{ limit }} elemento.|Questa collezione dovrebbe contenere almeno {{ limit }} elementi.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Questa collezione dovrebbe contenere massimo {{ limit }} elemento.|Questa collezione dovrebbe contenere massimo {{ limit }} elementi.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Questa collezione dovrebbe contenere esattamente {{ limit }} elemento.|Questa collezione dovrebbe contenere esattamente {{ limit }} elementi.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Numero di carta non valido.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipo di carta non supportato o numero non valido.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Questo valore non Ãš un IBAN valido.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Questo valore non Ãš un codice ISBN-10 valido.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Questo valore non Ãš un codice ISBN-13 valido.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Questo valore non Ãš un codice ISBN-10 o ISBN-13 valido.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Questo valore non Ãš un codice ISSN valido.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Questo valore non Ãš una valuta valida.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere uguale a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere maggiore di {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere maggiore o uguale a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere identico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere minore di {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere minore o uguale a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere diverso da {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere diverso da {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Il rapporto di aspetto dell'immagine Ãš troppo grande ({{ ratio }}). Il rapporto massimo consentito Ãš {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Il rapporto di aspetto dell'immagine Ãš troppo piccolo ({{ ratio }}). Il rapporto minimo consentito Ãš {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>L'immagine Ãš quadrata ({{ width }}x{{ height }}px). Le immagini quadrate non sono consentite.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>L'immagine Ãš orizzontale ({{ width }}x{{ height }}px). Le immagini orizzontali non sono consentite.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>L'immagine Ãš verticale ({{ width }}x{{ height }}px). Le immagini verticali non sono consentite.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Un file vuoto non Ãš consentito.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>L'host non puÃ² essere risolto.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Questo valore non corrisponde al charset {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Questo valore non Ãš un codice identificativo bancario (BIC) valido.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Errore</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Questo valore non Ãš un UUID valido.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Questo valore dovrebbe essere un multiplo di {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Questo codice identificativo bancario (BIC) non Ãš associato all'IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Questo valore dovrebbe essere un JSON valido.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Questa collezione dovrebbe contenere solo elementi unici.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Questo valore dovrebbe essere positivo.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Questo valore dovrebbe essere positivo oppure zero.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Questo valore dovrebbe essere negativo.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Questo valore dovrebbe essere negativo oppure zero.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Questo valore non Ãš un fuso orario valido.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Questa password Ãš trapelata durante una compromissione di dati, non deve essere usata. Si prega di usare una password diversa.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Questo valore dovrebbe essere compreso tra {{ min }} e {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Questo valore non Ãš un nome di host valido.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Il numero di elementi in questa collezione dovrebbe essere un multiplo di {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Questo valore dovrebbe soddisfare almeno uno dei vincoli seguenti:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Ciascun elemento di questa collezione dovrebbe soddisfare il suo insieme di vincoli.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Questo valore non Ãš un codice identificativo internazionale di valori mobiliari (ISIN) valido.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Questo valore dovrebbe essere un'espressione valida.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Questo valore non Ãš un colore CSS valido.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Questo valore non Ãš una notazione CIDR valida.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Il valore della netmask dovrebbe essere compreso tra {{ min }} e {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Il nome del file Ãš troppo lungo. Dovrebbe avere {{ filename_max_length }} carattere o meno.|Il nome del file Ãš troppo lungo. Dovrebbe avere {{ filename_max_length }} caratteri o meno.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>La password non Ãš abbastanza sicura. Per favore, utilizza una password piÃ¹ robusta.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Questo valore contiene caratteri che non sono consentiti dal livello di restrizione attuale.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Utilizzare caratteri invisibili non Ãš consentito.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Non Ãš consentito mescolare numeri provenienti da diversi script.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Non Ãš consentito utilizzare caratteri sovrapposti nascosti.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>L'estensione del file non Ãš valida ({{ extension }}). Le estensioni consentite sono {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>La codifica dei caratteri rilevata non Ãš valida ({{ detected }}). Le codifiche ammesse sono {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Questo valore non Ãš un indirizzo MAC valido.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Questo URL Ãš privo di un dominio di primo livello.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ja.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ja.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ja.xlf	(revision 8435)
@@ -0,0 +1,463 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="ja" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>falseã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>trueã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>åã¯{{ type }}ã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>ç©ºã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>æå¹ãªéžæè¢ã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>{{ limit }}åä»¥äžéžæããŠãã ããã</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>{{ limit }}åä»¥å
+ã§éžæããŠãã ããã</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>ç¡å¹ãªéžæè¢ãå«ãŸããŠããŸãã</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>ãã®ãã£ãŒã«ãã¯äºæãããŠããŸããã§ããã</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>ãã®ãã£ãŒã«ãã¯ãæ¬ èœããŠããŸãã</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>æå¹ãªæ¥ä»ã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>æå¹ãªæ¥æã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>æå¹ãªã¡ãŒã«ã¢ãã¬ã¹ã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>ãã¡ã€ã«ãèŠã€ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>ãã¡ã€ã«ãèª­ã¿èŸŒããŸããã</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ãã¡ã€ã«ã®ãµã€ãºãå€§ããããŸã({{ size }} {{ suffix }})ãæå¹ãªæå€§ãµã€ãºã¯{{ limit }} {{ suffix }}ã§ãã</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>ãã¡ã€ã«ã®MIMEã¿ã€ããç¡å¹ã§ã({{ type }})ãæå¹ãªMIMEã¿ã€ãã¯{{ types }}ã§ãã</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>{{ limit }}ä»¥äžã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>å€ãé·ãããŸãã{{ limit }}æå­ä»¥å
+ã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>{{ limit }}ä»¥äžã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>å€ãç­ãããŸãã{{ limit }}æå­ä»¥äžã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>ç©ºã§ãã£ãŠã¯ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>nullã§ãã£ãŠã¯ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>nullã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>æå¹ãªå€ã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>æå¹ãªæå»ã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>æå¹ãªURLã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>2ã€ã®å€ãåãã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ãã¡ã€ã«ã®ãµã€ãºãå€§ããããŸããæå¹ãªæå€§ãµã€ãºã¯{{ limit }} {{ suffix }}ã§ãã</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>ãã¡ã€ã«ã®ãµã€ãºãå€§ããããŸãã</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>ãã¡ã€ã«ãã¢ããã­ãŒãã§ããŸããã§ããã</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>æå¹ãªæ°å­ã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>ãã¡ã€ã«ãç»åã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>æå¹ãªIPã¢ãã¬ã¹ã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>æå¹ãªèšèªåã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>æå¹ãªã­ã±ãŒã«ã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>æå¹ãªåœåã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>æ¢ã«äœ¿çšãããŠããŸãã</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>ç»åã®ãµã€ãºãæ€åºã§ããŸããã</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ç»åã®å¹
+ãå€§ããããŸã({{ width }}ãã¯ã»ã«)ã{{ max_width }}ãã¯ã»ã«ãŸã§ã«ããŠãã ããã</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ç»åã®å¹
+ãå°ããããŸã({{ width }}ãã¯ã»ã«)ã{{ min_width }}ãã¯ã»ã«ä»¥äžã«ããŠãã ããã</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ç»åã®é«ããå€§ããããŸã({{ height }}ãã¯ã»ã«)ã{{ max_height }}ãã¯ã»ã«ãŸã§ã«ããŠãã ããã</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ç»åã®é«ããå°ããããŸã({{ height }}ãã¯ã»ã«)ã{{ min_height }}ãã¯ã»ã«ä»¥äžã«ããŠãã ããã</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>ãŠãŒã¶ãŒã®çŸåšã®ãã¹ã¯ãŒãã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>ã¡ããã©{{ limit }}æå­ã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>ãã¡ã€ã«ã®ã¢ããã­ãŒãã¯å®å
+šã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>ãã¡ã€ã«ãã¢ããã­ãŒããããŠããŸããã</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>php.iniã«äžæãã©ã«ããèš­å®ãããŠããªãããèš­å®ããããã©ã«ããå­åšããŸããã</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>äžæãã¡ã€ã«ããã£ã¹ã¯ã«æžãèŸŒãããšãã§ããŸããã</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHPæ¡åŒµã«ãã£ãŠã¢ããã­ãŒãã«å€±æããŸããã</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>{{ limit }}åä»¥äžã®èŠçŽ ãå«ãã§ãªããã°ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>èŠçŽ ã¯{{ limit }}åãŸã§ã§ãã</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>èŠçŽ ã¯ã¡ããã©{{ limit }}åã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ç¡å¹ãªã«ãŒãçªå·ã§ãã</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>æªå¯Ÿå¿ã®ã«ãŒãçš®é¡åã¯ç¡å¹ãªã«ãŒãçªå·ã§ãã</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>æå¹ãªåœééè¡åå®çªå·ïŒIBANïŒã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>æå¹ãªISBN-10ã³ãŒãã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>æå¹ãªISBN-13ã³ãŒãã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>æå¹ãªISBN-10ã³ãŒãåã¯ISBN-13ã³ãŒãã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>æå¹ãªISSNã³ãŒãã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>æå¹ãªè²šå¹£ã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>{{ compared_value }}ãšç­ãããªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>{{ compared_value }}ããå€§ãããªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>{{ compared_value }}ä»¥äžã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>{{ compared_value_type }}ãšããŠã®{{ compared_value }}ãšç­ãããªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>{{ compared_value }}æªæºã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>{{ compared_value }}ä»¥äžã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>{{ compared_value }}ãšç­ãããŠã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>{{ compared_value_type }}ãšããŠã®{{ compared_value }}ãšç­ãããŠã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>ç»åã®ã¢ã¹ãã¯ãæ¯ãå€§ããããŸã({{ ratio }})ã{{ max_ratio }}ãŸã§ã«ããŠãã ããã</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>ç»åã®ã¢ã¹ãã¯ãæ¯ãå°ããããŸã({{ ratio }})ã{{ min_ratio }}ä»¥äžã«ããŠãã ããã</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>ç»åãæ­£æ¹åœ¢ã«ãªã£ãŠããŸã({{ width }}x{{ height }}ãã¯ã»ã«)ãæ­£æ¹åœ¢ã®ç»åã¯èš±å¯ãããŠããŸããã</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>ç»åãæšªåãã«ãªã£ãŠããŸã({{ width }}x{{ height }}ãã¯ã»ã«)ãæšªåãã®ç»åã¯èš±å¯ãããŠããŸããã</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>ç»åãçžŠåãã«ãªã£ãŠããŸã({{ width }}x{{ height }}ãã¯ã»ã«)ãçžŠåãã®ç»åã¯èš±å¯ãããŠããŸããã</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>ç©ºã®ãã¡ã€ã«ã¯èš±å¯ãããŠããŸããã</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>ãã¹ããè§£æ±ºã§ããŸããã§ããã</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>ãã®å€ã¯äºæãããæå­ã³ãŒãïŒ{{ charset }}ïŒãšç°ãªããŸãã</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>æå¹ãªSWIFTã³ãŒãã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>ãšã©ãŒ</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>æå¹ãªUUIDã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>{{ compared_value }}ã®åæ°ã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>ãã®SWIFTã³ãŒãã¯IBANã³ãŒãïŒ{{ iban }}ïŒã«é¢é£ä»ããããŠããŸããã</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>JSONã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>èŠçŽ ã¯éè€ããŠã¯ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>æ­£ã®æ°ã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>æ­£ã®æ°ããŸãã¯0ã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>è² ã®æ°ã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>è² ã®æ°ããŸãã¯0ã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>æå¹ãªã¿ã€ã ãŸãŒã³ã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>ãã®ãã¹ã¯ãŒãã¯æŒæŽ©ããŠããçºäœ¿çšã§ããŸããã</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>{{ min }}ä»¥äž{{ max }}ä»¥äžã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>æå¹ãªãã¹ãåã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>èŠçŽ ã®æ°ã¯{{ compared_value }}ã®åæ°ã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>ä»¥äžã®å¶çŽã®ãã¡å°ãªããšã1ã€ãæºããå¿
+èŠããããŸã:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>ã³ã¬ã¯ã·ã§ã³ã®åèŠçŽ ã¯ãããããã®å¶çŽãæºããå¿
+èŠããããŸãã</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>ãã®å€ã¯æå¹ãªåœéèšŒåžè­å¥çªå·ïŒISINïŒã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>åŒã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>ãã®å€ã¯æå¹ãªCSSã«ã©ãŒã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>ãã®å€ã¯æå¹ãªCIDRè¡šèšã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>ããããã¹ã¯ã®å€ã¯ã{{ min }}ãã{{ max }}ã®éã«ããå¿
+èŠããããŸãã</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>ãã¡ã€ã«åãé·ãããŸãããã¡ã€ã«åã®é·ãã¯{{ filename_max_length }}æå­ä»¥äžã§ãªããã°ãªããŸããã</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>ãã¹ã¯ãŒãã®åŒ·åºŠãåŒ±ãããŸããããåŒ·ããã¹ã¯ãŒããäœ¿çšããŠãã ããã</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>ãã®å€ã¯çŸåšã®å¶éã¬ãã«ã§èš±å¯ãããŠããªãæå­ãå«ãã§ããŸãã</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>äžå¯èŠæå­ã¯äœ¿çšã§ããŸããã</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>ç°ãªãçš®é¡ã®æ°å­ãäœ¿ãããšã¯ã§ããŸããã</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>é ãããªãŒãã¬ã€æå­ã¯äœ¿çšã§ããŸããã</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>ãã¡ã€ã«ã®æ¡åŒµå­ãç¡å¹ã§ã({{ extension }})ãæå¹ãªæ¡åŒµå­ã¯{{ extensions }}ã§ãã</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>æ€åºãããæå­ã³ãŒãã¯ç¡å¹ã§ã({{ detected }})ãæå¹ãªæå­ã³ãŒãã¯{{ encodings }}ã§ãã</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>æå¹ãªMACã¢ãã¬ã¹ã§ã¯ãããŸããã</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>ãã®URLã¯ãããã¬ãã«ãã¡ã€ã³ããããŸããã</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.lb.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.lb.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.lb.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="lb" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>DÃ«se WÃ€ert sollt falsch sinn.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>DÃ«se WÃ€ert sollt wouer sinn.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>DÃ«se WÃ€ert sollt vum Typ {{ type }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>DÃ«se WÃ€ert sollt eidel sinn.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>DÃ«se WÃ€ert sollt enger vun de WielmÃ©iglechkeeten entspriechen.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Et muss mindestens {{ limit }} MÃ©iglechkeet ausgewielt ginn.|Et musse mindestens {{ limit }} MÃ©iglechkeeten ausgewielt ginn.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Et dierf hÃ©chstens {{ limit }} MÃ©iglechkeet ausgewielt ginn.|Et dierfen hÃ©chstens {{ limit }} MÃ©iglechkeeten ausgewielt ginn.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Een oder mÃ©i vun de WÃ€erter ass ongÃ«lteg.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>D'Feld gouf net erwaart.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>D'Feld feelt.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>DÃ«se WÃ€ert entsprÃ©cht kenger gÃ«lteger Datumsangab.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>DÃ«se WÃ€ert entsprÃ©cht kenger gÃ«lteger Datums- an ZÃ€itangab.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>DÃ«se WÃ€ert ass keng gÃ«lteg Email-Adress.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>De Fichier gouf net fonnt.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>De Fichier ass net liesbar.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>De Fichier ass ze grouss ({{ size }} {{ suffix }}). DÃ©i zougeloosse MaximalgrÃ©isst bedrÃ©it {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Den Typ vum Fichier ass ongÃ«lteg ({{ type }}). Erlaabten Type sinn {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>DÃ«se WÃ€ert soll mÃ©i kleng oder glÃ€ich {{ limit }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>DÃ«s Zeecheketten ass ze laang. Se sollt hÃ©chstens {{ limit }} Zeechen hunn.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>DÃ«se WÃ€ert sollt mÃ©i grouss oder glÃ€ich {{ limit }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>DÃ«s Zeecheketten ass ze kuerz. Se sollt mindestens {{ limit }} Zeechen hunn.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>DÃ«se WÃ€ert sollt net eidel sinn.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>DÃ«st sollt keen Null-WÃ€ert sinn.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>DÃ«st sollt keen Null-WÃ€ert sinn.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>DÃ«se WÃ€ert ass net gÃ«lteg.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>DÃ«se WÃ€ert entsprÃ©cht kenger gÃ«lteger ZÃ€itangab.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>DÃ«se WÃ€ert ass keng gÃ«lteg URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>BÃ©id WÃ€erter sollten identesch sinn.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>De fichier ass ze grouss. DÃ©i maximal GrÃ©isst dierf {{ limit }} {{ suffix }} net depassÃ©ieren.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>De Fichier ass ze grouss.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>De Fichier konnt net eropgeluede ginn.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>DÃ«se WÃ€ert sollt eng gÃ«lteg Zuel sinn.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>DÃ«se Fichier ass kee gÃ«ltegt Bild.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">DÃ«se WÃ€ert ass keng gÃŒlteg IP-Adress.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>DÃ«se WÃ€ert entsprÃ©cht kenger gÃ«lteger Sprooch.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>DÃ«se WÃ€ert entsprÃ©cht kengem gÃ«ltege Gebittsschema.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>DÃ«se WÃ€ert entsprÃ©cht kengem gÃ«ltege Land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>DÃ«se WÃ€ert gÃ«tt scho benotzt.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>D'GrÃ©isst vum Bild konnt net detektÃ©iert ginn.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>D'Breet vum Bild ass ze grouss ({{ width }}px). DÃ©i erlaabte maximal Breet ass {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>D'Breet vum Bild ass ze kleng ({{ width }}px). DÃ©i minimal Breet ass {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>D'HÃ©icht vum Bild ass ze grouss ({{ height }}px). DÃ©i erlaabte maximal HÃ©icht ass {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>D'HÃ©icht vum Bild ass ze kleng ({{ height }}px). DÃ©i minimal HÃ©icht ass {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>DÃ«se WÃ€ert sollt dem aktuelle Benotzerpasswuert entspriechen.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>DÃ«se WÃ€ert sollt exakt {{ limit }} Buschtaf hunn.|DÃ«se WÃ€ert sollt exakt {{ limit }} Buschtawen hunn.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>De Fichier gouf just deelweis eropgelueden.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Et gouf kee Fichier eropgelueden.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Et gouf keen temporÃ€ren Dossier an der php.ini konfigurÃ©iert oder den temporÃ€ren Dossier existÃ©iert net.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Den temporÃ€re Fichier kann net gespÃ€ichert ginn.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Eng PHP-Erweiderung huet den Upload verhÃ«nnert.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>DÃ«s Sammlung sollt {{ limit }} oder mÃ©i Elementer hunn.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>DÃ«s Sammlung sollt {{ limit }} oder manner Elementer hunn.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>DÃ«s Sammlung sollt exakt {{ limit }} Element hunn.|DÃ«s Sammlung sollt exakt {{ limit }} Elementer hunn.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>OngÃ«lteg Kaartennummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Net Ã«nnerstÃ«tzte Kaartentyp oder ongÃ«lteg Kaartennummer.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">DÃ«se WÃ€ert ass keng gÃŒlteg International Bankkontonummer (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>DÃ«se WÃ€ert ass keng gÃ«lteg ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>DÃ«se WÃ€ert ass keng gÃ«lteg ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>DÃ«se WÃ€ert ass weder eng gÃ«lteg ISBN-10 nach eng gÃ«lteg ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>DÃ«se WÃ€ert ass keng gÃ«lteg ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>DÃ«se WÃ€ert ass keng gÃ«lteg WÃ€hrung.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>DÃ«se WÃ€ert sollt {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>DÃ«se WÃ€ert sollt mÃ©i grouss wÃ©i {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>DÃ«se WÃ€ert sollt mÃ©i grouss wÃ©i oder glÃ€ich {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>DÃ«se WÃ€ert sollt identesch si mat {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>DÃ«se WÃ€ert sollt mÃ©i kleng wÃ©i {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>DÃ«se WÃ€ert sollt mÃ©i kleng wÃ©i oder glÃ€ich {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>DÃ«se WÃ€ert sollt net {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>DÃ«se WÃ€ert sollt net identesch si mat {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>D'SÃ€iteverhÃ€ltnis vum Bild ass ze grouss ({{ ratio }}). Den erlaabte MaximalwÃ€ert ass {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>D'SÃ€iteverhÃ€ltnis vum Bild ass ze kleng ({{ ratio }}). Den erwaarte MinimalwÃ€ert ass {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>D'Bild ass quadratesch ({{ width }}x{{ height }}px). Quadratesch Biller sinn net erlaabt.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>D'Bild ass am Queeschformat ({{ width }}x{{ height }}px). Biller am Queeschformat sinn net erlaabt.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>D'Bild ass am HÃ©ichformat ({{ width }}x{{ height }}px). Biller am HÃ©ichformat sinn net erlaabt.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>En eidele Fichier ass net erlaabt.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Den Host-Numm konnt net opgelÃ©ist ginn.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>DÃ«se WÃ€ert entsprÃ©cht net dem erwaarten Zeechesaz {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">DÃ«se WÃ€ert ass kee gÃŒltege Business Identifier Code (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Feeler</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">DÃ«se WÃ€ert ass keng gÃŒlteg UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>DÃ«se WÃ€ert sollt e puer vun {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>DÃ«se "Business Identifier Code" (BIC) ass net mat IBAN verbonnen {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>DÃ«se WÃ€ert sollt gÃ«lteg JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>DÃ«s Sammlung sollt just eenzegaarteg Elementer enthalen.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>DÃ«se WÃ€ert sollt positiv sinn.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>DÃ«se WÃ€ert sollt entweeder positiv oder null sinn.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>DÃ«se WÃ€ert sollt negativ sinn.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>DÃ«se WÃ€ert sollt entweeder negativ oder null sinn.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>DÃ«se WÃ€ert ass keng gÃ«lteg ZÃ€itzon.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>DÃ«st Passwuert war Deel vun engem Dateleck an dierf net benotzt ginn. Benotzt w.e.g. en anert Passwuert .</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>De WÃ€ert sollt tÃ«scht {{ min }} a(n) {{ max }} leien.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>DÃ«se WÃ€ert ass kee gÃ«ltegen Hostnumm.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>D'Unzuel un Elementer an dÃ«ser Sammlung sollt e multipel vu(n) {{ compared_value }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>DÃ«se WÃ€ert sollt op d'mannst ee vun dÃ«sen AschrÃ€nkungen erfÃ«llen:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>All Element aus dÃ«ser Sammlung sollt seng eegen AschrÃ€nkungen erfÃ«llen.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>DÃ«se WÃ€ert ass keng gÃ«lteg International WÃ€ertpabeiererkennnummer (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>DÃ«se WÃ€ert soll eng gÃ«lteg Expression sinn.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>DÃ«se WÃ€ert ass keng gÃ«lteg CSS Faarf.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>DÃ«se WÃ€ert ass keng gÃ«lteg CIDR Notatioun.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>De WÃ€ert vum Netmask soll tÃ«scht {{ min }} a {{ max }} sinn.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>De Dateinimm ass ze laang. Et sollt {{ filename_max_length }} Zeechen oder manner hunn.|De Dateinimm ass ze laang. Et sollt {{ filename_max_length }} Zeechen oder manner hunn.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>D'Staarf vum Passwuert ass ze schwaach. Benotzt w. e. g. e stÃ€erker Passwuert.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>DÃ«se WÃ€ert enthÃ€lt Zeechen, dÃ©i net erlaabt sinn no der aktueller BeschrÃ€nkungsstuf.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>D'Benotzen vu onsiichtbaren Zeechen ass net erlaabt.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>D'MÃ«sche vu Nummeren aus verschiddenen Skripten ass net erlaabt.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>D'Benotzen vu verstoppten Iwwerlagungszeechen ass net erlaabt.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>D'Extensioun vum Fichier ass net valabel ({{ extension }}). Valabel Extensioune sinn {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Den Encodage vun de SchrÃ«ftzeechen ass net valabel ({{ detected }}). Valabel Encodage sinn {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">DÃ«se WÃ€ert ass keng gÃŒlteg MAC-Adress.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">DÃ«sen URL feelt eng Top-Level-Domain.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.lt.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.lt.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.lt.xlf	(revision 8435)
@@ -0,0 +1,473 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="lt" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>ReikÅ¡mÄ turi bÅ«ti neigiama.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>ReikÅ¡mÄ turi bÅ«ti teigiama.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Å ios reikÅ¡mÄs tipas turi bÅ«ti {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Å i reikÅ¡mÄ turi bÅ«ti tuÅ¡Äia.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Neteisingas pasirinkimas.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Turite pasirinkti bent {{ limit }} variantÄ
+.|Turite pasirinkti bent {{ limit }} variantus.|Turite pasirinkti bent {{ limit }} variantÅ³.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Turite pasirinkti ne daugiau kaip {{ limit }} variantÄ
+.|Turite pasirinkti ne daugiau kaip {{ limit }} variantus.|Turite pasirinkti ne daugiau kaip {{ limit }} variantÅ³.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Viena ar daugiau Ä¯vestÅ³ reikÅ¡miÅ³ yra netinkamos.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Nebuvo tikimasi Å¡io laukelio.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>TrÅ«kstamas laukelis.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Å i reikÅ¡mÄ nÄra data.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Å i reikÅ¡mÄ nera data ir laikas.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Å i reikÅ¡mÄ nÄra tinkamas el. paÅ¡to adresas.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Byla nerasta.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Negalima nuskaityti bylos.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Byla yra per didelÄ ({{ size }} {{ suffix }}). Maksimalus dydis {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Netinkamas bylos tipas (mime type) ({{ type }}). Galimi bylÅ³ tipai {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>ReikÅ¡mÄ turi bÅ«ti {{ limit }} arba maÅŸiau.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Per didelis simboliÅ³ skaiÄius. Turi susidaryti iÅ¡ {{ limit }} arba maÅŸiau simboliÅ³.|Per didelis simboliÅ³ skaiÄius. Turi susidaryti iÅ¡ {{ limit }} arba maÅŸiau simboliÅ³.|Per didelis simboliÅ³ skaiÄius. Turi susidaryti iÅ¡ {{ limit }} arba maÅŸiau simboliÅ³.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>ReikÅ¡mÄ turi bÅ«ti {{ limit }} arba daugiau.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Per maÅŸas simboliÅ³ skaiÄius. Turi susidaryti iÅ¡ {{ limit }} arba daugiau simboliÅ³.|Per maÅŸas simboliÅ³ skaiÄius. Turi susidaryti iÅ¡ {{ limit }} arba daugiau simboliÅ³.|Per maÅŸas simboliÅ³ skaiÄius. Turi susidaryti iÅ¡ {{ limit }} arba daugiau simboliÅ³.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Å i reikÅ¡mÄ negali bÅ«ti tuÅ¡Äia.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Å i reikÅ¡mÄ negali bÅ«ti null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Å i reikÅ¡mÄ turi bÅ«ti null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Netinkama reikÅ¡mÄ.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Å i reikÅ¡mÄ nÄra laikas.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Å i reikÅ¡mÄ nÄra tinkamas interneto adresas.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Abi reikÅ¡mÄs turi bÅ«ti identiÅ¡kos.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Byla yra per didelÄ. Maksimalus dydis yra {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Byla per didelÄ.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Byla negali bÅ«ti Ä¯kelta.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Å i reikÅ¡mÄ turi bÅ«ti skaiÄius.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Byla nÄra paveikslÄlis.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Å i reikÅ¡mÄ nÄra tinkamas IP adresas.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Å i reikÅ¡mÄ nÄra tinkama kalba.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Å i reikÅ¡mÄ nÄra tinkama lokalÄ.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Å i reikÅ¡mÄ nÄra tinkama Å¡alis.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Å i reikÅ¡mÄ jau yra naudojama.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Nepavyko nustatyti nuotraukos dydÅŸio.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Nuotraukos plotis per didelis ({{ width }}px). Maksimalus leidÅŸiamas plotis yra {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Nuotraukos plotis per maÅŸas ({{ width }}px). Minimalus leidÅŸiamas plotis yra {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Nuotraukos aukÅ¡tis per didelis ({{ height }}px). Maksimalus leidÅŸiamas aukÅ¡tis yra {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Nuotraukos aukÅ¡tis per maÅŸas ({{ height }}px). Minimalus leidÅŸiamas aukÅ¡tis yra {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Å i reikÅ¡mÄ turi sutapti su dabartiniu naudotojo slaptaÅŸodÅŸiu.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Å i reikÅ¡mÄ turi turÄti lygiai {{ limit }} simbolÄ¯.|Å i reikÅ¡mÄ turi turÄti lygiai {{ limit }} simbolius.|Å i reikÅ¡mÄ turi turÄti lygiai {{ limit }} simboliÅ³.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Failas buvo tik dalinai Ä¯keltas.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nebuvo Ä¯kelta jokiÅ³ failÅ³.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>php.ini nesukonfigÅ«ruotas laikinas aplankas arba sukonfigÅ«ruotas aplankas neegzistuoja.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Nepavyko iÅ¡saugoti laikino failo.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP plÄtinys sutrukdÄ failo Ä¯kÄlimÄ
+ ir jis nepavyko.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>SÄ
+raÅ¡e turi bÅ«ti {{ limit }} arba daugiau Ä¯raÅ¡Å³.|SÄ
+raÅ¡e turi bÅ«ti {{ limit }} arba daugiau Ä¯raÅ¡Å³.|SÄ
+raÅ¡e turi bÅ«ti {{ limit }} arba daugiau Ä¯raÅ¡Å³.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>SÄ
+raÅ¡e turi bÅ«ti {{ limit }} arba maÅŸiau Ä¯raÅ¡Å³.|SÄ
+raÅ¡e turi bÅ«ti {{ limit }} arba maÅŸiau Ä¯raÅ¡Å³.|SÄ
+raÅ¡e turi bÅ«ti {{ limit }} arba maÅŸiau Ä¯raÅ¡Å³.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>SÄ
+raÅ¡e turi bÅ«ti lygiai {{ limit }} Ä¯raÅ¡as.|SÄ
+raÅ¡e turi bÅ«ti lygiai {{ limit }} Ä¯raÅ¡ai.|SÄ
+raÅ¡e turi bÅ«ti lygiai {{ limit }} Ä¯raÅ¡Å³.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Klaidingas kortelÄs numeris.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>KortelÄs tipas nepalaikomas arba klaidingas kortelÄs numeris.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Å i reikÅ¡mÄ nÄra tinkamas Tarptautinis Banko SÄ
+skaitos Numeris (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Å i reikÅ¡mÄ neatitinka ISBN-10 formato.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Å i reikÅ¡mÄ neatitinka ISBN-13 formato.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Å i reikÅ¡mÄ neatitinka nei ISBN-10, nei ISBN-13 formato.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Å i reiÅ¡mÄ neatitinka ISSN formato.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Netinkamas valiutos formatas.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Å i reikÅ¡mÄ turi bÅ«ti lygi {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Å i reikÅ¡mÄ turi bÅ«ti didesnÄ uÅŸ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Å i reikÅ¡mÄ turi bÅ«ti didesnÄ uÅŸ arba lygi {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Å i reikÅ¡mÄ turi bÅ«ti identiÅ¡ka {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Å i reikÅ¡mÄ turi bÅ«ti maÅŸesnÄ uÅŸ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Å i reikÅ¡mÄ turi bÅ«ti maÅŸesnÄ uÅŸ arba lygi {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Å i reikÅ¡mÄ neturi bÅ«ti lygi {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Å i reikÅ¡mÄ neturi bÅ«ti identiÅ¡ka {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Nuotraukos santykis yra per didelis ({{ ratio }}). DidÅŸiausias leistinas santykis yra {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Nuotraukos santykis yra per maÅŸas ({{ ratio }}). MaÅŸiausias leistinas santykis yra {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Nuotrauka yra kvadratinÄ ({{ width }}x{{ height }}px). KvadratinÄs nuotraukos nÄra leistinos.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Nuotrauka orientuota Ä¯ plotÄ¯ ({{ width }}x{{ height }}px). Nuotraukos orientuotos Ä¯ plotÄ¯ nÄra leistinos.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Nuotrauka orientuota Ä¯ aukÅ¡tÄ¯ ({{ width }}x{{ height }}px). Nuotraukos orientuotos Ä¯ aukÅ¡tÄ¯ nÄra leistinos.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Failas negali bÅ«ti tuÅ¡Äias.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Serveris nepasiekiamas.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Å i reikÅ¡mÄ neatitinka {{ charset }} koduotÄs.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Å i reikÅ¡mÄ nÄra tinkamas Verslo Identifikavimo Kodas (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Klaida</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Å i reikÅ¡mÄ nÄra tinkamas UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Å i reikÅ¡mÄ turi bÅ«ti skaiÄiaus {{ compared_value }} kartotinis.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Å is bendrovÄs identifikavimo kodas (BIC) nesusijÄs su IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Å i reikÅ¡mÄ turi bÅ«ti tinkamo JSON formato.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>SÄ
+raÅ¡e turi bÅ«ti tik unikalios reikÅ¡mÄs.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>ReikÅ¡mÄ turi bÅ«ti teigiama.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>ReikÅ¡mÄ turi bÅ«ti teigiama arba lygi nuliui.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>ReikÅ¡mÄ turi bÅ«ti neigiama.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>ReikÅ¡mÄ turi bÅ«ti neigiama arba lygi nuliui.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>ReikÅ¡mÄ nÄra tinkama laiko juosta.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>SlaptaÅŸodis yra nutekÄjÄs duomenÅ³ saugumo paÅŸeidime, jo naudoti negalima. PraÅ¡ome naudoti kitÄ
+ slaptaÅŸodÄ¯.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Å i reikÅ¡mÄ turi bÅ«ti tarp {{ min }} ir {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Å i reikÅ¡mÄ nÄra tinkamas svetainÄs adresas.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Å io sÄ
+raÅ¡o elementÅ³ skaiÄius turÄtÅ³ bÅ«ti skaiÄiaus {{ compared_value }} kartotinis.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Å i reikÅ¡mÄ turÄtÅ³ atitikti bent vienÄ
+ iÅ¡ Å¡iÅ³ nurodymÅ³:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Kiekvienas Å¡io sÄ
+raÅ¡o elementas turi atitikti savo nurodymÅ³ rinkinÄ¯.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Å i reiÅ¡mÄ neatitinka tarptautinio vertybiniÅ³ popieriÅ³ identifikavimo numerio formato (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Å i vertÄ turÄtÅ³ bÅ«ti teisinga iÅ¡raiÅ¡ka.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Å i reikÅ¡mÄ nÄra tinkama CSS spalva.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Å i vertÄ nÄra tinkamas CIDR ÅŸymÄjimas.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Tinklo kaukÄs reikÅ¡mÄ turi bÅ«ti nuo {{ min }} iki {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Failo pavadinimas per ilgas. Jame turÄtÅ³ bÅ«ti {{ filename_max_length }} simbolis arba maÅŸiau.|Failo pavadinimas per ilgas. Jame turÄtÅ³ bÅ«ti {{ filename_max_length }} simboliÅ³ arba maÅŸiau.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>SlaptaÅŸodis per silpnas. Naudokite stipresnÄ¯ slaptaÅŸodÄ¯.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Å ioje reikÅ¡mÄje yra simboliÅ³, kuriÅ³ neleidÅŸia dabartinis apribojimo lygis.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Naudoti nematomus simbolius draudÅŸiama.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>DraudÅŸiama maiÅ¡yti skaiÄius iÅ¡ skirtingÅ³ scenarijÅ³.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>DraudÅŸiama naudoti paslÄptus perdangos simbolius.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Failo plÄtinys netinkamas ({{ extension }}). LeidÅŸiami plÄtiniai yra {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Aptikta simboliÅ³ koduotÄ yra netinkama ({{ detected }}). LeidÅŸiamos koduotÄs yra {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Å i reikÅ¡mÄ nÄra tinkamas MAC adresas.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Å iam URL trÅ«ksta aukÅ¡Äiausio lygio domeno.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target>Per maÅŸas ÅŸodÅŸiÅ³ skaiÄius. Turi susidaryti bent iÅ¡ 1 ÅŸodÅŸio.|Per maÅŸas ÅŸodÅŸiÅ³ skaiÄius. Turi susidaryti iÅ¡ {{ min }} arba daugiau ÅŸodÅŸiÅ³.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target>Per didelis ÅŸodÅŸiÅ³ skaiÄius. Turi susidaryti iÅ¡ 1 ÅŸodÅŸio.|Per didelis ÅŸodÅŸiÅ³ skaiÄius. Turi susidaryti iÅ¡ {{ max }} arba maÅŸiau ÅŸodÅŸiÅ³.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.lv.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.lv.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.lv.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="lv" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t nepatiesai.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t patiesai.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Å Ä«s vÄrtÄ«bas tipam ir jÄbÅ«t {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t tukÅ¡ai.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>VÄrtÄ«ba, kuru jÅ«s izvÄlÄjÄties, nav derÄ«ga izvÄle.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Jums nav jÄveic izvÄle.|Jums ir jÄveic vismaz {{ limit }} izvÄle.|Jums ir jÄveic vismaz {{ limit }} izvÄles.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Jums nav jÄveic izvÄle.|Jums ir jÄveic ne vairÄk kÄ {{ limit }} izvÄle.|Jums ir jÄveic ne vairÄk kÄ {{ limit }} izvÄles.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Viena vai vairÄkas no dotajÄm vÄrtÄ«bÄm ir nederÄ«gas.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Å is lauks netika gaidÄ«ts.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Å is lauks ir pazudis.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Å Ä« vÄrtÄ«ba ir nederÄ«gs datums.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Å Ä« vÄrtÄ«ba ir nederÄ«gs datums un laiks</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Å Ä« vÄrtÄ«ba ir nederÄ«ga e-pasta adrese.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Fails nav atrasts.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Fails nav lasÄms.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fails ir pÄrÄk liels ({{ size }} {{ suffix }}). AtÄŒautais maksimÄlais izmÄrs ir {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Faila mime tips nav derÄ«gs ({{ type }}). AtÄŒautie mime tipi ir {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t ne vairÄk kÄ {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Å Ä«s vÄrtÄ«bas garums ir 0 rakstzÄ«mes.|Å Ä« vÄrtÄ«ba ir pÄrÄk gara. Tai bÅ«tu jÄbÅ«t ne vairÄk kÄ {{ limit }} rakstzÄ«mi garai.|Å Ä« vÄrtÄ«ba ir pÄrÄk gara. Tai bÅ«tu jÄbÅ«t ne vairÄk kÄ {{ limit }} rakstzÄ«mes garai.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t ne mazÄk kÄ {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Å Ä«s vÄrtÄ«bas garums ir 0 rakstzÄ«mes.|Å Ä« vÄrtÄ«ba ir pÄrÄk Ä«sa. Tai bÅ«tu jÄbÅ«t ne mazÄk kÄ {{ limit }} rakstzÄ«mi garai.|Å Ä« vÄrtÄ«ba ir pÄrÄk Ä«sa. Tai bÅ«tu jÄbÅ«t ne mazÄk kÄ {{ limit }} rakstzÄ«mes garai.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Å ai vÄrtÄ«bai nav jÄbÅ«t tukÅ¡ai.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Å ai vÄrtÄ«bai nav jÄbÅ«t null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Å Ä« vÄrtÄ«ba ir nederÄ«ga.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Å Ä« vÄrtÄ«ba ir nederÄ«gs laiks.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Å Ä« vÄrtÄ«ba ir nederÄ«gs URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>AbÄm vÄrtÄ«bÄm jÄbÅ«t vienÄdÄm.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fails ir pÄrÄk liels. AtÄŒautais maksimÄlais izmÄrs ir {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Fails ir pÄrÄk liels.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Failu nevarÄja augÅ¡upielÄdÄt.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t derÄ«gam skaitlim.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Å is fails nav derÄ«gs attÄls.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«ga IP adrese.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«ga valoda.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«ga lokalizÄcija.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«ga valsts.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Å Ä« vÄrtÄ«ba jau tiek izmantota.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Nevar noteikt attÄla izmÄru.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>AttÄla platums ir pÄrÄk liels ({{ width }}px). AtÄŒautais maksimÄlais platums ir {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>AttÄla platums ir pÄrÄk mazs ({{ width }}px). MinimÄlais sagaidÄmais platums ir {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>AttÄla augstums ir pÄrÄk liels ({{ height }}px). AtÄŒautais maksimÄlais augstums ir {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>AttÄla augstums ir pÄrÄk mazs ({{ height }}px). MinimÄlais sagaidÄmais augstums ir {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t lietotÄja paÅ¡reizÄjai parolei.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Å Ä«s vÄrtÄ«bas garums ir 0 rakstzÄ«mes.|Å ai vÄrtÄ«bai ir jÄbÅ«t tieÅ¡i {{ limit }} rakstzÄ«mi garai.|Å ai vÄrtÄ«bai ir jÄbÅ«t tieÅ¡i {{ limit }} rakstzÄ«mes garai.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Fails bija tikai daÄŒÄji augÅ¡upielÄdÄts.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Fails netika augÅ¡upielÄdÄts.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>php.ini nav konfigurÄta pagaidu mape vai arÄ« konfigurÄtÄ mape neeksistÄ.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Nevar ierakstÄ«t pagaidu failu diskÄ.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP paplaÅ¡inÄjums izraisÄ«ja augÅ¡upielÄdes neizdoÅ¡anos.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Å is krÄjums satur 0 elementu.|Å im krÄjumam jÄsatur vismaz {{ limit }} elements.|Å im krÄjumam jÄsatur vismaz {{ limit }} elementi.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Å is krÄjums satur 0 elementu.|Å im krÄjumam jÄsatur ne vairÄk kÄ {{ limit }} elements.|Å im krÄjumam jÄsatur ne vairÄk kÄ {{ limit }} elementi.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Å is krÄjums satur 0 elementu.|Å im krÄjumam jÄsatur tieÅ¡i {{ limit }} elements.|Å im krÄjumam jÄsatur tieÅ¡i {{ limit }} elementi.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>NederÄ«gs kartes numurs.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>NeatbalstÄ«ts kartes tips vai nederÄ«gs kartes numurs.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«gs Starptautiskais Bankas Konta Numurs (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«gs ISBN-10 numurs.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«gs ISBN-13 numurs.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Å Ä« vÄrtÄ«ba neatbilst ne derÄ«gam ISBN-10 numuram, ne derÄ«gm ISBN-13 numuram.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«gs ISSN numurs.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«ga valÅ«ta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t vienÄdai ar {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t lielÄkai par {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t lielÄkai vai vienÄdai ar {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t identiskai ar {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t mazÄkai par {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t mazÄkai vai vienÄdai ar {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Å ai vÄrtÄ«bai ir jÄbÅ«t vienÄdai ar {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Å ai vÄrtÄ«bai nav jÄbÅ«t identiskai ar {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>AttÄla attiecÄ«ba ir pÄrÄk liela ({{ ratio }}). AtÄŒautÄ maksimÄlÄ attiecÄ«ba ir {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>AttÄla attiecÄ«ba ir pÄrÄk maza ({{ ratio }}). MinimÄlÄ sagaidÄmÄ attiecÄ«ba ir {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Å is attÄls ir kvadrÄts ({{ width }}x{{ height }}px). KvadrÄtveida attÄli nav atÄŒauti.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>AttÄls ir orientÄts kÄ ainava ({{ width }}x{{ height }}px). AttÄli, kas ir orientÄti kÄ ainavas, nav atÄŒauti.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>AttÄls ir orientÄts kÄ portrets ({{ width }}x{{ height }}px). AttÄli, kas ir orientÄti kÄ portreti, nav atÄŒauti.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>TukÅ¡s fails nav atÄŒauts.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Resursdatora nosaukumu nevar atrisinÄt.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Å Ä« vÄrtÄ«ba neatbilst sagaidÄmajai rakstzÄ«mju kopai {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«gs UzÅÄmuma IdentifikÄcijas Kods (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>KÄŒÅ«da</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«gs UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Å ai vÄrtÄ«bai jÄbÅ«t vairÄkas reizes atkÄrtotai {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Å is Biznesa IdentifikÄcijas Kods (BIC) neatbilst {{ iban }} konta numuram (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Å ai vÄrtÄ«bai jÄbÅ«t derÄ«gam JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Å ai kolekcijai jÄsatur tikai unikÄli elementi.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Å ai vÄrtÄ«bai jÄbÅ«t pozitÄ«vai.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Å ai vÄrtÄ«bai jÄbÅ«t pozitÄ«vai vai vienÄdai ar nulli.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Å ai vÄrtÄ«bai jÄbÅ«t negatÄ«vai.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Å ai vÄrtÄ«bai jÄbÅ«t negatÄ«vai vai vienÄdai ar nulli.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«ga laika zona.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Å Ä« parole tika publicÄta datu noplÅ«dÄ, to nedrÄ«kst izmantot. LÅ«dzu, izvÄlieties citu paroli.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Å ai vÄrtÄ«bai jÄbÅ«t starp {{ min }} un {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«gs tÄ«mekÄŒa servera nosaukums.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Elementu skaitam Å¡ajÄ kolekcijÄ jÄbÅ«t {{ compared_value }} reizinÄjumam.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Å ai vÄrtÄ«bai jÄiekÄŒaujas vismaz vienÄ no sekojoÅ¡iem ierobeÅŸojumiem:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Å Ä«s kolekcijas katram elementam jÄiekÄŒaujas savÄ ierobeÅŸojumu kopÄ.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«gs starptautiskais vÄrtspapÄ«ru identifikÄcijas numurs (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Å ai vÄrtÄ«bai jÄbÅ«t korektai izteiksmei.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Å Ä« vÄrtÄ«ba nav korekta CSS krÄsa.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Å Ä« vÄrtÄ«ba nav korekts CIDR apzÄ«mÄjums.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>TÄ«kla maskas (netmask) vÄrtÄ«bai jÄbÅ«t starp {{ min }} un {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Faila nosaukums ir pÄrÄk garÅ¡. Tas var bÅ«t {{ filename_max_length }} rakstzÄ«mi garÅ¡ vai Ä«sÄks.|Faila nosaukums ir pÄrÄk garÅ¡. Tas var bÅ«t {{ filename_max_length }} rakstzÄ«mes garÅ¡ vai Ä«sÄks.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Paroles stiprums ir pÄrÄk zems. LÅ«dzu, izmantojiet spÄcÄ«gÄku paroli.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Å Ä« vÄrtÄ«ba satur rakstzÄ«mes, kuras nav atÄŒautas paÅ¡reizÄjÄ ierobeÅŸojuma lÄ«menÄ«.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Neredzamu rakstzÄ«mju izmantoÅ¡ana nav atÄŒauta.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Nav atÄŒauts sajaukt numurus no daÅŸÄdiem skriptiem.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>SlÄptu pÄrklÄjuma rakstzÄ«mju izmantoÅ¡ana nav atÄŒauta.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Faila paplaÅ¡inÄjums nav derÄ«gs ({{ extension }}). AtÄŒautie paplaÅ¡inÄjumi ir {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Noteiktais rakstzÄ«mju kodÄjums nav derÄ«gs ({{ detected }}). AtÄŒautie kodÄjumi ir {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Å Ä« vÄrtÄ«ba nav derÄ«ga MAC adrese.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Å im URL trÅ«kst augÅ¡ÄjÄ lÄ«meÅa domÄna.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.mk.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.mk.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.mk.xlf	(revision 8435)
@@ -0,0 +1,456 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="mk" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ Ð»Ð°Ð¶ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ Ð²ÐžÑÑÐžÐœÐžÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ ÐŸÐŽ ÑÐžÐ¿ÐŸÑ {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ Ð¿ÑÐ°Ð·ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑÐ° ÑÑÐŸ ÑÐ° ÐŸÐŽÐ±ÑÐ°Ð²ÑÐµ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÐžÐ·Ð±ÐŸÑ.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>ÐÐŸÑÐ° ÐŽÐ° ÐŸÐŽÐ±ÐµÑÐµÑÐµ ÐœÐ°ÑÐŒÐ°Ð»ÐºÑ {{ limit }} ÐžÐ·Ð±ÐŸÑ.|ÐÐŸÑÐ° ÐŽÐ° ÐŸÐŽÐ±ÐµÑÐµÑÐµ ÐœÐ°ÑÐŒÐ°Ð»ÐºÑ {{ limit }} ÐžÐ·Ð±ÑÐŸÐž.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>ÐÐŸÐ¶Ðµ ÐŽÐ° ÐŸÐŽÐ±ÐµÑÐµÑÐµ ÐœÐ°ÑÐŒÐœÐŸÐ³Ñ {{ limit }} ÐžÐ·Ð±ÐŸÑ.|ÐÐŸÑÐ° ÐŽÐ° ÐŸÐŽÐ±ÐµÑÐµÑÐµ ÐœÐ°ÑÐŒÐœÐŸÐ³Ñ {{ limit }} ÐžÐ·Ð±ÐŸÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>ÐÐŽÐœÐ° ÐžÐ»Ðž Ð¿ÐŸÐ²ÐµÑÐµ ÐŸÐŽ ÐŽÐ°ÐŽÐµÐœÐžÑÐµ Ð²ÑÐµÐŽÐœÐŸÑÑÐž ÐœÐµ ÑÐµ Ð²Ð°Ð»ÐžÐŽÐœÐž.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>ÐÐ²Ð° Ð¿ÐŸÐ»Ðµ ÐœÐµ Ð±ÐµÑÐµ ÐŸÑÐµÐºÑÐ²Ð°ÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>ÐÐ²Ð° Ð¿ÐŸÐ»Ðµ ÐœÐµÐŽÐŸÑÑÐžÐ³Ð°.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÐŽÐ°ÑÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÐŽÐ°ÑÑÐŒ Ðž Ð²ÑÐµÐŒÐµ.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° Ð°ÐŽÑÐµÑÐ° Ð·Ð° Ðµ-Ð¿ÐŸÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ°ÑÐ° ÐœÐµ Ðµ ÐœÐ°ÑÐŽÐµÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ°ÑÐ° ÐœÐµ ÐŒÐŸÐ¶Ðµ ÐŽÐ° Ð±ÐžÐŽÐµ Ð¿ÑÐŸÑÐžÑÐ°ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ°ÑÐ° Ðµ Ð¿ÑÐµÐŒÐœÐŸÐ³Ñ Ð³ÐŸÐ»ÐµÐŒÐ° ({{ size }} {{ suffix }}). ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÐœÐ°ÑÐ° ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐ° Ð³ÐŸÐ»ÐµÐŒÐžÐœÐ° Ðµ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>ÐÐžÐŒÐµ ÑÐžÐ¿ÐŸÑ ÐœÐ° ÐŽÐ°ÑÐŸÑÐµÐºÐ°ÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ({{ type }}). ÐÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐžÑÐµ ÐŒÐžÐŒÐµ ÑÐžÐ¿ÐŸÐ²Ðž ÑÐµ {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ {{ limit }} ÐžÐ»Ðž Ð¿ÐŸÐŒÐ°Ð»ÐºÑ.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ Ðµ Ð¿ÑÐµÐŽÐŸÐ»Ð³Ð°. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÑÐŸÐŽÑÐ¶Ðž {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑ ÐžÐ»Ðž Ð¿ÐŸÐŒÐ°Ð»ÐºÑ.|ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ Ðµ Ð¿ÑÐµÐŽÐŸÐ»Ð³Ð°. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÑÐŸÐŽÑÐ¶Ðž {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑÐž ÐžÐ»Ðž Ð¿ÐŸÐŒÐ°Ð»ÐºÑ.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ðµ {{ limit }} ÐžÐ»Ðž Ð¿ÐŸÐ²ÐµÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ Ðµ Ð¿ÑÐµÐºÑÐ°ÑÐºÐ°. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÑÐŸÐŽÑÐ¶Ðž {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑ ÐžÐ»Ðž Ð¿ÐŸÐ²ÐµÑÐµ.|ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ Ðµ Ð¿ÑÐµÐºÑÐ°ÑÐºÐ°. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÑÐŸÐŽÑÐ¶Ðž {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑÐž ÐžÐ»Ðž Ð¿ÐŸÐ²ÐµÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>ÐÐ²Ð° Ð¿ÐŸÐ»Ðµ ÐœÐµ ÐŒÐŸÐ¶Ðµ ÐŽÐ° Ð±ÐžÐŽÐµ Ð¿ÑÐ°Ð·ÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ ÐŒÐŸÐ¶Ðµ ÐŽÐ° Ð±ÐžÐŽÐµ ÐœÐžÑÑÐŸ (null).</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ðµ ÐœÐžÑÑÐŸ (null).</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐŸ Ð²ÑÐµÐŒÐµ.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>ÐÐ²ÐµÑÐµ Ð²ÑÐµÐŽÐœÐŸÑÑÐž ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐµ ÐµÐŽÐœÐ°ÐºÐ²Ðž.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ°ÑÐ° Ðµ Ð¿ÑÐµÐŒÐœÐŸÐ³Ñ Ð³ÐŸÐ»ÐµÐŒÐ°. ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÐœÐ°ÑÐ° ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐ° Ð³ÐŸÐ»ÐµÐŒÐžÐœÐ° Ðµ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ°ÑÐ° Ðµ Ð¿ÑÐµÐŒÐœÐŸÐ³Ñ Ð³ÐŸÐ»ÐµÐŒÐ°.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ°ÑÐ° ÐœÐµ ÐŒÐŸÐ¶Ðµ ÐŽÐ° Ð±ÐžÐŽÐµ Ð¿ÐŸÐŽÐžÐ³ÐœÐ°ÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ Ð±ÑÐŸÑ.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>ÐÐ²Ð°Ð° ÐŽÐ°ÑÐŸÑÐµÐºÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° ÑÐ»ÐžÐºÐ°.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° IP Ð°ÐŽÑÐµÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÑÐ°Ð·ÐžÐº.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° Ð»ÐŸÐºÐ°Ð»ÐžÐ·Ð°ÑÐžÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° Ð·ÐµÐŒÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ Ð²ÐµÑÐµ ÑÐµ ÐºÐŸÑÐžÑÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>ÐÐŸÐ»ÐµÐŒÐžÐœÐ°ÑÐ° ÐœÐ° ÑÐ»ÐžÐºÐ°ÑÐ° ÐœÐµ ÐŒÐŸÐ¶Ðµ ÐŽÐ° ÑÐµ ÐŽÐµÑÐµÐºÑÐžÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ÐšÐžÑÐžÐœÐ°ÑÐ° ÐœÐ° ÑÐ»ÐžÐºÐ°ÑÐ° Ðµ Ð¿ÑÐµÐ³ÐŸÐ»ÐµÐŒÐ° ({{ width }}px). ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÐœÐ°ÑÐ° ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐ° ÑÐžÑÐžÐœÐ° Ðµ {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ÐšÐžÑÐžÐœÐ°ÑÐ° ÐœÐ° ÑÐ»ÐžÐºÐ°ÑÐ° Ðµ Ð¿ÑÐµÐŒÐ°Ð»Ð° ({{ width }}px). ÐÐžÐœÐžÐŒÐ°Ð»ÐœÐ°ÑÐ° ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐ° ÑÐžÑÐžÐœÐ° Ðµ {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ÐÐžÑÐžÐœÐ°ÑÐ° ÐœÐ° ÑÐ»ÐžÐºÐ°ÑÐ° Ðµ Ð¿ÑÐµÐ³ÐŸÐ»ÐµÐŒÐ° ({{ height }}px). ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÐœÐ°ÑÐ° ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐ° Ð²ÐžÑÐžÐœÐ° Ðµ {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ÐÐžÑÐžÐœÐ°ÑÐ° ÐœÐ° ÑÐ»ÐžÐºÐ°ÑÐ° Ðµ Ð¿ÑÐµÐŒÐ°Ð»Ð° ({{ height }}px). ÐÐžÐœÐžÐŒÐ°Ð»ÐœÐ°ÑÐ° ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐ° Ð²ÐžÑÐžÐœÐ° Ðµ {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ ÑÐµÐ³Ð°ÑÐœÐ°ÑÐ° Ð»ÐŸÐ·ÐžÐœÐºÐ° ÐœÐ° ÐºÐŸÑÐžÑÐœÐžÐºÐŸÑ.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° ÑÐŸÑÐœÐŸ {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑ.|ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° ÑÐŸÑÐœÐŸ {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ°ÑÐ° Ðµ ÑÐ°ÐŒÐŸ ÐŽÐµÐ»ÑÐŒÐœÐŸ Ð¿ÐŸÐŽÐžÐ³ÐœÐ°ÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ°ÑÐ° ÐœÐµ Ðµ Ð¿ÐŸÐŽÐžÐ³ÐœÐ°ÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">ÐÐµ Ðµ ÐºÐŸÐœÑÐžÐ³ÑÑÐžÑÐ°ÐœÐ° Ð¿ÑÐžÐ²ÑÐµÐŒÐµÐœÐ° Ð¿Ð°Ð¿ÐºÐ° Ð²ÐŸ php.ini, ÐžÐ»Ðž ÐºÐŸÐœÑÐžÐ³ÑÑÐžÑÐ°ÐœÐ°ÑÐ° Ð¿Ð°Ð¿ÐºÐ° ÐœÐµ Ð¿ÐŸÑÑÐŸÐž.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>ÐÐµ ÐŒÐŸÐ¶Ðµ ÐŽÐ° ÑÐµ ÐœÐ°Ð¿ÐžÑÐµ Ð¿ÑÐžÐ²ÑÐµÐŒÐµÐœÐ° ÐŽÐ°ÑÐŸÑÐµÐºÐ° ÐœÐ° ÐŽÐžÑÐºÐŸÑ.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP ÐµÐºÑÑÐµÐœÐ·ÐžÑÐ°ÑÐ° Ð¿ÑÐµÐŽÐžÐ·Ð²ÐžÐºÐ° Ð¿ÐŸÐŽÐžÐ³ÐœÑÐ²Ð°ÑÐµÑÐŸ ÐŽÐ° Ð±ÐžÐŽÐµ ÐœÐµÑÑÐ¿ÐµÑÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>ÐÐ²Ð°Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐŸÐŽÑÐ¶Ðž {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑ ÐžÐ»Ðž Ð¿ÐŸÐ²ÐµÑÐµ.|ÐÐ²Ð°Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐŸÐŽÑÐ¶Ðž {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑÐž ÐžÐ»Ðž Ð¿ÐŸÐ²ÐµÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>ÐÐ²Ð°Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐŸÐŽÑÐ¶Ðž {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑ ÐžÐ»Ðž Ð¿ÐŸÐŒÐ°Ð»ÐºÑ.|ÐÐ²Ð°Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐŸÐŽÑÐ¶Ðž {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑÐž ÐžÐ»Ðž Ð¿ÐŸÐŒÐ°Ð»ÐºÑ.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>ÐÐ²Ð°Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐŸÐŽÑÐ¶Ðž ÑÐŸÑÐœÐŸ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑ.|ÐÐ²Ð°Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐŸÐŽÑÐ¶Ðž ÑÐŸÑÐœÐŸ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ÐÑÐŸÑÐŸÑ ÐœÐ° ÐºÐ°ÑÑÐžÑÐºÐ°ÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>ÐÐµÐ¿ÐŸÐŽÐŽÑÐ¶Ð°Ðœ ÑÐžÐ¿ ÐœÐ° ÐºÐ°ÑÑÐžÑÐºÐ° ÐžÐ»Ðž Ð±ÑÐŸÑÐŸÑ ÐœÐ° ÐºÐ°ÑÑÐžÑÐºÐ°ÑÐ° ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÐÐµÑÑÐœÐ°ÑÐŸÐŽÐµÐœ ÐÐ°ÐœÐºÐ°ÑÑÐºÐž Ð¡ÐŒÐµÑÐºÐ° ÐÑÐŸÑ (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ ÐœÐžÑÑ Ð²Ð°Ð»ÐžÐŽÐµÐœ ISBN-10 ÐœÐžÑÑ Ð²Ð°Ð»ÐžÐŽÐµÐœ ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° Ð²Ð°Ð»ÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ ÐµÐŽÐœÐ°ÐºÐ²Ð° ÐœÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ðµ Ð¿ÐŸÐ³ÐŸÐ»ÐµÐŒÐ° ÐŸÐŽ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ðµ Ð¿ÐŸÐ³ÐŸÐ»ÐµÐŒÐ° ÐžÐ»Ðž ÐµÐŽÐœÐ°ÐºÐ²Ð° ÐœÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ðµ ÐžÐŽÐµÐœÑÐžÑÐœÐ° ÐœÐ° {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ðµ Ð¿ÐŸÐŒÐ°Ð»Ð° ÐŸÐŽ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ðµ Ð¿ÐŸÐŒÐ°Ð»Ð° ÐžÐ»Ðž ÐµÐŽÐœÐ°ÐºÐ²Ð° ÐœÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° ÐœÐµ Ð±ÐžÐŽÐµ ÐµÐŽÐœÐ°ÐºÐ²Ð° ÐœÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° ÐœÐµ Ð±ÐžÐŽÐµ ÐžÐŽÐµÐœÑÐžÑÐœÐ° ÑÐŸ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Ð¡ÐŸÐŸÐŽÐœÐŸÑÐŸÑ ÐœÐ° ÑÐ»ÐžÐºÐ°ÑÐ° Ðµ Ð¿ÑÐµÐ³ÐŸÐ»ÐµÐŒ ({{ ratio }}).ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÐœÐžÐŸÑ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœ ÑÐŸÐŸÐŽÐœÐŸÑ Ðµ {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Ð¡ÐŸÐŸÐŽÐœÐŸÑÐŸÑ ÐœÐ° ÑÐ»ÐžÐºÐ°ÑÐ° Ðµ Ð¿ÑÐµÐŒÐ°Ð» ({{ ratio }}). ÐÐžÐœÐžÐŒÐ°Ð»ÐœÐžÐŸÑ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœ ÑÐŸÐŸÐŽÐœÐŸÑ Ðµ {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Ð¡Ð»ÐžÐºÐ°ÑÐ° Ðµ ÐºÐ²Ð°ÐŽÑÐ°ÑÐœÐ° ({{ width }}x{{ height }}px). ÐÐ²Ð°ÐŽÑÐ°ÑÐœÐž ÑÐ»ÐžÐºÐž ÐœÐµ ÑÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐž.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Ð¡Ð»ÐžÐºÐ°ÑÐ° Ðµ ÐŸÑÐžÐµÐœÑÐžÑÐ°ÐœÐ° ÐºÐŸÐœ Ð¿ÐµÑÐ·Ð°Ð¶ ({{ width }}x{{ height }}px). Ð¡Ð»ÐžÐºÐžÑÐµ ÐŸÑÐžÐµÐœÑÐžÑÐ°ÐœÐž ÐºÐŸÐœ Ð¿ÐµÑÐ·Ð°Ð¶ ÐœÐµ ÑÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐž.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Ð¡Ð»ÐžÐºÐ°ÑÐ° Ðµ ÐŸÑÐžÐµÐœÑÐžÑÐ°ÐœÐ° ÐºÐŸÐœ Ð¿ÐŸÑÑÑÐµÑ ({{ width }}x{{ height }}px). Ð¡Ð»ÐžÐºÐžÑÐµ ÐŸÑÐžÐµÐœÑÐžÑÐ°ÐœÐž ÐºÐŸÐœ Ð¿ÐŸÑÑÑÐµÑ ÐœÐµ ÑÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐž.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>ÐÑÐ°Ð·ÐœÐ° ÐŽÐ°ÑÐŸÑÐµÐºÐ° ÐœÐµ Ðµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Ð¥ÐŸÑÑÐŸÑ Ðµ ÐœÐµÐŽÐŸÑÑÐ°Ð¿ÐµÐœ.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ ÑÐµ ÑÐŸÐ²Ð¿Ð°ÑÐ° ÑÐŸ ÐŸÑÐµÐºÑÐ²Ð°ÐœÐžÐŸÑ {{ charset }} ÑÐµÑ ÐœÐ° ÐºÐ°ÑÐ°ÐºÑÐµÑÐž (charset).</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÐÐžÐ·ÐœÐžÑ ÐÐŽÐµÐœÑÐžÑÐžÐºÐ°ÑÐžÑÐºÐž ÐÐŸÐŽ (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>ÐÑÐµÑÐºÐ°</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐµÐœ UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ Ð¿ÐŸÐ²ÐµÑÐµÐºÑÐ°ÑÐœÐ° ÐŸÐŽ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>ÐÐ²ÐŸÑ Ð±ÐžÐ·ÐœÐžÑ ÐžÐŽÐµÐœÑÐžÑÐžÐºÐ°ÑÐžÑÐºÐž ÐºÐŸÐŽ (BIC) ÐœÐµ Ðµ Ð¿ÐŸÐ²ÑÐ·Ð°Ðœ ÑÐŸ IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ Ð²Ð°Ð»ÐžÐŽÐµÐœ JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>ÐÐ²Ð°Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐŸÐŽÑÐ¶Ðž ÑÐ°ÐŒÐŸ ÑÐœÐžÐºÐ°ÑÐœÐž ÐµÐ»ÐµÐŒÐµÐœÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ Ð¿ÐŸÐ·ÐžÑÐžÐ²ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ ÐžÐ»Ðž Ð¿ÐŸÐ·ÐžÑÐžÐ²ÐœÐ° ÐžÐ»Ðž ÐœÑÐ»Ð°.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ ÐœÐµÐ³Ð°ÑÐžÐ²ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ ÐžÐ»Ðž ÐœÐµÐ³Ð°ÑÐžÐ²ÐœÐ° ÐžÐ»Ðž ÐœÑÐ»Ð°.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° Ð²ÑÐµÐŒÐµÐœÑÐºÐ° Ð·ÐŸÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>ÐÐ²Ð°Ð° Ð»ÐŸÐ·ÐžÐœÐºÐ° Ðµ ÐºÐŸÐŒÐ¿ÑÐŸÐŒÐžÑÐžÑÐ°ÐœÐ° Ðž ÐœÐµ ÑÐŒÐµÐµ ÐŽÐ° Ð±ÐžÐŽÐµ ÐºÐŸÑÐžÑÑÐµÐœÐ°. ÐÐµ ÐŒÐŸÐ»ÐžÐŒÐµ ÑÐ¿ÐŸÑÑÐµÐ±ÐµÑÐµ ÐŽÑÑÐ³Ð° Ð»ÐŸÐ·ÐžÐœÐºÐ°.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ðµ Ð¿ÐŸÐŒÐµÑÑ {{ min }} Ðž {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐŸ ÐžÐŒÐµ Ð·Ð° ÐŒÑÐµÐ¶ÐœÐžÐŸÑ ÑÐŒÐµÑÐ°Ñ (hostname).</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>ÐÑÐŸÑÐŸÑ ÐœÐ° ÐµÐ»ÐµÐŒÐµÐœÑÐž Ð²ÐŸ ÐŸÐ²Ð°Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ Ð¿ÐŸÐ²ÐµÑÐµÐºÑÐ°ÑÐµÐœ ÐŸÐŽ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð·Ð°ÐŽÐŸÐ²ÐŸÐ»ÑÐ²Ð° ÐœÐ°ÑÐŒÐ°Ð»ÐºÑ ÐµÐŽÐœÐŸ ÐŸÐŽ ÑÐ»ÐµÐŽÐœÐžÑÐµ ÐŸÐ³ÑÐ°ÐœÐžÑÑÐ²Ð°ÑÐ°:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Ð¡ÐµÐºÐŸÑ ÐµÐ»ÐµÐŒÐµÐœÑ ÐŸÐŽ ÐŸÐ²Ð°Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° Ð·Ð°ÐŽÐŸÐ²ÐŸÐ»ÑÐ²Ð° ÑÐŸÐ¿ÑÑÐ²ÐµÐœ ÑÐµÑ ÐœÐ° ÐŸÐ³ÑÐ°ÐœÐžÑÑÐ²Ð°ÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð¶ÐµÑÐºÐž ÐŒÐµÑÑÐœÐ°ÑÐŸÐŽÐµÐœ ÐžÐŽÐµÐœÑÐžÑÐžÐºÐ°ÑÐžÑÐºÐž Ð±ÑÐŸÑ Ð·Ð° Ñ
+Ð°ÑÑÐžÐž ÐŸÐŽ Ð²ÑÐµÐŽÐœÐŸÑÑ (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ Ð²Ð°Ð»ÐžÐŽÐµÐœ ÐžÐ·ÑÐ°Ð·.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° CSS Ð±ÐŸÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° CIDR ÐŸÐ·ÐœÐ°ÐºÐ°.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑÐ° ÐœÐ° ÐŒÑÐµÐ¶ÐœÐ°ÑÐ° ÐŒÐ°ÑÐºÐ° (netmask) ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÐžÐŽÐµ Ð¿ÐŸÐŒÐµÑÑ {{ min }} Ðž {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>ÐÐŒÐµÑÐŸ ÐœÐ° ÐŽÐ°ÑÐŸÑÐµÐºÐ°ÑÐ° Ðµ Ð¿ÑÐµÐŽÐŸÐ»Ð³ÐŸ. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° {{ filename_max_length }} ÐºÐ°ÑÐ°ÐºÑÐµÑ ÐžÐŒÐ° Ð¿ÐŸÐŒÐ°Ð»ÐºÑ.|ÐÐŒÐµÑÐŸ ÐœÐ° ÐŽÐ°ÑÐŸÑÐµÐºÐ°ÑÐ° Ðµ Ð¿ÑÐµÐŽÐŸÐ»Ð³ÐŸ. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° {{ filename_max_length }} ÐºÐ°ÑÐ°ÐºÑÐµÑÐž ÐžÐ»Ðž Ð¿ÐŸÐŒÐ°Ð»ÐºÑ.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>ÐÐ²Ð°Ð° Ð»ÐŸÐ·ÐžÐœÐºÐ° Ðµ Ð¿ÑÐµÐŒÐœÐŸÐ³Ñ ÐµÐŽÐœÐŸÑÑÐ°Ð²ÐœÐ°. ÐÐµ ÐŒÐŸÐ»ÐžÐŒÐµ ÐºÐŸÑÐžÑÑÐµÑÐµ Ð¿ÐŸÑÐžÐ»ÐœÐ° Ð»ÐŸÐ·ÐžÐœÐºÐ°.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÐŸÐŽÑÐ¶Ðž ÐºÐ°ÑÐ°ÐºÑÐµÑÐž ÐºÐŸÐž ÐœÐµ ÑÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐž ÐŸÐŽ ÑÐµÐºÐŸÐ²ÐœÐŸÑÐŸ ÐœÐžÐ²ÐŸ ÐœÐ° ÐŸÐ³ÑÐ°ÐœÐžÑÑÐ²Ð°ÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>ÐÐŸÑÐžÑÑÐµÑÐµÑÐŸ ÐœÐ° ÐœÐµÐ²ÐžÐŽÐ»ÐžÐ²Ðž Ð·ÐœÐ°ÑÐž ÐœÐµ Ðµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>ÐÐµ Ðµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ ÐŒÐµÑÐ°ÑÐµ ÐœÐ° Ð±ÑÐŸÐµÐ²Ðž ÐŸÐŽ ÑÐ°Ð·Ð»ÐžÑÐœÐž ÑÐºÑÐžÐ¿ÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>ÐÐµ Ðµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ ÐºÐŸÑÐžÑÑÐµÑÐµ ÐœÐ° ÑÐºÑÐžÐµÐœÐž Ð·ÐœÐ°ÑÐž Ð·Ð° Ð¿ÑÐµÐºÐ»ÐŸÐ¿ÑÐ²Ð°ÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>ÐÐ³ÐŸÐ»ÐµÐŒÑÐ²Ð°ÑÐ° ÐœÐ° ÐŽÐ°ÑÐŸÑÐµÐºÐ°ÑÐ° Ðµ ÐœÐµÐ²Ð°Ð¶ÐµÑÐºÐ° ({{ extension }}). ÐÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐž Ð·Ð³ÐŸÐ»ÐµÐŒÑÐ²Ð°ÑÐ° ÑÐµ ({{ extensions }}).</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>ÐÑÐºÑÐžÐµÐœÐŸÑÐŸ ÐºÐŸÐŽÐžÑÐ°ÑÐµ ÐœÐ° Ð·ÐœÐ°ÑÐž Ðµ ÐœÐµÐ²Ð°Ð¶ÐµÑÐºÐŸ ({{ detected }}). ÐÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐžÑÐµ ÑÐžÑÑÐžÑÐ°ÑÐ° ÑÐµ {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">ÐÐ²Ð°Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ Ðµ Ð²Ð°Ð»ÐžÐŽÐœÐ° MAC Ð°ÐŽÑÐµÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">ÐÐ° ÐŸÐ²ÐŸÑ URL ÐœÐµÐŽÐŸÑÑÐ°ÑÑÐ²Ð° ÐŽÐŸÐŒÐµÐœ ÐŸÐŽ ÐœÐ°ÑÐ²ÐžÑÐŸÐºÐŸ ÐœÐžÐ²ÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.mn.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.mn.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.mn.xlf	(revision 8435)
@@ -0,0 +1,614 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="mn" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ð±ÑÑÑÑ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ò¯ÐœÑÐœ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð°  {{ type }} -Ðœ ÑÓ©ÑÓ©Ð» Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ñ
+ÐŸÐŸÑÐŸÐœ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Ð¡ÐŸÐœÐ³ÐŸÑÐŸÐœ ÑÑÐ³Ð° Ð±ÑÑÑÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Ð¥Ð°ÐŒÐ³ÐžÐ¹Ðœ Ð±Ð°Ð³Ð°ÐŽÐ°Ð° {{ limit }} ÑÑÐ³Ð° ÑÐŸÐœÐ³ÐŸÐ³ÐŽÑÐŸÐœ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Ð¥Ð°ÐŒÐ³ÐžÐ¹Ðœ ÐžÑ
+ÐŽÑÑ {{ limit }} ÑÑÐ³Ð° ÑÐŸÐœÐ³ÐŸÐ³ÐŽÐŸÑ
+ Ð±ÐŸÐ»ÐŸÐŒÐ¶ÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>ÓšÐ³Ó©Ð³ÐŽÑÓ©Ðœ ÐœÑÐ³ ÑÑÐ²ÑÐ» ÐœÑÐ³ÑÑÑ ÐŸÐ»ÐŸÐœ ÑÑÐ³Ð° Ð±ÑÑÑÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ð­ÐœÑ ÑÐ°Ð»Ð±Ð°Ñ ÐœÑ Ñ
+Ò¯Ð»ÑÑÐ³ÐŽÑÐ¶ Ð±Ð°Ð¹ÑÐ°Ðœ ÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ð­ÐœÑ ÑÐ°Ð»Ð±Ð°Ñ ÐœÑ Ð°Ð»Ð³Ð° Ð±ÐŸÐ»ÑÐŸÐœ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ð±ÑÑÑÑ date ÑÓ©ÑÓ©Ð» Ð±Ð°Ð¹ÐœÐ° .</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ð±ÑÑÑÑ ÑÐ°Ð³ ÑÓ©ÑÓ©Ð» Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ð-ÐŒÐ°Ð¹Ð» Ñ
+Ð°ÑÐ³ Ð±ÑÑÑÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Ð€Ð°Ð¹Ð» ÐŸÐ»ÐŽÑÐŸÐœÐ³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Ð€Ð°Ð¹Ð» ÑÐœÑÐžÐ³ÐŽÐ°Ñ
+ÑÐ¹Ñ Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ð€Ð°Ð¹Ð» Ñ
+ÑÑÑÑÑ
+ÐžÐ¹ ÑÐŸÐŒ Ð±Ð°Ð¹ÐœÐ° ({{ size }} {{ suffix }}). ÐÓ©Ð²ÑÓ©Ó©ÑÓ©Ð³ÐŽÓ©Ñ
+ ÐŽÑÑÐŽ Ñ
+ÑÐŒÐ¶ÑÑ  {{ limit }} {{ suffix }} Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Ð€Ð°Ð¹Ð»ÑÐœ MIME-ÑÓ©ÑÓ©Ð» ÐœÑ Ð±ÑÑÑÑ Ð±Ð°Ð¹ÐœÐ° ({{ type }}). ÐÓ©Ð²ÑÓ©Ó©ÑÓ©Ð³ÐŽÓ©Ñ
+ MIME-ÑÓ©ÑÐ»Ò¯Ò¯ÐŽ {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð°  {{ limit }} ÑÐŒÑÑ ÑÑÐ²ÑÐ» Ð±Ð°Ð³Ð° Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ñ
+ÑÑÑÑÑ
+ÐžÐ¹ ÑÑÑ Ð±Ð°Ð¹ÐœÐ°. {{ limit }} ÑÑÐŒÐŽÑÐ³ÑÐžÐ¹Ðœ ÑÑÑÑÐ°Ð¹ ÑÐŒÑÑ ÑÑÐ²ÑÐ» Ð±Ð°Ð³Ð° Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° {{ limit }} ÑÐŒÑÑ ÑÑÐ²ÑÐ» ÐžÑ
+ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ñ
+ÑÑÑÑÑ
+ÐžÐ¹ Ð±ÐŸÐ³ÐžÐœÐŸ Ð±Ð°Ð¹ÐœÐ°. {{ limit }} ÑÑÐŒÐŽÑÐ³Ñ ÑÑÐ²ÑÐ» ÐžÑ
+ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ñ
+ÐŸÐŸÑÐŸÐœ Ð±Ð°Ð¹Ð¶ Ð±ÐŸÐ»ÐŸÑ
+Ð³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° null Ð±Ð°Ð¹Ð¶ Ð±ÐŸÐ»ÐŸÑ
+Ð³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° null Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ð±ÑÑÑÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ð±ÑÑÑÑ ÑÐ°Ð³ ÑÓ©ÑÓ©Ð» Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ð±ÑÑÑÑ URL Ð±Ð°Ð¹ÐœÐ° .</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Ð¥ÐŸÑÑ ÑÑÐ³ÑÑÐŽ ÐžÐ¶ÐžÐ» Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ð€Ð°Ð¹Ð» Ñ
+ÑÑÑÑÑ
+ÐžÐ¹ ÑÐŸÐŒ Ð±Ð°Ð¹ÐœÐ°. ÐÓ©Ð²ÑÓ©Ó©ÑÓ©Ð³ÐŽÓ©Ñ
+ ÐŽÑÑÐŽ Ñ
+ÑÐŒÐ¶ÑÑ ÐœÑ {{ limit }} {{ suffix }} Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ð€Ð°Ð¹Ð» Ñ
+ÑÑÑÑÑ
+ÐžÐ¹ ÑÐŸÐŒ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Ð€Ð°Ð¹Ð» upload Ñ
+ÐžÐ¹Ð³ÐŽÑÑÐœÐ³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ð·Ó©Ð²Ñ
+Ó©Ðœ ÑÐŸÐŸ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ð€Ð°Ð¹Ð» Ð·ÑÑÐ°Ð³ Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Ð­ÐœÑ ÑÑÐ³Ð° Ñ
+Ò¯ÑÐžÐœÑÑÐ¹ IP Ñ
+Ð°ÑÐ³ Ð±ÐžÑ ÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ò¯ÐœÑÐœ Ð·Ó©Ð² Ñ
+ÑÐ» Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ò¯ÐœÑÐœ Ð·Ó©Ð² Ð±Ð°Ð¹ÑÑÐžÐ» Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ò¯ÐœÑÐœ Ð±ÐŸÐŽÐžÑ ÑÐ»Ñ Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ð°Ð»Ñ Ñ
+ÑÐŽÐžÐ¹ÐœÑÑ Ñ
+ÑÑÑÐ³Ð»ÑÐ³ÐŽÑÑÐœ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>ÐÑÑÐ³ÐžÐ¹Ðœ Ñ
+ÑÐŒÐ¶ÑÑ ÑÐŸÐ³ÑÐŸÐŸÐ³ÐŽÐŸÐ¶ ÑÐ°ÐŽÑÐ°ÐœÐ³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ÐÑÑÐ³ÐžÐ¹Ðœ Ó©ÑÐ³Ó©Ðœ Ñ
+ÑÑÑÑÑ
+ÐžÐ¹ ÑÐŸÐŒ Ð±Ð°Ð¹ÐœÐ° ({{ width }}px). ÓšÑÐ³Ó©Ðœ ÐœÑ Ñ
+Ð°ÐŒÐ³ÐžÐ¹Ðœ ÐžÑ
+ÐŽÑÑ {{ max_width }}px Ð±Ð°Ð¹Ñ
+ Ð±ÐŸÐ»ÐŸÐŒÐ¶ÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ÐÑÑÐ³ÐžÐ¹Ðœ Ó©ÑÐ³Ó©Ðœ Ñ
+ÑÑÑÑÑ
+ÐžÐ¹ Ð¶ÐžÐ¶ÐžÐ³ Ð±Ð°Ð¹ÐœÐ° ({{ width }}px). ÓšÑÐ³Ó©Ðœ ÐœÑ Ñ
+Ð°ÐŒÐ³ÐžÐ¹Ðœ Ð±Ð°Ð³Ð°ÐŽÐ°Ð° {{ min_width }}px Ð±Ð°Ð¹Ñ
+ Ð±ÐŸÐ»ÐŸÐŒÐ¶ÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ÐÑÑÐ³ÐžÐ¹Ðœ Ó©ÐœÐŽÓ©Ñ Ñ
+ÑÑÑÑÑ
+ÐžÐ¹ ÑÐŸÐŒ Ð±Ð°Ð¹ÐœÐ° ({{ height }}px). ÓšÐœÐŽÓ©Ñ ÐœÑ Ñ
+Ð°ÐŒÐ³ÐžÐ¹Ðœ ÐžÑ
+ÐŽÑÑ {{ max_height }}px Ð±Ð°Ð¹Ñ
+ Ð±ÐŸÐ»ÐŸÐŒÐ¶ÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ÐÑÑÐ³ÐžÐ¹Ðœ Ó©ÐœÐŽÓ©Ñ Ñ
+ÑÑÑÑÑ
+ÐžÐ¹ Ð¶ÐžÐ¶ÐžÐ³ Ð±Ð°Ð¹ÐœÐ° ({{ height }}px). ÓšÐœÐŽÓ©Ñ ÐœÑ Ñ
+Ð°ÐŒÐ³ÐžÐ¹Ðœ Ð±Ð°Ð³Ð°ÐŽÐ°Ð° {{ min_height }}px Ð±Ð°Ð¹Ñ
+ Ð±ÐŸÐ»ÐŸÐŒÐ¶ÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ñ
+ÑÑÑÐ³Ð»ÑÐ³ÑÐžÐ¹Ðœ ÐŸÐŽÐŸÐŸÐ³ÐžÐ¹Ðœ ÐœÑÑÑ Ò¯Ð³ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° ÑÐ³ {{ limit }} ÑÑÐŒÐŽÑÐ³Ñ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.|Ð­ÐœÑ ÑÑÐ³Ð° ÑÐ³ {{ limit }} ÑÑÐŒÐŽÑÐ³Ñ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Ð€Ð°Ð¹Ð»ÑÐœ Ð·Ó©Ð²Ñ
+Ó©Ðœ Ñ
+Ð°Ð³Ð°Ñ ÐœÑ upload Ñ
+ÐžÐ¹Ð³ÐŽÑÑÐœ.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ð¯ÐŒÐ°Ñ Ñ ÑÐ°Ð¹Ð» upload Ñ
+ÐžÐ¹Ð³ÐŽÑÑÐœÐ³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>php.ini ÐŽÑÑÑ ÑÒ¯Ñ Ð·ÑÑÑÑÐœ Ñ
+Ð°Ð²ÑÑÑÐ³ ÑÐŸÑ
+ÐžÑÑÑÐ»Ð°Ð°Ð³Ò¯Ð¹ Ð±Ð°Ð¹ÐœÐ°, ÑÑÐ²ÑÐ» ÑÐŸÑ
+ÐžÑÑÑÐ»ÑÐ°Ðœ Ñ
+Ð°Ð²ÑÐ°Ñ Ð±Ð°Ð¹Ñ
+Ð³Ò¯Ð¹ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Ð¢Ò¯Ñ Ð·ÑÑÑÑÐœ ÑÐ°Ð¹Ð»ÑÐ³ ÐŽÐžÑÐº ÑÑÑ Ð±ÐžÑÐžÐ¶ Ð±ÐŸÐ»ÐŸÑ
+Ð³Ò¯Ð¹ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP extension ÐœÑ upload -Ð³ Ð°ÐŒÐ¶ÐžÐ»ÑÐ³Ò¯Ð¹ Ð±ÐŸÐ»Ð³ÐŸÐŸÐŽ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ð­ÐœÑ ÐºÐŸÐ»Ð»ÐµÐºÑ {{ limit }} Ð±Ð° ÑÒ¯Ò¯ÐœÑÑÑ ÐŽÑÑÑ ÑÐŸÐŸÐœÑ ÑÐ»ÐµÐŒÐµÐœÑ Ð°Ð³ÑÑÐ»Ð°Ñ
+ ÑÑÑÐŸÐ¹.|Ð­ÐœÑ ÐºÐŸÐ»Ð»ÐµÐºÑ {{ limit }} Ð±Ð° ÑÒ¯Ò¯ÐœÑÑÑ ÐŽÑÑÑ ÑÐŸÐŸÐœÑ ÑÐ»ÐµÐŒÐµÐœÑ Ð°Ð³ÑÑÐ»Ð°Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ð­ÐœÑ ÐºÐŸÐ»Ð»ÐµÐºÑ {{ limit }} Ð±Ð° ÑÒ¯Ò¯ÐœÑÑÑ ÐŽÐŸÐŸÑ ÑÐŸÐŸÐœÑ ÑÐ»ÐµÐŒÐµÐœÑ Ð°Ð³ÑÑÐ»Ð°Ñ
+ ÑÑÑÐŸÐ¹.|Ð­ÐœÑ ÐºÐŸÐ»Ð»ÐµÐºÑ {{ limit }} Ð±Ð° ÑÒ¯Ò¯ÐœÑÑÑ ÐŽÐŸÐŸÑ ÑÐŸÐŸÐœÑ ÑÐ»ÐµÐŒÐµÐœÑ Ð°Ð³ÑÑÐ»Ð°Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ð­ÐœÑ ÐºÐŸÐ»Ð»ÐµÐºÑ ÑÐ³ {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑ Ð°Ð³ÑÑÐ»Ð°Ñ
+ ÑÑÑÐŸÐ¹.|Ð­ÐœÑ ÐºÐŸÐ»Ð»ÐµÐºÑ ÑÐ³ {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑ Ð°Ð³ÑÑÐ»Ð°Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ÐÐ°ÑÑÑÐœ ÐŽÑÐ³Ð°Ð°Ñ Ð±ÑÑÑÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>ÐÑÐŒÐ¶ÐžÐ³ÐŽÑÑÐ³Ò¯Ð¹ ÐºÐ°ÑÑÑÐœ ÑÓ©ÑÓ©Ð» ÑÑÐ²ÑÐ» ÐºÐ°ÑÑÑÐœ ÐŽÑÐ³Ð°Ð°Ñ Ð±ÑÑÑÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Ð­ÐœÑ ÑÑÐ³Ð° Ñ
+Ò¯ÑÐžÐœÑÑÐ¹ ÐÐ»ÐŸÐœ ÑÐ»ÑÑÐœ ÐÐ°ÐœÐºÐœÑ ÐÐ°ÐœÑÐœÑ ÐÑÐ³Ð°Ð°Ñ (IBAN) Ð±ÐžÑ ÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ò¯ÐœÑÐœ Ð·Ó©Ð² ISBN-10 Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ò¯ÐœÑÐœ Ð·Ó©Ð² ISBN-13 Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ò¯ÐœÑÐœ Ð·Ó©Ð² ISBN-10 ÑÐŒÑÑ ISBN-13 Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ò¯ÐœÑÐœ Ð·Ó©Ð² ISSN Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ò¯ÐœÑÐœ Ð±ÐŸÐŽÐžÑ Ð²Ð°Ð»ÑÑ Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° {{ compared_value }} -ÑaÐ¹ ÑÑÐœÑÒ¯Ò¯ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° {{ compared_value }} -Ñ ÐžÑ
+ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° {{ compared_value }} -ÑÐ°Ð¹ ÑÑÐœÑÒ¯Ò¯ ÑÐŒÑÑ ÑÑÐ²ÑÐ» ÐžÑ
+ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° {{ compared_value_type }} {{ compared_value }} -ÑÐ°Ð¹ ÑÐ³ ÐžÐ¶ÐžÐ» Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° {{ compared_value }} -Ñ Ð±Ð°Ð³Ð° Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° {{ compared_value }} -ÑÐ°Ð¹ ÐžÐ¶ÐžÐ» ÑÐŒÑÑ ÑÑÐ²ÑÐ» Ð±Ð°Ð³Ð° Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° {{ compared_value }} -ÑÐ°Ð¹ ÑÑÐœÑÒ¯Ò¯ Ð±Ð°Ð¹Ñ
+ ÑÑÐ³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° {{ compared_value_type }} {{ compared_value }} -ÑÐ°Ð¹ ÑÐ³ ÐžÐ¶ÐžÐ» Ð±Ð°Ð¹Ñ
+ ÑÑÐ³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>ÐÑÑÐ³ÐžÐ¹Ðœ Ñ
+Ð°ÑÑÑÐ°Ð° Ñ
+ÑÑÑÑÑ
+ÐžÐ¹ ÑÐŸÐŒ Ð±Ð°Ð¹ÐœÐ° ({{ ratio }}). Ð¥Ð°ÑÑÑÐ°Ð° ÐœÑ Ñ
+Ð°ÐŒÐ³ÐžÐ¹Ðœ ÐžÑ
+ÐŽÑÑ {{ max_ratio }} Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>ÐÑÑÐ³ÐžÐ¹Ðœ Ñ
+Ð°ÑÑÑÐ°Ð° Ñ
+ÑÑÑÑÑ
+ÐžÐ¹ Ð¶ÐžÐ¶ÐžÐ³ Ð±Ð°Ð¹ÐœÐ° ({{ ratio }}). Ð¥Ð°ÑÑÑÐ°Ð° ÐœÑ Ñ
+Ð°ÐŒÐ³ÐžÐ¹Ðœ Ð±Ð°Ð³Ð°ÐŽÐ°Ð° {{ min_ratio }} Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>ÐÑÑÐ°Ð³ ÐŽÓ©ÑÐ²Ó©Ð»Ð¶ÐžÐœ Ñ
+ÑÐ»Ð±ÑÑÑÑÐ¹ Ð±Ð°Ð¹ÐœÐ° ({{ width }}x{{ height }}px). ÐÓ©ÑÐ²Ó©Ð»Ð¶ÐžÐœ Ð·ÑÑÐ³ÑÑÐŽ ÐŸÑÑÑÐ»Ð°Ñ
+ Ð±ÐŸÐ»ÐŸÐŒÐ¶Ð³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>ÐÑÑÐ°Ð³ Ñ
+ÑÐ²ÑÑÑ Ð±Ð°Ð¹ÑÐ»Ð°Ð»ÑÐ°Ð¹ Ð±Ð°Ð¹ÐœÐ° ({{ width }}x{{ height }}px). Ð¥ÑÐ²ÑÑÑ Ð±Ð°Ð¹ÑÐ»Ð°Ð»ÑÐ°Ð¹ Ð·ÑÑÐ³ÑÑÐŽ ÐŸÑÑÑÐ»Ð°Ñ
+ Ð±ÐŸÐ»ÐŸÐŒÐ¶Ð³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>ÐÑÑÐ³ÑÑÐŽ Ð±ÐŸÑÐŸÐŸ Ð±Ð°Ð¹ÑÐ»Ð°Ð»ÑÐ°Ð¹ Ð±Ð°Ð¹ÐœÐ° ({{ width }}x{{ height }}px). ÐÐŸÑÐŸÐŸ Ð±Ð°Ð¹ÑÐ»Ð°Ð»ÑÐ°Ð¹ Ð·ÑÑÐ³ÑÑÐŽ ÐŸÑÑÑÐ»Ð°Ñ
+ Ð±ÐŸÐ»ÐŸÐŒÐ¶Ð³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Ð¥ÐŸÐŸÑÐŸÐœ ÑÐ°Ð¹Ð» ÐŸÑÑÑÐ»Ð°Ñ
+ Ð±ÐŸÐ»ÐŸÐŒÐ¶Ð³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Ð¥ÐŸÑÑ Ð·Ó©Ð² ÑÐŸÑ
+ÐžÑÐŸÐ³ÐŽÐŸÐŸÐ³Ò¯Ð¹ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° ÑÐŸÐŸÑÐŸÐŸÐ»ÑÐŸÐœ {{ charset }} ÑÑÐŒÐŽÑÐ³ÑÑÑÐ¹ ÑÐ°Ð°ÑÐ°Ñ
+Ð³Ò¯Ð¹ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Ð­ÐœÑ ÑÑÐ³Ð° Ñ
+Ò¯ÑÐžÐœÑÑÐ¹ ÐÐžÐ·ÐœÐµÑ Ð¢Ð°ÐœÐžÑ
+ ÐÐŸÐŽ (BIC) Ð±ÐžÑ ÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>ÐÐ»ÐŽÐ°Ð°</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Ð­ÐœÑ ÑÑÐ³Ð° Ñ
+Ò¯ÑÐžÐœÑÑÐ¹ UUID Ð±ÐžÑ ÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° {{ compared_value }} -Ðœ Ò¯ÑÐ¶Ð²ÑÑ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ð­ÐœÑ Business Identifier Code (BIC) ÐºÐŸÐŽ ÐœÑ IBAN {{ iban }} -ÑÐ°Ð¹ Ñ
+ÐŸÐ»Ð±ÐŸÐŸÐ³Ò¯Ð¹ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° JSON Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ð­ÐœÑ ÐºÐŸÐ»Ð»ÐµÐºÑ Ð·Ó©Ð²Ñ
+Ó©Ðœ ÐŽÐ°Ð²ÑÐ°Ð³ÐŽÐ°Ñ
+Ð³Ò¯Ð¹ ÑÐ»ÐµÐŒÐµÐœÑÒ¯Ò¯ÐŽ Ð°Ð³ÑÑÐ»Ð°Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° ÑÐµÑÑÐ³ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° ÑÑÐ³ ÑÑÐ²ÑÐ» ÑÐµÑÑÐ³ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° ÑÓ©ÑÓ©Ð³ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° ÑÓ©ÑÓ©Ð³ ÑÑÐ²ÑÐ» ÑÑÐ³ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ò¯ÐœÑÐœ Ð·Ó©Ð² ÑÐ°Ð³ÐžÐ¹Ðœ Ð±Ò¯Ñ Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Ð­ÐœÑ ÐœÑÑÑ Ò¯Ð³ÐžÐ¹Ðœ ÐŒÑÐŽÑÑÐ»ÑÐ» Ð°Ð»ÐŽÐ°Ð³ÐŽÑÐ°Ðœ Ð±Ð°Ð¹Ñ
+ ÐŒÐ°Ð³Ð°ÐŽÐ»Ð°Ð»ÑÐ°Ð¹ ÑÑÑÐ°Ð°Ñ ÐŽÐ°Ñ
+ÐžÐœ Ð°ÑÐžÐ³Ð»Ð°Ð³ÐŽÐ°Ñ
+ ÑÑÐ³Ò¯Ð¹. ÓšÓ©Ñ ÐœÑÑÑ Ò¯Ð³ Ð°ÑÐžÐ³Ð»Ð°ÐœÐ° ÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° {{ min }} -Ñ {{ max }} Ñ
+ÐŸÐŸÑÐŸÐœÐŽ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ð±ÑÑÑÑ hostname Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Ð­ÐœÑÑ
+Ò¯Ò¯ ÑÑÐ³Ð»ÑÑÐ»Ð³Ð°Ðœ ÐŽÐ°Ñ
+Ñ ÑÐ»ÐµÐŒÑÐœÑÐžÐ¹Ðœ ÑÐŸÐŸ, {{ compared_value }}-Ðœ Ò¯ÑÐ¶Ð²ÑÑ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° ÐŽÐŸÐŸÑÑ
+ Ð±ÐŸÐ»Ð·ÐŸÐ»ÑÑÐŽÑÐœ ÑÐŽÐ°Ð¶ ÐœÑÐ³ÐžÐ¹Ð³ Ñ
+Ð°ÐœÐ³Ð°Ñ
+ ÑÑÑÐŸÐ¹:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Ð­ÐœÑÑ
+Ò¯Ò¯ ÑÑÐ³Ð»ÑÑÐ»Ð³Ð°Ðœ ÐŽÐ°Ñ
+Ñ ÑÐ»ÐµÐŒÑÐœÑÒ¯Ò¯ÐŽ Ó©Ó©Ñ Ó©Ó©ÑÑÐŽÐžÐ¹Ðœ Ð±ÐŸÐ»Ð·ÐŸÐ»ÑÑÐŽÐ°Ð° Ñ
+Ð°ÐœÐ³Ð°Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Ð­ÐœÑ ÑÑÐ³Ð° Ð·Ó©Ð² International Securities Identification Number (ISIN) Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target state="needs-review-translation">Ð­ÐœÑ ÑÑÐ³Ð° ÐœÑ Ð·Ó©Ð² ÐžÐ»ÑÑÑ
+ÐžÐ¹Ð»ÑÐ» Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target state="needs-review-translation">Ð­ÐœÑ ÑÑÐ³Ð° ÐœÑ Ñ
+Ò¯ÑÐžÐœÑÑÐ¹ CSS Ó©ÐœÐ³Ó© Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target state="needs-review-translation">Ð­ÐœÑ ÑÑÐ³Ð° ÐœÑ Ñ
+Ò¯ÑÐžÐœÑÑÐ¹ CIDR ÑÑÐŒÐŽÑÐ³Ð»ÑÐ³ÑÑ Ð±ÐžÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target state="needs-review-translation">Ð¡Ò¯Ð»Ð¶ÑÑÐœÐžÐ¹ ÐŒÐ°ÑÐºÐœÑ ÑÑÐ³Ð° ÐœÑ {{ min }} Ð±Ð° {{ max }}-ÐžÐ¹Ðœ Ñ
+ÐŸÐŸÑÐŸÐœÐŽ Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target state="needs-review-translation">Ð€Ð°Ð¹Ð»ÑÐœ ÐœÑÑ Ñ
+ÑÑ ÑÑÑ Ð±Ð°Ð¹ÐœÐ°. Ð­ÐœÑ ÐœÑ {{ filename_max_length }} ÑÑÐŒÐŽÑÐ³Ñ ÑÑÐ²ÑÐ» ÑÒ¯Ò¯ÐœÑÑÑ Ð±Ð°Ð³Ð° Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.|Ð€Ð°Ð¹Ð»ÑÐœ ÐœÑÑ Ñ
+ÑÑ ÑÑÑ Ð±Ð°Ð¹ÐœÐ°. Ð­ÐœÑ ÐœÑ {{ filename_max_length }} ÑÑÐŒÐŽÑÐ³Ñ ÑÑÐ²ÑÐ» ÑÒ¯Ò¯ÐœÑÑÑ Ð±Ð°Ð³Ð° Ð±Ð°Ð¹Ñ
+ ÑÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target state="needs-review-translation">ÐÑÑÑ Ò¯Ð³ÐžÐ¹Ðœ Ñ
+Ò¯Ñ ÐœÑ Ñ
+ÑÑ Ð±Ð°Ð³Ð° Ð±Ð°Ð¹ÐœÐ°. Ð¥Ò¯ÑÑÑÐ¹ ÐœÑÑÑ Ò¯Ð³ÐžÐ¹Ð³ Ð°ÑÐžÐ³Ð»Ð°ÐœÐ° ÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target state="needs-review-translation">Ð­ÐœÑ ÑÑÐ³Ð° ÐœÑ ÐŸÐŽÐŸÐŸÐ³ÐžÐ¹Ðœ Ñ
+ÑÐ·Ð³Ð°Ð°ÑÐ»Ð°Ð»ÑÑÐœ ÑÒ¯Ð²ÑÐžÐœÐŽ Ð·Ó©Ð²ÑÓ©Ó©ÑÓ©Ð³ÐŽÓ©Ó©Ð³Ò¯Ð¹ ÑÑÐŒÐŽÑÐ³ÑÒ¯Ò¯ÐŽ Ð°Ð³ÑÑÐ»Ð¶ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target state="needs-review-translation">Ð¥Ð°ÑÐ°Ð³ÐŽÐ°Ñ
+Ð³Ò¯Ð¹ ÑÑÐŒÐŽÑÐ³ÑÒ¯Ò¯ÐŽÐžÐ¹Ð³ Ð°ÑÐžÐ³Ð»Ð°Ñ
+ÑÐ³ Ð·Ó©Ð²ÑÓ©Ó©ÑÓ©Ñ
+Ð³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target state="needs-review-translation">Ð¯ÐœÐ· Ð±Ò¯ÑÐžÐ¹Ðœ ÑÐºÑÐžÐ¿ÑÒ¯Ò¯ÐŽÑÑÑ ÑÐŸÐŸÐ³ Ñ
+ÐŸÐ»ÑÐ¶ Ñ
+ÑÑÑÐ³Ð»ÑÑ
+ÐžÐ¹Ð³ Ð·Ó©Ð²ÑÓ©Ó©ÑÓ©Ñ
+Ð³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target state="needs-review-translation">ÐÑÑÑÐ»Ð°Ð³ÐŽÑÐ°Ðœ ÐŽÐ°Ð²Ñ
+Ð°ÑÐ³ÑÐœ ÑÑÐŒÐŽÑÐ³ÑÒ¯Ò¯ÐŽÐžÐ¹Ð³ Ð°ÑÐžÐ³Ð»Ð°Ñ
+ÑÐ³ Ð·Ó©Ð²ÑÓ©Ó©ÑÓ©Ñ
+Ð³Ò¯Ð¹.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">Ð€Ð°Ð¹Ð»ÑÐœ Ó©ÑÐ³Ó©ÑÐ³Ó©Ð» Ð±ÑÑÑÑ Ð±Ð°Ð¹ÐœÐ° ({{ extension }}). ÐÓ©Ð²ÑÓ©Ó©ÑÓ©Ð³ÐŽÑÓ©Ðœ Ó©ÑÐ³Ó©ÑÐ³Ó©Ð»Ò¯Ò¯ÐŽ ÐœÑ {{ extensions }} ÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">ÐÐ»ÑÒ¯Ò¯Ð»ÑÑÐœ ÑÑÐŒÐŽÑÐ³ÑÐžÐ¹Ðœ ÐºÐŸÐŽÑÐžÐ»ÐŸÐ» Ð±ÑÑÑÑ Ð±Ð°Ð¹ÐœÐ° ({{ detected }}). ÐÓ©Ð²ÑÓ©Ó©ÑÓ©Ð³ÐŽÑÓ©Ðœ ÐºÐŸÐŽÑÐžÐ»ÐŸÐ»ÑÑÐŽ ÐœÑ {{ encodings }} ÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Ð­ÐœÑ ÑÑÐ³Ð° Ñ
+Ò¯ÑÐžÐœÑÑÐ¹ MAC Ñ
+Ð°ÑÐ³ Ð±ÐžÑ ÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Ð­ÐœÑ URL ÐŽÑÑÐŽ ÑÒ¯Ð²ÑÐžÐœÐ³ÐžÐ¹Ðœ ÐŽÐŸÐŒÐµÐ¹Ðœ ÐŽÑÑÑÑ Ð±Ð°Ð¹ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.my.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.my.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.my.xlf	(revision 8435)
@@ -0,0 +1,540 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="my" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>á€áááºáá­á¯ážáááº false ááŒá
+áºááááºá</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>á€áááºáá­á¯ážáááº true ááŒá
+áºááááºá</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>á€áááºáá­á¯ážáááº {{ type }} á¡áá»á­á¯ážá¡á
+á¬ážááŒá
+áºááááºá </target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>á€áááºáá­á¯ážáááº ááœááºáááºáááŒá
+áºáááºá·áá«á</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>áááºááœá±ážáá»ááºáá±á¬áááºáá­á¯ážáááº áááºá·áá»áŸá±á¬áºáá±á¬áº áááºáá­á¯ážááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>áááºáááº á¡áááºážáá¯á¶ážááœá±ážáá»ááºááŸá¯ {{ limit }} áá¯ááœá±ážáá»ááºááááºá</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>áááºáááºá¡áá»á¬ážáá¯á¶áž {{ limit }} áá¯áá¬ááœá±ážáá»ááºááœááºá·ááŸá­áááºá</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>áá±ážáá¬ážáá±á¬áááºáá­á¯ážáá
+áºáá¯ (áá­á¯á·ááá¯ááº) áá
+áºáá¯áááºáá­á¯ááááŸááºáááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>á€ááœááºáááºáá­á¯ááá»áŸá±á¬áºááá·áºáá¬ážáá«á</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>á€ááœááºáááºáá­á¯ááá»áŸá±á¬áºááá·áºáá¬ážáá«á</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>á€áááºáá­á¯ážáááºááŸááºáááºáá±á¬áºáááºá
+áœá²ááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>á€áááºáá­á¯ážáááº ááŸááºáááºáá±á¬áº áááºá
+áœá²/á¡áá»á­ááº ááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>á€áááºáá­á¯ážáááº ááŸááºáááºáá±á¬áº á¡á®ážáá±ážáá­ááºá
+á¬ ááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>áá­á¯ááºááŸá¬áááœá±á·áá«á</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>á€áá­á¯ááºáá­á¯ áááºááááá«á</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>áá­á¯ááºá¡ááœááºá¡á
+á¬áž á¡ááœááºááŒá®ážáá±áááº ({{ size }} {{ suffix }}). ááœááºá·ááŒá¯áá¬ážáá±á¬ á¡áá»á¬ážáá¯á¶áž áá­á¯ááºáá­á¯ááºáááº {{ limit }} {{ suffix }} ááŒá
+áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>áá­á¯ááºá mime á¡áá»á­á¯ážá¡á
+á¬ážáááŸááºáááºáá« ({{ type }})á ááœáá·áºááŒá¯áá¬ážáá±á¬ mime á¡áá»á­á¯ážá¡á
+á¬ážáá»á¬ážááŸá¬ {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>á€áááºáá­á¯ážáááº {{ limit }} (áá­á¯á·ááá¯ááº) {{ limit }} áááºáááºážáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>á€áááºáá­á¯ážáááº á¡ááœááºááŸááºááœááºážáááºá áááºážááœááºá¡áá¹ááá¬ {{ limit }} (áá­á¯á·ááá¯ááº) áááºážáááºáááºážááá·áºáááºá | á€áááºáá­á¯ážáááº á¡ááœááºááŸááºááœááºážáááºá áááºážááœááºá¡áá¹ááá¬ {{limit}} áá¯ááŸáá·áºá¡áááºááŸá­ááá·áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>á€áááºáá­á¯ážáááº {{limit}} (áá­á¯á·ááá¯ááº) áá­á¯á·áááºáá­á¯ááá·áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>á€áááºáá­á¯ážáááº á¡ááœááºáá­á¯ááœááºážáááºá áááºážááœááºá¡áá¹ááá¬ {{limit}} (áá­á¯á·ááá¯ááº) áá­á¯á·áááºáá­á¯ááŸá­ááá·áºáááºá | á€áááºáá­á¯ážáááºáá­á¯ááœááºážáááºá áááºážááœááºá¡áá¹ááá¬ {{limit}} áá¯á¶ážááŸáá·áºá¡áááºááŸá­ááá·áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>á€áááºáá­á¯ážáááºááœááºáááºáááŒá
+áºáááºá·áá«á</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>á€áááºáá­á¯ážáááº null áááŒá
+áºáááºá·áá«á</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>á€áááºáá­á¯ážáááº null ááŒá
+áºáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>á€áááºáá­á¯ážáááºááŸááºáááºáá±á¬áááºáá­á¯ážááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>á€áááºáá­á¯ážáááºááŸááºáááºáá±á¬ á¡áá»á­ááºáááºáá­á¯ážááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>á€áááºáá­á¯ážáááºááŸááºáááºáá±á¬ URL áááºáá­á¯ážááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>áááºáá­á¯ážááŸá
+áºáá¯áááº áá°áá®áááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>á€áá­á¯ááºáááº á¡ááœááºááŒá®ážáááºá ááœáá·áºááŒá¯áá¬ážááá·áºá¡áá»á¬ážáá¯á¶ážáá­á¯ááºá¡ááœááºá¡á
+á¬ážáááº {{ limit }} {{ suffix }} ááŒá
+áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>á€áá­á¯ááºáááº á¡ááœááºááŒá®ážáááºá</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>á€áá­á¯ááºáá­á¯áááºááááá«á</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>á€áááºáá­á¯ážáááºááŸááºáááºáá±á¬áá¶áá«ááºááŒá
+áºáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>á€áá­á¯ááºáááºááŸááºáááºáá±á¬ áá«ááºáá¯á¶ááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">á€áááºáá­á¯ážáááº ááŸááºáááºáá±á¬ IP áá­ááºá
+á¬ ááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>á€áááºáá­á¯ážáááº ááŸááºáááºáá±á¬áá¬áá¬á
+áá¬ážááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>á€áááºáá­á¯ážáááºááŸááºáááºáá±á¬áá¬áá¬ááŒááºááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>á€áááºáá­á¯ážáááºááŸááºáááºáá±á¬áá­á¯ááºáá¶ááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>á€áááºáá­á¯ážáááº á¡áá¯á¶ážááŒá¯ááŒá®ážáá¬ážááŒá
+áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>áá«ááºáá¯á¶á¡ááœááºá¡á
+á¬ážáá­á¯ááŸá¬áááœá±á·áá«á</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>áá¯á¶áá¡áá»á¬ážáááº ááŒá®ážááœááºážáááº ({{ width }}px)á ááœáá·áºááŒá¯áá¬ážááá·áºá¡áá»á¬ážáá¯á¶ážá¡áá»á¬ážáááº {{max_width}}px ááŒá
+áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>áá¯á¶áá¡áá»á¬ážáááº áá±ážááœááºážáááº ({{ width }}px)á ááœáá·áºááŒá¯áá¬ážááá·áºá¡áááºážáá¯á¶ážá¡áá»á¬ážáááº {{max_width}}px ááŒá
+áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>áá¯á¶áá¡áá¶áááº ááŒá®ážááœááºážáááº ({{ height }}px)á ááœáá·áºááŒá¯áá¬ážááá·áºá¡áá»á¬ážáá¯á¶ážá¡áá¶áááº {{max_height}}px ááŒá
+áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>áá¯á¶áá¡áá¶áááº áá±ážááœááºážáááº ({{ height }}px)á ááœáá·áºááŒá¯áá¬ážááá·áºá¡áááºážáá¯á¶ážá¡áá¶áááº {{min_height}}px ááŒá
+áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>á€áááºáá­á¯ážáááºá¡áá¯á¶ážááŒá¯áá°á áááºááŸá­á
+áá¬ážááŸááºááŒá
+áºááá·áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>á€áááºáá­á¯ážáááºá
+á¬áá¯á¶áž {{limit}} á¡áá­á¡áá»ááŸá­ááá·áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>á€áá­á¯ááºáááºáá
+áºá
+á­ááºáá
+áºáá­á¯ááºážáá¬ upload áááºáá²á·áááºá</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>áááºáááºá· áá­á¯ááºáá»áŸ upload ááá¯ááºáá²á·áá«á</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">php.ini ááœááºáá¬áá®áá­á¯ááºááœá²áá­á¯ááŒááºáááºáá¬ážááŒááºážáááŸá­áá«á áá­á¯á·ááá¯ááº ááŒááºáááºáá¬ážáá±á¬áá­á¯ááºááœá²áááŸá­áá«á</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>áá¬áá®áá­á¯ááºáá­á¯ disk ááá±ážáá­á¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP extension áá
+áºáá¯ááŒá±á¬ááºá· upload áááºááááá­á¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>á€ collection ááœááº {{limit}} element (áá­á¯á·ááá¯ááº) áá­á¯á·áááºááá­á¯ááá·áºáá«á</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>á€ collection ááœááº {{limit}} element (áá­á¯á·ááá¯ááº) áááºážáááºáááºážááá·áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>á€á
+á¯á
+ááºážááŸá¯ááœááº {{limit}} element á¡áá­á¡áá»áá«ááá·áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>áááºáá¶áá«ááºáááŸááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>áááºá¡áá»á­á¯ážá¡á
+á¬ážáááŸááºáá« (áá­á¯á·ááá¯ááº) áááºáá¶áá«ááºáááŸááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">á€áááºáá­á¯ážáááº ááŸááºáááºáá±á¬ áá­á¯ááºáá¶ááá¬ áááºá
+á¬áááºážáá¶áá«ááº (IBAN) ááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>á€áááºáá­á¯ážáááº ááŸááºáááºáá±á¬ ISBN-10 áááºáá­á¯ážááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>á€áááºáá­á¯ážáááº ááŸááºáááºáá±á¬ ISBN-13 áááºáá­á¯ážááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>á€áááºáá­á¯ážáááº áááºá·áá»áŸá±á¬áºáá±á¬áº ISBN-10 (áá­á¯á·ááá¯ááº) ISBN-13 áááºáá­á¯ážááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>á€áááºáá­á¯ážáááº áááºá·áá»áŸá±á¬áºáá±á¬áº ISSN áááºáá­á¯ážááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>á€áááºáá­á¯ážáááº áááºá·áá»áŸá±á¬áºáá±á¬áº ááœá±ááŒá±ážáááºáá­á¯ážááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>á€áááºáá­á¯ážáááº {{ compared_value }} ááŸááºá·áá®áááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>á€áááºáá­á¯ážáááº {{ compared_value }} áááºááŒá®ážáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>á€áááºáá­á¯ážáááº {{ compared_value }} áááºááŒá®ážáááºá·áááº (áá­á¯á·ááá¯ááº) á€áááºáá­á¯ážáááº {{ compared_value }} áá®áááºá·áááºá </target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>á€áááºáá­á¯ážáááº {{ compared_value_type }} {{ compared_value }} ááŸááºá·áááºáá°áá®áá»áŸáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>á€áááºáá­á¯ážáááº {{ compared_value }} áááºááá²áá±á¬áá²á· áááºáá­á¯ážááŒá
+áºáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>á€áááºáá­á¯ážáááº {{ compared_value }} áááº ááááºážáá±á¬áááºáá­á¯áž (áá­á¯á·ááá¯ááº) áá®áá»áŸáá±á¬áááºáá­á¯ážááŒá
+áºáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>á€áááºáá­á¯ážáááº {{ compared_value }} ááŸááºá·ááá®áááºá·áá«á</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>á€áááºáá­á¯ážáááº {{ compared_value_type }} {{ compared_value }} ááŸááºá·áááºáá°ááá®áá»áŸáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>á€áá¬ááºáá¯á¶á¡áá»á­á¯ážá¡á
+á¬ážáááºá¡ááœááºááŒá®ážááœááºážáááºá ({{ ratio }})á ááœááºá·ááŒá¯áá¬ážáá±á¬áá¬ááºáá¯á¶á¡áá»á­á¯ážá¡áá¬ážáááº {{ max_ratio }} ááŒá
+áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>á€áá¬ááºáá¯á¶á¡áá»á­á¯ážá¡á
+á¬ážáááºá¡ááœááºáá±ážááœááºážáááºá ({{ ratio }})á ááœááºá·ááŒá¯áá¬ážáá±á¬áá¬ááºáá¯á¶á¡áá»á­á¯ážá¡áá¬ážáááº {{ min_ratio }} ááŒá
+áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>á€áá¬ááºáá¯á¶áááº á
+áá¯áááºážááŒá
+áºáá±áááº ({{ width }}x{{ height }}px)á á
+áá¯áááºážáá¬ááºáá¯á¶áá»á¬ážáá­á¯ ááœááºá·áááŒá¯áá«á</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>á€áá¬ááºáá¯á¶áááº á¡áá»áŸá¬ážáá­á¯ááºááŒá
+áºáá±áááº ({{ width }}x{{ height }}px). á¡áá»áŸá¬ážáá­á¯ááºáá¬ááºáá¯á¶áá»á¬ážááœááºá·áááŒá¯áá«á</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>á€áá¬ááºáá¯á¶áááº áá±á«ááºáá­á¯ááºááŒá
+áºáá±áááº ({{ width }}x{{ height }}px). áá±á«ááºáá­á¯ááºáá¬ááºáá¯á¶áá»á¬ážááœááºá·áááŒá¯áá«á</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>áá­á¯ááºá¡ááœááºáá­á¯áááºááœááºá·áááŒá¯áá«á</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>host ááŒá±ááŸááºážáááá­á¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>á€áááºáá­á¯ážáááº áá»áŸá±á¬áºááŸááºážáá¬ážáá±á¬ {{ charset }} á
+á¬ážáá¯á¶ážááŸááºá· áá­á¯ááºáá®ááŸá¯áááŸá­áá«á</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">á€áááºáá­á¯ážáááº ááŸááºáááºáá±á¬ á
+á®ážááœá¬ážáá±áž ááŸááºáá¯á¶áááºáá¯ááº (BIC) ááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>á¡ááŸá¬áž</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">á€áááºáá­á¯ážáááº ááŸááºáááºáá±á¬ UUID ááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>á€áááºáá­á¯ážáááº {{compared_value}} á á
+áá°áááºáá­á¯ážááŒá
+áºáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>á€ Business Identifier Code (BIC) áááº IBAN {{ iban }} ááŸááºá·áááºá
+ááºááŸá¯áááŸá­áá«á</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>á€áááºáá­á¯ážáááº áááºá·áá»áŸá±á¬áºáá±á¬áº JSON áááºáá­á¯ážááŒá
+áºáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>á€ collection áá­á¯ááºáá­á¯ááº elements áá»á¬áž áá«áááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>á€áááºáá­á¯ážáááº á¡áá±á«ááºážááŒá
+áºáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>á€áááºáá­á¯ážáááº á¡áá±á«ááºáž (áá­á¯á·ááá¯ááº) áá¯á ááŒá
+áºáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>á€áááºáá­á¯ážáááº á¡áá¯ááº ááŒá
+áºááá·áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>á€áááºáá­á¯ážáááº á¡áá¯ááº (áá­á¯á·ááá¯ááº) áá¯á ááŒá
+áºáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>á€áááºáá­á¯ážáááº ááŸááºáááºáá±á¬ á¡áá»á­ááºáá¯ááºááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>á€á
+áá¬ážááŸááº áááº áá±áá¬áá±á«ááºááŒá¬ážááŸá¯áá
+áºáá¯ááŒá
+áºáá²á·áááºá á€á
+áá¬ážááŸááºáá­á¯á¡áá¯á¶ážáááŒá¯ááá«á  áá»á±ážáá°ážááŒá¯á á¡ááŒá¬ážá
+áá¬ážááŸááºáá­á¯áá¯á¶ážáá«á</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>á€áááºáá­á¯ážáááº {{ min }} ááŸááºá· {{ max }} ááŒá¬ážááŸá­áááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>á€áááºáá­á¯ážáááº áááºá·áá»áŸá±á¬áºáá±á¬áº hostname ááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>á€ collection ááœááºáá«áá«áááºáá±á¬ elements á¡áá±á¡ááœááºáááº {{ compared_value }} á á
+áá°ááŒá
+áºáááºá·áááºá </target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>á€áááºáá­á¯ážáááº á¡á±á¬ááºáá«ááá·áºáááºáá»ááºáá»á¬ážá¡áááºááŸá¡áááºážáá¯á¶ážáá
+áºáá¯ ááŒááºá·áááºážáá±ážáááºá·áááºá</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>á€ collection á element áá
+áºáá¯á
+á®áááºáááºážááá­á¯ááºáá­á¯ááºááá·áºáááºáá»ááºáá»á¬ážáá­á¯ááŒáá·áºáááºážááá·áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>á€áááºáá­á¯ážáááº áááºá·áá»áŸá±á¬áºáá±á¬áº á¡ááŒááºááŒááºáá­á¯ááºáá¬ááœá±áá»á±ážáááºáá±áá¶áá¶áá«ááº ,International Securities Identification Number (ISIN) ááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>á€áááºáá­á¯ážáááºááŸááºáááºáá±á¬á
+áá¬ážáááºááŒá
+áºááá·áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target state="needs-review-translation">á€áááºáá­á¯ážáááº CSS á¡áá±á¬ááºááŸááºáááºááŸá¯áááŸá­áá«á</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target state="needs-review-translation">á€áááºáá­á¯ážáááº CIDR ááŸááºá
+á¯á¶ááŸááºáááºááŸá¯áááŸá­áá«á</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target state="needs-review-translation">ááœááºáááºáá»ááºááŸá¬áá¯á¶ážá áááºáá­á¯ážáááº {{ min }} ááŸáá·áº {{ max }} ááŒá¬ážááŸá­ááááºá</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target state="needs-review-translation">áá­á¯ááºáá¬áááºáááº á¡ááŸááºááœááºážáááºá áááºá¹áá±á {{ filename_max_length }} áá­á¯á·ááá¯ááº áááºážááá·áºá¡áá±á¡ááœááºááŸá­ááááºá|áá­á¯ááºáá¬áááºáááº á¡ááŸááºááœááºážáááºá áááºá¹áá±á {{ filename_max_length }} áá­á¯á·ááá¯ááº áááºážááá·áºá¡áá±á¡ááœááºááŸá­ááááºá</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target state="needs-review-translation">á
+áá¬ážááŸááºáá­á¯ááºáá¬ááŸá¯áááºážáá«ážáááºá áá­á¯áá­á¯ááºáá¬áá±á¬ á
+áá¬ážááŸááºáá­á¯ áá¯á¶ážáá«á</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target state="needs-review-translation">á€áááºáá­á¯ážááœááº áááºááŸá­ááá·áºáááºááŸá¯á¡ááá·áºááŸ ááœáá·áºáááŒá¯áá¬ážáá±á¬ áá¬ááºáá±á¬ááºáá»á¬ážáá«áááºáááºá</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target state="needs-review-translation">áááŒááºááá±á¬ áá¬ááºáá±á¬ááºáá»á¬ážáá­á¯ áá¯á¶ážááŒááºážáá­á¯ ááœáá·áºáááŒá¯áá«á</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target state="needs-review-translation">ááá°áá®áá±á¬ áá¬ááºáá±á¬ááºáá»á¬ážááŸ áá¶áá«ááºáá»á¬ážáá­á¯ áá±á¬ááŸá±á¬á
+ááºááŒááºážáá­á¯ ááœáá·áºáááŒá¯áá«á</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target state="needs-review-translation">áá¯ááºážáá¬ážáá±á¬ á¡áááºáá±á¬ááºážáá¬ááºáá±á¬ááºáá»á¬ážáá­á¯ áá¯á¶ážááŒááºážáá­á¯ ááœáá·áºáááŒá¯áá«á</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">áá­á¯ááºááœááºážáá­á¯ážááŒááºážáááº áááŸááºáááºáá« ({{ extension }})á ááœáá·áºááŒá¯áá¬ážáá±á¬ áá­á¯ážááŒááºážáá»á¬ážááŸá¬ {{ extensions }} ááŒá
+áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">ááœá±á·ááŸá­áá¬ážáá±á¬ á
+á¬áá¯á¶ážáá¯ááºá
+á¶áá
+áºáááº áááŸááºáááºáá« ({{ detected }})á ááœáá·áºááŒá¯áá¬ážáá±á¬ áá¯ááºá
+á¶áá
+áºáá»á¬ážááŸá¬ {{ encodings }} ááŒá
+áºáááºá</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">á€áááºáá­á¯ážáááº ááŸááºáááºáá±á¬ MAC áá­ááºá
+á¬ ááá¯ááºáá«á</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">á€ URL ááœááº á¡ááŒáá·áºáá¯á¶ážá¡ááá·áºáá­á¯áá­ááºáž áá«áááºáááŸá­áá«á</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.nb.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.nb.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.nb.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="nb" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Verdien mÃ¥ vÃŠre usann.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Verdien mÃ¥ vÃŠre sann.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Verdien skal ha typen {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Verdien skal vÃŠre blank.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Den valgte verdien er ikke gyldig.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Du mÃ¥ velge minst {{ limit }} valg.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Du kan maks velge {{ limit }} valg.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>En eller flere av de oppgitte verdiene er ugyldige.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Dette feltet var ikke forventet.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Dette feltet mangler.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Verdien er ikke en gyldig dato.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Verdien er ikke en gyldig dato/tid.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Verdien er ikke en gyldig e-postadresse.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Filen kunne ikke finnes.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Filen er ikke lesbar.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen er for stor ({{ size }} {{ suffix }}). Tilatte maksimale stÃžrrelse {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mimetypen av filen er ugyldig ({{ type }}). Tilatte mimetyper er {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Verdien mÃ¥ vÃŠre {{ limit }} tegn lang eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Verdien er for lang. Den mÃ¥ ha {{ limit }} tegn eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Verdien mÃ¥ vÃŠre {{ limit }} eller mer.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Verdien er for kort. Den mÃ¥ ha {{ limit }} tegn eller flere.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Verdien kan ikke vÃŠre blank.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Verdien kan ikke vÃŠre tom (null).</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Verdien skal vÃŠre tom (null).</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Verdien er ugyldig.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Verdien er ikke en gyldig tid.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Verdien er ikke en gyldig URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Verdiene skal vÃŠre identiske.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen er for stor. Den maksimale stÃžrrelsen er {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Filen er for stor.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Filen kunne ikke lastes opp.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Verdien skal vÃŠre et gyldig tall.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Denne filen er ikke et gyldig bilde.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Denne verdien er ikke en gyldig IP-adresse.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Verdien er ikke et gyldig sprÃ¥k.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Verdien er ikke en gyldig lokalitet.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Verdien er ikke et gyldig navn pÃ¥ land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Verdien er allerede brukt.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>BildestÃžrrelsen kunne ikke oppdages.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Bildebredden er for stor ({{ width }} piksler). Tillatt maksimumsbredde er {{ max_width }} piksler.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Bildebredden er for liten ({{ width }} piksler). Forventet minimumsbredde er {{ min_width }} piksler.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>BildehÃžyden er for stor ({{ height }} piksler). Tillatt maksimumshÃžyde er {{ max_height }} piksler.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>BildehÃžyden er for liten ({{ height }} piksler). Forventet minimumshÃžyde er {{ min_height }} piksler.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Verdien skal vÃŠre brukerens sitt nÃ¥vÃŠrende passord.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Verdien skal vÃŠre nÃžyaktig {{ limit }} tegn.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Filen var kun delvis opplastet.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ingen fil var lastet opp.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">Ingen midlertidig mappe ble konfigurert i php.ini, eller den konfigurerte mappen eksisterer ikke.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kan ikke skrive midlertidig fil til disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>En PHP-utvidelse forÃ¥rsaket en feil under opplasting.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Denne samlingen mÃ¥ inneholde {{ limit }} element eller flere.|Denne samlingen mÃ¥ inneholde {{ limit }} elementer eller flere.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Denne samlingen mÃ¥ inneholde {{ limit }} element eller fÃŠrre.|Denne samlingen mÃ¥ inneholde {{ limit }} elementer eller fÃŠrre.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Denne samlingen mÃ¥ inneholde nÃžyaktig {{ limit }} element.|Denne samlingen mÃ¥ inneholde nÃžyaktig {{ limit }} elementer.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ugyldig kortnummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Korttypen er ikke stÃžttet eller kortnummeret er ugyldig.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Denne verdien er ikke et gyldig internasjonalt bankkontonummer (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Verdien er ikke en gyldig ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Verdien er ikke en gyldig ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Verdien er hverken en gyldig ISBN-10 eller ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Verdien er ikke en gyldig ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Verdien er ikke gyldig valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre lik {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre stÃžrre enn {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre stÃžrre enn eller lik {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre identisk med {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre mindre enn {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre mindre enn eller lik {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Verdien skal ikke vÃŠre lik {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Verdien skal ikke vÃŠre identisk med {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Bildeforholdet er for stort ({{ ratio }}). Tillatt bildeforhold er maks {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Bildeforholdet er for lite ({{ ratio }}). Forventet bildeforhold er minst {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Bildet er en kvadrat ({{ width }}x{{ height }}px). Kvadratiske bilder er ikke tillatt.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Bildet er i liggende retning ({{ width }}x{{ height }}px). Bilder i liggende retning er ikke tillatt.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Bildet er i stÃ¥ende retning ({{ width }}x{{ height }}px). Bilder i stÃ¥ende retning er ikke tillatt.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Tomme filer er ikke tilatt.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Vertsnavn kunne ikke lÃžses.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Verdien samsvarer ikke med forventet tegnsett {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Denne verdien er ikke en gyldig forretningsidentifikasjonskode (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Feil</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Denne verdien er ikke en gyldig UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre flertall av {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Business Identifier Code (BIC) er ikke tilknyttet en IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Verdien er ikke gyldig JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Samlingen kan kun inneholde unike elementer.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Denne verdien mÃ¥ vÃŠre positiv.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Denne verdien mÃ¥ vÃŠre positiv eller null.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Denne verdien mÃ¥ vÃŠre negativ.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Denne verdien mÃ¥ vÃŠre negativ eller null.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Verdien er ikke en gyldig tidssone.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Dette passordet er lekket i et datainnbrudd, det mÃ¥ ikke tas i bruk. Vennligst bruk et annet passord.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Verdien mÃ¥ vÃŠre mellom {{ min }} og {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Denne verdien er ikke et gyldig vertsnavn.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Antall elementer i denne samlingen bÃžr vÃŠre et multiplum av {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Denne verdien skal tilfredsstille minst en av fÃžlgende begrensninger:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Hvert element i denne samlingen skal tilfredsstille sitt eget sett med begrensninger.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Denne verdien er ikke et gyldig International Securities Identification Number (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Denne verdien skal vÃŠre et gyldig uttrykk.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Denne verdien er ikke en gyldig CSS-farge.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Denne verdien er ikke en gyldig CIDR-notasjon.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Verdien pÃ¥ nettmasken skal vÃŠre mellom {{ min }} og {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target state="needs-review-translation">Filnavnet er for langt. Det bÃžr ha {{ filename_max_length }} tegn eller mindre.|Filnavnet er for langt. Det bÃžr ha {{ filename_max_length }} tegn eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target state="needs-review-translation">Passordstyrken er for lav. Vennligst bruk et sterkere passord.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target state="needs-review-translation">Denne verdien inneholder tegn som ikke er tillatt av gjeldende restriksjonsnivÃ¥.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target state="needs-review-translation">Det er ikke tillatt Ã¥ bruke usynlige tegn.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target state="needs-review-translation">Det er ikke tillatt Ã¥ blande tall fra forskjellige skript.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target state="needs-review-translation">Det er ikke tillatt Ã¥ bruke skjulte overleggskarakterer.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">Filutvidelsen er ugyldig ({{ extension }}). Tillatte utvidelser er {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">Den oppdagede tegnkodingen er ugyldig ({{ detected }}). Tillatte kodinger er {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Denne verdien er ikke en gyldig MAC-adresse.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Denne URL-en mangler et toppnivÃ¥domene.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.nl.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.nl.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.nl.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="nl" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Deze waarde moet onwaar zijn.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Deze waarde moet waar zijn.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Deze waarde moet van het type {{ type }} zijn.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Deze waarde moet leeg zijn.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>De geselecteerde waarde is geen geldige optie.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Selecteer ten minste {{ limit }} optie.|Selecteer ten minste {{ limit }} opties.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Selecteer maximaal {{ limit }} optie.|Selecteer maximaal {{ limit }} opties.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>EÃ©n of meer van de ingegeven waarden zijn ongeldig.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Dit veld werd niet verwacht.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Dit veld ontbreekt.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Deze waarde is geen geldige datum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Deze waarde is geen geldige datum en tijd.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Deze waarde is geen geldig e-mailadres.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Het bestand kon niet gevonden worden.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Het bestand is niet leesbaar.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Het bestand is te groot ({{ size }} {{ suffix }}). De maximale grootte is {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Het mediatype van het bestand is ongeldig ({{ type }}). De toegestane mediatypes zijn {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Deze waarde moet {{ limit }} of minder zijn.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Deze waarde is te lang. Hij mag maximaal {{ limit }} teken bevatten.|Deze waarde is te lang. Hij mag maximaal {{ limit }} tekens bevatten.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Deze waarde moet {{ limit }} of meer zijn.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Deze waarde is te kort. Hij moet tenminste {{ limit }} teken bevatten.|Deze waarde is te kort. Hij moet tenminste {{ limit }} tekens bevatten.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Deze waarde mag niet leeg zijn.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Deze waarde mag niet null zijn.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Deze waarde moet null zijn.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Deze waarde is niet geldig.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Deze waarde is geen geldige tijd.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Deze waarde is geen geldige URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>De twee waarden moeten gelijk zijn.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Het bestand is te groot. De maximale grootte is {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Het bestand is te groot.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Het bestand kon niet worden geÃŒpload.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Deze waarde moet een geldig getal zijn.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Dit bestand is geen geldige afbeelding.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Deze waarde is geen geldig IP-adres.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Deze waarde is geen geldige taal.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Deze waarde is geen geldige landinstelling.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Deze waarde is geen geldig land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Deze waarde wordt al gebruikt.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>De grootte van de afbeelding kon niet bepaald worden.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>De afbeelding is te breed ({{ width }}px). De maximaal breedte is {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>De afbeelding is niet breed genoeg ({{ width }}px). De minimaal verwachte breedte is {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>De afbeelding is te hoog ({{ height }}px). De maximaal hoogte is {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>De afbeelding is niet hoog genoeg ({{ height }}px). De minimaal verwachte hoogte is {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Deze waarde moet het huidige wachtwoord van de gebruiker zijn.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Deze waarde moet exact {{ limit }} teken lang zijn.|Deze waarde moet exact {{ limit }} tekens lang zijn.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Het bestand is slechts gedeeltelijk geÃŒpload.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Er is geen bestand geÃŒpload.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Er is geen tijdelijke map geconfigureerd in php.ini, of de gespecificeerde map bestaat niet.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kan het tijdelijke bestand niet wegschrijven op disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>De upload is mislukt vanwege een PHP-extensie.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Deze collectie moet {{ limit }} element of meer bevatten.|Deze collectie moet {{ limit }} elementen of meer bevatten.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Deze collectie moet {{ limit }} element of minder bevatten.|Deze collectie moet {{ limit }} elementen of minder bevatten.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Deze collectie moet exact {{ limit }} element bevatten.|Deze collectie moet exact {{ limit }} elementen bevatten.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ongeldig creditcardnummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Niet-ondersteund type creditcard of ongeldig nummer.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Deze waarde is geen geldig internationaal bankrekeningnummer (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Deze waarde is geen geldige ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Deze waarde is geen geldige ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Deze waarde is geen geldige ISBN-10 of ISBN-13 waarde.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Deze waarde is geen geldige ISSN waarde.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Deze waarde is geen geldige valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Deze waarde moet gelijk zijn aan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Deze waarde moet groter zijn dan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Deze waarde moet groter dan of gelijk aan {{ compared_value }} zijn.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Deze waarde moet identiek zijn aan {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Deze waarde moet minder zijn dan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Deze waarde moet minder dan of gelijk aan {{ compared_value }} zijn.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Deze waarde mag niet gelijk zijn aan {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Deze waarde mag niet identiek zijn aan {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>De afbeeldingsverhouding is te groot ({{ ratio }}). De maximale verhouding is {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>De afbeeldingsverhouding is te klein ({{ ratio }}). De minimale verhouding is {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>De afbeelding is vierkant ({{ width }}x{{ height }}px). Vierkante afbeeldingen zijn niet toegestaan.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>De afbeelding is liggend ({{ width }}x{{ height }}px). Liggende afbeeldingen zijn niet toegestaan.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>De afbeelding is staand ({{ width }}x{{ height }}px). Staande afbeeldingen zijn niet toegestaan.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Lege bestanden zijn niet toegestaan.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>De hostnaam kon niet worden bepaald.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Deze waarde is niet in de verwachte tekencodering {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Deze waarde is geen geldige zakelijke identificatiecode (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Fout</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Deze waarde is geen geldige UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Deze waarde moet een meervoud van {{ compared_value }} zijn.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Deze bedrijfsidentificatiecode (BIC) is niet gekoppeld aan IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Deze waarde moet geldige JSON zijn.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Deze collectie mag alleen unieke elementen bevatten.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Deze waarde moet positief zijn.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Deze waarde moet positief of gelijk aan nul zijn.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Deze waarde moet negatief zijn.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Deze waarde moet negatief of gelijk aan nul zijn.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Deze waarde is geen geldige tijdzone.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Dit wachtwoord is gelekt vanwege een data-inbreuk, het moet niet worden gebruikt. Kies een ander wachtwoord.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Deze waarde moet zich tussen {{ min }} en {{ max }} bevinden.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Deze waarde is geen geldige hostnaam.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Het aantal elementen van deze collectie moet een veelvoud zijn van {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Deze waarde moet voldoen aan tenminste een van de volgende voorwaarden:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Elk element van deze collectie moet voldoen aan zijn eigen set voorwaarden.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Deze waarde is geen geldig International Securities Identification Number (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Deze waarde moet een geldige expressie zijn.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Deze waarde is geen geldige CSS kleur.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Deze waarde is geen geldige CIDR-notatie.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>De waarde van de netmask moet zich tussen {{ min }} en {{ max }} bevinden.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>De bestandsnaam is te lang. Het moet {{ filename_max_length }} karakter of minder zijn.|De bestandsnaam is te lang. Het moet {{ filename_max_length }} karakters of minder zijn.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Het wachtwoord is niet sterk genoeg. Probeer een sterker wachtwoord.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Deze waarde bevat tekens die niet zijn toegestaan volgens het huidige beperkingsniveau.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Het gebruik van onzichtbare tekens is niet toegestaan.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Het mengen van cijfers uit verschillende schriften is niet toegestaan.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Het gebruik van verborgen overlay-tekens is niet toegestaan.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>De bestandsextensie is ongeldig ({{ extension }}). De toegestane extensies zijn {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>De gedetecteerde karaktercodering is ongeldig ({{ detected }}). De toegestane coderingen zijn {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Deze waarde is geen geldig MAC-adres.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Deze URL mist een top-level domein.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.nn.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.nn.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.nn.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="nn" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Verdien skulle ha vore tom/nei.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Verdien skulla ha vore satt/ja.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Verdien mÃ¥ vere av typen {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Verdien skal vere blank.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Verdien du valde er ikkje gyldig.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Du mÃ¥ gjere minst {{ limit }} val.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Du kan maksimalt gjere {{ limit }} val.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Ein eller fleire av dei opplyste verdiane er ugyldige.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Dette feltet var ikkje forventa.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Dette feltet mangler.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Verdien er ikkje ein gyldig dato.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Verdien er ikkje ein gyldig dato og tid.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Verdien er ikkje ei gyldig e-postadresse.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Fila er ikkje funnen.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Fila kan ikkje lesast.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fila er for stor ({{ size }} {{ suffix }}). Maksimal storleik er {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mime-typen av fila er ugyldig ({{ type }}). Tillatne mime-typar er {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Verdien mÃ¥ vere {{ limit }} eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Verdien er for lang. Den mÃ¥ vere {{ limit }} bokstavar eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Verdien mÃ¥ vere {{ limit }} eller meir.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Verdien er for kort. Den mÃ¥ ha {{ limit }} teikn eller fleire.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Verdien kan ikkje vere blank.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Verdien kan ikkje vere tom (null).</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Verdien mÃ¥ vere tom (null).</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Verdien er ikkje gyldig.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Verdien er ikkje ei gyldig tidseining.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Verdien er ikkje ein gyldig URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Dei to verdiane mÃ¥ vere like.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fila er for stor. Den maksimale storleiken er {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Fila er for stor.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Fila kunne ikkje bli lasta opp.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Verdien mÃ¥ vere eit gyldig tal.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Fila er ikkje eit gyldig bilete.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Denne verdien er ikkje ein gyldig IP-adresse.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Verdien er ikkje eit gyldig sprÃ¥k.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Verdien er ikkje ein gyldig lokalitet (sprÃ¥k/region).</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Verdien er ikkje eit gyldig land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Verdien er allereie i bruk.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Storleiken pÃ¥ biletet kunne ikkje oppdagast.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Biletbreidda er for stor, ({{ width }} pikslar). Tillaten maksimumsbreidde er {{ max_width }} pikslar.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Biletbreidda er for liten, ({{ width }} pikslar). Forventa minimumsbreidde er {{ min_width }} pikslar.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>BilethÃžgda er for stor, ({{ height }} pikslar). Tillaten maksimumshÃžgde er {{ max_height }} pikslar.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>BillethÃžgda er for lÃ¥g, ({{ height }} pikslar). Forventa minimumshÃžgde er {{ min_height }} pikslar.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Verdien mÃ¥ vere brukaren sitt noverande passord.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Verdien mÃ¥ vere nÃžyaktig {{ limit }} teikn.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Fila vart berre delvis lasta opp.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Inga fil vart lasta opp.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">Ingen midlertidig mappe var konfigurert i php.ini, eller den konfigurerte mappa eksisterer ikkje.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kan ikkje skrive fÃžrebels fil til disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Ei PHP-udviding forÃ¥rsaka feil under opplasting.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Denne samlinga mÃ¥ innehalde {{ limit }} element eller meir.|Denne samlinga mÃ¥ innehalde {{ limit }} element eller meir.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Denne samlinga mÃ¥ innehalde {{ limit }} element eller fÃŠrre.|Denne samlinga mÃ¥ innehalde {{ limit }} element eller fÃŠrre.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Denne samlinga mÃ¥ innehalde nÃžyaktig {{ limit }} element.|Denne samlinga mÃ¥ innehalde nÃžyaktig {{ limit }} element.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ugyldig kortnummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Korttypen er ikkje stÃžtta, eller kortnummeret er ugyldig.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Denne verdien er ikkje eit gyldig internasjonalt bankkontonummer (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Verdien er ikkje eit gyldig ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Verdien er ikkje eit gyldig ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Verdien er verken eit gyldig ISBN-10 eller eit gyldig ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Verdien er ikkje eit gyldig ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Verdien er ikkje ein gyldig valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Verdien bÃžr vera eins med {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Verdien bÃžr vera stÃžrre enn {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Verdien bÃžr vera stÃžrre enn eller eins med {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Verdien bÃžr vera eins med {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Verdien bÃžr vera mindre enn {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Verdi bÃžr vera mindre enn eller eins med {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Verdi bÃžr ikkje vera eins med {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Denne verdien bÃžr ikkje vera eins med {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Sideforholdet til biletet er for stort ({{ ratio }}). Sideforholdet kan ikkje vere stÃžrre enn {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Sideforholdet til biletet er for lite ({{ ratio }}). Sideforholdet kan ikkje vere mindre enn {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Biletet er kvadratisk ({{ width }}x{{ height }}px). Kvadratiske bilete er ikkje tillatne.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Biletet er landskapsorientert ({{ width }}x{{ height }}px). Landskapsorienterte bilete er ikkje tillatne.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Biletet er portrettorientert ({{ width }}x{{ height }}px). Portrettorienterte bilete er ikkje tillatne.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Ei tom fil er ikkje tillate.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Verten kunne ikkje finnast.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Verdien stemmer ikkje med forventa {{ charset }} charset.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Denne verdien er ikkje ein gyldig forretningsidentifikasjonskode (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Feil</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Denne verdien er ikkje ein gyldig UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Verdien bÃžr vera eit multipel av {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Denne Business Identifier Code (BIC) er ikkje kopla til IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Verdien bÃžr vera gyldig JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Denne samlinga bÃžr berre innehalda unike element.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Verdien bÃžr vera positiv.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Verdien bÃžr vera anten positiv eller null.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Verdien bÃžr vera negativ.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Verdien bÃžr vera negativ eller null.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Verdien er ikkje ei gyldig tidssone.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Dette passordet har lekt ut ved eit datainnbrot, det fÃ¥r ikkje nyttast. Gje opp eit anna passord.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Denne verdien bÃžr liggje mellom {{ min }} og {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Verdien er ikkje eit gyldig vertsnamn.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Talet pÃ¥ element i denne samlinga bÃžr vera eit multippel av {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Verdien burde oppfylla minst ein av fÃžlgjande avgrensingar:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Kvart element i denne samlinga bÃžr oppfylla sine eigne avgrensingar.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Verdien er ikkje eit gyldig International Securities Identification Number (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Denne verdien skal vÃŠre et gyldig uttrykk.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Denne verdien er ikke en gyldig CSS-farge.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Denne verdien er ikke en gyldig CIDR-notasjon.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Verdien av nettmasken skal vÃŠre mellom {{ min }} og {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target state="needs-review-translation">Filnamnet er for langt. Det bÃžr ha {{ filename_max_length }} teikn eller fÃŠrre.|Filnamnet er for langt. Det bÃžr ha {{ filename_max_length }} teikn eller fÃŠrre.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target state="needs-review-translation">Passordstyrken er for lÃ¥g. Vennligst bruk eit sterkare passord.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target state="needs-review-translation">Denne verdien inneheld teikn som ikkje er tillatne av det gjeldande restriksjonsnivÃ¥et.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target state="needs-review-translation">Det er ikkje tillate Ã¥ bruke usynlege teikn.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target state="needs-review-translation">Det er ikkje tillate Ã¥ blande tal frÃ¥ forskjellige skript.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target state="needs-review-translation">Det er ikkje tillate Ã¥ bruke skjulte overleggsteikn.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">Filutvidinga er ugyldig ({{ extension }}). Tillatne utvidingar er {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">Den oppdaga teiknkodinga er ugyldig ({{ detected }}). Tillatne kodingar er {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Denne verdien er ikkje ein gyldig MAC-adresse.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Denne URL-en manglar eit toppnivÃ¥domene.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.no.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.no.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.no.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="nb" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Verdien mÃ¥ vÃŠre usann.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Verdien mÃ¥ vÃŠre sann.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Verdien skal ha typen {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Verdien skal vÃŠre blank.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Den valgte verdien er ikke gyldig.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Du mÃ¥ velge minst {{ limit }} valg.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Du kan maks velge {{ limit }} valg.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>En eller flere av de oppgitte verdiene er ugyldige.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Dette feltet var ikke forventet.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Dette feltet mangler.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Verdien er ikke en gyldig dato.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Verdien er ikke en gyldig dato/tid.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Verdien er ikke en gyldig e-postadresse.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Filen kunne ikke finnes.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Filen er ikke lesbar.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen er for stor ({{ size }} {{ suffix }}). Tilatte maksimale stÃžrrelse {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mimetypen av filen er ugyldig ({{ type }}). Tilatte mimetyper er {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Verdien mÃ¥ vÃŠre {{ limit }} tegn lang eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Verdien er for lang. Den mÃ¥ ha {{ limit }} tegn eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Verdien mÃ¥ vÃŠre {{ limit }} eller mer.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Verdien er for kort. Den mÃ¥ ha {{ limit }} tegn eller flere.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Verdien kan ikke vÃŠre blank.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Verdien kan ikke vÃŠre tom (null).</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Verdien skal vÃŠre tom (null).</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Verdien er ugyldig.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Verdien er ikke en gyldig tid.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Verdien er ikke en gyldig URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Verdiene skal vÃŠre identiske.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen er for stor. Den maksimale stÃžrrelsen er {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Filen er for stor.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Filen kunne ikke lastes opp.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Verdien skal vÃŠre et gyldig tall.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Denne filen er ikke et gyldig bilde.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Denne verdien er ikke en gyldig IP-adresse.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Verdien er ikke et gyldig sprÃ¥k.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Verdien er ikke en gyldig lokalitet.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Verdien er ikke et gyldig navn pÃ¥ land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Verdien er allerede brukt.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>BildestÃžrrelsen kunne ikke oppdages.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Bildebredden er for stor ({{ width }} piksler). Tillatt maksimumsbredde er {{ max_width }} piksler.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Bildebredden er for liten ({{ width }} piksler). Forventet minimumsbredde er {{ min_width }} piksler.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>BildehÃžyden er for stor ({{ height }} piksler). Tillatt maksimumshÃžyde er {{ max_height }} piksler.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>BildehÃžyden er for liten ({{ height }} piksler). Forventet minimumshÃžyde er {{ min_height }} piksler.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Verdien skal vÃŠre brukerens sitt nÃ¥vÃŠrende passord.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Verdien skal vÃŠre nÃžyaktig {{ limit }} tegn.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Filen var kun delvis opplastet.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ingen fil var lastet opp.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">Ingen midlertidig mappe ble konfigurert i php.ini, eller den konfigurerte mappen eksisterer ikke.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kan ikke skrive midlertidig fil til disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>En PHP-utvidelse forÃ¥rsaket en feil under opplasting.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Denne samlingen mÃ¥ inneholde {{ limit }} element eller flere.|Denne samlingen mÃ¥ inneholde {{ limit }} elementer eller flere.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Denne samlingen mÃ¥ inneholde {{ limit }} element eller fÃŠrre.|Denne samlingen mÃ¥ inneholde {{ limit }} elementer eller fÃŠrre.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Denne samlingen mÃ¥ inneholde nÃžyaktig {{ limit }} element.|Denne samlingen mÃ¥ inneholde nÃžyaktig {{ limit }} elementer.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ugyldig kortnummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Korttypen er ikke stÃžttet eller kortnummeret er ugyldig.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Denne verdien er ikke et gyldig internasjonalt bankkontonummer (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Verdien er ikke en gyldig ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Verdien er ikke en gyldig ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Verdien er hverken en gyldig ISBN-10 eller ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Verdien er ikke en gyldig ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Verdien er ikke gyldig valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre lik {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre stÃžrre enn {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre stÃžrre enn eller lik {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre identisk med {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre mindre enn {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre mindre enn eller lik {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Verdien skal ikke vÃŠre lik {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Verdien skal ikke vÃŠre identisk med {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Bildeforholdet er for stort ({{ ratio }}). Tillatt bildeforhold er maks {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Bildeforholdet er for lite ({{ ratio }}). Forventet bildeforhold er minst {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Bildet er en kvadrat ({{ width }}x{{ height }}px). Kvadratiske bilder er ikke tillatt.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Bildet er i liggende retning ({{ width }}x{{ height }}px). Bilder i liggende retning er ikke tillatt.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Bildet er i stÃ¥ende retning ({{ width }}x{{ height }}px). Bilder i stÃ¥ende retning er ikke tillatt.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Tomme filer er ikke tilatt.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Vertsnavn kunne ikke lÃžses.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Verdien samsvarer ikke med forventet tegnsett {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Denne verdien er ikke en gyldig forretningsidentifikasjonskode (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Feil</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Denne verdien er ikke en gyldig UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Verdien skal vÃŠre flertall av {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Business Identifier Code (BIC) er ikke tilknyttet en IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Verdien er ikke gyldig JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Samlingen kan kun inneholde unike elementer.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Denne verdien mÃ¥ vÃŠre positiv.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Denne verdien mÃ¥ vÃŠre positiv eller null.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Denne verdien mÃ¥ vÃŠre negativ.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Denne verdien mÃ¥ vÃŠre negativ eller null.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Verdien er ikke en gyldig tidssone.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Dette passordet er lekket i et datainnbrudd, det mÃ¥ ikke tas i bruk. Vennligst bruk et annet passord.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Verdien mÃ¥ vÃŠre mellom {{ min }} og {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Denne verdien er ikke et gyldig vertsnavn.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Antall elementer i denne samlingen bÃžr vÃŠre et multiplum av {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Denne verdien skal tilfredsstille minst en av fÃžlgende begrensninger:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Hvert element i denne samlingen skal tilfredsstille sitt eget sett med begrensninger.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Denne verdien er ikke et gyldig International Securities Identification Number (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Denne verdien skal vÃŠre et gyldig uttrykk.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Denne verdien er ikke en gyldig CSS-farge.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Denne verdien er ikke en gyldig CIDR-notasjon.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Verdien pÃ¥ nettmasken skal vÃŠre mellom {{ min }} og {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target state="needs-review-translation">Filnavnet er for langt. Det bÃžr ha {{ filename_max_length }} tegn eller mindre.|Filnavnet er for langt. Det bÃžr ha {{ filename_max_length }} tegn eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target state="needs-review-translation">Passordstyrken er for lav. Vennligst bruk et sterkere passord.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target state="needs-review-translation">Denne verdien inneholder tegn som ikke er tillatt av gjeldende restriksjonsnivÃ¥.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target state="needs-review-translation">Det er ikke tillatt Ã¥ bruke usynlige tegn.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target state="needs-review-translation">Det er ikke tillatt Ã¥ blande tall fra forskjellige skript.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target state="needs-review-translation">Det er ikke tillatt Ã¥ bruke skjulte overleggskarakterer.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">Filutvidelsen er ugyldig ({{ extension }}). Tillatte utvidelser er {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">Den oppdagede tegnkodingen er ugyldig ({{ detected }}). Tillatte kodinger er {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Denne verdien er ikke en gyldig MAC-adresse.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Denne URL-en mangler et toppnivÃ¥domene.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.pl.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.pl.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.pl.xlf	(revision 8435)
@@ -0,0 +1,492 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="pl" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Ta wartoÅÄ powinna byÄ faÅszem.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Ta wartoÅÄ powinna byÄ prawdÄ
+.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ta wartoÅÄ powinna byÄ typu {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ta wartoÅÄ powinna byÄ pusta.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Ta wartoÅÄ powinna byÄ jednÄ
+ z podanych opcji.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>PowinieneÅ wybraÄ co najmniej {{ limit }} opcjÄ.|PowinieneÅ wybraÄ co najmniej {{ limit }} opcje.|PowinieneÅ wybraÄ co najmniej {{ limit }} opcji.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>PowinieneÅ wybraÄ maksymalnie {{ limit }} opcjÄ.|PowinieneÅ wybraÄ maksymalnie {{ limit }} opcje.|PowinieneÅ wybraÄ maksymalnie {{ limit }} opcji.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Jedna lub wiÄcej z podanych wartoÅci jest nieprawidÅowa.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Tego pola siÄ nie spodziewano.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Tego pola brakuje.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowÄ
+ datÄ
+.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowÄ
+ datÄ
+ i czasem.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym adresem email.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Plik nie mÃ³gÅ zostaÄ odnaleziony.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Nie moÅŒna odczytaÄ pliku.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Plik jest za duÅŒy ({{ size }} {{ suffix }}). Maksymalny dozwolony rozmiar to {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>NieprawidÅowy typ mime pliku ({{ type }}). Dozwolone typy mime to {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ta wartoÅÄ powinna wynosiÄ {{ limit }} lub mniej.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ta wartoÅÄ jest zbyt dÅuga. Powinna mieÄ {{ limit }} lub mniej znakÃ³w.|Ta wartoÅÄ jest zbyt dÅuga. Powinna mieÄ {{ limit }} lub mniej znakÃ³w.|Ta wartoÅÄ jest zbyt dÅuga. Powinna mieÄ {{ limit }} lub mniej znakÃ³w.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ta wartoÅÄ powinna wynosiÄ {{ limit }} lub wiÄcej.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ta wartoÅÄ jest zbyt krÃ³tka. Powinna mieÄ {{ limit }} lub wiÄcej znakÃ³w.|Ta wartoÅÄ jest zbyt krÃ³tka. Powinna mieÄ {{ limit }} lub wiÄcej znakÃ³w.|Ta wartoÅÄ jest zbyt krÃ³tka. Powinna mieÄ {{ limit }} lub wiÄcej znakÃ³w.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ta wartoÅÄ nie powinna byÄ pusta.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ta wartoÅÄ nie powinna byÄ nullem.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ta wartoÅÄ powinna byÄ nullem.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ta wartoÅÄ jest nieprawidÅowa.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym czasem.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym adresem URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Obie wartoÅci powinny byÄ rÃ³wne.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Plik jest za duÅŒy. Maksymalny dozwolony rozmiar to {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Plik jest za duÅŒy.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Plik nie mÃ³gÅ byÄ wgrany.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ta wartoÅÄ powinna byÄ prawidÅowÄ
+ liczbÄ
+.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ten plik nie jest obrazem.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym adresem IP.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym jÄzykiem.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowÄ
+ lokalizacjÄ
+.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowÄ
+ nazwÄ
+ kraju.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ta wartoÅÄ jest juÅŒ wykorzystywana.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Nie moÅŒna wykryÄ rozmiaru obrazka.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>SzerokoÅÄ obrazka jest zbyt duÅŒa ({{ width }}px). Maksymalna dopuszczalna szerokoÅÄ to {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>SzerokoÅÄ obrazka jest zbyt maÅa ({{ width }}px). Oczekiwana minimalna szerokoÅÄ to {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>WysokoÅÄ obrazka jest zbyt duÅŒa ({{ height }}px). Maksymalna dopuszczalna wysokoÅÄ to {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>WysokoÅÄ obrazka jest zbyt maÅa ({{ height }}px). Oczekiwana minimalna wysokoÅÄ to {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ta wartoÅÄ powinna byÄ aktualnym hasÅem uÅŒytkownika.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ta wartoÅÄ powinna mieÄ dokÅadnie {{ limit }} znak.|Ta wartoÅÄ powinna mieÄ dokÅadnie {{ limit }} znaki.|Ta wartoÅÄ powinna mieÄ dokÅadnie {{ limit }} znakÃ³w.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Plik zostaÅ wgrany tylko czÄÅciowo.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Å»aden plik nie zostaÅ wgrany.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Nie skonfigurowano folderu tymczasowego w php.ini lub skonfigurowany folder nie istnieje.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Nie moÅŒna zapisaÄ pliku tymczasowego na dysku.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Rozszerzenie PHP spowodowaÅo bÅÄ
+d podczas wgrywania.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ten zbiÃ³r powinien zawieraÄ {{ limit }} lub wiÄcej elementÃ³w.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ten zbiÃ³r powinien zawieraÄ {{ limit }} lub mniej elementÃ³w.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ten zbiÃ³r powinien zawieraÄ dokÅadnie {{ limit }} element.|Ten zbiÃ³r powinien zawieraÄ dokÅadnie {{ limit }} elementy.|Ten zbiÃ³r powinien zawieraÄ dokÅadnie {{ limit }} elementÃ³w.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>NieprawidÅowy numer karty.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>NieobsÅugiwany rodzaj karty lub nieprawidÅowy numer karty.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym MiÄdzynarodowym Numerem Rachunku Bankowego (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym numerem ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym numerem ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym numerem ISBN-10 ani ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym numerem ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowÄ
+ walutÄ
+.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ta wartoÅÄ powinna byÄ rÃ³wna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ta wartoÅÄ powinna byÄ wiÄksza niÅŒ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ta wartoÅÄ powinna byÄ wiÄksza bÄ
+dÅº rÃ³wna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ta wartoÅÄ powinna byÄ identycznego typu {{ compared_value_type }} oraz wartoÅci {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ta wartoÅÄ powinna byÄ mniejsza niÅŒ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ta wartoÅÄ powinna byÄ mniejsza bÄ
+dÅº rÃ³wna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ta wartoÅÄ nie powinna byÄ rÃ³wna {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ta wartoÅÄ nie powinna byÄ identycznego typu {{ compared_value_type }} oraz wartoÅci {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Proporcje obrazu sÄ
+ zbyt duÅŒe ({{ ratio }}). Maksymalne proporcje to {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Proporcje obrazu sÄ
+ zbyt maÅe ({{ ratio }}). Minimalne proporcje to {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Obraz jest kwadratem ({{ width }}x{{ height }}px). Kwadratowe obrazy nie sÄ
+ akceptowane.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Obraz jest panoramiczny ({{ width }}x{{ height }}px). Panoramiczne zdjÄcia nie sÄ
+ akceptowane.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Obraz jest portretowy ({{ width }}x{{ height }}px). Portretowe zdjÄcia nie sÄ
+ akceptowane.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Plik nie moÅŒe byÄ pusty.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Nazwa hosta nie zostaÅa rozpoznana.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ta wartoÅÄ nie pasuje do oczekiwanego zestawu znakÃ³w {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym Kodem IdentyfikujÄ
+cym Bank (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>BÅÄ
+d</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ta wartoÅÄ powinna byÄ wielokrotnoÅciÄ
+ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ten kod BIC (Business Identifier Code) nie jest powiÄ
+zany z miÄdzynarodowym numerem rachunku bankowego (IBAN) {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Ta wartoÅÄ powinna byÄ prawidÅowym formatem JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ten zbiÃ³r powinien zawieraÄ tylko unikalne elementy.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ta wartoÅÄ powinna byÄ dodatnia.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ta wartoÅÄ powinna byÄ dodatnia lub rÃ³wna zero.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ta wartoÅÄ powinna byÄ ujemna.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ta wartoÅÄ powinna byÄ ujemna lub rÃ³wna zero.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowÄ
+ strefÄ
+ czasowÄ
+.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>To hasÅo wyciekÅo w wyniku naruszenia danych i nie moÅŒe byÄ uÅŒyte. ProszÄ uÅŒyÄ innego hasÅa.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ta wartoÅÄ powinna byÄ pomiÄdzy {{ min }} a {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowÄ
+ nazwÄ
+ hosta.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Liczba elementÃ³w w tym zbiorze powinna byÄ wielokrotnoÅciÄ
+ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Ta wartoÅÄ powinna speÅniaÄ co najmniej jednÄ
+ z nastÄpujÄ
+cych reguÅ:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>KaÅŒdy element w tym zbiorze powinien speÅniaÄ wÅasny zestaw reguÅ.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym MiÄdzynarodowym Numerem Identyfikacyjnym PapierÃ³w WartoÅciowych (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Ta wartoÅÄ powinna byÄ prawidÅowym wyraÅŒeniem.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym kolorem CSS.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowÄ
+ notacjÄ
+ CIDR.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>WartoÅÄ maski podsieci powinna byÄ pomiÄdzy {{ min }} i {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Nazwa pliku jest za dÅuga. Powinna mieÄ {{ filename_max_length }} znak lub mniej.|Nazwa pliku jest za dÅuga. Powinna mieÄ {{ filename_max_length }} znakÃ³w lub mniej.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>SiÅa hasÅa jest zbyt niska. UÅŒyj mocniejszego hasÅa.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Ta wartoÅÄ zawiera znaki, ktÃ³re nie sÄ
+ dozwolone przez aktualny poziom ograniczeÅ.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>UÅŒywanie niewidzialnych znakÃ³w jest niedozwolone.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Mieszanie liczb z rÃ³ÅŒnych skryptÃ³w jest niedozwolone.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>UÅŒywanie ukrytych znakÃ³w nakÅadki jest niedozwolone.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Rozszerzenie pliku jest nieprawidÅowe ({{ extension }}). Dozwolone rozszerzenia to {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Wykryte kodowanie znakÃ³w ({{ detected }}) jest nieprawidÅowe. Dozwolone kodowania to {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Ta wartoÅÄ nie jest prawidÅowym adresem MAC.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Podany URL nie zawiera domeny najwyÅŒszego poziomu.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target>Podana wartoÅÄ jest zbyt krÃ³tka. Powinna zawieraÄ co najmniej jedno sÅowo.|Podana wartoÅÄ jest zbyt krÃ³tka. Powinna zawieraÄ co najmniej {{ min }} sÅÃ³w.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target>Podana wartoÅÄ jest zbyt dÅuga. Powinna zawieraÄ jedno sÅowo.|Podana wartoÅÄ jest zbyt dÅuga. Powinna zawieraÄ {{ max }} sÅÃ³w lub mniej.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.pt.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.pt.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.pt.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="pt" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Este valor deveria ser falso.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Este valor deveria ser verdadeiro.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Este valor deveria ser do tipo {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Este valor deveria ser vazio.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>O valor selecionado nÃ£o Ã© uma opÃ§Ã£o vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>VocÃª deveria selecionar {{ limit }} opÃ§Ã£o no mÃ­nimo.|VocÃª deveria selecionar {{ limit }} opÃ§Ãµes no mÃ­nimo.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>VocÃª deve selecionar, no mÃ¡ximo {{ limit }} opÃ§Ã£o.|VocÃª deve selecionar, no mÃ¡ximo {{ limit }} opÃ§Ãµes.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Um ou mais dos valores introduzidos nÃ£o sÃ£o vÃ¡lidos.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Este campo nÃ£o era esperado.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Este campo estÃ¡ faltando.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Este valor nÃ£o Ã© uma data vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Este valor nÃ£o Ã© uma data-hora vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Este valor nÃ£o Ã© um endereÃ§o de e-mail vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>O arquivo nÃ£o pÃŽde ser encontrado.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>O arquivo nÃ£o pÃŽde ser lido.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>O arquivo Ã© muito grande ({{ size }} {{ suffix }}). O tamanho mÃ¡ximo permitido Ã© de {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>O tipo mime do arquivo Ã© invÃ¡lido ({{ type }}). Os tipos mime permitidos sÃ£o {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Este valor deveria ser {{ limit }} ou menor.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>O valor Ã© muito longo. Deveria ter {{ limit }} caracteres ou menos.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Este valor deveria ser {{ limit }} ou mais.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>O valor Ã© muito curto. Deveria de ter {{ limit }} caractere ou mais.|O valor Ã© muito curto. Deveria de ter {{ limit }} caracteres ou mais.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Este valor nÃ£o deveria ser vazio.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Este valor nÃ£o deveria ser nulo.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Este valor deveria ser nulo.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Este valor nÃ£o Ã© vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Este valor nÃ£o Ã© uma hora vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Este valor nÃ£o Ã© uma URL vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Os dois valores deveriam ser iguais.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>O arquivo Ã© muito grande. O tamanho mÃ¡ximo permitido Ã© de {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>O arquivo Ã© muito grande.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>NÃ£o foi possÃ­vel enviar o arquivo.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Este valor deveria ser um nÃºmero vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Este arquivo nÃ£o Ã© uma imagem.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Este valor nÃ£o Ã© um endereÃ§o IP vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Este valor nÃ£o Ã© uma linguagem vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Este valor nÃ£o Ã© uma localidade vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Este valor nÃ£o Ã© um paÃ­s vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Este valor jÃ¡ estÃ¡ a ser usado.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>O tamanho da imagem nÃ£o foi detectado.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>A largura da imagem ({{ width }}px) Ã© muito grande. A largura mÃ¡xima da imagem Ã©: {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>A largura da imagem ({{ width }}px) Ã© muito pequena. A largura mÃ­nima da imagem Ã© de: {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>A altura da imagem ({{ height }}px) Ã© muito grande. A altura mÃ¡xima da imagem Ã© de: {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>A altura da imagem ({{ height }}px) Ã© muito pequena. A altura mÃ­nima da imagem Ã© de: {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Este valor deveria ser a senha atual do usuÃ¡rio.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Este valor deve possuir exatamente {{ limit }} caractere.|Este valor deve possuir exatamente {{ limit }} caracteres.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>SÃ³ foi enviada uma parte do arquivo.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nenhum arquivo foi enviado.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Nenhuma pasta temporÃ¡ria foi configurada no php.ini, ou a pasta configurada nÃ£o existe.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>NÃ£o foi possÃ­vel escrever os arquivos temporÃ¡rios no disco.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Uma extensÃ£o PHP causou a falha no envio.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Esta coleÃ§Ã£o deve conter {{ limit }} elemento ou mais.|Esta coleÃ§Ã£o deve conter {{ limit }} elementos ou mais.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Esta coleÃ§Ã£o deve conter {{ limit }} elemento ou menos.|Esta coleÃ§Ã£o deve conter {{ limit }} elementos ou menos.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Esta coleÃ§Ã£o deve conter exatamente {{ limit }} elemento.|Esta coleÃ§Ã£o deve conter exatamente {{ limit }} elementos.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>NÃºmero de cartÃ£o invÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipo de cartÃ£o nÃ£o suportado ou nÃºmero de cartÃ£o invÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Este valor nÃ£o Ã© um NÃºmero de Conta BancÃ¡ria Internacional (IBAN) vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Este valor nÃ£o Ã© um ISBN-10 vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Este valor nÃ£o Ã© um ISBN-13 vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Este valor nÃ£o Ã© um ISBN-10 ou ISBN-13 vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Este valor nÃ£o Ã© um ISSN vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Este nÃ£o Ã© um valor monetÃ¡rio vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Este valor deve ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Este valor deve ser superior a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Este valor deve ser igual ou superior a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor deve ser idÃªntico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Este valor deve ser inferior a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Este valor deve ser igual ou inferior a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Este valor nÃ£o deve ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor nÃ£o deve ser idÃªntico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>O formato da imagem Ã© muito grande ({{ ratio }}). O formato mÃ¡ximo Ã© {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>O formato da imagem Ã© muito pequeno ({{ ratio }}). O formato mÃ­nimo esperado Ã© {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>A imagem Ã© um quadrado ({{ width }}x{{ height }}px). Imagens quadradas nÃ£o sÃ£o permitidas.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>A imagem estÃ¡ em orientaÃ§Ã£o de paisagem ({{ width }}x{{ height }}px). Imagens orientadas em paisagem nÃ£o sÃ£o permitidas.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>A imagem estÃ¡ em orientaÃ§Ã£o de retrato ({{ width }}x{{ height }}px). Imagens orientadas em retrato nÃ£o sÃ£o permitidas.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Um arquivo vazio nÃ£o Ã© permitido.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>O host nÃ£o pode ser resolvido.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Este valor nÃ£o corresponde ao conjunto de caracteres {{ charset }} esperado.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Este valor nÃ£o Ã© um CÃ³digo de IdentificaÃ§Ã£o de NegÃ³cio (BIC) vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Erro</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Este valor nÃ£o Ã© um UUID vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Este valor deve ser um mÃºltiplo de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>O CÃ³digo de IdentificaÃ§Ã£o de Empresa (BIC) nÃ£o estÃ¡ associado ao IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Este valor deve ser um JSON vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Esta coleÃ§Ã£o deve conter sÃ³ elementos Ãºnicos.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Este valor deve ser positivo.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Este valor deve ser superior ou igual a zero.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Este valor deve ser negativo.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Este valor deve ser inferior ou igual a zero.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Este valor nÃ£o Ã© um fuso horÃ¡rio vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Esta senha foi divulgada durante um vazamento de dados, nÃ£o deve ser usada de novamente. Por favor usar uma senha outra.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Este valor deve estar entre {{ min }} e {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Este valor nÃ£o Ã© um nome de host vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>O nÃºmero de elementos desta coleÃ§Ã£o deve ser um mÃºltiplo de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Este valor deve satisfazer pelo menos uma das seguintes restriÃ§Ãµes:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Cada elemento desta coleÃ§Ã£o deve satisfazer o seu prÃ³prio conjunto de restriÃ§Ãµes.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Este valor nÃ£o Ã© um NÃºmero Internacional de IdentificaÃ§Ã£o de SeguranÃ§a (ISIN) vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Este valor deve ser uma expressÃ£o vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Este valor nÃ£o Ã© uma cor de CSS vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Este valor nÃ£o Ã© uma notaÃ§Ã£o CIDR vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>O valor da mÃ¡scara de rede deve estar entre {{ min }} e {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>O nome do arquivo Ã© muito grande. Deveria ter {{ filename_max_length }} caractere ou menos.|O nome do arquivo Ã© muito grande. Deveria ter {{ filename_max_length }} caracteres ou menos.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>A forÃ§a da senha Ã© muito baixa. Por favor utilize uma senha mais forte.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Este valor contÃ©m caracteres que nÃ£o sÃ£o permitidos pelo nÃ­vel de restriÃ§Ã£o atual.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>NÃ£o Ã© permitido usar caracteres invisÃ­veis.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>NÃ£o Ã© permitido misturar nÃºmeros de scripts diferentes.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>NÃ£o Ã© permitido usar caracteres de sobreposiÃ§Ã£o ocultos.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>A extensÃ£o do arquivo Ã© invÃ¡lida ({{ extension }}). As extensÃµes permitidas sÃ£o {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>A codificaÃ§Ã£o de carateres detectada Ã© invÃ¡lida ({{ detected }}). As codificaÃ§Ãµes permitidas sÃ£o {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Este valor nÃ£o Ã© um endereÃ§o MAC vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Esta URL estÃ¡ faltando o domÃ­nio de nÃ­vel superior.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.pt_BR.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.pt_BR.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.pt_BR.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="pt-BR" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Este valor deve ser falso.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Este valor deve ser verdadeiro.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Este valor deve ser do tipo {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Este valor deve ser vazio.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>O valor selecionado nÃ£o Ã© uma opÃ§Ã£o vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>VocÃª deve selecionar, no mÃ­nimo, {{ limit }} opÃ§Ã£o.|VocÃª deve selecionar, no mÃ­nimo, {{ limit }} opÃ§Ãµes.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>VocÃª deve selecionar, no mÃ¡ximo, {{ limit }} opÃ§Ã£o.|VocÃª deve selecionar, no mÃ¡ximo, {{ limit }} opÃ§Ãµes.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Um ou mais valores informados sÃ£o invÃ¡lidos.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Este campo nÃ£o era esperado.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Este campo estÃ¡ ausente.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Este valor nÃ£o Ã© uma data vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Este valor nÃ£o Ã© uma data e hora vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Este valor nÃ£o Ã© um endereÃ§o de e-mail vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>O arquivo nÃ£o foi encontrado.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>O arquivo nÃ£o pode ser lido.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>O arquivo Ã© muito grande ({{ size }} {{ suffix }}). O tamanho mÃ¡ximo permitido Ã© {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>O tipo mime do arquivo Ã© invÃ¡lido ({{ type }}). Os tipos mime permitidos sÃ£o {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Este valor deve ser {{ limit }} ou menos.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Este valor Ã© muito longo. Deve ter {{ limit }} caractere ou menos.|Este valor Ã© muito longo. Deve ter {{ limit }} caracteres ou menos.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Este valor deve ser {{ limit }} ou mais.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Este valor Ã© muito curto. Deve ter {{ limit }} caractere ou mais.|Este valor Ã© muito curto. Deve ter {{ limit }} caracteres ou mais.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Este valor nÃ£o deve ser vazio.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Este valor nÃ£o deve ser nulo.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Este valor deve ser nulo.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Este valor nÃ£o Ã© vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Este valor nÃ£o Ã© uma hora vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Este valor nÃ£o Ã© uma URL vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Os dois valores devem ser iguais.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>O arquivo Ã© muito grande. O tamanho mÃ¡ximo permitido Ã© de {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>O arquivo Ã© muito grande.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>O arquivo nÃ£o pode ser enviado.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Este valor deve ser um nÃºmero vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Este arquivo nÃ£o Ã© uma imagem vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Este valor nÃ£o Ã© um endereÃ§o IP vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Este valor nÃ£o Ã© um idioma vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Este valor nÃ£o Ã© uma localidade vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Este valor nÃ£o Ã© um paÃ­s vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Este valor jÃ¡ estÃ¡ sendo usado.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>O tamanho da imagem nÃ£o pode ser detectado.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>A largura da imagem Ã© muito grande ({{ width }}px). A largura mÃ¡xima permitida Ã© de {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>A largura da imagem Ã© muito pequena ({{ width }}px). A largura mÃ­nima esperada Ã© de {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>A altura da imagem Ã© muito grande ({{ height }}px). A altura mÃ¡xima permitida Ã© de {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>A altura da imagem Ã© muito pequena ({{ height }}px). A altura mÃ­nima esperada Ã© de {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Este valor deve ser a senha atual do usuÃ¡rio.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Este valor deve ter exatamente {{ limit }} caractere.|Este valor deve ter exatamente {{ limit }} caracteres.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>O arquivo foi enviado apenas parcialmente.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nenhum arquivo foi enviado.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Nenhum diretÃ³rio temporÃ¡rio foi configurado no php.ini, ou o diretÃ³rio configurado nÃ£o existe.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>NÃ£o foi possÃ­vel escrever o arquivo temporÃ¡rio no disco.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Uma extensÃ£o PHP fez com que o envio falhasse.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Esta coleÃ§Ã£o deve conter {{ limit }} elemento ou mais.|Esta coleÃ§Ã£o deve conter {{ limit }} elementos ou mais.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Esta coleÃ§Ã£o deve conter {{ limit }} elemento ou menos.|Esta coleÃ§Ã£o deve conter {{ limit }} elementos ou menos.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Esta coleÃ§Ã£o deve conter exatamente {{ limit }} elemento.|Esta coleÃ§Ã£o deve conter exatamente {{ limit }} elementos.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>NÃºmero de cartÃ£o invÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipo de cartÃ£o nÃ£o suportado ou nÃºmero de cartÃ£o invÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Este valor nÃ£o Ã© um NÃºmero de Conta BancÃ¡ria Internacional (IBAN) vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Este valor nÃ£o Ã© um ISBN-10 vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Este valor nÃ£o Ã© um ISBN-13 vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Este valor nÃ£o Ã© um ISBN-10 e nem um ISBN-13 vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Este valor nÃ£o Ã© um ISSN vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Este nÃ£o Ã© um valor monetÃ¡rio vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Este valor deve ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Este valor deve ser maior que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Este valor deve ser maior ou igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor deve ser idÃªntico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Este valor deve ser menor que {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Este valor deve ser menor ou igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Este valor nÃ£o deve ser igual a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Este valor nÃ£o deve ser idÃªntico a {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>A proporÃ§Ã£o da imagem Ã© muito grande ({{ ratio }}). A proporÃ§Ã£o mÃ¡xima permitida Ã© {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>A proporÃ§Ã£o da imagem Ã© muito pequena ({{ ratio }}). A proporÃ§Ã£o mÃ­nima esperada Ã© {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>A imagem estÃ¡ num formato quadrado ({{ width }}x{{ height }}px). Imagens com formato quadrado nÃ£o sÃ£o permitidas.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>A imagem estÃ¡ orientada Ã  paisagem ({{ width }}x{{ height }}px). Imagens orientadas Ã  paisagem nÃ£o sÃ£o permitidas.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>A imagem estÃ¡ orientada ao retrato ({{ width }}x{{ height }}px). Imagens orientadas ao retrato nÃ£o sÃ£o permitidas.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Arquivo vazio nÃ£o Ã© permitido.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>O host nÃ£o pÃŽde ser resolvido.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Este valor nÃ£o corresponde ao charset {{ charset }} esperado.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Este valor nÃ£o Ã© um CÃ³digo de IdentificaÃ§Ã£o de NegÃ³cios (BIC) vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Erro</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Este valor nÃ£o Ã© um UUID vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Este valor deve ser mÃºltiplo de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Este CÃ³digo Identificador BancÃ¡rio (BIC) nÃ£o estÃ¡ associado ao IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Este valor deve ser um JSON vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Esta coleÃ§Ã£o deve conter somente elementos Ãºnicos.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Este valor deve ser positivo.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Este valor deve ser positivo ou zero.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Este valor deve ser negativo.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Este valor deve ser negativo ou zero.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Este valor nÃ£o representa um fuso horÃ¡rio vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Esta senha foi divulgada num vazamento de dados e nÃ£o deve ser utilizada. Por favor, utilize outra senha.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Este valor deve estar entre {{ min }} e {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Este valor nÃ£o Ã© um nome de host vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>O nÃºmero de elementos desta coleÃ§Ã£o deve ser um mÃºltiplo de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Este valor deve satisfazer pelo menos uma das seguintes restriÃ§Ãµes:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Cada elemento desta coleÃ§Ã£o deve satisfazer seu prÃ³prio grupo de restriÃ§Ãµes.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Este valor nÃ£o Ã© um NÃºmero de IdentificaÃ§Ã£o de TÃ­tulos Internacionais (ISIN) vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Este valor deve ser uma expressÃ£o vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Este valor nÃ£o Ã© uma cor CSS vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Este valor nÃ£o Ã© uma notaÃ§Ã£o CIDR vÃ¡lida.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>O valor da mÃ¡scara de rede deve estar entre {{ min }} e {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>O nome do arquivo Ã© muito longo. Deve ter {{ filename_max_length }} caractere ou menos.|O nome do arquivo Ã© muito longo. Deve ter {{ filename_max_length }} caracteres ou menos.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>A forÃ§a da senha Ã© muito baixa. Por favor, use uma senha mais forte.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Este valor contÃ©m caracteres que nÃ£o sÃ£o permitidos pelo nÃ­vel de restriÃ§Ã£o atual.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>O uso de caracteres invisÃ­veis nÃ£o Ã© permitido.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Misturar nÃºmeros de scripts diferentes nÃ£o Ã© permitido.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>O uso de caracteres de sobreposiÃ§Ã£o ocultos nÃ£o Ã© permitido.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>A extensÃ£o do arquivo Ã© invÃ¡lida ({{ extension }}). As extensÃµes permitidas sÃ£o {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>A codificaÃ§Ã£o de caracteres detectada Ã© invÃ¡lida ({{ detected }}). As codificaÃ§Ãµes permitidas sÃ£o {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Este valor nÃ£o Ã© um endereÃ§o MAC vÃ¡lido.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Esta URL estÃ¡ faltando o domÃ­nio de nÃ­vel superior.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ro.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ro.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ro.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="ro" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>AceastÄ valoare ar trebui sÄ fie falsÄ (false).</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>AceastÄ valoare ar trebui sÄ fie adevÄratÄ (true).</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>AceastÄ valoare ar trebui sÄ fie de tipul {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>AceastÄ valoare ar trebui sa fie goalÄ.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Valoarea selectatÄ nu este o opÈiune validÄ.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Trebuie sÄ selectaÈi cel puÈin {{ limit }} opÈiune.|Trebuie sÄ selectaÈi cel puÈin {{ limit }} opÈiuni.|Trebuie sÄ selectaÈi cel puÈin {{ limit }} de opÈiuni</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Trebuie sÄ selectaÈi cel mult {{ limit }} opÈiune.|Trebuie sÄ selectaÈi cel mult {{ limit }} opÈiuni.|Trebuie sÄ selectaÈi cel mult {{ limit }} de opÈiuni.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Una sau mai multe dintre valorile furnizate sunt invalide.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Acest cÃ¢mp nu era de aÅteptat.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Acest cÃ¢mp este lipsÄ.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>AceastÄ valoare nu reprezintÄ o datÄ validÄ.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>AceastÄ valoare nu reprezintÄ o datÄ Èi orÄ validÄ.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>AceastÄ valoare nu reprezintÄ o adresÄ de e-mail validÄ.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>FiÈierul nu a putut fi gÄsit.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>FiÈierul nu poate fi citit.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>FiÈierul este prea mare ({{ size }} {{ suffix }}). Dimensiunea maximÄ permisÄ este {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Tipul fiÈierului este invalid ({{ type }}). Tipurile permise de fiÈiere sunt ({{ types }}).</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>AceastÄ valoare ar trebui sÄ fie cel mult {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>AceastÄ valoare este prea lungÄ. Ar trebui sÄ aibÄ maxim {{ limit }} caracter.|AceastÄ valoare este prea lungÄ. Ar trebui sÄ aibÄ maxim {{ limit }} caractere.|AceastÄ valoare este prea lungÄ. Ar trebui sÄ aibÄ maxim {{ limit }} de caractere.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>AceastÄ valoare ar trebui sÄ fie cel puÈin {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>AceastÄ valoare este prea scurtÄ. Ar trebui sÄ aibÄ minim {{ limit }} caracter.|AceastÄ valoare este prea scurtÄ. Ar trebui sÄ aibÄ minim {{ limit }} caractere.|AceastÄ valoare este prea scurtÄ. Ar trebui sÄ aibÄ minim {{ limit }} de caractere.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>AceastÄ valoare nu ar trebui sÄ fie goalÄ.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>AceastÄ valoare nu ar trebui sÄ fie nulÄ (null).</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>AceastÄ valoare ar trebui sÄ fie nulÄ (null).</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>AceastÄ valoare nu este validÄ.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>AceastÄ valoare nu reprezintÄ o orÄ validÄ.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>AceastÄ valoare nu reprezintÄ un URL (link) valid.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Cele douÄ valori ar trebui sÄ fie egale.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>FiÈierul este prea mare. MÄrimea maximÄ permisÄ este {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>FiÈierul este prea mare.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>FiÈierul nu a putut fi Ã®ncÄrcat.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>AceastÄ valoare nu reprezintÄ un numÄr valid.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Acest fiÈier nu este o imagine validÄ.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>AceastÄ valoare nu este o adresÄ de IP validÄ.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>AceastÄ valoare nu reprezintÄ o limbÄ corectÄ.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>AceastÄ valoare nu reprezintÄ un dialect (o limbÄ) corect.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>AceastÄ valoare nu este o ÈarÄ validÄ.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>AceastÄ valoare este folositÄ deja.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>MÄrimea imaginii nu a putut fi detectatÄ.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>LÄÈimea imaginii este prea mare ({{ width }}px). LÄÈimea maximÄ permisÄ este de {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>LÄÈimea imaginii este prea micÄ ({{ width }}px). LÄÈimea minimÄ permisÄ este de {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ÃnÄlÈimea imaginii este prea mare ({{ height }}px). ÃnÄlÈimea maximÄ permisÄ este de {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ÃnÄlÈimea imaginii este prea micÄ ({{ height }}px). ÃnÄlÈimea minimÄ permisÄ este de {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>AceastÄ valoare trebuie sÄ fie parola curentÄ a utilizatorului.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>AceastÄ valoare trebuie sÄ conÈinÄ exact {{ limit }} caracter.|AceastÄ valoare trebuie sÄ conÈinÄ exact {{ limit }} caractere.|AceastÄ valoare trebuie sÄ conÈinÄ exact {{ limit }} de caractere.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>FiÈierul a fost Ã®ncÄrcat parÈial.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nu a fost Ã®ncÄrcat nici un fiÈier.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Nu a fost configurat niciun folder temporar Ã®n php.ini, sau folderul configurat nu existÄ.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Nu a fost posibilÄ scrierea fiÈierului temporar pe disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>O extensie PHP a prevenit Ã®ncÄrcarea cu succes a fiÈierului.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>AceastÄ colecÈie trebuie sÄ conÈinÄ cel puÈin {{ limit }} element.|AceastÄ colecÈie trebuie sÄ conÈinÄ cel puÈin {{ limit }} elemente.|AceastÄ colecÈie trebuie sÄ conÈinÄ cel puÈin {{ limit }} de elemente.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>AceastÄ colecÈie trebuie sÄ conÈinÄ cel mult {{ limit }} element.|AceastÄ colecÈie trebuie sÄ conÈinÄ cel mult {{ limit }} elemente.|AceastÄ colecÈie trebuie sÄ conÈinÄ cel mult {{ limit }} de elemente.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>AceastÄ colecÈie trebuie sÄ conÈinÄ {{ limit }} element.|AceastÄ colecÈie trebuie sÄ conÈinÄ {{ limit }} elemente.|AceastÄ colecÈie trebuie sÄ conÈinÄ {{ limit }} de elemente.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>NumÄrul card invalid.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tipul sau numÄrul cardului nu sunt valide.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>AceastÄ valoare nu este un NumÄr de Cont Bancar InternaÈional (IBAN) valid.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>AceastÄ valoare nu este un cod ISBN-10 valid.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>AceastÄ valoare nu este un cod ISBN-13 valid.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>AceastÄ valoare nu este un cod ISBN-10 sau ISBN-13 valid.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>AceastÄ valoare nu este un cod ISSN valid.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>AceastÄ valoare nu este o monedÄ validÄ.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>AceastÄ valoare trebuie sÄ fie egalÄ cu {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>AceastÄ valoare trebuie sÄ fie mai mare de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>AceastÄ valoare trebuie sÄ fie mai mare sau egalÄ cu {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>AceastÄ valoare trebuie identicÄ cu {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>AceastÄ valoare trebuie sÄ fie mai micÄ de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>AceastÄ valoare trebuie sÄ fie mai micÄ sau egalÄ cu {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>AceastÄ valoare nu trebuie sÄ fie egalÄ cu {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>AceastÄ valoare nu trebuie sÄ fie identicÄ cu {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Raportul imaginii este prea mare ({{ ratio }}). Raportul maxim permis este {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Raportul imaginii este prea mic ({{ ratio }}). Raportul minim permis este {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Imaginea este un pÄtrat ({{ width }}x{{ height }}px). Imaginile pÄtrat nu sunt permise.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Imaginea are orientarea peisaj ({{ width }}x{{ height }}px). Imaginile cu orientare peisaj nu sunt permise.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Imaginea are orientarea portret ({{ width }}x{{ height }}px). Imaginile cu orientare portret nu sunt permise.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Nu se permite un fiÈier gol.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Numele host nu a putut fi rezolvat cÄtre o adresÄ IP.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>AceastÄ valoare nu corespunde setului de caractere {{ charset }} aÈteptat.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>AceastÄ valoare nu este un Cod de Identificare a Afacerilor (BIC) valid.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Eroare</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>AceastÄ valoare nu este un UUID valid.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>AceastÄ valoare trebuie sÄ fie un multiplu de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Codul BIC (Business Identifier Code) nu este asociat cu codul IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>AceastÄ valoare trebuie sÄ fie un JSON valid.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Acest set ar trebui sÄ conÈinÄ numai elemente unice.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>AceastÄ valoare ar trebui sÄ fie pozitivÄ.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>AceastÄ valoare trebuie sÄ fie pozitivÄ sau zero.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>AceastÄ valoare ar trebui sÄ fie negativÄ.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>AceastÄ valoare trebuie sÄ fie negativÄ sau zero.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>AceastÄ valoare nu este un fus orar valid.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>AceastÄ parolÄ a fost compromisÄ Èi nu poate fi utilizatÄ. VÄ rugÄm sÄ utilizaÈi o altÄ parolÄ.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>AceastÄ valoare trebuie sÄ fie Ã®ntre {{ min }} Èi {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>AceastÄ valoare nu este un numele gazdei valid.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>NumÄrul de elemente din aceastÄ colecÈie ar trebui sÄ fie un multiplu al {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>AceastÄ valoare trebuie sÄ Ã®ndeplineascÄ cel puÈin una dintre urmÄtoarele reguli:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Fiecare element din acest set ar trebui sÄ Ã®ndeplineascÄ propriul set de reguli.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>AceastÄ valoare nu este un numÄr internaÈional de identificare (ISIN) valabil.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>AceastÄ valoare ar trebui sÄ fie o expresie validÄ.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>AceastÄ valoare nu este o culoare CSS validÄ.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>AceastÄ valoare nu este o notaÈie CIDR validÄ.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Valoarea netmask-ului trebuie sa fie intre {{ min }} si {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Denumirea fiÈierului este prea lungÄ. Ea trebuie sÄ conÈinÄ {{ filename_max_length }} caractere sau mai puÈine.|Denumirea fiÈierului este prea lungÄ. Ea trebuie sÄ conÈinÄ {{ filename_max_length }} caractere sau mai puÈine.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Complexitatea parolei este prea micÄ. VÄ rugÄm sÄ folosiÈi o parolÄ mai puternicÄ.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>AceastÄ valoare conÈine caractere care nu sunt premise de nivelul de restricÈionare curent.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Folosirea caracterelor invizibile nu este permisÄ.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Combinarea numerelor din diferite script-uri nu este permisÄ.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Folosirea caracterelor invizibile suprapuse nu este permisÄ.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Extensia fiÈierului este invalidÄ ({{ extension }}). Extensiile permise sunt {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Codificarea caracterelor detectate nu este valabilÄ ({{ detected }}). CodificÄrile permise sunt {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>AceastÄ valoare nu este o adresÄ MAC validÄ.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Acestui URL Ã®i lipseÈte un domeniu de nivel superior.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ru.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ru.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ru.xlf	(revision 8435)
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="ru" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ Ð»ÐŸÐ¶ÐœÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐžÑÑÐžÐœÐœÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ð¢ÐžÐ¿ Ð·ÐœÐ°ÑÐµÐœÐžÑ ÐŽÐŸÐ»Ð¶ÐµÐœ Ð±ÑÑÑ {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ Ð¿ÑÑÑÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>ÐÑÐ±ÑÐ°ÐœÐœÐŸÐµ ÐÐ°ÐŒÐž Ð·ÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>ÐÑ ÐŽÐŸÐ»Ð¶ÐœÑ Ð²ÑÐ±ÑÐ°ÑÑ Ñ
+ÐŸÑÑ Ð±Ñ {{ limit }} Ð²Ð°ÑÐžÐ°ÐœÑ.|ÐÑ ÐŽÐŸÐ»Ð¶ÐœÑ Ð²ÑÐ±ÑÐ°ÑÑ Ñ
+ÐŸÑÑ Ð±Ñ {{ limit }} Ð²Ð°ÑÐžÐ°ÐœÑÐ°.|ÐÑ ÐŽÐŸÐ»Ð¶ÐœÑ Ð²ÑÐ±ÑÐ°ÑÑ Ñ
+ÐŸÑÑ Ð±Ñ {{ limit }} Ð²Ð°ÑÐžÐ°ÐœÑÐŸÐ².</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>ÐÑ ÐŽÐŸÐ»Ð¶ÐœÑ Ð²ÑÐ±ÑÐ°ÑÑ ÐœÐµ Ð±ÐŸÐ»ÐµÐµ ÑÐµÐŒ {{ limit }} Ð²Ð°ÑÐžÐ°ÐœÑ.|ÐÑ ÐŽÐŸÐ»Ð¶ÐœÑ Ð²ÑÐ±ÑÐ°ÑÑ ÐœÐµ Ð±ÐŸÐ»ÐµÐµ ÑÐµÐŒ {{ limit }} Ð²Ð°ÑÐžÐ°ÐœÑÐ°.|ÐÑ ÐŽÐŸÐ»Ð¶ÐœÑ Ð²ÑÐ±ÑÐ°ÑÑ ÐœÐµ Ð±ÐŸÐ»ÐµÐµ ÑÐµÐŒ {{ limit }} Ð²Ð°ÑÐžÐ°ÐœÑÐŸÐ².</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>ÐÐŽÐœÐŸ ÐžÐ»Ðž ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ Ð·Ð°ÐŽÐ°ÐœÐœÑÑ
+ Ð·ÐœÐ°ÑÐµÐœÐžÐ¹ ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ð­ÑÐŸ Ð¿ÐŸÐ»Ðµ ÐœÐµ ÐŸÐ¶ÐžÐŽÐ°Ð»ÐŸÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ð­ÑÐŸ Ð¿ÐŸÐ»Ðµ ÐŸÑÑÑÑÑÑÐ²ÑÐµÑ.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ Ð¿ÑÐ°Ð²ÐžÐ»ÑÐœÐŸÐ¹ ÐŽÐ°ÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐ°ÑÑ Ðž Ð²ÑÐµÐŒÐµÐœÐž ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ Ð°ÐŽÑÐµÑÐ° ÑÐ»ÐµÐºÑÑÐŸÐœÐœÐŸÐ¹ Ð¿ÐŸÑÑÑ ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Ð€Ð°Ð¹Ð» ÐœÐµ ÐŒÐŸÐ¶ÐµÑ Ð±ÑÑÑ ÐœÐ°Ð¹ÐŽÐµÐœ.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Ð€Ð°Ð¹Ð» ÐœÐµ ÐŒÐŸÐ¶ÐµÑ Ð±ÑÑÑ Ð¿ÑÐŸÑÐžÑÐ°Ðœ.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ð€Ð°Ð¹Ð» ÑÐ»ÐžÑÐºÐŸÐŒ Ð±ÐŸÐ»ÑÑÐŸÐ¹ ({{ size }} {{ suffix }}). ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐ¹ ÑÐ°Ð·ÐŒÐµÑ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>MIME-ÑÐžÐ¿ ÑÐ°Ð¹Ð»Ð° ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒ ({{ type }}). ÐÐŸÐ¿ÑÑÑÐžÐŒÑ MIME-ÑÐžÐ¿Ñ ÑÐ°Ð¹Ð»ÐŸÐ² {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ {{ limit }} ÐžÐ»Ðž ÐŒÐµÐœÑÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÑÐ»ÐžÑÐºÐŸÐŒ ÐŽÐ»ÐžÐœÐœÐŸÐµ. ÐÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐ°Ð²ÐœÐŸ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ñ ÐžÐ»Ðž ÐŒÐµÐœÑÑÐµ.|ÐÐœÐ°ÑÐµÐœÐžÐµ ÑÐ»ÐžÑÐºÐŸÐŒ ÐŽÐ»ÐžÐœÐœÐŸÐµ. ÐÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐ°Ð²ÐœÐŸ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°ÐŒ ÐžÐ»Ðž ÐŒÐµÐœÑÑÐµ.|ÐÐœÐ°ÑÐµÐœÐžÐµ ÑÐ»ÐžÑÐºÐŸÐŒ ÐŽÐ»ÐžÐœÐœÐŸÐµ. ÐÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐ°Ð²ÐœÐŸ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°ÐŒ ÐžÐ»Ðž ÐŒÐµÐœÑÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ {{ limit }} ÐžÐ»Ðž Ð±ÐŸÐ»ÑÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÑÐ»ÐžÑÐºÐŸÐŒ ÐºÐŸÑÐŸÑÐºÐŸÐµ. ÐÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐ°Ð²ÐœÐŸ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ñ ÐžÐ»Ðž Ð±ÐŸÐ»ÑÑÐµ.|ÐÐœÐ°ÑÐµÐœÐžÐµ ÑÐ»ÐžÑÐºÐŸÐŒ ÐºÐŸÑÐŸÑÐºÐŸÐµ. ÐÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐ°Ð²ÐœÐŸ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°ÐŒ ÐžÐ»Ðž Ð±ÐŸÐ»ÑÑÐµ.|ÐÐœÐ°ÑÐµÐœÐžÐµ ÑÐ»ÐžÑÐºÐŸÐŒ ÐºÐŸÑÐŸÑÐºÐŸÐµ. ÐÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐ°Ð²ÐœÐŸ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°ÐŒ ÐžÐ»Ðž Ð±ÐŸÐ»ÑÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ Ð¿ÑÑÑÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ Ð²ÑÐµÐŒÐµÐœÐž ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>ÐÐ±Ð° Ð·ÐœÐ°ÑÐµÐœÐžÑ ÐŽÐŸÐ»Ð¶ÐœÑ Ð±ÑÑÑ ÐŸÐŽÐžÐœÐ°ÐºÐŸÐ²ÑÐŒÐž.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ð€Ð°Ð¹Ð» ÑÐ»ÐžÑÐºÐŸÐŒ Ð±ÐŸÐ»ÑÑÐŸÐ¹. ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐ¹ ÑÐ°Ð·ÐŒÐµÑ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ð€Ð°Ð¹Ð» ÑÐ»ÐžÑÐºÐŸÐŒ Ð±ÐŸÐ»ÑÑÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Ð€Ð°Ð¹Ð» ÐœÐµ ÐŒÐŸÐ¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð³ÑÑÐ¶ÐµÐœ.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐžÑÐ»ÐŸÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ð€Ð°Ð¹Ð» ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ ÑÐŸÑÐŒÐ°ÑÐŸÐŒ ÐžÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Ð­ÑÐŸ Ð·ÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐµÐ¹ÑÑÐ²ÐžÑÐµÐ»ÑÐœÑÐŒ IP-Ð°ÐŽÑÐµÑÐŸÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐŒ ÑÐ·ÑÐºÐŸÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸÐ¹ Ð»ÐŸÐºÐ°Ð»ÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸÐ¹ ÑÑÑÐ°ÐœÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ð­ÑÐŸ Ð·ÐœÐ°ÑÐµÐœÐžÐµ ÑÐ¶Ðµ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐµÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÐŸÐ¿ÑÐµÐŽÐµÐ»ÐžÑÑ ÑÐ°Ð·ÐŒÐµÑ ÐžÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ÐšÐžÑÐžÐœÐ° ÐžÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ ÑÐ»ÐžÑÐºÐŸÐŒ Ð²ÐµÐ»ÐžÐºÐ° ({{ width }}px). ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐ°Ñ ÑÐžÑÐžÐœÐ° {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ÐšÐžÑÐžÐœÐ° ÐžÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ ÑÐ»ÐžÑÐºÐŸÐŒ ÐŒÐ°Ð»Ð° ({{ width }}px). ÐÐžÐœÐžÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐ°Ñ ÑÐžÑÐžÐœÐ° {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ÐÑÑÐŸÑÐ° ÐžÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ ÑÐ»ÐžÑÐºÐŸÐŒ Ð²ÐµÐ»ÐžÐºÐ° ({{ height }}px). ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐ°Ñ Ð²ÑÑÐŸÑÐ° {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ÐÑÑÐŸÑÐ° ÐžÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ ÑÐ»ÐžÑÐºÐŸÐŒ ÐŒÐ°Ð»Ð° ({{ height }}px). ÐÐžÐœÐžÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐ°Ñ Ð²ÑÑÐŸÑÐ° {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐµÐºÑÑÐžÐŒ Ð¿Ð°ÑÐŸÐ»ÐµÐŒ Ð¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÐµÐ»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐ°Ð²ÐœÐŸ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ñ.|ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐ°Ð²ÐœÐŸ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°ÐŒ.|ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐ°Ð²ÐœÐŸ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°ÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Ð€Ð°Ð¹Ð» Ð±ÑÐ» Ð·Ð°Ð³ÑÑÐ¶ÐµÐœ ÑÐŸÐ»ÑÐºÐŸ ÑÐ°ÑÑÐžÑÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ð€Ð°Ð¹Ð» ÐœÐµ Ð±ÑÐ» Ð·Ð°Ð³ÑÑÐ¶ÐµÐœ.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Ð php.ini ÐœÐµ Ð±ÑÐ»Ð° ÐœÐ°ÑÑÑÐŸÐµÐœÐ° Ð²ÑÐµÐŒÐµÐœÐœÐ°Ñ Ð¿Ð°Ð¿ÐºÐ°, ÐžÐ»Ðž ÐœÐ°ÑÑÑÐŸÐµÐœÐœÐ°Ñ Ð¿Ð°Ð¿ÐºÐ° ÐœÐµ ÑÑÑÐµÑÑÐ²ÑÐµÑ.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ Ð·Ð°Ð¿ÐžÑÐ°ÑÑ Ð²ÑÐµÐŒÐµÐœÐœÑÐ¹ ÑÐ°Ð¹Ð» ÐœÐ° ÐŽÐžÑÐº.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Ð Ð°ÑÑÐžÑÐµÐœÐžÐµ PHP Ð²ÑÐ·Ð²Ð°Ð»ÐŸ ÐŸÑÐžÐ±ÐºÑ Ð¿ÑÐž Ð·Ð°Ð³ÑÑÐ·ÐºÐµ.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ð­ÑÐ° ÐºÐŸÐ»Ð»ÐµÐºÑÐžÑ ÐŽÐŸÐ»Ð¶ÐœÐ° ÑÐŸÐŽÐµÑÐ¶Ð°ÑÑ {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑ ÐžÐ»Ðž Ð±ÐŸÐ»ÑÑÐµ.|Ð­ÑÐ° ÐºÐŸÐ»Ð»ÐµÐºÑÐžÑ ÐŽÐŸÐ»Ð¶ÐœÐ° ÑÐŸÐŽÐµÑÐ¶Ð°ÑÑ {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑÐ° ÐžÐ»Ðž Ð±ÐŸÐ»ÑÑÐµ.|Ð­ÑÐ° ÐºÐŸÐ»Ð»ÐµÐºÑÐžÑ ÐŽÐŸÐ»Ð¶ÐœÐ° ÑÐŸÐŽÐµÑÐ¶Ð°ÑÑ {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑÐŸÐ² ÐžÐ»Ðž Ð±ÐŸÐ»ÑÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ð­ÑÐ° ÐºÐŸÐ»Ð»ÐµÐºÑÐžÑ ÐŽÐŸÐ»Ð¶ÐœÐ° ÑÐŸÐŽÐµÑÐ¶Ð°ÑÑ {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑ ÐžÐ»Ðž ÐŒÐµÐœÑÑÐµ.|Ð­ÑÐ° ÐºÐŸÐ»Ð»ÐµÐºÑÐžÑ ÐŽÐŸÐ»Ð¶ÐœÐ° ÑÐŸÐŽÐµÑÐ¶Ð°ÑÑ {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑÐ° ÐžÐ»Ðž ÐŒÐµÐœÑÑÐµ.|Ð­ÑÐ° ÐºÐŸÐ»Ð»ÐµÐºÑÐžÑ ÐŽÐŸÐ»Ð¶ÐœÐ° ÑÐŸÐŽÐµÑÐ¶Ð°ÑÑ {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑÐŸÐ² ÐžÐ»Ðž ÐŒÐµÐœÑÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ð­ÑÐ° ÐºÐŸÐ»Ð»ÐµÐºÑÐžÑ ÐŽÐŸÐ»Ð¶ÐœÐ° ÑÐŸÐŽÐµÑÐ¶Ð°ÑÑ ÑÐŸÐ²ÐœÐŸ {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑ.|Ð­ÑÐ° ÐºÐŸÐ»Ð»ÐµÐºÑÐžÑ ÐŽÐŸÐ»Ð¶ÐœÐ° ÑÐŸÐŽÐµÑÐ¶Ð°ÑÑ ÑÐŸÐ²ÐœÐŸ {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑÐ°.|Ð­ÑÐ° ÐºÐŸÐ»Ð»ÐµÐºÑÐžÑ ÐŽÐŸÐ»Ð¶ÐœÐ° ÑÐŸÐŽÐµÑÐ¶Ð°ÑÑ ÑÐŸÐ²ÐœÐŸ {{ limit }} ÑÐ»ÐµÐŒÐµÐœÑÐŸÐ².</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ÐÐµÐ²ÐµÑÐœÑÐ¹ ÐœÐŸÐŒÐµÑ ÐºÐ°ÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>ÐÐµÐ¿ÐŸÐŽÐŽÐµÑÐ¶ÐžÐ²Ð°ÐµÐŒÑÐ¹ ÑÐžÐ¿ ÐžÐ»Ðž ÐœÐµÐ²ÐµÑÐœÑÐ¹ ÐœÐŸÐŒÐµÑ ÐºÐ°ÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Ð­ÑÐŸ Ð·ÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐµÐ¹ÑÑÐ²ÐžÑÐµÐ»ÑÐœÑÐŒ ÐÐµÐ¶ÐŽÑÐœÐ°ÑÐŸÐŽÐœÑÐŒ Ð±Ð°ÐœÐºÐŸÐ²ÑÐºÐžÐŒ ÑÑÐµÑÐŸÐŒ (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐžÐŒÐµÐµÑ ÐœÐµÐ²ÐµÑÐœÑÐ¹ ÑÐŸÑÐŒÐ°Ñ ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐžÐŒÐµÐµÑ ÐœÐµÐ²ÐµÑÐœÑÐ¹ ÑÐŸÑÐŒÐ°Ñ ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÐµÑ ÑÐŸÑÐŒÐ°ÑÐ°ÐŒ ISBN-10 Ðž ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÐµÑ ÑÐŸÑÐŒÐ°ÑÑ ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>ÐÐµÐºÐŸÑÑÐµÐºÑÐœÑÐ¹ ÑÐŸÑÐŒÐ°Ñ Ð²Ð°Ð»ÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐ°Ð²ÐœÐŸ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ Ð±ÐŸÐ»ÑÑÐµ ÑÐµÐŒ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ Ð±ÐŸÐ»ÑÑÐµ ÐžÐ»Ðž ÑÐ°Ð²ÐœÐŸ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐžÐŽÐµÐœÑÐžÑÐœÑÐŒ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐŒÐµÐœÑÑÐµ ÑÐµÐŒ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐŒÐµÐœÑÑÐµ ÐžÐ»Ðž ÑÐ°Ð²ÐœÐŸ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐ°Ð²ÐœÐŸ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐžÐŽÐµÐœÑÐžÑÐœÑÐŒ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Ð¡ÐŸÐŸÑÐœÐŸÑÐµÐœÐžÐµ ÑÑÐŸÑÐŸÐœ ÐžÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ ÑÐ»ÐžÑÐºÐŸÐŒ Ð²ÐµÐ»ÐžÐºÐŸ ({{ ratio }}). ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÐŸÐµ ÑÐŸÐŸÑÐœÐŸÑÐµÐœÐžÐµ ÑÑÐŸÑÐŸÐœ {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Ð¡ÐŸÐŸÑÐœÐŸÑÐµÐœÐžÐµ ÑÑÐŸÑÐŸÐœ ÐžÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ ÑÐ»ÐžÑÐºÐŸÐŒ ÐŒÐ°Ð»ÐŸ ({{ ratio }}). ÐÐžÐœÐžÐŒÐ°Ð»ÑÐœÐŸÐµ ÑÐŸÐŸÑÐœÐŸÑÐµÐœÐžÐµ ÑÑÐŸÑÐŸÐœ {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµ ÐºÐ²Ð°ÐŽÑÐ°ÑÐœÐŸÐµ ({{ width }}x{{ height }}px). ÐÐ²Ð°ÐŽÑÐ°ÑÐœÑÐµ ÐžÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ ÐœÐµ ÑÐ°Ð·ÑÐµÑÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµ Ð² Ð°Ð»ÑÐ±ÐŸÐŒÐœÐŸÐ¹ ÐŸÑÐžÐµÐœÑÐ°ÑÐžÐž ({{ width }}x{{ height }}px). ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ Ð² Ð°Ð»ÑÐ±ÐŸÐŒÐœÐŸÐ¹ ÐŸÑÐžÐµÐœÑÐ°ÑÐžÐž ÐœÐµ ÑÐ°Ð·ÑÐµÑÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµ Ð² Ð¿ÐŸÑÑÑÐµÑÐœÐŸÐ¹ ÐŸÑÐžÐµÐœÑÐ°ÑÐžÐž ({{ width }}x{{ height }}px). ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ Ð² Ð¿ÐŸÑÑÑÐµÑÐœÐŸÐ¹ ÐŸÑÐžÐµÐœÑÐ°ÑÐžÐž ÐœÐµ ÑÐ°Ð·ÑÐµÑÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>ÐÑÑÑÑÐµ ÑÐ°Ð¹Ð»Ñ ÐœÐµ ÑÐ°Ð·ÑÐµÑÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>ÐÐŒÑ Ñ
+ÐŸÑÑÐ° ÐœÐµ ÐŒÐŸÐ¶ÐµÑ Ð±ÑÑÑ ÑÐ°Ð·ÑÐµÑÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐŸÐ²Ð¿Ð°ÐŽÐ°ÐµÑ Ñ ÐŸÐ¶ÐžÐŽÐ°ÐµÐŒÐŸÐ¹ {{ charset }} ÐºÐŸÐŽÐžÑÐŸÐ²ÐºÐŸÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Ð­ÑÐŸ Ð·ÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐµÐ¹ÑÑÐ²ÐžÑÐµÐ»ÑÐœÑÐŒ ÐÐžÐ·ÐœÐµÑ-ÐžÐŽÐµÐœÑÐžÑÐžÐºÐ°ÑÐŸÑÐŸÐŒ (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>ÐÑÐžÐ±ÐºÐ°</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Ð­ÑÐŸ Ð·ÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐµÐ¹ÑÑÐ²ÐžÑÐµÐ»ÑÐœÑÐŒ UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐºÑÐ°ÑÐœÐŸ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>ÐÐ°ÐœÐœÑÐ¹ BIC ÐœÐµ ÑÐ²ÑÐ·Ð°Ðœ Ñ IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐºÐŸÑÑÐµÐºÑÐœÑÐŒ JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ð­ÑÐ° ÐºÐŸÐ»Ð»ÐµÐºÑÐžÑ ÐŽÐŸÐ»Ð¶ÐœÐ° ÑÐŸÐŽÐµÑÐ¶Ð°ÑÑ ÑÐŸÐ»ÑÐºÐŸ ÑÐœÐžÐºÐ°Ð»ÑÐœÑÐµ ÑÐ»ÐµÐŒÐµÐœÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ Ð¿ÐŸÐ»ÐŸÐ¶ÐžÑÐµÐ»ÑÐœÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ Ð¿ÐŸÐ»ÐŸÐ¶ÐžÑÐµÐ»ÑÐœÑÐŒ ÐžÐ»Ðž ÑÐ°Ð²ÐœÑÐŒ ÐœÑÐ»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐŸÑÑÐžÑÐ°ÑÐµÐ»ÑÐœÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐŸÑÑÐžÑÐ°ÑÐµÐ»ÑÐœÑÐŒ ÐžÐ»Ðž ÑÐ°Ð²ÐœÑÐŒ ÐœÑÐ»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐºÐŸÑÑÐµÐºÑÐœÑÐŒ ÑÐ°ÑÐŸÐ²ÑÐŒ Ð¿ÐŸÑÑÐŸÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>ÐÐ°ÐœÐœÑÐ¹ Ð¿Ð°ÑÐŸÐ»Ñ Ð±ÑÐ» ÑÐºÐŸÐŒÐ¿ÑÐŸÐŒÐµÑÐžÑÐŸÐ²Ð°Ðœ Ð² ÑÐµÐ·ÑÐ»ÑÑÐ°ÑÐµ ÑÑÐµÑÐºÐž ÐŽÐ°ÐœÐœÑÑ
+ Ðž ÐœÐµ ÐŽÐŸÐ»Ð¶ÐµÐœ Ð±ÑÑÑ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°Ðœ. ÐÐŸÐ¶Ð°Ð»ÑÐ¹ÑÑÐ°, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐ¹ÑÐµ ÐŽÑÑÐ³ÐŸÐ¹ Ð¿Ð°ÑÐŸÐ»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐŒÐµÐ¶ÐŽÑ {{ min }} Ðž {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐºÐŸÑÑÐµÐºÑÐœÑÐŒ ÐžÐŒÐµÐœÐµÐŒ Ñ
+ÐŸÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>ÐÐŸÐ»ÐžÑÐµÑÑÐ²ÐŸ ÑÐ»ÐµÐŒÐµÐœÑÐŸÐ² Ð² ÑÑÐŸÐ¹ ÐºÐŸÐ»Ð»ÐµÐºÑÐžÐž ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐºÑÐ°ÑÐœÑÐŒ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ ÑÐŽÐŸÐ²Ð»ÐµÑÐ²ÐŸÑÑÑÑ ÐºÐ°Ðº ÐŒÐžÐœÐžÐŒÑÐŒ ÐŸÐŽÐœÐŸÐŒÑ ÐžÐ· ÑÐ»ÐµÐŽÑÑÑÐžÑ
+ ÐŸÐ³ÑÐ°ÐœÐžÑÐµÐœÐžÐ¹:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>ÐÐ°Ð¶ÐŽÑÐ¹ ÑÐ»ÐµÐŒÐµÐœÑ ÑÑÐŸÐ¹ ÐºÐŸÐ»Ð»ÐµÐºÑÐžÐž ÐŽÐŸÐ»Ð¶ÐµÐœ ÑÐŽÐŸÐ²Ð»ÐµÑÐ²ÐŸÑÑÑÑ ÑÐ²ÐŸÐµÐŒÑ ÑÐŸÐ±ÑÑÐ²ÐµÐœÐœÐŸÐŒÑ ÐœÐ°Ð±ÐŸÑÑ ÐŸÐ³ÑÐ°ÐœÐžÑÐµÐœÐžÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐºÐŸÑÑÐµÐºÑÐœÑÐŒ ÐŒÐµÐ¶ÐŽÑÐœÐ°ÑÐŸÐŽÐœÑÐŒ ÐžÐŽÐµÐœÑÐžÑÐžÐºÐ°ÑÐžÐŸÐœÐœÑÐŒ ÐœÐŸÐŒÐµÑÐŸÐŒ ÑÐµÐœÐœÑÑ
+ Ð±ÑÐŒÐ°Ð³ (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Ð­ÑÐŸ Ð·ÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐºÐŸÑÑÐµÐºÑÐœÑÐŒ Ð²ÑÑÐ°Ð¶ÐµÐœÐžÐµÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐºÐŸÑÑÐµÐºÑÐœÑÐŒ CSS ÑÐ²ÐµÑÐŸÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÐµÑ ÐœÐŸÑÐ°ÑÐžÐž CIDR.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŒÐ°ÑÐºÐž Ð¿ÐŸÐŽÑÐµÑÐž ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐŸÑ {{ min }} ÐŽÐŸ {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>ÐÐŒÑ ÑÐ°Ð¹Ð»Ð° ÑÐ»ÐžÑÐºÐŸÐŒ ÐŽÐ»ÐžÐœÐœÐŸÐµ. ÐÐœÐŸ ÐŽÐŸÐ»Ð¶ÐœÐŸ ÑÐŸÐŽÐµÑÐ¶Ð°ÑÑ {{ filename_max_length }} ÑÐžÐŒÐ²ÐŸÐ» ÐžÐ»Ðž ÐŒÐµÐœÑÑÐµ.|ÐÐŒÑ ÑÐ°Ð¹Ð»Ð° ÑÐ»ÐžÑÐºÐŸÐŒ ÐŽÐ»ÐžÐœÐœÐŸÐµ. ÐÐœÐŸ ÐŽÐŸÐ»Ð¶ÐœÐŸ ÑÐŸÐŽÐµÑÐ¶Ð°ÑÑ {{ filename_max_length }} ÑÐžÐŒÐ²ÐŸÐ»Ð° ÐžÐ»Ðž ÐŒÐµÐœÑÑÐµ.|ÐÐŒÑ ÑÐ°Ð¹Ð»Ð° ÑÐ»ÐžÑÐºÐŸÐŒ ÐŽÐ»ÐžÐœÐœÐŸÐµ. ÐÐœÐŸ ÐŽÐŸÐ»Ð¶ÐœÐŸ ÑÐŸÐŽÐµÑÐ¶Ð°ÑÑ {{ filename_max_length }} ÑÐžÐŒÐ²ÐŸÐ»ÐŸÐ² ÐžÐ»Ðž ÐŒÐµÐœÑÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Ð¡Ð»ÐžÑÐºÐŸÐŒ ÐœÐžÐ·ÐºÐ°Ñ ÐœÐ°ÐŽÑÐ¶ÐœÐŸÑÑÑ Ð¿Ð°ÑÐŸÐ»Ñ. ÐÐŸÐ¶Ð°Ð»ÑÐ¹ÑÑÐ°, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐ¹ÑÐµ Ð±ÐŸÐ»ÐµÐµ ÐœÐ°ÐŽÑÐ¶ÐœÑÐ¹ Ð¿Ð°ÑÐŸÐ»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÑÐŸÐŽÐµÑÐ¶ÐžÑ ÑÐžÐŒÐ²ÐŸÐ»Ñ, Ð·Ð°Ð¿ÑÐµÑÑÐœÐœÑÐµ ÐœÐ° ÑÐµÐºÑÑÐµÐŒ ÑÑÐŸÐ²ÐœÐµ ÐŸÐ³ÑÐ°ÐœÐžÑÐµÐœÐžÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>ÐÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐžÐµ ÐœÐµÐ²ÐžÐŽÐžÐŒÑÑ
+ ÑÐžÐŒÐ²ÐŸÐ»ÐŸÐ² Ð·Ð°Ð¿ÑÐµÑÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Ð¡ÐŒÐµÑÐžÐ²Ð°ÐœÐžÐµ ÐœÐŸÐŒÐµÑÐŸÐ² ÐžÐ· ÑÐ°Ð·ÐœÑÑ
+ ÑÑÐµÐœÐ°ÑÐžÐµÐ² Ð·Ð°Ð¿ÑÐµÑÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>ÐÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐžÐµ ÐœÐµÐ²ÐžÐŽÐžÐŒÑÑ
+ ÑÐžÐŒÐ²ÐŸÐ»ÐŸÐ² ÐœÐ°Ð»ÐŸÐ¶ÐµÐœÐžÑ Ð·Ð°Ð¿ÑÐµÑÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>ÐÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸÐµ ÑÐ°ÑÑÐžÑÐµÐœÐžÐµ ÑÐ°Ð¹Ð»Ð° ({{ extension }}). Ð Ð°Ð·ÑÐµÑÐµÐœÐœÑÐµ ÑÐ°ÑÑÐžÑÐµÐœÐžÑ: {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>ÐÐ±ÐœÐ°ÑÑÐ¶ÐµÐœÐœÐ°Ñ ÐºÐŸÐŽÐžÑÐŸÐ²ÐºÐ° ÑÐžÐŒÐ²ÐŸÐ»ÐŸÐ² ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐ° ({{ detected }}). Ð Ð°Ð·ÑÐµÑÐµÐœÐœÑÐµ ÐºÐŸÐŽÐžÑÐŸÐ²ÐºÐž: {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Ð­ÑÐŸ Ð·ÐœÐ°ÑÐµÐœÐžÐµ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ ÐŽÐµÐ¹ÑÑÐ²ÐžÑÐµÐ»ÑÐœÑÐŒ MAC-Ð°ÐŽÑÐµÑÐŸÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>Ð ÑÑÐŸÐŒ URL ÐŸÑÑÑÑÑÑÐ²ÑÐµÑ ÐŽÐŸÐŒÐµÐœ Ð²ÐµÑÑ
+ÐœÐµÐ³ÐŸ ÑÑÐŸÐ²ÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sk.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sk.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sk.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="sk" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ nastavenÃ¡ na false.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ nastavenÃ¡ na true.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ typu {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ prÃ¡zdna.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ jednou z poskytnutÃœch moÅŸnostÃ­.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Mali by ste vybraÅ¥ minimÃ¡lne {{ limit }} moÅŸnosÅ¥.|Mali by ste vybraÅ¥ minimÃ¡lne {{ limit }} moÅŸnosti.|Mali by ste vybraÅ¥ minimÃ¡lne {{ limit }} moÅŸnostÃ­.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Mali by ste vybraÅ¥ najviac {{ limit }} moÅŸnosÅ¥.|Mali by ste vybraÅ¥ najviac {{ limit }} moÅŸnosti.|Mali by ste vybraÅ¥ najviac {{ limit }} moÅŸnostÃ­.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>NiektorÃ© z uvedenÃœch hodnÃŽt sÃº neplatnÃ©.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Toto pole sa neoÄakÃ¡va.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Toto pole chÃœba.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Tato hodnota nemÃ¡ platnÃœ formÃ¡t dÃ¡tumu.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>TÃ¡to hodnota nemÃ¡ platnÃœ formÃ¡t dÃ¡tumu a Äasu.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>TÃ¡to hodnota nie je platnÃ¡ emailovÃ¡ adresa.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>SÃºbor sa nenaÅ¡iel.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>SÃºbor nie je ÄitateÄŸnÃœ.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>SÃºbor je prÃ­liÅ¡ veÄŸkÃœ ({{ size }} {{ suffix }}). MaximÃ¡lna povolenÃ¡ veÄŸkosÅ¥ je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>SÃºbor typu ({{ type }}) nie je podporovanÃœ. PodporovanÃ© typy sÃº {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ {{ limit }} alebo menej.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>TÃ¡to hodnota obsahuje viac znakov ako je povolenÃ©. Mala by obsahovaÅ¥ najviac {{ limit }} znak.|TÃ¡to hodnota obsahuje viac znakov ako je povolenÃ©. Mala by obsahovaÅ¥ najviac {{ limit }} znaky.|TÃ¡to hodnota obsahuje viac znakov ako je povolenÃ©. Mala by obsahovaÅ¥ najviac {{ limit }} znakov.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ viac ako {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>TÃ¡to hodnota je prÃ­liÅ¡ krÃ¡tka. MusÃ­ obsahovaÅ¥ minimÃ¡lne {{ limit }} znak.|TÃ¡to hodnota je prÃ­liÅ¡ krÃ¡tka. MusÃ­ obsahovaÅ¥ minimÃ¡lne {{ limit }} znaky.|TÃ¡to hodnota je prÃ­liÅ¡ krÃ¡tka. MinimÃ¡lny poÄet znakov je {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ vyplnenÃ¡.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>TÃ¡to hodnota by nemala byÅ¥ null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>TÃ¡to hodnota nie je platnÃ¡.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Tato hodnota nemÃ¡ sprÃ¡vny formÃ¡t Äasu.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>TÃ¡to hodnota nie je platnou URL adresou.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Tieto dve hodnoty by mali byÅ¥ rovnakÃ©.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>SÃºbor je prÃ­liÅ¡ veÄŸkÃœ. MaximÃ¡lna povolenÃ¡ veÄŸkosÅ¥ je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>SÃºbor je prÃ­liÅ¡ veÄŸkÃœ.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>SÃºbor sa nepodarilo nahraÅ¥.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ ÄÃ­slo.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Tento sÃºbor nie je obrÃ¡zok.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">TÃ¡to hodnota nie je platnÃ¡ IP adresa.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Tento jazyk neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>TÃ¡to lokalizÃ¡cia neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>TÃ¡to krajina neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>TÃ¡to hodnota sa uÅŸ pouÅŸÃ­va.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Nepodarilo sa zistiÅ¥ rozmery obrÃ¡zku.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ObrÃ¡zok je prÃ­liÅ¡ Å¡irokÃœ ({{ width }}px). MaximÃ¡lna povolenÃ¡ Å¡Ã­rka obrÃ¡zku je {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ObrÃ¡zok je prÃ­liÅ¡ Ãºzky ({{ width }}px). MinimÃ¡lna Å¡Ã­rka obrÃ¡zku by mala byÅ¥ {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target><![CDATA[>ObrÃ¡zok je prÃ­liÅ¡ vysokÃœ ({{ height }}px). MaximÃ¡lna povolenÃ¡ vÃœÅ¡ka obrÃ¡zku je {{ max_height }}px.]]></target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ObrÃ¡zok je prÃ­liÅ¡ nÃ­zky ({{ height }}px). MinimÃ¡lna vÃœÅ¡ka obrÃ¡zku by mala byÅ¥ {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ aktuÃ¡lne heslo pouÅŸÃ­vateÄŸa.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>TÃ¡to hodnota by mala maÅ¥ presne {{ limit }} znak.|TÃ¡to hodnota by mala maÅ¥ presne {{ limit }} znaky.|TÃ¡to hodnota by mala maÅ¥ presne {{ limit }} znakov.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Bola nahranÃ¡ len ÄasÅ¥ sÃºboru.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Åœiadny sÃºbor nebol nahranÃœ.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">V php.ini nie je nastavenÃœ ÅŸiadny doÄasnÃœ adresÃ¡r, alebo nastavenÃœ adresÃ¡r neexistuje.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>DoÄasnÃœ sÃºbor sa nepodarilo zapÃ­saÅ¥ na disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>RozÅ¡Ã­renie PHP zabrÃ¡nilo nahraniu sÃºboru.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>TÃ¡to kolekcia by mala obsahovaÅ¥ aspoÅ {{ limit }} prvok alebo viac.|TÃ¡to kolekcia by mala obsahovaÅ¥ aspoÅ {{ limit }} prvky alebo viac.|TÃ¡to kolekcia by mala obsahovaÅ¥ aspoÅ {{ limit }} prvkov alebo viac.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>TÃ¡to kolekcia by mala maximÃ¡lne {{ limit }} prvok.|TÃ¡to kolekcia by mala obsahovaÅ¥ maximÃ¡lne {{ limit }} prvky.|TÃ¡to kolekcia by mala obsahovaÅ¥ maximÃ¡lne {{ limit }} prvkov.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>TÃ¡to kolekcia by mala obsahovaÅ¥ presne {{ limit }} prvok.|TÃ¡to kolekcia by mala obsahovaÅ¥ presne {{ limit }} prvky.|TÃ¡to kolekcia by mala obsahovaÅ¥ presne {{ limit }} prvkov.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>NeplatnÃ© ÄÃ­slo karty.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>NepodporovanÃœ typ karty alebo neplatnÃ© ÄÃ­slo karty.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">TÃ¡to hodnota nie je platnÃœm MedzinÃ¡rodnÃœm bankovÃœm ÄÃ­slom ÃºÄtu (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>TÃ¡to hodnota je neplatnÃ© ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>TÃ¡to hodnota je neplatnÃ© ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>TÃ¡to hodnota nie je platnÃ© ISBN-10 ani ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>TÃ¡to hodnota nie je platnÃ© ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>TÃ¡to hodnota nie je platnÃ¡ mena.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ rovnÃ¡ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ vÃ€ÄÅ¡ia ako {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ vÃ€ÄÅ¡ia alebo rovnÃ¡ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ typu {{ compared_value_type }} a zÃ¡roveÅ by mala byÅ¥ rovnÃ¡ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ menÅ¡ia ako {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ menÅ¡ia alebo rovnÃ¡ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>TÃ¡to hodnota by nemala byÅ¥ rovnÃ¡ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>TÃ¡to hodnota by nemala byÅ¥ typu {{ compared_value_type }} a zÃ¡roveÅ by nemala byÅ¥ rovnÃ¡ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Pomer strÃ¡n obrÃ¡zku je prÃ­liÅ¡ veÄŸkÃœ ({{ ratio }}). MaximÃ¡lny povolenÃœ pomer strÃ¡n obrÃ¡zku je {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Pomer strÃ¡n obrÃ¡zku je prÃ­liÅ¡ malÃœ ({{ ratio }}). MinimÃ¡lny povolenÃœ pomer strÃ¡n obrÃ¡zku je {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Strany obrÃ¡zku sÃº Å¡tvorcovÃ© ({{ width }}x{{ height }}px). Å tvorcovÃ© obrÃ¡zky nie sÃº povolenÃ©.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>ObrÃ¡zok je orientovanÃœ na Å¡Ã­rku ({{ width }}x{{ height }}px). ObrÃ¡zky orientovanÃ© na Å¡Ã­rku nie sÃº povolenÃ©.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>ObrÃ¡zok je orientovanÃœ na vÃœÅ¡ku ({{ width }}x{{ height }}px). ObrÃ¡zky orientovanÃ© na vÃœÅ¡ku nie sÃº povolenÃ©.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>SÃºbor nesmie byÅ¥ prÃ¡zdny.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>HostiteÄŸa nebolo moÅŸnÃ© rozpoznaÅ¥.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>TÃ¡to hodnota nezodpovedÃ¡ oÄakÃ¡vanej znakovej sade {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">TÃ¡to hodnota nie je platnÃœm ObchodnÃœm identifikaÄnÃœm kÃ³dom (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Chyba</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">TÃ¡to hodnota nie je platnÃœm UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ nÃ¡sobkom {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Tento identifikaÄnÃœ kÃ³d podniku (BIC) nie je spojenÃœ s IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ platnÃœ JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>TÃ¡to kolekcia by mala obsahovaÅ¥ len unikÃ¡tne prkvy.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ kladnÃ¡.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ kladnÃ¡ alebo nulovÃ¡.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ zÃ¡pornÃ¡.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ zÃ¡pornÃ¡ alebo nulovÃ¡.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>TÃ¡to hodnota nie je platnÃ© ÄasovÃ© pÃ¡smo.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Toto heslo uniklo pri naruÅ¡enÃ­ ochrany dÃ¡t, nie je moÅŸnÃ© ho pouÅŸiÅ¥. ProsÃ­m, pouÅŸite inÃ© heslo.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ medzi {{ min }} a {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>TÃ¡to hodnota nie je platnÃœ hostname.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>PoÄet prvkov v tejto kolekcii musÃ­ byÅ¥ nÃ¡sobok {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>TÃ¡to hodnota musÃ­ spÄºÅaÅ¥ aspoÅ jedno z nasledujÃºcich obmedzenÃ­:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>KaÅŸdÃœ prvok v tejto kolekcii musÃ­ spÄºÅaÅ¥ svoje vlastnÃ© obmedzenia.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>TÃ¡to hodnota nie je platnÃ© medzinÃ¡rodnÃ© oznaÄenie cennÃ©ho papiera (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>TÃ¡to hodnota by mala byÅ¥ platnÃœm vÃœrazom.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>TÃ¡to hodnota nie je platnÃ¡ CSS farba.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>TÃ¡to hodnota nie je platnou notÃ¡ciou CIDR.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Hodnota masky siete by mala byÅ¥ medzi {{ min }} a {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>NÃ¡zov sÃºboru je prÃ­liÅ¡ dlhÃœ. Mal by maÅ¥ {{ filename_max_length }} znak alebo menej.|NÃ¡zov sÃºboru je prÃ­liÅ¡ dlhÃœ. Mal by maÅ¥ {{ filename_max_length }} znaky alebo menej.|NÃ¡zov sÃºboru je prÃ­liÅ¡ dlhÃœ. Mal by maÅ¥ {{ filename_max_length }} znakov alebo menej.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Sila hesla je prÃ­liÅ¡ nÃ­zka. PouÅŸite silnejÅ¡ie heslo.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>TÃ¡to hodnota obsahuje znaky, ktorÃ© nie sÃº povolenÃ© aktuÃ¡lnou ÃºrovÅou obmedzenia.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>PouÅŸÃ­vanie neviditeÄŸnÃœch znakov nie je povolenÃ©.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>MieÅ¡anie ÄÃ­sel z rÃŽznych skriptov nie je povolenÃ©.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>PouÅŸÃ­vanie skrytÃœch prekryvnÃœch znakov nie je povolenÃ©.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>PrÃ­pona sÃºboru je neplatnÃ¡ ({{ extension }}). PovolenÃ© prÃ­pony sÃº {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>ZistenÃ© kÃ³dovanie znakov je neplatnÃ© ({{ detected }}). PovolenÃ© kÃ³dovania sÃº {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">TÃ¡to hodnota nie je platnou MAC adresou.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Tomuto URL chÃœba domÃ©na najvyÅ¡Å¡ej Ãºrovne.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sl.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sl.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sl.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="sl" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Vrednost bi morala biti nepravilna (false).</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Vrednost bi morala biti pravilna (true).</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Vrednost mora biti naslednjega tipa {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Vrednost mora biti prazna.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Vrednost, ki ste jo izbrali, ni veljavna moÅŸnost.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Izbrati morate vsaj {{ limit }} moÅŸnost.|Izbrati morate vsaj {{ limit }} moÅŸnosti.|Izbrati morate vsaj {{ limit }} moÅŸnosti.|Izbrati morate vsaj {{ limit }} moÅŸnosti.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Izberete lahko najveÄ {{ limit }} moÅŸnost.|Izberete lahko najveÄ {{ limit }} moÅŸnosti.|Izberete lahko najveÄ {{ limit }} moÅŸnosti.|Izberete lahko najveÄ {{ limit }} moÅŸnosti.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Ena ali veÄ podanih vrednosti ni veljavnih.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>To polje ni bilo priÄakovati.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>To polje manjka.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ta vrednost ni veljaven datum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ta vrednost ni veljaven datum in Äas.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ta vrednost ni veljaven e-poÅ¡tni naslov.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Datoteke ni mogoÄe najti.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Datoteke ni mogoÄe prebrati.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Datoteka je prevelika ({{ size }} {{ suffix }}). NajveÄja dovoljena velikost je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mime tip datoteke je neveljaven ({{ type }}). Dovoljeni mime tipi so {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ta vrednost bi morala biti {{ limit }} ali manj.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ta vrednost je predolga. Morala bi imeti {{ limit }} znak ali manj.|Ta vrednost je predolga. Morala bi imeti {{ limit }} znaka ali manj.|Ta vrednost je predolga. Morala bi imeti {{ limit }} znake ali manj.|Ta vrednost je predolga. Morala bi imeti {{ limit }} znakov ali manj.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ta vrednost bi morala biti {{ limit }} ali veÄ.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ta vrednost je prekratka. Morala bi imeti {{ limit }} znak ali veÄ.|Ta vrednost je prekratka. Morala bi imeti {{ limit }} znaka ali veÄ.|Ta vrednost je prekratka. Morala bi imeti {{ limit }} znake ali veÄ.|Ta vrednost je prekratka. Morala bi imeti {{ limit }} znakov ali veÄ.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ta vrednost ne bi smela biti prazna.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Ta vrednost ne bi smela biti nedefinirana (null).</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Ta vrednost bi morala biti nedefinirana (null).</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Ta vrednost ni veljavna.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ta vrednost ni veljaven Äas.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Ta vrednost ni veljaven URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Ti dve vrednosti bi morali biti enaki.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Datoteka je prevelika. NajveÄja dovoljena velikost je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Datoteka je prevelika.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Datoteke ni bilo mogoÄe naloÅŸiti.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ta vrednost bi morala biti veljavna Å¡tevilka.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ta datoteka ni veljavna slika.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Ta vrednost ni veljaven IP naslov.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ta vrednost ni veljaven jezik.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ta vrednost ni veljavna lokalnost.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Ta vrednost ni veljavna drÅŸava.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ta vrednost je ÅŸe uporabljena.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Velikosti slike ni bilo mogoÄe zaznati.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Å irina slike je preÅ¡iroka ({{ width }}px). NajveÄja dovoljena Å¡irina je {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Å irina slike je premajhna ({{ width }}px). NajmanjÅ¡a predvidena Å¡irina je {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ViÅ¡ina slike je prevelika ({{ height }}px). NajveÄja dovoljena viÅ¡ina je {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ViÅ¡ina slike je premajhna ({{ height }}px). NajmanjÅ¡a predvidena viÅ¡ina je {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ta vrednost bi morala biti trenutno uporabnikovo geslo.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ta vrednost bi morala imeti toÄno {{ limit }} znak.|Ta vrednost bi morala imeti toÄno {{ limit }} znaka.|Ta vrednost bi morala imeti toÄno {{ limit }} znake.|Ta vrednost bi morala imeti toÄno {{ limit }} znakov.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Datoteka je bila le delno naloÅŸena.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nobena datoteka ni bila naloÅŸena.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>V php.ini ni bila nastavljena zaÄasna mapa, ali pa nastavljena mapa ne obstaja.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>ZaÄasne datoteke ni bilo mogoÄe zapisati na disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP razÅ¡iritev je vzrok, da nalaganje ni uspelo.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ta zbirka bi morala vsebovati {{ limit }} element ali veÄ.|Ta zbirka bi morala vsebovati {{ limit }} elementa ali veÄ.|Ta zbirka bi morala vsebovati {{ limit }} elemente ali veÄ.|Ta zbirka bi morala vsebovati {{ limit }} elementov ali veÄ.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ta zbirka bi morala vsebovati {{ limit }} element ali manj.|Ta zbirka bi morala vsebovati {{ limit }} elementa ali manj.|Ta zbirka bi morala vsebovati {{ limit }} elemente ali manj.|Ta zbirka bi morala vsebovati {{ limit }} elementov ali manj.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ta zbirka bi morala vsebovati toÄno {{ limit }} element.|Ta zbirka bi morala vsebovati toÄno {{ limit }} elementa.|Ta zbirka bi morala vsebovati toÄno {{ limit }} elemente.|Ta zbirka bi morala vsebovati toÄno {{ limit }} elementov.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Neveljavna Å¡tevilka kartice.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Nepodprti tip kartice ali neveljavna Å¡tevilka kartice.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Ta vrednost ni veljavna mednarodna Å¡tevilka banÄnega raÄuna (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Neveljavna vrednost po ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Neveljavna vrednost po ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Neveljavna vrednost po ISBN-10 ali po ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Neveljavna vrednost ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ta vrednost ni veljavna valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti enaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti veÄja od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti veÄja ali enaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti identiÄna {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti manjÅ¡a od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti manjÅ¡a ali enaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ta vrednost ne bi smela biti enaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ta vrednost ne bi smela biti identiÄna {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Razmerje slike je preveliko ({{ ratio }}). NajveÄje dovoljeno razmerje je {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Razmerje slike je premajhno ({{ ratio }}). NajmanjÅ¡e priÄakovano razmerje je {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Slika je kvadrat ({{ width }}x{{ height }}px). Kvadratne slike niso dovoljene.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Slika je leÅŸeÄe usmerjena ({{ width }}x{{ height }}px). LeÅŸeÄe usmerjene slike niso dovoljene.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Slika je pokonÄno usmerjena ({{ width }}x{{ height }}px). PokonÄno usmerjene slike niso dovoljene.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Prazna datoteka ni dovoljena.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Gostitelja ni bilo mogoÄe prepoznati.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ta vrednost se ne ujema s priÄakovanim naborom znakov {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Ta vrednost ni veljavna poslovna identifikacijska koda (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Napaka</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Ta vrednost ni veljaven UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti veÄkratnik od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ta poslovna identifikacijska koda (BIC) ni povezana z IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Ta vrednost bi morala biti veljaven JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ta zbirka bi morala vsebovati samo edinstvene elemente.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ta vrednost bi morala biti pozitivna.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ta vrednost bi morala biti pozitivna ali enaka niÄ.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ta vrednost bi morala biti negativna.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ta vrednost bi morala biti negativna ali enaka niÄ.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ta vrednost ni veljaven Äasovni pas.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>To geslo je uÅ¡lo pri krÅ¡itvi varnosti podatkov in ga ne smete uporabljati. Prosimo, uporabite drugo geslo.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ta vrednost bi morala biti med {{ min }} in {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Ta vrednost ni veljavno ime gostitelja.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Å tevilo elementov v tej zbirki bi moralo biti mnogokratnik {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Ta vrednost bi morala zadostiti vsaj eni izmed sledeÄih omejitev:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Vsak element te zbirke bi moral zadostiti svojemu lastnemu naboru omejitev.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Ta vrednost ni veljavna mednarodna identifikacijska koda vrednostnih papirjev (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Ta vrednost bi morala biti veljaven izraz.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Ta vrednost ni veljavna barva CSS.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Ta vrednost ni veljaven zapis CIDR.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Vrednost omreÅŸne maske mora biti med {{ min }} in {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Ime datoteke je predolgo. Imeti mora {{ filename_max_length }} znak ali manj.|Ime datoteke je predolgo. Imeti mora {{ filename_max_length }} znaka ali manj.|Ime datoteke je predolgo. Imeti mora {{ filename_max_length }} znake ali manj.|Ime datoteke je predolgo. Imeti mora {{ filename_max_length }} znakov ali manj.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>MoÄ gesla je prenizka. Uporabite moÄnejÅ¡e geslo.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Ta vrednost vsebuje znake, ki jih trenutna raven omejitve ne dovoljuje.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Uporaba nevidnih znakov ni dovoljena.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>MeÅ¡anje Å¡tevilk iz razliÄnih skript ni dovoljeno.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Uporaba skritih prekrivnih znakov ni dovoljena.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>KonÄnica datoteke ni veljavna ({{ extension }}). Dovoljene so naslednje konÄnice: {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Zaznano kodiranje znakov ni veljavno ({{ detected }}). Dovoljene so naslednje vrste kodiranja {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Ta vrednost ni veljaven MAC naslov.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Temu URL manjka domena najviÅ¡je ravni.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sq.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sq.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sq.xlf	(revision 8435)
@@ -0,0 +1,464 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="sq" datatype="plaintext" original="file.ext">
+        <header>
+            <note>
+                PÃ«r fjalÃ«t e huaja, tÃ« cilat nuk kanÃ« pÃ«rkthim tÃ« drejtpÃ«rdrejtÃ«, ju lutemi tÃ« ndiqni rregullat e mÃ«poshtme:
+                  a) nÃ« rast se emri Ã«shtÃ« akronim i pÃ«rdorur gjerÃ«sisht si i pÃ«rveÃ§Ã«m, atÃ«herÃ«, emri lakohet pa thonjÃ«za dhe mbaresa shkruhet me vizÃ« ndarÃ«se. Gjinia gjykohet sipas rastit. Shembull: JSON (mashkullore)
+                  b) nÃ« rast se emri Ã«shtÃ« akronim i papÃ«rdorur gjerÃ«sisht si i pÃ«rveÃ§Ã«m, atÃ«herÃ«, emri lakohet pa thonjÃ«za dhe mbaresa shkruhet me vizÃ« ndarÃ«se. Gjinia Ã«shtÃ« femÃ«rore. Shembull: URL (femÃ«rore)
+                  c) nÃ« rast se emri duhet lakuar pÃ«r shkak tÃ« rasÃ«s nÃ« fjali, atÃ«herÃ«, emri lakohet pa thonjÃ«za dhe mbaresa shkruhet me vizÃ« ndarÃ«se. Shembull: host-i, prej host-it
+                  d) nÃ« rast se emri nuk duhet lakuar pÃ«r shkak tÃ« trajtÃ«s nÃ« fjali, atÃ«herÃ«, emri rrethote me thonjÃ«zat ââ. Shembull: âlocaleâ
+            </note>
+        </header>
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« e pavÃ«rtetÃ« (false).</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« e vÃ«rtetÃ« (true).</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« e llojit {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« e zbrazÃ«t.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Vlera qÃ« keni zgjedhur nuk Ã«shtÃ« alternativÃ« e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Duhet tÃ« zgjidhni sÃ« paku {{ limit }} alternativÃ«.|Duhet tÃ« zgjidhni sÃ« paku {{ limit }} alternativa.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Duhet tÃ« zgjidhni sÃ« shumti {{ limit }} alternativÃ«.|Duhet tÃ« zgjidhni sÃ« shumti {{ limit }} alternativa.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>NjÃ« apo mÃ« shumÃ« nga vlerat e dhÃ«na janÃ« tÃ« pavlefshme.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Kjo fushÃ« nuk pritej.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Kjo fushÃ« mungon.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« datÃ« e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« datÃ« dhe orÃ« e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« adresÃ« email-i e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Skeda nuk u gjet.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Skeda nuk Ã«shtÃ« e lexueshme.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Skeda Ã«shtÃ« shumÃ« e madhe ({{ size }} {{ suffix }}). MadhÃ«sia maksimale e lejuar Ã«shtÃ« {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Lloji âmimeâ i skedÃ«s Ã«shtÃ« i pavlefshÃ«m ({{ type }}). Llojet âmimeâ tÃ« lejuara janÃ« {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« {{ limit }} ose mÃ« pak.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Kjo vlerÃ« Ã«shtÃ« shumÃ« e gjatÃ«. Duhet tÃ« pÃ«rmbajÃ« {{ limit }} karakter ose mÃ« pak.|Kjo vlerÃ« Ã«shtÃ« shumÃ« e gjatÃ«. Duhet tÃ« pÃ«rmbajÃ« {{ limit }} karaktere ose mÃ« pak.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« {{ limit }} ose mÃ« shumÃ«.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Kjo vlerÃ« Ã«shtÃ« shumÃ« e shkurtÃ«r. Duhet tÃ« pÃ«rmbajÃ« {{ limit }} karakter ose mÃ« shumÃ«.|Kjo vlerÃ« Ã«shtÃ« shumÃ« e shkurtÃ«r. Duhet tÃ« pÃ«rmbajÃ« {{ limit }} karaktere ose mÃ« shumÃ«.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Kjo vlerÃ« nuk duhet tÃ« jetÃ« e zbrazÃ«t.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Kjo vlerÃ« nuk duhet tÃ« jetÃ« ânullâ.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« ânullâ.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« orÃ« e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« URL e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>KÃ«to dy vlera duhet tÃ« jenÃ« tÃ« barabarta.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Kjo skedÃ« Ã«shtÃ« shumÃ« e madhe. MadhÃ«sia maksimale e lejuar Ã«shtÃ« {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Kjo skedÃ« Ã«shtÃ« shumÃ« e madhe.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Kjo skedÃ« nuk mund tÃ« ngarkohet.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« njÃ« numÃ«r i vlefshÃ«m.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Kjo skedÃ« nuk Ã«shtÃ« njÃ« imazh i vlefshÃ«m.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« adresÃ« IP e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« gjuhÃ« e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« nje âlocaleâ e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« shtet i vlefshÃ«m.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Kjo vlerÃ« Ã«shtÃ« tashmÃ« nÃ« pÃ«rdorim.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>MadhÃ«sia e imazhit nuk mund tÃ« zbulohet.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>GjerÃ«sia e imazhit Ã«shtÃ« shumÃ« e madhe ({{ width }}px). GjerÃ«sia maksimale e lejuar Ã«shtÃ« {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>GjerÃ«sia e imazhit Ã«shtÃ« shumÃ« e vogÃ«l ({{ width }}px). GjerÃ«sia minimale e pritur Ã«shtÃ« {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>GjatÃ«sia e imazhit Ã«shtÃ« shumÃ« e madhe ({{ height }}px). GjatÃ«sia maksimale e lejuar Ã«shtÃ« {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>GjatÃ«sia e imazhit Ã«shtÃ« shumÃ« e vogÃ«l ({{ height }}px). GjatÃ«sia minimale e pritur Ã«shtÃ« {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« fjalÃ«kalimi i tanishÃ«m i pÃ«rdoruesit.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Kjo vlerÃ« duhet tÃ« ketÃ« saktÃ«sisht {{ limit }} karakter.|Kjo vlerÃ« duhet tÃ« ketÃ« saktÃ«sisht {{ limit }} karaktere.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Kjo skedÃ« Ã«shtÃ« ngarkuar pjesÃ«risht.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Nuk Ã«shtÃ« ngarkuar ndonjÃ« skedÃ«.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Nuk Ã«shtÃ« konfiguruar asnjÃ« skedar i pÃ«rkohshÃ«m nÃ« php.ini, ose skedari i konfiguruar nuk ekziston.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Nuk mund tÃ« shkruhet skeda e pÃ«rkohshme nÃ« disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>NjÃ« shtojcÃ« PHP shkaktoi dÃ«shtimin e ngarkimit.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ky koleksion duhet tÃ« pÃ«rmbajÃ« {{ limit }} element ose mÃ« shumÃ«.|Ky koleksion duhet tÃ« pÃ«rmbajÃ« {{ limit }} elemente ose mÃ« shumÃ«.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ky koleksion duhet tÃ« pÃ«rmbajÃ« {{ limit }} element ose mÃ« pak.|Ky koleksion duhet tÃ« pÃ«rmbajÃ« {{ limit }} elemente ose mÃ« pak.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ky koleksion duhet tÃ« pÃ«rmbajÃ« saktÃ«sisht {{ limit }} element.|Ky koleksion duhet tÃ« pÃ«rmbajÃ« saktÃ«sisht {{ limit }} elemente.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>NumÃ«r karte i pavlefshÃ«m.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Lloj karte i papranuar ose numÃ«r karte i pavlefshÃ«m.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« NumÃ«r Llogarie Bankare NdÃ«rkombÃ«tare (IBAN) i vlefshÃ«m.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« ISBN-10 e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« ISBN-13 e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« as ISBN-10 e vlefshme as ISBN-13 e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« ISSN e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« valutÃ« e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« e barabartÃ« me {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« mÃ« e madhe se {{ compared_value }}. </target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« mÃ« e madhe ose e barabartÃ« me {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« identike me {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« mÃ« vogÃ«l se {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« mÃ« e vogÃ«l ose e barabartÃ« me {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Kjo vlerÃ« nuk duhet tÃ« jetÃ« e barabartÃ« me {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Kjo vlerÃ« nuk duhet tÃ« jetÃ« identike me {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Raporti i imazhit Ã«shtÃ« shumÃ« i madh ({{ ratio }}). Raporti maksimal i lejuar Ã«shtÃ« {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Raporti i imazhit Ã«shtÃ« shumÃ« i vogÃ«l ({{ ratio }}). Raporti minimal pritet tÃ« jetÃ« {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Imazhi Ã«shtÃ« katror ({{ width }}x{{ height }}px). Imazhet katrore nuk janÃ« tÃ« lejuara.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Imazhi Ã«shtÃ« i orientuar horizontalisht ({{ width }}x{{ height }}px). Imazhet e orientuara horizontalisht nuk lejohen.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Imazhi Ã«shtÃ« i orientuar vertikalisht ({{ width }}x{{ height }}px). Imazhet orientuara vertikalisht nuk lejohen.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>NjÃ« skedÃ« e zbrazÃ«t nuk lejohet.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Host-i nuk mund te zbulohej.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Kjo vlerÃ« nuk pÃ«rputhet me kodifikimin e karaktereve {{ charset }} qÃ« pritej.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« Kod Identifikues Biznesi (BIC) i vlefshÃ«m.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Gabim</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« UUID e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« njÃ« shumÃ«fish i {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ky Kod Identifikues Biznesi (BIC) nuk Ã«shtÃ« i lidhur me IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« JSON i vlefshÃ«m.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ky koleksion duhet tÃ« pÃ«rmbajÃ« vetÃ«m elementÃ« unikÃ«.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« pozitive.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« pozitive ose zero.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« negative.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« negative ose zero.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« zonÃ« e vlefshme kohore.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Ky fjalÃ«kalim Ã«shtÃ« zbuluar nÃ« njÃ« shkelje tÃ« tÃ« dhÃ«nave, nuk duhet tÃ« pÃ«rdoret. Ju lutemi pÃ«rdorni njÃ« fjalÃ«kalim tjetÃ«r.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« ndÃ«rmjet {{ min }} dhe {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« emÃ«r i vlefshÃ«m host-i.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Numri i elementeve nÃ« kÃ«tÃ« koleksion duhet tÃ« jetÃ« njÃ« shumÃ«fish i {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Kjo vlerÃ« duhet tÃ« plotÃ«sojÃ« tÃ« paktÃ«n njÃ«rÃ«n nga kufizimet e mÃ«poshtme:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Secili element i kÃ«tij koleksioni duhet tÃ« pÃ«rmbushÃ« kufizimet e veta.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« numÃ«r i vlefshÃ«m identifikues ndÃ«rkombÃ«tar i sigurisÃ« (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Kjo vlerÃ« duhet tÃ« jetÃ« njÃ« shprehje e vlefshme.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« ngjyrÃ« e vlefshme CSS.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Kjo vlerÃ« nuk Ã«shtÃ« njÃ« shÃ«nim i vlefshÃ«m CIDR.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Vlera e maskÃ«s sÃ« rrjetit duhet tÃ« jetÃ« ndÃ«rmjet {{ min }} dhe {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Emri i skedÃ«s Ã«shtÃ« shumÃ« i gjatÃ«. Duhet tÃ« ketÃ« maksimumi {{ filename_max_length }} karakter ose mÃ« pak.|Emri i skedÃ«s Ã«shtÃ« shumÃ« i gjatÃ«. Duhet tÃ« ketÃ« maksimumi {{ filename_max_length }} karaktere ose mÃ« pak.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Fuqia e fjalÃ«kalimit Ã«shtÃ« shumÃ« e ulÃ«t. Ju lutemi pÃ«rdorni njÃ« fjalÃ«kalim mÃ« tÃ« fortÃ«.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Kjo vlerÃ« pÃ«rmban karaktere qÃ« nuk lejohen nga niveli aktual i kufizimit.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>PÃ«rdorimi i karaktereve tÃ« padukshme nuk lejohet.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>PÃ«rzierja e numrave nga shkrimet e ndryshme nuk lejohet.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>PÃ«rdorimi i karaktereve tÃ« mbivendosura tÃ« fshehura nuk lejohet.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Shtesa e skedarit Ã«shtÃ« e pavlefshme ({{ extension }}). Shtesat e lejuara janÃ« {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Kodimi i karakterit tÃ« identifikuar Ã«shtÃ« i pavlefshÃ«m ({{ detected }}). Kodimet e lejuara janÃ« {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>Kjo nuk Ã«shtÃ« njÃ« adresÃ« e vlefshme e Kontrollit tÃ« Qasjes nÃ« Media (MAC).</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">KÃ«saj URL i mungon njÃ« domain i nivelit tÃ« lartÃ«.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sr_Cyrl.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sr_Cyrl.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sr_Cyrl.xlf	(revision 8435)
@@ -0,0 +1,467 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="sr-Cyrl" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐœÐµÑÐ°ÑÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÑÐ°ÑÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÑÐžÐ¿Ð° {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð¿ÑÐ°Ð·ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÑÐµÐŽÐœÐ° ÐŸÐŽ Ð¿ÐŸÐœÑÑÐµÐœÐžÑ
+.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>ÐÐ·Ð°Ð±ÐµÑÐžÑÐµ Ð±Ð°Ñ {{ limit }} ÐŒÐŸÐ³ÑÑÐœÐŸÑÑ.|ÐÐ·Ð°Ð±ÐµÑÐžÑÐµ Ð±Ð°Ñ {{ limit }} ÐŒÐŸÐ³ÑÑÐœÐŸÑÑÐž.|ÐÐ·Ð°Ð±ÐµÑÐžÑÐµ Ð±Ð°Ñ {{ limit }} ÐŒÐŸÐ³ÑÑÐœÐŸÑÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>ÐÐ·Ð°Ð±ÐµÑÐžÑÐµ ÐœÐ°ÑÐ²ÐžÑÐµ {{ limit }} ÐŒÐŸÐ³ÑÑÐœÐŸÑÑ.|ÐÐ·Ð°Ð±ÐµÑÐžÑÐµ ÐœÐ°ÑÐ²ÐžÑÐµ {{ limit }} ÐŒÐŸÐ³ÑÑÐœÐŸÑÑÐž.|ÐÐ·Ð°Ð±ÐµÑÐžÑÐµ ÐœÐ°ÑÐ²ÐžÑÐµ {{ limit }} ÐŒÐŸÐ³ÑÑÐœÐŸÑÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>ÐÐµÐŽÐœÐ° ÐžÐ»Ðž Ð²ÐžÑÐµ Ð²ÑÐµÐŽÐœÐŸÑÑÐž ÑÐµ ÐœÐµÐ²Ð°Ð»ÐžÐŽÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>ÐÐ²ÐŸ Ð¿ÐŸÑÐµ ÐœÐžÑÐµ Ð±ÐžÐ»ÐŸ ÐŸÑÐµÐºÐžÐ²Ð°ÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>ÐÐ²ÐŸ Ð¿ÐŸÑÐµ ÐœÐµÐŽÐŸÑÑÐ°ÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ ÐŽÐ°ÑÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ ÐŽÐ°ÑÑÐŒ-Ð²ÑÐµÐŒÐµ.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐœÐ° Ð°ÐŽÑÐµÑÐ° ÐµÐ»ÐµÐºÑÑÐŸÐœÑÐºÐµ Ð¿ÐŸÑÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ° ÐœÐµ ÐŒÐŸÐ¶Ðµ Ð±ÐžÑÐž Ð¿ÑÐŸÐœÐ°ÑÐµÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ° ÐœÐžÑÐµ ÑÐžÑÑÐžÐ²Ð°.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ° ÑÐµ Ð¿ÑÐµÐ²ÐµÐ»ÐžÐºÐ° ({{ size }} {{ suffix }}). ÐÐ°ÑÐ²ÐµÑÐ° ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐ° Ð²ÐµÐ»ÐžÑÐžÐœÐ° ÑÐµ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>ÐÐžÐŒÐµ ÑÐžÐ¿ ÐŽÐ°ÑÐŸÑÐµÐºÐµ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ ({{ type }}). ÐÐŸÐ·Ð²ÐŸÑÐµÐœÐž ÐŒÐžÐŒÐµ ÑÐžÐ¿ÐŸÐ²Ðž ÑÑ {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ {{ limit }} ÐžÐ»Ðž ÐŒÐ°ÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÐµ Ð¿ÑÐµÐŽÑÐ³Ð°ÑÐºÐ°. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑ ÐžÐ»Ðž ÐŒÐ°ÑÐµ.|ÐÑÐµÐŽÐœÐŸÑÑ ÑÐµ Ð¿ÑÐµÐŽÑÐ³Ð°ÑÐºÐ°. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑÐ° ÐžÐ»Ðž ÐŒÐ°ÑÐµ.|ÐÑÐµÐŽÐœÐŸÑÑ ÑÐµ Ð¿ÑÐµÐŽÑÐ³Ð°ÑÐºÐ°. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑÐ° ÐžÐ»Ðž ÐŒÐ°ÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ {{ limit }} ÐžÐ»Ðž Ð²ÐžÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÐµ Ð¿ÑÐµÐºÑÐ°ÑÐºÐ°. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑ ÐžÐ»Ðž Ð²ÐžÑÐµ.|ÐÑÐµÐŽÐœÐŸÑÑ ÑÐµ Ð¿ÑÐµÐºÑÐ°ÑÐºÐ°. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑÐ° ÐžÐ»Ðž Ð²ÐžÑÐµ.|ÐÑÐµÐŽÐœÐŸÑÑ ÑÐµ Ð¿ÑÐµÐºÑÐ°ÑÐºÐ°. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑÐ° ÐžÐ»Ðž Ð²ÐžÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÐœÐµ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð¿ÑÐ°Ð·ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÐœÐµ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐœÐŸ Ð²ÑÐµÐŒÐµ.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>ÐÐ±Ðµ Ð²ÑÐµÐŽÐœÐŸÑÑÐž ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÑ ÑÐµÐŽÐœÐ°ÐºÐµ.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ° ÑÐµ Ð¿ÑÐµÐ²ÐµÐ»ÐžÐºÐ°. ÐÐ°ÑÐ²ÐµÑÐ° ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐ° Ð²ÐµÐ»ÐžÑÐžÐœÐ° ÑÐµ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ° ÑÐµ Ð¿ÑÐµÐ²ÐµÐ»ÐžÐºÐ°.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ° ÐœÐµ ÐŒÐŸÐ¶Ðµ Ð±ÐžÑÐž ÐŸÑÐ¿ÑÐµÐŒÑÐµÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ Ð±ÑÐŸÑ.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>ÐÐ²Ð° ÐŽÐ°ÑÐŸÑÐµÐºÐ° ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐœÐ° ÑÐ»ÐžÐºÐ°.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐœÐ° IP Ð°ÐŽÑÐµÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ ÑÐµÐ·ÐžÐº.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ Ð»ÐŸÐºÐ°Ð».</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐœÐ° Ð·ÐµÐŒÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÐµ Ð²ÐµÑ ÐžÑÐºÐŸÑÐžÑÑÐµÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>ÐÐµÐ»ÐžÑÐžÐœÐ° ÑÐ»ÐžÐºÐµ ÐœÐµ ÐŒÐŸÐ¶Ðµ Ð±ÐžÑÐž ÐŸÐŽÑÐµÑÐµÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ÐšÐžÑÐžÐœÐ° ÑÐ»ÐžÐºÐµ ÑÐµ Ð¿ÑÐµÐ²ÐµÐ»ÐžÐºÐ° ({{ width }}px). ÐÐ°ÑÐµÑÐ° ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐ° ÑÐžÑÐžÐœÐ° ÑÐµ {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ÐšÐžÑÐžÐœÐ° ÑÐ»ÐžÐºÐµ ÑÐµ Ð¿ÑÐµÐŒÐ°Ð»Ð° ({{ width }}px). ÐÐ°ÑÐŒÐ°ÑÐ° ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐ° ÑÐžÑÐžÐœÐ° ÑÐµ {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ÐÐžÑÐžÐœÐ° ÑÐ»ÐžÐºÐµ ÑÐµ Ð¿ÑÐµÐ²ÐµÐ»ÐžÐºÐ° ({{ height }}px). ÐÐ°ÑÐµÑÐ° ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐ° Ð²ÐžÑÐžÐœÐ° ÑÐµ {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ÐÐžÑÐžÐœÐ° ÑÐ»ÐžÐºÐµ ÑÐµ Ð¿ÑÐµÐŒÐ°Ð»Ð° ({{ height }}px). ÐÐ°ÑÐŒÐ°ÑÐ° ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐ° Ð²ÐžÑÐžÐœÐ° ÑÐµ {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÑÑÐµÐœÑÑÐœÐ° ÐºÐŸÑÐžÑÐœÐžÑÐºÐ° Ð»ÐŸÐ·ÐžÐœÐºÐ°.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° ÑÐ°ÑÐœÐŸ {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑ.|ÐÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° ÑÐ°ÑÐœÐŸ {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑÐ°.|ÐÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° ÑÐ°ÑÐœÐŸ {{ limit }} ÐºÐ°ÑÐ°ÐºÑÐµÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ° ÑÐµ ÑÐ°ÐŒÐŸ Ð¿Ð°ÑÑÐžÑÐ°Ð»ÐœÐŸ ÐŸÑÐ¿ÑÐµÐŒÑÐµÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>ÐÐ°ÑÐŸÑÐµÐºÐ° ÐœÐžÑÐµ ÐŸÑÐ¿ÑÐµÐŒÑÐµÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">ÐÑÐžÐ²ÑÐµÐŒÐµÐœÐž ÐŽÐžÑÐµÐºÑÐŸÑÐžÑÑÐŒ ÐœÐžÑÐµ ÐºÐŸÐœÑÐžÐ³ÑÑÐžÑÐ°Ðœ Ñ php.ini, ÐžÐ»Ðž ÐºÐŸÐœÑÐžÐ³ÑÑÐžÑÐ°ÐœÐž ÐŽÐžÑÐµÐºÑÐŸÑÐžÑÑÐŒ ÐœÐµ Ð¿ÐŸÑÑÐŸÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>ÐÐµÐŒÐŸÐ³ÑÑÐµ Ð¿ÐžÑÐ°ÑÐµ Ð¿ÑÐžÐ²ÑÐµÐŒÐµÐœÐµ ÐŽÐ°ÑÐŸÑÐµÐºÐµ ÐœÐ° ÐŽÐžÑÐº.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP ÐµÐºÑÑÐµÐœÐ·ÐžÑÐ° ÑÐµ Ð¿ÑÐŸÑÐ·ÑÐŸÐºÐŸÐ²Ð°Ð»Ð° ÐœÐµÑÑÐ¿ÐµÑ
+ ÐŸÑÐ¿ÑÐµÐŒÐ°ÑÐ° ÐŽÐ°ÑÐŸÑÐµÐºÐµ.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>ÐÐ²Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐ°ÐŽÑÐ¶Ðž {{ limit }} ÐžÐ»Ðž Ð²ÐžÑÐµ ÐµÐ»ÐµÐŒÐµÐœÐ°ÑÐ°.|ÐÐ²Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐ°ÐŽÑÐ¶Ðž {{ limit }} ÐžÐ»Ðž Ð²ÐžÑÐµ ÐµÐ»ÐµÐŒÐµÐœÐ°ÑÐ°.|ÐÐ²Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐ°ÐŽÑÐ¶Ðž {{ limit }} ÐžÐ»Ðž Ð²ÐžÑÐµ ÐµÐ»ÐµÐŒÐµÐœÐ°ÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>ÐÐ²Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐ°ÐŽÑÐ¶Ðž {{ limit }} ÐžÐ»Ðž ÐŒÐ°ÑÐµ ÐµÐ»ÐµÐŒÐµÐœÐ°ÑÐ°.|ÐÐ²Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐ°ÐŽÑÐ¶Ðž {{ limit }} ÐžÐ»Ðž ÐŒÐ°ÑÐµ ÐµÐ»ÐµÐŒÐµÐœÐ°ÑÐ°.|ÐÐ²Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐ°ÐŽÑÐ¶Ðž {{ limit }} ÐžÐ»Ðž ÐŒÐ°ÑÐµ ÐµÐ»ÐµÐŒÐµÐœÐ°ÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>ÐÐ²Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐ°ÐŽÑÐ¶Ðž ÑÐ°ÑÐœÐŸ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑ.|ÐÐ²Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐ°ÐŽÑÐ¶Ðž ÑÐ°ÑÐœÐŸ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑÐ°.|ÐÐ²Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° ÑÑÐµÐ±Ð° ÐŽÐ° ÑÐ°ÐŽÑÐ¶Ðž ÑÐ°ÑÐœÐŸ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÐ°ÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ÐÐµÐ²Ð°Ð»ÐžÐŽÐ°Ðœ Ð±ÑÐŸÑ ÐºÐ°ÑÑÐžÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>ÐÐµÐ²Ð°Ð»ÐžÐŽÐ°Ðœ Ð±ÑÐŸÑ ÐºÐ°ÑÑÐžÑÐµ ÐžÐ»Ðž ÑÐžÐ¿ ÐºÐ°ÑÑÐžÑÐµ ÐœÐžÑÐµ Ð¿ÐŸÐŽÑÐ¶Ð°Ðœ.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ ÐÐµÑÑÐœÐ°ÑÐŸÐŽÐœÐž Ð±ÑÐŸÑ Ð±Ð°ÐœÐºÐ°ÑÑÐºÐŸÐ³ ÑÐ°ÑÑÐœÐ° (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>ÐÐ²ÐŸ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>ÐÐ²ÐŸ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>ÐÐ²ÐŸ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ ISBN-10 ÐžÐ»Ðž ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>ÐÐ²ÐŸ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>ÐÐ²ÐŸ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐœÐ° Ð²Ð°Ð»ÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð²ÐµÑÐ° ÐŸÐŽ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð²ÐµÑÐ° ÐžÐ»Ðž ÑÐµÐŽÐœÐ°ÐºÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐžÐŽÐµÐœÑÐžÑÐœÐ° ÑÐ° {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐŒÐ°ÑÐ° ÐŸÐŽ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐŒÐ°ÑÐ° ÐžÐ»Ðž ÑÐµÐŽÐœÐ°ÐºÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÑÐµÐŽÐœÐ°ÐºÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐµ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐžÐŽÐµÐœÑÐžÑÐœÐ° ÑÐ° {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Ð Ð°Ð·ÐŒÐµÑÐ° ÐŸÐ²Ðµ ÑÐ»ÐžÐºÐµ ÑÐµ Ð¿ÑÐµÐ²ÐµÐ»ÐžÐºÐ° ({{ ratio }}). ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÐœÐ° ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐ° ÑÐ°Ð·ÐŒÐµÑÐ° ÑÐµ {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Ð Ð°Ð·ÐŒÐµÑÐ° ÐŸÐ²Ðµ ÑÐ»ÐžÐºÐµ ÑÐµ Ð¿ÑÐµÐŒÐ°Ð»Ð° ({{ ratio }}). ÐÐžÐœÐžÐŒÐ°Ð»ÐœÐ° ÐŸÑÐµÐºÐžÐ²Ð°ÐœÐ° ÑÐ°Ð·ÐŒÐµÑÐ° ÑÐµ {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Ð¡Ð»ÐžÐºÐ° ÑÐµ ÐºÐ²Ð°ÐŽÑÐ°ÑÐœÐ° ({{ width }}x{{ height }}px). ÐÐ²Ð°ÐŽÑÐ°ÑÐœÐµ ÑÐ»ÐžÐºÐµ ÐœÐžÑÑ ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐµ.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Ð¡Ð»ÐžÐºÐ° ÑÐµ ÐŸÑÐžÑÐµÐœÑÐ°ÑÐžÑÐµ Ð¿ÐµÑÐ·Ð°Ð¶Ð° ({{ width }}x{{ height }}px). ÐÐµÑÐ·Ð°Ð¶ÐœÐ° ÐŸÑÐžÑÐµÐœÑÐ°ÑÐžÑÐ° ÑÐ»ÐžÐºÐ° ÐœÐžÑÐµ ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Ð¡Ð»ÐžÐºÐ° ÑÐµ ÐŸÑÐžÑÐ°ÐœÑÐ°ÑÐžÑÐµ Ð¿ÐŸÑÑÑÐµÑÐ° ({{ width }}x{{ height }}px). ÐÐŸÑÑÑÐµÑÐœÐ° ÐŸÑÐžÑÐµÐœÑÐ°ÑÐžÑÐ° ÑÐ»ÐžÐºÐ° ÐœÐžÑÐµ ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>ÐÑÐ°Ð·ÐœÐ° ÐŽÐ°ÑÐŸÑÐµÐºÐ° ÐœÐžÑÐµ ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>ÐÐŒÐµ Ñ
+ÐŸÑÑÐ° ÐœÐµ ÐŒÐŸÐ¶Ðµ Ð±ÐžÑÐž ÑÐ°Ð·ÑÐµÑÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÑÐµ ÐœÐµ Ð¿ÐŸÐºÐ»Ð°Ð¿Ð° ÑÐ° ÐŸÑÐµÐºÐžÐ²Ð°ÐœÐžÐŒ {{ charset }} ÑÐµÑÐŸÐŒ ÐºÐ°ÑÐ°ÐºÑÐµÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ ÐÐŸÐŽ Ð·Ð° ÐžÐŽÐµÐœÑÐžÑÐžÐºÐ°ÑÐžÑÑ Ð±ÐžÐ·ÐœÐžÑÐ° (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>ÐÑÐµÑÐºÐ°</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ Ð±Ðž ÑÑÐµÐ±Ð°Ð»ÐŸ ÐŽÐ° Ð±ÑÐŽÐµ ÐŽÐµÑÐžÐ²Ð° ÑÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>BIC ÐºÐŸÐŽ ÐœÐžÑÐµ Ð¿ÐŸÐ²ÐµÐ·Ð°Ðœ ÑÐ° IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ Ð±Ðž ÑÑÐµÐ±Ð°Ð»ÐŸ ÐŽÐ° Ð±ÑÐŽÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>ÐÐ²Ð° ÐºÐŸÐ»ÐµÐºÑÐžÑÐ° Ð±Ðž ÑÑÐµÐ±Ð°Ð»Ð° ÐŽÐ° ÑÐ°ÐŽÑÐ¶Ðž ÑÐ°ÐŒÐŸ ÑÐµÐŽÐžÐœÑÑÐ²ÐµÐœÐµ ÐµÐ»ÐµÐŒÐµÐœÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ Ð±Ðž ÑÑÐµÐ±Ð°Ð»Ð° Ð±ÐžÑÐž Ð¿ÐŸÐ·ÐžÑÐžÐ²ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ Ð±Ðž ÑÑÐµÐ±Ð°Ð»Ð° Ð±ÐžÑÐž Ð¿ÐŸÐ·ÐžÑÐžÐ²ÐœÐ° ÐžÐ»Ðž ÐœÑÐ»Ð°.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ Ð±Ðž ÑÑÐµÐ±Ð°Ð»Ð° Ð±ÐžÑÐž ÐœÐµÐ³Ð°ÑÐžÐ²ÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ Ð±Ðž ÑÑÐµÐ±Ð°Ð»Ð° Ð±ÐžÑÐž Ð¿ÐŸÐ·ÐžÑÐžÐ²ÐœÐ° ÐžÐ»Ðž ÐœÑÐ»Ð°.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐœÐ° Ð²ÑÐµÐŒÐµÐœÑÐºÐ° Ð·ÐŸÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>ÐÐ²Ð° Ð»ÐŸÐ·ÐžÐœÐºÐ° ÑÐµ ÐºÐŸÐŒÐ¿ÑÐŸÐŒÐžÑÐŸÐ²Ð°ÐœÐ° Ð¿ÑÐžÐ»ÐžÐºÐŸÐŒ Ð¿ÑÐµÑÑ
+ÐŸÐŽÐœÐžÑ
+ ÐœÐ°Ð¿Ð°ÐŽÐ°, ÐœÐµÐŒÐŸÑÑÐµ ÑÐµ ÐºÐŸÑÐžÑÑÐžÑÐž. ÐÐŸÑÐžÑÑÐžÑÐµ ÐŽÑÑÐ³Ñ Ð»ÐŸÐ·ÐžÐœÐºÑ.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ ÐžÐ·ÐŒÐµÑÑ {{ min }} Ðž {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ ÐžÑÐ¿ÑÐ°Ð²ÐœÐŸ ÐžÐŒÐµ Ñ
+ÐŸÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>ÐÑÐŸÑ ÐµÐ»ÐµÐŒÐµÐœÐ°ÑÐ° Ñ ÐŸÐ²ÐŸÑ ÐºÐŸÐ»ÐµÐºÑÐžÑÐž Ð±Ðž ÑÑÐµÐ±Ð°Ð»ÐŸ ÐŽÐ° Ð±ÑÐŽÐµ ÐŽÐµÑÐžÐ² ÑÐ° {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ Ð±Ðž ÑÑÐµÐ±Ð°Ð»ÐŸ ÐŽÐ° Ð·Ð°ÐŽÐŸÐ²ÐŸÑÐ°Ð²Ð° ÐœÐ°ÑÐŒÐ°ÑÐµ ÑÐµÐŽÐœÐŸ ÐŸÐŽ ÐœÐ°ÑÐµÐŽÐœÐžÑ
+ ÐŸÐ³ÑÐ°ÐœÐžÑÐµÑÐ°:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Ð¡Ð²Ð°ÐºÐž ÐµÐ»ÐµÐŒÐµÐœÑ ÐŸÐ²Ðµ ÐºÐŸÐ»ÐµÐºÑÐžÑÐµ Ð±Ðž ÑÑÐµÐ±Ð°Ð»ÐŸ ÐŽÐ° Ð·Ð°ÐŽÐŸÐ²ÐŸÑÐž ÑÐŸÐ¿ÑÑÐ²ÐµÐœÐž ÑÐºÑÐ¿ ÐŸÐ³ÑÐ°ÐœÐžÑÐµÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ ÐžÑÐ¿ÑÐ°Ð²ÐœÐ° ÐŒÐµÑÑÐœÐ°ÑÐŸÐŽÐœÐ° ÐžÐŽÐµÐœÑÐžÑÐžÐºÐ°ÑÐžÐŸÐœÐ° ÐŸÐ·ÐœÐ°ÐºÐ° Ñ
+Ð°ÑÑÐžÑÐ° ÐŸÐŽ Ð²ÑÐµÐŽÐœÐŸÑÑÐž (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÑÐµÐ±Ð° ÐŽÐ° Ð±ÑÐŽÐµ Ð²Ð°Ð»ÐžÐŽÐ°Ðœ ÐžÐ·ÑÐ°Ð·.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ ÐžÑÐ¿ÑÐ°Ð²ÐœÐ° CSS Ð±ÐŸÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ ÐžÑÐ¿ÑÐ°Ð²ÐœÐ° CIDR ÐœÐŸÑÐ°ÑÐžÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>ÐÑÐµÐŽÐœÐŸÑÑ ÐŒÑÐµÐ¶ÐœÐµ ÐŒÐ°ÑÐºÐµ ÑÑÐµÐ±Ð° Ð±ÐžÑÐž ÐžÐ·ÐŒÐµÑÑ {{ min }} Ðž {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>ÐÐ°Ð·ÐžÐ² ÐŽÐ°ÑÐŸÑÐµÐºÐµ ÑÐµ ÑÑÐ²ÐžÑÐµ ÐŽÑÐ³Ð°ÑÐ°Ðº. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° {{ filename_max_length }} ÐºÐ°ÑÐ°ÐºÑÐµÑ ÐžÐ»Ðž ÐŒÐ°ÑÐµ.|ÐÐ°Ð·ÐžÐ² ÐŽÐ°ÑÐŸÑÐµÐºÐµ ÑÐµ ÑÑÐ²ÐžÑÐµ ÐŽÑÐ³Ð°ÑÐ°Ðº. Ð¢ÑÐµÐ±Ð° ÐŽÐ° ÐžÐŒÐ° {{ filename_max_length }} ÐºÐ°ÑÐ°ÐºÑÐµÑÐ° ÐžÐ»Ðž ÐŒÐ°ÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>ÐÐŸÐ·ÐžÐœÐºÐ° ÐœÐžÑÐµ ÐŽÐŸÐ²ÐŸÑÐœÐŸ ÑÐ°ÐºÐ°. ÐÐŸÐ»ÐžÐŒÐŸ ÐºÐŸÑÐžÑÑÐžÑÐµ ÑÐ°ÑÑ Ð»ÐŸÐ·ÐžÐœÐºÑ.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÑÐ°ÐŽÑÐ¶Ðž ÐºÐ°ÑÐ°ÐºÑÐµÑÐµ ÐºÐŸÑÐž ÐœÐžÑÑ ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐž ÐŸÐŽ ÑÑÑÐ°ÐœÐµ Ð²Ð°Ð¶ÐµÑÐµÐ³ ÐœÐžÐ²ÐŸÐ° ÑÐµÑÑÑÐžÐºÑÐžÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>ÐÐŸÑÐžÑÑÐµÑÐµ ÐœÐµÐ²ÐžÐŽÑÐžÐ²ÐžÑ
+ ÐºÐ°ÑÐ°ÐºÑÐµÑÐ° ÐœÐžÑÐµ ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>ÐÐµÑÐ°ÑÐµ Ð±ÑÐŸÑÐµÐ²Ð° ÐžÐ· ÑÐ°Ð·Ð»ÐžÑÐžÑÐžÑ
+ ÑÐºÑÐžÐ¿ÑÐž ÐœÐžÑÐµ ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>ÐÐŸÑÐžÑÑÐµÑÐµ ÑÐºÑÐžÐ²ÐµÐœÐžÑ
+ Ð¿ÑÐµÐºÐ»ÐŸÐ¿ÐœÐžÑ
+ ÐºÐ°ÑÐ°ÐºÑÐµÑÐ° ÐœÐžÑÐµ ÐŽÐŸÐ·Ð²ÐŸÑÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>ÐÐºÑÑÐµÐœÐ·ÐžÑÐ° ÑÐ°ÑÐ»Ð° ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐœÐ° ({{ extension }}). ÐÐŸÐ·Ð²ÐŸÑÐµÐœÐµ ÐµÐºÑÑÐµÐœÐ·ÐžÑÐµ ÑÑ {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>ÐÑÐºÑÐžÐ²ÐµÐœÐŸ ÐºÐŸÐŽÐžÑÐ°ÑÐµ Ð·ÐœÐ°ÐºÐŸÐ²Ð° ÑÐµ ÐœÐµÐ²Ð°Ð¶ÐµÑÐµ ({{ detected }}). ÐÐŸÐ·Ð²ÐŸÑÐµÐœÐ° ÐºÐŸÐŽÐžÑÐ°ÑÐ° ÑÑ {{  encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>ÐÐ²Ð° Ð²ÑÐµÐŽÐœÐŸÑÑ ÐœÐžÑÐµ Ð²Ð°Ð»ÐžÐŽÐœÐ° MAC Ð°ÐŽÑÐµÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">ÐÐ²ÐŸÐŒ URL ÐœÐµÐŽÐŸÑÑÐ°ÑÐµ ÐŽÐŸÐŒÐµÐœ ÐœÐ°ÑÐ²ÐžÑÐµÐ³ ÐœÐžÐ²ÐŸÐ°.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="sr-Latn" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Vrednost bi trebala da bude netaÄna.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Vrednost bi trebala da bude taÄna.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Vrednost bi trebala da bude tipa {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Vrednost bi trebala da bude prazna.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Vrednost koju ste izabrali nije validan izbor.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Morate izabrati najmanje {{ limit }} moguÄnosti.|Morate izabrati najmanje {{ limit }} moguÄnosti.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Morate izabrati najviÅ¡e {{ limit }} moguÄnosti.|Morate izabrati najviÅ¡e {{ limit }} moguÄnosti.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Jedna ili viÅ¡e od odabranih vrednosti nisu validne.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ovo polje nije bilo oÄekivano.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ovo polje nedostaje.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Vrednost nije validna kao datum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Vrednost nije validna kao datum i vreme.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Vrednost nije validna adresa elektronske poÅ¡te.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Fajl ne moÅŸe biti pronaÄen.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Fajl nije Äitljiv.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fajl je preveliki ({{ size }} {{ suffix }}). NajveÄa dozvoljena veliÄina fajla je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>MIME tip fajla nije validan ({{ type }}). Dozvoljeni MIME tipovi su {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Vrednost bi trebala da bude {{ limit }} ili manje.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Vrednost je predugaÄka. Trebalo bi da ima {{ limit }} karaktera ili manje.|Vrednost je predugaÄka. Trebalo bi da ima {{ limit }} karaktera ili manje.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Vrednost bi trebala da bude {{ limit }} ili viÅ¡e.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Vrednost je prekratka. Trebalo bi da ima {{ limit }} karaktera ili viÅ¡e.|Vrednost je prekratka. Trebalo bi da ima {{ limit }} karaktera ili viÅ¡e.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Vrednost ne bi trebala da bude prazna.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Vrednost ne bi trebala da bude null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Vrednost bi trebala da bude null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Vrednost nije validna.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Vrednost nije validno vreme.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Vrednost nije validan URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Obe vrednosti bi trebale da budu jednake.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fajl je preveliki. NajveÄa dozvoljena veliÄina je {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Fajl je preveliki.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Fajl ne moÅŸe biti otpremljen.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Vrednost bi trebala da bude validan broj.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ovaj fajl nije validan kao slika.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Ova vrednost nije validna IP adresa.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Vrednost nije validan jezik.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Vrednost nije validna meÄunarodna oznaka jezika.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Vrednost nije validna drÅŸava.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Vrednost je veÄ iskoriÅ¡Äena.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>VeliÄina slike ne moÅŸe biti odreÄena.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Å irina slike je prevelika ({{ width }} piksela). NajveÄa dozvoljena Å¡irina je {{ max_width }} piksela.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Å irina slike je premala ({{ width }} piksela). Najmanja dozvoljena Å¡irina je {{ min_width }} piksela.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Visina slike je prevelika ({{ height }} piksela). NajveÄa dozvoljena visina je {{ max_height }} piksela.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Visina slike je preniska ({{ height }} piksela). Najmanja dozvoljena visina je {{ min_height }} piksela.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Vrednost bi trebala da bude trenutna korisniÄka lozinka.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Vrednost bi trebala da ima taÄno {{ limit }} karaktera.|Vrednost bi trebala da ima taÄno {{ limit }} karaktera.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Fajl je samo parcijalno otpremljena.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Fajl nije otpremljen.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">Privremeni direktorijum nije konfigurisan u php.ini, ili konfigurisani direktorijum ne postoji.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Nije moguÄe upisati privremeni fajl na disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP ekstenzija je prouzrokovala neuspeh otpremanja datoteke.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ova kolekcija bi trebala da sadrÅŸi {{ limit }} ili viÅ¡e elemenata.|Ova kolekcija bi trebala da sadrÅŸi {{ limit }} ili viÅ¡e elemenata.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ova kolekcija bi trebala da sadrÅŸi {{ limit }} ili manje elemenata.|Ova kolekcija bi trebala da sadrÅŸi {{ limit }} ili manje elemenata.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ova kolekcija bi trebala da sadrÅŸi taÄno {{ limit }} element.|Ova kolekcija bi trebala da sadrÅŸi taÄno {{ limit }} elementa.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Nevalidan broj kartice.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Nevalidan broj kartice ili nepodrÅŸan tip kartice.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Ova vrednost nije validan MeÄunarodni broj bankovnog raÄuna (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Nevalidna vrednost ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Nevalidna vrednost ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Vrednost nije ni validan ISBN-10 ni validan ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Nevalidna vrednost ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Vrednost nije validna valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ova vrednost bi trebala da bude jednaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ova vrednost bi trebala da bude veÄa od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ova vrednost bi trebala da je veÄa ili jednaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ova vrednost bi trebala da bude identiÄna sa {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ova vrednost bi trebala da bude manja od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ova vrednost bi trebala da bude manja ili jednaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ova vrednost ne bi trebala da bude jednaka {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ova vrednost ne bi trebala da bude identiÄna sa {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Razmera ove slike je prevelika ({{ ratio }}). Maksimalna dozvoljena razmera je {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Razmera ove slike je premala ({{ ratio }}). Minimalna oÄekivana razmera je {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Slika je kvadratna ({{ width }}x{{ height }} piksela). Kvadratne slike nisu dozvoljene.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Slika je pejzaÅŸno orijentisana ({{ width }}x{{ height }} piksela). PejzaÅŸno orijentisane slike nisu dozvoljene.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Slika je portretno orijentisana ({{ width }}x{{ height }} piksela). Portretno orijentisane slike nisu dozvoljene.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Prazan fajl nije dozvoljen.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Ime hosta ne moÅŸe biti razreÅ¡eno.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Vrednost se ne poklapa sa oÄekivanim {{ charset }} setom karaktera.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Ova vrednost nije validan Kod za identifikaciju biznisa (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>GreÅ¡ka</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Ova vrednost nije validan UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ova vrednost bi trebala da bude viÅ¡estruka u odnosu na {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>BIC kod nije povezan sa IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Ova vrednost bi trebala da bude validan JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ova kolekcija bi trebala da sadrÅŸi samo jedinstvene elemente.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ova vrednost bi trebala biti pozitivna.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ova vrednost bi trebala biti ili pozitivna ili nula.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ova vrednost bi trebala biti negativna.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ova vrednost bi trebala biti ili negativna ili nula.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ova vrednost nije validna vremenska zona.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Lozinka je kompromitovana prilikom curenja podataka usled napada, nemojte je koristiti. Koristite drugu lozinku.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ova vrednost treba da bude izmeÄu {{ min }} i {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Ova vrednost nije ispravno ime posluÅŸitelja (hostname).</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Broj elemenata u ovoj kolekciji bi trebala da bude viÅ¡estruka u odnosu na {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Ova vrednost bi trebala da zadovoljava namjanje jedno od narednih ograniÄenja:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Svaki element ove kolekcije bi trebalo da zadovolji sopstveni skup ograniÄenja.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Ova vrednost nije ispravan meÄunarodni sigurnosni i identifikacioni broj (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Ova vrednost treba da bude validan izraz.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Ova vrednost nije validna CSS boja.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Ova vrednost nije validna CIDR notacija.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Vrednost mreÅŸne maske treba biti izmeÄu {{ min }} i {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Naziv fajla je suviÅ¡e dugaÄak. Treba da ima {{ filename_max_length }} karaktera ili manje.|Naziv fajla je suviÅ¡e dugaÄak. Treba da ima {{ filename_max_length }} karaktera ili manje.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Lozinka nije dovoljno jaka. Molimo koristite jaÄu lozinku.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Ova vrednost sadrÅŸi karaktere koji nisu dozvoljeni od strane vaÅŸeÄeg nivoa restrikcije.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>KoriÅ¡Äenje nevidljivih karaktera nije dozvoljeno.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>MeÅ¡anje brojeva iz razliÄitih skripti nije dozvoljeno.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>KoriÅ¡Äenje skrivenih pokrivenih karaktera nije dozvoljeno.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Ekstenzija fajla je nevalidna ({{ extension }}). Dozvoljene ekstenzije su {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Detektovani enkoding karaktera nije validan ({{ detected }}). Dozvoljne vrednosti za enkoding su: {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Ova vrednost nije validna MAC adresa.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Ovom URL nedostaje domen najviÅ¡eg nivoa.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sv.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sv.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.sv.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="sv" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>VÃ€rdet ska vara falskt.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>VÃ€rdet ska vara sant.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>VÃ€rdet ska vara av typen {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>VÃ€rdet ska vara tomt.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>VÃ€rdet ska vara ett av de givna valen.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Du mÃ¥ste vÃ€lja minst {{ limit }} val.|Du mÃ¥ste vÃ€lja minst {{ limit }} val.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Du kan som mest vÃ€lja {{ limit }} val.|Du kan som mest vÃ€lja {{ limit }} val.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Ett eller fler av de angivna vÃ€rdena Ã€r ogiltigt.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Det hÃ€r fÃ€ltet fÃ¶rvÃ€ntades inte.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Det hÃ€r fÃ€ltet saknas.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>VÃ€rdet Ã€r inte ett giltigt datum.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>VÃ€rdet Ã€r inte ett giltigt datum med tid.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>VÃ€rdet Ã€r inte en giltig e-postadress.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Filen kunde inte hittas.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Filen Ã€r inte lÃ€sbar.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen Ã€r fÃ¶r stor ({{ size }} {{ suffix }}). StÃ¶rsta tillÃ¥tna storlek Ã€r {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Filens MIME-typ ({{ type }}) Ã€r ogiltig. De tillÃ¥tna typerna Ã€r {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>VÃ€rdet ska vara {{ limit }} eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>VÃ€rdet Ã€r fÃ¶r lÃ¥ngt. Det ska ha {{ limit }} tecken eller fÃ€rre.|VÃ€rdet Ã€r fÃ¶r lÃ¥ngt. Det ska ha {{ limit }} tecken eller fÃ€rre.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>VÃ€rdet ska vara {{ limit }} eller mer.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>VÃ€rdet Ã€r fÃ¶r kort. Det ska ha {{ limit }} tecken eller mer.|VÃ€rdet Ã€r fÃ¶r kort. Det ska ha {{ limit }} tecken eller mer.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>VÃ€rdet kan inte vara tomt.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>VÃ€rdet kan inte vara null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>VÃ€rdet ska vara null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>VÃ€rdet Ã€r inte giltigt.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>VÃ€rdet Ã€r inte en giltig tid.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>VÃ€rdet Ã€r inte en giltig URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>De tvÃ¥ vÃ€rdena mÃ¥ste vara lika.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Filen Ã€r fÃ¶r stor. TillÃ¥ten maximal storlek Ã€r {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Filen Ã€r fÃ¶r stor.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Filen kunde inte laddas upp.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>VÃ€rdet ska vara ett giltigt nummer.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Filen Ã€r ingen giltig bild.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>VÃ€rdet Ã€r inte en giltig IP-adress.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>VÃ€rdet Ã€r inte ett giltigt sprÃ¥k.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>VÃ€rdet Ã€r inte en giltig plats.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>VÃ€rdet Ã€r inte ett giltigt land.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>VÃ€rdet anvÃ€nds redan.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Det gick inte att faststÃ€lla storleken pÃ¥ bilden.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Bildens bredd Ã€r fÃ¶r stor ({{ width }}px). TillÃ¥ten maximal bredd Ã€r {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Bildens bredd Ã€r fÃ¶r liten ({{ width }}px). Minsta fÃ¶rvÃ€ntade bredd Ã€r {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Bildens hÃ¶jd Ã€r fÃ¶r stor ({{ height }}px). TillÃ¥ten maximal bredd Ã€r {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Bildens hÃ¶jd Ã€r fÃ¶r liten ({{ height }}px). Minsta fÃ¶rvÃ€ntade hÃ¶jd Ã€r {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>VÃ€rdet ska vara anvÃ€ndarens nuvarande lÃ¶senord.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>VÃ€rdet ska ha exakt {{ limit }} tecken.|VÃ€rdet ska ha exakt {{ limit }} tecken.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Filen laddades bara upp delvis.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ingen fil laddades upp.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Ingen tillfÃ€llig mapp konfigurerades i php.ini, eller den konfigurerade mappen finns inte.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Kan inte skriva temporÃ€r fil till disken.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>En PHP extension gjorde att uppladdningen misslyckades.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Den hÃ€r samlingen ska innehÃ¥lla {{ limit }} element eller mer.|Den hÃ€r samlingen ska innehÃ¥lla {{ limit }} element eller mer.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Den hÃ€r samlingen ska innehÃ¥lla {{ limit }} element eller mindre.|Den hÃ€r samlingen ska innehÃ¥lla {{ limit }} element eller mindre.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Den hÃ€r samlingen ska innehÃ¥lla exakt {{ limit }} element.|Den hÃ€r samlingen ska innehÃ¥lla exakt {{ limit }} element.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Ogiltigt kortnummer.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>OkÃ€nd korttyp eller ogiltigt kortnummer.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>VÃ€rdet Ã€r inte ett giltigt internationellt bankkontonummer (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>VÃ€rdet Ã€r inte en giltig ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>VÃ€rdet Ã€r inte en giltig ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>VÃ€rdet Ã€r varken en giltig ISBN-10 eller en giltig ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>VÃ€rdet Ã€r inte en giltig ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>VÃ€rdet Ã€r inte en giltig valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>VÃ€rdet ska vara detsamma som {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>VÃ€rdet ska vara stÃ¶rre Ã€n {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>VÃ€rdet ska bara stÃ¶rre Ã€n eller detsamma som {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>VÃ€rdet ska vara identiskt till {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>VÃ€rdet ska vara mindre Ã€n {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>VÃ€rdet ska vara mindre Ã€n eller detsamma som {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>VÃ€rdet ska inte vara detsamma som {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>VÃ€rdet ska inte vara identiskt med {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>FÃ¶rhÃ¥llandet mellan bildens bredd och hÃ¶jd Ã€r fÃ¶r stort ({{ ratio }}). HÃ¶gsta tillÃ¥tna fÃ¶rhÃ¥llande Ã€r {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>FÃ¶rhÃ¥llandet mellan bildens bredd och hÃ¶jd Ã€r fÃ¶r litet ({{ ratio }}). Minsta tillÃ¥tna fÃ¶rhÃ¥llande Ã€r {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Bilden Ã€r kvadratisk ({{ width }}x{{ height }}px). Kvadratiska bilder tillÃ¥ts inte.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Bilden Ã€r landskapsorienterad ({{ width }}x{{ height }}px). Landskapsorienterade bilder tillÃ¥ts inte.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Bilden Ã€r portrÃ€ttsorienterad ({{ width }}x{{ height }}px). PortrÃ€ttsorienterade bilder tillÃ¥ts inte.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>En tom fil Ã€r inte tillÃ¥ten.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>VÃ€rddatorn kunde inte hittas.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>VÃ€rdet har inte den fÃ¶rvÃ€ntade teckenkodningen {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>VÃ€rdet Ã€r inte en giltig BIC-kod.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Fel</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>VÃ€rdet Ã€r inte en giltig UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>VÃ€rdet ska vara en multipel av {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Denna BIC-koden Ã€r inte associerad med IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>VÃ€rdet ska vara giltig JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Denna samling bÃ¶r endast innehÃ¥lla unika element.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>VÃ€rdet ska vara positivt.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>VÃ€rdet ska vara antingen positivt eller noll.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>VÃ€rdet ska vara negativt.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>VÃ€rdet ska vara antingen negativt eller noll.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>VÃ€rdet Ã€r inte en giltig tidszon.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Det hÃ€r lÃ¶senordet har lÃ€ckt ut vid ett dataintrÃ¥ng, det fÃ¥r inte anvÃ€ndas. AnvÃ€nd ett annat lÃ¶senord.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>VÃ€rdet bÃ¶r ligga mellan {{ min }} och {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>VÃ€rdet Ã€r inte ett giltigt servernamn.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Antalet element i samlingen ska vara en multipel av {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>VÃ€rdet ska uppfylla minst ett av fÃ¶ljande krav:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Varje element i samlingen skall uppfylla sin egen uppsÃ€ttning av krav.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>VÃ€rdet Ã€r inte ett giltigt "International Securities Identification Number" (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>VÃ€rdet ska vara ett giltigt uttryck.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>VÃ€rdet Ã€r inte en giltig CSS-fÃ€rg.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>VÃ€rdet Ã€r inte en giltig CIDR-notation.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>VÃ€rdet pÃ¥ nÃ€tmasken bÃ¶r vara mellan {{ min }} och {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Filnamnet Ã€r fÃ¶r lÃ¥ngt. Det mÃ¥ste vara {{ filename_max_length }} tecken eller fÃ€rre.|Filnamnet Ã€r fÃ¶r lÃ¥ngt. Det mÃ¥ste vara {{ filename_max_length }} tecken eller fÃ€rre.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Detta lÃ¶senord Ã€r fÃ¶r svagt. AnvÃ€nd ett starkare lÃ¶senord.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>VÃ€rdet innehÃ¥ller tecken som inte Ã€r tillÃ¥tna.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>AnvÃ€ndning av osynliga tecken Ã€r inte tillÃ¥tet.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Blandning av siffror frÃ¥n olika skript Ã€r inte tillÃ¥tet.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>AnvÃ€ndning av dolda Ã¶verlagringstecken Ã€r inte tillÃ¥tet.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>FiltillÃ€gget Ã€r ogiltigt ({{ extension }}). TillÃ¥tna filtillÃ€gg Ã€r {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Den upptÃ€ckta teckenkodningen Ã€r ogiltig ({{ detected }}). TillÃ¥tna kodningar Ã€r {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>VÃ€rdet Ã€r inte en giltig MAC-adress.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Denna URL saknar en toppdomÃ€n.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.th.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.th.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.th.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="th" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£à¹àžà¹àž false</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£à¹àžà¹àž true</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£à¹àžà¹àž {{ type }}</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>àžàž§àž£à¹àžà¹àžàžà¹àž²àž§à¹àž²àž</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>àžàžžàžà¹àž¥àž·àž­àžàžà¹àž²àžàžµà¹à¹àž¡à¹àžàž£àžàžàž±àžàžàž±àž§à¹àž¥àž·àž­àž</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>àžàžžàžàžà¹àž­àžà¹àž¥àž·àž­àžàž­àž¢à¹àž²àžàžà¹àž­àž¢ {{ limit }} àžàž±àž§à¹àž¥àž·àž­àž</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>àžàžžàžà¹àž¥àž·àž­àžà¹àžà¹àž¡àž²àžàžàžµà¹àžªàžžàž {{ limit }} àžàž±àž§à¹àž¥àž·àž­àž</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>àž¡àžµàžàž²àžàžà¹àž²àžàžµà¹àžªà¹àžàž¡àž²à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>à¹àž¡à¹àžàž§àž£àž¡àžµàžàžŽàž¥àžà¹àžàžµà¹</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>àžàžŽàž¥àžà¹àžàžµà¹àž«àž²àž¢à¹àž</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>àžà¹àž²àžàž­àžàž§àž±àžàžàžµà¹à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>àžà¹àž²àžàž­àžàž§àž±àžàžàžµà¹à¹àž¥àž°à¹àž§àž¥àž²à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>àžà¹àž²àžàž­àžàž­àžµà¹àž¡àž¥à¹à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>à¹àž¡à¹àžàžà¹àžàž¥à¹</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>à¹àžàž¥à¹à¹àž¡à¹àž­àž¢àž¹à¹à¹àžàžªàžàž²àžàž°àžàžµà¹àžªàž²àž¡àž²àž£àžàž­à¹àž²àžà¹àžà¹</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>à¹àžàž¥à¹à¹àž«àžà¹à¹àžàžŽàž ({{ size }} {{ suffix }}) àž­àžàžžàžàž²àžà¹àž«à¹à¹àž«àžà¹àžàžµà¹àžªàžžàžà¹àžà¹à¹àž¡à¹à¹àžàžŽàž {{ limit }} {{ suffix }}</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Mime type àžàž­àžà¹àžàž¥à¹à¹àž¡à¹àžàž¹àžàžà¹àž­àž ({{ type }}) Mime types àžàžµà¹àž­àžàžžàžàž²àžàžàž·àž­ {{ types }}</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£àžàž°à¹àžà¹àž {{ limit }} àž«àž£àž·àž­àžà¹àž­àž¢àžàž§à¹àž²àžàž±à¹àž</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>àžà¹àž²àžàžµà¹àž¢àž²àž§à¹àžàžŽàžà¹àž àžàž§àž£àžàž°àž¡àžµà¹àžà¹ {{ limit }} àžàž±àž§àž­àž±àžàž©àž£àž«àž£àž·àž­àžà¹àž­àž¢àžàž§à¹àž²àžàž±à¹àž</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£àžàž°àž¡àžµ {{ limit }} àž«àž£àž·àž­àž¡àž²àžàžàž§à¹àž²àžàž±à¹àž</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>àžà¹àž²àžàžµà¹àžªàž±à¹àžà¹àžàžŽàžà¹àž àžàž§àž£àžàž°àž¡àžµ {{ limit }} àžàž±àž§àž­àž±àžàž©àž£àž«àž£àž·àž­àž¡àž²àžàžàž§à¹àž²àžàž±à¹àž</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>àžà¹àž²àžàžµà¹à¹àž¡à¹àžàž§àž£à¹àžà¹àžàžà¹àž²àž§à¹àž²àž</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>àžà¹àž²àžàžµà¹à¹àž¡à¹àžàž§àž£à¹àžà¹àžàžà¹àž² null</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£à¹àžà¹àžàžà¹àž² null</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>àžà¹àž²àžàžµà¹à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>àžà¹àž²àžàž­àžà¹àž§àž¥àž²à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>àžà¹àž²àžàž­àž URL à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>àžà¹àž²àžàž±à¹àžàžªàž­àžàžà¹àž²àžàž§àž£àžàž°à¹àž«àž¡àž·àž­àžàžàž±àž</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>àžàžàž²àžà¹àžàž¥à¹à¹àž«àžà¹à¹àžàžŽàžà¹àž àž­àžàžžàžàž²àžà¹àž«à¹à¹àžàž¥à¹àžàžàž²àžà¹àž«àžà¹à¹àžà¹à¹àž¡à¹à¹àžàžŽàž {{ limit }} {{ suffix }}</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>àžàžàž²àžà¹àžàž¥à¹à¹àž«àžà¹à¹àžàžŽàžà¹àž</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>à¹àž¡à¹àžªàž²àž¡àž²àž£àžàž­àž±àžà¹àž«àž¥àžà¹àžàž¥à¹à¹àžà¹</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>àžà¹àž²àžàž­àžàžàž±àž§à¹àž¥àžà¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>à¹àžàž¥à¹àžàžµà¹à¹àž¡à¹à¹àžà¹à¹àžàž¥à¹àž£àž¹àžàž àž²àž</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">àžà¹àž²àžàžµà¹à¹àž¡à¹à¹àžà¹àžàžµà¹àž­àž¢àž¹à¹ IP àžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>àžà¹àž²àžàž­àžàž àž²àž©àž²à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>àžà¹àž²àžàž­àžàž àž¹àž¡àžŽàž àž²àž (Locale) à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>àžà¹àž²àžàž­àžàžàž£àž°à¹àžàžšà¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž¹àžà¹àžà¹àžàž²àžà¹àžà¹àž¥à¹àž§</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>à¹àž¡à¹àžªàž²àž¡àž²àž£àžàžàž£àž§àžàžªàž­àžàžàžàž²àžà¹àžàž¥à¹àžàž­àžàž àž²àžà¹àžà¹</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>àžàž§àž²àž¡àžàž§à¹àž²àžàžàž­àžàž àž²àžà¹àžàžŽàžàžàžàž²àž ({{ width }}px) àž­àžàžžàžàž²àžà¹àž«à¹àžàž§à¹àž²àžà¹àžà¹àž¡àž²àžàžàžµà¹àžªàžžàž {{ max_width }}px</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>àžàž§àž²àž¡àžàž§à¹àž²àžàžàž­àžàž àž²àžàžà¹àž³à¹àžàžŽàžà¹àž ({{ width }}px) àž­àžàžžàžàž²àžà¹àž«à¹àžàž§àž²àž¡àžàž§à¹àž²àžà¹àž¡à¹àžà¹àž³àžàž§à¹àž² {{ min_width }}px</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>àžàž§àž²àž¡àžªàž¹àžàžàž­àžàž àž²àžà¹àžàžŽàžàžàžàž²àž ({{ height }}px) àž­àžàžžàžàž²àžà¹àž«à¹àžªàž¹àžà¹àžà¹àž¡àž²àžàžàžµà¹àžªàžžàž {{ max_height }}px</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>àžàž§àž²àž¡àžªàž¹àžàžàž­àžàž àž²àžà¹àž¥à¹àžà¹àžàžŽàžà¹àž ({{ height }}px) àž­àžàžžàžàž²àžà¹àž«à¹àžàž§àž²àž¡àžªàž¹àžà¹àž¡à¹àžàž§àž£àžà¹àž³àžàž§à¹àž² {{ min_height }}px</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£àžàž°à¹àžà¹àžàž£àž«àž±àžªàžà¹àž²àžàžàž±àžàžàžžàžàž±àžàžàž­àžàžàž¹à¹à¹àžà¹</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£àžàž°àž¡àžµàžàž§àž²àž¡àž¢àž²àž§ {{ limit }} àžàž±àž§àž­àž±àžàž©àž£</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>àž­àž±àžà¹àž«àž¥àžà¹àžàž¥à¹à¹àžà¹à¹àžàžµàž¢àžàžàž²àžàžªà¹àž§àžà¹àžà¹àž²àžàž±à¹àž</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>à¹àž¡à¹àž¡àžµà¹àžàž¥à¹à¹àžàžàž¹àžàž­àž±àžà¹àž«àž¥àž</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">à¹àž¡à¹àž¡àžµàžàž²àž£àžàž³àž«àžàžà¹àžàž¥à¹àžàž­àž£à¹àžàž±à¹àž§àžàž£àž²àž§à¹àž php.ini àž«àž£àž·àž­à¹àžàž¥à¹àžàž­àž£à¹àžàžµà¹àžàž³àž«àžàžà¹àž¡à¹àž¡àžµàž­àž¢àž¹à¹àžàž£àžŽàž</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>à¹àž¡à¹àžªàž²àž¡àž²àž£àžà¹àžàžµàž¢àžà¹àžàž¥à¹àžàž±à¹àž§àžàž£àž²àž§ (temporary file) àž¥àžàžàžŽàžªàžà¹à¹àžà¹</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP extension àžàž³à¹àž«à¹àžàž²àž£àž­àž±àžà¹àž«àž¥àžàž¡àžµàžàž±àžàž«àž²</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>àžàž­à¹àž¥à¹àžàžàž±à¹àžàžàžµà¹àžàž§àž£àžàž°àžàž£àž°àžàž­àžà¹àžàžà¹àž§àž¢àž­àž¢à¹àž²àžàžà¹àž­àž¢ {{ limit }} àžªàž¡àž²àžàžŽàž</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>àžàž­à¹àž¥à¹àžàžàž±à¹àžàžàžµà¹à¹àž¡à¹àžàž§àž£àž¡àžµàžªàž¡àž²àžàžŽàžà¹àžàžŽàž {{ limit }}</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>àžàž­à¹àž¥à¹àžàžàž±à¹àžàžàžµà¹àžàž§àž£àžàž°àž¡àžµ {{ limit }} àžªàž¡àž²àžàžŽàžà¹àžà¹àž²àžàž±à¹àž</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>àž«àž¡àž²àž¢à¹àž¥àžàžàž±àžàž£à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>à¹àž¡à¹àž£àž¹à¹àžàž±àžàžàž£àž°à¹àž àžàžàž­àžàžàž±àžàž£ àž«àž£àž·àž­àž«àž¡àž²àž¢à¹àž¥àžàžàž±àžàž£à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">àžà¹àž²àžàžµà¹à¹àž¡à¹à¹àžà¹àž«àž¡àž²àž¢à¹àž¥àžàžàž±àžàžàžµàžàžàž²àžàž²àž£àž£àž°àž«àž§à¹àž²àžàžàž£àž°à¹àžàžš (IBAN) àžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>àžà¹àž²àžàžµà¹à¹àž¡à¹à¹àžà¹ ISBN-10 àžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>àžà¹àž²àžàžµà¹à¹àž¡à¹à¹àžà¹ ISBN-13 àžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>àžà¹àž²àžàžµà¹à¹àž¡à¹à¹àžà¹ ISBN-10 àž«àž£àž·àž­ ISBN-13 àžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>àžà¹àž²àžàžµà¹à¹àž¡à¹à¹àžà¹ ISSN àžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>àžà¹àž²àžàžµà¹à¹àž¡à¹à¹àžà¹àžªàžàžžàž¥à¹àžàžŽàžàžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£àžàž£àžàžàž±àž {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£àžàž°àž¡àž²àžàžàž§à¹àž² {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£àžàž°àž¡àž²àžàžàž§à¹àž²àž«àž£àž·àž­àžàž£àžàžàž±àž {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£àžàž°à¹àž«àž¡àž·àž­àžàžàž±àžàžàž±àž {{ compared_value_type }} {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£àžàž°àžà¹àž­àž¢àžàž§à¹àž² {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£àžàž°àžà¹àž­àž¢àžàž§à¹àž²àž«àž£àž·àž­à¹àžà¹àž²àžàž±àž {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>àžà¹àž²àžàžµà¹à¹àž¡à¹àžàž§àž£à¹àžà¹àž²àžàž±àžàžàž±àž {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>àžà¹àž²àžàžµà¹à¹àž¡à¹àžàž§àž£à¹àž«àž¡àž·àž­àžàžàž±àžàžàž±àž {{ compared_value_type }} {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>àžªàž±àžàžªà¹àž§àžàžàž­àžàž àž²àžà¹àž«àžà¹à¹àžàžŽàž ({{ ratio }}) àžªàž±àžàžªà¹àž§àžà¹àž«àžà¹àžàžµà¹àžªàžžàžàžàžµà¹à¹àžà¹à¹àžà¹àžàž·àž­ {{ max_ratio }}</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>àžªàž±àžàžªà¹àž§àžàžàž­àžàž àž²àžà¹àž¥à¹àžà¹àžàžŽàž ({{ ratio }}) àžªàž±àžàžªà¹àž§àžà¹àž¥à¹àžàžàžµà¹àžªàžžàžàžàžµà¹à¹àžà¹à¹àžà¹àžàž·àž­ {{ min_ratio }}</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>àž£àž¹àžàž àž²àžà¹àžà¹àžàžàžžàžàž£àž±àžª ({{ width }}x{{ height }}px) à¹àž¡à¹àž­àžàžžàžàž²àžàž àž²àžàžàžµà¹à¹àžà¹àžàžªàžµà¹à¹àž«àž¥àžµà¹àž¢àž¡àžàžàžžàž£àž±àžª</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>àž àž²àžàžàžµà¹à¹àžà¹àžà¹àžàž§àžàž­àž ({{ width }}x{{ height }}px) à¹àž¡à¹àž­àžàžžàžàž²àžàž àž²àžàžàžµà¹à¹àžà¹àžà¹àžàž§àžàž­àž</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>àž àž²àžàžàžµà¹à¹àžà¹àžà¹àžàž§àžàž±à¹àž ({{ width }}x{{ height }}px) à¹àž¡à¹àž­àžàžžàžàž²àžàž àž²àžàžàžµà¹à¹àžà¹àžà¹àžàž§àžàž±à¹àž</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>à¹àž¡à¹àž­àžàžžàžàž²àžà¹àž«à¹à¹àžà¹à¹àžàž¥à¹àž§à¹àž²àž</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>à¹àž¡à¹àžªàž²àž¡àž²àž£àžà¹àžà¹à¹àžàžàž·à¹àž­à¹àž®àžªàžà¹</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>àžà¹àž²àžàžµà¹à¹àž¡à¹àžàž£àžàžàž±àžàžàž²àž£à¹àžà¹àž²àž£àž«àž±àžª {{ charset }}</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">àžà¹àž²àžàžµà¹à¹àž¡à¹à¹àžà¹àž£àž«àž±àžªàžàž£àž°àžàž³àžàž±àž§àžàžžàž£àžàžŽàž (BIC) àžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>à¹àžàžŽàžàžà¹àž­àžàžŽàžàžàž¥àž²àž</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">àžà¹àž²àžàžµà¹à¹àž¡à¹à¹àžà¹ UUID àžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£à¹àžà¹àž {{ compared_value }} àž«àž¥àž²àž¢àžàž±àž§</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>àž£àž«àž±àžªàžªàž³àž«àž£àž±àžàž£àž°àžàžžàžàžžàž£àžàžŽàžàžàžµà¹ (BIC) à¹àž¡à¹à¹àžàžµà¹àž¢àž§àžà¹àž­àžàžàž±àž IBAN {{ iban }}</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£àž­àž¢àž¹à¹à¹àžàž£àž¹àžà¹àžàž JSON àžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>àžàž­à¹àž¥à¹àžàžàž±à¹àžàžàžµà¹àžàž§àž£àž¡àžµà¹àžàžàž²àž°àžªàž¡àž²àžàžŽàžàžàžµà¹à¹àž¡à¹àžà¹àž³àžàž±àžà¹àžà¹àž²àžàž±à¹àž</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£à¹àžà¹àžàžà¹àž²àžàž§àž</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£à¹àžà¹àžàžà¹àž²àžàž§àžàž«àž£àž·àž­àžà¹àž²àžšàž¹àžàž¢à¹</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£à¹àžà¹àžàžà¹àž²àž¥àž</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£à¹àžà¹àžàžà¹àž²àž¥àžàž«àž£àž·àž­àžà¹àž²àžšàž¹àžàž¢à¹</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>àžà¹àž²à¹àžàžà¹àž§àž¥àž²à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>àž£àž«àž±àžªàžà¹àž²àžàžàžµà¹à¹àžà¹à¹àžàž¢àž£àž±à¹àž§à¹àž«àž¥àž­àž­àžà¹àžà¹àžàž¢àžàž¹àžàžàž²àž£àž¥àž°à¹àž¡àžŽàžàžà¹àž­àž¡àž¹àž¥ àžàž¶à¹àžà¹àž¡à¹àžàž§àž£àžàž³àžàž¥àž±àžàž¡àž²à¹àžà¹ àžàž£àžžàžàž²à¹àžà¹àž£àž«àž±àžªàžà¹àž²àžàž­àž·à¹àž</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£àž­àž¢àž¹à¹àž£àž°àž«àž§à¹àž²àž {{ min }} àžàž¶àž {{ max }}</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>àžà¹àž²à¹àž®àžªàžà¹à¹àžàž¡à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>àžàž³àžàž§àžàžàž­àžàžªàž¡àž²àžàžŽàžà¹àžàžàž­à¹àž¥à¹àžàžàž±à¹àžàžàž§àž£à¹àžà¹àžàžàž«àžžàžàž¹àžàžàž­àž {{ compared_value }}</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£à¹àžà¹àžà¹àžàžàž²àž¡àžà¹àž­àžàž³àžàž±àžàž­àž¢à¹àž²àžàžà¹àž­àž¢àž«àžàž¶à¹àžàžà¹àž­àžàž²àžàžà¹àž­àžàž³àžàž±àžà¹àž«àž¥à¹àž²àžàžµà¹:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>àžªàž¡àž²àžàžŽàžà¹àžà¹àž¥àž°àžàž±àž§à¹àžàžàž­à¹àž¥à¹àžàžàž±à¹àžàžàž§àž£à¹àžà¹àžà¹àžàžàž²àž¡àžà¹àž­àžàž³àžàž±àžàžàž­àžàžàž­à¹àž¥à¹àžàžàž±à¹àžàžàž±à¹àžà¹</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>àžà¹àž²àž£àž«àž±àžªàž«àž¥àž±àžàžàž£àž±àžàž¢à¹àžªàž²àžàž¥ (ISIN) à¹àž¡à¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž§àž£à¹àžà¹àžàžàžŽàžàžàžà¹àžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>àžà¹àž²àžàžµà¹à¹àž¡à¹à¹àžà¹àžªàžµ CSS àžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>àžà¹àž²àžàžµà¹à¹àž¡à¹à¹àžà¹àž£àž¹àžà¹àžàž CIDR àžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>àžà¹àž²àžàž­àž netmask àžàž§àž£àž¡àžµàžà¹àž²àž£àž°àž«àž§à¹àž²àž {{ min }} àžàž¶àž {{ max }}</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>àžàž·à¹àž­à¹àžàž¥à¹àž¢àž²àž§à¹àžàžŽàžà¹àž àžàž§àž£àžàž°àž¡àžµà¹àžà¹ {{ filename_max_length }} àžàž±àž§àž­àž±àžàž©àž£àž«àž£àž·àž­àžà¹àž­àž¢àžàž§à¹àž²àžàž±à¹àž</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>àž£àž«àž±àžªàžà¹àž²àžàž¡àžµàžàž§àž²àž¡àžàž¥àž­àžàž àž±àž¢àžà¹àž³ àžàž£àžžàžàž²à¹àžà¹àž£àž«àž±àžªàžà¹àž²àžàžàžµà¹àž¡àžµàžàž§àž²àž¡àžàž¥àž­àžàž àž±àž¢àžªàž¹àž</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>àžà¹àž²àžàžµà¹àžàž£àž°àžàž­àžàžà¹àž§àž¢àžàž±àž§àž­àž±àžàž©àž£àžàžµà¹à¹àž¡à¹àž£àž±àžàž­àžàžžàžàž²àžàžàž²àžàž£àž°àžàž±àžàžà¹àž­àžàž±àžàžàž±àžàžàž±àžàžàžžàžàž±àž</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>à¹àž¡à¹àž­àžàžžàžàž²àžà¹àž«à¹à¹àžà¹àžàž±àž§àž­àž±àžàž©àž£àžàžµà¹àž¡àž­àžà¹àž¡à¹à¹àž«à¹àž</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>à¹àž¡à¹àž­àžàžžàžàž²àžà¹àž«à¹àžàžªàž¡àžàž±àž§à¹àž¥àžàžàž²àžàžªàžàž£àžŽàžàžà¹àžàžµà¹à¹àžàžàžà¹àž²àžàžàž±àž</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>à¹àž¡à¹àž­àžàžžàžàž²àžà¹àž«à¹à¹àžà¹àžàž±àž§àž­àž±àžàž©àž£àžà¹àž­àžàžàž±àžàžàžµà¹àžà¹àž­àžàž­àž¢àž¹à¹</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">àžàž²àž¡àžªàžàžžàž¥à¹àžàž¥à¹à¹àž¡à¹àžàž¹àžàžà¹àž­àž ({{ extension }}). àžàž²àž¡àžªàžàžžàž¥àžàžµà¹àž­àžàžžàžàž²àžàžàž·àž­ {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">àžàž²àž£à¹àžà¹àž²àž£àž«àž±àžªàž­àž±àžàžàž£àž°àžàžµà¹àžàž£àž§àžàžàžà¹àž¡à¹àžàž¹àžàžà¹àž­àž ({{ detected }}). àžàž²àž£à¹àžà¹àž²àž£àž«àž±àžªàžàžµà¹àž­àžàžžàžàž²àžàžàž·àž­ {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">àžà¹àž²àžàžµà¹à¹àž¡à¹à¹àžà¹àžàžµà¹àž­àž¢àž¹à¹ MAC àžàžµà¹àžàž¹àžàžà¹àž­àž</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">URL àžàžµà¹àžàž²àžà¹àžà¹àž¡àžàž£àž°àžàž±àžàžªàž¹àžàžªàžžàž.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.tl.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.tl.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.tl.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="tl" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Ang halaga nito ay dapat na huwad.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Ang halaga nito ay dapat totoo.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ang halaga nito ay dapat sa uri {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Ang halaga nito ay dapat walang laman.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Ang halaga ng iyong pinili ay hindi balidong pagpili.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Kailangan mong pumili ng pinakamababang {{ limit }} ng pagpilian.|Kailangan mong pumili ng pinakamababang {{ limit }} ng mga pagpipilian.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Kailangan mong pumili ng pinakamataas {{ limit }} ng pagpipilian.|Kailangan mong pumili ng pinakamataas {{ limit }} ng mga pagpipilian.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Isa o higit pang mga halaga na binigay ay hindi balido.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ang larangang ito ay hindi inaasahan.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Ang patlang na ito ay nawawala.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ang halagang ito ay hindi balidong petsa.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Ang halagang ito ay hindi wastong petsa/oras.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Ang halagang ito ay hindi balidong address ng email.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Ang file na ito ay hindi makita.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Ang file na ito ay hindi mabasa.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ang file na ito ay masyadong malaki ({{ size }} {{ suffix }}). Ang pinakamalaking sukat {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Ang uri ng file ng mime ay hindi balido ({{ type }}). Ang mga pinapayagang uri ng mime ay ang  {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Ang halaga nito ay dapat na {{ limit }} or maliit pa.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ang halaga nito ay masyadong mahaba. Ito ay dapat na {{ limit }} karakter o maliit pa.|Ang halaga nito ay masyadong mahaba. Ito ay dapat na {{ limit }} mga karakter o maliit pa.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Ang halaga nito ay dapat na {{ limit }} o mas marami pa.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ang halaga nito ay masyadong maliit. Ito ay dapat na {{ limit }} karakter o marami pa.|Ang halaga nito ay masyadong maliit. Ito ay dapat na {{ limit }} mga karakter o marami pa.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Ang halaga na ito ay dapat na may laman.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Meron dapt itong halaga.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Wala dapat itong halaga.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Hindi balido ang halagang ito.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Ang halagang ito ay hindi wastong oras.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Hindi ito isang balidong URL.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Ang dalwang halaga ay dapat magkapareha.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ang file ay masyadong malaki. Ang pinapayagan halaga lamang ay {{ limit}} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ang file na ito ay masyadong malaki.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Ang file na ito ay hindi ma-upload.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Ang halaga nito ay dapat na wastong numero.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Ang file na ito ay hindi wastong imahe.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Ang halagang ito ay hindi isang wastong IP address.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Ang halaga na ito ay hindi balidong wika.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ito ay isang hindi wastong locale na halaga.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>ng halaga na ito ay hindi wastong bansa.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ang halaga na ito ay ginamit na.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Ang sukat ng imahe ay hindi madetect.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Ang lapad ng imahe ay masyadong malaki ({{ width }}px). Ang pinapayagang lapay ay {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Ang lapad ng imahe ay masyadong maliit ({{ width }}px). Ang pinakamaliit na pinapayagang lapad ay {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Ang haba ng imahe ay masyadong mataas ({{ height }}px). Ang pinakmataas na haba ay {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Ang haba ng imahe ay masyadong maliit ({{ height }}px). Ang inaasahang haba ay {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Ang halagang ito ay dapat na password ng kasalukuyang gumagamit.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ang halagang ito ay dapat na eksakto sa {{ limit}} karakter.|Ang halagang ito ay dapat na eksakto sa {{ limit }} mga karakter.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Ang file na ito ay kahalating na upload lamang.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Walang na upload na file.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">Walang pansamantalang folder na na-configure sa php.ini, o ang naka-configure na folder ay hindi umiiral.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Temporaryong hindi  makasulat ng file sa disk.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Ang dahilan ng pagkabigo ng pagupload ng files ay isang extension ng PHP.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ang koleksyon na ito ay dapat magkaroon ng {{ limit }} elemento o marami pa.|Ang koleksyon na ito ay dapat magkaroon ng {{ limit }} mga elemento o marami pa.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ang koleksyon na ito ay dapat magkaroon ng {{ limit }} elemento o maliit pa.|Ang koleksyon na ito ay dapat magkaroon ng {{ limit }} mga elemento o maliit pa.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ang koleksyong ito ay magkaroon ng eksaktong {{ limit }} elemento.|Ang koleksyong ito ay magkaroon ng eksaktong {{ limit }} mga elemento.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Hindi wastong numero ng kard.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Hindi supportadong uri ng kard o hindi wastong numero ng kard.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Ang halagang ito ay hindi isang wastong International Bank Account Number (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Ang halagang ito ay hindi balidong SBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Ang halagang ito ay hindi balidong ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Ang halagang ito ay pwdeng isang balidong ISBN-10 o isang balidong ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Ang halangang ito ay hindi isang balidong ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Ang halagang ito ay hindi balidong pera.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ito ay hindi dapat magkapareho sa {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ang halagang ito ay dapat tataas sa {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ang halagang ito ay dapat mas mataas o magkapareha sa {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ang halagang ito ay dapat kapareha ng {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ang halagang ito ay dapat mas maliit sa {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ang halagang ito ay dapat mas maliit o magkapareha sa {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ang halagang ito ay hindi dapat magkapareha sa {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ang halagang ito ay hindi dapat magkapareha sa {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Ang ratio ng imahe ay masyadong malaki ({{ ratio }}). Ang pinakamalaking ratio ay {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Ang ratio ng imahe ay masyadong maliit ({{ ratio }}). Ang pinakamaliit na ratio ay {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Ang imahe ay kwadrado ({{ width }}x{{ height }}px). Ang mga kwadradong imahe ay hindi pwede.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Ang orientasyon ng imahe ay nakalandscape ({{ width }}x{{ height }}px). Ang mga imaheng nakalandscape ang orientasyon ay hindi pwede.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Ang orientasyon ng imahe ay nakaportrait ({{ width }}x{{ height }}px). Ang mga imaheng nakaportrait ang orientasyon ay hindi pwede.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Ang file na walang laman ay hindi pwede.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Hindi maresolba ang host.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ang halaga ay hindi kapareha sa inaasahang {{ charset }} set ng karater.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Ang halagang ito ay hindi isang wastong Business Identifier Code (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Error</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Ang halagang ito ay hindi isang wastong UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ang halagang ito ay dapat multiple ng {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ang Business Identifier Code (BIC) na ito ay walang kaugnayan sa IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Ang halagang ito ay dapat naka wastong JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ang mga elemento ng koleksyong ito ay dapat magkakaiba.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ang halagang ito ay dapat positibo.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ang halagang ito ay dapat positibo o zero.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ang halagang ito ay dapat negatibo.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ang halagang ito ay dapat negatibo o zero.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ang halagang ito ay hindi wastong timezone.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Naikalat ang password na ito sa isang data breach at hindi na dapat gamitin. Mangyaring gumamit ng ibang pang password.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ang halagang ito ay dapat nasa pagitan ng {{ min }} at {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Ang halagang ito ay hindi wastong hostname.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Ang bilang ng mga elemento sa koleksyon na ito ay dapat multiple ng {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Ang halagang ito ay dapat masunod ang kahit na isang sumusunod na batayan.</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Ang bawat elemento sa koleksyon na ito ay dapat masunod ang nararapat na batayan.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Ang halagang ito ay hindi wastong International Securities Identification Number (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Ang halagang ito ay dapat wastong ekspresyon.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Ang halagang ito ay hindi wastong kulay ng CSS.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target state="needs-review-translation">Ang halagang ito ay hindi wastong notasyong CIDR.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target state="needs-review-translation">Ang halaga ng netmask ay dapat nasa pagitan ng {{ min }} at {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target state="needs-review-translation">Ang pangalan ng file ay masyadong mahaba. Dapat itong magkaroon ng {{ filename_max_length }} karakter o mas kaunti.|Ang pangalan ng file ay masyadong mahaba. Dapat itong magkaroon ng {{ filename_max_length }} mga karakter o mas kaunti.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target state="needs-review-translation">Ang lakas ng password ay masyadong mababa. Mangyaring gumamit ng mas malakas na password.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target state="needs-review-translation">Ang halagang ito ay naglalaman ng mga karakter na hindi pinapayagan ng kasalukuyang antas ng paghihigpit.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target state="needs-review-translation">Hindi pinapayagan ang paggamit ng mga hindi nakikitang karakter.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target state="needs-review-translation">Hindi pinapayagan ang paghahalo ng mga numero mula sa iba't ibang script.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target state="needs-review-translation">Hindi pinapayagan ang paggamit ng mga nakatagong overlay na karakter.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">Ang extension ng file ay hindi wasto ({{ extension }}). Ang mga pinapayagang extension ay {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">Ang nakitang encoding ng karakter ay hindi wasto ({{ detected }}). Ang mga pinapayagang encoding ay {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Ang halagang ito ay hindi isang wastong MAC address.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Kulang ang URL na ito sa top-level domain.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.tr.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.tr.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.tr.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="tr" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Bu deÄer olumsuz olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Bu deÄer olumlu olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Bu deÄerin tipi {{ type }} olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Bu deÄer boÅ olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>SeÃ§tiÄiniz deÄer geÃ§erli bir seÃ§enek deÄil.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>En az {{ limit }} seÃ§enek belirtmelisiniz.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>En Ã§ok {{ limit }} seÃ§enek belirtmelisiniz.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Verilen deÄerlerden bir veya daha fazlasÄ± geÃ§ersiz.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Bu alan beklenen olmadÄ±.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Bu alan, eksik</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Bu deÄer doÄru bir tarih biÃ§imi deÄildir.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Bu deÄer doÄru bir tarihsaat biÃ§imi deÄildir.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Bu deÄer doÄru bir e-mail adresi deÄildir.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Dosya bulunamadÄ±.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Dosya okunabilir deÄil.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Dosya Ã§ok bÃŒyÃŒk ({{ size }} {{ suffix }}). Ä°zin verilen en bÃŒyÃŒk dosya boyutu {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>DosyanÄ±n mime tipi geÃ§ersiz ({{ type }}). Ä°zin verilen mime tipleri {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Bu deÄer {{ limit }} ve altÄ±nda olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Bu deÄer Ã§ok uzun. {{ limit }} karakter veya daha az olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Bu deÄer {{ limit }} veya daha fazla olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Bu deÄer Ã§ok kÄ±sa. {{ limit }} karakter veya daha fazla olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Bu deÄer boÅ bÄ±rakÄ±lmamalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Bu deÄer boÅ bÄ±rakÄ±lmamalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Bu deÄer boÅ bÄ±rakÄ±lmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Bu deÄer geÃ§erli deÄil.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Bu deÄer doÄru bir saat deÄil.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>Bu deÄer doÄru bir URL deÄil.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Ä°ki deÄer eÅit olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Dosya Ã§ok bÃŒyÃŒk. Ä°zin verilen en bÃŒyÃŒk dosya boyutu {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Dosya Ã§ok bÃŒyÃŒk.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Dosya yÃŒklenemiyor.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Bu deÄer geÃ§erli bir rakam olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Bu dosya geÃ§erli bir resim deÄildir.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Bu deÄer geÃ§erli bir IP adresi deÄil.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Bu deÄer geÃ§erli bir lisan deÄil.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Bu deÄer geÃ§erli bir yer deÄildir.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Bu deÄer geÃ§erli bir ÃŒlke deÄildir.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Bu deÄer Åu anda kullanÄ±mda.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Resmin boyutu saptanamÄ±yor.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Resmin geniÅliÄi Ã§ok bÃŒyÃŒk ({{ width }}px). Ä°zin verilen en bÃŒyÃŒk geniÅlik {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Resmin geniÅliÄi Ã§ok kÃŒÃ§ÃŒk ({{ width }}px). En az {{ min_width }}px olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Resmin yÃŒksekliÄi Ã§ok bÃŒyÃŒk ({{ height }}px). Ä°zin verilen en bÃŒyÃŒk yÃŒkseklik {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Resmin yÃŒksekliÄi Ã§ok kÃŒÃ§ÃŒk ({{ height }}px). En az {{ min_height }}px olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Bu deÄer kullanÄ±cÄ±nÄ±n Åu anki Åifresi olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Bu deÄer tam olarak {{ limit }} karakter olmaldÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Dosya sadece kÄ±smen yÃŒklendi.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>HiÃ§bir dosya yÃŒklenmedi.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">php.ini'de geÃ§ici bir klasÃ¶r yapÄ±landÄ±rÄ±lmadÄ±, veya yapÄ±landÄ±rÄ±lan klasÃ¶r mevcut deÄil.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>GeÃ§ici dosya diske yazÄ±lamÄ±yor.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Bir PHP eklentisi dosyanÄ±n yÃŒklemesini baÅarÄ±sÄ±z kÄ±ldÄ±.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Bu derlem {{ limit }} veya daha Ã§ok eleman iÃ§ermelidir.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Bu derlem {{ limit }} veya daha az eleman iÃ§ermelidir.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Bu derlem {{ limit }} eleman iÃ§ermelidir.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>GeÃ§ersiz kart numarasÄ±.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Desteklenmeyen kart tipi veya geÃ§ersiz kart numarasÄ±.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Bu deÄer geÃ§erli bir UluslararasÄ± Banka Hesap NumarasÄ± (IBAN) deÄil.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Bu deÄer geÃ§erli bir ISBN-10 deÄildir.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Bu deÄer geÃ§erli bir ISBN-13 deÄildir.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Bu deÄer geÃ§erli bir ISBN-10 veya ISBN-13 deÄildir.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Bu deÄer geÃ§erli bir ISSN deÄildir.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Bu deÄer geÃ§erli bir para birimi deÄil.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Bu deÄer {{ compared_value }} ile eÅit olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Bu deÄer {{ compared_value }} deÄerinden bÃŒyÃŒk olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Bu deÄer {{ compared_value }} ile eÅit veya bÃŒyÃŒk olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Bu deÄer {{ compared_value_type }} {{ compared_value }} ile aynÄ± olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Bu deÄer {{ compared_value }} deÄerinden dÃŒÅÃŒk olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>.Bu deÄer {{ compared_value }} ile eÅit veya dÃŒÅÃŒk olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Bu deÄer {{ compared_value }} ile eÅit olmamalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Bu deÄer {{ compared_value_type }} {{ compared_value }} ile aynÄ± olmamalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Resim oranÄ± Ã§ok bÃŒyÃŒk ({{ ratio }}). Ä°zin verilen maksimum oran: {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Resim oranÄ± Ã§ok ufak ({{ ratio }}). Beklenen minimum oran {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Resim karesi ({{ width }}x{{ height }}px). Kare resimlerine izin verilmiyor.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Resim manzara odaklÄ± ({{ width }}x{{ height }}px). Manzara odaklÄ± resimlere izin verilmiyor.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Resim portre odaklÄ± ({{ width }}x{{ height }}px). Portre odaklÄ± resimlere izin verilmiyor.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>BoÅ bir dosyaya izin verilmiyor.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Sunucu Ã§Ã¶zÃŒlemedi.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Bu deÄer beklenen {{ charset }} karakter kÃŒmesiyle eÅleÅmiyor.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Bu deÄer geÃ§erli bir Ä°Åletme TanÄ±mlama Kodu (BIC) deÄil.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Hata</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Bu deÄer geÃ§erli bir UUID deÄil.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Bu deÄer {{ compare_value }} deÄerinin katlarÄ±ndan biri olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Bu Ä°Åletme TanÄ±mlayÄ±cÄ± Kodu (BIC), IBAN {{ iban }} ile iliÅkili deÄildir.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Bu deÄer iÃ§in geÃ§erli olmalÄ±dÄ±r JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Bu grup yalnÄ±zca benzersiz Ã¶Äeler iÃ§ermelidir.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Bu deÄer pozitif olmalÄ±.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Bu deÄer pozitif veya sÄ±fÄ±r olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Bu deÄer negatif olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Bu deÄer, negatif veya sÄ±fÄ±r olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Bu deÄer, geÃ§erli bir saat dilimi deÄil.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Bu parola, bir veri ihlali nedeniyle sÄ±zdÄ±rÄ±lmÄ±ÅtÄ±r ve kullanÄ±lmamalÄ±dÄ±r. LÃŒtfen baÅka bir Åifre kullanÄ±n.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Bu deÄer {{ min }} ve {{ max }} arasÄ±nda olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Bu deÄer, geÃ§erli bir ana bilgisayar adÄ± deÄil.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Bu gruptaki Ã¶Äe sayÄ±sÄ± birden fazla olmalÄ±dÄ±r {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Bu deÄer aÅaÄÄ±daki kÄ±sÄ±tlamalardan birini karÅÄ±lamalÄ±dÄ±r:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Bu gruptaki her Ã¶Äe kendi kÄ±sÄ±tlamalarÄ±nÄ± karÅÄ±lamalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Bu deÄer geÃ§erli bir UluslararasÄ± Menkul KÄ±ymetler Kimlik NumarasÄ± deÄil (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Bu deÄer geÃ§erli bir ifade olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Bu deÄer geÃ§erli bir CSS rengi deÄil.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Bu deÄer geÃ§erli bir CIDR yazÄ±mÄ± deÄil.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Netmask'in deÄeri {{ min }} ve {{ max }} arasÄ±nda olmaldÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Dosya adÄ± Ã§ok uzun. {{ filename_max_length }} karakter veya daha az olmalÄ±dÄ±r.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Åifre gÃŒcÃŒ Ã§ok dÃŒÅÃŒk. LÃŒtfen daha gÃŒÃ§lÃŒ bir Åifre kullanÄ±n.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Bu deÄer, mevcut kÄ±sÄ±tlama seviyesi tarafÄ±ndan izin verilmeyen karakterler iÃ§eriyor.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>GÃ¶rÃŒnmez karakterlerin kullanÄ±lmasÄ± izin verilmez.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>FarklÄ± yazÄ± tÃŒrlerinden sayÄ±larÄ±n karÄ±ÅtÄ±rÄ±lmasÄ± izin verilmez.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Gizli ÃŒstÃŒ kaplama karakterlerinin kullanÄ±lmasÄ± izin verilmez.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Dosya uzantÄ±sÄ± geÃ§ersiz ({{ extension }}). Ä°zin verilen uzantÄ±lar {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>Tespit edilen karakter kodlamasÄ± geÃ§ersiz ({{ detected }}). Ä°zin verilen kodlamalar: {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Bu deÄer geÃ§erli bir MAC adresi deÄil.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Bu URL bir ÃŒst dÃŒzey alan adÄ± eksik.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.uk.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.uk.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.uk.xlf	(revision 8435)
@@ -0,0 +1,473 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="uk" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž ÐÑ.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž Ð¢Ð°Ðº.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Ð¢ÐžÐ¿ Ð·ÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐœÐµÐœ Ð±ÑÑÐž {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž Ð¿ÑÑÑÐžÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>ÐÐ±ÑÐ°ÐœÐµ Ð²Ð°ÐŒÐž Ð·ÐœÐ°ÑÐµÐœÐœÑ ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐµ.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>ÐÐž Ð¿ÐŸÐ²ÐžÐœÐœÑ ÐŸÐ±ÑÐ°ÑÐž Ñ
+ÐŸÑÐ° Ð± {{ limit }} Ð²Ð°ÑÑÐ°ÐœÑ.|ÐÐž Ð¿ÐŸÐ²ÐžÐœÐœÑ ÐŸÐ±ÑÐ°ÑÐž Ñ
+ÐŸÑÐ° Ð± {{ limit }} Ð²Ð°ÑÑÐ°ÐœÑÐž.|ÐÐž Ð¿ÐŸÐ²ÐžÐœÐœÑ ÐŸÐ±ÑÐ°ÑÐž Ñ
+ÐŸÑÐ° Ð± {{ limit }} Ð²Ð°ÑÑÐ°ÐœÑÑÐ².</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>ÐÐž Ð¿ÐŸÐ²ÐžÐœÐœÑ ÐŸÐ±ÑÐ°ÑÐž ÐœÐµ Ð±ÑÐ»ÑÑÐµ ÐœÑÐ¶ {{ limit }} Ð²Ð°ÑÑÐ°ÐœÑÑÐ².</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>ÐÐŽÐœÐµ Ð°Ð±ÐŸ ÐºÑÐ»ÑÐºÐ° Ð·Ð°ÐŽÐ°ÐœÐžÑ
+ Ð·ÐœÐ°ÑÐµÐœÑ Ñ ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÑ.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>ÐŠÐµ Ð¿ÐŸÐ»Ðµ ÐœÐµ ÐŸÑÑÐºÑÑÑÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>ÐŠÐµ Ð¿ÐŸÐ»Ðµ ÐœÐµ Ð²ÐžÑÑÐ°ÑÐ°Ñ.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>ÐÐ°ÐœÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ñ Ð²ÑÑÐœÐŸÑ ÐŽÐ°ÑÐŸÑ.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>ÐÐ°ÐœÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ ÐŽÐ°ÑÐž ÑÐ° ÑÐ°ÑÑ ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐµ.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð°ÐŽÑÐµÑÐž ÑÐ»ÐµÐºÑÑÐŸÐœÐœÐŸÑ Ð¿ÐŸÑÑÐž ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐµ.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Ð€Ð°Ð¹Ð» ÐœÐµ Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Ð€Ð°Ð¹Ð» ÐœÐµ ÑÐžÑÐ°ÑÑÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ð€Ð°Ð¹Ð» Ð·Ð°ÐœÐ°ÐŽÑÐŸ Ð²ÐµÐ»ÐžÐºÐžÐ¹ ({{ size }} {{ suffix }}). ÐÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐžÐ¹ ÐŒÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÐžÐ¹ ÑÐŸÐ·ÐŒÑÑ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>MIME-ÑÐžÐ¿ ÑÐ°Ð¹Ð»Ñ ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐžÐ¹ ({{ type }}). ÐÐŸÐ¿ÑÑÑÐžÐŒÑ MIME-ÑÐžÐ¿Ðž ÑÐ°Ð¹Ð»ÑÐ² {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž {{ limit }} Ð°Ð±ÐŸ ÐŒÐµÐœÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð·Ð°ÐœÐ°ÐŽÑÐŸ ÐŽÐŸÐ²Ð³Ðµ. ÐÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž ÑÑÐ²ÐœÐµ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ñ Ð°Ð±ÐŸ ÐŒÐµÐœÑÐµ.|ÐÐœÐ°ÑÐµÐœÐœÑ Ð·Ð°ÐœÐ°ÐŽÑÐŸ ÐŽÐŸÐ²Ð³Ðµ. ÐÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž ÑÑÐ²ÐœÐµ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°ÐŒ Ð°Ð±ÐŸ ÐŒÐµÐœÑÐµ.|ÐÐœÐ°ÑÐµÐœÐœÑ Ð·Ð°ÐœÐ°ÐŽÑÐŸ ÐŽÐŸÐ²Ð³Ðµ. ÐÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž ÑÑÐ²ÐœÐµ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°ÐŒ Ð°Ð±ÐŸ ÐŒÐµÐœÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž {{ limit }} Ð°Ð±ÐŸ Ð±ÑÐ»ÑÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð·Ð°ÐœÐ°ÐŽÑÐŸ ÐºÐŸÑÐŸÑÐºÐµ. ÐÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž ÑÑÐ²ÐœÐµ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ñ Ð°Ð±ÐŸ Ð±ÑÐ»ÑÑÐµ.|ÐÐœÐ°ÑÐµÐœÐœÑ Ð·Ð°ÐœÐ°ÐŽÑÐŸ ÐºÐŸÑÐŸÑÐºÐµ. ÐÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž ÑÑÐ²ÐœÐµ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°ÐŒ Ð°Ð±ÐŸ Ð±ÑÐ»ÑÑÐµ.|ÐÐœÐ°ÑÐµÐœÐœÑ Ð·Ð°ÐœÐ°ÐŽÑÐŸ ÐºÐŸÑÐŸÑÐºÐµ. ÐÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž ÑÑÐ²ÐœÐµ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°ÐŒ Ð°Ð±ÐŸ Ð±ÑÐ»ÑÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž Ð¿ÑÑÑÐžÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž null.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž null.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐµ.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÑÐ°ÑÑ ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐµ.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ URL ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐµ.</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>ÐÐ±ÐžÐŽÐ²Ð° Ð·Ð°ÐœÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐœÐœÑ Ð±ÑÑÐž ÐŸÐŽÐžÐœÐ°ÐºÐŸÐ²ÐžÐŒÐž.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Ð€Ð°Ð¹Ð» Ð·Ð°ÐœÐ°ÐŽÑÐŸ Ð²ÐµÐ»ÐžÐºÐžÐ¹. ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÐžÐ¹ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐžÐ¹ ÑÐŸÐ·ÐŒÑÑ {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Ð€Ð°Ð¹Ð» Ð·Ð°ÐœÐ°ÐŽÑÐŸ Ð²ÐµÐ»ÐžÐºÐžÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Ð€Ð°Ð¹Ð» ÐœÐµ ÐŒÐŸÐ¶Ð»ÐžÐ²ÐŸ Ð·Ð°Ð²Ð°ÐœÑÐ°Ð¶ÐžÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ Ð±ÑÑÐž ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐžÐŒ ÑÐžÑÐ»ÐŸÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>ÐŠÐµÐ¹ ÑÐ°Ð¹Ð» ÐœÐµ Ñ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐžÐŒ ÑÐŸÑÐŒÐ°ÑÐŸÐŒ Ð·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target>ÐŠÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ñ ÐŽÑÐ¹ÑÐœÐŸÑ IP-Ð°ÐŽÑÐµÑÐŸÑ.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>ÐŠÐµ ÐœÐµÐºÐŸÑÐµÐºÑÐœÐ° ÐŒÐŸÐ²Ð°.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>ÐŠÐµ ÐœÐµÐºÐŸÑÐµÐºÑÐœÐ° Ð»ÐŸÐºÐ°Ð»ÑÐ·Ð°ÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>ÐŠÐµ ÐœÐµÐºÐŸÑÐµÐºÑÐœÐ° ÐºÑÐ°ÑÐœÐ°.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>ÐŠÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ Ð²Ð¶Ðµ Ð²ÐžÐºÐŸÑÐžÑÑÐŸÐ²ÑÑÑÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÐžÐ·ÐœÐ°ÑÐžÑÐž ÑÐŸÐ·ÐŒÑÑ Ð·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ÐšÐžÑÐžÐœÐ° Ð·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ Ð·Ð°ÐœÐ°ÐŽÑÐŸ Ð²ÐµÐ»ÐžÐºÐ° ({{ width }}px). ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐ° ÑÐžÑÐžÐœÐ° {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ÐšÐžÑÐžÐœÐ° Ð·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ Ð·Ð°ÐœÐ°ÐŽÑÐŸ ÐŒÐ°Ð»Ð° ({{ width }}px). ÐÑÐœÑÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐ° ÑÐžÑÐžÐœÐ° {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ÐÐžÑÐŸÑÐ° Ð·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ Ð·Ð°ÐœÐ°ÐŽÑÐŸ Ð²ÐµÐ»ÐžÐºÐ° ({{ height }}px). ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐ° Ð²ÐžÑÐŸÑÐ° {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ÐÐžÑÐŸÑÐ° Ð·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ Ð·Ð°ÐœÐ°ÐŽÑÐŸ ÐŒÐ°Ð»Ð° ({{ height }}px). ÐÑÐœÑÐŒÐ°Ð»ÑÐœÐŸ ÐŽÐŸÐ¿ÑÑÑÐžÐŒÐ° Ð²ÐžÑÐŸÑÐ° {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ Ð±ÑÑÐž Ð¿ÐŸÑÐŸÑÐœÐžÐŒ Ð¿Ð°ÑÐŸÐ»ÐµÐŒ ÐºÐŸÑÐžÑÑÑÐ²Ð°ÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐžÐœÐŸ Ð±ÑÑÐž ÑÑÐ²ÐœÐžÐŒ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ñ.|ÐÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐžÐœÐŸ Ð±ÑÑÐž ÑÑÐ²ÐœÐžÐŒ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°ÐŒ.|ÐÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐžÐœÐŸ Ð±ÑÑÐž ÑÑÐ²ÐœÐžÐŒ {{ limit }} ÑÐžÐŒÐ²ÐŸÐ»Ð°ÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Ð€Ð°Ð¹Ð» Ð±ÑÐ² Ð·Ð°Ð²Ð°ÐœÑÐ°Ð¶ÐµÐœÐžÐ¹ Ð»ÐžÑÐµ ÑÐ°ÑÑÐºÐŸÐ²ÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ð€Ð°Ð¹Ð» ÐœÐµ Ð±ÑÐ² Ð·Ð°Ð²Ð°ÐœÑÐ°Ð¶ÐµÐœÐžÐ¹.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target>Ð£ php.ini ÐœÐµ Ð±ÑÐ»ÐŸ ÐœÐ°Ð»Ð°ÑÑÐŸÐ²Ð°ÐœÐŸ ÑÐžÐŒÑÐ°ÑÐŸÐ²ÐŸÑ ÑÐµÐºÐž, Ð°Ð±ÐŸ ÐœÐ°Ð»Ð°ÑÑÐŸÐ²Ð°ÐœÐ° ÑÐµÐºÐ° ÐœÐµ ÑÑÐœÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>ÐÐµÐŒÐŸÐ¶Ð»ÐžÐ²ÐŸ Ð·Ð°Ð¿ÐžÑÐ°ÑÐž ÑÐžÐŒÑÐ°ÑÐŸÐ²ÐžÐ¹ ÑÐ°Ð¹Ð» ÐœÐ° ÐŽÐžÑÐº.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Ð ÐŸÐ·ÑÐžÑÐµÐœÐœÑ PHP Ð²ÐžÐºÐ»ÐžÐºÐ°Ð»ÐŸ Ð¿ÐŸÐŒÐžÐ»ÐºÑ Ð¿ÑÐž Ð·Ð°Ð²Ð°ÐœÑÐ°Ð¶ÐµÐœÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>ÐŠÑ ÐºÐŸÐ»ÐµÐºÑÑÑ Ð¿ÐŸÐ²ÐžÐœÐœÐ° ÐŒÑÑÑÐžÑÐž {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑ ÑÐž Ð±ÑÐ»ÑÑÐµ.|ÐŠÑ ÐºÐŸÐ»ÐµÐºÑÑÑ Ð¿ÐŸÐ²ÐžÐœÐœÐ° ÐŒÑÑÑÐžÑÐž {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑÐ° ÑÐž Ð±ÑÐ»ÑÑÐµ.|ÐŠÑ ÐºÐŸÐ»ÐµÐºÑÑÑ Ð¿ÐŸÐ²ÐžÐœÐœÐ° ÐŒÑÑÑÐžÑÐž {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑÑÐ² ÑÐž Ð±ÑÐ»ÑÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>ÐŠÑ ÐºÐŸÐ»ÐµÐºÑÑÑ Ð¿ÐŸÐ²ÐžÐœÐœÐ° ÐŒÑÑÑÐžÑÐž {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑ ÑÐž ÐŒÐµÐœÑÐµ.|ÐŠÑ ÐºÐŸÐ»ÐµÐºÑÑÑ Ð¿ÐŸÐ²ÐžÐœÐœÐ° ÐŒÑÑÑÐžÑÐž {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑÐ° ÑÐž ÐŒÐµÐœÑÐµ.|ÐŠÑ ÐºÐŸÐ»ÐµÐºÑÑÑ Ð¿ÐŸÐ²ÐžÐœÐœÐ° ÐŒÑÑÑÐžÑÐž {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑÐŸÐ² ÑÐž ÐŒÐµÐœÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>ÐŠÑ ÐºÐŸÐ»ÐµÐºÑÑÑ Ð¿ÐŸÐ²ÐžÐœÐœÐ° ÐŒÑÑÑÐžÑÐž ÑÑÐ²ÐœÐŸ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑ.|ÐŠÑ ÐºÐŸÐ»ÐµÐºÑÑÑ Ð¿ÐŸÐ²ÐžÐœÐœÐ° ÐŒÑÑÑÐžÑÐž ÑÑÐ²ÐœÐŸ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑÐ°.|ÐŠÑ ÐºÐŸÐ»ÐµÐºÑÑÑ Ð¿ÐŸÐ²ÐžÐœÐœÐ° ÐŒÑÑÑÐžÑÐž ÑÑÐ²ÐœÐŸ {{ limit }} ÐµÐ»ÐµÐŒÐµÐœÑÑÐ².</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ÐÐµÐ²ÑÑÐœÐžÐ¹ ÐœÐŸÐŒÐµÑ ÐºÐ°ÑÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>ÐÐµÐ¿ÑÐŽÑÑÐžÐŒÑÐ²Ð°ÐœÐžÐ¹ ÑÐžÐ¿ ÐºÐ°ÑÑÐž Ð°Ð±ÐŸ ÐœÐµÐ²ÑÑÐœÐžÐ¹ ÐœÐŸÐŒÐµÑ ÐºÐ°ÑÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target>ÐŠÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ñ ÐŽÑÐ¹ÑÐœÐžÐŒ ÐŒÑÐ¶ÐœÐ°ÑÐŸÐŽÐœÐžÐŒ ÐœÐŸÐŒÐµÑÐŸÐŒ Ð±Ð°ÐœÐºÑÐ²ÑÑÐºÐŸÐ³ÐŸ ÑÐ°Ñ
+ÑÐœÐºÑ (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ñ ÑÐŸÑÐŒÐ°ÑÑ ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ñ ÑÐŸÑÐŒÐ°ÑÑ ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ð²ÑÐŽÐ¿ÐŸÐ²ÑÐŽÐ°Ñ ÑÐŸÑÐŒÐ°ÑÐ°ÐŒ ISBN-10 ÑÐ° ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ ÐœÐµÐ²ÑÑÐœÐžÐ¹ ÑÐŸÑÐŒÐ°Ñ ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ ÐœÐµÐ²ÑÑÐœÐžÐ¹ ÑÐŸÑÐŒÐ°Ñ Ð²Ð°Ð»ÑÑÐž.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ ÐŽÐŸÑÑÐ²ÐœÑÐ²Ð°ÑÐž {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ Ð±ÑÑÐž Ð±ÑÐ»ÑÑÐµ ÐœÑÐ¶ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ Ð±ÑÑÐž Ð±ÑÐ»ÑÑÐµ Ð°Ð±ÐŸ ÐŽÐŸÑÑÐ²ÐœÑÐ²Ð°ÑÐž {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ Ð±ÑÑÐž ÑÐŽÐµÐœÑÐžÑÐœÐžÐŒ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž ÐŒÐµÐœÑÐµ ÐœÑÐ¶ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž ÐŒÐµÐœÑÐµ Ð°Ð±ÐŸ ÐŽÐŸÑÑÐ²ÐœÑÐ²Ð°ÑÐž {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ ÐŽÐŸÑÑÐ²ÐœÑÐ²Ð°ÑÐž  {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ Ð±ÑÑÐž ÑÐŽÐµÐœÑÐžÑÐœÐžÐŒ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Ð¡Ð¿ÑÐ²Ð²ÑÐŽÐœÐŸÑÐµÐœÐœÑ ÑÑÐŸÑÑÐœ Ð·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ Ð·Ð°ÐœÐ°ÐŽÑÐŸ Ð²ÐµÐ»ÐžÐºÐµ ({{ ratio }}). ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÐµ ÑÐ¿ÑÐ²Ð²ÑÐŽÐœÐŸÑÐµÐœÐœÑ ÑÑÐŸÑÑÐœ {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Ð¡Ð¿ÑÐ²Ð²ÑÐŽÐœÐŸÑÐµÐœÐœÑ ÑÑÐŸÑÑÐœ Ð·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ Ð·Ð°ÐœÐ°ÐŽÑÐŸ ÐŒÐ°Ð»ÐŸ ({{ ratio }}). ÐÑÐœÑÐŒÐ°Ð»ÑÐœÐµ ÑÐ¿ÑÐ²Ð²ÑÐŽÐœÐŸÑÐµÐœÐœÑ ÑÑÐŸÑÑÐœ {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>ÐÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ ÐºÐ²Ð°ÐŽÑÐ°ÑÐœÐµ ({{ width }}x{{ height }}px). ÐÐ²Ð°ÐŽÑÐ°ÑÐœÑ Ð·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ ÐœÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>ÐÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ Ð°Ð»ÑÐ±ÐŸÐŒÐœÐŸÑ ÐŸÑÑÑÐœÑÐ°ÑÑÑ ({{ width }}x{{ height }}px). ÐÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ Ð°Ð»ÑÐ±ÐŸÐŒÐœÐŸÑ ÐŸÑÑÑÐœÑÐ°ÑÑÑ ÐœÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>ÐÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ Ð² Ð¿ÐŸÑÑÑÐµÑÐœÑÐ¹ ÐŸÑÑÑÐœÑÐ°ÑÑÑ ({{ width }}x{{ height }}px). ÐÐŸÐ±ÑÐ°Ð¶ÐµÐœÐœÑ Ð² Ð¿ÐŸÑÑÑÐµÑÐœÐŸÑ ÐŸÑÑÑÐœÑÐ°ÑÑÑ ÐœÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>ÐÐŸÑÐŸÐ¶ÐœÑ ÑÐ°Ð¹Ð»Ðž ÐœÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>ÐÐŒ'Ñ Ñ
+ÐŸÑÑÐ° ÐœÐµ Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ð·Ð±ÑÐ³Ð°ÑÑÑÑÑ Ð· ÐŸÑÑÐºÑÐ²Ð°ÐœÐžÐŒ {{ charset }} ÐºÐŸÐŽÑÐ²Ð°ÐœÐœÑÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target>ÐŠÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ñ ÐŽÑÐ¹ÑÐœÐžÐŒ Ð±Ð°ÐœÐºÑÐ²ÑÑÐºÐžÐŒ ÐºÐŸÐŽÐŸÐŒ (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>ÐÐŸÐŒÐžÐ»ÐºÐ°</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target>ÐŠÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ñ ÐŽÑÐ¹ÑÐœÐžÐŒ UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>ÐŠÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐœÐœÐµ Ð±ÑÑÐž ÐºÑÐ°ÑÐœÐžÐŒ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>ÐÐ°ÐœÐºÑÐ²ÑÑÐºÐžÐ¹ ÐºÐŸÐŽ (BIC) ÐœÐµ Ð¿ÐŸÐ²âÑÐ·Ð°ÐœÐžÐ¹ ÑÐ· ÐŒÑÐ¶ÐœÐ°ÑÐŸÐŽÐœÐžÐŒ ÐœÐŸÐŒÐµÑÐŸÐŒ Ð±Ð°ÐœÐºÑÐ²ÑÑÐºÐŸÐ³ÐŸ ÑÐ°Ñ
+ÑÐœÐºÑ (IBAN) {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ Ð±ÑÑÐž ÐºÐŸÑÑÐµÐºÑÐœÐžÐŒ JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>ÐŠÑ ÐºÐŸÐ»ÐµÐºÑÑÑ Ð¿ÐŸÐ²ÐžÐœÐœÐ° ÐŒÐ°ÑÐž ÑÑÐ»ÑÐºÐž ÑÐœÑÐºÐ°Ð»ÑÐœÐž Ð·ÐœÐ°ÑÐµÐœÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ Ð±ÑÑÐž Ð¿ÐŸÐ·ÐžÑÐžÐ²ÐœÐžÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ Ð±ÑÑÐž Ð¿ÐŸÐ·ÐžÑÐžÐ²ÐœÐžÐŒ Ð°Ð±ÐŸ ÐŽÐŸÑÑÐ²ÐœÑÐ²Ð°ÑÐž ÐœÑÐ»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ Ð±ÑÑÐž ÐœÐµÐ³Ð°ÑÐžÐ²ÐœÐžÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ Ð±ÑÑÐž ÐœÐµÐ³Ð°ÑÐžÐ²ÐœÐžÐŒ Ð°Ð±ÐŸ ÐŽÐŸÑÑÐ²ÐœÑÐ²Ð°ÑÐž ÐœÑÐ»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ñ ÐŽÑÐ¹ÑÐœÐžÐŒ ÑÐ°ÑÐŸÐ²ÐžÐŒ Ð¿ÐŸÑÑÐŸÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>ÐŠÐµÐ¹ Ð¿Ð°ÑÐŸÐ»Ñ Ð±ÑÐ² ÑÐºÐŸÐŒÐ¿ÑÐŸÐŒÐµÑÐŸÐ²Ð°ÐœÐžÐ¹ Ð² ÑÐµÐ·ÑÐ»ÑÑÐ°ÑÑ Ð²ÐžÑÐŸÐºÑ ÐŽÐ°ÐœÐžÑ
+ ÑÐ° ÐœÐµ Ð¿ÐŸÐ²ÐžÐœÐµÐœ Ð²ÐžÐºÐŸÑÐžÑÑÐŸÐ²ÑÐ²Ð°ÑÐžÑÑ. ÐÑÐŽÑ Ð»Ð°ÑÐºÐ°, Ð²ÐžÐºÐŸÑÐžÑÑÐŸÐ²ÑÐ¹ÑÐµ ÑÐœÑÐžÐ¹ Ð¿Ð°ÑÐŸÐ»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ Ð±ÑÑÐž ÐŒÑÐ¶ {{ min }} ÑÐ° {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ñ ÐŽÑÐ¹ÑÐœÐžÐŒ ÑÐŒÐµÐœÐµÐŒ Ñ
+ÐŸÑÑÐ°.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>ÐÑÐ»ÑÐºÑÑÑÑ ÐµÐ»ÐµÐŒÐµÐœÑÑÐ² Ñ ÑÑÐ¹ ÐºÐŸÐ»ÐµÐºÑÑÑ Ð¿ÐŸÐ²ÐžÐœÐœÐ° Ð±ÑÑÐž ÐºÑÐ°ÑÐœÐŸÑ {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð¿ÐŸÐ²ÐžÐœÐœÐŸ Ð·Ð°ÐŽÐŸÐ²ÐŸÐ»ÑÐœÑÑÐž Ñ
+ÐŸÑÐ° Ð± ÐŸÐŽÐœÐŸÐŒÑ Ð· ÐœÐ°ÑÑÑÐ¿ÐœÐžÑ
+ ÐŸÐ±ÐŒÐµÐ¶ÐµÐœÑ:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>ÐÐŸÐ¶ÐµÐœ ÐµÐ»ÐµÐŒÐµÐœÑ ÑÑÑÑ ÐºÐŸÐ»ÐµÐºÑÑÑ Ð¿ÐŸÐ²ÐžÐœÐµÐœ Ð·Ð°ÐŽÐŸÐ²ÐŸÐ»ÑÐœÑÑÐž Ð²Ð»Ð°ÑÐœÐŸÐŒÑ ÐœÐ°Ð±ÐŸÑÑ ÐŸÐ±ÐŒÐµÐ¶ÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>ÐŠÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ñ ÐŽÑÐ¹ÑÐœÐžÐŒ ÐŒÑÐ¶ÐœÐ°ÑÐŸÐŽÐœÐžÐŒ ÑÐŽÐµÐœÑÐžÑÑÐºÐ°ÑÑÐ¹ÐœÐžÐŒ ÐœÐŸÐŒÐµÑÐŸÐŒ ÑÑÐœÐœÐžÑ
+ Ð¿Ð°Ð¿ÐµÑÑÐ² (ISIN).</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>ÐŠÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ ÐŒÐ°Ñ Ð±ÑÑÐž ÐŽÑÐ¹ÑÐœÐžÐŒ Ð²ÐžÑÐ°Ð·ÐŸÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>ÐŠÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ñ ÐŽÑÐ¹ÑÐœÐžÐŒ CSS ÐºÐŸÐ»ÑÐŸÑÐŸÐŒ.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>ÐŠÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ñ ÐŽÑÐ¹ÑÐœÐŸÑ CIDR ÐœÐŸÑÐ°ÑÑÐµÑ.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐœÑ Ð² ÐŒÐµÑÐµÐ¶ÐµÐ²ÑÐ¹ ÐŒÐ°ÑÑÑ ÐŒÐ°Ñ Ð±ÑÑÐž ÐŒÑÐ¶ {{ min }} ÑÐ° {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>ÐÐ°Ð·Ð²Ð° ÑÐ°Ð¹Ð»Ñ Ð·Ð°ÐœÐ°ÐŽÑÐŸ ÐŽÐŸÐ²Ð³Ð°. ÐÐŸÐœÐ° ÐŒÐ°Ñ ÐŒÑÑÑÐžÑÐž {{ filename_max_length }} ÑÐžÐŒÐ²ÐŸÐ»ÑÐ² Ð°Ð±ÐŸ ÐŒÐµÐœÑÐµ.|ÐÐ°Ð·Ð²Ð° ÑÐ°Ð¹Ð»Ñ Ð·Ð°ÐœÐ°ÐŽÑÐŸ ÐŽÐŸÐ²Ð³Ð°. ÐÐŸÐœÐ° ÐŒÐ°Ñ ÐŒÑÑÑÐžÑÐž {{ filename_max_length }} ÑÐžÐŒÐ²ÐŸÐ»ÑÐ² Ð°Ð±ÐŸ ÐŒÐµÐœÑÐµ.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>ÐÐ°ÐŽÑÐ¹ÐœÑÑÑÑ Ð¿Ð°ÑÐŸÐ»Ñ Ð·Ð°ÐœÐ°ÐŽÑÐŸ ÐœÐžÐ·ÑÐºÐ°. ÐÑÐŽÑ Ð»Ð°ÑÐºÐ°, ÑÑÐ²ÐŸÑÑÑÑ ÑÐºÐ»Ð°ÐŽÐœÑÑÐžÐ¹ Ð¿Ð°ÑÐŸÐ»Ñ.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>ÐŠÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ ÐŒÑÑÑÐžÑÑ ÑÐžÐŒÐ²ÐŸÐ»Ðž, ÑÐºÑ ÐœÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÑÑÑÑÑÑ Ð¿ÐŸÑÐŸÑÐœÐžÐŒ ÑÑÐ²ÐœÐµÐŒ ÐŸÐ±ÐŒÐµÐ¶ÐµÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>ÐÐžÐºÐŸÑÐžÑÑÐ°ÐœÐœÑ ÐœÐµÐ²ÐžÐŽÐžÐŒÐžÑ
+ ââÑÐžÐŒÐ²ÐŸÐ»ÑÐ² ÐœÐµ ÐŽÐŸÐ¿ÑÑÐºÐ°ÑÑÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>ÐÐŒÑÑÑÐ²Ð°ÑÐž ÑÐžÑÐ»Ð° Ð· ÑÑÐ·ÐœÐžÑ
+ ÑÐºÑÐžÐ¿ÑÑÐ² ÐœÐµ ÐŽÐŸÐ¿ÑÑÐºÐ°ÑÑÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>ÐÐžÐºÐŸÑÐžÑÑÐ°ÐœÐœÑ Ð¿ÑÐžÑ
+ÐŸÐ²Ð°ÐœÐžÑ
+ ÐœÐ°ÐºÐ»Ð°ÐŽÐµÐœÐžÑ
+ ÑÐžÐŒÐ²ÐŸÐ»ÑÐ² ÐœÐµ ÐŽÐŸÐ¿ÑÑÐºÐ°ÑÑÑÑÑ.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Ð ÐŸÐ·ÑÐžÑÐµÐœÐœÑ ÑÐ°Ð¹Ð»Ñ ÐœÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐµ ({{ extension }}). ÐÐŸÐ·Ð²ÐŸÐ»ÐµÐœÑ ÑÐŸÐ·ÑÐžÑÐµÐœÐœÑ {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target>ÐÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐµ ÐºÐŸÐŽÑÐ²Ð°ÐœÐœÑ ÑÐžÐŒÐ²ÐŸÐ»ÑÐ² ({{ detected }}). ÐÐŸÐ¿ÑÑÑÐžÐŒÑ ÐºÐŸÐŽÑÐ²Ð°ÐœÐœÑ: {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target>ÐŠÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ ÐœÐµ Ñ ÐŽÑÐ¹ÑÐœÐŸÑ MAC-Ð°ÐŽÑÐµÑÐŸÑ.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target>ÐŠÑÐŸÐŒÑ URL ÐœÐµ Ð²ÐžÑÑÐ°ÑÐ°Ñ ÐŽÐŸÐŒÐµÐœÑ Ð²ÐµÑÑ
+ÐœÑÐŸÐ³ÐŸ ÑÑÐ²ÐœÑ.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ur.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ur.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.ur.xlf	(revision 8435)
@@ -0,0 +1,595 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="ur" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>ÛÛ ÙÙÙÙÙ ØºÙØ· ÛÙÙÛ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª ÛÙÙÛ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>ÙØ³Ù
+ Ú©Û ÛÙÙÛ ÚØ§ÛÛÛ {{type}} ÙÚŸ ÙÙÙÙÙ</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø®Ø§ÙÛ ÛÙÙÛ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Ø¢ÙŸ ÙÛ Ø¬Ù ÙÙÙÙÙ Ù
+ÙØªØ®Øš Ú©Û ÛÛ ÙÛ Ø¯Ø±Ø³Øª Ø§ÙØªØ®Ø§Øš ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Ú©Ø§ Ø§ÙØªØ®Ø§Øš Ú©Ø±ÙØ§ ÚØ§ÛÛÛ {{limit}} Ú©Ø§ Ø§ÙØªØ®Ø§Øš Ú©Ø±ÙØ§ ÚØ§ÛÛÛ ÛØ¢ÙÙŸ Ú©Ù Ú©Ù
+ Ø§Ø° Ú©Ù
+ {{limit}} Ø¢ÙŸ Ú©Ù Ú©Ù
+ Ø§Ø² Ú©Ù
+</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Ú©Ø§ Ø§ÙØªØ®Ø§Øš Ú©Ø±ÙØ§ ÚØ§ÛÛÛ {{limit}} Ú©Ø§ Ø§ÙØªØ®Ø§Øš Ú©Ø±ÙØ§ ÚØ§ÛÛÛ ÛØ¢ÙÙŸ Ú©Ù Ø°ÙØ§Ø¯ÚŸ Ø³Û Ø°ÙØ§Ø¯ÚŸ {{limit}} Ø¢ÙŸ Ú©Ù Ø°ÙØ§Ø¯ÚŸ Ø³Û Ø°ÙØ§Ø¯ÚŸ</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Ø¯Û Ú¯ØŠÛ ÙÙÙÙÙØ° Ù
+ÛÚº Ø³Û Ø§ÛÚ© ÛØ§ Ø²ÛØ§Ø¯ÚŸ ÙÙÙÙÙØ° ØºÙØ· ÛÛÚº</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ø§Ø³ ÙÛÙÚ Ú©Û ØªÙÙØ¹ ÙÛÛÚº ØªÚŸÛ</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>ÛÛ ÙÛÙÚ ØºØ§ØŠØš ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª ØªØ§Ø±ÛØ® ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª ØªØ§Ø±ÛØ® ÙÙØª ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª Ø§Û Ù
+ÛÙ Ø§ÛÚØ±ÛØ³ ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>ÙØ§ØŠÙ ÙÛÛÚº Ù
+Ù Ø³Ú©Û</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>ÙØ§ØŠÙ ÙŸÚÚŸÙÛ Ú©Û ÙØ§ØšÙ ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>{{ suffix }} {{ limit }} Ø²ÛØ§Ø¯Û Ø³Û Ø²ÛØ§Ø¯Û Ø³Ø§ØŠØ² Ú©Û Ø§Ø¬Ø§Ø²Øª ÛÛ {{ suffix }}) ({{ size }} ÙØ§ØŠÙ ØšÛØª ØšÚÛ ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>ÛÛÚº {{ types }} Ù
+Ø§ØŠÛÙ
+ Ú©Û ÙØ³Ù
+ÛÚº ({{ type }}) ÙØ§ØŠÙ Ú©Û Ù
+Ø§ÛÙÙ
+ ÙØ³Ù
+ ØºÙØ· ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>ÛØ§ Ø§Ø³ Ø³Û Ú©Ù
+ ÛÙÙÛ ÚØ§ÛÛÛ {{ limit }} ÛÛ ÙÙÙÙÙ</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Ø­Ø±ÙÙ ÛØ§ Ø§Ø³ Ø³Û Ú©Ù
+ ÛÙÙÛ ÚØ§ÛØŠÛÚº {{ limit }} Ø­Ø±Ù ÛØ§ Ø§Ø³ Ø³Û Ú©Ù
+ ÛÙÙØ§ ÚØ§ÛÛÛÛ|ÛÛ ÙÙÙÙÙ ØšÛØª ÙÙ
+ØšÛ ÛÛÛ Ø§Ø³ Ù
+ÛÚº{{ limit }} ÛÛ ÙÙÙÙÙ ØšÛØª ÙÙ
+ØšÛ ÛÛÛ Ø§Ø³ Ù
+ÛÚº</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>ÛØ§ Ø§Ø³ Ø³Û Ø²ÛØ§Ø¯Û ÛÙÙÛ ÚØ§ÛÛÛ {{ limit }} ÛÛ ÙÙÙÙÙ</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Ø­Ø±ÙÙ ÛØ§ Ø§Ø³ Ø³Û Ø²ÛØ§Ø¯Û ÛÙÙÛ ÚØ§ÛØŠÛÚº {{ limit }} Ø­Ø±Ù ÛØ§ Ø§Ø³ Ø³Û Ø²ÛØ§Ø¯Û ÛÙÙØ§ ÚØ§ÛÛÛÛ|ÛÛ ÙÙÙÙÙ ØšÛØª ÚÚŸÙÙ¹Û ÛÛÛ Ø§Ø³ Ù
+ÛÚº{{ limit }} ÛÛ ÙÙÙÙÙ ØšÛØª Ù
+Ø®ØªØµØ± ÛÛÛ Ø§Ø³ Ù
+ÛÚº</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø®Ø§ÙÛ ÙÛÛÚº ÛÙÙÛ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø®Ø§ÙÛ ÙÛÛÚº ÛÙÙÛ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø®Ø§ÙÛ ÛÙÙÛ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª ÙÙØª ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>ÙÛÛÚº ÛÛ URL ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Ø¯ÙÙÙÚº ÙÙÙÙÙØ° ØšØ±Ø§ØšØ± ÛÙÙÛ ÚØ§ÛØŠÛÚº</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>{{ suffix }} {{ limit }} ÙØ§ØŠÙ ØšÛØª ØšÚÛ ÛÛÛ Ø²ÛØ§Ø¯Û Ø³Û Ø²ÛØ§Ø¯Û Ø³Ø§ØŠØ² Ú©Û Ø§Ø¬Ø§Ø²Øª ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>ÙØ§ØŠÙ ØšÛØª ØšÚÛ ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>ÙØ§ØŠÙ Ø§ÙŸ ÙÙÚ ÙÛÛÚº ÛÙ Ø³Ú©Û</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø§ÛÚ© Ø¯Ø±Ø³Øª ÙÙ
+ØšØ± ÛÙÙÛ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>ÛÛ ÙØ§ØŠÙ Ø¯Ø±Ø³Øª ØªØµÙÛØ± ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">ÛÛ ÙÛÙ
+Øª Ú©ÙØŠÛ Ø¯Ø±Ø³Øª IP ÙŸØªÛ ÙÛÛÚº ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª Ø²ØšØ§Ù ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª Ù
+ÙØ§Ù
+ ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø§ÛÚ© Ø¯Ø±Ø³Øª Ù
+ÙÚ© ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>ÛÛ ÙÙÙÙÙ ÙŸÛÙÛ ÛÛ Ø§Ø³ØªØ¹Ù
+Ø§Ù ÛÙ ÚÚ©Û ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>ØªØµÙÛØ± Ú©Û Ø³Ø§ØŠØ² Ú©Ø§ ÙŸØªÛ ÙÛÛÚº ÚÙ Ø³Ú©Ø§</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>ÛÛ {{ max_width }}px Ø§Ø¬Ø§Ø²Øª Ø¯Û Ú¯ØŠÛ Ø²ÛØ§Ø¯Û Ø³Û Ø²ÛØ§Ø¯ ÚÙÚØ§ØŠÛ ({{ width }}px) ØªØµÙÛØ± Ú©Û ÚÙÚØ§ØŠÛ ØšÛØª ØšÚÛ ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>ÛÛ {{ min_width }}px Ú©Ù
+ Ø§Ø² Ú©Ù
+ ÚÙÚØ§ØŠÛ Ù
+ØªÙÙØ¹({{ width }}px) ØªØµÙÛØ± Ú©Û ÚÙÚØ§ØŠÛ ØšÛØª ÚÚŸÙÙ¹Û ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>ÛÛ {{ max_height }}px Ø§Ø¬Ø§Ø²Øª Ø¯Û Ú¯ØŠÛ Ø²ÛØ§Ø¯Û Ø³Û Ø²ÛØ§Ø¯ Ø§ÙÙÚØ§ØŠÛ ({{ height }}px) ØªØµÙÛØ± Ú©Û Ø§ÙÙÚØ§ØŠÛ ØšÛØª ØšÚÛ ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>ÛÛ {{ min_height }}px  Ù
+ØªÙÙØ¹ Ú©Ù
+ Ø§Ø² Ú©Ù
+ Ø§ÙÙÚØ§ØŠÛ ({{ height }}px) ØªØµÙÛØ± Ú©Û Ø§ÙÙÚØ§ØŠÛ ØšÛØª ÚÚŸÙÙ¹Û ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>ÛÛ ÙÙÙÙÙ ØµØ§Ø±Ù Ú©Ø§ Ù
+ÙØ¬ÙØ¯Û ÙŸØ§Ø³ ÙØ±Ú ÛÙÙØ§ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Ø­Ø±ÙÙ ÛÙÙÛ ÚØ§ÛØŠÛÚº {{ limit }} Ø­Ø±Ù ÛÙÙØ§ ÚØ§ÛÛÛÛ|Ø§Ø³ ÙÙÙÙÙ Ù
+ÛÚº ØšØ§ÙÚ©Ù {{ limit }} Ø§Ø³ ÙÙÙÙÙ Ù
+ÛÚº ØšØ§ÙÚ©Ù</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>ÙØ§ØŠÙ ØµØ±Ù Ø¬Ø²ÙÛ Ø·ÙØ± ÙŸØ± Ø§ÙŸ ÙÙÚ Ú©Û Ú¯ØŠÛ ØªÚŸÛ</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Ú©ÙØŠÛ ÙØ§ØŠÙ Ø§ÙŸ ÙÙÚ ÙÛÛÚº Ú©Û Ú¯ØŠÛ</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">php.ini Ù
+ÛÚº Ú©ÙØŠÛ Ø¹Ø§Ø±Ø¶Û ÙÙÙÚØ± ØªØ±ØªÛØš ÙÛÛÚº Ø¯ÛØ§ Ú¯ÛØ§ ØªÚŸØ§Ø ÛØ§ ØªØ±ØªÛØš Ø¯ÛØ§ Ú¯ÛØ§ ÙÙÙÚØ± Ù
+ÙØ¬ÙØ¯ ÙÛÛÚº ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Ø¹Ø§Ø±Ø¶Û ÙØ§ØŠÙ Ú©Ù ÚØ³Ú© ÙŸØ± ÙÛÛÚº ÙÚ©ÚŸØ§ Ø¬Ø§ Ø³Ú©ØªØ§</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>ÙŸÛ Ø§ÛÚ ÙŸÛ Ú©Û ØªÙØ³ÛØ¹ Ú©Û ÙØ¬Û Ø³Û Ø§ÙŸ ÙÙÚ ÙØ§Ú©Ø§Ù
+ ÛÙ Ú¯ÛØ§</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ø¹ÙØ§ØµØ± ÛØ§ Ø§Ø³ Ø³Û Ø²ÛØ§Ø¯Û ÛÙÙØ§ ÚØ§ÛÛÛ {{ limit }  Ø¹ÙØµØ± ÛØ§ Ø§Ø³ Ø³Û Ø²ÛØ§Ø¯Û ÛÙÙØ§ ÚØ§ÛÛÛÛ|Ø§Ø³ Ù
+Ø¬Ù
+ÙØ¹Û Ù
+ÛÚº {{ limit }} Ø§Ø³ Ù
+Ø¬Ù
+ÙØ¹Û Ù
+ÛÚº</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ø¹ÙØ§ØµØ± ÛØ§ Ø§Ø³ Ø³Û Ú©Ù
+ ÛÙÙØ§ ÚØ§ÛÛÛ {{ limit } Ø¹ÙØµØ± ÛØ§ Ø§Ø³ Ø³Û Ú©Ù
+ ÛÙÙØ§ ÚØ§ÛÛÛÛ|Ø§Ø³ Ù
+Ø¬Ù
+ÙØ¹Û Ù
+ÛÚº {{ limit }} Ø§Ø³ Ù
+Ø¬Ù
+ÙØ¹Û Ù
+ÛÚº</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ø¹ÙØµØ± ÛÙÙØ§ ÚØ§ÛÛÛ {{ limit }}  Ø¹ÙØµØ± ÛÙÙØ§ ÚØ§ÛÛÛÛ|Ø§Ø³ Ù
+Ø¬Ù
+ÙØ¹Û Ù
+ÛÚº ØšØ§ÙÚ©Ù {{ limit }} Ø§Ø³ Ù
+Ø¬Ù
+ÙØ¹Û Ù
+ÛÚº ØšØ§ÙÚ©Ù</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ØºÙØ· Ú©Ø§Ø±Ú ÙÙ
+ØšØ±</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>ØºÛØ± ØªØ¹Ø§ÙÙ ÛØ§ÙØªÛ Ú©Ø§Ø±Ú Ú©Û ÙØ³Ù
+ ÛØ§ ØºÙØ· Ú©Ø§Ø±Ú ÙÙ
+ØšØ±</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">ÛÛ ÙÛÙ
+Øª Ú©ÙØŠÛ Ø¯Ø±Ø³Øª ØšÛÙ Ø§ÙØ§ÙÙØ§Ù
+Û ØšÛÙÚ© Ø§Ú©Ø§Ø€ÙÙ¹ ÙÙ
+ØšØ± (IBAN) ÙÛÛÚº ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>ÙÛÛÚº ÛÛ ISBN-10 ÛÚŸ ÙÙÙÙÙ Ø¯Ø±Ø³ØªÛ</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>ÙÛÛÚº ÛÛ ISBN-13 ÛÚŸ ÙÙÙÙÙ Ø¯Ø±Ø³ØªÛ</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>ISBN-13 Û Ø§ÙØ± ÙÛ ÛÛ Ø¯Ø±Ø³Øª ISBN-10 ÛÛ ÙÙÙÙÙ ÙÛ ØªÙ Ø¯Ø±Ø³Øª</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>ÙÛÛÚº ÛÛ ISSNÛÚŸ ÙÙÙÙÙ Ø¯Ø±Ø³ØªÛ</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª Ú©Ø±ÙØ³Û ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Ú©Û ØšØ±Ø§ØšØ± ÛÙÙØ§ ÚØ§ÛÛÛ {{ compared_value }} ÛÚŸ ÙÙÙÙÙ</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Ø³Û ØšÚÙ ÛÙÙÙ ÚØ§ÛÛÛ {{ compared_value }} ÛÚŸ ÙÙÙÙÙ</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Ø³Û ØšÚÙ ÛØ§ ØšØ±Ø§ØšØ± ÛÙÙÙ ÚØ§ÛÛÛ {{ compared_value }} ÛÚŸ ÙÙÙÙÙ</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>{{ compared_value }} {{ compared_value_type }} ÛÛ ÙÙÙÙÙ Ø§ÛÚ© Ø¬ÛØ³Û ÛÙÙÛ ÚØ§ÛÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Ø³Û Ú©Ù
+ ÛÙÙÙ ÚØ§ÛÛÛ {{ compared_value }} ÛÚŸ ÙÙÙÙÙ</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Ø³Û Ú©Ù
+ ÛØ§ ØšØ±Ø§ØšØ± ÛÙÙÙ ÚØ§ÛÛÛ {{ compared_value }} ÛÚŸ ÙÙÙÙÙ</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Ú©Û ØšØ±Ø§ØšØ± ÙÚŸÙÚº ÛÙÙÙ ÚØ§ÛÛÛ {{ compared_value }} ÛÚŸ ÙÙÙÙÙ</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Ø§ÛÚ© Ø¬ÛØ³Û ÙÛÙÚº ÛÙÙÛ ÚØ§ÛÛÛ {{ compared_value }} {{ compared_value_type }} ÛÛ ÙÙÙÙÙ</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>ÛÛ {{ max_ratio }} Ø§Ø¬Ø§Ø²Øª ØŽØ¯Û Ø²ÛØ§Ø¯Û Ø³Û Ø²ÛØ§Ø¯Û ØªÙØ§Ø³Øš ({{ ratio }}) ØªØµÙÛØ± Ú©Ø§ ØªÙØ§Ø³Øš ØšÛØª ØšÚØ§ ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>ÛÛ{{ min_ratio }} ratio Ù
+ØªÙÙØ¹ Ú©Ù
+ Ø§Ø² Ú©Ù
+ ({{ ratio }}) ØšÛØª ÚÚŸÙÙ¹Ø§ ÛÛ ratio ØªØµÙÛØ± Ú©Ø§</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Ù
+Ø±ØšØ¹ ØªØµØ§ÙÛØ± Ú©Û Ø§Ø¬Ø§Ø²Øª ÙÛÛÚº ÛÛ (px{{ height }}x{{ width }})  ØªØµÙÛØ± Ù
+Ø±ØšØ¹ ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Ø²Ù
+ÛÙ Ú©Û ØªØ²ØŠÛÙ ÙŸØ± Ù
+ØšÙÛ ØªØµØ§ÙÛØ± Ú©Û Ø§Ø¬Ø§Ø²Øª ÙÛÛÚº ÛÛ ({{ width }}x{{ height }}px) ØªØµÙÛØ± Ø²Ù
+ÛÙ Ú©Û ØªØ²ØŠÛÙ ÙŸØ± Ù
+ØšÙÛ ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>ÙŸÙØ±Ù¹Ø±ÛÙ¹ ÙŸØ± Ù
+ØšÙÛ ØªØµØ§ÙÛØ± Ú©Û Ø§Ø¬Ø§Ø²Øª ÙÛÛÚº ÛÛ ({{ width }}x{{ height }}px) ØªØµÙÛØ± ÙŸÙØ±Ù¹Ø±ÛÙ¹ ÙŸØ± Ù
+ØšÙÛ ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Ø®Ø§ÙÛ ÙØ§ØŠÙ Ú©Û Ø§Ø¬Ø§Ø²Øª ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Ù
+ÛØ²ØšØ§Ù Ø­Ù ÙÛÛÚº ÛÙ Ø³Ú©Ø§</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Ú©Û Ø¬ÙØ³Ù ÙÛÛÚº ÛÛ charset {{ charset }} ÛÛ ÙÙÙÙÙ Ù
+ØªÙÙØ¹</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">ÛÛ ÙÛÙ
+Øª Ú©ÙØŠÛ Ø¯Ø±Ø³Øª ØšØ²ÙØ³ ØŽÙØ§Ø®ØªÛ Ú©ÙÚ (BIC) ÙÛÛÚº ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Ø®Ø±Ø§ØšÛ</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">ÛÛ ÙÛÙ
+Øª Ú©ÙØŠÛ Ø¯Ø±Ø³Øª UUID ÙÛÛÚº ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ú©Ø§ Ø¶Ø±Øš ÛÙÙÙ ÚØ§ÛÛÛ {{ compared_value }} ÛÛ ÙÙÙÙÙ </target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ø³Û ÙØ§ØšØ³ØªÛ ÙÛÛÚº ÛÛ IBAN {{ iban }} (BIC) ÛÛ Ú©Ø§Ø±ÙØšØ§Ø±Û ØŽÙØ§Ø®ØªÛ Ú©ÙÚ</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>ÛÙÙÛ ÚØ§ÛÛÛ JSON ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>ÛÛ Ù
+Ø¬Ù
+ÙØ¹Û ØµØ±Ù Ù
+ÙÙØ±Ø¯ Ø¹ÙØ§ØµØ± ÙŸØ± Ù
+ØŽØªÙ
+Ù ÛÙÙØ§ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ù
+Ø«ØšØª ÛÙÙÛ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>ÛÛ ÙÙÙÙÙ ÛØ§ ØªÙ Ù
+Ø«ØšØª ÛØ§ ØµÙØ± ÛÙÙÛ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ù
+ÙÙÛ ÛÙÙÛ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>ÛÛ ÙÙÙÙÙ ÛØ§ ØªÙ Ù
+ÙÙÛ ÛØ§ ØµÙØ± ÛÙÙÛ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª Ù¹Ø§ØŠÙ
+ Ø²ÙÙ ÙÛÛÚº ÛÛ</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>ÛÛ ÙŸØ§Ø³ ÙØ±Ú ÚÛÙ¹Ø§ Ú©Û Ø®ÙØ§Ù ÙØ±Ø²Û Ù
+ÛÚº ÙÛÚ© ÛÙ Ú¯ÛØ§ ÛÛØ Ø§Ø³Û Ø§Ø³ØªØ¹Ù
+Ø§Ù ÙÛÛÚº Ú©Ø±ÙØ§ ÚØ§ÛÛÛÛ ØšØ±Ø§Û Ú©Ø±Ù
+ Ø¯ÙØ³Ø±Ø§ ÙŸØ§Ø³ ÙØ±Ú Ø§Ø³ØªØ¹Ù
+Ø§Ù Ú©Ø±ÛÚº</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ú©Û Ø¯Ø±Ù
+ÛØ§Ù ÛÙÙÛ ÚØ§ÛÛÛ {{ max }} Ø§ÙØ± {{ min }} ÛÛ ÙÙÙÙÙ</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>ÙÛÛÚº ÛÛ hostname ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Ú©Û Ø¶Ø±Øš ÛÙÙÛ ÚØ§ÛÛÛ {{ compared_value }} Ø§Ø³ Ù
+Ø¬Ù
+ÙØ¹Û Ù
+ÛÚº Ø¹ÙØ§ØµØ± Ú©Û ØªØ¹Ø¯Ø§Ø¯</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Ø§Ø³ ÙÙÙÙÙ Ú©Ù Ø¯Ø±Ø¬ Ø°ÛÙ Ø±Ú©Ø§ÙÙ¹ÙÚº Ù
+ÛÚº Ø³Û Ú©Ù
+ Ø§Ø² Ú©Ù
+ Ø§ÛÚ© Ú©Ù ÙŸÙØ±Ø§ Ú©Ø±ÙØ§ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Ø§Ø³ Ù
+Ø¬Ù
+ÙØ¹Û Ú©Û ÛØ± Ø¹ÙØµØ± Ú©Ù Ø§ÙŸÙÛ ÙŸØ§ØšÙØ¯ÛÙÚº Ú©Û Ø³ÛÙ¹ Ú©Ù ÙŸÙØ±Ø§ Ú©Ø±ÙØ§ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>ÙÛÛÚº ÛÛ (ISIN) ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª ØšÛÙ Ø§ÙØ§ÙÙØ§Ù
+Û Ø³ÛÚ©ÛÙØ±Ù¹ÛØ² ØŽÙØ§Ø®ØªÛ ÙÙ
+ØšØ±</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>ÛÛ ÙÙÙÙÙ Ø§ÛÚ© Ø¯Ø±Ø³Øª Ø§ØžÛØ§Ø± ÛÙÙÙ ÚØ§ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Ø±ÙÚ¯ ÙÛÛÚº ÛÛ CSS ÛÛ ÙÙÙÙÙ Ø¯Ø±Ø³Øª</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>ÙÙÙ¹ÛØŽÙ ÙÛÛÚº ÛÛ CIDR ÛÛ ÙÙÙÙÙ Ø§ÛÚ© Ø¯Ø±Ø³Øª</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Ú©Û Ø¯Ø±Ù
+ÛØ§Ù ÛÙÙÛ ÚØ§ÛÛÛ {{ max }} Ø§ÙØ± {{ min }} ÙÛÙ¹ Ù
+Ø§Ø³Ú© Ú©Û ÙÙÙÙÙ</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target state="needs-review-translation">ÙØ§ØŠÙ Ú©Ø§ ÙØ§Ù
+ ØšÛØª ÙÙ
+ØšØ§ ÛÛÛ Ø§Ø³ Ù
+ÛÚº {{ filename_max_length }} Ø­Ø±Ù ÛØ§ Ø§Ø³ Ø³Û Ú©Ù
+ ÛÙÙÛ ÚØ§ÛØŠÛÚºÛ|ÙØ§ØŠÙ Ú©Ø§ ÙØ§Ù
+ ØšÛØª ÙÙ
+ØšØ§ ÛÛÛ Ø§Ø³ Ù
+ÛÚº {{ filename_max_length }} Ø­Ø±ÙÙ ÛØ§ Ø§Ø³ Ø³Û Ú©Ù
+ ÛÙÙÛ ÚØ§ÛØŠÛÚºÛ</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target state="needs-review-translation">ÙŸØ§Ø³ ÙØ±Ú Ú©Û Ø·Ø§ÙØª ØšÛØª Ú©Ù
+ ÛÛÛ ØšØ±Ø§Û Ú©Ø±Ù
+ Ù
+Ø¶ØšÙØ· ÙŸØ§Ø³ ÙØ±Ú Ø§Ø³ØªØ¹Ù
+Ø§Ù Ú©Ø±ÛÚºÛ</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target state="needs-review-translation">Ø§Ø³ ÙØ¯Ø± Ù
+ÛÚº Ø§ÛØ³Û Ø­Ø±ÙÙ Ù
+ÙØ¬ÙØ¯ ÛÛÚº Ø¬Ù Ù
+ÙØ¬ÙØ¯Û ÙŸØ§ØšÙØ¯Û Ú©Û Ø³Ø·Ø­ Ú©Û Ø·Ø±Ù Ø³Û Ø§Ø¬Ø§Ø²Øª ÙÛÛÚº ÛÛÚºÛ</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target state="needs-review-translation">ÙØ§Ø¯ÛØ¯Û Ø­Ø±ÙÙ Ø§Ø³ØªØ¹Ù
+Ø§Ù Ú©Ø±ÙÛ Ú©Û Ø§Ø¬Ø§Ø²Øª ÙÛÛÚº ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target state="needs-review-translation">Ù
+Ø®ØªÙÙ Ø§Ø³Ú©Ø±ÙŸÙ¹Ø³ Ø³Û ÙÙ
+ØšØ±ÙÚº Ú©Ù Ù
+ÙØ§ Ú©Ø± Ø§Ø³ØªØ¹Ù
+Ø§Ù Ú©Ø±ÙÛ Ú©Û Ø§Ø¬Ø§Ø²Øª ÙÛÛÚº ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target state="needs-review-translation">ÚÚŸÙŸÛ ÛÙØŠÛ Ø§ÙÙØ±ÙÛ Ú©Ø±ÛÚ©Ù¹Ø±Ø² Ú©Ø§ Ø§Ø³ØªØ¹Ù
+Ø§Ù Ú©Ø±ÙÛ Ú©Û Ø§Ø¬Ø§Ø²Øª ÙÛÛÚº ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">ÙØ§ØŠÙ Ú©Û ØªÙØ³ÛØ¹ ÙØ§Ù
+ÙØ§Ø³Øš ÛÛ ({{ extension }})Û Ø§Ø¬Ø§Ø²Øª ØŽØ¯Û ØªÙØ³ÛØ¹Ø§Øª {{ extensions }} ÛÛÚºÛ</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">ÙŸØªÛ ÚÙÙÛ ÙØ§ÙÛ Ú©Ø±ÛÚ©Ù¹Ø± Ø§ÙÚ©ÙÚÙÚ¯ ÙØ§Ù
+ÙØ§Ø³Øš ÛÛ ({{ detected }})Û Ø§Ø¬Ø§Ø²Øª ØŽØ¯Û Ø§ÙÚ©ÙÚÙÚ¯Ø² {{ encodings }} ÛÛÚºÛ</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">ÛÛ ÙÛÙ
+Øª Ú©ÙØŠÛ Ø¯Ø±Ø³Øª MAC ÙŸØªÛ ÙÛÛÚº ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Ø§Ø³ URL Ù
+ÛÚº Ù¹Ø§ÙŸ ÙÛÙÙ ÚÙÙ
+ÛÙ Ù
+ÙØ¬ÙØ¯ ÙÛÛÚº ÛÛÛ</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.uz.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.uz.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.uz.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="uz" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>Qiymat false bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>Qiymat true bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>Qiymat turi {{ type }} bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>Qiymat bo'sh bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>Tanlangan qiymat yaroqli emas.</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Siz hech bo'lmaganda {{ limit }} ta qiymat tanlashingiz kerak.|Siz kamida {{ limit }} ta qiymat tanlashingiz kerak.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Siz {{ limit }} ta qiymatni tanlashingiz kerak.|Siz {{ limit }} dan ortiq qiymat tanlashingiz kerak.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Belgilangan qiymatlarning bir yoki bir nechtasi yaroqsiz.</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>Ushbu maydon kutilmagan edi.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>Bu maydon majvud emas.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>Ushbu sana noto'g'ri.</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>Sana va vaqt qiymati noto'g'ri.</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>Elektron pochta manzili noto'g'ri.</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Fayl topilmadi.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Faylni o'qib bo'lmadi.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fayl hajmi katta ({{ size }} {{ suffix }}). Maksimal ruxsat etilgan hajim {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Faylning MIME turi noto'g'ri ({{ type }}). Ruxsat etilgan MIME turlar {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>Qiymat {{ limit }} ga teng yoki kam bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>Qiymat juda uzun. {{ limit }} ga teng yoki kam bo'lishi kerak.|Qiymat juda uzun. {{ limit }} yoki undan kam belgidan iborat bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>Qiymat {{ limit }} yoki undan ortiq bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>Qiymat juda qisqa. {{ limit }} ta yoki undan ortiq belgidan iborat bo'lishi kerak.|Qiymat juda qisqa. {{ limit }} yoki undan ko'p belgidan iborat bo'lishi kerak</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>Qiymatni bo'sh kirtish mumkin emas.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>Qiymat null bo'lmasligi kerak.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>Qiymat null bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>Qiymat noto'g'ri.</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>Vaqt noto'g'ri.</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>URL noto'g'ri</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Ikkala qiymat ham bir xil bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Fayl hajmi katta. Maksimal ruxsat berilgan hajim {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Fayl hajmi katta.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Faylni yuklab bo'lmadi.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>Qiymat raqam bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Fayl yaroqli rasm formati emas.</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">Bu qiymat haqiqiy IP manzil emas.</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>Noto'g'ri til.</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>Ushbu qiymat mahalliy qiymat emas.</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>Mamlakat qiymati noto'g'ri.</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>Ushbu qiymat allaqachon ishlatilgan.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>Rasm o'lchamini aniqlab bo'lmadi.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Rasm kengligi juda katta ({{ width }}px). Maksimal ruxsat etilgan kenglik {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Rasm kengligi juda kichkina ({{ width }}px). Minimal ruxsat etilgan kenglik {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Rasm bo'yi juda katta ({{ height }}px). Maksimal ruxsat etilgan balandlik {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Rasm bo'yi juda kichkina ({{ height }}px). Minimal ruxsat etilgan balandlik {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>Qiymat joriy foydalanuvchi paroli bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>Qiymat {{ limit }} ta belgidan iborat bo'lishi kerak.|Qiymat {{ limit }} belgidan iborat bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Fayl faqat qisman yuklangan.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Fayl yuklanmagan.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">php.ini da vaqtinchalik katalog sozlanmagan, yoki sozlangan katalog mavjud emas.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>Diskka vaqtinchalik faylni yozib bo'lmadi.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>PHP kengaytmasi yuklash paytida xatolik yuz berdi.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Ushbu to'plam {{ limit }} ta yoki undan ko'p narsalarni o'z ichiga olishi kerak.|Ushbu to'plam {{ limit }} yoki undan ortiq narsalarni o'z ichiga olishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Ushbu to'plam {{ limit }} ta yoki undan kam narsalarni o'z ichiga olishi kerak.|Ushbu to'plamda {{ limit }} yoki undan kam element bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Ushbu to'plam to'liq {{ limit }} narsani o'z ichiga olishi kerak.|Ushbu to'plamda to'liq {{ limit }} ta ma'lumotlar bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Kata raqami noto'g'ri.</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Qo'llab-quvvatlanmaydigan karta turi yoki yaroqsiz karta raqami.</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">Bu qiymat haqiqiy Xalqaro Bank Hisob Raqami (IBAN) emas.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Qiymat to'g'ri ISBN-10 formatida emas.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Qiymat to'g'ri ISBN-13 formatida emas.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Qiymat ISBN-10 va ISBN-13 formatlariga mos kelmaydi.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Qiymat ISSN formatiga mos kelmaydi.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Noto'g'ri valyuta formati.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Qiymat {{ compared_value }} ga teng bo'lishi shart.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Qiymat {{ compared_value }} dan katta bo'lishi shart.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Qiymat {{ compared_value }} dan katta yoki teng bo'lishi shart.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>ÐÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÐžÐŽÐµÐœÑÐžÑÐœÑÐŒ {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Qiymat bir xil bo'lishi kerak {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Qiymat {{ compared_value }} dan kichik yoki teng bo'lishi shart.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Qiymat {{ compared_value }} ga teng bo'lmasligi kerak.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Qiymat bir xil bo'lishi kerak emas {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Rasmning tomonlari nisbati juda katta ({{ ratio }}). Maksimal tomonlar nisbati {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Rasmning format nisbati juda kichik ({{ ratio }}). Minimal tomonlar nisbati {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Rasm kvadrat shaklida ({{ width }}x{{ height }}px). Kvadrat shaklida tasvirlarga ruxsat berilmaydi.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Landshaft tasvir ({{ width }}x{{ height }}px). Landshaft rasmlarga ruxsat berilmaydi.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Portret rasm ({{ width }}x{{ height }}px). Portretlarga ruxsat berilmaydi.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Bo'sh fayllarga ruxsat berilmagan.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Xost nomini nomiga ruxsat berilmagan.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Qiymat kutilgan {{ charset }} kodlashiga mos kelmaydi.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">Bu qiymat haqiqiy Biznes Identifikatsiya Kodi (BIC) emas.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Xatolik</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">Bu qiymat haqiqiy UUID emas.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Qiymat {{ compared_value }} ning ko'paytmasi bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ushbu BIC IBAN {{ iban }} bilan bog'liq emas..</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Qiymat to'g'ri JSON bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ushbu kolleksiyada takroriy elementlar bo'lmasligi kerak.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Qiymat musbat bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Qiymat musbat yoki 0 ga teng bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Qiymat manfiy bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Qiymat manfiy yoki 0 ga teng bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Qiymat to'g'ri vaqt zonasi emas.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Ushbu parol ma'lumotlarning tarqalishi tufayli buzilgan va uni ishlatmaslik kerak. Boshqa paroldan foydalaning.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Qiymat {{ min }} va {{ max }} oralig'ida bo'lishi shart.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>Qiymat to'g'ri xost nomi emas.</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Ushbu to'plamdagi narsalar soni {{ compared_value }} dan ko'p bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>Qiymat quyidagi cheklovlardan kamida bittasiga javob berishi kerak:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Ushbu to'plamdagi har bir narsa o'ziga xos cheklovlarni qondirishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>Qiymat Qimmatli qog'ozlarning xalqaro identifikatsiya raqami (ISIN) ga mos emas.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>Ushbu qiymat to'g'ri ifoda bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>Bu qiymat haqiqiy CSS rangi emas.</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>Qiymat CIDR belgisiga mos kelmaydi.</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>Tarmoq niqobining qiymati {{ min }} va {{ max }} oralig'ida bo'lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>Fayl nomi juda uzun. U {{ filename_max_length }} belgidan iborat boÊ»lishi kerak.|Fayl nomi juda uzun. U {{ filename_max_length }} ta belgidan iborat boÊ»lishi kerak.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Parol kuchi juda past. Iltimos, kuchliroq paroldan foydalaning.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>Bu qiymat joriy cheklov darajasida ruxsat etilmagan belgilarni o'z ichiga oladi.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Ko'rinmas belgilardan foydalanish taqiqlangan.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>Turli skriptlardagi raqamlarni aralashtirish taqiqlangan.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Yashirin qoplamali belgilardan foydalanish taqiqlangan.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Fayl kengaytmasi yaroqsiz ({{ extension }}). Ruxsat berilgan kengaytmalar {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">Aniqlangan belgi kodlamasi yaroqsiz ({{ detected }}). Ruxsat etilgan kodlamalar {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">Bu qiymat haqiqiy MAC manzil emas.</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">Bu URL yuqori darajali domenni o'z ichiga olmaydi.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.vi.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.vi.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.vi.xlf	(revision 8435)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="vi" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>GiÃ¡ trá» nÃ y pháº£i lÃ  sai.</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>GiÃ¡ trá» nÃ y pháº£i lÃ  ÄÃºng.</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>GiÃ¡ trá» nÃ y pháº£i lÃ  kiá»u  {{ type }}.</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>GiÃ¡ trá» nÃ y pháº£i rá»ng.</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>GiÃ¡ trá» báº¡n vá»«a chá»n khÃŽng há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>Báº¡n pháº£i chá»n Ã­t nháº¥t {{ limit }} lá»±a chá»n.|Báº¡n pháº£i chá»n Ã­t nháº¥t {{ limit }} lá»±a chá»n.</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>Báº¡n pháº£i chá»n nhiá»u nháº¥t {{ limit }} lá»±a chá»n.|Báº¡n pháº£i chá»n nhiá»u  nháº¥t {{ limit }} lá»±a chá»n.</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>Má»t hoáº·c nhiá»u giÃ¡ trá» ÄÆ°á»£c chá»n khÃŽng há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>LÄ©nh vá»±c nÃ y khÃŽng ÄÆ°á»£c dá»± kiáº¿n.</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>LÄ©nh vá»±c nÃ y bá» thiáº¿u.</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>GiÃ¡ trá» khÃŽng pháº£i lÃ  ngÃ y há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>GiÃ¡ trá» khÃŽng pháº£i lÃ  ngÃ y thÃ¡ng há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>GiÃ¡ trá» nÃ y khÃŽng pháº£i lÃ  email há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>Táº­p tin khÃŽng tÃ¬m tháº¥y.</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>Táº­p tin khÃŽng thá» Äá»c ÄÆ°á»£c.</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Táº­p tin quÃ¡ lá»n ({{ size }} {{ suffix }}). KÃ­ch thÆ°á»c tá»i Äa cho phÃ©p {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>Kiá»u mime cá»§a táº­p tin khÃŽng há»£p lá» ({{ type }}). Kiá»u há»£p lá» lÃ  {{ types }}.</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>GiÃ¡ trá» pháº£i báº±ng hoáº·c nhá» hÆ¡n {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>GiÃ¡ trá» quÃ¡ dÃ i. Pháº£i báº±ng hoáº·c Ã­t hÆ¡n {{ limit }} kÃ­ tá»±.|GiÃ¡ trá» quÃ¡ dÃ i. Pháº£i báº±ng hoáº·c Ã­t hÆ¡n {{ limit }} kÃ­ tá»±.</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>GiÃ¡ trá» pháº£i lá»n hÆ¡n hoáº·c báº±ng {{ limit }}.</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>GiÃ¡ trá» quÃ¡ ngáº¯n. Pháº£i hÆ¡n hoáº·c báº±ng {{ limit }} kÃ­ tá»±.|GiÃ¡ trá» quÃ¡ ngáº¯n. Pháº£i hÆ¡n hoáº·c báº±ng {{ limit }} kÃ­ tá»±.</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>GiÃ¡ trá» khÃŽng ÄÆ°á»£c phÃ©p Äá» trá»ng.</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>GiÃ¡ trá» khÃŽng ÄÆ°á»£c phÃ©p rá»ng.</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>GiÃ¡ trá» pháº£i rá»ng.</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>GiÃ¡ trá» khÃŽng há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>GiÃ¡ trá» khÃŽng pháº£i lÃ  thá»i gian há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>GiÃ¡ trá» khÃŽng pháº£i lÃ  Äá»a chá» URL há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>Hai giÃ¡ trá» pháº£i báº±ng nhau.</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>Táº­p tin quÃ¡ lá»n. KÃ­ch thÆ°á»c tá»i Äa cho phÃ©p lÃ  {{ limit }} {{ suffix }}.</target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>Táº­p tin quÃ¡ lá»n.</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>Táº­p tin khÃŽng thá» táº£i lÃªn.</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>GiÃ¡ trá» pháº£i lÃ  con sá».</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>Táº­p tin khÃŽng pháº£i lÃ  hÃ¬nh áº£nh há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">GiÃ¡ trá» nÃ y khÃŽng pháº£i lÃ  Äá»a chá» IP há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>GiÃ¡ trá» khÃŽng pháº£i lÃ  ngÃŽn ngá»¯ há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>GiÃ¡ trá» khÃŽng pháº£i lÃ  má»t báº£n Äá»a Äá»a phÆ°Æ¡ng há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>GiÃ¡ trá» khÃŽng pháº£i lÃ  quá»c gia há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>GiÃ¡ trá» ÄÃ£ ÄÆ°á»£c sá»­ dá»¥ng.</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>KÃ­ch thÆ°á»c cá»§a hÃ¬nh áº£nh khÃŽng thá» xÃ¡c Äá»nh.</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>Chiá»u rá»ng cá»§a hÃ¬nh quÃ¡ lá»n ({{ width }}px). Chiá»u rá»ng tá»i Äa pháº£i lÃ  {{ max_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>Chiá»u rá»ng cá»§a hÃ¬nh quÃ¡ tháº¥p ({{ width }}px). Chiá»u rá»ng tá»i thiá»u pháº£i lÃ  {{ min_width }}px.</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>Chiá»u cao cá»§a hÃ¬nh quÃ¡ cao ({{ height }}px). Chiá»u cao tá»i Äa pháº£i lÃ  {{ max_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>Chiá»u cao cá»§a hÃ¬nh quÃ¡ tháº¥p ({{ height }}px). Chiá»u cao tá»i thiá»u pháº£i lÃ  {{ min_height }}px.</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>GiÃ¡ trá» nÃ y pháº£i lÃ  máº­t kháº©u hiá»n táº¡i cá»§a ngÆ°á»i dÃ¹ng.</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>GiÃ¡ trá» nÃ y pháº£i cÃ³ chÃ­nh xÃ¡c {{ limit }} kÃ­ tá»±.|GiÃ¡ trá» nÃ y pháº£i cÃ³ chÃ­nh xÃ¡c {{ limit }} kÃ­ tá»±.</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>Táº­p tin chá» ÄÆ°á»£c táº£i lÃªn má»t pháº§n.</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>Táº­p tin khÃŽng ÄÆ°á»£c táº£i lÃªn.</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">KhÃŽng cÃ³ thÆ° má»¥c táº¡m ÄÆ°á»£c cáº¥u hÃ¬nh trong php.ini, hoáº·c thÆ° má»¥c ÄÃ£ cáº¥u hÃ¬nh khÃŽng tá»n táº¡i.</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>KhÃŽng thá» ghi táº­p tin táº¡m ra ÄÄ©a.</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>Má»t PHP extension ÄÃ£ phÃ¡ há»ng quÃ¡ trÃ¬nh táº£i lÃªn cá»§a táº­p tin.</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>Danh sÃ¡ch pháº£i chá»©a {{ limit }} thÃ nh pháº§n hoáº·c nhiá»u hÆ¡n.|Danh sÃ¡ch pháº£i chá»©a {{ limit }} thÃ nh pháº§n hoáº·c nhiá»u hÆ¡n.</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>Danh sÃ¡ch pháº£i chá»©a {{ limit }} thÃ nh pháº§n hoáº·c Ã­t hÆ¡n.|Danh sÃ¡ch pháº£i chá»©a {{ limit }} thÃ nh pháº§n hoáº·c Ã­t hÆ¡n.</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>Danh sÃ¡ch pháº£i chá»©a chÃ­nh xÃ¡c {{ limit }} thÃ nh pháº§n.|Danh sÃ¡ch pháº£i chá»©a chÃ­nh xÃ¡c {{ limit }} thÃ nh pháº§n.</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>Sá» tháº» khÃŽng há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>Tháº» khÃŽng ÄÆ°á»£c há» trá»£ hoáº·c sá» tháº» khÃŽng há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">GiÃ¡ trá» nÃ y khÃŽng pháº£i lÃ  Sá» TÃ i Khoáº£n NgÃ¢n HÃ ng Quá»c Táº¿ (IBAN) há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>GiÃ¡ trá» khÃŽng pháº£i lÃ  ISBN-10 há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>GiÃ¡ trá» khÃŽng pháº£i lÃ  ISBN-13 há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>GiÃ¡ trá» khÃŽng pháº£i lÃ  ISBN-10 hoáº·c ISBN-13 há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>GiÃ¡ trá» khÃŽng pháº£i lÃ  ISSN há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>GiÃ¡ trá» khÃŽng pháº£i lÃ  ÄÆ¡n vá» tiá»n tá» há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>GiÃ¡ trá» pháº£i báº±ng {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>GiÃ¡ trá» pháº£i lá»n hÆ¡n {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>GiÃ¡ trá» pháº£i lá»n hÆ¡n hoáº·c báº±ng {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>GiÃ¡ trá» pháº£i giá»ng  {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>GiÃ¡ trá» pháº£i bÃ© hÆ¡n {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>GiÃ¡ trá» pháº£i nhá» hÆ¡n hoáº·c báº±ng {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>GiÃ¡ trá» khÃŽng ÄÆ°á»£c phÃ©p báº±ng {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>GiÃ¡ trá» khÃŽng ÄÆ°á»£c phÃ©p giá»ng nhÆ° {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Tá»· lá» bá»©c áº£nh quÃ¡ lá»n ({{ ratio }}). Tá»· lá» tá»i Äa cho phÃ©p lÃ  {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Tá»· lá» bá»©c áº£nh quÃ¡ nhá» ({{ ratio }}). Tá»· lá» tá»i thiá»u mong muá»n lÃ  {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Bá»©c áº£nh lÃ  hÃ¬nh vuÃŽng ({{ width }}x{{ height }}px). áº¢nh hÃ¬nh vuÃŽng khÃŽng ÄÆ°á»£c phÃ©p.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Bá»©c áº£nh theo chiá»u ngang ({{ width }}x{{ height }}px). áº¢nh chiá»u ngang khÃŽng ÄÆ°á»£c phÃ©p.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Bá»©c áº£nh theo chiá»u dá»c ({{ width }}x{{ height }}px). áº¢nh chiá»u dá»c khÃŽng ÄÆ°á»£c phÃ©p.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Má»t file rá»ng khÃŽng ÄÆ°á»£c phÃ©p.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>MÃ¡y chá»§ khÃŽng thá» ÄÆ°á»£c tÃ¬m tháº¥y.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>GiÃ¡ trá» nÃ y khÃŽng ÄÃºng Äá»nh dáº¡ng bá» kÃœ tá»± mong muá»n {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">GiÃ¡ trá» nÃ y khÃŽng pháº£i lÃ  MÃ£ Äá»nh Danh Doanh Nghiá»p (BIC) há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Lá»i</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">GiÃ¡ trá» nÃ y khÃŽng pháº£i lÃ  UUID há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>GiÃ¡ trá» nÃ y nÃªn lÃ  bá»i sá» cá»§a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>MÃ£ Äá»nh danh doanh nghiá»p (BIC) nÃ y khÃŽng liÃªn káº¿t vá»i IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>GiÃ¡ trá» nÃ y nÃªn ÄÃºng Äá»nh dáº¡ng JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Danh sÃ¡ch nÃ y chá» nÃªn chá»©a cÃ¡c pháº§n tá»­ khÃ¡c nhau.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>GiÃ¡ trá» nÃ y cÃ³ thá» thá»±c hiá»n ÄÆ°á»£c.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>GiÃ¡ trá» nÃ y cÃ³ thá» thá»±c hiá»n ÄÆ°á»£c hoáº·c báº±ng khÃŽng.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>GiÃ¡ trá» nÃ y nÃªn bá» tá»« chá»i.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>GiÃ¡ trá» nÃ y nÃªn bá» tá»« chá»i hoáº·c báº±ng khÃŽng.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>GiÃ¡ trá» nÃ y khÃŽng pháº£i lÃ  mÃºi giá» há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Máº­t kháº©u nÃ y ÄÃ£ bá» rÃ² rá» dá»¯ liá»u, khÃŽng ÄÆ°á»£c sá»­ dá»¥ng ná»¯a. Xin vui lÃ²ng sá»­ dá»¥ng máº­t kháº©u khÃ¡c.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>GiÃ¡ trá» nÃ y nÃªn thuá»c giá»¯a {{ min }} vÃ  {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>GiÃ¡ trá» nÃ y khÃŽng pháº£i lÃ  tÃªn mÃ¡y chá»§ há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>Sá» lÆ°á»£ng cÃ¡c pháº§n tá»­ trong bá» sÆ°u táº­p nÃ y nÃªn lÃ  bá»i sá» cá»§a {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>GiÃ¡ trá» nÃ y nÃªn thá»a mÃ£n Ã­t nháº¥t má»t trong nhá»¯ng rÃ ng buá»c sau:</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>Má»i pháº§n tá»­ trong bá» sÆ°u táº­p nÃ y nÃªn thá»a mÃ£n nhá»¯ng rÃ ng buá»c cá»§a nÃ³.</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>GiÃ¡ trá» nÃ y khÃŽng pháº£i lÃ  mÃ£ sá» chá»©ng khoÃ¡n quá»c táº¿ (ISIN) hÆ¡Ì£p lÃªÌ£.</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>GiÃ¡ trá» nÃ y pháº£i lÃ  má»t biá»u thá»©c há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>GiÃ¡ trá» nÃ y khÃŽng pháº£i lÃ  mÃ u CSS há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>GiÃ¡ trá» nÃ y khÃŽng pháº£i lÃ  kÃœ hiá»u CIDR há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>GiÃ¡ trá» cá»§a máº·t náº¡ máº¡ng pháº£i náº±m trong khoáº£ng tá»« {{ min }} Äáº¿n {{ max }}.</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>TÃªn tá»p quÃ¡ dÃ i. Pháº£i báº±ng {{ filename_max_length }} kÃœ tá»± hoáº·c Ã­t hÆ¡n.|TÃªn tá»p quÃ¡ dÃ i. Pháº£i báº±ng {{ filename_max_length }} kÃœ tá»± hoáº·c Ã­t hÆ¡n.</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>Sá»©c máº¡nh máº­t kháº©u quÃ¡ tháº¥p. Vui lÃ²ng sá»­ dá»¥ng máº­t kháº©u máº¡nh hÆ¡n.</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>GiÃ¡ trá» nÃ y chá»©a cÃ¡c kÃœ tá»± khÃŽng ÄÆ°á»£c phÃ©p bá»i má»©c Äá» háº¡n cháº¿ hiá»n táº¡i.</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>Sá»­ dá»¥ng kÃœ tá»± vÃŽ hÃ¬nh khÃŽng ÄÆ°á»£c phÃ©p.</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>KhÃŽng ÄÆ°á»£c phÃ©p trá»n cÃ¡c sá» tá»« cÃ¡c táº­p lá»nh khÃ¡c nhau.</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>Sá»­ dá»¥ng cÃ¡c kÃœ tá»± lá»p phá»§ áº©n khÃŽng ÄÆ°á»£c phÃ©p.</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>Pháº§n má» rá»ng cá»§a tá»p khÃŽng há»£p lá» ({{ extension }}). Pháº§n má» rá»ng cho phÃ©p lÃ  {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">MÃ£ hÃ³a kÃœ tá»± ÄÆ°á»£c phÃ¡t hiá»n lÃ  khÃŽng há»£p lá» ({{ detected }}). CÃ¡c mÃ£ hÃ³a ÄÆ°á»£c phÃ©p lÃ  {{ encodings }}.</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">GiÃ¡ trá» nÃ y khÃŽng pháº£i lÃ  Äá»a chá» MAC há»£p lá».</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">URL nÃ y thiáº¿u miá»n cáº¥p cao.</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.zh_CN.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.zh_CN.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.zh_CN.xlf	(revision 8435)
@@ -0,0 +1,499 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="zh-CN" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>è¯¥åéçåŒåºäžº false ã</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>è¯¥åéçåŒåºäžº true ã</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>è¯¥åéçç±»ååºäžº {{ type }} ã</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>è¯¥åéåŒåºäžºç©ºã</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>éå®åéçåŒäžæ¯ææçéé¡¹ã</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>æšè³å°èŠéæ© {{ limit }} äžªéé¡¹ã</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>æšæå€èœéæ© {{ limit }} äžªéé¡¹ã</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>äžäžªæè
+å€äžªç»å®çåŒæ æã</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>æ­€å­æ®µæ¯å€äœçã</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>æ­€å­æ®µçŒºå€±ã</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>è¯¥åŒäžæ¯äžäžªææçæ¥æïŒdateïŒã</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>è¯¥åŒäžæ¯äžäžªææçæ¥ææ¶éŽïŒdatetimeïŒã</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>è¯¥åŒäžæ¯äžäžªææçé®ä»¶å°åã</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>æä»¶æªæŸå°ã</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>æä»¶äžå¯è¯»ã</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>æä»¶å€ªå€§ ({{ size }} {{ suffix }})ãæä»¶å€§å°äžå¯ä»¥è¶
+è¿ {{ limit }} {{ suffix }} ã</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>æ æçæä»¶ç±»å ({{ type }}) ãå
+è®žçæä»¶ç±»åæ {{ types }} ã</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>è¿äžªåéçåŒåºè¯¥å°äºæç­äº {{ limit }}ã</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>å­ç¬Šäž²å€ªé¿ïŒé¿åºŠäžå¯è¶
+è¿ {{ limit }} äžªå­ç¬Šã</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>è¯¥åéçåŒåºè¯¥å€§äºæç­äº {{ limit }}ã</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>å­ç¬Šäž²å€ªç­ïŒé¿åºŠäžå¯å°äº {{ limit }} äžªå­ç¬Šã</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>è¯¥åéäžåºäžºç©ºã</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>è¯¥åéäžåºäžº null ã</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>è¯¥åéåºäžºç©º null ã</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>è¯¥åéåŒæ æ ã</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>è¯¥åŒäžæ¯äžäžªææçæ¶éŽã</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>è¯¥åŒäžæ¯äžäžªææç URL ã</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>è¿äž€äžªåéçåŒåºè¯¥çžç­ã</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>æä»¶å€ªå€§ïŒæä»¶å€§å°äžå¯ä»¥è¶
+è¿ {{ limit }} {{ suffix }}ã </target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>æä»¶å€ªå€§ã</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>æ æ³äžäŒ æ­€æä»¶ã</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>è¯¥åŒåºè¯¥äžºææçæ°å­ã</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>è¯¥æä»¶äžæ¯ææçåŸçã</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">è¯¥åŒäžæ¯ææçIPå°åã</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>è¯¥åŒäžæ¯ææçè¯­èšåã</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>è¯¥åŒäžæ¯ææçåºååŒïŒlocaleïŒã</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>è¯¥åŒäžæ¯ææçåœå®¶åã</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>è¯¥åŒå·²ç»è¢«äœ¿çšã</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>äžèœè§£æåŸçå€§å°ã</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>åŸçå€ªå®œ ({{ width }}px)ïŒæå€§å®œåºŠäžº {{ max_width }}px ã</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>åŸçå®œåºŠäžå€ ({{ width }}px)ïŒæå°å®œåºŠäžº {{ min_width }}px ã</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>åŸçå€ªé« ({{ height }}px)ïŒæå€§é«åºŠäžº {{ max_height }}px ã</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>åŸçé«åºŠäžå€ ({{ height }}px)ïŒæå°é«åºŠäžº {{ min_height }}px ã</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>è¯¥åéçåŒåºäžºçšæ·åœåçå¯ç ã</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>è¯¥åéåºäžº {{ limit }} äžªå­ç¬Šã</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>è¯¥æä»¶çäžäŒ äžå®æŽã</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>æ²¡æäžäŒ ä»»äœæä»¶ã</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">php.ini äž­æ²¡æé
+çœ®äžŽæ¶æä»¶å€¹ïŒæé
+çœ®çæä»¶å€¹äžå­åšã</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>äžŽæ¶æä»¶åå
+¥ç£çå€±èŽ¥ã</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>æäžª PHP æ©å±é æäžäŒ å€±èŽ¥ã</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>è¯¥éåæå°åºå
+å« {{ limit }} äžªå
+çŽ ã</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>è¯¥éåæå€å
+å« {{ limit }} äžªå
+çŽ ã</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>è¯¥éååºå
+å« {{ limit }} äžªå
+çŽ  element ã</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>æ æçä¿¡çšå¡å·ã</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>äžæ¯æçä¿¡çšå¡ç±»åææ æçä¿¡çšå¡å·ã</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">è¯¥åŒäžæ¯ææçåœé
+é¶è¡èŽŠå·ïŒIBANïŒã</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>è¯¥åŒäžæ¯ææç10äœåœé
+æ åä¹Šå·ïŒISBN-10ïŒã</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>è¯¥åŒäžæ¯ææç13äœåœé
+æ åä¹Šå·ïŒISBN-13ïŒã</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>è¯¥åŒäžæ¯ææçåœé
+æ åä¹Šå·ïŒISBN-10 æ ISBN-13ïŒã</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>è¯¥åŒäžæ¯ææçåœé
+æ åæåå·ïŒISSNïŒã</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>è¯¥åŒäžæ¯ææçèŽ§åžåïŒcurrencyïŒã</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>è¯¥åŒåºç­äº {{ compared_value }} ã</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>è¯¥åŒåºå€§äº {{ compared_value }} ã</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>è¯¥åŒåºå€§äºæç­äº {{ compared_value }} ã</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>è¯¥åŒåºäž {{ compared_value_type }} {{ compared_value }} çžåã</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>è¯¥åŒåºå°äº {{ compared_value }} ã</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>è¯¥åŒåºå°äºæç­äº {{ compared_value }} ã</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>è¯¥åŒäžåºå
+ç­äº {{ compared_value }} ã</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>è¯¥åŒäžåºäž {{ compared_value_type }} {{ compared_value }} çžåã</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>åŸçå®œé«æ¯å€ªå€§ ({{ ratio }})ãå
+è®žçæå€§å®œé«æ¯äžº {{ max_ratio }}ã</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>åŸçå®œé«æ¯å€ªå° ({{ ratio }})ãå
+è®žçæå€§å®œé«æ¯äžº {{ min_ratio }}ã</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>åŸçæ¯æ¹åœ¢ç ({{ width }}x{{ height }}px)ãäžå
+è®žäœ¿çšæ¹åœ¢çåŸçã</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>åŸçæ¯æšªåç ({{ width }}x{{ height }}px)ãäžå
+è®žäœ¿çšæšªåçåŸçã</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>åŸçæ¯çºµåç ({{ width }}x{{ height }}px)ãäžå
+è®žäœ¿çšçºµåçåŸçã</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>äžå
+è®žäœ¿çšç©ºæä»¶ã</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>äž»æºåæ æ³è§£æã</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>è¯¥åŒäžç¬Šå {{ charset }} çŒç ã</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">è¯¥åŒäžæ¯ææçäžå¡æ è¯ç¬Šä»£ç ïŒBICïŒã</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>éè¯¯</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">è¯¥åŒäžæ¯ææçUUIDã</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>æ­€åŒåºäžº {{ compared_value }} çåæ°ã</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>æ­€äžå¡æ è¯ç¬Šä»£ç ïŒBICïŒäžIBAN {{ iban }} æ å
+³ã</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>è¯¥åŒåºè¯¥æ¯ææçJSONã</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>è¯¥éååºä»
+å
+å«ç¬äžæ äºçå
+çŽ ã</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>æ°åŒåºäžºæ­£æ°ã</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>æ°åŒåºæ¯æ­£æ°ïŒæäžºé¶ã</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>æ°åŒåºäžºèŽæ°ã</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>æ°åŒåºæ¯èŽæ°ïŒæäžºé¶ã</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>æ ææ¶åºã</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>æ­€å¯ç å·²è¢«æ³é²ïŒåå¿äœ¿çšãè¯·æŽæ¢å¯ç ã</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>è¯¥æ°åŒåºåš {{ min }} å {{ max }} ä¹éŽã</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>è¯¥åŒäžæ¯ææçäž»æºåç§°ã</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>è¯¥éåå
+çå
+çŽ æ°éåŸæ¯ {{ compared_value }} çåæ°ã</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>è¯¥åŒéç¬Šåä»¥äžå
+¶äž­äžäžªçºŠæïŒ</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>è¯¥éåå
+çæ¯äžªå
+çŽ éç¬Šåå
+çŽ æ¬èº«è§å®ççºŠæã</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>è¯¥åŒäžæ¯ææçåœé
+è¯åžè¯å«ç  ïŒISINïŒã</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>è¯¥åŒéäžºäžäžªææçè¡šèŸŸåŒã</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>è¯¥åŒäžæ¯ææçCSSé¢è²ã</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>è¯¥åŒäžæ¯äžäžªææçCIDRè¡šç€ºã</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>çœç»æ©ç çåŒåºåœåš {{ min }} å {{ max }} ä¹éŽã</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>è¯¥æä»¶åè¿é¿ïŒæé¿äžåºè¶
+è¿{{ filename_max_length }} äžªå­ç¬Šã</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>è¯¥å¯ç åŒºåºŠå€ªäœãè¯·äœ¿çšæŽå€æçå¯ç ã</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>è¯¥åŒå
+å«äºåœåéå¶çº§å«äžå
+è®žçå­ç¬Šã</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>äžå
+è®žäœ¿çšéèå­ç¬Šã</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>äžå¯æ··åäœ¿çšäžåè¯­ç³»çæ°å­ã</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>äžå
+è®žäœ¿çšéèçèŠçå­ç¬Šã</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target state="needs-review-translation">æä»¶çæ©å±åæ æ ({{ extension }})ãå
+è®žçæ©å±åäžº {{ extensions }}ã</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">æ£æµå°çå­ç¬ŠçŒç æ æ ({{ detected }})ãå
+è®žççŒç äžº {{ encodings }}ã</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">è¯¥åŒäžæ¯ææçMACå°åã</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">æ­€URLçŒºå°é¡¶çº§ååã</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.zh_TW.xlf
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.zh_TW.xlf	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Resources/translations/validators.zh_TW.xlf	(revision 8435)
@@ -0,0 +1,501 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+    <file source-language="en" target-language="zh-TW" datatype="plaintext" original="file.ext">
+        <body>
+            <trans-unit id="1">
+                <source>This value should be false.</source>
+                <target>è©²è®æžçåŒæçº false ã</target>
+            </trans-unit>
+            <trans-unit id="2">
+                <source>This value should be true.</source>
+                <target>è©²è®æžçåŒæçº true ã</target>
+            </trans-unit>
+            <trans-unit id="3">
+                <source>This value should be of type {{ type }}.</source>
+                <target>è©²è®æžçé¡åæçº {{ type }} ã</target>
+            </trans-unit>
+            <trans-unit id="4">
+                <source>This value should be blank.</source>
+                <target>è©²è®æžæçºç©ºã</target>
+            </trans-unit>
+            <trans-unit id="5">
+                <source>The value you selected is not a valid choice.</source>
+                <target>éžå®è®æžçåŒäžæ¯ææçéžé 
+ã</target>
+            </trans-unit>
+            <trans-unit id="6">
+                <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
+                <target>æšè³å°èŠéžæ {{ limit }} åéžé 
+ã</target>
+            </trans-unit>
+            <trans-unit id="7">
+                <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
+                <target>æšæå€èœéžæ {{ limit }} åéžé 
+ã</target>
+            </trans-unit>
+            <trans-unit id="8">
+                <source>One or more of the given values is invalid.</source>
+                <target>äžåæè
+å€åçµŠå®çåŒç¡æã</target>
+            </trans-unit>
+            <trans-unit id="9">
+                <source>This field was not expected.</source>
+                <target>æ­€å­æ®µæ¯æ²æé æå°ã</target>
+            </trans-unit>
+            <trans-unit id="10">
+                <source>This field is missing.</source>
+                <target>æ­€å­æ®µçŒºå€±ã</target>
+            </trans-unit>
+            <trans-unit id="11">
+                <source>This value is not a valid date.</source>
+                <target>è©²åŒäžæ¯äžåææçæ¥æïŒdateïŒã</target>
+            </trans-unit>
+            <trans-unit id="12">
+                <source>This value is not a valid datetime.</source>
+                <target>è©²åŒäžæ¯äžåææçæ¥ææéïŒdatetimeïŒã</target>
+            </trans-unit>
+            <trans-unit id="13">
+                <source>This value is not a valid email address.</source>
+                <target>è©²åŒäžæ¯äžåææçéµä»¶å°åã</target>
+            </trans-unit>
+            <trans-unit id="14">
+                <source>The file could not be found.</source>
+                <target>æŸäžå°æªæ¡ã</target>
+            </trans-unit>
+            <trans-unit id="15">
+                <source>The file is not readable.</source>
+                <target>ç¡æ³è®åæªæ¡ã</target>
+            </trans-unit>
+            <trans-unit id="16">
+                <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>æªæ¡å€ªå€§ ({{ size }} {{ suffix }})ãæªæ¡å€§å°äžå¯ä»¥è¶
+é {{ limit }} {{ suffix }} ã</target>
+            </trans-unit>
+            <trans-unit id="17">
+                <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
+                <target>ç¡æçæªæ¡é¡å ({{ type }}) ãå
+èš±çæªæ¡é¡åæ {{ types }} ã</target>
+            </trans-unit>
+            <trans-unit id="18">
+                <source>This value should be {{ limit }} or less.</source>
+                <target>éåè®æžçåŒæè©²å°æŒæç­æŒ {{ limit }}ã</target>
+            </trans-unit>
+            <trans-unit id="19">
+                <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
+                <target>å­äž²å€ªé·ïŒé·åºŠäžå¯è¶
+é {{ limit }} åå­å
+ã</target>
+            </trans-unit>
+            <trans-unit id="20">
+                <source>This value should be {{ limit }} or more.</source>
+                <target>è©²è®æžçåŒæè©²å€§æŒæç­æŒ {{ limit }}ã</target>
+            </trans-unit>
+            <trans-unit id="21">
+                <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
+                <target>å­äž²å€ªç­ïŒé·åºŠäžå¯å°æŒ {{ limit }} åå­å
+ã</target>
+            </trans-unit>
+            <trans-unit id="22">
+                <source>This value should not be blank.</source>
+                <target>è©²è®æžäžæçºç©ºçœã</target>
+            </trans-unit>
+            <trans-unit id="23">
+                <source>This value should not be null.</source>
+                <target>è©²åŒäžæçº null ã</target>
+            </trans-unit>
+            <trans-unit id="24">
+                <source>This value should be null.</source>
+                <target>è©²åŒæçº null ã</target>
+            </trans-unit>
+            <trans-unit id="25">
+                <source>This value is not valid.</source>
+                <target>ç¡æçæžåŒ ã</target>
+            </trans-unit>
+            <trans-unit id="26">
+                <source>This value is not a valid time.</source>
+                <target>è©²åŒäžæ¯äžåææçæéã</target>
+            </trans-unit>
+            <trans-unit id="27">
+                <source>This value is not a valid URL.</source>
+                <target>è©²åŒäžæ¯äžåææç URL ã</target>
+            </trans-unit>
+            <trans-unit id="31">
+                <source>The two values should be equal.</source>
+                <target>éå
+©åè®æžçåŒæè©²çžç­ã</target>
+            </trans-unit>
+            <trans-unit id="32">
+                <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
+                <target>æªæ¡å€ªå€§ïŒæªæ¡å€§å°äžå¯ä»¥è¶
+é {{ limit }} {{ suffix }}ã </target>
+            </trans-unit>
+            <trans-unit id="33">
+                <source>The file is too large.</source>
+                <target>æªæ¡å€ªå€§ã</target>
+            </trans-unit>
+            <trans-unit id="34">
+                <source>The file could not be uploaded.</source>
+                <target>ç¡æ³äžå³æ­€æªæ¡ã</target>
+            </trans-unit>
+            <trans-unit id="35">
+                <source>This value should be a valid number.</source>
+                <target>è©²åŒæè©²çºææçæžå­ã</target>
+            </trans-unit>
+            <trans-unit id="36">
+                <source>This file is not a valid image.</source>
+                <target>è©²æªæ¡äžæ¯ææçåçã</target>
+            </trans-unit>
+            <trans-unit id="37" resname="This is not a valid IP address.">
+                <source>This value is not a valid IP address.</source>
+                <target state="needs-review-translation">æ­€åŒäžæ¯ææçIPå°åã</target>
+            </trans-unit>
+            <trans-unit id="38">
+                <source>This value is not a valid language.</source>
+                <target>è©²åŒäžæ¯ææçèªèšåã</target>
+            </trans-unit>
+            <trans-unit id="39">
+                <source>This value is not a valid locale.</source>
+                <target>è©²åŒäžæ¯ææçåååŒïŒlocaleïŒã</target>
+            </trans-unit>
+            <trans-unit id="40">
+                <source>This value is not a valid country.</source>
+                <target>è©²åŒäžæ¯ææçåå®¶åã</target>
+            </trans-unit>
+            <trans-unit id="41">
+                <source>This value is already used.</source>
+                <target>è©²åŒå·²ç¶è¢«äœ¿çšã</target>
+            </trans-unit>
+            <trans-unit id="42">
+                <source>The size of the image could not be detected.</source>
+                <target>äžèœè§£æåçå€§å°ã</target>
+            </trans-unit>
+            <trans-unit id="43">
+                <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
+                <target>åçå€ªå¯¬ ({{ width }}px)ïŒæå€§å¯¬åºŠçº {{ max_width }}px ã</target>
+            </trans-unit>
+            <trans-unit id="44">
+                <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
+                <target>åçå¯¬åºŠäžå€  ({{ width }}px)ïŒæå°å¯¬åºŠçº {{ min_width }}px ã</target>
+            </trans-unit>
+            <trans-unit id="45">
+                <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
+                <target>åçå€ªé« ({{ height }}px)ïŒæå€§é«åºŠçº {{ max_height }}px ã</target>
+            </trans-unit>
+            <trans-unit id="46">
+                <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
+                <target>åçé«åºŠäžå€  ({{ height }}px)ïŒæå°é«åºŠçº {{ min_height }}px ã</target>
+            </trans-unit>
+            <trans-unit id="47">
+                <source>This value should be the user's current password.</source>
+                <target>è©²è®æžçåŒæçºçšæ¶ç®åçå¯ç¢Œã</target>
+            </trans-unit>
+            <trans-unit id="48">
+                <source>This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.</source>
+                <target>è©²è®æžæçº {{ limit }} åå­å
+ã</target>
+            </trans-unit>
+            <trans-unit id="49">
+                <source>The file was only partially uploaded.</source>
+                <target>è©²æªæ¡çäžå³äžå®æŽã</target>
+            </trans-unit>
+            <trans-unit id="50">
+                <source>No file was uploaded.</source>
+                <target>æ²æäžå³ä»»äœæªæ¡ã</target>
+            </trans-unit>
+            <trans-unit id="51" resname="No temporary folder was configured in php.ini.">
+                <source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
+                <target state="needs-review-translation">php.ini äž­æ²æé
+çœ®èšææä»¶å€ŸïŒæé
+çœ®çæä»¶å€Ÿäžå­åšã</target>
+            </trans-unit>
+            <trans-unit id="52">
+                <source>Cannot write temporary file to disk.</source>
+                <target>æ«å­æªå¯«å
+¥ç£ç¢å€±æã</target>
+            </trans-unit>
+            <trans-unit id="53">
+                <source>A PHP extension caused the upload to fail.</source>
+                <target>æå PHP æŽå±é æäžå³å€±æã</target>
+            </trans-unit>
+            <trans-unit id="54">
+                <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
+                <target>è©²éåæå°æå
+å« {{ limit }} åå
+çŽ ã</target>
+            </trans-unit>
+            <trans-unit id="55">
+                <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
+                <target>è©²éåæå€å
+å« {{ limit }} åå
+çŽ ã</target>
+            </trans-unit>
+            <trans-unit id="56">
+                <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
+                <target>è©²éåæå
+å« {{ limit }} åå
+çŽ  element ã</target>
+            </trans-unit>
+            <trans-unit id="57">
+                <source>Invalid card number.</source>
+                <target>ç¡æçä¿¡çšå¡èã</target>
+            </trans-unit>
+            <trans-unit id="58">
+                <source>Unsupported card type or invalid card number.</source>
+                <target>äžæ¯æŽçä¿¡çšå¡é¡åæç¡æçä¿¡çšå¡èã</target>
+            </trans-unit>
+            <trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
+                <source>This value is not a valid International Bank Account Number (IBAN).</source>
+                <target state="needs-review-translation">æ­€åŒäžæ¯ææçåééè¡åž³æ¶èç¢ŒïŒIBANïŒã</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>è©²åŒäžæ¯ææç10äœåéæšæºæžèïŒISBN-10ïŒã</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>è©²åŒäžæ¯ææç13äœåéæšæºæžèïŒISBN-13ïŒã</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>è©²åŒäžæ¯ææçåéæšæºæžèïŒISBN-10 æ ISBN-13ïŒã</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>è©²åŒäžæ¯ææçåéæšæºæåèïŒISSNïŒã</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>è©²åŒäžæ¯ææçè²šå¹£åïŒcurrencyïŒã</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>è©²åŒæç­æŒ {{ compared_value }} ã</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>è©²åŒæå€§æŒ {{ compared_value }} ã</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>è©²åŒæå€§æŒæç­æŒ {{ compared_value }} ã</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>è©²åŒæè {{ compared_value_type }} {{ compared_value }} çžåã</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>è©²åŒæå°æŒ {{ compared_value }} ã</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>è©²åŒæå°æŒæç­æŒ {{ compared_value }} ã</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>è©²åŒæäžç­æŒ {{ compared_value }} ã</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>è©²åŒäžæè {{ compared_value_type }} {{ compared_value }} çžåã</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>ååæ ŒåŒéå€§ ({{ ratio }})ã æå€§å
+èš±å°ºå¯ž {{ max_ratio }}ã</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>ååæ ŒåŒéå° ({{ ratio }})ãæå°å°ºå¯ž {{ min_ratio }}ã</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>æ¹åœ¢åå ({{ width }}x{{ height }}px)ãäžæ¥åæ¹åœ¢ååã</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>çŽå¿µååžå±åå ({{ width }}x{{ height }}px)ã äžæ¥åçŽå¿µååžå±ååã</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>æžç±åžå±åå ({{ width }}x{{ height }}px)ãäžæ¥åååæžç±åžå±ã</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>äžæ¥åç©ºçœæä»¶ã</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>æªæŸå°æååšã</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>è©²æžåŒäžç¬Šåé æ {{ charset }} ç¬Šèç·šç¢Œã</target>
+            </trans-unit>
+            <trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
+                <source>This value is not a valid Business Identifier Code (BIC).</source>
+                <target state="needs-review-translation">æ­€åŒäžæ¯ææçæ¥­åè­å¥ç¢ŒïŒBICïŒã</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>é¯èª€ã</target>
+            </trans-unit>
+            <trans-unit id="83" resname="This is not a valid UUID.">
+                <source>This value is not a valid UUID.</source>
+                <target state="needs-review-translation">æ­€åŒäžæ¯ææçUUIDã</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>è©²åŒå¿
+é æ¯åæž {{ compared_value }}ã</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>è©²äŒæ¥­è­å¥ç¢Œ (BIC) èéè¡è³¬æ¶åéç·šèäžå£¹èŽ (IBAN) {{ iban }}ã</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>è©²æžåŒå¿
+é åºååçºJSONæ ŒåŒã</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>è©²éåæå
+å
+å«å¯å£¹å
+çŽ ã</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>æžåŒæçºæ­£æžã</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>æžåŒææ¯æ­£æžïŒæçºé¶ã</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>æžåŒæçºè² æžã</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>æžåŒææ¯è² æžïŒæçºé¶ã</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>ç¡ææåã</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>æ­€å¯ç¢Œå·²è¢«æ³é²ïŒåå¿äœ¿çšãè«æŽæå¯ç¢Œã</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>è©²æžåŒæåš {{ min }} å {{ max }} ä¹éã</target>
+            </trans-unit>
+            <trans-unit id="95">
+                <source>This value is not a valid hostname.</source>
+                <target>è©²æžåŒäžæ¯ææçäž»æ©åçš±ã</target>
+            </trans-unit>
+            <trans-unit id="96">
+                <source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
+                <target>è©²éåå
+§çå
+çŽ æžéåŸæ¯ {{ compared_value }} çåæžã</target>
+            </trans-unit>
+            <trans-unit id="97">
+                <source>This value should satisfy at least one of the following constraints:</source>
+                <target>è©²æžåŒéç¬Šåä»¥äžå
+¶äž­äžåçŽæïŒ</target>
+            </trans-unit>
+            <trans-unit id="98">
+                <source>Each element of this collection should satisfy its own set of constraints.</source>
+                <target>è©²éåå
+§çæ¯åå
+çŽ éç¬Šåå
+çŽ æ¬èº«èŠå®ççŽæã</target>
+            </trans-unit>
+            <trans-unit id="99">
+                <source>This value is not a valid International Securities Identification Number (ISIN).</source>
+                <target>è©²æžåŒäžæ¯ææçåéè­åžè­å¥ç¢Œ ïŒISINïŒã</target>
+            </trans-unit>
+            <trans-unit id="100">
+                <source>This value should be a valid expression.</source>
+                <target>è©²åŒéçºäžåææçè¡šéåŒã</target>
+            </trans-unit>
+            <trans-unit id="101">
+                <source>This value is not a valid CSS color.</source>
+                <target>è©²åŒäžæ¯ææçCSSé¡è²ã</target>
+            </trans-unit>
+            <trans-unit id="102">
+                <source>This value is not a valid CIDR notation.</source>
+                <target>è©²åŒäžæ¯äžåææçCIDRè¡šç€ºã</target>
+            </trans-unit>
+            <trans-unit id="103">
+                <source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
+                <target>ç¶²çµ¡æ©ç¢ŒçåŒæç¶åš {{ min }} å {{ max }} ä¹éã</target>
+            </trans-unit>
+            <trans-unit id="104">
+                <source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
+                <target>è©²æªåé·åºŠå€ªé·ïŒé·åºŠäžå¯è¶
+é {{ filename_max_length }} åå­å
+ã</target>
+            </trans-unit>
+            <trans-unit id="105">
+                <source>The password strength is too low. Please use a stronger password.</source>
+                <target>è©²å¯ç¢ŒåŒ·åºŠå€ªäœïŒè«äœ¿çšæŽé«åŒ·åºŠçå¯ç¢Œã</target>
+            </trans-unit>
+            <trans-unit id="106">
+                <source>This value contains characters that are not allowed by the current restriction-level.</source>
+                <target>è©²åŒå
+å«äºç®åéå¶ç­çŽäžå
+èš±çå­å
+ã</target>
+            </trans-unit>
+            <trans-unit id="107">
+                <source>Using invisible characters is not allowed.</source>
+                <target>äžå
+èš±äœ¿çšé±åœ¢å­å
+ã</target>
+            </trans-unit>
+            <trans-unit id="108">
+                <source>Mixing numbers from different scripts is not allowed.</source>
+                <target>äžå
+èš±æ··åäŸèªäžåèªç³»çæžå­ã</target>
+            </trans-unit>
+            <trans-unit id="109">
+                <source>Using hidden overlay characters is not allowed.</source>
+                <target>äžå
+èš±äœ¿çšé±èçèŠèå­å
+ã</target>
+            </trans-unit>
+            <trans-unit id="110">
+                <source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
+                <target>ç¡æçå¯æªå ({{ extension }}). å
+èš±çå¯æªåæ {{ extensions }}.</target>
+            </trans-unit>
+            <trans-unit id="111">
+                <source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
+                <target state="needs-review-translation">åµæž¬å°çå­å
+ç·šç¢Œç¡æ ({{ detected }})ãå
+èš±çç·šç¢Œçº {{ encodings }}ã</target>
+            </trans-unit>
+            <trans-unit id="112">
+                <source>This value is not a valid MAC address.</source>
+                <target state="needs-review-translation">éäžæ¯äžåææçMACå°åã</target>
+            </trans-unit>
+            <trans-unit id="113">
+                <source>This URL is missing a top-level domain.</source>
+                <target state="needs-review-translation">æ­€URLçŒºå°é çŽååã</target>
+            </trans-unit>
+            <trans-unit id="114">
+                <source>This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</source>
+                <target state="needs-translation">This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.</target>
+            </trans-unit>
+            <trans-unit id="115">
+                <source>This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</source>
+                <target state="needs-translation">This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.</target>
+            </trans-unit>
+        </body>
+    </file>
+</xliff>
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Test/ConstraintValidatorTestCase.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Test/ConstraintValidatorTestCase.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Test/ConstraintValidatorTestCase.php	(revision 8435)
@@ -0,0 +1,585 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Test;
+
+use PHPUnit\Framework\Assert;
+use PHPUnit\Framework\Constraint\IsIdentical;
+use PHPUnit\Framework\Constraint\IsInstanceOf;
+use PHPUnit\Framework\Constraint\IsNull;
+use PHPUnit\Framework\Constraint\LogicalOr;
+use PHPUnit\Framework\ExpectationFailedException;
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\GroupSequence;
+use Symfony\Component\Validator\Constraints\NotNull;
+use Symfony\Component\Validator\Constraints\Valid;
+use Symfony\Component\Validator\ConstraintValidatorInterface;
+use Symfony\Component\Validator\ConstraintViolation;
+use Symfony\Component\Validator\ConstraintViolationInterface;
+use Symfony\Component\Validator\ConstraintViolationList;
+use Symfony\Component\Validator\ConstraintViolationListInterface;
+use Symfony\Component\Validator\Context\ExecutionContext;
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Mapping\ClassMetadata;
+use Symfony\Component\Validator\Mapping\PropertyMetadata;
+use Symfony\Component\Validator\Validator\ContextualValidatorInterface;
+use Symfony\Component\Validator\Validator\ValidatorInterface;
+use Symfony\Contracts\Translation\TranslatorInterface;
+
+/**
+ * A test case to ease testing Constraint Validators.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @template T of ConstraintValidatorInterface
+ */
+abstract class ConstraintValidatorTestCase extends TestCase
+{
+    /**
+     * @var ExecutionContextInterface
+     */
+    protected $context;
+
+    /**
+     * @var T
+     */
+    protected $validator;
+
+    protected $group;
+    protected $metadata;
+    protected $object;
+    protected $value;
+    protected $root;
+    protected $propertyPath;
+    protected $constraint;
+    protected $defaultTimezone;
+    private string $defaultLocale;
+    private array $expectedViolations;
+    private int $call;
+
+    protected function setUp(): void
+    {
+        $this->group = 'MyGroup';
+        $this->metadata = null;
+        $this->object = null;
+        $this->value = 'InvalidValue';
+        $this->root = 'root';
+        $this->propertyPath = 'property.path';
+
+        // Initialize the context with some constraint so that we can
+        // successfully build a violation.
+        $this->constraint = new NotNull();
+
+        $this->context = $this->createContext();
+        $this->validator = $this->createValidator();
+        $this->validator->initialize($this->context);
+
+        if (class_exists(\Locale::class)) {
+            $this->defaultLocale = \Locale::getDefault();
+            \Locale::setDefault('en');
+        }
+
+        $this->expectedViolations = [];
+        $this->call = 0;
+
+        $this->setDefaultTimezone('UTC');
+    }
+
+    protected function tearDown(): void
+    {
+        $this->restoreDefaultTimezone();
+
+        if (class_exists(\Locale::class)) {
+            \Locale::setDefault($this->defaultLocale);
+        }
+    }
+
+    protected function setDefaultTimezone(?string $defaultTimezone)
+    {
+        // Make sure this method cannot be called twice before calling
+        // also restoreDefaultTimezone()
+        if (null === $this->defaultTimezone) {
+            $this->defaultTimezone = date_default_timezone_get();
+            date_default_timezone_set($defaultTimezone);
+        }
+    }
+
+    protected function restoreDefaultTimezone()
+    {
+        if (null !== $this->defaultTimezone) {
+            date_default_timezone_set($this->defaultTimezone);
+            $this->defaultTimezone = null;
+        }
+    }
+
+    protected function createContext()
+    {
+        $translator = $this->createMock(TranslatorInterface::class);
+        $translator->expects($this->any())->method('trans')->willReturnArgument(0);
+        $validator = $this->createMock(ValidatorInterface::class);
+        $validator->expects($this->any())
+            ->method('validate')
+            ->willReturnCallback(fn () => $this->expectedViolations[$this->call++] ?? new ConstraintViolationList());
+
+        $context = new ExecutionContext($validator, $this->root, $translator);
+        $context->setGroup($this->group);
+        $context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
+        $context->setConstraint($this->constraint);
+
+        $contextualValidatorMockBuilder = $this->getMockBuilder(AssertingContextualValidator::class)
+            ->setConstructorArgs([$context]);
+        $contextualValidatorMethods = [
+            'atPath',
+            'validate',
+            'validateProperty',
+            'validatePropertyValue',
+            'getViolations',
+        ];
+
+        $contextualValidatorMockBuilder->onlyMethods($contextualValidatorMethods);
+        $contextualValidator = $contextualValidatorMockBuilder->getMock();
+        $contextualValidator->expects($this->any())
+            ->method('atPath')
+            ->willReturnCallback(fn ($path) => $contextualValidator->doAtPath($path));
+        $contextualValidator->expects($this->any())
+            ->method('validate')
+            ->willReturnCallback(fn ($value, $constraints = null, $groups = null) => $contextualValidator->doValidate($value, $constraints, $groups));
+        $contextualValidator->expects($this->any())
+            ->method('validateProperty')
+            ->willReturnCallback(fn ($object, $propertyName, $groups = null) => $contextualValidator->validateProperty($object, $propertyName, $groups));
+        $contextualValidator->expects($this->any())
+            ->method('validatePropertyValue')
+            ->willReturnCallback(fn ($objectOrClass, $propertyName, $value, $groups = null) => $contextualValidator->doValidatePropertyValue($objectOrClass, $propertyName, $value, $groups));
+        $contextualValidator->expects($this->any())
+            ->method('getViolations')
+            ->willReturnCallback(fn () => $contextualValidator->doGetViolations());
+        $validator->expects($this->any())
+            ->method('inContext')
+            ->with($context)
+            ->willReturn($contextualValidator);
+
+        return $context;
+    }
+
+    protected function setGroup(?string $group)
+    {
+        $this->group = $group;
+        $this->context->setGroup($group);
+    }
+
+    protected function setObject(mixed $object)
+    {
+        $this->object = $object;
+        $this->metadata = \is_object($object)
+            ? new ClassMetadata($object::class)
+            : null;
+
+        $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
+    }
+
+    protected function setProperty(mixed $object, string $property)
+    {
+        $this->object = $object;
+        $this->metadata = \is_object($object)
+            ? new PropertyMetadata($object::class, $property)
+            : null;
+
+        $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
+    }
+
+    protected function setValue(mixed $value)
+    {
+        $this->value = $value;
+        $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
+    }
+
+    protected function setRoot(mixed $root)
+    {
+        $this->root = $root;
+        $this->context = $this->createContext();
+        $this->validator->initialize($this->context);
+    }
+
+    protected function setPropertyPath(string $propertyPath)
+    {
+        $this->propertyPath = $propertyPath;
+        $this->context->setNode($this->value, $this->object, $this->metadata, $this->propertyPath);
+    }
+
+    protected function expectNoValidate()
+    {
+        $validator = $this->context->getValidator()->inContext($this->context);
+        $validator->expectNoValidate();
+    }
+
+    protected function expectValidateAt(int $i, string $propertyPath, mixed $value, string|GroupSequence|array|null $group)
+    {
+        $validator = $this->context->getValidator()->inContext($this->context);
+        $validator->expectValidation($i, $propertyPath, $value, $group, function ($passedConstraints) {
+            $expectedConstraints = new LogicalOr();
+            $expectedConstraints->setConstraints([new IsNull(), new IsIdentical([]), new IsInstanceOf(Valid::class)]);
+
+            Assert::assertThat($passedConstraints, $expectedConstraints);
+        });
+    }
+
+    protected function expectValidateValue(int $i, mixed $value, array $constraints = [], string|GroupSequence|array|null $group = null)
+    {
+        $contextualValidator = $this->context->getValidator()->inContext($this->context);
+        $contextualValidator->expectValidation($i, null, $value, $group, function ($passedConstraints) use ($constraints) {
+            if (\is_array($constraints) && !\is_array($passedConstraints)) {
+                $passedConstraints = [$passedConstraints];
+            }
+
+            Assert::assertEquals($constraints, $passedConstraints);
+        });
+    }
+
+    protected function expectFailingValueValidation(int $i, mixed $value, array $constraints, string|GroupSequence|array|null $group, ConstraintViolationInterface $violation)
+    {
+        $contextualValidator = $this->context->getValidator()->inContext($this->context);
+        $contextualValidator->expectValidation($i, null, $value, $group, function ($passedConstraints) use ($constraints) {
+            if (\is_array($constraints) && !\is_array($passedConstraints)) {
+                $passedConstraints = [$passedConstraints];
+            }
+
+            Assert::assertEquals($constraints, $passedConstraints);
+        }, $violation);
+    }
+
+    protected function expectValidateValueAt(int $i, string $propertyPath, mixed $value, Constraint|array $constraints, string|GroupSequence|array|null $group = null)
+    {
+        $contextualValidator = $this->context->getValidator()->inContext($this->context);
+        $contextualValidator->expectValidation($i, $propertyPath, $value, $group, function ($passedConstraints) use ($constraints) {
+            Assert::assertEquals($constraints, $passedConstraints);
+        });
+    }
+
+    protected function expectViolationsAt(int $i, mixed $value, Constraint $constraint)
+    {
+        $context = $this->createContext();
+
+        $validatorClassname = $constraint->validatedBy();
+
+        $validator = new $validatorClassname();
+        $validator->initialize($context);
+        $validator->validate($value, $constraint);
+
+        $this->expectedViolations[] = $context->getViolations();
+
+        return $context->getViolations();
+    }
+
+    protected function assertNoViolation()
+    {
+        $this->assertSame(0, $violationsCount = \count($this->context->getViolations()), sprintf('0 violation expected. Got %u.', $violationsCount));
+    }
+
+    protected function buildViolation(string|\Stringable $message): ConstraintViolationAssertion
+    {
+        return new ConstraintViolationAssertion($this->context, $message, $this->constraint);
+    }
+
+    /**
+     * @return ConstraintValidatorInterface
+     *
+     * @psalm-return T
+     */
+    abstract protected function createValidator();
+}
+
+final class ConstraintViolationAssertion
+{
+    private ExecutionContextInterface $context;
+
+    /**
+     * @var ConstraintViolationAssertion[]
+     */
+    private array $assertions;
+
+    private string $message;
+    private array $parameters = [];
+    private mixed $invalidValue = 'InvalidValue';
+    private string $propertyPath = 'property.path';
+    private ?int $plural = null;
+    private ?string $code = null;
+    private ?Constraint $constraint;
+    private mixed $cause = null;
+
+    /**
+     * @internal
+     */
+    public function __construct(ExecutionContextInterface $context, string $message, ?Constraint $constraint = null, array $assertions = [])
+    {
+        $this->context = $context;
+        $this->message = $message;
+        $this->constraint = $constraint;
+        $this->assertions = $assertions;
+    }
+
+    /**
+     * @return $this
+     */
+    public function atPath(string $path): static
+    {
+        $this->propertyPath = $path;
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function setParameter(string $key, string $value): static
+    {
+        $this->parameters[$key] = $value;
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function setParameters(array $parameters): static
+    {
+        $this->parameters = $parameters;
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function setTranslationDomain(?string $translationDomain): static
+    {
+        // no-op for BC
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function setInvalidValue(mixed $invalidValue): static
+    {
+        $this->invalidValue = $invalidValue;
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function setPlural(int $number): static
+    {
+        $this->plural = $number;
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function setCode(string $code): static
+    {
+        $this->code = $code;
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function setCause(mixed $cause): static
+    {
+        $this->cause = $cause;
+
+        return $this;
+    }
+
+    public function buildNextViolation(string $message): self
+    {
+        $assertions = $this->assertions;
+        $assertions[] = $this;
+
+        return new self($this->context, $message, $this->constraint, $assertions);
+    }
+
+    public function assertRaised(): void
+    {
+        $expected = [];
+        foreach ($this->assertions as $assertion) {
+            $expected[] = $assertion->getViolation();
+        }
+        $expected[] = $this->getViolation();
+
+        $violations = iterator_to_array($this->context->getViolations());
+
+        Assert::assertSame($expectedCount = \count($expected), $violationsCount = \count($violations), sprintf('%u violation(s) expected. Got %u.', $expectedCount, $violationsCount));
+
+        reset($violations);
+
+        foreach ($expected as $violation) {
+            Assert::assertEquals($violation, current($violations));
+            next($violations);
+        }
+    }
+
+    private function getViolation(): ConstraintViolation
+    {
+        return new ConstraintViolation(
+            $this->message,
+            $this->message,
+            $this->parameters,
+            $this->context->getRoot(),
+            $this->propertyPath,
+            $this->invalidValue,
+            $this->plural,
+            $this->code,
+            $this->constraint,
+            $this->cause
+        );
+    }
+}
+
+/**
+ * @internal
+ */
+class AssertingContextualValidator implements ContextualValidatorInterface
+{
+    private ExecutionContextInterface $context;
+    private bool $expectNoValidate = false;
+    private int $atPathCalls = -1;
+    private array $expectedAtPath = [];
+    private int $validateCalls = -1;
+    private array $expectedValidate = [];
+
+    public function __construct(ExecutionContextInterface $context)
+    {
+        $this->context = $context;
+    }
+
+    public function __destruct()
+    {
+        if ($this->expectedAtPath) {
+            throw new ExpectationFailedException('Some expected validation calls for paths were not done.');
+        }
+
+        if ($this->expectedValidate) {
+            throw new ExpectationFailedException('Some expected validation calls for values were not done.');
+        }
+    }
+
+    public function atPath(string $path): static
+    {
+        throw new \BadMethodCallException();
+    }
+
+    /**
+     * @return $this
+     */
+    public function doAtPath(string $path): static
+    {
+        Assert::assertFalse($this->expectNoValidate, 'No validation calls have been expected.');
+
+        if (!isset($this->expectedAtPath[++$this->atPathCalls])) {
+            throw new ExpectationFailedException(sprintf('Validation for property path "%s" was not expected.', $path));
+        }
+
+        $expectedPath = $this->expectedAtPath[$this->atPathCalls];
+        unset($this->expectedAtPath[$this->atPathCalls]);
+
+        Assert::assertSame($expectedPath, $path);
+
+        return $this;
+    }
+
+    public function validate(mixed $value, Constraint|array|null $constraints = null, string|GroupSequence|array|null $groups = null): static
+    {
+        throw new \BadMethodCallException();
+    }
+
+    /**
+     * @return $this
+     */
+    public function doValidate(mixed $value, Constraint|array|null $constraints = null, string|GroupSequence|array|null $groups = null): static
+    {
+        Assert::assertFalse($this->expectNoValidate, 'No validation calls have been expected.');
+
+        if (!isset($this->expectedValidate[++$this->validateCalls])) {
+            return $this;
+        }
+
+        [$expectedValue, $expectedGroup, $expectedConstraints, $violation] = $this->expectedValidate[$this->validateCalls];
+        unset($this->expectedValidate[$this->validateCalls]);
+
+        Assert::assertSame($expectedValue, $value);
+        $expectedConstraints($constraints);
+        Assert::assertSame($expectedGroup, $groups);
+
+        if (null !== $violation) {
+            $this->context->addViolation($violation->getMessage(), $violation->getParameters());
+        }
+
+        return $this;
+    }
+
+    public function validateProperty(object $object, string $propertyName, string|GroupSequence|array|null $groups = null): static
+    {
+        throw new \BadMethodCallException();
+    }
+
+    /**
+     * @return $this
+     */
+    public function doValidateProperty(object $object, string $propertyName, string|GroupSequence|array|null $groups = null): static
+    {
+        return $this;
+    }
+
+    public function validatePropertyValue(object|string $objectOrClass, string $propertyName, mixed $value, string|GroupSequence|array|null $groups = null): static
+    {
+        throw new \BadMethodCallException();
+    }
+
+    /**
+     * @return $this
+     */
+    public function doValidatePropertyValue(object|string $objectOrClass, string $propertyName, mixed $value, string|GroupSequence|array|null $groups = null): static
+    {
+        return $this;
+    }
+
+    public function getViolations(): ConstraintViolationListInterface
+    {
+        throw new \BadMethodCallException();
+    }
+
+    public function doGetViolations(): ConstraintViolationListInterface
+    {
+        return $this->context->getViolations();
+    }
+
+    public function expectNoValidate(): void
+    {
+        $this->expectNoValidate = true;
+    }
+
+    public function expectValidation(string $call, ?string $propertyPath, mixed $value, string|GroupSequence|array|null $group, callable $constraints, ?ConstraintViolationInterface $violation = null): void
+    {
+        if (null !== $propertyPath) {
+            $this->expectedAtPath[$call] = $propertyPath;
+        }
+
+        $this->expectedValidate[$call] = [$value, $group, $constraints, $violation];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Util/PropertyPath.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Util/PropertyPath.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Util/PropertyPath.php	(revision 8435)
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Util;
+
+/**
+ * Contains utility methods for dealing with property paths.
+ *
+ * For more extensive functionality, use Symfony's PropertyAccess component.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class PropertyPath
+{
+    /**
+     * Appends a path to a given property path.
+     *
+     * If the base path is empty, the appended path will be returned unchanged.
+     * If the base path is not empty, and the appended path starts with a
+     * squared opening bracket ("["), the concatenation of the two paths is
+     * returned. Otherwise, the concatenation of the two paths is returned,
+     * separated by a dot (".").
+     */
+    public static function append(string $basePath, string $subPath): string
+    {
+        if ('' !== $subPath) {
+            if ('[' === $subPath[0]) {
+                return $basePath.$subPath;
+            }
+
+            return '' !== $basePath ? $basePath.'.'.$subPath : $subPath;
+        }
+
+        return $basePath;
+    }
+
+    /**
+     * Not instantiable.
+     */
+    private function __construct()
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Validation.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Validation.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Validation.php	(revision 8435)
@@ -0,0 +1,88 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+use Symfony\Component\Validator\Exception\ValidationFailedException;
+use Symfony\Component\Validator\Validator\ValidatorInterface;
+
+/**
+ * Entry point for the Validator component.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+final class Validation
+{
+    /**
+     * Creates a callable chain of constraints.
+     */
+    public static function createCallable(Constraint|ValidatorInterface|null $constraintOrValidator = null, Constraint ...$constraints): callable
+    {
+        $validator = self::createIsValidCallable($constraintOrValidator, ...$constraints);
+
+        return static function ($value) use ($validator) {
+            if (!$validator($value, $violations)) {
+                throw new ValidationFailedException($value, $violations);
+            }
+
+            return $value;
+        };
+    }
+
+    /**
+     * Creates a callable that returns true/false instead of throwing validation exceptions.
+     *
+     * @return callable(mixed $value, ConstraintViolationListInterface &$violations = null): bool
+     */
+    public static function createIsValidCallable(Constraint|ValidatorInterface|null $constraintOrValidator = null, Constraint ...$constraints): callable
+    {
+        $validator = $constraintOrValidator;
+
+        if ($constraintOrValidator instanceof Constraint) {
+            $constraints = \func_get_args();
+            $validator = null;
+        }
+
+        $validator ??= self::createValidator();
+
+        return static function (mixed $value, ?ConstraintViolationListInterface &$violations = null) use ($constraints, $validator): bool {
+            $violations = $validator->validate($value, $constraints);
+
+            return 0 === $violations->count();
+        };
+    }
+
+    /**
+     * Creates a new validator.
+     *
+     * If you want to configure the validator, use
+     * {@link createValidatorBuilder()} instead.
+     */
+    public static function createValidator(): ValidatorInterface
+    {
+        return self::createValidatorBuilder()->getValidator();
+    }
+
+    /**
+     * Creates a configurable builder for validator objects.
+     */
+    public static function createValidatorBuilder(): ValidatorBuilder
+    {
+        return new ValidatorBuilder();
+    }
+
+    /**
+     * This class cannot be instantiated.
+     */
+    private function __construct()
+    {
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/ContextualValidatorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/ContextualValidatorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/ContextualValidatorInterface.php	(revision 8435)
@@ -0,0 +1,78 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Validator;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\GroupSequence;
+use Symfony\Component\Validator\ConstraintViolationListInterface;
+
+/**
+ * A validator in a specific execution context.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+interface ContextualValidatorInterface
+{
+    /**
+     * Appends the given path to the property path of the context.
+     *
+     * If called multiple times, the path will always be reset to the context's
+     * original path with the given path appended to it.
+     *
+     * @return $this
+     */
+    public function atPath(string $path): static;
+
+    /**
+     * Validates a value against a constraint or a list of constraints.
+     *
+     * If no constraint is passed, the constraint
+     * {@link \Symfony\Component\Validator\Constraints\Valid} is assumed.
+     *
+     * @param mixed                                                 $value       The value to validate
+     * @param Constraint|Constraint[]|null                          $constraints The constraint(s) to validate against
+     * @param string|GroupSequence|array<string|GroupSequence>|null $groups      The validation groups to validate. If none is given, "Default" is assumed
+     *
+     * @return $this
+     */
+    public function validate(mixed $value, Constraint|array|null $constraints = null, string|GroupSequence|array|null $groups = null): static;
+
+    /**
+     * Validates a property of an object against the constraints specified
+     * for this property.
+     *
+     * @param string                                                $propertyName The name of the validated property
+     * @param string|GroupSequence|array<string|GroupSequence>|null $groups       The validation groups to validate. If none is given, "Default" is assumed
+     *
+     * @return $this
+     */
+    public function validateProperty(object $object, string $propertyName, string|GroupSequence|array|null $groups = null): static;
+
+    /**
+     * Validates a value against the constraints specified for an object's
+     * property.
+     *
+     * @param object|string                                         $objectOrClass The object or its class name
+     * @param string                                                $propertyName  The name of the property
+     * @param mixed                                                 $value         The value to validate against the property's constraints
+     * @param string|GroupSequence|array<string|GroupSequence>|null $groups        The validation groups to validate. If none is given, "Default" is assumed
+     *
+     * @return $this
+     */
+    public function validatePropertyValue(object|string $objectOrClass, string $propertyName, mixed $value, string|GroupSequence|array|null $groups = null): static;
+
+    /**
+     * Returns the violations that have been generated so far in the context
+     * of the validator.
+     */
+    public function getViolations(): ConstraintViolationListInterface;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/LazyProperty.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/LazyProperty.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/LazyProperty.php	(revision 8435)
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Validator;
+
+/**
+ * A wrapper for a callable initializing a property from a getter.
+ *
+ * @internal
+ */
+class LazyProperty
+{
+    private \Closure $propertyValueCallback;
+
+    public function __construct(\Closure $propertyValueCallback)
+    {
+        $this->propertyValueCallback = $propertyValueCallback;
+    }
+
+    public function getPropertyValue(): mixed
+    {
+        return ($this->propertyValueCallback)();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/RecursiveContextualValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/RecursiveContextualValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/RecursiveContextualValidator.php	(revision 8435)
@@ -0,0 +1,775 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Validator;
+
+use Psr\Container\ContainerInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\Composite;
+use Symfony\Component\Validator\Constraints\Existence;
+use Symfony\Component\Validator\Constraints\GroupSequence;
+use Symfony\Component\Validator\Constraints\Valid;
+use Symfony\Component\Validator\ConstraintValidatorFactoryInterface;
+use Symfony\Component\Validator\ConstraintViolationListInterface;
+use Symfony\Component\Validator\Context\ExecutionContext;
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+use Symfony\Component\Validator\Exception\NoSuchMetadataException;
+use Symfony\Component\Validator\Exception\RuntimeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+use Symfony\Component\Validator\Exception\UnsupportedMetadataException;
+use Symfony\Component\Validator\Exception\ValidatorException;
+use Symfony\Component\Validator\Mapping\CascadingStrategy;
+use Symfony\Component\Validator\Mapping\ClassMetadataInterface;
+use Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface;
+use Symfony\Component\Validator\Mapping\GenericMetadata;
+use Symfony\Component\Validator\Mapping\GetterMetadata;
+use Symfony\Component\Validator\Mapping\MetadataInterface;
+use Symfony\Component\Validator\Mapping\PropertyMetadataInterface;
+use Symfony\Component\Validator\Mapping\TraversalStrategy;
+use Symfony\Component\Validator\ObjectInitializerInterface;
+use Symfony\Component\Validator\Util\PropertyPath;
+
+/**
+ * Recursive implementation of {@link ContextualValidatorInterface}.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class RecursiveContextualValidator implements ContextualValidatorInterface
+{
+    private ExecutionContextInterface $context;
+    private string $defaultPropertyPath;
+    private array $defaultGroups;
+    private MetadataFactoryInterface $metadataFactory;
+    private ConstraintValidatorFactoryInterface $validatorFactory;
+    private array $objectInitializers;
+    private ?ContainerInterface $groupProviderLocator;
+
+    /**
+     * Creates a validator for the given context.
+     *
+     * @param ObjectInitializerInterface[] $objectInitializers The object initializers
+     */
+    public function __construct(ExecutionContextInterface $context, MetadataFactoryInterface $metadataFactory, ConstraintValidatorFactoryInterface $validatorFactory, array $objectInitializers = [], ?ContainerInterface $groupProviderLocator = null)
+    {
+        $this->context = $context;
+        $this->defaultPropertyPath = $context->getPropertyPath();
+        $this->defaultGroups = [$context->getGroup() ?: Constraint::DEFAULT_GROUP];
+        $this->metadataFactory = $metadataFactory;
+        $this->validatorFactory = $validatorFactory;
+        $this->objectInitializers = $objectInitializers;
+        $this->groupProviderLocator = $groupProviderLocator;
+    }
+
+    public function atPath(string $path): static
+    {
+        $this->defaultPropertyPath = $this->context->getPropertyPath($path);
+
+        return $this;
+    }
+
+    public function validate(mixed $value, Constraint|array|null $constraints = null, string|GroupSequence|array|null $groups = null): static
+    {
+        $groups = $groups ? $this->normalizeGroups($groups) : $this->defaultGroups;
+
+        $previousValue = $this->context->getValue();
+        $previousObject = $this->context->getObject();
+        $previousMetadata = $this->context->getMetadata();
+        $previousPath = $this->context->getPropertyPath();
+        $previousGroup = $this->context->getGroup();
+        $previousConstraint = null;
+
+        if ($this->context instanceof ExecutionContext || method_exists($this->context, 'getConstraint')) {
+            $previousConstraint = $this->context->getConstraint();
+        }
+
+        // If explicit constraints are passed, validate the value against
+        // those constraints
+        if (null !== $constraints) {
+            // You can pass a single constraint or an array of constraints
+            // Make sure to deal with an array in the rest of the code
+            if (!\is_array($constraints)) {
+                $constraints = [$constraints];
+            }
+
+            $metadata = new GenericMetadata();
+            $metadata->addConstraints($constraints);
+
+            $this->validateGenericNode(
+                $value,
+                $previousObject,
+                \is_object($value) ? $this->generateCacheKey($value) : null,
+                $metadata,
+                $this->defaultPropertyPath,
+                $groups,
+                null,
+                TraversalStrategy::IMPLICIT,
+                $this->context
+            );
+
+            $this->context->setNode($previousValue, $previousObject, $previousMetadata, $previousPath);
+            $this->context->setGroup($previousGroup);
+
+            if (null !== $previousConstraint) {
+                $this->context->setConstraint($previousConstraint);
+            }
+
+            return $this;
+        }
+
+        // If an object is passed without explicit constraints, validate that
+        // object against the constraints defined for the object's class
+        if (\is_object($value)) {
+            $this->validateObject(
+                $value,
+                $this->defaultPropertyPath,
+                $groups,
+                TraversalStrategy::IMPLICIT,
+                $this->context
+            );
+
+            $this->context->setNode($previousValue, $previousObject, $previousMetadata, $previousPath);
+            $this->context->setGroup($previousGroup);
+
+            return $this;
+        }
+
+        // If an array is passed without explicit constraints, validate each
+        // object in the array
+        if (\is_array($value)) {
+            $this->validateEachObjectIn(
+                $value,
+                $this->defaultPropertyPath,
+                $groups,
+                $this->context
+            );
+
+            $this->context->setNode($previousValue, $previousObject, $previousMetadata, $previousPath);
+            $this->context->setGroup($previousGroup);
+
+            return $this;
+        }
+
+        throw new RuntimeException(sprintf('Cannot validate values of type "%s" automatically. Please provide a constraint.', get_debug_type($value)));
+    }
+
+    public function validateProperty(object $object, string $propertyName, string|GroupSequence|array|null $groups = null): static
+    {
+        $classMetadata = $this->metadataFactory->getMetadataFor($object);
+
+        if (!$classMetadata instanceof ClassMetadataInterface) {
+            throw new ValidatorException(sprintf('The metadata factory should return instances of "\Symfony\Component\Validator\Mapping\ClassMetadataInterface", got: "%s".', get_debug_type($classMetadata)));
+        }
+
+        $propertyMetadatas = $classMetadata->getPropertyMetadata($propertyName);
+        $groups = $groups ? $this->normalizeGroups($groups) : $this->defaultGroups;
+        $cacheKey = $this->generateCacheKey($object);
+        $propertyPath = PropertyPath::append($this->defaultPropertyPath, $propertyName);
+
+        $previousValue = $this->context->getValue();
+        $previousObject = $this->context->getObject();
+        $previousMetadata = $this->context->getMetadata();
+        $previousPath = $this->context->getPropertyPath();
+        $previousGroup = $this->context->getGroup();
+
+        foreach ($propertyMetadatas as $propertyMetadata) {
+            $propertyValue = $propertyMetadata->getPropertyValue($object);
+
+            $this->validateGenericNode(
+                $propertyValue,
+                $object,
+                $cacheKey.':'.$object::class.':'.$propertyName,
+                $propertyMetadata,
+                $propertyPath,
+                $groups,
+                null,
+                TraversalStrategy::IMPLICIT,
+                $this->context
+            );
+        }
+
+        $this->context->setNode($previousValue, $previousObject, $previousMetadata, $previousPath);
+        $this->context->setGroup($previousGroup);
+
+        return $this;
+    }
+
+    public function validatePropertyValue(object|string $objectOrClass, string $propertyName, mixed $value, string|GroupSequence|array|null $groups = null): static
+    {
+        $classMetadata = $this->metadataFactory->getMetadataFor($objectOrClass);
+
+        if (!$classMetadata instanceof ClassMetadataInterface) {
+            throw new ValidatorException(sprintf('The metadata factory should return instances of "\Symfony\Component\Validator\Mapping\ClassMetadataInterface", got: "%s".', get_debug_type($classMetadata)));
+        }
+
+        $propertyMetadatas = $classMetadata->getPropertyMetadata($propertyName);
+        $groups = $groups ? $this->normalizeGroups($groups) : $this->defaultGroups;
+
+        if (\is_object($objectOrClass)) {
+            $object = $objectOrClass;
+            $class = $object::class;
+            $cacheKey = $this->generateCacheKey($objectOrClass);
+            $propertyPath = PropertyPath::append($this->defaultPropertyPath, $propertyName);
+        } else {
+            // $objectOrClass contains a class name
+            $object = null;
+            $class = $objectOrClass;
+            $cacheKey = null;
+            $propertyPath = $this->defaultPropertyPath;
+        }
+
+        $previousValue = $this->context->getValue();
+        $previousObject = $this->context->getObject();
+        $previousMetadata = $this->context->getMetadata();
+        $previousPath = $this->context->getPropertyPath();
+        $previousGroup = $this->context->getGroup();
+
+        foreach ($propertyMetadatas as $propertyMetadata) {
+            $this->validateGenericNode(
+                $value,
+                $object,
+                $cacheKey.':'.$class.':'.$propertyName,
+                $propertyMetadata,
+                $propertyPath,
+                $groups,
+                null,
+                TraversalStrategy::IMPLICIT,
+                $this->context
+            );
+        }
+
+        $this->context->setNode($previousValue, $previousObject, $previousMetadata, $previousPath);
+        $this->context->setGroup($previousGroup);
+
+        return $this;
+    }
+
+    public function getViolations(): ConstraintViolationListInterface
+    {
+        return $this->context->getViolations();
+    }
+
+    /**
+     * Normalizes the given group or list of groups to an array.
+     *
+     * @param string|GroupSequence|array<string|GroupSequence> $groups The groups to normalize
+     *
+     * @return array<string|GroupSequence>
+     */
+    protected function normalizeGroups(string|GroupSequence|array $groups): array
+    {
+        if (\is_array($groups)) {
+            return $groups;
+        }
+
+        return [$groups];
+    }
+
+    /**
+     * Validates an object against the constraints defined for its class.
+     *
+     * If no metadata is available for the class, but the class is an instance
+     * of {@link \Traversable} and the selected traversal strategy allows
+     * traversal, the object will be iterated and each nested object will be
+     * validated instead.
+     *
+     * @throws NoSuchMetadataException      If the object has no associated metadata
+     *                                      and does not implement {@link \Traversable}
+     *                                      or if traversal is disabled via the
+     *                                      $traversalStrategy argument
+     * @throws UnsupportedMetadataException If the metadata returned by the
+     *                                      metadata factory does not implement
+     *                                      {@link ClassMetadataInterface}
+     */
+    private function validateObject(object $object, string $propertyPath, array $groups, int $traversalStrategy, ExecutionContextInterface $context): void
+    {
+        try {
+            $classMetadata = $this->metadataFactory->getMetadataFor($object);
+
+            if (!$classMetadata instanceof ClassMetadataInterface) {
+                throw new UnsupportedMetadataException(sprintf('The metadata factory should return instances of "Symfony\Component\Validator\Mapping\ClassMetadataInterface", got: "%s".', get_debug_type($classMetadata)));
+            }
+
+            $this->validateClassNode(
+                $object,
+                $this->generateCacheKey($object),
+                $classMetadata,
+                $propertyPath,
+                $groups,
+                null,
+                $traversalStrategy,
+                $context
+            );
+        } catch (NoSuchMetadataException $e) {
+            // Rethrow if not Traversable
+            if (!$object instanceof \Traversable) {
+                throw $e;
+            }
+
+            // Rethrow unless IMPLICIT or TRAVERSE
+            if (!($traversalStrategy & (TraversalStrategy::IMPLICIT | TraversalStrategy::TRAVERSE))) {
+                throw $e;
+            }
+
+            $this->validateEachObjectIn(
+                $object,
+                $propertyPath,
+                $groups,
+                $context
+            );
+        }
+    }
+
+    /**
+     * Validates each object in a collection against the constraints defined
+     * for their classes.
+     *
+     * Nested arrays are also iterated.
+     */
+    private function validateEachObjectIn(iterable $collection, string $propertyPath, array $groups, ExecutionContextInterface $context): void
+    {
+        foreach ($collection as $key => $value) {
+            if (\is_array($value)) {
+                // Also traverse nested arrays
+                $this->validateEachObjectIn(
+                    $value,
+                    $propertyPath.'['.$key.']',
+                    $groups,
+                    $context
+                );
+
+                continue;
+            }
+
+            // Scalar and null values in the collection are ignored
+            if (\is_object($value)) {
+                $this->validateObject(
+                    $value,
+                    $propertyPath.'['.$key.']',
+                    $groups,
+                    TraversalStrategy::IMPLICIT,
+                    $context
+                );
+            }
+        }
+    }
+
+    /**
+     * Validates a class node.
+     *
+     * A class node is a combination of an object with a {@link ClassMetadataInterface}
+     * instance. Each class node (conceptually) has zero or more succeeding
+     * property nodes:
+     *
+     *     (Article:class node)
+     *                \
+     *        ($title:property node)
+     *
+     * This method validates the passed objects against all constraints defined
+     * at class level. It furthermore triggers the validation of each of the
+     * class' properties against the constraints for that property.
+     *
+     * If the selected traversal strategy allows traversal, the object is
+     * iterated and each nested object is validated against its own constraints.
+     * The object is not traversed if traversal is disabled in the class
+     * metadata.
+     *
+     * If the passed groups contain the group "Default", the validator will
+     * check whether the "Default" group has been replaced by a group sequence
+     * in the class metadata. If this is the case, the group sequence is
+     * validated instead.
+     *
+     * @throws UnsupportedMetadataException  If a property metadata does not
+     *                                       implement {@link PropertyMetadataInterface}
+     * @throws ConstraintDefinitionException If traversal was enabled but the
+     *                                       object does not implement
+     *                                       {@link \Traversable}
+     *
+     * @see TraversalStrategy
+     */
+    private function validateClassNode(object $object, ?string $cacheKey, ClassMetadataInterface $metadata, string $propertyPath, array $groups, ?array $cascadedGroups, int $traversalStrategy, ExecutionContextInterface $context): void
+    {
+        $context->setNode($object, $object, $metadata, $propertyPath);
+
+        if (!$context->isObjectInitialized($cacheKey)) {
+            foreach ($this->objectInitializers as $initializer) {
+                $initializer->initialize($object);
+            }
+
+            $context->markObjectAsInitialized($cacheKey);
+        }
+
+        foreach ($groups as $key => $group) {
+            // If the "Default" group is replaced by a group sequence, remember
+            // to cascade the "Default" group when traversing the group
+            // sequence
+            $defaultOverridden = false;
+
+            // Use the object hash for group sequences
+            $groupHash = \is_object($group) ? $this->generateCacheKey($group, true) : $group;
+
+            if ($context->isGroupValidated($cacheKey, $groupHash)) {
+                // Skip this group when validating the properties and when
+                // traversing the object
+                unset($groups[$key]);
+
+                continue;
+            }
+
+            $context->markGroupAsValidated($cacheKey, $groupHash);
+
+            // Replace the "Default" group by the group sequence defined
+            // for the class, if applicable.
+            // This is done after checking the cache, so that
+            // spl_object_hash() isn't called for this sequence and
+            // "Default" is used instead in the cache. This is useful
+            // if the getters below return different group sequences in
+            // every call.
+            if (Constraint::DEFAULT_GROUP === $group) {
+                if ($metadata->hasGroupSequence()) {
+                    // The group sequence is statically defined for the class
+                    $group = $metadata->getGroupSequence();
+                    $defaultOverridden = true;
+                } elseif ($metadata->isGroupSequenceProvider()) {
+                    if (null !== $provider = $metadata->getGroupProvider()) {
+                        if (null === $this->groupProviderLocator) {
+                            throw new \LogicException('A group provider locator is required when using group provider.');
+                        }
+
+                        $group = $this->groupProviderLocator->get($provider)->getGroups($object);
+                    } else {
+                        // The group sequence is dynamically obtained from the validated
+                        // object
+                        /* @var \Symfony\Component\Validator\GroupSequenceProviderInterface $object */
+                        $group = $object->getGroupSequence();
+                    }
+                    $defaultOverridden = true;
+
+                    if (!$group instanceof GroupSequence) {
+                        $group = new GroupSequence($group);
+                    }
+                }
+            }
+
+            // If the groups (=[<G1,G2>,G3,G4]) contain a group sequence
+            // (=<G1,G2>), then call validateClassNode() with each entry of the
+            // group sequence and abort if necessary (G1, G2)
+            if ($group instanceof GroupSequence) {
+                $this->stepThroughGroupSequence(
+                    $object,
+                    $object,
+                    $cacheKey,
+                    $metadata,
+                    $propertyPath,
+                    $traversalStrategy,
+                    $group,
+                    $defaultOverridden ? Constraint::DEFAULT_GROUP : null,
+                    $context
+                );
+
+                // Skip the group sequence when validating properties, because
+                // stepThroughGroupSequence() already validates the properties
+                unset($groups[$key]);
+
+                continue;
+            }
+
+            $this->validateInGroup($object, $cacheKey, $metadata, $group, $context);
+        }
+
+        // If no more groups should be validated for the property nodes,
+        // we can safely quit
+        if (0 === \count($groups)) {
+            return;
+        }
+
+        // Validate all properties against their constraints
+        foreach ($metadata->getConstrainedProperties() as $propertyName) {
+            // If constraints are defined both on the getter of a property as
+            // well as on the property itself, then getPropertyMetadata()
+            // returns two metadata objects, not just one
+            foreach ($metadata->getPropertyMetadata($propertyName) as $propertyMetadata) {
+                if (!$propertyMetadata instanceof PropertyMetadataInterface) {
+                    throw new UnsupportedMetadataException(sprintf('The property metadata instances should implement "Symfony\Component\Validator\Mapping\PropertyMetadataInterface", got: "%s".', get_debug_type($propertyMetadata)));
+                }
+
+                if ($propertyMetadata instanceof GetterMetadata) {
+                    $propertyValue = new LazyProperty(static fn () => $propertyMetadata->getPropertyValue($object));
+                } else {
+                    $propertyValue = $propertyMetadata->getPropertyValue($object);
+                }
+
+                $this->validateGenericNode(
+                    $propertyValue,
+                    $object,
+                    $cacheKey.':'.$object::class.':'.$propertyName,
+                    $propertyMetadata,
+                    PropertyPath::append($propertyPath, $propertyName),
+                    $groups,
+                    $cascadedGroups,
+                    TraversalStrategy::IMPLICIT,
+                    $context
+                );
+            }
+        }
+
+        // If no specific traversal strategy was requested when this method
+        // was called, use the traversal strategy of the class' metadata
+        if ($traversalStrategy & TraversalStrategy::IMPLICIT) {
+            $traversalStrategy = $metadata->getTraversalStrategy();
+        }
+
+        // Traverse only if IMPLICIT or TRAVERSE
+        if (!($traversalStrategy & (TraversalStrategy::IMPLICIT | TraversalStrategy::TRAVERSE))) {
+            return;
+        }
+
+        // If IMPLICIT, stop unless we deal with a Traversable
+        if ($traversalStrategy & TraversalStrategy::IMPLICIT && !$object instanceof \Traversable) {
+            return;
+        }
+
+        // If TRAVERSE, fail if we have no Traversable
+        if (!$object instanceof \Traversable) {
+            throw new ConstraintDefinitionException(sprintf('Traversal was enabled for "%s", but this class does not implement "\Traversable".', get_debug_type($object)));
+        }
+
+        $this->validateEachObjectIn(
+            $object,
+            $propertyPath,
+            $groups,
+            $context
+        );
+    }
+
+    /**
+     * Validates a node that is not a class node.
+     *
+     * Currently, two such node types exist:
+     *
+     *  - property nodes, which consist of the value of an object's
+     *    property together with a {@link PropertyMetadataInterface} instance
+     *  - generic nodes, which consist of a value and some arbitrary
+     *    constraints defined in a {@link MetadataInterface} container
+     *
+     * In both cases, the value is validated against all constraints defined
+     * in the passed metadata object. Then, if the value is an instance of
+     * {@link \Traversable} and the selected traversal strategy permits it,
+     * the value is traversed and each nested object validated against its own
+     * constraints. If the value is an array, it is traversed regardless of
+     * the given strategy.
+     *
+     * @see TraversalStrategy
+     */
+    private function validateGenericNode(mixed $value, ?object $object, ?string $cacheKey, ?MetadataInterface $metadata, string $propertyPath, array $groups, ?array $cascadedGroups, int $traversalStrategy, ExecutionContextInterface $context): void
+    {
+        $context->setNode($value, $object, $metadata, $propertyPath);
+
+        foreach ($groups as $key => $group) {
+            if ($group instanceof GroupSequence) {
+                $this->stepThroughGroupSequence(
+                    $value,
+                    $object,
+                    $cacheKey,
+                    $metadata,
+                    $propertyPath,
+                    $traversalStrategy,
+                    $group,
+                    null,
+                    $context
+                );
+
+                // Skip the group sequence when cascading, as the cascading
+                // logic is already done in stepThroughGroupSequence()
+                unset($groups[$key]);
+
+                continue;
+            }
+
+            $this->validateInGroup($value, $cacheKey, $metadata, $group, $context);
+        }
+
+        if (0 === \count($groups)) {
+            return;
+        }
+
+        if (null === $value) {
+            return;
+        }
+
+        $cascadingStrategy = $metadata->getCascadingStrategy();
+
+        // Quit unless we cascade
+        if (!($cascadingStrategy & CascadingStrategy::CASCADE)) {
+            return;
+        }
+
+        // If no specific traversal strategy was requested when this method
+        // was called, use the traversal strategy of the node's metadata
+        if ($traversalStrategy & TraversalStrategy::IMPLICIT) {
+            $traversalStrategy = $metadata->getTraversalStrategy();
+        }
+
+        // The $cascadedGroups property is set, if the "Default" group is
+        // overridden by a group sequence
+        // See validateClassNode()
+        $cascadedGroups = null !== $cascadedGroups && \count($cascadedGroups) > 0 ? $cascadedGroups : $groups;
+
+        if ($value instanceof LazyProperty) {
+            $value = $value->getPropertyValue();
+
+            if (null === $value) {
+                return;
+            }
+        }
+
+        if (\is_array($value)) {
+            // Arrays are always traversed, independent of the specified
+            // traversal strategy
+            $this->validateEachObjectIn(
+                $value,
+                $propertyPath,
+                $cascadedGroups,
+                $context
+            );
+
+            return;
+        }
+
+        if (!\is_object($value)) {
+            throw new NoSuchMetadataException(sprintf('Cannot create metadata for non-objects. Got: "%s".', \gettype($value)));
+        }
+
+        $this->validateObject(
+            $value,
+            $propertyPath,
+            $cascadedGroups,
+            $traversalStrategy,
+            $context
+        );
+
+        // Currently, the traversal strategy can only be TRAVERSE for a
+        // generic node if the cascading strategy is CASCADE. Thus, traversable
+        // objects will always be handled within validateObject() and there's
+        // nothing more to do here.
+
+        // see GenericMetadata::addConstraint()
+    }
+
+    /**
+     * Sequentially validates a node's value in each group of a group sequence.
+     *
+     * If any of the constraints generates a violation, subsequent groups in the
+     * group sequence are skipped.
+     */
+    private function stepThroughGroupSequence(mixed $value, ?object $object, ?string $cacheKey, ?MetadataInterface $metadata, string $propertyPath, int $traversalStrategy, GroupSequence $groupSequence, ?string $cascadedGroup, ExecutionContextInterface $context): void
+    {
+        $violationCount = \count($context->getViolations());
+        $cascadedGroups = $cascadedGroup ? [$cascadedGroup] : null;
+
+        foreach ($groupSequence->groups as $groupInSequence) {
+            $groups = (array) $groupInSequence;
+
+            if ($metadata instanceof ClassMetadataInterface) {
+                $this->validateClassNode(
+                    $value,
+                    $cacheKey,
+                    $metadata,
+                    $propertyPath,
+                    $groups,
+                    $cascadedGroups,
+                    $traversalStrategy,
+                    $context
+                );
+            } else {
+                $this->validateGenericNode(
+                    $value,
+                    $object,
+                    $cacheKey,
+                    $metadata,
+                    $propertyPath,
+                    $groups,
+                    $cascadedGroups,
+                    $traversalStrategy,
+                    $context
+                );
+            }
+
+            // Abort sequence validation if a violation was generated
+            if (\count($context->getViolations()) > $violationCount) {
+                break;
+            }
+        }
+    }
+
+    /**
+     * Validates a node's value against all constraints in the given group.
+     */
+    private function validateInGroup(mixed $value, ?string $cacheKey, MetadataInterface $metadata, string $group, ExecutionContextInterface $context): void
+    {
+        $context->setGroup($group);
+
+        foreach ($metadata->findConstraints($group) as $constraint) {
+            if ($constraint instanceof Existence) {
+                continue;
+            }
+
+            // Prevent duplicate validation of constraints, in the case
+            // that constraints belong to multiple validated groups
+            if (null !== $cacheKey) {
+                $constraintHash = $this->generateCacheKey($constraint, true);
+                // instanceof Valid: In case of using a Valid constraint with many groups
+                // it makes a reference object get validated by each group
+                if ($constraint instanceof Composite || $constraint instanceof Valid) {
+                    $constraintHash .= $group;
+                }
+
+                if ($context->isConstraintValidated($cacheKey, $constraintHash)) {
+                    continue;
+                }
+
+                $context->markConstraintAsValidated($cacheKey, $constraintHash);
+            }
+
+            $context->setConstraint($constraint);
+
+            $validator = $this->validatorFactory->getInstance($constraint);
+            $validator->initialize($context);
+
+            if ($value instanceof LazyProperty) {
+                $value = $value->getPropertyValue();
+            }
+
+            try {
+                $validator->validate($value, $constraint);
+            } catch (UnexpectedValueException $e) {
+                $context->buildViolation('This value should be of type {{ type }}.')
+                    ->setParameter('{{ type }}', $e->getExpectedType())
+                    ->addViolation();
+            }
+        }
+    }
+
+    private function generateCacheKey(object $object, bool $dependsOnPropertyPath = false): string
+    {
+        if ($this->context instanceof ExecutionContext) {
+            $cacheKey = $this->context->generateCacheKey($object);
+        } else {
+            $cacheKey = spl_object_hash($object);
+        }
+
+        if ($dependsOnPropertyPath) {
+            $cacheKey .= $this->context->getPropertyPath();
+        }
+
+        return $cacheKey;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/RecursiveValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/RecursiveValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/RecursiveValidator.php	(revision 8435)
@@ -0,0 +1,105 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Validator;
+
+use Psr\Container\ContainerInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\GroupSequence;
+use Symfony\Component\Validator\ConstraintValidatorFactoryInterface;
+use Symfony\Component\Validator\ConstraintViolationListInterface;
+use Symfony\Component\Validator\Context\ExecutionContextFactoryInterface;
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface;
+use Symfony\Component\Validator\Mapping\MetadataInterface;
+use Symfony\Component\Validator\ObjectInitializerInterface;
+
+/**
+ * Recursive implementation of {@link ValidatorInterface}.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class RecursiveValidator implements ValidatorInterface
+{
+    protected $contextFactory;
+    protected $metadataFactory;
+    protected $validatorFactory;
+    protected $objectInitializers;
+    protected ?ContainerInterface $groupProviderLocator;
+
+    /**
+     * Creates a new validator.
+     *
+     * @param ObjectInitializerInterface[] $objectInitializers The object initializers
+     */
+    public function __construct(ExecutionContextFactoryInterface $contextFactory, MetadataFactoryInterface $metadataFactory, ConstraintValidatorFactoryInterface $validatorFactory, array $objectInitializers = [], ?ContainerInterface $groupProviderLocator = null)
+    {
+        $this->contextFactory = $contextFactory;
+        $this->metadataFactory = $metadataFactory;
+        $this->validatorFactory = $validatorFactory;
+        $this->objectInitializers = $objectInitializers;
+        $this->groupProviderLocator = $groupProviderLocator;
+    }
+
+    public function startContext(mixed $root = null): ContextualValidatorInterface
+    {
+        return new RecursiveContextualValidator(
+            $this->contextFactory->createContext($this, $root),
+            $this->metadataFactory,
+            $this->validatorFactory,
+            $this->objectInitializers,
+            $this->groupProviderLocator,
+        );
+    }
+
+    public function inContext(ExecutionContextInterface $context): ContextualValidatorInterface
+    {
+        return new RecursiveContextualValidator(
+            $context,
+            $this->metadataFactory,
+            $this->validatorFactory,
+            $this->objectInitializers,
+            $this->groupProviderLocator,
+        );
+    }
+
+    public function getMetadataFor(mixed $object): MetadataInterface
+    {
+        return $this->metadataFactory->getMetadataFor($object);
+    }
+
+    public function hasMetadataFor(mixed $object): bool
+    {
+        return $this->metadataFactory->hasMetadataFor($object);
+    }
+
+    public function validate(mixed $value, Constraint|array|null $constraints = null, string|GroupSequence|array|null $groups = null): ConstraintViolationListInterface
+    {
+        return $this->startContext($value)
+            ->validate($value, $constraints, $groups)
+            ->getViolations();
+    }
+
+    public function validateProperty(object $object, string $propertyName, string|GroupSequence|array|null $groups = null): ConstraintViolationListInterface
+    {
+        return $this->startContext($object)
+            ->validateProperty($object, $propertyName, $groups)
+            ->getViolations();
+    }
+
+    public function validatePropertyValue(object|string $objectOrClass, string $propertyName, mixed $value, string|GroupSequence|array|null $groups = null): ConstraintViolationListInterface
+    {
+        // If a class name is passed, take $value as root
+        return $this->startContext(\is_object($objectOrClass) ? $objectOrClass : $value)
+            ->validatePropertyValue($objectOrClass, $propertyName, $value, $groups)
+            ->getViolations();
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/TraceableValidator.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/TraceableValidator.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/TraceableValidator.php	(revision 8435)
@@ -0,0 +1,119 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Validator;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\GroupSequence;
+use Symfony\Component\Validator\ConstraintViolationListInterface;
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Mapping\MetadataInterface;
+use Symfony\Contracts\Service\ResetInterface;
+
+/**
+ * Collects some data about validator calls.
+ *
+ * @author Maxime Steinhausser <maxime.steinhausser@gmail.com>
+ */
+class TraceableValidator implements ValidatorInterface, ResetInterface
+{
+    private ValidatorInterface $validator;
+    private array $collectedData = [];
+
+    public function __construct(ValidatorInterface $validator)
+    {
+        $this->validator = $validator;
+    }
+
+    public function getCollectedData(): array
+    {
+        return $this->collectedData;
+    }
+
+    /**
+     * @return void
+     */
+    public function reset()
+    {
+        $this->collectedData = [];
+    }
+
+    public function getMetadataFor(mixed $value): MetadataInterface
+    {
+        return $this->validator->getMetadataFor($value);
+    }
+
+    public function hasMetadataFor(mixed $value): bool
+    {
+        return $this->validator->hasMetadataFor($value);
+    }
+
+    public function validate(mixed $value, Constraint|array|null $constraints = null, string|GroupSequence|array|null $groups = null): ConstraintViolationListInterface
+    {
+        $violations = $this->validator->validate($value, $constraints, $groups);
+
+        $trace = debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS, 7);
+
+        $file = $trace[0]['file'];
+        $line = $trace[0]['line'];
+
+        for ($i = 1; $i < 7; ++$i) {
+            if (isset($trace[$i]['class'], $trace[$i]['function'])
+                && 'validate' === $trace[$i]['function']
+                && is_a($trace[$i]['class'], ValidatorInterface::class, true)
+            ) {
+                $file = $trace[$i]['file'];
+                $line = $trace[$i]['line'];
+
+                while (++$i < 7) {
+                    if (isset($trace[$i]['function'], $trace[$i]['file']) && empty($trace[$i]['class']) && !str_starts_with($trace[$i]['function'], 'call_user_func')) {
+                        $file = $trace[$i]['file'];
+                        $line = $trace[$i]['line'];
+
+                        break;
+                    }
+                }
+                break;
+            }
+        }
+
+        $name = str_replace('\\', '/', $file);
+        $name = substr($name, strrpos($name, '/') + 1);
+
+        $this->collectedData[] = [
+            'caller' => compact('name', 'file', 'line'),
+            'context' => compact('value', 'constraints', 'groups'),
+            'violations' => iterator_to_array($violations),
+        ];
+
+        return $violations;
+    }
+
+    public function validateProperty(object $object, string $propertyName, string|GroupSequence|array|null $groups = null): ConstraintViolationListInterface
+    {
+        return $this->validator->validateProperty($object, $propertyName, $groups);
+    }
+
+    public function validatePropertyValue(object|string $objectOrClass, string $propertyName, mixed $value, string|GroupSequence|array|null $groups = null): ConstraintViolationListInterface
+    {
+        return $this->validator->validatePropertyValue($objectOrClass, $propertyName, $value, $groups);
+    }
+
+    public function startContext(): ContextualValidatorInterface
+    {
+        return $this->validator->startContext();
+    }
+
+    public function inContext(ExecutionContextInterface $context): ContextualValidatorInterface
+    {
+        return $this->validator->inContext($context);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/ValidatorInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/ValidatorInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Validator/ValidatorInterface.php	(revision 8435)
@@ -0,0 +1,86 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Validator;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\GroupSequence;
+use Symfony\Component\Validator\ConstraintViolationListInterface;
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+use Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface;
+
+/**
+ * Validates PHP values against constraints.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+interface ValidatorInterface extends MetadataFactoryInterface
+{
+    /**
+     * Validates a value against a constraint or a list of constraints.
+     *
+     * If no constraint is passed, the constraint
+     * {@link \Symfony\Component\Validator\Constraints\Valid} is assumed.
+     *
+     * @param Constraint|Constraint[]                               $constraints The constraint(s) to validate against
+     * @param string|GroupSequence|array<string|GroupSequence>|null $groups      The validation groups to validate. If none is given, "Default" is assumed
+     *
+     * @return ConstraintViolationListInterface A list of constraint violations
+     *                                          If the list is empty, validation
+     *                                          succeeded
+     */
+    public function validate(mixed $value, Constraint|array|null $constraints = null, string|GroupSequence|array|null $groups = null): ConstraintViolationListInterface;
+
+    /**
+     * Validates a property of an object against the constraints specified
+     * for this property.
+     *
+     * @param string                                                $propertyName The name of the validated property
+     * @param string|GroupSequence|array<string|GroupSequence>|null $groups       The validation groups to validate. If none is given, "Default" is assumed
+     *
+     * @return ConstraintViolationListInterface A list of constraint violations
+     *                                          If the list is empty, validation
+     *                                          succeeded
+     */
+    public function validateProperty(object $object, string $propertyName, string|GroupSequence|array|null $groups = null): ConstraintViolationListInterface;
+
+    /**
+     * Validates a value against the constraints specified for an object's
+     * property.
+     *
+     * @param object|string                                         $objectOrClass The object or its class name
+     * @param string                                                $propertyName  The name of the property
+     * @param mixed                                                 $value         The value to validate against the property's constraints
+     * @param string|GroupSequence|array<string|GroupSequence>|null $groups        The validation groups to validate. If none is given, "Default" is assumed
+     *
+     * @return ConstraintViolationListInterface A list of constraint violations
+     *                                          If the list is empty, validation
+     *                                          succeeded
+     */
+    public function validatePropertyValue(object|string $objectOrClass, string $propertyName, mixed $value, string|GroupSequence|array|null $groups = null): ConstraintViolationListInterface;
+
+    /**
+     * Starts a new validation context and returns a validator for that context.
+     *
+     * The returned validator collects all violations generated within its
+     * context. You can access these violations with the
+     * {@link ContextualValidatorInterface::getViolations()} method.
+     */
+    public function startContext(): ContextualValidatorInterface;
+
+    /**
+     * Returns a validator in the given execution context.
+     *
+     * The returned validator adds all generated violations to the given
+     * context.
+     */
+    public function inContext(ExecutionContextInterface $context): ContextualValidatorInterface;
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/ValidatorBuilder.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/ValidatorBuilder.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/ValidatorBuilder.php	(revision 8435)
@@ -0,0 +1,444 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator;
+
+use Doctrine\Common\Annotations\AnnotationReader;
+use Doctrine\Common\Annotations\PsrCachedReader;
+use Doctrine\Common\Annotations\Reader;
+use Psr\Cache\CacheItemPoolInterface;
+use Psr\Container\ContainerInterface;
+use Symfony\Component\Cache\Adapter\ArrayAdapter;
+use Symfony\Component\Validator\Context\ExecutionContextFactory;
+use Symfony\Component\Validator\Exception\LogicException;
+use Symfony\Component\Validator\Exception\ValidatorException;
+use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory;
+use Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface;
+use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
+use Symfony\Component\Validator\Mapping\Loader\AttributeLoader;
+use Symfony\Component\Validator\Mapping\Loader\LoaderChain;
+use Symfony\Component\Validator\Mapping\Loader\LoaderInterface;
+use Symfony\Component\Validator\Mapping\Loader\StaticMethodLoader;
+use Symfony\Component\Validator\Mapping\Loader\XmlFileLoader;
+use Symfony\Component\Validator\Mapping\Loader\YamlFileLoader;
+use Symfony\Component\Validator\Validator\RecursiveValidator;
+use Symfony\Component\Validator\Validator\ValidatorInterface;
+use Symfony\Contracts\Translation\LocaleAwareInterface;
+use Symfony\Contracts\Translation\TranslatorInterface;
+use Symfony\Contracts\Translation\TranslatorTrait;
+
+// Help opcache.preload discover always-needed symbols
+class_exists(TranslatorInterface::class);
+class_exists(LocaleAwareInterface::class);
+class_exists(TranslatorTrait::class);
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class ValidatorBuilder
+{
+    private array $initializers = [];
+    private array $loaders = [];
+    private array $xmlMappings = [];
+    private array $yamlMappings = [];
+    private array $methodMappings = [];
+    private ?Reader $annotationReader = null;
+    private bool $enableAttributeMapping = false;
+    private ?MetadataFactoryInterface $metadataFactory = null;
+    private ConstraintValidatorFactoryInterface $validatorFactory;
+    private ?ContainerInterface $groupProviderLocator = null;
+    private ?CacheItemPoolInterface $mappingCache = null;
+    private ?TranslatorInterface $translator = null;
+    private ?string $translationDomain = null;
+
+    /**
+     * Adds an object initializer to the validator.
+     *
+     * @return $this
+     */
+    public function addObjectInitializer(ObjectInitializerInterface $initializer): static
+    {
+        $this->initializers[] = $initializer;
+
+        return $this;
+    }
+
+    /**
+     * Adds a list of object initializers to the validator.
+     *
+     * @param ObjectInitializerInterface[] $initializers
+     *
+     * @return $this
+     */
+    public function addObjectInitializers(array $initializers): static
+    {
+        $this->initializers = array_merge($this->initializers, $initializers);
+
+        return $this;
+    }
+
+    /**
+     * Adds an XML constraint mapping file to the validator.
+     *
+     * @return $this
+     */
+    public function addXmlMapping(string $path): static
+    {
+        if (null !== $this->metadataFactory) {
+            throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.');
+        }
+
+        $this->xmlMappings[] = $path;
+
+        return $this;
+    }
+
+    /**
+     * Adds a list of XML constraint mapping files to the validator.
+     *
+     * @param string[] $paths The paths to the mapping files
+     *
+     * @return $this
+     */
+    public function addXmlMappings(array $paths): static
+    {
+        if (null !== $this->metadataFactory) {
+            throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.');
+        }
+
+        $this->xmlMappings = array_merge($this->xmlMappings, $paths);
+
+        return $this;
+    }
+
+    /**
+     * Adds a YAML constraint mapping file to the validator.
+     *
+     * @param string $path The path to the mapping file
+     *
+     * @return $this
+     */
+    public function addYamlMapping(string $path): static
+    {
+        if (null !== $this->metadataFactory) {
+            throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.');
+        }
+
+        $this->yamlMappings[] = $path;
+
+        return $this;
+    }
+
+    /**
+     * Adds a list of YAML constraint mappings file to the validator.
+     *
+     * @param string[] $paths The paths to the mapping files
+     *
+     * @return $this
+     */
+    public function addYamlMappings(array $paths): static
+    {
+        if (null !== $this->metadataFactory) {
+            throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.');
+        }
+
+        $this->yamlMappings = array_merge($this->yamlMappings, $paths);
+
+        return $this;
+    }
+
+    /**
+     * Enables constraint mapping using the given static method.
+     *
+     * @return $this
+     */
+    public function addMethodMapping(string $methodName): static
+    {
+        if (null !== $this->metadataFactory) {
+            throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.');
+        }
+
+        $this->methodMappings[] = $methodName;
+
+        return $this;
+    }
+
+    /**
+     * Enables constraint mapping using the given static methods.
+     *
+     * @param string[] $methodNames The names of the methods
+     *
+     * @return $this
+     */
+    public function addMethodMappings(array $methodNames): static
+    {
+        if (null !== $this->metadataFactory) {
+            throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.');
+        }
+
+        $this->methodMappings = array_merge($this->methodMappings, $methodNames);
+
+        return $this;
+    }
+
+    /**
+     * @deprecated since Symfony 6.4, use "enableAttributeMapping()" instead.
+     *
+     * @return $this
+     */
+    public function enableAnnotationMapping(): static
+    {
+        trigger_deprecation('symfony/validator', '6.4', 'Method "%s()" is deprecated, use "enableAttributeMapping()" instead.', __METHOD__);
+
+        return $this->enableAttributeMapping();
+    }
+
+    /**
+     * Enables attribute-based constraint mapping.
+     *
+     * @return $this
+     */
+    public function enableAttributeMapping(): static
+    {
+        if (null !== $this->metadataFactory) {
+            throw new ValidatorException('You cannot enable attribute mapping after setting a custom metadata factory. Configure your metadata factory instead.');
+        }
+
+        $this->enableAttributeMapping = true;
+
+        return $this;
+    }
+
+    /**
+     * @deprecated since Symfony 6.4, use "disableAttributeMapping()" instead
+     *
+     * @return $this
+     */
+    public function disableAnnotationMapping(): static
+    {
+        trigger_deprecation('symfony/validator', '6.4', 'Method "%s()" is deprecated, use "disableAttributeMapping()" instead.', __METHOD__);
+
+        return $this->disableAttributeMapping();
+    }
+
+    /**
+     * Disables attribute-based constraint mapping.
+     *
+     * @return $this
+     */
+    public function disableAttributeMapping(): static
+    {
+        $this->annotationReader = null;
+        $this->enableAttributeMapping = false;
+
+        return $this;
+    }
+
+    /**
+     * @deprecated since Symfony 6.4 without replacement
+     *
+     * @return $this
+     */
+    public function setDoctrineAnnotationReader(?Reader $reader): static
+    {
+        trigger_deprecation('symfony/validator', '6.4', 'Method "%s()" is deprecated without replacement.', __METHOD__);
+
+        $this->annotationReader = $reader;
+
+        return $this;
+    }
+
+    /**
+     * @deprecated since Symfony 6.4 without replacement
+     *
+     * @return $this
+     */
+    public function addDefaultDoctrineAnnotationReader(): static
+    {
+        trigger_deprecation('symfony/validator', '6.4', 'Method "%s()" is deprecated without replacement.', __METHOD__);
+
+        $this->annotationReader = $this->createAnnotationReader();
+
+        return $this;
+    }
+
+    /**
+     * Sets the class metadata factory used by the validator.
+     *
+     * @return $this
+     */
+    public function setMetadataFactory(MetadataFactoryInterface $metadataFactory): static
+    {
+        if (\count($this->xmlMappings) > 0 || \count($this->yamlMappings) > 0 || \count($this->methodMappings) > 0 || $this->enableAttributeMapping) {
+            throw new ValidatorException('You cannot set a custom metadata factory after adding custom mappings. You should do either of both.');
+        }
+
+        $this->metadataFactory = $metadataFactory;
+
+        return $this;
+    }
+
+    /**
+     * Sets the cache for caching class metadata.
+     *
+     * @return $this
+     */
+    public function setMappingCache(CacheItemPoolInterface $cache): static
+    {
+        if (null !== $this->metadataFactory) {
+            throw new ValidatorException('You cannot set a custom mapping cache after setting a custom metadata factory. Configure your metadata factory instead.');
+        }
+
+        $this->mappingCache = $cache;
+
+        return $this;
+    }
+
+    /**
+     * Sets the constraint validator factory used by the validator.
+     *
+     * @return $this
+     */
+    public function setConstraintValidatorFactory(ConstraintValidatorFactoryInterface $validatorFactory): static
+    {
+        $this->validatorFactory = $validatorFactory;
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function setGroupProviderLocator(ContainerInterface $groupProviderLocator): static
+    {
+        $this->groupProviderLocator = $groupProviderLocator;
+
+        return $this;
+    }
+
+    /**
+     * Sets the translator used for translating violation messages.
+     *
+     * @return $this
+     */
+    public function setTranslator(TranslatorInterface $translator): static
+    {
+        $this->translator = $translator;
+
+        return $this;
+    }
+
+    /**
+     * Sets the default translation domain of violation messages.
+     *
+     * The same message can have different translations in different domains.
+     * Pass the domain that is used for violation messages by default to this
+     * method.
+     *
+     * @return $this
+     */
+    public function setTranslationDomain(?string $translationDomain): static
+    {
+        $this->translationDomain = $translationDomain;
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function addLoader(LoaderInterface $loader): static
+    {
+        $this->loaders[] = $loader;
+
+        return $this;
+    }
+
+    /**
+     * @return LoaderInterface[]
+     */
+    public function getLoaders(): array
+    {
+        $loaders = [];
+
+        foreach ($this->xmlMappings as $xmlMapping) {
+            $loaders[] = new XmlFileLoader($xmlMapping);
+        }
+
+        foreach ($this->yamlMappings as $yamlMappings) {
+            $loaders[] = new YamlFileLoader($yamlMappings);
+        }
+
+        foreach ($this->methodMappings as $methodName) {
+            $loaders[] = new StaticMethodLoader($methodName);
+        }
+
+        if ($this->enableAttributeMapping && $this->annotationReader) {
+            $loaders[] = new AnnotationLoader($this->annotationReader);
+        } elseif ($this->enableAttributeMapping) {
+            $loaders[] = new AttributeLoader();
+        }
+
+        return array_merge($loaders, $this->loaders);
+    }
+
+    /**
+     * Builds and returns a new validator object.
+     */
+    public function getValidator(): ValidatorInterface
+    {
+        $metadataFactory = $this->metadataFactory;
+
+        if (!$metadataFactory) {
+            $loaders = $this->getLoaders();
+            $loader = null;
+
+            if (\count($loaders) > 1) {
+                $loader = new LoaderChain($loaders);
+            } elseif (1 === \count($loaders)) {
+                $loader = $loaders[0];
+            }
+
+            $metadataFactory = new LazyLoadingMetadataFactory($loader, $this->mappingCache);
+        }
+
+        $validatorFactory = $this->validatorFactory ?? new ConstraintValidatorFactory();
+        $translator = $this->translator;
+
+        if (null === $translator) {
+            $translator = new class() implements TranslatorInterface, LocaleAwareInterface {
+                use TranslatorTrait;
+            };
+            // Force the locale to be 'en' when no translator is provided rather than relying on the Intl default locale
+            // This avoids depending on Intl or the stub implementation being available. It also ensures that Symfony
+            // validation messages are pluralized properly even when the default locale gets changed because they are in
+            // English.
+            $translator->setLocale('en');
+        }
+
+        $contextFactory = new ExecutionContextFactory($translator, $this->translationDomain);
+
+        return new RecursiveValidator($contextFactory, $metadataFactory, $validatorFactory, $this->initializers, $this->groupProviderLocator);
+    }
+
+    private function createAnnotationReader(): Reader
+    {
+        if (!class_exists(AnnotationReader::class)) {
+            throw new LogicException('Enabling annotation based constraint mapping requires the packages doctrine/annotations and symfony/cache to be installed.');
+        }
+
+        if (class_exists(ArrayAdapter::class)) {
+            return new PsrCachedReader(new AnnotationReader(), new ArrayAdapter());
+        }
+
+        throw new LogicException('Enabling annotation based constraint mapping requires the packages doctrine/annotations and symfony/cache to be installed.');
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Violation/ConstraintViolationBuilder.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Violation/ConstraintViolationBuilder.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Violation/ConstraintViolationBuilder.php	(revision 8435)
@@ -0,0 +1,147 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Violation;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintViolation;
+use Symfony\Component\Validator\ConstraintViolationList;
+use Symfony\Component\Validator\Util\PropertyPath;
+use Symfony\Contracts\Translation\TranslatorInterface;
+
+/**
+ * Default implementation of {@link ConstraintViolationBuilderInterface}.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @internal since version 2.5. Code against ConstraintViolationBuilderInterface instead.
+ */
+class ConstraintViolationBuilder implements ConstraintViolationBuilderInterface
+{
+    private ConstraintViolationList $violations;
+    private string|\Stringable $message;
+    private array $parameters;
+    private mixed $root;
+    private mixed $invalidValue;
+    private string $propertyPath;
+    private TranslatorInterface $translator;
+    private string|false|null $translationDomain;
+    private ?int $plural = null;
+    private ?Constraint $constraint;
+    private ?string $code = null;
+    private mixed $cause = null;
+
+    public function __construct(ConstraintViolationList $violations, ?Constraint $constraint, string|\Stringable $message, array $parameters, mixed $root, ?string $propertyPath, mixed $invalidValue, TranslatorInterface $translator, string|false|null $translationDomain = null)
+    {
+        $this->violations = $violations;
+        $this->message = $message;
+        $this->parameters = $parameters;
+        $this->root = $root;
+        $this->propertyPath = $propertyPath ?? '';
+        $this->invalidValue = $invalidValue;
+        $this->translator = $translator;
+        $this->translationDomain = $translationDomain;
+        $this->constraint = $constraint;
+    }
+
+    public function atPath(string $path): static
+    {
+        $this->propertyPath = PropertyPath::append($this->propertyPath, $path);
+
+        return $this;
+    }
+
+    public function setParameter(string $key, string $value): static
+    {
+        $this->parameters[$key] = $value;
+
+        return $this;
+    }
+
+    public function setParameters(array $parameters): static
+    {
+        $this->parameters = $parameters;
+
+        return $this;
+    }
+
+    public function setTranslationDomain(string $translationDomain): static
+    {
+        $this->translationDomain = $translationDomain;
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function disableTranslation(): static
+    {
+        $this->translationDomain = false;
+
+        return $this;
+    }
+
+    public function setInvalidValue(mixed $invalidValue): static
+    {
+        $this->invalidValue = $invalidValue;
+
+        return $this;
+    }
+
+    public function setPlural(int $number): static
+    {
+        $this->plural = $number;
+
+        return $this;
+    }
+
+    public function setCode(?string $code): static
+    {
+        $this->code = $code;
+
+        return $this;
+    }
+
+    public function setCause(mixed $cause): static
+    {
+        $this->cause = $cause;
+
+        return $this;
+    }
+
+    public function addViolation(): void
+    {
+        $parameters = null === $this->plural ? $this->parameters : (['%count%' => $this->plural] + $this->parameters);
+        if (false === $this->translationDomain) {
+            $translatedMessage = strtr($this->message, $parameters);
+        } else {
+            $translatedMessage = $this->translator->trans(
+                $this->message,
+                $parameters,
+                $this->translationDomain
+            );
+        }
+
+        $this->violations->add(new ConstraintViolation(
+            $translatedMessage,
+            $this->message,
+            $this->parameters,
+            $this->root,
+            $this->propertyPath,
+            $this->invalidValue,
+            $this->plural,
+            $this->code,
+            $this->constraint,
+            $this->cause
+        ));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/Violation/ConstraintViolationBuilderInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/Violation/ConstraintViolationBuilderInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/Violation/ConstraintViolationBuilderInterface.php	(revision 8435)
@@ -0,0 +1,116 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Violation;
+
+/**
+ * Builds {@link \Symfony\Component\Validator\ConstraintViolationInterface}
+ * objects.
+ *
+ * Use the various methods on this interface to configure the built violation.
+ * Finally, call {@link addViolation()} to add the violation to the current
+ * execution context.
+ *
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ *
+ * @method $this disableTranslation()
+ */
+interface ConstraintViolationBuilderInterface
+{
+    /**
+     * Stores the property path at which the violation should be generated.
+     *
+     * The passed path will be appended to the current property path of the
+     * execution context.
+     *
+     * @param string $path The property path
+     *
+     * @return $this
+     */
+    public function atPath(string $path): static;
+
+    /**
+     * Sets a parameter to be inserted into the violation message.
+     *
+     * @param string $key   The name of the parameter
+     * @param string $value The value to be inserted in the parameter's place
+     *
+     * @return $this
+     */
+    public function setParameter(string $key, string $value): static;
+
+    /**
+     * Sets all parameters to be inserted into the violation message.
+     *
+     * @param array $parameters An array with the parameter names as keys and
+     *                          the values to be inserted in their place as
+     *                          values
+     *
+     * @return $this
+     */
+    public function setParameters(array $parameters): static;
+
+    /**
+     * Sets the translation domain which should be used for translating the
+     * violation message.
+     *
+     * @param string $translationDomain The translation domain
+     *
+     * @return $this
+     *
+     * @see \Symfony\Contracts\Translation\TranslatorInterface
+     */
+    public function setTranslationDomain(string $translationDomain): static;
+
+    /**
+     * Sets the invalid value that caused this violation.
+     *
+     * @return $this
+     */
+    public function setInvalidValue(mixed $invalidValue): static;
+
+    /**
+     * Sets the number which determines how the plural form of the violation
+     * message is chosen when it is translated.
+     *
+     * @param int $number The number for determining the plural form
+     *
+     * @return $this
+     *
+     * @see \Symfony\Contracts\Translation\TranslatorInterface::trans()
+     */
+    public function setPlural(int $number): static;
+
+    /**
+     * Sets the violation code.
+     *
+     * @param string|null $code The violation code
+     *
+     * @return $this
+     */
+    public function setCode(?string $code): static;
+
+    /**
+     * Sets the cause of the violation.
+     *
+     * @param mixed $cause The cause of the violation
+     *
+     * @return $this
+     */
+    public function setCause(mixed $cause): static;
+
+    /**
+     * Adds the violation to the current execution context.
+     *
+     * @return void
+     */
+    public function addViolation();
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/validator/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/validator/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/validator/composer.json	(revision 8435)
@@ -0,0 +1,64 @@
+{
+    "name": "symfony/validator",
+    "type": "library",
+    "description": "Provides tools to validate values",
+    "keywords": [],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Fabien Potencier",
+            "email": "fabien@symfony.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=8.1",
+        "symfony/deprecation-contracts": "^2.5|^3",
+        "symfony/polyfill-ctype": "~1.8",
+        "symfony/polyfill-mbstring": "~1.0",
+        "symfony/polyfill-php83": "^1.27",
+        "symfony/translation-contracts": "^2.5|^3"
+    },
+    "require-dev": {
+        "symfony/console": "^5.4|^6.0|^7.0",
+        "symfony/finder": "^5.4|^6.0|^7.0",
+        "symfony/http-client": "^5.4|^6.0|^7.0",
+        "symfony/http-foundation": "^5.4|^6.0|^7.0",
+        "symfony/http-kernel": "^5.4|^6.0|^7.0",
+        "symfony/intl": "^5.4|^6.0|^7.0",
+        "symfony/yaml": "^5.4|^6.0|^7.0",
+        "symfony/config": "^5.4|^6.0|^7.0",
+        "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+        "symfony/expression-language": "^5.4|^6.0|^7.0",
+        "symfony/cache": "^5.4|^6.0|^7.0",
+        "symfony/mime": "^5.4|^6.0|^7.0",
+        "symfony/property-access": "^5.4|^6.0|^7.0",
+        "symfony/property-info": "^5.4|^6.0|^7.0",
+        "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3",
+        "doctrine/annotations": "^1.13|^2",
+        "egulias/email-validator": "^2.1.10|^3|^4"
+    },
+    "conflict": {
+        "doctrine/annotations": "<1.13",
+        "doctrine/lexer": "<1.1",
+        "symfony/dependency-injection": "<5.4",
+        "symfony/expression-language": "<5.4",
+        "symfony/http-kernel": "<5.4",
+        "symfony/intl": "<5.4",
+        "symfony/property-info": "<5.4",
+        "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3",
+        "symfony/yaml": "<5.4"
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Component\\Validator\\": "" },
+        "exclude-from-classmap": [
+            "/Tests/",
+            "/Resources/bin/"
+        ]
+    },
+    "minimum-stability": "dev"
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/CHANGELOG.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/CHANGELOG.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/CHANGELOG.md	(revision 8435)
@@ -0,0 +1,253 @@
+CHANGELOG
+=========
+
+6.3
+---
+
+ * Add support to dump int keys as strings by using the `Yaml::DUMP_NUMERIC_KEY_AS_STRING` flag
+
+6.2
+---
+
+ * Add support for `!php/enum` and `!php/enum *->value`
+ * Deprecate the `!php/const:` tag in key which will be replaced by the `!php/const` tag (without the colon) since 3.4
+
+6.1
+---
+
+ * In cases where it will likely improve readability, strings containing single quotes will be double-quoted
+
+5.4
+---
+
+ * Add new `lint:yaml dirname --exclude=/dirname/foo.yaml --exclude=/dirname/bar.yaml`
+   option to exclude one or more specific files from multiple file list
+ * Allow negatable for the parse tags option with `--no-parse-tags`
+
+5.3
+---
+
+ * Added `github` format support & autodetection to render errors as annotations
+   when running the YAML linter command in a Github Action environment.
+
+5.1.0
+-----
+
+ * Added support for parsing numbers prefixed with `0o` as octal numbers.
+ * Deprecated support for parsing numbers starting with `0` as octal numbers. They will be parsed as strings as of Symfony 6.0. Prefix numbers with `0o`
+   so that they are parsed as octal numbers.
+
+   Before:
+
+   ```yaml
+   Yaml::parse('072');
+   ```
+
+   After:
+
+   ```yaml
+   Yaml::parse('0o72');
+   ```
+
+ * Added `yaml-lint` binary.
+ * Deprecated using the `!php/object` and `!php/const` tags without a value.
+
+5.0.0
+-----
+
+ * Removed support for mappings inside multi-line strings.
+ * removed support for implicit STDIN usage in the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit.
+
+4.4.0
+-----
+
+ * Added support for parsing the inline notation spanning multiple lines.
+ * Added support to dump `null` as `~` by using the `Yaml::DUMP_NULL_AS_TILDE` flag.
+ * deprecated accepting STDIN implicitly when using the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit.
+
+4.3.0
+-----
+
+ * Using a mapping inside a multi-line string is deprecated and will throw a `ParseException` in 5.0.
+
+4.2.0
+-----
+
+ * added support for multiple files or directories in `LintCommand`
+
+4.0.0
+-----
+
+ * The behavior of the non-specific tag `!` is changed and now forces
+   non-evaluating your values.
+ * complex mappings will throw a `ParseException`
+ * support for the comma as a group separator for floats has been dropped, use
+   the underscore instead
+ * support for the `!!php/object` tag has been dropped, use the `!php/object`
+   tag instead
+ * duplicate mapping keys throw a `ParseException`
+ * non-string mapping keys throw a `ParseException`, use the `Yaml::PARSE_KEYS_AS_STRINGS`
+   flag to cast them to strings
+ * `%` at the beginning of an unquoted string throw a `ParseException`
+ * mappings with a colon (`:`) that is not followed by a whitespace throw a
+   `ParseException`
+ * the `Dumper::setIndentation()` method has been removed
+ * being able to pass boolean options to the `Yaml::parse()`, `Yaml::dump()`,
+   `Parser::parse()`, and `Dumper::dump()` methods to configure the behavior of
+   the parser and dumper is no longer supported, pass bitmask flags instead
+ * the constructor arguments of the `Parser` class have been removed
+ * the `Inline` class is internal and no longer part of the BC promise
+ * removed support for the `!str` tag, use the `!!str` tag instead
+ * added support for tagged scalars.
+
+   ```yml
+   Yaml::parse('!foo bar', Yaml::PARSE_CUSTOM_TAGS);
+   // returns TaggedValue('foo', 'bar');
+   ```
+
+3.4.0
+-----
+
+ * added support for parsing YAML files using the `Yaml::parseFile()` or `Parser::parseFile()` method
+
+ * the `Dumper`, `Parser`, and `Yaml` classes are marked as final
+
+ * Deprecated the `!php/object:` tag which will be replaced by the
+   `!php/object` tag (without the colon) in 4.0.
+
+ * Deprecated the `!php/const:` tag which will be replaced by the
+   `!php/const` tag (without the colon) in 4.0.
+
+ * Support for the `!str` tag is deprecated, use the `!!str` tag instead.
+
+ * Deprecated using the non-specific tag `!` as its behavior will change in 4.0.
+   It will force non-evaluating your values in 4.0. Use plain integers or `!!float` instead.
+
+3.3.0
+-----
+
+ * Starting an unquoted string with a question mark followed by a space is
+   deprecated and will throw a `ParseException` in Symfony 4.0.
+
+ * Deprecated support for implicitly parsing non-string mapping keys as strings.
+   Mapping keys that are no strings will lead to a `ParseException` in Symfony
+   4.0. Use quotes to opt-in for keys to be parsed as strings.
+
+   Before:
+
+   ```php
+   $yaml = <<<YAML
+   null: null key
+   true: boolean true
+   2.0: float key
+   YAML;
+
+   Yaml::parse($yaml);
+   ```
+
+   After:
+
+   ```php
+
+   $yaml = <<<YAML
+   "null": null key
+   "true": boolean true
+   "2.0": float key
+   YAML;
+
+   Yaml::parse($yaml);
+   ```
+
+ * Omitted mapping values will be parsed as `null`.
+
+ * Omitting the key of a mapping is deprecated and will throw a `ParseException` in Symfony 4.0.
+
+ * Added support for dumping empty PHP arrays as YAML sequences:
+
+   ```php
+   Yaml::dump([], 0, 0, Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE);
+   ```
+
+3.2.0
+-----
+
+ * Mappings with a colon (`:`) that is not followed by a whitespace are deprecated
+   when the mapping key is not quoted and will lead to a `ParseException` in
+   Symfony 4.0 (e.g. `foo:bar` must be `foo: bar`).
+
+ * Added support for parsing PHP constants:
+
+   ```php
+   Yaml::parse('!php/const:PHP_INT_MAX', Yaml::PARSE_CONSTANT);
+   ```
+
+ * Support for silently ignoring duplicate mapping keys in YAML has been
+   deprecated and will lead to a `ParseException` in Symfony 4.0.
+
+3.1.0
+-----
+
+ * Added support to dump `stdClass` and `ArrayAccess` objects as YAML mappings
+   through the `Yaml::DUMP_OBJECT_AS_MAP` flag.
+
+ * Strings that are not UTF-8 encoded will be dumped as base64 encoded binary
+   data.
+
+ * Added support for dumping multi line strings as literal blocks.
+
+ * Added support for parsing base64 encoded binary data when they are tagged
+   with the `!!binary` tag.
+
+ * Added support for parsing timestamps as `\DateTime` objects:
+
+   ```php
+   Yaml::parse('2001-12-15 21:59:43.10 -5', Yaml::PARSE_DATETIME);
+   ```
+
+ * `\DateTime` and `\DateTimeImmutable` objects are dumped as YAML timestamps.
+
+ * Deprecated usage of `%` at the beginning of an unquoted string.
+
+ * Added support for customizing the YAML parser behavior through an optional bit field:
+
+   ```php
+   Yaml::parse('{ "foo": "bar", "fiz": "cat" }', Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE | Yaml::PARSE_OBJECT | Yaml::PARSE_OBJECT_FOR_MAP);
+   ```
+
+ * Added support for customizing the dumped YAML string through an optional bit field:
+
+   ```php
+   Yaml::dump(['foo' => new A(), 'bar' => 1], 0, 0, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE | Yaml::DUMP_OBJECT);
+   ```
+
+3.0.0
+-----
+
+ * Yaml::parse() now throws an exception when a blackslash is not escaped
+   in double-quoted strings
+
+2.8.0
+-----
+
+ * Deprecated usage of a colon in an unquoted mapping value
+ * Deprecated usage of @, \`, | and > at the beginning of an unquoted string
+ * When surrounding strings with double-quotes, you must now escape `\` characters. Not
+   escaping those characters (when surrounded by double-quotes) is deprecated.
+
+   Before:
+
+   ```yml
+   class: "Foo\Var"
+   ```
+
+   After:
+
+   ```yml
+   class: "Foo\\Var"
+   ```
+
+2.1.0
+-----
+
+ * Yaml::parse() does not evaluate loaded files as PHP files by default
+   anymore (call Yaml::enablePhpParsing() to get back the old behavior)
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/Command/LintCommand.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/Command/LintCommand.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/Command/LintCommand.php	(revision 8435)
@@ -0,0 +1,276 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Yaml\Command;
+
+use Symfony\Component\Console\Attribute\AsCommand;
+use Symfony\Component\Console\CI\GithubActionReporter;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Completion\CompletionInput;
+use Symfony\Component\Console\Completion\CompletionSuggestions;
+use Symfony\Component\Console\Exception\InvalidArgumentException;
+use Symfony\Component\Console\Exception\RuntimeException;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Style\SymfonyStyle;
+use Symfony\Component\Yaml\Exception\ParseException;
+use Symfony\Component\Yaml\Parser;
+use Symfony\Component\Yaml\Yaml;
+
+/**
+ * Validates YAML files syntax and outputs encountered errors.
+ *
+ * @author GrÃ©goire Pineau <lyrixx@lyrixx.info>
+ * @author Robin Chalas <robin.chalas@gmail.com>
+ */
+#[AsCommand(name: 'lint:yaml', description: 'Lint a YAML file and outputs encountered errors')]
+class LintCommand extends Command
+{
+    private Parser $parser;
+    private ?string $format = null;
+    private bool $displayCorrectFiles;
+    private ?\Closure $directoryIteratorProvider;
+    private ?\Closure $isReadableProvider;
+
+    public function __construct(?string $name = null, ?callable $directoryIteratorProvider = null, ?callable $isReadableProvider = null)
+    {
+        parent::__construct($name);
+
+        $this->directoryIteratorProvider = null === $directoryIteratorProvider ? null : $directoryIteratorProvider(...);
+        $this->isReadableProvider = null === $isReadableProvider ? null : $isReadableProvider(...);
+    }
+
+    /**
+     * @return void
+     */
+    protected function configure()
+    {
+        $this
+            ->addArgument('filename', InputArgument::IS_ARRAY, 'A file, a directory or "-" for reading from STDIN')
+            ->addOption('format', null, InputOption::VALUE_REQUIRED, sprintf('The output format ("%s")', implode('", "', $this->getAvailableFormatOptions())))
+            ->addOption('exclude', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Path(s) to exclude')
+            ->addOption('parse-tags', null, InputOption::VALUE_NEGATABLE, 'Parse custom tags', null)
+            ->setHelp(<<<EOF
+The <info>%command.name%</info> command lints a YAML file and outputs to STDOUT
+the first encountered syntax error.
+
+You can validates YAML contents passed from STDIN:
+
+  <info>cat filename | php %command.full_name% -</info>
+
+You can also validate the syntax of a file:
+
+  <info>php %command.full_name% filename</info>
+
+Or of a whole directory:
+
+  <info>php %command.full_name% dirname</info>
+  <info>php %command.full_name% dirname --format=json</info>
+
+You can also exclude one or more specific files:
+
+  <info>php %command.full_name% dirname --exclude="dirname/foo.yaml" --exclude="dirname/bar.yaml"</info>
+
+EOF
+            )
+        ;
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output): int
+    {
+        $io = new SymfonyStyle($input, $output);
+        $filenames = (array) $input->getArgument('filename');
+        $excludes = $input->getOption('exclude');
+        $this->format = $input->getOption('format');
+        $flags = $input->getOption('parse-tags');
+
+        if (null === $this->format) {
+            // Autodetect format according to CI environment
+            $this->format = class_exists(GithubActionReporter::class) && GithubActionReporter::isGithubActionEnvironment() ? 'github' : 'txt';
+        }
+
+        $flags = $flags ? Yaml::PARSE_CUSTOM_TAGS : 0;
+
+        $this->displayCorrectFiles = $output->isVerbose();
+
+        if (['-'] === $filenames) {
+            return $this->display($io, [$this->validate(file_get_contents('php://stdin'), $flags)]);
+        }
+
+        if (!$filenames) {
+            throw new RuntimeException('Please provide a filename or pipe file content to STDIN.');
+        }
+
+        $filesInfo = [];
+        foreach ($filenames as $filename) {
+            if (!$this->isReadable($filename)) {
+                throw new RuntimeException(sprintf('File or directory "%s" is not readable.', $filename));
+            }
+
+            foreach ($this->getFiles($filename) as $file) {
+                if (!\in_array($file->getPathname(), $excludes, true)) {
+                    $filesInfo[] = $this->validate(file_get_contents($file), $flags, $file);
+                }
+            }
+        }
+
+        return $this->display($io, $filesInfo);
+    }
+
+    private function validate(string $content, int $flags, ?string $file = null): array
+    {
+        $prevErrorHandler = set_error_handler(function ($level, $message, $file, $line) use (&$prevErrorHandler) {
+            if (\E_USER_DEPRECATED === $level) {
+                throw new ParseException($message, $this->getParser()->getRealCurrentLineNb() + 1);
+            }
+
+            return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false;
+        });
+
+        try {
+            $this->getParser()->parse($content, Yaml::PARSE_CONSTANT | $flags);
+        } catch (ParseException $e) {
+            return ['file' => $file, 'line' => $e->getParsedLine(), 'valid' => false, 'message' => $e->getMessage()];
+        } finally {
+            restore_error_handler();
+        }
+
+        return ['file' => $file, 'valid' => true];
+    }
+
+    private function display(SymfonyStyle $io, array $files): int
+    {
+        return match ($this->format) {
+            'txt' => $this->displayTxt($io, $files),
+            'json' => $this->displayJson($io, $files),
+            'github' => $this->displayTxt($io, $files, true),
+            default => throw new InvalidArgumentException(sprintf('Supported formats are "%s".', implode('", "', $this->getAvailableFormatOptions()))),
+        };
+    }
+
+    private function displayTxt(SymfonyStyle $io, array $filesInfo, bool $errorAsGithubAnnotations = false): int
+    {
+        $countFiles = \count($filesInfo);
+        $erroredFiles = 0;
+        $suggestTagOption = false;
+
+        if ($errorAsGithubAnnotations) {
+            $githubReporter = new GithubActionReporter($io);
+        }
+
+        foreach ($filesInfo as $info) {
+            if ($info['valid'] && $this->displayCorrectFiles) {
+                $io->comment('<info>OK</info>'.($info['file'] ? sprintf(' in %s', $info['file']) : ''));
+            } elseif (!$info['valid']) {
+                ++$erroredFiles;
+                $io->text('<error> ERROR </error>'.($info['file'] ? sprintf(' in %s', $info['file']) : ''));
+                $io->text(sprintf('<error> >> %s</error>', $info['message']));
+
+                if (str_contains($info['message'], 'PARSE_CUSTOM_TAGS')) {
+                    $suggestTagOption = true;
+                }
+
+                if ($errorAsGithubAnnotations) {
+                    $githubReporter->error($info['message'], $info['file'] ?? 'php://stdin', $info['line']);
+                }
+            }
+        }
+
+        if (0 === $erroredFiles) {
+            $io->success(sprintf('All %d YAML files contain valid syntax.', $countFiles));
+        } else {
+            $io->warning(sprintf('%d YAML files have valid syntax and %d contain errors.%s', $countFiles - $erroredFiles, $erroredFiles, $suggestTagOption ? ' Use the --parse-tags option if you want parse custom tags.' : ''));
+        }
+
+        return min($erroredFiles, 1);
+    }
+
+    private function displayJson(SymfonyStyle $io, array $filesInfo): int
+    {
+        $errors = 0;
+
+        array_walk($filesInfo, function (&$v) use (&$errors) {
+            $v['file'] = (string) $v['file'];
+            if (!$v['valid']) {
+                ++$errors;
+            }
+
+            if (isset($v['message']) && str_contains($v['message'], 'PARSE_CUSTOM_TAGS')) {
+                $v['message'] .= ' Use the --parse-tags option if you want parse custom tags.';
+            }
+        });
+
+        $io->writeln(json_encode($filesInfo, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES));
+
+        return min($errors, 1);
+    }
+
+    private function getFiles(string $fileOrDirectory): iterable
+    {
+        if (is_file($fileOrDirectory)) {
+            yield new \SplFileInfo($fileOrDirectory);
+
+            return;
+        }
+
+        foreach ($this->getDirectoryIterator($fileOrDirectory) as $file) {
+            if (!\in_array($file->getExtension(), ['yml', 'yaml'])) {
+                continue;
+            }
+
+            yield $file;
+        }
+    }
+
+    private function getParser(): Parser
+    {
+        return $this->parser ??= new Parser();
+    }
+
+    private function getDirectoryIterator(string $directory): iterable
+    {
+        $default = fn ($directory) => new \RecursiveIteratorIterator(
+            new \RecursiveDirectoryIterator($directory, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS),
+            \RecursiveIteratorIterator::LEAVES_ONLY
+        );
+
+        if (null !== $this->directoryIteratorProvider) {
+            return ($this->directoryIteratorProvider)($directory, $default);
+        }
+
+        return $default($directory);
+    }
+
+    private function isReadable(string $fileOrDirectory): bool
+    {
+        $default = is_readable(...);
+
+        if (null !== $this->isReadableProvider) {
+            return ($this->isReadableProvider)($fileOrDirectory, $default);
+        }
+
+        return $default($fileOrDirectory);
+    }
+
+    public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
+    {
+        if ($input->mustSuggestOptionValuesFor('format')) {
+            $suggestions->suggestValues($this->getAvailableFormatOptions());
+        }
+    }
+
+    private function getAvailableFormatOptions(): array
+    {
+        return ['txt', 'json', 'github'];
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/Dumper.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/Dumper.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/Dumper.php	(revision 8435)
@@ -0,0 +1,178 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Yaml;
+
+use Symfony\Component\Yaml\Tag\TaggedValue;
+
+/**
+ * Dumper dumps PHP variables to YAML strings.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @final
+ */
+class Dumper
+{
+    /**
+     * The amount of spaces to use for indentation of nested nodes.
+     */
+    private int $indentation;
+
+    public function __construct(int $indentation = 4)
+    {
+        if ($indentation < 1) {
+            throw new \InvalidArgumentException('The indentation must be greater than zero.');
+        }
+
+        $this->indentation = $indentation;
+    }
+
+    /**
+     * Dumps a PHP value to YAML.
+     *
+     * @param mixed $input  The PHP value
+     * @param int   $inline The level where you switch to inline YAML
+     * @param int   $indent The level of indentation (used internally)
+     * @param int   $flags  A bit field of Yaml::DUMP_* constants to customize the dumped YAML string
+     */
+    public function dump(mixed $input, int $inline = 0, int $indent = 0, int $flags = 0): string
+    {
+        $output = '';
+        $prefix = $indent ? str_repeat(' ', $indent) : '';
+        $dumpObjectAsInlineMap = true;
+
+        if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($input instanceof \ArrayObject || $input instanceof \stdClass)) {
+            $dumpObjectAsInlineMap = empty((array) $input);
+        }
+
+        if ($inline <= 0 || (!\is_array($input) && !$input instanceof TaggedValue && $dumpObjectAsInlineMap) || empty($input)) {
+            $output .= $prefix.Inline::dump($input, $flags);
+        } elseif ($input instanceof TaggedValue) {
+            $output .= $this->dumpTaggedValue($input, $inline, $indent, $flags, $prefix);
+        } else {
+            $dumpAsMap = Inline::isHash($input);
+
+            foreach ($input as $key => $value) {
+                if ('' !== $output && "\n" !== $output[-1]) {
+                    $output .= "\n";
+                }
+
+                if (\is_int($key) && Yaml::DUMP_NUMERIC_KEY_AS_STRING & $flags) {
+                    $key = (string) $key;
+                }
+
+                if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value) && str_contains($value, "\n") && !str_contains($value, "\r")) {
+                    $blockIndentationIndicator = $this->getBlockIndentationIndicator($value);
+
+                    if (isset($value[-2]) && "\n" === $value[-2] && "\n" === $value[-1]) {
+                        $blockChompingIndicator = '+';
+                    } elseif ("\n" === $value[-1]) {
+                        $blockChompingIndicator = '';
+                    } else {
+                        $blockChompingIndicator = '-';
+                    }
+
+                    $output .= sprintf('%s%s%s |%s%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', '', $blockIndentationIndicator, $blockChompingIndicator);
+
+                    foreach (explode("\n", $value) as $row) {
+                        if ('' === $row) {
+                            $output .= "\n";
+                        } else {
+                            $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row);
+                        }
+                    }
+
+                    continue;
+                }
+
+                if ($value instanceof TaggedValue) {
+                    $output .= sprintf('%s%s !%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', $value->getTag());
+
+                    if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && str_contains($value->getValue(), "\n") && !str_contains($value->getValue(), "\r\n")) {
+                        $blockIndentationIndicator = $this->getBlockIndentationIndicator($value->getValue());
+                        $output .= sprintf(' |%s', $blockIndentationIndicator);
+
+                        foreach (explode("\n", $value->getValue()) as $row) {
+                            $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row);
+                        }
+
+                        continue;
+                    }
+
+                    if ($inline - 1 <= 0 || null === $value->getValue() || \is_scalar($value->getValue())) {
+                        $output .= ' '.$this->dump($value->getValue(), $inline - 1, 0, $flags)."\n";
+                    } else {
+                        $output .= "\n";
+                        $output .= $this->dump($value->getValue(), $inline - 1, $dumpAsMap ? $indent + $this->indentation : $indent + 2, $flags);
+                    }
+
+                    continue;
+                }
+
+                $dumpObjectAsInlineMap = true;
+
+                if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \ArrayObject || $value instanceof \stdClass)) {
+                    $dumpObjectAsInlineMap = empty((array) $value);
+                }
+
+                $willBeInlined = $inline - 1 <= 0 || !\is_array($value) && $dumpObjectAsInlineMap || empty($value);
+
+                $output .= sprintf('%s%s%s%s',
+                    $prefix,
+                    $dumpAsMap ? Inline::dump($key, $flags).':' : '-',
+                    $willBeInlined ? ' ' : "\n",
+                    $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $flags)
+                ).($willBeInlined ? "\n" : '');
+            }
+        }
+
+        return $output;
+    }
+
+    private function dumpTaggedValue(TaggedValue $value, int $inline, int $indent, int $flags, string $prefix): string
+    {
+        $output = sprintf('%s!%s', $prefix ? $prefix.' ' : '', $value->getTag());
+
+        if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && str_contains($value->getValue(), "\n") && !str_contains($value->getValue(), "\r\n")) {
+            $blockIndentationIndicator = $this->getBlockIndentationIndicator($value->getValue());
+            $output .= sprintf(' |%s', $blockIndentationIndicator);
+
+            foreach (explode("\n", $value->getValue()) as $row) {
+                $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row);
+            }
+
+            return $output;
+        }
+
+        if ($inline - 1 <= 0 || null === $value->getValue() || \is_scalar($value->getValue())) {
+            return $output.' '.$this->dump($value->getValue(), $inline - 1, 0, $flags)."\n";
+        }
+
+        return $output."\n".$this->dump($value->getValue(), $inline - 1, $indent, $flags);
+    }
+
+    private function getBlockIndentationIndicator(string $value): string
+    {
+        $lines = explode("\n", $value);
+
+        // If the first line (that is neither empty nor contains only spaces)
+        // starts with a space character, the spec requires a block indentation indicator
+        // http://www.yaml.org/spec/1.2/spec.html#id2793979
+        foreach ($lines as $line) {
+            if ('' !== trim($line, ' ')) {
+                return (' ' === substr($line, 0, 1)) ? (string) $this->indentation : '';
+            }
+        }
+
+        return '';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/Escaper.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/Escaper.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/Escaper.php	(revision 8435)
@@ -0,0 +1,95 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Yaml;
+
+/**
+ * Escaper encapsulates escaping rules for single and double-quoted
+ * YAML strings.
+ *
+ * @author Matthew Lewinski <matthew@lewinski.org>
+ *
+ * @internal
+ */
+class Escaper
+{
+    // Characters that would cause a dumped string to require double quoting.
+    public const REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\x7f|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9";
+
+    // Mapping arrays for escaping a double quoted string. The backslash is
+    // first to ensure proper escaping because str_replace operates iteratively
+    // on the input arrays. This ordering of the characters avoids the use of strtr,
+    // which performs more slowly.
+    private const ESCAPEES = ['\\', '\\\\', '\\"', '"',
+                                     "\x00",  "\x01",  "\x02",  "\x03",  "\x04",  "\x05",  "\x06",  "\x07",
+                                     "\x08",  "\x09",  "\x0a",  "\x0b",  "\x0c",  "\x0d",  "\x0e",  "\x0f",
+                                     "\x10",  "\x11",  "\x12",  "\x13",  "\x14",  "\x15",  "\x16",  "\x17",
+                                     "\x18",  "\x19",  "\x1a",  "\x1b",  "\x1c",  "\x1d",  "\x1e",  "\x1f",
+                                     "\x7f",
+                                     "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9",
+                               ];
+    private const ESCAPED = ['\\\\', '\\"', '\\\\', '\\"',
+                                     '\\0',   '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a',
+                                     '\\b',   '\\t',   '\\n',   '\\v',   '\\f',   '\\r',   '\\x0e', '\\x0f',
+                                     '\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17',
+                                     '\\x18', '\\x19', '\\x1a', '\\e',   '\\x1c', '\\x1d', '\\x1e', '\\x1f',
+                                     '\\x7f',
+                                     '\\N', '\\_', '\\L', '\\P',
+                              ];
+
+    /**
+     * Determines if a PHP value would require double quoting in YAML.
+     *
+     * @param string $value A PHP value
+     */
+    public static function requiresDoubleQuoting(string $value): bool
+    {
+        return 0 < preg_match('/'.self::REGEX_CHARACTER_TO_ESCAPE.'/u', $value);
+    }
+
+    /**
+     * Escapes and surrounds a PHP value with double quotes.
+     *
+     * @param string $value A PHP value
+     */
+    public static function escapeWithDoubleQuotes(string $value): string
+    {
+        return sprintf('"%s"', str_replace(self::ESCAPEES, self::ESCAPED, $value));
+    }
+
+    /**
+     * Determines if a PHP value would require single quoting in YAML.
+     *
+     * @param string $value A PHP value
+     */
+    public static function requiresSingleQuoting(string $value): bool
+    {
+        // Determines if a PHP value is entirely composed of a value that would
+        // require single quoting in YAML.
+        if (\in_array(strtolower($value), ['null', '~', 'true', 'false', 'y', 'n', 'yes', 'no', 'on', 'off'])) {
+            return true;
+        }
+
+        // Determines if the PHP value contains any single characters that would
+        // cause it to require single quoting in YAML.
+        return 0 < preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ \- ? | < > = ! % @ ` \p{Zs}]/xu', $value);
+    }
+
+    /**
+     * Escapes and surrounds a PHP value with single quotes.
+     *
+     * @param string $value A PHP value
+     */
+    public static function escapeWithSingleQuotes(string $value): string
+    {
+        return sprintf("'%s'", str_replace('\'', '\'\'', $value));
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/Exception/DumpException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/Exception/DumpException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/Exception/DumpException.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Yaml\Exception;
+
+/**
+ * Exception class thrown when an error occurs during dumping.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class DumpException extends RuntimeException
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/Exception/ExceptionInterface.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/Exception/ExceptionInterface.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/Exception/ExceptionInterface.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Yaml\Exception;
+
+/**
+ * Exception interface for all exceptions thrown by the component.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface ExceptionInterface extends \Throwable
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/Exception/ParseException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/Exception/ParseException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/Exception/ParseException.php	(revision 8435)
@@ -0,0 +1,132 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Yaml\Exception;
+
+/**
+ * Exception class thrown when an error occurs during parsing.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class ParseException extends RuntimeException
+{
+    private ?string $parsedFile;
+    private int $parsedLine;
+    private ?string $snippet;
+    private string $rawMessage;
+
+    /**
+     * @param string      $message    The error message
+     * @param int         $parsedLine The line where the error occurred
+     * @param string|null $snippet    The snippet of code near the problem
+     * @param string|null $parsedFile The file name where the error occurred
+     */
+    public function __construct(string $message, int $parsedLine = -1, ?string $snippet = null, ?string $parsedFile = null, ?\Throwable $previous = null)
+    {
+        $this->parsedFile = $parsedFile;
+        $this->parsedLine = $parsedLine;
+        $this->snippet = $snippet;
+        $this->rawMessage = $message;
+
+        $this->updateRepr();
+
+        parent::__construct($this->message, 0, $previous);
+    }
+
+    /**
+     * Gets the snippet of code near the error.
+     */
+    public function getSnippet(): string
+    {
+        return $this->snippet;
+    }
+
+    /**
+     * Sets the snippet of code near the error.
+     *
+     * @return void
+     */
+    public function setSnippet(string $snippet)
+    {
+        $this->snippet = $snippet;
+
+        $this->updateRepr();
+    }
+
+    /**
+     * Gets the filename where the error occurred.
+     *
+     * This method returns null if a string is parsed.
+     */
+    public function getParsedFile(): string
+    {
+        return $this->parsedFile;
+    }
+
+    /**
+     * Sets the filename where the error occurred.
+     *
+     * @return void
+     */
+    public function setParsedFile(string $parsedFile)
+    {
+        $this->parsedFile = $parsedFile;
+
+        $this->updateRepr();
+    }
+
+    /**
+     * Gets the line where the error occurred.
+     */
+    public function getParsedLine(): int
+    {
+        return $this->parsedLine;
+    }
+
+    /**
+     * Sets the line where the error occurred.
+     *
+     * @return void
+     */
+    public function setParsedLine(int $parsedLine)
+    {
+        $this->parsedLine = $parsedLine;
+
+        $this->updateRepr();
+    }
+
+    private function updateRepr(): void
+    {
+        $this->message = $this->rawMessage;
+
+        $dot = false;
+        if (str_ends_with($this->message, '.')) {
+            $this->message = substr($this->message, 0, -1);
+            $dot = true;
+        }
+
+        if (null !== $this->parsedFile) {
+            $this->message .= sprintf(' in %s', json_encode($this->parsedFile, \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE));
+        }
+
+        if ($this->parsedLine >= 0) {
+            $this->message .= sprintf(' at line %d', $this->parsedLine);
+        }
+
+        if ($this->snippet) {
+            $this->message .= sprintf(' (near "%s")', $this->snippet);
+        }
+
+        if ($dot) {
+            $this->message .= '.';
+        }
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/Exception/RuntimeException.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/Exception/RuntimeException.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/Exception/RuntimeException.php	(revision 8435)
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Yaml\Exception;
+
+/**
+ * Exception class thrown when an error occurs during parsing.
+ *
+ * @author Romain Neutron <imprec@gmail.com>
+ */
+class RuntimeException extends \RuntimeException implements ExceptionInterface
+{
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/Inline.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/Inline.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/Inline.php	(revision 8435)
@@ -0,0 +1,828 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Yaml;
+
+use Symfony\Component\Yaml\Exception\DumpException;
+use Symfony\Component\Yaml\Exception\ParseException;
+use Symfony\Component\Yaml\Tag\TaggedValue;
+
+/**
+ * Inline implements a YAML parser/dumper for the YAML inline syntax.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @internal
+ */
+class Inline
+{
+    public const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*+(?:\\\\.[^"\\\\]*+)*+)"|\'([^\']*+(?:\'\'[^\']*+)*+)\')';
+
+    public static int $parsedLineNumber = -1;
+    public static ?string $parsedFilename = null;
+
+    private static bool $exceptionOnInvalidType = false;
+    private static bool $objectSupport = false;
+    private static bool $objectForMap = false;
+    private static bool $constantSupport = false;
+
+    public static function initialize(int $flags, ?int $parsedLineNumber = null, ?string $parsedFilename = null): void
+    {
+        self::$exceptionOnInvalidType = (bool) (Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE & $flags);
+        self::$objectSupport = (bool) (Yaml::PARSE_OBJECT & $flags);
+        self::$objectForMap = (bool) (Yaml::PARSE_OBJECT_FOR_MAP & $flags);
+        self::$constantSupport = (bool) (Yaml::PARSE_CONSTANT & $flags);
+        self::$parsedFilename = $parsedFilename;
+
+        if (null !== $parsedLineNumber) {
+            self::$parsedLineNumber = $parsedLineNumber;
+        }
+    }
+
+    /**
+     * Converts a YAML string to a PHP value.
+     *
+     * @param int   $flags      A bit field of Yaml::PARSE_* constants to customize the YAML parser behavior
+     * @param array $references Mapping of variable names to values
+     *
+     * @throws ParseException
+     */
+    public static function parse(string $value, int $flags = 0, array &$references = []): mixed
+    {
+        self::initialize($flags);
+
+        $value = trim($value);
+
+        if ('' === $value) {
+            return '';
+        }
+
+        $i = 0;
+        $tag = self::parseTag($value, $i, $flags);
+        switch ($value[$i]) {
+            case '[':
+                $result = self::parseSequence($value, $flags, $i, $references);
+                ++$i;
+                break;
+            case '{':
+                $result = self::parseMapping($value, $flags, $i, $references);
+                ++$i;
+                break;
+            default:
+                $result = self::parseScalar($value, $flags, null, $i, true, $references);
+        }
+
+        // some comments are allowed at the end
+        if (preg_replace('/\s*#.*$/A', '', substr($value, $i))) {
+            throw new ParseException(sprintf('Unexpected characters near "%s".', substr($value, $i)), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
+        }
+
+        if (null !== $tag && '' !== $tag) {
+            return new TaggedValue($tag, $result);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Dumps a given PHP variable to a YAML string.
+     *
+     * @param mixed $value The PHP variable to convert
+     * @param int   $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string
+     *
+     * @throws DumpException When trying to dump PHP resource
+     */
+    public static function dump(mixed $value, int $flags = 0): string
+    {
+        switch (true) {
+            case \is_resource($value):
+                if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) {
+                    throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value)));
+                }
+
+                return self::dumpNull($flags);
+            case $value instanceof \DateTimeInterface:
+                return $value->format(match (true) {
+                    !$length = \strlen(rtrim($value->format('u'), '0')) => 'c',
+                    $length < 4 => 'Y-m-d\TH:i:s.vP',
+                    default => 'Y-m-d\TH:i:s.uP',
+                });
+            case $value instanceof \UnitEnum:
+                return sprintf('!php/const %s::%s', $value::class, $value->name);
+            case \is_object($value):
+                if ($value instanceof TaggedValue) {
+                    return '!'.$value->getTag().' '.self::dump($value->getValue(), $flags);
+                }
+
+                if (Yaml::DUMP_OBJECT & $flags) {
+                    return '!php/object '.self::dump(serialize($value));
+                }
+
+                if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \stdClass || $value instanceof \ArrayObject)) {
+                    return self::dumpHashArray($value, $flags);
+                }
+
+                if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) {
+                    throw new DumpException('Object support when dumping a YAML file has been disabled.');
+                }
+
+                return self::dumpNull($flags);
+            case \is_array($value):
+                return self::dumpArray($value, $flags);
+            case null === $value:
+                return self::dumpNull($flags);
+            case true === $value:
+                return 'true';
+            case false === $value:
+                return 'false';
+            case \is_int($value):
+                return $value;
+            case is_numeric($value) && false === strpbrk($value, "\f\n\r\t\v"):
+                $locale = setlocale(\LC_NUMERIC, 0);
+                if (false !== $locale) {
+                    setlocale(\LC_NUMERIC, 'C');
+                }
+                if (\is_float($value)) {
+                    $repr = (string) $value;
+                    if (is_infinite($value)) {
+                        $repr = str_ireplace('INF', '.Inf', $repr);
+                    } elseif (floor($value) == $value && $repr == $value) {
+                        // Preserve float data type since storing a whole number will result in integer value.
+                        if (!str_contains($repr, 'E')) {
+                            $repr .= '.0';
+                        }
+                    }
+                } else {
+                    $repr = \is_string($value) ? "'$value'" : (string) $value;
+                }
+                if (false !== $locale) {
+                    setlocale(\LC_NUMERIC, $locale);
+                }
+
+                return $repr;
+            case '' == $value:
+                return "''";
+            case self::isBinaryString($value):
+                return '!!binary '.base64_encode($value);
+            case Escaper::requiresDoubleQuoting($value):
+                return Escaper::escapeWithDoubleQuotes($value);
+            case Escaper::requiresSingleQuoting($value):
+                $singleQuoted = Escaper::escapeWithSingleQuotes($value);
+                if (!str_contains($value, "'")) {
+                    return $singleQuoted;
+                }
+                // Attempt double-quoting the string instead to see if it's more efficient.
+                $doubleQuoted = Escaper::escapeWithDoubleQuotes($value);
+
+                return \strlen($doubleQuoted) < \strlen($singleQuoted) ? $doubleQuoted : $singleQuoted;
+            case Parser::preg_match('{^[0-9]+[_0-9]*$}', $value):
+            case Parser::preg_match(self::getHexRegex(), $value):
+            case Parser::preg_match(self::getTimestampRegex(), $value):
+                return Escaper::escapeWithSingleQuotes($value);
+            default:
+                return $value;
+        }
+    }
+
+    /**
+     * Check if given array is hash or just normal indexed array.
+     */
+    public static function isHash(array|\ArrayObject|\stdClass $value): bool
+    {
+        if ($value instanceof \stdClass || $value instanceof \ArrayObject) {
+            return true;
+        }
+
+        $expectedKey = 0;
+
+        foreach ($value as $key => $val) {
+            if ($key !== $expectedKey++) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Dumps a PHP array to a YAML string.
+     *
+     * @param array $value The PHP array to dump
+     * @param int   $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string
+     */
+    private static function dumpArray(array $value, int $flags): string
+    {
+        // array
+        if (($value || Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE & $flags) && !self::isHash($value)) {
+            $output = [];
+            foreach ($value as $val) {
+                $output[] = self::dump($val, $flags);
+            }
+
+            return sprintf('[%s]', implode(', ', $output));
+        }
+
+        return self::dumpHashArray($value, $flags);
+    }
+
+    /**
+     * Dumps hash array to a YAML string.
+     *
+     * @param array|\ArrayObject|\stdClass $value The hash array to dump
+     * @param int                          $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string
+     */
+    private static function dumpHashArray(array|\ArrayObject|\stdClass $value, int $flags): string
+    {
+        $output = [];
+        foreach ($value as $key => $val) {
+            if (\is_int($key) && Yaml::DUMP_NUMERIC_KEY_AS_STRING & $flags) {
+                $key = (string) $key;
+            }
+
+            $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags));
+        }
+
+        return sprintf('{ %s }', implode(', ', $output));
+    }
+
+    private static function dumpNull(int $flags): string
+    {
+        if (Yaml::DUMP_NULL_AS_TILDE & $flags) {
+            return '~';
+        }
+
+        return 'null';
+    }
+
+    /**
+     * Parses a YAML scalar.
+     *
+     * @throws ParseException When malformed inline YAML string is parsed
+     */
+    public static function parseScalar(string $scalar, int $flags = 0, ?array $delimiters = null, int &$i = 0, bool $evaluate = true, array &$references = [], ?bool &$isQuoted = null): mixed
+    {
+        if (\in_array($scalar[$i], ['"', "'"], true)) {
+            // quoted scalar
+            $isQuoted = true;
+            $output = self::parseQuotedScalar($scalar, $i);
+
+            if (null !== $delimiters) {
+                $tmp = ltrim(substr($scalar, $i), " \n");
+                if ('' === $tmp) {
+                    throw new ParseException(sprintf('Unexpected end of line, expected one of "%s".', implode('', $delimiters)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+                }
+                if (!\in_array($tmp[0], $delimiters)) {
+                    throw new ParseException(sprintf('Unexpected characters (%s).', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+                }
+            }
+        } else {
+            // "normal" string
+            $isQuoted = false;
+
+            if (!$delimiters) {
+                $output = substr($scalar, $i);
+                $i += \strlen($output);
+
+                // remove comments
+                if (Parser::preg_match('/[ \t]+#/', $output, $match, \PREG_OFFSET_CAPTURE)) {
+                    $output = substr($output, 0, $match[0][1]);
+                }
+            } elseif (Parser::preg_match('/^(.*?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match)) {
+                $output = $match[1];
+                $i += \strlen($output);
+                $output = trim($output);
+            } else {
+                throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $scalar), self::$parsedLineNumber + 1, null, self::$parsedFilename);
+            }
+
+            // a non-quoted string cannot start with @ or ` (reserved) nor with a scalar indicator (| or >)
+            if ($output && ('@' === $output[0] || '`' === $output[0] || '|' === $output[0] || '>' === $output[0] || '%' === $output[0])) {
+                throw new ParseException(sprintf('The reserved indicator "%s" cannot start a plain scalar; you need to quote the scalar.', $output[0]), self::$parsedLineNumber + 1, $output, self::$parsedFilename);
+            }
+
+            if ($evaluate) {
+                $output = self::evaluateScalar($output, $flags, $references, $isQuoted);
+            }
+        }
+
+        return $output;
+    }
+
+    /**
+     * Parses a YAML quoted scalar.
+     *
+     * @throws ParseException When malformed inline YAML string is parsed
+     */
+    private static function parseQuotedScalar(string $scalar, int &$i = 0): string
+    {
+        if (!Parser::preg_match('/'.self::REGEX_QUOTED_STRING.'/Au', substr($scalar, $i), $match)) {
+            throw new ParseException(sprintf('Malformed inline YAML string: "%s".', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+        }
+
+        $output = substr($match[0], 1, -1);
+
+        $unescaper = new Unescaper();
+        if ('"' == $scalar[$i]) {
+            $output = $unescaper->unescapeDoubleQuotedString($output);
+        } else {
+            $output = $unescaper->unescapeSingleQuotedString($output);
+        }
+
+        $i += \strlen($match[0]);
+
+        return $output;
+    }
+
+    /**
+     * Parses a YAML sequence.
+     *
+     * @throws ParseException When malformed inline YAML string is parsed
+     */
+    private static function parseSequence(string $sequence, int $flags, int &$i = 0, array &$references = []): array
+    {
+        $output = [];
+        $len = \strlen($sequence);
+        ++$i;
+
+        // [foo, bar, ...]
+        while ($i < $len) {
+            if (']' === $sequence[$i]) {
+                return $output;
+            }
+            if (',' === $sequence[$i] || ' ' === $sequence[$i]) {
+                ++$i;
+
+                continue;
+            }
+
+            $tag = self::parseTag($sequence, $i, $flags);
+            switch ($sequence[$i]) {
+                case '[':
+                    // nested sequence
+                    $value = self::parseSequence($sequence, $flags, $i, $references);
+                    break;
+                case '{':
+                    // nested mapping
+                    $value = self::parseMapping($sequence, $flags, $i, $references);
+                    break;
+                default:
+                    $value = self::parseScalar($sequence, $flags, [',', ']'], $i, null === $tag, $references, $isQuoted);
+
+                    // the value can be an array if a reference has been resolved to an array var
+                    if (\is_string($value) && !$isQuoted && str_contains($value, ': ')) {
+                        // embedded mapping?
+                        try {
+                            $pos = 0;
+                            $value = self::parseMapping('{'.$value.'}', $flags, $pos, $references);
+                        } catch (\InvalidArgumentException) {
+                            // no, it's not
+                        }
+                    }
+
+                    if (!$isQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) {
+                        $references[$matches['ref']] = $matches['value'];
+                        $value = $matches['value'];
+                    }
+
+                    --$i;
+            }
+
+            if (null !== $tag && '' !== $tag) {
+                $value = new TaggedValue($tag, $value);
+            }
+
+            $output[] = $value;
+
+            ++$i;
+        }
+
+        throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $sequence), self::$parsedLineNumber + 1, null, self::$parsedFilename);
+    }
+
+    /**
+     * Parses a YAML mapping.
+     *
+     * @throws ParseException When malformed inline YAML string is parsed
+     */
+    private static function parseMapping(string $mapping, int $flags, int &$i = 0, array &$references = []): array|\stdClass
+    {
+        $output = [];
+        $len = \strlen($mapping);
+        ++$i;
+        $allowOverwrite = false;
+
+        // {foo: bar, bar:foo, ...}
+        while ($i < $len) {
+            switch ($mapping[$i]) {
+                case ' ':
+                case ',':
+                case "\n":
+                    ++$i;
+                    continue 2;
+                case '}':
+                    if (self::$objectForMap) {
+                        return (object) $output;
+                    }
+
+                    return $output;
+            }
+
+            // key
+            $offsetBeforeKeyParsing = $i;
+            $isKeyQuoted = \in_array($mapping[$i], ['"', "'"], true);
+            $key = self::parseScalar($mapping, $flags, [':', ' '], $i, false);
+
+            if ($offsetBeforeKeyParsing === $i) {
+                throw new ParseException('Missing mapping key.', self::$parsedLineNumber + 1, $mapping);
+            }
+
+            if ('!php/const' === $key || '!php/enum' === $key) {
+                $key .= ' '.self::parseScalar($mapping, $flags, [':'], $i, false);
+                $key = self::evaluateScalar($key, $flags);
+            }
+
+            if (false === $i = strpos($mapping, ':', $i)) {
+                break;
+            }
+
+            if (!$isKeyQuoted) {
+                $evaluatedKey = self::evaluateScalar($key, $flags, $references);
+
+                if ('' !== $key && $evaluatedKey !== $key && !\is_string($evaluatedKey) && !\is_int($evaluatedKey)) {
+                    throw new ParseException('Implicit casting of incompatible mapping keys to strings is not supported. Quote your evaluable mapping keys instead.', self::$parsedLineNumber + 1, $mapping);
+                }
+            }
+
+            if (!$isKeyQuoted && (!isset($mapping[$i + 1]) || !\in_array($mapping[$i + 1], [' ', ',', '[', ']', '{', '}', "\n"], true))) {
+                throw new ParseException('Colons must be followed by a space or an indication character (i.e. " ", ",", "[", "]", "{", "}").', self::$parsedLineNumber + 1, $mapping);
+            }
+
+            if ('<<' === $key) {
+                $allowOverwrite = true;
+            }
+
+            while ($i < $len) {
+                if (':' === $mapping[$i] || ' ' === $mapping[$i] || "\n" === $mapping[$i]) {
+                    ++$i;
+
+                    continue;
+                }
+
+                $tag = self::parseTag($mapping, $i, $flags);
+                switch ($mapping[$i]) {
+                    case '[':
+                        // nested sequence
+                        $value = self::parseSequence($mapping, $flags, $i, $references);
+                        // Spec: Keys MUST be unique; first one wins.
+                        // Parser cannot abort this mapping earlier, since lines
+                        // are processed sequentially.
+                        // But overwriting is allowed when a merge node is used in current block.
+                        if ('<<' === $key) {
+                            foreach ($value as $parsedValue) {
+                                $output += $parsedValue;
+                            }
+                        } elseif ($allowOverwrite || !isset($output[$key])) {
+                            if (null !== $tag) {
+                                $output[$key] = new TaggedValue($tag, $value);
+                            } else {
+                                $output[$key] = $value;
+                            }
+                        } elseif (isset($output[$key])) {
+                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping);
+                        }
+                        break;
+                    case '{':
+                        // nested mapping
+                        $value = self::parseMapping($mapping, $flags, $i, $references);
+                        // Spec: Keys MUST be unique; first one wins.
+                        // Parser cannot abort this mapping earlier, since lines
+                        // are processed sequentially.
+                        // But overwriting is allowed when a merge node is used in current block.
+                        if ('<<' === $key) {
+                            $output += $value;
+                        } elseif ($allowOverwrite || !isset($output[$key])) {
+                            if (null !== $tag) {
+                                $output[$key] = new TaggedValue($tag, $value);
+                            } else {
+                                $output[$key] = $value;
+                            }
+                        } elseif (isset($output[$key])) {
+                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping);
+                        }
+                        break;
+                    default:
+                        $value = self::parseScalar($mapping, $flags, [',', '}', "\n"], $i, null === $tag, $references, $isValueQuoted);
+                        // Spec: Keys MUST be unique; first one wins.
+                        // Parser cannot abort this mapping earlier, since lines
+                        // are processed sequentially.
+                        // But overwriting is allowed when a merge node is used in current block.
+                        if ('<<' === $key) {
+                            $output += $value;
+                        } elseif ($allowOverwrite || !isset($output[$key])) {
+                            if (!$isValueQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && !self::isBinaryString($value) && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) {
+                                $references[$matches['ref']] = $matches['value'];
+                                $value = $matches['value'];
+                            }
+
+                            if (null !== $tag) {
+                                $output[$key] = new TaggedValue($tag, $value);
+                            } else {
+                                $output[$key] = $value;
+                            }
+                        } elseif (isset($output[$key])) {
+                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping);
+                        }
+                        --$i;
+                }
+                ++$i;
+
+                continue 2;
+            }
+        }
+
+        throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $mapping), self::$parsedLineNumber + 1, null, self::$parsedFilename);
+    }
+
+    /**
+     * Evaluates scalars and replaces magic values.
+     *
+     * @throws ParseException when object parsing support was disabled and the parser detected a PHP object or when a reference could not be resolved
+     */
+    private static function evaluateScalar(string $scalar, int $flags, array &$references = [], ?bool &$isQuotedString = null): mixed
+    {
+        $isQuotedString = false;
+        $scalar = trim($scalar);
+
+        if (str_starts_with($scalar, '*')) {
+            if (false !== $pos = strpos($scalar, '#')) {
+                $value = substr($scalar, 1, $pos - 2);
+            } else {
+                $value = substr($scalar, 1);
+            }
+
+            // an unquoted *
+            if (false === $value || '' === $value) {
+                throw new ParseException('A reference must contain at least one character.', self::$parsedLineNumber + 1, $value, self::$parsedFilename);
+            }
+
+            if (!\array_key_exists($value, $references)) {
+                throw new ParseException(sprintf('Reference "%s" does not exist.', $value), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
+            }
+
+            return $references[$value];
+        }
+
+        $scalarLower = strtolower($scalar);
+
+        switch (true) {
+            case 'null' === $scalarLower:
+            case '' === $scalar:
+            case '~' === $scalar:
+                return null;
+            case 'true' === $scalarLower:
+                return true;
+            case 'false' === $scalarLower:
+                return false;
+            case '!' === $scalar[0]:
+                switch (true) {
+                    case str_starts_with($scalar, '!!str '):
+                        $s = (string) substr($scalar, 6);
+
+                        if (\in_array($s[0] ?? '', ['"', "'"], true)) {
+                            $isQuotedString = true;
+                            $s = self::parseQuotedScalar($s);
+                        }
+
+                        return $s;
+                    case str_starts_with($scalar, '! '):
+                        return substr($scalar, 2);
+                    case str_starts_with($scalar, '!php/object'):
+                        if (self::$objectSupport) {
+                            if (!isset($scalar[12])) {
+                                throw new ParseException('Missing value for tag "!php/object".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+                            }
+
+                            return unserialize(self::parseScalar(substr($scalar, 12)));
+                        }
+
+                        if (self::$exceptionOnInvalidType) {
+                            throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+                        }
+
+                        return null;
+                    case str_starts_with($scalar, '!php/const'):
+                        if (self::$constantSupport) {
+                            if (!isset($scalar[11])) {
+                                throw new ParseException('Missing value for tag "!php/const".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+                            }
+
+                            $i = 0;
+                            if (\defined($const = self::parseScalar(substr($scalar, 11), 0, null, $i, false))) {
+                                return \constant($const);
+                            }
+
+                            throw new ParseException(sprintf('The constant "%s" is not defined.', $const), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+                        }
+                        if (self::$exceptionOnInvalidType) {
+                            throw new ParseException(sprintf('The string "%s" could not be parsed as a constant. Did you forget to pass the "Yaml::PARSE_CONSTANT" flag to the parser?', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+                        }
+
+                        return null;
+                    case str_starts_with($scalar, '!php/enum'):
+                        if (self::$constantSupport) {
+                            if (!isset($scalar[11])) {
+                                throw new ParseException('Missing value for tag "!php/enum".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+                            }
+
+                            $i = 0;
+                            $enum = self::parseScalar(substr($scalar, 10), 0, null, $i, false);
+                            if ($useValue = str_ends_with($enum, '->value')) {
+                                $enum = substr($enum, 0, -7);
+                            }
+                            if (!\defined($enum)) {
+                                throw new ParseException(sprintf('The enum "%s" is not defined.', $enum), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+                            }
+
+                            $value = \constant($enum);
+
+                            if (!$value instanceof \UnitEnum) {
+                                throw new ParseException(sprintf('The string "%s" is not the name of a valid enum.', $enum), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+                            }
+                            if (!$useValue) {
+                                return $value;
+                            }
+                            if (!$value instanceof \BackedEnum) {
+                                throw new ParseException(sprintf('The enum "%s" defines no value next to its name.', $enum), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+                            }
+
+                            return $value->value;
+                        }
+                        if (self::$exceptionOnInvalidType) {
+                            throw new ParseException(sprintf('The string "%s" could not be parsed as an enum. Did you forget to pass the "Yaml::PARSE_CONSTANT" flag to the parser?', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+                        }
+
+                        return null;
+                    case str_starts_with($scalar, '!!float '):
+                        return (float) substr($scalar, 8);
+                    case str_starts_with($scalar, '!!binary '):
+                        return self::evaluateBinaryScalar(substr($scalar, 9));
+                }
+
+                throw new ParseException(sprintf('The string "%s" could not be parsed as it uses an unsupported built-in tag.', $scalar), self::$parsedLineNumber, $scalar, self::$parsedFilename);
+            case preg_match('/^(?:\+|-)?0o(?P<value>[0-7_]++)$/', $scalar, $matches):
+                $value = str_replace('_', '', $matches['value']);
+
+                if ('-' === $scalar[0]) {
+                    return -octdec($value);
+                }
+
+                return octdec($value);
+            case \in_array($scalar[0], ['+', '-', '.'], true) || is_numeric($scalar[0]):
+                if (Parser::preg_match('{^[+-]?[0-9][0-9_]*$}', $scalar)) {
+                    $scalar = str_replace('_', '', $scalar);
+                }
+
+                switch (true) {
+                    case ctype_digit($scalar):
+                    case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)):
+                        $cast = (int) $scalar;
+
+                        return ($scalar === (string) $cast) ? $cast : $scalar;
+                    case is_numeric($scalar):
+                    case Parser::preg_match(self::getHexRegex(), $scalar):
+                        $scalar = str_replace('_', '', $scalar);
+
+                        return '0x' === $scalar[0].$scalar[1] ? hexdec($scalar) : (float) $scalar;
+                    case '.inf' === $scalarLower:
+                    case '.nan' === $scalarLower:
+                        return -log(0);
+                    case '-.inf' === $scalarLower:
+                        return log(0);
+                    case Parser::preg_match('/^(-|\+)?[0-9][0-9_]*(\.[0-9_]+)?$/', $scalar):
+                        return (float) str_replace('_', '', $scalar);
+                    case Parser::preg_match(self::getTimestampRegex(), $scalar):
+                        // When no timezone is provided in the parsed date, YAML spec says we must assume UTC.
+                        $time = new \DateTimeImmutable($scalar, new \DateTimeZone('UTC'));
+
+                        if (Yaml::PARSE_DATETIME & $flags) {
+                            return $time;
+                        }
+
+                        if ('' !== rtrim($time->format('u'), '0')) {
+                            return (float) $time->format('U.u');
+                        }
+
+                        try {
+                            if (false !== $scalar = $time->getTimestamp()) {
+                                return $scalar;
+                            }
+                        } catch (\ValueError) {
+                            // no-op
+                        }
+
+                        return $time->format('U');
+                }
+        }
+
+        return (string) $scalar;
+    }
+
+    private static function parseTag(string $value, int &$i, int $flags): ?string
+    {
+        if ('!' !== $value[$i]) {
+            return null;
+        }
+
+        $tagLength = strcspn($value, " \t\n[]{},", $i + 1);
+        $tag = substr($value, $i + 1, $tagLength);
+
+        $nextOffset = $i + $tagLength + 1;
+        $nextOffset += strspn($value, ' ', $nextOffset);
+
+        if ('' === $tag && (!isset($value[$nextOffset]) || \in_array($value[$nextOffset], [']', '}', ','], true))) {
+            throw new ParseException('Using the unquoted scalar value "!" is not supported. You must quote it.', self::$parsedLineNumber + 1, $value, self::$parsedFilename);
+        }
+
+        // Is followed by a scalar and is a built-in tag
+        if ('' !== $tag && (!isset($value[$nextOffset]) || !\in_array($value[$nextOffset], ['[', '{'], true)) && ('!' === $tag[0] || \in_array($tag, ['str', 'php/const', 'php/enum', 'php/object'], true))) {
+            // Manage in {@link self::evaluateScalar()}
+            return null;
+        }
+
+        $i = $nextOffset;
+
+        // Built-in tags
+        if ('' !== $tag && '!' === $tag[0]) {
+            throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
+        }
+
+        if ('' !== $tag && !isset($value[$i])) {
+            throw new ParseException(sprintf('Missing value for tag "%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
+        }
+
+        if ('' === $tag || Yaml::PARSE_CUSTOM_TAGS & $flags) {
+            return $tag;
+        }
+
+        throw new ParseException(sprintf('Tags support is not enabled. Enable the "Yaml::PARSE_CUSTOM_TAGS" flag to use "!%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
+    }
+
+    public static function evaluateBinaryScalar(string $scalar): string
+    {
+        $parsedBinaryData = self::parseScalar(preg_replace('/\s/', '', $scalar));
+
+        if (0 !== (\strlen($parsedBinaryData) % 4)) {
+            throw new ParseException(sprintf('The normalized base64 encoded data (data without whitespace characters) length must be a multiple of four (%d bytes given).', \strlen($parsedBinaryData)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+        }
+
+        if (!Parser::preg_match('#^[A-Z0-9+/]+={0,2}$#i', $parsedBinaryData)) {
+            throw new ParseException(sprintf('The base64 encoded data (%s) contains invalid characters.', $parsedBinaryData), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
+        }
+
+        return base64_decode($parsedBinaryData, true);
+    }
+
+    private static function isBinaryString(string $value): bool
+    {
+        return !preg_match('//u', $value) || preg_match('/[^\x00\x07-\x0d\x1B\x20-\xff]/', $value);
+    }
+
+    /**
+     * Gets a regex that matches a YAML date.
+     *
+     * @see http://www.yaml.org/spec/1.2/spec.html#id2761573
+     */
+    private static function getTimestampRegex(): string
+    {
+        return <<<EOF
+        ~^
+        (?P<year>[0-9][0-9][0-9][0-9])
+        -(?P<month>[0-9][0-9]?)
+        -(?P<day>[0-9][0-9]?)
+        (?:(?:[Tt]|[ \t]+)
+        (?P<hour>[0-9][0-9]?)
+        :(?P<minute>[0-9][0-9])
+        :(?P<second>[0-9][0-9])
+        (?:\.(?P<fraction>[0-9]*))?
+        (?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?)
+        (?::(?P<tz_minute>[0-9][0-9]))?))?)?
+        $~x
+EOF;
+    }
+
+    /**
+     * Gets a regex that matches a YAML number in hexadecimal notation.
+     */
+    private static function getHexRegex(): string
+    {
+        return '~^0x[0-9a-f_]++$~i';
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/LICENSE
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/LICENSE	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/LICENSE	(revision 8435)
@@ -0,0 +1,19 @@
+Copyright (c) 2004-present Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/Parser.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/Parser.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/Parser.php	(revision 8435)
@@ -0,0 +1,1249 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Yaml;
+
+use Symfony\Component\Yaml\Exception\ParseException;
+use Symfony\Component\Yaml\Tag\TaggedValue;
+
+/**
+ * Parser parses YAML strings to convert them to PHP arrays.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @final
+ */
+class Parser
+{
+    public const TAG_PATTERN = '(?P<tag>![\w!.\/:-]+)';
+    public const BLOCK_SCALAR_HEADER_PATTERN = '(?P<separator>\||>)(?P<modifiers>\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P<comments> +#.*)?';
+    public const REFERENCE_PATTERN = '#^&(?P<ref>[^ ]++) *+(?P<value>.*)#u';
+
+    private ?string $filename = null;
+    private int $offset = 0;
+    private int $numberOfParsedLines = 0;
+    private ?int $totalNumberOfLines = null;
+    private array $lines = [];
+    private int $currentLineNb = -1;
+    private string $currentLine = '';
+    private array $refs = [];
+    private array $skippedLineNumbers = [];
+    private array $locallySkippedLineNumbers = [];
+    private array $refsBeingParsed = [];
+
+    /**
+     * Parses a YAML file into a PHP value.
+     *
+     * @param string $filename The path to the YAML file to be parsed
+     * @param int    $flags    A bit field of Yaml::PARSE_* constants to customize the YAML parser behavior
+     *
+     * @throws ParseException If the file could not be read or the YAML is not valid
+     */
+    public function parseFile(string $filename, int $flags = 0): mixed
+    {
+        if (!is_file($filename)) {
+            throw new ParseException(sprintf('File "%s" does not exist.', $filename));
+        }
+
+        if (!is_readable($filename)) {
+            throw new ParseException(sprintf('File "%s" cannot be read.', $filename));
+        }
+
+        $this->filename = $filename;
+
+        try {
+            return $this->parse(file_get_contents($filename), $flags);
+        } finally {
+            $this->filename = null;
+        }
+    }
+
+    /**
+     * Parses a YAML string to a PHP value.
+     *
+     * @param string $value A YAML string
+     * @param int    $flags A bit field of Yaml::PARSE_* constants to customize the YAML parser behavior
+     *
+     * @throws ParseException If the YAML is not valid
+     */
+    public function parse(string $value, int $flags = 0): mixed
+    {
+        if (false === preg_match('//u', $value)) {
+            throw new ParseException('The YAML value does not appear to be valid UTF-8.', -1, null, $this->filename);
+        }
+
+        $this->refs = [];
+
+        try {
+            $data = $this->doParse($value, $flags);
+        } finally {
+            $this->refsBeingParsed = [];
+            $this->offset = 0;
+            $this->lines = [];
+            $this->currentLine = '';
+            $this->numberOfParsedLines = 0;
+            $this->refs = [];
+            $this->skippedLineNumbers = [];
+            $this->locallySkippedLineNumbers = [];
+            $this->totalNumberOfLines = null;
+        }
+
+        return $data;
+    }
+
+    private function doParse(string $value, int $flags): mixed
+    {
+        $this->currentLineNb = -1;
+        $this->currentLine = '';
+        $value = $this->cleanup($value);
+        $this->lines = explode("\n", $value);
+        $this->numberOfParsedLines = \count($this->lines);
+        $this->locallySkippedLineNumbers = [];
+        $this->totalNumberOfLines ??= $this->numberOfParsedLines;
+
+        if (!$this->moveToNextLine()) {
+            return null;
+        }
+
+        $data = [];
+        $context = null;
+        $allowOverwrite = false;
+
+        while ($this->isCurrentLineEmpty()) {
+            if (!$this->moveToNextLine()) {
+                return null;
+            }
+        }
+
+        // Resolves the tag and returns if end of the document
+        if (null !== ($tag = $this->getLineTag($this->currentLine, $flags, false)) && !$this->moveToNextLine()) {
+            return new TaggedValue($tag, '');
+        }
+
+        do {
+            if ($this->isCurrentLineEmpty()) {
+                continue;
+            }
+
+            // tab?
+            if ("\t" === $this->currentLine[0]) {
+                throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+            }
+
+            Inline::initialize($flags, $this->getRealCurrentLineNb(), $this->filename);
+
+            $isRef = $mergeNode = false;
+            if ('-' === $this->currentLine[0] && self::preg_match('#^\-((?P<leadspaces>\s+)(?P<value>.+))?$#u', rtrim($this->currentLine), $values)) {
+                if ($context && 'mapping' == $context) {
+                    throw new ParseException('You cannot define a sequence item when in a mapping.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+                }
+                $context = 'sequence';
+
+                if (isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) {
+                    $isRef = $matches['ref'];
+                    $this->refsBeingParsed[] = $isRef;
+                    $values['value'] = $matches['value'];
+                }
+
+                if (isset($values['value'][1]) && '?' === $values['value'][0] && ' ' === $values['value'][1]) {
+                    throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
+                }
+
+                // array
+                if (isset($values['value']) && str_starts_with(ltrim($values['value'], ' '), '-')) {
+                    // Inline first child
+                    $currentLineNumber = $this->getRealCurrentLineNb();
+
+                    $sequenceIndentation = \strlen($values['leadspaces']) + 1;
+                    $sequenceYaml = substr($this->currentLine, $sequenceIndentation);
+                    $sequenceYaml .= "\n".$this->getNextEmbedBlock($sequenceIndentation, true);
+
+                    $data[] = $this->parseBlock($currentLineNumber, rtrim($sequenceYaml), $flags);
+                } elseif (!isset($values['value']) || '' == trim($values['value'], ' ') || str_starts_with(ltrim($values['value'], ' '), '#')) {
+                    $data[] = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true) ?? '', $flags);
+                } elseif (null !== $subTag = $this->getLineTag(ltrim($values['value'], ' '), $flags)) {
+                    $data[] = new TaggedValue(
+                        $subTag,
+                        $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true), $flags)
+                    );
+                } else {
+                    if (
+                        isset($values['leadspaces'])
+                        && (
+                            '!' === $values['value'][0]
+                            || self::preg_match('#^(?P<key>'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P<value>.+?))?\s*$#u', $this->trimTag($values['value']), $matches)
+                        )
+                    ) {
+                        $block = $values['value'];
+                        if ($this->isNextLineIndented() || isset($matches['value']) && '>-' === $matches['value']) {
+                            $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + \strlen($values['leadspaces']) + 1);
+                        }
+
+                        $data[] = $this->parseBlock($this->getRealCurrentLineNb(), $block, $flags);
+                    } else {
+                        $data[] = $this->parseValue($values['value'], $flags, $context);
+                    }
+                }
+                if ($isRef) {
+                    $this->refs[$isRef] = end($data);
+                    array_pop($this->refsBeingParsed);
+                }
+            } elseif (
+                // @todo in 7.0 remove legacy "(?:!?!php/const:)?"
+                self::preg_match('#^(?P<key>(?:![^\s]++\s++)?(?:'.Inline::REGEX_QUOTED_STRING.'|(?:!?!php/const:)?[^ \'"\[\{!].*?)) *\:(( |\t)++(?P<value>.+))?$#u', rtrim($this->currentLine), $values)
+                && (!str_contains($values['key'], ' #') || \in_array($values['key'][0], ['"', "'"]))
+            ) {
+                if (str_starts_with($values['key'], '!php/const:')) {
+                    trigger_deprecation('symfony/yaml', '6.2', 'YAML syntax for key "%s" is deprecated and replaced by "!php/const %s".', $values['key'], substr($values['key'], 11));
+                }
+
+                if ($context && 'sequence' == $context) {
+                    throw new ParseException('You cannot define a mapping item when in a sequence.', $this->currentLineNb + 1, $this->currentLine, $this->filename);
+                }
+                $context = 'mapping';
+
+                try {
+                    $key = Inline::parseScalar($values['key']);
+                } catch (ParseException $e) {
+                    $e->setParsedLine($this->getRealCurrentLineNb() + 1);
+                    $e->setSnippet($this->currentLine);
+
+                    throw $e;
+                }
+
+                if (!\is_string($key) && !\is_int($key)) {
+                    throw new ParseException((is_numeric($key) ? 'Numeric' : 'Non-string').' keys are not supported. Quote your evaluable mapping keys instead.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
+                }
+
+                // Convert float keys to strings, to avoid being converted to integers by PHP
+                if (\is_float($key)) {
+                    $key = (string) $key;
+                }
+
+                if ('<<' === $key && (!isset($values['value']) || '&' !== $values['value'][0] || !self::preg_match('#^&(?P<ref>[^ ]+)#u', $values['value'], $refMatches))) {
+                    $mergeNode = true;
+                    $allowOverwrite = true;
+                    if (isset($values['value'][0]) && '*' === $values['value'][0]) {
+                        $refName = substr(rtrim($values['value']), 1);
+                        if (!\array_key_exists($refName, $this->refs)) {
+                            if (false !== $pos = array_search($refName, $this->refsBeingParsed, true)) {
+                                throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$refName])), $refName), $this->currentLineNb + 1, $this->currentLine, $this->filename);
+                            }
+
+                            throw new ParseException(sprintf('Reference "%s" does not exist.', $refName), $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+                        }
+
+                        $refValue = $this->refs[$refName];
+
+                        if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $refValue instanceof \stdClass) {
+                            $refValue = (array) $refValue;
+                        }
+
+                        if (!\is_array($refValue)) {
+                            throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+                        }
+
+                        $data += $refValue; // array union
+                    } else {
+                        if (isset($values['value']) && '' !== $values['value']) {
+                            $value = $values['value'];
+                        } else {
+                            $value = $this->getNextEmbedBlock();
+                        }
+                        $parsed = $this->parseBlock($this->getRealCurrentLineNb() + 1, $value, $flags);
+
+                        if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsed instanceof \stdClass) {
+                            $parsed = (array) $parsed;
+                        }
+
+                        if (!\is_array($parsed)) {
+                            throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+                        }
+
+                        if (isset($parsed[0])) {
+                            // If the value associated with the merge key is a sequence, then this sequence is expected to contain mapping nodes
+                            // and each of these nodes is merged in turn according to its order in the sequence. Keys in mapping nodes earlier
+                            // in the sequence override keys specified in later mapping nodes.
+                            foreach ($parsed as $parsedItem) {
+                                if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsedItem instanceof \stdClass) {
+                                    $parsedItem = (array) $parsedItem;
+                                }
+
+                                if (!\is_array($parsedItem)) {
+                                    throw new ParseException('Merge items must be arrays.', $this->getRealCurrentLineNb() + 1, $parsedItem, $this->filename);
+                                }
+
+                                $data += $parsedItem; // array union
+                            }
+                        } else {
+                            // If the value associated with the key is a single mapping node, each of its key/value pairs is inserted into the
+                            // current mapping, unless the key already exists in it.
+                            $data += $parsed; // array union
+                        }
+                    }
+                } elseif ('<<' !== $key && isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) {
+                    $isRef = $matches['ref'];
+                    $this->refsBeingParsed[] = $isRef;
+                    $values['value'] = $matches['value'];
+                }
+
+                $subTag = null;
+                if ($mergeNode) {
+                    // Merge keys
+                } elseif (!isset($values['value']) || '' === $values['value'] || str_starts_with($values['value'], '#') || (null !== $subTag = $this->getLineTag($values['value'], $flags)) || '<<' === $key) {
+                    // hash
+                    // if next line is less indented or equal, then it means that the current value is null
+                    if (!$this->isNextLineIndented() && !$this->isNextLineUnIndentedCollection()) {
+                        // Spec: Keys MUST be unique; first one wins.
+                        // But overwriting is allowed when a merge node is used in current block.
+                        if ($allowOverwrite || !isset($data[$key])) {
+                            if (null !== $subTag) {
+                                $data[$key] = new TaggedValue($subTag, '');
+                            } else {
+                                $data[$key] = null;
+                            }
+                        } else {
+                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine);
+                        }
+                    } else {
+                        // remember the parsed line number here in case we need it to provide some contexts in error messages below
+                        $realCurrentLineNbKey = $this->getRealCurrentLineNb();
+                        $value = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(), $flags);
+                        if ('<<' === $key) {
+                            $this->refs[$refMatches['ref']] = $value;
+
+                            if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $value instanceof \stdClass) {
+                                $value = (array) $value;
+                            }
+
+                            $data += $value;
+                        } elseif ($allowOverwrite || !isset($data[$key])) {
+                            // Spec: Keys MUST be unique; first one wins.
+                            // But overwriting is allowed when a merge node is used in current block.
+                            if (null !== $subTag) {
+                                $data[$key] = new TaggedValue($subTag, $value);
+                            } else {
+                                $data[$key] = $value;
+                            }
+                        } else {
+                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $realCurrentLineNbKey + 1, $this->currentLine);
+                        }
+                    }
+                } else {
+                    $value = $this->parseValue(rtrim($values['value']), $flags, $context);
+                    // Spec: Keys MUST be unique; first one wins.
+                    // But overwriting is allowed when a merge node is used in current block.
+                    if ($allowOverwrite || !isset($data[$key])) {
+                        $data[$key] = $value;
+                    } else {
+                        throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine);
+                    }
+                }
+                if ($isRef) {
+                    $this->refs[$isRef] = $data[$key];
+                    array_pop($this->refsBeingParsed);
+                }
+            } elseif ('"' === $this->currentLine[0] || "'" === $this->currentLine[0]) {
+                if (null !== $context) {
+                    throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+                }
+
+                try {
+                    return Inline::parse($this->lexInlineQuotedString(), $flags, $this->refs);
+                } catch (ParseException $e) {
+                    $e->setParsedLine($this->getRealCurrentLineNb() + 1);
+                    $e->setSnippet($this->currentLine);
+
+                    throw $e;
+                }
+            } elseif ('{' === $this->currentLine[0]) {
+                if (null !== $context) {
+                    throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+                }
+
+                try {
+                    $parsedMapping = Inline::parse($this->lexInlineMapping(), $flags, $this->refs);
+
+                    while ($this->moveToNextLine()) {
+                        if (!$this->isCurrentLineEmpty()) {
+                            throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+                        }
+                    }
+
+                    return $parsedMapping;
+                } catch (ParseException $e) {
+                    $e->setParsedLine($this->getRealCurrentLineNb() + 1);
+                    $e->setSnippet($this->currentLine);
+
+                    throw $e;
+                }
+            } elseif ('[' === $this->currentLine[0]) {
+                if (null !== $context) {
+                    throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+                }
+
+                try {
+                    $parsedSequence = Inline::parse($this->lexInlineSequence(), $flags, $this->refs);
+
+                    while ($this->moveToNextLine()) {
+                        if (!$this->isCurrentLineEmpty()) {
+                            throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+                        }
+                    }
+
+                    return $parsedSequence;
+                } catch (ParseException $e) {
+                    $e->setParsedLine($this->getRealCurrentLineNb() + 1);
+                    $e->setSnippet($this->currentLine);
+
+                    throw $e;
+                }
+            } else {
+                // multiple documents are not supported
+                if ('---' === $this->currentLine) {
+                    throw new ParseException('Multiple documents are not supported.', $this->currentLineNb + 1, $this->currentLine, $this->filename);
+                }
+
+                if ($deprecatedUsage = (isset($this->currentLine[1]) && '?' === $this->currentLine[0] && ' ' === $this->currentLine[1])) {
+                    throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
+                }
+
+                // 1-liner optionally followed by newline(s)
+                if (\is_string($value) && $this->lines[0] === trim($value)) {
+                    try {
+                        $value = Inline::parse($this->lines[0], $flags, $this->refs);
+                    } catch (ParseException $e) {
+                        $e->setParsedLine($this->getRealCurrentLineNb() + 1);
+                        $e->setSnippet($this->currentLine);
+
+                        throw $e;
+                    }
+
+                    return $value;
+                }
+
+                // try to parse the value as a multi-line string as a last resort
+                if (0 === $this->currentLineNb) {
+                    $previousLineWasNewline = false;
+                    $previousLineWasTerminatedWithBackslash = false;
+                    $value = '';
+
+                    foreach ($this->lines as $line) {
+                        $trimmedLine = trim($line);
+                        if ('#' === ($trimmedLine[0] ?? '')) {
+                            continue;
+                        }
+                        // If the indentation is not consistent at offset 0, it is to be considered as a ParseError
+                        if (0 === $this->offset && !$deprecatedUsage && isset($line[0]) && ' ' === $line[0]) {
+                            throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+                        }
+
+                        if (str_contains($line, ': ')) {
+                            throw new ParseException('Mapping values are not allowed in multi-line blocks.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+                        }
+
+                        if ('' === $trimmedLine) {
+                            $value .= "\n";
+                        } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) {
+                            $value .= ' ';
+                        }
+
+                        if ('' !== $trimmedLine && str_ends_with($line, '\\')) {
+                            $value .= ltrim(substr($line, 0, -1));
+                        } elseif ('' !== $trimmedLine) {
+                            $value .= $trimmedLine;
+                        }
+
+                        if ('' === $trimmedLine) {
+                            $previousLineWasNewline = true;
+                            $previousLineWasTerminatedWithBackslash = false;
+                        } elseif (str_ends_with($line, '\\')) {
+                            $previousLineWasNewline = false;
+                            $previousLineWasTerminatedWithBackslash = true;
+                        } else {
+                            $previousLineWasNewline = false;
+                            $previousLineWasTerminatedWithBackslash = false;
+                        }
+                    }
+
+                    try {
+                        return Inline::parse(trim($value));
+                    } catch (ParseException) {
+                        // fall-through to the ParseException thrown below
+                    }
+                }
+
+                throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+            }
+        } while ($this->moveToNextLine());
+
+        if (null !== $tag) {
+            $data = new TaggedValue($tag, $data);
+        }
+
+        if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && 'mapping' === $context && !\is_object($data)) {
+            $object = new \stdClass();
+
+            foreach ($data as $key => $value) {
+                $object->$key = $value;
+            }
+
+            $data = $object;
+        }
+
+        return empty($data) ? null : $data;
+    }
+
+    private function parseBlock(int $offset, string $yaml, int $flags): mixed
+    {
+        $skippedLineNumbers = $this->skippedLineNumbers;
+
+        foreach ($this->locallySkippedLineNumbers as $lineNumber) {
+            if ($lineNumber < $offset) {
+                continue;
+            }
+
+            $skippedLineNumbers[] = $lineNumber;
+        }
+
+        $parser = new self();
+        $parser->offset = $offset;
+        $parser->totalNumberOfLines = $this->totalNumberOfLines;
+        $parser->skippedLineNumbers = $skippedLineNumbers;
+        $parser->refs = &$this->refs;
+        $parser->refsBeingParsed = $this->refsBeingParsed;
+
+        return $parser->doParse($yaml, $flags);
+    }
+
+    /**
+     * Returns the current line number (takes the offset into account).
+     *
+     * @internal
+     */
+    public function getRealCurrentLineNb(): int
+    {
+        $realCurrentLineNumber = $this->currentLineNb + $this->offset;
+
+        foreach ($this->skippedLineNumbers as $skippedLineNumber) {
+            if ($skippedLineNumber > $realCurrentLineNumber) {
+                break;
+            }
+
+            ++$realCurrentLineNumber;
+        }
+
+        return $realCurrentLineNumber;
+    }
+
+    private function getCurrentLineIndentation(): int
+    {
+        if (' ' !== ($this->currentLine[0] ?? '')) {
+            return 0;
+        }
+
+        return \strlen($this->currentLine) - \strlen(ltrim($this->currentLine, ' '));
+    }
+
+    /**
+     * Returns the next embed block of YAML.
+     *
+     * @param int|null $indentation The indent level at which the block is to be read, or null for default
+     * @param bool     $inSequence  True if the enclosing data structure is a sequence
+     *
+     * @throws ParseException When indentation problem are detected
+     */
+    private function getNextEmbedBlock(?int $indentation = null, bool $inSequence = false): string
+    {
+        $oldLineIndentation = $this->getCurrentLineIndentation();
+
+        if (!$this->moveToNextLine()) {
+            return '';
+        }
+
+        if (null === $indentation) {
+            $newIndent = null;
+            $movements = 0;
+
+            do {
+                $EOF = false;
+
+                // empty and comment-like lines do not influence the indentation depth
+                if ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) {
+                    $EOF = !$this->moveToNextLine();
+
+                    if (!$EOF) {
+                        ++$movements;
+                    }
+                } else {
+                    $newIndent = $this->getCurrentLineIndentation();
+                }
+            } while (!$EOF && null === $newIndent);
+
+            for ($i = 0; $i < $movements; ++$i) {
+                $this->moveToPreviousLine();
+            }
+
+            $unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem();
+
+            if (!$this->isCurrentLineEmpty() && 0 === $newIndent && !$unindentedEmbedBlock) {
+                throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+            }
+        } else {
+            $newIndent = $indentation;
+        }
+
+        $data = [];
+
+        if ($this->getCurrentLineIndentation() >= $newIndent) {
+            $data[] = substr($this->currentLine, $newIndent ?? 0);
+        } elseif ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) {
+            $data[] = $this->currentLine;
+        } else {
+            $this->moveToPreviousLine();
+
+            return '';
+        }
+
+        if ($inSequence && $oldLineIndentation === $newIndent && isset($data[0][0]) && '-' === $data[0][0]) {
+            // the previous line contained a dash but no item content, this line is a sequence item with the same indentation
+            // and therefore no nested list or mapping
+            $this->moveToPreviousLine();
+
+            return '';
+        }
+
+        $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem();
+        $isItComment = $this->isCurrentLineComment();
+
+        while ($this->moveToNextLine()) {
+            if ($isItComment && !$isItUnindentedCollection) {
+                $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem();
+                $isItComment = $this->isCurrentLineComment();
+            }
+
+            $indent = $this->getCurrentLineIndentation();
+
+            if ($isItUnindentedCollection && !$this->isCurrentLineEmpty() && !$this->isStringUnIndentedCollectionItem() && $newIndent === $indent) {
+                $this->moveToPreviousLine();
+                break;
+            }
+
+            if ($this->isCurrentLineBlank()) {
+                $data[] = substr($this->currentLine, $newIndent ?? 0);
+                continue;
+            }
+
+            if ($indent >= $newIndent) {
+                $data[] = substr($this->currentLine, $newIndent ?? 0);
+            } elseif ($this->isCurrentLineComment()) {
+                $data[] = $this->currentLine;
+            } elseif (0 == $indent) {
+                $this->moveToPreviousLine();
+
+                break;
+            } else {
+                throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+            }
+        }
+
+        return implode("\n", $data);
+    }
+
+    private function hasMoreLines(): bool
+    {
+        return (\count($this->lines) - 1) > $this->currentLineNb;
+    }
+
+    /**
+     * Moves the parser to the next line.
+     */
+    private function moveToNextLine(): bool
+    {
+        if ($this->currentLineNb >= $this->numberOfParsedLines - 1) {
+            return false;
+        }
+
+        $this->currentLine = $this->lines[++$this->currentLineNb];
+
+        return true;
+    }
+
+    /**
+     * Moves the parser to the previous line.
+     */
+    private function moveToPreviousLine(): bool
+    {
+        if ($this->currentLineNb < 1) {
+            return false;
+        }
+
+        $this->currentLine = $this->lines[--$this->currentLineNb];
+
+        return true;
+    }
+
+    /**
+     * Parses a YAML value.
+     *
+     * @param string $value   A YAML value
+     * @param int    $flags   A bit field of Yaml::PARSE_* constants to customize the YAML parser behavior
+     * @param string $context The parser context (either sequence or mapping)
+     *
+     * @throws ParseException When reference does not exist
+     */
+    private function parseValue(string $value, int $flags, string $context): mixed
+    {
+        if (str_starts_with($value, '*')) {
+            if (false !== $pos = strpos($value, '#')) {
+                $value = substr($value, 1, $pos - 2);
+            } else {
+                $value = substr($value, 1);
+            }
+
+            if (!\array_key_exists($value, $this->refs)) {
+                if (false !== $pos = array_search($value, $this->refsBeingParsed, true)) {
+                    throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$value])), $value), $this->currentLineNb + 1, $this->currentLine, $this->filename);
+                }
+
+                throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLineNb + 1, $this->currentLine, $this->filename);
+            }
+
+            return $this->refs[$value];
+        }
+
+        if (\in_array($value[0], ['!', '|', '>'], true) && self::preg_match('/^(?:'.self::TAG_PATTERN.' +)?'.self::BLOCK_SCALAR_HEADER_PATTERN.'$/', $value, $matches)) {
+            $modifiers = $matches['modifiers'] ?? '';
+
+            $data = $this->parseBlockScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), abs((int) $modifiers));
+
+            if ('' !== $matches['tag'] && '!' !== $matches['tag']) {
+                if ('!!binary' === $matches['tag']) {
+                    return Inline::evaluateBinaryScalar($data);
+                }
+
+                return new TaggedValue(substr($matches['tag'], 1), $data);
+            }
+
+            return $data;
+        }
+
+        try {
+            if ('' !== $value && '{' === $value[0]) {
+                $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value));
+
+                return Inline::parse($this->lexInlineMapping($cursor), $flags, $this->refs);
+            } elseif ('' !== $value && '[' === $value[0]) {
+                $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value));
+
+                return Inline::parse($this->lexInlineSequence($cursor), $flags, $this->refs);
+            }
+
+            switch ($value[0] ?? '') {
+                case '"':
+                case "'":
+                    $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value));
+                    $parsedValue = Inline::parse($this->lexInlineQuotedString($cursor), $flags, $this->refs);
+
+                    if (isset($this->currentLine[$cursor]) && preg_replace('/\s*(#.*)?$/A', '', substr($this->currentLine, $cursor))) {
+                        throw new ParseException(sprintf('Unexpected characters near "%s".', substr($this->currentLine, $cursor)));
+                    }
+
+                    return $parsedValue;
+                default:
+                    $lines = [];
+
+                    while ($this->moveToNextLine()) {
+                        // unquoted strings end before the first unindented line
+                        if (0 === $this->getCurrentLineIndentation()) {
+                            $this->moveToPreviousLine();
+
+                            break;
+                        }
+
+                        $lines[] = trim($this->currentLine);
+                    }
+
+                    for ($i = 0, $linesCount = \count($lines), $previousLineBlank = false; $i < $linesCount; ++$i) {
+                        if ('' === $lines[$i]) {
+                            $value .= "\n";
+                            $previousLineBlank = true;
+                        } elseif ($previousLineBlank) {
+                            $value .= $lines[$i];
+                            $previousLineBlank = false;
+                        } else {
+                            $value .= ' '.$lines[$i];
+                            $previousLineBlank = false;
+                        }
+                    }
+
+                    Inline::$parsedLineNumber = $this->getRealCurrentLineNb();
+
+                    $parsedValue = Inline::parse($value, $flags, $this->refs);
+
+                    if ('mapping' === $context && \is_string($parsedValue) && '"' !== $value[0] && "'" !== $value[0] && '[' !== $value[0] && '{' !== $value[0] && '!' !== $value[0] && str_contains($parsedValue, ': ')) {
+                        throw new ParseException('A colon cannot be used in an unquoted mapping value.', $this->getRealCurrentLineNb() + 1, $value, $this->filename);
+                    }
+
+                    return $parsedValue;
+            }
+        } catch (ParseException $e) {
+            $e->setParsedLine($this->getRealCurrentLineNb() + 1);
+            $e->setSnippet($this->currentLine);
+
+            throw $e;
+        }
+    }
+
+    /**
+     * Parses a block scalar.
+     *
+     * @param string $style       The style indicator that was used to begin this block scalar (| or >)
+     * @param string $chomping    The chomping indicator that was used to begin this block scalar (+ or -)
+     * @param int    $indentation The indentation indicator that was used to begin this block scalar
+     */
+    private function parseBlockScalar(string $style, string $chomping = '', int $indentation = 0): string
+    {
+        $notEOF = $this->moveToNextLine();
+        if (!$notEOF) {
+            return '';
+        }
+
+        $isCurrentLineBlank = $this->isCurrentLineBlank();
+        $blockLines = [];
+
+        // leading blank lines are consumed before determining indentation
+        while ($notEOF && $isCurrentLineBlank) {
+            // newline only if not EOF
+            if ($notEOF = $this->moveToNextLine()) {
+                $blockLines[] = '';
+                $isCurrentLineBlank = $this->isCurrentLineBlank();
+            }
+        }
+
+        // determine indentation if not specified
+        if (0 === $indentation) {
+            $currentLineLength = \strlen($this->currentLine);
+
+            for ($i = 0; $i < $currentLineLength && ' ' === $this->currentLine[$i]; ++$i) {
+                ++$indentation;
+            }
+        }
+
+        if ($indentation > 0) {
+            $pattern = sprintf('/^ {%d}(.*)$/', $indentation);
+
+            while (
+                $notEOF && (
+                    $isCurrentLineBlank
+                    || self::preg_match($pattern, $this->currentLine, $matches)
+                )
+            ) {
+                if ($isCurrentLineBlank && \strlen($this->currentLine) > $indentation) {
+                    $blockLines[] = substr($this->currentLine, $indentation);
+                } elseif ($isCurrentLineBlank) {
+                    $blockLines[] = '';
+                } else {
+                    $blockLines[] = $matches[1];
+                }
+
+                // newline only if not EOF
+                if ($notEOF = $this->moveToNextLine()) {
+                    $isCurrentLineBlank = $this->isCurrentLineBlank();
+                }
+            }
+        } elseif ($notEOF) {
+            $blockLines[] = '';
+        }
+
+        if ($notEOF) {
+            $blockLines[] = '';
+            $this->moveToPreviousLine();
+        } elseif (!$notEOF && !$this->isCurrentLineLastLineInDocument()) {
+            $blockLines[] = '';
+        }
+
+        // folded style
+        if ('>' === $style) {
+            $text = '';
+            $previousLineIndented = false;
+            $previousLineBlank = false;
+
+            for ($i = 0, $blockLinesCount = \count($blockLines); $i < $blockLinesCount; ++$i) {
+                if ('' === $blockLines[$i]) {
+                    $text .= "\n";
+                    $previousLineIndented = false;
+                    $previousLineBlank = true;
+                } elseif (' ' === $blockLines[$i][0]) {
+                    $text .= "\n".$blockLines[$i];
+                    $previousLineIndented = true;
+                    $previousLineBlank = false;
+                } elseif ($previousLineIndented) {
+                    $text .= "\n".$blockLines[$i];
+                    $previousLineIndented = false;
+                    $previousLineBlank = false;
+                } elseif ($previousLineBlank || 0 === $i) {
+                    $text .= $blockLines[$i];
+                    $previousLineIndented = false;
+                    $previousLineBlank = false;
+                } else {
+                    $text .= ' '.$blockLines[$i];
+                    $previousLineIndented = false;
+                    $previousLineBlank = false;
+                }
+            }
+        } else {
+            $text = implode("\n", $blockLines);
+        }
+
+        // deal with trailing newlines
+        if ('' === $chomping) {
+            $text = preg_replace('/\n+$/', "\n", $text);
+        } elseif ('-' === $chomping) {
+            $text = preg_replace('/\n+$/', '', $text);
+        }
+
+        return $text;
+    }
+
+    /**
+     * Returns true if the next line is indented.
+     */
+    private function isNextLineIndented(): bool
+    {
+        $currentIndentation = $this->getCurrentLineIndentation();
+        $movements = 0;
+
+        do {
+            $EOF = !$this->moveToNextLine();
+
+            if (!$EOF) {
+                ++$movements;
+            }
+        } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()));
+
+        if ($EOF) {
+            for ($i = 0; $i < $movements; ++$i) {
+                $this->moveToPreviousLine();
+            }
+
+            return false;
+        }
+
+        $ret = $this->getCurrentLineIndentation() > $currentIndentation;
+
+        for ($i = 0; $i < $movements; ++$i) {
+            $this->moveToPreviousLine();
+        }
+
+        return $ret;
+    }
+
+    private function isCurrentLineEmpty(): bool
+    {
+        return $this->isCurrentLineBlank() || $this->isCurrentLineComment();
+    }
+
+    private function isCurrentLineBlank(): bool
+    {
+        return '' === $this->currentLine || '' === trim($this->currentLine, ' ');
+    }
+
+    private function isCurrentLineComment(): bool
+    {
+        // checking explicitly the first char of the trim is faster than loops or strpos
+        $ltrimmedLine = '' !== $this->currentLine && ' ' === $this->currentLine[0] ? ltrim($this->currentLine, ' ') : $this->currentLine;
+
+        return '' !== $ltrimmedLine && '#' === $ltrimmedLine[0];
+    }
+
+    private function isCurrentLineLastLineInDocument(): bool
+    {
+        return ($this->offset + $this->currentLineNb) >= ($this->totalNumberOfLines - 1);
+    }
+
+    private function cleanup(string $value): string
+    {
+        $value = str_replace(["\r\n", "\r"], "\n", $value);
+
+        // strip YAML header
+        $count = 0;
+        $value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#u', '', $value, -1, $count);
+        $this->offset += $count;
+
+        // remove leading comments
+        $trimmedValue = preg_replace('#^(\#.*?\n)+#s', '', $value, -1, $count);
+        if (1 === $count) {
+            // items have been removed, update the offset
+            $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n");
+            $value = $trimmedValue;
+        }
+
+        // remove start of the document marker (---)
+        $trimmedValue = preg_replace('#^\-\-\-.*?\n#s', '', $value, -1, $count);
+        if (1 === $count) {
+            // items have been removed, update the offset
+            $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n");
+            $value = $trimmedValue;
+
+            // remove end of the document marker (...)
+            $value = preg_replace('#\.\.\.\s*$#', '', $value);
+        }
+
+        return $value;
+    }
+
+    private function isNextLineUnIndentedCollection(): bool
+    {
+        $currentIndentation = $this->getCurrentLineIndentation();
+        $movements = 0;
+
+        do {
+            $EOF = !$this->moveToNextLine();
+
+            if (!$EOF) {
+                ++$movements;
+            }
+        } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()));
+
+        if ($EOF) {
+            return false;
+        }
+
+        $ret = $this->getCurrentLineIndentation() === $currentIndentation && $this->isStringUnIndentedCollectionItem();
+
+        for ($i = 0; $i < $movements; ++$i) {
+            $this->moveToPreviousLine();
+        }
+
+        return $ret;
+    }
+
+    private function isStringUnIndentedCollectionItem(): bool
+    {
+        return '-' === rtrim($this->currentLine) || str_starts_with($this->currentLine, '- ');
+    }
+
+    /**
+     * A local wrapper for "preg_match" which will throw a ParseException if there
+     * is an internal error in the PCRE engine.
+     *
+     * This avoids us needing to check for "false" every time PCRE is used
+     * in the YAML engine
+     *
+     * @throws ParseException on a PCRE internal error
+     *
+     * @internal
+     */
+    public static function preg_match(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): int
+    {
+        if (false === $ret = preg_match($pattern, $subject, $matches, $flags, $offset)) {
+            throw new ParseException(preg_last_error_msg());
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Trim the tag on top of the value.
+     *
+     * Prevent values such as "!foo {quz: bar}" to be considered as
+     * a mapping block.
+     */
+    private function trimTag(string $value): string
+    {
+        if ('!' === $value[0]) {
+            return ltrim(substr($value, 1, strcspn($value, " \r\n", 1)), ' ');
+        }
+
+        return $value;
+    }
+
+    private function getLineTag(string $value, int $flags, bool $nextLineCheck = true): ?string
+    {
+        if ('' === $value || '!' !== $value[0] || 1 !== self::preg_match('/^'.self::TAG_PATTERN.' *( +#.*)?$/', $value, $matches)) {
+            return null;
+        }
+
+        if ($nextLineCheck && !$this->isNextLineIndented()) {
+            return null;
+        }
+
+        $tag = substr($matches['tag'], 1);
+
+        // Built-in tags
+        if ($tag && '!' === $tag[0]) {
+            throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), $this->getRealCurrentLineNb() + 1, $value, $this->filename);
+        }
+
+        if (Yaml::PARSE_CUSTOM_TAGS & $flags) {
+            return $tag;
+        }
+
+        throw new ParseException(sprintf('Tags support is not enabled. You must use the flag "Yaml::PARSE_CUSTOM_TAGS" to use "%s".', $matches['tag']), $this->getRealCurrentLineNb() + 1, $value, $this->filename);
+    }
+
+    private function lexInlineQuotedString(int &$cursor = 0): string
+    {
+        $quotation = $this->currentLine[$cursor];
+        $value = $quotation;
+        ++$cursor;
+
+        $previousLineWasNewline = true;
+        $previousLineWasTerminatedWithBackslash = false;
+        $lineNumber = 0;
+
+        do {
+            if (++$lineNumber > 1) {
+                $cursor += strspn($this->currentLine, ' ', $cursor);
+            }
+
+            if ($this->isCurrentLineBlank()) {
+                $value .= "\n";
+            } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) {
+                $value .= ' ';
+            }
+
+            for (; \strlen($this->currentLine) > $cursor; ++$cursor) {
+                switch ($this->currentLine[$cursor]) {
+                    case '\\':
+                        if ("'" === $quotation) {
+                            $value .= '\\';
+                        } elseif (isset($this->currentLine[++$cursor])) {
+                            $value .= '\\'.$this->currentLine[$cursor];
+                        }
+
+                        break;
+                    case $quotation:
+                        ++$cursor;
+
+                        if ("'" === $quotation && isset($this->currentLine[$cursor]) && "'" === $this->currentLine[$cursor]) {
+                            $value .= "''";
+                            break;
+                        }
+
+                        return $value.$quotation;
+                    default:
+                        $value .= $this->currentLine[$cursor];
+                }
+            }
+
+            if ($this->isCurrentLineBlank()) {
+                $previousLineWasNewline = true;
+                $previousLineWasTerminatedWithBackslash = false;
+            } elseif ('\\' === $this->currentLine[-1]) {
+                $previousLineWasNewline = false;
+                $previousLineWasTerminatedWithBackslash = true;
+            } else {
+                $previousLineWasNewline = false;
+                $previousLineWasTerminatedWithBackslash = false;
+            }
+
+            if ($this->hasMoreLines()) {
+                $cursor = 0;
+            }
+        } while ($this->moveToNextLine());
+
+        throw new ParseException('Malformed inline YAML string.');
+    }
+
+    private function lexUnquotedString(int &$cursor): string
+    {
+        $offset = $cursor;
+        $cursor += strcspn($this->currentLine, '[]{},: ', $cursor);
+
+        if ($cursor === $offset) {
+            throw new ParseException('Malformed unquoted YAML string.');
+        }
+
+        return substr($this->currentLine, $offset, $cursor - $offset);
+    }
+
+    private function lexInlineMapping(int &$cursor = 0): string
+    {
+        return $this->lexInlineStructure($cursor, '}');
+    }
+
+    private function lexInlineSequence(int &$cursor = 0): string
+    {
+        return $this->lexInlineStructure($cursor, ']');
+    }
+
+    private function lexInlineStructure(int &$cursor, string $closingTag): string
+    {
+        $value = $this->currentLine[$cursor];
+        ++$cursor;
+
+        do {
+            $this->consumeWhitespaces($cursor);
+
+            while (isset($this->currentLine[$cursor])) {
+                switch ($this->currentLine[$cursor]) {
+                    case '"':
+                    case "'":
+                        $value .= $this->lexInlineQuotedString($cursor);
+                        break;
+                    case ':':
+                    case ',':
+                        $value .= $this->currentLine[$cursor];
+                        ++$cursor;
+                        break;
+                    case '{':
+                        $value .= $this->lexInlineMapping($cursor);
+                        break;
+                    case '[':
+                        $value .= $this->lexInlineSequence($cursor);
+                        break;
+                    case $closingTag:
+                        $value .= $this->currentLine[$cursor];
+                        ++$cursor;
+
+                        return $value;
+                    case '#':
+                        break 2;
+                    default:
+                        $value .= $this->lexUnquotedString($cursor);
+                }
+
+                if ($this->consumeWhitespaces($cursor)) {
+                    $value .= ' ';
+                }
+            }
+
+            if ($this->hasMoreLines()) {
+                $cursor = 0;
+            }
+        } while ($this->moveToNextLine());
+
+        throw new ParseException('Malformed inline YAML string.');
+    }
+
+    private function consumeWhitespaces(int &$cursor): bool
+    {
+        $whitespacesConsumed = 0;
+
+        do {
+            $whitespaceOnlyTokenLength = strspn($this->currentLine, ' ', $cursor);
+            $whitespacesConsumed += $whitespaceOnlyTokenLength;
+            $cursor += $whitespaceOnlyTokenLength;
+
+            if (isset($this->currentLine[$cursor])) {
+                return 0 < $whitespacesConsumed;
+            }
+
+            if ($this->hasMoreLines()) {
+                $cursor = 0;
+            }
+        } while ($this->moveToNextLine());
+
+        return 0 < $whitespacesConsumed;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/README.md
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/README.md	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/README.md	(revision 8435)
@@ -0,0 +1,13 @@
+Yaml Component
+==============
+
+The Yaml component loads and dumps YAML files.
+
+Resources
+---------
+
+ * [Documentation](https://symfony.com/doc/current/components/yaml.html)
+ * [Contributing](https://symfony.com/doc/current/contributing/index.html)
+ * [Report issues](https://github.com/symfony/symfony/issues) and
+   [send Pull Requests](https://github.com/symfony/symfony/pulls)
+   in the [main Symfony repository](https://github.com/symfony/symfony)
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/Resources/bin/yaml-lint
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/Resources/bin/yaml-lint	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/Resources/bin/yaml-lint	(revision 8435)
@@ -0,0 +1,49 @@
+#!/usr/bin/env php
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if ('cli' !== \PHP_SAPI) {
+    throw new Exception('This script must be run from the command line.');
+}
+
+/**
+ * Runs the Yaml lint command.
+ *
+ * @author Jan SchÃ€dlich <jan.schaedlich@sensiolabs.de>
+ */
+
+use Symfony\Component\Console\Application;
+use Symfony\Component\Yaml\Command\LintCommand;
+
+function includeIfExists(string $file): bool
+{
+    return file_exists($file) && include $file;
+}
+
+if (
+    !includeIfExists(__DIR__ . '/../../../../autoload.php') &&
+    !includeIfExists(__DIR__ . '/../../vendor/autoload.php') &&
+    !includeIfExists(__DIR__ . '/../../../../../../vendor/autoload.php')
+) {
+    fwrite(STDERR, 'Install dependencies using Composer.'.PHP_EOL);
+    exit(1);
+}
+
+if (!class_exists(Application::class)) {
+    fwrite(STDERR, 'You need the "symfony/console" component in order to run the Yaml linter.'.PHP_EOL);
+    exit(1);
+}
+
+(new Application())->add($command = new LintCommand())
+    ->getApplication()
+    ->setDefaultCommand($command->getName(), true)
+    ->run()
+;
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/Tag/TaggedValue.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/Tag/TaggedValue.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/Tag/TaggedValue.php	(revision 8435)
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Yaml\Tag;
+
+/**
+ * @author Nicolas Grekas <p@tchwork.com>
+ * @author Guilhem N. <egetick@gmail.com>
+ */
+final class TaggedValue
+{
+    private string $tag;
+    private mixed $value;
+
+    public function __construct(string $tag, mixed $value)
+    {
+        $this->tag = $tag;
+        $this->value = $value;
+    }
+
+    public function getTag(): string
+    {
+        return $this->tag;
+    }
+
+    public function getValue(): mixed
+    {
+        return $this->value;
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/Unescaper.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/Unescaper.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/Unescaper.php	(revision 8435)
@@ -0,0 +1,108 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Yaml;
+
+use Symfony\Component\Yaml\Exception\ParseException;
+
+/**
+ * Unescaper encapsulates unescaping rules for single and double-quoted
+ * YAML strings.
+ *
+ * @author Matthew Lewinski <matthew@lewinski.org>
+ *
+ * @internal
+ */
+class Unescaper
+{
+    /**
+     * Regex fragment that matches an escaped character in a double quoted string.
+     */
+    public const REGEX_ESCAPED_CHARACTER = '\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|.)';
+
+    /**
+     * Unescapes a single quoted string.
+     *
+     * @param string $value A single quoted string
+     */
+    public function unescapeSingleQuotedString(string $value): string
+    {
+        return str_replace('\'\'', '\'', $value);
+    }
+
+    /**
+     * Unescapes a double quoted string.
+     *
+     * @param string $value A double quoted string
+     */
+    public function unescapeDoubleQuotedString(string $value): string
+    {
+        $callback = fn ($match) => $this->unescapeCharacter($match[0]);
+
+        // evaluate the string
+        return preg_replace_callback('/'.self::REGEX_ESCAPED_CHARACTER.'/u', $callback, $value);
+    }
+
+    /**
+     * Unescapes a character that was found in a double-quoted string.
+     *
+     * @param string $value An escaped character
+     */
+    private function unescapeCharacter(string $value): string
+    {
+        return match ($value[1]) {
+            '0' => "\x0",
+            'a' => "\x7",
+            'b' => "\x8",
+            't' => "\t",
+            "\t" => "\t",
+            'n' => "\n",
+            'v' => "\xB",
+            'f' => "\xC",
+            'r' => "\r",
+            'e' => "\x1B",
+            ' ' => ' ',
+            '"' => '"',
+            '/' => '/',
+            '\\' => '\\',
+            // U+0085 NEXT LINE
+            'N' => "\xC2\x85",
+            // U+00A0 NO-BREAK SPACE
+            '_' => "\xC2\xA0",
+            // U+2028 LINE SEPARATOR
+            'L' => "\xE2\x80\xA8",
+            // U+2029 PARAGRAPH SEPARATOR
+            'P' => "\xE2\x80\xA9",
+            'x' => self::utf8chr(hexdec(substr($value, 2, 2))),
+            'u' => self::utf8chr(hexdec(substr($value, 2, 4))),
+            'U' => self::utf8chr(hexdec(substr($value, 2, 8))),
+            default => throw new ParseException(sprintf('Found unknown escape character "%s".', $value)),
+        };
+    }
+
+    /**
+     * Get the UTF-8 character for the given code point.
+     */
+    private static function utf8chr(int $c): string
+    {
+        if (0x80 > $c %= 0x200000) {
+            return \chr($c);
+        }
+        if (0x800 > $c) {
+            return \chr(0xC0 | $c >> 6).\chr(0x80 | $c & 0x3F);
+        }
+        if (0x10000 > $c) {
+            return \chr(0xE0 | $c >> 12).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F);
+        }
+
+        return \chr(0xF0 | $c >> 18).\chr(0x80 | $c >> 12 & 0x3F).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/Yaml.php
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/Yaml.php	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/Yaml.php	(revision 8435)
@@ -0,0 +1,97 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Yaml;
+
+use Symfony\Component\Yaml\Exception\ParseException;
+
+/**
+ * Yaml offers convenience methods to load and dump YAML.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @final
+ */
+class Yaml
+{
+    public const DUMP_OBJECT = 1;
+    public const PARSE_EXCEPTION_ON_INVALID_TYPE = 2;
+    public const PARSE_OBJECT = 4;
+    public const PARSE_OBJECT_FOR_MAP = 8;
+    public const DUMP_EXCEPTION_ON_INVALID_TYPE = 16;
+    public const PARSE_DATETIME = 32;
+    public const DUMP_OBJECT_AS_MAP = 64;
+    public const DUMP_MULTI_LINE_LITERAL_BLOCK = 128;
+    public const PARSE_CONSTANT = 256;
+    public const PARSE_CUSTOM_TAGS = 512;
+    public const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024;
+    public const DUMP_NULL_AS_TILDE = 2048;
+    public const DUMP_NUMERIC_KEY_AS_STRING = 4096;
+
+    /**
+     * Parses a YAML file into a PHP value.
+     *
+     * Usage:
+     *
+     *     $array = Yaml::parseFile('config.yml');
+     *     print_r($array);
+     *
+     * @param string $filename The path to the YAML file to be parsed
+     * @param int    $flags    A bit field of PARSE_* constants to customize the YAML parser behavior
+     *
+     * @throws ParseException If the file could not be read or the YAML is not valid
+     */
+    public static function parseFile(string $filename, int $flags = 0): mixed
+    {
+        $yaml = new Parser();
+
+        return $yaml->parseFile($filename, $flags);
+    }
+
+    /**
+     * Parses YAML into a PHP value.
+     *
+     *  Usage:
+     *  <code>
+     *   $array = Yaml::parse(file_get_contents('config.yml'));
+     *   print_r($array);
+     *  </code>
+     *
+     * @param string $input A string containing YAML
+     * @param int    $flags A bit field of PARSE_* constants to customize the YAML parser behavior
+     *
+     * @throws ParseException If the YAML is not valid
+     */
+    public static function parse(string $input, int $flags = 0): mixed
+    {
+        $yaml = new Parser();
+
+        return $yaml->parse($input, $flags);
+    }
+
+    /**
+     * Dumps a PHP value to a YAML string.
+     *
+     * The dump method, when supplied with an array, will do its best
+     * to convert the array into friendly YAML.
+     *
+     * @param mixed $input  The PHP value
+     * @param int   $inline The level where you switch to inline YAML
+     * @param int   $indent The amount of spaces to use for indentation of nested nodes
+     * @param int   $flags  A bit field of DUMP_* constants to customize the dumped YAML string
+     */
+    public static function dump(mixed $input, int $inline = 2, int $indent = 4, int $flags = 0): string
+    {
+        $yaml = new Dumper($indent);
+
+        return $yaml->dump($input, $inline, 0, $flags);
+    }
+}
Index: /mods/mod_rechnungen/lib/vendor/symfony/yaml/composer.json
===================================================================
--- /mods/mod_rechnungen/lib/vendor/symfony/yaml/composer.json	(revision 8435)
+++ /mods/mod_rechnungen/lib/vendor/symfony/yaml/composer.json	(revision 8435)
@@ -0,0 +1,39 @@
+{
+    "name": "symfony/yaml",
+    "type": "library",
+    "description": "Loads and dumps YAML files",
+    "keywords": [],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Fabien Potencier",
+            "email": "fabien@symfony.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=8.1",
+        "symfony/deprecation-contracts": "^2.5|^3",
+        "symfony/polyfill-ctype": "^1.8"
+    },
+    "require-dev": {
+        "symfony/console": "^5.4|^6.0|^7.0"
+    },
+    "conflict": {
+        "symfony/console": "<5.4"
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Component\\Yaml\\": "" },
+        "exclude-from-classmap": [
+            "/Tests/"
+        ]
+    },
+    "bin": [
+        "Resources/bin/yaml-lint"
+    ],
+    "minimum-stability": "dev"
+}
